[Tutorial]Como indexar [idx]
#1

Hola a todos, primero que nada un saludo hoy les traigo un tutorial. Y bueno vamos al grano

Algunas veces a ustedes al compilar les sale:

Quote:

X:\Rockstar Games\GTA San Andreas\XXXXXXXX\gamemodes\XXXXX.pwn(XXXX) : error 033: array must be indexed (variable "gMessage")

ese es el ejemplo del comando PM.

Para indexar aremos lo siguiente:

1) Para indexar hay que utilizar strtok

Si es para dcmd quedaria asi:

Ejemplo:

pawn Код:
new tmp[256], Index;
tmp = strtok(params, Index);
en strcmp quedaria asi:

Ejemplo:

Код:
new tmp[256], idx;
tmp = strtok(cmdtext, idx);
Un ejemplo del comando pm (que a mi me salia ese error)
Bueno este es el comando de PM:

pawn Код:
new cmd[256];
    new tmp[256];
    new Message[256];
    new gMessage[256];
    new pName[MAX_PLAYER_NAME+1];
    new iName[MAX_PLAYER_NAME+1];
    new idx;
   
    cmd = strtok(cmdtext, idx);

    // PM Command
    if(strcmp("/pm", cmd, true) == 0)
    {
        tmp = strtok(cmdtext,idx);
       
        if(!strlen(tmp) || strlen(tmp) > 5) {
            SendClientMessage(playerid,ADMINFS_MESSAGE_COLOR,"Uso: /pm [ID] [Mensaje]");
            return 1;
        }
       
        new id = strval(tmp);
    gMessage = strrest(cmdtext,idx);
   
        if(!strlen(gMessage)) {
            SendClientMessage(playerid,ADMINFS_MESSAGE_COLOR,"Uso: /pm [ID] [Mensaje]");
            return 1;
        }
       
        if(!IsPlayerConnected(id)) {
            SendClientMessage(playerid,ADMINFS_MESSAGE_COLOR,"/pm : Mal jugador ID");
            return 1;
        }
       
        if(playerid != id) {
            GetPlayerName(id,iName,sizeof(iName));
            GetPlayerName(playerid,pName,sizeof(pName));
            format(Message,sizeof(Message),">> %s(%d): %s",iName,id,gMessage);
            SendClientMessage(playerid,PM_OUTGOING_COLOR,Message);
            format(Message,sizeof(Message),"** %s(%d): %s",pName,playerid,gMessage);
            SendClientMessage(id,PM_INCOMING_COLOR,Message);
            PlayerPlaySound(id,1085,0.0,0.0,0.0);
           
            printf("PM: %s",Message);
           
        }
        else {
            SendClientMessage(playerid,ADMINFS_MESSAGE_COLOR,"No puede Enviarse Pm a Usted Mismo");
        }
        return 1;
    }
Entonces como sale este error:

Quote:

X:\Rockstar Games\GTA San Andreas\XXXXXXXX\gamemodes\XXXXX.pwn(XXXX) : error 033: array must be indexed (variable "gMessage")

Aqui cambiaremos lo siguiente:

pawn Код:
new cmd[256];
    new tmp[256];
    new Message[256];
    new gMessage[256], idx; // Aqui le agregamos la idx
    new pName[MAX_PLAYER_NAME+1];
    new iName[MAX_PLAYER_NAME+1];
    new idx;
   
    cmd = strtok(cmdtext, idx);

    // PM Command
    if(strcmp("/pm", cmd, true) == 0)
    {
        tmp = strtok(cmdtext,idx);
       
        if(!strlen(tmp) || strlen(tmp) > 5) {
            SendClientMessage(playerid,ADMINFS_MESSAGE_COLOR,"Uso: /pm [ID] [Mensaje]");
            return 1;
        }
       
        new id = strval(tmp);
    gMessage = strrest(cmdtext,idx); // el strrest por strtok
   
        if(!strlen(gMessage)) {
            SendClientMessage(playerid,ADMINFS_MESSAGE_COLOR,"Uso: /pm [ID] [Mensaje]");
            return 1;
        }
       
        if(!IsPlayerConnected(id)) {
            SendClientMessage(playerid,ADMINFS_MESSAGE_COLOR,"/pm : Mal jugador ID");
            return 1;
        }
       
        if(playerid != id) {
            GetPlayerName(id,iName,sizeof(iName));
            GetPlayerName(playerid,pName,sizeof(pName));
            format(Message,sizeof(Message),">> %s(%d): %s",iName,id,gMessage);
            SendClientMessage(playerid,PM_OUTGOING_COLOR,Message);
            format(Message,sizeof(Message),"** %s(%d): %s",pName,playerid,gMessage);
            SendClientMessage(id,PM_INCOMING_COLOR,Message);
            PlayerPlaySound(id,1085,0.0,0.0,0.0);
           
            printf("PM: %s",Message);
           
        }
        else {
            SendClientMessage(playerid,ADMINFS_MESSAGE_COLOR,"No puede Enviarse Pm a Usted Mismo");
        }
        return 1;
    }
Bueno eso fue todo. Si no entendieron me mandan un pm o por msn y se los explico mejor

PD: Gracias a The_Chaoz que me explico.


Saludos
Reply
#2

Exactamente para que sirven las idx?
Reply
#3

Son justamente para indexar
Reply
#4

Quote:
Originally Posted by AdonisxD
Son justamente para indexar
qe es indexar? xD yosolo las uso pero no se qe es jaja
Reply
#5

Disculpame, pero eso solo ocurre en comandos, por que lo explicaste solamente en comandos, y si no lo tengo en un comando ejemplo:


pawn Код:
#include <a_samp>

new Shop[128];
#define ShopDialogID 8172

public OnFilterScriptInit()
{
    print("\n--------------------------------------");
    print("      Probandoo        ");
    print("--------------------------------------\n");
    Shop = CreatePickup(1212, 0, 0.0, 0.0, 4.0);
    Create3DTextLabel("Minimercado",0x008080FF,0.0, 0.0, 4.0,40.0,-1,0);
    return 1;
}


public OnPlayerPickUpPickup(playerid, pickupid)
{
  if(pickupid == Shop)
  {
  ShowPlayerDialog(playerid, ShopDialogID, DIALOG_STYLE_LIST, "Bievenido al Shop", "Cigarrillos [$50]\nPrueba\nPrueba 2", "Comprar", "Cancelar");
  }
  return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
   if(response)
    {
    switch(dialogid)
    {
    case ShopDialogID:
    {
    switch(listitem)
    {
    case 0:
    {
    SendClientMessageToAll(0xFF00FFFF, "Probandooooooooooooooo");
    }
    }
    }
    }
    }
    return 1;
}
Ahi tira error en la variable Shop :/ por quй ? (Igualmente se soluciona quitando las celdas, pero queria saber por que)
Reply
#6

Quote:
Originally Posted by [Nikk]
Посмотреть сообщение
Disculpame, pero eso solo ocurre en comandos, por que lo explicaste solamente en comandos, y si no lo tengo en un comando ejemplo:


pawn Код:
#include <a_samp>

new Shop[128];
#define ShopDialogID 8172

public OnFilterScriptInit()
{
    print("\n--------------------------------------");
    print("      Probandoo        ");
    print("--------------------------------------\n");
    Shop = CreatePickup(1212, 0, 0.0, 0.0, 4.0);
    Create3DTextLabel("Minimercado",0x008080FF,0.0, 0.0, 4.0,40.0,-1,0);
    return 1;
}


public OnPlayerPickUpPickup(playerid, pickupid)
{
  if(pickupid == Shop)
  {
  ShowPlayerDialog(playerid, ShopDialogID, DIALOG_STYLE_LIST, "Bievenido al Shop", "Cigarrillos [$50]\nPrueba\nPrueba 2", "Comprar", "Cancelar");
  }
  return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
   if(response)
    {
    switch(dialogid)
    {
    case ShopDialogID:
    {
    switch(listitem)
    {
    case 0:
    {
    SendClientMessageToAll(0xFF00FFFF, "Probandooooooooooooooo");
    }
    }
    }
    }
    }
    return 1;
}
Ahi tira error en la variable Shop :/ por quй ? (Igualmente se soluciona quitando las celdas, pero queria saber por que)
Te tira errores porque intentas dos cosas totalmente erroneas:
1є Asignar un valor de tipo integer en un array.
2є Comparar un array utilizando == (ademas de compararlo con una variable)
Reply
#7

Ah xD,pero mi pregunta seria... Esto solo es en comanados ?
Reply
#8

Quote:
Originally Posted by [Nikk]
Посмотреть сообщение
Ah xD,pero mi pregunta seria... Esto solo es en comanados ?
Es como cualquier codigo, sirve donde lo necesites, el uso mas comun es en comandos, aun que es mucho mejor usar sscanf.
Reply
#9

Eso es mas que obvio, yo siempre use sscanf, por eso vengo a preguntar eso. Gracias por la respuesta
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)