←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

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? - zdjęcie Dziobak? 28.11.2014

A więc mam małe pytanko jak ukryć celownik u gracza podczas strzelania, a gdy skończy strzelanie to mu się pokaże. jak by ktoś mógł zapodać kod byłbym wdzięczny :D
Odpowiedz

  • +
  • -
wiwi249 - zdjęcie 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
Odpowiedz

  • +
  • -
Dziobak? - zdjęcie 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() 
}	

Odpowiedz

  • +
  • -
wiwi249 - zdjęcie 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?

Odpowiedz

  • +
  • -
Dziobak? - zdjęcie 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....

Odpowiedz

  • +
  • -
wiwi249 - zdjęcie wiwi249 28.11.2014

Nie, zajrzyj do opisu Ham_Weapon_PrimaryAttack. Nie ma takiej broni jak "player" xD

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")

Odpowiedz

  • +
  • -
Najlepsza odpowiedź grankee - zdjęcie 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
}
Odpowiedz