Page 1 of 1

[Tutorial] Countdown

Posted: 24 Oct 2013, 20:07
by munir
Astazi vreau sa va invat, cum sa va creati un countdown. De exemplu, sa zicem ca vrem sa apara un mesaj in hud, in care sa scrie:
In Y secunde vei primi o grenada de tip Z
Iar acel mesaj sa fie permanent. (sa se repete, chiar si dupa ce primesti grenada)
1. Cream un vector global, de aproximativ 33 de pozitii, in care vom stoca numarul 10 (un exemplu (voi puteti sa puneti ce numar doriti))

Code: Select all

new g_iCountDown[ 33 ] = 10
2. Acum vom crea un public numit client_putinserver. Cu parametrul id/index (respectiv id-ul playerului care se conecteaza). Ce este/ce face el? Acest public este chemat de fiecare data cand un player intra pe server; Mai precis http://www.amxmodx.org/doc/index.html?p ... server.htm

Code: Select all

public client_putinserver( id )
{

}
3. Vom crea un task, care sa se repete pana la infinit. In cazul nostru, taskul se va repeta odata la 1 secunda; Atentie!!! Secunda va fi trecuta cu decimale. In cazul nostru, de tip float, respectiv 1.0.

Code: Select all

set_task( 1.0, "countDown", id, _, _, "b", _ );
4. Cream publicul care este executat de task, cu parametrul id/index (in cazul nostru countDown)

Code: Select all

public countDown( id )
{

}
5. Acum vom verifica daca variabila globala, g_iCountDown, este mai mica/sau egala cu 0; Daca este, vom verifica daca playerul este in viata, iar daca este, ii vom da o grenada de tip he

Code: Select all

if( g_iCountDown[ id ] <= 0 )
{
	if( is_user_alive( id ) )
	{
		give_item( id, "weapon_hegrenade" );
	}

	g_iCountDown[ id ] = 10;
}
6. Vom adauga o exceptie, mai pe inteles, daca variabila globala, g_iCountDown nu este mai mica/sau egala cu 0, vom scade din ea cate 1, si vom adauga un mesaj hud.

Code: Select all

else
{
	g_iCountDown[ id ]--;
	
	set_hudmessage( 150, 10, 10, -1.0, 0.28, 0, 1.0 );
	show_hudmessage( id, "Vei primi o grenada in %i secunde.", g_iCountDown[ id ] );
}
In final iese cam asa:
| Afiseaza codul
#include < amxmodx >
#include < fun >



#define PLUGIN "Count down"
#define VERSION "0.1"


new g_iCountDown[ 33 ] = 10;


public plugin_init( )
{
	register_plugin( PLUGIN, VERSION, "falseq" );
}

public client_putinserver( id )
{
	set_task( 1.0, "countDown", id, _, _, "b", _ );
}

public countDown( id )
{
	if( g_iCountDown[ id ] <= 0 )
	{
		if( is_user_alive( id ) )
		{
			give_item( id, "weapon_hegrenade" );
		}

		g_iCountDown[ id ] = 10;
	}
	
	else
	{
		g_iCountDown[ id ]--;
		
		set_hudmessage( 150, 10, 10, -1.0, 0.28, 0, 1.0 );
		show_hudmessage( id, "Vei primi o grenada in %i secunde.", g_iCountDown[ id ] );
	}
}
Daca am sarit ceva, lasa-ti post/pm ca sa editez sa adaug.

Re: [Tutorial] Countdown

Posted: 24 Oct 2013, 20:30
by YONTU
Simplu si folositor =D> !

Re: [Tutorial] Countdown

Posted: 24 Oct 2013, 20:36
by Truth*
Felicitari!

Re: [Tutorial] Countdown

Posted: 24 Oct 2013, 20:45
by munir
Update

* Cod. Greseala de baraj :D

Re: [Tutorial] Countdown

Posted: 24 Oct 2013, 20:50
by Cosmin
Functioneaza perfect,mersi >:D<

Re: [Tutorial] Countdown

Posted: 24 Oct 2013, 22:12
by Dane5
Cum pot sa fac sa blocheze cumpararea unui item pana la un anumit timp, exemplu:
Poti cumparra o grenada Z peste X secunde !
intelegi ? :D

Re: [Tutorial] Countdown

Posted: 06 Jun 2015, 22:20
by ^ionutz^
Dane5 wrote:Cum pot sa fac sa blocheze cumpararea unui item pana la un anumit timp, exemplu:
Poti cumparra o grenada Z peste X secunde !
intelegi ? :D
stie cineva sa faca asa ?

Re: [Tutorial] Countdown

Posted: 06 Jun 2015, 22:27
by *Or!g!naL*
sunt la inceput (pentru cine vrea sa ma ajute sa invat )
pentru ce e new g_iCountDown[ 33 ] = 10 (33 ala ) am mai vazut si 66 (la modele )

Re: [Tutorial] Countdown

Posted: 07 Jun 2015, 10:33
by YONTU
*Or!g!naL* wrote:sunt la inceput (pentru cine vrea sa ma ajute sa invat )
pentru ce e new g_iCountDown[ 33 ] = 10 (33 ala ) am mai vazut si 66 (la modele )

Code: Select all

1. Cream un vector global, de aproximativ 33 de pozitii, in care vom stoca numarul 10 (un exemplu (voi puteti sa puneti ce numar doriti))
33 = 32 playeri + 1

Re: [Tutorial] Countdown

Posted: 07 Jun 2015, 13:01
by *Or!g!naL*
si daca svul are 30 sloturi (sa zicem ca il facem pentru un sv de 30 sloturi) vine 31 ? dar 66 de la modele ?

Re: [Tutorial] Countdown

Posted: 07 Jun 2015, 14:16
by Nubo
*Or!g!naL* wrote:si daca svul are 30 sloturi (sa zicem ca il facem pentru un sv de 30 sloturi) vine 31 ? dar 66 de la modele ?
De regula, se pune mereu 33, fiindca nu se stie (teoretic) pe ce server va rula pluginul. Mai mult e vorba de compatibilitate cu orice server, fie el cu 22 slot sau 32 slot.

Modelul are o adresa, de exemplu, "models/player/vip.mdl".

Unde:
models - 6 caractere
player - 6 caractere
vip.mdl - 7 caractere
// - 2 caractere

Rezulta: 6+6+7+2 = 21

Respectiv, un array ( gen, new String[66] ) trebuie sa aiba minim 21 celule, adica, new String[21].

Intr-un string cu 16 celule nu o sa incapa adresa "models/player/vip.mdl", rezulta erori, buguri, etc.

Am explicat cat mai simplu posibil.

Re: [Tutorial] Countdown

Posted: 07 Jun 2015, 20:38
by HamletEagle
Dar sa nu ii ziceti de ce se adauga 1, macar sa inteleaga pana la capat. Un array in pawn are nevoie ca ultima celula sa fie mereu 0, adica nu poti sa accesezi nicioadata ultima celula, nu ai voie.

Daca tu ai de stocat 32 de playeri si il faci array[32] atunci o sa poti sa folosesti celulele de la 0 la 31(da, numaratoarea incepe de la 0 si celula 32 nu o poti accesa, asta e regula), perzi un player, playerul cu numarul 32. Ca sa evitam asta, adaugam +1 mereu, adica 33 si atunci putem indexa de la 0 la 32, e fix cat ne trebuie. Cand e vorba de playeri, id-urile lor sunt numere de la 1 la 32, deci celula 0 nu va fi folosita nicioadata, dar asta nu inseamna ca ea nu exista.

Code: Select all

new Array[10]
Fiecare celula din array are un index, pleaca de la 0 pana la 10-1 = 9. O poti accesa specificand intre [] pozitia.

Code: Select all

Array[3] = 5 //in pozitia a 3-a va pune numarul 5. Nu uita ca numaratoarea incepe de la 0.
Array[0] = 0
Array[1] = 0
Array[2] = 0
Array[3] = 5
Orice variabila in momentul declararii este 0(sau false pentru bool-uri care au valori logice de tipul true(adevarat) sau false(fals)).

Deci sunt doar dimensiuni, sunt estimari pe care TU le faci in asa fel incat sa poti cuprinde tot ceea ce e nevoie. Dar ai aceasta limitare, ca nu poti avea un spatiu de stocare nelimitat, pentru asta exista dynamic array, dar mai bine nu vorbim despre asta acum, esti inca la inceput.