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; }