Jak ukryć celownik podczas strzelania
Najlepsza odpowiedź grankee 28.11.2014 22:41
RegisterHam(Ham_Weapon_SecondaryAttack, "player", "damage");
To nie player jest "PrimaryAttack" tylko jego broń, osobne entity.
#include <amxmodx> #include <amxmisc> #include <hamsandwich> #include <fakemeta> new gHideWeapon,celownik_schowany[33] public plugin_init() { register_plugin("G_HideCrosshair", "0.1", "grankee") new szWeaponName[32] new NOSHOT_BITSUM = (1<<CSW_KNIFE) | (1<<CSW_HEGRENADE) | (1<<CSW_FLASHBANG) | (1<<CSW_SMOKEGRENADE) for(new iId = CSW_P228; iId <= CSW_P90; iId++) { if( ~NOSHOT_BITSUM & 1<<iId && get_weaponname(iId, szWeaponName, charsmax(szWeaponName) )) { RegisterHam(Ham_Weapon_PrimaryAttack, szWeaponName, "onAttack", 1) } } gHideWeapon = get_user_msgid("HideWeapon") } public onAttack(weap) { new id=pev(weap,pev_owner) if(celownik_schowany[id]==0) { message_begin(MSG_ONE, gHideWeapon, _, id) write_byte((1<<6)) message_end() celownik_schowany[id]=1 } if(!task_exists(id)) { set_task(0.01,"pokaz_celownik",id) } else { change_task(id,0.1) } } public pokaz_celownik(id) { message_begin(MSG_ONE, gHideWeapon, _, id) write_byte(0) message_end() celownik_schowany[id]=0 }Przejdź do postu
Dziobak?
28.11.2014
wiwi249
28.11.2014
message_begin(MSG_ONE, g_msgHideWeapon, _, id) write_byte((1<<6)) message_end()
Tym schowasz celownik, ale jak to ugryźć... Ukryć możesz przy wywołaniu Ham_Weapon_Primaryattack, ale jak go przywrócić, to już nie mam pojecia.
EDIT: Przywrócić możesz spróbować tym: https://wiki.alliedm...events#ResetHUD ale nie wiem czym to poskutkuje, bo resetuje cały HUD (możliwe że czat też, do sprawdzenia)
Użytkownik wiwi249 edytował ten post 28.11.2014 16:35
Dziobak?
28.11.2014
No mam taki kod
#include <amxmodx> #include <fakemeta> #define MAX_PLAYERS 32 new bool:celownik[MAX_PLAYERS+1] new gHideWeapon public plugin_init() { register_plugin("Celownik", "1.0", "Play") register_event("Damage", "event_damage", "b", "2!0", "3=0", "4!0"); gHideWeapon = get_user_msgid("HideWeapon") } public client_putinserver(id) { celownik[id] = false } public event_damage(id, this) { if(!is_user_alive(id)) return FMRES_IGNORED new attacker = get_user_attacker(id); if( attacker ) { if(!celownik[id]) { celownik[id] = true ukryj_crosshair(id) return FMRES_HANDLED } } else if(celownik[id]) { celownik[id] = false pokaz_crosshair(id) return FMRES_HANDLED } return FMRES_IGNORED } pokaz_crosshair(id) { message_begin(MSG_ONE_UNRELIABLE, gHideWeapon, _, id) write_byte(0) message_end() } ukryj_crosshair(id) { message_begin(MSG_ONE_UNRELIABLE, gHideWeapon, _, id) write_byte(1<<6) message_end() }
wiwi249
28.11.2014
No dobra, i daje Ci to co chciałeś osiągnąć? Poza tym robisz to na evencie Damage a nie Ham_Weapon_Primaryattack?
Dziobak?
28.11.2014
No dobra, i daje Ci to co chciałeś osiągnąć? Poza tym robisz to na evencie Damage a nie Ham_Weapon_Primaryattack?
O to ci chodziło ?
#include <amxmodx> #include <fakemeta> #include <hamsandwich> #define MAX_PLAYERS 32 new bool:celownik[MAX_PLAYERS+1] new gHideWeapon public plugin_init() { register_plugin("Celownik", "1.0", "Play") RegisterHam(Ham_Weapon_SecondaryAttack, "player", "damage"); gHideWeapon = get_user_msgid("HideWeapon") } public client_putinserver(id) { celownik[id] = false } public damage(id, this) { if(!is_user_alive(id)) return FMRES_IGNORED new attacker = get_user_attacker(id); if(attacker) { if(!celownik[id]) { celownik[id] = true ukryj_crosshair(id) return FMRES_HANDLED } } else if(celownik[id]) { celownik[id] = false pokaz_crosshair(id) return FMRES_HANDLED } return FMRES_IGNORED } pokaz_crosshair(id) { message_begin(MSG_ONE_UNRELIABLE, gHideWeapon, _, id) write_byte(0) message_end() } ukryj_crosshair(id) { message_begin(MSG_ONE_UNRELIABLE, gHideWeapon, _, id) write_byte(1<<6) message_end() }
bo nie działa....
wiwi249
28.11.2014
Nie, zajrzyj do opisu Ham_Weapon_PrimaryAttack. Nie ma takiej broni jak "player"
Najlepiej zrobić to tak:
new szWeaponName[32] new NOSHOT_BITSUM = (1<<CSW_KNIFE) | (1<<CSW_HEGRENADE) | (1<<CSW_FLASHBANG) | (1<<CSW_SMOKEGRENADE) for(new iId = CSW_P228; iId <= CSW_P90; iId++) { if( !NOSHOT_BITSUM & 1<<iId && get_weaponname(iId, szWeaponName, charsmax(szWeaponName) ) { RegisterHam(Ham_Weapon_PrimaryAttack, szWeaponName, "Ham_WeaponAttack_Post") } }
Albo jeśli ma to dotyczyc tylko wybranych broni, to możesz to robić podobną pętlą albo możesz też po kolei wypisywać RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_xx", "Funkcja")
Najlepsza odpowiedź
grankee
28.11.2014
RegisterHam(Ham_Weapon_SecondaryAttack, "player", "damage");
To nie player jest "PrimaryAttack" tylko jego broń, osobne entity.
#include <amxmodx> #include <amxmisc> #include <hamsandwich> #include <fakemeta> new gHideWeapon,celownik_schowany[33] public plugin_init() { register_plugin("G_HideCrosshair", "0.1", "grankee") new szWeaponName[32] new NOSHOT_BITSUM = (1<<CSW_KNIFE) | (1<<CSW_HEGRENADE) | (1<<CSW_FLASHBANG) | (1<<CSW_SMOKEGRENADE) for(new iId = CSW_P228; iId <= CSW_P90; iId++) { if( ~NOSHOT_BITSUM & 1<<iId && get_weaponname(iId, szWeaponName, charsmax(szWeaponName) )) { RegisterHam(Ham_Weapon_PrimaryAttack, szWeaponName, "onAttack", 1) } } gHideWeapon = get_user_msgid("HideWeapon") } public onAttack(weap) { new id=pev(weap,pev_owner) if(celownik_schowany[id]==0) { message_begin(MSG_ONE, gHideWeapon, _, id) write_byte((1<<6)) message_end() celownik_schowany[id]=1 } if(!task_exists(id)) { set_task(0.01,"pokaz_celownik",id) } else { change_task(id,0.1) } } public pokaz_celownik(id) { message_begin(MSG_ONE, gHideWeapon, _, id) write_byte(0) message_end() celownik_schowany[id]=0 }