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

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

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

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

Наземная мина

, возможность наносить урон.Хелп
Статус пользователя User91893452
сообщение 8.4.2022, 13:17
Сообщение #1
Стаж: 2 года 4 месяца
Город: Украина

Сообщений: 23
Благодарностей: 3
Полезность: 99

помогите сделать чтобы можно было наносить урон противником по мине

Код:

#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()
}
}

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: