←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
Pytanie dotyczące frkacji

  • +
  • -
1stADXionC's Photo 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.

Quote

  • +
  • -
Linux''s Photo Linux' 18.03.2017

Tak, istnieje taka możliwość.

Quote

  • +
  • -
1stADXionC's Photo 1stADXionC 18.03.2017

Tak, istnieje taka możliwość.

 

A mógłbyś mnie nakierować jak to zrobić? 

Quote

  • +
  • -
1stADXionC's Photo 1stADXionC 18.03.2017

Nie mogłem edytować.

Quote

  • +
  • -
1stADXionC's Photo 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;
}
Quote

  • +
  • -
Linux''s Photo 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ć.

Quote

  • +
  • -
1stADXionC's Photo 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.
Quote