29.12.2012, 22:44
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;
Йstos son los defines;
Йstos son los enums;
Йstos son los comandos;
Йstos son los callbacks (publics) y stocks;
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.
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);
pawn Код:
#define COLOR_PURPLE 0xC2A2DAAA
#define COLOR_GRAD2 0xBFC0C2FF
#define COLOR_BLANCO 0xFFFFFFAA
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];
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;
}
}
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;
}
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.