Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
Tắt thông báo bằng nút X bên góc phải của bảng thông báo*
Hình như cái đó của CSS thì phải cho vô ko có tác dụngNgười ta không thích thì lock. Amxmodx có hỗ trợ weapon_restrict trong server đấy nhưng không nhớ rõ viết vào file nào.
@dark_one: Việc cl_corpsestay cũng giống w cách ông nói ở trên thôi. Nhưng tại sao k hiệu nghiệm , tôi ko biết / cl_corpsestay là config của client....bỏ vào config.cfg sem sao...Hic...
#include <amxmodx>
#include <hamsandwich>
public plugin_ini()
{
register_plugin("Test","1.0","Dias")
RegisterHam(Ham_TakeDamage, "player", "fw_takedmg")
}
public fw_takedmg(attacker, victim, inflictor, Float:damage)
{
client_print(attacker, print_chat, "Take Damage")
}
....Ai pro cái TakeDamage hướng dẫn nào.
---------------------------------------------
PHP:#include <amxmodx> #include <hamsandwich> public plugin_ini() { register_plugin("Test","1.0","Dias") RegisterHam(Ham_TakeDamage, "player", "fw_takedmg") } public fw_takedmg(attacker, victim, inflictor, Float:damage) { client_print(attacker, print_chat, "Take Damage") }
Tại sao trong game, khi bắn trúng ai đó nó ko hiện chữ TakeDamage nhỉ....
fw_takedmg(victim, inflictor, attacker, Float:damage, damagetype)
đây mới chỉ reg ham takedamage cho player thôiAi pro cái TakeDamage hướng dẫn nào.
---------------------------------------------
Tại sao trong game, khi bắn trúng ai đó nó ko hiện chữ TakeDamage nhỉPHP:#include <amxmodx> #include <hamsandwich> public plugin_ini() { register_plugin("Test","1.0","Dias") RegisterHam(Ham_TakeDamage, "player", "fw_takedmg") } public fw_takedmg(attacker, victim, inflictor, Float:damage) { client_print(attacker, print_chat, "Take Damage") }....
#include <amxmodx>
#include <hamsandwich
new g_hamczbots, cvar_botquota
public plugin_init()
{
register_plugin("Test TakeDamage","1.0","NST ^^")
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
//RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
cvar_botquota = get_cvar_pointer("bot_quota")
}
// reg Ham_TakeDamage cho czbot
public client_putinserver(id)
{
if (is_user_bot(id) && !g_hamczbots && cvar_botquota)
{
set_task(0.1, "register_ham_czbots", id)
}
}
public register_ham_czbots(id)
{
// Make sure it's a CZ bot and it's still connected
if (g_hamczbots || !is_user_connected(id) || !get_pcvar_num(cvar_botquota))
return;
RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage")
//RegisterHamFromEntity(Ham_Spawn, id, "fw_PlayerSpawn_Post", 1)
// Ham forwards for CZ bots succesfully registered
g_hamczbots = true
}
// fw_TakeDamage
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
client_print(0, print_chat, "[%i] Take Damage [%i]", attacker, victim)
}
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <fun>
#include <fakemeta_util>
#include <zombieplague>
#include <engine>
#include <hamsandwich>
new Float:cl_pushangle[33][3]
new g_svd[33]
new g_m203_loaded[33]
new g_ammo[33]
new g_itemid
new g_hegren
/// new MaxPlayers
new g_MaxPlayers
//cvar of weapon
new cvar_trail ,cvar_radius ,cvar_damage , cvar_bonus ,cvar_reload ,cvar_remove , cvar_zoom , cvar_recoil , cvar_dmg_multi, cvar_speed, cvar_knockback
//message :D
new g_msgDeathMsg
new g_msgScoreInfo
new gMsgID
new g_hasZoom[33]
// Explode spr
new m_iTrail;
// TRail of Grenade
new xplode;
new Float:zoom_delay[33]
//weapon model
new V_MODEL[64] = "models/v_svdex.mdl"
new P_MODEL[64] = "models/p_svdex.mdl"
new W_MODEL[64] = "models/w_svdex.mdl"
new W_NADE[64] = "models/grenade.mdl"
//sound for weapon :D thanks Duy Linh
new const fire_sound[][] = {"weapons/svd-1.wav"}
new const sound_exp[][] = {"weapons/svdex-exp.wav"}
#define ICON_HIDE 0
#define ICON_SHOW 1
//weapon cost
const weapon_cost = 40
const m203_cost = 2
const m_fInReload = 54
public plugin_init() {
register_plugin("[ZP] Extra Item : SVDEX","0.1","Teobrvt1995")
register_event("DeathMsg","player_die","abd")
register_event("CurWeapon","checkWeapon","be","1=1")
RegisterHam(Ham_Killed, "player", "player_die")
RegisterHam(Ham_Spawn, "player", "player_spawn")
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
//register m203 nade touch:D
register_touch("m203_nade", "*", "m203_touch")
//register forawrd
register_forward(FM_CmdStart, "forward_CmdStart")
register_forward(FM_SetModel, "forward_setmodel")
//nax player
g_MaxPlayers = get_maxplayers()
//register the cvar
cvar_knockback = register_cvar("zp_svd_knock", "2")
cvar_speed = register_cvar("zp_svd_speed", "3.0")
cvar_recoil = register_cvar("zp_svd_recoil", "0.2")
cvar_dmg_multi = register_cvar("zp_svd_dmg_multi", "8")
cvar_trail = register_cvar("zp_svd_trail","1")
cvar_radius = register_cvar("zp_svd_rad","300")
cvar_damage = register_cvar("zp_svd_dmg","2000")
cvar_bonus = register_cvar("zp_svd_bonus","2")
cvar_reload = register_cvar("zp_svd_reloadtime","3.0")
cvar_remove = register_cvar("zp_svd_remove","0")
cvar_zoom = register_cvar("zp_svd_zoom", "1")
// register extra item
g_itemid = zp_register_extra_item("SVDEX",weapon_cost,ZP_TEAM_HUMAN)
g_hegren = zp_register_extra_item("M203 for SVDEX",m203_cost, ZP_TEAM_HUMAN)
//message for weapon
g_msgDeathMsg = get_user_msgid("DeathMsg")
g_msgScoreInfo = get_user_msgid ( "ScoreInfo" )
gMsgID = get_user_msgid("StatusIcon")
// for recoil and sound weapon :D
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_primary_attack")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_primary_attack_post",1)
//when player are reloading...
RegisterHam(Ham_Weapon_Reload, "weapon_ak47", "fw_weapon_reload")
//enable pick up the weapon
RegisterHam(Ham_Item_AddToPlayer, "weapon_ak47", "fw_weapon_pickup")
}
//precache sound and model...
public plugin_precache()
{
m_iTrail = precache_model("sprites/smoke.spr")
xplode = precache_model("sprites/zerogxplode.spr")
precache_sound("weapons/svdex-shoot2.wav")
for(new i = 0; i < sizeof sound_exp; i++)
precache_sound(sound_exp[i])
for(new i = 0; i < sizeof fire_sound; i++)
precache_sound(fire_sound[i])
precache_model(V_MODEL)
precache_model(P_MODEL)
precache_model(W_MODEL)
precache_model(W_NADE)
}
public zp_user_infected_post(id) /// Forward when user is infected
{
if(g_svd[id])
ammo_hud(id,0)
g_svd[id] = false
g_ammo[id] = 0
}
public client_connect(id)
{
g_svd[id] = 0
g_m203_loaded[id] = 1
g_ammo[id] = 0
}
//death/...
public player_die(id)
{
if(g_svd[id])
ammo_hud(id,0)
g_ammo[id] = 0
g_svd[id] = 0
return PLUGIN_CONTINUE
}
//for recoil and sound...
public fw_primary_attack(ent)
{
new id = pev(ent,pev_owner)
pev(id,pev_punchangle,cl_pushangle[id])
return HAM_IGNORED
}
public fw_primary_attack_post(ent)
{
new id = pev(ent,pev_owner)
new clip, ammo
new weap = get_user_weapon( id, clip, ammo )
if( weap == CSW_AK47 && g_svd[id])
{
new Float:push[3]
pev(id,pev_punchangle,push)
xs_vec_sub(push,cl_pushangle[id],push)
xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil),push)
xs_vec_add(push,cl_pushangle[id],push)
set_pev(id,pev_punchangle,push)
if( clip > 0)
{
ExecuteHamB(Ham_Weapon_PlayEmptySound, ent)
for(new i = 0; i < sizeof fire_sound; i++)
emit_sound(id, CHAN_AUTO, fire_sound[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
return HAM_IGNORED
}
//when player reload ...
public fw_weapon_reload(ent)
{
new id = pev(ent, pev_owner)
new button = pev(id, pev_button)
if(g_svd[id] && g_hasZoom[id] && button&IN_RELOAD)
{
g_ammo[id] = 0
g_hasZoom[id] = false
cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
}
return HAM_IGNORED
}
//player pick up the weapon...
public fw_weapon_pickup(svd, id)
{
if( is_valid_ent(svd) && is_user_connected(id) && entity_get_int(svd, EV_INT_impulse) == 1995)
{
// Update
g_svd[id] = true
// BP ammo
cs_set_user_bpammo(id, CSW_AK47, pev(svd, pev_iuser2))
// Reset weapon options
entity_set_int(svd, EV_INT_impulse, 0)
return HAM_HANDLED
}
return HAM_IGNORED
}
public player_spawn(id) // When player is respawn (But it the same when roudn start...So I :P )
{
if ( get_pcvar_num(cvar_remove) == 1 && g_svd[id] )
{
ammo_hud(id,0)
g_svd[id] = false
g_ammo[id] = 0
}
}
//set P and W model
public checkModel(id)
{
if ( zp_get_user_zombie(id) )
return PLUGIN_HANDLED
new szWeapID = read_data(2)
if ( szWeapID == CSW_AK47 && g_svd[id])
{
set_pev(id, pev_viewmodel2, V_MODEL)
set_pev(id, pev_weaponmodel2, P_MODEL)
}
return PLUGIN_HANDLED
}
public checkWeapon(id)
{
new plrClip, plrAmmo, plrWeapId
plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
if (plrWeapId == CSW_AK47 && g_svd[id])
{
checkModel(id)
new Ent = get_weapon_ent(id,plrWeapId)
new Float:N_Speed
if(Ent)
{
N_Speed = get_pcvar_float(cvar_speed)
new Float:Delay = get_pdata_float( Ent, 46, 4) * N_Speed
if (Delay > 0.0) {
set_pdata_float( Ent, 46, Delay, 4)
}
}
}
else
{
return PLUGIN_CONTINUE
}
return PLUGIN_HANDLED
}
// Create W class for weapon :D
public forward_setmodel(Entity, const Model [])
{
// Entity is not valid
if (!is_valid_ent(Entity))
return FMRES_IGNORED
// Not ak47
if(!equal(Model, "models/w_ak47.mdl"))
return FMRES_IGNORED;
// Get classname
static szClassName[33]
entity_get_string(Entity, EV_SZ_classname, szClassName, charsmax(szClassName))
// Not a Weapon box
if ( !equal ( szClassName, "weaponbox" ) )
return FMRES_IGNORED
// Some vars
static iOwner, iStoredAkID
// Get owner
iOwner = entity_get_edict(Entity, EV_ENT_owner)
// Get drop weapon index
iStoredAkID = find_ent_by_owner(-1, "weapon_ak47", Entity)
// Entity classname is weaponbox, and ak47 was founded
if(g_svd[iOwner] && is_valid_ent(iStoredAkID))
{
// Setting weapon options
entity_set_int(iStoredAkID, EV_INT_impulse, 1995)
// Reset user vars
g_svd [ iOwner ] = false
entity_set_model(Entity, W_MODEL)
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
//someone has bought our extra item...
public zp_extra_item_selected(player, itemid)
{
if (itemid == g_hegren)
{
if(!g_svd[player])
{
client_print(player, print_chat, "[TEO] you need have a SVDEX first")
zp_set_user_ammo_packs(player, zp_get_user_ammo_packs(player)+ m203_cost )
return;
}
ammo_hud(player,0);
g_ammo[player] += 5
client_print(player,print_chat, "You bought 5 nade for SVDEX");
ammo_hud(player,1);
}
if(itemid == g_itemid)
{
if(g_svd[player] && user_has_weapon(player, CSW_AK47))
{
client_print(player, print_chat, "[TEO]You already have a SVDEX")
zp_set_user_ammo_packs(player, zp_get_user_ammo_packs(player)+ weapon_cost )
return;
}
fm_give_item(player,"weapon_ak47")
fm_give_item(player,"ammo_9mm")
client_print(player,print_chat,"[TEO] You Bought a SVDEX, Time to hunt Zombie ")
client_print(player, print_chat, "[TEO] Press key E to zoom and ATTACK2 to launch the nade")
g_svd[player] = true
g_ammo[player] = 5
ammo_hud(player,1)
cs_set_user_bpammo(player, CSW_AK47, 90)
}
}
//when player press key Attack2 or E
public forward_CmdStart(id, uc_handle, seed)
{
new button = get_uc(uc_handle, UC_Buttons)
new ent = find_ent_by_owner(-1, "weapon_ak47", id)
new fInReload = get_pdata_int(ent, m_fInReload, 4)
if(is_user_alive(id) && !zp_get_user_zombie(id) && get_user_weapon(id) == CSW_AK47 && g_svd[id])
{
if(entity_get_int(id, EV_INT_button) & IN_ATTACK2)
{
launch_nade(id)
return FMRES_IGNORED
}
if (button & IN_USE)
{
set_pev(id, pev_button, button &~ IN_USE)
if (get_gametime() - zoom_delay[id] >= 0.5 && !fInReload && get_pcvar_num(cvar_zoom))
{
if (g_hasZoom[id])
{
g_hasZoom[id] = false
cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
}
else
{
g_hasZoom[id] = true
cs_set_user_zoom(id, CS_SET_AUGSG552_ZOOM, 0)
}
zoom_delay[id] = get_gametime()
}
}
}
return FMRES_IGNORED
}
//dmg multipler
public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
if ( is_user_alive( attacker ) && get_user_weapon(attacker) == CSW_AK47 && g_svd[attacker] )
{
SetHamParamFloat(4, damage * get_pcvar_float( cvar_dmg_multi ) )
}
}
//m203 fire...
public launch_nade(id)
{
if(g_svd[id] == 0 || g_m203_loaded[id] == 0 || !(is_user_alive(id)))
return PLUGIN_CONTINUE
if(g_ammo[id] == 0)
{
client_print(id, print_center, "[TEO] You dont have more nade")
return PLUGIN_CONTINUE
}
entity_set_int(id, EV_INT_weaponanim, 3)
new Float: Origin[3], Float: Velocity[3], Float: vAngle[3], Ent
entity_get_vector(id, EV_VEC_origin , Origin)
entity_get_vector(id, EV_VEC_v_angle, vAngle)
Origin[2] = Origin[2] + 10
Ent = create_entity("info_target")
if (!Ent) return PLUGIN_HANDLED
entity_set_string(Ent, EV_SZ_classname, "m203_nade")
entity_set_model(Ent, W_NADE)
//set size
new Float:MinBox[3] = {-1.0, -1.0, -1.0}
new Float:MaxBox[3] = {1.0, 1.0, 1.0}
entity_set_vector(Ent, EV_VEC_mins, MinBox)
entity_set_vector(Ent, EV_VEC_maxs, MaxBox)
entity_set_origin(Ent, Origin)
entity_set_vector(Ent, EV_VEC_angles, vAngle)
entity_set_int(Ent, EV_INT_effects, 2)
entity_set_int(Ent, EV_INT_solid, 1)
entity_set_int(Ent, EV_INT_movetype, 10)
entity_set_edict(Ent, EV_ENT_owner, id)
VelocityByAim(id, 2500 , Velocity)
entity_set_vector(Ent, EV_VEC_velocity ,Velocity)
//sound when lauch...
emit_sound(id,CHAN_VOICE,"weapons/svdex-shoot2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
g_m203_loaded[id] = 0
ammo_hud(id,0)
g_ammo[id]--
ammo_hud(id,1)
new parm[1]
parm[0] = Ent
if(get_pcvar_num(cvar_trail))
set_task(0.2, "grentrail",id,parm,1)
parm[0] = id
set_task(get_pcvar_float(cvar_reload), "m203_reload",id+9910,parm,1)
client_print(id, print_center, "[TEO]reloading")
return PLUGIN_CONTINUE
}
public m203_reload(parm[])
{
g_m203_loaded[parm[0]] = 1
}
//when m203 nade touch something...
public m203_touch(Nade, Other)
{
if(!pev_valid(Nade))
return
// Get it's origin
static Float:origin[3]
pev(Nade, pev_origin, origin)
// Explosion
engfunc ( EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
write_byte (TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, origin[0]) // Position X
engfunc(EngFunc_WriteCoord, origin[1]) // Position Y
engfunc(EngFunc_WriteCoord, origin[2]) // Position Z
write_short (xplode) // Sprite index
write_byte (40) // Scale
write_byte (30) // Frame rate
write_byte (0) // Flags
message_end ()
new id = pev(Nade, pev_owner)
for(new i = 0; i < sizeof sound_exp; i++)
emit_sound(id,CHAN_VOICE,sound_exp[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
// Owner
static owner ; owner = pev(Nade, pev_owner)
// Make a loop
for(new i = 1; i < g_MaxPlayers;i++)
{
//not alive
if (!is_user_alive(i))
continue
// Godmode
if (get_user_godmode(i) == 1)
continue
// Human/Survivor
if (!zp_get_user_zombie(i) || zp_get_user_survivor(i))
continue
// Get victims origin
static Float:origin2 [3]
pev(i, pev_origin, origin2)
// Get distance between those origins
static Float:distance_f ; distance_f = get_distance_f(origin, origin2)
// Convert distnace to non-float
static distance ; distance = floatround(distance_f)
// Radius
static radius ; radius = get_pcvar_num(cvar_radius)
// We are in damage radius
if ( distance <= radius )
{
// Fake damage
fakedamage(i, "grenade", 0.0, DMG_BLAST)
// Max damage
static maxdmg ; maxdmg = get_pcvar_num(cvar_damage)
// Normal dmg
new Damage
Damage = maxdmg - floatround(floatmul(float(maxdmg), floatdiv(float(distance), float(radius))))
// Calculate health
new health = get_user_health(i)
// We have at least 1 hp
if(health - Damage >= 1)
{
// New health
set_user_health(i, health - Damage)
make_knockback(i, origin, get_pcvar_float(cvar_knockback) * Damage)
}
else
{
// We must die
death_message(owner,i,"grenade",1)
// I hope they'll not find the bodies....
origin2 [ 2 ] -= 45.0
}
}
}
// Breakable
static ClassName[32]
pev(Other, pev_classname, ClassName, charsmax(ClassName))
if(equal(ClassName,"func_breakable"))
{
// Entity health
static Float:health
health = entity_get_float(Other, EV_FL_health)
if (health <= get_pcvar_num(cvar_damage))
{
// Break it
force_use(owner, Other)
}
}
// Remove grenade
engfunc(EngFunc_RemoveEntity, Nade)
}
// Death message
public death_message(Killer, Victim, const Weapon[], ScoreBoard)
{
// Block death msg
set_msg_block(g_msgDeathMsg, BLOCK_SET)
ExecuteHamB(Ham_Killed, Victim, Killer, 2)
set_msg_block(g_msgDeathMsg, BLOCK_NOT)
// Death
make_deathmsg(Killer, Victim, 0, Weapon)
// Ammo packs
zp_set_user_ammo_packs(Killer, zp_get_user_ammo_packs(Killer) + get_pcvar_num(cvar_bonus))
// Update score board
if ( ScoreBoard )
{
message_begin(MSG_BROADCAST, g_msgScoreInfo)
write_byte( Killer ) // id
write_short(pev(Killer, pev_frags)) // frags
write_short(cs_get_user_deaths(Killer)) // deaths
write_short(0) // class?
write_short(get_user_team(Killer)) // team
message_end()
message_begin(MSG_BROADCAST, g_msgScoreInfo)
write_byte(Victim) // id
write_short(pev(Victim, pev_frags)) // frags
write_short(cs_get_user_deaths(Victim)) // deaths
write_short(0) // class?
write_short(get_user_team(Victim)) // team
message_end()
}
}
ammo_hud(id, sw)
{
new s_sprite[33]
format(s_sprite,32,"number_%d",g_ammo[id])
if(sw)
{
message_begin( MSG_ONE, gMsgID, {0,0,0}, id )
write_byte( ICON_SHOW ) // status
write_string( s_sprite ) // sprite name
write_byte( 0 ) // red
write_byte( 150 ) // green
write_byte( 0 ) // blue
message_end()
}
else
{
message_begin( MSG_ONE, gMsgID, {0,0,0}, id )
write_byte( ICON_HIDE ) // status
write_string( s_sprite ) // sprite name
write_byte( 0 ) // red
write_byte( 160 ) // green
write_byte( 0 ) // blue
message_end()
}
}
public grentrail(parm[])
{
new gid = parm[0]
if (gid)
{
message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
write_byte( TE_BEAMFOLLOW )
write_short(gid) // entity
write_short(m_iTrail) // model
write_byte( 10 ) // life
write_byte( 5 ) // width
write_byte( 255 ) // r, g, b
write_byte( 255 ) // r, g, b
write_byte( 255 ) // r, g, b
write_byte( 100 ) // brightness
message_end() // move PHS/PVS data sending into here (SEND_ALL, SEND_PVS, SEND_PHS)
}
}
//knock back...
public make_knockback ( Victim, Float:origin [ 3 ], Float:maxspeed )
{
// Get and set velocity
new Float:fVelocity[3];
kickback ( Victim, origin, maxspeed, fVelocity)
entity_set_vector( Victim, EV_VEC_velocity, fVelocity);
return (1);
}
//stock...
stock get_weapon_ent(id,wpnid=0,wpnName[]="")
{
// who knows what wpnName will be
static newName[24];
// need to find the name
if(wpnid) get_weaponname(wpnid,newName,23);
// go with what we were told
else formatex(newName,23,"%s",wpnName);
// prefix it if we need to
if(!equal(newName,"weapon_",7))
format(newName,23,"weapon_%s",newName);
return fm_find_ent_by_owner(get_maxplayers(),newName,id);
}
stock kickback( ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3])
{
// Find origin
new Float:fEntOrigin[3];
entity_get_vector( ent, EV_VEC_origin, fEntOrigin );
// Do some calculations
new Float:fDistance[3];
fDistance[0] = fEntOrigin[0] - fOrigin[0];
fDistance[1] = fEntOrigin[1] - fOrigin[1];
fDistance[2] = fEntOrigin[2] - fOrigin[2];
new Float:fTime = (vector_distance( fEntOrigin,fOrigin ) / fSpeed);
fVelocity[0] = fDistance[0] / fTime;
fVelocity[1] = fDistance[1] / fTime;
fVelocity[2] = fDistance[2] / fTime;
return (fVelocity[0] && fVelocity[1] && fVelocity[2]);
}
for(new i = 0; i < sizeof sound_exp; i++)
emit_sound(id,CHAN_VOICE,sound_exp[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
. // Fake damage
fakedamage(i, "grenade", 0.0, DMG_BLAST)
// Max damage
static maxdmg ; maxdmg = get_pcvar_num(cvar_damage)
// Normal dmg
new Damage
Damage = maxdmg - floatround(floatmul(float(maxdmg), floatdiv(float(distance), float(radius))))
// Calculate health
new health = get_user_health(i)
// We have at least 1 hp
if(health - Damage >= 1)
{
// New health
set_user_health(i, health - Damage)
make_knockback(i, origin, get_pcvar_float(cvar_knockback) * Damage)
}
else
{
// We must die
death_message(owner,i,"grenade",1)
// I hope they'll not find the bodies....
origin2 [ 2 ] -= 45.0
}
. Có lỗi j thì nói luôn đi
.