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
 

bluu - zdjęcie

bluu

Rejestracja: 29.01.2012
Aktualnie: Nieaktywny
Poza forum Ostatnio: 14.09.2013 11:37
-----

#297366 Flagi

Napisane przez DarkGL w 18.09.2011 11:34

Flagi dostępne standardowo :
ADMIN_ALL - wszystkie
ADMIN_IMMUNITY - flaga "a"
ADMIN_RESERVATION - flaga "b"
ADMIN_KICK - flaga "c"
ADMIN_BAN - flaga "d"
ADMIN_SLAY - flaga "e"
ADMIN_MAP - flaga "f"
ADMIN_CVAR - flaga "g"
ADMIN_CFG - flaga "h"
ADMIN_CHAT - flaga "i" *
ADMIN_VOTE - flaga "j"
ADMIN_PASSWORD - flaga "k"
ADMIN_RCON - flaga "l"
ADMIN_LEVEL_A - flaga "m"
ADMIN_LEVEL_B - flaga "n"
ADMIN_LEVEL_C - flaga "o"
ADMIN_LEVEL_D - flaga "p"
ADMIN_LEVEL_E - flaga "q"
ADMIN_LEVEL_F - flaga "r"
ADMIN_LEVEL_G - flaga "s"
ADMIN_LEVEL_H - flaga "t"
ADMIN_MENU - flaga "u"
ADMIN_ADMIN - flaga "y"
ADMIN_USER - flaga "z"
Flagi dodatkowe :
ADMIN_FLAG_V - flaga "v"
ADMIN_FLAG_W - flaga "w"
ADMIN_FLAG_X - flaga "x"

żeby ich używać trzeba dodać do pluginu
#define ADMIN_FLAG_V (1<<21)
#define ADMIN_FLAG_W (1<<22)
#define ADMIN_FLAG_X (1<<23)

sprawdzenie czy gracz ma flage
if(get_user_flags(id) & ADMIN_LEVEL_A){
	//gracz ma flage m
}

sprawdzanie czy gracz nie ma flagi
if( !(get_user_flags(id) & ADMIN_LEVEL_A) ){
	//gracz nie ma flagi m
}

sprawdzanie czy gracz ma kilka flag
public has_flags(id,string[])
{
	new ret=1
	new byte
	
	new len = strlen(string)
	new p_flag = get_user_flags(id)
	
	for(new i=0;i<=len;i++)
	{
		if(string[i]>='a' && string[i]<='z') byte = (1<<(string[i]-'a'))
		else if(string[i]>='A' && string[i]<='Z') byte = (1<<(string[i]-'A'))
		else if(string[i]==',' && ret==1) return 1
		else if(string[i]==',') ret=1
		if(byte!=0 && !(p_flag & byte)) ret=0

		byte=0
	}
	
	return ret
}

Przyklady:
Jak ma dzialac na - a lub b lub c - to dajemy
has_flag(id,"a,b,c")
Jak ma dzialac tylko gdy user ma flage - a i b i c - to dajemy
has_flag(id,"abc")
Jak ma dzialac w przypadkach - a i b lub a i c lub b i c - to dajemy
has_flag(id,"ab,ac,bc")

Gracz musi mieć wszystkie 3 flagi
new flaga = (ADMIN_LEVEL_A | ADMIN_LEVEL_B | ADMIN_LEVEL_C)
if((get_user_flags(id) & flaga) == flaga) {
	// KOD
}
lub inaczej
new sprawdz = get_user_flags(id)
if(sprawdz & ADMIN_LEVEL_A && sprawdz & ADMIN_LEVEL_B && sprawdz & ADMIN_LEVEL_C) {
	// KOD
}

Inne przykłady:
if (get_user_flags(id) & DEFINICJA_FLAGI) {
	//osoba ma jakas tam flage
} else {
	//osoba nie ma jakies tam flagi
}

public client_authorized(id)
{
	if( get_user_flags(id) & ADMIN_BAN)
	client_print(0,print_chat,"Admin wchodzi na server")
}

  • +
  • -
  • 55


#394849 (CRASHE) error (native "get_user_attacker")

