Kilka "perków"
ChrisN
11.06.2018
Witam, mam pewny mały pomysł na coda tylko mam takie pytanie, czy dało by rade zrobić około 12 "slotów na perk", które by miały swoje odpowiedniki? W sensie było by te 12 configów i każdy slot na perk miałby swoje odpowiednio przypisane perki, dało by rade takie coś zrobić? Mógł by ktoś zapodać jakiś przykład jak by to rozkminiać jeśli się da.
ChrisN
11.06.2018
Pytasz o gotowy kod, czy o pomysł jak to napisać i napiszesz sam?
Pomysł, myślałem o tym by zajrzeć w kod silnika który ma dwa perki i go "powielić" tylko nie mam zielonego pojęcia jak rozdzielić perki na swoje sloty
ChrisN
13.06.2018
ref, albo jak by zablokować bądź dać możliwość dropnięcia danego perku na dany slot bez plików .ini? Po prostu bym je dopisał normalnie do plugins-codmod, tylko nie wiem jak by je zablokować na dany slot.
AwIlL^^
13.06.2018
Wtedy w cod_register_perk dodać kolejny parametr, który by opisywał, na który slot jest dany perk.
I wtedy w UstawPerk zamiast z góry narzucać na jaki slot ma być perk, by normalnie losowało po czy wczytywało, na który slot jest i w ten slot wrzucało perka.
Wada tego rozwiązania:
Zdarzało by się czasem tak, że nie dawało by perku.
ChrisN
14.06.2018
Możesz dodać kolejną właściwość perku - slot.
Wtedy w cod_register_perk dodać kolejny parametr, który by opisywał, na który slot jest dany perk.
I wtedy w UstawPerk zamiast z góry narzucać na jaki slot ma być perk, by normalnie losowało po czy wczytywało, na który slot jest i w ten slot wrzucało perka.
Wada tego rozwiązania:
Zdarzało by się czasem tak, że nie dawało by perku.
A gdyby tak zduplikować kod ustawiania perku X razy i w każdym zmienić zmienne, w sensie pododawać do nich slot1, slot2 itd? Potem dodać nowe natywy, i w .sma perku ustalać z góry do którego slotu należy perk? Zadziałało by, czy ten sam problem by był jak opisałeś wyżej z nowym parametrem dla perku.
btw, od czego jest ten static "obroty"? Nigdy się nie zagłębiałem tak głęboko w kod, coda
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; new forward_handle = CreateOneForward(pluginy_perkow[perk_gracza[id]], "cod_perk_disabled", FP_CELL, FP_CELL); ExecuteForward(forward_handle, ret, id, perk); DestroyForward(forward_handle); perk_gracza[id] = 0; 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; } ExecuteForward(perk_zmieniony, ret, id, perk, wartosc); 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; }
Użytkownik chrisN edytował ten post 14.06.2018 14:25
AwIlL^^
14.06.2018
problem głównie polega na tym, że masz listę peków, które są na różne sloty i nie są posortowane.
szukanie perku na dany slot chwilę trwa, a jak zrobisz losowanie perku po czym wczytywanie slotu to może kilka razy wylosować slot, na którym masz już perk,
a takiego czegoś by się nie chciało i losowało kolejny raz.
i tak 5 razy jak wskazuje zmienna 'obroty'
Ta zmienna zapewnia, że funkcja wykona się maksymalnie 5 razy, w innym przypadku przeciążyłoby serwer.
A raczej takie założenie jest, że ma się wykonać maksymalnie 5 razy bo z tego co widzę z kodu nic nie wynika, że nie może wykonać się nawet milion razy... (źle napisany kod).
ChrisN
14.06.2018
problem głównie polega na tym, że masz listę peków, które są na różne sloty i nie są posortowane.
szukanie perku na dany slot chwilę trwa, a jak zrobisz losowanie perku po czym wczytywanie slotu to może kilka razy wylosować slot, na którym masz już perk,a takiego czegoś by się nie chciało i losowało kolejny raz.
i tak 5 razy jak wskazuje zmienna 'obroty'
Ta zmienna zapewnia, że funkcja wykona się maksymalnie 5 razy, w innym przypadku przeciążyłoby serwer.
A raczej takie założenie jest, że ma się wykonać maksymalnie 5 razy bo z tego co widzę z kodu nic nie wynika, że nie może wykonać się nawet milion razy... (źle napisany kod).
Z tego co widzę, to ta funkcja odpowiada za losowanie perku tak?
perk = (perk == -1)? random_num(1, ilosc_perkow): perk;
Jak by tak jednak zastosować te pliki .ini i losować perki między właśnie tymi plikami? I wtedy by się to jakoś ograniczyło if(perk = slot1){blalblabla}
ChrisN
14.06.2018
Teraz tak patrze na 2 sloty z perków cypisa, i tak myślę jak by to dodac do kodu perka by był możliwy do zdobycia tylko dla "lp = 1" mhm
ChrisN
14.06.2018
Próbowałem przez cod_set_user_perk(id, 0, 1) nadać wartość 1 dla lp ale coś źle robie bo nie działa ;/