[GameMode] axll-e | simples criador/editor de objetos
#1

Axll-e | editor de objetos
Quote:
Bom no sistema й possнvel criar um objeto, mover e apagб-lo, ele tambйm salva..possuн um comando sendo:
/objeto [opзгo] [id] (opзгo = (criar - cria o objeto id | mover - move o objeto id | apagar - apaga o objeto id))
pawn Код:
#include    a_samp
#include    sscanf2
#include    zcmd
#include    DOF2

#define     Message         SendClientMessage

#define     max_objetos     1000
#define     max_players     MAX_PLAYERS

#define     cor_erro        0xFF5959AA
#define     cor_sucesso     0x05A529AA


enum enum_objetos
{
    objeto_ativo,
    objeto_model,
    objeto_var,
    Text3D:objeto_label,
    Float:objeto_x,
    Float:objeto_y,
    Float:objeto_z,
    Float:objeto_rx,
    Float:objeto_ry,
    Float:objeto_rz
}

new objeto[max_objetos][enum_objetos];

public OnGameModeInit()
{
    CarregarObjetos();
    return 1;
}

public OnGameModeExit()
{
    DOF2_Exit();
    return 1;
}

public OnPlayerDisconnect(playerid)
{
    SetPVarInt(playerid, "editor_axll", 0);
    SetPVarInt(playerid, "demo_loop", 0);
    SetPVarInt(playerid, "demo_modelo", 0);
    return 1;
}

command(objeto, playerid, params [])
{
    new subcmd[32], id[2], _string[128];
    if(sscanf(params, "s[32]i", subcmd, id[0], id[1]))
    {
        Message(playerid, cor_erro, "[subcomandos]: criar [modelo] | apagar [id] | mover [id] |");
        Message(playerid, cor_erro, "[subcomandos]: ");
        return 1;
    }
    if(!strcmp(subcmd, "criar", true))
    {
        if(GetPVarInt(playerid, "editor_axll") == 1) return Message(playerid, cor_erro, "erro: vocк ja esta editando um objeto.");
        new b; b = max_objetos+1;
        for(new a = 0; a < max_objetos; a++)
        {
            if(a == 0) continue;
            if(objeto[a][objeto_ativo] == 1) continue;
            b = a;
            break;
        }
        new Float:mX, Float:mY, Float:mZ;
        GetPlayerPos(playerid, mX, mY, mZ);
        objeto[b][objeto_var] = CreateObject(id[0], mX, mY, mZ, 0.0, 0.0, 0.0);
        EditObject(playerid, objeto[b][objeto_var]);
        format(_string, sizeof(_string), "objetos: vocк iniciou a criaзгo do objeto id: %d modelo: %d.", b, id[0]);
        Message(playerid, cor_sucesso, _string);
        SetPVarInt(playerid, "demo_loop", b);
        SetPVarInt(playerid, "demo_modelo", id[0]);
        SetPVarInt(playerid, "editor_axll", 1);
        return 1;
    }
    if(!strcmp(subcmd, "apagar", true))
    {
        objeto[id[0]][objeto_ativo] = 0;
        DestroyObject(objeto[id[0]][objeto_var]);
        Delete3DTextLabel(objeto[id[0]][objeto_label]);
        format(_string, sizeof(_string), "objetos: vocк apagou o objeto id: %d.", id[0]);
        Message(playerid, cor_sucesso, _string);
        format(_string, 128, "editor/%d.axl", id[0]);
        DOF2_RemoveFile(_string);
        return 1;
    }
    if(!strcmp(subcmd, "mover", true))
    {
        if(objeto[id[0]][objeto_var] != 1) return Message(playerid, cor_erro, "erro: objeto nгo existente.");
        EditObject(playerid, objeto[id[0]][objeto_var]);
        Delete3DTextLabel(objeto[id[0]][objeto_label]);
        SetPVarInt(playerid, "editor_axll", 2);
        format(_string, sizeof(_string), "objetos: vocк iniciou a editaзгo do objeto id: %d.", id[0]);
        Message(playerid, cor_sucesso, _string);
        return 1;
    }
    return 1;
}

public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
{
    new Local[50];
    new objeto_id, objeto_modelo, _string[128];
    objeto_id = GetPVarInt(playerid, "demo_loop");
    objeto_modelo = GetPVarInt(playerid, "demo_modelo");
    new Float:oldX, Float:oldY, Float:oldZ, Float:oldRotX, Float:oldRotY, Float:oldRotZ;
    //
    if(GetPVarInt(playerid, "editor_axll") == 1)
    {
        GetObjectPos(objeto[objeto_id][objeto_var], oldX, oldY, oldZ);
        GetObjectRot(objeto[objeto_id][objeto_var], oldRotX, oldRotY, oldRotZ);
    }
    if(!playerobject) // If this is a global object, move it for other players
    {
        if(!IsValidObject(objeto[objeto_id][objeto_var])) return;
        MoveObject(objeto[objeto_id][objeto_var], fX, fY, fZ, 10.0, fRotX, fRotY, fRotZ);
    }
    if(response == EDIT_RESPONSE_FINAL)
    {
        if(GetPVarInt(playerid, "editor_axll") == 1)
        {
            //set info
            objeto[objeto_id][objeto_ativo] = 1;
            objeto[objeto_id][objeto_model] = objeto_modelo;
            SetObjectPos(objeto[objeto_id][objeto_var], fX, fY, fZ);
            SetObjectRot(objeto[objeto_id][objeto_var], fRotX, fRotY, fRotZ);
            objeto[objeto_id][objeto_x] = fX;
            objeto[objeto_id][objeto_y] = fY;
            objeto[objeto_id][objeto_z] = fZ;
            objeto[objeto_id][objeto_rx] = fRotX;
            objeto[objeto_id][objeto_ry] = fRotY;
            objeto[objeto_id][objeto_rz] = fRotZ;
            format(_string, 128, "%d", objeto_id);
            objeto[objeto_id][objeto_label] = Create3DTextLabel(_string, -1, fX, fY, fZ, 5.0, 0);
            Message(playerid, cor_sucesso, "objetos: objeto criado com sucesso.");
            printf("objeto | criado | x = %d | y = %d | z %d", fX, fY, fZ);
            SetPVarInt(playerid, "editor_axll", 0);
            SetPVarInt(playerid, "demo_loop", 0);
            SetPVarInt(playerid, "demo_modelo", 0);
            format(Local, 128, "editor/%d.axl", objeto_id);
            DOF2_CreateFile(Local);
            DOF2_SetInt(Local, "ativo", objeto[objeto_id][objeto_ativo]);
            DOF2_SetInt(Local, "modelo", objeto[objeto_id][objeto_model]);
            DOF2_SetFloat(Local, "x", objeto[objeto_id][objeto_x]);
            DOF2_SetFloat(Local, "y", objeto[objeto_id][objeto_y]);
            DOF2_SetFloat(Local, "z", objeto[objeto_id][objeto_z]);
            DOF2_SetFloat(Local, "rz", objeto[objeto_id][objeto_rx]);
            DOF2_SetFloat(Local, "ry", objeto[objeto_id][objeto_ry]);
            DOF2_SetFloat(Local, "rz", objeto[objeto_id][objeto_rz]);
            DOF2_SaveFile();
        }
        if(GetPVarInt(playerid, "editor_axll") == 2)
        {
            SetObjectPos(objeto[objeto_id][objeto_var], fX, fY, fZ);
            SetObjectRot(objeto[objeto_id][objeto_var], fRotX, fRotY, fRotZ);
            objeto[objeto_id][objeto_x] = fX;
            objeto[objeto_id][objeto_y] = fY;
            objeto[objeto_id][objeto_z] = fZ;
            objeto[objeto_id][objeto_rx] = fRotX;
            objeto[objeto_id][objeto_ry] = fRotY;
            objeto[objeto_id][objeto_rz] = fRotZ;
            format(_string, 128, "%d", objeto_id);
            objeto[objeto_id][objeto_label] = Create3DTextLabel(_string, -1, fX, fY, fZ, 50.0, 0);
            Message(playerid, cor_sucesso, "objetos: objeto movido com sucesso.");
            SetPVarInt(playerid, "editor_axll", 0);
            format(Local, 128, "editor/%d.axl", objeto_id);
            DOF2_SetFloat(Local, "x", objeto[objeto_id][objeto_x]);
            DOF2_SetFloat(Local, "y", objeto[objeto_id][objeto_y]);
            DOF2_SetFloat(Local, "z", objeto[objeto_id][objeto_z]);
            DOF2_SetFloat(Local, "rx", objeto[objeto_id][objeto_rx]);
            DOF2_SetFloat(Local, "ry", objeto[objeto_id][objeto_ry]);
            DOF2_SetFloat(Local, "rz", objeto[objeto_id][objeto_rz]);
            DOF2_SaveFile();
        }
    }
    if(response == EDIT_RESPONSE_CANCEL)
    {
        //The player cancelled, so put the object back to it's old position
        if(!playerobject) //Object is not a playerobject
        {
            SetObjectPos(objeto[objeto_id][objeto_var], oldX, oldY, oldZ);
            SetObjectRot(objeto[objeto_id][objeto_var], oldRotX, oldRotY, oldRotZ);
        }
        else
        {
            SetPlayerObjectPos(playerid, objeto[objeto_id][objeto_var], oldX, oldY, oldZ);
            SetPlayerObjectRot(playerid, objeto[objeto_id][objeto_var], oldRotX, oldRotY, oldRotZ);
        }
        SetPVarInt(playerid, "editor_axll", 0);
        SetPVarInt(playerid, "demo_loop", 0);
        SetPVarInt(playerid, "demo_modelo", 0);
    }
}

stock CarregarObjetos()
{
    new Local[128], _string[128];
    for(new i; i < max_objetos; i++)
    {
        format(Local, sizeof(Local), "editor/%d.axl", i);
        if(DOF2_FileExists(Local))
        {
            objeto[i][objeto_ativo] = DOF2_GetInt(Local, "ativo");
            objeto[i][objeto_model] = DOF2_GetInt(Local, "modelo");
            objeto[i][objeto_x] = DOF2_GetFloat(Local, "x");
            objeto[i][objeto_y] = DOF2_GetFloat(Local, "y");
            objeto[i][objeto_z] = DOF2_GetFloat(Local, "z");
            objeto[i][objeto_rx] = DOF2_GetFloat(Local, "rx");
            objeto[i][objeto_ry] = DOF2_GetFloat(Local, "ry");
            objeto[i][objeto_rz] = DOF2_GetFloat(Local, "rz");
            format(_string, 128, "%d", i);
            objeto[i][objeto_label] = Create3DTextLabel(_string, -1, objeto[i][objeto_x], objeto[i][objeto_y], objeto[i][objeto_z], 5.0, 0);
            objeto[i][objeto_var] = CreateObject(objeto[i][objeto_model], objeto[i][objeto_x], objeto[i][objeto_y], objeto[i][objeto_z], objeto[i][objeto_rx], objeto[i][objeto_ry], objeto[i][objeto_rz]);
        }
    }
    return 1;
}
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 1 Guest(s)