Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • 0
Sign in to follow this  
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; только я вот не знаю как правильно написать такой массив и где именно в коде его вставить что б оно работало. Или для ботов уже есть такой массив?

Share this post


Link to post
Share on other sites

21 answers to this question

Recommended Posts




  • 0

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

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

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

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

Share this post


Link to post
Share on other sites
  • 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

Share this post


Link to post
Share on other sites
  • 0

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

 

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

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

 

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

Edited by NoNameUltima (see edit history)

Share this post


Link to post
Share on other sites
  • 0

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

 

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

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

 

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

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

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

Share this post


Link to post
Share on other sites
  • 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 юзать, и создавать для каждой зоны примерно такой скрипт. Добавив массив координат центральных точек трейдзон.

Edited by NoNameUltima (see edit history)

Share this post


Link to post
Share on other sites
  • 0

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

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

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

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

 

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

Share this post


Link to post
Share on other sites
  • 0
 

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

Share this post


Link to post
Share on other sites
  • 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 не игрок и не трейдер. Вроде как бы почти разобрался сейчас попробую написать его

Edited by ka3ant1p (see edit history)

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

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

 

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

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

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

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

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

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

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

Share this post


Link to post
Share on other sites
  • 0

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

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

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

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

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

Share this post


Link to post
Share on other sites
  • 0

 

 

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

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

Share this post


Link to post
Share on other sites
  • 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;
};

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0
 

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

Share this post


Link to post
Share on other sites
  • 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;
    };

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

Edited by NoNameUltima (see edit history)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.