Szerző Téma: Bútor  (Megtekintve 849 alkalommal)

Bútor
« Dátum: 2017. Augusztus 16. - 16:31:43 »
0
Sziasztok, egy bútorrendszerhez próbáltam mozgatást írni(Alapból nem volt), jól át is lehet mozgatni, viszont nem mentődik. Tudna valaki segíteni? Előre is köszönöm, és elnézést, hogy a Segítségkérés fórum, belőlem él mostanában XD Itt a mentés és mozgatás rész: 
 
////
stock AddObjectFromFile(DFileName[])
{
 if(!fexist(DFileName)) return 0;
 
 new File:ObjectFile, Float:OX, Float:OY, Float:OZ, Float:ORX, Float:ORY, Float:ORZ, OVW, OINT, oTotal, Line[128];
 
 ObjectFile = fopen(DFileName, io_read);
 while(fread(ObjectFile, Line))
 {
     if(Line[0] == \'/\' || isnull(Line)) continue;
     unformat(Line, \"ffffffiii\", OX, OY, OZ, ORX, ORY, ORZ, OVW, OINT, oModel);
     CreateDynamicObject(oModel, Float:OX, Float:OY, Float:OZ, Float:ORX, Float:ORY, Float:ORZ, OVW, OINT, -1, 200.0);
     oTotal++;
 }
 fclose(ObjectFile);
 return oTotal;
}
 
stock AddObjectToFile(DFileName[], Float:OX, Float:OY, Float:OZ, Float:ORX, Float:ORY, Float:ORZ, OVW, OINT)
{
 new File:ObjectFile, Line[128];
 
 format(Line, sizeof(Line), \"%f %f %f %f %f %f %i %i %i\\r\\n\", OX, OY, OZ, ORX, ORY, ORZ, OVW, OINT, oModel);
 ObjectFile = fopen(DFileName, io_append);
 fwrite(ObjectFile, Line);
 fclose(ObjectFile);
 return 1;
}
 
public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
{
 new Float:oldX, Float:oldY, Float:oldZ,
  Float:oldRotX, Float:oldRotY, Float:oldRotZ;
 GetObjectPos(objectid, oldX, oldY, oldZ);
 GetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
 new Float:OX, Float:OY, Float:OZ, Float:ORX, Float:ORY, Float:ORZ, OVW, OINT;
 if(!playerobject) // If this is a global object, move it for other players
 {
     if(!IsValidObject(objectid)) return;
     MoveObject(objectid, fX, fY, fZ, 10.0, fRotX, fRotY, fRotZ);
 }
 
 if(response == EDIT_RESPONSE_FINAL)
 {
     new string[254];
  OVW = GetPlayerVirtualWorld(playerid);
  OINT = GetPlayerInterior(playerid);
  GetObjectPos(objectid, OX, OY, OZ);
  GetObjectRot(objectid, ORX, ORY, ORZ);
  AddObjectToFile(OBJECT_FILE_NAME, OX, OY, OZ, ORX, ORY, ORZ, OVW, OINT);
  SendClientMessage(playerid, COLOR_BLUE, \"Object mentve\");
  format(string, sizeof(string), \" %i  %f, %f, %f,  %f, %f, %f,\", oModel, OX, OY, OZ, ORX, ORY, ORZ);
  SendClientMessage(playerid, 0xD8D8D8FF, string);
  format(string, sizeof(string), \"Object világ: %i interior: %i\", OVW, OINT);
  SendClientMessage(playerid, 0xD8D8D8FF, string);
  CreateDynamicObject(oModel, Float:OX, Float:OY, Float:OZ, Float:ORX, Float:ORY, Float:ORZ, OVW, OINT, -1, 200.0);
  DestroyObject(Object);
 }
 
 if(response == EDIT_RESPONSE_CANCEL)
 {
  //The player cancelled, so put the object back to it\'s old position
  if(!playerobject) //Object is not a playerobject
  {
   SetObjectPos(objectid, oldX, oldY, oldZ);
   SetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
  }
  else
  {
   SetPlayerObjectPos(playerid, objectid, oldX, oldY, oldZ);
   SetPlayerObjectRot(playerid, objectid, oldRotX, oldRotY, oldRotZ);
  }
 }
}
 
/*
CMD:furniture(playerid, params[])
{
    ShowPlayerDialog(playerid, 509, DIALOG_STYLE_LIST, \"Furniture\", \"Chairs\\nBeds\\nTables\\nTvs\\nCabinets\\nFuns tuff\\n\", \"Ok\", \"Cancel\");
 return 1;
}
*/
 
COMMAND:butor(playerid, params[])
{
 new objectid;
  if(!sscanf(params, \"i\", objectid))
   {
     if(objectid >= 1 && objectid <= 11000)
      {
       new Float:OX, Float:OY, Float:OZ, Float:ORX, Float:ORY, Float:ORZ;
        GetPlayerPos(playerid, OX, OY, OZ);
         oModel = objectid;
         ORX = 0.0;
         ORY = 0.0;
         ORZ = 0.0;
         Object = CreateObject(oModel, OX, OY, OZ, ORX, ORY, ORZ); //Object will render at its default distance.
         SendClientMessage(playerid, 0xD8D8D8FF, \"Object lerakva\");
         EditObject(playerid, Object);
          return 1;
  }
  else return SendClientMessage(playerid, 0xD8D8D8FF, \" 1 és 11000 közötti objecteket rakhatsz csak le.\");
   }
    else return SendClientMessage(playerid, 0xD8D8D8FF, \"/butor ID\");
}
 

COMMAND:butormozgat(playerid, params[])
{
    SelectObject(playerid);
    return 1;
}
 
 
 
public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
{
    if(type == SELECT_OBJECT_GLOBAL_OBJECT)
    {
        EditObject(playerid, objectid);
    }
    else
    {
        EditPlayerObject(playerid, objectid);
    }
    SendClientMessage(playerid, 0xFFFFFFFF, \"Kiválasztottad\");
    return 1;
}
 
 

Bútor
« Válasz #1 Dátum: 2017. Augusztus 17. - 10:34:58 »
0
Ha a mentés nemjó akkor ezt a részt nézd át:
 
 if(response == EDIT_RESPONSE_FINAL)
 
Amiből következik, hogy az AddObjectToFile-nál van valami gubanc, nem létezik a fájl, vagy valami.
 
De ha saját rendszert írnál abból többet tanulnál + jobban megértenéd, minthogy másét próbálod értelmezni.
 
Saját gondolkodás módoddal jobban ismered a kódodat mint bárki más, én is ezért írok inkább saját szkripteket mintsem másét, mivel nehezebb megérteni, lehet, hogy bugos, + más helyett aratod le a babérokat :C

Bútor
« Válasz #2 Dátum: 2017. Augusztus 17. - 21:23:06 »
0
Amit alapból helyezel le azt jól menti. Azt nem menti, amit utólag mozgattál 

Bútor
« Válasz #3 Dátum: 2017. Augusztus 18. - 10:10:42 »
0
Igen, ha mozgatsz egy objectet, és befejezed a mozgatását, tehát lemented, akkor kellene a poziciót lekérnie. És ezek a funkciók az EDIT_RESPONSE_FINAL-ban vannak. Azokat nézd át.

Bútor
« Válasz #4 Dátum: 2017. Augusztus 18. - 13:49:09 »
0
Van a módban egy másik SelectObjectes script, aztán annál működik,  tehát áthelyezek egy objectet, aztán megjelenik éppen ott a bútor is. Eléggé megvan gyűlve vele a bajom

Bútor
« Válasz #5 Dátum: 2017. Augusztus 18. - 18:03:50 »
0
Csinálj saját rendszert. Vagy ha nem is rendszert csak 1 teszt objectel egy teljesen más módban próbáld meg, és ott tudod tesztelgetni.

Nem elérhető kos

  • 292
    • Profil megtekintése
Bútor
« Válasz #6 Dátum: 2017. Augusztus 20. - 10:02:42 »
0
Módosítasz egy objectet majd megnézrd a fileban ugyan  az e a kordináta, ha nem, vagy a lementéssel van baj, vagy a hosszal, hogy kicsi a stringelésed.
 
Ha működik, a vetöltèssel van akkor problémád. Ugyan is nem láttam érték megadást, csak getelést..ha nincs pozíció adatja hiába geteled azt hozod létre.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal