←  Poradniki, Łatki oraz Pluginy

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
Naprawa natywu cod_get_user_perk

  • +
  • -
Goliath's Photo 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ć :D.

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! :D
sharkowy (19.09.2011 19:56):
Podklejam temat.

Edited by Goliath, 14.09.2011 20:19.
Quote

System'ek's Photo System'ek 14.09.2011

+ :D
Quote

  • +
  • -
HaDeS From HELL's Photo HaDeS From HELL 14.09.2011

:ok: heh nareszcie ktoś to naprawił :P ++
Quote

Kolar`.'s Photo Kolar`. 14.09.2011

Głupie pytanie, a jak nie było naprawione to co się działo ?
Quote

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

  • +
  • -
Twinn's Photo Twinn 15.09.2011

Nareszczie ktoś wpadł na pomysł jak to naprawić :)

+
Quote

  • +
  • -
Cypis''s Photo Cypis' 18.09.2011

natyw cod_get_user_perk nie działa do końca jak należy tzn. nie zwraca wartości perku

zwracać on nigdy go nie zwracał jedynie mogłeś go pobrać przez referencje :o

@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.
Quote

  • +
  • -
Goliath's Photo Goliath 20.09.2011

zwracać on nigdy go nie zwracał jedynie mogłeś go pobrać przez referencje :o

To miałem na myśli :P.

Podklejam temat.

Podziękował :D
Quote

  • +
  • -
ToRRent's Photo 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)

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.
Quote

  • +
  • -
Jak się nazwać's Photo 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 ;P
Quote

  • +
  • -
ToRRent's Photo 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 :P
Quote

  • +
  • -
Jak się nazwać's Photo 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

?
Quote

  • +
  • -
Goliath's Photo Goliath 21.10.2011

Nie. Tutaj masz, jak tego używać:
http://amxx.pl/dokum...d-get-user-perk
Quote

  • +
  • -
daniok45's Photo 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ę)
Quote

  • +
  • -
kozix's Photo kozix 17.03.2012

A co jeśli ktoś ma 2 sloty na perk? Jak to naprawić?
Quote

Sewek's Photo Sewek 01.04.2012

cypys juz chyba dodał naprawiona wersje w Poradniku na 2 perki
Quote

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

adif11's Photo 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]; }
Quote

adif11's Photo adif11 16.01.2013

Refresh odpowie ktos? ;<

Wysyłane z mojego MB525 za pomocą Tapatalk 2
Quote