Opiszę tu błąd:
Stając na bloku dostaje wyznaczoną wcześniej szybkość[zgodnie z properties]. Fajnie jest, czas się kończy, lecz!!:
- Blok się nie resetuje ( tzn nie moge wziąźć butów poraz drugi. Gdy normalnie ich cooldown dochodzi do zera i się resetują, to w moim przypadku są wartości ujemne. Np. -32 sekundy... )
- Dodatkowo zmieniając broń ( gdy się skończy ważność butów ) znowu dostaję taką szybkość, jak z butami i to do końca rundy!
Czy można coś poradzić?
oto ze źródła:
ActionBootsOfSpeed(id, ent)
{
new Float:gametime = get_gametime();
if ( !g_boots_of_speed[id] )
{
static property[5];
GetProperty(ent, 3, property);
entity_set_float(id, EV_FL_maxspeed, str_to_float(property));
g_boots_of_speed[id] = ent;
emit_sound(id, CHAN_STATIC, g_sound_boots_of_speed, 1.0, ATTN_NORM, 0, PITCH_NORM);
static Float:time_out;
GetProperty(ent, 1, property);
time_out = str_to_float(property);
set_task(time_out, "TaskRemoveBootsOfSpeed", TASK_BOOTSOFSPEED + id, bcm_none, 0, bcm_ab, 1);
static Float:delay;
GetProperty(ent, 2, property);
delay = str_to_float(property);
g_boots_of_speed_time_out[id] = gametime + time_out;
g_boots_of_speed_next_use[id] = gametime + time_out + delay;
}
else if ( !g_has_hud_text[id] )
{
set_hudmessage(168, 230, 29, gfTextX, gfTextY, gHudEffects, gfHudFxTime, gfHudHoldTime, gfHudFadeInTime, gfHudFadeOutTime, gHudChannel);
show_hudmessage(id, "Boots Of Speed^nNext Use %.1f", g_boots_of_speed_next_use[id] - gametime);
}
}
public TaskRemoveBootsOfSpeed(id)
{
id -= TASK_BOOTSOFSPEED;
if ( !g_alive[id] ) return PLUGIN_HANDLED;
if ( g_ice[id] )
{
entity_set_float(id, EV_FL_maxspeed, 400.0);
}
else if ( g_honey[id] )
{
static block, property1[5];
block = g_honey[id];
GetProperty(block, 1, property1);
entity_set_float(id, EV_FL_maxspeed, str_to_float(property1));
}
else
{
ResetMaxspeed(id);
}
return PLUGIN_HANDLED;
}
Jeżeli ktoś miał podobny problem to bardzo proszę o pomoc. Moje wdzięczności do tego kto pomoże będą ogromne. :[
Daje dla porównania funkcję działającą ( niewidzialność )
ActionStealth(id, ent)
{
new Float:gametime = get_gametime();
if ( gametime >= g_stealth_next_use[id] )
{
static property[5];
set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransColor, 0);
emit_sound(id, CHAN_STATIC, g_sound_stealth, 1.0, ATTN_NORM, 0, PITCH_NORM);
g_block_status[id] = true;
static Float:time_out;
GetProperty(ent, 1, property);
time_out = str_to_float(property);
set_task(time_out, "TaskRemoveStealth", TASK_STEALTH + id, bcm_none, 0, bcm_ab, 1);
static Float:delay;
GetProperty(ent, 2, property);
delay = str_to_float(property);
g_stealth_time_out[id] = gametime + time_out;
g_stealth_next_use[id] = gametime + time_out + delay;
}
else if ( !g_has_hud_text[id] )
{
set_hudmessage(168, 230, 29, gfTextX, gfTextY, gHudEffects, gfHudFxTime, gfHudHoldTime, gfHudFadeInTime, gfHudFadeOutTime, gHudChannel);
show_hudmessage(id, "Stealth^nNext Use %.1f", g_stealth_next_use[id] - gametime);
}
}
public TaskRemoveStealth(id)
{
id -= TASK_STEALTH;
if ( g_connected[id] )
{
if ( get_gametime() <= g_invincibility_time_out[id] )
{
set_user_rendering(id, kRenderFxGlowShell, 255, 255, 255, kRenderTransColor, 16);
}
else
{
set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 255);
}
}
return PLUGIN_HANDLED;
}
Użytkownik ^Grzyboo edytował ten post 09.03.2011 19:37