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

1 Komenda robi za 2 funkcje


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

#1 XXL

    Wszechmogący

  • Power User

Reputacja: 139
Zaawansowany

  • Postów:637
Offline

Napisano 10.01.2015 17:50


Witam i pytam jak zrobić aby po wpisaniu np say /komenda tworzy się coś nwm napis na hud i znowu po wpisaniu komendy w say /komenda zatrzymuje wyświetlaniu prosiłbym o jakiś prosty przykładowy plugin z ową funkcją :P

 

Znalazłem w necie takie coś ale kompletnie tego nie ogarniam


#include <amxmodx>
#include <fakemeta>

#define PLUGIN "Speedometer"
#define VERSION "1.2"
#define AUTHOR "AciD"

#define FREQ 0.1

new bool:plrSpeed[33]

new TaskEnt,SyncHud,showspeed,color, maxplayers, r, g, b

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_cvar("AcidoX", "Speedometer 1.1", FCVAR_SERVER)
	register_forward(FM_Think, "Think")
	
	TaskEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))	
	set_pev(TaskEnt, pev_classname, "speedometer_think")
	set_pev(TaskEnt, pev_nextthink, get_gametime() + 1.01)
	
	register_clcmd("say /speed", "toogleSpeed")
	
	showspeed = register_cvar("showspeed", "1")
	color = register_cvar("speed_colors", "255 255 255")
	
	SyncHud = CreateHudSyncObj()
	
	maxplayers = get_maxplayers()
	
	new colors[16], red[4], green[4], blue[4]
	get_pcvar_string(color, colors, sizeof colors - 1)
	parse(colors, red, 3, green, 3, blue, 3)
	r = str_to_num(red)
	g = str_to_num(green)
	b = str_to_num(blue)
}

public Think(ent)
{
	if(ent == TaskEnt) 
	{
		SpeedTask()
		set_pev(ent, pev_nextthink,  get_gametime() + FREQ)
	}
}

public client_putinserver(id)
{
	plrSpeed[id] = showspeed > 0 ? true : false
}

public toogleSpeed(id)
{
	plrSpeed[id] = plrSpeed[id] ? false : true
	return PLUGIN_HANDLED
}

SpeedTask()
{
	static i, target
	static Float:velocity[3]
	static Float:speed, Float:speedh
	
	for(i=1; i<=maxplayers; i++)
	{
		if(!is_user_connected(i)) continue
		if(!plrSpeed[i]) continue
		
		target = pev(i, pev_iuser1) == 4 ? pev(i, pev_iuser2) : i
		pev(target, pev_velocity, velocity)

		speed = vector_length(velocity)
		speedh = floatsqroot(floatpower(velocity[0], 2.0) + floatpower(velocity[1], 2.0))
		
		set_hudmessage(r, g, b, -1.0, 0.7, 0, 0.0, FREQ, 0.01, 0.0)
		ShowSyncHudMsg(i, SyncHud, "%3.2f units/second^n%3.2f velocity", speed, speedh)
	}
}


Użytkownik XXL edytował ten post 10.01.2015 17:53

  • +
  • -
  • 0

#2 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 11.01.2015 00:52

No to właśnie taki prosty kod podałeś, jedyne co w nim nie jest proste dla początkującego, to think enta zamiast tasku, lepsza droga do celu. Tylko, że to nie wymaga zmiany, raczej nauczenia się, żeby do początku robić jak należy. Daj jeszcze raz ten kod, ale na końcu każdej linijki, której nie rozumiesz, postaw 

//

czyli komentarz, postaram się objaśnić.


  • +
  • -
  • 1

#3 NoLiFeR

    Wszechobecny

  • Użytkownik

Reputacja: 103
Zaawansowany

  • Postów:483
  • GG:
  • Imię:Adrian
  • Lokalizacja:Sosnowiec
Offline

Napisano 11.01.2015 01:31

Ludzie... Po co tak komplikować sprawe ?

 

