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
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?
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...
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ć:
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?
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?
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...
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ć:
W przypdaku uzyskania pomocy ode mnie podeślij link do tematu z tego forum
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
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują
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?
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
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:
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:
static cell AMX_NATIVE_CALL cs_set_user_deaths(AMX *amx, cell *params) // cs_set_user_deaths(index, newdeaths); = 2 arguments
{
// Sets user deaths in cs.
// params[1] = user
// params[2] = new deaths
// Check index
CHECK_PLAYER(params[1]);
// Fetch player pointer
edict_t *pPlayer = MF_GetPlayerEdict(params[1]);
// Set deaths
*((int *)pPlayer->pvPrivateData + OFFSET_CSDEATHS) = params[2];
// Update scoreboard here..?
MESSAGE_BEGIN(MSG_ALL, GET_USER_MSG_ID(PLID, "ScoreInfo", NULL));
WRITE_BYTE(params[1]);
WRITE_SHORT((int)pPlayer->v.frags); // should these be byte?
WRITE_SHORT(params[2]); // should these be byte?
WRITE_SHORT(0); // dunno what this parameter is (doesn't seem to be vip) // should these be byte?
WRITE_SHORT(*((int *)pPlayer->pvPrivateData + OFFSET_TEAM)); // should these be byte?
MESSAGE_END();
*static_cast<int *>(MF_PlayerPropAddr(params[1], Player_Deaths)) = params[2];
return 1;
}
static cell AMX_NATIVE_CALL cs_set_user_team(AMX *amx, cell *params) // cs_set_user_team(index, team, model = 0); = 3 params
{
// Set user team
// params[1] = user index
// params[2] = team
// params[3] = model = 0
// Valid entity should be within range
CHECK_PLAYER(params[1]);
// Make into edict pointer
edict_t *pPlayer = MF_GetPlayerEdict(params[1]);
int model = params[3];
// Just set team. Removed check of 1-2-3, because maybe scripters want to create new teams, 4, 5 etc?
*((int *)pPlayer->pvPrivateData + OFFSET_TEAM) = params[2];
if (model != 0)
*((int *)pPlayer->pvPrivateData + OFFSET_INTERNALMODEL) = model;
// This makes the model get updated right away.
MDLL_ClientUserInfoChanged(pPlayer, GETINFOKEYBUFFER(pPlayer)); // If this causes any problems for WON, do this line only in STEAM builds.
// And update scoreboard by sending TeamInfo msg.
char teaminfo[32];
switch (params[2]) {
case TEAM_UNASSIGNED:
strcpy(teaminfo, "UNASSIGNED");
break;
case TEAM_T:
strcpy(teaminfo, "TERRORIST");
break;
case TEAM_CT:
strcpy(teaminfo, "CT");
break;
case TEAM_SPECTATOR:
strcpy(teaminfo, "SPECTATOR");
break;
default:
int team_nr = (int)params[2];
sprintf(teaminfo, "TEAM_%i", team_nr);
}
MESSAGE_BEGIN(MSG_ALL, GET_USER_MSG_ID(PLID, "TeamInfo", NULL));
WRITE_BYTE(params[1]);
WRITE_STRING(teaminfo);
MESSAGE_END();
if (params[2] == 1)
MF_SetPlayerTeamInfo(params[1], params[2], "TERRORIST");
else if (params[2] == 2)
MF_SetPlayerTeamInfo(params[1], params[2], "CT");
else
MF_SetPlayerTeamInfo(params[1], params[2], NULL);
return 1;
}
Na ich podstawie możesz coś wykombinować
1
Chcesz napisać do mnie na PW to:
Spoiler
Nie krzycz
Nie proś o niemożliwe
Wysławiaj się
Precuzuj wypowiedź
W przypdaku uzyskania pomocy ode mnie podeślij link do tematu z tego forum
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
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują
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
Nie krzycz
Nie proś o niemożliwe
Wysławiaj się
Precuzuj wypowiedź
W przypdaku uzyskania pomocy ode mnie podeślij link do tematu z tego forum
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
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują
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
1
Chcesz napisać do mnie na PW to:
Spoiler
Nie krzycz
Nie proś o niemożliwe
Wysławiaj się
Precuzuj wypowiedź
W przypdaku uzyskania pomocy ode mnie podeślij link do tematu z tego forum
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
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują
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
Nie krzycz
Nie proś o niemożliwe
Wysławiaj się
Precuzuj wypowiedź
W przypdaku uzyskania pomocy ode mnie podeślij link do tematu z tego forum
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
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują
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ć