Zabijanie gracza + Zarządzanie broniami
BlackPerfum
03.07.2014
![biggrin.png](https://amxx.pl/public/style_emoticons/default/biggrin.png)
Ostatnio był temat w którym się spierałem czym zabijać gracza dlatego zrobiłem ciekawą funkcję
![haha.gif](https://amxx.pl/public/style_emoticons/default/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](https://amxx.pl/public/style_emoticons/default/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](https://amxx.pl/public/style_emoticons/default/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
![](https://amxx.pl/favicons.png)
![](https://amxx.pl/favicons.png)
![haha.gif](https://amxx.pl/public/style_emoticons/default/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
![](https://amxx.pl/favicons.png)
![](https://amxx.pl/favicons.png)
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](https://amxx.pl/public/style_emoticons/default/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](https://amxx.pl/public/style_emoticons/default/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](https://amxx.pl/public/style_emoticons/default/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
![](https://amxx.pl/favicons.png)
![](https://amxx.pl/favicons.png)
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](https://amxx.pl/public/style_emoticons/default/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
Użytkownik BlackPerfum edytował ten post 17.07.2014 22:43
sebul
04.07.2014
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.
Rivit
05.07.2014
dzięki Ci wieklie za te funkcje ( KillPlayer
![:)](https://amxx.pl/public/style_emoticons/default/smile.png)
Z KillPlayer zrobie chyba natyw
![:)](https://amxx.pl/public/style_emoticons/default/smile.png)
podaj jeszcze przykład funkcji w których get_user_weapon nie działa prawidłowo.
BlackPerfum
05.07.2014
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"KillPlayer"
A co jeśli chce zadać dmg jakąś swoją niestandardową bronią i chcę to w jakiś sposób wychwycić w jakimś evencie?
![haha.gif](https://amxx.pl/public/style_emoticons/default/haha.gif)
Ależ proszęDzięki Ci wieklie za te funkcje ( KillPlayer ).
![haha.gif](https://amxx.pl/public/style_emoticons/default/haha.gif)
![haha.gif](https://amxx.pl/public/style_emoticons/default/haha.gif)
Po co ?? Tylko spowolnisz tą funkcję. Lepiej używaj tego jako funkcję lokalną lub zrób sobie bibliotekę i jako stockZ KillPlayer zrobie chyba natyw
![haha.gif](https://amxx.pl/public/style_emoticons/default/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](https://amxx.pl/public/style_emoticons/default/haha.gif)
A jesli to nie będzie natyw to po prostu funkcja będzie informować amxx'a o zabiciu gracza
![haha.gif](https://amxx.pl/public/style_emoticons/default/haha.gif)
podaj jeszcze przykład funkcji w których get_user_weapon nie działa prawidłowo.
Ogółem to chyba nie podziała prawidłowo we wszystkich eventach wykonujących się przed CurWeapon i to jest dosyć spora wadapró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
![biggrin.png](https://amxx.pl/public/style_emoticons/default/biggrin.png)
sebul
05.07.2014
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ł).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
BlackPerfum
05.07.2014
Nie zrozumiał przez: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?
Bo napisałem że:A co jeśli chce zadać dmg
Dlatego nie skumałem sorkiNie zadaje dmg a poprostu zabija
![xD](https://amxx.pl/public/style_emoticons/default/haha.gif)
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
sebul
05.07.2014
if(weapon == 2 || weapon > 30A 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)
BlackPerfum
05.07.2014
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
sebul
05.07.2014
Dobrze o tym wiem, tylko w tym przypadku, trzeba to robić w Twojej funkcji, a nie w evencie.możesz kogoś zabić z pioruna ale tu dac np. M4 i wszystko będzie działać
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.
BlackPerfum
05.07.2014
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
Rivit
05.07.2014
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 w jednym poście? No nieźle
...
BlackPerfum
05.07.2014
Za pomocą mojej funkcji nie zabijesz z ikonką pociągu przy zabiciuWaT?
![:(](https://amxx.pl/public/style_emoticons/default/sad.png)
TakNo okej czyli mam to wkleić do plugina po prostu.
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 przypadkuA czemu nie public zamiast stock?
![xD](https://amxx.pl/public/style_emoticons/default/haha.gif)
6xPS. 6x w jednym poście? No nieźle ...
![xD](https://amxx.pl/public/style_emoticons/default/haha.gif)
![:D](https://amxx.pl/public/style_emoticons/default/biggrin.png)
Rivit
05.07.2014
Za pomocą mojej funkcji nie zabijesz z ikonką pociągu przy zabiciuTo 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)
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
BlackPerfum
05.07.2014
Kiedyś benio o tym pisał o ile dobrze pamiętamJakiego pociągu!?
![xD](https://amxx.pl/public/style_emoticons/default/haha.gif)
http://doktor.haze.f...reens/index.php tymi z przedrostkiem d_* możesz użyć do DeathMsg jako ikonke
TakDobra. A lokalna i publiczna to takie coś?
Do lokalnej masz dostęp tylko w danym pluginie a publicznej wszystko może użyć poczytaj sobie o callfunc_beginI jaka różnica?
![](https://amxx.pl/favicons.png)
![haha.gif](https://amxx.pl/public/style_emoticons/default/haha.gif)
Jeśli w nowych binarkach niczego nie zmienią to offsety wszystkie są wporządku (wczoraj wszystkie sprawdzałem a temat napisałem 3 dni temuA nie ma możliwości żeby offset się mylił
![haha.gif](https://amxx.pl/public/style_emoticons/default/haha.gif)
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 dominaTrzymał błędne wyniki
![haha.gif](https://amxx.pl/public/style_emoticons/default/haha.gif)
Użytkownik BlackPerfum edytował ten post 05.07.2014 13:28
Rivit
05.07.2014
Kiedyś benio o tym pisał o ile dobrze pamiętam
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!
BlackPerfum
05.07.2014
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
sebul
05.07.2014
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.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
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ć.
BlackPerfum
05.07.2014
Nie!!! Przeczytaj każdą linijkę dziesięć razy w tej funkcjiNiestety, 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.
![haha.gif](https://amxx.pl/public/style_emoticons/default/haha.gif)
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.
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ś.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ć.
sebul
05.07.2014
BlackPerfum
05.07.2014
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_addI 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.
![](https://amxx.pl/favicons.png)
![haha.gif](https://amxx.pl/public/style_emoticons/default/haha.gif)
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](https://amxx.pl/public/style_emoticons/default/haha.gif)
Użytkownik BlackPerfum edytował ten post 05.07.2014 15:59