AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Crash server by this code? (https://forums.alliedmods.net/showthread.php?t=233634)

Lucky888 01-18-2014 04:58

Crash server by this code?
 
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! :D

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)



Black Rose 01-18-2014 06:44

Re: Crash server by this code?
 
If you add some debug messages, you will find out exactly at what point it crashes.

Lucky888 01-18-2014 21:36

Re: Crash server by this code?
 
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.:)

Black Rose 01-19-2014 14:30

Re: Crash server by this code?
 
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().

Lucky888 01-26-2014 09:12

Re: Crash server by this code?
 
Thank so much for your help!

Black Rose 01-27-2014 10:45

Re: Crash server by this code?
 
No problem. Did you find out where it crashed?

Lucky888 01-28-2014 10:41

Re: Crash server by this code?
 
Not yet, because i have some busy job, but i will use this later, thanks again! ;)


All times are GMT -4. The time now is 10:11.

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