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

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

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

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

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
pekar0201

Точная постройка \ Precise Base Building

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

Когда нибудь строили супер-сложную базу, в которой после рестарта стены сдвигались и образовывали щели?
Тогда этот фикс для вас!
+ Если у вас стоит векторная постройка, но нету этого фикса - СРОЧНО СТАВИТЬ!!11 :)

Шаг 1-й.

 

Дуй в dayz_server\compile\server_publishObject.sqf
 

Найди это:

_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, 0 , _charID, _worldspace, [], [], 0,_uid];

И залепи вместо него это:
 

_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, 0 , _charID, _worldspace call AN_fnc_formatWorldspace, [], [], 0,_uid];

Шаг 2-й.

 

Иди в server_functions.sqf

И добавь всю эту хренотень в самый низ:
 

KK_fnc_floatToString = {
    private "_arr";
    if (abs (_this - _this % 1) == 0) exitWith { str _this };
    _arr = toArray str abs (_this % 1);
    _arr set [0, 32];
    toString (toArray str (
        abs (_this - _this % 1) * _this / abs _this
    ) + _arr - [32])
};

KK_fnc_positionToString = {
    format [
        "[%1,%2,%3]",
        _this select 0 call KK_fnc_floatToString,
        _this select 1 call KK_fnc_floatToString,
        _this select 2 call KK_fnc_floatToString
    ]
};

AN_fnc_formatWorldspace = {
    private "_ws";
    _ws = toArray str _this;
    format ["[%1,%2%3]", _this select 0 call KK_fnc_floatToString, _this select 1 call KK_fnc_positionToString, toString ([_ws, (_ws find 93) + 1, count _ws - 2] call BIS_fnc_subSelect)]
};

Шаг 3-й.

 

Дуй в dayz_server\compile\server_swapObject.sqf

Найди это:
 

_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, 0 , _charID, _worldspace, [], [], 0,_uid];

И залепи вместо него это:
 

_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, 0 , _charID, _worldspace call AN_fnc_formatWorldspace, [], [], 0,_uid];

Шаг 4-й.

 

Дуй в dayz_server\compile\server_updateObject.sqf

 

Найди это:
 

    _worldspace = [
        round (getDir _object),
        _position
    ];

И залепи вместо него это:

    _worldspace = [getDir _object, _position] call AN_fnc_formatWorldspace;

Шаг 5-й. Вот ещё, в общем надо выполнить запрос в Базу Данных...

 

 

DELIMITER ;;
CREATE FUNCTION `RemoveQuotes`(`ws` VARCHAR(128))
RETURNS VARCHAR(128)
DETERMINISTIC
BEGIN
DECLARE dir VARCHAR(128);
DECLARE pos VARCHAR(128);

IF SUBSTRING_INDEX(ws, '"', 4) = ws THEN
RETURN ws;
END IF;

SET dir = TRIM(LEADING '["' FROM SUBSTRING_INDEX(ws, '"', 2));
SET pos = TRIM(LEADING CONCAT('["', dir, '","') FROM SUBSTRING_INDEX(ws, '"', 4));

SET ws = REPLACE(ws, CONCAT('"', dir, '"'), dir);
SET ws = REPLACE(ws, CONCAT('"', pos, '"'), pos);

RETURN ws;
END;;
DELIMITER ;

UPDATE object_data SET Worldspace = RemoveQuotes(Worldspace);
DROP FUNCTION `RemoveQuotes`;

 

 

Ну вот и всё!

Без плюса работать не будет  :laugh:

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

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


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



На сколько я знаю, тут есть уже этот фикс.

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


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

На сколько я знаю, тут есть уже этот фикс.

Искал для себя, не нашёл, вот и решил сделать...

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


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

Плюсы поставил :D

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


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

Когда нибудь строили супер-сложную базу, в которой после рестарта стены сдвигались и образовывали щели?

Тогда этот фикс для вас!

+ Если у вас стоит векторная постройка, но нету этого фикса - СРОЧНО СТАВИТЬ!!11 :)

 

Шаг 1-й.

 

Дуй в dayz_server\compile\server_publishObject.sqf

 

Найди это:

_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, 0 , _charID, _worldspace, [], [], 0,_uid];

