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

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

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • Не хотите БАН?

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

    Там вы можете продать или купить
    Всё что касается игровых серверов
  • 0
MisaAmane

Сохранение инвентаря в Virtual Garage

Вопрос

Нашел скрипт виртуального гаража. Он не сохраняет инвентарь машины. Мучался 2 дня, но в итоге теперь в таблицу виртуального гаража вписывается лут в транспорте, а вот при спавне его уже нет. Ниже выкладываю модифицированные файлики. Может есть у кого идеи почему нету лута в машине при спавне?

 

Сервер аддон Virtual Garage:

ExileServer_VirtualGarage_network_RetrieveVehicleRequest.sqf -

/*

 
    Name: ExileServer_VirtualGarage_network_RetrieveVehicleRequest.sqf
     Author(s): Shix
    Copyright © 2016 Shix
    This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
    To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
     Description: handles retrieve vehicle requests
*/
private ["_sessionID","_vehicleDBID","_player","_VehicleInfo","_vehClass","_vehFuel","_vehDamage","_vehHitPoints","_vehPinCode","_vehCargo_items","_vehCargo_magazines","_vehCargo_weapons","_vehCargo_container"];
_sessionID = _this select 0;
_vehicleDBID = (_this select 1) select 0;
try
{
  _player = _sessionID call ExileServer_system_session_getPlayerObject;
  if (isNull _player) then
  {
    throw "No player was found from the session ID";
  };
  _VehicleInfo = format ["RetrieveVehicle:%1", _vehicleDBID] call ExileServer_system_database_query_selectFull;
  _vehClass = (_VehicleInfo select 0) select 1;
  _vehFuel = (_VehicleInfo select 0) select 3;
  _vehDamage = (_VehicleInfo select 0) select 4;
  _vehHitPoints = (_VehicleInfo select 0) select 5;
  _vehPinCode = (_VehicleInfo select 0) select 6;
  _vehPosX = (_VehicleInfo select 0) select 7;
  _vehPosY = (_VehicleInfo select 0) select 8;
  _vehPosZ = (_VehicleInfo select 0) select 9;
  _vehVectorDirX = (_VehicleInfo select 0) select 10;
  _vehVectorDirY = (_VehicleInfo select 0) select 11;
  _vehVectorDirZ = (_VehicleInfo select 0) select 12;
  _vehVectorUpX = (_VehicleInfo select 0) select 13;
  _vehVectorUpY = (_VehicleInfo select 0) select 14;
  _vehVectorUpZ = (_VehicleInfo select 0) select 15;
  _vehCargo_items = (_VehicleInfo select 0) select 16;
  _vehCargo_magazines = (_VehicleInfo select 0) select 17;
  _vehCargo_weapons = (_VehicleInfo select 0) select 18;
  _vehCargo_container = (_VehicleInfo select 0) select 19;
  _texture = (_VehicleInfo select 0) select 20;
  [_sessionID,[_vehClass,_vehPinCode,_vehFuel,_vehDamage,_vehHitPoints,_vehicleDBID,_vehPosX,_vehPosY,_vehPosZ,_vehVectorDirX,_vehVectorDirY,_vehVectorDirZ,_vehVectorUpX,_vehVectorUpY,_vehVectorUpZ,_vehCargo_items,_vehCargo_magazines,_vehCargo_weapons,_vehCargo_container,_texture]] call ExileServer_VirtualGarage_network_SpawnRequestedVehicle;
} catch {
  [_exception,"Virtual Garage Retrieve Vehicle Error"] call ExileServer_VirtualGarage_utils_diagLog;
}
 

 

 

 

ExileServer_VirtualGarage_network_SpawnRequestedVehicle.sqf -

/*

 
     Name: ExileServer_VirtualGarage_network_SpawnRequestedVehicle.sqf
     Author(s): Shix
      Copyright © 2016 Shix
      This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
      To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
     Description: handles spawn Vehicle Requests
*/
private["_sessionID","_parameters","_vehicleClass","_pinCode","_vehicleFuel","_vehicleDamage","_vehicleHitPoints","_vehicleDatabaseID","_vehicleCargo_items","_vehicleCargo_magazines","_vehicleCargo_weapons","_vehicleCargo_container","_playerObject","_salesPrice","_playerMoney","_position","_vehicleObject","_responseCode"];
_sessionID = _this select 0;
_parameters = _this select 1;
_vehicleClass = _parameters select 0;
_pinCode = _parameters select 1;
_vehicleFuel = _parameters select 2;
_vehicleDamage = _parameters select 3;
_vehicleHitPoints = _parameters select 4;
_vehicleDatabaseID = _parameters select 5;
_vehiclePosX = _parameters select 6;
_vehiclePosY = _parameters select 7;
_vehiclePosZ = _parameters select 8;
_vehicleVectorDirX = _parameters select 9;
_vehicleVectorDirY = _parameters select 10;
_vehicleVectorDirZ = _parameters select 11;
_vehicleVectorUpX = _parameters select 12;
_vehicleVectorUpY = _parameters select 13;
_vehicleVectorUpZ = _parameters select 14;
_vehicleCargo_items = _parameters select 15;
_vehicleCargo_magazines = _parameters select 16;
_vehicleCargo_weapons = _parameters select 17;
_vehicleCargo_container = _parameters select 18;
_textures = _parameters select 19;
try
{
    _playerObject = _sessionID call ExileServer_system_session_getPlayerObject;
    if (isNull _playerObject) then
    {
        throw "The is no player";
    };
    if !(alive _playerObject) then
    {
        throw "The player is dead";
    };
    if !((count _pinCode) isEqualTo 4) then
    {
        throw "The pin code is does not equal 4 chars";
    };
    _position = (getPos _playerObject) findEmptyPosition [20, 175, _vehicleClass];
    _direction = (random 360);
    _SpawnPos = getNumber (missionconfigfile >> "VirtualGarageSettings" >> "VirtualGarage_VehicleSpawnPos");
    if (_SpawnPos == 1) then {
        _position = [_vehiclePosX,_vehiclePosY,_vehiclePosZ];
        _direction = [[_vehicleVectorDirX,_vehicleVectorDirY,_vehicleVectorDirZ],[_vehicleVectorUpX,_vehicleVectorUpY,_vehicleVectorUpZ]];
    };
    if (_position isEqualTo []) then
    {
            throw "Position is not defined";
    };
    _vehicleObject = [_vehicleClass, _position, _direction, true, _pinCode] call ExileServer_object_vehicle_createPersistentVehicle;
    _vehicleObject setVariable ["ExileOwnerUID", (getPlayerUID _playerObject)];
    for '_i' from 0 to (count _textures)-1 do {
        _tex = _textures select _i;
        _vehicleObject setObjectTextureGlobal [_i, _tex];
    };
    _vehSpawnState = getNumber (missionconfigfile >> "VirtualGarageSettings" >> "VirtualGarage_VehicleSpawnState");
    if (_vehSpawnState == 1) then
    {
        _vehicleObject setVariable ["ExileIsLocked",1,true];
        _vehicleObject lock 2;
    };
    _vehicleObject setFuel _vehicleFuel;
    _vehicleObject setDamage _vehicleDamage;
    _vehicleObject addItemCargoGlobal _vehicleCargo_items;
    _vehicleObject addMagazineCargoGlobal _vehicleCargo_magazines;
    _vehicleObject addWeaponCargoGlobal _vehicleCargo_weapons;
    _vehicleObject addBackpackCargoGlobal _vehicleCargo_container;
    _reapplyDamage = getNumber (missionconfigfile >> "VirtualGarageSettings" >> "VirtualGarage_ReapplyDamage");
    if (_reapplyDamage == 1) then
    {
        if ((typeName _vehicleHitPoints) isEqualTo "ARRAY") then
        {
            {
                _vehicleObject setHitPointDamage [_x select 0, _x select 1];
            }forEach _vehicleHitPoints;
        };
    };
    _GivePlayerPinCode = getNumber (missionconfigfile >> "VirtualGarageSettings" >> "VirtualGarage_GivePlayerPinCode");
    if (_GivePlayerPinCode == 1) then {
        _msg = Format["Vehicle Successfully Retrieved PIN Code:%1",_pinCode];
        [_sessionID, "notificationRequest", ["Success", [_msg]]] call ExileServer_system_network_send_to;
    }
    else
    {
        _msg = Format["Vehicle Successfully Retrieved"];
        [_sessionID, "notificationRequest", ["Success", [_msg]]] call ExileServer_system_network_send_to;
    };
    _vehicleObject call ExileServer_object_vehicle_database_insertGarage;
    _vehicleObject call ExileServer_object_vehicle_database_update;
    [_sessionID, "RetrieveVehicleResponse", ["true",netId _vehicleObject]] call ExileServer_system_network_send_to;
    format ["deleteVehicleFromVG:%1", _vehicleDatabaseID] call ExileServer_system_database_query_fireAndForget;
    _vehicleDBID = _vehicleObject getVariable ["ExileDatabaseID",0];
    _skinTextures = getObjectTextures _vehicleObject;
    format["updateVehicleSkin:%1:%2", _skinTextures, _vehicleDBID] call ExileServer_system_database_query_fireAndForget;
}
catch
{
    [_exception,"Virtual Garage Spawn Vehicle Error"] call ExileServer_VirtualGarage_utils_diagLog;
      [_sessionID, "RetrieveVehicleResponse", ["false",_vehicleObject]] call ExileServer_system_network_send_to;
};
 

 

 

 

