←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Informacja na czacie po użyci...

Zablokowany

  • +
  • -
IntelCom - zdjęcie IntelCom 27.12.2014

Witam,

 

Mam taki kod, i jak zrobić by po użyciu komendy /dodajhp po raz 2++ w rundzie na say'u pojawiała się informacja "Niestety uzyles juz tego polecenia, bedziesz mogl go uzyc ponownie w kolejnej rundzie".

#include <amxmodx>
#include <fun>


#define PLUGIN "PLUG"
#define VERSION "1.0"
#define AUTHOR "Dawid"

new uzyl[33]

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /dodajhp","hp")
register_event("HLTV", "NowaRunda", "a", "1=0", "2=0");
}
public client_connect(id)
{
uzyl[id]=false
}
public hp(id)
{
if(is_user_alive(id) && is_user_connected(id) && !uzyl[id])
{
set_user_health(id, 150)
client_print(id, print_chat, "Ustawiono Ci 150hp");
uzyl[id]=true
}
else
 client_print(id,print_chat, "Niestety, ale jestes niezywy i nie mozesz uzyc tej komendy");
}

public NowaRunda()
{
for(new id = 1; id <= get_maxplayers(); id++)
{
uzyl[id] = false
}
}

Bo w tym momencie wyświetlany się komunikat "Niestety, ale jestes niezywy i nie mozesz uzyc tej komendy".Tak ma zostać, ale tylko dla gracza, który jest nie żywy.

 

Z góry dzięki za pomoc ;)


Użytkownik IntelCom edytował ten post 27.12.2014 15:53
Odpowiedz

  • +
  • -
Wielkie Jol - zdjęcie Wielkie Jol 27.12.2014

Rozloz else na dwa warunki, Sprawdź czy gracz nie żyje i sprawdź czy użył komendy więcej niż x razy w ciągu rundy. Jeżeli warunek któryś z podanych jest spełniony wyświetl komunikat i wstrzymaj dalsze działanie. Natomiast jeżeli żaden z powyższych warunków się nie spełnił to znaczy, że geacz może użyć komendy.

Jeżeli sprawdzasz, czy gracz żyje, nie musisz sprawdzać, czy jest połączony z serwerem, bo nie może być nie połączony a zarazem żywy.
Odpowiedz

  • +
  • -
IntelCom - zdjęcie IntelCom 27.12.2014

Zrobiłem to w ten sposób jednak, plugin nie chce się skompilować.

#include <amxmodx>
#include <fun>


#define PLUGIN "PLUG"
#define VERSION "1.0"
#define AUTHOR "Dawid"

new uzyl[33]

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /dodajhp","hp")
register_event("HLTV", "NowaRunda", "a", "1=0", "2=0");
}
public client_connect(id)
{
uzyl[id]=false
}
public hp(id)
{
if(is_user_alive(id) && !uzyl[id])
{
set_user_health(id, 150)
client_print(id, print_chat, "Ustawiono Ci 150hp");
uzyl[id]=true
}
else
if(!is_user_alive(id))
 client_print(id,print_chat, "Niestety, ale jestes niezywy i nie mozesz uzyc tej komendy");
}
if(uzyl[id])
client_print(id,print_chat, "Niestety uzyles juz tego polecenia, bedziesz mogl go uzyc ponownie w kolejnej rundzie");

public NowaRunda()
{
for(new id = 1; id <= get_maxplayers(); id++)
{
uzyl[id] = false
}
}
Odpowiedz

  • +
  • -
Wielkie Jol - zdjęcie Wielkie Jol 27.12.2014

1. Sprawdź czy gracz nie żyje, jeżeli tak daj wiadomość, wstrzymaj działanie.
2. Sprawdź czy gracz użył komendy, jeżeli tak, wstrzymaj działanie.
3. Wszystko ok, gracz spełnia warunki, teraz możesz mu przyznać bonusy.
Odpowiedz

  • +
  • -
IntelCom - zdjęcie IntelCom 27.12.2014

Poprawiłem, niestety nadal plugin się nie kompiluje.

#include <amxmodx>
#include <fun>


#define PLUGIN "PLUG"
#define VERSION "1.0"
#define AUTHOR "Dawid"

new uzyl[33]

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /dodajhp","hp")
register_event("HLTV", "NowaRunda", "a", "1=0", "2=0");
}
public client_connect(id)
{
uzyl[id]=false
}
public hp(id)
{
if(!is_user_alive(id))
{
client_print(id, print_chat, "Niestety, ale jestes niezywy i nie mozesz uzyc tej komendy");
return PLUGIN_CONTINUE;
}
if(uzyl[id])
{ 
client_print(id,print_chat, "Niestety uzyles juz tego polecenia, bedziesz mogl go uzyc ponownie w kolejnej rundzie");
return PLUGIN_CONTINUE; 
}
if(is_user_alive(id) && !uzyl[id])
{
set_user_health(id, 150)
client_print(id,print_chat, "Dodano Ci 150HP!");
uzyl[id]=true
}
public NowaRunda()
{
for(new id = 1; id <= get_maxplayers(); id++)
{
uzyl[id] = false
}
}
Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 27.12.2014

1.nie zamknales funkcji hp

2.uzywaj tabulatorów, bo to co tutaj podałeś trąci nieczytelnością mimo zaledwie niecałych 50 linijek kodu

3.po co sprawdzasz dwa razy to samo? przeczytaj komentarz w kodzie

#include <amxmodx>
#include <fun>


#define PLUGIN "PLUG"
#define VERSION "1.0"
#define AUTHOR "Dawid"

new uzyl[33]

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("say /dodajhp","hp")
	register_event("HLTV", "NowaRunda", "a", "1=0", "2=0");
}
public client_connect(id)
{
	uzyl[id]=false
}
public hp(id)
{
	if(!is_user_alive(id))
	{
		client_print(id, print_chat, "Niestety, ale jestes niezywy i nie mozesz uzyc tej komendy");
		return PLUGIN_CONTINUE;
	}
	if(uzyl[id])
	{ 
		client_print(id,print_chat, "Niestety uzyles juz tego polecenia, bedziesz mogl go uzyc ponownie w kolejnej rundzie");
		return PLUGIN_CONTINUE; 
	}
	if(is_user_alive(id) && !uzyl[id])//po co Ci to? sprawdzałeś już wyżej, gdyby nie były te warunki spełnione to by kod nie doszedł do tego miejsca
	{
		set_user_health(id, 150)
		client_print(id,print_chat, "Dodano Ci 150HP!");
		uzyl[id]=true
	}
}
public NowaRunda()
{
	for(new id = 1; id <= get_maxplayers(); id++)
	{
		uzyl[id] = false
	}
}
Odpowiedz

  • +
  • -
IntelCom - zdjęcie IntelCom 27.12.2014

Czyli wystarczyło by użyć "else" (w przeciwnym wypadku) zamiast tego 3 warunku, a efekt będzie ten sam.Tyle, że kod będzie bardziej optymalny?
Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 27.12.2014

w ogóle nie potrzeba tam warunku, czytaj i myśl

#include <amxmodx>
#include <fun>


#define PLUGIN "PLUG"
#define VERSION "1.0"
#define AUTHOR "Dawid"

new uzyl[33]

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("say /dodajhp","hp")
	register_event("HLTV", "NowaRunda", "a", "1=0", "2=0");
}
public client_connect(id)
{
	uzyl[id]=false
}
public hp(id)
{
	if(!is_user_alive(id))//sprawdzasz czy gracz jest martwy
	{
		client_print(id, print_chat, "Niestety, ale jestes niezywy i nie mozesz uzyc tej komendy");
		return PLUGIN_CONTINUE;//gracz byl martwy wiec tym przerywasz wykonywanie tego kodu, wszystko co jest w tej funkcji ponizej nie zostanie juz wykonane
	}//jezeli gracz jest martwy to kod nie dojdzie do tego miejsca, czyli musi byc zywy jesli kod jeszcze sie tutaj wykonuje
	if(uzyl[id])//jezeli uzyl juz w tej rundzie...
	{ 
		client_print(id,print_chat, "Niestety uzyles juz tego polecenia, bedziesz mogl go uzyc ponownie w kolejnej rundzie");
		return PLUGIN_CONTINUE; //gracz juz uzyl wiec tym przerywasz wykonywanie tego kodu, wszystko co jest w tej funkcji ponizej nie zostanie juz wykonane
	}//jezeli uzyl juz w tej rundzie to kod nie dojdzie do tego miejsca
	
	//tutaj robisz już co chcesz bez warunków, bo skoro program jest w tym miejscu kodu to znaczy, że nie został wcześniej przerwany z powodu "bo gracz nie zyje" albo "bo gracz użył"
	set_user_health(id, 150)
	client_print(id,print_chat, "Dodano Ci 150HP!");
	uzyl[id]=true
	
}
public NowaRunda()
{
	for(new id = 1; id <= get_maxplayers(); id++)
	{
		uzyl[id] = false
	}
}
Odpowiedz

  • +
  • -
IntelCom - zdjęcie IntelCom 27.12.2014

Zrozumiałem :)

Wielkie dzięki za pomoc :)
Odpowiedz

  • +
  • -
radim - zdjęcie radim 28.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