Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Помогите добавить colorchat

Статус пользователя r1nk0
сообщение 18.1.2015, 17:22
Сообщение #1


Стаж: 12 лет

Сообщений: 1417
Благодарностей: 705
Полезность: 349

Привет,помогите пожалуйста добавить в плагин color chat

сам плагин

код

Скрытый текст
Код:
/**********************************************************************

- = 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>

#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(id, print_chat, "You 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(id, print_chat, "You 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(pCmdArgs[2], print_chat, "The mine is deactivated and lifted")
client_print(pCmdArgs[2], print_chat, "You now have %d mine%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(id, print_chat, "You already have enough mines (max: %d)", MAX_MINES)
return PLUGIN_HANDLED
}
if(fm_get_user_money(id) < get_pcvar_num(c_cost))
{
client_print(id, print_chat, "You 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(id, print_chat, "You now have %d mine%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(id, print_chat, "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(id, print_chat, "Mine planted, %d seconds until activation", get_pcvar_num(c_delay))
client_print(id, print_chat, "You now have %d mine%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(p_aCmdArgs[0], print_chat, "Mine %d is 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)
}






Создание и редактирование карт ($) - vk.com/id476857873
Настройка и техническое обслуживание ваших игровых серверов - vk.com/id476857873
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 18.1.2015, 17:34
Сообщение #2


Иконка группы

Стаж: 13 лет

Сообщений: 2294
Благодарностей: 1187
Полезность: 890

Код:
/**********************************************************************

- = 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])
{
ColorChat(id, GREEN, "^x04You 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))
{
ColorChat(id, GREEN, "^x04You 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")

ColorChat(pCmdArgs[2], GREEN, "^x04The mine is deactivated and lifted")
ColorChat(pCmdArgs[2], GREEN, "^x01You now have^x04 %d^x01 mine^x04 %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))
{
ColorChat( id, GREEN, "^x04Your team cannot buy antipersonnel mines")
return PLUGIN_HANDLED
}
}

if(!g_bBuyZone[id])
{
ColorChat(id, GREEN, "^x04You must be in your buyzone to buy")
return PLUGIN_HANDLED
}

if((g_nMineAmmo[id][0]+g_nMineAmmo[id][1]) >= MAX_MINES)
{
ColorChat(id, GREEN, "^x04You already have enough mines (max: %d)", MAX_MINES)
return PLUGIN_HANDLED
}
if(fm_get_user_money(id) < get_pcvar_num(c_cost))
{
ColorChat(id, GREEN, "^x04You 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]++
ColorChat(id, GREEN, "^x04You now have %d mine%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]])
{
ColorChat(id, GREEN, "^x04You 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]++

ColorChat(id, GREEN, "Mine planted, %d seconds until activation", get_pcvar_num(c_delay))
ColorChat(id, GREEN, "You now have %d mine%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)
ColorChat(p_aCmdArgs[0], GREEN, "Mine %d is 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)
}


инклуд надеюсь есть
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя bapstop
сообщение 18.1.2015, 17:36
Сообщение #3


Стаж: 12 лет

Сообщений: 206
Благодарностей: 100
Полезность: 686

В сообщениях цвета добавишь сам на свой вкус.
^1 - обычный
^3 - цвет команды
^4 - зеленый
Код:
#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])
{
ColorChat(id, print_chat, "You 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))
{
ColorChat(id, print_chat, "You 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")

ColorChat(pCmdArgs[2], print_chat, "The mine is deactivated and lifted")
ColorChat(pCmdArgs[2], print_chat, "You now have %d mine%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))
{
ColorChat( id, print_center, "Your team cannot buy antipersonnel mines")
return PLUGIN_HANDLED
}
}

if(!g_bBuyZone[id])
{
ColorChat(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)
{
ColorChat(id, print_chat, "You already have enough mines (max: %d)", MAX_MINES)
return PLUGIN_HANDLED
}
if(fm_get_user_money(id) < get_pcvar_num(c_cost))
{
ColorChat(id, print_chat, "You 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]++
ColorChat(id, print_chat, "You now have %d mine%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]])
{
ColorChat(id, print_chat, "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]++

ColorChat(id, print_chat, "Mine planted, %d seconds until activation", get_pcvar_num(c_delay))
ColorChat(id, print_chat, "You now have %d mine%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)
ColorChat(p_aCmdArgs[0], print_chat, "Mine %d is 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)
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 18.1.2015, 17:38
Сообщение #4


Иконка группы

Стаж: 13 лет

Сообщений: 2294
Благодарностей: 1187
Полезность: 890

твой код будет ошибку давать
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 18.1.2015, 17:41
Сообщение #5


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Давайте я тоже свой вариант закину, раз уж лежит у меня :)
Код:
/**********************************************************************

- = 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
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя r1nk0
сообщение 18.1.2015, 18:49
Сообщение #6


Стаж: 12 лет

Сообщений: 1417
Благодарностей: 705
Полезность: 349

Bloo твой даже больше подойдет


Создание и редактирование карт ($) - vk.com/id476857873
Настройка и техническое обслуживание ваших игровых серверов - vk.com/id476857873
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя bapstop
сообщение 18.1.2015, 18:49
Сообщение #7


Стаж: 12 лет

Сообщений: 206
Благодарностей: 100
Полезность: 686

GOOD FELLOW, не будет, если инклюд есть
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 18.1.2015, 18:53
Сообщение #8


Иконка группы

Стаж: 13 лет

Сообщений: 2294
Благодарностей: 1187
Полезность: 890

bapstop, ты глянь в начале, как использовал функцию, а потом говори
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 18.1.2015, 18:54
Сообщение #9


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

bapstop, он видимо про это:
Код:
ColorChat(id, print_chat, "You have no mines to plant")
>>>
ColorChat(id, NORMAL/DontChange(не знаю просто какой вы инклуд используете), "You have no mines to plant")

Т.е. вторым аргументом должен быть цвет всей строки.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя r1nk0
сообщение 18.1.2015, 20:39
Сообщение #10


Стаж: 12 лет

Сообщений: 1417
Благодарностей: 705
Полезность: 349

плохо что мины остаются после смерти игроков,это не пофиксить никак? хочу поставить на дм сервер а там постоянный респаун и тд и че будет если все наставят бомб,сервер упадет скорее всего.

Отредактировал: r1nk0, - 18.1.2015, 21:09


Создание и редактирование карт ($) - vk.com/id476857873
Настройка и техническое обслуживание ваших игровых серверов - vk.com/id476857873
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: