Jump to content

Premenovanie (vratane DUDB)


Mmartin

Recommended Posts

Zdravim. Iste niekomu lame hlavou premenovanie sa na serveri, ci uz s registraciou, alebo bez nej, aby sme sa nabuduce mohli prihlasit pod novym menom. Idem rovno k veci, teda, co budeme potrebovat?

  • [*:1ze1z47h]dcmd - kto nema definicu, je tu:
#define dcmd(%1,%2,%3) if((strcmp((%3)[1],#%1,true,(%2))==0)&&((((%3)[(%2)+1]==0)&&(dcmd_%1(playerid,"")))||(((%3)[(%2)+1]==32)&&(dcmd_%1(playerid,(%3)[(%2)+2]))))) return 1


[*:1ze1z47h]SetPlayerName(playerid, meno[]);
[*:1ze1z47h]V pripade registracie na serveri aj dudb a dini
[*:1ze1z47h]A samozrejme, zakladnu znalost pawna.

 

Na zaciatok trocha teorie k funkciam, ktore budu pre tento jav nove a potrebne:

 

SetPlayerName(playerid,meno[])

  • [*:1ze1z47h]playerid - ID hraca, ktoremu menime meno
    [*:1ze1z47h]meno[] - nove meno hraca (string). Odporucam maximalne 15 znakov, aby meno nebolo priliz dlhe. Ak je meno dlhsie ako 20 znakov, server moze spadnut.

Tato funkcia je klucova pre zmenu mena v hre. Zaujimave su jej returny, ktore neskor budeme potrebovat.

  • [*:1ze1z47h]-1 : Nemozno zmenit meno, niekto ho pouziva, alebo meno obsahuje nepovolene znaky.
    [*:1ze1z47h]0: Menis si meno na rovnake, ake prave mas.
    [*:1ze1z47h]1: Meno zmenene.

Pozor! Ak si chcete zmenit meno napriklad z "Hrac" na "hrAc", nepojde to. Budete si ho musiet najskor zmenit na nejaky odlisny, az potom na "hrAc".

 

udb_Exists(uzivatel[])

  • [*:1ze1z47h]uzivatel[] - Meno hraca, ktoreho existenciu testujeme (string).

Toto je funkcia kniznice dudb, ktora skontroluje, ci je niekto zaregistrovany pod nickom uzivatel[].

Funkcia ma len dva returny, a to true a false.

  • [*:1ze1z47h]true - hrac existuje.
    [*:1ze1z47h]false - hrac neexistuje.

 

udb_RenameUser(staremeno[],novemeno[])

  • [*:1ze1z47h]staremeno[] - aktualne meno hraca, ktoreho chceme premenovat.
    [*:1ze1z47h]novemeno[] - meno, ktore bude mat hrac po premenovani.

Takisto funkcia z kniznice dudb. Tato je klucova v premenovani uzivatela v databaze uzivatelov.

 

Myslim si, ze teorie by bolo dost, vrhnime sa teda na prax:

 

Najskor si musime nadefinovat prikaz v OnPlayerCommandText. Pridame si tam teda:

dcmd(meno,4,cmdtext);

Potom prichadza samotny prikaz, ten si dame mimo publicy, najlepsie pod OnPlayerCommandText:

dcmd_meno(playerid,params[])
{
    new oldnick[24];
	format(oldnick,24,meno(playerid));
    new newnick[24];
    format(newnick,24,params);
    if(!strlen(params)) return SendClientMessage(playerid,0xFF0000FF,"Premenovať sa: /meno ");
    if((strlen(params)<3) || (strlen(params)>15)) return SendClientMessage(playerid,0xFF0000FF,"Meno musí mať aspoň 3 a maximálne 15 znakov.");
    if(udb_Exists(params)) return SendClientMessage(playerid,0xFF0000FF,"Meno už používa niekto iný.");
    switch(SetPlayerName(playerid,params))
    {
        case -1: return SendClientMessage(playerid,0xFF0000FF,"Meno obsahuje nepovolené znaky");
        case 0: return SendClientMessage(playerid,0xFF0000FF,"Už používaš zadané meno!");
        case 1:{ new str[128];format(str,128,"Hráč %s si zmenil meno na %s",oldnick,newnick);SendClientMessageToAll(0xFF0000FF,str);}
    }
    udb_RenameUser(oldnick,newnick);
    return 1;
}

A teraz si rozobereme kod kus po kusku:

new oldnick[24]; // premenna pre stare meno
format(oldnick,24,meno(playerid)); // ulozime stare meno do premennej
new newnick[24]; // premenna pre nove meno
format(newnick,24,params); // ulozime nove meno do premennej

Teda, mena by sme ulozene mali. Teraz prichadza kontrola, ci je meno zadane spravne!

Najskor skontrolujeme, ci hrac zadal prikaz spravne, teda s parametrom:

if(!strlen(params)) return SendClientMessage(playerid,0xFF0000FF,"Premenovať sa: /meno");

Ak ano, kod ide dalej. Dalej skontrolujeme, ci ma meno aspon 3, a maximalne 15 znakov:

if((strlen(params)<3) || (strlen(params)>15)) return SendClientMessage(playerid,0xFF0000FF,"Meno musí mať aspoň 3 a maximálne 15 znakov.");

Teraz prichadza na rad funkcia, ktoru som vysvetlil hore, ideme testovat, ci uz taky hrac je zaregistrovany.

if(udb_Exists(params)) return SendClientMessage(playerid,0xFF0000FF,"Meno už používa niekto iný.");

Este tu ostavaju dve varianty zleho mena.

  • [*:1ze1z47h]Nepovolene znaky
    [*:1ze1z47h]Hrac pouziva rovnake meno, na ake sa chce premenovat

Predist sa im da lahko. Ako som spominal returny funkcie SetPlayerName, teraz ich vyuzijeme.

switch(SetPlayerName(playerid,params))
    {
        case -1: return SendClientMessage(playerid,0xFF0000FF,"Meno obsahuje nepovolené znaky");
        case 0: return SendClientMessage(playerid,0xFF0000FF,"Už používaš zadané meno!");
        case 1:{ 
                      new str[128];
                      format(str,128,"Hráč %s si zmenil meno na %s",oldnick,newnick);
                      SendClientMessageToAll(0xFF0000FF,str);
            }
    }

Ako vidite, ak nastane return 1, ihned hraca premenuje.

Zostava uz len posledna vec, premenovat hraca v DUDB databaze.

udb_RenameUser(oldnick,newnick);

 

Jednoduche, vsak? :)

 

//Pokial najdete v navode chybu, ohlaste mi ju do topicu, opravim sa :)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...