zathon - 2011-04-16 16:14:21

Witam
poradnik napisany w szkole także będę go jeszcze poprawiał ;)
pokaże tu dwa sposoby dodania frakcji do nowego coda
I sposób jest bardziej czasochłonny ale daje potem łatwiejszą rozbudowę (chyba)
II sposób jest chyba prostszy ale tylko chyba ;)

I sposób
Spoiler

1.Edytujemy plik codmod.inc
W pliku codmod.inc znajdujemy linijkę

native cod_register_class(const nazwa[], const opis[], bronie, punkty_zdrowia, punkty_kondycji, punkty_inteligencji, punkty_wytrzymalosci);


zamieniamy ją na

native cod_register_class(const nazwa[], const opis[], bronie, punkty_zdrowia, punkty_kondycji, punkty_inteligencji, punkty_wytrzymalosci,const frakcja[]);


2.Edytujemy plik QTM_CodMod.sma
W zmiennych globalnych dodajemy

#define MAX_WIELKOSC_FRAKCJA 64
new frakcja_klas[MAX_ILOSC_KLAS+1][MAX_WIELKOSC_FRAKCJA+1]


Szukamy funkcji ZarejestrujKlase i podmieniamy ją na to ponizej

public ZarejestrujKlase(plugin, params)
{
        if(params != 8)
        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);
        get_string(8, frakcja_klas[ilosc_klas], MAX_WIELKOSC_FRAKCJA);
       
        return ilosc_klas;
}


Szukamy funkcji WybierzKlase usuwamy ją , szukamy funkcji WybierzKlase_Handle usuwamy ją zamiast nich wklejamy
Spoiler

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 WybierzKlase(id)
{
        new menu = menu_create("Wybierz klase:", "WybierzKlase_Frakcje");
        for(new i=1; i <= ilosc_klas; i++)
        {
                if(!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;
}




dobrze teraz jak ustawiamy klasom frakcje ano szukamy w sma klas (posłuże się komandosem)
cod_register_class
u mnie wygląda to tak

cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);


a frakcje dodamy prosto

cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc,"Amerykanie");


od teraz komandos jest w frakcji amerykanie kompilujemy i wrzucamy zmieniony plug :)
napisałem że jest to czasochłonna metoda ponieważ trzeba edytować każda klase z osobną ale jak kto lubi ;)




II sposób
Spoiler

1.Edytujemy plik QTM_CodMod.sma
W zmiennych globalnych dodajemy

#define MAX_WIELKOSC_FRAKCJA 64
new frakcja_klas[MAX_ILOSC_KLAS+1][MAX_WIELKOSC_FRAKCJA+1]


Szukamy funkcji ZarejestrujKlase
pokaże jak dodać frakcje jednej klasie z resztą postąpicie tak samo
po
wytrzymalosc_klas[ilosc_klas] = get_param(7);
dodajemy

if(equali(nazwy_klas[ilosc_klas],"Komandos")){
                frakcja_klas[ilosc_klas] = "Amerykanie";
}


czyli
Spoiler

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);
        if(equali(nazwy_klas[ilosc_klas],"Komandos")){
                frakcja_klas[ilosc_klas] = "Amerykanie";
        }
        return ilosc_klas;
}



z innymi klasami postępujecie tak samo

Szukamy funkcji WybierzKlase usuwamy ją , szukamy funkcji WybierzKlase_Handle usuwamy ją zamiast nich wklejamy
Spoiler

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 WybierzKlase(id)
{
        new menu = menu_create("Wybierz klase:", "WybierzKlase_Frakcje");
        for(new i=1; i <= ilosc_klas; i++)
        {
                if(!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;
}


napisałem że ten jest mniej czasochłonny ponieważ edytujemy tylko jeden plik a nie kilkanaście :)

www.rksursus.pun.pl www.najlepszeseriale.pun.pl www.klan-cs-menele.pun.pl www.mibmnst.pun.pl www.swiat-bakugan.pun.pl