Переменная:Что мы делаем?Итак, предлогаю вашему вниманию систему ракетной обороны или ракетного удара по игроку.![]()
В чем это заключается?![]()
Заключается это в том, что когда игрок (Админ) введет команду /flyattack [iD] то на данного игрока (с введенным ID) с воздуха упадут три ракеты, которые потом взорвутся и по возможности уничтожат игрока. Так как система будет занята выстрелом ракет, её нельзя будет использовать пока она выстреливает в какого-либо игрока.
Как это сделать?![]()
Сделать - нет ничего сложного. Приступим.
new pRocket[3],
Float:X,
Float:Y,
Float:Z,
Aimer = INVALID_PLAYER_ID,
Timer[MAX_PLAYERS],
bool:Attack = false;
Команды:
if(strcmp(cmd,"/flyattack",true) == 0)
{
tmp = strtok(cmdtext,idx);
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFFFFFFFF,"Вы не Админ!");
if(!strlen(tmp)) return SendClientMessage(playerid,0xFFFFFFFF,"Используйте /flyattack [ID игрока]");
new pid = strval(tmp);
if(!IsPlayerConnected(pid)) return SendClientMessage(playerid,0xFFFFFFFF,"> Игрок не подключен!");
if(GetPlayerInterior(pid) != 0) return SendClientMessage(playerid,0xFFFFFFFF,"> Игрока находится в доме!");
if(Attack) return SendClientMessage(playerid,0xF60000FF,"> Ракетная установка уже преведена в действие!");
pRocket[0] = INVALID_OBJECT_ID;
pRocket[1] = INVALID_OBJECT_ID;
pRocket[2] = INVALID_OBJECT_ID;
Attack = true;
Aimer = playerid;
GetPlayerPos(pid,X,Y,Z);
pRocket[0] = CreateObject(354,X,Y,Z+500.0,0.0,0.0,0.0);
pRocket[1] = CreateObject(354,X,Y,Z+510.0,0.0,0.0,0.0);
pRocket[2] = CreateObject(354,X,Y,Z+515.0,0.0,0.0,0.0);
MoveObject(pRocket[0],X,Y,Z-5,70.0);
MoveObject(pRocket[1],X,Y,Z-5,70.0);
MoveObject(pRocket[2],X,Y,Z-5,70.0);
Timer[pid] = SetTimerEx("ObjectUpdate",100,true,"dd",pid,pRocket[0]);
new Name[32],string[128];
GetPlayerName(pid,Name,sizeof(Name));
format(string,sizeof(string),"> Ракетная Атака на игрока %s запущена!",Name);
SendClientMessage(playerid,0xF60000AA,string);
return 1;
}
Теперь создадим паблики:
forward ObjectUpdate(playerid,objectid);
public ObjectUpdate(playerid,objectid)
{
if(!Attack) return KillTimer(Timer[playerid]);
new Float
GetObjectPos(objectid,oX[0],oX[1],oX[2]);
GetPlayerPos(playerid,oX[3],oX[4],oX[5]);
if(oX[2] < oX[5])
{
DestroyObject(pRocket[0]);
DestroyObject(pRocket[1]);
DestroyObject(pRocket[2]);
CreateExplosion(X+RandomValue(-10,10),Y+RandomValue(-10,10),Z,6,10.0);
CreateExplosion(X+RandomValue(-10,10),Y+RandomValue(-10,10),Z,6,10.0);
CreateExplosion(X+RandomValue(-10,10),Y+RandomValue(-10,10),Z,6,10.0);
SendClientMessage(Aimer,-1,"> Ракетная атака ударила по цели!");
KillTimer(Timer[playerid]);
Attack = false;
}
return 1;
}
Стоки:
stock strtok(const string[],&index,seperator=' ')
{
new length = strlen(string),offset = index,result[64];
while((index < length) && (string[index] != seperator) && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
if((index < length) && (string[index] == seperator))
{
index++;
}
return result;
}
Код:
stock RandomValue(min, max)
{
return random(max - min) + min;
}
Последнее редактирование модератором: