Compare commits
6
Commits
e2099a3beb
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e946c8d9cc | ||
|
|
92e432d86d | ||
|
|
194a95974a | ||
|
|
32777404c9 | ||
|
|
02fb314ea6 | ||
|
|
0908d1c148 |
@@ -1,14 +1,6 @@
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
node_modules
|
node_modules
|
||||||
/dist
|
/dist
|
||||||
src/configs/newDonateShop/roulette.js
|
|
||||||
src/configs/newDonateShop/items.js
|
|
||||||
src/configs/newDonateShop/rarityPrices.js
|
|
||||||
src/configs/newDonateShop/primeAccount.js
|
|
||||||
src/configs/newDonateShop/coinkits.js
|
|
||||||
src/configs/gameMakeWeapon/
|
|
||||||
src/configs/gameMetalPlant/
|
|
||||||
src/configs/GameMetalPlant/
|
|
||||||
|
|
||||||
# local env files
|
# local env files
|
||||||
.env.local
|
.env.local
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -422,3 +422,8 @@
|
|||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@font-face { font-family: 'Oswald'; src: url('Oswald-400.ttf') format('truetype'); font-weight: 400; font-style: normal; }
|
||||||
|
@font-face { font-family: 'Oswald'; src: url('Oswald-500.ttf') format('truetype'); font-weight: 500; font-style: normal; }
|
||||||
|
@font-face { font-family: 'Oswald'; src: url('Oswald-600.ttf') format('truetype'); font-weight: 600; font-style: normal; }
|
||||||
|
@font-face { font-family: 'Oswald'; src: url('Oswald-700.ttf') format('truetype'); font-weight: 700; font-style: normal; }
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@
|
|||||||
<dialog-menu-overlay v-if="dialogMenuShow"/>
|
<dialog-menu-overlay v-if="dialogMenuShow"/>
|
||||||
<TimerTemo v-if="timeTemo > 0" :time="timeTemo" :length="lengthTemo"/>
|
<TimerTemo v-if="timeTemo > 0" :time="timeTemo" :length="lengthTemo"/>
|
||||||
<LoadScreen v-if="loadScreen"/>
|
<LoadScreen v-if="loadScreen"/>
|
||||||
<MenuPicker/>
|
<MenuPicker v-if="isDev"/>
|
||||||
<!-- <DevConsole v-if="console.show"/> -->
|
<!-- <DevConsole v-if="console.show"/> -->
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
export default {}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export default [{ level: 1, exp: 0 }]
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export default [{ level: 1, exp: 0 }]
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export default []
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export default {}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export default { price: 0, paymentForBusinessInDays: 14 }
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export default { 0: { Price: 0 } }
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export default {}
|
||||||
@@ -2,8 +2,8 @@ export default {
|
|||||||
namespaced: true,
|
namespaced: true,
|
||||||
state: {
|
state: {
|
||||||
local: null,
|
local: null,
|
||||||
apiURL: "https://play.just-rp.com/api/localize/", //https://play.just-rp.com/api/localize/
|
apiURL: "https://web-whistler-626.redl.app/api/localize/", //https://web-whistler-626.redl.app/api/localize/
|
||||||
listUrl: "https://play.just-rp.com/api/localize/list",
|
listUrl: "https://web-whistler-626.redl.app/api/localize/list",
|
||||||
langs:{
|
langs:{
|
||||||
list:null,
|
list:null,
|
||||||
cur: 'no'
|
cur: 'no'
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ export default {
|
|||||||
sounds,
|
sounds,
|
||||||
loaded:{},
|
loaded:{},
|
||||||
current: "",
|
current: "",
|
||||||
host: "https://play.just-rp.com/sounds"
|
host: "https://web-whistler-626.redl.app/sounds"
|
||||||
},
|
},
|
||||||
mutations: {
|
mutations: {
|
||||||
play(state, {name, volume = 1, loop = false}){
|
play(state, {name, volume = 1, loop = false}){
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
class="animations-list__item"
|
class="animations-list__item"
|
||||||
v-for="item in currentAnimations.array"
|
v-for="item in currentAnimations.array"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
v-bind:style="{ 'background-image': 'url(https://play.just-rp.com/animations/items/' + item.key + '.gif)' }"
|
v-bind:style="{ 'background-image': 'url(https://web-whistler-626.redl.app/animations/items/' + item.key + '.gif)' }"
|
||||||
@click="saveAnim(item)"
|
@click="saveAnim(item)"
|
||||||
>
|
>
|
||||||
<div class="info">
|
<div class="info">
|
||||||
|
|||||||
@@ -63,7 +63,8 @@ export default {
|
|||||||
position: relative;
|
position: relative;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: flex-start;
|
||||||
|
padding: 0 4rem 0 4rem;
|
||||||
}
|
}
|
||||||
&__line-left {
|
&__line-left {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|||||||
@@ -94,12 +94,14 @@ export default {
|
|||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.tab {
|
.tab {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
gap: 7.3rem;
|
||||||
&__side {
|
&__side {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
margin: 0 7.3rem 0 0;
|
margin: 0;
|
||||||
.title {
|
.title {
|
||||||
|
font-family: 'Oswald', sans-serif;
|
||||||
font-size: 7.5rem;
|
font-size: 7.5rem;
|
||||||
line-height: 7rem;
|
line-height: 7rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|||||||
@@ -110,13 +110,15 @@ export default {
|
|||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.tab {
|
.tab {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
gap: 6rem;
|
||||||
&__side {
|
&__side {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
.title {
|
.title {
|
||||||
|
font-family: 'Oswald', sans-serif;
|
||||||
font-size: 6rem;
|
font-size: 6rem;
|
||||||
line-height: 5rem;
|
line-height: 5.4rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
width: 25rem;
|
width: 25rem;
|
||||||
margin: 0 0 0.5rem 0;
|
margin: 0 0 0.5rem 0;
|
||||||
|
|||||||
@@ -64,9 +64,10 @@ export default {
|
|||||||
position: relative;
|
position: relative;
|
||||||
margin: 0 0 1.9rem 0;
|
margin: 0 0 1.9rem 0;
|
||||||
.title {
|
.title {
|
||||||
font-size: 8.5rem;
|
font-family: 'Oswald', sans-serif;
|
||||||
line-height: 8rem;
|
font-size: 7rem;
|
||||||
font-weight: bold;
|
line-height: 8.5rem;
|
||||||
|
font-weight: 600;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
width: 36.1rem;
|
width: 36.1rem;
|
||||||
|
|||||||
@@ -111,13 +111,15 @@ export default {
|
|||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.tab {
|
.tab {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
gap: 6rem;
|
||||||
&__side {
|
&__side {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
.title {
|
.title {
|
||||||
|
font-family: 'Oswald', sans-serif;
|
||||||
font-size: 6rem;
|
font-size: 6rem;
|
||||||
line-height: 5rem;
|
line-height: 5.4rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
width: 25rem;
|
width: 25rem;
|
||||||
margin: 0 0 0.5rem 0;
|
margin: 0 0 0.5rem 0;
|
||||||
|
|||||||
@@ -65,14 +65,16 @@ export default {
|
|||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.container {
|
.container {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
gap: 6rem;
|
||||||
width: fit-content;
|
width: fit-content;
|
||||||
}
|
}
|
||||||
.about {
|
.about {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
width: 25rem;
|
width: 25rem;
|
||||||
&__title {
|
&__title {
|
||||||
|
font-family: 'Oswald', sans-serif;
|
||||||
font-size: 6rem;
|
font-size: 6rem;
|
||||||
line-height: 5rem;
|
line-height: 5.4rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
&__text {
|
&__text {
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ export default {
|
|||||||
width: 7rem;
|
width: 7rem;
|
||||||
min-width: 7rem;
|
min-width: 7rem;
|
||||||
padding-right: 1rem;
|
padding-right: 1rem;
|
||||||
border-right: 1px solid rgba(255, 255, 255, 0.2);
|
border-right: 0.05rem solid rgba(255, 255, 255, 0.2);
|
||||||
padding-bottom: 8rem;
|
padding-bottom: 8rem;
|
||||||
margin: 2rem 1rem 0 0;
|
margin: 2rem 1rem 0 0;
|
||||||
&-info{
|
&-info{
|
||||||
@@ -163,7 +163,7 @@ export default {
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
padding-bottom: 1.5rem;
|
padding-bottom: 1.5rem;
|
||||||
margin-bottom: 1.5rem;
|
margin-bottom: 1.5rem;
|
||||||
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
border-bottom: 0.05rem solid rgba(255, 255, 255, 0.1);
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
&-item{
|
&-item{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@@ -177,7 +177,7 @@ export default {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-size: .9rem;
|
font-size: .9rem;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
border-radius: 1px;
|
border-radius: 0.05rem;
|
||||||
transition: .3s;
|
transition: .3s;
|
||||||
&.active{
|
&.active{
|
||||||
background-color: #B6D300;
|
background-color: #B6D300;
|
||||||
|
|||||||
@@ -103,13 +103,13 @@ export default {
|
|||||||
position: relative;
|
position: relative;
|
||||||
background: url(/img/optionsMenu/referalsTab/bg.png) no-repeat top -1rem center;
|
background: url(/img/optionsMenu/referalsTab/bg.png) no-repeat top -1rem center;
|
||||||
background-size: auto 57rem ;
|
background-size: auto 57rem ;
|
||||||
//border: 1px solid #fff;
|
//border: 0.05rem solid #fff;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
padding-top: 2rem;
|
padding-top: 2rem;
|
||||||
&-side{
|
&-side{
|
||||||
width: 26rem;
|
width: 26rem;
|
||||||
//height: 48rem;
|
//height: 48rem;
|
||||||
//border: 1px solid #fff;
|
//border: 0.05rem solid #fff;
|
||||||
}
|
}
|
||||||
&-title{
|
&-title{
|
||||||
position: relative;
|
position: relative;
|
||||||
@@ -156,7 +156,7 @@ export default {
|
|||||||
}
|
}
|
||||||
&-progress{
|
&-progress{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
//border: 1px solid #fff;
|
//border: 0.05rem solid #fff;
|
||||||
height: 32rem;
|
height: 32rem;
|
||||||
margin-top: 1rem;
|
margin-top: 1rem;
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
|
|||||||
@@ -118,36 +118,36 @@ export default {
|
|||||||
|
|
||||||
.reports-layout {
|
.reports-layout {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 300px 1fr;
|
grid-template-columns: 15rem 1fr;
|
||||||
gap: 24px;
|
gap: 1.2rem;
|
||||||
height: 600px;
|
height: 30rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.reports-info {
|
.reports-info {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 16px;
|
gap: 0.8rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.wide-btn {
|
.wide-btn {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 12px;
|
padding: 0.6rem;
|
||||||
font-size: 14px;
|
font-size: 0.7rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.rating-card {
|
.rating-card {
|
||||||
.stars-container {
|
.stars-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 8px;
|
gap: 0.4rem;
|
||||||
margin-top: 12px;
|
margin-top: 0.6rem;
|
||||||
i {
|
i {
|
||||||
font-size: 24px;
|
font-size: 1.2rem;
|
||||||
color: rgba(255, 255, 255, 0.1);
|
color: rgba(255, 255, 255, 0.1);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: var(--transition);
|
transition: var(--transition);
|
||||||
&.active {
|
&.active {
|
||||||
color: #ffc107;
|
color: #ffc107;
|
||||||
text-shadow: 0 0 10px rgba(255, 193, 7, 0.4);
|
text-shadow: 0 0 0.5rem rgba(255, 193, 7, 0.4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -157,39 +157,39 @@ export default {
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
background: rgba(0, 0, 0, 0.2);
|
background: rgba(0, 0, 0, 0.2);
|
||||||
border-radius: 16px;
|
border-radius: 0.8rem;
|
||||||
border: 1px solid var(--border-color);
|
border: 0.05rem solid var(--border-color);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.messages-container {
|
.messages-container {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
padding: 20px;
|
padding: 1rem;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 12px;
|
gap: 0.6rem;
|
||||||
|
|
||||||
&::-webkit-scrollbar { width: 4px; }
|
&::-webkit-scrollbar { width: 0.2rem; }
|
||||||
&::-webkit-scrollbar-thumb { background: var(--border-color); border-radius: 4px; }
|
&::-webkit-scrollbar-thumb { background: var(--border-color); border-radius: 0.2rem; }
|
||||||
}
|
}
|
||||||
|
|
||||||
.input-wrapper {
|
.input-wrapper {
|
||||||
padding: 16px;
|
padding: 0.8rem;
|
||||||
background: rgba(255, 255, 255, 0.02);
|
background: rgba(255, 255, 255, 0.02);
|
||||||
border-top: 1px solid var(--border-color);
|
border-top: 0.05rem solid var(--border-color);
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 12px;
|
gap: 0.6rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.chat-input {
|
.chat-input {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
background: rgba(255, 255, 255, 0.05);
|
background: rgba(255, 255, 255, 0.05);
|
||||||
border: 1px solid var(--border-color);
|
border: 0.05rem solid var(--border-color);
|
||||||
border-radius: 10px;
|
border-radius: 0.5rem;
|
||||||
padding: 12px 16px;
|
padding: 0.6rem 0.8rem;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-size: 14px;
|
font-size: 0.7rem;
|
||||||
outline: none;
|
outline: none;
|
||||||
transition: var(--transition);
|
transition: var(--transition);
|
||||||
&:focus {
|
&:focus {
|
||||||
@@ -199,9 +199,9 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.send-btn {
|
.send-btn {
|
||||||
width: 44px;
|
width: 2.2rem;
|
||||||
height: 44px;
|
height: 2.2rem;
|
||||||
border-radius: 10px;
|
border-radius: 0.5rem;
|
||||||
background: var(--primary-color);
|
background: var(--primary-color);
|
||||||
border: none;
|
border: none;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
@@ -212,7 +212,7 @@ export default {
|
|||||||
transition: var(--transition);
|
transition: var(--transition);
|
||||||
&:hover:not(:disabled) {
|
&:hover:not(:disabled) {
|
||||||
background: var(--primary-hover);
|
background: var(--primary-hover);
|
||||||
transform: translateY(-2px);
|
transform: translateY(-0.1rem);
|
||||||
}
|
}
|
||||||
&:disabled {
|
&:disabled {
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
|
|||||||
@@ -92,10 +92,10 @@ export default {
|
|||||||
height: 3rem;
|
height: 3rem;
|
||||||
font-size: 1.2rem;
|
font-size: 1.2rem;
|
||||||
line-height: 1.45rem;
|
line-height: 1.45rem;
|
||||||
border: 1px solid rgba(#000, 0);
|
border: 0.05rem solid rgba(#000, 0);
|
||||||
&-selected{
|
&-selected{
|
||||||
background: rgba(255, 255, 255, 0.05);
|
background: rgba(255, 255, 255, 0.05);
|
||||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
border: 0.05rem solid rgba(255, 255, 255, 0.1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,8 +72,8 @@ import { mapState, mapGetters } from 'vuex'
|
|||||||
import InfoItem from './common/InfoItem.vue'
|
import InfoItem from './common/InfoItem.vue'
|
||||||
import ExtraItem from './common/ExtraItem.vue'
|
import ExtraItem from './common/ExtraItem.vue'
|
||||||
import ActionItem from './common/ActionItem.vue'
|
import ActionItem from './common/ActionItem.vue'
|
||||||
import TransportModal from './TransportModal.vue'
|
import TransportModal from './TransportModal'
|
||||||
import BusinessModal from './BusinessModal.vue'
|
import BusinessModal from './BusinessModal'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'StatisticsTab',
|
name: 'StatisticsTab',
|
||||||
@@ -149,7 +149,7 @@ export default {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background: rgba(0, 0, 0, 0.6);
|
background: rgba(0, 0, 0, 0.6);
|
||||||
backdrop-filter: blur(5px);
|
backdrop-filter: blur(0.25rem);
|
||||||
z-index: 100;
|
z-index: 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ export default {
|
|||||||
right: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
background: rgba(0, 0, 0, 0.8);
|
background: rgba(0, 0, 0, 0.8);
|
||||||
backdrop-filter: blur(15px);
|
backdrop-filter: blur(0.75rem);
|
||||||
z-index: 2000;
|
z-index: 2000;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -56,22 +56,22 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.danger-modal {
|
.danger-modal {
|
||||||
width: 400px;
|
width: 20rem;
|
||||||
border-color: rgba(255, 71, 71, 0.3);
|
border-color: rgba(255, 71, 71, 0.3);
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.danger-icon {
|
.danger-icon {
|
||||||
font-size: 64px;
|
font-size: 3.2rem;
|
||||||
color: #ff4747;
|
color: #ff4747;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 1rem;
|
||||||
filter: drop-shadow(0 0 15px rgba(255, 71, 71, 0.3));
|
filter: drop-shadow(0 0 0.75rem rgba(255, 71, 71, 0.3));
|
||||||
}
|
}
|
||||||
|
|
||||||
.modal-subtitle {
|
.modal-subtitle {
|
||||||
font-size: 16px;
|
font-size: 0.8rem;
|
||||||
color: rgba(255, 255, 255, 0.8);
|
color: rgba(255, 255, 255, 0.8);
|
||||||
margin-bottom: 30px;
|
margin-bottom: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.danger-btn {
|
.danger-btn {
|
||||||
@@ -79,7 +79,7 @@ export default {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
&:hover {
|
&:hover {
|
||||||
background: #ff6b6b;
|
background: #ff6b6b;
|
||||||
box-shadow: 0 4px 20px rgba(255, 71, 71, 0.4);
|
box-shadow: 0 0.2rem 1rem rgba(255, 71, 71, 0.4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -23,7 +23,7 @@ export default {
|
|||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
border: 0.05rem solid rgba(255, 255, 255, 0.1);
|
||||||
background: rgba(255, 255, 255, 0.1);
|
background: rgba(255, 255, 255, 0.1);
|
||||||
&::after {
|
&::after {
|
||||||
content: "";
|
content: "";
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ export default {
|
|||||||
left: 50%;
|
left: 50%;
|
||||||
height: 0.1rem;
|
height: 0.1rem;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
box-shadow: 0px -1rem 2rem 0.2rem #A2BC1F;
|
box-shadow: 0 -1rem 2rem 0.2rem #A2BC1F;
|
||||||
background: #A2BC1F;
|
background: #A2BC1F;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ export default {
|
|||||||
right: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
background: rgba(0, 0, 0, 0.7);
|
background: rgba(0, 0, 0, 0.7);
|
||||||
backdrop-filter: blur(10px);
|
backdrop-filter: blur(0.5rem);
|
||||||
z-index: 2000;
|
z-index: 2000;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -87,25 +87,25 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.modal-window {
|
.modal-window {
|
||||||
width: 450px;
|
width: 22.5rem;
|
||||||
background: var(--bg-main);
|
background: var(--bg-main);
|
||||||
border: 1px solid var(--border-color);
|
border: 0.05rem solid var(--border-color);
|
||||||
border-radius: 20px;
|
border-radius: 1rem;
|
||||||
padding: 30px;
|
padding: 1.5rem;
|
||||||
box-shadow: 0 25px 50px rgba(0, 0, 0, 0.5);
|
box-shadow: 0 1.25rem 2.5rem rgba(0, 0, 0, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
.modal-header {
|
.modal-header {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-bottom: 24px;
|
margin-bottom: 1.2rem;
|
||||||
padding-bottom: 12px;
|
padding-bottom: 0.6rem;
|
||||||
border-bottom: 1px solid var(--border-color);
|
border-bottom: 0.05rem solid var(--border-color);
|
||||||
h3 {
|
h3 {
|
||||||
font-size: 18px;
|
font-size: 0.9rem;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
letter-spacing: 1px;
|
letter-spacing: 0.05rem;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -113,9 +113,9 @@ export default {
|
|||||||
.modal-close {
|
.modal-close {
|
||||||
background: rgba(255, 255, 255, 0.05);
|
background: rgba(255, 255, 255, 0.05);
|
||||||
border: none;
|
border: none;
|
||||||
width: 32px;
|
width: 1.6rem;
|
||||||
height: 32px;
|
height: 1.6rem;
|
||||||
border-radius: 8px;
|
border-radius: 0.4rem;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@@ -129,20 +129,20 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.modal-subtitle {
|
.modal-subtitle {
|
||||||
font-size: 14px;
|
font-size: 0.7rem;
|
||||||
color: var(--text-muted);
|
color: var(--text-muted);
|
||||||
margin-bottom: 20px;
|
margin-bottom: 1rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialog-input {
|
.dialog-input {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background: rgba(255, 255, 255, 0.05);
|
background: rgba(255, 255, 255, 0.05);
|
||||||
border: 1px solid var(--border-color);
|
border: 0.05rem solid var(--border-color);
|
||||||
border-radius: 10px;
|
border-radius: 0.5rem;
|
||||||
padding: 12px 16px;
|
padding: 0.6rem 0.8rem;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 0.8rem;
|
||||||
outline: none;
|
outline: none;
|
||||||
transition: var(--transition);
|
transition: var(--transition);
|
||||||
&:focus {
|
&:focus {
|
||||||
@@ -151,23 +151,23 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.key-display {
|
.key-display {
|
||||||
font-size: 32px;
|
font-size: 1.6rem;
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
color: var(--primary-color);
|
color: var(--primary-color);
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin: 20px 0;
|
margin: 1rem 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialog-footer {
|
.dialog-footer {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 12px;
|
gap: 0.6rem;
|
||||||
margin-top: 24px;
|
margin-top: 1.2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.confirm-btn, .cancel-btn {
|
.confirm-btn, .cancel-btn {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
padding: 12px;
|
padding: 0.6rem;
|
||||||
border-radius: 10px;
|
border-radius: 0.5rem;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
@@ -180,13 +180,13 @@ export default {
|
|||||||
color: #fff;
|
color: #fff;
|
||||||
&:hover {
|
&:hover {
|
||||||
background: var(--primary-hover);
|
background: var(--primary-hover);
|
||||||
box-shadow: 0 4px 15px rgba(109, 85, 166, 0.4);
|
box-shadow: 0 0.2rem 0.75rem rgba(109, 85, 166, 0.4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.cancel-btn {
|
.cancel-btn {
|
||||||
background: rgba(255, 255, 255, 0.05);
|
background: rgba(255, 255, 255, 0.05);
|
||||||
border: 1px solid var(--border-color);
|
border: 0.05rem solid var(--border-color);
|
||||||
color: var(--text-muted);
|
color: var(--text-muted);
|
||||||
&:hover {
|
&:hover {
|
||||||
background: rgba(255, 255, 255, 0.1);
|
background: rgba(255, 255, 255, 0.1);
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
|
<div class="options-menu-root">
|
||||||
<div class="app-container show">
|
<div class="app-container show">
|
||||||
<Sidebar
|
<Sidebar
|
||||||
:active-section="rightTab"
|
:active-section="rightTab"
|
||||||
@@ -32,6 +33,7 @@
|
|||||||
<Dialog v-if="dialog" :dialog="dialog" />
|
<Dialog v-if="dialog" :dialog="dialog" />
|
||||||
<CaptAttack v-if="captAttack" />
|
<CaptAttack v-if="captAttack" />
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
+275
-271
File diff suppressed because it is too large
Load Diff
@@ -31,7 +31,7 @@ import { mapActions, mapGetters, mapState } from 'vuex';
|
|||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
imgUrl: "https://play.just-rp.com/languages/",
|
imgUrl: "https://web-whistler-626.redl.app/languages/",
|
||||||
current: "ru"
|
current: "ru"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
+37
-13
@@ -5,7 +5,7 @@
|
|||||||
Ничего устанавливать руками не нужно:
|
Ничего устанавливать руками не нужно:
|
||||||
1. Зайди на **[redl.io](https://redl.io)** и закажи игровой сервер или VDS (подойдёт конфиг от 2 CPU / 4 ГБ RAM).
|
1. Зайди на **[redl.io](https://redl.io)** и закажи игровой сервер или VDS (подойдёт конфиг от 2 CPU / 4 ГБ RAM).
|
||||||
2. Открой чат ИИ-агента в панели и напиши:
|
2. Открой чат ИИ-агента в панели и напиши:
|
||||||
> «Разверни мод Whistler из репозитория https://git-1.redl.app/1themotiv/whistler — базы, сборку, конфиги и сервис локализации сделай сам»
|
> «Разверни мод Whistler из репозитория https://git-1.redl.app/robimobi/whistler — базы, сборку, конфиги и сервис локализации сделай сам»
|
||||||
3. Агент сам поставит .NET, MySQL и RAGE:MP, зальёт схемы баз, соберёт мод, поднимет сервис локализации и отдаст готовый адрес сервера. Любые доработки дальше — тоже словами в чат.
|
3. Агент сам поставит .NET, MySQL и RAGE:MP, зальёт схемы баз, соберёт мод, поднимет сервис локализации и отдаст готовый адрес сервера. Любые доработки дальше — тоже словами в чат.
|
||||||
|
|
||||||
## Способ 2 — вручную
|
## Способ 2 — вручную
|
||||||
@@ -20,6 +20,11 @@
|
|||||||
(иначе падение «Couldn't find a valid ICU package» сразу после старта пакетов).
|
(иначе падение «Couldn't find a valid ICU package» сразу после старта пакетов).
|
||||||
3. **В `settings.json` ДВЕ секции про базу — заполняйте обе:** `ConnectionStrings` (EF Core) и отдельная секция `MySQL` (legacy-SDK мода: Server/User/Password/DataBase/Port). Если заполнить только первую — мод упадёт на `Whistler.SDK.MySQL` с таймаутом коннекта.
|
3. **В `settings.json` ДВЕ секции про базу — заполняйте обе:** `ConnectionStrings` (EF Core) и отдельная секция `MySQL` (legacy-SDK мода: Server/User/Password/DataBase/Port). Если заполнить только первую — мод упадёт на `Whistler.SDK.MySQL` с таймаутом коннекта.
|
||||||
|
|
||||||
|
4. **gameconfig.xml обязателен.** В `client_packages/game_resources/common/data/gameconfig.xml`
|
||||||
|
лежит расширенный конфиг лимитов GTA V (архетипы 64000, интерьеры 300, анимированные здания 1200).
|
||||||
|
Без него клиент вылетает при загрузке 133 паков — ванильных пулов не хватает. Он уже в комплекте;
|
||||||
|
если менять — берите версию, поднимающую лимиты (напр. gameconfig от ragemp.pro), не ванильную.
|
||||||
|
|
||||||
Также: в `conf.json` поле `bind` должно быть `0.0.0.0` для публичного сервера (в dev-конфиге может стоять 127.0.0.1 — тогда снаружи никто не подключится).
|
Также: в `conf.json` поле `bind` должно быть `0.0.0.0` для публичного сервера (в dev-конфиге может стоять 127.0.0.1 — тогда снаружи никто не подключится).
|
||||||
|
|
||||||
Пошагово: что поставить, какие команды выполнить, как поднять веб-сервис локализации и как зайти в игру. Разделы: [Linux](#linux-ubuntudebian) · [Windows](#windows-10--server) · [Сервис локализации](#сервис-локализации-api) · [Первый вход](#первый-вход-в-игру) · [Типовые проблемы](#типовые-проблемы).
|
Пошагово: что поставить, какие команды выполнить, как поднять веб-сервис локализации и как зайти в игру. Разделы: [Linux](#linux-ubuntudebian) · [Windows](#windows-10--server) · [Сервис локализации](#сервис-локализации-api) · [Первый вход](#первый-вход-в-игру) · [Типовые проблемы](#типовые-проблемы).
|
||||||
@@ -30,7 +35,7 @@
|
|||||||
|---|---|---|
|
|---|---|---|
|
||||||
| RAGE:MP Server | актуальный (линукс `linux_x64.tar.gz` / виндовс updater) | сама платформа мультиплеера |
|
| RAGE:MP Server | актуальный (линукс `linux_x64.tar.gz` / виндовс updater) | сама платформа мультиплеера |
|
||||||
| .NET Core SDK | **3.1** (мод собран под netcoreapp3.1) | сборка/запуск серверной логики C# |
|
| .NET Core SDK | **3.1** (мод собран под netcoreapp3.1) | сборка/запуск серверной логики C# |
|
||||||
| MySQL / MariaDB | 8.0+ / 10.5+ | две базы (главная + банковская) |
|
| MySQL / MariaDB | 8.0+ / 10.5+ | четыре базы (главная, логи, core, банковская) |
|
||||||
| Node.js | 14–16 LTS | сборка GUI (webpack) и сервис локализации |
|
| Node.js | 14–16 LTS | сборка GUI (webpack) и сервис локализации |
|
||||||
| Git | любой | клонирование репозитория |
|
| Git | любой | клонирование репозитория |
|
||||||
|
|
||||||
@@ -50,7 +55,7 @@ apt install -y dotnet-sdk-3.1 || snap install dotnet-sdk --classic --channel=3.1
|
|||||||
|
|
||||||
### 2. Базы данных
|
### 2. Базы данных
|
||||||
```bash
|
```bash
|
||||||
git clone https://git-1.redl.app/1themotiv/whistler.git /opt/whistler
|
git clone https://git-1.redl.app/robimobi/whistler.git /opt/whistler
|
||||||
cd /opt/whistler
|
cd /opt/whistler
|
||||||
mysql -e "CREATE DATABASE whistler_main CHARACTER SET utf8mb4; CREATE DATABASE whistler_mainlogs CHARACTER SET utf8mb4; CREATE DATABASE whistler_maincore CHARACTER SET utf8mb4; CREATE DATABASE whistler CHARACTER SET utf8mb4;"
|
mysql -e "CREATE DATABASE whistler_main CHARACTER SET utf8mb4; CREATE DATABASE whistler_mainlogs CHARACTER SET utf8mb4; CREATE DATABASE whistler_maincore CHARACTER SET utf8mb4; CREATE DATABASE whistler CHARACTER SET utf8mb4;"
|
||||||
mysql -e "CREATE USER 'whistler'@'localhost' IDENTIFIED BY 'ПРИДУМАЙ_ПАРОЛЬ'; GRANT ALL ON `whistler_main%`.* TO 'whistler'@'localhost'; GRANT ALL ON whistler.* TO 'whistler'@'localhost';"
|
mysql -e "CREATE USER 'whistler'@'localhost' IDENTIFIED BY 'ПРИДУМАЙ_ПАРОЛЬ'; GRANT ALL ON `whistler_main%`.* TO 'whistler'@'localhost'; GRANT ALL ON whistler.* TO 'whistler'@'localhost';"
|
||||||
@@ -64,6 +69,8 @@ mysql whistler < db/whistler_bank.schema.sql
|
|||||||
mysql whistler < db/bank_migrations.sql
|
mysql whistler < db/bank_migrations.sql
|
||||||
```
|
```
|
||||||
|
|
||||||
|
> На машине с 2 ГБ RAM дополнительно ужмите MariaDB: `cp deploy/config/99-lowmem.cnf /etc/mysql/mariadb.conf.d/ && systemctl restart mariadb`
|
||||||
|
|
||||||
### 3. RAGE:MP сервер
|
### 3. RAGE:MP сервер
|
||||||
```bash
|
```bash
|
||||||
mkdir -p /opt/ragemp && cd /opt/ragemp
|
mkdir -p /opt/ragemp && cd /opt/ragemp
|
||||||
@@ -88,17 +95,29 @@ dotnet build Whistler.sln -c Release
|
|||||||
ln -s /opt/whistler/dotnet /opt/ragemp/dotnet
|
ln -s /opt/whistler/dotnet /opt/ragemp/dotnet
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Важно для Linux (проверено на реальном развёртывании):**
|
||||||
|
- Линуксовый мост RAGE:MP **молча не грузит ресурс**, пока он не объявлен в `dotnet/settings.xml` рядом с рантаймом: скопируйте `deploy/config/settings.xml` (внутри `<resource src="Whistler" />`).
|
||||||
|
- `settings.json` кладётся рядом с `ragemp-server` (шаблон — `settings.example.json` в корне репо), про мост и ICU — см. «Три вещи» выше.
|
||||||
|
|
||||||
### 6. Клиентская часть
|
### 6. Клиентская часть
|
||||||
```bash
|
```bash
|
||||||
ln -s /opt/whistler/client_packages /opt/ragemp/client_packages
|
ln -s /opt/whistler/client_packages /opt/ragemp/client_packages
|
||||||
# GUI уже собран (client_packages/gui). Пересобрать после правок:
|
# GUI уже собран (client_packages/gui — свежая сборка со всеми фиксами шрифтов и экранов).
|
||||||
cd /opt/whistler/Gui && npm ci && npm run build
|
```
|
||||||
|
|
||||||
|
Пересборка GUI после своих правок (Node 18/20):
|
||||||
|
```bash
|
||||||
|
cd /opt/whistler/Gui
|
||||||
|
npm ci --legacy-peer-deps # в lock-файле есть конфликты peer deps
|
||||||
|
NODE_OPTIONS=--openssl-legacy-provider npm run build # старый webpack на новом Node
|
||||||
```
|
```
|
||||||
|
|
||||||
### 7. Запуск
|
### 7. Запуск
|
||||||
```bash
|
```bash
|
||||||
cd /opt/ragemp && ./ragemp-server
|
cd /opt/ragemp && ./ragemp-server
|
||||||
# в проде: под systemd/screen; лог смотри в server.out
|
# в проде — под systemd: готовые юниты в deploy/systemd/
|
||||||
|
cp /opt/whistler/deploy/systemd/*.service /etc/systemd/system/
|
||||||
|
systemctl daemon-reload && systemctl enable --now whistler-api ragemp
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -114,7 +133,7 @@ cd /opt/ragemp && ./ragemp-server
|
|||||||
|
|
||||||
### 2. Клонировать и развернуть базы (PowerShell)
|
### 2. Клонировать и развернуть базы (PowerShell)
|
||||||
```powershell
|
```powershell
|
||||||
git clone https://git-1.redl.app/1themotiv/whistler.git C:\whistler
|
git clone https://git-1.redl.app/robimobi/whistler.git C:\whistler
|
||||||
cd C:\whistler
|
cd C:\whistler
|
||||||
& "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -uroot -p -e "CREATE DATABASE whistler_main CHARACTER SET utf8mb4; CREATE DATABASE whistler_mainlogs CHARACTER SET utf8mb4; CREATE DATABASE whistler_maincore CHARACTER SET utf8mb4; CREATE DATABASE whistler CHARACTER SET utf8mb4;"
|
& "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -uroot -p -e "CREATE DATABASE whistler_main CHARACTER SET utf8mb4; CREATE DATABASE whistler_mainlogs CHARACTER SET utf8mb4; CREATE DATABASE whistler_maincore CHARACTER SET utf8mb4; CREATE DATABASE whistler CHARACTER SET utf8mb4;"
|
||||||
Get-Content db\whistler_core.schema.sql | & "...\mysql.exe" -uroot -p whistler_main
|
Get-Content db\whistler_core.schema.sql | & "...\mysql.exe" -uroot -p whistler_main
|
||||||
@@ -155,12 +174,13 @@ node index.js # слушает 127.0.0.1:62333
|
|||||||
# проверка: curl http://127.0.0.1:62333/api/localize/ru → JSON словаря
|
# проверка: curl http://127.0.0.1:62333/api/localize/ru → JSON словаря
|
||||||
```
|
```
|
||||||
|
|
||||||
**Подключение к GUI**: адрес прошит в `Gui/src/store/localization/index.js`:
|
**Подключение к GUI**: адреса прошиты в исходниках. Сейчас они указывают на живой демо-домен `web-whistler-626.redl.app` (работает — можно сразу тестировать), для своего сервера замените на свой домен в 4 файлах:
|
||||||
```js
|
- `Gui/src/store/localization/index.js` — `apiURL`, `listUrl` (словари)
|
||||||
apiURL: "https://play.just-rp.com/api/localize/", // ← замени на свой, напр. http://ТВОЙ_IP:62333/api/localize/
|
- `Gui/src/store/sounds/index.js` — хост звуков
|
||||||
listUrl: "https://play.just-rp.com/api/localize/list",
|
- `Gui/src/views/SelectLanguage/index.vue` — картинки флагов
|
||||||
```
|
- `Gui/src/views/AnimationsMenu/components/AnimationsList.vue` — превью анимаций
|
||||||
После замены пересобери GUI (`cd Gui && npm run build`). В проде повесь api за nginx/caddy с HTTPS и открой порт наружу (или проксируй с того же домена). Автозапуск: `pm2 start index.js --name whistler-api` (Linux) / NSSM или Планировщик задач (Windows).
|
|
||||||
|
После замены пересоберите GUI (см. шаг 6). В проде повесьте api за Caddy/nginx с HTTPS (готовый пример — `deploy/config/Caddyfile.example`, он же раздаёт веб-превью интерфейса). Автозапуск — юнит `deploy/systemd/whistler-api.service`.
|
||||||
|
|
||||||
## Первый вход в игру
|
## Первый вход в игру
|
||||||
|
|
||||||
@@ -178,10 +198,14 @@ listUrl: "https://play.just-rp.com/api/localize/list",
|
|||||||
|---|---|
|
|---|---|
|
||||||
| Сервер падает на старте с ошибкой БД | строки подключения в `settings.json` (лежит РЯДОМ с ragemp-server, не в репо) |
|
| Сервер падает на старте с ошибкой БД | строки подключения в `settings.json` (лежит РЯДОМ с ragemp-server, не в репо) |
|
||||||
| «мод пытается накатить миграции и падает» | не залит `db/*_migrations.sql` (история EF) |
|
| «мод пытается накатить миграции и падает» | не залит `db/*_migrations.sql` (история EF) |
|
||||||
|
| Linux: сервер стартует, но ресурс Whistler не грузится | нет `dotnet/settings.xml` с `<resource src="Whistler"/>` — мост молчит без ошибок |
|
||||||
| Экраны показывают `AUTH:LOGIN:...` вместо текста | не запущен/не прописан сервис локализации (см. выше) |
|
| Экраны показывают `AUTH:LOGIN:...` вместо текста | не запущен/не прописан сервис локализации (см. выше) |
|
||||||
| GUI не изменился после правок | пересобери `Gui` (`npm run build`) — клиент берёт бандл из `client_packages/gui` |
|
| GUI не изменился после правок | пересобери `Gui` (`npm run build`) — клиент берёт бандл из `client_packages/gui` |
|
||||||
| Ошибка Table '...logs.itemslog' doesn't exist | логовая база не создана или названа не как главная+logs |
|
| Ошибка Table '...logs.itemslog' doesn't exist | логовая база не создана или названа не как главная+logs |
|
||||||
|
| В игре интерфейс «разъехался» / старый | битый кэш клиента: удалить папку `client_resources` в папке RAGE:MP и перезайти |
|
||||||
|
| Тексты интерфейса «слипаются», не тот шрифт | старая сборка GUI: возьмите свежий `client_packages/gui` из этого репо (шрифты и кегли исправлены) |
|
||||||
| dotnet build ругается на версию | нужен именно SDK **3.1** (`dotnet --list-sdks`) |
|
| dotnet build ругается на версию | нужен именно SDK **3.1** (`dotnet --list-sdks`) |
|
||||||
|
| npm ci падает по peer deps / сборка по OpenSSL | `npm ci --legacy-peer-deps` и `NODE_OPTIONS=--openssl-legacy-provider` (см. шаг 6) |
|
||||||
|
|
||||||
---
|
---
|
||||||
<p align="center">Powered by <a href="https://redl.io"><b>REDL.IO</b></a> — AI Game Hosting: сервер + ИИ-агент, который устанавливает моды за тебя</p>
|
<p align="center">Powered by <a href="https://redl.io"><b>REDL.IO</b></a> — AI Game Hosting: сервер + ИИ-агент, который устанавливает моды за тебя</p>
|
||||||
|
|||||||
@@ -86,6 +86,27 @@ db/ — ЧИСТЫЕ схемы обеих баз MySQL + истор
|
|||||||
|
|
||||||
Полный набор — в `docs/screenshots/`.
|
Полный набор — в `docs/screenshots/`.
|
||||||
|
|
||||||
|
## Обновление 2026-08 — рабочая сборка ✅
|
||||||
|
|
||||||
|
Проект доведён до состояния «клонировал → развернул → играешь» (проверено живым развёртыванием на VDS):
|
||||||
|
|
||||||
|
**Восстановлено недостающее** (без этого проект не собирался/не запускался):
|
||||||
|
- Конфиги GUI, которые авторы прятали в `.gitignore`: `newDonateShop/{items,roulette,coinkits,rarityPrices,primeAccount}.js`, `gameMakeWeapon/{levels,guns}.js`, `gameMetalPlant/levels.js` — добавлены рабочие версии, `.gitignore` почищен.
|
||||||
|
- База игровых логов (19 таблиц) — схемы не было в дампах, восстановлена из кода: `db/whistler_logs.schema.sql` (копия — `deploy/sql/`); именование баз — см. INSTALL.md.
|
||||||
|
- Шрифты: в репо не было ни одного `@font-face` для семейств, которые требует дизайн (`Russian`, `Qanelas`, `Bebas Neue Pro`…) — интерфейс рендерился Times New Roman и разъезжался. Добавлены Inter/Oswald/Noto и алиасы в `Gui/public/fonts/font.css`. Для кириллических заголовков — **Oswald** (у Bebas Neue кириллицы нет).
|
||||||
|
- Починен импорт `TransportModal`/`BusinessModal` в статистике (сборка падала).
|
||||||
|
|
||||||
|
**Исправлено**:
|
||||||
|
- Экраны Auth (вход/регистрация/восстановление/приветствие): узкий дисплейный шрифт, размеры и отступы — текст больше не наезжает на формы.
|
||||||
|
- Дев-панель выбора экранов показывается только в dev-режиме (в игре её больше нет).
|
||||||
|
- `*.csproj`: PostBuild-шаги (`xcopy`) выполняются только на Windows — на Linux сборка больше не падает.
|
||||||
|
- `client_packages/gui` — свежая сборка со всеми фиксами (можно не пересобирать).
|
||||||
|
|
||||||
|
**Добавлено для развёртывания** — папка `deploy/`:
|
||||||
|
- `systemd/` — юниты `ragemp.service` и `whistler-api.service`
|
||||||
|
- `config/` — `conf.json`, `settings.xml` (обязателен для линуксового моста!), `Caddyfile.example`, `99-lowmem.cnf` для машин с 2 ГБ RAM
|
||||||
|
- `sql/` — схема базы логов
|
||||||
|
|
||||||
## Как запустить
|
## Как запустить
|
||||||
|
|
||||||
**Полная пошаговая инструкция (Linux + Windows + сервис локализации): [INSTALL.md](INSTALL.md).** Кратко:
|
**Полная пошаговая инструкция (Linux + Windows + сервис локализации): [INSTALL.md](INSTALL.md).** Кратко:
|
||||||
|
|||||||
+1
-7736
File diff suppressed because one or more lines are too long
+1
-7525
File diff suppressed because one or more lines are too long
+1
-7736
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -26,3 +26,10 @@ Cullinan, Mitsubishi Evo IX, Ford Focus ST, полицейские Buffalo (`buf
|
|||||||
|
|
||||||
Паки лежат в `client_packages/game_resources/dlcpacks/` — сервер отдаёт их клиенту автоматически
|
Паки лежат в `client_packages/game_resources/dlcpacks/` — сервер отдаёт их клиенту автоматически
|
||||||
при подключении, отдельной настройки не нужно.
|
при подключении, отдельной настройки не нужно.
|
||||||
|
|
||||||
|
## gameconfig.xml — обязателен
|
||||||
|
|
||||||
|
Рядом лежит `../common/data/gameconfig.xml` — расширенный конфиг лимитов GTA V из оригинальной
|
||||||
|
сборки мода (архетипы 64000 вместо ванильных 41000, интерьеры 300, анимированные здания 1200,
|
||||||
|
физика 1450). **Без него игра вылетает** при загрузке такого количества паков — стандартных пулов
|
||||||
|
GTA не хватает. Файл раздаётся клиенту вместе с ресурсами, ставить вручную ничего не нужно.
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
.range-slider{display:inline-block;padding:0 10px;height:20px;width:130px}.range-slider.disabled{opacity:.5}.range-slider-inner{display:inline-block;position:relative;height:100%;width:100%}.range-slider-fill,.range-slider-rail{display:block;position:absolute;top:50%;left:0;height:4px;border-radius:2px;transform:translateY(-50%)}.range-slider-rail{width:100%;background-color:#e2e2e2}.range-slider-fill{background-color:#21fb92}.range-slider-knob{display:block;position:absolute;top:50%;left:0;box-sizing:border-box;height:20px;width:20px;border:1px solid #f5f5f5;border-radius:50%;background-color:#fff;box-shadow:1px 1px rgba(0,0,0,.2);transform:translate(-50%,-50%);cursor:pointer}.range-slider-hidden{display:none}.vue-recycle-scroller{position:relative}.vue-recycle-scroller.direction-vertical:not(.page-mode){overflow-y:auto}.vue-recycle-scroller.direction-horizontal:not(.page-mode){overflow-x:auto}.vue-recycle-scroller.direction-horizontal{display:-webkit-box;display:-ms-flexbox;display:flex}.vue-recycle-scroller__slot{-webkit-box-flex:1;-ms-flex:auto 0 0px;flex:auto 0 0}.vue-recycle-scroller__item-wrapper{-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;position:relative}.vue-recycle-scroller.ready .vue-recycle-scroller__item-view{position:absolute;top:0;left:0;will-change:transform}.vue-recycle-scroller.direction-vertical .vue-recycle-scroller__item-wrapper{width:100%}.vue-recycle-scroller.direction-horizontal .vue-recycle-scroller__item-wrapper{height:100%}.vue-recycle-scroller.ready.direction-vertical .vue-recycle-scroller__item-view{width:100%}.vue-recycle-scroller.ready.direction-horizontal .vue-recycle-scroller__item-view{height:100%}.resize-observer[data-v-b329ee4c]{border:none;background-color:transparent;opacity:0}.resize-observer[data-v-b329ee4c],.resize-observer[data-v-b329ee4c] object{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;pointer-events:none;display:block;overflow:hidden}
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -422,3 +422,8 @@
|
|||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@font-face { font-family: 'Oswald'; src: url('Oswald-400.ttf') format('truetype'); font-weight: 400; font-style: normal; }
|
||||||
|
@font-face { font-family: 'Oswald'; src: url('Oswald-500.ttf') format('truetype'); font-weight: 500; font-style: normal; }
|
||||||
|
@font-face { font-family: 'Oswald'; src: url('Oswald-600.ttf') format('truetype'); font-weight: 600; font-style: normal; }
|
||||||
|
@font-face { font-family: 'Oswald'; src: url('Oswald-700.ttf') format('truetype'); font-weight: 700; font-style: normal; }
|
||||||
|
|||||||
@@ -1,14 +1 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html><html lang=ru><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link rel=stylesheet href=./fonts/font.css><link href=https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css rel=stylesheet><title></title><link href=/css/app.css rel=preload as=style><link href=/css/chunk-vendors.css rel=preload as=style><link href=/js/app.js rel=preload as=script><link href=/js/chunk-vendors.js rel=preload as=script><link href=/css/chunk-vendors.css rel=stylesheet><link href=/css/app.css rel=stylesheet></head><body><div id=app></div><script src=/js/chunk-vendors.js></script><script src=/js/app.js></script></body></html>
|
||||||
<html lang="ru">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
|
||||||
<link rel="stylesheet" href="./fonts/font.css">
|
|
||||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
|
|
||||||
<title></title>
|
|
||||||
<link href="/js/app.js" rel="preload" as="script"><link href="/js/chunk-vendors.js" rel="preload" as="script"></head>
|
|
||||||
<body>
|
|
||||||
<div id="app"></div>
|
|
||||||
<script type="text/javascript" src="/js/chunk-vendors.js"></script><script type="text/javascript" src="/js/app.js"></script></body>
|
|
||||||
</html>
|
|
||||||
+1
-75117
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,6 @@
|
|||||||
|
# MariaDB для машин с 2GB RAM — положить в /etc/mysql/mariadb.conf.d/
|
||||||
|
[mysqld]
|
||||||
|
innodb_buffer_pool_size = 64M
|
||||||
|
key_buffer_size = 8M
|
||||||
|
max_connections = 40
|
||||||
|
performance_schema = OFF
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
# Веб-превью GUI + проксирование API локализации (опционально).
|
||||||
|
# Замените домен на свой. Порт 80 должен быть открыт — через него Caddy получает сертификат.
|
||||||
|
your-domain.example.com {
|
||||||
|
encode gzip
|
||||||
|
handle /api/localize/* {
|
||||||
|
reverse_proxy 127.0.0.1:62333
|
||||||
|
}
|
||||||
|
handle {
|
||||||
|
root * /opt/whistler-web
|
||||||
|
file_server
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"language": "ru",
|
||||||
|
"maxplayers": 100,
|
||||||
|
"name": "MY SERVER",
|
||||||
|
"stream-distance": 300,
|
||||||
|
"announce": false,
|
||||||
|
"csharp": "enabled",
|
||||||
|
"port": 22005,
|
||||||
|
"voice-chat": true,
|
||||||
|
"voice-chat-sample-rate": 48000,
|
||||||
|
"http-threads": 16,
|
||||||
|
|
||||||
|
"api-threading-debugging": false,
|
||||||
|
"server-side-weapons-only-mode": true,
|
||||||
|
"allow-cef-debugging": false
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||||
|
<resource src="Whistler" />
|
||||||
|
<acl_enabled>true</acl_enabled>
|
||||||
|
<log_console>true</log_console>
|
||||||
|
<log_chat>true</log_chat>
|
||||||
|
</config>
|
||||||
@@ -0,0 +1,276 @@
|
|||||||
|
/*M!999999\- enable the sandbox mode */
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
||||||
|
/*!40103 SET TIME_ZONE='+00:00' */;
|
||||||
|
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||||
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||||
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||||
|
DROP TABLE IF EXISTS `adminlog`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `adminlog` (
|
||||||
|
`_rid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`time` text DEFAULT NULL,
|
||||||
|
`admin` text DEFAULT NULL,
|
||||||
|
`action` text DEFAULT NULL,
|
||||||
|
`player` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`_rid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
DROP TABLE IF EXISTS `arrestlog`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `arrestlog` (
|
||||||
|
`_rid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`time` text DEFAULT NULL,
|
||||||
|
`player` text DEFAULT NULL,
|
||||||
|
`target` text DEFAULT NULL,
|
||||||
|
`reason` text DEFAULT NULL,
|
||||||
|
`stars` text DEFAULT NULL,
|
||||||
|
`pnick` text DEFAULT NULL,
|
||||||
|
`tnick` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`_rid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
DROP TABLE IF EXISTS `banlog`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `banlog` (
|
||||||
|
`_rid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`time` text DEFAULT NULL,
|
||||||
|
`admin` text DEFAULT NULL,
|
||||||
|
`player` text DEFAULT NULL,
|
||||||
|
`until` text DEFAULT NULL,
|
||||||
|
`reason` text DEFAULT NULL,
|
||||||
|
`ishard` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`_rid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
DROP TABLE IF EXISTS `boxlog`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `boxlog` (
|
||||||
|
`_rid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`time` text DEFAULT NULL,
|
||||||
|
`boxId` text DEFAULT NULL,
|
||||||
|
`uuid` text DEFAULT NULL,
|
||||||
|
`item` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`_rid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
DROP TABLE IF EXISTS `casinologs`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `casinologs` (
|
||||||
|
`_rid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`operation` text DEFAULT NULL,
|
||||||
|
`money` text DEFAULT NULL,
|
||||||
|
`playername` text DEFAULT NULL,
|
||||||
|
`datetime` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`_rid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
DROP TABLE IF EXISTS `chatlogs`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `chatlogs` (
|
||||||
|
`_rid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`uuid` text DEFAULT NULL,
|
||||||
|
`typechat` text DEFAULT NULL,
|
||||||
|
`message` text DEFAULT NULL,
|
||||||
|
`datetime` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`_rid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
DROP TABLE IF EXISTS `connlog`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `connlog` (
|
||||||
|
`_rid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`in` text DEFAULT NULL,
|
||||||
|
`out` text DEFAULT NULL,
|
||||||
|
`uuid` text DEFAULT NULL,
|
||||||
|
`sclub` text DEFAULT NULL,
|
||||||
|
`hwid` text DEFAULT NULL,
|
||||||
|
`ip` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`_rid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
DROP TABLE IF EXISTS `deletelog`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `deletelog` (
|
||||||
|
`_rid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`time` text DEFAULT NULL,
|
||||||
|
`uuid` text DEFAULT NULL,
|
||||||
|
`name` text DEFAULT NULL,
|
||||||
|
`account` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`_rid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
DROP TABLE IF EXISTS `donateroulettelog`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `donateroulettelog` (
|
||||||
|
`_rid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`time` text DEFAULT NULL,
|
||||||
|
`name` text DEFAULT NULL,
|
||||||
|
`uuid` text DEFAULT NULL,
|
||||||
|
`droprarity` text DEFAULT NULL,
|
||||||
|
`droptype` text DEFAULT NULL,
|
||||||
|
`dropvalue` text DEFAULT NULL,
|
||||||
|
`isfree` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`_rid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
DROP TABLE IF EXISTS `donateshoplog`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `donateshoplog` (
|
||||||
|
`_rid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`time` text DEFAULT NULL,
|
||||||
|
`uuid` text DEFAULT NULL,
|
||||||
|
`price` text DEFAULT NULL,
|
||||||
|
`typeproduct` text DEFAULT NULL,
|
||||||
|
`product` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`_rid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
DROP TABLE IF EXISTS `fractionmoney`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `fractionmoney` (
|
||||||
|
`_rid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`fractionId` text DEFAULT NULL,
|
||||||
|
`operation` text DEFAULT NULL,
|
||||||
|
`sum` text DEFAULT NULL,
|
||||||
|
`date` text DEFAULT NULL,
|
||||||
|
`description` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`_rid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
DROP TABLE IF EXISTS `idlog`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `idlog` (
|
||||||
|
`_rid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`in` text DEFAULT NULL,
|
||||||
|
`out` text DEFAULT NULL,
|
||||||
|
`uuid` text DEFAULT NULL,
|
||||||
|
`id` text DEFAULT NULL,
|
||||||
|
`name` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`_rid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
DROP TABLE IF EXISTS `itemslog`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `itemslog` (
|
||||||
|
`time` text DEFAULT NULL,
|
||||||
|
`id` bigint(20) NOT NULL DEFAULT 0,
|
||||||
|
`from` text DEFAULT NULL,
|
||||||
|
`to` text DEFAULT NULL,
|
||||||
|
`type` text DEFAULT NULL,
|
||||||
|
`amount` text DEFAULT NULL,
|
||||||
|
`data` text DEFAULT NULL,
|
||||||
|
`action` text DEFAULT NULL,
|
||||||
|
`player` text DEFAULT NULL
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
DROP TABLE IF EXISTS `killog`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `killog` (
|
||||||
|
`_rid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`killer` text DEFAULT NULL,
|
||||||
|
`target` text DEFAULT NULL,
|
||||||
|
`clientweapon` text DEFAULT NULL,
|
||||||
|
`serverweapon` text DEFAULT NULL,
|
||||||
|
`distance` text DEFAULT NULL,
|
||||||
|
`date` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`_rid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
DROP TABLE IF EXISTS `moneylog`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `moneylog` (
|
||||||
|
`_rid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`time` text DEFAULT NULL,
|
||||||
|
`from` text DEFAULT NULL,
|
||||||
|
`to` text DEFAULT NULL,
|
||||||
|
`amount` text DEFAULT NULL,
|
||||||
|
`comment` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`_rid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
DROP TABLE IF EXISTS `namelog`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `namelog` (
|
||||||
|
`_rid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`time` text DEFAULT NULL,
|
||||||
|
`uuid` text DEFAULT NULL,
|
||||||
|
`old` text DEFAULT NULL,
|
||||||
|
`new` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`_rid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
DROP TABLE IF EXISTS `newmoneylog`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `newmoneylog` (
|
||||||
|
`_rid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`time` text DEFAULT NULL,
|
||||||
|
`fromtype` text DEFAULT NULL,
|
||||||
|
`from` text DEFAULT NULL,
|
||||||
|
`totype` text DEFAULT NULL,
|
||||||
|
`to` text DEFAULT NULL,
|
||||||
|
`amount` text DEFAULT NULL,
|
||||||
|
`tax` text DEFAULT NULL,
|
||||||
|
`comment` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`_rid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
DROP TABLE IF EXISTS `ticketlog`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `ticketlog` (
|
||||||
|
`_rid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`time` text DEFAULT NULL,
|
||||||
|
`player` text DEFAULT NULL,
|
||||||
|
`target` text DEFAULT NULL,
|
||||||
|
`sum` text DEFAULT NULL,
|
||||||
|
`reason` text DEFAULT NULL,
|
||||||
|
`pnick` text DEFAULT NULL,
|
||||||
|
`tnick` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`_rid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
DROP TABLE IF EXISTS `votelog`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `votelog` (
|
||||||
|
`_rid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`election` text DEFAULT NULL,
|
||||||
|
`login` text DEFAULT NULL,
|
||||||
|
`votefor` text DEFAULT NULL,
|
||||||
|
`time` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`_rid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||||
|
|
||||||
|
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||||
|
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||||
|
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=RAGE:MP server (Whistler)
|
||||||
|
After=network.target mariadb.service whistler-api.service
|
||||||
|
Wants=mariadb.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
WorkingDirectory=/opt/ragemp
|
||||||
|
ExecStart=/opt/ragemp/ragemp-server
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
LimitNOFILE=65535
|
||||||
|
Environment=DOTNET_ROOT=/usr/share/dotnet
|
||||||
|
Environment=DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Whistler localization API
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
WorkingDirectory=/opt/whistler/api
|
||||||
|
ExecStart=/usr/bin/node /opt/whistler/api/index.js
|
||||||
|
Restart=always
|
||||||
|
RestartSec=3
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
@@ -5,6 +5,6 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||||
<Exec Command="xcopy "$(OutDir)*.dll" "\Whistler\*.*" /Q /D /Y
xcopy "$(OutDir)*.pdb" "\Whistler\*.*" /Q /D /Y" />
|
<Exec Condition="'$(OS)' == 'Windows_NT'" Command="xcopy "$(OutDir)*.dll" "\Whistler\*.*" /Q /D /Y
xcopy "$(OutDir)*.pdb" "\Whistler\*.*" /Q /D /Y" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -5,6 +5,6 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||||
<Exec Command="xcopy "$(OutDir)*.dll" "\Whistler\*.*" /Q /D /Y
xcopy "$(OutDir)*.pdb" "\Whistler\*.*" /Q /D /Y
" />
|
<Exec Condition="'$(OS)' == 'Windows_NT'" Command="xcopy "$(OutDir)*.dll" "\Whistler\*.*" /Q /D /Y
xcopy "$(OutDir)*.pdb" "\Whistler\*.*" /Q /D /Y
" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||||
<Exec Command="xcopy "$(OutDir)*.dll" "\Whistler\*.*" /Q /D /Y
xcopy "$(OutDir)*.pdb" "\Whistler\*.*" /Q /D /Y
" />
|
<Exec Condition="'$(OS)' == 'Windows_NT'" Command="xcopy "$(OutDir)*.dll" "\Whistler\*.*" /Q /D /Y
xcopy "$(OutDir)*.pdb" "\Whistler\*.*" /Q /D /Y
" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||||
<Exec Command="xcopy "$(OutDir)*.dll" "\Whistler\*.*" /Q /D /Y
xcopy "$(OutDir)*.pdb" "\Whistler\*.*" /Q /D /Y
" />
|
<Exec Condition="'$(OS)' == 'Windows_NT'" Command="xcopy "$(OutDir)*.dll" "\Whistler\*.*" /Q /D /Y
xcopy "$(OutDir)*.pdb" "\Whistler\*.*" /Q /D /Y
" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -83,7 +83,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||||
<Exec Command="xcopy "$(OutDir)*.dll" "..\Whistler\*.*" /Q /D /Y
xcopy "$(OutDir)*.pdb" "..\Whistler\*.*" /Q /D /Y
xcopy "meta.xml" "..\Whistler\*.*" /Q /D /Y
xcopy "..\Whistler\*" "..\Whistler\*.*" /Q /D /Y" />
|
<Exec Condition="'$(OS)' == 'Windows_NT'" Command="xcopy "$(OutDir)*.dll" "..\Whistler\*.*" /Q /D /Y
xcopy "$(OutDir)*.pdb" "..\Whistler\*.*" /Q /D /Y
xcopy "meta.xml" "..\Whistler\*.*" /Q /D /Y
xcopy "..\Whistler\*" "..\Whistler\*.*" /Q /D /Y" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<ProjectExtensions><VisualStudio><UserProperties /></VisualStudio></ProjectExtensions>
|
<ProjectExtensions><VisualStudio><UserProperties /></VisualStudio></ProjectExtensions>
|
||||||
|
|||||||
Reference in New Issue
Block a user