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

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

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

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

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

АнтиРелог - скрипт создания бота, при отсоединении игрока.

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

При отсоединении игрока, если он был в режиме боя, на его месте создается бот, - копия игрока.
Снаряжение:
Униформа.
Рюкзак.
Оружие.
Инвентарь - магазины и т.п.
*Рюкзак бота пустой. - Заполняется инвентарем(тем же, что у игрока в рюкзаке), только если бота убьют.
Взаимодействие с ботом:
При смерти бота, запись в БД данного игрока изменяется - убит.
При заходе игрока, бот удаляется.
По истечении 90 секунд, если игрок не зашел и бот жив бот удаляется.

dayz_server.pbo
1.Закидываем файл server_onPlayerDisconnect.sqf  в папку dayz_server/compile сохранив при это оригинальный
в файле server_onPlayerDisconnect.sqf слишком много много изменений,и изменено 80% переменных поэтому заливаю сразу файл целиком,если хотите сравните в notepad ++ плагином compare
кроме кода на бота там стоит фикс попадания на базы из этой темы
если вам фикс не нужен,то в файле замените куски кода из темы выше на оригинальный
2.в файл server_playerLogin.sqf в самый конец добавляем
//антирелог бот начало
{
    if(typeof _x != "") then
    {
        if(!isPlayer _x) then
        {
            _name = _x getVariable ["player_name","unknown"];
            if(_name == _playerName && (lifeState _x != "DEAD")) then
            {
                DeleteVehicle _x;
            };
        };
    };
} forEach ([6800, 9200, 0] nearEntities [["Man"],24000]);
// антирелог бот конец

3.заменяем dll в папке @DayZ_Epoch_Server на эту,если хотите можете сохранить оригинал,откуда длл брал уже не помню,вроде как из темы про аукцион,без замены длл скрипт не сможет убить игрока если убьют бота
ставим extDB из этой темы
миссия
4.в файле fn_selfActions.sqf добавляем

 

//антирелог бот начало
if ((lifeState cursorTarget == "DEAD") && (cursorTarget getVariable ["anti_relog_bot",false]) && (speed player <= 1) && _canDo) then {
    if((s_player_take_money < 0) && (s_player_take_info < 0)) then
    {
        s_player_take_money = player addAction ["Забрать деньги", "custom\take_money.sqf"];
        s_player_take_info = player addAction ["О релогере", "custom\take_info.sqf"];
    };
    }
    else
    {
        player removeAction s_player_take_money;
        player removeAction s_player_take_info;
        s_player_take_money = -1;
        s_player_take_info = -1;
    };
    if(typeof cursorTarget == "") then
    {
        player removeAction s_player_take_money;
        player removeAction s_player_take_info;
        s_player_take_money = -1;
        s_player_take_info = -1;
    };
//антирелог бот конец 

 

после
 

//Grab Flare
if (_canPickLight && !dayz_hasLight && !_isPZombie) then {
	if (s_player_grabflare < 0) then {
		_text = getText (configFile >> "CfgAmmo" >> (typeOf _nearLight) >> "displayName");
		s_player_grabflare = player addAction [format[localize "str_actions_medical_15",_text], "\z\addons\dayz_code\actions\flare_pickup.sqf",_nearLight, 1, false, true, "", ""];
		s_player_removeflare = player addAction [format[localize "str_actions_medical_17",_text], "\z\addons\dayz_code\actions\flare_remove.sqf",_nearLight, 1, false, true, "", ""];
	};
} else {
	player removeAction s_player_grabflare;
	player removeAction s_player_removeflare;
	s_player_grabflare = -1;
	s_player_removeflare = -1;
};

 

5.в папке с миссией создаем папку custom если ее нет,в ней создаем 2 файла,take_money.sqf и take_info.sqf
содержимое take_money.sqf
 

private ["_bot","_hisMoney", "_myMoney"];

if((lifeState cursorTarget == "DEAD") && (cursorTarget getVariable ["anti_relog_bot",false])) then
{
    _bot = cursorTarget;
    _name = _bot getVariable ["player_name","unknown"];
    _hisMoney = _bot getVariable ["cashMoney",0];
    _myMoney = player getVariable ["cashMoney",0];
    _myMoney = _myMoney + _hisMoney;
    _bot setVariable ["cashMoney", 0,true];
    
    if(typeName (_myMoney) == "SCALAR")then{
        player setVariable ["cashMoney", _myMoney , true];
    };
    systemChat format ['Вы получили %1 рублей, с бота релогера %2 !',_hisMoney,_name];
};

содержимое take_info.sqf
 

private ["_bot","_name"];

if((lifeState cursorTarget == "DEAD") && (cursorTarget getVariable ["anti_relog_bot",false])) then
{
    _bot = cursorTarget;
    _name = _bot getVariable ["player_name","unknown"];
    systemChat format ['Ник релогера %1 ...',_name];
};

6.в файле variables.sqf в секцию
 

dayz_resetSelfActions = {

добавляем

    s_player_take_money = -1;
    s_player_take_info = -1;

дабы избежать флуда в клиентский рпт

На этом установка закончена,не забудьте перепаковать dayz_server.pbo

Дополнительная информация:

если хотите поменять время через какое бот будет пропадать меняйте переменную relog_time в файле server_onPlayerDisconnect.sqf,время в секундах
за 3 дня проверки на сервере ошибок в работе не нашел

в скрипте присутствует сохранение единой валюты zsc 3.0
"При выходе игрока в технике, бот появляется в пределах 15м(настраивается) от техники." проверял что происходит с ботом если игрок вышел в машине или вертолете,бот появляется рядом,не посчитал нужным добавлять
"За убийство бота, начисляется хуманити так же, как если бы был убит игрок." код посмотрел но пока особо не разбирался как сделать,не столь оно мне было нужно,возможно со временем добавлю

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

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


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





Хороший скрипт. Но мне кажется тема на форуме уже была... Могу ошибаться.

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


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

Хороший скрипт. Но мне кажется тема на форуме уже была... Могу ошибаться.

да,тема есть подобная,в коммерческом разделе

и скрипт похожий есть коробка после релогера

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

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


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

да,тема есть подобная,в коммерческом разделе

и скрипт похожий есть коробка после релогера

Вот коробка у меня не срабатывала почему-то, попробую этот поставить

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


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

В общем все работает, спасибо, + в репу уронил, но есть несколько недочетов

1. Менюшки "Забрать деньги" и  "О релогере" иногда не пропадают и приходится перезаходить

2. Некоторые боты не падают при убийстве, но это скорее баги армы

3. Рюкзаки всегда пусты Не всегда, но бывает

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

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


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

В общем все работает, спасибо, + в репу уронил, но есть несколько недочетов

1. Менюшки "Забрать деньги" и  "О релогере" иногда не пропадают и приходится перезаходить

2. Некоторые боты не падают при убийстве, но это скорее баги армы

3. Рюкзаки всегда пусты Не всегда, но бывает

1.у меня было пару раз особо значение не придал

2.после смерти можно боту просто анимацию смерти запустить

3.проверю

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


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

В общем все работает, спасибо, + в репу уронил, но есть несколько недочетов

1. Менюшки "Забрать деньги" и  "О релогере" иногда не пропадают и приходится перезаходить

2. Некоторые боты не падают при убийстве, но это скорее баги армы

3. Рюкзаки всегда пусты Не всегда, но бывает

1.пункт исправил,в первом посте поменял код

2.из 6 убийств бота только 1 раз баганулось у меня,нашел код на проверку положения бота,стоит лежит и тд,будет время разберусь

3.поковырял код,потом понял что алгоритм работы там вообще не тот,ковырял ковырял теперь вообще у бота рюкзака нет,как разберусь обновлю код в первом посте или в коментах

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


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

Хорошо, дай знать, а то скрипт весьма полезен.

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

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


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

Хорошо, дай знать, а то скрипт весьма полезен.

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

там бот в куске кода когда происходит релог и таймер в бою не закончился

проще говоря если во время боя игрок вышел

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

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

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


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

там бот в куске кода когда происходит релог и таймер в бою не закончился

проще говоря если во время боя игрок вышел

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

Странно, у меня бот не появлялся в случае если сам стреляешь и выходишь

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


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

server_onPlayerDisconnect.sqf  перезалил
сейчас вроде более менее нормально все
код на добавление анимации при смерти потом добавлю,если бот будет стоять
единственный баг,добавил себе в спавн скин русского солдата,так вот ему никак не хочет выдавать рюкзак,даже класснэйм его получает,но не выдает
еше 1 раз было со скином кепки
лут есть в рюкзаке и тот же на земле лежит
короче говоря проверяйте,потом скажете

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

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


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

server_onPlayerDisconnect.sqf перезалил
добавил анимацию при смерте если бот остался стоять

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


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

server_onPlayerDisconnect.sqf перезалил

добавил анимацию при смерте если бот остался стоять

Подскажи как сделать так чтоб бот оставался даже если в релогера не попадают

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


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

Странно, у меня бот не появлялся в случае если сам стреляешь и выходишь

https://youtu.be/jBrbmyicoUE

само собой код из server_playerLogin.sqf я удалил чтобы бот мой не пропал

 

Подскажи как сделать так чтоб бот оставался даже если в релогера не попадают

 

оно вроде итак так и работает

возможно только надо чтобы пули рядом попали или что то наподобие

https://youtu.be/o36j47riAiY

 

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


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

Нашел косяк спустя столько времени. с dll из темы при попытке оплаты базы выдает ошибку HiveExt: [Error] Invalid method id: 396 и оплата не проходит, после рестарта опять нужно платить. Оплата золотом, никакую валюту не ставил. При родной dll косяк пропадает.

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


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

 

 

 

 

 

У меня скрипт от Ультимы, посмотрел этот... думал может, что то новенькое будет -

Поразбиравшись, коротко:

1. Нет проверки, что игрок, чей бот создан - перезашел до отсчета таймера.

2. Кастомная ДЛЛ не нужна.

3. Статусы не нужны.

4. Анимации не нужны.

5. Создание бота может произойти внутри техники, если релогер вышел в ней. - Лут будет не достать.

6. Бот создается прямо в OnDisconnect, а эти скрипты должны быстренько отрабатывать...

...

Вывод: Пока у Ультимы лучший скрипт на антирелог бота. А в данном скрипте много недостатков.

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


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

 

 
 
 
 
 
 
У меня скрипт от Ультимы, посмотрел этот... думал может, что то новенькое будет -
Поразбиравшись, коротко:
1. Нет проверки, что игрок, чей бот создан - перезашел до отсчета таймера.
2. Кастомная ДЛЛ не нужна.
3. Статусы не нужны.
4. Анимации не нужны.
5. Создание бота может произойти внутри техники, если релогер вышел в ней. - Лут будет не достать.
6. Бот создается прямо в OnDisconnect, а эти скрипты должны быстренько отрабатывать...
...
Вывод: Пока у Ультимы лучший скрипт на антирелог бота. А в данном скрипте много недостатков.

1.2.в файл server_playerLogin.sqf в самый конец добавляем

этот кусок для кого?

2.про длл уже не знаю,там проверять надо,через extdb можно обычным запросом сделать,через некоторое время посмотрел свой код,через child должно и  с обычной длл работать

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

3 и 4 возможно,это оптимизация уже

6.у вас вариант лучше есть?и причем тут быстро отрабатываться?он медленно работает или что?

 

 

чей скрипт лучше мне абсолютно без разницы,тут ваш выбор

либо покупайте,либо берите в паблике если есть,либо пишите сами

 

я сделал я решил выложить сюда

что недостатки написали это хорошо,может тот скрипт и лучше,код не смотрел,если можете сделайте лучше, я тут поменяю код,я пишу так как умею

а так это выглядит как реклама "тут скрипт ерунда,покупайте у ультимы"

 

 

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


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

 

6.у вас вариант лучше есть?и причем тут быстро отрабатываться?он медленно работает или что?

Вынеси создание в spawn отдельной функцией.

После того, как ты получил данные - магазины, оружие и т.п. - само создание бота можно вызвать через spawn, а не выполнять в onDisconnect

 

P.S.

Не снимается репутация за смерть(ну в эпохе этого и нет, но вообще как ньюанс),

Не начисляется убившему бота, исходя из репутации игрока, чей бот был создан.

Хотя мб я что то не заметил...

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

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


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

Вопрос такой возник - срабатывает сообщение о релоге при обычной смерти игрока (был в бою и умер), как это поправить? Знаю что надо воткнуть проверку на жив\мертв перед запуском основного скрипта, но как? Помогите господа кто чем может :smile:

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


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

Спасибо

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: BR0wi
      Подскажите где найти людей, которые делаю моды на заказ. К кому вообще обращаться? Или что бы реализовать свои идеи нужно самому "год" сидеть и изучать все механики модинга?
    • Автор: CubeIn
      Приветствую господа, хочу создать новый проект, уникальный, но для этого нужен маппер.
      Я оставлю здесь свой дискрод, напишите в лс, кто готов взяться за крупный проект.
      4me#4542
    • Автор: 6agu
      Поставил
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • Автор: 123new
      Много вопросов на данную тему наблюдаю от новичков, попробую прояснить немного сей вопрос.
       
      Предположим. что вы уже знаете на каких координатах вам надо спавнить определенное здание или объект\животное\бота, с каким углом поворота. И так. эта тема для вас.
       
      Сразу делаю пометку, метод, который добавили нам разработчики игры в патче 1.15, очень хорошо описал наш товарищ в сообщении форума:
      Рекоммендую вам использовать именно его!
      Ниже опубликованы старые методы.
       
      Если вы с расставили их с модифицированной версии Offline (Offline by Arksenor это называется), то вы получили и нашли код вида:
      GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13251.875000 0.0 3748.525879").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13254.599609 0.0 3722.703613").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13257.344727 0.0 3696.718750").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13260.040039 0.0 3670.984131").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13262.756836 0.0 3645.180176").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13265.441406 0.0 3619.531982").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13268.124023 0.0 3593.995361").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13270.844727 0.0 3568.186523").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13273.514648 0.0 3542.561279").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13276.195313 0.0 3517.048828").SetOrientation("-96.000000 0.000000 0.000000"); GetGame().CreateObject("Land_CementWorks_ExpeditionB", "13278.399414 0.0 3496.097900").SetOrientation("-96.000000 0.000000 0.000000"); Здесь (по примеру первой строки) 1 значение в скобках - id постройки/объекта, 2 значение - координаты в формате X Y Z, разделенные пробелом, 3 - значение поворота примерно в том же формате.
      Как это делать в Offline - статья от автора Offine:
      https://github.com/Arkensor/DayZCommunityOfflineMode/wiki/Add-custom-objects-to-your-server-or-mission
       
      И так, инструкция:
      1. Добавляем в начало init.c файла в вашей mpmissions следующий код:
      #include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\spawn_buildings.c" 2. Создаем в папке вашей активной mpmissions файлик spawn_buildings.c и заполняем его следующей информацией.
      void SpawnObject( string type, vector position, vector orientation ) { private string NameBlockLog = "[CreateObject] "; private string InfoLog = ""; if(type != "") { auto obj = GetGame().CreateObject( type, "0 0 0" ); if(obj) { if ((position[0] != 0) && (position[1] != 0) && (position[2] != 0)) { obj.SetPosition( position ); obj.SetOrientation( orientation ); obj.Update(); if (obj.CanAffectPathgraph()) { obj.SetAffectPathgraph(true, false); GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(GetGame().UpdatePathgraphRegionByObject, 100, false, obj); } InfoLog = "[Type: '" + obj.GetType() + "' Position: '" + obj.GetPosition().ToString() + "' Orientation: '" + obj.GetOrientation().ToString() + "']"; Write_Log(NameBlockLog + " Object has been created successfully! Info " + InfoLog); } else { InfoLog = "[Type: '" + type + "' Position: '" + position + "' Orientation: '" + orientation + "']"; Write_Log(NameBlockLog + " Object can't be created! Incorrect writed position. Info " + InfoLog); } } else { InfoLog = "[Type: '" + type + "' Position: '" + position + "' Orientation: '" + orientation + "']"; Write_Log(NameBlockLog + " Object can't be created! Info " + InfoLog); } } else { InfoLog = "[Type: '" + type + "' Position: '" + position + "' Orientation: '" + orientation + "']"; Write_Log(NameBlockLog + " Object can't be created! Incorrect writed type. Info " + InfoLog); } } void Write_Log(string message) { Print(String(message)); } 3. Открываем созданный нами файл,  и в конце файла дописываем следующее:
      void SpawnAirfeeldBuildings() { SpawnObject( "Land_CementWorks_ExpeditionB", "13251.875000 0.0 3748.525879", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13254.599609 0.0 3722.703613", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13257.344727 0.0 3696.718750", "-96.000000 0.000000 0.000000"); } void SpawnKrasnoBuildings() { SpawnObject( "Land_CementWorks_ExpeditionB", "13251.875000 0.0 3748.525879", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13254.599609 0.0 3722.703613", "-96.000000 0.000000 0.000000"); SpawnObject( "Land_CementWorks_ExpeditionB", "13257.344727 0.0 3696.718750", "-96.000000 0.000000 0.000000"); } Где после void - название функции идет, а между открытыми скобками вызов спавна самих зданий на указанных координатах.
      На примере 1 строки:
      Land_CementWorks_ExpeditionB - id постройки (type)
      13251.875000 0.0 3748.525879 - координаты в формате X Y Z
      -96.000000 0.000000 0.000000 - значение поворота в формате X Y Z
      Внимание: id постройки и координаты в примере указаны не верные и требуют подключения дополнительной модификации для корректной работы!!! Координаты не соответствуют названию функции!!!
      4. открываем в MpMissions в папке с вашей активной миссией init.c и перед ЗАКРЫВАЮЩЕЙ скобкой '}' дописываем нужную нам функцию (это будет активация спавна на карте):
      SpawnAirfeeldBuildings(); 5. Готово, Запускайте сервер, и в scripts.log вы увидите процедуру спавна ваших зданий и увидите, спавнятся ли они на карте или нет.
      Можно написать конечно и более готовую, универсальную систему спавна на карте со считыванием конфигурации из файла, но я считаю это лишним.
       
      Как заполнить добавленные здания лутом на карте:
      вариант 1:
      https://github.com/Arkensor/DayZCommunityOfflineMode/wiki/Enable-loot-for-custom-placed-objects
      вариант 2: вручную заполнить xml-файл  mapgrouppos.xml в mpmssions данными о местоположении зданий, где rpy - значение поворота здания в формате Z Y X
       
      С помощью данной статьи вы можете разместить любой элемент игры(постройку, животное, зомби, бота), доступный к спавну через любую модификацию-админ. панель. Очень полезный мод в этом смысле BuilderItems, с его помощью можно творить поистину интересные локации!
    • Автор: Venom21
      Появилась такая проблема, нужно закрыть некоторые слоты под одежду, когда на определённый слот одет предмет…
      пример: возьмём экзоскелет от Фидова, там есть две версии которая одеваеться как на тело и ноги, и есть которая одеваться на разгрузку и пояс, так вот, нужно например чтобы при одетом экзаче на тело и ноги слоты под пояс и разгрузку блокировались, либо только под определенные предметы, если есть интерес то цену можем в личке обсудить…
      P.S. Разрешение от Фидова на переделку и переупаковку есть)
  • Наш выбор

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

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

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