shape1
shape2
shape3
shape4
shape7
shape8

Система взрывчатки

  • Автор темы Amfy
  • Дата начала

A

Amfy

Гость
Гость
Сабж.

Важно:

Используется инклуд sscanf, поэтому, если у вас не подключен, необходимо подключить, или переделать команды под себя.
Ко всем #define

#define PRESSED(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))

К глобальным переменным (где все new):

new ObjectBomb[MAX_PLAYERS] = {INVALID_OBJECT_ID, ...};

В начало public OnPlayerCommandText добавить (если нет):

new cmd[32],params[128];
sscanf(cmdtext,"s[32]s[128]",cmd,params);

Ну, и конечно же, сами команды в public OnPlayerCommandText

if(strcmp("/bomba",cmdtext,true, 10) == 0)
{
SendClientMessage(playerid,-1,"Установить взрывчатку - /usbomba");
SendClientMessage(playerid,-1,"Установить взрывчатку на таймер - /usbombatime");
SetPVarInt(playerid,"bomba",1);
return 1;
}
if(strcmp("/usbomba",cmdtext,true, 10) == 0)
{
if(!GetPVarInt(playerid,"bomba")) return SendClientMessage(playerid,-1,"У вас нет бомбы!");
if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,-1,"Выйдите из машины!");
UsBomba(playerid);
return 1;
}
if(strcmp("/usbombatime",cmdtext,true, 10) == 0)
{
if(!GetPVarInt(playerid,"bomba")) return SendClientMessage(playerid,-1,"У вас нет бомбы!");
new time_explosion;
if(sscanf(params,"i",time_explosion)) return SendClientMessage(playerid,-1,"/usbombatime [время (не меньше 10 сек и не больше 60 сек)]");
if(time_explosion < 10 || time_explosion > 60) return SendClientMessage(playerid,-1,"Время должно быть от 10 сек до 60 сек");
UsBomba(playerid,time_explosion);
return 1;
}

В public OnPlayerKeyStateChange

if(PRESSED(KEY_YES) && GetPVarInt(playerid,"ActiveBomb") == 1)
{
new Float:explosion_pos[3];
explosion_pos[0] = GetPVarFloat(playerid,"x_bomb");
explosion_pos[1] = GetPVarFloat(playerid,"y_bomb");
explosion_pos[2] = GetPVarFloat(playerid,"z_bomb");
CreateExplosion(explosion_pos[0],explosion_pos[1],explosion_pos[2],6,1);
CreateExplosion(explosion_pos[0],explosion_pos[1],explosion_pos[2],7,1);
DestroyObject(ObjectBomb[playerid]);
ObjectBomb[playerid] = INVALID_OBJECT_ID;
DeletePVar(playerid,"bomba");
DeletePVar(playerid,"x_bomb");
DeletePVar(playerid,"y_bomb");
DeletePVar(playerid,"z_bomb");
DeletePVar(playerid,"ActiveBomb");
return 1;
}

В public OnPlayerDisconnect

if(GetPVarInt(playerid,"ActiveBomb") == 1 || GetPVarInt(playerid,"ActiveBomb") == 2)
{
DestroyObject(ObjectBomb[playerid]);
ObjectBomb[playerid] = INVALID_OBJECT_ID;
}

В конец мода:

UsBomba(playerid,time = 0)
{
new Float:pos[3];
GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
ApplyAnimation(playerid,"BOMBER","BOM_Plant",4.0,0,0,0,0,0);
ObjectBomb[playerid] = CreateObject(1654,pos[0],pos[1]-0.5,pos[2]-0.8,-90.0,0.0,0.0);
if(time == 0)
{
SendClientMessage(playerid,-1,"Бомба установлена, активировать: Y");
SetPVarFloat(playerid,"x_bomb",pos[0]);
SetPVarFloat(playerid,"y_bomb",pos[1]);
SetPVarFloat(playerid,"z_bomb",pos[2]);
SetPVarInt(playerid,"ActiveBomb",1);
return 1;
}
SetTimerEx("TimerExplosion",time*1000,false,"ifff",playerid,pos[0],pos[1],pos[2]);
SetPVarInt(playerid,"ActiveBomb",2);
return 1;
}
forward TimerExplosion(playerid,Float:X,Float:Y,Float:Z);
public TimerExplosion(playerid,Float:X,Float:Y,Float:Z)
{
GameTextForPlayer(playerid,"~r~~h~Explosion",1000,1);
CreateExplosion(X,Y,Z,6,1);
CreateExplosion(X,Y,Z,7,1);
DestroyObject(ObjectBomb[playerid]);
ObjectBomb[playerid] = INVALID_OBJECT_ID;
DeletePVar(playerid,"ActiveBomb");
DeletePVar(playerid,"bomba");
return 1;
}

Для тех, кому это кажется всё очень сложным, можете создать чистый .pwn файл и вставить туда готовый скрипт.

#include <a_samp>
#include <sscanf2>

#define PRESSED(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))

main(){ }

new ObjectBomb[MAX_PLAYERS] = {INVALID_OBJECT_ID, ...};

public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[32],params[128];
sscanf(cmdtext,"s[32]s[128]",cmd,params);
if(strcmp("/bomba",cmdtext,true, 10) == 0)
{
SendClientMessage(playerid,-1,"Установить взрывчатку - /usbomba");
SendClientMessage(playerid,-1,"Установить взрывчатку на таймер - /usbombatime");
SetPVarInt(playerid,"bomba",1);
return 1;
}
if(strcmp("/usbomba",cmdtext,true, 10) == 0)
{
if(!GetPVarInt(playerid,"bomba")) return SendClientMessage(playerid,-1,"У вас нет бомбы!");
if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,-1,"Выйдите из машины!");
UsBomba(playerid);
return 1;
}
if(strcmp("/usbombatime",cmdtext,true, 10) == 0)
{
if(!GetPVarInt(playerid,"bomba")) return SendClientMessage(playerid,-1,"У вас нет бомбы!");
new time_explosion;
if(sscanf(params,"i",time_explosion)) return SendClientMessage(playerid,-1,"/usbombatime [время (не меньше 10 сек и не больше 60 сек)]");
if(time_explosion < 10 || time_explosion > 60) return SendClientMessage(playerid,-1,"Время должно быть от 10 сек до 60 сек");
UsBomba(playerid,time_explosion);
return 1;
}
return 0;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(PRESSED(KEY_YES) && GetPVarInt(playerid,"ActiveBomb") == 1)
{
new Float:explosion_pos[3];
explosion_pos[0] = GetPVarFloat(playerid,"x_bomb");
explosion_pos[1] = GetPVarFloat(playerid,"y_bomb");
explosion_pos[2] = GetPVarFloat(playerid,"z_bomb");
CreateExplosion(explosion_pos[0],explosion_pos[1],explosion_pos[2],6,1);
CreateExplosion(explosion_pos[0],explosion_pos[1],explosion_pos[2],7,1);
DestroyObject(ObjectBomb[playerid]);
ObjectBomb[playerid] = INVALID_OBJECT_ID;
DeletePVar(playerid,"bomba");
DeletePVar(playerid,"x_bomb");
DeletePVar(playerid,"y_bomb");
DeletePVar(playerid,"z_bomb");
DeletePVar(playerid,"ActiveBomb");
return 1;
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
if(GetPVarInt(playerid,"ActiveBomb") == 1 || GetPVarInt(playerid,"ActiveBomb") == 2)
{
DestroyObject(ObjectBomb[playerid]);
ObjectBomb[playerid] = INVALID_OBJECT_ID;
}
return 1;
}
UsBomba(playerid,time = 0)
{
new Float:pos[3];
GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
ApplyAnimation(playerid,"BOMBER","BOM_Plant",4.0,0,0,0,0,0);
ObjectBomb[playerid] = CreateObject(1654,pos[0],pos[1]-0.5,pos[2]-0.8,-90.0,0.0,0.0);
if(time == 0)
{
SendClientMessage(playerid,-1,"Бомба установлена, активировать: Y");
SetPVarFloat(playerid,"x_bomb",pos[0]);
SetPVarFloat(playerid,"y_bomb",pos[1]);
SetPVarFloat(playerid,"z_bomb",pos[2]);
SetPVarInt(playerid,"ActiveBomb",1);
return 1;
}
SetTimerEx("TimerExplosion",time*1000,false,"ifff",playerid,pos[0],pos[1],pos[2]);
SetPVarInt(playerid,"ActiveBomb",2);
return 1;
}
forward TimerExplosion(playerid,Float:X,Float:Y,Float:Z);
public TimerExplosion(playerid,Float:X,Float:Y,Float:Z)
{
GameTextForPlayer(playerid,"~r~~h~Explosion",1000,1);
CreateExplosion(X,Y,Z,6,1);
CreateExplosion(X,Y,Z,7,1);
DestroyObject(ObjectBomb[playerid]);
ObjectBomb[playerid] = INVALID_OBJECT_ID;
DeletePVar(playerid,"ActiveBomb");
DeletePVar(playerid,"bomba");
return 1;
}

[green]Команды:

/bomba - получить бомбу

/usbomba - установить бомбу (активировать по клавише Y)

/usbombatime - установить бомбу на таймер (взорвется через указанное кол-во секунд)

[/green]

Автор: Amfy

 
Последнее редактирование:

LHTTD

Темная сторона Форума
Пользователь
08.10.2014
325
43
0
Незнай для РП|РПГ мода ненужно,но в симпл засунуть можн :)