Szerző Téma: Bútor mozgatás  (Megtekintve 1173 alkalommal)

Bútor mozgatás
« Dátum: 2017. június 22. - 20:30:30 »
0 Show voters
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.

Bútor mozgatás
« Válasz #1 Dátum: 2017. június 22. - 21:38:46 »
+1 Show voters
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 !

Bútor mozgatás
« Válasz #2 Dátum: 2017. június 22. - 22:17:05 »
0 Show voters
Köszönöm szépen. Hasznát vettem.

Nem elérhető ZyZu.

  • Globális moderátor
  • 8939
  • my turbo diesel forum
  • Discord: ZyZu.
    • Profil megtekintése
Bútor mozgatás
« Válasz #3 Dátum: 2017. június 22. - 22:50:18 »
0 Show voters
Ú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. 

Bútor mozgatás
« Válasz #4 Dátum: 2017. június 22. - 23:04:39 »
0 Show voters
Némi gyakorlatom van, C-ben és javaban sokat dolgoztam. A pawno még új nekem, de kezdem megérteni.
« Utoljára szerkesztve: 2017. június 22. - 23:05:27 írta RicSiy123 »

Bútor mozgatás
« Válasz #5 Dátum: 2017. június 22. - 23:18:50 »
0 Show voters
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

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal