Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • 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];
                };

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

  • 0

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах





  • 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р.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, CPUblackman сказал:

_veh     = "M1A1" createVehicle position player;

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

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

Изменено пользователем Thomas (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

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

 

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

 

_veh     = "M1A1" createVehicle PositionPlayer;

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

PositionPlayer = position player;

PublicVariableServer "PositionPlayer";

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

 

 

Изменено пользователем Thomas (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
52 минуты назад, CPUblackman сказал:

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: 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"
      Ну вот и всё готово, всё сохранили и запаковали как было!
       
    • Автор: NoNameUltima
      Тема не новая, но однообразные вопросы, возникают постоянно и у многих.
      Записал коротенькое, и надеюсь понятное видео по теме.
       
    • Автор: 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 не может считать какой-то ключ пользователя. Может кто сталкивался с такой ошибкой. Буду рад любому совету. Заранее спасибо.
    • Автор: Akie
      Проблема вот в чем, просто выкидывает из техники через короткое время после залезания в нее и не важно на ходу или нет, на каком месте в ней ты сидишь, просто пофигу, выкидывает и всё, в логах и на сервере, и на клиенте чисто подскажите куда копать пожалуйста
    • Автор: 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() по примеру (там есть) прописываем какие здания куда, какая ориентация/и или направление
       
       
  • Наш выбор

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.