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

Zabijanie gracza + Zarządzanie broniami...

nie chce mi sie tagowac

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

#1 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 03.07.2014 18:27

*
Popularny

Przeglądając swój komputer a dokładnie śmietnik (większość mojego kompa to śmietnik) trafiłem na bardzo ciekawe funkcje dotyczące broni, dlatego wpadłem na pomysł by się z wami nimi podzielić. Może ułatwią wam życie (może utrudnia biggrin.png). Na pewno komuś się to przyda a u mnie zalega.

Ostatnio był temat w którym się spierałem czym zabijać gracza dlatego zrobiłem ciekawą funkcję która byłaby która jest idealna do zabijania graczy. Dlaczego idealna? Bo fragi lecą do rankingu,samemu ustawiasz jaką bronią zabijasz (nie ma problemów z tą ikonką czachy), nie zabijam zadając dmg dlatego żaden plugin modyfikujący dmg lub leczący gracza w chwili otrzymania dmg nie koliduje z tą funkcją. Ta funkcja wyznaje kompatybilność ponad wszystko tzn. można śmierć wyłapać w Ham_Killed jak i event DeathMsg haha.gif

KillPlayer:
KillPlayer(id,inflictor,attacker,weapon,body,shouldgib,damagebits)
{
	if(weapon > 30 || !is_user_alive(id) || !is_user_connected(attacker))	return
	
	const GrenadeWeapon = 1<<CSW_HEGRENADE | 1<<CSW_C4 | 1<<CSW_SMOKEGRENADE | 1<<CSW_FLASHBANG
	const m_LastHitGroup = 75
	const m_bitsDamageType = 76
	const m_fHasTakenHighDamage = 107
	static DeathMsgId
	new msgblock,weaponname[32],effect
	if (!DeathMsgId)	DeathMsgId = get_user_msgid("DeathMsg")
	
	set_pdata_int(id,m_LastHitGroup,body,5)
	set_pdata_int(id,m_bitsDamageType,damagebits,5)
	set_pdata_int(id,m_fHasTakenHighDamage,1,5)
	set_pev(id,pev_dmg_inflictor,inflictor)
	msgblock = get_msg_block(DeathMsgId)
	set_msg_block(DeathMsgId, BLOCK_SET)
	ExecuteHamB(Ham_Killed,id,attacker,shouldgib)
	set_msg_block(DeathMsgId, msgblock)
	if(is_user_alive(id))	return
	
	effect = pev(id,pev_effects)
	if(effect & 128)	set_pev(id,pev_effects,effect-128)
	
	new len
	if(get_weaponname(weapon,weaponname,31))
	{
		if(~GrenadeWeapon & 1<<weapon) len = 7
		else weaponname = "grenade"
	}
	else if(weapon == 2)	weaponname = "tracktrain"
	else	weaponname = "world"
	
	emessage_begin(MSG_ALL, DeathMsgId)
	ewrite_byte(attacker)
	ewrite_byte(id)
	ewrite_byte(body == HIT_HEAD ? 1:0)
	ewrite_string(weaponname[len])
	emessage_end()
}
Działanie: Zabija gracza

Zalety: Poprawnie dodaje nam fraga do ranku, do tablicy wyników, poprawnie wyskakuje ikonka zabicia w prawym górnym rogu. Nie zadaje dmg a poprostu zabija a zatem żaden inny plugin modyfikujący dmg nie przerwie procesu zabijania gracza. Taki kill na 100% (99,(9)%) Dodatkowo: usuwa zbędne efekty,ustawia byt jakim zabijamy (inflictor), część ciała w którą trafiliśmy śmiertelnym ciosem, ustawia takie jakie chcemy damagebits haha.gif

Wady: Brak

Parametry:
id - osoba którą chcemy zabić (1~32)
inflictor - byt którym zabijamy (przy broniach z cs'a inflictor == attacker jedynie przy he to byt)
attacker - osoba która ma zabić osobe id (1~32)
weapon - numer broni (to z CSW_*) którą mamy zabić gracza. W przypadku weapon == 0 broń zabijająca to "world" czyli pokaże nam czache w prawym górnym rogu
body - część ciała w którą trafiliśmy (części ciała te z HIT_*) w przypadku wybuchów (np. he) body == 0
shouldgib - sposób w jaki ma zostać pokazane ciało po śmierci (typy GIB_*)
damagebits - damagebits które spowodowało śmierć (DMG_*)

Przykładowe użycie:


KillPlayer(1,124,2,CSW_HEGRENADE,HIT_GENERIC,0,1<24)
Gracz o id 2 zabija gracza o id 1 za pomocą granatu HE o id 124.W taki sam sposób cs zabija graczy z HE haha.gif



Teraz funkcje operujące na broniach:
SetUserWeaponInHand:
SetUserWeaponInHand(id,weapon)
{
	const m_pActiveItem = 373
	const m_pPlayer = 41
	new classname[32]
	if(is_user_alive(id) && get_weaponname(weapon,classname,31) && weapon !=2 && weapon <= 30)
	{
		while((weapon = engfunc(EngFunc_FindEntityByString,weapon,"classname",classname)))
		{
			if(pev_valid(weapon) == 2 && get_pdata_cbase(weapon,m_pPlayer,4) == id)
			{
				set_pdata_cbase(id,m_pActiveItem,weapon,5)
				ExecuteHam(Ham_Item_Deploy, weapon)
				return weapon
			}
		}
	}
	return 0
}
Działanie: Ustawia graczu broń w dłoni. Zwróci 0 jeśli gracz nie posiada danej broni. Dodatkowo zwraca id bytu nowo trzymanej broni

Zalety: Nie wysyła graczu komendy do konsoli aby zmienić broń a po prostu informuje gracza która broń teraz trzyma. Szybsze działanie funkcji niż client_cmd/engclient_cmd nawet przy 300 ent'ach o tym samym classname (sam się zdziwiłem) (sprawdzane w profilerze haha.gif).

Wady: Brak

Parametry:
id - osoba której zmieniamy broń (1~32)
weapon - numer broni (to z CSW_*) na która chcemy zmienić

Przykładowe użycie:


SetUserWeaponInHand(id,CSW_KNIFE)
Gracz o id równym id wyciągnie nóż.


GetUserWeapon:
GetUserWeapon(id,&wid=0)
{
	const m_pActiveItem = 373
	const m_iId = 43
	if(!is_user_alive(id) || pev_valid((wid = get_pdata_cbase(id,m_pActiveItem,5))) != 2)	return 0
	
	return get_pdata_int(wid,m_iId,4)
}
Działanie: Zwraca id broni którą aktualnie mamy wyciągniętą (id z CSW_* poprzez return i id bytu broni poprzez referencję w opcjonalnym drugim parametrze)

Zalety: Funkcja zwróci poprawne id (CSW_*/bytu) nawet podczas wyciągania broni lub jej chowania. Po co to komu? Przeciez jest get_user_weapon a próbowaliście kiedyś pobrać id za pomocą get_user_weapon w Ham_ItemDeploy albo Ham_CS_Player_ResetMaxSpeed jeśli tak to będziecie wiedzieć że zwróci niepoprawny wynik tzn. zwróci broń jaką mieliśmy ostatnio a moja funkcja zwróci prawidłowy wynik dodatkowo jeśli chcecie to możecie pobrać id bytu broni w drugim opcjonalnym argumncie

Wady: Brak

Parametry:
id - osoba której sprawdzamy broń (1~32)
wid* - do tego argumentu zostanie wpakowane id bytu aktualnie posiadanej broni poprzez referencję
* - argument opcjonalny tzn. argument niewymagany można go pominąc jeśli się go nie chce

Przykładowe użycie:


new weapon = GetUserWeapon(id)
Do zmiennej weapon zostanie wpakowane id (to z CSW_*) broni którą aktualnie trzymamy
Lub:
new wid
new weapon = GetUserWeapon(id,wid)
Do zmiennej weapon zostanie wpakowane id (to z CSW_*) broni którą aktualnie trzymamy oraz do zmiennej wid zostanie wpakowane id bytu naszej broni


GetUserAmmo:
GetUserAmmo(id,&ammo=0,&bpammo=0,weapon=0)
{
	const m_iPrimaryAmmoType = 49
	const m_rgAmmo = 376
	const m_iClip = 51
	const m_pActiveItem = 373
	const m_pPlayer = 41
	if(!is_user_alive(id) || (!weapon && pev_valid((weapon = get_pdata_cbase(id,m_pActiveItem,5))) != 2))	return 0
	
	new classname[32]
	if(weapon <= 30 && get_weaponname(weapon,classname,31))
	{
		while((weapon = engfunc(EngFunc_FindEntityByString,weapon,"classname",classname)))
		{
			if(pev_valid(weapon) == 2 && get_pdata_cbase(weapon,m_pPlayer,4) == id)	goto GetAmmo
		}
		return 0
	}
	
	GetAmmo:
	ammo = get_pdata_int(weapon,m_iClip,4)
	bpammo = get_pdata_int(id,m_rgAmmo+get_pdata_int(weapon,m_iPrimaryAmmoType,4),5)
	return weapon
}
Działanie: Pobiera do drugiego argumentu (opcjonalnego) ilość ammo nabitego, do trzeciego argumentu (opcjonalnego) ilośc ammo w plecaku gracza, oraz zwraca id bytu broni (dla broni wyciągniętej w przypadku weapon == 0 lub dla danej broni weapon == CSW_*). Zwróci 0 w przypadku gdy broń zawarta w argumencie weapon nie zostanie odnaleziona

Zalety: Funkcja działa jak ty chcesz możesz pobrać tylko ammo w plecaku lub tylko ammo nabite, możesz pobrac ammo dla wyciągniętej broni lub dla jakiejś której aktualnie nie trzymamy ale ją posiadamy

Wady: Nie da się pobrać ammo w plecaku jeśli gracz nie posiada danej broni sad.png

Parametry:
id - osoba której sprawdzamy ammo (1~32)
ammo* - do tego argumentu zostanie wpakowana ilość ammo, która jest nabita w broni
bpammo* - do tego argumentu zostanie wpakowana ilość ammo, która jest w plecaku dla danej broni
weapon* - ten argument decyduje czy ma pobrać ammo dla broni aktualnie wyciągniętej (weapon == 0) czy dla broni posiadanej (weapon == CSW_*)
* - argument opcjonalny tzn. argument niewymagany można go pominąc jeśli się go nie chce

Przykładowe użycie:


new weapon,ammo,bpammo
weapon = GetUserAmmo(id,ammo,bpammo)
Do zmiennej weapon zostanie wpakowane id bytu broni którą aktualnie trzymamy, do zmiennej ammo zostanie wpakowana ilośc ammo nabitego w broni oraz do zmiennej bpammo zostanie wpakowana ilośc ammo posiadanego w plecaku przez gracza do tej broni
Lub:
new bpammo
GetUserAmmo(id,.bpammo=bpammo,.weapon=CSW_AK47)
O ile gracz posiada AK47 to do zmiennej bpammo zostanie zwrócona ilość ammo posiadanego w plecaku do AK47


SetUserAmmo:
SetUserAmmo(id,ammo=-2,bpammo=-2,weapon=0)
{
	const m_iPrimaryAmmoType = 49
	const m_rgAmmo = 376
	const m_iClip = 51
	const m_pActiveItem = 373
	const m_pPlayer = 41
	const m_fWeapon = 351
	if(!is_user_alive(id) || (!weapon && pev_valid((weapon = get_pdata_cbase(id,m_pActiveItem,5))) != 2))	return 0
	
	new classname[32]
	if(weapon <= 30 && get_weaponname(weapon,classname,31))
	{
		while((weapon = engfunc(EngFunc_FindEntityByString,weapon,"classname",classname)))
		{
			if(pev_valid(weapon) == 2 && get_pdata_cbase(weapon,m_pPlayer,4) == id)	goto SetAmmo
		}
		return 0
	}
	
	SetAmmo:
	if(ammo > -2)	set_pdata_int(weapon,m_iClip,ammo,4)
	if(bpammo > -2)	set_pdata_int(id,m_rgAmmo+get_pdata_int(weapon,m_iPrimaryAmmoType,4),bpammo,5)
	
	set_pdata_int(id,m_fWeapon,0,5)
	return weapon
}
Działanie: Ustawia graczu ilość ammo nabitego i/lub w plecaku dla aktualnej broni lub wybranej. Można także ustawić by z którejś broni nie dało się strzelać (ammo == -1 i bpammo == -1) efekt bardzo ciekawy. Odświeża hud.

Zalety: Odświeża hud po zmianie ilości ammo. Możliwośc zablokowania strzelania z danej broni. Możliwość ustawienia tyle i takie ammo jakie chcemy.

Wady: Nie da się ustawić ammo w plecaku jeśli gracz nie posiada danej broni sad.png

Parametry:
id - osoba której ustawiamy ammo (1~32)
ammo* - ilośc ammo nabita jaka zostanie ustawiona
bpammo* - ilośc ammo w plecaku jaka zostanie ustawiona
weapon* - ten argument decyduje czy ma ustawić ammo dla broni aktualnie wyciągniętej (weapon == 0) czy dla broni posiadanej (weapon == CSW_*)
* - argument opcjonalny tzn. argument niewymagany można go pominąc jeśli się go nie chce

Przykładowe użycie:


SetUserAmmo(id,0,0)
Zabranie wszystkiego ammo aktualnie trzymanej broni.
Lub:
SetUserAmmo(id,100,.weapon=CSW_USP)
O ile gracz posiada USP to ilośc nabitego ammo w USP zostanie zmieniona na 100 (no to sobie można postrzelać haha.gif)
Lub:
SetUserAmmo(id,-1,-1,CSW_M4A1)
Zablokowanie możliwości strzelanie (nie widać ilości ammo w hud, nie słychac pykania pustego magazynku). Efekt do przeładowania.


GetWeaponAmmo:
GetWeaponAmmo(wid)
{
	const m_iClip = 51
	if(pev_valid(wid) != 2)	return 0

	return get_pdata_int(wid,m_iClip,4)
}
Działanie: Zwraca ilośc ammo w danej broni

Zalety: Możliwośc sprawdzenia ilości ammo nawet jeśli broń leży na ziemi

Wady: Brak

Parametry:
wid - id bytu broni (nie mylić z CSW_*)

Przykładowe użycie:


new ammo = GetWeaponAmmo(wid)
Do zmiennej ammo zostanie wpakowana ilość ammo nabitego w broni o id równym wid



SetWeaponAmmo:
SetWeaponAmmo(wid,ammo)
{
	const m_fWeapon = 351
	const m_iClip = 51
	const m_pActiveItem = 373
	const m_pPlayer = 41
	if(pev_valid(wid) != 2)	return
	
	set_pdata_int(wid,m_iClip,ammo,4)
	new id = get_pdata_cbase(wid,m_pPlayer,4)
	if(is_user_alive(id) && get_pdata_cbase(id,m_pActiveItem,5) == wid)	set_pdata_int(id,m_fWeapon,0,5)
}
Działanie: Ustawia ilość ammo nabitego w danej broni. Jeśli trzyma tą broń gracz to odświeża mu hud

Zalety: Możliwośc ustawienia ilości ammo nawet jeśli broń leży na ziemi

Wady: Brak

Parametry:
wid - id bytu broni (nie mylić z CSW_*)
ammo - ilośc ammo która zostanie ustawiona

Przykładowe użycie:


SetWeaponAmmo(wid,5)
Broni o id równym wid zostanie ustawiona ilośc ammo równa 5



GetUserWeaponsId:
GetUserWeaponsId(id,wid,slot=0)
{
	static const m_rgpPlayerItems[6] = { 367 , 368 , ... }
	const m_pPlayer = 41
	const m_pNext = 42
	if(pev_valid(wid) != 2)
	{
		if(slot)
		{
			wid = get_pdata_cbase(id,m_rgpPlayerItems[slot],5)
			return pev_valid(wid) == 2 ? wid:0
		}
	}
	else if(get_pdata_cbase(wid,m_pPlayer,4) == id)
	{
		new numslot = ExecuteHam(Ham_Item_ItemSlot,wid)+1
		wid = get_pdata_cbase(wid,m_pNext,4)
		if(pev_valid(wid) == 2)	return wid
		else if(slot)	return 0
		
		slot = numslot
		
	}
	for(new i = slot;i<6;i++)
	{
		wid = get_pdata_cbase(id,m_rgpPlayerItems[i],5)
		if(pev_valid(wid) == 2)	return wid
	}
	return 0
}
Działanie: Zwraca id bytu następnej posiadanej broni (lub pierwszej w przypadku wid == 0). W danym slocie lub we wszystkich slotach. Działa na podobnej zasadzie do find_ent_by_owner lub engfunc+EngFunc_FindEntityByString.

Zalety: W łatwy sposób można przelecieć po wszystkich broniach gracza lub z danego slota

Wady: Brak

Parametry:
id - id gracza z którego zostanie pobrana broń (1~32)
wid - id poprzedniej broni (nie mylić z CSW_*)
slot* - ten argument decyduje czy pobierać bronie ze wszystkich slotów (slot == 0) czy z danego (slot == x)
* - argument opcjonalny tzn. argument niewymagany można go pominąc jeśli się go nie chce

Przykładowe użycie:


new wid
while((wid = GetUserWeaponsId(id,wid)))
{
	SetWeaponAmmo(wid,0)
}
Wszystkim broniom gracza zostanie zabrane nabite ammo tzn. nabite ammo we wszystkich broniach == 0 haha.gif
Lub:
new wid
while((wid = GetUserWeaponsId(id,wid,1)))
{
	SetWeaponAmmo(wid,GetWeaponAmmo(wid)+10)
}
Do każdej broni gracza w slocie nr. 1 (primary weapon) zostanie dodane 10 ammo



GetUserWeaponId:
GetUserWeaponId(id,weapon)
{
	static const m_rgpPlayerItems[6] = { 367 , 368 , ... }
	const m_pNext = 42
	const m_pNext = 42
	const m_iId = 43
	static const iWeaponsSlots[] = { -1, 2, -1, 1, 4, 1, 5, 1, 1, 4, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 4, 2, 1, 1, 3, 1 }
	
	if(weapon == 2 || !(0 < weapon < 31))	return 0
	
	new wid = get_pdata_cbase(id,m_rgpPlayerItems[iWeaponsSlots[weapon]],5)
	while(pev_valid(wid) == 2)
	{
		if(get_pdata_int(wid,m_iId,4) == weapon)	return wid
		
		wid = get_pdata_cbase(wid,m_pNext,4)
	}
	return 0
}
Działanie: Zwraca id bytu wybranej broni o ile ją posiadamy.

Zalety: Zwróci id nawet jeśli danej broni nie trzymamy w rękach a mamy ją w plecaku

Wady: Brak

Parametry:
id - id gracza z którego zostanie pobrana broń (1~32)
weapon - numer broni (to z CSW_*)

Przykładowe użycie:


new wid = GetUserWeaponId(id,CSW_AK47)
Do zmiennej wid zostanie wpakowane id bytu nszego AK47 (o ile go posiadamy)


GetWeaponId:
 
GetWeaponId(wid)
{
	const m_iId = 43
	if(pev_valid(wid) != 2)	return 0
	
	return get_pdata_int(wid,m_iId,4)
}
Działanie: Zwraca numer broni (to z CSW_*) na podstawie id bytu broni

Zalety: Brak

Wady: Brak

Parametry:
wid - id bytu broni

Przykładowe użycie:


new weapon = GetWeaponId(wid)
Do zmiennej weapon wpakowaliśmy numer (ten z CSW_*) broni o id równym wid

To tyle nie chcemi się już więcej tego pisać. Powiem jeszcze że sume bitowa wszystkich broni gracza można pobrać za pomocą pev_weapons. Czemu czasem używam szukania za pomocą FindEntByString a czasem przeszukuje bronie gracza? By pokazać wam dwa sposoby 1 jest szybszy o ile nie ma na mapie powyżej 30 entów o tym samym classname. Mam nadzieję że nigdzie offsetu nie pomyliłem. Szczególnie polecam zabijania gracza za pomocą KillPlayer ;D
BlackPerfum (17.07.2014 16:48):
Funkcja KillPlayer uaktualniona (na ta z drugiej strony tematu xD) dodano możliwość wyświetlenia .spr ciufci w prawym górnym rogu jako byt zabijający (tam gdzie jest broń z jakiej zabiliśmy danego gracza)

Użytkownik BlackPerfum edytował ten post 17.07.2014 22:43

  • +
  • -
  • 15
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

#2 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 04.07.2014 23:04

"KillPlayer"
A co jeśli chce zadać dmg jakąś swoją niestandardową bronią i chcę to w jakiś sposób wychwycić w jakimś evencie?

"GetUserWeapon"
Pamiętam, że miałem tutaj raz problem z "get_user_weapon" jakoś przy ammo, być może ta funkcja była by rozwiązaniem.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#3 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 05.07.2014 07:31

O stary....

dzięki Ci wieklie za te funkcje ( KillPlayer :) ).
Z KillPlayer zrobie chyba natyw :)

podaj jeszcze przykład funkcji w których get_user_weapon nie działa prawidłowo.
  • +
  • -
  • 0

#4 BlackPerfum

    Pseudo interakcja??

  • Autor tematu
  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 05.07.2014 11:48

"KillPlayer"
A co jeśli chce zadać dmg jakąś swoją niestandardową bronią i chcę to w jakiś sposób wychwycić w jakimś evencie?

Do zadawania dmg (które chce się wychwycić) jest ExecuteHamB + Ham_TakeDamage ale oczywiście to zależy od eventu w jakim chcesz wychwycić dmg. Polecam dodatkowo że jeśli to ma byc niestandardowa broń to lepiej pokombinowac z pdata haha.gif
 

Dzięki Ci wieklie za te funkcje ( KillPlayer ).

Ależ proszę haha.gif Używaj tej wersji nie tamtej co ci podesłałem bo ta lepsza (i nie ma literówki w pierwszym warunku haha.gif)
 

Z KillPlayer zrobie chyba natyw

Po co ?? Tylko spowolnisz tą funkcję. Lepiej używaj tego jako funkcję lokalną lub zrób sobie bibliotekę i jako stock haha.gif
 
Dlaczego ją spowolnisz ?? Jeśli zrobisz ją jako natyw to będzie tak działać:
Najpierw plugin w którym używasz natywu informuje amxx o tym że ten natyw jest wykonany potem amxx informuje plugin o wykonaniu natywu w którym natyw informuje amxx o zabiciu gracza haha.gif
A jesli to nie będzie natyw to po prostu funkcja będzie informować amxx'a o zabiciu gracza haha.gif
 

podaj jeszcze przykład funkcji w których get_user_weapon nie działa prawidłowo.

próbowaliście kiedyś pobrać id za pomocą get_user_weapon w Ham_ItemDeploy albo Ham_CS_Player_ResetMaxSpeed jeśli tak to będziecie wiedzieć że zwróci niepoprawny wynik

Ogółem to chyba nie podziała prawidłowo we wszystkich eventach wykonujących się przed CurWeapon i to jest dosyć spora wada biggrin.png
  • +
  • -
  • 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

#5 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 05.07.2014 11:58

Do zadawania dmg (które chce się wychwycić) jest ExecuteHamB + Ham_TakeDamage ale oczywiście to zależy od eventu w jakim chcesz wychwycić dmg. Polecam dodatkowo że jeśli to ma byc niestandardowa broń to lepiej pokombinowac z pdata haha.gif

Nie o to chodzi. Ogólnie ja nie pytam, bo chcę już tak to gdzieś wykorzystać i nie wiem jak, tylko po prostu uważam, że ta funkcja dalej nie jest idealna. Co jeśli mam moda (patrz mój diablo), który ma jakieś niestandardowe bronie, nie koniecznie jako jakaś broń, że wybieramy ją z ekwipunku, ale także jakieś moce, które używamy za pomocą jakiegoś bindu i będę zabijał tym sposobem, to jak mam wychwycić zabójstwo i wiedzieć z czego dokładnie (z jakiej broni/mocy) gracz został zabity? Bo wiesz, aktualnie mam tak zrobione, że przy każdym zabójstwie wiem z jakiej broni/mocy gracz został zabity i wykorzystuję to chociażby do questów (znaczy może już nie wykorzystuję, bo serwer będę zamykał).
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#6 BlackPerfum

    Pseudo interakcja??

  • Autor tematu
  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 05.07.2014 12:05

Nie o to chodzi. Ogólnie ja nie pytam, bo chcę już tak to gdzieś wykorzystać i nie wiem jak, tylko po prostu uważam, że ta funkcja dalej nie jest idealna. Co jeśli mam moda, który ma jakieś niestandardowe bronie, nie koniecznie jako jakaś broń, że wybieramy ją z ekwipunku, ale także jakieś moce, które używamy za pomocą jakiegoś bindu i będę zabijał tym sposobem, to jak mam wychwycić zabójstwo i wiedzieć z czego dokładnie (z jakiej broni, mocy, itd.) gracz został zabity?

Nie zrozumiał przez:

A co jeśli chce zadać dmg

Bo napisałem że:

Nie zadaje dmg a poprostu zabija

Dlatego nie skumałem sorki xD

Zamieniasz inflictor na swój byt (podczas zabijania) i w swoim evencie pobierasz wartość z pev_dmg_inflictor (jeśli dany event nie posiada tego argumentu w nagłówku). Dalej to już twój problem po czym rozpoznasz dany byt ja tylko pokazuje jak jego id przesłać ;D
  • +
  • -
  • 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

#7 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 05.07.2014 12:11

if(weapon == 2 || weapon > 30
A potem jeszcze pobierasz nazwę, a u mnie każda nowa broń ma swoje id, większe od 30, a dodatkowo jeśli ktoś nie chce mieć sprite "world" tylko jakieś inne?

A czemu id broni kontynuują numerację zwykłych broni? Wtedy w łatwy sposób sprawdza się, z której gracz został zabity, bo wystarczy wysyłać forward z informacjami, a w innym pluginie dawać wszędzie taki sam warunek
if(weapon == id_broni_z_qesta)

  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#8 BlackPerfum

    Pseudo interakcja??

  • Autor tematu
  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 05.07.2014 12:22

A potem jeszcze pobierasz nazwę, a u mnie każda nowa broń ma swoje id, większe od 30, a dodatkowo jeśli ktoś nie chce mieć sprite "world" tylko jakieś inne?

Argument weapon jest tylko i wyłącznie do tego aby wybrać sobie ikonkę wyświetlaną w DeathMsg tzn. możesz kogoś zabić z pioruna ale tu dac np. M4 i wszystko będzie działać. Musiał byś dodać własną ikonę do cs'a aby to nie podziałało dla twojej ale jeśli dodajesz ikonę własną to co za problem zmodyfikowac tą funkcję??

 

Lepiej to ujmę weapon możesz sobie ustawić np. na M4A1 a inflictor na id Ak47 i to ci w niczym nie koliduje bo podczas sprawdzania z czego gracz został zabity (o ile będziesz sprawdzał tak jak napisałem pev_dmg_inflictor a nie np. string'a w DeathMsg) pokaże że gracz został zabity z ak (chociaż że w parawym górnym rogu pojawiła się ikonka M4)


Użytkownik BlackPerfum edytował ten post 05.07.2014 12:26

  • +
  • -
  • 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

#9 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 05.07.2014 12:30

możesz kogoś zabić z pioruna ale tu dac np. M4 i wszystko będzie działać

Dobrze o tym wiem, tylko w tym przypadku, trzeba to robić w Twojej funkcji, a nie w evencie.


Ja dobrze wiem, że jakbym chciał, to bym tę funkcję mógł edytować pod siebie, chodzi po prostu mi o to, że nie jest ona uniwersalna, czyli nie jest idealna.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#10 BlackPerfum

    Pseudo interakcja??

  • Autor tematu
  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 05.07.2014 12:38

Ja dobrze wiem, że jakbym chciał, to bym tę funkcję mógł edytować pod siebie, chodzi po prostu mi o to, że nie jest ona uniwersalna, czyli nie jest idealna.

Przepraszam że pociągu nie dodałem bo to jest chyba jedyna ikonka której się moją funkcją nie da wyświetlić (już wolę go nie pokazywać niż sprawdzać czy string jest poprawny) ;D

 

Dobrze o tym wiem, tylko w tym przypadku, trzeba to robić w Twojej funkcji, a nie w evencie.

Nie rozumiem cię trochę. Podaj przykład w którym jesteś zmuszony do edytowania funkcji


  • +
  • -
  • 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

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 05.07.2014 12:45


Przepraszam że pociągu nie dodałem bo to jest chyba jedyna ikonka której się moją funkcją nie da wyświetlić (już wolę go nie pokazywać niż sprawdzać czy string jest poprawny) ;D

 

WaT?

 

 


Po co ?? Tylko spowolnisz tą funkcję. Lepiej używaj tego jako funkcję lokalną lub zrób sobie bibliotekę i jako stock haha.gif

 

No okej czyli mam to wkleić do plugina po prostu. A czemu nie public zamiast stock?

 

PS. 6x xD w jednym poście? No nieźle xD ...


  • +
  • -
  • 0

#12 BlackPerfum

    Pseudo interakcja??

  • Autor tematu
  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 05.07.2014 12:59

WaT?

Za pomocą mojej funkcji nie zabijesz z ikonką pociągu przy zabiciu :( To bardzo smutne...

No okej czyli mam to wkleić do plugina po prostu.

Tak

A czemu nie public zamiast stock?

Napisałem żebyś użył przedrostka stock jeśli dodajesz tą funkcję do swojej biblioteki. Funkcje stock mają tą właściwość że nie są brane pod uwagę jeśli z nich nie korzystasz. Jeśli nie robisz własnej biblioteki a dodajesz bezpośrednio do kodu to nie ma większej różnicy czy będzie to funkcja publiczna czy lokalna (ale tylko w tym przypadku xD)

PS. 6x w jednym poście? No nieźle ...

6x xD + 1x :D
  • +
  • -
  • 2
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

#13 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 05.07.2014 13:13


Za pomocą mojej funkcji nie zabijesz z ikonką pociągu przy zabiciu :( To bardzo smutne...

 

Jakiego pociągu!?

 


Napisałem żebyś użył przedrostka stock jeśli dodajesz tą funkcję do swojej biblioteki. Funkcje stock mają tą właściwość że nie są brane pod uwagę jeśli z nich nie korzystasz. Jeśli nie robisz własnej biblioteki a dodajesz bezpośrednio do kodu to nie ma większej różnicy czy będzie to funkcja publiczna czy lokalna (ale tylko w tym przypadku xD)

 

Dobra. A lokalna i publiczna to takie coś?

public qwertyuiop(lu, bie, plac, ki) // publiczna

qwertyuiop(lu, bie, plac, ki) // lokalna

I jaka różnica?

 

 

@topic

Super funkcje.

A nie ma możliwości żeby offset się mylił ( ? ) ? Trzymał błędne wyniki


  • +
  • -
  • 0

#14 BlackPerfum

    Pseudo interakcja??

  • Autor tematu
  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 05.07.2014 13:26

Jakiego pociągu!?

Kiedyś benio o tym pisał o ile dobrze pamiętam xD
http://doktor.haze.f...reens/index.php tymi z przedrostkiem d_* możesz użyć do DeathMsg jako ikonke

Dobra. A lokalna i publiczna to takie coś?

Tak
 

I jaka różnica?

Do lokalnej masz dostęp tylko w danym pluginie a publicznej wszystko może użyć poczytaj sobie o callfunc_begin haha.gif
 

A nie ma możliwości żeby offset się mylił

Jeśli w nowych binarkach niczego nie zmienią to offsety wszystkie są wporządku (wczoraj wszystkie sprawdzałem a temat napisałem 3 dni temu haha.gif)
 

Trzymał błędne wyniki

Tylko ingerencja w kod może sprawić że będzie się mylił ale jeśli on będzie się mylił (lub nieudolne funkcje wbudowane w cs'ie/cheaty) to po chwili ukaże nam się piękny efekt domina haha.gif

Użytkownik BlackPerfum edytował ten post 05.07.2014 13:28

  • +
  • -
  • 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

#15 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 05.07.2014 13:35


Kiedyś benio o tym pisał o ile dobrze pamiętam xD
http://doktor.haze.f...reens/index.php tymi z przedrostkiem d_* możesz użyć do DeathMsg jako ikonke

 

A jakbym zmodyfikowal tą funkcje to można by wpakować np. dmg_shock?? //edit. Nie da sie wiem już

 

Reszta zrozumiała! :)


  • +
  • -
  • 0

#16 BlackPerfum

    Pseudo interakcja??

  • Autor tematu
  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 05.07.2014 13:37

A jakbym zmodyfikowal tą funkcje to można by wpakować np. dmg_shock??

tymi z przedrostkiem d_* możesz użyć do DeathMsg jako ikonke


  • +
  • -
  • 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

#17 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 05.07.2014 14:57

Przepraszam że pociągu nie dodałem bo to jest chyba jedyna ikonka której się moją funkcją nie da wyświetlić (już wolę go nie pokazywać niż sprawdzać czy string jest poprawny) ;D

Niestety, nie o to mi chodzi. Chociażby w różnych modach masz kuszę, jakieś bomby, itp. i tutaj chcąc wyświetlić sprite do takich broni inne niż world, czyli he, kosa, itp. trzeba edytować Twoją funkcję i to jest właśnie także ten przykład. Zresztą samo wywalanie sprawdzania weapon i potem grzebanie przy sprwadzaniy nazwy przez "get_weaponname" jest już edycją Twojej funkcji.

Piszę o tym, bo jednak takie nagłe zabijanie bardzo często wykorzystuje się w różnego rodzaju modach, a nie tylko jakiś cod, gdzie masz 1/x szansy na zabicie ze standardowej broni. Nie chcesz pomyśleć nad tym, aby zrobić tę funkcję bardziej uniwersalną? Nie rób tego, nikt Cię nie zmusza, ale te posty pisałem właśnie po to, żeby Cię do tego przekonać.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#18 BlackPerfum

    Pseudo interakcja??

  • Autor tematu
  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 05.07.2014 15:12

Niestety, nie o to mi chodzi. Chociażby w różnych modach masz kuszę, jakieś bomby, itp. i tutaj chcąc wyświetlić sprite do takich broni inne niż world, czyli he, kosa, itp. trzeba edytować Twoją funkcję i to jest właśnie także ten przykład.

Nie!!! Przeczytaj każdą linijkę dziesięć razy w tej funkcji haha.gif W takim wypadku robisz tak:
KillPlayer(x,y,z,CSW_HEGRENADE/CSW_KNIFE,HIT_GENERIC,0,1<24)
• x - osoba która zginie
• y - id kuszy/bomby/czegoś tam
• z - id gracza który zabija
I kolejny argument odpowiada TYLKO za ikonke w prawym górnym rogu tzn. możesz tam dać CSW_HEGRENADE lub CSW_KNIFE i pokaże ci tam nóż czy he!!! A dalsze argumenty są nieistotne (w kwestii wytłumaczenia ci) Tą funkcję musiał byś edytować dopiero jeśli byś chciał dodać jakąś niestandardową ikonę np. pociąg/coś od siebie.
 

Piszę o tym, bo jednak takie nagłe zabijanie bardzo często wykorzystuje się w różnego rodzaju modach, a nie tylko jakiś cod, gdzie masz 1/x szansy na zabicie ze standardowej broni. Nie chcesz pomyśleć nad tym, aby zrobić tę funkcję bardziej uniwersalną? Nie rób tego, nikt Cię nie zmusza, ale te posty pisałem właśnie po to, żeby Cię do tego przekonać.

Ta funkcja jest uniwersalna!!! Jedynie niepozwala na ustawienie niestandardowej ikony (ale wszystkie dostępne w cs'ie możesz użyć). Broń tez możesz ustawić niestandardową. Nic tu nam nie przyszkadza. Nadal mnie nie przekonałeś.
  • +
  • -
  • 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

#19 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 05.07.2014 15:15

I wtedy nie będę mógł sprawdzić poprzez nazwę broni (w evencie śmierci można to sprawdzać) z czego dany gracz został zabity, bo wyświetlając tę ikonę w ten sposób jak to jest u Ciebie, nie zmienia się tylko wyświetlane sprite, ale także będzie zaliczać fraga z tej broni. Jedno kłóci się z drugim, chyba więcej kombinacji niż zabijanie przez zadawanie większych dmg.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#20 BlackPerfum

    Pseudo interakcja??

  • Autor tematu
  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 05.07.2014 15:58

I wtedy nie będę mógł sprawdzić poprzez nazwę broni (w evencie śmierci można to sprawdzać) z czego dany gracz został zabity, bo wyświetlając tę ikonę w ten sposób jak to jest u Ciebie, nie zmienia się tylko wyświetlane sprite, ale także będzie zaliczać fraga z tej broni. Jedno kłóci się z drugim, chyba więcej kombinacji niż zabijanie przez zadawanie większych dmg.

Zalicza fraga nie z tej broni a z world'a (chyba że dodasz classname swojego swój byta (który podajesz do inflictor) do csstats za pomocą custom_weapon_add). I będziesz mógł sprawdzic za pomoca czego zabiłeś gracza!! Roboty jest tyle samo co przy zwykłym sprawdzaniu za pomocą zadawania dmg haha.gif Przykład:
Spoiler

Tylko nie mów że dużo kombinowania bo tyle samo co przy normalnym łapaniu w dodatku użyłem classname tylko i wyłącznie dlatego że powiedziałeś że chcesz nazwę broni haha.gif

Użytkownik BlackPerfum edytował ten post 05.07.2014 15:59

  • +
  • -
  • 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





Również z jednym lub większą ilością słów kluczowych: nie chce mi sie tagowac

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

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