Перейти к содержимому


Фотография

Рандомный спавн в метке


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 37

#1 OFFLINE   Atavis

Atavis

    Рядовой

  • Пользователи
  • 17 сообщений
  • Откуда:Ханты-Мансийск

Отправлено 08 December 2014 - 11:50

Привет. Имеется код на рандомное появление маркера на карте.

private ["_pos","_centerPos"];
	
	_centerPos = getArray(configFile >> "CfgWorlds" >> worldName >> "centerPosition");
	_pos = [getMarkerPos "center",4000,20000,10,0,25,0] call BIS_fnc_findSafePos;
	DMS_Cords = _pos;
	diag_log format ["DMS: Pos found at: [%1] - markers spawning!",_pos];
	// wait with script till pos is found
	waitUntil {_pos};
	DMS_Main = createMarker ["DMS_Main", DMS_Cords];
	DMS_Main setMarkerColor "ColorRed";
	DMS_Main setMarkerShape "ELLIPSE";
	DMS_Main setMarkerBrush "Grid";
	DMS_Main setMarkerSize [150,150];
	diag_log format ["DMS: Mission starting at %1",_pos];
	sleep 4;
	
	publicVariable "DMS_Cords";
	_aispawn = [DMS_Cords,80,6,6,1] execVM "mission\ai.sqf";//AI Guards

После появления маркера вызывается скрипт на появление ботов, но они появляются в центре, помогите сделать чтобы боты появлялись рандомно в этом маркере а по середине появлялся транспорт или ящик поддержки.

 

ai.sqf


_unit = objNull;
_centerpos = getmarkerpos "DMS_Main";
_unitGroup = createGroup RESISTANCE;
_unitGroup setBehaviour "AWARE";
_unitGroup setCombatMode "RED";
_unit1 = _unitGroup createUnit ["I_Soldier_EPOCH", _centerpos, [], 0, "FORM"];

_unit = _unitGroup createUnit ["I_Soldier_EPOCH", _centerpos, [], 0, "FORM"];

_unit = _unitGroup createUnit ["I_Soldier_EPOCH", _centerpos, [], 0, "FORM"];

_unit setSkill 0.6;
_unit setRank "Private";
_unit enableAI "TARGET";

_unit enableAI "AUTOTARGET";

_unit enableAI "MOVE";

_unit enableAI "ANIM";

_unit enableAI "FSM";


_unit1 setSkill 0.6;
_unit1 setRank "Private";
_unit1 enableAI "TARGET";

_unit1 enableAI "AUTOTARGET";

_unit1 enableAI "MOVE";

_unit1 enableAI "ANIM";

_unit1 enableAI "FSM";

//_unit call EPOCH_server_save_vehicle;
_unit call EPOCH_server_savePlayer
//_unit call EPOCH_server_setVToken;
//EPOCH_pushPlayer_PVS = _unit1;
//publicVariableServer "EPOCH_pushPlayer_PVS";

_unitGroup selectLeader _unit1;
 

P.S. как ботам прописать новое оружие и патроны сделать бесконечными.


Сообщение отредактировал Atavis: 08 December 2014 - 12:12

  • 0

#2 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 08 December 2014 - 12:30


_unit1 = _unitGroup createUnit ["I_Soldier_EPOCH", _centerpos, [], 0, "FORM"];

Object = group createUnit [type, position, markers, placement, special]

placement - радиус размещения

Вот его и замени на радиус маркера


  • 0

#3 OFFLINE   Atavis

Atavis

    Рядовой

  • Пользователи
  • 17 сообщений
  • Откуда:Ханты-Мансийск

Отправлено 08 December 2014 - 12:35

 


_unit1 = _unitGroup createUnit ["I_Soldier_EPOCH", _centerpos, [], 0, "FORM"];

Object = group createUnit [type, position, markers, placement, special]

placement - радиус размещения

Вот его и замени на радиус маркера

 

Спасибо сейчас попробую. А не подскажите как сделать чтобы рандомно спавнились боты в радиусе маркера (150)


  • 0

#4 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 08 December 2014 - 12:50

P.S. как ботам прописать новое оружие и патроны сделать бесконечными.

В вашем случае:

// ----- weapon ----- \\
removeAllWeapons _unit;
_unit addWeapon "className_of_weapon";
 
// ----- unlimited bullets ----- \\
_unit addEventHandler ["FIRED", {(_this select 0) addMagazine  "className_of_magazine"}]

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

С этого момента по-подробнее т к я вам уже дал нужную настройку


Сообщение отредактировал vlad333000: 08 December 2014 - 12:52

  • 0

#5 OFFLINE   Atavis

Atavis

    Рядовой

  • Пользователи
  • 17 сообщений
  • Откуда:Ханты-Мансийск

Отправлено 08 December 2014 - 13:02

 

P.S. как ботам прописать новое оружие и патроны сделать бесконечными.

В вашем случае:

// ----- weapon ----- \\
removeAllWeapons _unit;
_unit addWeapon "className_of_weapon";
 
// ----- unlimited bullets ----- \\
_unit addEventHandler ["FIRED", {(_this select 0) addMagazine  "className_of_magazine"}]

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

С этого момента по-подробнее т к я вам уже дал нужную настройку

 

Хм, боты появляются рандомно, два бота бегут к первому и стоят треугольником. Я так понимаю они в группе и бегут они к старшему по званию. Как нибудь можно сделать, чтобы они сами по себе были?


  • 0

#6 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 08 December 2014 - 13:07

Atavis, попробуй _unitGroup заменить на grpNull 

 

UPD: можно: commandStop/doStop _unit; вставить сразу после команды спавна юнита (createUnit)


Сообщение отредактировал vlad333000: 08 December 2014 - 13:16

  • 0

#7 OFFLINE   Atavis

Atavis

    Рядовой

  • Пользователи
  • 17 сообщений
  • Откуда:Ханты-Мансийск

Отправлено 08 December 2014 - 13:23

Atavis, попробуй _unitGroup заменить на grpNull 

 

UPD: можно: commandStop/doStop _unit; вставить сразу после команды спавна юнита (createUnit)

Наверное я тупой. Сделал но ботов нет(
 


_unit = objNull;
_centerpos = getmarkerpos "DMS_Main";
grpNull = createGroup RESISTANCE;
grpNull setBehaviour "AWARE";
grpNull setCombatMode "RED";
_unit1 = grpNull createUnit ["I_Soldier_EPOCH", _centerpos, [], 150, "FORM"];

_unit = grpNull createUnit ["I_Soldier_EPOCH", _centerpos, [], 150, "FORM"];

_unit = grpNull createUnit ["I_Soldier_EPOCH", _centerpos, [], 150, "FORM"];

_unit setSkill 0.6;
_unit setRank "Private";
_unit enableAI "TARGET";

_unit enableAI "AUTOTARGET";

_unit enableAI "MOVE";

_unit enableAI "ANIM";

_unit enableAI "FSM";


_unit1 setSkill 0.6;
_unit1 setRank "Private";
_unit1 enableAI "TARGET";

_unit1 enableAI "AUTOTARGET";

_unit1 enableAI "MOVE";

_unit1 enableAI "ANIM";

_unit1 enableAI "FSM";

//_unit call EPOCH_server_save_vehicle;
_unit call EPOCH_server_savePlayer
//_unit call EPOCH_server_setVToken;
//EPOCH_pushPlayer_PVS = _unit1;
//publicVariableServer "EPOCH_pushPlayer_PVS";

grpNull selectLeader _unit1;


  • 0

#8 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 08 December 2014 - 13:29

Atavis, хороший итог :), тогда верни обратно и воспользуйся 2 варинтом: doStop или commandStop 


  • 0

#9 OFFLINE   Atavis

Atavis

    Рядовой

  • Пользователи
  • 17 сообщений
  • Откуда:Ханты-Мансийск

Отправлено 08 December 2014 - 13:36

Atavis, хороший итог :), тогда верни обратно и воспользуйся 2 варинтом: doStop или commandStop 

Может быть можно как то код поправить или занова ботов прописать.

Не подкажите что этот код делает:

_unit setSkill 0.6;
_unit setRank "Private";
_unit enableAI "TARGET";

_unit enableAI "AUTOTARGET";

_unit enableAI "MOVE";

_unit enableAI "ANIM";

_unit enableAI "FSM";


_unit1 setSkill 0.6;
_unit1 setRank "Private";
_unit1 enableAI "TARGET";

_unit1 enableAI "AUTOTARGET";

_unit1 enableAI "MOVE";

_unit1 enableAI "ANIM";

_unit1 enableAI "FSM";

//_unit call EPOCH_server_save_vehicle;
_unit call EPOCH_server_savePlayer
//_unit call EPOCH_server_setVToken;
//EPOCH_pushPlayer_PVS = _unit1;
//publicVariableServer "EPOCH_pushPlayer_PVS";

grpNull selectLeader _unit1;

  • 0

#10 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 08 December 2014 - 13:46

_unit setSkill 0.6;  // Устанавливает уровень навыков бота (0-1) т. е. то насколько он быстро будет целиться и точнее стрелять
_unit setRank "Private"; // Ранг юнита
_unit enableAI "TARGET"; // врубает инстинкты бота: не знаю
_unit enableAI "AUTOTARGET"; // выбора цели
_unit enableAI "MOVE"; // передвижения
_unit enableAI "ANIM"; // анимации
_unit enableAI "FSM"; // инстинкты
_unit1 setSkill 0.6;
_unit1 setRank "Private";
_unit1 enableAI "TARGET";
_unit1 enableAI "AUTOTARGET";
_unit1 enableAI "MOVE";
_unit1 enableAI "ANIM";
_unit1 enableAI "FSM";
//_unit call EPOCH_server_save_vehicle;
_unit call EPOCH_server_savePlayer // вызов функции и да почему тут нету ;?
//_unit call EPOCH_server_setVToken;
//EPOCH_pushPlayer_PVS = _unit1;
//publicVariableServer "EPOCH_pushPlayer_PVS"; grpNull selectLeader _unit1;

Сообщение отредактировал vlad333000: 08 December 2014 - 13:54

  • 0

#11 OFFLINE   Atavis

Atavis

    Рядовой

  • Пользователи
  • 17 сообщений
  • Откуда:Ханты-Мансийск

Отправлено 08 December 2014 - 13:55

_unit setSkill 0.6;  // Устанавливает уровень навыков бота (0-1) т. е. то насколько он быстро будет целиться и точнее стрелять
_unit setRank "Private"; // Ранг юнита
_unit enableAI "TARGET"; // врубает инстинкты бота: не знаю
_unit enableAI "AUTOTARGET"; // выбора цели
_unit enableAI "MOVE"; // передвижения
_unit enableAI "ANIM"; // анимации
_unit enableAI "FSM"; // инстинкты
_unit1 setSkill 0.6;
_unit1 setRank "Private";
_unit1 enableAI "TARGET";
_unit1 enableAI "AUTOTARGET";
_unit1 enableAI "MOVE";
_unit1 enableAI "ANIM";
_unit1 enableAI "FSM";
//_unit call EPOCH_server_save_vehicle;
_unit call EPOCH_server_savePlayer // вызов функции и да почему тут нету ;?
//_unit call EPOCH_server_setVToken;
//EPOCH_pushPlayer_PVS = _unit1;
//publicVariableServer "EPOCH_pushPlayer_PVS"; grpNull selectLeader _unit1;

Спасибо. Сейчас буду колдовать. Отпишу о результате.


  • 0

#12 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 08 December 2014 - 17:52

Вы выложили полностью содержимое файла ai.sqf ?

 

Потому что я вижу массу не стыковок!


  • 0

#13 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 08 December 2014 - 18:11

_unit = objNull;	// Не вижу ни какого смысла в этом !!!
_centerpos = getmarkerpos "DMS_Main";

/* В этой части у вас что то полу не понятное, если ваша цель 3 бота, то стоило использовать ещё одну переменную для 3-го бота, _unit2

_unitGroup = createGroup RESISTANCE;
_unitGroup setBehaviour "AWARE";
_unitGroup setCombatMode "RED";
_unit1 = _unitGroup createUnit ["I_Soldier_EPOCH", _centerpos, [], 0, "FORM"];

_unit = _unitGroup createUnit ["I_Soldier_EPOCH", _centerpos, [], 0, "FORM"];

_unit = _unitGroup createUnit ["I_Soldier_EPOCH", _centerpos, [], 0, "FORM"];
*/

_unit setSkill 0.6;
_unit setRank "Private";
_unit enableAI "TARGET";

_unit enableAI "AUTOTARGET";

_unit enableAI "MOVE";

_unit enableAI "ANIM";

_unit enableAI "FSM";


_unit1 setSkill 0.6;
_unit1 setRank "Private";
_unit1 enableAI "TARGET";

_unit1 enableAI "AUTOTARGET";

_unit1 enableAI "MOVE";

_unit1 enableAI "ANIM";

_unit1 enableAI "FSM";

_unit call EPOCH_server_savePlayer

_unitGroup selectLeader _unit1;

//	----------------------------------------------------------
//	Если вам нужны 3 бота на разных позициях, 
//	то для этого нужно создать 3 группы, и добавить по 1 боту в каждую, 
//	тогда все боты будут оставаться на своих позициях

_centerpos	= getmarkerpos "DMS_Main";
_spawnRad	= getMarkerSize "DMS_Main";
_spawnRad	= (if (_spawnRad select 0 >= _spawnRad select 1) then {_spawnRad select 0} else {_spawnRad select 1}) / 2;

for "_i" from 0 to 2 do {
	
	_unit = (createGroup RESISTANCE) createUnit ["I_Soldier_EPOCH", _centerpos, [], _spawnRad, "FORM"];
	_unit setSkill 0.6;
	_unit setRank "Private";
	_unit enableAI "TARGET";
	_unit enableAI "AUTOTARGET";
	_unit enableAI "MOVE";
	_unit enableAI "ANIM";
	_unit enableAI "FSM";
	_unit setBehaviour "AWARE";
	_unit setCombatMode "RED";
	
	_unit call EPOCH_server_savePlayer;
};

  • 0

#14 OFFLINE   Atavis

Atavis

    Рядовой

  • Пользователи
  • 17 сообщений
  • Откуда:Ханты-Мансийск

Отправлено 08 December 2014 - 18:20

-


Сообщение отредактировал Atavis: 08 December 2014 - 18:21

  • 0

#15 OFFLINE   Atavis

Atavis

    Рядовой

  • Пользователи
  • 17 сообщений
  • Откуда:Ханты-Мансийск

Отправлено 08 December 2014 - 18:31

Вы выложили полностью содержимое файла ai.sqf ?

 

Потому что я вижу массу не стыковок!

Да это все что выложил. Все бьюсь ни как сделать не могу. Я сам в этом бум бум. Есть еще файл aiscripts.sqf

private["_pos","_copter","_plyr","_unit","_copterSupportGrp","_arrUnits","_arrSkills","_aiskill"];
_pos = _this select 0;
_copter = _this select 1;
_plyr = player;//need to check on change owner
_unit = objNull;

_grp = createGroup RESISTANCE;
_grp setBehaviour "AWARE";
_grp setCombatMode "RED";
// comment out and use sanitized soldiers for now 
// _arrUnits = ["I_Soldier_TL_F","I_Soldier_GL_F","I_Soldier_AR_F","I_Soldier_LAT_F"];
_arrUnits = ["I_Soldier_EPOCH", "I_Soldier_EPOCH", "I_Soldier_EPOCH"];
_arrSkills = ["aimingAccuracy","aimingShake","aimingSpeed","endurance","spotDistance","spotTime","courage","reloadSpeed","commanding","general"];

for "_i" from 0 to ((count _arrUnits)-1) do {

	_unit = _grp createUnit[(_arrUnits select _i), _pos, [], 0, "FORM"];

	_unit setSkill 0.6;
	_unit setRank "Private";

	_unit enableAI "TARGET";
	//_unit disableAI "AUTOTARGET";
	_unit enableAI "AUTOTARGET";
	_unit enableAI "MOVE";
	_unit enableAI "ANIM";
	_unit disableAI "FSM";

	// cleanup if player logs out
	EPOCH_TEMPOBJ_PVS = _unit;
	publicVariableServer "EPOCH_TEMPOBJ_PVS";

	for "_i" from 0 to ((count _arrSkills)-1) do {
	_aiskill = ((floor(random 10))+1)/10;
	if(_aiskill<0.6)then{_aiskill=0.6};
	_unit setSkill [_arrSkills select _i,_aiskill];
	};

	if(_i == 0)then{
	//_unit enableAI "AUTOTARGET";
		_grp selectLeader _unit;
		[_pos,_copter,_plyr,_unit] execFSM "\x\addons\a3_epoch_code\System\Group_Leader_Brain.fsm";
	//}else{
	//[_pos,_copter,_plyr,_unit] execFSM "\x\addons\a3_epoch_code\System\Group_Soldier_brain.fsm";
	};

};


Сообщение отредактировал Atavis: 08 December 2014 - 18:33

  • 0

#16 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 08 December 2014 - 18:38

По сути по поводу вашей проблемы я ответ дал.

А файл aiscripts.sqf по сути делает то же самое, только ещё вызывает FSM файл который рулит поведением лидера группы.

 

FSM который рулит остальными бойцами закоментирован, тоесть не активируется.


Сообщение отредактировал SteelRat: 08 December 2014 - 18:40

  • 0

#17 OFFLINE   Atavis

Atavis

    Рядовой

  • Пользователи
  • 17 сообщений
  • Откуда:Ханты-Мансийск

Отправлено 08 December 2014 - 18:55

По сути по поводу вашей проблемы я ответ дал.

А файл aiscripts.sqf по сути делает то же самое, только ещё вызывает FSM файл который рулит поведением лидера группы.

 

FSM который рулит остальными бойцами закоментирован, тоесть не активируется.

Поставил то что вы написали и ничего. У вас есть скайп?


  • 0

#18 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 08 December 2014 - 18:57

 

По сути по поводу вашей проблемы я ответ дал.

А файл aiscripts.sqf по сути делает то же самое, только ещё вызывает FSM файл который рулит поведением лидера группы.

 

FSM который рулит остальными бойцами закоментирован, тоесть не активируется.

Поставил то что вы написали и ничего. У вас есть скайп?

 

Почему вы решили что ни чего?

 

На всякий случай

Вот этим надо заменить весь код в ai.sqf

_centerpos	= getmarkerpos "DMS_Main";
_spawnRad	= getMarkerSize "DMS_Main";
_spawnRad	= (if (_spawnRad select 0 >= _spawnRad select 1) then {_spawnRad select 0} else {_spawnRad select 1}) / 2;

for "_i" from 0 to 2 do {
	
	_unit = (createGroup RESISTANCE) createUnit ["I_Soldier_EPOCH", _centerpos, [], _spawnRad, "FORM"];
	_unit setSkill 0.6;
	_unit setRank "Private";
	_unit enableAI "TARGET";
	_unit enableAI "AUTOTARGET";
	_unit enableAI "MOVE";
	_unit enableAI "ANIM";
	_unit enableAI "FSM";
	_unit setBehaviour "AWARE";
	_unit setCombatMode "RED";
	
	_unit call EPOCH_server_savePlayer;
};

Сообщение отредактировал SteelRat: 08 December 2014 - 18:59

  • 0

#19 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 08 December 2014 - 19:08

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

_debug		= true;
_centerpos	= getmarkerpos "DMS_Main";
_spawnRad	= getMarkerSize "DMS_Main";
_spawnRad	= (if (_spawnRad select 0 >= _spawnRad select 1) then {_spawnRad select 0} else {_spawnRad select 1}) / 2;

for "_i" from 0 to 2 do {
	
	_unit = (createGroup RESISTANCE) createUnit ["I_Soldier_EPOCH", _centerpos, [], _spawnRad, "FORM"];
	_unit setSkill 0.6;
	_unit setRank "Private";
	_unit enableAI "TARGET";
	_unit enableAI "AUTOTARGET";
	_unit enableAI "MOVE";
	_unit enableAI "ANIM";
	_unit enableAI "FSM";
	_unit setBehaviour "AWARE";
	_unit setCombatMode "RED";
	
	_unit call EPOCH_server_savePlayer;
	
	if (_debug) then {
		_marker = format["%1", _unit];
		_marker = createMarkerLocal [_marker, (getPos _unit)];
		_marker setMarkerTypeLocal "mil_dot";
		_marker setMarkerPosLocal (getPos _unit);
		_marker setMarkerColorLocal "ColorRed";
	};
};

Сообщение отредактировал SteelRat: 08 December 2014 - 19:10

  • 0

#20 OFFLINE   Atavis

Atavis

    Рядовой

  • Пользователи
  • 17 сообщений
  • Откуда:Ханты-Мансийск

Отправлено 08 December 2014 - 19:17

Почему вы решили что ни чего?

 

 

На всякий случай

Вот этим надо заменить весь код в ai.sqf

_centerpos	= getmarkerpos "DMS_Main";
_spawnRad	= getMarkerSize "DMS_Main";
_spawnRad	= (if (_spawnRad select 0 >= _spawnRad select 1) then {_spawnRad select 0} else {_spawnRad select 1}) / 2;

for "_i" from 0 to 2 do {
	
	_unit = (createGroup RESISTANCE) createUnit ["I_Soldier_EPOCH", _centerpos, [], _spawnRad, "FORM"];
	_unit setSkill 0.6;
	_unit setRank "Private";
	_unit enableAI "TARGET";
	_unit enableAI "AUTOTARGET";
	_unit enableAI "MOVE";
	_unit enableAI "ANIM";
	_unit enableAI "FSM";
	_unit setBehaviour "AWARE";
	_unit setCombatMode "RED";
	
	_unit call EPOCH_server_savePlayer;
};

Поставил вроде бы работает. Извините что надоедаю, а можно как нибудь не группу прописать а отдельно юнита который рандомно спавнится на метке и прописать ему каждому свою амуницию. Файл iascripts.sqf можно удалить?


  • 0




Яндекс.Метрика