Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
DrTauren

Система валюты ZSC для DayZ EPOCH 1.0.6.1

Recommended Posts

png&fsize=144924&hid=a049e1528dae805d622

 

Данная версия создана на основе ZSC для DayZ EPOCH 1.0.5.1, а точнее адаптирована под 1.0.6. Также внесены некоторые дополнения для того чтобы сделать систему более защищённой.

Особенности:

  • Протестировано на DayZ EPOCH 1.0.6.1, а также OverWatch 0.25
  • Убрано множество способов дюпа, устранены баги системы
  • Множество фрагментов кода взято из стандартного релиза от Zupa чтобы остановить множественные проверки складывания\изымания чего-либо из одного сейфа
  • Поддерживается множество конфигураций хранения валюты: только в машинах, только в сейфах\локбоксах, либо и в машинах, и в сейфах с локбоксами
  • Поддерживаются все карты, но изначально файл server_traders имеется только для карт Chernarus, Taviana, Napf


Внимание:

  • При процессе установки предполагается что у вас нет кастомных файлов типа variables.sqf или compiles.sqf, или fn_selfActions.sqf
  • Все конфиги настроены под новый Epoch 1.0.6.1, либо OverWatch 0.25

 

Инструкция по установке валюты:
1)
Качаем архив с сайта:

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

    Либо с Гитхаба разработчика

2) В папке миссии открываем файл init.sqf и находим код:

call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\variables.sqf";

и сразу после него добавляем эту строку:

call compile preprocessFileLineNumbers "dayz_code\init\variables.sqf";

3) Находим это:

call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";

ниже добавляем:

call compile preprocessFileLineNumbers "dayz_code\init\compiles.sqf";

4) Находим очередную строку:

call compile preprocessFileLineNumbers "server_traders.sqf";

и заменяем на эту:

call compile preprocessFileLineNumbers "scripts\traders\server_traders.sqf";

5) Находим в том же файле этот код:

waitUntil {scriptDone progress_monitor};

и над ним добавляем такие строки:

call compile preprocessFileLineNumbers "scripts\zsc\zscInit.sqf";
execVM "scripts\zsc\playerHud.sqf";
[] execVM "dayz_code\compile\remote_message.sqf";

6) Замените ваш description.ext на тот что лежит в архиве, либо соедините их содержимое, если ваш файл модифицирован. Сделать это можно при помощи плагина Compare в NotePad++

7) Распаковываем наш dayz_server.pbo и находим файл server_handleSafeGear.sqf. Заменяем его файлом с таким же именем, лежащим в архиве. Также можно их совместить, при помощи упомянутого выше плагина

8) Так же поступаем с файлом server_updateObject.sqf

9) Копируем папки dayz_code и scripts из архива в папку с нашей миссией
                           Итак, сама новая валюта установлена. Идём дальше.



Настройка фильтров BattlEye:
1)
Открываем папку с фильтрами BattlEye и находим файл scripts.txt. Примерно на 12й строке файла находим такой код:

5 createDialog

в её конец добавляем это:

!="_dialog = createDialog \"BankDialog\";" !="_dialog = createdialog \"GivePlayerDialog\";"

2) В этом же файле примерно на 10й строке находим это:

5 closeDisplay

и так же в конец добавляем код:

!="((ctrlParent (_this select 0)) closeDisplay 9000);"

 

Share this post


Link to post
Share on other sites





Добавление банков в систему:

 


1) Обязательно должны быть выполнены все пункты выше, т.к. стандартный ZSC требуется для добавления системы банков
2) Открываем init.sqf и находим:


call compile preprocessFileLineNumbers "scripts\zsc\zscInit.sqf";

и добавляем ниже:


call compile preprocessFileLineNumbers "scripts\zsc\zscATMInit.sqf";

3) Открываем наш файл description.ext и находим строку:


#include "dayz_code\configs\zscDialogs.hpp"

добавляем под ней:


#include "dayz_code\configs\zscATMdialogs.hpp"

4) В папке нашей миссии находим файл dayz_code\init\compiles.sqf, ищем в нём строку:


fnc_usec_selfactions = compile preprocessFileLineNumbers "dayz_code\compile\fn_selfActions.sqf";

и добавляем ниже:


player_humanityMorph = compile preprocessFileLineNumbers "dayz_code\compile\player_humanityMorph.sqf"; // This line can be removed when Epoch 1.0.6.2 comes out.

5) В папке миссии открываем файл dayz_code\init\variables.sqf и находим это:


ZSC_MaxMoneyInStorageMultiplier = 50000; // Multiplier for how much money a bank object can hold, example: 200 magazine slots in the object (or the default value above ^^) multiplied by the 50,000 multiplier is 10 million coin storage. (200*50000=10m coins)

и ниже добавляем:


Z_bankVariable = "moneySpecial"; // If using single currency this is the variable name used to store object bank wealth.
Z_globalVariable = "GlobalMoney"; // If using single currency this is the variable name used to store coins globally.
//Z_moneyVariable = "GlobalMoney"; // Uncomment this this to make it so players don't lose coins on death. Will need to disable checkWallet as you can dupe if you have this and check wallet running.
/*
    IMPORTANT: The following 2 variables below are CASE SENSITIVE! If you don't put the object/trader classname EXACTLY how
    they appear in game, THEY WILL NOT WORK!
*/
ZSC_bankObjects = [""]; // Array of objects that are available for banking (i.e Suitcase, Info_Board_EP1)
ZSC_bankTraders = ["Functionary1_EP1_DZ"]; // Array of trader classnames that are available for banking (i.e Functionary1_EP1_DZ)
ZSC_limitOnBank = true; // Have a limit on the bank? (i.e true or false) limits the global banking to the number below.
ZSC_maxBankMoney = 5000000; // Default limit for bank objects.

6) Заходим в папку global_banking в нашем архиве и копируем перечисленные ниже файлы в папку нашей миссии с учётом путей где они лежат:

  • dayz_code\compile\player_humanityMorph.sqf
  • dayz_code\configs\zscATMdialogs.hpp
  • scripts\zsc\images\bank.paa
  • scripts\zsc\atmDialog.sqf
  • scripts\zsc\playerHud.sqf
  • scripts\zsc\zscATMInit.sqf

 

Настройка фильтров BattlEye под банки:

1) Заходим в папку с фильтрами BattlEye и открываем файл scripts.txt. и примерно на 12 строке находим код, начинающийся с этого:


5 "createDialog"

добавляем в конец этой строки:


!"_dialog = createdialog \"atmDialog\";"

Share this post


Link to post
Share on other sites

Установка NPC-банкиров:

1) Находим в архиве папку dayz_server и лежащую в ней папку bankTraders. Последнюю копируем в наш распакованный dayz_server.pbo
2) Открываем наш init.sqf и находим строку:

execVM "\z\addons\dayz_server\traders\chernarus11.sqf";

под ней вставляем это:

execVM "\z\addons\dayz_server\bankTraders\chernarus.sqf"; //Add banking agents

Вы можете выбрать подходящий вам файл из перечисленных ниже и залить именно его. Только не забудьте поменять путь в коде выше.

  • chernarus.sqf
  • lingor.sqf
  • namalsk.sqf
  • napf.sqf
  • panthera.sqf
  • tavi.sqf

Дополнение к инструкции от @Димас:
(если не появляется меню взаимодействия с банкиром)

В папке с миссией dayz_code\compile\  в файл fn_selfActions.sqf

Перед строкой:

if (_typeOfCursorTarget in DZE_MoneyStorageClasses && {!locked _cursorTarget} && {!(_typeOfCursorTarget in DZE_LockedStorage)} && {player distance _cursorTarget < 5}) then {

Добавляем:

           // Блок: "меню" для банковских агентов
    if (_isMan && {!(isPlayer _cursorTarget)} && {player distance _cursorTarget < 3} && {speed player <= 1} && {_typeOfCursorTarget in ZSC_bankTraders} && {!_isPZombie}) then {
        if (s_bank_dialog1 < 0) then {
        s_bank_dialog1 = player addAction ["Bank Teller","scripts\zsc\atmDialog.sqf",_cursorTarget,3,true,true];
    };
    } else {
        player removeAction s_bank_dialog1;
        s_bank_dialog1 = -1;
};

 

 

 

Делаем не пропадающие после смерти деньги (для PVE серверов):

В папке миссии находим файл dayz_code\init\variables.sqf и такие строки в нём:

//Z_moneyVariable = "GlobalMoney"; // Uncomment this this to make it so players don't lose coins on death. Will need to disable checkWallet as you can dupe if you have this and check wallet running.

Просто раскомментируйте эту линию и всё.
P.S. Обязательно уберите функцию проверки трупов на предмет денег (check wallet). Можно, например, просто закомментировать соответствующую строку в файле fn_selfactions.sqf

 

 


Изменяем файл server_traders.sqf для Черноруси на другую карту:

1) Открываем папку scripts\traders в нашей папке миссии
2) Удаляем файл server_traders.sqf
3) Файл под нужную нам карту переименовываем в server_traders.sqf

 

 

 

Добавляем другие объекты для хранения валюты:

1) В папке миссии открываем файл dayz_code\init\variables.sqf и находим строку:

DZE_MoneyStorageClasses = DZE_LockableStorage;

и заменяем её на эту:

DZE_MoneyStorageClasses = DZE_LockableStorage + ["Plastic_Pole_EP1_DZ"];

P.S. Plastic_Pole_EP1_DZ это пример, заменяем на нужный класснейм. Если нужно добавить ещё - действуем аналогично

 

 

 

Используем для хранения валюты только машины:

1) Открываем файл scripts\zsc\bankDialog.sqf и находим строку:

if !(_typeOf in DZE_MoneyStorageClasses) exitWith {

и заменяем её на эту:

if !(ZSC_CurrentStorage isKindOf "AllVehicles") exitWith {

2) Открываем файл dayz_code\compile\fn_selfActions.sqf и находим строку:

if (_typeOfCursorTarget in DZE_MoneyStorageClasses && {!locked _cursorTarget} && {!(_typeOfCursorTarget in DZE_LockedStorage)} && {player distance _cursorTarget < 5}) then {

заменяем на эту:

if (_isVehicle && {!_isMan} && {!locked _cursorTarget} && {_isAlive} && {player distance _cursorTarget < 5}) then {

3) Открываем папку dayz_server\system в архиве, копируем файл server_monitor.sqf
4) Копируем его с заменой поверх того что стоит у нас в dayz_server.pbo, либо совмещаем их, если ваш модифицирован

 

 

 

Используем для хранения машины и DZE_MoneyStorageClasses:

1) Открываем файл scripts\zsc\bankDialog.sqf и находим:

if !(_typeOf in DZE_MoneyStorageClasses) exitWith {

заменяем на это:

if ((!(_typeOf in DZE_MoneyStorageClasses) && !(cursortarget isKindOf "AllVehicles"))) exitWith {

2) В файле dayz_code\compile\fn_selfActions.sqf находим строку:

if (_typeOfCursorTarget in DZE_MoneyStorageClasses && {!locked _cursorTarget} && {!(_typeOfCursorTarget in DZE_LockedStorage)} && {player distance _cursorTarget < 5}) then {

заменяем её этой:

if ((_typeOfCursorTarget in DZE_MoneyStorageClasses || _isVehicle) && {!_isMan} && {!locked _cursorTarget} && {_isAlive} && !(_typeOfCursorTarget in DZE_LockedStorage) && {player distance _cursorTarget < 5}) then {

3) Открываем папку dayz_server\system в архиве, копируем файл server_monitor.sqf
4) Копируем его с заменой поверх того что стоит у нас в dayz_server.pbo, либо совмещаем их, если ваш модифицирован
 

 


Добавляем выдачу денег новичкам сервера при их первом подключении:

1) В файле dayz_server\compile\server_playerLogin.sqf находим:
 

PVCDZ_plr_Login = [_charID,_inventory,_backpack,_survival,_isNew,dayz_versionNo,_model,_isHiveOk,_newPlayer,_isInfected,_group,_CharacterCoins,_playerCoins,_BankCoins];

2) Если хотите чтобы давалось 5к наличными - добавляем эту строку над той что мы искали в пункте нумбер раз :relaxed::

if (_newPlayer) then {_characterCoins = 5000};

3) Если хотите чтобы деньги добавлялись в банк, то добавьте эту строку:

if (_newPlayer) then {_bankCoins = 5000};

 


Ну вот, собственно, и всё :wink:
Если гайды был полезен - ставь +

Share this post


Link to post
Share on other sites

UPD: исправлены ошибки, допущенные автором скрипта в гайде
Спасибо Miduznya за указанные ошибки

Share this post


Link to post
Share on other sites
1 минуту назад, DrTauren сказал:

UPD: исправлены ошибки, допущенные автором скрипта в гайде
Спасибо Miduznya за указанные ошибки

Однозначно гайд полезный, получилось в 100 раз лучше чем оригинал автора сп!

Share this post


Link to post
Share on other sites

У кого стоит инфистар пишем так фильтры (фильты под валюту + установленные банки):

5 "_createDialog" !="_dialog = createDialog "BankDialog";" !="_dialog = createdialog "GivePlayerDialog";"
5 "_closeDisplay =" !="((ctrlParent (_this select 0)) closeDisplay 9000);"

мой получился так: (сервер чистый установлена только система банка)

Скрытый текст

 


//new2
5 "EqualCheats"
5 "been infected!"
5 "FunctionsManager" !=" (isNull _grp) then { _grp = group ((allmissionobjects 'FunctionsManager') select 0); };\nif (!isNull _grp) then {\n_list = units "
5 "BattleFieldClearance"
5 "BIS_MPF_logic" !"BIS_MPF_logic = BIS_MPF_dummygroup createUnit"
5 "BIS_MPF_dummygroup" !="BIS_MPF_dummygroup = createGroup sideLogic;" !"BIS_MPF_logic = BIS_MPF_dummygroup createUnit"
5 "_codeAHOFF"
5 "_box" !="{show_loot_infiSTAR = !show_loot_infiSTAR;};\n};\nif(isNil \"show_boxes_infiSTAR\")then{show_boxes_infiSTAR = false;};\nfnc_BoxS = {\n"
5 "_first in"
5 "_commands"
5 "_createDialog" !="_dialog = createDialog \"BankDialog\";" !="_dialog = createdialog \"GivePlayerDialog\";"
5 "_agent setDamage 1"
5 "_unit createUnit"
5 "_closeDisplay =" !="((ctrlParent (_this select 0)) closeDisplay 9000);"
5 "rJIPrequest =" !"rJIPrequest = 'JIPrequest'"
5 "RUSTLER"
5 "Ruslter"
5 "Systems Online"
5 "HangenderRE"
5 "vilegaming"
5 "Lystic"
5 "setDammage"
5 "@TheWarZ"
5 "beeeh"
5 "dayz-injector-menu"
5 "Shadowy_NONRE"
5 "_cute"
5 "_stuff"
5 "_vgmenu"
5 "_func4"
5 "_genVar"
5 "_rand60"
5 "_first_term"
5 "_skarmory"
5 "_salamence"
5 "Init RE"
5 "Nigger"
5 "action_crate1"
5 "_dummyveh"
5 "try saving"
5 "setDamage -"
5 "setDamage +"
1 cutrsc !="layer == player)};\nwaituntil {!(isNull (findDisplay 46))};\n5 cutRsc [\"wm_disp\",\"PLAIN\"];\n((uiNamespace getVariable \"wm_disp\") di" !="cutRsc ['rscDynamicText', 'PLAIN'];" !=";\n_displayText = {\nprivate [\"_display\",\"_textLine\"];\n4099999 cutrsc [\"RSC_DZ_Messages\",\"plain\"];\n_display = uinamespace getvaria" !="holdBreath select 0) or (_turboKey select 0)) then {\n4100002 cutRsc [\"DZ_BlackScreen\",\"PLAIN\"];\n(uiNamespace getVariable \"DZ_Bla" !="Completed)}) then {\nif (toLower DZE_UI == \"vanilla\") then {3 cutRsc ['playerStatusGUI','PLAIN',3];} else {3 cutRsc ['playerStatu" !="cameraView in [\"INTERNAL\",\"EXTERNAL\",\"GUNNER\"]) then {\n80000 cutRsc [\"DZ_GroupIcons\",\"PLAIN\"];\n\n_display = uiNamespace getVariab" !="= _y;\n_y = _array select 0;\n_h = _array select 1;\n};\n\n_layer cutrsc [\"rscDynamicText\",\"plain\"];\n\n_display = uinamespace getvaria" !="\"ca\modules_e\functions\GUI\fn_infoText.sqf\"\n\n\n\n\n\n\n\n\n\n\n\n3100 cutrsc [\"rscInfoText\",\"plain\"];\n\n\n\n_text = _this;\n_textArrayUnicode" !="Group;\ndeleteGroup _myGroup;\n80000 cutText [\"\",\"PLAIN\"]; \n\n3 cutRsc [\"default\", \"PLAIN\",3];\n4 cutRsc [\"default\", \"PLAIN\",3];\n\n_b"
1 setVehicleInit
1 createTeam
1 Waypoint !="oiter;\n_newDest = nil;\n_movingTo = _myDest;\n_array = 		[];\n_waypoint = [];\n\n_agentReset = false;\n\n_bodyStay = 	60;\n\n_agent disab"
1 createUnit !="roup);\n\n\n\n\n\n\n\n_group = createGroup west;\n_newUnit = _group createUnit [_class,getMarkerPos \"respawn_west\",[],0,\"NONE\"];\n_newUnit" !="eGroup sideLogic;\n\n\n\n\n\n\nBIS_MPF_logic = BIS_MPF_dummygroup createUnit [\"Logic\", [1000,10,0], [], 0, \"NONE\"];\npublicVariable \"BIS"
1 markerText !=", [0,0,0]]) setMarkerText (_this select 0);\n				PVAH_AdminReq = [69,player];publicVa" !="\n_marker setMarkerTypeLocal \"DestroyedVehicle\";\n_marker setMarkerTextLocal format [\"%1\",if (_vehicle == _x) then {name _x} else " !="\"SupplyVehicle\";\n_vm setMarkerSizeLocal [0.8, 0.8];\n_vm setMarkerTextLocal format[\" %1\", getText (configFile >> 'CfgVehicles' >>"
1 addMPEventHandler



















 

 

 

 

Share this post


Link to post
Share on other sites
1 минуту назад, Miduznya сказал:

У кого стоит инфистар пишем так фильтры:


5 "_createDialog" !="_dialog = createDialog "BankDialog";" !="_dialog = createdialog "GivePlayerDialog";"
5 "_closeDisplay =" !="((ctrlParent (_this select 0)) closeDisplay 9000);"

мой получился так: (сервер чистый установлена только система банка)

  Показать содержимое

 



//new2
5 "EqualCheats"
5 "been infected!"
5 "FunctionsManager" !=" (isNull _grp) then { _grp = group ((allmissionobjects 'FunctionsManager') select 0); };\nif (!isNull _grp) then {\n_list = units "
5 "BattleFieldClearance"
5 "BIS_MPF_logic" !"BIS_MPF_logic = BIS_MPF_dummygroup createUnit"
5 "BIS_MPF_dummygroup" !="BIS_MPF_dummygroup = createGroup sideLogic;" !"BIS_MPF_logic = BIS_MPF_dummygroup createUnit"
5 "_codeAHOFF"
5 "_box" !="{show_loot_infiSTAR = !show_loot_infiSTAR;};\n};\nif(isNil \"show_boxes_infiSTAR\")then{show_boxes_infiSTAR = false;};\nfnc_BoxS = {\n"
5 "_first in"
5 "_commands"
5 "_createDialog" !="_dialog = createDialog \"BankDialog\";" !="_dialog = createdialog \"GivePlayerDialog\";"
5 "_agent setDamage 1"
5 "_unit createUnit"
5 "_closeDisplay =" !="((ctrlParent (_this select 0)) closeDisplay 9000);"
5 "rJIPrequest =" !"rJIPrequest = 'JIPrequest'"
5 "RUSTLER"
5 "Ruslter"
5 "Systems Online"
5 "HangenderRE"
5 "vilegaming"
5 "Lystic"
5 "setDammage"
5 "@TheWarZ"
5 "beeeh"
5 "dayz-injector-menu"
5 "Shadowy_NONRE"
5 "_cute"
5 "_stuff"
5 "_vgmenu"
5 "_func4"
5 "_genVar"
5 "_rand60"
5 "_first_term"
5 "_skarmory"
5 "_salamence"
5 "Init RE"
5 "Nigger"
5 "action_crate1"
5 "_dummyveh"
5 "try saving"
5 "setDamage -"
5 "setDamage +"
1 cutrsc !="layer == player)};\nwaituntil {!(isNull (findDisplay 46))};\n5 cutRsc [\"wm_disp\",\"PLAIN\"];\n((uiNamespace getVariable \"wm_disp\") di" !="cutRsc ['rscDynamicText', 'PLAIN'];" !=";\n_displayText = {\nprivate [\"_display\",\"_textLine\"];\n4099999 cutrsc [\"RSC_DZ_Messages\",\"plain\"];\n_display = uinamespace getvaria" !="holdBreath select 0) or (_turboKey select 0)) then {\n4100002 cutRsc [\"DZ_BlackScreen\",\"PLAIN\"];\n(uiNamespace getVariable \"DZ_Bla" !="Completed)}) then {\nif (toLower DZE_UI == \"vanilla\") then {3 cutRsc ['playerStatusGUI','PLAIN',3];} else {3 cutRsc ['playerStatu" !="cameraView in [\"INTERNAL\",\"EXTERNAL\",\"GUNNER\"]) then {\n80000 cutRsc [\"DZ_GroupIcons\",\"PLAIN\"];\n\n_display = uiNamespace getVariab" !="= _y;\n_y = _array select 0;\n_h = _array select 1;\n};\n\n_layer cutrsc [\"rscDynamicText\",\"plain\"];\n\n_display = uinamespace getvaria" !="\"ca\modules_e\functions\GUI\fn_infoText.sqf\"\n\n\n\n\n\n\n\n\n\n\n\n3100 cutrsc [\"rscInfoText\",\"plain\"];\n\n\n\n_text = _this;\n_textArrayUnicode" !="Group;\ndeleteGroup _myGroup;\n80000 cutText [\"\",\"PLAIN\"]; \n\n3 cutRsc [\"default\", \"PLAIN\",3];\n4 cutRsc [\"default\", \"PLAIN\",3];\n\n_b"
1 setVehicleInit
1 createTeam
1 Waypoint !="oiter;\n_newDest = nil;\n_movingTo = _myDest;\n_array = 		[];\n_waypoint = [];\n\n_agentReset = false;\n\n_bodyStay = 	60;\n\n_agent disab"
1 createUnit !="roup);\n\n\n\n\n\n\n\n_group = createGroup west;\n_newUnit = _group createUnit [_class,getMarkerPos \"respawn_west\",[],0,\"NONE\"];\n_newUnit" !="eGroup sideLogic;\n\n\n\n\n\n\nBIS_MPF_logic = BIS_MPF_dummygroup createUnit [\"Logic\", [1000,10,0], [], 0, \"NONE\"];\npublicVariable \"BIS"
1 markerText !=", [0,0,0]]) setMarkerText (_this select 0);\n				PVAH_AdminReq = [69,player];publicVa" !="\n_marker setMarkerTypeLocal \"DestroyedVehicle\";\n_marker setMarkerTextLocal format [\"%1\",if (_vehicle == _x) then {name _x} else " !="\"SupplyVehicle\";\n_vm setMarkerSizeLocal [0.8, 0.8];\n_vm setMarkerTextLocal format[\" %1\", getText (configFile >> 'CfgVehicles' >>"
1 addMPEventHandler


















 

 

 

 

 

Да, я тоже щас поймал restriction #8

Share this post


Link to post
Share on other sites
1 минуту назад, Димас сказал:

Да, я тоже щас поймал restriction #8

у меня 10 была

Share this post


Link to post
Share on other sites

У банкира меню нет. Банкир есть, а взаимодействия с ним нет. Куда смотреть? Фильтры?

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Edited by Димас (see edit history)

Share this post


Link to post
Share on other sites
Только что, Димас сказал:

У банкира меню нет. Банкир есть, а взаимодействия с ним нет. Куда смотреть? Фильтры?

Если бы фильтры то кикнуло бы давно

 

Share this post


Link to post
Share on other sites
4 минуты назад, Димас сказал:

У банкира меню нет. Банкир есть, а взаимодействия с ним нет. Куда смотреть? Фильтры?

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

server_traders.sqf наверн

Share this post


Link to post
Share on other sites

В variables.sqf

ZSC_bankTraders = ["Functionary1_EP1_DZ"]; // Массив классов-трейдеров, доступных для банковского дела.

 

Edited by DrTauren
Оформил сообщение согласно правилам (see edit history)

Share this post


Link to post
Share on other sites

Так же в fn_selfActions.sqf проверить наличие этого блока:

	if (_isMan && {!(isPlayer _cursorTarget)} && {_typeOfCursorTarget in ZSC_bankTraders} && {!_isPZombie}) then {
		if (s_bank_dialog1 < 0) then {
			s_bank_dialog1 = player addAction ["Bank Teller","scripts\zsc\atmDialog.sqf",_cursorTarget,3,true,true];
		};
	} else {
		player removeAction s_bank_dialog1;
		s_bank_dialog1 = -1;
	};

 

Share this post


Link to post
Share on other sites
2 часа назад, Димас сказал:

У банкира меню нет. Банкир есть, а взаимодействия с ним нет. Куда смотреть? Фильтры?

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Смотри внимательно этот пункт


Установка NPC-банкиров:
1) Находим в архиве папку dayz_server и лежащую в ней папку bankTraders. Последнюю копируем в наш распакованный dayz_server.pbo
2) Открываем наш init.sqf и находим строку:

а вообще я сделал так перекинул сперва файлы потом все по гайду сделал, тоже парился сперва то у всех барыг нет предметов на продажу то их не было то банкира небыло

Share this post


Link to post
Share on other sites

У самого разработчика в гайде довольно много ошибок, не знаю как он мог ZSC адаптировать ещё, раз порой не понимает что пишет в гайде.
Это я к тому, что ошибки в гайде ещё могут всплыть, и не одна. Если что сообщите в лс :relieved:

Share this post


Link to post
Share on other sites

Надыбал видео, правда на инглише, как это все делается.

https://www.youtube.com/watch?v=cb-SOIRV9Ns - установка самого ZSC

https://www.youtube.com/watch?v=g7SC4hetRkM - установка системы банка в сейфах для ZSC

Edited by RedLink (see edit history)

Share this post


Link to post
Share on other sites
Только что, RedLink сказал:

Надыбал видео, правда на инглише, как это все делается.

https://www.youtube.com/watch?v=g7SC4hetRkM

Один парень тоже пытался по видео сделать. Только обплевался и время потерял :joy:

Share this post


Link to post
Share on other sites
В 24.03.2017 в 08:14, Miduznya сказал:

У кого стоит инфистар пишем так фильтры (фильты под валюту + установленные банки):


5 "_createDialog" !="_dialog = createDialog "BankDialog";" !="_dialog = createdialog "GivePlayerDialog";"
5 "_closeDisplay =" !="((ctrlParent (_this select 0)) closeDisplay 9000);"

мой получился так: (сервер чистый установлена только система банка)

  Показать содержимое

 



//new2
5 "EqualCheats"
5 "been infected!"
5 "FunctionsManager" !=" (isNull _grp) then { _grp = group ((allmissionobjects 'FunctionsManager') select 0); };\nif (!isNull _grp) then {\n_list = units "
5 "BattleFieldClearance"
5 "BIS_MPF_logic" !"BIS_MPF_logic = BIS_MPF_dummygroup createUnit"
5 "BIS_MPF_dummygroup" !="BIS_MPF_dummygroup = createGroup sideLogic;" !"BIS_MPF_logic = BIS_MPF_dummygroup createUnit"
5 "_codeAHOFF"
5 "_box" !="{show_loot_infiSTAR = !show_loot_infiSTAR;};\n};\nif(isNil \"show_boxes_infiSTAR\")then{show_boxes_infiSTAR = false;};\nfnc_BoxS = {\n"
5 "_first in"
5 "_commands"
5 "_createDialog" !="_dialog = createDialog \"BankDialog\";" !="_dialog = createdialog \"GivePlayerDialog\";"
5 "_agent setDamage 1"
5 "_unit createUnit"
5 "_closeDisplay =" !="((ctrlParent (_this select 0)) closeDisplay 9000);"
5 "rJIPrequest =" !"rJIPrequest = 'JIPrequest'"
5 "RUSTLER"
5 "Ruslter"
5 "Systems Online"
5 "HangenderRE"
5 "vilegaming"
5 "Lystic"
5 "setDammage"
5 "@TheWarZ"
5 "beeeh"
5 "dayz-injector-menu"
5 "Shadowy_NONRE"
5 "_cute"
5 "_stuff"
5 "_vgmenu"
5 "_func4"
5 "_genVar"
5 "_rand60"
5 "_first_term"
5 "_skarmory"
5 "_salamence"
5 "Init RE"
5 "Nigger"
5 "action_crate1"
5 "_dummyveh"
5 "try saving"
5 "setDamage -"
5 "setDamage +"
1 cutrsc !="layer == player)};\nwaituntil {!(isNull (findDisplay 46))};\n5 cutRsc [\"wm_disp\",\"PLAIN\"];\n((uiNamespace getVariable \"wm_disp\") di" !="cutRsc ['rscDynamicText', 'PLAIN'];" !=";\n_displayText = {\nprivate [\"_display\",\"_textLine\"];\n4099999 cutrsc [\"RSC_DZ_Messages\",\"plain\"];\n_display = uinamespace getvaria" !="holdBreath select 0) or (_turboKey select 0)) then {\n4100002 cutRsc [\"DZ_BlackScreen\",\"PLAIN\"];\n(uiNamespace getVariable \"DZ_Bla" !="Completed)}) then {\nif (toLower DZE_UI == \"vanilla\") then {3 cutRsc ['playerStatusGUI','PLAIN',3];} else {3 cutRsc ['playerStatu" !="cameraView in [\"INTERNAL\",\"EXTERNAL\",\"GUNNER\"]) then {\n80000 cutRsc [\"DZ_GroupIcons\",\"PLAIN\"];\n\n_display = uiNamespace getVariab" !="= _y;\n_y = _array select 0;\n_h = _array select 1;\n};\n\n_layer cutrsc [\"rscDynamicText\",\"plain\"];\n\n_display = uinamespace getvaria" !="\"ca\modules_e\functions\GUI\fn_infoText.sqf\"\n\n\n\n\n\n\n\n\n\n\n\n3100 cutrsc [\"rscInfoText\",\"plain\"];\n\n\n\n_text = _this;\n_textArrayUnicode" !="Group;\ndeleteGroup _myGroup;\n80000 cutText [\"\",\"PLAIN\"]; \n\n3 cutRsc [\"default\", \"PLAIN\",3];\n4 cutRsc [\"default\", \"PLAIN\",3];\n\n_b"
1 setVehicleInit
1 createTeam
1 Waypoint !="oiter;\n_newDest = nil;\n_movingTo = _myDest;\n_array = 		[];\n_waypoint = [];\n\n_agentReset = false;\n\n_bodyStay = 	60;\n\n_agent disab"
1 createUnit !="roup);\n\n\n\n\n\n\n\n_group = createGroup west;\n_newUnit = _group createUnit [_class,getMarkerPos \"respawn_west\",[],0,\"NONE\"];\n_newUnit" !="eGroup sideLogic;\n\n\n\n\n\n\nBIS_MPF_logic = BIS_MPF_dummygroup createUnit [\"Logic\", [1000,10,0], [], 0, \"NONE\"];\npublicVariable \"BIS"
1 markerText !=", [0,0,0]]) setMarkerText (_this select 0);\n				PVAH_AdminReq = [69,player];publicVa" !="\n_marker setMarkerTypeLocal \"DestroyedVehicle\";\n_marker setMarkerTextLocal format [\"%1\",if (_vehicle == _x) then {name _x} else " !="\"SupplyVehicle\";\n_vm setMarkerSizeLocal [0.8, 0.8];\n_vm setMarkerTextLocal format[\" %1\", getText (configFile >> 'CfgVehicles' >>"
1 addMPEventHandler



















 

 

 

 

В гайде редактируем 2 раза фильтр. При установке валюты:

 

В 24.03.2017 в 01:56, DrTauren сказал:

Настройка фильтров BattlEye:
1)
Открываем папку с фильтрами BattlEye и находим файл scripts.txt. Примерно на 12й строке файла находим такой код:


5 createDialog

в её конец добавляем это:


!="_dialog = createDialog \"BankDialog\";" !="_dialog = createdialog \"GivePlayerDialog\";"

2) В этом же файле примерно на 10й строке находим это:


5 closeDisplay

и так же в конец добавляем код:


!="((ctrlParent (_this select 0)) closeDisplay 9000);"

 

И при добавлении банков в систему:

Настройка фильтров BattlEye под банки:

1) Заходим в папку с фильтрами BattlEye и открываем файл scripts.txt. и примерно на 12 строке находим код, начинающийся с этого:



5 "createDialog"

добавляем в конец этой строки:



!"_dialog = createdialog \"atmDialog\";"

В твоём примере только установка валюты. Меня запутало это. "Restriction" 

Edited by Димас (see edit history)

Share this post


Link to post
Share on other sites

Ещё вопрос:
Есть разница между(фильтр)  "_createDialog"  и  "createDialog"  и   createDialog   ?

Edited by Димас (see edit history)

Share this post


Link to post
Share on other sites

Ник Разве это не оно?:

if (_typeOfCursorTarget in DZE_MoneyStorageClasses && {!locked _cursorTarget} && {!(_typeOfCursorTarget in DZE_LockedStorage)} && {player distance _cursorTarget < 5}) then {
		if (s_bank_dialog < 0) then {
			s_bank_dialog = player addAction ["Access bank","scripts\zsc\bankDialog.sqf",_cursorTarget,1,true,true];
		};
	} else {
		player removeAction s_bank_dialog;
		s_bank_dialog = -1;
	};

 

Share this post


Link to post
Share on other sites
1 минуту назад, Димас сказал:

Ник Разве это не оно?:


if (_typeOfCursorTarget in DZE_MoneyStorageClasses && {!locked _cursorTarget} && {!(_typeOfCursorTarget in DZE_LockedStorage)} && {player distance _cursorTarget < 5}) then {
		if (s_bank_dialog < 0) then {
			s_bank_dialog = player addAction ["Access bank","scripts\zsc\bankDialog.sqf",_cursorTarget,1,true,true];
		};
	} else {
		player removeAction s_bank_dialog;
		s_bank_dialog = -1;
	};

 

Это для сейфов, локбоксов или то, что будет указано в DZE_MoneyStorageClasses

Share this post


Link to post
Share on other sites

Это для торговцев-банкиров(ботов), они определены в ZSC_bankTraders

	if (_isMan && {!(isPlayer _cursorTarget)} && {_typeOfCursorTarget in ZSC_bankTraders} && {!_isPZombie}) then {
		if (s_bank_dialog1 < 0) then {
			s_bank_dialog1 = player addAction ["Bank Teller","scripts\zsc\atmDialog.sqf",_cursorTarget,3,true,true];
		};
	} else {
		player removeAction s_bank_dialog1;
		s_bank_dialog1 = -1;
	};

