
Uwaga! Wymagana znajomość pojęcia "kompilacja lokalna". Jeżeli nie wiesz, co to jest, odwiedź ten temat - http://amxx.pl/topic...ilowac-pluginy/
1. Otwieramy plik QTM_CodMod.sma.
2. Do zmiennych globalnych dodajemy:
new awanse[MAX_ILOSC_KLAS+1][3], awansuje_do[MAX_ILOSC_KLAS+1], awansuje_z[MAX_ILOSC_KLAS+1];
new ilosc_awansow;
3. Na koniec pliku dopisujemy:
public ZarejestrujAwans(plugin, params)
{
if(params != 9)
return PLUGIN_CONTINUE;
if(++ilosc_klas > MAX_ILOSC_KLAS)
return -1;
pluginy_klas[ilosc_klas] = plugin;
new awans_z = get_param(1);
awansuje_do[awans_z] = ilosc_klas;
awansuje_z[ilosc_klas] = awans_z;
ilosc_awansow++;
awanse[ilosc_awansow][1] = ilosc_klas;
awanse[ilosc_awansow][0] = awans_z;
awanse[ilosc_awansow][2] = get_param(2);
get_string(3, nazwy_klas[ilosc_klas], MAX_WIELKOSC_NAZWY);
get_string(4, opisy_klas[ilosc_klas], MAX_WIELKOSC_OPISU);
bronie_klasy[ilosc_klas] = get_param(5);
zdrowie_klas[ilosc_klas] = get_param(6);
kondycja_klas[ilosc_klas] = get_param(7);
inteligencja_klas[ilosc_klas] = get_param(8);
wytrzymalosc_klas[ilosc_klas] = get_param(9);
return ilosc_klas;
}
public ZnajdzAwans(Z, Do)
{
new Return;
for(new i=1; i<=ilosc_awansow; i++)
{
if(awanse[i][0] == Z && awanse[i][1] == Do)
{
Return = i;
break;
}
}
return Return;
}
public JestAwansem(klasa)
{
new bool:jest;
for(new i=1; i<=ilosc_awansow; i++)
{
if(awanse[i][1] == klasa)
{
jest = true;
break;
}
}
return jest;
}
4. Do publica plugin_natives dodajemy:
register_native("cod_register_advance", "ZarejestrujAwans");
5. Zmieniamy public WybierzKlase na:
public WybierzKlase(id)
{
new menu = menu_create("Wybierz klase:", "WybierzKlase_Handle");
new klasa[50], dana_klasa, numer[10];
for(new i=1; i <= ilosc_klas; i++)
{
if(JestAwansem(i))
continue;
WczytajDane(id, i);
dana_klasa = i;
for(;
{
if(awansuje_do[dana_klasa] && poziom_gracza[id] >= awanse[ZnajdzAwans(dana_klasa, awansuje_do[dana_klasa])][2])
{
dana_klasa = awansuje_do[dana_klasa];
WczytajDane(id, dana_klasa);
}
else break;
}
formatex(klasa, charsmax(klasa), "%s \yPoziom: %i", nazwy_klas[dana_klasa], poziom_gracza[id]);
num_to_str(dana_klasa, numer, 9);
menu_additem(menu, klasa, numer);
}
WczytajDane(id, klasa_gracza[id]);
menu_setprop(menu, MPROP_EXITNAME, "Wyjdz");
menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona");
menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona");
menu_display(id, menu);
client_cmd(id, "spk QTM_CodMod/select");
}
6. Zmieniamy public WybierzKlase_Handle na:
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], name[65], acces, callback
menu_item_getinfo(menu, item, acces, data, 64, name, 64, 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;
}
7. W publicu SprawdzPoziom, po ZapiszDane(id), dopisujemy:
if(awansuje_do[klasa_gracza[id]])
{
if(poziom_gracza[id] >= awanse[ZnajdzAwans(klasa_gracza[id], awansuje_do[klasa_gracza[id]])][2])
{
set_hudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0);
ShowSyncHudMsg(id, SyncHudObj2,"Osiagajac poziom %i, awansowales do klasy %s!", poziom_gracza[id], nazwy_klas[awansuje_do[klasa_gracza[id]]]);
nowa_klasa_gracza[id] = awansuje_do[klasa_gracza[id]];
UstawNowaKlase(id);
DajBronie(id);
ZastosujAtrybuty(id);
ZapiszDane(id);
}
}
Jeżeli chcesz, aby na nową klasę przechodził poziom, exp, statystyki itd., zastąp w/w funkcję tą:
if(awansuje_do[klasa_gracza[id]])
{
if(poziom_gracza[id] >= awanse[ZnajdzAwans(klasa_gracza[id], awansuje_do[klasa_gracza[id]])][2])
{
set_hudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0);
ShowSyncHudMsg(id, SyncHudObj2,"Osiagajac poziom %i, awansowales do klasy %s!", poziom_gracza[id], nazwy_klas[awansuje_do[klasa_gracza[id]]]);
new temp_int = inteligencja_gracza[id], temp_zdr = zdrowie_gracza[id], temp_kon = kondycja_gracza[id], temp_wyt = wytrzymalosc_gracza[id], temp_exp = doswiadczenie_gracza[id], temp_lvl = poziom_gracza[id];
nowa_klasa_gracza[id] = awansuje_do[klasa_gracza[id]];
UstawNowaKlase(id);
poziom_gracza[id] = temp_lvl;
doswiadczenie_gracza[id] = temp_exp;
wytrzymalosc_gracza[id] = temp_wyt;
zdrowie_gracza[id] = temp_zdr;
kondycja_gracza[id] = temp_kon;
inteligencja_gracza[id] = temp_int;
punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id];
DajBronie(id);
ZastosujAtrybuty(id);
ZapiszDane(id);
}
}
8. Zapisujemy i kompilujemy plik. Otwieramy plik include/codmod.inc. Dopisujemy na koniec tego pliku to, a następnie go zapisujemy:
native cod_register_advance(z_klasy, od_levela, const nazwa[], const opis[], bronie, punkty_zdrowia, punkty_kondycji, punkty_inteligencji, punkty_wytrzymalosci);
9. Wszystko jest już gotowe, ale nie mamy zdefiniowanych żadnych awansów. Teraz się tym zajmiemy. Zacznę od omówienia parametrów natywu cod_register_advance.
z_klasy - id klasy, która ma awansować w tą klasę, od_levela - wymagany level do awansu, Reszta parametrów nie różni się od tych z cod_register_class10. Klasę, w którą będzie się awansować tworzymy praktycznie tak samo, jak zwykłą. Musimy tylko użyć natywu cod_register_advance, zamiast cod_register_class. Użycie natywu wygląda tak:
cod_register_advance(cod_get_classid("Snajper"), 60, nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
I teraz w stworzoną przez nas klasę, będzie awansować inna klasa - Snajper, po osiągnięciu 60 poziomu. A to plik .sma przykładowej klasy - Elitarnego Snajpera:


Gotowiec:


Dodatki/alternatywne wersje:
- Wersja kompatybilna z frakcjami DarkGL'a - http://amxx.pl/topic...post__p__262120
- Klasy nie awansują, ale odblokowywują się po osiągnięciu danego poziomu na danej klasie - http://amxx.pl/topic...post__p__259522
- Klasy nie awansują, ale odblokowywują się po osiągnięciu danego poziomu na danej klasie (jeżeli mamy wgrane frakcje) - http://amxx.pl/topic...post__p__262954
- Informacje o awansach w menu /klasy - http://amxx.pl/topic...post__p__263164
Mam nadzieję, że coś zrozumieliście i nie będziecie mieli problemów ze zrobieniem tego na swoim CoD'zie

Użytkownik Goliath edytował ten post 10.09.2011 09:55