Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Funkcja wywoływana tylko przy strzale


Najlepsza odpowiedź Asiap, 17.05.2015 01:30

#include <amxmodx>
#include <hamsandwich>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "asiap"

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR);

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

public PrimaryAttack(ent)
{
	new id = get_pdata_cbase(ent, 41, 4);
	JakasFunkcja(id);
}

public JakasFunkcja(id)
{
	new g_szName[32];
	get_user_name(id, g_szName, 31);

	client_print(0, print_chat, "Gracz ^"%s^" wlasnie strzelil z broni", g_szName);
}
Przejdź do postu


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
5 odpowiedzi w tym temacie

#1 Ossal

    Wszechwidzący

  • Użytkownik

Reputacja: 20
Życzliwy

  • Postów:273
  • GG:
  • Lokalizacja:Warszawa
Offline

Napisano 17.05.2015 01:12

Potrzebuje funkcji wywoływanej tylko i wyłącznie przy strzale
Można by ją wyłuskać z eventu:
register_event("CurWeapon", "ZmianaBroni","be", "1=1")
Na przykład po sprawdzeniu warunku czy liczba ammo w magu się pomniejszyła względem ostatniego wywołania funkcji, to dobry pomysł? Jakieś propozycje?
Z tego co znalazłem to:

#pragma semicolon 0
#include <amxmisc>
#include <fakemeta>

new iEvents[] = {20,12,18,17,23,24,15,10,11,22,13,21,14,16,27,28,4,6,3,7,8,9,2,1,5}

public plugin_init() {
	register_plugin("Blokujemy dzwieki", "1.0", "DarkGL")
	register_forward(FM_PlaybackEvent, "fwPlaybackEvent");
}
public Strzal(id){
	//funkcja wywolywana tylko przy strzale
}
public fwPlaybackEvent( flags, id, eventindex,Float: delay, Float: origin[3], Float: angles[3], Float: fparam1, Float: fparam2, iparam1, iparam2, bparam1, bparam2) {
	static bool:bFind
	bFind=false;
	for(new i = 0;i < sizeof iEvents;i++){	
		if(eventindex == iEvents[i]){
			bFind = true;
			break;
		}
	}
	if(bFind)
	Strzal(id);
	return FMRES_IGNORED;
}

Trochę to przerobiłem i powiedzcie czy to ma sens? Po mojemu to ta funkcja zje procka, ale czy to zadziała zawsze i tylko przy strzale? Z góry dzięki za odp :)

Edit, lol nie można by było zapisać tej funkcji na przykład tak?

public fwPlaybackEvent( flags, id, eventindex,Float: delay, Float: origin[3], Float: angles[3], Float: fparam1, Float: fparam2, iparam1, iparam2, bparam1, bparam2) {
	switch(eventindex){
		case 0: return FMRES_IGNORED;
		case 19: return FMRES_IGNORED;
		case 25: return FMRES_IGNORED;
		case 26: return FMRES_IGNORED;
	}
	if(eventindex<29)
		Strzal(id);
	return FMRES_IGNORED;
}

hmm, nie lepiej?
Jeszcze jeden edit, "#pragma semicolon 0", co to jest?


Użytkownik Ossal edytował ten post 17.05.2015 01:24

  • +
  • -
  • 0

#2 Asiap

    Wszechpomocny

  • Girl

Reputacja: 171
Profesjonalista

  • Postów:323
  • Lokalizacja:Kętrzyn
Offline

Napisano 17.05.2015 01:30   Najlepsza odpowiedź

#include <amxmodx>
#include <hamsandwich>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "asiap"

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR);

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

public PrimaryAttack(ent)
{
	new id = get_pdata_cbase(ent, 41, 4);
	JakasFunkcja(id);
}

public JakasFunkcja(id)
{
	new g_szName[32];
	get_user_name(id, g_szName, 31);

	client_print(0, print_chat, "Gracz ^"%s^" wlasnie strzelil z broni", g_szName);
}

  • +
  • -
  • 1

#3 Ossal

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 20
Życzliwy

  • Postów:273
  • GG:
  • Lokalizacja:Warszawa
Offline

Napisano 17.05.2015 01:39

Dobra obie wersje, moja (ta ze switchem) i Twoja działają, teraz pytanie która lepiej? Lepiej to znaczy prawdopodobieństwo błędu i obciążenie dla serwera :)


Użytkownik Ossal edytował ten post 17.05.2015 01:40

  • +
  • -
  • 0

#4 Asiap

    Wszechpomocny

  • Girl

Reputacja: 171
Profesjonalista

  • Postów:323
  • Lokalizacja:Kętrzyn
Offline

Napisano 17.05.2015 02:25

https://forums.allie...t=18651?t=18651

 

FM_PlaybackEvent w skrocie wykonuje sie podczas zmiany animacji, decali strzalow i wypadania lusek

Ham_Weapon_PrimaryAttack wykonuje sie tylko i wylacznie podczas strzalu


  • +
  • -
  • 1

#5 wiwi249

    Wszechobecny

  • Użytkownik

Reputacja: 150
Profesjonalista

  • Postów:440
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Tarnobrzeg
Offline

Napisano 17.05.2015 09:20

Oczywiście że lepiej używać wersję z Ham_Weapon_PrimaryAttack bo to forward zrobbiony właśnie po to. Porównaj sobie z resztą ilość kodu z PlaybackEvent a z Ham_Weapon_PrimaryAttack.


  • +
  • -
  • 0

Wykonuję strony internetowe, zlecenia AMXX i HLDS - w tym pisanie pluginów, ogarnianie serwerów, edycja i tworzenie modeli.

Potrzebujesz czegoś? Pisz!

 

"śpieszmy się pisać posty, tak szybko banują..." ~ sebul


#6 Ossal

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 20
Życzliwy

  • Postów:273
  • GG:
  • Lokalizacja:Warszawa
Offline

Napisano 17.05.2015 09:42

Dobra, dzięki wam, biorę kanapkę :)
/close


  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych