[DUDA]Pasar de "dcmd" a "strcmp"
#1

OO:

Cуmo el titulo lo dice, me gustarнa pasar un comando de autos de formato "dcmd" a "strcmp"


Quote:

/miauto [MODELO/NOMBRE] [COLOR 1] [COLOR 2]

El comando fue posteado originalmente por Wheelmans

Acб el comando.


pawn Код:
//DCMD
#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

//----------------------------------------------------------------------------//
//ENUMS
new VehicleNames[212][] = {
    "Landstalker","Bravura","Buffalo","Linerunner","Pereniel","Sentinel","Dumper","Firetruck","Trashmaster","Stretch","Manana","Infernus",
    "Voodoo","Pony","Mule","Cheetah","Ambulance","Leviathan","Moonbeam","Esperanto","Taxi","Washington","Bobcat","Mr Whoopee","BF Injection",
    "Hunter","Premier","Enforcer","Securicar","Banshee","Predator","Bus","Rhino","Barracks","Hotknife","Trailer","Previon","Coach","Cabbie",
    "Stallion","Rumpo","RC Bandit","Romero","Packer","Monster","Admiral","Squalo","Seasparrow","Pizzaboy","Tram","Trailer","Turismo","Speeder",
    "Reefer","Tropic","Flatbed","Yankee","Caddy","Solair","Berkley's RC Van","Skimmer","PCJ-600","Faggio","Freeway","RC Baron","RC Raider",
    "Glendale","Oceanic","Sanchez","Sparrow","Patriot","Quad","Coastguard","Dinghy","Hermes","Sabre","Rustler","ZR3 50","Walton","Regina",
    "Comet","BMX","Burrito","Camper","Marquis","Baggage","Dozer","Maverick","News Chopper","Rancher","FBI Rancher","Virgo","Greenwood",
    "Jetmax","Hotring","Sandking","Blista Compact","Police Maverick","Boxville","Benson","Mesa","RC Goblin","Hotring Racer A","Hotring Racer B",
    "Bloodring Banger","Rancher","Super GT","Elegant","Journey","Bike","Mountain Bike","Beagle","Cropdust","Stunt","Tanker","RoadTrain",
    "Nebula","Majestic","Buccaneer","Shamal","Hydra","FCR-900","NRG-500","HPV1000","Cement Truck","Tow Truck","Fortune","Cadrona","FBI Truck",
    "Willard","Forklift","Tractor","Combine","Feltzer","Remington","Slamvan","Blade","Freight","Streak","Vortex","Vincent","Bullet","Clover",
    "Sadler","Firetruck","Hustler","Intruder","Primo","Cargobob","Tampa","Sunrise","Merit","Utility","Nevada","Yosemite","Windsor","Monster A",
    "Monster B","Uranus","Jester","Sultan","Stratum","Elegy","Raindance","RC Tiger","Flash","Tahoma","Savanna","Bandito","Freight","Trailer",
    "Kart","Mower","Duneride","Sweeper","Broadway","Tornado","AT-400","DFT-30","Huntley","Stafford","BF-400","Newsvan","Tug","Trailer A","Emperor",
    "Wayfarer","Euros","Hotdog","Club","Trailer B","Trailer C","Andromada","Dodo","RC Cam","Launch","Police Car (LSPD)","Police Car (SFPD)",
    "Police Car (LVPD)","Police Ranger","Picador","S.W.A.T. Van","Alpha","Phoenix","Glendale","Sadler","Luggage Trailer A","Luggage Trailer B",
    "Stair Trailer","Boxville","Farm Plow","Utility Trailer"
};


enum PlayerData
{
pColour,
pCar,

}
new PlayerInfo[MAX_PLAYERS][PlayerData];


//------------------------------------------------------------------------------
forward CarDeleter(vehicleid);
public CarDeleter(vehicleid)
{
    for(new i=0;i<MAX_PLAYERS;i++) {
        new Float:X,Float:Y,Float:Z;
        if(IsPlayerInVehicle(i, vehicleid)) {
            RemovePlayerFromVehicle(i);
            GetPlayerPos(i,X,Y,Z);
            SetPlayerPos(i,X,Y+3,Z);
        }
        SetVehicleParamsForPlayer(vehicleid,i,0,1);
    }
    SetTimerEx("VehRes",1500,0,"i",vehicleid);
}

forward VehRes(vehicleid);
public VehRes(vehicleid)
{
   
}

public OnVehicleSpawn(vehicleid){

    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(vehicleid==PlayerInfo[i][pCar])
    {
   
    PlayerInfo[i][pCar]=-1;
    }
    }
    return 1;
    }
    public OnPlayerDisconnect(playerid, reason)
    {
    if(PlayerInfo[playerid][pCar] != -1) CarDeleter(PlayerInfo[playerid][pCar]);
   

    //--------------------------------------------------------------------------
    return 1;
}


stock IsNumeric(string[])
{
    for (new i = 0, j = strlen(string); i < j; i++)
    {
        if (string[i] > '9' || string[i] < '0') return 0;
    }
    return 1;
}
GetVehicleModelIDFromName(vname[])
{
    for(new i = 0; i < 211; i++)
    {
        if ( strfind(VehicleNames[i], vname, true) != -1 )
            return i + 400;
    }
    return -1;
}

//------------------------------------------------------------------------------
// DCMD COMMANDS
//------------------------------------------------------------------------------


       dcmd_miauto(playerid,params[]) {
        new tmp[256], tmp2[256], tmp3[256], Index; tmp = strtok(params,Index), tmp2 = strtok(params,Index); tmp3 = strtok(params,Index);
        if(!strlen(tmp)) return SendClientMessage(playerid, ROJO, "Uso: /miauto [Modeloid/Nombre] [color 1] [color 2]");
        new car, colour1, colour2, string[128];
        if(!IsNumeric(tmp)) car = GetVehicleModelIDFromName(tmp); else car = strval(tmp);
        if(car < 400 || car > 611) return  SendClientMessage(playerid, ROJO, "ERROR: Modelo de Vehiculo Invalido.");
        if(!strlen(tmp2)) colour1 = random(126); else colour1 = strval(tmp2);
        if(!strlen(tmp3)) colour2 = random(126); else colour2 = strval(tmp3);
        if(PlayerInfo[playerid][pCar] != -1 && !IsPlayerAdmin(playerid) ) CarDeleter(PlayerInfo[playerid][pCar]);
        new LVehicleID,Float:X,Float:Y,Float:Z, Float:Angle,int1;   GetPlayerPos(playerid, X,Y,Z);  GetPlayerFacingAngle(playerid,Angle);   int1 = GetPlayerInterior(playerid);
        LVehicleID = CreateVehicle(car, X+3,Y,Z, Angle, colour1, colour2, -1); LinkVehicleToInterior(LVehicleID,int1);
        PlayerInfo[playerid][pCar] = LVehicleID;
        format(string, sizeof(string), "Has Creado un  \"%s\" (Modelo:%d) color (%d, %d)", VehicleNames[car-400], car, colour1, colour2);
        return SendClientMessage(playerid,lightblue, string);
        }
//------------------------------------------------------------------------------

public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(miauto,6,cmdtext);
return 0;
}
//============================================================================//
strtok(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;
}
No soy bueno con Dcmd, y no lo entiendo xD Jaja, es posible pasar de "dcmd" a "strcmp"?

Quote:
Nunca me ah gustado dcmd, aparte de no entenderlo xD Me faltan un poco de ganas para ver que diferencia hay entre ambos, pero aъn asн me voy por "strcmp" , cada quien sus formas/gustos DD
Reply
#2

dcmd es mas rapido qe strcmp.