Серверный аддон Exile Server:

ExileServer_object_vehicle_database_insertGarage.sqf -

/**

 * ExileServer_object_vehicle_database_insertGarage
 *
 * Exile Mod
 * www.exilemod.com
 * © 2015 Exile Mod Team
 *
 * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 
 * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
 */
 
private["_vehicleObject","_position","_vectorDirection","_vectorUp","_ItemCargo","_MagazinesCargo","_WeaponsCargo","_ContainerCargo","_data","_extDB2Message","_vehicleID"];
_vehicleObject = _this;
_position = getPosATL _vehicleObject;
_vectorDirection = vectorDir _vehicleObject;
_vectorUp = vectorUp _vehicleObject;
_ItemCargo = _vehicle call ExileServer_util_getItemCargo;
_MagazinesCargo = magazinesAmmoCargo _vehicle;
_WeaponsCargo = weaponsItemsCargo _vehicle;
_ContainerCargo = _vehicle call ExileServer_util_getObjectContainerCargo;
_data =
[
    typeOf _vehicleObject,
    _vehicleObject getVariable ["ExileOwnerUID", ""],
    locked _vehicleObject,
    _position select 0,
    _position select 1,
    _position select 2,
    _vectorDirection select 0, 
    _vectorDirection select 1,
    _vectorDirection select 2,
    _vectorUp select 0,
    _vectorUp select 1,
    _vectorUp select 2,
    _ItemCargo,
    _MagazinesCargo,
    _WeaponsCargo,
    _ContainerCargo,
    _vehicleObject getVariable ["ExileAccessCode",""]
];
_extDB2Message = ["insertVehicleFromGarage", _data] call ExileServer_util_extDB2_createMessage;
_vehicleID = _extDB2Message call ExileServer_system_database_query_insertSingle;
_vehicleObject setVariable["ExileDatabaseID", _vehicleID];
_vehicleObject setVariable["ExileIsPersistent", true];

_vehicleID

 

 

Изменённый код extDB:

exile.ini -

[insertVehicleFromGarage]

SQL1_1 = INSERT INTO vehicle SET 
SQL1_2 = class = ?, 
SQL1_3 = account_uid = ?,
SQL1_4 = is_locked = ?,
SQL1_5 = position_x = ?,
SQL1_6 = position_y = ?,
SQL1_7 = position_z = ?,
SQL1_8 = direction_x = ?,
SQL1_9 = direction_y = ?,
SQL1_10 = direction_z = ?,
SQL1_11 = up_x = ?,
SQL1_12 = up_y = ?,
SQL1_13 = up_z = ?,
SQL1_14 = cargo_items = ?,
SQL1_15 = cargo_magazines = ?,
SQL1_16 = cargo_weapons = ?,
SQL1_17 = cargo_container = ?,
SQL1_18 = pin_code = ?
Number of Inputs = 13
SQL1_INPUTS = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17

Return InsertID = true

 

 

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; VIRTUAL GARAGE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
[getStoredVehicles]
SQL1_1 = SELECT id, class FROM virtual_garage WHERE account_uid = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1,2-STRING
 
[insertVehicleToVG]
SQL1_1 = INSERT INTO virtual_garage SET
SQL1_2 = class = ?,
SQL1_3 = account_uid = ?,
SQL1_4 = fuel = ?,
SQL1_5 = damage = ?,
SQL1_6 = hitpoints = ?,
SQL1_7 = pin_code = ?,
SQL1_8 = position_x = ?,
SQL1_9 = position_y = ?,
SQL1_10 = position_z = ?,
SQL1_11 = direction_x = ?,
SQL1_12 = direction_y = ?,
SQL1_13 = direction_z = ?,
SQL1_14 = up_x = ?,
SQL1_15 = up_y = ?,
SQL1_16 = up_z = ?,
SQL1_17 = cargo_items = ?,
SQL1_18 = cargo_magazines = ?,
SQL1_19 = cargo_weapons = ?,
SQL1_20 = cargo_container = ?,
SQL1_21 = vehicle_texture = ?
Number of Inputs = 20
SQL1_INPUTS = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
Return InsertID = true
 
[RetrieveVehicle]
SQL1_1 = SELECT id,class,account_uid,fuel,damage,hitpoints,pin_code,position_x,position_y,position_z,direction_x,direction_y,direction_z,up_x,up_y,up_z,vehicle_texture FROM virtual_garage WHERE id = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1,2-STRING,3-STRING,4,5,6,7-STRING,8,9,10,11,12,13,14,15,16,17,18,19,20,21
 
[deleteVehicleFromVG]
SQL1_1 = DELETE FROM virtual_garage WHERE id = ?
Number Of Inputs = 1

SQL1_INPUTS = 1

 

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


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

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

Нет ответов на вопрос

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

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

    • Автор: ZigoFrend
      Нашёл одну статью на форуме ТЫК вот вам перевод. От себя скажу что у меня сервере постройки стоят уже 2-ую неделю.
       
       
      Здесь много постов с жалобами на нарушение настойчивости. На самом деле, он работает как задумано. Я знаю, что вы, вероятно, готовитесь разжечь меня прямо сейчас за это, но выслушайте меня. Я не говорю, что это хороший дизайн, на самом деле это ужасный дизайн, но технически он работает правильно. Я думаю, что часть проблемы здесь в том, что люди не понимают, как часто серверы выходят из строя. Именно сбои сервера и являются настоящей проблемой - они являются виновниками потери постоянства, а не самой системы сохранения.
      Позвольте мне показать вам, что я имею в виду. Я использовал свой собственный сервер, чтобы разместить палатку на острове Скалисты. Затем я выполнил команду taskkill / F / IM DayZServer_x64.exe, которая имитирует сбой сервера, поскольку ключ / F заставляет exe немедленно закрыться. Результат был такой:

      с последующим...

      ЭТО КЛЮЧЕВАЯ ТОЧКА ЗДЕСЬ. Я не могу сказать вам, сколько стримеров я смотрел, играя в DayZ, которые думают, что это был запланированный перезапуск.  Каждый раз, когда вы получаете красное сообщение об ошибке «Нет сообщений ...» в центре экрана, это сбой сервера, а не перезапуск, и в этот момент это означает, что сервер «потерял постоянство» состояние, потому что, если сервер возвращается без двоичных файлов (которые теперь повреждены) в папке (ях) хранения, заменяемой некоторыми файлами резервных копий, результат будет следующим:

      Я залогинился и, конечно же, палатка исчезла. Зачем? Поскольку двоичные файлы были повреждены, поэтому система загружает свежий Чернарус из файлов XML и создает новый набор файлов сохраняемости хранилища.
      Теперь давайте попробуем еще раз, на этот раз ожидаем перезапуска запланированного сервера. На моем сервере он перезапускается каждые 2 часа, поэтому я размещаю другую палатку примерно в том же месте ...

      ... а затем, когда сервер перезагружается , я получаю это сообщение:

      Это ключевой момент, как хорошо. Это сообщение приводит вас к мысли, что это был сбой сервера, хотя на самом деле это не так.  Это был запланированный перезапуск моего сервера. Я подожду минуту, пока сервер снова включится, нажмите «Play», чтобы снова войти в систему, и ...

      ... палатка все еще там, потому что перезапуск корректно завершил работу exe, что означает отсутствие повреждения двоичных файлов (ПРИМЕЧАНИЕ: мой сервер работает в режиме реального времени, поэтому солнце установило немного, поэтому изображение выглядит несколько иначе) ,
      Смысл, который я пытаюсь здесь подчеркнуть, заключается в том, что Богемия не будет простым решением этой проблемы. Это было бы серьезным изменением того, как обрабатывается постоянство. Бинарная файловая система должна быть полностью уничтожена для чего-то другого. Вопрос в том, действительно ли Bohemia сделает это, чтобы исправить эту проблему, теперь, когда игра официально выпущена?
      Независимо от того, делают они это или нет, все вы, владельцы серверов, должны знать, что вам абсолютно необходимо регулярно создавать файлы резервных копий и восстанавливать последнюю резервную копию перед перезапуском, если вы получили сбой сервера, в противном случае вы наверняка потеряете постоянство. на вашем сервере. Если ваш GSP не позволяет вам этого делать, рассмотрите возможность переноса вашего сервера кому-то, кто разрешает игровые серверы на виртуальном сервере, что даст вам полный доступ к серверу, чтобы вы могли делать все, что вам угодно. На моем сервере у меня есть пакетный файл, выполняющий резервное копирование каждый час, поэтому наихудший случай для меня, мы должны были бы откатить 59 минут постоянства, если бы произошел сбой сервера на 59-й минуте часа перед следующей запланировано резервное копирование.
      Итак, настойчивость нарушена? Технически, нет, это не так. Он делает то, что должен делать - сохранять состояние мира на сервере и в результате коррупции загружать новый мир. Так "когда ты собираешься исправить настойчивость?" это не тот вопрос, который мы должны задавать. Реальный вопрос, который мы должны задать: почему сервер так часто падает? Выяснение сбоев сервера будет иметь большое значение для обеспечения стабильности постоянства.

       
       
       
       
    • Автор: voralex
      Доброго времени суток!)
      Вот вам первый фикс на предложенную мною версию сервера DayZ Standalone 0.60.133913
      И так начнем :
      1.Берем файлы ниже.
      2.Все папки из архив-->>v0.60 закинуть в корень сервера с заменой.
      3.Открываем в корне сервера папку voralex-->>server.cfg
      4.В нем вставляем строки :
      5.В корне сервера-->>storage_-1\ChernarusPlus\000 в данной папке все удаляем!
      Теперь у вас сохраняется транспорт\персонаж\палатки и т.д.
      Поздравляю!)
      Жду <3
      Файлы сохранения : Яндекс.диск
      ЛИБО НИЖЕ(прикреплено).

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • Автор: DrTauren
      Собственно, интересует не сделал ли кто ещё сохранения персонажа для официальной оффлайн версии стресс теста? А то надоело заново спавниться вечно 
    • Автор: LLIEPXAH
      Доброго времени суток камрады, опять столкнулся с вопросом на тему автосохранения! 
      Тема такая дошли до того что уже запустили 3 по счету сервер, первый второй все хорошо!
      На третьем сервере возникла потребность в сохранении миссии а конкретно речь идёт про Liberation. Очень геморный как оказалось .... нужно время от времени перезагружать сервер, но после перезагрузки все слетает на 0! нужно по новому захватывать территории. Кто сталкивался или может подскажет как решить вопрос ? 
    • Автор: namemake
      как убрать сохранение виртуальных нелегальных ресурсов в машине, Аутистлайф ес что
×
×
  • Создать...