Naprawa natywu cod_get_user_perk
Goliath
14.09.2011
Sporo czasu temu zauważyłem, że natyw cod_get_user_perk nie działa do końca jak należy tzn. nie zwraca wartości perku. W końcu wykombinowałem, jak to naprawić .
1. Otwieramy plik QTM_CodMod.sma.
2. W funkcji plugin_natives zmieniamy:
1. Otwieramy plik QTM_CodMod.sma.
2. W funkcji plugin_natives zmieniamy:
register_native("cod_get_user_perk", "PobierzPerk", 1);Na:
register_native("cod_get_user_perk", "PobierzPerk");3. Zmieniamy funkcję PobierzPerk na:
public PobierzPerk(plugin, params) { if(!(0 < params < 3)) return 0; new id = get_param(1); if(!is_user_connected(id)) return 0; if(params == 2) set_param_byref(2, wartosc_perku_gracza[id]); return perk_gracza[id]; }4. Kompilujemy plik i gotowe!
Edited by Goliath, 14.09.2011 20:19.
sharkowy
15.09.2011
natyw cod_get_user_perk nie działa do końca jak należy tzn. nie zwraca wartości perku.
Teraz wiesz?
Gud dżab goliad.
Cypis'
18.09.2011
zwracać on nigdy go nie zwracał jedynie mogłeś go pobrać przez referencjenatyw cod_get_user_perk nie działa do końca jak należy tzn. nie zwraca wartości perku
@Edit
Sprawdziłem silnik cod moda i można by tak jeszcze pobierać wartości
#include <amxmodx>
#include <amxmisc>
#include <codmod>
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "cypis"
new g_perk[33], g_wartosc[33];
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /sprawdz", "Sprawdz");
}
public cod_perk_changed(id, perk, wartosc)
{
g_perk[id] = perk;
g_wartosc[id] = wartosc;
}
public Sprawdz(id)
{
new nazwa[32]
cod_get_perk_name(g_perk[id], nazwa, charsmax(nazwa));
client_print(id, 3, "nazwa %s, wartosc %i", nazwa, g_wartosc[id]);
}
tyle że uwaga foward cod_perk_changed ma bład w bibioteczce peyote nie dodał tak:
forward cod_perk_changed(id, perk, wartosc);
tylko
forward cod_perk_changed(id, perk);
Edited by Cypis', 18.09.2011 17:25.
Goliath
20.09.2011
To miałem na myśli .zwracać on nigdy go nie zwracał jedynie mogłeś go pobrać przez referencje
PodziękowałPodklejam temat.
ToRRent
24.09.2011
Może i to działa ale ja mam błędy przez to w dodatku w takich miejscach że aż nie mogę uwierzyć
L 09/23/2011 - 15:59:41: [AMXX] Displaying debug trace (plugin "QTM_CodMod.amxx")
L 09/23/2011 - 15:59:41: [AMXX] Run time error 3: stack error
L 09/23/2011 - 15:59:41: [AMXX] [0] QTM_CodMod.sma::ZapiszDane (line 891)
Cała funkcja
L 09/23/2011 - 15:59:41: [AMXX] [1] QTM_CodMod.sma::SprawdzPoziom (line 1005)
Cała funkcja
L 09/23/2011 - 15:59:41: [AMXX] [2] QTM_CodMod.sma::ObrazeniaPost (line 421)
Cała funkcja
Edited by =ToRRent=, 24.09.2011 12:06.
L 09/23/2011 - 15:59:41: [AMXX] Displaying debug trace (plugin "QTM_CodMod.amxx")
L 09/23/2011 - 15:59:41: [AMXX] Run time error 3: stack error
L 09/23/2011 - 15:59:41: [AMXX] [0] QTM_CodMod.sma::ZapiszDane (line 891)
new vaultkey[128],vaultdata[256], identyfikator[64];
Cała funkcja
public ZapiszDane(id)
{
if(!klasa_gracza[id])
return PLUGIN_CONTINUE;
new vaultkey[128],vaultdata[256], identyfikator[64];
format(vaultdata, charsmax(vaultdata),"#%i#%i#%i#%i#%i#%i", doswiadczenie_gracza[id], poziom_gracza[id], inteligencja_gracza[id], zdrowie_gracza[id], wytrzymalosc_gracza[id], kondycja_gracza[id]);
new typ_zapisu = get_pcvar_num(cvar_typ_zapisu);
switch(typ_zapisu)
{
case 1: copy(identyfikator, charsmax(identyfikator), nazwa_gracza[id]);
case 2: get_user_authid(id, identyfikator, charsmax(identyfikator));
case 3: get_user_ip(id, identyfikator, charsmax(identyfikator));
}
format(vaultkey, charsmax(vaultkey),"%s-%s-%i-cod", identyfikator, nazwy_klas[klasa_gracza[id]], typ_zapisu);
nvault_set(vault,vaultkey,vaultdata);
return PLUGIN_CONTINUE;
}
L 09/23/2011 - 15:59:41: [AMXX] [1] QTM_CodMod.sma::SprawdzPoziom (line 1005)
ZapiszDane(id);
Cała funkcja
public SprawdzPoziom(id)
{
new limit_poziomu = get_pcvar_num(cvar_limit_poziomu);
new bool:zdobyl_poziom = false, bool:stracil_poziom = false;
while(doswiadczenie_gracza[id] >= PobierzDoswiadczeniePoziomu(poziom_gracza[id]) && poziom_gracza[id] < limit_poziomu)
{
poziom_gracza[id]++;
punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id];
zdobyl_poziom = true;
}
while(doswiadczenie_gracza[id] < PobierzDoswiadczeniePoziomu(poziom_gracza[id]-1))
{
poziom_gracza[id]--;
stracil_poziom = true;
}
if(poziom_gracza[id] >= limit_poziomu)
{
poziom_gracza[id] = limit_poziomu;
ResetujPunkty(id);
inteligencja_gracza[id] = 60;
zdrowie_gracza[id] = 100;
wytrzymalosc_gracza[id] = 70;
kondycja_gracza[id] = 70;
client_print(id, print_chat, "[COD:MW] Zdobyles ostatni 100 poziom ta klasa !");
client_print(id, print_chat, "[COD:MW] Twoje statystyki sa ustawione na maxa");
}
if(stracil_poziom)
{
ResetujPunkty(id);
client_cmd(id, "spk TM_CodMod/leveldown");
COD_MSG_NEWS_N;
ShowSyncHudMsg(id, SyncHudObj2,"Spadles do %i poziomu!", poziom_gracza[id]);
}
else if(zdobyl_poziom)
{
punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id];
COD_MSG_NEWS_P;
ShowSyncHudMsg(id, SyncHudObj2,"Awansowales do %i poziomu!", poziom_gracza[id]);
client_cmd(id, "spk TM_CodMod/newlvl");
}
ZapiszDane(id);
if(awansuje_do[klasa_gracza[id]])
{
if(poziom_gracza[id] >= awanse[ZnajdzAwans(klasa_gracza[id], awansuje_do[klasa_gracza[id]])][2])
{
COD_MSG_NEWS_P;
ShowSyncHudMsg(id, SyncHudObj2, "Osiagajac poziom %i, twoja klasa awansowala do stopnia: %s!^nOtrzymales +15 do kazdej statystyki", poziom_gracza[id], nazwy_klas[awansuje_do[klasa_gracza[id]]]);
client_cmd(id, "spk QTM_CodMod/levelup");
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);
}
}
}
L 09/23/2011 - 15:59:41: [AMXX] [2] QTM_CodMod.sma::ObrazeniaPost (line 421)
SprawdzPoziom(attacker);
Cała funkcja
public ObrazeniaPost(id, idinflictor, attacker, Float:damage, damagebits)
{
if(!is_user_connected(attacker) || !klasa_gracza[attacker])
return HAM_IGNORED;
if(get_user_team(id) != get_user_team(attacker))
{
new doswiadczenie_za_obrazenia = get_pcvar_num(cvar_doswiadczenie_za_obrazenia);
while(damage>20)
{
damage -= 20;
doswiadczenie_gracza[attacker] += doswiadczenie_za_obrazenia;
}
}
SprawdzPoziom(attacker);
return HAM_IGNORED;
}
Edited by =ToRRent=, 24.09.2011 12:06.
Jak się nazwać
25.09.2011
Torrent zapewne wgrałeś poprawkę ZadajObrażenie od cypisa ? Ja właśnie jak to wgrałem tez mi takie rlogi zaczeły wywalać daj zwykłą wersję.
@@
Może daj przykład jak to zastosować dla zielonych
@@
Może daj przykład jak to zastosować dla zielonych
ToRRent
25.09.2011
hmm tak skorzystałem z kodu cypisa tylko że wcześniej nie miałem żadnych problemów z tym (to znaczy w ogóle nie mam problemów) czasem coś w logach wyskoczy i kij z tym
Jak się nazwać
19.10.2011
Działa to tak? bo nie czaje zbytnio tego parms;p
PobierzPerk(id, 2) - zwraca wartosc
PobierzPerk(id, 1) - zwraca perk
?
PobierzPerk(id, 2) - zwraca wartosc
PobierzPerk(id, 1) - zwraca perk
?
daniok45
11.03.2012
Siema mam problem co do tej łatki, mianowicie kiedy robię wszystko co w instrukcji kompiluję i odpalam nie działają mi klasy, magazyn, perki itp. Bardzo bym prosił o pliczek QTM_CodMod ze skonfigurowanymi funkcjami. Z góry dziękuję (sory za archeologię)
rysiek4213
22.04.2012
to podajcie link, bo mam na swoim codzie 2 perki, a jak wklejam powyższą funkcje to nie kompiluje mi pluginu.
adif11 15.01.2013
Wiem że odkop no ale ;D wole się upewnić stara funkcja to jest to?
public PobierzPerk(id, &wartosc) { wartosc = wartosc_perku_gracza[id]; return perk_gracza[id]; }