Автор скрипта: http://s-platoon.ru/profile/48-nonameultima/
Все благодарности за этот скрипт непосредственно автору скрипта, не мне!
В данной теме, расскажу как сделать зараженные газом области на карте.
Автор: NoNameUltima
1. Открываем на сервере файл: missionServer.c
2. После строки:
GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(this.UpdatePlayersStats, 30000, true);
Добавляем:
GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(this.GAS_ZONE_TRIGGER, 10000, true);
*10000 - Время в мс(10 секунд). С такой частотой будет наноситься урон в данной области.
После строки:
GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(this.UpdatePlayersStats);
Добавляем:
GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(this.GAS_ZONE_TRIGGER);
Ищем строку:
void UpdatePlayersStats()
Вставляем ВЫШЕ нее, следующий код:
void GAS_ZONE_TRIGGER()
{
/*
GAS_ZONE_TRIGGER
Автор: NoNameUltima
skype: hf-trade
*/
// Зараженные зоны
TVectorArray gas_points = {"13249 0 3962", "6389 0 2683", "6612 0 2561"};
// Массив намордников
TStringArray gas_masks = {"GasMask", "GP5GasMask"};
// Радиус зон
int radius = 350;
// Наносимый урон
float damage_value = 10;
ref array<Man> players = new array<Man>;
GetGame().GetPlayers( players );
PlayerBase player;
vector position_player;
int x;
bool isGasMask;
int attCount;
int attIdx;
EntityAI attachment;
ItemBase item;
string className;
float damage_player;
for (int i = 0; i < players.Count(); i++)
{
Class.CastTo(player, players.Get(i));
position_player = player.GetPosition();
for (x = 0; x < gas_points.Count(); x++)
{
if ( (vector.Distance(position_player, gas_points.Get(x))) < radius )
{
isGasMask = false;
attCount = player.GetInventory().AttachmentCount();
for (attIdx = 0; attIdx < attCount; attIdx++)
{
attachment = player.GetInventory().GetAttachmentFromIndex(attIdx);
if ( attachment.IsItemBase() )
{
item = Class.Cast(attachment);
className = item.GetType();
if ( gas_masks.Find(className) >= 0 )
{
//Print ("Намордник найден!");
isGasMask = true;
break;
}
}
}
if (isGasMask == false)
{
//Print ("Намордник не найден!");
damage_player = player.GetHealth("GlobalHealth", "Health");
player.SetHealth("GlobalHealth", "Health", damage_player - damage_value);
}
}
}
}
}
P.S.
1. Так же можно изменить формат массива, и сделать зоны с разным радиусом
2. Можно при желании добавить вывод оповещения, в зараженных зонах.
*Скрипт предоставлен мной, в обрезанном виде намерено - остальное на Ваш вкус и цвет
Изменено 4 октября пользователем NoNameUltima
Добавлено от 123new:
Файл missionServer.c располагается в {папка сервера}\scripts\5_Mission\MissionServer\missionServer.c
Если у вас нет папки scripts в папке с сервером игры, откройте папку dta, распакуйте папку scripts из pbo-файла scripts.pbo и переместите в папку с сервером.
Чтобы папка считывалась сервером, необходимо добавить параметр запуска сервера '-FilePatching'.
P.S. Гайд не проверялся на актуальной версии серверной части игры со steam!