Это для объектов доступа к банку, ноутбук, инфо-стенд, или всё, что определено в ZSC_bankObjects

	if (_typeOfCursorTarget in ZSC_bankObjects && {player distance _cursorTarget < 5}) then {
		if (s_bank_dialog2 < 0) then {
			s_bank_dialog2 = player addAction ["Bank ATM","scripts\zsc\atmDialog.sqf",_cursorTarget,3,true,true];
		};
	} else {
		player removeAction s_bank_dialog2;
		s_bank_dialog2 = -1;
	};

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By TokZe
      Добрый вечер, знающие подскажите как реализовать продажу через сайт, без очереди и вип!
      также как вывести топ игроков на сайт
    • By CubeIn
      Есть ли у кого ни будь шаблон или инструкция как создать свой шеврон?
      Нашел видео от Фидова, но ссылка на шаблон не действительна

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • By aimlock
      Всем привет, я заметил что некоторые люди не до конца понимают что такое регистрация анимаций для предметов в руках, как ее правильно делать и для чего она нужна?

      Для чего это нужно? Допустим вы добавляете предмет в игру и не привязываете его ни к какому объекту (создаете полностью с нуля, задаете свойства) и сталкиваетесь с тем что ваш объект без привязки не имеет должной анимации. А имеет стандартную анимацию банки консервы (в том числе и для предметов которые должны держаться в 2 руках), ну или вовсе предмет находиться в ногах у персонажа (примеры прикрепил скриншоты). Именно для этого и нужно привязывать анимацию положения объекта в руках через скрипт.

      На момент написания этого поста я знаю 3 вида регистрации анимаций для предметов в руках:
      1. PlayerBase
      2. JMAnimRegister
      3. ModItemRegisterCallbacks

      До создания последних 2 способов все использовали PlayerBase :
       
      modded class PlayerBase { override void Init() { DayzPlayerItemBehaviorCfg fireArmsItemBehaviour = new DayzPlayerItemBehaviorCfg; fireArmsItemBehaviour.SetFirearms(); GetDayZPlayerType().AddItemInHandsProfileIK("MyModdedWeapon", "dz/anims/workspaces/player/player_main/weapons/player_main_cz527.asi", fireArmsItemBehaviour, "dz/anims/anm/player/ik/weapons/cz527.anm", "dz/anims/anm/player/reloads/cz527/w_CZ527_states.anm"); super.Init(); } } Но у этого способа есть очень большой минус, это очень нестабильная штука. Нередко крашила сервера и имела ограничения на кол-во регистрации анимаций.
      С такими большими минусами, мододеллы начали искать решения как можно сделать это более стабильно и оптимизированно. И такой способ нашли.

      DayZPlayerTypeRegisterItems(DayZPlayerType Type) вот наше спасение, но тут тоже не все так просто, полумолчание это функция внутри класса, а для поставленной задачи (иметь возможность безопасно  и стабильно вносить новую регистрацию предметов) это не подходит. Тогда разработчики мода CF создали кастомный класс с использованием схожих функций для регистрации анимаций положений предметов в руках. Этим классом является JMAnimRegister. Стабильная и оптимизированная функция, которой очень просто пользоваться. Разумеется использовать вы сможете этот класс только при наличии в своей сборке CF . Как им пользоваться?
       
      modded class JMAnimRegister { override void OnRegisterFireArms( DayZPlayerType pType, DayzPlayerItemBehaviorCfg pBehavior ) { super.OnRegisterFireArms( pType, pBehavior ); pType..AddItemInHandsProfileIK("MyModdedWeapon", "dz/anims/workspaces/player/player_main/weapons/player_main_cz527.asi", pBehavior, "dz/anims/anm/player/ik/weapons/cz527.anm", "dz/anims/anm/player/reloads/cz527/w_CZ527_states.anm"); } }; Как самый простой пример. И так можно задавать любому количеству предметов положение в руках :
       
      modded class JMAnimRegister { override void OnRegisterFireArms( DayZPlayerType pType, DayzPlayerItemBehaviorCfg pBehavior ) { super.OnRegisterFireArms( pType, pBehavior ); pType..AddItemInHandsProfileIK("MyModdedWeapon", "dz/anims/workspaces/player/player_main/weapons/player_main_cz527.asi", pBehavior, "dz/anims/anm/player/ik/weapons/cz527.anm", "dz/anims/anm/player/reloads/cz527/w_CZ527_states.anm"); pType..AddItemInHandsProfileIK("MyModdedWeapon2", "dz/anims/workspaces/player/player_main/weapons/player_main_cz527.asi", pBehavior, "dz/anims/anm/player/ik/weapons/cz527.anm", "dz/anims/anm/player/reloads/cz527/w_CZ527_states.anm"); } }; Прошу обратить внимание, что мы используем modded, мы модифицируем уже существующий класс внутри
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • By Kronox
      Всем привет, в очередной раз прошу вашей помощи.
      Решил сделать тестовый
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • By 123new
      И так, ребятки, вот вам небольшая 'полезняшка' от меня, и совершенно бесплатно!
       
      Описание:

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      или создать их самим со следующим содержанием:
      Script.c
      /* Описание: Скрипт выдачи индивидуального стартового лута, скина игрока и точек спавна Автор: 123new Установка: 1. По пути: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\ создать папку 'CustomSpawnPlayerConfig' и поместить в нее 3 файла скрипта: Script.c Sets.c init_mod.c 2. В файле: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c в самом верху файла добавить: #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c" 3. В папке, обозначенной параметром запуска сервера '-profile=', поместить файл с именем CustomSpawnPlayerConfig.txt и заполнить его данными по следующему формату: UID|Skin_player|sets_numbers|points_spawns где UID - это steam64id от профиля игрока в steam Skin_player - точный id скина игрока (можно указать 0 для отключения опции) sets_numbers - номер сета со стартовым лутом (можно указать несколько через ';', указать один всего, либо указать 0 для отключения опции) points_spawns - координаты спавна игрока на карте в формате 'x y z' (можно указать несколько через ';', указать всего одну точку, либо указать 0 для отключения опции) Пример: 76561198141889254|SurvivorM_Oliver|1|12955.091797 16.115206 7993.588379 76561198141889256|SurvivorM_Oliver|1;2|14791.965820 76.481781 14041.661133;12029.079102 196.356125 7274.689941 76561198141889253|SurvivorM_Oliver|0|0 4. В файле Sets.c в папке: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\ настроить стартовый лут для ваших игроков и написать собственные сеты ВАЖНО: количество сетов можно делать любое, номера сетов брать от 1 и выше (не должно быть -1, либо 0, только от 1 и выше) Все что укажете в блоке default будет применено для всех игроков при респавне в случае, если им не выдан никакой сет! P.S. Прикрепить к соспавненному оружию магазин не получится, рабочего кода я не смог найти!! Если у вас папка активной миссии сервера отличается от dayzOffline.chernarusplus то переименуйте ее в строке, вписываемой в: {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c */ class CustomSpawnPlayerConfig { private string Location_Directory_config = "$profile:"; // Расположение папки с конфигом скрипта private string Location_filename_config = "CustomSpawnPlayerConfig.txt"; // имя файла с конфигом скрипта private string default_log_block_name = "[CustomSpawnPlayerConfig] "; // Стандартный блок скрипта для идентификации с script.log private string disable_read_parameter = "0"; // Стандартное значение (без кавычек) для обозначения в файле конфига скрипта неиспользование параметра private string block_split_parameters_config = "|"; // Символ, обозначающий разделение параметров при чтении файла конфига private string block_split_multi_parameters_config = ";"; // Символ, обозначающий перечисление в одной ячейке параметра нескольких параметров при чтении файла конфига private bool enabled_loading_custom_spawnpoints = true; // Параметр, включающий и отключающий возможность использования приватной точки спавна для каждого игрока. В случае отключения кастомная точка спавна будет отключена для всех поумолчанию, вне зависимости от данных в конфиге! private bool enabled_loading_custom_sets = true; // Параметр, включающий и отключающий возможность использования приватного сета для каждого игроков. В случае отключения выдача сетов будет отключена для всех поумолчанию, вне зависимости от данных в конфиге, будет выдаваться только сет для всех игроков! private bool enabled_loading_custom_skins = true; // Параметр, включающий и отключающий возможность использования индивидуального стартового скина игрока для каждого игрока. В случае отключения эта возможность будет отключена для всех поумолчанию, вне зависимости от данных в конфиге! // ------------------------------------------------------------ // ---------------- NEXT CODE DON'T EDIT ----------------- // ------------------------------------------------------------ ref map<string, ref array<vector>> players_spawnpoints = new map<string, ref array<vector> >; ref map<string, ref array<int>> players_sets = new map<string, ref array<int> >; ref map<string, string> players_skins = new map<string, string>; private bool enabled_loaded_successfull_config = false; string Log_CustomSpawnPlayerConfig_GetDateTime() { private int year, month, day, hour, minute, second; GetYearMonthDay(year, month, day); GetHourMinuteSecond(hour, minute, second); string returned_message = "[" + day.ToStringLen(2) + "." + month.ToStringLen(2) + "." + year.ToStringLen(2) + " - " + hour.ToStringLen(2) + "." + minute.ToStringLen(2) + "." + second.ToStringLen(2) + "] "; return returned_message; } bool Check_coords_disable(vector coord) { private bool ret_zn = false; private float pos_x = coord[0]; private float pos_y = coord[1]; private float pos_z = coord[2]; if ((pos_x == 0.0) & (pos_y == 0.0) & (pos_z == 0.0)) { ret_zn = true; } return ret_zn; } vector Set_Read_coords_disable() { return Vector(0.0, 0.0, 0.0); } void CustomSpawnPlayerConfig() { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + "CustomSpawnPlayerConfig initialize start!"); Read_Update_Config(); } void ~CustomSpawnPlayerConfig() { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + "CustomSpawnPlayerConfig work end, class closed!"); } void Read_Update_Config() { private string name_block_work = "[ReadAndUpdateSettings] "; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + " Started Reading config!"); private array<string> readed_lines_config = ReadFileConfig(); private bool check_normal_read = AnaliseFileConfig(readed_lines_config); if (check_normal_read) { LoadFileConfig(readed_lines_config); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "config readed successfull!"); enabled_loaded_successfull_config = true; } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "config read failed, work script disabled for players!"); enabled_loaded_successfull_config = false; } } array<string> ReadFileConfig() { private string name_block_work = "[ReadFileConfig] "; private array<string> readed_lines_config = new array<string>; readed_lines_config.Clear(); if (FileExist ( (Location_Directory_config + Location_filename_config) ) ) { private string line_content; FileHandle file = OpenFile((Location_Directory_config + Location_filename_config), FileMode.READ); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Open file config: " + (Location_Directory_config + Location_filename_config)); if (file != 0) { while ( FGets( file, line_content ) > 0 ) { readed_lines_config.Insert( line_content); } CloseFile(file); } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! CAN'T OPEN FILE CONFIG : " + (Location_Directory_config + Location_filename_config)); } //readed_lines_config.Debug(); } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! CAN'T FOUND FILE CONFIG OR DIRECTORY: " + (Location_Directory_config + Location_filename_config)); } return readed_lines_config; } bool AnaliseFileConfig(array<string> readed_lines_config) { private bool return_zn = true; private string name_block_work = "[AnaliseFileConfig] "; if (readed_lines_config.Count() > 0) { foreach (string line : readed_lines_config) { if (line.Contains(block_split_parameters_config)) { private array<string> splited_line = new array<string>; line.Split( block_split_parameters_config, splited_line ); if (splited_line.Count() == 4) { private string UID_player = splited_line.Get(0); private string default_skin_player = splited_line.Get(1); private string sets_numbers_player = splited_line.Get(2); private string points_spawn_player = splited_line.Get(3); if ((UID_player == "") || (default_skin_player == "") || (sets_numbers_player == "") || (points_spawn_player == "")) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Lines in Readed file is not correct, please, fix your config script!"); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Line checking: " + line); return_zn = false; break; } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Readed file is have incorrect count parameters with a tag '" + block_split_parameters_config + "', please, fix your config script!"); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Line checking: " + line); return_zn = false; break; } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Readed file can't have a tag '" + block_split_parameters_config + "', please, fix your config script!"); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Line checking: " + line); return_zn = false; break; } } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "ERROR!!! Config file is empty, fix your config script!"); return_zn = false; } return return_zn; } void LoadFileConfig(array<string> readed_lines_config) { private string name_block_work = "[LoadFileConfig] "; players_spawnpoints.Clear(); players_sets.Clear(); players_skins.Clear(); foreach (string line : readed_lines_config) { private array<string> splited_line = new array<string>; splited_line.Clear(); line.Split( block_split_parameters_config, splited_line ); private string UID_player = splited_line.Get(0); private string default_skin_player = splited_line.Get(1); private string sets_numbers_player = splited_line.Get(2); private string points_spawn_player = splited_line.Get(3); private array<vector> temp_players_spawnpoints = new array<vector>; temp_players_spawnpoints.Clear(); array<int> temp_players_sets = new array<int>; temp_players_sets.Clear(); array<string> temp_players_spawnpoints_string = new array<string>; temp_players_spawnpoints_string.Clear(); array<string> temp_players_sets_string = new array<string>; temp_players_sets_string.Clear(); if (points_spawn_player.Contains(block_split_multi_parameters_config)) { points_spawn_player.Split( block_split_multi_parameters_config, temp_players_spawnpoints_string ); } else { temp_players_spawnpoints_string.Insert(points_spawn_player); } foreach (string line_spawnpoint : temp_players_spawnpoints_string) { if (line_spawnpoint == disable_read_parameter) { temp_players_spawnpoints.Insert(Set_Read_coords_disable()); } else { temp_players_spawnpoints.Insert(line_spawnpoint.ToVector()); } } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Generated massive for " + UID_player + " with " + temp_players_spawnpoints.Count().ToString() + " spawnpoints."); if (sets_numbers_player.Contains(block_split_multi_parameters_config)) { sets_numbers_player.Split( block_split_multi_parameters_config, temp_players_sets_string ); } else { temp_players_sets_string.Insert(sets_numbers_player); } foreach (string line_set : temp_players_sets_string) { if (line_set == disable_read_parameter) { temp_players_sets.Insert(0); } else { temp_players_sets.Insert(line_set.ToInt()); } } if (default_skin_player == disable_read_parameter) { default_skin_player = "0"; } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Generated massive for " + UID_player + " with " + temp_players_sets.Count().ToString() + " sets."); Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Detected for " + UID_player + " skin " + default_skin_player); players_spawnpoints.Insert(UID_player,temp_players_spawnpoints); players_sets.Insert(UID_player,temp_players_sets); players_skins.Insert(UID_player,default_skin_player); } } vector Load_And_Check_Spawnpoints(PlayerIdentity identity, vector pos_default) { private string name_block_work = "[Load_And_Check_Spawnpoints] "; private vector retun_pos = pos_default; if(identity) { private string Name_P = identity.GetName(); private string UID_P = identity.GetPlainId(); private string Game_UID_P = identity.GetId(); private string Game_ID_P = identity.GetPlayerId().ToString(); if (enabled_loading_custom_spawnpoints) { if ((players_spawnpoints.Count() > 0) && (enabled_loaded_successfull_config)) { if (players_spawnpoints.Contains(UID_P)) { private array<vector> readed_lines_config = new array<vector>; readed_lines_config = players_spawnpoints.Get(UID_P); private vector retun_pos_check = readed_lines_config.GetRandomElement(); if (Check_coords_disable(retun_pos_check)) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") disabled loading private spawn point. Will be used default spawn point!"); } else { retun_pos = retun_pos_check; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") setuped private spawn point: " + retun_pos.ToString()); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Can't founded private spawnpoint for player " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Config script is incorrect, checking private spawnpoints is disabled! Player: " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "disabled loading personal spawnpoints from config file script!"); } } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used spawn point: " + retun_pos.ToString()); return retun_pos; } string Load_And_Check_SpawnSkin_Player(PlayerIdentity identity, string characterName) { private string name_block_work = "[SelectStartSkinPlayer] "; private string retun_skin = characterName; if(identity) { private string Name_P = identity.GetName(); private string UID_P = identity.GetPlainId(); private string Game_UID_P = identity.GetId(); private string Game_ID_P = identity.GetPlayerId().ToString(); if (enabled_loading_custom_skins) { if (players_skins.Count() > 0) { if (players_skins.Contains(UID_P)) { private string readed_skin = players_skins.Get(UID_P); if (readed_skin == "0") { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") disabled loading private skin setting, will be used default setting game!"); } else { retun_skin = readed_skin; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") setuped private skin setting: " + retun_skin); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Can't founded private skin setting for player " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Config script is incorrect, checking private skin setting is disabled! Player: " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "disabled loading personal skin player settings from config file script!"); } } Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used skin: " + retun_skin); return retun_skin; } void Load_And_Check_StartLoadout(PlayerBase player) { private string name_block_work = "[SelectStartSetPlayer] "; private int use_set_id = -1; private PlayerIdentity identity = player.GetIdentity(); if(identity) { private string Name_P = identity.GetName(); private string UID_P = identity.GetPlainId(); private string Game_UID_P = identity.GetId(); private string Game_ID_P = identity.GetPlayerId().ToString(); if (enabled_loading_custom_sets) { if ((players_sets.Count() > 0) && (enabled_loaded_successfull_config)) { if (players_sets.Contains(UID_P)) { private array<int> readed_lines_config = new array<int>; readed_lines_config.Clear(); readed_lines_config = players_sets.Get(UID_P); private int chek_use_set_id = readed_lines_config.GetRandomElement(); if (chek_use_set_id == 0) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") disabled loading private set numbers. Will be used default set player! "); } else { use_set_id = chek_use_set_id; Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") setuped private set number is: " + use_set_id.ToString()); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Can't founded private sets for player " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "Config script is incorrect, checking private sets is disabled! Player: " + Name_P + "(steam64id=" + UID_P + ")"); } } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "disabled loading personal loadout sets player settings from config file script! Will be used default loadout!"); } if (use_set_id >= 0) { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used spawn set with number is: " + use_set_id.ToString()); } else { Print(Log_CustomSpawnPlayerConfig_GetDateTime() + default_log_block_name + name_block_work + "For player " + Name_P + "(steam64id=" + UID_P + ") will be used spawn default start set without number. "); } StartSetsPlayers.StartSetsPlayer(player, use_set_id); } } private array<EntityAI> GetItemListinobject(PlayerBase player,EntityAI item, bool check_player) { array<EntityAI> EntityAI_list_items = new array<EntityAI>; EntityAI_list_items.Clear(); int attIdx = 0; int attCount = 0; EntityAI item_in_object; if ((player) && (check_player)) { attCount = player.GetInventory().AttachmentCount(); for (attIdx = 0; attIdx < attCount; attIdx++) { item_in_object = player.GetInventory().GetAttachmentFromIndex(attIdx); if ( item_in_object.IsItemBase() ) { EntityAI_list_items.Insert(item_in_object); } } } if ((item) && !check_player) { attCount = item.GetInventory().AttachmentCount(); for (attIdx = 0; attIdx < attCount; attIdx++) { item_in_object = item.GetInventory().GetAttachmentFromIndex(attIdx); if ( item_in_object.IsItemBase() ) { EntityAI_list_items.Insert(item_in_object); } } } return EntityAI_list_items; } void RemoveAllItems (PlayerBase player) { private array<EntityAI> ItemListPlayer = new array<EntityAI>; private array<EntityAI> ItemsForDelete = new array<EntityAI>; private EntityAI itemInHands_player = player.GetHumanInventory().GetEntityInHands(); if (itemInHands_player != NULL) { if (player.CanDropEntity(itemInHands_player) && player.GetHumanInventory().CanRemoveEntityInHands()) { // Print("ItemForDelete: " + itemInHands_player.ToString()); ItemsForDelete.Insert(itemInHands_player); } } ItemListPlayer = GetItemListinobject(player,NULL,true); if (ItemListPlayer.Count() > 0) { foreach(EntityAI ItemPlayer: ItemListPlayer) { private array<EntityAI> ItemInItemInInventory = GetItemListinobject(NULL,ItemPlayer,false); private CargoBase cargo = ItemPlayer.GetInventory().GetCargo(); if(cargo) { if (cargo.GetItemCount() > 0) { for (int f = 0; f < cargo.GetItemCount(); f++) { if(cargo.GetItem(f)) { ItemsForDelete.Insert(cargo.GetItem(f)); } } } } if (ItemInItemInInventory.Count() > 0) { foreach(EntityAI items_temp: ItemInItemInInventory) { if(items_temp) { ItemsForDelete.Insert(items_temp); } } } if(ItemPlayer) { ItemsForDelete.Insert(ItemPlayer); } } } if (ItemsForDelete.Count() > 0) { foreach(EntityAI item_temp: ItemsForDelete) { if(item_temp) { GetGame().ObjectDelete(item_temp); } } } } }; Sets.c
      class StartSetsPlayersConfig { void StartSetsPlayer(PlayerBase player,int use_set_id) { EntityAI itemCreated = NULL; EntityAI itemCreated1 = NULL; ItemBase itemCasted = NULL; switch( use_set_id ) //Раздаем лут (можно использовать значения от 1 и выше, только не 0 и не -1) { case 1: //Set with number 1 (Сет с номером 1) { My_Custom_Spawn_Parameters.RemoveAllItems(player); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку itemCreated = player.GetInventory().CreateInInventory("CoyoteBag_Green"); // Выдаем рюкзак и записываем в переменную itemCreated if (itemCreated) // Проверяем, создался ли рюкзак. Если он создался, переменная itemCreated будет не пуста и проверка пройдет { SetRandomHealthItem(itemCreated); // Выдаем рюкзаку рандомное качество itemCreated1 = itemCreated.GetInventory().CreateInInventory("Apple"); // Добавляем в инвентарь созданного рюкзака яблоко и записываем в переменную itemCreated1 if (itemCreated1) // Проверяем, создалось ли яблоко в рюкзаке, яблоко у нас с переменной itemCreated1 { SetRandomHealthItem(itemCreated1); // Выдаем яблоку рандомное качество } itemCreated1 = NULL; // Обнуляем значение переменной после работы с ней, чтобы следующая проверка прошла корректно itemCreated1 = itemCreated.GetInventory().CreateInInventory("Rag"); // Выдаем игроку бинты в рюкзак и записываем в переменную itemCreated1 if (itemCreated1) // Проверяем, создались ли бинты в рюкзаке, они у нас с переменной itemCreated1 { itemCasted = ItemBase.Cast(itemCreated1); // Выполняем преобразование в другой класс для работы с нужной нам функцией, поскольку в классе EntityAI нет нужной нам функции SetQuantity, а в подклассе ItemBase она есть. Предмет при этом так и остается один и тот же! itemCasted.SetQuantity(4); // Определяем количество для созданных бинтов как 4 штуки SetRandomHealthItem(itemCreated); // Выдаем бинтам рандомное качество, функция работает с классом EntityAI (см. в конфе файла) } } // переменную itemCreated не обнуляем далее, поскольку мы ее не используем в проверке ниже. itemCreated = player.GetInventory().CreateInInventory("TTSKOPants"); // Выдаем игроку штаны itemCreated = player.GetInventory().CreateInInventory("TTsKOJacket_Camo"); // Выдаем игроку куртку itemCreated = player.GetInventory().CreateInInventory("CombatBoots_Black"); // Выдаем игроку обувь //itemCasted = ItemBase.Cast(itemCreated); // Строка не нужна, закоментирована. используется для изменения класса EntityAI в ItemBase (чтобы нужные операции были доступны) itemCreated = player.GetInventory().CreateInInventory("CombatKnife"); // Выдаем игроку ножик в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("FNX45"); // Выдаем игроку FNX в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd"); // Выдаем игроку магазины к FNX в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd"); // Выдаем игроку магазины к FNX в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_AKM_30Rnd"); // Выдаем игроку магазины к AKM в любой свободный слот в инвентаре itemCreated = player.GetInventory().CreateInInventory("Mag_AKM_30Rnd"); // Выдаем игроку магазины к AKM в любой свободный слот в инвентаре itemCreated = NULL; // Обнуляем значение переменной после работы с ней, нужно если мы будем использовать ее далее itemCreated = player.GetHumanInventory().CreateInHands("akm"); // Выдаем игроку AKM в руки if (itemCreated) // Проверяем, создался ли АКМ { itemCreated.GetInventory().CreateAttachment( "PSO11Optic" ); // Выдаем игроку на AKM оптику ПСО 11 и крепим itemCreated.GetInventory().CreateAttachment( "AK_WoodBttstck" ); // Выдаем игроку на AKM цевье, приклад и глушитель, и крепим itemCreated.GetInventory().CreateAttachment( "AK_WoodHndgrd" ); // Выдаем игроку на AKM цевье, приклад и глушитель, и крепим itemCreated.GetInventory().CreateAttachment( "AK_Suppressor" ); // Выдаем игроку на AKM цевье, приклад и глушитель, и крепим } break; } case 2: //Set with number 2 (Сет с номером 2) { break; } case 3: //Set with number 3 (Сет с номером 3) { break; } case 4: //Set with number 4 (Сет с номером 4) { break; } case 5: //Set with number 5 (Сет с номером 5) { break; } case 6: //Set with number 6 (Сет с номером 6) { break; } default: //Default starting spawn set (Сет поумолчанию для всех игроков, если хотите назначить - добавляйте здесь!) { //My_Custom_Spawn_Parameters.RemoveAllItems(player); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку DefaultSets(player); // Для выдачи своих сетов по рандому всем игрокам, не прописанным в скрипте, раскомментировать эту строку break; } } } void SetRandomHealthItem(EntityAI itemCreated) // Функция генерирует и применяет для предмета рандомное значение здоровья! { if ( itemCreated ) { private int rndHlt = Math.RandomInt(55,6); itemCreated.SetHealth("","",rndHlt); } } void DefaultSets(PlayerBase player) // Функция выдает сеты игрокам, не прописанным в конфигурации скрипта!!! { EntityAI itemCreated = NULL; EntityAI itemCreated1 = NULL; ItemBase itemCasted = NULL; // ниже пример, если вам нужно задать свои точки спавна для всех игроков. Этот код можно также использовать и для каждого сета индивидуально! // Код закомментирован, если это надо - раскомментируйте! // начало кода точек спавна игрока /* private array <vector> spawnpoints = {"7500 0 7500", "7500 0 7500","7500 0 7500", "7500 0 7500"}; private vector selected_spawnpoint = spawnpoints.GetRandomElement(); player.SetPosition(selected_spawnpoint); */ // конец кода точек спавна игрока private int random_set_number = Math.RandomIntInclusive(1,6); // генерируем рандом номер сета от 1 до 6 включительно (по значениям блоков case ниже) switch( random_set_number ) //Раздаем лут (можно использовать значения от 1 и выше, только не 0 и не -1) { case 1: //Set with number 1 (Сет с номером 1) { break; } case 2: //Set with number 2 (Сет с номером 2) { break; } case 3: //Set with number 3 (Сет с номером 3) { break; } case 4: //Set with number 4 (Сет с номером 4) { break; } case 5: //Set with number 5 (Сет с номером 5) { break; } case 6: //Set with number 6 (Сет с номером 6) { break; } default: //Default starting spawn set (Сет поумолчанию для всех игроков, в случае если ни один из сетов выше не выпал. { //My_Custom_Spawn_Parameters.RemoveAllItems(player); // Чтобы удалить с персонажа уже имеющиеся стандартные стартовые шмотки раскомментировать строку break; } } } } init_mod.c
      #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\Script.c" #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\Sets.c" ref CustomSpawnPlayerConfig My_Custom_Spawn_Parameters = new CustomSpawnPlayerConfig(); ref StartSetsPlayersConfig StartSetsPlayers = new StartSetsPlayersConfig(); modded class CustomMission { override void OnInit () { super.OnInit(); GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(My_Custom_Spawn_Parameters.Read_Update_Config, 120000, true); // Обновление настроек скрипта кастомных спавнов, 1 минута = 60000 } override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName) { pos = My_Custom_Spawn_Parameters.Load_And_Check_Spawnpoints(identity, pos); characterName = My_Custom_Spawn_Parameters.Load_And_Check_SpawnSkin_Player(identity, characterName); super.CreateCharacter(identity, pos, ctx, characterName); return m_player; } override void StartingEquipSetup(PlayerBase player, bool clothesChosen) { super.StartingEquipSetup(player, clothesChosen); My_Custom_Spawn_Parameters.Load_And_Check_StartLoadout(player); } }  

       
      2. В файле:
      {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c в самом верху файла добавить:
      #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c" Чтобы получилось примерно так

       
      3. В папке, обозначенной параметром запуска сервера '-profile=', поместить файл с именем CustomSpawnPlayerConfig.txt
      и заполнить его данными по следующему формату:
      UID|Skin_player|sets_numbers|points_spawns где UID - это steam64id от профиля игрока в steam
      Skin_player - точный id скина игрока (можно указать 0 для отключения опции)
      sets_numbers - номер сета со стартовым лутом (можно указать несколько через ';', указать один всего, либо указать 0 для отключения опции)
      points_spawns - координаты спавна игрока на карте в формате 'x y z' (можно указать несколько через ';', указать всего одну точку, либо указать 0 для отключения опции)
      Пример:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      76561198141889254|SurvivorM_Oliver|1|12955.091797 16.115206 7993.588379 76561198141889256|SurvivorM_Oliver|1;2|14791.965820 76.481781 14041.661133;12029.079102 196.356125 7274.689941 76561198141889253|SurvivorM_Oliver|0|0  
      4. В файле Sets.c в папке:
      {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\ настроить стартовый лут для ваших игроков и написать собственные сеты
      ВАЖНО: количество сетов можно делать любое, номера сетов брать от 1 и выше (не должно быть -1, либо 0, только от 1 и выше)
      Все что укажете в блоке default будет применено для всех игроков при респавне в случае, если им не выдан никакой сет!
      Поумолчанию в функции default вызывается функция DefaultSets, позволяющая рандомно выбирать любой из сетов для игроков, которым сет не задан в конфигурации скрипта. Принцип составления сетов такой же, как и выше. Если будете пользоваться этим, обратите вниманием на строку:
      private int random_set_number = Math.RandomIntInclusive(1,6); Эта функция генерирует число от 1 до 6 включительно. Соответственно если сетов будет больше 6, то число надо корректировать и тут тоже!
       
      P.S. Прикрепить к соспавненному оружию магазин не получится, рабочего кода я не смог найти!!
       
      Если у вас папка активной миссии сервера отличается от dayzOffline.chernarusplus то переименуйте ее в строке, вписываемой в:
              {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\init.c
              {папка с вашим сервером}\mpmissions\dayzOffline.chernarusplus\CustomSpawnPlayerConfig\init_mod.c
       
      Благодарности: Товарищу Mizev за его первоначальные гайды в группе VK при появлении в сети серверной части игры
       
       
  • Our picks

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.