←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Użycie float - tag mismatch


Best Answer wiwi249 06.04.2016 13:24

public WymaganyExp( PoziomGracza )

zamien na

public Float:WymaganyExp( PoziomGracza )

Skoro funkcja ma zwracać typ float, to musisz o tym powiadomić kompilator.

 

po drugie

Float:Pow( Float:PoziomGracza, Float:2 );

czemu tak? Skoro jest funkcja która przyjmuje 2 argumenty, jak mniemam podstawa i wykładnik, to po prostu podajesz te argumenty, bez typów, bo typy danych określa funkcja (to samo tyczy się returna)

W sourcemod, tak jak w AMXX, jak chcesz przekonwertować typ int na float to musisz użyć funkcji float():

Pow( float(PoziomGracza), float(2) );

Bo zakładam że funkcja Pow przyjmuje oba argumenty typu float.

Wireshark Cookie Dump:

OKCancel

 

Go to the full post

  • +
  • -
wonsz żeczny's Photo wonsz żeczny 06.04.2016

Witam.

Uczę się sourcemoda bo pawn już trochę stary itd. i w ramach nauki piszę sobie exp moda.

 

Napotkałem pewien problem, w pawnie by mi tak pewnie działało :D

 

Otóż do ustalenia wymaganego doświadczenia na kolejny poziom postanowiłem użyć potęgowania.

public WymaganyExp( PoziomGracza )
{
	return Float:Pow( Float:PoziomGracza, Float:2 );
}

Tak wywala 1 błąd Tag Mismatch do tej linijki w środku.

 

Oczywiście próbowałem

public WymaganyExp( Float:PoziomGracza )
{
	return Float:Pow( Float:PoziomGracza, Float:2 );
}

Gdzie wyżej w kodzie rejestrując ten public dałem też float w indeksie ale też lipa.

public WymaganyExp( PoziomGracza )
{
	return Float:Pow( PoziomGracza, 2 );
}

Tak też nic a nawet usunąłem wszędzie floata i nic z tego.

 

Dlaczego tak się dzieje?

Quote

  • +
  • -
Best Answer wiwi249's Photo wiwi249 06.04.2016

public WymaganyExp( PoziomGracza )

zamien na

public Float:WymaganyExp( PoziomGracza )

Skoro funkcja ma zwracać typ float, to musisz o tym powiadomić kompilator.

 

po drugie

Float:Pow( Float:PoziomGracza, Float:2 );

czemu tak? Skoro jest funkcja która przyjmuje 2 argumenty, jak mniemam podstawa i wykładnik, to po prostu podajesz te argumenty, bez typów, bo typy danych określa funkcja (to samo tyczy się returna)

W sourcemod, tak jak w AMXX, jak chcesz przekonwertować typ int na float to musisz użyć funkcji float():

Pow( float(PoziomGracza), float(2) );

Bo zakładam że funkcja Pow przyjmuje oba argumenty typu float.

Wireshark Cookie Dump:

OKCancel

 


Edited by wiwi249, 06.04.2016 13:25.
Quote

  • +
  • -
plx211's Photo plx211 06.04.2016

Wyjasnione, ale pozwole wtracic swoje 4 grosze.

 

LVL, Exp wedlug mnie powinny byc typu integer, float nie jest precyzyjny.

Twoja fn zapisal bym tak (nowa skladnia):

public int WymaganyExp(int lvl) {
  return lvl * lvl; // pow() jedynie gdybys chcial do wiekszej potegi podniesc
}

Jak twoja zmienna jest typu float (i jest to wymuszone czyms) to wtedy:

float zmienna = float(WymaganyExp(12));

p.s.

w codmod'zie nowym z cs1.6, exp byl generowany wzorem:

lvl^2 * lvl_ratio

polecam ci ten sposob ;)

 

 

Quote

  • +
  • -
grankee's Photo grankee 07.04.2016


LVL, Exp wedlug mnie powinny byc typu integer

Dobrze gada, polać mu.

Przeczytaj poradnik o wadach floata.

Quote