Давайте я тоже свой вариант закину, раз уж лежит у меня :)
Код:
/**********************************************************************
- = Antipersonnel mines v1.32 = -
Based on Proximity Mines by xeroblood
***********************************************************************
Client commands:
+amxx_mine used to plant a mine
Example: bind p +amxx_mine
-amxx_mine to stop placing
buymine bind or type in console, used to buy a mine
***********************************************************************/
#include <amxmodx>
#include <fakemeta>
#include <xs>
#include <colorchat>
#define MAX_MINES 5 // maximum mines per player
#define TASK_PLANT 15100
#define TASK_MOVE 15200
#define TASK_NOTIFY 15300
#define TASK_TIGGER 15500
#define TASK_ACTIVATE 15600
#define TASK_SOUND 15700
#define TASK_DESACT 15800
#define OFFSET_CSMONEY 115
#define fm_find_ent_by_class(%1,%2) engfunc(EngFunc_FindEntityByString, %1, "classname", %2)
new g_nMineEnts[33][MAX_MINES]
new g_nMineAmmo[33][2]
new g_nProxTime[33][MAX_MINES]
new g_nCurWeapon[33][2]
new const g_szMdlBomb[] = "models/antipersonnel_mine.mdl"
new const g_szSndHold[] = "weapons/c4_disarmed.wav"
new const g_szSndPlant[] = "weapons/c4_plant.wav"
new const SearchSound[] = "items/kevlar.wav"
new const SearchSnd[] = "items/tr_kevlar.wav"
new const Pickup[] = "items/gunpickup1.wav"
new bool:g_bBuyZone[33]
new sprBoom, sprSmoke, c_mines, c_plant, c_delay, c_deact, c_buyzone, c_cost, c_radius, c_expradius, c_damage, c_team
new g_msgBarTime, g_msgScreenShake, g_msgMoney, g_msgDamage, g_msgScoreInfo
public plugin_init()
{
register_plugin("Antipersonnel Mines", "1.32", "se7h")
register_event("HLTV", "New_Round", "a", "1=0", "2=0")
register_event("DeathMsg", "Event_PlayerDied", "a", "2!0")
register_event("CurWeapon", "Event_ShotFired", "b")
register_event("StatusIcon", "Event_BuyZone", "be", "2=buyzone")
register_clcmd("+amxx_mine", "ClCmd_MineHold")
register_clcmd("-amxx_mine", "ClCmd_MineRelease")
register_clcmd("buymine", "ClCmd_BuyMine")
c_mines = register_cvar("amx_mines", "1") // 1/0 enable/disable plugin
c_plant = register_cvar("mine_plant_time", "2") // time required to plant a mine
c_delay = register_cvar("mine_delay_time", "1") // time before proximity activates itself
c_deact = register_cvar("mine_deactivate_time", "7") // time of mine clearing of a mine
c_buyzone = register_cvar("mine_buyzone", "1") // obey buyzone rules? (1 or 0)
c_cost = register_cvar("mine_cost", "500") // the cost of each mine bought
c_radius = register_cvar("mine_radius", "65") // the mine radius
c_expradius = register_cvar("mine_expradius", "150") // the mine explosion radius
c_damage = register_cvar("mine_damage", "400") // the max amount of damge done by a mine
c_team = register_cvar("mine_team", "0") // 0 - buy all, 1 - only terrors, 2 - only CT
register_forward(FM_PlayerPreThink,"fw_prethink")
g_msgBarTime = get_user_msgid("BarTime")
g_msgScreenShake = get_user_msgid("ScreenShake")
g_msgMoney = get_user_msgid("Money")
g_msgDamage = get_user_msgid("Damage")
g_msgScoreInfo = get_user_msgid("ScoreInfo")
}
public plugin_precache()
{
precache_model(g_szMdlBomb)
precache_sound(SearchSnd)
sprBoom = precache_model("sprites/hexplo.spr")
sprSmoke = precache_model("sprites/steam.spr")
}
public client_connect(id)
{
if(get_pcvar_num(c_mines))
{
g_nMineAmmo[id][0] = 0
RemovePlantedMines(id)
}
}
public client_disconnect(id)
{
if(get_pcvar_num(c_mines))
{
RemovePlantedMines(id)
tasksend(id)
}
}
// CLIENT COMMANDS SECTION //
public ClCmd_MineHold(id)
{
if(!get_pcvar_num(c_mines) || !is_user_alive(id) || CheckMovement(id))
return PLUGIN_HANDLED
if(!g_nMineAmmo[id][0])
{
client_print_color(id, NORMAL, "^4[MINE] ^1You have no mines to plant")
return PLUGIN_HANDLED
}
if(g_nMineAmmo[id][1])
{
static Float:fEntOrigin[3]
static nEntOrigin[3], nPlayerOrigin[3], i
get_user_origin(id, nPlayerOrigin)
for(i=0; i<MAX_MINES; i++)
{
if(!g_nMineEnts[id][i])
continue
pev(g_nMineEnts[id][i], pev_origin, fEntOrigin)
FVecIVec(fEntOrigin, nEntOrigin)
if(get_distance(nPlayerOrigin, nEntOrigin) <= get_pcvar_num(c_radius))
{
client_print_color(id, NORMAL, "^4[MINE] ^1You cannot plant your mines so close together")
return PLUGIN_HANDLED
}
}
}
static nMinePlant_Time
nMinePlant_Time = get_pcvar_num(c_plant)
hideweapon(id)
client_cmd(id, "+duck")
if(!task_exists(id))
set_task(0.5, "sound", id)
fn_bartime(id, nMinePlant_Time)
if(!task_exists(TASK_MOVE+id))
set_task(0.1, "CheckMove", TASK_MOVE+id)
if(!task_exists(TASK_PLANT+id))
set_task(float(nMinePlant_Time), "PlantMine", TASK_PLANT+id)
return PLUGIN_HANDLED
}
public sound(id)
emit_sound(id, CHAN_WEAPON, g_szSndHold, 1.0, ATTN_STATIC, 0, PITCH_NORM)
public fw_prethink(id)
{
if(!get_pcvar_num(c_mines) || !is_user_alive(id))
return FMRES_IGNORED
if((task_exists(id+TASK_MOVE) || task_exists(id+TASK_DESACT)) && (pev(id,pev_button) & (IN_ATTACK | IN_ATTACK2)) && !(pev(id,pev_oldbuttons) & (IN_ATTACK | IN_ATTACK2)))
{
if(task_exists((TASK_PLANT+id)))
remove_task((TASK_PLANT+id))
if(task_exists(TASK_DESACT+id))
remove_task((TASK_DESACT+id))
if(task_exists(TASK_MOVE+id))
{
client_cmd(id, "-duck")
remove_task((TASK_MOVE+id))
}
engclient_cmd(id, "lastinv")
engclient_cmd(id, "lastinv")
fn_bartime(id, 0)
}
static nPoint[3], Float:fmPoint[3], imPoint[3], pCmdArgs[3], nEntity
get_user_origin(id, nPoint, 0)
nEntity = FindMine(nPoint, get_pcvar_num(c_radius))
if(nEntity)
{
pev(nEntity, pev_origin, fmPoint)
FVecIVec(fmPoint, imPoint)
GetMine_Owner_Index(nEntity, pCmdArgs)
static time
time = get_pcvar_num(c_deact)
if(!g_nProxTime[pCmdArgs[0]][pCmdArgs[1]])
{
if(!(pev(id, pev_flags) & FL_DUCKING) || !time || get_distance(imPoint, nPoint) > 25)
{
if(task_exists(TASK_DESACT+id))
{
remove_task(TASK_DESACT+id)
engclient_cmd(id, "lastinv")
engclient_cmd(id, "lastinv")
fn_bartime(id, 0)
}
if(get_user_team(pCmdArgs[0]) == get_user_team(id))
return FMRES_IGNORED
ExplodeMine(pCmdArgs[0], pCmdArgs[1])
}else if((pev(id, pev_flags) & FL_DUCKING) && get_distance(imPoint, nPoint) <= 25 && time){
if(!task_exists(TASK_DESACT+id))
{
hideweapon(id)
emit_sound(id, CHAN_ITEM, SearchSnd, 1.0, ATTN_STATIC, 0, PITCH_NORM)
set_task(1.5, "emitsound", TASK_SOUND+id, _, _, "a", floatround(2.0*time/3.0-1.0))
pCmdArgs[2] = id
set_task(get_pcvar_float(c_deact), "desmine", TASK_DESACT+id, pCmdArgs, 3)
fn_bartime(id, time)
}
}
}
}
return FMRES_IGNORED
}
public desmine(pCmdArgs[])
{
engfunc(EngFunc_RemoveEntity, g_nMineEnts[pCmdArgs[0]][pCmdArgs[1]])
g_nMineEnts[pCmdArgs[0]][pCmdArgs[1]] = 0
g_nMineAmmo[pCmdArgs[0]][1]--
g_nMineAmmo[pCmdArgs[2]][0]++
emit_sound(pCmdArgs[2], CHAN_AUTO, Pickup, 1.0, ATTN_STATIC, 0, PITCH_NORM)
engclient_cmd(pCmdArgs[2], "lastinv")
engclient_cmd(pCmdArgs[2], "lastinv")
client_print_color(pCmdArgs[2], NORMAL, "^4[MINE] ^1The mine is deactivated and lifted")
client_print_color(pCmdArgs[2], NORMAL, "^4[MINE] ^1You now have ^4%d ^1mine%s", g_nMineAmmo[pCmdArgs[2]][0], (g_nMineAmmo[pCmdArgs[2]][0]==1)?"":"s")
}
public emitsound(tasksnd)
{
static id
id = tasksnd-TASK_SOUND
if(is_user_alive(id) && task_exists(TASK_DESACT+id))
emit_sound(id, CHAN_AUTO, SearchSound, 1.0, ATTN_STATIC, 0, PITCH_NORM)
}
public ClCmd_MineRelease(id)
{
if(!get_pcvar_num(c_mines))
return PLUGIN_HANDLED
tasksend(id)
client_cmd(id, "-duck")
engclient_cmd(id, "lastinv")
engclient_cmd(id, "lastinv")
fn_bartime(id, 0)
return PLUGIN_HANDLED
}
public ClCmd_BuyMine(id)
{
if(!get_pcvar_num(c_mines) || !is_user_alive(id))
return PLUGIN_HANDLED
if(get_pcvar_num(c_team))
{
if(get_user_team(id)!=get_pcvar_num(c_team))
{
client_print( id, print_center, "Your team cannot buy antipersonnel mines")
return PLUGIN_HANDLED
}
}
if(!g_bBuyZone[id])
{
client_print(id, print_center, "You must be in your buyzone to buy")
return PLUGIN_HANDLED
}
if((g_nMineAmmo[id][0]+g_nMineAmmo[id][1]) >= MAX_MINES)
{
client_print_color(id, NORMAL, "^4[MINE] ^1You already have enough mines (max: %d)", MAX_MINES)
return PLUGIN_HANDLED
}
if(fm_get_user_money(id) < get_pcvar_num(c_cost))
{
client_print_color(id, NORMAL, "^4[MINE] ^1You cannot afford any mines ($%d each)", get_pcvar_num(c_cost))
return PLUGIN_HANDLED
}
fm_set_user_money(id, fm_get_user_money(id)-get_pcvar_num(c_cost))
g_nMineAmmo[id][0]++
client_print_color(id, NORMAL, "^4[MINE] ^1You now have ^4%d ^1mine%s", g_nMineAmmo[id][0], (g_nMineAmmo[id][0]==1)?"":"s")
return PLUGIN_HANDLED
}
// PLUGIN EVENTS SECTION //
public Event_BuyZone(id)
{
if(get_pcvar_num(c_mines))
{
if(read_data(1))
g_bBuyZone[id] = true
else{
if(get_pcvar_num(c_buyzone))
g_bBuyZone[id] = false
else
g_bBuyZone[id] = true
}
}
}
public New_Round()
{
if(get_pcvar_num(c_mines))
{
static ent, nPlayers[32], nNum, i
client_cmd(0, "-duck; lastinv; lastinv")
while((ent = fm_find_ent_by_class(ent, "amxx_mine")) != 0)
engfunc(EngFunc_RemoveEntity, ent)
get_players(nPlayers, nNum, "h")
for(i=0; i<nNum; i++)
{
if(task_exists((TASK_PLANT+nPlayers[i])))
ClCmd_MineRelease(nPlayers[i])
RemovePlantedMines(nPlayers[i])
tasksend(nPlayers[i])
}
}
}
public Event_PlayerDied()
{
if(get_pcvar_num(c_mines))
{
static id
id = read_data(2)
client_cmd(id, "-duck; lastinv; lastinv")
if(task_exists((TASK_PLANT+id)))
ClCmd_MineRelease(id)
tasksend(id)
g_nMineAmmo[id][0] = 0
}
}
public Event_ShotFired(id)
{
if(!get_pcvar_num(c_mines))
return PLUGIN_CONTINUE
static wID, wAmmo
wID = read_data(2)
wAmmo = read_data(3)
if(g_nCurWeapon[id][0] != wID)
{
g_nCurWeapon[id][0] = wID
g_nCurWeapon[id][1] = wAmmo
return PLUGIN_CONTINUE
}
if(g_nCurWeapon[id][1] < wAmmo)
{
g_nCurWeapon[id][1] = wAmmo
return PLUGIN_CONTINUE
}
if(g_nCurWeapon[id][1] == wAmmo)
return PLUGIN_CONTINUE
g_nCurWeapon[id][1] = wAmmo
g_nCurWeapon[id][0] = wID
static nPoint[3], nEntity
get_user_origin(id, nPoint, 3)
nEntity = FindMine(nPoint, 9)
if(nEntity)
{
static pCmdArgs[2]
GetMine_Owner_Index(nEntity, pCmdArgs)
ExplodeMine(pCmdArgs[0], pCmdArgs[1])
}
return PLUGIN_CONTINUE
}
// PLANT MINE FUNCTION //
public PlantMine(plantid)
{
static Float:PlayerOrigin[3], id
id = plantid - TASK_PLANT
if(task_exists((TASK_MOVE+id)))
remove_task((TASK_MOVE+id))
client_cmd(id, "-duck")
engclient_cmd(id, "lastinv")
engclient_cmd(id, "lastinv")
g_nMineEnts[id][g_nMineAmmo[id][1]] = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
if(!g_nMineEnts[id][g_nMineAmmo[id][1]])
{
client_print_color(id, NORMAL, "You planted a dud")
return PLUGIN_HANDLED
}
set_pev(g_nMineEnts[id][g_nMineAmmo[id][1]], pev_classname, "amxx_mine")
engfunc(EngFunc_SetModel, g_nMineEnts[id][g_nMineAmmo[id][1]], g_szMdlBomb)
engfunc(EngFunc_SetSize, g_nMineEnts[id][g_nMineAmmo[id][1]], float:{-2.15, -4.3, -2.15}, Float:{2.15, 4.3, 2.15})
pev(id, pev_origin, PlayerOrigin)
engfunc(EngFunc_SetOrigin, g_nMineEnts[id][g_nMineAmmo[id][1]], PlayerOrigin)
set_pev(g_nMineEnts[id][g_nMineAmmo[id][1]], pev_solid, SOLID_BBOX)
set_pev(g_nMineEnts[id][g_nMineAmmo[id][1]], pev_movetype, MOVETYPE_TOSS)
set_pev(g_nMineEnts[id][g_nMineAmmo[id][1]], pev_owner, id)
emit_sound(g_nMineEnts[id][g_nMineAmmo[id][1]], CHAN_WEAPON, g_szSndPlant, 1.0, ATTN_STATIC, 0, PITCH_NORM)
static pCmdArgs[3], nActivationTime
nActivationTime = get_pcvar_num(c_delay)
g_nProxTime[id][g_nMineAmmo[id][1]] = (nActivationTime>0) ? nActivationTime : 1
pCmdArgs[0] = id
pCmdArgs[1] = g_nMineAmmo[id][1]
pCmdArgs[2] = g_nMineEnts[id][g_nMineAmmo[id][1]]
if(!task_exists(TASK_ACTIVATE+id))
set_task(float(g_nProxTime[id][g_nMineAmmo[id][1]]), "ActivateMine", TASK_ACTIVATE+id, pCmdArgs, 3)
g_nMineAmmo[id][0]--
g_nMineAmmo[id][1]++
client_print_color(id, NORMAL, "^4[MINE] ^1Mine planted, ^4%d ^1seconds until activation", get_pcvar_num(c_delay))
client_print_color(id, NORMAL, "You now have ^4%d ^1mine%s left", g_nMineAmmo[id][0], (g_nMineAmmo[id][0]==1)?"":"s")
return PLUGIN_HANDLED
}
// EXPLODE MINE FUNCTION //
stock ExplodeMine(p_nOwnerID, p_nMineIDX)
{
if(!pev_valid(g_nMineEnts[p_nOwnerID][p_nMineIDX]))
return
static Float:fMineOrigin[3], nMineOrigin[3]
pev(g_nMineEnts[p_nOwnerID][p_nMineIDX], pev_origin, fMineOrigin)
FVecIVec(fMineOrigin, nMineOrigin)
engfunc(EngFunc_RemoveEntity, g_nMineEnts[p_nOwnerID][p_nMineIDX])
g_nMineEnts[p_nOwnerID][p_nMineIDX] = 0
g_nMineAmmo[p_nOwnerID][1]--
static nPlayers[32], nPlayerOrigin[3], nNum, i
static nDist, nMult, Float:nDamage
static nMineDmg, nDamRad
nMineDmg = get_pcvar_num(c_damage)
nDamRad = get_pcvar_num(c_expradius)
get_players(nPlayers, nNum, "a")
for(i=0; i<nNum; i++)
{
get_user_origin(nPlayers[i], nPlayerOrigin)
nDist = get_distance(nMineOrigin, nPlayerOrigin)
if(nDist <= (nDamRad+150))
{
message_begin(MSG_ONE, g_msgScreenShake, {0,0,0}, nPlayers[i])
write_short(1<<14)
write_short(1<<13)
write_short(1<<14)
message_end()
}
if(nDist <= nDamRad)
{
static Float:health, Float:ohealth
nMult = ((nMineDmg*nMineDmg)/nDamRad)
nDamage = 1.0*sqroot(((nDamRad-nDist)*nMult))
pev(p_nOwnerID, pev_health, ohealth)
pev(nPlayers[i], pev_health, health)
if(nPlayers[i] == p_nOwnerID)
{
if(ohealth <= nDamage)
{
user_silentkill(p_nOwnerID)
make_deathmsg(p_nOwnerID, p_nOwnerID, 0, "grenade")
refresh_scoreboard(p_nOwnerID)
}else{
set_pev(p_nOwnerID, pev_health, ohealth-nDamage)
dmgevent(p_nOwnerID, floatround(nDamage), nMineOrigin)
}
}else{
if(health <= nDamage)
{
if(get_user_team(nPlayers[i]) == get_user_team(p_nOwnerID))
set_pev(p_nOwnerID, pev_frags, float(get_user_frags(p_nOwnerID))-1.0)
else
set_pev(p_nOwnerID, pev_frags, float(get_user_frags(p_nOwnerID))+1.0)
user_silentkill(nPlayers[i])
make_deathmsg(p_nOwnerID, nPlayers[i], 0, "grenade")
refresh_scoreboard(nPlayers[i])
refresh_scoreboard(p_nOwnerID)
}else{
set_pev(nPlayers[i], pev_health, health-nDamage)
dmgevent(nPlayers[i], floatround(nDamage), nMineOrigin)
}
}
}
}
message_begin(MSG_ALL, SVC_TEMPENTITY)
write_byte(TE_EXPLOSION)
write_coord(nMineOrigin[0])
write_coord(nMineOrigin[1])
write_coord(nMineOrigin[2]+7)
write_short(sprBoom)
write_byte(9)
write_byte(255)
write_byte(0)
message_end()
message_begin(MSG_ALL, SVC_TEMPENTITY, nMineOrigin)
write_byte(TE_SMOKE)
write_coord(nMineOrigin[0])
write_coord(nMineOrigin[1])
write_coord(nMineOrigin[2])
write_short(sprSmoke)
write_byte(17)
write_byte(10)
message_end()
message_begin(MSG_ALL, SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
write_coord(nMineOrigin[0])
write_coord(nMineOrigin[1])
write_coord(nMineOrigin[2])
write_byte(28)
message_end()
return
}
// PLUGIN SPECIFIC FUNCTIONS //
public ActivateMine(p_aCmdArgs[])
{
if(!pev_valid(p_aCmdArgs[2]))
return PLUGIN_HANDLED
static Float:mOrigin[3]
g_nProxTime[p_aCmdArgs[0]][p_aCmdArgs[1]] = 0
pev(p_aCmdArgs[2], pev_origin, mOrigin)
mOrigin[2] -= 1.5
engfunc(EngFunc_SetOrigin, p_aCmdArgs[2], mOrigin)
client_print_color(p_aCmdArgs[0], NORMAL, "^4[MINE] ^1Mine ^4%d ^1is now active", (p_aCmdArgs[1]+1))
return PLUGIN_HANDLED
}
stock GetMine_Owner_Index(nMineEntity, nOutput[])
{
static nPlayers[32], nNum, i, j
get_players(nPlayers, nNum, "h")
nOutput[0] = nOutput[1] = 0
for(i=0; i<nNum; i++)
{
for(j=0; j<MAX_MINES; j++)
{
if(g_nMineEnts[nPlayers[i]][j])
{
if(nMineEntity == g_nMineEnts[nPlayers[i]][j])
{
nOutput[0] = nPlayers[i]
nOutput[1] = j
return
}
}
}
}
return
}
stock hideweapon(id)
{
set_pev(id, pev_viewmodel, "")
set_pev(id, pev_weaponmodel, "")
}
public CheckMove(moveid)
{
static id
id = moveid - TASK_MOVE
if(CheckMovement(id))
ClCmd_MineRelease(id)
else
set_task(0.1, "CheckMove", TASK_MOVE+id)
return PLUGIN_HANDLED
}
stock FindMine(p_nUserOrigin[3], p_nRadius)
{
static nPlayers[32], nNum, i, j
static nEOrigin[3], Float:fEOrigin[3]
get_players(nPlayers, nNum, "h")
for(i=0; i<nNum; i++)
{
for(j=0; j<MAX_MINES; j++)
{
if(g_nMineEnts[nPlayers[i]][j])
{
pev(g_nMineEnts[nPlayers[i]][j], pev_origin, fEOrigin)
FVecIVec(fEOrigin, nEOrigin)
if(get_distance(p_nUserOrigin, nEOrigin) <= p_nRadius)
return g_nMineEnts[nPlayers[i]][j]
}
}
}
return 0
}
stock bool:CheckMovement(id)
{
if(pev(id, pev_button) & (IN_JUMP|IN_FORWARD|IN_BACK|IN_MOVELEFT|IN_MOVERIGHT))
return true
return false
}
stock RemovePlantedMines(id)
{
static i
for(i=0; i<MAX_MINES; i++)
g_nMineEnts[id][i] = 0
g_nMineAmmo[id][1] = 0
}
stock refresh_scoreboard(id)
{
message_begin(MSG_ALL, g_msgScoreInfo)
write_byte(id)
write_short(get_user_frags(id))
write_short(get_user_deaths(id))
write_short(0)
write_short(get_user_team(id))
message_end()
}
stock fm_get_user_money(index)
{
return get_pdata_int(index, OFFSET_CSMONEY);
}
stock fm_set_user_money(index, money, flash = 1)
{
set_pdata_int(index, OFFSET_CSMONEY, money);
message_begin(MSG_ONE, g_msgMoney, {0,0,0}, index);
write_long(money);
write_byte(flash ? 1 : 0);
message_end();
}
stock bool:fm_is_visible(index, const Float:point[3], ignoremonsters = DONT_IGNORE_MONSTERS)
{
static Float:start[3], Float:view_ofs[3]
pev(index, pev_origin, start)
pev(index, pev_view_ofs, view_ofs)
xs_vec_add(start, view_ofs, start)
engfunc(EngFunc_TraceLine, start, point, ignoremonsters, index, 0)
static Float:fraction
get_tr2(0, TR_flFraction, fraction)
if (fraction == 1.0)
return true
return false
}
stock dmgevent(id, dmg, origin[])
{
emessage_begin(MSG_ONE, g_msgDamage, _, id)
ewrite_byte(0) // dmg_save
ewrite_byte(dmg) // dmg_take
ewrite_long(DMG_BLAST)
ewrite_coord(origin[0])
ewrite_coord(origin[1])
ewrite_coord(origin[2])
emessage_end()
}
stock fn_bartime(id, time)
{
message_begin(MSG_ONE, g_msgBarTime, {0,0,0}, id)
write_byte(time)
write_byte(0)
message_end()
}
stock tasksend(id)
{
if(!task_exists(id))
remove_task(id)
if(task_exists(TASK_DESACT+id))
remove_task(TASK_DESACT+id)
if(task_exists(TASK_PLANT+id))
remove_task(TASK_PLANT+id)
if(task_exists(TASK_MOVE+id))
remove_task(TASK_MOVE+id)
if(task_exists(TASK_SOUND+id))
remove_task(TASK_SOUND+id)
if(task_exists(TASK_DESACT+id))
remove_task(TASK_DESACT+id)
}
Web Compiler или
colorchat.zip ( 2,23 килобайт )
Кол-во скачиваний: 5