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
  • 0
CPUblackman

Создание техники с записью в БД

Всем доброго времени суток, назрел вопрос который сам решить не в состоянии. В общем понадобился скрипт на спавн техники с записью в БД, решил переделать под это дело скрипт из инфика или ваи, ни то ни другое результатов не дало, техника спавнится, в БД её нет. Я уверен что сотворил сказочную ересь, но где именно в упор не вижу. Скрипт исполняется с сервера, так что в чём проблема не понимаю и прошу помощи.


 

_veh     = "M1A1" createVehicle position player;

_veh setVariable ["ObjectID","1",true];
_keyid = ceil(random(12500));
_veh setVariable ["CharacterID",str(_keyid),true];

      _class = typeOf _veh;
            _characterID     = _veh getVariable ["CharacterID", "0"];
            _worldspace        = [getDir _veh, getPosATL _veh];
            _hitpoints         = _veh call vehicle_getHitpoints;
            _damage         = damage _veh;
            _array             = [];

            {
                _hit = [_veh,_x] call object_getHit;
                _selection = getText (configFile >> "CfgVehicles" >> (typeOf _veh) >> "HitPoints" >> _x >> "name");
                if (_hit > 0) then {_array set [count _array,[_selection,_hit]]};
            } count _hitpoints;

            _inventory     = [
                getWeaponCargo _veh,
                getMagazineCargo _veh,
                getBackpackCargo _veh
            ];

            _fuel     = fuel _veh;
            _uid     = _worldspace call dayz_objectUID2;
            
            _key     = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance,_class,_damage,_characterID,_worldspace,_inventory,_array,_fuel,_uid];
            _key call server_hiveWrite;
            
            [_veh,_uid,_fuel,_damage,_array,_characterID,_class] spawn {
            
private ["_veh","_uid","_fuel","_damage","_array","_characterID","_done","_retry","_key","_result","_outcome","_oid","_class","_res"];

                _veh         = _this select 0;
                _uid             = _this select 1;
                _fuel             = _this select 2;
                _damage         = _this select 3;
                _array             = _this select 4;
                _characterID    = _this select 5;
                _class             = _this select 6;
                _done             = false;
                //ЧЁТО СТРАННОЕ
while {!_done} do {
_key         = format["CHILD:388:%1:",_uid];
                        _result     = _key call server_hiveReadWrite;
                        _outcome     = _result select 0;
                        waitUntil {!isNil "_outcome"};
                        if(_outcome == "PASS") then {
                            _oid = _result select 1;
                            _veh setVariable ["ObjectID", _oid, true];
                            _done  = true;
                        } else {
                            _done = false;
                        };
                    };
                    sleep 0.2;
                    _veh setVariable ["lastUpdate",time];
                };

Share this post


Link to post
Share on other sites

10 answers to this question

Recommended Posts

  • 0

Насколько мне известно в инфистаре за это отвечает .dll... Поправьте если не прав

Share this post


Link to post
Share on other sites



  • 0
//    Выбираем цвет ключа
_keyColor    =    ["Green", "Red", "Blue", "Yellow", "Black"] call BIS_fnc_selectRandom;
//    генерируем номер ключа
_keyNumber    =    (floor(random 2500)) + 1;
//    Создаем класс ключа
_key        =    format[("ItemKey%1%2"), _keyColor, _keyNumber];
//    Устанавливаем класс техники
_vehicle    =    "M1A1";
//    Координаты спавна техники
_coord        =    [100, 100, 0];
//    Получаем по ключу ЧарИД
_characterID    =    str(getNumber(configFile >> "CfgWeapons" >> _key >> "keyid"));
//    Генерируем ОбжИД
_objectID        =    str(round(random 999999));
//    Создаем технику
_veh            =    createVehicle [_vehicle, _coord, [], 0, "CAN_COLLIDE"];
//    Делаем ее закрытой
_veh setvehiclelock "locked";
//    Для Р3Ф(можно удалить, если не используется)
_veh setVariable ["R3F_LOG_disabled", true, true];
//    Для МФТоу(Можно удалить, если не используется)
_veh setVariable ["MF_Tow_Cannot_Tow", true, true];
//    Очищаем инвентарь техники
clearWeaponCargoGlobal  _veh;
clearMagazineCargoGlobal  _veh;
clearBackpackCargoGlobal _veh;
//    Выставляем переменные для техники в эпохе
_veh setVariable ["ObjectID", _objectID, true];
_veh setVariable ["ObjectUID", _objectID, true];
_veh setVariable ["lastUpdate", time];
_veh setVariable ["CharacterID", _characterID, true];
//    Добавляем технику в ОбжМонитор, для эпохи
dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_veh];

 

 

Это по быстрому, для сервера, без записи в БД. Для записи в БД 1 строку добавить.

Ключ соответственно, надо куда то положить....

 

P.S. Хрен с вами - полностью готовый скрипт, с конфигами(техника + координаты), со спавном каждый рестарт, БЕЗ записи в БД, или записью в БД(по желанию), со спавном рядом с техникой коробки с ключем - 300р.

Share this post


Link to post
Share on other sites
  • 0
1 час назад, CPUblackman сказал:

_veh     = "M1A1" createVehicle position player;

 

1 час назад, CPUblackman сказал:

Скрипт исполняется с сервера

Если он исполняется с сервера, то кто такой PLAYER в строке выше?

Share this post


Link to post
Share on other sites
  • 0

CPUblackman он скорее всего имел ввиду: откуда они берутся, координаты position player, если скрипт выполняется на стороне сервера

Edited by Thomas (see edit history)

Share this post


Link to post
Share on other sites
  • 0

Thomas Ну тогда мне нечего ответить, ибо танк спавнится на игроке, так что оно работает.

Share this post


Link to post
Share on other sites
  • 0

CPUblackman у тебя скрипт исполняется на стороне сервера, но берется значение position player, которое в таком виде можно использовать выполняя скрипт на клиенте.

 

Как вариант брать с клиента значение

 

_veh     = "M1A1" createVehicle PositionPlayer;

Ну а на клиенте объявить значение переменной и отправить на сервер

PositionPlayer = position player;

PublicVariableServer "PositionPlayer";

Ну после добавить обработчики, проверки, ожидания и т.п

 

 

Edited by Thomas (see edit history)

Share this post


Link to post
Share on other sites
  • 0

Thomas Говорю же, с этим проблема не стоит, я понял о чём ты, но оно и так работает, техника спавнится на игроке, проблема чисто с записью в бд. 

Share this post


Link to post
Share on other sites
  • 0
52 минуты назад, CPUblackman сказал:

Thomas Говорю же, с этим проблема не стоит, я понял о чём ты, но оно и так работает, техника спавнится на игроке, проблема чисто с записью в бд. 

Тебя сколько раз спросить надо - что есть player на сервере, если ты утверждаешь, что скрипт серверный?

Если играют 100500 игроков, как ты думаешь - кто такй player для сервера? - Он что по твоему, рандомно игрока выберет?

 

Ты для начала, определись, где ты запускаешь скрипт, что у тебя в нем, какого хрена у тебя работает player(100% только на клиенте такое прокатит), а уж потом о БД думай.

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 Serdce
      Данный скрипт, меняет процесс ремонта вашей техники, делая её более логичней, как было в А2.
      Для замены колеса, на нужно собственно само колесо, и тд. и тп. 
      Подробный список чего и для чего вы найдёте в файлах.
       
      Итак, преступим!
      Я не автор, я всего лишь перевожу.
      Первоисточник - https://github.com/aussie-battler/Exilemod-Super-Advanced-Repair-System-SARS
      По ссылке выше скачиваем архив, распаковываем в удобное место.
      Распаковываем ваше миссию "Exile.ваша карта"
      Из архива копируем папку "Custom" в папку вашей миссии "Exile.ваша карта"
      Открываем ваш description.ext  в нем мы ищем showHUD[] = 
      и полностью меняем на это - 
      Далее открываем ваш - initPLayerLocal.sqf
      В этом файле, сразу после строки - if (!hasInterface || isServer) exitWith {};
      Мы добавляем 
      //Bones Super Advanced Repair System (SARS)
      Bones_fnc_salvageAndRepairMenu = compileFinal preprocessFileLineNumbers "Custom\advancedRepair\Bones_fnc_salvageAndRepairMenu.sqf"; 
      Далее открываем ваш - config.cpp
      В нем мы ищем - class Car
      Внутри этого класса мы ищем
       
      И меняем на 
      Так же далее чуть ниже - class Air
      В нем мы также меняем это
      На это 
       
      Далее для если у вас есть Infistar!
      Распаковываем ваш инфистар и открываем его конфиг.
      В нём ищем     KCM = "true"; /* Just close ALL CommandingMenus */
      И меняем значение на false
      Чуть ниже в строке allowedCommandingMenus
      Мы добавляем  "#USER:ASL_Show_Repair_Options_Menu_Array"
      Ну вот и всё готово, всё сохранили и запаковали как было!
       
    • By NoNameUltima
      Тема не новая, но однообразные вопросы, возникают постоянно и у многих.
      Записал коротенькое, и надеюсь понятное видео по теме.
       
    • By Loker
      При покупке/продаже техники валюту за технику снимает/начисляет, но сама техника не появляется. 
      В логе возникает следующая ошибка: 
      15:04:28 "Server_PublishVehicle2 error: CLIENT AUTH KEY INCORRECT OR UNRECOGNIZED. PV ARRAY: [[323,[4037.27,11673.5,0.00289917]],"Ural_TK_CIV_EP1",false,"ItemKeyRed1798",B 1-1-B:1 (Player) REMOTE,""]" Как я понял новая проверка в версии мода 1.0.6.2 не может считать какой-то ключ пользователя. Может кто сталкивался с такой ошибкой. Буду рад любому совету. Заранее спасибо.
    • By Akie
      Проблема вот в чем, просто выкидывает из техники через короткое время после залезания в нее и не важно на ходу или нет, на каком месте в ней ты сидишь, просто пофигу, выкидывает и всё, в логах и на сервере, и на клиенте чисто подскажите куда копать пожалуйста
    • By BorizzK
      //Функция создания зданий/обьектов BORIZZ.K //Не поставит здание/обьект там где оно уже есть в радиусе 10м!!! //параметры вызова //НазваниеКласса, координаты, коррекция высоты (добавляется к высоте если > 0 - можно поставить здание на здание/поверхность выше земли или повесить в воздухе), Ориентация, Направление. int SpawnBuilding(string m_Building_Class, vector spawn_Point, float alt_Correct, vector spawn_Orient, vector spawn_Dir) //Спавн { Print("::: SpawnBuilding ::: SpawnBuilding(m_Building_Class = " + m_Building_Class + ", spawn_Point = " + spawn_Point.ToString() + ", alt_Correct = " + alt_Correct + ", spawn_Orient = " + spawn_Orient + ", spawn_Dir = " + spawn_Dir + ") :::"); array<Object> nearest_objects = new array<Object>; array<CargoBase> proxy_cargos = new array<CargoBase>; string className; Object object; float radius = 10; Object m_Building; int n_Building_Count = 0; spawn_Point[1] = GetGame().SurfaceY( spawn_Point[0], spawn_Point[2] ); if (alt_Correct > 0) { spawn_Point[1] = spawn_Point[1] + alt_Correct; } GetGame().GetObjectsAtPosition(spawn_Point, radius, nearest_objects, proxy_cargos); Print("::: SpawnBuilding ::: Radius: " + radius.ToString() + ", all nearest_objects: " + nearest_objects.Count().ToString() + " :::"); for ( int i = 0; i < nearest_objects.Count(); i++ ) { object = nearest_objects.Get(i); className = object.GetType(); if ( className == m_Building_Class ) { Print("::: SpawnBuilding ::: Found object: " + object.ToString() + ", className: " + className + ", Position: " + object.GetPosition() + " : Spawn " + m_Building_Class + " cancelled. ::: "); return 0; } } m_Building = GetGame().CreateObject( m_Building_Class, spawn_Point, false, true ); //m_Building.PlaceOnSurface(); if ( spawn_Orient[0] == 0 && spawn_Orient[1] == 0 && spawn_Orient[2] == 0) { m_Building.SetOrientation(m_Building.GetOrientation()); } else { m_Building.SetOrientation(spawn_Orient); } if ( spawn_Dir[0] == 0 && spawn_Dir[1] == 0 && spawn_Dir[2] == 0) { m_Building.SetDirection(m_Building.GetDirection()); } else { m_Building.SetDirection(spawn_Dir); } if (m_Building) { Print("::: SpawnBuilding ::: Result: Object: " + m_Building.ToString() + ", spawn_Point = " + m_Building.GetPosition().ToString() + ", alt_Correct = " + alt_Correct + ", spawn_Orient = " + m_Building.GetOrientation().ToString() + ", spawn_Dir = " + m_Building.GetDirection().ToString() + ") :::"); return 1; } else { Print("::: SpawnBuilding ::: Result: create object error. :::"); } return 0; } void SpawnBuildings() { int Buildings_Count; // пример Buildings_Count = SpawnBuilding("Land_City_FireStation", "6275 0 8013" , 0, "0 0 0", "0 0 40"); // Buildings_Count будет = 0 если здание не поставлено, 1 если поставлено } Простой способ установки
      Вставить в init.c (ВНЕ КЛАССА!)

      Вызывать в конце main()
      вот так
      SpawnBuildings();
       
      в функции SpawnBuildings() по примеру (там есть) прописываем какие здания куда, какая ориентация/и или направление
       
       
  • 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.