Senior Member
Join Date: Nov 2011
Location: Paradise
|
01-18-2014
, 04:58
Crash server by this code?
|
#1
|
Hi, i made 1 melee weapon with delay attack, but when add to server, play > 30 minutes, my server crash, and i found, exactly, problem is my melee weapon. I don't know why because , check logs folder, not have error log. Now, i show my code, please help me if you found some thing mistake. Thanks!
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <fun>
#include <engine>
#include <hamsandwich>
#include <zombieplague>
#define PLUGIN "Keris"
#define VERSION "1.0"
#define AUTHOR "Ultra Voz"
#define MAXPLAYERS 32
#pragma tabsize 0
#define OFFSET_LAST_HIT_GROUP 75
#define EXTRAOFFSET_PL_LINUX 5
#define DMG_KNIFE ( DMG_BULLET | DMG_NEVERGIB )
#define DMG_HEGRENADE (1<<24)
#define TASK_SNAKE1 16112013
#define TASK_SNAKE2 161120132
#define DELAY_ATTACK_SLASH 0.2
//#define DELAY_ATTACK_TIME2 0.5
#define DELAY_ATTACK_STAB 0.6
#define SPEED_ATK_DRAW 1.0
#define SPEED_ATK_PRI 0.3
#define SPEED_ATK_SEC 1.3
#define m_flNextAttack 83
new const Float:vec_hit_multi[] =
{
1.0, // HIT_GENERIC
4.0, // HIT_HEAD
1.0, // HIT_CHEST
1.25, // HIT_STOMACH
1.0, // HIT_LEFTARM
1.0, // HIT_RIGHTARM
0.75, // HIT_LEFTLEG
0.75 // HIT_RIGHTLEG
}
new snake_v_model[] = "models/NTC/v_snakesword.mdl"
new snake_p_model[] = "models/NTC/p_snakesword.mdl"
const m_pPlayer = 41
const m_flNextPrimaryAttack = 46
const m_flNextSecondaryAttack = 47
const m_flTimeWeaponIdle = 48
new g_knife_snake[33], cvar_knife_snake_dmg1, cvar_knife_snake_dmg2
new g_atk_mode[33], g_anim[33]
new const g_sound_knife[] = { "items/gunpickup2.wav" }
new const snake_sounds[][] =
{
//"weapons/snakesword_draw.wav",
"weapons/snakesword_hit1.wav",
"weapons/snakesword_hit1.wav",
"weapons/snakesword_hit1.wav",
"weapons/snakesword_hit1.wav",
"weapons/snakesword_hitwall.wav",
"weapons/snakesword_miss.wav",
"weapons/snakesword_miss.wav",
"weapons/snakesword_hit1.wav"
}
new const oldknife_sounds[][] =
{
//"weapons/knife_deploy1.wav",
"weapons/knife_hit1.wav",
"weapons/knife_hit2.wav",
"weapons/knife_hit3.wav",
"weapons/knife_hit4.wav",
"weapons/knife_hitwall1.wav",
"weapons/knife_slash1.wav",
"weapons/knife_slash2.wav",
"weapons/knife_stab.wav"
}
public plugin_init()
{
register_plugin(PLUGIN , VERSION , AUTHOR);
register_cvar("zp_addon_knife", VERSION, FCVAR_SERVER);
register_event("CurWeapon","checkWeapon","be","1=1");
register_forward(FM_EmitSound, "fw_EmitSound");
register_message(get_user_msgid("DeathMsg"), "message_DeathMsg");
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage");
RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "fw_Knife_SecondaryAttack_Post", 1)
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "fw_Knife_PrimaryAttack_Post", 1)
//Set damage for 2 mode
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "fw_PrimaryAttack")
RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "fw_SecondaryAttack")
//Delay attack
RegisterHam( Ham_Weapon_SecondaryAttack, "weapon_knife", "fw_SecsnakeAttack" )
RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_knife", "fw_PrisnakeAttack" )
//Fix animation of client
register_forward(FM_UpdateClientData, "fw_updateclientdata_post", 1)
cvar_knife_snake_dmg1 = register_cvar("zp_knife_snake_dmg" , "230");
cvar_knife_snake_dmg2 = register_cvar("zp_knife_snake_dmg2" , "370");
register_clcmd("sn","give_snake")
//STRIP WEAPONS
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1)
}
public plugin_natives()
{
register_native("zp_had_snake", "native_had_snake", 1)
register_native("zp_give_snake", "native_give_snake", 1)
}
public client_connect(id)
{
g_knife_snake[id] = false
}
public client_disconnect(id)
{
g_knife_snake[id] = false
remove_katana(id)
}
public event_round_start()
{
for(new i; i<=32; i++)
{
g_knife_snake[i] = false
remove_katana(i)
if(is_user_alive(i))
{
strip_user_weapons(i)
give_item(i, "weapon_knife")
}
}
}
public zp_user_infected_post(id)
{
if (zp_get_user_zombie(id))
{
g_knife_snake[id] = false
remove_katana(id)
}
}
public Death()
{
g_knife_snake[read_data(2)] = false
remove_katana(read_data(2))
}
public fwHamPlayerSpawnPost(id)
{
g_knife_snake[id] = false
remove_katana(id)
}
public plugin_precache()
{
precache_model(snake_v_model)
precache_model(snake_p_model)
precache_sound(g_sound_knife)
for(new i = 0; i < sizeof snake_sounds; i++)
precache_sound(snake_sounds[i])
}
public fw_updateclientdata_post(Player, SendWeapons, CD_Handle)
{
if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_KNIFE) || !g_knife_snake[Player])
return FMRES_IGNORED
set_cd(CD_Handle, CD_flNextAttack, halflife_time() + 0.001 );
return FMRES_HANDLED
}
public give_snake(id)
{
if(!is_user_alive(id) || zp_get_user_zombie(id) )
return FMRES_IGNORED;
g_knife_snake[id] = true
g_anim[id] = 0
new owner = pev( id, pev_owner )
if(get_user_weapon(id) == CSW_KNIFE)
{
set_pev(id, pev_viewmodel2, snake_v_model)
set_pev(id, pev_weaponmodel2, snake_p_model)
UTIL_PlayWeaponAnimation(id, 3)
set_pdata_float(owner, m_flNextAttack, SPEED_ATK_DRAW)
} else {
engclient_cmd(id, "weapon_knife")
}
engfunc(EngFunc_EmitSound, id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)
return PLUGIN_HANDLED;
}
public checkWeapon(id)
{
new plrWeapId
new owner = pev( id, pev_owner )
plrWeapId = get_user_weapon(id)
if (plrWeapId == CSW_KNIFE && ( g_knife_snake[id] ))
{
checkModel(id)
set_pdata_float(owner, m_flNextAttack, SPEED_ATK_DRAW)
}
}
public checkModel(id)
{
if (zp_get_user_zombie(id))
return PLUGIN_HANDLED
if (g_knife_snake[id])
{
set_pev(id, pev_viewmodel2, snake_v_model)
set_pev(id, pev_weaponmodel2, snake_p_model)
}
return PLUGIN_HANDLED
}
public fw_EmitSound(id, channel, const sound[])
{
if(!is_user_alive(id) || zp_get_user_zombie(id) || !g_knife_snake[id])
return FMRES_IGNORED
for(new i = 0; i < sizeof snake_sounds; i++)
{
if(equal(sound, oldknife_sounds[i]))
{
if (g_knife_snake[id])
{
emit_sound(id, channel, snake_sounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
return FMRES_SUPERCEDE
}
/*if ( !g_knife_snake[id] )
{
emit_sound(id, channel, oldknife_sounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
return FMRES_SUPERCEDE
}*/
}
}
return FMRES_IGNORED
}
public message_DeathMsg(msg_id, msg_dest, id)
{
static szTruncatedWeapon[33], iattacker, ivictim
get_msg_arg_string(2, szTruncatedWeapon, charsmax(szTruncatedWeapon))
iattacker = get_msg_arg_int(1)
ivictim = get_msg_arg_int(2)
if(!is_user_connected(iattacker) || iattacker == ivictim)
return PLUGIN_CONTINUE
if (!zp_get_user_zombie(iattacker))
{
if(equal(szTruncatedWeapon, "knife") && get_user_weapon(iattacker) == CSW_KNIFE)
{
if(g_knife_snake[iattacker])
set_msg_arg_string(2, "knife")
}
}
return PLUGIN_CONTINUE
}
public fw_SecsnakeAttack( wpn )
{
new id = pev( wpn, pev_owner )
if( !g_knife_snake[id] ) return HAM_IGNORED
return HAM_SUPERCEDE
}
public fw_PrisnakeAttack( wpn )
{
new id = pev( wpn, pev_owner )
if( !g_knife_snake[id] ) return HAM_IGNORED
return HAM_SUPERCEDE
}
public fw_PrimaryAttack(weapon_ent)
{
// Get owner
static owner
owner = pev(weapon_ent, pev_owner)
// Replace these for zombie only
if (!is_user_alive(owner) || zp_get_user_nemesis(owner) || zp_get_user_zombie(owner))
return HAM_IGNORED
g_atk_mode[owner] = 1
return HAM_HANDLED
}
public fw_SecondaryAttack(weapon_ent)
{
// Get owner
static owner
owner = pev(weapon_ent, pev_owner)
// Replace these for zombie only
if (!is_user_alive(owner) || zp_get_user_nemesis(owner) || zp_get_user_zombie(owner))
return HAM_IGNORED
g_atk_mode[owner] = 2
return HAM_HANDLED
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
new hitgroup = get_pdata_int(victim, OFFSET_LAST_HIT_GROUP, EXTRAOFFSET_PL_LINUX)
if (hitgroup > 7 || hitgroup < 0)
return HAM_IGNORED
if(!is_user_connected(attacker))
return HAM_IGNORED
if(zp_get_user_zombie(attacker))
return HAM_IGNORED
if (get_user_weapon(attacker) == CSW_KNIFE && g_knife_snake[attacker] && damage_type & DMG_KNIFE)
{
if(g_atk_mode[attacker] == 1) SetHamParamFloat(4, damage = get_pcvar_float(cvar_knife_snake_dmg1) * vec_hit_multi[hitgroup])
if(g_atk_mode[attacker] == 2) SetHamParamFloat(4, damage = get_pcvar_float(cvar_knife_snake_dmg2) * vec_hit_multi[hitgroup])
}
if(get_user_weapon(attacker) == CSW_KNIFE && g_knife_snake[attacker])
{
if(damage_type & DMG_HEGRENADE) SetHamParamFloat(4, damage *3.4)
}
return HAM_HANDLED
}
public fw_Knife_SecondaryAttack_Post(knife)
{
static id
id = get_pdata_cbase(knife, m_pPlayer, 2)
new owner=pev(knife,pev_owner)
if(zp_get_user_zombie(id))
return HAM_IGNORED
if(is_user_connected(id) && g_knife_snake[id])
{
set_pdata_float(owner, m_flNextAttack, SPEED_ATK_SEC)
UTIL_PlayWeaponAnimation(owner,4)
set_task(DELAY_ATTACK_STAB,"SecAtk",owner+TASK_SNAKE2)
}
return HAM_IGNORED
}
public SecAtk(id)
{
id-=TASK_SNAKE2
new weapon = find_ent_by_owner ( -1, "weapon_knife", id )
ExecuteHam(Ham_Weapon_SecondaryAttack, weapon)
set_pev(id, pev_weaponanim, 4)
}
public fw_Knife_PrimaryAttack_Post(knife)
{
static id
id = get_pdata_cbase(knife, m_pPlayer, 1)
new owner=pev(knife,pev_owner)
if(zp_get_user_zombie(id))
return HAM_IGNORED
if(is_user_connected(id) && g_knife_snake[id])
{
set_pdata_float(owner, m_flNextAttack, SPEED_ATK_PRI)
if(!g_anim[id])
{
UTIL_PlayWeaponAnimation(owner,6)
g_anim[id] = 1
}
else
if(g_anim[id])
{
UTIL_PlayWeaponAnimation(owner,7)
g_anim[id] = 0
}
set_task(DELAY_ATTACK_SLASH,"PriAtk",owner+TASK_SNAKE1)
//set_task(DELAY_ATTACK_TIME2,"PriAtk",owner+TASK_SNAKE1)
}
return HAM_IGNORED
}
public PriAtk(id)
{
id-=TASK_SNAKE1
new weapon = find_ent_by_owner ( -1, "weapon_knife", id )
ExecuteHam(Ham_Weapon_PrimaryAttack, weapon)
//set_pev(id, pev_weaponanim, 8)
if(g_anim[id])
{
set_pev(id, pev_weaponanim, 6)
}
else
if(!g_anim[id])
{
set_pev(id, pev_weaponanim, 7)
}
}
public native_give_snake(id) give_snake(id)
public native_had_snake(id)
{
return g_knife_snake[id];
}
stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
set_pev(Player, pev_weaponanim, Sequence)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
write_byte(Sequence)
write_byte(0)
message_end()
}
remove_katana(id)
{
remove_task(id+TASK_SNAKE1)
remove_task(id+TASK_SNAKE2)
}
__________________
|
|