pawn Код:
//----------------------------------------------------------------------------//
//ENUMS
new VehicleNames[212][] = {
    "Landstalker","Bravura","Buffalo","Linerunner","Pereniel","Sentinel","Dumper","Firetruck","Trashmaster","Stretch","Manana","Infernus",
    "Voodoo","Pony","Mule","Cheetah","Ambulance","Leviathan","Moonbeam","Esperanto","Taxi","Washington","Bobcat","Mr Whoopee","BF Injection",
    "Hunter","Premier","Enforcer","Securicar","Banshee","Predator","Bus","Rhino","Barracks","Hotknife","Trailer","Previon","Coach","Cabbie",
    "Stallion","Rumpo","RC Bandit","Romero","Packer","Monster","Admiral","Squalo","Seasparrow","Pizzaboy","Tram","Trailer","Turismo","Speeder",
    "Reefer","Tropic","Flatbed","Yankee","Caddy","Solair","Berkley's RC Van","Skimmer","PCJ-600","Faggio","Freeway","RC Baron","RC Raider",
    "Glendale","Oceanic","Sanchez","Sparrow","Patriot","Quad","Coastguard","Dinghy","Hermes","Sabre","Rustler","ZR3 50","Walton","Regina",
    "Comet","BMX","Burrito","Camper","Marquis","Baggage","Dozer","Maverick","News Chopper","Rancher","FBI Rancher","Virgo","Greenwood",
    "Jetmax","Hotring","Sandking","Blista Compact","Police Maverick","Boxville","Benson","Mesa","RC Goblin","Hotring Racer A","Hotring Racer B",
    "Bloodring Banger","Rancher","Super GT","Elegant","Journey","Bike","Mountain Bike","Beagle","Cropdust","Stunt","Tanker","RoadTrain",
    "Nebula","Majestic","Buccaneer","Shamal","Hydra","FCR-900","NRG-500","HPV1000","Cement Truck","Tow Truck","Fortune","Cadrona","FBI Truck",
    "Willard","Forklift","Tractor","Combine","Feltzer","Remington","Slamvan","Blade","Freight","Streak","Vortex","Vincent","Bullet","Clover",
    "Sadler","Firetruck","Hustler","Intruder","Primo","Cargobob","Tampa","Sunrise","Merit","Utility","Nevada","Yosemite","Windsor","Monster A",
    "Monster B","Uranus","Jester","Sultan","Stratum","Elegy","Raindance","RC Tiger","Flash","Tahoma","Savanna","Bandito","Freight","Trailer",
    "Kart","Mower","Duneride","Sweeper","Broadway","Tornado","AT-400","DFT-30","Huntley","Stafford","BF-400","Newsvan","Tug","Trailer A","Emperor",
    "Wayfarer","Euros","Hotdog","Club","Trailer B","Trailer C","Andromada","Dodo","RC Cam","Launch","Police Car (LSPD)","Police Car (SFPD)",
    "Police Car (LVPD)","Police Ranger","Picador","S.W.A.T. Van","Alpha","Phoenix","Glendale","Sadler","Luggage Trailer A","Luggage Trailer B",
    "Stair Trailer","Boxville","Farm Plow","Utility Trailer"
};


enum PlayerData
{
pColour,
pCar,

}
new PlayerInfo[MAX_PLAYERS][PlayerData];


//------------------------------------------------------------------------------
forward CarDeleter(vehicleid);
public CarDeleter(vehicleid)
{
    for(new i=0;i<MAX_PLAYERS;i++) {
        new Float:X,Float:Y,Float:Z;
        if(IsPlayerInVehicle(i, vehicleid)) {
            RemovePlayerFromVehicle(i);
            GetPlayerPos(i,X,Y,Z);
            SetPlayerPos(i,X,Y+3,Z);
        }
        SetVehicleParamsForPlayer(vehicleid,i,0,1);
    }
    SetTimerEx("VehRes",1500,0,"i",vehicleid);
}

forward VehRes(vehicleid);
public VehRes(vehicleid)
{
   
}

public OnVehicleSpawn(vehicleid){

    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(vehicleid==PlayerInfo[i][pCar])
    {
   
    PlayerInfo[i][pCar]=-1;
    }
    }
    return 1;
    }
    public OnPlayerDisconnect(playerid, reason)
    {
    if(PlayerInfo[playerid][pCar] != -1) CarDeleter(PlayerInfo[playerid][pCar]);
   

    //--------------------------------------------------------------------------
    return 1;
}


stock IsNumeric(string[])
{
    for (new i = 0, j = strlen(string); i < j; i++)
    {
        if (string[i] > '9' || string[i] < '0') return 0;
    }
    return 1;
}
GetVehicleModelIDFromName(vname[])
{
    for(new i = 0; i < 211; i++)
    {
        if ( strfind(VehicleNames[i], vname, true) != -1 )
            return i + 400;
    }
    return -1;
}

//------------------------------------------------------------------------------

public OnPlayerCommandText(playerid, cmdtext[])
{

      if(strcmp("/miauto", cmdtext, true, 10) == 0)
{
        new tmp[256], tmp2[256], tmp3[256], Index; tmp = strtok(params,Index), tmp2 = strtok(params,Index); tmp3 = strtok(params,Index);
        if(!strlen(tmp)) return SendClientMessage(playerid, ROJO, "Uso: /miauto [Modeloid/Nombre] [color 1] [color 2]");
        new car, colour1, colour2, string[128];
        if(!IsNumeric(tmp)) car = GetVehicleModelIDFromName(tmp); else car = strval(tmp);
        if(car < 400 || car > 611) return  SendClientMessage(playerid, ROJO, "ERROR: Modelo de Vehiculo Invalido.");
        if(!strlen(tmp2)) colour1 = random(126); else colour1 = strval(tmp2);
        if(!strlen(tmp3)) colour2 = random(126); else colour2 = strval(tmp3);
        if(PlayerInfo[playerid][pCar] != -1 && !IsPlayerAdmin(playerid) ) CarDeleter(PlayerInfo[playerid][pCar]);
        new LVehicleID,Float:X,Float:Y,Float:Z, Float:Angle,int1;   GetPlayerPos(playerid, X,Y,Z);  GetPlayerFacingAngle(playerid,Angle);   int1 = GetPlayerInterior(playerid);
        LVehicleID = CreateVehicle(car, X+3,Y,Z, Angle, colour1, colour2, -1); LinkVehicleToInterior(LVehicleID,int1);
        PlayerInfo[playerid][pCar] = LVehicleID;
        format(string, sizeof(string), "Has Creado un  \"%s\" (Modelo:%d) color (%d, %d)", VehicleNames[car-400], car, colour1, colour2);
        return SendClientMessage(playerid,lightblue, string);
        }
return 1;
}
//============================================================================//
strtok(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;
}
Ahi funciona, en teoria.
Reply
#3

Lo probarй n____________n

Ahora una duda

Habнa intentado quitar el "Hunter, seasparrow, eh Hydra" Pero al quitarlo cambia todo, ej

Quote:

/miauto infernus 6 0

Y aparece otro vehiculo que no es o_O

Lo ъnico que quiero dar a hacer aquн es que esos vehнculos esten prohibidos D:
Reply
#4

pawn Код:
public OnPlayerStateChange(playerid, oldstate, newstate)
{
if(oldstate == PLAYER_STATE_ONFOOT || oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_DRIVER)
{
new vehiculo = GetVehicleModel(GetPlayerVehicleID(playerid));
if(vehiculo == IDHUNTER || vehiculo == IDHYDRA)
{
DestroyVehicle(vehiculo);
SendClientMessage(playerid, COLOR_RED, "Ese vehiculo esta prohibido!");
}
}
return 1;
}
Pruebalo y dime.
Reply
#5

Quote:
Originally Posted by leaNN!
Посмотреть сообщение
dcmd es mas rapido qe strcmp.

pawn Код:
//----------------------------------------------------------------------------//
//ENUMS
new VehicleNames[212][] = {
    "Landstalker","Bravura","Buffalo","Linerunner","Pereniel","Sentinel","Dumper","Firetruck","Trashmaster","Stretch","Manana","Infernus",
    "Voodoo","Pony","Mule","Cheetah","Ambulance","Leviathan","Moonbeam","Esperanto","Taxi","Washington","Bobcat","Mr Whoopee","BF Injection",
    "Hunter","Premier","Enforcer","Securicar","Banshee","Predator","Bus","Rhino","Barracks","Hotknife","Trailer","Previon","Coach","Cabbie",
    "Stallion","Rumpo","RC Bandit","Romero","Packer","Monster","Admiral","Squalo","Seasparrow","Pizzaboy","Tram","Trailer","Turismo","Speeder",
    "Reefer","Tropic","Flatbed","Yankee","Caddy","Solair","Berkley's RC Van","Skimmer","PCJ-600","Faggio","Freeway","RC Baron","RC Raider",
    "Glendale","Oceanic","Sanchez","Sparrow","Patriot","Quad","Coastguard","Dinghy","Hermes","Sabre","Rustler","ZR3 50","Walton","Regina",
    "Comet","BMX","Burrito","Camper","Marquis","Baggage","Dozer","Maverick","News Chopper","Rancher","FBI Rancher","Virgo","Greenwood",
    "Jetmax","Hotring","Sandking","Blista Compact","Police Maverick","Boxville","Benson","Mesa","RC Goblin","Hotring Racer A","Hotring Racer B",
    "Bloodring Banger","Rancher","Super GT","Elegant","Journey","Bike","Mountain Bike","Beagle","Cropdust","Stunt","Tanker","RoadTrain",
    "Nebula","Majestic","Buccaneer","Shamal","Hydra","FCR-900","NRG-500","HPV1000","Cement Truck","Tow Truck","Fortune","Cadrona","FBI Truck",
    "Willard","Forklift","Tractor","Combine","Feltzer","Remington","Slamvan","Blade","Freight","Streak","Vortex","Vincent","Bullet","Clover",
    "Sadler","Firetruck","Hustler","Intruder","Primo","Cargobob","Tampa","Sunrise","Merit","Utility","Nevada","Yosemite","Windsor","Monster A",
    "Monster B","Uranus","Jester","Sultan","Stratum","Elegy","Raindance","RC Tiger","Flash","Tahoma","Savanna","Bandito","Freight","Trailer",
    "Kart","Mower","Duneride","Sweeper","Broadway","Tornado","AT-400","DFT-30","Huntley","Stafford","BF-400","Newsvan","Tug","Trailer A","Emperor",
    "Wayfarer","Euros","Hotdog","Club","Trailer B","Trailer C","Andromada","Dodo","RC Cam","Launch","Police Car (LSPD)","Police Car (SFPD)",
    "Police Car (LVPD)","Police Ranger","Picador","S.W.A.T. Van","Alpha","Phoenix","Glendale","Sadler","Luggage Trailer A","Luggage Trailer B",
    "Stair Trailer","Boxville","Farm Plow","Utility Trailer"
};


enum PlayerData
{
pColour,
pCar,

}
new PlayerInfo[MAX_PLAYERS][PlayerData];


//------------------------------------------------------------------------------
forward CarDeleter(vehicleid);
public CarDeleter(vehicleid)
{
    for(new i=0;i<MAX_PLAYERS;i++) {
        new Float:X,Float:Y,Float:Z;
        if(IsPlayerInVehicle(i, vehicleid)) {
            RemovePlayerFromVehicle(i);
            GetPlayerPos(i,X,Y,Z);
            SetPlayerPos(i,X,Y+3,Z);
        }
        SetVehicleParamsForPlayer(vehicleid,i,0,1);
    }
    SetTimerEx("VehRes",1500,0,"i",vehicleid);
}

forward VehRes(vehicleid);
public VehRes(vehicleid)
{
   
}

public OnVehicleSpawn(vehicleid){

    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(vehicleid==PlayerInfo[i][pCar])
    {
   
    PlayerInfo[i][pCar]=-1;
    }
    }
    return 1;
    }
    public OnPlayerDisconnect(playerid, reason)
    {
    if(PlayerInfo[playerid][pCar] != -1) CarDeleter(PlayerInfo[playerid][pCar]);
   

    //--------------------------------------------------------------------------
    return 1;
}


stock IsNumeric(string[])
{
    for (new i = 0, j = strlen(string); i < j; i++)
    {
        if (string[i] > '9' || string[i] < '0') return 0;
    }
    return 1;
}
GetVehicleModelIDFromName(vname[])
{
    for(new i = 0; i < 211; i++)
    {
        if ( strfind(VehicleNames[i], vname, true) != -1 )
            return i + 400;
    }
    return -1;
}

//------------------------------------------------------------------------------

public OnPlayerCommandText(playerid, cmdtext[])
{

      if(strcmp("/miauto", cmdtext, true, 10) == 0)
{
        new tmp[256], tmp2[256], tmp3[256], Index; tmp = strtok(params,Index), tmp2 = strtok(params,Index); tmp3 = strtok(params,Index);
        if(!strlen(tmp)) return SendClientMessage(playerid, ROJO, "Uso: /miauto [Modeloid/Nombre] [color 1] [color 2]");
        new car, colour1, colour2, string[128];
        if(!IsNumeric(tmp)) car = GetVehicleModelIDFromName(tmp); else car = strval(tmp);
        if(car < 400 || car > 611) return  SendClientMessage(playerid, ROJO, "ERROR: Modelo de Vehiculo Invalido.");
        if(!strlen(tmp2)) colour1 = random(126); else colour1 = strval(tmp2);
        if(!strlen(tmp3)) colour2 = random(126); else colour2 = strval(tmp3);
        if(PlayerInfo[playerid][pCar] != -1 && !IsPlayerAdmin(playerid) ) CarDeleter(PlayerInfo[playerid][pCar]);
        new LVehicleID,Float:X,Float:Y,Float:Z, Float:Angle,int1;   GetPlayerPos(playerid, X,Y,Z);  GetPlayerFacingAngle(playerid,Angle);   int1 = GetPlayerInterior(playerid);
        LVehicleID = CreateVehicle(car, X+3,Y,Z, Angle, colour1, colour2, -1); LinkVehicleToInterior(LVehicleID,int1);
        PlayerInfo[playerid][pCar] = LVehicleID;
        format(string, sizeof(string), "Has Creado un  \"%s\" (Modelo:%d) color (%d, %d)", VehicleNames[car-400], car, colour1, colour2);
        return SendClientMessage(playerid,lightblue, string);
        }
return 1;
}
//============================================================================//
strtok(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;
}
Ahi funciona, en teoria.
Deberias informarte que dcmd tiene la misma velocidad que strcmp ya que dcmd se basa en este.
Reply
#6

Por que una forma tan violenta de decir las cosas?
Pude haberme equivocado, si.
Pero me basй en lo que he leido, y lo que he leido, es que dcmd es mas rapido que strcmp, por eso se lo dije.
Reply
#7

Quote:
Originally Posted by leaNN!
Посмотреть сообщение
Por que una forma tan violenta de decir las cosas?
Pude haberme equivocado, si.
Pero me basй en lo que he leido, y lo que he leido, es que dcmd es mas rapido que strcmp, por eso se lo dije.
Estoy hablando de la forma mбs educada posible, pero quizб en tus ojos tu veras violencia. No me he dirigido hacia ti en ninguna manera negativa, y solo estoy recordando un hecho, que dcmd y strcmp no tienen ninguna comparaciуn de velocidad.
Reply
#8

"Deberias informarte", eso me parece una forma agresiva de decir las cosas.
Reply
#9

Yo no creo que lo sea.
Reply
#10

Me da errores, y creo que es por los callbacks superiores al comando D:!

Si lo regreso a dcmd me compila perfecto xd mejor lo dejo asн

Gracias por intentar ayudar n_n'!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)