31.10.2013, 20:46
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;
}