SA-MP Forums Archive
Help Converting Dialog To CMD - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+---- Forum: Help Archive (https://sampforum.blast.hk/forumdisplay.php?fid=89)
+---- Thread: Help Converting Dialog To CMD (/showthread.php?tid=179837)



Help Converting Dialog To CMD - Guest3598475934857938411 - 28.09.2010

Hey I got this code:
Код:
if(dialogid == 201)
    {
        if(!strlen(inputtext)) return ShowPlayerDialog(playerid,201,DIALOG_STYLE_INPUT,"Registration","ERROR: You did not enter a password.\nPlease enter a password to register this account!","Register","Cancel");
        new playerfile[128], pname[MAX_PLAYER_NAME];
        GetPlayerName(playerid, pname, sizeof(pname));
        format(playerfile, sizeof(playerfile), "EAdmin/Users/%s.ini",pname);
         if(dini_Exists(playerfile)) return SendClientMessage(playerid, red, "You are already registered!");
        new playerip[20];
        GetPlayerIp(playerid, playerip, sizeof(playerip));
        dini_Create(playerfile);
          dini_IntSet(playerfile, "Password", udb_hash(inputtext));
        dini_Set(playerfile, "Ip", playerip);
        dini_IntSet(playerfile, "Level", 0);
        dini_IntSet(playerfile, "Cash", 0);
        dini_IntSet(playerfile, "Score", 0);
        logged[playerid] = 1;
        SendClientMessage(playerid, yellow, "You have registered your account! You have also been logged in.");
    }
    if(dialogid == 200)
    {
        if(!strlen(inputtext)) return ShowPlayerDialog(playerid,200,DIALOG_STYLE_INPUT,"Login","ERROR: You did not enter a password.\nPlease enter a password to login to this account!","Login","Cancel");
        new playerfile[100], pname[MAX_PLAYER_NAME];
        GetPlayerName(playerid, pname, sizeof(pname));
        format(playerfile, sizeof(playerfile), "EAdmin/Users/%s.ini",pname);
         if(!dini_Exists(playerfile)) return SendClientMessage(playerid, red, "This account is not yet registered, please type /register.");
        new tmp[256];
        tmp = dini_Get(playerfile, "Password");
        if(udb_hash(inputtext) == strval(tmp))
        {
        new playerip[20];
        GetPlayerIp(playerid, playerip, sizeof(playerip));
        level[playerid] = dini_Int(playerfile, "Level");
        logged[playerid] = 1;
        dini_Set(playerfile, "Ip", playerip);
        GivePlayerMoney(playerid, dini_Int(playerfile, "Cash"));
        SetPlayerScore(playerid, dini_Int(playerfile, "Score"));
        logged[playerid] = 1;
        SendClientMessage(playerid, yellow, "You have logged in!");
        } else return ShowPlayerDialog(playerid,200,DIALOG_STYLE_INPUT,"Login","ERROR: Invalid Password.\nPlease enter a password to login to this account!","Login","Cancel");
    }
I want to switch these to a command like /login [password] and /register [password]

Can anyone help me out PS: I tried it but I failed


Re: Help Converting Dialog To CMD - samgreen - 29.09.2010

Quote:
Originally Posted by Hal
Посмотреть сообщение
Hey pro scripter, if i pay you can you fix the problem i have in the topic above me?
Hey asshole, can you help people or just flame?

You need to create the commands, use dcmd or zcmd. When finished it will look something like this (this code is untested):

Код:
public OnPlayerCommandText(playerid, cmdtext[]) {
     dcmd(login, 5, cmdtext);
     dcmd(register, 8, cmdtext);

     return 1;
}

dcmd_login(playerid, params) {
     ShowPlayerDialog(playerid,201,DIALOG_STYLE_INPUT,"Registration",Please enter a password to register this account!","Register","Cancel");

     return 1;
}

dcmd_register(playerid, params) {
     ShowPlayerDialog(playerid,200,DIALOG_STYLE_INPUT,"Login","Please enter a password to login to this account!","Login","Cancel");

     return 1;
}



Re: Help Converting Dialog To CMD - LarzI - 29.09.2010

I never said strcmp is better, learn to read.
I'm just saying that even if dcmd and zcmd is better, faster and more efficient, you shouldn't "force him" to use it. It still is optional, so by saying "use dcmd or zcmd" you're telling him that it won't work elseway.
What if he's not familiar with zcmd or dcmd? What if he don't know how to use it? What if he's not smart enough (most likely) to learn zcmd or dcmd?
I'm just saying.


Re: Help Converting Dialog To CMD - Rachael - 29.09.2010

strcmp is better when you have a command which has only one ( string ) parameter

and strtok is better when you have a command with an indeterminate number of parameters

pawn Код:
CMD:gethere(playerid,params[])
{
     new tmp[25],idx,targetid;
     new Float:x,Float:y,Float:z;
     GetPlayerPos(playerid,x,y,z);
     tmp = strtok(params, idx);
     while(strlen(tmp) > 0)
     {
           targetid = ReturnUser(tmp);
           if(IsPlayerConnected(targetid))
           {
                SetPlayerPos(targetid,x,y+1,z);
           }
           tmp = strtok(params,idx);
     }
      return 1;
}
ps: this is just a rough example


Re: Help Converting Dialog To CMD - LarzI - 29.09.2010

Quote:
Originally Posted by Rachael
Посмотреть сообщение
strcmp is better when you have a command which has only one ( string ) parameter

and strtok is better when you have a command with an indeterminate number of parameters

pawn Код:
CMD:gethere(playerid,params[])
{
     new tmp[25],idx,targetid
     new Float:x,Float:y,Float:z;
     GetPlayerPos(playerid,x,y,z);
     tmp = strtok(params, idx);
     while(strlen(tmp) > 0)
     {
           targetid = ReturnUser(tmp);
           if(IsPlayerConnected(targetid))
           {
                SetPlayerPos(targetid,x,y+1,z);
           }
           tmp = strtok(params,idx);
     }
      return 1;
}
ps: this is just a rough example
Zcmd + sscanf(2) is best no matter how many params you have.

And never, ever, ever, ever, ever! use strtok together with zcmd.
That's like putting a Lada engine in a Ferrari, just ridiculous.


Re: Help Converting Dialog To CMD - Rachael - 29.09.2010

how would you script the command I used as an example with sscanf?


Re: Help Converting Dialog To CMD - LarzI - 29.09.2010

pawn Код:
CMD:gethere(playerid,params[])
{
    new
        Float:x,
        Float:y,
        Float:z,
        iPlayer;

    if(sscanf(params, "u", iPlayer))
        return SendClientMessage(playerid, 0xFF0000FF, "USAGE: /gethere [playerid/part of name]");
    GetPlayerPos(playerid,x,y,z);
    SetPlayerPos(targetid,x,y+1,z);
    return 1;
}



Re: Help Converting Dialog To CMD - samgreen - 29.09.2010

Quote:
Originally Posted by LarzI
Посмотреть сообщение
I never said strcmp is better, learn to read.
I'm just saying that even if dcmd and zcmd is better, faster and more efficient, you shouldn't "force him" to use it. It still is optional, so by saying "use dcmd or zcmd" you're telling him that it won't work elseway.
What if he's not familiar with zcmd or dcmd? What if he don't know how to use it? What if he's not smart enough (most likely) to learn zcmd or dcmd?
I'm just saying.
I know how to read. Why are people so quick to flame? I'm not forcing him to use anything, I am suggesting the best usage for programming in pawn. If he doesn't know how to use it, he should learn. I posted an example to show him. If he's not smart enough to learn from it, it's not my problem. I'm not going to dumb down my suggestions.


Re: Help Converting Dialog To CMD - Rachael - 29.09.2010

you can read about / download the zcmd include here
https://sampforum.blast.hk/showthread.php?tid=91354

converting from dialogue is pretty simple then
pawn Код:
#include <zcmd>


CMD:register(playerid,params[])
{
    if(isnull(params)) return SendClientMessage(playerid,yellow,"Registration","ERROR: You did not enter a password.");
    new playerfile[128], pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pname, sizeof(pname));
    format(playerfile, sizeof(playerfile), "EAdmin/Users/%s.ini",pname);
    if(dini_Exists(playerfile)) return SendClientMessage(playerid, red, "You are already registered!");
    new playerip[20];
    GetPlayerIp(playerid, playerip, sizeof(playerip));
    dini_Create(playerfile);
    dini_IntSet(playerfile, "Password", udb_hash(inputtext));
    dini_Set(playerfile, "Ip", playerip);
    dini_IntSet(playerfile, "Level", 0);
    dini_IntSet(playerfile, "Cash", 0);
    dini_IntSet(playerfile, "Score", 0);
    logged[playerid] = 1;
    SendClientMessage(playerid, yellow, "You have registered your account! You have also been logged in.");
    return 1;
}
CMD:login(playerid,params[])
{
    if(isnull(params)) return SendClientMessage(playerid,yellow,"Login","ERROR: You did not enter a password.");
    new playerfile[100], pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pname, sizeof(pname));
    format(playerfile, sizeof(playerfile), "EAdmin/Users/%s.ini",pname);
     if(!dini_Exists(playerfile)) return SendClientMessage(playerid, red, "This account is not yet registered, please type /register.");
    new tmp[256];
    tmp = dini_Get(playerfile, "Password");
    if(udb_hash(inputtext) == strval(tmp))
    {
        new playerip[20];
        GetPlayerIp(playerid, playerip, sizeof(playerip));
        level[playerid] = dini_Int(playerfile, "Level");
        logged[playerid] = 1;
        dini_Set(playerfile, "Ip", playerip);
        GivePlayerMoney(playerid, dini_Int(playerfile, "Cash"));
        SetPlayerScore(playerid, dini_Int(playerfile, "Score"));
        logged[playerid] = 1;
        SendClientMessage(playerid, yellow, "You have logged in!");
    } else  {
        SendClientMessage(playerid,yellow,"Login","ERROR: Invalid Password");
        return 1;
    }
    return 1;
}



Re: Help Converting Dialog To CMD - Guest3598475934857938411 - 29.09.2010

i GOT IT WORKING THX TO U