←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Zmniejszanie rozrzutu - 2 metody, która le...

  • +
  • -
Rivit - zdjęcie Rivit 29.06.2015

Witam, bawiąc się ostatnio broniami znalazłem dwa kody... z Cod Moda

 

Jeden usuwa rozrzut, a drugi go zmniejsza...

new const perk_desc[] = "Usuwa rorzut broni";

public plugin_init() 
{
	register_forward(FM_PlayerPreThink, "PreThink");
	register_forward(FM_UpdateClientData, "UpdateClientData", 1)
}

public PreThink(id)
{
	if(ma_perk[id])
		set_pev(id, pev_punchangle, {0.0,0.0,0.0})
}
		
public UpdateClientData(id, sw, cd_handle)
{
	if(ma_perk[id])
		set_cd(cd_handle, CD_PunchAngle, {0.0,0.0,0.0})   
}
new const perk_desc[] = "Zmniejsza rorzut broni";

public plugin_init() 
{
	register_forward(FM_CmdStart, "CmdStart");
}

public CmdStart(id, uc_handle)
{
	if(get_uc(uc_handle, UC_Buttons) & IN_ATTACK)
	{
		new Float:punchangle[3]
		pev(id, pev_punchangle, punchangle)
		for(new i=0; i<3;i++) 
				punchangle[i]*=0.9;
		set_pev(id, pev_punchangle, punchangle)
	}
}

(zostawiłem najpotrzebniejsze rzeczy, reszta to cod modowy syf)

 

Który sposób wpływania na rozrzut jest lepszy?

 

Wiem, że jeden kod usuwa, a drugi zmniejsza rozrzut, ale dlaczego ktoś nie zrobił np. usuwania rozrzutu w CmdStart lub zmniejszania w prethinku i updateclientdata?

 

Proszę o rozjaśnienie...

 

Odpowiedz

  • +
  • -
wiwi249 - zdjęcie wiwi249 29.06.2015

Znaczy moim zdaniem przede wszystkim druga metoda jest lepsza (gdyby zastosować podobne instrukcje) bo nie wywołuje się w każdej klatce jak UpdateClientData i PreThink. Zawsze to troche mniejsze obciążenie.

Spróbowałbym jeszcze użyć Ham_Weapon_PrimaryAttack.

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 29.06.2015

Pytanie, czy to w cmdstart działa, ja nie zauważyłem zmniejszenia rozrzutu
Odpowiedz

  • +
  • -
tytusek - zdjęcie tytusek 29.06.2015

działa wystarczy zmienić

punchangle[i]*=0.9; na punchangle[i]*=0.0;

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 29.06.2015

To dlaczego eliminator jest robiony na prethinku, których unikam jak ognia?
Odpowiedz

  • +
  • -
Asiap - zdjęcie Asiap 29.06.2015

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

new Float:g_fPushAngle[33][3];

public plugin_init()
{
	register_plugin("No Recoil", "0.1", "AsiaP");

	new szName[24];
	for(new i = 1; i <= 30; i++)
	{
		if(!((1<<CSW_KNIFE|1<<CSW_C4|1<<CSW_FLASHBANG|1<<CSW_HEGRENADE|1<<CSW_SMOKEGRENADE) & 1<<i) && get_weaponname(i, szName, 23))
		{
			RegisterHam(Ham_Weapon_PrimaryAttack, szName, "PrimaryAttackPre");
		}
	}

	for(new i = 1; i <= 30; i++)
	{
		if(!((1<<CSW_KNIFE|1<<CSW_C4|1<<CSW_FLASHBANG|1<<CSW_HEGRENADE|1<<CSW_SMOKEGRENADE) & 1<<i) && get_weaponname(i, szName, 23))
		{
			RegisterHam(Ham_Weapon_PrimaryAttack, szName, "PrimaryAttackPost", 1);
		}
	}
}

public PrimaryAttackPre(ent)
{
	new id = pev(ent, pev_owner);
	pev(id, pev_punchangle, g_fPushAngle[id]);
}

public PrimaryAttackPost(ent)
{
	new id = pev(ent, pev_owner);

	static Float:fPush[3];
	pev(id, pev_punchangle, fPush);

	fPush[0] -= g_fPushAngle[id][0];
	fPush[1] -= g_fPushAngle[id][1];
	fPush[2] -= g_fPushAngle[id][2];

	fPush[0] *= 0.0;
	fPush[1] *= 0.0;
	fPush[2] *= 0.0;

	fPush[0] += g_fPushAngle[id][0];
	fPush[1] += g_fPushAngle[id][1];
	fPush[2] += g_fPushAngle[id][2];

	set_pev(id, pev_punchangle, fPush);
}
Odpowiedz