помогите сделать чтобы можно было наносить урон противником по минеКод:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <engine>
#include <xs>
#include <cstrike>
#define Mine_Model "models/Sv_Mine/mine.mdl"
#define Cube_Model "models/Sv_Mine/ice_cube.mdl"
#define Mine_Sprite_Explo "sprites/zerogxplode.spr"
#define Mine_Sprite_Explo2 "sprites/Sv_Mine/holybomb_exp.spr"
#define Mine_Sound_Explo "weapons/explode3.wav"
#define Mine_Sound_Place "weapons/mine_deploy.wav"
#define NAGRADA 200
new g_iMines_Count[33]
new g_iFrost[33]
new g_burning_duration[33], g_crack_duration[33], g_poison[33]
new g_iLimit[33]
new g_Entity_Mine, g_Entity_Effect
new g_iSPR_Explo, g_iSPR_Explo2
new g_flameSpr,g_smokeSpr
new Float:g_fOldSpeed[33]
new g_iCvar[7]
const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MEN
U_KEY_8|MENU_KEY_9|MENU_KEY_0
public plugin_init()
{
register_menu("Mines Menu", KEYSMENU, "menu_mines")
register_touch("Mine", "player", "touch_mine")
register_think("Ice_Cube", "think_icecube")
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
RegisterHam(Ham_Killed, "player", "ham_killed_post", 1)
register_clcmd("say /mines", "mine_spawn")
g_iCvar[0]=register_cvar("m_damage", "500")
g_iCvar[1]=register_cvar("m_cost_1", "500")
}
public plugin_cfg()
{
g_Entity_Mine = engfunc(EngFunc_AllocString, "func_breakable")
g_Entity_Effect = engfunc(EngFunc_AllocString, "info_target")
new file[128]; get_localinfo("amxx_configsdir",file,63)
format(file, 127, "%s/sv_cvars/mines.cfg", file)
if(file_exists(file)) server_cmd("exec %s", file), server_exec()
}
public plugin_precache()
{
precache_model(Mine_Model)
precache_sound(Mine_Sound_Explo)
precache_sound(Mine_Sound_Place)
g_iSPR_Explo=precache_model(Mine_Sprite_Explo)
g_iSPR_Explo2=precache_model(Mine_Sprite_Explo2)
g_smokeSpr=precache_model("sprites/black_smoke3.spr")
}
public clcmd_mines(id)
{
mines_menu_open(id)
}
mines_menu_open(id)
{
static menu[512], len
len = 0
len += formatex(menu[len], charsmax(menu) - len, "\r Наземные мины:^n")
len += formatex(menu[len], charsmax(menu) - len, "\w Всего установлено: \y%d/%d^n^n", g_iMines_Count[id], g_iLimit[id])
len += formatex(menu[len], charsmax(menu) - len, (g_iMines_Count[id]<g_iLimit[id]&&cs_get_user_money(id)>=get_pcvar_num(g_iCvar[1]))?"\r[\y1\r]\w Простая \r(%d$)^n":"\r[\y1\r]\d Простая \r(%d$)^n", get_pcvar_num(g_iCvar[1]))
len += formatex(menu[len], charsmax(menu) - len, "^n\r[\y0\r]\w Выход")
show_menu(id, KEYSMENU, menu, -1, "Mines Menu")
}
public menu_mines(id, key)
{
if(!is_user_alive(id))return
if(g_iMines_Count[id]>=g_iLimit[id]){
colored_print(id, "!tУстановлено максимум мин!")
return
}
if(key>4) return
if(cs_get_user_money(id)<get_pcvar_num(g_iCvar[1])){
colored_print(id, "!tНедостаточно денег !g(!yнужно %d$!g)", get_pcvar_num(g_iCvar[1]))
return
}
switch(key)
{
case 0:
{
mine_spawn(id, 0)
mines_menu_open(id)
}
}
cs_set_user_money(id, cs_get_user_money(id)-get_pcvar_num(g_iCvar[7+key]))
}
public mine_spawn(id, type)
{
if(g_iMines_Count[id]>=g_iLimit[id]){
colored_print(id, "!tУстановлено максимум мин!")
return
}
new iMoney = cs_get_user_money(id);
if(iMoney < get_pcvar_num(g_iCvar[1]))
{
colored_print(id, "!tНе хватает денег")
return
}
new Float:flOrigin[3]
pev(id, pev_origin, flOrigin)
if(pev(id, pev_flags) & FL_DUCKING) flOrigin[2]-=16.0
else flOrigin[2]-=32.0
new i_Ent = engfunc(EngFunc_CreateNamedEntity, g_Entity_Mine)
if(!i_Ent) return
set_pev(i_Ent, pev_classname, "Mine")
engfunc(EngFunc_SetModel, i_Ent, Mine_Model)
engfunc(EngFunc_SetOrigin, i_Ent, flOrigin)
set_pev(i_Ent, pev_solid, SOLID_TRIGGER)
set_pev(i_Ent, pev_movetype, MOVETYPE_TOSS)
engfunc( EngFunc_DropToFloor, i_Ent);
engfunc(EngFunc_SetSize, i_Ent, Float:{ -20.0, -20.0, 0.0 }, Float:{ 20.0, 20.0, 3.0 })
//set_rendering( i_Ent, kRenderFxGlowShell, 192, 192, 192, kRenderNormal, 3 )
switch( cs_get_user_team( id ) )
{
case CS_TEAM_T:
{
set_rendering( i_Ent, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 3 );
}
case CS_TEAM_CT:
{
set_rendering( i_Ent, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 3 );
}
}
set_pev(i_Ent, pev_takedamage, DAMAGE_NO)
set_pev(i_Ent, pev_iuser1, fm_cs_get_user_team(id))
set_pev(i_Ent, pev_iuser2, id)
set_pev(i_Ent, pev_iuser3, type)
emit_sound(i_Ent, CHAN_WEAPON, Mine_Sound_Place, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
cs_set_user_money(id, cs_get_user_money(id)-get_pcvar_num(g_iCvar[1]))
g_iMines_Count[id]++
}
public touch_mine(ent, id)
{
if(!is_user_alive(id))return
if(fm_cs_get_user_team(id)==pev(ent, pev_iuser1))return
g_iMines_Count[pev(ent, pev_iuser2)]--
switch(pev(ent, pev_iuser3))
{
case 0: CreateExplosion(ent, id)
}
engfunc(EngFunc_RemoveEntity, ent)
}
CreateExplosion(ent, victim)
{
new Float:vOrigin[3]
pev(ent,pev_origin,vOrigin)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vOrigin, 0)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord,vOrigin[0])
engfunc(EngFunc_WriteCoord,vOrigin[1])
engfunc(EngFunc_WriteCoord,vOrigin[2])
write_short(g_iSPR_Explo)
write_byte(30)
write_byte(15)
write_byte(0)
message_end()
ExecuteHamB(Ham_TakeDamage, victim, ent, pev(ent, pev_iuser2), get_pcvar_float(g_iCvar[0]), DMG_BULLET)
}
CreateExplosion_Frost(ent, victim)
{
new Float:eOrigin[3]
pev(ent,pev_origin,eOrigin)
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, eOrigin, 0)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord,eOrigin[0])
engfunc(EngFunc_WriteCoord,eOrigin[1])
engfunc(EngFunc_WriteCoord,eOrigin[2])
write_short(g_iSPR_Explo2)
write_byte(30)
write_byte(15)
write_byte(0)
message_end()
emit_sound(ent, CHAN_WEAPON, Mine_Sound_Explo, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
if(g_iFrost[victim])return
new i_Ent = engfunc(EngFunc_CreateNamedEntity, g_Entity_Effect)
if(!i_Ent) return
set_pev(i_Ent, pev_classname, "Ice_Cube")
engfunc(EngFunc_SetModel, i_Ent, Cube_Model)
new Float:vOrigin[3]
pev(victim,pev_origin,vOrigin)
if(pev(victim, pev_flags) & FL_DUCKING) vOrigin[2]-=16.0
else vOrigin[2]-=32.0
engfunc(EngFunc_SetOrigin, i_Ent, vOrigin)
set_pev(i_Ent, pev_solid, SOLID_TRIGGER)
set_pev(i_Ent, pev_movetype, MOVETYPE_TOSS)
engfunc(EngFunc_SetSize, i_Ent, Float:{ -0.0, -0.0, 0.0 }, Float:{ 0.0, 0.0, 0.0 })
set_rendering(i_Ent, kRenderFxNone, 255, 255, 255, kRenderTransAdd, 255)
set_pev(i_Ent, pev_takedamage, DAMAGE_NO)
set_pev(i_Ent, pev_iuser1, victim)
set_pev(i_Ent, pev_nextthink, get_gametime()+get_pcvar_float(g_iCvar[2]))
set_pev(victim, pev_velocity, Float:{0.0,0.0,0.0})
pev(victim, pev_maxspeed, g_fOldSpeed[victim])
set_pev(victim, pev_maxspeed, 1.0)
g_iFrost[victim]=i_Ent
}
public crack_high(taskid)
{
new id=taskid-898
if (g_crack_duration[id] < 1)
{
remove_task(taskid)
return
}
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenShake"), _, id)
write_short((1<<12) * random_num(3, 10)) // amplitude
write_short((1<<12) * 2) // duration
write_short((1<<12) * random_num(3, 10)) // frequency
message_end()
new Float:cloc[3]
cloc[0] = cloc[1] = cloc[2] = random_float(-get_pcvar_float(g_iCvar[6]), get_pcvar_float(g_iCvar[6]))
set_pev(id, pev_punchangle, cloc)
g_crack_duration[id]--
}
public ham_killed_post(id)
{
Cycle_delete_mines(id)
g_iLimit[id]=(get_user_flags(id)&ADMIN_LEVEL_H)?5:4
}
public client_putinserver(id) g_iLimit[id]=(get_user_flags(id)&ADMIN_LEVEL_H)?10:8
public client_disconnect(id) if(g_iMines_Count[id]) Cycle_delete_mines(id)
stock Cycle_delete_mines(i_Owner)
{
new iEnt = 33
while((iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", "Mine")))
{
if(pev(iEnt, pev_iuser2) != i_Owner) continue
engfunc(EngFunc_RemoveEntity, iEnt)
}
g_iMines_Count[i_Owner]=0
}
stock fm_cs_get_user_team(id)
{
if (pev_valid(id) != 2) return 0
return get_pdata_int(id, 114, 5)
}
colored_print(target, const message[], any:...)
{
static buffer[512], i, argscount
argscount = numargs()
if (!target) {
static player
for (player = 1; player <= 32; player++) {
if (!is_user_connected(player)) continue;
static changed[5], changedcount
changedcount = 0
for (i = 2; i < argscount; i++) {
if (getarg(i) == LANG_PLAYER) {
setarg(i, 0, player)
changed[changedcount] = i
changedcount++
}
}
vformat(buffer, charsmax(buffer), message, 3)
format(buffer, charsmax(buffer), "^x04[^1Мины^x04]^x01 %s", buffer)
replace_all ( buffer, 187, "!g", "^4" )
replace_all ( buffer, 187, "!y", "^1" )
replace_all ( buffer, 187, "!t", "^3" )
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid ( "SayText" ), _, player)
write_byte(player)
write_string(buffer)
message_end()
for (i = 0; i < changedcount; i++) setarg(changed[i], 0, LANG_PLAYER)
}
} else {
vformat(buffer, charsmax(buffer), message, 3)
format(buffer, charsmax(buffer), "^x04[^1Мины^x04]^x01 %s", buffer)
replace_all ( buffer, 187, "!g", "^4" )
replace_all ( buffer, 187, "!y", "^1" )
replace_all ( buffer, 187, "!t", "^3" )
message_begin(MSG_ONE, get_user_msgid ( "SayText" ), _, target)
write_byte(target)
write_string(buffer)
message_end()
}
}