Criar objetos - LeleziiN - 06/07/2021
Bom pessoal queria saber como posso fazer para criar uns objetos no servidor e eles ficarem en uma listra.txt na pasta scriptfiles, e toda vez q eu reniciar o servidor eles são recriados sozinho pq já foram criados a primeira vez
Comando de criar o objeto (cria um por vez)
Código PHP: if(strcmp(cmd, "/criararvore", true) == 0)//lenhador { if(VerificarADM(playerid) == 1) { new id = Iter_Free(Trees); if(id == -1) return SendClientMessage(playerid, CORX1, "| ERRO | Não é possível adicionar mais árvores."); new Float: x, Float: y, Float: z, Float: a; GetPlayerPos(playerid, x, y, z); GetPlayerFacingAngle(playerid, a); x += (3.0 * floatsin(-a, degrees)); y += (3.0 * floatcos(-a, degrees)); z -= 1.0; TreeData[id][treeX] = x; TreeData[id][treeY] = y; TreeData[id][treeZ] = z; TreeData[id][treeRX] = TreeData[id][treeRY] = TreeData[id][treeRZ] = 0.0; TreeData[id][treeObjID] = CreateDynamicObject(657, TreeData[id][treeX], TreeData[id][treeY], TreeData[id][treeZ], TreeData[id][treeRX], TreeData[id][treeRY], TreeData[id][treeRZ]); SendClientMessage(playerid, COR_MARA7, "| INFO | Árvore criada."); new label[96]; format(label, sizeof(label), "Árvore (%d)\n\n{FFFFFF}Aperte '{F1C40F}ALT{FFFFFF}' para derrubá-la.", id); TreeData[id][treeLabel] = CreateDynamic3DTextLabel(label, 0x2ECC71FF, TreeData[id][treeX], TreeData[id][treeY], TreeData[id][treeZ] + 1.5, 5.0); Iter_Add(Trees, id); return 1; } else { SendClientMessage(playerid,CORX1,"| ERRO | Você não tem permissão!"); return 1; } }
RE: Criar objetos - xbruno1000x - 06/07/2021
Cria uma stock para salvar X,Y,Z. Depois cria outra na OnGameModeInit para carregar as posições e criar o objeto.
RE: Criar objetos - LeleziiN - 06/07/2021
(06/07/2021 18:03)xbruno1000x Escreveu: Cria uma stock para salvar X,Y,Z. Depois cria outra na OnGameModeInit para carregar as posições e criar o objeto.
E como poderei fazer isso mano? mim desculpe pois não sei muita coisa no pawno
RE: Criar objetos - k2bi_YT - 06/07/2021
Se você tem algum sistema que sempre é salvo algum tipo de coordenadas, você pode se basear por ele, a função é a mesma
RE: Criar objetos - xbruno1000x - 06/07/2021
Esse é um sistema de voltar para a posição antiga. Você terá que fazer basicamente a mesma coisa, só que usando o X,Y,Z para criar o objeto desejado.
Código: new File[56],Float:pPosX[MAX_PLAYERS], Float:pPosY[MAX_PLAYERS], Float:pPosZ[MAX_PLAYERS], Float:pPosA[MAX_PLAYERS],pInterior[MAX_PLAYERS];
format(File, 56, "Posicoes/%s.txt", PlayerName(playerid)); // Cria o "caminho" até o local onde será salvo o Arquivo com a posição do Player
GetPlayerPos(playerid, pPosX[playerid], pPosY[playerid], pPosZ[playerid]); // Pega a Posição do Player em X, Y e Z, e converte para "pPosX", "pPosY" e "pPosZ", respectivamente.
GetPlayerFacingAngle(playerid, pPosA[playerid]); // Pega o Ângulo do Player em A e converte para pPosA, logo pPosA = Ângulo do Player
pInterior[playerid] = GetPlayerInterior(playerid); // Pega o interior do Player, que fica armazenado em pInterior.
if(!DOF2_FileExists(File)) // Checa se a File existe
{
DOF2_CreateFile(File); // Se não existir, cria
}
DOF2_SetFloat(File, "PosX", pPosX[playerid]); // Escreve dentro do Arquivo: "PosX = pPosX (posição que pegamos antes, lembra ?)
DOF2_SetFloat(File, "PosY", pPosY[playerid]); // Escreve dentro do Arquivo: "PosY = pPosY (posição que pegamos antes, lembra ?)
DOF2_SetFloat(File, "PosZ", pPosZ[playerid]); // Escreve dentro do Arquivo: "PosZ = pPosZ (posição que pegamos antes, lembra ?)
DOF2_SetFloat(File, "PosA", pPosA[playerid]); // Escreve dentro do Arquivo: "PosA = pPosA (posição que pegamos antes, lembra ?)
DOF2_SetInt(File, "Interior", pInterior[playerid]); // Escreve dentro do Arquivo: "Interior = pInterior (interior que pegamos antes, lembra ?)
DOF2_SaveFile(); // Salva o arquivo.
Carregando
Código: format(File, sizeof(File), "Posicoes/%s.txt", PlayerName(playerid));
if(DOF2_FileExists(File))
{
SetPlayerPos(playerid, DOF2_GetFloat(File, "PosX"), DOF2_GetFloat(File, "PosY"), DOF2_GetFloat(File, "PosZ"));
SetPlayerInterior(playerid, DOF2_GetInt(File, "Interior"));
SetPlayerFacingAngle(playerid, DOF2_GetFloat(File, "PosA"));
}
RE: Criar objetos - LeleziiN - 06/07/2021
E como eu poderia passa isso aqui para dof2?
Na callback ongamemodeinit
Código: // open database & create tables
ScriptDBHandle = db_open("lumberjack.db");
db_query(ScriptDBHandle, "CREATE TABLE IF NOT EXISTS trees (ID INTEGER, PosX FLOAT, PosY FLOAT, PosZ FLOAT, RotX FLOAT, RotY FLOAT, RotZ FLOAT)");
db_query(ScriptDBHandle, "CREATE TABLE IF NOT EXISTS buyers (ID INTEGER, Skin INTEGER, PosX FLOAT, PosY FLOAT, PosZ FLOAT, PosA FLOAT)");
// prepare tree queries
LoadTrees = db_prepare(ScriptDBHandle, "Carregamento * das árvores");
AddTree = db_prepare(ScriptDBHandle, "Criar árvores (ID, PosX, PosY, PosZ, RotX, RotY, RotZ) VALUES (?, ?, ?, ?, ?, ?, ?)");
UpdateTree = db_prepare(ScriptDBHandle, "Atualizar árvores SET PosX=?, PosY=?, PosZ=?, RotX=?, RotY=?, RotZ=? WHERE ID=?");
RemoveTree = db_prepare(ScriptDBHandle, "Apagar as árvores pelo ID=?");
// prepare buyer queries
LoadBuyers = db_prepare(ScriptDBHandle, "SELECT * FROM buyers");
AddBuyer = db_prepare(ScriptDBHandle, "INSERT INTO buyers (ID, Skin, PosX, PosY, PosZ, PosA) VALUES (?, ?, ?, ?, ?, ?)");
UpdateBuyer = db_prepare(ScriptDBHandle, "UPDATE buyers SET Skin=?, PosX=?, PosY=?, PosZ=?, PosA=? WHERE ID=?");
RemoveBuyer = db_prepare(ScriptDBHandle, "DELETE FROM buyers WHERE ID=?");
// load trees
new id, Float: pos[3], Float: rot[3];
udb_Exists(LoadTrees, 0, DB::TYPE_INTEGER, id);
udb_Exists(LoadTrees, 1, DB::TYPE_FLOAT, pos[0]);
udb_Exists(LoadTrees, 2, DB::TYPE_FLOAT, pos[1]);
udb_Exists(LoadTrees, 3, DB::TYPE_FLOAT, pos[2]);
udb_Exists(LoadTrees, 4, DB::TYPE_FLOAT, rot[0]);
udb_Exists(LoadTrees, 5, DB::TYPE_FLOAT, rot[1]);
udb_Exists(LoadTrees, 6, DB::TYPE_FLOAT, rot[2]);
if(stmt_execute(LoadTrees))
{
print(" [Lenhador] Carregando árvores...");
new label[96];
while(stmt_fetch_row(LoadTrees))
{
No topo do gm
Código: new
DB: ScriptDBHandle;
new
DBStatement: LoadTrees,
DBStatement: AddTree,
DBStatement: UpdateTree,
DBStatement: RemoveTree;
new
DBStatement: LoadBuyers,
DBStatement: AddBuyer,
DBStatement: UpdateBuyer,
DBStatement: RemoveBuyer;
No comando
Código: stmt_bind_value(AddTree, 0, DB::TYPE_INTEGER, id);
stmt_bind_value(AddTree, 1, DB::TYPE_FLOAT, TreeData[id][treeX]);
stmt_bind_value(AddTree, 2, DB::TYPE_FLOAT, TreeData[id][treeY]);
stmt_bind_value(AddTree, 3, DB::TYPE_FLOAT, TreeData[id][treeZ]);
stmt_bind_value(AddTree, 4, DB::TYPE_FLOAT, TreeData[id][treeRX]);
stmt_bind_value(AddTree, 5, DB::TYPE_FLOAT, TreeData[id][treeRY]);
stmt_bind_value(AddTree, 6, DB::TYPE_FLOAT, TreeData[id][treeRZ]);
if(stmt_execute(AddTree))
{
EditingTreeID[playerid] = id;
EditDynamicObject(playerid, TreeData[id][treeObjID]);
RE: Criar objetos - xbruno1000x - 06/07/2021
Isso aí você apaga e esquece que existiu. Não se converte SQL para DOF2, tem estruturas distintas.
Teria que refazer tudo em DOF2 e ir vendo como fazer funcionar.
RE: Criar objetos - LeleziiN - 06/07/2021
(06/07/2021 20:40)xbruno1000x Escreveu: Isso aí você apaga e esquece que existiu. Não se converte SQL para DOF2, tem estruturas distintas.
Teria que refazer tudo em DOF2 e ir vendo como fazer funcionar.
Ah certo, pq só essa parte ai que quando cria os Objetos ele fica salvo ai quando reinicia o servidor os Objetos carregam
RE: Criar objetos - NelsonC. - 07/07/2021
Cara, antes de postar aqui procure entender o código e tentar refazer em um salvamento que você conhece.
Não é só fazer download, tentar adaptar e já era, tem que entender também.
RE: Criar objetos - LeleziiN - 07/07/2021
(07/07/2021 06:08)NelsonC. Escreveu: Cara, antes de postar aqui procure entender o código e tentar refazer em um salvamento que você conhece.
Não é só fazer download, tentar adaptar e já era, tem que entender também.
Amigo a única parte que eu não conseguir fazer de acordo com o meu salvamento foi essa pois não intende
|