[Tutorial] Countdown

Tutoriale scripting, cod si portiuni de cod.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
munir
Membru eXtream
Membru eXtream
Posts: 3193
Joined: 30 Aug 2012, 22:16
Detinator Steam: Da
CS Status: Fost scripter
Detinator server CS: Nu
SteamID: -
Reputatie: Fost super moderator
Restrictie schimbare nume
Nume anterior: falseq, cruyff
Location: Bucuresti
Has thanked: 342 times
Been thanked: 571 times
Contact:

24 Oct 2013, 20:07

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.
Retras
User avatar
YONTU
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 2466
Joined: 10 May 2013, 14:25
Detinator Steam: Nu
CS Status: Everyone is looking at ur shoes
Reputatie: Moderator ajutator
Fost scripter eXtreamCS
Location: Gura Humorului
Has thanked: 256 times
Been thanked: 288 times
Contact:

24 Oct 2013, 20:30

Simplu si folositor =D> !
„Peste douăzeci de ani vei fi dezamăgit din cauza lucrurilor pe care nu le-ai făcut, nu din cauza celor pe care le-ai făcut.” - Mark Twain
„Asa e si in viata, hotii castiga, prostii care invata pierd.” - Mihai Nemeș


Bio.LeagueCs.Ro - Biohazard v4.4 Xmas Edition
discord: IonutC#5114

Experinta in: Java/Spring boot/Angular/C/C++/C#/Javascript/Python/HTML/CSS/Pawn/SQL
Ai nevoie de ajutorul meu? Ma poti gasi doar la adresa de discord de mai sus.
User avatar
Truth*
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 766
Joined: 11 Oct 2013, 11:08
Detinator Steam: Da
SteamID: Ezeru
Reputatie: Fost moderator ajutator
Membru Club eXtreamCS (4 luni)
Nume anterior: HyperioN.
Scripter eXtreamCS
0.2 / 3
Fond eXtream: 0
Location: Sibiu
Has thanked: 44 times
Been thanked: 122 times

24 Oct 2013, 20:36

Felicitari!
P.S.: Netestat = Nu am avut timp să mă uit atent peste cod. Deci ceea ce am scris este posibil să fie greşit sau să aibă erori.

If i helped you and you wanna thank me, you can donate at this link : here
This will motivate me to help you in the future.
[If you want a private plugin send me a PM.(No complex plugins please, I am a student and I don't have the time to make those)]
munir
Membru eXtream
Membru eXtream
Posts: 3193
Joined: 30 Aug 2012, 22:16
Detinator Steam: Da
CS Status: Fost scripter
Detinator server CS: Nu
SteamID: -
Reputatie: Fost super moderator
Restrictie schimbare nume
Nume anterior: falseq, cruyff
Location: Bucuresti
Has thanked: 342 times
Been thanked: 571 times
Contact:

24 Oct 2013, 20:45

Update

* Cod. Greseala de baraj :D
Retras
Cosmin
Fost moderator
Fost moderator
Posts: 9362
Joined: 06 Jul 2013, 22:08
Detinator Steam: Da
Detinator server CS: Nu
Reputatie: Fost eXtream Mod
Fost Scripter eXtreamCS
Nume anterior: scosmynnnn
Has thanked: 492 times
Been thanked: 547 times

24 Oct 2013, 20:50

Functioneaza perfect,mersi >:D<
User avatar
Dane5
Membru, skill 0
Membru, skill 0
Posts: 53
Joined: 23 Oct 2013, 18:51
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Has thanked: 8 times
Been thanked: 2 times
Contact:

24 Oct 2013, 22:12

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
FuryX.CsOutStanding.Com
Am revenit cu 32 Sloturi :D GO GO GO
User avatar
^ionutz^
Fost moderator
Fost moderator
Posts: 1995
Joined: 05 Oct 2013, 15:12
Detinator Steam: Da
CS Status: activitate scazuta !
SteamID: /id/ionutz_cs/
Reputatie: Fost moderator ajutator
Location: Galati
Has thanked: 46 times
Been thanked: 23 times

06 Jun 2015, 22:20

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 ?
*Or!g!naL*
Fost moderator
Fost moderator
Posts: 1367
Joined: 16 Feb 2014, 16:28
Detinator Steam: Nu
CS Status: N-avem!
Detinator server CS: Zm.Darkcs.ro
Reputatie: Fost moderator ajutator
Has thanked: 3 times
Been thanked: 1 time

06 Jun 2015, 22:27

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 )
Image
User avatar
YONTU
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 2466
Joined: 10 May 2013, 14:25
Detinator Steam: Nu
CS Status: Everyone is looking at ur shoes
Reputatie: Moderator ajutator
Fost scripter eXtreamCS
Location: Gura Humorului
Has thanked: 256 times
Been thanked: 288 times
Contact:

07 Jun 2015, 10:33

*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
„Peste douăzeci de ani vei fi dezamăgit din cauza lucrurilor pe care nu le-ai făcut, nu din cauza celor pe care le-ai făcut.” - Mark Twain
„Asa e si in viata, hotii castiga, prostii care invata pierd.” - Mihai Nemeș


Bio.LeagueCs.Ro - Biohazard v4.4 Xmas Edition
discord: IonutC#5114

Experinta in: Java/Spring boot/Angular/C/C++/C#/Javascript/Python/HTML/CSS/Pawn/SQL
Ai nevoie de ajutorul meu? Ma poti gasi doar la adresa de discord de mai sus.
*Or!g!naL*
Fost moderator
Fost moderator
Posts: 1367
Joined: 16 Feb 2014, 16:28
Detinator Steam: Nu
CS Status: N-avem!
Detinator server CS: Zm.Darkcs.ro
Reputatie: Fost moderator ajutator
Has thanked: 3 times
Been thanked: 1 time

07 Jun 2015, 13:01

si daca svul are 30 sloturi (sa zicem ca il facem pentru un sv de 30 sloturi) vine 31 ? dar 66 de la modele ?
Image
User avatar
Nubo
Fost moderator
Fost moderator
Posts: 2734
Joined: 11 Jul 2012, 18:45
Detinator Steam: Da
CS Status: [əˈnɒn.ɪ.məs]
Reputatie: Fost scripter eXtreamCS
Fost eXtream Mod
Has thanked: 8 times
Been thanked: 27 times

07 Jun 2015, 14:16

*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.
Cand nu merge acest forum sunt online aici:
  • * Skype: nubo_cs
    * Y!M ID: nubo_cs
User avatar
HamletEagle
Fost moderator
Fost moderator
Posts: 750
Joined: 21 Sep 2013, 15:05
Detinator Steam: Da
CS Status: Inactiv cateva zile.
SteamID: privat
Reputatie: Fost Scripter eXtreamCS.com
Fost Moderator ajutator
Has thanked: 19 times
Been thanked: 85 times

07 Jun 2015, 20:38

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.
Daca vreti ajutorul meu, nu dati bump la topic, fara intrebari de genu "cat mai dureaza/mai astept mult?".
Post Reply

Return to “Scripting”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 3 guests