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

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

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

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

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

помогите правильно написать скрипт

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

if (isNil "zombiefree") then {
    zombiefree = false;
};

while {zombiefree} do {
            _entity_array = (getPos player) nearEntities ["CAManBase",110];
            {
                if (_x isKindof "zZombie_Base") then {
                    deletevehicle _x;
                };
                if (! isPlayer _x ) then {
                    deletevehicle _x;
                };
            } forEach _entity_array;
            sleep 3;
        };

Я думаю if (! isPlayer _x ) then {deletevehicle _x; поменять на что то вроде масива в котором перечислить скины которые используются ботами, т.к. по всей видимости торговцы не используют те же скины, и тогда будет что вроде такого: if (_x isKindof "bots_base") then {deletevehicle _x; только я вот не знаю как правильно написать такой массив и где именно в коде его вставить что б оно работало. Или для ботов уже есть такой массив?

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


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

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

  • 0
 

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

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


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





  • 0

Получить тип скина можно так - typeOf _x

Узнать игрок или бот из массива - playableUnits

Создай массив и перечисли в нем скины торговцев.

А в скрипт добавь проверку, - если есть в массиве, и нету в playableUnits, - тогда удалять(а лучше телепортировать)

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


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

Получить тип скина можно так - typeOf _x

Узнать игрок или бот из массива - playableUnits

Создай массив и перечисли в нем скины торговцев.

А в скрипт добавь проверку, - если есть в массиве, и нету в playableUnits, - тогда удалять(а лучше телепортировать)

Вот так?

 

_traders = ["_unit_1", "_unit_2", "_unit_3"] ;
if (isNil "zombiefree") then {
    zombiefree = false;
};

while {zombiefree} do {
            _entity_array = (getPos player) nearEntities ["CAManBase",110];
            {
                if (_x isKindof "zZombie_Base") then {
                    deletevehicle _x;
                };
				if (! isPlayer _x ! = (_traders) or (playableUnits)) then {
					deletevehicle _x;
				};
            } forEach _entity_array;
            sleep 3;
        };

Подумал может лучше перечислить _unit_ из mission.sqf чем скины, может как то можно сделать диапазон что бы всех не перечислять типо range _unit_1 - _unit_20

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


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

Переменные с приставкой _ - локальные.

 

Локальные переменные, это те переменные которые видны только в скрипте который их создал, и после отработки будут удалены(а вернее сказать - существуют и видны они только внутри функции\процедуры, которая их создала, и пока она работает).

Никаких _unit1.. не существует.

 

Их вообще создавали временно, чтобы через них, обратится к только что созданному в скрипте объекту, для поворота на заданный градус-угол. А потом, они нахрен не нужны, и память выделенная им освобождается.

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

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


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

Переменные с приставкой _ - локальные.

 

Локальные переменные, это те переменные которые видны только в скрипте который их создал, и после отработки будут удалены(а вернее сказать - существуют и видны они только внутри функции\процедуры, которая их создала, и пока она работает).

Никаких _unit1.. не существует.

 

Их вообще создавали временно, чтобы через них, обратится к только что созданному в скрипте объекту, для поворота на заданный градус-угол. А потом, они нахрен не нужны, и память выделенная им освобождается.

я понял, то есть получится только сделать перечислив скины торговцев, а в остальном правильно?

Так же как я понял нужно следить что бы скины торговцев не пересекались со скинами ботов?

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


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

В остальном как то запутано.

Я бы сделал на стороне сервера скрипт. И не стал бы цеплять триггер к каждому игроку....

Если триггером, то как то так....

 

private ["_atraders","_entity"];

_atraders = ["_скин1", "_скин_2"....] ;//Скины торговцев


while {true} do

 {

  {

   _entity_array = _x nearEntities ["CAManBase",110];

   _entity = typeOf (_x);

   //Если это зомби, ИЛИ (это не игрок, И это НЕ скин торговца)

   if ( (_x isKindof "zZombie_Base") or (!(_entity in _atraders) and !(_x in playableUnits)) ) then

    {
      deletevehicle _x;
    };
  } forEach _entity_array;
  sleep 3;
 };

 

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

Приблизительно как то так....

Хотя, не верно... для триггера надо условие поменять - while {true} do

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

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

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


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

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

Приблизительно как то так....

Хотя, не верно... для триггера надо условие поменять - while {true} do

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

 

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

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


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

наверное  _entity_array = _x nearEntities ["CAManBase",110]; надо из  forEach вынести. и заместо _x  использовать переменную с координатами области.

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


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

я вот не пойму, а зачем это делать на стороне сервера? Скрипт прописан через маркеры и начинает работу только при вхождении в зону, потому и не прописаны координаты. ТО есть когда в сейф зоне никого нет, там спокойно могут ходить и боты и зомби, как только игрок туда входит скрипт начинает работать.
Вот  часть моего mission.sqm:
 

class Sensors
	{
		items=6;
		class Item0
		{
			position[]={6325.6772,304.99033,7807.7412};
			a=100;
			b=100;
			activationBy="WEST";
			repeating=1;
			interruptable=1;
			age="UNKNOWN";
			name="zonestary";
			expCond="(player distance zonestary) < 100;";
			expActiv="zombiefree = true; zombiefreezone = [] execVM ""scripts\zombiefree.sqf""; canbuild = false; inTraderCity = ""Stary"";";
			expDesactiv="terminate zombiefreezone; TitleText[""\n\Now leaving trader city Stary"", ""PLAIN DOWN"", 3]; canbuild = true; inTraderCity = ""Any"";";
			class Effects
			{
			titleType="TEXT";
            titleEffect="PLAIN DOWN";
            title="Now entering trader city Stary";
			};
		};

А вот первоначально код который пытаюсь изменить:
 

if (isNil "zombiefree") then {
    zombiefree = false;
};

while {zombiefree} do {
            _entity_array = (getPos player) nearEntities ["CAManBase",110];
            {
                if (_x isKindof "zZombie_Base") then {
                    deletevehicle _x;
                };
				if (! isPlayer _x ) then {
					deletevehicle _x;
				};
            } forEach _entity_array;
            sleep 3;
        };

То есть в этом случае нужно всего лишь добавить проверку что _x не игрок и не трейдер. Вроде как бы почти разобрался сейчас попробую написать его

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

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


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

а так по сути NoNameUltima уже и так все написал, осталось подставить скины и проверить =)

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


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

единственное может еще добавить проверку что то типо если в зоне есть другой игрок то не выполнять действие, только сделать его без повтора а в самом начале такую проверку, хотя тоже наверное не получится, т.к. когда игрок уйдет - скрипт не запустится, а если поставить с повторением, то как только в зоне будет больше 1 игрока скрипт перестанет работать у обоих =(

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


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

1. Зомби, там без игрока не будут ходить. Они спавнятся только вблизи игрока(конечно зависит от настроек).

2. Можно ограничить спавн ботов территориально.

 

Поэтому я не вижу особого смысла в данной затее, в принципе))

А на сервере, - потому как правильнее повесить скрипт, работающий раз в 10 секунд на сервер, чем нагружать клиента вообще хоть чем то.

Не важно, - пусть даже событием + пара-килобайтным кодом. К тому же я считаю принципиально неверным подходом, что то слать от клиента серверу попусту. - Будь то запрос на удаление зм или чтолибо еще...

Ну это все лирика - каждый дро... делает как хочет)

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


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

