Jump to content

Cum cream un Timer simplu


TedyYy.

Recommended Posts

Salutare Sa-Mp.Ro, astazi am venit cu un tutorial destul de usor zic eu.Pentru cei care inca nu stiu cum sa foloseasca un Timer pentru serverul lor vor invata chiar acum.

Ce trebuie sa retineti:

SetTimer("mesajul", 5000, false); sau SetTimer("mesajul", 5000, true);
//SetTimer = Comanda pentru timp.
//1000 = timpul care este controlat de timer se masoara in milisecunde. Deci
// 1 secunda = 1000 milisecunde, 5 secunde = 5000 milisecunde
// false = inseamna ca nu se repeta timer-ul , true = inseamna ca timer-ul se repeta mereu.

Sa incepem cu inceputu'

Avem nevoie de un include denumit foreach , iar acest include puteti sa-l gasiti aici

#include <foreach>
#include <zcmd>//avem nevoie si de zcmd pentru a crea o comanda , sau puteti folosi comanda pawnu-lui

Eu am decis sa cream o comanda pe dialog , deci.

#define DIALOG_SERVERCLOSED 1//Definim un dialog

Trebuie sa fabricam si un new.

new TimpScurs;// este new-ul care ne va ajuta la timp.

Acum cream comanda dorita.

CMD:serverclosed(playerid, params[])
{
    ShowPlayerDialog(playerid, DIALOG_SERVERCLOSED, DIALOG_STYLE_MSGBOX, "Server Closed", "Doriti sa inchideti acest server?", "Ok", "No"); //Este un dialog care l-am creat eu.
    return 1;
}

Dupa ce am creat comanda, mergem si facem un public si un forward.

forward mesajul();//Se creaza forward-ul
public mesajul()//cream publicul de care avem nevoie
{    
    foreach(Player, i)//Pentru a folosi aceasta comanda aveam nevoie de foreach, daca la sendclientmessage scriam playerid, inloc de i imi aparea o eroare
    {
        SendClientMessage(i, -1, "Ai inchis serverul: Timpul care s-a scurs a fost de 5 secunde");//Dupa ce timpul s-a scurs apare acest mesaj si
        SendRconCommand("exit");//se va inchide serverul
    }
}

Mergem si la OnDialogResponse(), fiindca avem un dialog de reprezentat.

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == 1)//dialogulid care l-am creat noi.
    {
        if(response)//daca se apasa pe primul buton se vor intampla urmatoarele
        {
            SendClientMessageToAll(-1, "Serverul se va inchide in 5 secunde");//Se da un messaj la tot serverul , cum ca severul se va inchide dupa 5 minute.
            TimpScurs = SetTimer("mesajul", 5000, false);//Aici este new-ul , dupa cum vedeti , TimpScurs = cu comanda timpului.
        }
        else//Daca se apasa al 2-lea buton ii se inchide dialogul si ii va da un mesaj
        {
            SendClientMessage(playerid, -1, "Ai anulat!");
        }
    }
    return 1;
}

Si la final se va distruge Timpul , mergem la OnGameModeExit()

public OnGameModeExit()
{
    KillTimer(TimpScurs);// KillTimer inseamna ca se va distruge timpul nostru , adica =TimpScurs
    return 1;
}

Am realizat un timer cu o comanda . Peste 5 secunde serverul se va inchide prin apasarea unui singur buton.

Asta a fost tutorialul meu ,sper ca va placut si ne revedem data viitoare.

 

Nu uitati - Tutorial 100% creat de mine ,

Nu uitati - Daca va placut tutorialul puteti da un +1

Edited by WopsS
Link to comment
Share on other sites

Acum 6 minute, WopsS a spus:

Salut,

Ti-am adaugat eu condul intre tag-urile de cod (iconita care arata cam asa <>), arata mai frumos.

Chiar iti multumesc @WopsS , nu stiam asta. 

Acum 16 minute, Uzzi25 a spus:

Bun pentru incepatori :D

Felicitari :) 

Multumesc @Uzzi25 , sper ca ti-a placut tutorialul.

Link to comment
Share on other sites

Ai cateva greseli.

In primul rand: 

1.

forward mesajul();//Se creaza forward-ul
public mesajul()//cream publicul de care avem nevoie
{    
    foreach(Player, i)//Pentru a folosi aceasta comanda aveam nevoie de foreach, daca la sendclientmessage scriam playerid, inloc de i imi aparea o eroare
    {
        SendClientMessage(i, -1, "Ai inchis serverul: Timpul care s-a scurs a fost de 5 secunde");//Dupa ce timpul s-a scurs apare acest mesaj si
        SendRconCommand("exit");//se va inchide serverul
    }
}

Acel: foreach(Player, i) este un loop .. pentru toti jucatori deci din asta reiese ca Mesajul de mai jos va fi trimis tuturor si din cate vad mesajul este la singular si zice: Ai inchis ... deci e clar.. Pentru a trimit mesajul doar celui ce a pornit timer-ul faci asa:

forward mesajul(playerid);//Se creaza forward-ul
public mesajul(playerid)//cream publicul de care avem nevoie
{    
		SendClientMessage(playerid, -1, "Ai inchis serverul: Timpul care s-a scurs a fost de 5 secunde");//Dupa ce timpul s-a scurs apare acest mesaj si
        SendRconCommand("exit");//se va inchide serverul
}

Iar timer-ul va arata in urmatorul fel: 

SetTimerEx("mesajul",5000,false,"d",playerid);

 

In al 2 rand..

 

2. Odata ce ai definit un dialog pai cam normal ar trebuii sa-l folosesti si la OnDialogResponse.. Eu vad ca ai pus acolo doar

 

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == 1)//dialogulid care l-am creat noi.
    {
        if(response)//daca se apasa pe primul buton se vor intampla urmatoarele
        {
            SendClientMessageToAll(-1, "Serverul se va inchide in 5 secunde");//Se da un messaj la tot serverul , cum ca severul se va inchide dupa 5 minute.
            TimpScurs = SetTimer("mesajul", 5000, false);//Aici este new-ul , dupa cum vedeti , TimpScurs = cu comanda timpului.
        }
        else//Daca se apasa al 2-lea buton ii se inchide dialogul si ii va da un mesaj
        {
            SendClientMessage(playerid, -1, "Ai anulat!");
        }
    }
    return 1;
}

Si trebuia astfel sa se conformeze define-urilor tale.

ublic OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_SERVERCLOSED)//dialogulid care l-am creat noi.
    {
        if(response)//daca se apasa pe primul buton se vor intampla urmatoarele
        {
            SendClientMessageToAll(-1, "Serverul se va inchide in 5 secunde");//Se da un messaj la tot serverul , cum ca severul se va inchide dupa 5 minute.
            TimpScurs = SetTimer("mesajul", 5000, false);//Aici este new-ul , dupa cum vedeti , TimpScurs = cu comanda timpului.
        }
        else//Daca se apasa al 2-lea buton ii se inchide dialogul si ii va da un mesaj
        {
            SendClientMessage(playerid, -1, "Ai anulat!");
        }
    }
    return 1;
}

 

Link to comment
Share on other sites

Nu prea am inteles ce ai vrut sa spui.

1.Tu acolo ai scris SetTimerEx , nu este totuna cu SetTimer , sunt doua lucruri diferite si nu fac acelasi lucru

SetTimerEx("mesajul",5000,false,"d",playerid);

2.Tu ai luat dialogul dupa bunul plac. Nu era gresit daca am pus id-ul dialogului.

3.Nici macar nu ai probat sa vezi daca merge sau daca aveam erori la compilare.

4.Concluzie: Eu zic ca nu prea am avut greseli , dar iti multumesc pentru reply.

if(dialogid == DIALOG_SERVERCLOSED)
Link to comment
Share on other sites

Pai ma daca ai pus cu dialogid == 1 atunci define-ul ala nu mai are rost. 1 la mana..

2. SetTimerEx se foloseste cand este o functie speciala cu un anume "playerid" SetTimer normal se foloseste pentru o functie ();

 

Uita-te aici

https://wiki.sa-mp.com/wiki/SetTimerEx - SetTimerEx

https://wiki.sa-mp.com/wiki/SetTimer - SetTimer

 

Deci am avut treaba in tot ce am spus.

Link to comment
Share on other sites

  if(response)//daca se apasa pe primul buton se vor intampla urmatoarele
        {
            SendClientMessageToAll(-1, "Serverul se va inchide in 5 secunde");//Se da un messaj la tot serverul , cum ca severul se va inchide dupa 5 minute.
            TimpScurs = SetTimer("mesajul", 5000, false);//Aici este new-ul , dupa cum vedeti , TimpScurs = cu comanda timpului.
        }

Daca te reveri la acel SendClientMessageToAll , da asa am pus eu , asa am vrut sa fie.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.