Portal SAMP
[Ajuda] converter zcmd - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] converter zcmd (/showthread.php?tid=889)



converter zcmd - Sam2018 - 11/03/2021

ajude-me a converter este comando para zmcd
adicionar sscanf ?
Código:
#include <a_samp>
#define DIALOG_DUEL 24245
new bool:InvitedDuel[MAX_PLAYERS];
new IdDuel[MAX_PLAYERS];
new bool:UsingArena;
new Counting = 5;
new CountDueling[5][5] ={"~r~1","~b~2","~p~3","~y~4","~g~5"};
forward ExecuteCount(playerid,pid);
public ExecuteCount(playerid,pid)
{
    if (Counting > 0)
    {
        GameTextForPlayer(playerid,CountDueling[Counting-1], 2500, 3);
        GameTextForPlayer(pid,CountDueling[Counting-1], 1000, 3);
        Counting--;
        SetTimerEx("GoDuel",1000,false,"ii",playerid,pid);
    }
    else
    {
        GameTextForPlayer(playerid,"~>~~g~Go~w~Go~r~Go~b~Go~<~", 2500, 3);
        GameTextForPlayer(pid,"~>~~g~Go~w~Go~r~Go~b~Go~<~", 2500, 3);
        Counting = 5;
        TogglePlayerControllable(playerid,true);
        TogglePlayerControllable(pid,true);
    }
    return 1;
}


public OnPlayerCommandText(playerid, cmdtext[])
{
    new cmd[128];
    new idx;
    new id;
    cmd = otherplayerids(cmdtext, idx);
    if(!strcmp("/duel", cmd, true))
    {
        new tmp[128];
        new string[128];
        tmp = otherplayerids(cmdtext, idx);
        id = strval(tmp);
        if(InvitedDuel[playerid] == true) return SendClientMessage(playerid,0xF41917AA,"»»[DUEL]«« : Have you invited someone, wait Expire Invitation");
        if(UsingArena == true) return SendClientMessage(playerid,0xF41917AA,"»»[DUEL]«« : At the time the Arena is Being Used");
        if(!strlen(tmp)) return SendClientMessage(playerid,0xF41917AA,"»»[DUEL]«« : You must enter the ID of the player following the Way (/duel [playerid])");
        if(id == playerid) return SendClientMessage(playerid,0xF41917AA,"»»[DUEL]«« : You can not invite the Self");
        if(InvitedDuel[id] == true) return SendClientMessage(playerid,0xF41917AA,"»»[DUEL]«« : Currently the player is in a Duel, wait..");
        new name[MAX_PLAYER_NAME];
        GetPlayerName(playerid, name, sizeof(name));
        format(string, sizeof(string), "»»[DUEL]«« : %s This inviting you to a \n Duel Runing (Press Accept to Accept Duel)",name);
        ShowPlayerDialog(id,DIALOG_DUEL,DIALOG_STYLE_MSGBOX,"»»[DUEL]«« :",string,"Accept", "No");
        GameTextForPlayer(id,"~r~DUE~w~LO !", 2500, 3);
        InvitedDuel[id] = true;
        IdDuel[id] = playerid;
        SetTimerEx("ExpireDuel",15000,false,"ii",id,playerid);
        return 1;
    }
    return 0;
}


forward GoDuel(playerid,pid);
public GoDuel(playerid,pid)
{
    //-> Go To  X1 <-//
    //SetPlayerPos
    //SetPlayerArmor
    //SetPlayerHealth

    //-> Functions for Count x1<-//
    TogglePlayerControllable(playerid,false);
    TogglePlayerControllable(pid,false);
    ExecuteCount(playerid,pid);
    return 1;
}


forward ExpireDuel(playerid,pid);
public ExpireDuel(playerid,pid)
{
    if(UsingArena == false)
    {
        SendClientMessage(pid,0x1DF6F6AA,"»»[DUEL]«« : Expired challenge, He Refused");
        SendClientMessage(playerid,0x1DF6F6AA,"»»[DUEL]«« : Expired challenge, you automatically refuse");
        InvitedDuel[pid] = false;
        InvitedDuel[playerid] = false;
        IdDuel[playerid] = playerid;
        IdDuel[pid] = pid;
    }
    return 1;
}


otherplayerids(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }
    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;
}


public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_DUEL)
    {
        if(!response) return ExpireDuel(playerid,IdDuel[playerid]);
        if(response)
        {
            UsingArena = true;
            new name[MAX_PLAYER_NAME], string[44];
            GetPlayerName(playerid, name, sizeof(name));
            format(string, sizeof(string), "»»[DUEL]«« : %s accepted the challenge, wait 8 seconds to go to Duel.",name);
            SendClientMessage(IdDuel[playerid],0xF6F600AA,string);
            SendClientMessage(playerid,0xF6F600AA,"»»[DUEL]«« : You accepted the Duel Wait 8 seconds to process your Data");
            SetTimerEx("GoDuel",8000,false,"ii",playerid,IdDuel[playerid]);
        }
        return 1;
    }
    return 1;
}


public OnPlayerDeath(playerid, killerid, reason)
{
    if(InvitedDuel[killerid] == true)
    {
        new Float:healthkiller;
        new namekiller[24],namedeather[24],string[44];
        GetPlayerName(killerid, namekiller, 24);
        GetPlayerName(playerid, namedeather, 24);
        GetPlayerHealth(killerid,healthkiller);
        format(string, sizeof(string), "»»[DUELO]«« : %s Wins Duel of %s how %0.0f off Armour and Health",namekiller,namedeather,healthkiller);
        SendClientMessageToAll(0xF600F6AA, string);
        InvitedDuel[killerid] = false;
        InvitedDuel[playerid] = false;
        IdDuel[playerid] = playerid;
        IdDuel[killerid] = killerid;
        UsingArena = false;
        healthkiller = 0;
        SpawnPlayer(killerid);
    }
    return 1;
}



RE: converter zcmd - xbruno1000x - 11/03/2021

Substitua isso
Código:
if(!strcmp("/duel", cmd, true))

Por isso
Código:
CMD:duel(playerid)


ZCMD também não usa OnPlayerCommandText.


RE: converter zcmd - Sam2018 - 11/03/2021

(11/03/2021 13:58)xbruno1000x Escreveu: Substitua isso
Código:
if(!strcmp("/duel", cmd, true))

Por isso
Código:
CMD:duel(playerid)


ZCMD também não usa OnPlayerCommandText.
é possível adicionar sscanf


RE: converter zcmd - k2bi_YT - 11/03/2021

Caso queira usar a include ZCMD, você deve defini-la primeiro no topo do seu gamemode
Código PHP:
#define <ZCMD>
#define <sscanf> 

Logo após não será necessário usar o callback OnPlayerCOmmandText; Você pode definir um comando direto usando:
Código PHP:
CMD:meucomando (playeridparams[]) 

Fazendo um comando como exemplo, você pode pegar da mesma base e alterar o comando que você quer estar fazendo, isso é valido quando for usar o sscanf

Código PHP:
CMD:teleportar(playeridparams[])
{
    new 
mundointeriorFloat:xFloat:yFloat:z;
    if(
sscanf(params"fffdd"x,y,z,interiormundo)) return SendClientMessage(playerid, -1"Use: /teleportar [PosX] [PosY] [PosZ] [Interior] [Mundo] "); //f = Valor Float | d = Valor Inteiro
    
SetPlayerVirtualWorld(playeridmundo);
    
SetPlayerInterior(playeridinterior);
    
SetPlayerPos(playeridx,y,z);
    return 
1;