И залепи вместо него это:

 

_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, 0 , _charID, _worldspace call AN_fnc_formatWorldspace, [], [], 0,_uid];

Шаг 2-й.

 

Иди в server_functions.sqf

 

И добавь всю эту хренотень в самый низ:

 

KK_fnc_floatToString = {
    private "_arr";
    if (abs (_this - _this % 1) == 0) exitWith { str _this };
    _arr = toArray str abs (_this % 1);
    _arr set [0, 32];
    toString (toArray str (
        abs (_this - _this % 1) * _this / abs _this
    ) + _arr - [32])
};

KK_fnc_positionToString = {
    format [
        "[%1,%2,%3]",
        _this select 0 call KK_fnc_floatToString,
        _this select 1 call KK_fnc_floatToString,
        _this select 2 call KK_fnc_floatToString
    ]
};

AN_fnc_formatWorldspace = {
    private "_ws";
    _ws = toArray str _this;
    format ["[%1,%2%3]", _this select 0 call KK_fnc_floatToString, _this select 1 call KK_fnc_positionToString, toString ([_ws, (_ws find 93) + 1, count _ws - 2] call BIS_fnc_subSelect)]
};

Шаг 3-й.

 

Дуй в dayz_server\compile\server_swapObject.sqf

 

Найди это:

 

_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, 0 , _charID, _worldspace, [], [], 0,_uid];

И залепи вместо него это:

 

_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, 0 , _charID, _worldspace call AN_fnc_formatWorldspace, [], [], 0,_uid];

Шаг 4-й.

 

Дуй в dayz_server\compile\server_updateObject.sqf

 

Найди это:

 

    _worldspace = [
        round (getDir _object),
        _position
    ];

И залепи вместо него это:

    _worldspace = [getDir _object, _position] call AN_fnc_formatWorldspace;

Ну вот и всё!

 

Без плюса работать не будет  :laugh:

В оригинале темы есть такая строка:

You MUST execute this query on your database: http://pastebin.com/QZgLH6tw

Вы должны выполнить запрос в базу данных

 

DELIMITER ;;

CREATE FUNCTION `RemoveQuotes`(`ws` VARCHAR(128))

RETURNS VARCHAR(128)

DETERMINISTIC

BEGIN

DECLARE dir VARCHAR(128);

DECLARE pos VARCHAR(128);

 

IF SUBSTRING_INDEX(ws, '"', 4) = ws THEN

RETURN ws;

END IF;

 

SET dir = TRIM(LEADING '["' FROM SUBSTRING_INDEX(ws, '"', 2));

SET pos = TRIM(LEADING CONCAT('["', dir, '","') FROM SUBSTRING_INDEX(ws, '"', 4));

 

SET ws = REPLACE(ws, CONCAT('"', dir, '"'), dir);

SET ws = REPLACE(ws, CONCAT('"', pos, '"'), pos);

 

RETURN ws;

END;;

DELIMITER ;

 

UPDATE object_data SET Worldspace = RemoveQuotes(Worldspace);

DROP FUNCTION `RemoveQuotes`;

 

PS: Оригинал: https://epochmod.com/forum/topic/15813-release-v105-precise-base-building-persistent-bases-after-restart-updated-220915/

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

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


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

В оригинале темы есть такая строка:

You MUST execute this query on your database: http://pastebin.com/QZgLH6tw

Вы должны выполнить запрос в базу данных

 

DELIMITER ;;

CREATE FUNCTION `RemoveQuotes`(`ws` VARCHAR(128))

RETURNS VARCHAR(128)

DETERMINISTIC

BEGIN

DECLARE dir VARCHAR(128);

DECLARE pos VARCHAR(128);

 

IF SUBSTRING_INDEX(ws, '"', 4) = ws THEN

RETURN ws;

END IF;

 

SET dir = TRIM(LEADING '["' FROM SUBSTRING_INDEX(ws, '"', 2));

SET pos = TRIM(LEADING CONCAT('["', dir, '","') FROM SUBSTRING_INDEX(ws, '"', 4));

 

SET ws = REPLACE(ws, CONCAT('"', dir, '"'), dir);

SET ws = REPLACE(ws, CONCAT('"', pos, '"'), pos);

 

RETURN ws;

