Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Użycie float - tag mismatch


Najlepsza odpowiedź 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

 

Przejdź do postu


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
3 odpowiedzi w tym temacie

#1 wonsz żeczny

    Wszechwidzący

  • Użytkownik

Reputacja: 82
Zaawansowany

  • Postów:254
  • Imię:Wonsz
  • Lokalizacja:Żeka
Offline

Napisano 06.04.2016 13:12

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?


  • +
  • -
  • 0

#2 wiwi249

    Wszechobecny

  • Użytkownik

Reputacja: 150
Profesjonalista

  • Postów:440
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Tarnobrzeg
Offline

Napisano 06.04.2016 13:24   Najlepsza odpowiedź

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

 


Użytkownik wiwi249 edytował ten post 06.04.2016 13:25

  • +
  • -
  • 1

Wykonuję strony internetowe, zlecenia AMXX i HLDS - w tym pisanie pluginów, ogarnianie serwerów, edycja i tworzenie modeli.

Potrzebujesz czegoś? Pisz!

 

"śpieszmy się pisać posty, tak szybko banują..." ~ sebul


#3 plx211

    Wszechpomocny

  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

Napisano 06.04.2016 16:05

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 ;)

 

 


  • +
  • -
  • 0

#4 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 07.04.2016 02:23


LVL, Exp wedlug mnie powinny byc typu integer

Dobrze gada, polać mu.

Przeczytaj poradnik o wadach floata.


  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych