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

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

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

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

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

Режим боя если рядом боты

Всем привет!

 

Возник такой вопрос. Игроки очень любят отагривать ботов и зомби перезаходом на сервер(реконнектом). 

 

В голове родилась порнография следующего вида(куда ее втыкать я понятия не имею): 

 if (nearestObjects [player, AI_BanditTypes, 1200]) then { // Если боты в 1200 метров от игрока

 player setVariable['startcombattimer', 1, true]; // Запуск режима боя
 } else {
 player setVariable['startcombattimer', 0, true]; // Если нет, то отключение режима боя
 };

Знающие люди, помогите пожалуйста довести идею до ума и чтобы работало, мне знаний к сожалению нехватает.. :sad:  Спасибо!

 

P.S. Куда опубликовать новый метод дюпа (а может и не новый. С помощью Battleye) и идеи его фикса? Опять же нехватает знаний для реализации сего :)

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

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


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

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

  • 0

 

Можно все сделать гораздо проще.

При создании бота, в WAI, DZMS, DZAI добавить 1 строку -

 

 

_unit setVariable ["bot", true, true];
 

 

 

где

_unit - ссылка на бота при его создании

а далее мы указываем, что это бот, а не игрок.

т.е. - вешаем на всех создаваемых ботов переменную "bot"

 

Ну а дальше, где то в скриптах определения -

 

_nearbot = nearestObject [_playerPos, ["CAManBase"], 400];
{
    //определяем - бот это или нет.
    _bot = _x getVariable ["bot", false];
    // если бот
    if (_bot) then
       {
           .......тут выполнение какого то скрипта.
       };
}forEach _nearbot;
 

Сделал как вы посоветовали.

 

Написал так: 

private ["_playerCombat","_playerPos","_nearbot"];

while {true} do { 

uiSleep 1; 

_playerCombat = player; 
_playerPos = getPos player; 
_nearbot = nearestObject [_playerPos, ["CAManBase"], 800]; 
{
    //определяем - бот это или нет.
    _bot = _x getVariable ["bot", false];
    // если бот
    if (_bot) then
       {
       _playerCombat setVariable["startcombattimer", 1, true];
       };
}forEach _nearbot;

};

Подцепил в ините за закрывающей скобкой isdedicated, на всех создаваемых ботов навесил переменную в виде:

 

_unit = _unitGroup createUnit [_aiskin,[_pos_x,_pos_y,_pos_z],[],0,"CAN COLLIDE"];
		
// #########bot#########
_unit setVariable ["bot", true, true];
// #########bot#########
		
		
	

Получается ошибка:

 

12:05:53 Error in expression 
 
while {true} do { 
 
uiSleep 1; 
 
_playerCombat = player; 
_playerPos >
12:05:53   Error position: < 
 
_playerCombat = player; 
_playerPos >
12:05:53   Error Invalid number in expression
12:05:53 File mpmissions\__cur_mp.sauerland\tmp\nearzed.sqf, line 5
12:05:53 Error in expression 
 
while {true} do { 
 
uiSleep 1; 
 
_playerCombat = player; 
_playerPos >
12:05:53   Error position: < 
 
_playerCombat = player; 
_playerPos >
12:05:53   Error Invalid number in expression
12:05:53 File mpmissions\__cur_mp.sauerland\tmp\nearzed.sqf, line 5

Что я делаю неправильно? Направьте пожалуйста в правильное русло..

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


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

1.

 

_playerCombat = player; 
_playerPos = getPos player; 
 

 

 

Не нужно нахрен.

 

2. Не

 

 

_nearbot = nearestObject [_playerPos, ["CAManBase"], 800]; 
 

 

а

 

 

_nearbot = nearestObjects [player, ["CAManBase"], 800];
 

 

 

3. Не

 

if (_bot) then
 

 

а

 

if (_bot) exitWith
 

 

 

4. не

 

_playerCombat setVariable["startcombattimer", 1, true];
 

 

а

 

player setVariable["startcombattimer", 1, true];
 

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


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

 

1.

 

_playerCombat = player; 
_playerPos = getPos player; 
 

 

 

Не нужно нахрен.

 

2. Не

 

 

_nearbot = nearestObject [_playerPos, ["CAManBase"], 800]; 
 

 

а

 

 

_nearbot = nearestObjects [player, ["CAManBase"], 800];
 

 

 

3. Не

 

if (_bot) then
 

 

а

 

if (_bot) exitWith
 

 

 

4. не

 

_playerCombat setVariable["startcombattimer", 1, true];
 

 

а

 

player setVariable["startcombattimer", 1, true];
 

Спасибо за ответ!

Я переделал под ваши рекомендации:

private ["_nearbot"];

while {true} do { 

uiSleep 1; 

_nearbot = nearestObjects [player, ["CAManBase"], 800]; 
{
    //определяем - бот это или нет.
    _bot = _x getVariable ["bot", false];
    // если бот
    if (_bot) exitWith
       {
       player setVariable["startcombattimer", 1, true];
       };
}forEach _nearbot;

};

Но снова получаю ошибку, но теперь другую:

10:35:13 Bad conversion: array
10:35:13 Error in expression 
 
uiSleep 1; 
 
_nearbot = nearestObjects [player, ["CAManBase"], 8>
10:35:13   Error position: 
10:35:13   Error 0 elements provided, 3 expected
10:35:13 File mpmissions\__cur_mp.Chernarus\tmp\nearbot.sqf, line 7
10:35:14 Bad conversion: array
10:35:14 Error in expression 
 
uiSleep 1; 
 
_nearbot = nearestObjects [player, ["CAManBase"], 8>
10:35:14   Error position: 
10:35:14   Error 0 elements provided, 3 expected
10:35:14 File mpmissions\__cur_mp.Chernarus\tmp\nearbot.sqf, line 7
10:35:15 Bad conversion: array
10:35:15 Error in expression 
 
uiSleep 1; 
 
_nearbot = nearestObjects [player, ["CAManBase"], 8>
10:35:15   Error position: 
10:35:15   Error 0 elements provided, 3 expected
10:35:15 File mpmissions\__cur_mp.Chernarus\tmp\nearbot.sqf, line 7

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


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

private ["_nearbot"]; while {true} do { uiSleep 1; _nearbot = nearestObjects [player, ["CAManBase"], 800]; { //определяем - бот это или нет. _bot = _x getVariable ["bot", false]; // если бот if (_bot) exitWith { player setVariable["startcombattimer", 1, true]; }; }forEach _nearbot; };

 

Мне интересно, а ты что это на сервере запускаешь???

 

Этот скрипт должен быть в MPMission

Попробуй так

 

 

while {true} do
    {
        uiSleep 1;
        {
            if ( (_x getVariable ["bot", false]) ) exitWith
                {player setVariable["startcombattimer", 1, true];};
        } forEach nearestObjects [player, ["CAManBase"], 800];
    };
 
Изменено пользователем NoNameUltima (история изменений)

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


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

уж было набросал тебе готовый скрипт, чуть не запостил.. но оказалось ты из петушков которые берут чужие скрипты без спроса.

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: SpiritWolf
      Народ, кто-то ковырял поведение и логику Жениных ботов?
      Они невероятно глупые (конкретно пехота). Можно ли как-то ужесточить их? Дальность обнаружения игрока, ибо они стреляют только с 200м.
    • Автор: Шапокляк
      Как сделать чтоб Боты агрелись на Игрока с расстояния   1000-1500 метров. Темы вродибы есть но решений нет.
      ai_share_info = true; // AI share info on player position ai_share_distance = 2000; // distance from killed AI for AI to share your rough position ai_skill_extreme = [["aimingAccuracy",1.00],["aimingShake",1.00],["aimingSpeed",1.00],["endurance",1.00],["spotDistance",3.99],["spotTime",1.00],["courage",1.00],["reloadSpeed",1.00],["commanding",1.00],["general",1.00]]; // Extreme ai_skill_hard = [["aimingAccuracy",1.00],["aimingShake",1.00],["aimingSpeed",1.00],["endurance",1.00],["spotDistance",3.99],["spotTime",1.00],["courage",1.00],["reloadSpeed",1.00],["commanding",1.00],["general",1.00]]; // Hard менял все не помогает.!!!
    • Автор: Sancezz063
      Всем привет!
      скачал оффлай режим, построил ,решил сохранить, в итоге ничего не сохранилось.
      Знаю что можно в init прописать, но потом я их дальше в оффлайне редактировать не смогу. Помню раньше просто нажимал save , потом заходит и все стояло на своих местах
    • Автор: BorizzK
      Накрапал функций (по мотивам того что делали для 0.62 когда-то)
      Проверяем сколько машин на сервере (кстати, кому известны координаты центра Черноруси и макс полезный радиус от центра где могут располагаться объекты?)
      Если машин данного типа достаточно на карте, не спавним
      Если не хватает, перед спавном проверяем нет ли машины рядом (что бы не заспавнить внутрь другой)
      Если все норм, спавним
       
      int CheckNearObjects(vector pos, int radius, string objectClass) //Проверка обьектов поблизости { array<Object> nearest_objects = new array<Object>; array<CargoBase> proxy_cargos = new array<CargoBase>; Object object; string className; int objectcount = 0; GetGame().GetObjectsAtPosition(pos, radius, nearest_objects, proxy_cargos); Print("::: SpawnCars.c ::: CheckNearObjects (EntityAI m_Object, int radius) ::: 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 == objectClass ) { objectcount++; Print( "::: SpawnCars.c ::: CheckNearestObjects: found object " + objectcount.ToString() + ": " + object.ToString() + ", Type/Class: " + className + " !!!"); } } return objectcount; } int SpawnCar(string m_Car_Class, TVectorArray spawn_Points, int max_Car_Count, float min_Car_Health, float max_Car_Health, bool damageallow) //Спавн машины по заданным параметрам { Print("::: SpawnCars.c ::: SpawnCar(" + m_Car_Class + ", " + spawn_Points.ToString() + ") :::"); vector m_Car_Pos; EntityAI m_Car; int n_Car_Count = 0; int all_Car_Count = 0; int s_Car_Count = 0; array<string> m_Car_Equip_Array = new array<string>; if (m_Car_Class == "OffroadHatchback") { /* Так то же можно m_Car_Equip_Array.Insert("HatchbackWheel"); m_Car_Equip_Array.Insert("HatchbackWheel"); m_Car_Equip_Array.Insert("HatchbackWheel"); m_Car_Equip_Array.Insert("HatchbackWheel"); m_Car_Equip_Array.Insert("CarBattery"); m_Car_Equip_Array.Insert("SparkPlug"); m_Car_Equip_Array.Insert("EngineBelt"); m_Car_Equip_Array.Insert("CarRadiator"); m_Car_Equip_Array.Insert("HatchbackDoors_Driver"); m_Car_Equip_Array.Insert("HatchbackDoors_CoDriver"); m_Car_Equip_Array.Insert("HatchbackHood"); m_Car_Equip_Array.Insert("HatchbackTrunk"); */ //И так можно m_Car_Equip_Array = {"HatchbackWheel","HatchbackWheel","HatchbackWheel","HatchbackWheel","CarBattery","SparkPlug","SparkPlug","EngineBelt","CarRadiator","HatchbackDoors_Driver","HatchbackDoors_CoDriver","HatchbackHood","HatchbackTrunk"}; //Проверяем m_Car_Equip_Array.Debug(); } /* else if (m_Car_Class == "M3S") { //Тут заполняем массив комплектующими M3S } */ else { Print("::: SpawnCars.c ::: SpawnCar() ::: NO CAR / WRONG CLASS SPECIFIED :::"); return s_Car_Count; } all_Car_Count = CheckNearObjects("7000 0 7000", 20000, m_Car_Class); //Можно отключить если сервер глючит при старте, тогда присовойте all_Car_Count значение - all_Car_Count = 1; (см ниже) //all_Car_Count = 1; for ( int i = 0; i < spawn_Points.Count(); i++ ) { m_Car_Pos = spawn_Points.Get(i); n_Car_Count = CheckNearObjects(m_Car_Pos, 10, m_Car_Class); Print("::: SpawnCars.c ::: n_Car_Count = " + n_Car_Count.ToString()); if (s_Car_Count + all_Car_Count < max_Car_Count) { if (n_Car_Count < 1) { m_Car = EntityAI.Cast(GetGame().CreateObject(m_Car_Class, m_Car_Pos, false, true)); for ( int e = 0; e < m_Car_Equip_Array.Count(); e++ ) { m_Car.GetInventory().CreateAttachment( m_Car_Equip_Array.Get(e) ); } m_Car.SetAllowDamage(damageallow); m_Car.SetHealth("","",Math.RandomInt(min_Car_Health,max_Car_Health)); Print("::: SpawnCars.c ::: Spawned car: " + m_Car.ToString() + ", Position: " + m_Car.GetPosition().ToString()); if (m_Car) { s_Car_Count++; } } else { Print("::: SpawnCars.c ::: Car spawn not allowed at position: " + m_Car_Pos.ToString() + ", becouse nearest car with same class " + m_Car_Class + " found."); } } else { Print("::: SpawnCars.c ::: Car spawn not allowed becouse cars with same class " + m_Car_Class + " >= " + max_Car_Count.ToString()); } } return s_Car_Count; }  
      Подключение
       
      Правим по своему вкусу
      Помещаем код в файл и размещаем в папке доступной серверу
       
      В самом начале init.c
      #include "$CurrentDir:\\путь\\путь\\имя файла с кодом.c
       
      Далее в функции main вызываем спавн
       
      TVectorArray spawn_Points_Niva = {"6063 0 7871"}; //array with positions, for more cars write more positios in to array int SpawnCarsCarsCount = SpawnCar("OffroadHatchback", spawn_Points_Niva, 32, 100, 100, false); //Class, Positions, Max count, min health, max health, damage allow - true/false Print("::: SpawnCars.c ::: SpawnCars() ::: Spawned cars: " + SpawnCarsCarsCount.ToString()); //это просто каммент  
      Или просто
      int SpawnCarsCarsCount;
      SpawnCarsCarsCount = SpawnCar("M3S", {"6000 0 6000", "7000 0 8000"}, 44, 100, 100, false);
       
      Но для M3S нужно прописать комплектуху в SpawnCar() в массив m_Car_Equip_Array
       
      Ну вобщем разберетесь )))
       
       
      Добавлено:
      Альтернативный вариант от комьюнити:
       
    • Автор: BorizzK
      Функция вернет кол-во игроков рядом с текущей позицией игрока в заданном радиусе
      Использую на своем сервере при рандомном спавне нового игрока, что бы не заспавнился рядом с уже вооруженным и злым
      Если при спавне рядом есть игрок, то выбираются новые координаты для спавна
       
      int CheckNearestObjects(PlayerBase player, int radius) { array<Object> nearest_objects = new array<Object>; array<CargoBase> proxy_cargos = new array<CargoBase>; Object object; string className; int objectcount = 0; GetGame().GetObjectsAtPosition (player.GetPosition(), radius, nearest_objects, proxy_cargos ); Print("::: init_mod.c ::: CheckNearestObjects (int radius) ::: Radius: " + radius.ToString() + ", nearest_objects: " + nearest_objects.Count().ToString()); for ( int i = 0; i < nearest_objects.Count(); i++ ) { object = nearest_objects.Get(i); className = object.GetType(); if ( object ) { if (object.IsMan()) { if (player != object) { Print( "::: Init.c ::: CheckNearestObjects: IsMan(): "+i.ToString()+" => " + object.ToString() + " => Type: " + className + " => Position: " + object.GetPosition().ToString()); objectcount = objectcount + 1; } else { Print( "::: Init.c ::: CheckNearestObjects: isMan(): player and object " + object.ToString() + " the same object!"); } } } } return objectcount; }  
  • Наш выбор

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

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

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

Поддержка