Przy zwracaniu COD_STOP w funkcji cod_perk_changed silnik CodModa nie wywoływał dodatkowo cod_perk_disabled, przez co przy używaniu zwracaniu tego COD_STOP'a, gracz mógł mieć kilka perków jednocześnie (nie wiedząc o tym). Podobnie było w cod_class_changed. Dodałem też poprawkę dot. wartości perku, (zamieniłem pewne < na >) oraz poprawki kosmetyczne. Całość nie obciąża dodatkowo serwera, a pomaga mu ![]()
1. Podmień public UstawPerk na
public UstawPerk(id, perk, wartosc, pokaz_info)
{
if(!ilosc_perkow)
return PLUGIN_CONTINUE;
static obroty[33];
if(obroty[id]++ >= 5)
{
UstawPerk(id, 0, 0, 0);
obroty[id] = 0;
return PLUGIN_CONTINUE;
}
perk = (perk == -1)? random_num(1, ilosc_perkow): perk;
wartosc = (wartosc == -1 || min_wartosci_perkow[perk] < wartosc || wartosc > max_wartosci_perkow[perk])? random_num(min_wartosci_perkow[perk], max_wartosci_perkow[perk]): wartosc;
new ret;
ExecuteForward(perk_zmieniony, ret, id, perk, wartosc);
if(ret == 4)
{
UstawPerk(id, -1, -1, 1);
return PLUGIN_CONTINUE;
}
new forward_handle = CreateOneForward(pluginy_perkow[perk_gracza[id]], "cod_perk_disabled", FP_CELL, FP_CELL);
ExecuteForward(forward_handle, ret, id, perk_gracza[id]);
DestroyForward(forward_handle);
forward_handle = CreateOneForward(pluginy_perkow[perk], "cod_perk_enabled", FP_CELL, FP_CELL, FP_CELL);
ExecuteForward(forward_handle, ret, id, wartosc, perk);
DestroyForward(forward_handle);
if(ret == 4)
{
UstawPerk(id, -1, -1, 1);
return PLUGIN_CONTINUE;
}
perk_gracza[id] = perk;
wartosc_perku_gracza[id] = wartosc;
obroty[id] = 0;
if(pokaz_info && perk_gracza[id])
client_print(id, print_chat, "[COD:MW] Zdobyles %s", nazwy_perkow[perk_gracza[id]]);
return PLUGIN_CONTINUE;
}
2. Zamień public UstawNowaKlase na
public UstawNowaKlase(id)
{
new ret;
ExecuteForward(klasa_zmieniona, ret, id, klasa_gracza[id]);
if(ret == 4)
{
klasa_gracza[id] = 0;
return PLUGIN_CONTINUE;
}
new forward_handle = CreateOneForward(pluginy_klas[klasa_gracza[id]], "cod_class_disabled", FP_CELL, FP_CELL);
ExecuteForward(forward_handle, ret, id, klasa_gracza[id]);
DestroyForward(forward_handle);
forward_handle = CreateOneForward(pluginy_klas[nowa_klasa_gracza[id]], "cod_class_enabled", FP_CELL, FP_CELL);
ExecuteForward(forward_handle, ret, id, nowa_klasa_gracza[id]);
DestroyForward(forward_handle);
if(ret == 4)
{
klasa_gracza[id] = 0;
return PLUGIN_CONTINUE;
}
klasa_gracza[id] = nowa_klasa_gracza[id];
nowa_klasa_gracza[id] = 0;
UstawPerk(id, perk_gracza[id], wartosc_perku_gracza[id], 0);
WczytajDane(id, klasa_gracza[id]);
return PLUGIN_CONTINUE;
}


Dodatki SourceMod















