Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

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

waring przy kompilacji


  • Zamknięty Temat jest zamknięty
16 odpowiedzi w tym temacie

#1 kaszewczyk

    Pomocny

  • Użytkownik

Reputacja: 13
Początkujący

  • Postów:42
Offline

Napisano 10.02.2009 13:12

Witam, ponieważ potrzebowałem plugin do ustawiania interpolacji u graczy a żaden jak dotąd nie zaspokajał moich potrzeb więc postanowiłem napisać swój pierwszy plugin pod amxmodx

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	set_task(30.0,"client_PreThink", 01);
	
}

public client_PreThink(id)
{
	new Float: interp[32];
	new updaterate[32];
	new Float: dobra_interpolacja;
		
	get_user_info(id, "ex_interp", interp, 31);
22:get_user_info(id, "cl_updaterate", updaterate, 31);
	
		if(interp[id] >= 0.06 && interp[id] <= 0.1 && updaterate[id] <= 101 && updaterate[id] >= 30 )
		25:{
			dobra_interpolacja = (1/updaterate[id])+0.02;
			switch(dobra_interpolacja)
			{
				case 0.01: client_cmd(id, "ex_interp 0.01");
				case 0.02: client_cmd(id, "ex_interp 0.02");
				case 0.03: client_cmd(id, "ex_interp 0.03");
				case 0.04: client_cmd(id, "ex_interp 0.04");
				case 0.05: client_cmd(id, "ex_interp 0.05");
				default: client_cmd(id, "ex_interp 0.03");
			}
		}
		else
		client_cmd(id, "ex_interp 0.03");
	set_task(30.0,"client_PreThink", 01);
40:}
Niby się skompilował ale dostałem warning

/home/groups/amxmodx/tmp3/text3ztb15.sma(22) : warning 213: tag mismatch
/home/groups/amxmodx/tmp3/text3ztb15.sma(25) : warning 217: loose indentation
/home/groups/amxmodx/tmp3/text3ztb15.sma(40) : warning 217: loose indentation

macie jakieś sugestie, poprawki itd?
Z góry dziękuję za pomoc
  • +
  • -
  • 0

#2 grankee

    Godlike

  • Support Team

Reputacja: 507
Wszechwiedzący

  • Postów:1500
  • Lokalizacja:Radom
Offline

Napisano 10.02.2009 14:12

rozumiem, że wyżej jest mniej więcej to:

#include <amxmodx>
#include <engine>

1)w engine PreThinka nie trzeba rejestrować w plugin_init(), taka konieczność jest w fakemeta i hamsandwich(chyba). Jeżeli engine nie includowałeś to jest wporządku, chociaż mylna jest nazwa funkcji dla osoby czytającej. Dodatkowo próbujesz wywołać taskiem prethinka co 30 sek-błąd, jeśli jest to z engine to nie powinno być tasków, bo PreThink wykonuje się u każdego gracza co klatkę, a poza tym zmienianie graczowi 100 razy na sekunde ustawień jest lekką kpiną. Jeśli na górze masz #include <engine> to usuń tę linijkę, ale zostaw taski i będzie co 30 sek zmieniało.

2)
get_user_info(id, "ex_interp", interp, 31);
22:get_user_info(id, "cl_updaterate", updaterate, 31);
nie da się pobrać wartości interpu za pomocą get_user_info.
można chyba za pomocą query_client_cvar, ale to nie działa na nonsteamie (crash)

rozumiem, że tego 22: (oraz pozostałych takich cyfer w kodzie) przed tą drugą linijką w kodzie nie ma.

wpisz setinfo w consoli i powinny się pokazać ustawione info, w ten sposób zobaczysz co jest dostępne do sprawdzenia/ustawienia przez set/get_user_info

new Float: interp[32];
...
get_user_info(id, "ex_interp", interp, 31);
próbujesz pobrać tekst do tablicy zmiennych typu zmiennoprzecinkowego, to tak jak byś chciał poukładać piwa na matlesie do jajek, nie da rady, musisz sięgnąć po skrzynkę na piwa. W tym przypadku musi to być tablica znaków czyli po prostu
new interp[32]
i dopiero po pobraniu jej funkcją get_user_info możesz ją przekonwertować do typu Float w tym celu stwórz nową zmienną
new Float:interpik
i funkcją
str_to_float
dokonaj konwertacji. Oczywiście tłumaczę to czystoteoretycznie, bo jak wyżej pisałem nie da się tak sprawdzić ustawień interpa u gracza.


set_task(30.0,"client_PreThink", 01);
wystarczy
set_task(30.0,"client_PreThink");
zarówno na górze jak i na dole.


Generalnie zrób to bez sprawdzania ustawień gracza, po prostu zmieniaj ich wartość co jakiś określony czas (w tym przypadku co 30 sek masz taska, może być) i na tym poprzestań.
  • +
  • -
  • 0

#3 Miczu

    Godlike

  • Przyjaciel

Reputacja: 646
Wszechmogący

  • Postów:2862
Offline

Napisano 10.02.2009 14:31

Albo zle nazwales funkcje, albo kompletnie zle jej uzyles ;>

Daj w zalaczniku plik .sma ktory kompilujesz a nie bedzie watpliwosci...
  • +
  • -
  • 0

#4 grankee

    Godlike

  • Support Team

Reputacja: 507
Wszechwiedzący

  • Postów:1500
  • Lokalizacja:Radom
Offline

Napisano 10.02.2009 17:35

Dlaczego źle? Gdzieś jest napisane, że własnej funkcji nie może nazwać client_PreThink jeśli nie jest ona zdefiniowana w nagłówku?
  • +
  • -
  • 0

#5 kaszewczyk

    Pomocny

  • Autor tematu
  • Użytkownik

Reputacja: 13
Początkujący

  • Postów:42
Offline

Napisano 10.02.2009 17:39

Pewnie jest tak jak Miczu mowił


#include <amxmodx>

#define PLUGIN	"Advanced Interp"
#define AUTHOR	"STIG"
#define VERSION	"1.0a"

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	set_task(30.0,"client_PreThink", 01);
}

public client_PreThink(id)
{
	new Float: interp[32];
	new updaterate[32];
	new Float: dobra_interpolacja;
		
	get_user_info(id, "ex_interp", interp, 31);
	get_user_info(id, "cl_updaterate", updaterate, 31);
	
		if(interp[id] >= 0.06 && interp[id] <= 0.1 && updaterate[id] <= 100 && updaterate[id] >= 30 )
		{
			dobra_interpolacja = (1/updaterate[id])+0.02;
			switch(dobra_interpolacja)
			{
				case 0.01: client_cmd(id, "ex_interp 0.01");
				case 0.02: client_cmd(id, "ex_interp 0.02");
				case 0.03: client_cmd(id, "ex_interp 0.03");
				case 0.04: client_cmd(id, "ex_interp 0.04");
				case 0.05: client_cmd(id, "ex_interp 0.05");
				default: client_cmd(id, "ex_interp 0.03");
			}
		}
		else
		client_cmd(id, "ex_interp 0.03");
	set_task(30.0,"client_PreThink", 01);
}

  • +
  • -
  • 0

#6 Miczu

    Godlike

  • Przyjaciel

Reputacja: 646
Wszechmogący

  • Postów:2862
Offline

Napisano 10.02.2009 17:47

Zle uzyles tabulatorow (2 bledy z tego) i od kiedy ciag znakowy jest deklarowany jako float?
  • +
  • -
  • 0

#7 darkman

    Wszechwiedzący

  • Przyjaciel

Reputacja: 85
Zaawansowany

  • Postów:553
  • Lokalizacja:inactive
Offline

Napisano 10.02.2009 18:32

Dlaczego źle? Gdzieś jest napisane, że własnej funkcji nie może nazwać client_PreThink jeśli nie jest ona zdefiniowana w nagłówku?


o ile sie nie myle prethink jest zdefiniowany w amxmodx od którejś z ostatnich wersji
  • +
  • -
  • 0

#8 kaszewczyk

    Pomocny

  • Autor tematu
  • Użytkownik

Reputacja: 13
Początkujący

  • Postów:42
Offline

Napisano 10.02.2009 22:40

Nie wiedziałem, że w pawnie są istotne białe znaki, źle przeczytałem dokumentacje i myślałem że funkcja get_user_info zwroci mi wartość komendy ex_interp czyli samą liczbę zmienno-przecinkową, poprawiłem i już kompiluje się bez problemu ale raczej po w graniu na serwer nie działa jakieś sugestie?

#include <amxmodx>

#define PLUGIN    "Advanced Interp"
#define AUTHOR    "STIG"
#define VERSION    "1.0a"

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    set_task(30.0,"client_PreThink", 01);
}

public client_PreThink(id)
{
	new interp_str[32];
	new updaterate_str[32];
	new updaterate[32];
	new Float:dobra_interpolacja;
	new Float:interp[32];
	
	get_user_info(id, "ex_interp", interp_str[id], 31);
	get_user_info(id, "cl_updaterate", updaterate_str[id], 31);
	
	interp[id] = str_to_float ( interp_str[id] );
	updaterate[id] = str_to_num ( updaterate_str[id] );
   
	if(interp[id] >= 0.06 && interp[id] <= 0.1 && updaterate[id] <= 100 && updaterate[id] >= 30 )
	{
		dobra_interpolacja = (1/updaterate[id])+0.02;
		switch(dobra_interpolacja)
		{	
		case 0.01: client_cmd(id, "ex_interp 0.01");
		case 0.02: client_cmd(id, "ex_interp 0.02");
		case 0.03: client_cmd(id, "ex_interp 0.03");
		case 0.04: client_cmd(id, "ex_interp 0.04");
		case 0.05: client_cmd(id, "ex_interp 0.05");
		default: client_cmd(id, "ex_interp 0.03");
		}
	}	
	else
	client_cmd(id, "ex_interp 0.03");

	set_task(30.0,"client_PreThink", 01);
}

  • +
  • -
  • 0

#9 Miczu

    Godlike

  • Przyjaciel

Reputacja: 646
Wszechmogący

  • Postów:2862
Offline

Napisano 10.02.2009 23:04

Zmien juz ta smieszna nazwe funkcji na cos bardziej oryginalnego.

I sprawdz (np. przez odpowiednio wywolanego client_print) czy get_user_info pozwala na pobranie ex_interp oraz cl_updaterate.
  • +
  • -
  • 0

#10 darkman

    Wszechwiedzący

  • Przyjaciel

Reputacja: 85
Zaawansowany

  • Postów:553
  • Lokalizacja:inactive
Offline

Napisano 10.02.2009 23:10

Zmien juz ta smieszna nazwe funkcji na cos bardziej oryginalnego.

I sprawdz (np. przez odpowiednio wywolanego client_print) czy get_user_info pozwala na pobranie ex_interp oraz cl_updaterate.


za interp to sobie dam torbe uciac ze nie dziala, a rate i inne rzeczy tak.
  • +
  • -
  • 0

#11 R3X

    Godlike

  • Przyjaciel

Reputacja: 2960
Godlike

  • Postów:4247
  • Lokalizacja:Nie
Offline

Napisano 10.02.2009 23:10

engine.inc zawiera:
/* Forward for PreThink()/PostThink() on a player. */
forward client_PreThink(id);
forward client_PostThink(id);
więc jeśli niema #include <engine> nie powinno być problemu z nazwą.

Interp pobiera się raczej query_client_cvar niż get_user_info
  • +
  • -
  • 0

#12 grankee

    Godlike

  • Support Team

Reputacja: 507
Wszechwiedzący

  • Postów:1500
  • Lokalizacja:Radom
Offline

Napisano 10.02.2009 23:17

spam imho.. wszystko to napisałem w pierwszym poście, ale komu się chciało czytać...
  • +
  • -
  • 0

#13 R3X

    Godlike

  • Przyjaciel

Reputacja: 2960
Godlike

  • Postów:4247
  • Lokalizacja:Nie
Offline

Napisano 10.02.2009 23:22

:spam: cd. jak widzisz ciągle są problemy, więc chyba warto przypomnieć ;-)
  • +
  • -
  • 0

#14 Miczu

    Godlike

  • Przyjaciel

Reputacja: 646
Wszechmogący

  • Postów:2862
Offline

Napisano 10.02.2009 23:49

Ale chyba funkcje trzeba nazwyac tak by nie robic zamieszania, bo zrobie pluga co bedzie mial funkcje:

entity_get_fload
client_primt
client_connact
set_pew

i zobaczymy czy bedzie wam wam pasowalo to potem analizowac ;>
  • +
  • -
  • 0

#15 grankee

    Godlike

  • Support Team

Reputacja: 507
Wszechwiedzący

  • Postów:1500
  • Lokalizacja:Radom
Offline

Napisano 11.02.2009 11:05

R3X, są problemy, ponieważ kolega nie dostosował się do mojego pierwszego postu

Miczu, a na wał komuś Twój kod analizować? :lol:
  • +
  • -
  • 0

#16 kaszewczyk

    Pomocny

  • Autor tematu
  • Użytkownik

Reputacja: 13
Początkujący

  • Postów:42
Offline

Napisano 11.02.2009 12:53

@grankee
przestałem czytać twój pierwszy post po twoich 2 pkt-ch jak może się coś skompilować bez podstawowych bibliotek :blaga:
@Miczu
daj spokój już z tą nazwą przecież to jest tylko 40 linijek a nie tysiąc


Jak bd miał wolną chwile w pracy to sprawdzę to query_client_cvar ale w jakimś pluginie ustawiającym interp widziałem użycie get_user_info do pobierania interpu

P.S
szkoda że tu nie ma cout<
  • +
  • -
  • 0

#17 grankee

    Godlike

  • Support Team

Reputacja: 507
Wszechwiedzący

  • Postów:1500
  • Lokalizacja:Radom
Offline

Napisano 11.02.2009 13:25

Człowieku, a czy ja gdzieś napisałem, że może? Nie podałeś całego kodu więc skąd mam wiedzieć jakie nagłówki dorzuciłeś?

Przeczytaj jeszcze raz ze zrozumieniem i dostosuj się zamiast pisać kolejne posty o jakiś błędach.

Dodatkowo jeżeli nie wiesz, że można napisać działający plugin bez używania dyrektywy #include to pierw się doinformuj, a dopiero później pisz zdania typu

jak może się coś skompilować bez podstawowych bibliotek :blaga:


Nie wiem też czy wiesz, że nie dyrektywa #include <engine> decyduje całkowicie o użyciu tego modułu. Możesz nie includować engine i używać client_PreThink(id) w pluginie (oczywiście tego z engine, a nie nazwanej tak przez Ciebie funkcji).

Proponuję nie pouczać tych co wiedzą lepiej.
  • +
  • -
  • 0




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

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