Portal SAMP
[Ajuda] Criar objetos - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Criar objetos (/showthread.php?tid=1355)



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(playeridCORX1"| ERRO | Não é possível adicionar mais árvores.");
        new FloatxFloatyFloatzFloata;
        GetPlayerPos(playeridxyz);
        GetPlayerFacingAngle(playerida);
        x += (3.0 floatsin(-adegrees));
        y += (3.0 floatcos(-adegrees));
        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(657TreeData[id][treeX], TreeData[id][treeY], TreeData[id][treeZ], TreeData[id][treeRX], TreeData[id][treeRY], TreeData[id][treeRZ]);
        SendClientMessage(playeridCOR_MARA7"| INFO | Árvore criada.");
        new label[96];
        format(labelsizeof(label), "Árvore (%d)\n\n{FFFFFF}Aperte '{F1C40F}ALT{FFFFFF}' para derrubá-la."id);
        TreeData[id][treeLabel] = CreateDynamic3DTextLabel(label0x2ECC71FFTreeData[id][treeX], TreeData[id][treeY], TreeData[id][treeZ] + 1.55.0);
        Iter_Add(Treesid);
        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