←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
[ROZWIĄZANE] jak zwiększyć rozrzut

Zablokowany

  • +
  • -
Eustachy8 - zdjęcie Eustachy8 04.07.2012

Witam!

Robię klasy z nowymi modelami broni oraz parametrami tych broni, wiem jak zmienić szybkość strzelania, dmg ale jak zwiekszyć rozrzut? Gdy robie w ten sposób:


if(ma_klase[id] && 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]*=1.1;
set_pev(id, pev_punchangle, punchangle)
}
to podczas strzelania serią, kamera robi obroty o 360 stopni. W jaki inny sposób to zmieniać?
Odpowiedz

  • +
  • -
ric0 - zdjęcie ric0 04.07.2012

Nie jestem pewny ale wydaje mi się że za rozrzut odpowiada ta linijka:
punchangle[i]*=1.1; 


zmieniasz liczbę 1.1 . tylko nie wiem czy im mniejsza liczba tym mniejszy rozrzut . najlepiej zmień liczbę na mnieszją i testuj potem na większą i testuj.

A jeśli się mylę to proszę mnie poprawić.
Odpowiedz

  • +
  • -
Eustachy8 - zdjęcie Eustachy8 04.07.2012

im mniejsza, tym mniejszy rozrzut, więc wydedukowałem, że im większa tim większy rozrzut i tak jest, ale tak jak wspomniałem, gdy zwiększe, to podczas strzelania full auto ekran zaczyna robić 360 stopni obroty ;)
Odpowiedz

  • +
  • -
MarWit - zdjęcie MarWit 04.07.2012

Zmieniaj punchangle tylko w 2 wymiarach tablicy, ( [0] i [1] ).
Odpowiedz

  • +
  • -
Eustachy8 - zdjęcie Eustachy8 04.07.2012

działa elegancko +. A mógłbyś powiedzieć za co 3 wymiar odpowiada?
Odpowiedz

  • +
  • -
MarWit - zdjęcie MarWit 04.07.2012

Trzeci wymiar nic nie robi. ( Kąt zapisuje się tylko w 2ch wymiarach )
Odpowiedz

  • +
  • -
ogieR8 - zdjęcie ogieR8 18.12.2014

Przepraszam, że odświeżam.. ale moje pytanie jest prawie identyczne, jak twórcy tematu.. w jaki inny sposób to zmienić ? 

 

Mam teraz taki kod:

public fwd_CmdStart(id, uc_handle, seed) {
	if(!is_alive[id] || !is_user_alive(id) || !is_user_connected(id)) return FMRES_HANDLED

	if(ofiara_rozrzutu[id] == 1 && get_uc(uc_handle, UC_Buttons) & IN_ATTACK) {
		new Float:punchangle[2]
		pev(id, pev_punchangle, punchangle)
		for(new i=0; i<2;i++) 
		punchangle[i]*=1.2;
		set_pev(id, pev_punchangle, punchangle)
	}

	return FMRES_IGNORED
}

Ale.. za każdym razem rozrzut kieruję się w prawy górny róg, ponadto, biorąc np takie AK47.. po kilku kulach z serii ekran nadal mi się obraca dookoła, później łapie wręcz teleporty (widok przód -> tył -> przód -> tył itd), najgorsze, gdy dochodzą do tego obroty do góry nogami. Jest jakiś dobry sposób ? Znalazłem kilka 'nowych broni' i w jednej z nich jest taki oto kodzik:

#define RECOIL 3.8
Float:cl_pushangle[33][3]

RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_galil", "fw_PrimaryAttack")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_galil", "fw_PrimaryAttack_Post", 1)

public fw_PrimaryAttack(Weapon) {
	new Player = get_pdata_cbase(Weapon, 41, 4)
	
	if (ma_bron[Player]) pev(Player,pev_punchangle,cl_pushangle[Player])
}


public fw_PrimaryAttack_Post(Weapon) {
	new Player = get_pdata_cbase(Weapon, 41, 4)
	
	if(ma_bron[Player]) {
		new Float:push[3]
		pev(Player,pev_punchangle,push)
		xs_vec_sub(push,cl_pushangle[Player],push)
		
		xs_vec_mul_scalar(push,RECOIL,push)
		xs_vec_add(push,cl_pushangle[Player],push)
		set_pev(Player,pev_punchangle,push)
	}
}

Ale nie będę oszukiwał, że go nie rozumiem. 

 

I teraz tak:

a) aby to działało jak chcę (tak jak kod 'nowej broni') musi być to w primmaryattack ? Jak zastosować to do wszystkich broni ? Nie chce dla jednej..

B) wyjasni mi ktos te ostatnie linijki z 'nowej broni' ? Chce nie tylko mieć to zrobione, ale zrozumieć to.. te xs_vec.. - proszę nie kierować na poradniki zagraniczne, mój angielski i składnia translate daje marne wyniki.

Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 18.12.2014

Jak zastosować to do wszystkich broni ?

 

tutaj zmieniasz to

RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_galil", "fw_PrimaryAttack")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_galil", "fw_PrimaryAttack_Post", 1)
Odpowiedz

  • +
  • -
ogieR8 - zdjęcie ogieR8 18.12.2014

Dobra, jak zwykle po napisaniu tematu zacząłem szperać ostro po necie.. Jest taki plugin jak Recoil Control - wyrzuciłem z niego niepotrzebne rzeczy dotyczące cvarów do recoila na wybrane bronie i został mi piękny kodzik, wrzucę, może komuś się również przyda ;)

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

#define PLUGIN	"Recoil Control"
#define AUTHOR	"OT"
#define VERSION	"1.5"

#define NO_RECOIL_WEAPONS_BITSUM  (1<<2 | 1<<CSW_KNIFE | 1<<CSW_HEGRENADE | 1<<CSW_FLASHBANG | 1<<CSW_SMOKEGRENADE | 1<<CSW_C4)
#define RECOIL 3.8

new Float:cl_pushangle[33][3]

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	new weapon_name[20]
	for (new i=CSW_P228;i<=CSW_P90;i++) 
	{         
		if(!(NO_RECOIL_WEAPONS_BITSUM & (1<<i)) && get_weaponname(i, weapon_name, charsmax(weapon_name))) 
		{ 
			RegisterHam(Ham_Weapon_PrimaryAttack, weapon_name, "fw_primary_attack")
			RegisterHam(Ham_Weapon_PrimaryAttack, weapon_name, "fw_primary_attack_post",1) 
		} 
	}
}

public fw_primary_attack(ent) {
	new id = pev(ent,pev_owner)
	pev(id,pev_punchangle,cl_pushangle[id])
	
	return HAM_IGNORED
}

public fw_primary_attack_post(ent) {
	new id = pev(ent,pev_owner)

	new Float:push[3]
	pev(id,pev_punchangle,push)
	xs_vec_sub(push,cl_pushangle[id],push)
	xs_vec_mul_scalar(push,RECOIL,push)
	xs_vec_add(push,cl_pushangle[id],push)
	set_pev(id,pev_punchangle,push)

	return HAM_IGNORED
}

Dzięki DarkGL, a może mi ktoś objaśnić te xs_vec'y ? W dokumentacji nic nie umiałeś znaleźć :X

Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 18.12.2014

xs_vec_sub - odejmowanie wektórów

xs_vec_mul_scalar - mnożenie wektora przez skalar

xs_vec_add - dodawanie wektorów

Odpowiedz

  • +
  • -
ogieR8 - zdjęcie ogieR8 18.12.2014

Ok, dzięki, już chyba czaję wszystko, z mojej strony - temat wyczerpany.

Odpowiedz

  • +
  • -
radim - zdjęcie radim 18.12.2014

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany