←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
Kilka "perków"

  • +
  • -
ChrisN - zdjęcie 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.

Odpowiedz

  • +
  • -
Robiin - zdjęcie Robiin 11.06.2018

Pytasz o gotowy kod, czy o pomysł jak to napisać i napiszesz sam?

 

Odpowiedz

  • +
  • -
ChrisN - zdjęcie 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

Odpowiedz

  • +
  • -
ChrisN - zdjęcie 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.

Odpowiedz

  • +
  • -
AwIlL^^ - zdjęcie AwIlL^^ 13.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.
Odpowiedz

  • +
  • -
ChrisN - zdjęcie 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 :D

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
Odpowiedz

  • +
  • -
AwIlL^^ - zdjęcie 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).

Odpowiedz

  • +
  • -
ChrisN - zdjęcie 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}

Odpowiedz

  • +
  • -
ChrisN - zdjęcie 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

Odpowiedz

  • +
  • -
ChrisN - zdjęcie 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 ;/

Odpowiedz