Napisane przez Jak się nazwać w 09.04.2012 20:00

Try:
Wklejka: 133399801116482
  • +
  • -
  • 1


#365184 Natyw zwracający nazwę klasy

Napisane przez Muzzi w 15.02.2012 21:08

Tak. Robisz poprostu natyw a w natywie kopiujesz nazwe klasy do tablicy która powinna być w parametrze funkcji ;)

Pseudo kod:

public ZwrocNazweKlasy( id, tablica, len ){
copy( tablica, len, klasa_gracza );
}

  • +
  • -
  • 1


#365233 Natyw zwracający nazwę klasy

Napisane przez Muzzi w 15.02.2012 22:23

http://amxx.pl/topic/20034-natywy/
  • +
  • -
  • 1


#365368 Natyw zwracający nazwę klasy

Napisane przez Muzzi w 16.02.2012 13:43

Tamto był pseudo kod, a pod zmienną player_class miałeś podstawić zmienną z nazwą klas. Proszę gotowy kod, powinno działać.


public ZwrocNazweKlasy(id, tablica[], len){
copy(tablica, len, Race[ player_class[ id ] ]);
}


Użycie:

new szText[ 128 ];
ZwrocNazweKlasy( id, szText, charsmax( szText ) );


Powyższy kod kopiuje nazwe aktualnej klasy do zmiennej.
  • +
  • -
  • 1


#194176 [5.9l] Zła redukcja obrażeń po zwiększeniu lvl

Napisane przez sebul w 06.12.2010 00:32

Nie wiem czy ktoś to zauważył, ale po zwiększeniu lvl (czyli i max statów, a dokładniej zręczności), redukcja obrażeń trochę źle działa, gdyż przy 50 pkt w zręczności miało się już praktycznie max % redukcji tych obrażeń, a dodawanie powyżej 50 pkt w zręczność, mało co dawało i tak mając 100 pkt w zręczności, redukcja obrażeń była prawie taka sama jak przy 50 punktach. Oczywiście jest na to rozwiązanie ;]
Znajdź wszystkie
player_damreduction[id] = (47.3057*(1.0-floatpower( 2.7182, -0.06798*float(player_agility[id])))/100)

zamień na
player_damreduction[id] = damachange(X, Y, Z);

Dodaj gdziekolwiek w sma, np. przed "public reset_skill(id)"


I Opcja bez zmiany sposobu obliczeń
stock Float:damachange(maxstat, skill, dziel) {
if(skill > 0)
return (47.3057*(1.0-floatpower(2.7182,-(0.06798/(maxstat/50))*float(skill)))/dziel);

return 0.0;
}
  • zamiast X wpisz maksymalną wartość statystyki, czyli w standardzie jest to 50
  • zamiast Y wpisz statystykę, która będzie w obliczeniach, czyli dla redukcji obrażeń będzie to "player_agility[id]"
  • zamiast Z wpisz liczbę przez którą redukcja obrażeń będzie się dzielić, im większa liczba, tym mniejsza będzie redukcja, w standardzie jest 100

II Opcja ze zmianą sposobu obliczania redukcji, jak dla mnie ta opcja jest lepsza, przy większej ilości punktów dodanych w zręczność, 1 punkt daje więcej niż przy standardowych wyliczeniach
stock Float:damachange(maxstat, skill, Float:dziel) {
if(skill > 0) {
new Float:qwe = float(skill)/maxstat;
new Float:bonus = (2.0-floatpower(2.0, qwe))/(dziel*4);
if(bonus < 0.0) bonus = 0.0;
return bonus+qwe/dziel;
}

return 0.0;
}

  • zamiast X wpisz maksymalną wartość statystyki, np. 50
  • zamiast Y wpisz statystykę, która będzie w obliczeniach, czyli dla redukcji obrażeń będzie to "player_agility[id]"
  • zamiast Z wpisz liczbę zmiennoprzecinkową, przez którą redukcja obrażeń będzie się dzielić, jeśli wpiszesz 2.0 to maksymalna wartość redukcji będzie wynosić 50%, im większa liczba, tym mniejsza będzie redukcja

  • +
  • -
  • 14