|
Author
|
Message
|
|
Senior Member
|

08-01-2011
, 03:57
Crashes from plugin using TraceAttack
|
#1
|
I'm getting wieard crashes, supposedly caused by hamsandwitch module (and JB plugin).
Debug log:
Code:
Core was generated by `./hlds_i686 -game cstrike +ip xxxx+port 27015 +maxplayers 31 +map de'.
Program terminated with signal 11, Segmentation fault.
#0 0xb4f4e342 in CBasePlayer::TraceAttack(entvars_s *, float, Vector, TraceResult *, int) () from /xxxx/cstrike/dlls/cs_i386.so
#0 0xb4f4e342 in CBasePlayer::TraceAttack(entvars_s *, float, Vector, TraceResult *, int) () from /xxxx/cstrike/dlls/cs_i386.so
#1 0xb47a8551 in ?? () from cstrike/addons/amxmodx/modules/hamsandwich_amxx_i386.so
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
No symbol table info available.
Code:
RegisterHam(Ham_TraceAttack, "player", "player_attack")
RegisterHam(Ham_TraceAttack, "func_button", "button_attack")
....
public player_damage(victim, ent, attacker, Float:damage, bits)
{
if(!is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker)
return HAM_IGNORED
switch(g_Duel)
{
case(0):
{
if(attacker == ent && get_user_weapon(attacker) == CSW_KNIFE && get_bit(g_PlayerCrowbar, attacker) && cs_get_user_team(victim) != CS_TEAM_T)
{
SetHamParamFloat(4, damage * gc_CrowbarMul)
return HAM_OVERRIDE
}
}
case(2):
{
if(attacker != g_PlayerLast)
return HAM_SUPERCEDE
}
default:
{
if((victim == g_DuelA && attacker == g_DuelB) || (victim == g_DuelB && attacker == g_DuelA))
return HAM_IGNORED
return HAM_SUPERCEDE
}
}
return HAM_IGNORED
}
public player_attack(victim, attacker, Float:damage, Float:direction[3], tracehandle, damagebits)
{
static CsTeams:vteam, CsTeams:ateam
if(!is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker)
return HAM_IGNORED
vteam = cs_get_user_team(victim)
ateam = cs_get_user_team(attacker)
if(ateam == CS_TEAM_CT && vteam == CS_TEAM_CT)
return HAM_SUPERCEDE
switch(g_Duel)
{
case(0):
{
if(ateam == CS_TEAM_CT && vteam == CS_TEAM_T)
{
if(get_bit(g_PlayerRevolt, victim))
{
clear_bit(g_PlayerRevolt, victim)
hud_status(0)
}
return HAM_IGNORED
}
}
case(2):
{
if(attacker != g_PlayerLast)
return HAM_SUPERCEDE
}
default:
{
if((victim == g_DuelA && attacker == g_DuelB) || (victim == g_DuelB && attacker == g_DuelA))
return HAM_IGNORED
return HAM_SUPERCEDE
}
}
if(ateam == CS_TEAM_T && vteam == CS_TEAM_T && !g_BoxStarted)
return HAM_SUPERCEDE
if(ateam == CS_TEAM_T && vteam == CS_TEAM_CT)
{
if(!g_PlayerRevolt)
revolt_start()
set_bit(g_PlayerRevolt, attacker)
}
return HAM_IGNORED
}
__________________
|
|
|
|