PS Tak, nie wiedziałem jak nazwać temat ![]()
Witam.
Problem pojawia się specyficznie, nie o jakiejs określonej godzinie, ani podczas wywoływania określonych czynności.
W logach nie ma żadnych błędów. Tak samo w konsoli
Debugując metodą "diodową?" udało mi się ustalić który public powoduje blad, lecz nie moge znaleść w nim żadnego uszkodzenia które mogło by powodować wyciek pamięci..
public fw_touch(bullet, ent)
{
#if defined DEBUG
log_to_file("paintballgun.log", "fw_touch pre");
#endif
new class[20];
pev(bullet, pev_classname, class, 19);
if (!equali(class, "pbBullet") && !equali(class, "pbHarmlessBullet"))
return FMRES_IGNORED;
new owner = pev(bullet, pev_owner);
new Float:origin[3], class2[20];
pev(ent, pev_classname, class2, 19);
pev(bullet, pev_origin, origin);
new hit;
hit = random(15);
if (equali(class, "pbExplosive")){ //it is a nade
new Float:gametime = get_gametime();
//if it hits something after this time, explode
if (gametime-lastshot[owner] > 0.5){
act_explode(bullet);
set_pev(bullet, pev_velocity, Float:{0.0, 0.0, 0.0});
set_pev(bullet, pev_classname, "pbPaint");
set_pev(bullet, pev_solid, 0);
set_pev(bullet, pev_movetype, 0);
engfunc(EngFunc_SetModel, bullet, "sprites/paintball.spr");
new a, findpb = 0;
while (a++ < g_pbcount && !findpb)
if (g_paintballs[a] == bullet)
findpb = g_pbstatus[a] = 2;
remove_task(bullet);
remove_task(bullet+TASK_PB_RESET);
paint_reset(bullet+TASK_PB_RESET);
return FMRES_HANDLED;
}
else if (!equali(class2, "pbBullet")&&!equali(class2, "pbHarmlessBullet")&&get_pcvar_num(gravity)){
//make it bounce and loose some velocity
new Float:vel[3];
pev(bullet,pev_velocity,vel);
vel[0] /= 5.0;
vel[1] /= 5.0;
vel[2] /= 5.0;
set_pev(bullet, pev_velocity, vel);
if (!is_user_alive(ent)) //make damage to world stuff
ExecuteHam(Ham_TakeDamage, ent, owner, owner, get_pcvar_float(damage), 10);
return FMRES_IGNORED;
}
}
//The bullet hits or bounces
if (IsPlayer(ent)) //make damage
{
if (owner == ent || pev(ent, pev_takedamage) == DAMAGE_NO)
return FMRES_IGNORED;
if (get_user_team(owner) == get_user_team(ent))
if (!get_pcvar_num(friendlyfire))
return FMRES_IGNORED;
if (hit != 0 && !equali(class, "pbHarmlessBullet")){
if(ochronka[ent] == 0)
{
ExecuteHam(Ham_TakeDamage, ent, owner, owner, get_pcvar_float(damage), 4098);
}
else
{
if (get_pcvar_num(gravity)){
new Float:vel[3];
pev(bullet,pev_velocity,vel);
vel[0] /= 10.0;
vel[1] /= 10.0;
vel[2] /= 10.0;
set_pev(bullet, pev_velocity, vel);
}
set_pev(bullet, pev_classname, "pbHarmlessBullet");
ochronka[ent]--
return FMRES_IGNORED;
}
}
}
if (!equali(class2, "pbBullet")&&!equali(class2, "pbHarmlessBullet"))
if (hit != 0 || !get_pcvar_num(pellets_real))
{ //stop the pellet and make a splat
set_pev(bullet, pev_velocity, Float:{0.0, 0.0, 0.0});
set_pev(bullet, pev_classname, "pbPaint");
set_pev(bullet, pev_solid, 0);
set_pev(bullet, pev_movetype, 0);
engfunc(EngFunc_SetModel, bullet, "sprites/paintball.spr");
new a, findpb = 0;
while (a++ < g_pbcount && !findpb)
if (g_paintballs[a] == bullet)
findpb = g_pbstatus[a] = 2;
remove_task(bullet);
remove_task(bullet+TASK_PB_RESET);
if (get_pcvar_num(sound))
{
static wav[20];
formatex(wav, 20, is_user_alive(ent) ? "player/pl_pain%d.wav" : "misc/pb%d.wav", is_user_alive(ent) ? random_num(4,7) : random_num(1,4));
emit_sound(bullet, CHAN_AUTO, wav, 1.0, ATTN_NORM, 0, PITCH_NORM);
}
new bool:valid_surface = (IsPlayer(ent) || containi(class2, "door") != -1) ? false : true;
if (pev(ent, pev_health) && !IsPlayer(ent))
{
ExecuteHam(Ham_TakeDamage, ent, owner, owner, float(pev(ent, pev_health)), 0);
valid_surface = false;
}
if (valid_surface)
{
paint_splat(bullet);
set_task(float(get_pcvar_num(blife)), "paint_reset", bullet+TASK_PB_RESET);
}
else
paint_reset(bullet+TASK_PB_RESET);
return FMRES_HANDLED;
}else
{ //the pellet bounces, reduce its speed
if (get_pcvar_num(gravity)){
new Float:vel[3];
pev(bullet,pev_velocity,vel);
vel[0] /= 10.0;
vel[1] /= 10.0;
vel[2] /= 10.0;
set_pev(bullet, pev_velocity, vel);
}
//A bullet that bounces becomes harmless to players
set_pev(bullet, pev_classname, "pbHarmlessBullet");
return FMRES_IGNORED;
}
/*else
{
paint_reset(bullet+TASK_PB_RESET);
return FMRES_HANDLED;
}
*/
#if defined DEBUG
log_to_file("paintballgun.log", "paint_fire post");
#endif
return FMRES_IGNORED;
}
Dzięki i cześć.
Dopisywałem -dev, i nadal nic poza przepelnieniem bufora wiadomości, który udało mi się już naprawić.
Na serwerze znajduje się tylko pb oraz amxbans, który nie może powodować błędów (jest na 3 innych serwerach.)
Użytkownik NoLiFeR edytował ten post 26.11.2015 17:09


Dodatki SourceMod












