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

Początek rundy


  • Zamknięty Temat jest zamknięty
19 odpowiedzi w tym temacie

#1 naven

    Hero

  • Power User

Reputacja: 204
Profesjonalista

  • Postów:1 088
  • GG:
  • Imię:Adam
  • Lokalizacja:Cieszyn
Offline

Napisano 12.05.2009 15:16

Witam,
Jak powiedzieć komputerowi żeby wykonywał funkcję po starcie pierwszej rundy
I drugi kod, po każdej nowej rundzie?
Najlepiej prosiłbym o link do AMXX doc ;)
  • +
  • -
  • 0

#2 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 13.05.2009 19:18

Nie ma funkcji, którą można określić czy jest to pierwsza czy druga runda. Sam moment początku rundy łapiemy z wiadomości wysyłanych przez serwer np. funkcją

register_event()

jest jeszcze różnica pomiędzy nową rundą a początkiem rundy - pierwsze to chwila przed spawnem graczy, drugie to moment upłynięcia mp_freezetime

Jeśli chodzi o nową rundę to
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plugin"
#define VERSION "1.0"
#define AUTHOR ""

new bool:gFirst=false;

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR);
	//każda nowa runda
	register_event("HLTV", "eventNewRound", "a", "1=0", "2=0");
	
	//inicjacja rozgrywki - przynajmniej po 1 graczu w każdej drużynie
	register_event("TextMsg", "GameCommencing", "a", "2&#Game_C");
}

public GameCommencing()
	gFirst=true;//zaraz będzie pierwsza runda!

public eventNewRound(){
	if(gFirst){//jest pierwsza
		onFirstRound();
		gFirst=false;//następna nie będzie pierwsza
	}
	onNewRound();//każda nowa runda
}

onFirstRound(){
	client_print(0, print_chat, "Pierwsza Runda!");
}
onNewRound(){
	client_print(0, print_chat, "Poczatek Rundy!");
}

jeśli chcesz na początku rundy to zamień
register_event("HLTV", "eventNewRound", "a", "1=0", "2=0");
na
register_logevent("eventNewRound", 2, "1=Round_Start")


więcej zdarzeń (eventów) w tym temacie opisał Miczu
  • +
  • -
  • 0

#3 naven

    Hero

  • Autor tematu
  • Power User

Reputacja: 204
Profesjonalista

  • Postów:1 088
  • GG:
  • Imię:Adam
  • Lokalizacja:Cieszyn
Offline

Napisano 13.05.2009 19:45

Jednak na razie użyję set_task ;)
Chciałem zrobić że jeśli gracz nie żyje to nie wykonuje się funkcja, dałem tak:
public wies(id)
{
	if(is_user_alive(id))
	return PLUGIN_HANDLED
	server_cmd(id, "sv_airaccelerate 100")
	set_hudmessage(0, 48, 0, 0.28, 0.44, 0, 6.0, 7.0)
      //set_hudmessage(0, 100, 0, 0.8, 0.1, 0, 6.0, 7.0) 
	show_hudmessage(id, "Gotowe")
	
}
I wywala mi że powinno wywalić wartość jakąś, jak ją "pozyskać" i zrobić, żeby było HANDLED?
Wiem, że wyświetlanie graczom o zmianie ustawień serwera to nie dobry pomysł, ale chcę tylko zobaczyć jak to działa
  • +
  • -
  • 0

#4 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 13.05.2009 19:53

if(is_user_alive(id)) - wykona nastepna linike kodu gdy gracz jest zywy.

Gdy uzywasz return PLUGIN_... gdzies w srodku funkcji to musisz uzyc jakiegos return PLUGIN_... na jego koncu tez (nie moze byc w petli lub w if'ie).
  • +
  • -
  • 0

#5 darkman

    Wszechwiedzący

  • Przyjaciel

Reputacja: 87
Zaawansowany

  • Postów:553
  • Lokalizacja:inactive
Offline

Napisano 13.05.2009 19:55

fajnie ze moze byc kilka serwerow na jednym serwerze? O:)

server_cmd(id, "sv_airaccelerate 100")


przeczytaj dokumentacje dt. tej komendy ;P
  • +
  • -
  • 0

#6 naven

    Hero

  • Autor tematu
  • Power User

Reputacja: 204
Profesjonalista

  • Postów:1 088
  • GG:
  • Imię:Adam
  • Lokalizacja:Cieszyn
Offline

Napisano 13.05.2009 20:02

public wies(id)
{
    if(is_user_alive(id))
    return PLUGIN_CONTINUE
    server_cmd(id, "sv_airaccelerate 100")
    set_hudmessage(0, 48, 0, 0.28, 0.44, 0, 6.0, 7.0)
      //set_hudmessage(0, 100, 0, 0.8, 0.1, 0, 6.0, 7.0)
    show_hudmessage(id, "Gotowe")
    return PLUGIN_CONTINUE //tutaj też?
   }
Tak? Gdy gracz żyje wykona się reszta linii?


Darkman, nie chodzi tu o komendy, to był przykład wymyślony na szybko. Id zostało mi bo miałem client_cmd
  • +
  • -
  • 0

#7 darkman

    Wszechwiedzący

  • Przyjaciel

Reputacja: 87
Zaawansowany

  • Postów:553
  • Lokalizacja:inactive
Offline

Napisano 13.05.2009 20:05

jaki ma sens sprawdzanie czy gracz jest zywy jak i tak komenda zadziala na caly serwer? pomyśl nad tym O:)
  • +
  • -
  • 0

#8 naven

    Hero

  • Autor tematu
  • Power User

Reputacja: 204
Profesjonalista

  • Postów:1 088
  • GG:
  • Imię:Adam
  • Lokalizacja:Cieszyn
Offline

Napisano 13.05.2009 20:09

jaki ma sens sprawdzanie czy gracz jest zywy jak i tak komenda zadziala na caly serwer? pomyśl nad tym O:)

eh...
public interp(id)
{
	if(is_user_alive(id))
	return PLUGIN_CONTINUE
	client_cmd(id, "rate 25000")
	client_cmd(id, "cl_updaterate 101")
	client_cmd(id, "cl_cmdrate 101")
	client_cmd(id, "cl_cmdbackup 2")
	client_cmd(id, "mp_decals 300")
	client_cmd(id, "cl_rate 20000")
	client_cmd(id, "ex_interp 0.01")
	set_hudmessage(0, 48, 0, 0.28, 0.44, 0, 6.0, 7.0)
      //set_hudmessage(0, 100, 0, 0.8, 0.1, 0, 6.0, 7.0) 
	show_hudmessage(id, "ex_interp wymuszony na 0.01")
	return PLUGIN_CONTINUE
}

  • +
  • -
  • 0

#9 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 13.05.2009 20:19

return oznacza przerwanie funkcji, przy czym rozne hanldle maja rozne znaczenie dla funkcji silnika halflife - moga np. zatrzymac od wykonywania, lub pozwolic kontynuowac to co robia normalnie.

Mowiac inaczej, u ciebie jest tak:

jesli gracz jest zywy-> przerwij funkcje
reszta kodu

Czyli jak gracz jest martwy to wykona wszystko za returnem.
  • +
  • -
  • 0

#10 naven

    Hero

  • Autor tematu
  • Power User

Reputacja: 204
Profesjonalista

  • Postów:1 088
  • GG:
  • Imię:Adam
  • Lokalizacja:Cieszyn
Offline

Napisano 13.05.2009 20:24

Czyli teraz jest, że jeśli gracz jest żywy to funkcja jest kontynuowana? Sprawdzałem to i nie bardzo działa, nadal po śmierci się wyświetla.
P.S. zauważ że zmieniłem z handled na continue, bo chodzi mi o wykonywanie funkcji, tylko, gdy gracz żyje
  • +
  • -
  • 0

#11 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 13.05.2009 20:31

Aby lepiej widzieć co robi kod trzeba odpowiednio stosować taby
if(is_user_alive(id))
		return PLUGIN_CONTINUE
teraz od razu wiadomo, że return zależy od warunku w if


wartość PLUGIN_HANDLED czy CONTINUE ma znaczenie tylko w funkcjach przypisanych do eventu czy komendy

samo użycie return kończy wywołania funkcji, niezależnie od wartości zwracanej
  • +
  • -
  • 0

#12 naven

    Hero

  • Autor tematu
  • Power User

Reputacja: 204
Profesjonalista

  • Postów:1 088
  • GG:
  • Imię:Adam
  • Lokalizacja:Cieszyn
Offline

Napisano 13.05.2009 20:35

Aby lepiej widzieć co robi kod trzeba odpowiednio stosować taby

if(is_user_alive(id))
		return PLUGIN_CONTINUE
teraz od razu wiadomo, że return zależy od warunku w if


wartość PLUGIN_HANDLED czy CONTINUE ma znaczenie tylko w funkcjach przypisanych do eventu czy komendy

samo użycie return kończy wywołania funkcji, niezależnie od wartości zwracanej


Czyli, że nie zrobię tego w ten sposób, czy już się tak zgubiłem, że nic nie czaję:D?
  • +
  • -
  • 0

#13 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 13.05.2009 20:41

zrobisz, tylko zwracana wartość nie ma znaczenia dla silnika gry jeśli to funkcja przypisana w set_task();równie dobrze możesz użyć
if(!is_user_alive(id)) return;

  • +
  • -
  • 0

#14 darkman

    Wszechwiedzący

  • Przyjaciel

Reputacja: 87
Zaawansowany

  • Postów:553
  • Lokalizacja:inactive
Offline

Napisano 13.05.2009 20:42

jeżeli chcesz aby funkcja wykonała się kiedy gracz jest żywy dajesz
if(!is_user_alive(id)) return PLUGIN_CONTINUE;

jeżeli nieżywy

if(is_user_alive(id)) return PLUGIN_CONTINUE;

lub też sam if O:)
  • +
  • -
  • 0

#15 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 13.05.2009 20:43

Stosowanie na poczatku konstrukcji typu:

if(warunek) return

jest stowowane do przerwania funkcji jesli warunek jest spelniony.
Jest taki magiczny znaczek dla warunkow jak " ! " co oznacza negacje, czyli:

if(!(warunek)) return

oznacza ze funkcja zostanie przerwana jesli warunek nie jest spelniony.

PS. twoj warunek to czy gracz jest zywy...
UP: Damm you all!
  • +
  • -
  • 0

#16 naven

    Hero

  • Autor tematu
  • Power User

Reputacja: 204
Profesjonalista

  • Postów:1 088
  • GG:
  • Imię:Adam
  • Lokalizacja:Cieszyn
Offline

Napisano 19.05.2009 16:30

jeżeli chcesz aby funkcja wykonała się kiedy gracz jest żywy dajesz

if(!is_user_alive(id)) return PLUGIN_CONTINUE;

jeżeli nieżywy


dałem tak:
	if(is_user_alive(id)) return PLUGIN_HANDLED;	
	client_cmd(id, "rate 25000")
	client_cmd(id, "cl_updaterate 101")
	client_cmd(id, "cl_cmdrate 101")
	client_cmd(id, "cl_cmdbackup 2")
	client_cmd(id, "mp_decals 300")
	client_cmd(id, "cl_rate 20000")
	client_cmd(id, "ex_interp 0.01")
	client_print(id, print_chat, "testy")

Nie działa... Mimo iż gracz nie żyje nadal wykonuje się funkcja

gdy daje
if(!is_user_alive(id)) return PLUGIN_HANDLED;

w ogóle nie działa
  • +
  • -
  • 0

#17 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 19.05.2009 16:32

public interp()

{

	new Players[32], playerCount;

	get_players(Players, playerCount);

	for (new i=0; i<playerCount; i++){

		new id = Players[i]; 

		if(is_user_alive(id)) continue;   

		client_cmd(id, "rate 25000")

		client_cmd(id, "cl_updaterate 101")

		client_cmd(id, "cl_cmdrate 101")

		client_cmd(id, "cl_cmdbackup 2")

		client_cmd(id, "mp_decals 300")

		client_cmd(id, "cl_rate 20000")

		client_cmd(id, "ex_interp 0.01")

		client_print(id, print_chat, "testy")

		set_hudmessage(0, 48, 0, 0.28, 0.44, 0, 6.0, 7.0)

		show_hudmessage(id, "ex_interp wymuszony na 0.01")

	}

    

}

  • +
  • -
  • 0

#18 naven

    Hero

  • Autor tematu
  • Power User

Reputacja: 204
Profesjonalista

  • Postów:1 088
  • GG:
  • Imię:Adam
  • Lokalizacja:Cieszyn
Offline

Napisano 19.05.2009 16:51

Działa ;* pomógł dla all;p
  • +
  • -
  • 0

#19 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 19.05.2009 16:52

naven naven naven, czemu ludzie mysla, ze zmienna id to automatycznie gracz... Wywolujac taska w nim jako parametr jest podawany (najczesciej) sam numer identyfikacyjny taska (dowolna liczba). Normalna rzecza jest robic taska z tym numerem takim samym jak id gracza (liczba miedzy 1-32). Z kolei twoj task jest bez parametrowy (tylko czas i funkcja) i zgodnie z specyfikacja funkcja byla odpalona z id (tasku) 0 - a gracz o id 0 nie istnieje, wiec nie moze byc zywy.
  • +
  • -
  • 0

#20 naven

    Hero

  • Autor tematu
  • Power User

Reputacja: 204
Profesjonalista

  • Postów:1 088
  • GG:
  • Imię:Adam
  • Lokalizacja:Cieszyn
Offline

Napisano 19.05.2009 17:23

Ja myślę tak, bo się nie znam w ogóle, jestem samoukiem, jak widać średnio mi idzie.
  • +
  • -
  • 0




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

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