Sziasztok! Valaki tudna írni nekem erre egy sima Dini mentést, de odaírva, hogy mi mire jó? Próbálom megérteni a dolgok működését. Előre is köszönöm a segítséget!
#include <a_samp>
#include <zcmd>
#include <dini>
#include <streamer>
#include <sscanf>
#define MAX_BUTOR 20
new Butorok[MAX_PLAYERS][MAX_BUTOR];
enum butorData
{
Float:bPos[3],
Float:bRot[3],
bVirtual,
bInti
}
new butorInfo[MAX_PLAYERS][MAX_BUTOR][butorData];
new megvettButorok[MAX_PLAYERS] = 0;
new jelenlegiButor[MAX_PLAYERS] = -1;
CMD:ujbutor(playerid,params[])
{
if(isnull(params)) return SendClientMessage(playerid,-1,\"Használat: /újbútor (ID)\");
if(megvettButorok[playerid] > MAX_BUTOR) return SendClientMessage(playerid,-1,\"Nem hozhatsz létre több bútort :C\");
new butorID;
sscanf(params,\"d\",butorID);
new Float:X,Float:Y,Float:Z,virtual,inti;
GetPlayerPos(playerid,X,Y,Z);
virtual = GetPlayerVirtualWorld(playerid);
inti = GetPlayerInterior(playerid);
// LOGIKA
Butorok[playerid][megvettButorok[playerid]] = CreateDynamicObject(butorID,X,Y,Z,0.0,0.0,0.0,virtual,inti);
butorInfo[playerid][megvettButorok[playerid]][bPos][0] = X;
butorInfo[playerid][megvettButorok[playerid]][bPos][1] = Y;
butorInfo[playerid][megvettButorok[playerid]][bPos][2] = Z;
butorInfo[playerid][megvettButorok[playerid]][bRot][0] = 0.0;
butorInfo[playerid][megvettButorok[playerid]][bRot][1] = 0.0;
butorInfo[playerid][megvettButorok[playerid]][bRot][2] = 0.0;
butorInfo[playerid][megvettButorok[playerid]][bVirtual] = virtual;
butorInfo[playerid][megvettButorok[playerid]][bInti] = inti;
// A Butorok tömbbe, a játékos táblán, a megvettButorok mezőbe, létrehozunk egy objectet.
megvettButorok[playerid]++;
// Növeljük a megvett bútorok számát. Mivel ha szeretnénk mégegyet létrehozni akkor ne a jelenlegit írja felül hanem
// Továbbá tolódjon 1-el.
SendClientMessage(playerid,-1,\"Megvettél egy bútort !\");
return 1;
}
CMD:mozgatbutor(playerid,params[])
{
if(isnull(params)) return SendClientMessage(playerid,-1,\"Használat: /mozgatbútor (Slot)\");
new butorSlot;
sscanf(params,\"d\",butorSlot);
if(Butorok[playerid][butorSlot] == 0) return SendClientMessage(playerid,-1,\"Ezen a Sloton, nincsen bútor!\");
// Leellenőrizzük, hogy az adott sloton van-e object, ha van akkor kezeljük, ha nem akkor hibaüzenet.
jelenlegiButor[playerid] = butorSlot;
EditDynamicObject(playerid,Butorok[playerid][butorSlot]);
// Lehetőséget adunk arra hogy a játékos mozgassa az objectet;
return 1;
}
public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
{
if(objectid == jelenlegiButor[playerid])
{
if(response == EDIT_RESPONSE_CANCEL)
{
// Ha nem változtat, akkor az objectet visszrakjuk a régi helyére.
//Ezt nem mindig szükséges, de van rá esély, hogy nem rakja automatikusan vissza, ezért erre van ez a kód
SetDynamicObjectPos(Butorok[playerid][jelenlegiButor[playerid]],butorInfo[playerid][jelenlegiButor[playerid]][bPos][0],butorInfo[playerid][jelenlegiButor[playerid]][bPos][1],butorInfo[playerid][jelenlegiButor[playerid]][bPos][2]);
SetDynamicObjectRot(Butorok[playerid][jelenlegiButor[playerid]],butorInfo[playerid][jelenlegiButor[playerid]][bRot][0],butorInfo[playerid][jelenlegiButor[playerid]][bRot][1],butorInfo[playerid][jelenlegiButor[playerid]][bRot][2]);
}
else if(response == EDIT_RESPONSE_FINAL) // Ha lementi
{
// Beállítjuk a koordinátákat.
butorInfo[playerid][jelenlegiButor[playerid]][bPos][0] = x;
butorInfo[playerid][jelenlegiButor[playerid]][bPos][1] = y;
butorInfo[playerid][jelenlegiButor[playerid]][bPos][2] = z;
butorInfo[playerid][jelenlegiButor[playerid]][bRot][0] = rx;
butorInfo[playerid][jelenlegiButor[playerid]][bRot][1] = ry;
butorInfo[playerid][jelenlegiButor[playerid]][bRot][2] = rz;
// Helyére rakjuk
SetDynamicObjectPos(Butorok[playerid][jelenlegiButor[playerid]],butorInfo[playerid][jelenlegiButor[playerid]][bPos][0],butorInfo[playerid][jelenlegiButor[playerid]][bPos][1],butorInfo[playerid][jelenlegiButor[playerid]][bPos][2]);
SetDynamicObjectRot(Butorok[playerid][jelenlegiButor[playerid]],butorInfo[playerid][jelenlegiButor[playerid]][bRot][0],butorInfo[playerid][jelenlegiButor[playerid]][bRot][1],butorInfo[playerid][jelenlegiButor[playerid]][bRot][2]);
}
}
return 1;
}