Raised This Month: $51 Target: $400
 12% 

Crash server by this code?


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Lucky888
Senior Member
Join Date: Nov 2011
Location: Paradise
Old 01-18-2014 , 04:58   Crash server by this code?
Reply With Quote #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_dmg1cvar_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"VERSIONFCVAR_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
RegisterHamHam_Weapon_SecondaryAttack"weapon_knife""fw_SecsnakeAttack" )
RegisterHamHam_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 
ii<=32i++)
{
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 
0sizeof snake_soundsi++)
precache_sound(snake_sounds[i])

}

public 
fw_updateclientdata_post(PlayerSendWeaponsCD_Handle)
{
    if(!
is_user_alive(Player) || (get_user_weapon(Player) != CSW_KNIFE) || !g_knife_snake[Player])
        return 
FMRES_IGNORED
    
    set_cd
(CD_HandleCD_flNextAttackhalflife_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 pevidpev_owner )
    
    if(
get_user_weapon(id) == CSW_KNIFE)
    {
        
set_pev(idpev_viewmodel2snake_v_model)
        
set_pev(idpev_weaponmodel2snake_p_model)
        
UTIL_PlayWeaponAnimation(id3)    
        
set_pdata_float(ownerm_flNextAttackSPEED_ATK_DRAW)
        
    } else {
        
engclient_cmd(id"weapon_knife")
    }
    
    
engfunc(EngFunc_EmitSoundidCHAN_BODYg_sound_knife1.0ATTN_NORM0PITCH_NORM)
    
    return 
PLUGIN_HANDLED;
}

public 
checkWeapon(id)
{
new 
plrWeapId

new owner pevidpev_owner )

plrWeapId get_user_weapon(id)

if (
plrWeapId == CSW_KNIFE && ( g_knife_snake[id] ))
{
    
checkModel(id)
    
set_pdata_float(ownerm_flNextAttackSPEED_ATK_DRAW)
}
}

public 
checkModel(id)
{
    if (
zp_get_user_zombie(id))
    return 
PLUGIN_HANDLED

    
    
if (g_knife_snake[id])
    {
        
set_pev(idpev_viewmodel2snake_v_model)
        
set_pev(idpev_weaponmodel2snake_p_model)
    }
    
    return 
PLUGIN_HANDLED
}

public 
fw_EmitSound(idchannel, const sound[])
{
    if(!
is_user_alive(id) || zp_get_user_zombie(id) || !g_knife_snake[id])
        return 
FMRES_IGNORED
    
        
for(new 0sizeof snake_soundsi++)
    {
        if(
equal(soundoldknife_sounds[i]))
        {
            if (
g_knife_snake[id])
            {
                
emit_sound(idchannelsnake_sounds[i], 1.0ATTN_NORM0PITCH_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_idmsg_destid)
{
    static 
szTruncatedWeapon[33], iattackerivictim
    
    get_msg_arg_string
(2szTruncatedWeaponcharsmax(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_SecsnakeAttackwpn 
{
    new 
id pevwpnpev_owner )
    if( !
g_knife_snake[id] ) return HAM_IGNORED

    
return HAM_SUPERCEDE
}

public 
fw_PrisnakeAttackwpn 
{
    new 
id pevwpnpev_owner )
    if( !
g_knife_snake[id] ) return HAM_IGNORED

    
return HAM_SUPERCEDE
}


public 
fw_PrimaryAttack(weapon_ent)
{
    
// Get owner
    
static owner
    owner 
pev(weapon_entpev_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_entpev_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(victiminflictorattackerFloat:damagedamage_type)
{
    new 
hitgroup get_pdata_int(victimOFFSET_LAST_HIT_GROUPEXTRAOFFSET_PL_LINUX)
    
    if (
hitgroup || 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] == 1SetHamParamFloat(4damage get_pcvar_float(cvar_knife_snake_dmg1) * vec_hit_multi[hitgroup])
        if(
g_atk_mode[attacker] == 2SetHamParamFloat(4damage 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_HEGRENADESetHamParamFloat(4damage *3.4)
    }
    
    return 
HAM_HANDLED
}

public 
fw_Knife_SecondaryAttack_Post(knife
{     
    static 
id 
    id 
get_pdata_cbase(knifem_pPlayer2
    
    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(ownerm_flNextAttackSPEED_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_SecondaryAttackweapon)
    
set_pev(idpev_weaponanim4)
}



public 
fw_Knife_PrimaryAttack_Post(knife
{     
    static 
id 
    id 
get_pdata_cbase(knifem_pPlayer1
    
    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(ownerm_flNextAttackSPEED_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_PrimaryAttackweapon)
    
    
//set_pev(id, pev_weaponanim, 8)
    
if(g_anim[id])
    {
        
set_pev(idpev_weaponanim6)
    }
    
    else
    
    if(!
g_anim[id])
    {
        
set_pev(idpev_weaponanim7)
    }
}

public 
native_give_snake(idgive_snake(id)

public 
native_had_snake(id)
{
    return 
g_knife_snake[id];
}

stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
    
set_pev(Playerpev_weaponanimSequence)
    
    
message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM, .player Player)
    
write_byte(Sequence)
    
write_byte(0)
    
message_end()
}

remove_katana(id)
{
    
remove_task(id+TASK_SNAKE1)
    
remove_task(id+TASK_SNAKE2)

__________________
Lucky888 is offline
Send a message via Yahoo to Lucky888
Black Rose
Veteran Member
Join Date: Feb 2011
Location: Stockholm, Sweden
Old 01-18-2014 , 06:44   Re: Crash server by this code?
Reply With Quote #2

If you add some debug messages, you will find out exactly at what point it crashes.
__________________
Black Rose is offline
Lucky888
Senior Member
Join Date: Nov 2011
Location: Paradise
Old 01-18-2014 , 21:36   Re: Crash server by this code?
Reply With Quote #3

Oh, can you show me how to add some debug messenger in my code? Some example? Because i only know debug in plugin.ini file, and it not show log. I'm amateur, so plz help, thank so much.
__________________
Lucky888 is offline
Send a message via Yahoo to Lucky888
Black Rose
Veteran Member
Join Date: Feb 2011
Location: Stockholm, Sweden
Old 01-19-2014 , 14:30   Re: Crash server by this code?
Reply With Quote #4

Code:
dbgmsg(const fmt[], any:...) {     static dbgmsg_output[1024];     vformat(dbgmsg_output, charsmax(dbgmsg_output), fmt, 2);     new hFile = fopen("mydebugfile.txt", "a");     fprintf(hFile, "%s^n", dbgmsg_output);     fclose(hFile); }

Example 1:
Code:
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     dbgmsg("1");     set_cd(CD_Handle, CD_flNextAttack, halflife_time() + 0.001 );     dbgmsg("2");     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)     {         dbgmsg("3");         set_pev(id, pev_viewmodel2, snake_v_model)         dbgmsg("4");         set_pev(id, pev_weaponmodel2, snake_p_model)         dbgmsg("5");         UTIL_PlayWeaponAnimation(id, 3)         dbgmsg("6");         set_pdata_float(owner, m_flNextAttack, SPEED_ATK_DRAW)         dbgmsg("7");             } else {         dbgmsg("8");         engclient_cmd(id, "weapon_knife")         dbgmsg("9");     }     engfunc(EngFunc_EmitSound, id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)     dbgmsg("10");         return PLUGIN_HANDLED; }

Example 2 (overkill but very easy to read):
Code:
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     dbgmsg("fw_updateclientdata_post(%d, %d, %d) : set_cd(%d, NextAttack, %f) : pre", Player, SendWeapons, CD_Handle, CD_Handle, halflife_time() + 0.001);     set_cd(CD_Handle, CD_flNextAttack, halflife_time() + 0.001 );     dbgmsg("fw_updateclientdata_post() : set_cd() : post");     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)     {         dbgmsg("give_snake(%d) : set_pev(%d, viewmodel2, %s) : pre", id, id, snake_v_model);         set_pev(id, pev_viewmodel2, snake_v_model)         dbgmsg("give_snake() : set_pev(,viewmodel2,) : post");         dbgmsg("give_snake(%d) : set_pev(%d, weaponmodel2, %s) : pre", id, id, snake_p_model);         set_pev(id, pev_weaponmodel2, snake_p_model)         dbgmsg("give_snake() : set_pev(,weaponmodel2,) : post");         dbgmsg("give_snake(%d) : UTIL_PlayWeaponAnimation(%d, 3) : pre", id, id);         UTIL_PlayWeaponAnimation(id, 3)         dbgmsg("give_snake() : UTIL_PlayWeaponAnimation() : post");         dbgmsg("give_snake(%d) : set_pdata_float(%d, m_flNextAttack, %f) : pre", id, owner, SPEED_ATK_DRAW);         set_pdata_float(owner, m_flNextAttack, SPEED_ATK_DRAW)         dbgmsg("give_snake() : set_pdata_float() : post");             } else {         dbgmsg("give_snake(%d) : engclient_cmd(%d, ^"weapon_knife^") : pre", id, id);         engclient_cmd(id, "weapon_knife")         dbgmsg("give_snake() : engclient_cmd() : post");     }     dbgmsg("give_snake(%d) : engfunc(EmitSound, %d, CHAN_BODY, %s, 1.0, ATTN_NORM, 0, PITCH_NORM) : pre", id, id, g_sound_knife);     engfunc(EngFunc_EmitSound, id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)     dbgmsg("give_snake() : engfunc(EmitSound) : pre");         return PLUGIN_HANDLED; }

Haven't actually tested it, just assumed it works.
Tested it now, made some small changes.

If the last message you see is "fw_updateclientdata_post(X, X, X) : set_cd(X, NextAttack, X.X) : pre" or "1" you know that it crashed or failed at set_cd().
__________________

Last edited by Black Rose; 01-28-2014 at 11:56.
Black Rose is offline
Lucky888
Senior Member
Join Date: Nov 2011
Location: Paradise
Old 01-26-2014 , 09:12   Re: Crash server by this code?
Reply With Quote #5

Thank so much for your help!
__________________
Lucky888 is offline
Send a message via Yahoo to Lucky888
Black Rose
Veteran Member
Join Date: Feb 2011
Location: Stockholm, Sweden
Old 01-27-2014 , 10:45   Re: Crash server by this code?
Reply With Quote #6

No problem. Did you find out where it crashed?
__________________
Black Rose is offline
Lucky888
Senior Member
Join Date: Nov 2011
Location: Paradise
Old 01-28-2014 , 10:41   Re: Crash server by this code?
Reply With Quote #7

Not yet, because i have some busy job, but i will use this later, thanks again! ;)
__________________
Lucky888 is offline
Send a message via Yahoo to Lucky888
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 07:29.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode