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

[ROZWIĄZANE] Offset na kase i bpammo; pytanie o set_pev


Najlepsza odpowiedź BlackPerfum, 28.07.2014 10:48

Wystarczy użyć wyszukiwarki xD

1. Jaki jest offset na bpammo (ammo w plecaku, zapasie)? Nie chce uzywac cstrike tylko dla tej funkcji.

http://amxx.pl/topic...nie-gracza-zarządzanie-broniami/
 

5. Znalazłem offset na kase. To 115. Ale jest problem. Jak ustawiam graczu kase to hud się nie odświeża. Chodzi o to że gracz ma tą kasę (pokazywało 800, a kupiłem AWP), ale tego nie pokazuje licznik. Dopiero jak cos kupię lub zabije kogoś to licznik działa poprawnie. Może jest jakiś sposób na naprawe?

http://amxx.pl/topic...0-eventy/page-3
 

2. Czy w set_pev moge dac id na 0? Chce do wszystkich graczy.

funkcja set_pev nie jest przeznaczona do użytku na grazach, tylko na bytach. Można ją używać na graczu bo gracz to też byt tzn. zawsze jak widzisz w funkcji opcje ustawienia id na 0 i będzie ona działac na all graczy to poamiętaj że w tej funkcji jest pętla:
for(new i=1;i<global_get(glb_maxClients);i++)
(Przykładowy wygląd pętli; Większość pętli w moduach amxmodx'a używa globalnej maxclients lecz pod inną nazwą niż w fakemeta_const.inc)

Niestety w fakemecie takich pętli nie ma... :D


3. Czy uzywanie offsetow zamiast funkcji z innych modulow jest optymalniejsze od zwykłych natywów? To zmienia tak jakby bezposrednio w grze.

To zależy co chcesz dokładnie porównać. Moduł cstrike jest głównie oparty na offset'ach dlatego prawie żadnej różnicy w działaniu nie ma. Inne moduły mają dość specyficzne działanie gdyż nie zawsze kożystają z offsetów a tworzą własne zmienne i je aktualizują przez co czasem przetrzymywane dane w tych zmiennych są fałszywe (taak mówią zwłaszcza o amxmodx'ie). Często w modułach są też funkcje przeznaczone nie tylko do cs'a przez co spowalniają własne działanie. Głównie to wszystko zależy co chcesz osiągnąć. Mniejszy kod czy większa wydajność. By używać offsetów powinnieneś też wiedzieć kiedy i na jakie wartości się przestawiają gdyż większego opisu do nich nigdzie nie znajdziesz

4. set_pev z na podmiane modeli nie chce zaskoczyć:

Używaj set_pev + engfunc. set_pev jedynie podmienia wartość a engfunc informuje o zmianie silnik Przejdź do postu


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

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 27.07.2014 19:10

Witam,
1. Jaki jest offset na bpammo (ammo w plecaku, zapasie)? Nie chce uzywac cstrike tylko dla tej funkcji.
2. Czy w set_pev moge dac id na 0? Chce do wszystkich graczy.
3. Czy uzywanie offsetow zamiast funkcji z innych modulow jest optymalniejsze od zwykłych natywów? To zmienia tak jakby bezposrednio w grze.

4. set_pev z na podmiane modeli nie chce zaskoczyć:

      switch(get_user_team(id))
      {
            case 1: set_pev(id, pev_model, "models/player/esltt/esltt.mdl")
            case 2: set_pev(id, pev_model, "models/player/eslct/eslct.mdl")
      }

5. Znalazłem offset na kase. To 115. Ale jest problem. Jak ustawiam graczu kase to hud się nie odświeża. Chodzi o to że gracz ma tą kasę (pokazywało 800, a kupiłem AWP), ale tego nie pokazuje licznik. Dopiero jak cos kupię lub zabije kogoś to licznik działa poprawnie. Może jest jakiś sposób na naprawe?

#define m_iAccount 115
set_pdata_int(id, m_iAccount, 8000, 5)

  • +
  • -
  • 0

#2 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 28.07.2014 10:48   Najlepsza odpowiedź

Wystarczy użyć wyszukiwarki xD

1. Jaki jest offset na bpammo (ammo w plecaku, zapasie)? Nie chce uzywac cstrike tylko dla tej funkcji.

http://amxx.pl/topic...nie-gracza-zarządzanie-broniami/
 

5. Znalazłem offset na kase. To 115. Ale jest problem. Jak ustawiam graczu kase to hud się nie odświeża. Chodzi o to że gracz ma tą kasę (pokazywało 800, a kupiłem AWP), ale tego nie pokazuje licznik. Dopiero jak cos kupię lub zabije kogoś to licznik działa poprawnie. Może jest jakiś sposób na naprawe?

http://amxx.pl/topic...0-eventy/page-3
 

2. Czy w set_pev moge dac id na 0? Chce do wszystkich graczy.

funkcja set_pev nie jest przeznaczona do użytku na grazach, tylko na bytach. Można ją używać na graczu bo gracz to też byt tzn. zawsze jak widzisz w funkcji opcje ustawienia id na 0 i będzie ona działac na all graczy to poamiętaj że w tej funkcji jest pętla:
for(new i=1;i<global_get(glb_maxClients);i++)
(Przykładowy wygląd pętli; Większość pętli w moduach amxmodx'a używa globalnej maxclients lecz pod inną nazwą niż w fakemeta_const.inc)

Niestety w fakemecie takich pętli nie ma... :D


3. Czy uzywanie offsetow zamiast funkcji z innych modulow jest optymalniejsze od zwykłych natywów? To zmienia tak jakby bezposrednio w grze.

To zależy co chcesz dokładnie porównać. Moduł cstrike jest głównie oparty na offset'ach dlatego prawie żadnej różnicy w działaniu nie ma. Inne moduły mają dość specyficzne działanie gdyż nie zawsze kożystają z offsetów a tworzą własne zmienne i je aktualizują przez co czasem przetrzymywane dane w tych zmiennych są fałszywe (taak mówią zwłaszcza o amxmodx'ie). Często w modułach są też funkcje przeznaczone nie tylko do cs'a przez co spowalniają własne działanie. Głównie to wszystko zależy co chcesz osiągnąć. Mniejszy kod czy większa wydajność. By używać offsetów powinnieneś też wiedzieć kiedy i na jakie wartości się przestawiają gdyż większego opisu do nich nigdzie nie znajdziesz

4. set_pev z na podmiane modeli nie chce zaskoczyć:

Używaj set_pev + engfunc. set_pev jedynie podmienia wartość a engfunc informuje o zmianie silnik
  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#3 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 28.07.2014 11:22

Wystarczy użyć wyszukiwarki xD

TibacK, dnia 27 Lip 2014 - 20:10, napisał:

1. Jaki jest offset na bpammo (ammo w plecaku, zapasie)? Nie chce uzywac cstrike tylko dla tej funkcji.

http://amxx.pl/topic...nie-gracza-zarządzanie-broniami/


Mam.

TibacK, dnia 27 Lip 2014 - 20:10, napisał:

5. Znalazłem offset na kase. To 115. Ale jest problem. Jak ustawiam graczu kase to hud się nie odświeża. Chodzi o to że gracz ma tą kasę (pokazywało 800, a kupiłem AWP), ale tego nie pokazuje licznik. Dopiero jak cos kupię lub zabije kogoś to licznik działa poprawnie. Może jest jakiś sposób na naprawe?

http://amxx.pl/topic...0-eventy/page-3


Mam i działa :)

TibacK, dnia 27 Lip 2014 - 20:10, napisał:

3. Czy uzywanie offsetow zamiast funkcji z innych modulow jest optymalniejsze od zwykłych natywów? To zmienia tak jakby bezposrednio w grze.

To zależy co chcesz dokładnie porównać. Moduł cstrike jest głównie oparty na offset'ach dlatego prawie żadnej różnicy w działaniu nie ma. Inne moduły mają dość specyficzne działanie gdyż nie zawsze kożystają z offsetów a tworzą własne zmienne i je aktualizują przez co czasem przetrzymywane dane w tych zmiennych są fałszywe (taak mówią zwłaszcza o amxmodx'ie). Często w modułach są też funkcje przeznaczone nie tylko do cs'a przez co spowalniają własne działanie. Głównie to wszystko zależy co chcesz osiągnąć. Mniejszy kod czy większa wydajność. By używać offsetów powinnieneś też wiedzieć kiedy i na jakie wartości się przestawiają gdyż większego opisu do nich nigdzie nie znajdziesz


Wydajność:
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>
#include <nvault>
#include <fakemeta_util>
#include <csx>
Chce zastąpić cstrike i csx (tu poradze)

4. set_pev z na podmiane modeli nie chce zaskoczyć:

Używaj set_pev + engfunc. set_pev jedynie podmienia wartość a engfunc informuje o zmianie silnik

co dac w engfunc?


jak zmienic team graczu przez fakemete? Oraz jak ustawic ilosc zgonow w tabeli przez fakemete?
  • +
  • -
  • 0

#4 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 28.07.2014 13:53

co dac w engfunc?

EngFunc_SetModel
 

Chce zastąpić cstrike i csx (tu poradze)

Tych modułów nie ma większego sensu zmieniać gdyż one operują bezpośrednio (w większości przypadków) na CS'ie a nie na własnych wartościach. To czy użyjesz offsetu czy cstrike nie robi większej różnicy gdyż cstrike także używa offsetu. Dla wzrokowców:

Ustawiam ilość śmierci gracza:

Użycie fakemety:
Twój kod: Fakemeta użyj funkcji set_pdata_int dla gracza X, z offsetem Y o wartości Z
Fakemeta: Cs zmień wartość z offsetu Y na wartość Z dla gracza X
Użycie Cstrike:
Twój kod: Cstrike wykonaj funkcję cs_set_user_deaths dla gracza X z ilością śmierci Z
Cstrike:Cs zmień wartość z offsetu 444 na wartość Z dla gracza X
To jest bardziej przykład niż rzeczywistość gdyż moduł Cstrike dodatkowo odświeża tablice wyników a fakemeta trzeba to zrobić osobno:
stock fm_set_user_deaths(client, deaths)
{
	set_pdata_int(client, OFFSET_DEATHS, deaths, EXTRAOFFSET);
	
	static ScoreInfo;
	if( ScoreInfo || (ScoreInfo = get_user_msgid("ScoreInfo")) )
	{
		emessage_begin(MSG_BROADCAST, ScoreInfo);
		ewrite_byte(client);
		ewrite_short(get_user_frags(client));
		ewrite_short(deaths);
		ewrite_short(0);
		ewrite_short(_:fm_get_user_team(client));
		emessage_end();
	}
}
W takim przypadku funkcja cs_set_user_deaths robi dokładnie to samo co fm_set_user_deaths z tym że fakemeta robi to dużo wolniej. Samo ustawienie wartości w offsetach jest tak samo szybkie ale odświeżenie tablicy (czym zajmuje się już amxmodx w funkcji fm_set_user_deaths) jest dużo wolniejsze w funkcji fm_set_user_deaths

Wnioski: Używanie samych offsetów jest prawie tak samo wydajne lecz jeśli już chcesz robić jakieś większe rzeczy niż podmiana cyferek pod offsetami to będzie dużo wolniejsza fakemeta (gdyż nie da się nią samą tego zrobić tzn. musisz użyć amxmodx'a). Zatem po co nam offsety i fakemeta? Po to iż nie da się dostać do wszystkich offsetów za pomocą dostępnych nam modułów. Wiele osob twierdzi iż komunikacja między modułami jest bardzo mała przez co używanie paru zamiast jednego jest dużo wolniejsze (tak mam tu na myśli fakemete i engine) lecz to nie zawsze jest prawdą dlaczego? Weźmy przykład z życia wzięty: Tworzymy byt za pomoca engine następnie modyfikujemy go za pomocą fakemety. Dlaczego takie coś będzie wolniejsze niż stworzenie i modyfikowanie byt'a za pomocą jednego z tych modułów? Z paru przyczyn:
• Różnica czasowa w której moduły otrzymują informacje o tym iż ten byt powstał
• Sposób modyfikacji (generalnie nie ma większej różnicy lecz i tak fakemeta jest wolniejsza)
• Używanie wielu funkcji na różnych pozomach przy użyciu fakemety

 

jak zmienic team graczu przez fakemete? Oraz jak ustawic ilosc zgonow w tabeli przez fakemete?

Z ilością zgonów już podałem funkcję a co do zmiany team'u to łap:
stock fm_set_user_team(client, {CsTeams,_}:team, {CsInternalModel,_}:model=CS_DONTCHANGE)
{
	new CsTeams:oldteam = fm_get_user_team(client);
	if( oldteam != team )
	{
		switch( oldteam )
		{
			case CS_TEAM_T:
			{
				if( is_user_alive(client) && (pev(client, pev_weapons) & (1<<CSW_C4)) )
				{
					engclient_cmd(client, "drop", "weapon_c4");
				}
			}
			case CS_TEAM_CT:
			{
				fm_set_user_defuse(client, 0);
			}
		}
	}
	
	set_pdata_int(client, OFFSET_TEAM, _:team, EXTRAOFFSET);
	
	if( model != CS_DONTCHANGE )
	{
		set_pdata_int(client, OFFSET_INTERALMODEL, _:model, EXTRAOFFSET);
	}
	
	dllfunc(DLLFunc_ClientUserInfoChanged, client, engfunc(EngFunc_GetInfoKeyBuffer, client));
	
	static const team_names[CsTeams][] =
	{
		"UNASSIGNED",
		"TERRORIST",
		"CT",
		"SPECTATOR"
	};
	
	static TeamInfo;
	if( TeamInfo || (TeamInfo = get_user_msgid("TeamInfo")) )
	{
		emessage_begin(MSG_BROADCAST, TeamInfo);
		ewrite_byte(client);
		ewrite_string(team_names[team]);
		emessage_end();
	}
}
Funkcje które przedstawiam w kodzie nie są moje dodatkowo nie są tez optymalne. Dlaczego? Bo są arobione na podstawie funkcji z modułu Cstrike:
Spoiler


Na ich podstawie możesz coś wykombinować
  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#5 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 28.07.2014 19:37

Hmm.

Przemysle sobie to.

 

1.
A cos podobnego do client_death z csx?
Zeby byl id broni z CSW, bo headshot to wiem offset i gitara :)


2. No ale jak uzyje fakemety zamiast cstrike i csx to chyba bedzie lepiej. 1 zamiast 3.?

3. Nie działa podmiana coś:

set_pev(id, pev_model, "models/player/esltt/esltt.mdl")
engfunc(EngFunc_SetModel, id, "models/player/esltt/esltt.mdl")

  • +
  • -
  • 0

#6 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 29.07.2014 14:26

A cos podobnego do client_death z csx?
Zeby byl id broni z CSW, bo headshot to wiem offset i gitara

Nie ma czegoś podobnego jeśli już chcesz nie używać csx to musisz pokombinować. Łapiesz Ham_Killed (post), pobierasz wartość z pev_inflictor (osoby która umarła), sprawdzasz czy byty osoby zabijającej i pev_inflictor są takie same:
• jeśli tak to pobierasz broń osoby która zabiła
• jeśli nie to sprawdzasz czy ten byt w ogóle istnieje (pev_inflictor) i czy czasem nie jest równy osobie zabitej (samobójstwo). W innych przypadkach to będzie HE/C4 lub niestandardowy byt. Aby je rozpoznać jest wiele sposobów.
 

3. Nie działa podmiana coś:

Ogułem wystarczy samo engfunc ale kiedyś miaem z tym porblemy na bytach innych niż gracz, może już tego nie ma, nwm zawsze możesz sprawdzić
  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#7 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 29.07.2014 15:32

Dobra. Zostaje tak jak jest. Rezygnuje z fakemetowania.

1. Jak inaczej łapać spawn niz przez hamsandwich?

2. Jak wyłączyć to żeby statystyki się nie zapisywały? (csstats.dat). Wystarczy usunac plik csstats.amxx?
  • +
  • -
  • 0

#8 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 29.07.2014 17:03

1. Jak inaczej łapać spawn niz przez hamsandwich?

Po co inaczej? W hamie masz dwa do wyboru Ham_Spawn (ogólny spawn każdego bytu) i Ham_CS_RoundRespawn (spawn co runde)
Możesz sie potrudzić z fakemetą lub z wiadomościami do klienta no ostatecznie zdarzenia rozpoczecia rundy (one nie odzwierciedlają dokładny czas spawnu gracza)
 

2. Jak wyłączyć to żeby statystyki się nie zapisywały? (csstats.dat). Wystarczy usunac plik csstats.amxx?

Nie plugin csstats.amxx jedynie służy do pokazywania statystyk. By graczom statystyki sie nie zapisywały wystarczy użyć cvar'u:
csstats_pause 1
lub wyłącz moduł csx ale wtedy utracisz dostęp do funkcji tego modułu sad.png
  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#9 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 30.07.2014 06:42

Czyli CSX odpowiada za to.

Wyłączył bym to najchętniej ale nwm jak pobrać id broni CSW z której został zabity.

 

 

A jeżeli użyje tej komendy to plik csstats.dat się usunie?


  • +
  • -
  • 0

#10 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 30.07.2014 08:42


Wyłączył bym to najchętniej ale nwm jak pobrać id broni CSW z której został zabity.

Łapiesz Ham_Killed (post), pobierasz wartość z pev_inflictor (osoby która umarła), sprawdzasz czy byty osoby zabijającej i pev_inflictor są takie same:
• jeśli tak to pobierasz broń osoby która zabiła
• jeśli nie to sprawdzasz czy ten byt w ogóle istnieje (pev_inflictor) i czy czasem nie jest równy osobie zabitej (samobójstwo). W innych przypadkach to będzie HE/C4 lub niestandardowy byt. Aby je rozpoznać jest wiele sposobów.

 

 


A jeżeli użyje tej komendy to plik csstats.dat się usunie?
Nie usunie się, powiem więcej nawet jeśli ty go usuniesz będzie dalej tworzony ale dane nie będą już się w nim zapisywać
  • +
  • -
  • 0
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#11 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 30.07.2014 08:49


TibacK, dnia 30 Lip 2014 - 07:42, napisał:


Wyłączył bym to najchętniej ale nwm jak pobrać id broni CSW z której został zabity.

BlackPerfum, dnia 29 Lip 2014 - 15:26, napisał:


Łapiesz Ham_Killed (post), pobierasz wartość z pev_inflictor (osoby która umarła), sprawdzasz czy byty osoby zabijającej i pev_inflictor są takie same:
• jeśli tak to pobierasz broń osoby która zabiła
• jeśli nie to sprawdzasz czy ten byt w ogóle istnieje (pev_inflictor) i czy czasem nie jest równy osobie zabitej (samobójstwo). W innych przypadkach to będzie HE/C4 lub niestandardowy byt. Aby je rozpoznać jest wiele sposobów.


 

Musiałem przeoczyć.

 


TibacK, dnia 30 Lip 2014 - 07:42, napisał:


A jeżeli użyje tej komendy to plik csstats.dat się usunie?

Nie usunie się, powiem więcej nawet jeśli ty go usuniesz będzie dalej tworzony ale dane nie będą już się w nim zapisywać

 

To dobrze. Czyli nie muszę robić backupu. Dzięki.


  • +
  • -
  • 0




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

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