END;;

DELIMITER ;

 

UPDATE object_data SET Worldspace = RemoveQuotes(Worldspace);

DROP FUNCTION `RemoveQuotes`;

 

PS: Оригинал: https://epochmod.com/forum/topic/15813-release-v105-precise-base-building-persistent-bases-after-restart-updated-220915/

Гайдец поправил, теперь всё кайф...

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: BorizzK
      В эксперементалке 1.08 если сбросить предмет находясь на машине (крыше, багажнике, капоте в кузове) предмет проваливается сквозь машину на землю или оказывается в ее текстурах
       
      Тикет
      https://feedback.bistudio.com/T152071
       
      ответ богемии поразителен - сейчас нет простого решения
       
      А ниже что? Проще не бывает...
       
      Собственно код фикса (Автор Я)
       
      Code ``` modded class ItemBase extends InventoryItem { override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc) { super.EEItemLocationChanged(oldLoc,newLoc); if (newLoc.GetType() == InventoryLocationType.GROUND) { if (oldLoc.GetParent()) { PlayerBase player = PlayerBase.Cast(oldLoc.GetParent()); if (player) { FixPositionIfDropOnCar(player); } } } } void FixPositionIfDropOnCar(PlayerBase player) { vector m_RayStart; vector m_RayEnd; m_RayStart = player.GetPosition(); m_RayStart[1] = m_RayStart[1] + 0.5; m_RayEnd = m_RayStart; m_RayEnd[1] = m_RayEnd[1] - 1; RaycastRVParams m_RayCastInput = new RaycastRVParams(m_RayStart, m_RayEnd, this, 0.05); array<ref RaycastRVResult> m_RayCastResults = new array<ref RaycastRVResult>; m_RayCastInput.with = player; m_RayCastInput.flags = CollisionFlags.FIRSTCONTACT; if (DayZPhysics.RaycastRVProxy(m_RayCastInput, m_RayCastResults)) { if (m_RayCastResults.Count() > 0) { Car car; if (Class.CastTo(car, m_RayCastResults[0].obj) || Class.CastTo(car, m_RayCastResults[0].parent)) { this.SetPosition(m_RayCastResults[0].pos + (player.GetDirection() * 0.1)); } } } } } ``` Наверное имеет смысл чуть приподнять предмет над поверхностью, но необходимость этого зависит от типа предмета, потому не стал этого делать
       
      чуть откорректировал код
    • Автор: BorizzK
      Собственно речь про расширения VPPAdmintools
      1 Автор собирает IP серверов где работает админка
      2 Если надо он заносит ip в некий черный список, сервер при обращении к его "сайту" получит инфу, что сервер в блоке и скрипт не даст подключаться игрокам

      Само расширение - код - спасибо комраду @Selleti
       
      modded class MissionServer { private string vppatlockmessage = "Server is Currently Locked!"; private string serverIP; private bool violatedRules = false; void MissionServer() { GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.vppapi, 5000.0, false); serverIP = GetServerIP(); } private void vppapi() { VPPATapiCB cb = new VPPATapiCB( this ); CURLContext ctx = GetCURLCore().GetCURLContext("http://54.39.130.144:5600"); ctx.GET( cb, string.Format( "/Validate?address=%1", serverIP ) ); } void setStatus(bool state) { violatedRules = state; if ( state ) vppatlockmessage = "Server Locked. Please contact the developer of the following mod [ VPPAdminTools ]\nEmail: vanillaplusplusdayz@gmail.com\nDiscord: discord.gg/GWXN2bB"; } void ForceKickPlayers() { GetRPCManager().SendRPC( "RPC_MissionGameplay", "KickClientHandle", new Param1<string>( vppatlockmessage ), true, NULL); array<PlayerIdentity> identities = new array<PlayerIdentity>; GetGame().GetPlayerIndentities( identities ); foreach(ref PlayerIdentity iden: identities) { GetGame().ChatPlayer("#kick " + iden.GetName()); Print(vppatlockmessage); } GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Remove(this.ForceKickPlayers); } override void OnEvent(EventType eventTypeId, Param params) { if ( violatedRules ) GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.ForceKickPlayers, 3500, false); else super.OnEvent(eventTypeId,params); } string GetServerIP() { string ip; if (GetCLIParam("ip", ip)) { return ip; } return "0.0.0.0"; } }; class VPPATapiCB: CURLCallback { private string response; private MissionServer serverMission; void VPPATapiCB(MissionServer ms) { serverMission = ms; } override void OnSuccess( string data, int dataSize ) { response = data; if ( response == "true" ) serverMission.setStatus(true); } }; И собственно 2 фикса для серверного мода

      1 Удаляет расширение из загруженных модов вообще - автор Selleti
      выполнено в виде конфига мода
       
      class CfgPatches { class VPPATExtensions_FIX { units[] = {}; weapons[] = {}; requiredVersion = 0.1; requiredAddons[] = {"DZM_VPPATExtensions"}; }; }; class CfgMods { delete VPPATExtensions; }; 2 Удаляет из очереди вызов функицию которая ставится в очередь в конструкторе класса MissionServer  в моде VPPAdmintools в скрипте из обфусцированного VPPExtensions.pbo - автор - ну в общем пофигу - просто все
      выполнено в виде скрипта
      modded class MissionServer extends MissionBase { void MissionServer() { GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Remove(this.vppapi); } }
      За сим раскланиваюсь
      Всегда Ваш

       
    • Автор: Serdce
      Ссылка на первоисточник - https://github.com/BrettNordin/Exile
      Я всего лишь перевёл
      Собственно переходим по ссылке, и скачиваем архив.
      Для тех, кто не знает как качать с хаба скрин 
      И так, едем дальше
      Скачанный архив распаковываем в удобное место для работы,
      Идём в ваш @ExileServer, там нас интересуют файлы - extDB2.dll , extDB2.so , extDB2-conf.ini , XM8.dll , XM8.so Удаляем эти файлы
      Далее идём в @ExileServer которую мы скачали, всё её содержимое копируем в аналогичную папку на сервере.
      Теперь идём в вашу MPmissions и там распаковываем вашу миссию "Exile.название карты",
      Туда мы копируем содержимое папки Exile.MapName из архива,
      Далее открываем ваш config.cpp и ищем там class CfgExileCustomCode 
      В него мы добавляем - #include "CfgExileCustomCode.cpp"
      Должно получится так
      Запаковываем обратно)
      Ну и теперь из архива мы копируем tbbmalloc.dll, tbbmalloc_x64.dll в папку расположения вашего Arma3_server.exe
      Не забываем поменять в вашем файле запуска сервера с arma3server.exe на arma3server_x64.exe 
      Ну и финишная прямая, открываем вашу базу данных ( желательно с название exile ) и добавляем файл Exile_Database_Update_64x.sql
      Далее настройте под себя ваш extdb3-conf.ini
       
    • Автор: Astrahrom
      Столкнулся с цикличной проблемой в лаунчере, при установке ботов A3EAI:
      Script @epochhive\A3EAI_config.sqf not found Оказалось, что все дело в том, что в открытом доступе лежат старые версии этого скрипта, и все кто пытается воткнуть в Epochhive, как я, данный скрипт - делают это по старой схеме, не актуальной для последних версий.
       
      Решение
       
      Скачиваем - https://yadi.sk/d/HfXeB1pEAGoRtw
       
      Устанавливаем:
      1. Взять из папки архива "1. Installation Package" папку "@A3EAI" и вложить её в папку с вашим сервером;
      2. Прописать скрипт в вашем запускаторе, примерно так:
      -servermod=@EpochHive;@A3EAI; Пример моего запускатора:
      @echo off start "arma3" "arma3server.exe" -servermod=@EpochHive;@A3EAI; -mod=@Epoch; -config=C:\Arma3Server\sc\server.cfg -port=2307 -profiles=sc -cfg=C:\Arma3Server\sc\basic.cfg -name=sc -autoINIT Варианты настройки, которые хранятся в самой папке @A3EAI\addons\a3eai_config в файле config.cpp.
    • Автор: BorizzK
      Палатки пофикшены
      Ну разве что не ставятся на крест на церкви, ставятся чуть ниже
      Все чисто серверное
       
      Выложу завтра днем после небольшой доработки - что бы красиво было
       
      Вот резалт
       
       

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

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

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

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

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

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