просто переделывать для работы на стороне сервера очень кардинально надо, а для работы на стороне клиенты просто добавить пару проверок =)
С моими познаниями тут и последнее проблема сделать =(
И как быть если стоят динамические боты? Они как бы там и не спавнятся, они вечно туда прибегают или приезжают =)

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


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

Про ботов фиг знает - там же должно быть ограничение перемещения?

А по поводу сервера или клиента - все так же в данном случае делается.

http://s-platoon.ru/index.php?/topic/260-ustanovka-avianostca/

Посмотри как тут подключается файл и сделай так же.

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


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

Про ботов фиг знает - там же должно быть ограничение перемещения?

А по поводу сервера или клиента - все так же в данном случае делается.

http://s-platoon.ru/index.php?/topic/260-ustanovka-avianostca/

Посмотри как тут подключается файл и сделай так же.

может и должны, но я планирую подключить DZAI + SARGE AI + WAI + EMS. так что проще такой скрипт дописать, ведь всеравно же от зомбаков буду такое ставить =)

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


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

 

 

как успехи со скриптом?

пока на том же месте, сейчас все силы кинул на другой ранее начатый скрипт. 

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


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

Нашел время наконец то. Написал скрипт. Огромное спасибо NoNameUltima за куски кода.

 

private ["_atraders","_entity","_AIZscan","_posAIZ","_count","_AIZ","_count1","_sectors","_radius"];

_atraders = ["RU_Functionary1","RU_Citizen3","Rocker4","Profiteer4","Rita_Ensler_EP1","CIV_EuroMan01_EP1","CIV_EuroMan02_EP1","TK_GUE_Soldier_5_EP1","GUE_Soldier_MG","Worker2","Worker3","Woodlander1","UN_CDF_Soldier_Pilot_EP1","RU_WorkWoman1","Dr_Annie_Baker_EP1","RU_Citizen4","RU_WorkWoman5","RU_Citizen1","RU_Villager3","TK_CIV_Takistani04_EP1","Pilot_EP1","RU_Profiteer4","Woodlander3","Dr_Hladik_EP1","Doctor","HouseWife1","GUE_Woodlander2"]; //Скины торговцев

_sectors =
            [
			    [150,6300.09,7800.47],
                [R,X,Y],
                [R,X,Y]
            ];

_count1 = count _sectors;
while {true} do
{
 for "_l" from 0 to (_count1 -1) do
 {
  _radius = (_sectors select _l) select 0;
  _posAIZ = [((_sectors select _l) select 1),((_sectors select _l) select 2),0];
  _AIZscan = _posAIZ nearEntities ["CAManBase",_radius];
  _count = count _AIZscan;
  for "_i" from 0 to (_count -1) do
  {
   _AIZ = _AIZscan select _i; 
   _entity = typeOf (_AIZ); 
	if ( (_AIZ isKindof "zZombie_Base") or (!(_entity in _atraders) and !(_AIZ in playableUnits)) ) then 
	{
     _AIZ setpos [-3367.739,-120.84577,-8247.0625];
	};
  };
 };
 sleep 10;
};

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


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

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

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


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

За скрипты на стороне сервера, я нечего не знаю. Надо у NoNameUltima спрашивать.

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


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

 

 

Нашел время наконец то. Написал скрипт. Огромное спасибо NoNameUltima за куски кода.

 

private ["_atraders","_entity","_AIZscan","_posAIZ","_count","_AIZ","_count1","_sectors","_radius"];

_atraders = ["RU_Functionary1","RU_Citizen3","Rocker4","Profiteer4","Rita_Ensler_EP1","CIV_EuroMan01_EP1","CIV_EuroMan02_EP1","TK_GUE_Soldier_5_EP1","GUE_Soldier_MG","Worker2","Worker3","Woodlander1","UN_CDF_Soldier_Pilot_EP1","RU_WorkWoman1","Dr_Annie_Baker_EP1","RU_Citizen4","RU_WorkWoman5","RU_Citizen1","RU_Villager3","TK_CIV_Takistani04_EP1","Pilot_EP1","RU_Profiteer4","Woodlander3","Dr_Hladik_EP1","Doctor","HouseWife1","GUE_Woodlander2"]; //Скины торговцев

_sectors =
            [
			    [150,6300.09,7800.47],
                [R,X,Y],
                [R,X,Y]
            ];

_count1 = count _sectors;
while {true} do
{
 for "_l" from 0 to (_count1 -1) do
 {
  _radius = (_sectors select _l) select 0;
  _posAIZ = [((_sectors select _l) select 1),((_sectors select _l) select 2),0];
  _AIZscan = _posAIZ nearEntities ["CAManBase",_radius];
  _count = count _AIZscan;
  for "_i" from 0 to (_count -1) do
  {
   _AIZ = _AIZscan select _i; 
   _entity = typeOf (_AIZ); 
	if ( (_AIZ isKindof "zZombie_Base") or (!(_entity in _atraders) and !(_AIZ in playableUnits)) ) then 
	{
     _AIZ setpos [-3367.739,-120.84577,-8247.0625];
	};
  };
 };
 sleep 10;
};

 

private ["_atraders","_entity","_AIZscan","_posAIZ","_sectors","_radius"];
_atraders = ["RU_Functionary1","RU_Citizen3","Rocker4","Profiteer4","Rita_Ensler_EP1","CIV_EuroMan01_EP1","CIV_EuroMan02_EP1","TK_GUE_Soldier_5_EP1","GUE_Soldier_MG","Worker2","Worker3","Woodlander1","UN_CDF_Soldier_Pilot_EP1","RU_WorkWoman1","Dr_Annie_Baker_EP1","RU_Citizen4","RU_WorkWoman5","RU_Citizen1","RU_Villager3","TK_CIV_Takistani04_EP1","Pilot_EP1","RU_Profiteer4","Woodlander3","Dr_Hladik_EP1","Doctor","HouseWife1","GUE_Woodlander2"]; //Скины торговцев
_sectors =
            [
                [150,6300.09,7800.47]
            ];
while {true} do
    {
        _AIZscan    =    [];
        {
            _radius = _x select 0;
            _posAIZ = [_x select 1,_x select 2,0];
            _AIZscan = _AIZscan + _posAIZ nearEntities ["CAManBase",_radius];
        } forEach _sectors;
        {
            _entity = typeOf (_x);
            if ( (_x isKindof "zZombie_Base") or (!(_entity in _atraders) and !(_x in playableUnits)) ) then
                {_x setpos [-3367,-120,-8247];};
        } forEach _AIZscan;
        sleep 10;
    };

имхо вроде так цивильней_)

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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