Comandos que no funcionan.
#1

Buenas, scripteй un sistema de plantaciуn de marihuana, el problema es que el comando /pmarihuana y /cavar me dice al usarlo "Usted ha introducido comando inexistente, escriba /ayuda.", quй es el texto que puse para la callback OnPlayerCommandPerformed.

Aviso, no es un error de callback, ya que todos los otros comandos del GM funcionan, dejarй los forwards;
pawn Код:
forward PlantaObjetoDroga(playerid);
forward Crecer(playerid);
forward Descosechar(playerid);
forward CrearAgujero(playerid);
forward PonerPlantaDroga(playerid);
forward ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5);
Йstos son los defines;
pawn Код:
#define COLOR_PURPLE 0xC2A2DAAA
#define COLOR_GRAD2 0xBFC0C2FF
#define COLOR_BLANCO 0xFFFFFFAA
Йstos son los enums;
pawn Код:
enum PlantaObjetoInfo {
    Planta,
    Float:PosX,
    Float:PosY,
    Float:PosZ,
    Text3D:Progreso,
    Tamanio
};
new PlantaObjeto[MAX_PLAYERS][PlantaObjetoInfo];

enum DatosAgujero {
    Float:AgujeroX,
    Float:AgujeroY,
    Float:AgujeroZ
};
new Agujero[MAX_COSECHOS][DatosAgujero];

enum jInfo
{
    pMarihuana,
    jSemillaMarihuana
};
new JugadorInfo[MAX_PLAYERS][jInfo];
Йstos son los comandos;
pawn Код:
zcmd(pmarihuana, playerid, params[])
    {
        new string[128];
        if(PlantaObjeto[playerid][Planta] != 0) return SendClientMessage(playerid, COLOR_GRAD2, "No puede plantar mбs plantas.");
        if(JugadorInfo[playerid][jSemillaMarihuana] <= 0) return SendClientMessage(playerid, COLOR_GRAD2, "Usted no tiene ninguna semilla de marihuana.");
        if(!IsPlayerInAgujero(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "Necesita cavar un agujero, con una pala.");
        if(IsPlayerInPlanta(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "En su actual posiciуn, ya hay una planta de marihuana plantada.");
        else
        {
            SendClientMessage(playerid, COLOR_BLANCO, "Ha plantado una planta de marihuana.");
            ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 4.0, 0, 0, 0, 0, 0);
            format(string, sizeof(string), "* %s se agacha y planta unas semillas de marihuana en la tierra.", PlayerName(playerid));
            ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
            PlantaObjetoDroga(playerid);
        }
        return 1;
    }
    zcmd(cavar, playerid, params[])
    {
        new string[128];
        if(GetPlayerWeapon(playerid) != 6) return SendClientMessage(playerid, COLOR_GRAD2, "Usted no tiene en su mano una pala, compre una en una ferreterнa.");
        if(IsPlayerInAgujero(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "En su actual posiciуn, ya hay un agujero cavado.");
        if(IsPlayerInPlanta(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "En su actual posiciуn, ya hay una planta de marihuana plantada.");
        else
        {
            CrearAgujero(playerid);
            format(string, sizeof(string), "* %s toma firmemente la pala, acto seguido apoya la misma en la tierra y comienza a cavar un agujero.", PlayerName(playerid));
            ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
            SendClientMessage(playerid, COLOR_BLANCO, "* Terminaste de cavar el agujero.");
        }
        return 1;
    }
    zcmd(rmarihuana, playerid, params[])
    {
        new string[128];
        if(!IsPlayerInPlanta(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "En su actual posiciуn no hay ninguna planta de marihuana.");
        if(PlantaObjeto[playerid][Tamanio] == 1)
        {
            Descosechar(playerid);
            ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 4.0, 0, 0, 0, 0, 0);
            format(string, sizeof(string), "* %s arranca la planta de marihuana con una tijera, y guarda las hojas en una bolsa.", PlayerName(playerid));
            ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
            return 1;
        }
        else
        {
            SendClientMessage(playerid, COLOR_GRAD2, "La planta aъn no creciу.");
            return 1;
        }

    }
Йstos son los callbacks (publics) y stocks;
pawn Код:
public PlantaObjetoDroga(playerid)
{
    ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 4.0, 0, 1, 1, 0,0);
    SetTimerEx("PonerPlantaDroga",1500,0,"d",playerid);
    return 1;
}

public PonerPlantaDroga(playerid)
{
    new mensaje[150];
    GetPlayerPos(playerid, PlantaObjeto[playerid][PosX], PlantaObjeto[playerid][PosY], PlantaObjeto[playerid][PosZ]);
    PlantaObjeto[playerid][Planta] = CreateDynamicObject(DROGA_OBJETO, PlantaObjeto[playerid][PosX], PlantaObjeto[playerid][PosY], PlantaObjeto[playerid][PosZ]-1.8, 0, 0, 0);
    format(mensaje, sizeof(mensaje), "[Plantaciуn: En proceso]");
    PlantaObjeto[playerid][Progreso] = CreateDynamic3DTextLabel(mensaje, COLOR_GREEN, PlantaObjeto[playerid][PosX], PlantaObjeto[playerid][PosY], PlantaObjeto[playerid][PosZ], 5, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, 0, 0);
    Agujero[playerid][AgujeroX] = 0;
    Agujero[playerid][AgujeroY] = 0;
    Agujero[playerid][AgujeroZ] = 0;
    JugadorInfo[playerid][jSemillaMarihuana]--;
    SetTimerEx("Crecer",900000,0,"d",playerid);
    return 1;
}

public Crecer(playerid)
{
    new mensaje[100];
    format(mensaje, sizeof(mensaje), "[Plantaciуn: Terminada]");
    UpdateDynamic3DTextLabelText(PlantaObjeto[playerid][Progreso], COLOR_GREEN, mensaje);
    PlantaObjeto[playerid][Tamanio] = 1;
    return 1;
}

public Descosechar(playerid)
{
    if(IsPlayerInRangeOfPoint(playerid, 2.0, PlantaObjeto[playerid][PosX], PlantaObjeto[playerid][PosY], PlantaObjeto[playerid][PosZ]))
    {
        DestroyDynamicObject(PlantaObjeto[playerid][Planta]);
        DestroyDynamic3DTextLabel(PlantaObjeto[playerid][Progreso]);
        PlantaObjeto[playerid][Planta] = 0;
        PlantaObjeto[playerid][PosX] = 0;
        PlantaObjeto[playerid][PosY] = 0;
        PlantaObjeto[playerid][PosZ] = 0;
        JugadorInfo[playerid][pMarihuana] += 20;
    }
}

public CrearAgujero(playerid)
{
    GetPlayerPos(playerid, Agujero[playerid][AgujeroX], Agujero[playerid][AgujeroY], Agujero[playerid][AgujeroZ]);
}

public ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5)
{
    if(IsPlayerConnected(playerid))
    {
        new Float:posx, Float:posy, Float:posz;
        new Float:oldposx, Float:oldposy, Float:oldposz;
        new Float:tempposx, Float:tempposy, Float:tempposz;
        GetPlayerPos(playerid, oldposx, oldposy, oldposz);
        //radi = 2.0; //Trigger Radius
        for(new i = 0; i < MAX_PLAYERS; i++)
        {
            if(IsPlayerConnected(i) && (GetPlayerVirtualWorld(playerid) == GetPlayerVirtualWorld(i)))
            {
                if(!Si[i])
                {
                    GetPlayerPos(i, posx, posy, posz);
                    tempposx = (oldposx -posx);
                    tempposy = (oldposy -posy);
                    tempposz = (oldposz -posz);
                    if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16)))
                    {
                        SendClientMessage(i, col1, string);
                    }
                    else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8)))
                    {
                        SendClientMessage(i, col2, string);
                    }
                    else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4)))
                    {
                        SendClientMessage(i, col3, string);
                    }
                    else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2)))
                    {
                        SendClientMessage(i, col4, string);
                    }
                    else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
                    {
                        SendClientMessage(i, col5, string);
                    }
                }
                else
                {
                    SendClientMessage(i, col1, string);
                }
            }
        }
    }
    return 1;
}

stock IsPlayerInPlanta(playerid)
{
    for(new i; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerInRangeOfPoint(playerid, 2.0, PlantaObjeto[i][PosX], PlantaObjeto[i][PosY], PlantaObjeto[i][PosZ])) return 1;
    }
    return 0;
}

stock IsPlayerInAgujero(playerid)
{
    for(new i; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerInRangeOfPoint(playerid, 2.0, Agujero[i][AgujeroX], Agujero[i][AgujeroY], Agujero[i][AgujeroZ]))return 1;
    }
    return 0;
}

stock PlayerName(playerid)
{
    new Nombre[24];
    GetPlayerName(playerid,Nombre,24);
    new N[24];
    strmid(N,Nombre,0,strlen(Nombre),24);
    for(new i = 0; i < MAX_PLAYER_NAME; i++)
    {
        if (N[i] == '_') N[i] = ' ';
    }
    return N;
}
Como pueden ver, uso zcmd y sscanf..

La variable pMarihuana es el porro de marihuana, y jSemillaMarihuana la semilla, la cual, se consigue en el mercado negro, aumenta la variable en +1, que no creo que haga falta postear todo eso, porque incluirнa postear el efecto de marihuana al usarla, cosa que no tiene nada que ver con la parte de plantaciуn.
Reply
#2

pawn Код:
zcmd(pmarihuana, playerid, params[])
    {
        new string[128];
        if(PlantaObjeto[playerid][Planta] == 0) return SendClientMessage(playerid, COLOR_GRAD2, "No puede plantar mбs plantas.");
        if(JugadorInfo[playerid][jSemillaMarihuana] <= 0) return SendClientMessage(playerid, COLOR_GRAD2, "Usted no tiene ninguna semilla de marihuana.");
        if(!IsPlayerInAgujero(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "Necesita cavar un agujero, con una pala.");
        if(IsPlayerInPlanta(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "En su actual posiciуn, ya hay una planta de marihuana plantada.");

        SendClientMessage(playerid, COLOR_BLANCO, "Ha plantado una planta de marihuana.");
        ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 4.0, 0, 0, 0, 0, 0);
        format(string, sizeof(string), "* %s se agacha y planta unas semillas de marihuana en la tierra.", PlayerName(playerid));
        ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
        PlantaObjetoDroga(playerid);
        return 1;
    }
    zcmd(cavar, playerid, params[])
    {
        new string[128];
        if(GetPlayerWeapon(playerid) == 6) return SendClientMessage(playerid, COLOR_GRAD2, "Usted no tiene en su mano una pala, compre una en una ferreterнa.");
        if(IsPlayerInAgujero(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "En su actual posiciуn, ya hay un agujero cavado.");
        if(IsPlayerInPlanta(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "En su actual posiciуn, ya hay una planta de marihuana plantada.");

        CrearAgujero(playerid);
        format(string, sizeof(string), "* %s toma firmemente la pala, acto seguido apoya la misma en la tierra y comienza a cavar un agujero.", PlayerName(playerid));
        ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
        SendClientMessage(playerid, COLOR_BLANCO, "* Terminaste de cavar el agujero.");
        return 1;
    }
    zcmd(rmarihuana, playerid, params[])
    {
        new string[128];
        if(!IsPlayerInPlanta(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "En su actual posiciуn no hay ninguna planta de marihuana.");
        if(PlantaObjeto[playerid][Tamanio] == 1)
        {
            Descosechar(playerid);
            ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 4.0, 0, 0, 0, 0, 0);
            format(string, sizeof(string), "* %s arranca la planta de marihuana con una tijera, y guarda las hojas en una bolsa.", PlayerName(playerid));
            ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
        }
        else
        {
            SendClientMessage(playerid, COLOR_GRAD2, "La planta aъn no creciу.");
            return 1;
        }
    }
Reply
#3

Otacon, sigue igual.. Lo ъnico que funcionan son los condicionales en caso que no se cumpla, manda el mensaje, pero en caso de tener todo en уrden, no se puede usar el comando, їme explico?

Si al usar /cavar no tengo pala, me aparece el mensaje que necesito pala, y si la tengo, no existe el comando, lo mismo con /pmarihuana que, si no tengo las semillas me aparece el mensaje de error que no las tengo, y si las tengo, el comando no existe.

Algo me da a pensar que el problema estб en alguna callback que hice.
Reply
#4

1- intenta colocando COMMAND:tuComando(playerid, params[]) en vez de zcmd(tuComando, playerid, params[])
2- en los if de IsPlayerInAgujero y IsPlayerInPlanta coloca un ! delante
Reply
#5

No funciona, sigue pasando lo mismo.
Reply
#6

Revivo.
Reply
#7

Revivo.
Reply
#8

nose, yo no veo ninguna anomadia nada mas lo ke ya te dije, pero tambien no entiendo ke kieres hacer con los stock IsPlayerInPlanta y IsPlayerInAgujero ? por ke creo ke te falta chekear la posicion del player :S
Reply
#9

Es para chequear si un jugador estб en una planta, porque se supone que no se tiene que plantar una planta sobre otra, y la de el agujero es para chequear que el agujero sea existente, de no estar el agujero (la funciуn del augjero se activa al usar /cavar) que no se pueda plantar.
Reply
#10

El orden tambiйn es algo crucial, yo en todos los enum veo un new debajo, intenta acomodarlos todos encima, y no tengo buena memoria pues tengo mucho sin scriptear pero yo a simple vista segъn mi criterio, repito no recuerdo bien, cambia el nombre de /pmarihuana a /plamarihuana y me dices que paso
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)