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


Фотография

Вопрос по респу врагов.


Лучший Ответ SteelRat , 23 May 2014 - 00:23


В таком виде получается следующее: Если зайти на триггер, боты начинают спавнится на маркерах "spawn1" и "spawn2" одновременно. Короче говоря срабатывают сразу две точки спавна. Как же сделать чтобы при активации триггера (например №1) боты респились на "spawn1", триггера (например №2) боты респились на "spawn2" и.е.д. И всё это в одном файле spawn.sqf.
/*
	Вызывать скрипт так
	
	nul = "spawn1" execVM "spawn.sqf";
	
	Только для каждого тригера свой "spawn*"
*/

_spawnArea = _this;

switch _spawnArea do {
	
	// Этих секций может быть сколько душе угодно, в рамках разумного
	case "spawn1": {
		// код для спавна на позиции "spawn1"
	};
	
	case "spawn2": {
		// код для спавна на позиции "spawn2"
	};
};
Перейти к сообщению


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

#21 OFFLINE   Disab

Disab

    Ефрейтор

  • Пользователи
  • 74 сообщений

Отправлено 24 May 2014 - 00:43

Если я правильно понимаю лучше вообще убрать команду " if (isServer) then {}; " из скрипта? Если не убрать, то скрипт выполнится у всех игроков. Появится техники столько, сколько народу на серваке.


Сообщение отредактировал Disab: 24 May 2014 - 00:52

  • 0

#22 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 24 May 2014 - 00:50


if !(isServer) exitWith {};

Эффект, если комп не сервер, команда isServer вернёт FALSE, то есть ЛОЖ, вот это

!isServer 

значит возвращённый результат нужно конвертировать в противоположеный, то есть, если TRUE то сделать из него FALSE. И так

if !(isServer) exitWith {};

Если комп не сервер, прекращаем исполнение дальнейшего кода "exitWIth", в фигурных скобках пишется код , если надо, который исполнится, и баста.

 

А вот если так


if (isServer) exitWith {};

То что описал выше применится к серверу

 

Ну и это

// Если это сервер, исполняем код
if (isServer) then {};

// Если это не сервер, исполняем код
if !(isServer) then {};

Если я правильно понимаю лучше вообще убрать команду " if (isServer) then {}; " из скрипта?

 

Вообще хорошим тоном считается спавнить такие дела сервером, ну это если мультик, и стоит научиться этим пользоваться, эту команду не просто так придумали, ну а в сингле вы и сервер и клиент, в одном флаконе)


Сообщение отредактировал SteelRat: 24 May 2014 - 00:50

  • 0

#23 OFFLINE   Disab

Disab

    Ефрейтор

  • Пользователи
  • 74 сообщений

Отправлено 24 May 2014 - 00:56

Если это сервер, исполняем код
if (isServer) then {};

Если это не сервер, исполняем код
if !(isServer) then {};

 

Верней так

 

// Если это сервер, исполняем код
if !(isServer) exitWith {};

// Если это не сервер, исполняем код
if !(isServer) then {};

 

 

Да уж! Чем глубже я ныряю в науку скриптования, тем больше натыкаюсь на подводные камни.


Сообщение отредактировал Disab: 24 May 2014 - 00:59

  • 0

#24 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 24 May 2014 - 01:03

 

Если это сервер, исполняем код
if (isServer) then {};

Если это не сервер, исполняем код
if !(isServer) then {};

 

Верней так

 

// Если это сервер, исполняем код
if !(isServer) exitWith {};

// Если это не сервер, исполняем код
if !(isServer) then {};

 

 

Да уж! Чем глубже я ныряю в науку скриптования, тем больше натыкаюсь на подводные камни.

 

 

Точно)

 

И десерт тоже есть)

// Если это мультиплеер
if(isMultiplayer) then {};

// Если это дедикатед сервер
if (isDedicated) then {};

Сообщение отредактировал SteelRat: 24 May 2014 - 01:06

  • 0

#25 OFFLINE   Disab

Disab

    Ефрейтор

  • Пользователи
  • 74 сообщений

Отправлено 24 May 2014 - 01:19

Можно еще один вопрос по скрипту? У меня есть несколько скриптовых файлов с расширением ".sqs".

 

 

 

Вот один из них

 

; ****************************************************************
; HELP: Run this script from the INITIALIZATION box of the crate.
; CODE: [this] exec "DEN_Ammo.sqs"
; ****************************************************************
 
; Get the crate parameter given
_crate = _this select 0
 
; Remove the stock items from the crate
clearMagazineCargo _crate
clearWeaponCargo _crate
 
 
; Add the items to the crate
 
_crate addweaponcargoglobal ["arifle_mas_aks74_gl",3];
_crate addweaponcargoglobal ["hlc_rifle_aks74",3];
_crate addweaponcargoglobal ["arifle_mas_aks74u_sd",3];
 
_crate addmagazinecargoglobal ["10Rnd_mas_762x54_T_mag",1000];
_crate addmagazinecargoglobal ["30Rnd_mas_762x39_T_mag",1000];
 
_crate additemcargoglobal ["Medikit",3];
_crate additemcargoglobal ["FirstAidKit",500];
 
_crate addbackpackcargoglobal ["B_Mortar_01_weapon_F",1];
_crate addbackpackcargoglobal ["SP_Carryall_Black",3];
 
_crate additemcargoglobal ["V_RebreatherB",3];
 
_crate additemcargoglobal ["U_B_Wetsuit",3];
_crate additemcargoglobal ["G_B_Diving",1];
_crate additemcargoglobal ["G_B_Diving",1];
_crate additemcargoglobal ["G_B_Diving",1];
 
Exit
 

 

Его можно переделать в формат ".sqf" и сделать одним файлом (по аналогии с прошлыми скриптами)? Так чтоб всё в одном файле было (С командами - if !(isServer) exitWith {}; и .....case........). Если не затруднит помогите.


Прошу прощения, опять не понял как правильно выкладывать скрипты сюда.


  • 0

#26 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 24 May 2014 - 01:24

Там где отвечаете, есть такая кнопка <>


  • 0

#27 OFFLINE   Disab

Disab

    Ефрейтор

  • Пользователи
  • 74 сообщений

Отправлено 24 May 2014 - 01:27

; ****************************************************************
; HELP: Run this script from the INITIALIZATION box of the crate.
; CODE: [this] exec "DEN_Ammo.sqs"
; ****************************************************************

; Get the crate parameter given
_crate = _this select 0

; Remove the stock items from the crate
clearMagazineCargo _crate
clearWeaponCargo _crate

; Add the items to the crate

_crate addweaponcargoglobal ["arifle_mas_aks74_gl",3];
_crate addweaponcargoglobal ["hlc_rifle_aks74",3];
_crate addweaponcargoglobal ["arifle_mas_aks74u_sd",3];
_crate addweaponcargoglobal ["hlc_rifle_aks74u",3];

_crate addmagazinecargoglobal ["10Rnd_mas_762x54_T_mag",1000];
_crate addmagazinecargoglobal ["30Rnd_mas_762x39_T_mag",1000];
_crate addmagazinecargoglobal ["100Rnd_mas_762x54_T_mag",1000];

_crate additemcargoglobal ["Medikit",3];
_crate additemcargoglobal ["FirstAidKit",500];
_crate additemcargoglobal ["ToolKit",3];
_crate additemcargoglobal ["MineDetector",5];

_crate addbackpackcargoglobal ["B_CRRC_backpack",3];
_crate addbackpackcargoglobal ["B_UAV_01_backpack_F",3];


_crate additemcargoglobal ["V_RebreatherB",3];

_crate additemcargoglobal ["U_B_Wetsuit",3];
_crate additemcargoglobal ["G_B_Diving",1];


Exit

  • 0

#28 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 24 May 2014 - 01:40

Кухня та же)

/*
	Вызов, в инит ящика
	
	0 = [this, "items_1"] execVM "Box_manager.sqf";
*/

_crate 	= _this select 0;
_items	= _this select 1;
 
switch _items do {
 
	// Набор 1
	case "items_1": {
		clearMagazineCargo _crate;
		clearWeaponCargo _crate;

		_crate addweaponcargoglobal ["arifle_mas_aks74_gl",3];
		_crate addweaponcargoglobal ["hlc_rifle_aks74",3];
		_crate addweaponcargoglobal ["arifle_mas_aks74u_sd",3];
		_crate addweaponcargoglobal ["hlc_rifle_aks74u",3];

		_crate addmagazinecargoglobal ["10Rnd_mas_762x54_T_mag",1000];
		_crate addmagazinecargoglobal ["30Rnd_mas_762x39_T_mag",1000];
		_crate addmagazinecargoglobal ["100Rnd_mas_762x54_T_mag",1000];

		_crate additemcargoglobal ["Medikit",3];
		_crate additemcargoglobal ["FirstAidKit",500];
		_crate additemcargoglobal ["ToolKit",3];
		_crate additemcargoglobal ["MineDetector",5];

		_crate addbackpackcargoglobal ["B_CRRC_backpack",3];
		_crate addbackpackcargoglobal ["B_UAV_01_backpack_F",3];

		_crate additemcargoglobal ["V_RebreatherB",3];

		_crate additemcargoglobal ["U_B_Wetsuit",3];
		_crate additemcargoglobal ["G_B_Diving",1];
	};
	
	case "items_2": {
		// набор 2
	};
	
	case "items_3": {
		// набор 3
	};
};

Сообщение отредактировал SteelRat: 24 May 2014 - 01:41

  • 0

#29 OFFLINE   Disab

Disab

    Ефрейтор

  • Пользователи
  • 74 сообщений

Отправлено 24 May 2014 - 01:44

Ну и в самом начале прописать - if !(isServer) exitWith {};


  • 0

#30 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 24 May 2014 - 01:49

Ну и в самом начале прописать - if !(isServer) exitWith {};

Да лишним не будет.

 

И ещё, вот это

clearMagazineCargo _crate;
clearWeaponCargo _crate;

Достаточно прописать один раз, вот так

/*
	Вызов, в инит ящика
	
	0 = [this, "items_1"] execVM "Box_manager.sqf";
*/

_crate 	= _this select 0;
_items	= _this select 1;

clearMagazineCargo _crate;
clearWeaponCargo _crate;

И не расписывать одно и тоже по каждой секции.


  • 0

#31 OFFLINE   Disab

Disab

    Ефрейтор

  • Пользователи
  • 74 сообщений

Отправлено 24 May 2014 - 01:53

:drinks:  :clapping: Спасибо за уделённое время и за огромную помощь! Буду пробовать применять полученную информацию.


  • 0

#32 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 24 May 2014 - 02:04

_crate additemcargoglobal ["FirstAidKit",500];

500 аптечек, жесть)


  • 0




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