ayuda pequeсo sistema de creacion de objetos IG.
#1

pawn Код:
CMD:createo(playerid, params[])
{
    new i;
    for(i=0; i < MAX_OBJECTS_PP; i++)
    {
        if(oData[playerid][objID][i] == -1) break;
        if(i == ( MAX_OBJECTS_PP -1 ) ) return SendClientMessage(playerid, red, "You can't create more objects..");
    }
    new objectid;
    if(sscanf(params, "i", objectid)) return SendClientMessage(playerid, -1, "USAGE: /createo [model id]");
    new Float:pos[4];
   
    oData[playerid][objID][i] = objectid;
    oData[playerid][slotobjID] = i;
   
    GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
    GetPlayerFacingAngle(playerid, pos[3]);
    pos[0] += (3 * floatsin(-pos[3], degrees));
    pos[1] += (3 * floatcos(-pos[3], degrees));
    CreateObject(objectid, pos[0], pos[1], pos[2], 0.0, 0.0, pos[3]);
    format(ssstring, SOS, "-OBJECT- MODELID: %d, SLOT ID: %d, X:%0.2f,Y:%0.2f,Z:%0.2f", objectid, oData[playerid][slotobjID], pos[0], pos[1], pos[2]);
    SendClientMessage(playerid, YELLOW, ssstring);
    return 1;
}

CMD:deleteo(playerid, params[])
{
    new slot;
    oData[playerid][slotobjID] = slot;
    if(sscanf(params, "i", slot)) return SendClientMessage(playerid, red, "USAGE: /deleteo [slot id]");
    DestroyObject(oData[playerid][objID][slot] );
    return 1;
}
Todo parece estar bien, les asigna el id y todo pero al momento de darle /deleteo [el slot] no lo borra el objeto, porque sera..?

aca el enum y la variable que se supone guarda el slot

pawn Код:
#define MAX_OBJECTS_PP      50

enum oInfo
{
    objID[MAX_OBJECTS_PP],
    slotobjID
}
new oData[MAX_PLAYERS][oInfo];
porfa :/
Reply
#2

pawn Код:
CMD:deleteo(playerid, params[])
{
    if(sscanf(params, "i", params[0])) return SendClientMessage(playerid, red, "USAGE: /deleteo [slot id]");
    oData[playerid][slotobjID] = params[0];
    DestroyObject(oData[playerid][objID][params[0]] );
    return 1;
}
Proba asн.
Reply
#3

Nop no funciona :/..
Reply
#4

pawn Код:
CMD:createo(playerid, params[])
{
    new i;
    for(i=0; i < MAX_OBJECTS_PP; i++)
    {
        if(oData[playerid][objID][i] == -1) break;
        if(i == ( MAX_OBJECTS_PP -1 ) ) return SendClientMessage(playerid, red, "You can't create more objects..");
    }
    new objectid;
    if(sscanf(params, "i", objectid)) return SendClientMessage(playerid, -1, "USAGE: /createo [model id]");
    new Float:pos[4];
   
    oData[playerid][objID][i] = objectid;
    oData[playerid][slotobjID] = i;
   
    GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
    GetPlayerFacingAngle(playerid, pos[3]);
    pos[0] += (3 * floatsin(-pos[3], degrees));
    pos[1] += (3 * floatcos(-pos[3], degrees));
    oObjectID[playerid][i] = CreateObject(objectid, pos[0], pos[1], pos[2], 0.0, 0.0, pos[3]);
    format(ssstring, SOS, "-OBJECT- MODELID: %d, SLOT ID: %d, X:%0.2f,Y:%0.2f,Z:%0.2f", objectid, oData[playerid][slotobjID], pos[0], pos[1], pos[2]);
    SendClientMessage(playerid, YELLOW, ssstring);
    return 1;
}

CMD:deleteo(playerid, params[])
{
    new slot;
    oData[playerid][slotobjID] = slot;
    if(sscanf(params, "i", slot)) return SendClientMessage(playerid, red, "USAGE: /deleteo [slot id]");
    DestroyObject(oObjectID[playerid][slot]);
    return 1;
pawn Код:
enum oInfo
{
    objID[MAX_OBJECTS_PP],
    slotobjID
}
new oData[MAX_PLAYERS][oInfo];
new oObjectID[MAX_PLAYERS][MAX_OBJECTS_PP];

Prueba Asн!
Reply
#5

Si funciono, muchas gracias ahora otra pregunta.. suponiendo que borro un slot y quiero que se ocupe el slot ese, como puedo hacer por ejemplo borro el slot numero 3 y creo otro objeto, al momento de crear el otro objeto le pone la id 3 y no la id 4, si me doy a entender?
Reply
#6

Si no me equivoco lo que tu quieres es que cuando creas un objeto (ID 1) y luego lo borras que el siguiente objeto se cree en la id vacнa, que fue ocupada anteriormente pero luego fue desocupada, creo que seria asi, con un bcl

pawn Код:
CMD:createo(playerid, params[])
{
    new i;
    for(i=0; i < MAX_OBJECTS_PP; i++)
    {
        if(oData[playerid][objID][i] == -1) break;
        if(i == ( MAX_OBJECTS_PP -1 ) ) return SendClientMessage(playerid, red, "You can't create more objects..");
    }
    new objectid;
    if(sscanf(params, "i", objectid)) return SendClientMessage(playerid, -1, "USAGE: /createo [model id]");
    new Float:pos[4];
   
    oData[playerid][objID][i] = objectid;
    oData[playerid][slotobjID] = i;
   
    GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
    GetPlayerFacingAngle(playerid, pos[3]);
    pos[0] += (3 * floatsin(-pos[3], degrees));
    pos[1] += (3 * floatcos(-pos[3], degrees));
    for(new i = 0; i < MAX_OBJECTS_PP; i++)
    {
    if(oObjectID[playerid][i] != 0)
    {
        oObjectID[playerid][i] = CreateObject(objectid, pos[0], pos[1], pos[2], 0.0, 0.0, pos[3]);
        break;
    }
    }
    CreateObject(objectid, pos[0], pos[1], pos[2], 0.0, 0.0, pos[3]);
    format(ssstring, SOS, "-OBJECT- MODELID: %d, SLOT ID: %d, X:%0.2f,Y:%0.2f,Z:%0.2f", objectid, oData[playerid][slotobjID], pos[0], pos[1], pos[2]);
    SendClientMessage(playerid, YELLOW, ssstring);
    return 1;
}
Vos fнjate.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)