#include amxmodx
new zmiana[33]
public plugin_init()
{
register_plugin("LoLs","1.0","NoLiFeR")
register_clcmd("say /komenda","publiczk")
}
public publiczk(id)
{
switch(zmiana[id])
{
case 0:
{
//code
zmiana[id] = 1
}
case 1:
{
//code
zmiana[id] = 0
}
}
}

Kod umieszczony w case 0 wykona się po pierwszym wpisaniu komendy, a w case 1 po drugim wpisaniu komendy, po kolejnym case 0 etc

Mógłbyś np zrobić synchudmessage w tasku gdzieś w innej funkcji. Oto ona
 

#include amxmodx
new zmiana[33]
new syncuchw
public plugin_init()
{
register_plugin("LoLs","1.0","NoLiFeR");
register_clcmd("say /komenda","publiczk");
syncuchw = CreateHudSyncObj();
}
public publiczk(id)
{
switch(zmiana[id])
{
case 0:
{
zmiana[id] = 1
hudmsgbegin(id)
}
case 1:
{
zmiana[id] = 0
}
}
}
public hudmsgbegin(id)
{
id -= 8145791

if(!zmiana[id]) return;
set_hudmessage(255, 255, 255, -1.0, 0.35, 0, 6.0, 1.0, 0.1, 0.2, -1)
ShowSyncHudMsg(id, syncuchw, "Wiadomosc")
set_task(1.0,hudmsgbegin,id+8145791)
}

//Sorry za brak tabulacji.


Użytkownik NoLiFeR edytował ten post 11.01.2015 01:32

  • +
  • -
  • 1

#4 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 11.01.2015 13:32


Mógłbyś np zrobić synchudmessage w tasku gdzieś w innej funkcji.

jedyne co w nim nie jest proste dla początkującego, to think enta zamiast tasku, lepsza droga do celu. Tylko, że to nie wymaga zmiany, raczej nauczenia się, żeby od początku robić jak należy.


  • +
  • -
  • 0

#5 NoLiFeR

    Wszechobecny

  • Użytkownik

Reputacja: 103
Zaawansowany

  • Postów:483
  • GG:
  • Imię:Adrian
  • Lokalizacja:Sosnowiec
Offline

Napisano 13.01.2015 15:05

Dlaczego task jest zły, wg Ciebie ?


  • +
  • -
  • 0

#6 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 13.01.2015 17:17

Think entu jest lepiej obsługiwany przez silnik (jest optymalniejszy?), ponadto tasku trzeba pilnować, nieumiejętne przewidywanie jego działania skutkuje errorami oraz rzadziej nieprawidłowym działaniem pluginu, skrajnie crashami serwera. To nie jedyne powody, kiedyś rozmawiałem o tym z kimś kto więcej wie na ten temat, wolałem jednak zapamiętać, żeby wystrzegać się tasków niżeli dlaczego, ponieważ powody raz mnie przekonały i nie widziałem sensu ich zapamiętywać. Kolejna sprawa to autor np. tego pluginu zdecydował się użyć entu i jego thinka zamiast tasku, to też sugeruje, że jest to lepsze wyjście.


  • +
  • -
  • 1

#7 NoLiFeR

    Wszechobecny

  • Użytkownik

Reputacja: 103
Zaawansowany

  • Postów:483
  • GG:
  • Imię:Adrian
  • Lokalizacja:Sosnowiec
Offline

Napisano 13.01.2015 20:48

Autor powiedział, iż znalazł ten plugin na internecie, więc wyboru nie miał.



Dziękuje za wyjaśnienie.


  • +
  • -
  • 0

#8 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 13.01.2015 21:39

Autor pluginu to osoba, która go napisała, jak mógł go znaleźć?


  • +
  • -
  • 1

#9 NoLiFeR

    Wszechobecny

  • Użytkownik

Reputacja: 103
Zaawansowany

  • Postów:483
  • GG:
  • Imię:Adrian
  • Lokalizacja:Sosnowiec
Offline

Napisano 14.01.2015 14:36

Ja mówie o autorze tematu : )))


 


  • +
  • -
  • 0




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

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