Pytanie dotyczące frkacji
1stADXionC
17.03.2017
Witam.
Czy jest możliwość zrobić frakcje x2, tzn:
Gdy gracz wpisze /klasa otwiera się menu:
Frkacje1:
1. NazwaFrakcji
2. NazwaFrakcji
Po wybraniu opcji, kolejne menu:
Frakcje2:
1. NazwaFrakcji
2. NazwaFrakcji
Po wybraniu opcji, wyświetla się lista klas.
1stADXionC
18.03.2017
Nie mogłem edytować.
#define MAX_WIELKOSC_FRAKCJA 64 new frakcja_klas[MAX_ILOSC_KLAS+1][MAX_WIELKOSC_FRAKCJA+1]; new nazwa_klasy[MAX_ILOSC_KLAS+1][64]; new nazwa_frakcji[MAX_ILOSC_KLAS+1][64]; new klasid;
public loadfile() { new file[256]; get_configsdir(file,charsmax(file)); formatex(file, charsmax(file), "%s/cod_frakcje.ini", file); if(!file_exists(file)) return; new row[128], trash, size=file_size(file,1); for(new i=0;i<size;i++) { read_file(file, i, row, charsmax(row), trash); if((contain(row,";")!=0) && strlen(row) && klasid<MAX_ILOSC_KLAS+1) { replace(row, charsmax(row), "[klasa]", ""); split(row, nazwa_klasy[klasid], charsmax(nazwa_klasy[]), nazwa_frakcji[klasid], charsmax(nazwa_frakcji[]), "[frakcja]"); klasid++; } } }
Tak wyglądają moje frakcje
public ZarejestrujKlase(plugin, params) { if(params != 7) return PLUGIN_CONTINUE; if(++ilosc_klas > MAX_ILOSC_KLAS) return -1; pluginy_klas[ilosc_klas] = plugin; get_string(1, nazwy_klas[ilosc_klas], MAX_WIELKOSC_NAZWY); get_string(2, opisy_klas[ilosc_klas], MAX_WIELKOSC_OPISU); bronie_klasy[ilosc_klas] = get_param(3); zdrowie_klas[ilosc_klas] = get_param(4); kondycja_klas[ilosc_klas] = get_param(5); inteligencja_klas[ilosc_klas] = get_param(6); wytrzymalosc_klas[ilosc_klas] = get_param(7); for(new i=0;i<klasid;i++){ if(equali(nazwy_klas[ilosc_klas],nazwa_klasy[i])){ frakcja_klas[ilosc_klas] = nazwa_frakcji[i]; } } return ilosc_klas; }
public WybierzKlase(id) { new menu = menu_create("Wybierz klase:", "WybierzKlase_Frakcje"); for(new i=1; i <= ilosc_klas; i++) { if(!equal(frakcja_klas[i],"") && !is_in_previous(frakcja_klas[i],i)){ menu_additem(menu,frakcja_klas[i],frakcja_klas[i]) } } menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona"); menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona"); menu_display(id, menu); } public WybierzKlase_Frakcje(id, menu, item) { if(item == MENU_EXIT){ menu_destroy(menu); return PLUGIN_CONTINUE; } new data[65], iName[64] new acces, callback menu_item_getinfo(menu, item, acces, data,64, iName, 63, callback) new menu2 = menu_create("Wybierz klase:", "WybierzKlase_Handle"); new klasa[50],szTmp[5]; for(new i=1; i <= ilosc_klas; i++) { if(equali(data,frakcja_klas[i])){ WczytajDane(id, i); format(klasa, charsmax(klasa), "%s \yPoziom: %i", nazwy_klas[i], poziom_gracza[id]); num_to_str(i,szTmp,charsmax(szTmp)); menu_additem(menu2, klasa, szTmp); } } WczytajDane(id, klasa_gracza[id]); menu_setprop(menu2, MPROP_EXITNAME, "Wyjdz"); menu_setprop(menu2, MPROP_BACKNAME, "Poprzednia strona"); menu_setprop(menu2, MPROP_NEXTNAME, "Nastepna strona"); menu_display(id, menu2); client_cmd(id, "spk QTM_CodMod/select"); menu_destroy(menu); return PLUGIN_CONTINUE; } public WybierzKlase_Handle(id, menu, item) { client_cmd(id, "spk QTM_CodMod/select"); if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_CONTINUE; } new data[65], iName[64] new acces, callback menu_item_getinfo(menu, item, acces, data,64, iName, 63, callback) item = str_to_num(data); if(item == klasa_gracza[id] && !nowa_klasa_gracza[id]) return PLUGIN_CONTINUE; nowa_klasa_gracza[id] = item; if(klasa_gracza[id]) client_print(id, print_chat, "[COD:MW] Klasa zostanie zmieniona w nastepnej rundzie."); else { UstawNowaKlase(id); DajBronie(id); ZastosujAtrybuty(id); } return PLUGIN_CONTINUE; } public bool:is_in_previous(frakcja[],from){ for(new i = from - 1;i>=1;i--){ if(equali(frakcja_klas[i],frakcja)){ return true; } } return false; }
Linux'
19.03.2017
Większość zmian wygląda identycznie jak przy wprowadzaniu zwykłych frakcji. Tworzysz te same zmienne, dodajesz je do zarejestrowania oraz przypisania poszczególnym klasą. Jedynie różnicą będzie edycja wyboru klas. Gdy znajdę chwilę postaram się coś napisać.
1stADXionC
19.03.2017
Większość zmian wygląda identycznie jak przy wprowadzaniu zwykłych frakcji. Tworzysz te same zmienne, dodajesz je do zarejestrowania oraz przypisania poszczególnym klasą. Jedynie różnicą będzie edycja wyboru klas. Gdy znajdę chwilę postaram się coś napisać.
czekam z niecierpliwością
Mam kod, gdzie frakcję są ładnie wyświetlane lecz nie wyświetla klasy, a o to kod:
public bool:is_in_previous(frakcja[], from) { for(new i = from - 1;i>=1;i--) { if(equali(frakcja_klas[i],frakcja)) { return true; } } return false; } public bool:is_in_previous2(frakcja2[], from) { for(new i = from - 1;i>=1;i--) { if(equali(frakcja_klas_nr2[i],frakcja2)) { return true; } } return false; } public WybierzKlase(id) { new menu = menu_create("Wybierz klase:", "WybierzKlaseDwa"); for(new i=1; i <= ilosc_klas; i++) { if(!equal(frakcja_klas[i],"") && !is_in_previous(frakcja_klas[i],i)) { menu_additem(menu,frakcja_klas[i],frakcja_klas[i]) } } menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona"); menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona"); menu_display(id, menu); } public WybierzKlaseDwa(id) { new menu = menu_create("Wybierz klase2:", "WybierzKlase_Frakcje"); for(new i=1; i <= ilosc_klas; i++) { if(!equal(frakcja_klas_nr2[i],"") && !is_in_previous2(frakcja_klas_nr2[i],i)) { menu_additem(menu,frakcja_klas_nr2[i],frakcja_klas_nr2[i]) } } menu_setprop(menu, MPROP_EXITNAME, "Wyjdz"); menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona"); menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona"); menu_display(id, menu); } public WybierzKlase_Frakcje(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_CONTINUE; } new data[65], iName[64] new acces, callback menu_item_getinfo(menu, item, acces, data,64, iName, 63, callback) new menu2 = menu_create("Wybierz klase:", "WybierzKlase_Handle"); new klasa[50],szTmp[5]; for(new i=1; i <= ilosc_klas; i++) { if(equali(data,frakcja_klas[i])) { WczytajDane(id, i); format(klasa, charsmax(klasa), "%s \yPoziom: %i", nazwy_klas[i], poziom_gracza[id]); num_to_str(i,szTmp,charsmax(szTmp)); menu_additem(menu2, klasa,szTmp); } } WczytajDane(id, klasa_gracza[id]); menu_setprop(menu2, MPROP_EXITNAME, "Wyjdz"); menu_setprop(menu2, MPROP_BACKNAME, "Poprzednia strona"); menu_setprop(menu2, MPROP_NEXTNAME, "Nastepna strona"); menu_display(id, menu2); menu_destroy(menu); return PLUGIN_CONTINUE; } public WybierzKlase_Handle(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_CONTINUE; } new data[65], iName[64] new acces, callback menu_item_getinfo(menu, item, acces, data,64, iName, 63, callback) item = str_to_num(data); if(item == klasa_gracza[id] && !nowa_klasa_gracza[id]) return PLUGIN_CONTINUE; nowa_klasa_gracza[id] = item; if(klasa_gracza[id]) client_print(id, print_chat, "[COD:MW] Klasa zostanie zmieniona w nastepnej rundzie."); else { UstawNowaKlase(id); DajBronie(id); ZastosujAtrybuty(id); } return PLUGIN_CONTINUE; }
A dokładnie tylko to menu się nie wyświetla:
public WybierzKlase_Frakcje(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_CONTINUE; } new data[65], iName[64] new acces, callback menu_item_getinfo(menu, item, acces, data,64, iName, 63, callback) new menu2 = menu_create("Wybierz klase : ", "WybierzKlase_Handle"); new klasa[50],szTmp[5]; for(new i=1; i <= ilosc_klas; i++) { if(equali(data,frakcja_klas[i])) { WczytajDane(id, i); format(klasa, charsmax(klasa), "%s \yPoziom: %i", nazwy_klas[i], poziom_gracza[id]); num_to_str(i,szTmp,charsmax(szTmp)); menu_additem(menu2, klasa,szTmp); } } WczytajDane(id, klasa_gracza[id]); menu_setprop(menu2, MPROP_EXITNAME, "Wyjdz"); menu_setprop(menu2, MPROP_BACKNAME, "Poprzednia strona"); menu_setprop(menu2, MPROP_NEXTNAME, "Nastepna strona"); menu_display(id, menu2); menu_destroy(menu); return PLUGIN_CONTINUE; }
Edited by 1stADXionC, 19.03.2017 16:53.