INSIDE RESURSE

Resurse pentru toate jocurile online! samp, csgo, mape, muzica, filme, ps, divertisment, geforce, fzarea, muzica, clan, coduri, cfg, inside, resurse, servere, gata, facute, war, zone, pgl, long, nvid


Nu sunteti conectat. Conectati-va sau inregistrati-va

[TUTORIAL:SAMP]Evenimente

Por favor, faça o login para responder

Vezi subiectul anterior Vezi subiectul urmator In jos  Mesaj [Pagina 1 din 1]

#1vendME 

la data de Joi Mai 04, 2017 12:07 am

avatar

Fondator
Fondator
Cand este vreo sarbatoare sau vreun eveniment in viata reala, cu totii vrem in viata virtuala sa se faca anumite event-uri din care vreti sa aveti toti de castigat.
Ok, eu am gasit asa-zisa o solutie. Cum ?
Pai in primul rand m-am gandit la o sarbatoare din an,am ales craciunul, fiind in luna 12.
 
Asadar aceasta luna ma ajuta mult deoarece timpul trimis pe server este unul real, si prin urmare incepe automat evenimentul de craciun.(cadouri, brazi, etc).
 
Eu propun sa incepem.
 
[Pasul 1] Iarasi ne lovim de aceste include-uri dar acum si de definirea bazei de date.

[ltr]#include <a_samp>
#include <streamer>
#include <sscanf2>
#include <zcmd>
 
#include <a_mysql>
 

#define SQL_HOST "localhost"
#define SQL_USER "root"
#define SQL_PASS ""
#define SQL_DB "accounts"
[/ltr]

[Pasul 2] Definirea enumerotarii in care se vor situa urmatoarele variabile jucatoriale.

[ltr]enum pInfo
{
    pSQLID,
    pGift,
    pNextGift
 
}
new PlayerInfo[MAX_PLAYERS][pInfo];[/ltr]

[Pasul 3] Crearea variabilelor globale de care ne vom folosi usor pe viitor in diverse functii.

[ltr]new dbhandle;
 
new bool:EvenimentON[MAX_PLAYERS];
 
new Gift = 19054;
new timer;
 
new Float:x_gift[MAX_PLAYERS] = 0.0000; 
new Float:y_gift[MAX_PLAYERS] = 0.0000;
new Float:z_gift[MAX_PLAYERS] = 0.0000;
 
new Float:rx_gift[MAX_PLAYERS] = 0.0000;
new Float:ry_gift[MAX_PLAYERS] = 0.0000;
 
new Float:rz_gift[MAX_PLAYERS] = 0.0000;[/ltr]

[Pasul 4] Stabilirea forward-urilor care vor apela public-uri.

[ltr]forward SaveData(playerid);
forward VerificaTimpul();[/ltr]

[Pasul 5] Ne ducem la public-ul OnGameModeInit si vom face in felul urmator:

[ltr]public OnGameModeInit()
{
    dbhandle = mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS);
 
    for( new i = 0; i < MAX_PLAYERS; i++ ) {
        new year, month, day;
        getdate(year, month, day);
        if(month == 12 && day >= 24) {  
            CreateObject(gift, x_gift[i], y_gift[i], z_gift[i], rx_gift[i], ry_gift[i], rz_gift[i]);
            Create3DTextLabel("Scrie /getgift pentru a lua\nun cadou.", -1, x_gift[i], y_gift[i], z_gift[i], 10.0, 1);
            EvenimentON[i] = true;
            timer = SetTimer("VerificaTimpul", 1000, 1);
        }
        else {
            EvenimentON[i] = false;
        }
    }
    return 1;
 
}[/ltr]

 
[Pasul 6] Reprezinta comanda getgift imbogatita cu toate cele.
 


[ltr]CMD:getgift(playerid, params[]) {
    new time = PlayerInfo[playerid][pNextGift],
            minutes,
            string[128];
    minutes = floatround(time / 60);
    format(string, sizeof(string), "%02d minute ramase pana la urmatorul cadou.", minutes);
    if(IsPlayerConnected(playerid)) {
        if(EvenimentON[playerid]) {
            if(IsPlayerInRangeOfPoint(playerid, 5.0, x_gift[playerid], y_gift[playerid], z_gift[playerid])) {
                if(PlayerInfo[playerid][pGift] == 0) {
                    GivePlayerMoney(playerid, 100000);
                    PlayerInfo[playerid][pGift] = 1;
                    PlayerInfo[playerid][pNextGift] = 3600;
                    SaveData(playerid);
                 }
                else {
                    SendClientMessage(playerid, -1, string);
                    return 1;
                }
             }
            else {
                SendClientMessage(playerid, -1, "Nu esti langa cadou.");
                return 1;
            }
         }
        else {
            SendClientMessage(playerid, -1, "Nu este nici o sarbatoare.");
            return 1;
        }
    }
    else {
        SendClientMessage(playerid, -1, "Nu esti conectat.");
        return 1;
    }
    return 1;
}[/ltr]

 
[Pasul 7] Apelul catre public-ul VerificaTimpul.
 


[ltr]public VerificaTimpul() {
    for( new i = 0; i < MAX_PLAYERS; i++ ) {
        if(IsPlayerConnected(i)) {
            if(PlayerInfo[i][pGift]) {
                if(PlayerInfo[i][pNextGift] != 0) {
                    PlayerInfo[i][pNextGift]--;
                    SaveData(i);
                }
                else {
                    PlayerInfo[i][pGift] = 0;
                    PlayerInfo[i][pNextGift] = 0;
                    SaveData(i);
                    KillTimer(timer);
                    return 1;
                }
            }
        }
    }
    return 1;
 
}[/ltr]

 
[Pasul 8] Apelul catre public-ul SaveData.
 


[ltr]public SaveData(playerid) {
    new query[128];
    format(query, sizeof(query), "UPDATE `accounts` SET `Gift` = '%d', `GiftTime` = '%d' WHERE `ID` = '%d'", PlayerInfo[playerid][pGift], PlayerInfo[playerid][pNextGift], PlayerInfo[playerid][pSQLID]);
    mysql_tquery(dbhandle, query, "", "");
    return 1;
 
}[/ltr]

 
[Pasul 9] La OnPlayerDisconnect vom adauga functia creata la pasul 8 + distrugerea timer-ului, astfel:
 

 
[ltr]public OnPlayerDisconnect(playerid, reason)
{
    KillTimer(timer);
    SaveData(playerid);
    return 1;
}[/ltr]

 
Sper sa va fie de folos acest tutorial.


_________________

INSIDE RESURSE











http://resurseinside.forumgratuit.ro

Vezi subiectul anterior Vezi subiectul urmator Sus  Mesaj [Pagina 1 din 1]

Por favor, faça o login para responder

Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum