GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: RicSiy123 - 2017. Június 22. - 20:30:30

Cím: Bútor mozgatás
Írta: RicSiy123 - 2017. Június 22. - 20:30:30
Sziasztok, azt szeretném kérdezni, hogy valaki tudna írni nekem a \"modern bútorrendszer\" scripthez egy utólagos mozgatás parancsot? OnPlayerSelectObject-el próbálkoztam, de nem jó. Gondolom IDvel kellene ellátni őket, ami nekem még nem megy. Előre is köszönöm, ha valaki segít.
Cím: Bútor mozgatás
Írta: Naretev - 2017. Június 22. - 21:38:46
Nos nagyon egyszerű a megoldás. Azt javaslom, de töltögess le bútor rendszereket, mert azt nem fogod érteni és nem tanulsz belőle.
 
A legjobb mód, ha egy sajátot írsz.
 
Nem annyira bonyolult. Attól függ, hogy házhoz szeretnéd kötni, vagy játékoshoz.
 
Ház verzió.
 

#define MAX_HAZ 100
#define MAX_BUTOR 20
new Butorok[MAX_HAZ][MAX_BUTOR];

 
Játékos verzió
 

#define MAX_BUTOR 20
new Butorok[MAX_PLAYERS][MAX_BUTOR];

 
Illetve szükséges lesz egy tömb ami ezeknek a bútoroknak, tárolja a tulajdonságaikat.
 

enum butorData
{
Float:bPos[3],
Float:bRot[3],
bVirtual,
bInti
}
new butorInfo[MAX_PLAYERS][MAX_BUTOR][butorData];

 
 
 
Szükség van egy, a játékos/ház meglévő bútorainak számát tároló változóra.
 

new megvettButorok[MAX_PLAYERS] = 0;

 
Illetve szükségünk van egy jelenlegi bútor Slot-ját tároló változóra is.
 

new jelenlegiButor[MAX_PLAYERS] = -1;

 
Ezután létrehozol egy bútort.
 

CMD:ujbutor(playerid,params[])
{   
if(isnull(params)) return SendClientMessage(playerid,-1,\"Használat: /újbútor (ID)\");
if(megvettButorok > 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] = CreateDynamicOjbect(butorID,X,Y,Z,0.0,0.0,0.0,virtual,inti);
butorInfo[playerid][megvettButorok][bPos][0] = X;
butorInfo[playerid][megvettButorok][bPos][1] = Y;
butorInfo[playerid][megvettButorok][bPos][2] = Z;
butorInfo[playerid][megvettButorok][bRot][0] = 0.0;
butorInfo[playerid][megvettButorok][bRot][1] = 0.0;
butorInfo[playerid][megvettButorok][bRot][2] = 0.0;
butorInfo[playerid][megvettButorok][bVirtual] = virtual;
butorInfo[playerid][megvettButorok][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;
}

 
Ezután a jelenlegi poziciódra létrehozol egy bútort. pl. ( /ujbutor 19656) // Ez talán egy fal object ID random mondtam.
 
Ezt nyílván helyre szeretnéd rakni.
 

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;
}

 
Itt kihozza nekünk a szoksásos mozgatás, forgatásos dolgokat. Ezt követően lementjük.
 

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],butorInfo[playerid][jelenlegiButor][bPos][0],butorInfo[playerid][jelenlegiButor][bPos][1],butorInfo[playerid][jelenlegiButor][bPos][2]);
      SetDynamicObjectRot(Butorok[playerid][jelenlegiButor],butorInfo[playerid][jelenlegiButor][bRot][0],butorInfo[playerid][jelenlegiButor][bRot][1],butorInfo[playerid][jelenlegiButor][bRot][2]);
   }
   else if(response == EDIT_RESPONSE_FINAL) // Ha lementi
   {
      // Beállítjuk a koordinátákat.
      butorInfo[playerid][jelenlegiButor][bPos][0] = x;
      butorInfo[playerid][jelenlegiButor][bPos][1] = y;
      butorInfo[playerid][jelenlegiButor][bPos][2] = z;
      butorInfo[playerid][jelenlegiButor][bRot][0] = rx;
      butorInfo[playerid][jelenlegiButor][bRot][1] = ry;
      butorInfo[playerid][jelenlegiButor][bRot][2] = rz;
      // Helyére rakjuk
      SetDynamicObjectPos(Butorok[playerid][jelenlegiButor],butorInfo[playerid][jelenlegiButor][bPos][0],butorInfo[playerid][jelenlegiButor][bPos][1],butorInfo[playerid][jelenlegiButor][bPos][2]);
      SetDynamicObjectRot(Butorok[playerid][jelenlegiButor],butorInfo[playerid][jelenlegiButor][bRot][0],butorInfo[playerid][jelenlegiButor][bRot][1],butorInfo[playerid][jelenlegiButor][bRot][2]);
   }
}
return 1;
}

 
 
 
Így már a helyére rakta, és tudod kezelni, illetve újakat létrehozni.
 
Ez elvileg müködik, azonban mentés/betöltés nincs benne, ezt a saját játékmódodnak megfelelően kell kialakítanod.
 
Remélem tudtam segíteni. Én szivesen segítek, ha bármi kérdésed van csak írj !
Cím: Bútor mozgatás
Írta: RicSiy123 - 2017. Június 22. - 22:17:05
Köszönöm szépen. Hasznát vettem.
Cím: Bútor mozgatás
Írta: ZyZu. - 2017. Június 22. - 22:50:18
Úgy tanulsz ha nézel sok szkripteket, nem kell felhasználni őket csak a sorokat megnézni hogy hogyan lett megvalósítva.. majd létrehozol egy új fájlt a pawnoban és megpróbálod megírni a sajátodat, garantálom így sokat tanulsz. 
Cím: Bútor mozgatás
Írta: RicSiy123 - 2017. Június 22. - 23:04:39
Némi gyakorlatom van, C-ben és javaban sokat dolgoztam. A pawno még új nekem, de kezdem megérteni.
Cím: Bútor mozgatás
Írta: Naretev - 2017. Június 22. - 23:18:50
Mivel C alapú a pawno is így van köze hozzá :D Mondjuk az ami néha bezavar, hogy itt a (new) elő szóval hozol létre változókat, Java-ban, pedig objektumot hozol létre vele. De hát ez az ára, ha tudni akarsz valamit :D