[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
#2

Parabens pelo visto evolui rapido(ou ja estou em off).
Reply
#3

pqp que cagada que eu fiz botei errado '--', alguem sabe como muda? de GM para FS, eu so vi depois eu cliquei aaaa cagadaa kkk...

#edit

vlw daan!!!
Reply
#4

Interessante!

Acho que й sу editar o tуpico e mudar o prefixo...
Reply
#5

Legal seu cуdigo, nгo leve a mau, mas eu irei postar um editor em breve, nгo й porque vocк criou um que eu nгo posso criar o meu tambйm.

rep+=3;
Reply
#6

й vai ter que ficar assim..o negocio nem aparece para editar o prefixo ate aparece mais nгo faz nenhuma diferenзa quando mudo e sу apareceu nгo primeira vez que editei..mas okay kkk agora ja eras..

#edit

sauhsaus okays Schocc
Reply
#7

Quote:
Originally Posted by Schocc
Посмотреть сообщение
Legal seu cуdigo, nгo leve a mau, mas eu irei postar um editor em breve, nгo й porque vocк criou um que eu nгo posso criar o meu tambйm.

rep+=3;
Mito dos editores = neni kkkkkkk...se for de tu jб sei ke й um grande editor,tu entende bastante nisso...

@gamemode -q

mt top em mano, da pra zoar no sv kkkkkkkkkkkk...adrianua aprovs
Reply
#8

Quote:
Originally Posted by Axll
Посмотреть сообщение
й vai ter que ficar assim..o negocio nem aparece para editar o prefixo ate aparece mais nгo faz nenhuma diferenзa quando mudo e sу apareceu nгo primeira vez que editei..mas okay kkk agora ja eras..

#edit

sauhsaus okays Schocc
Vocк aprendeu sozinho?, vocк nгo frequenta este fуrum a muito tempo certo? aprendeu a programar assim sozinho?
Dificilmente encontro users aqui com capacidade de aprender sozinho como eu (autodidata).

Novamente parabйns pelo FS, vocк pode colocar mais funзхes ai nй.
Reply
#9

Parabйns, bom cуdigo.
+REP
Reply
#10

Quote:
Originally Posted by Schocc
Посмотреть сообщение
Vocк aprendeu sozinho?, vocк nгo frequenta este fуrum a muito tempo certo? aprendeu a programar assim sozinho?
Dificilmente encontro users aqui com capacidade de aprender sozinho como eu (autodidata).

Novamente parabйns pelo FS, vocк pode colocar mais funзхes ai nй.
aprendi "meio" que sozinho, vendo como funcionava, comecei como mapper ai queria fazer portoes..e fui vendo as funcoes na wiki samp... e vlw cara !!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)