10.03.2014, 22:09
Hi I've built a Toy System for players that want to add accessories to their players. It doesn't save to the file correctly. (Just saves 1 toy and over writes it each time not all 10) Also when it does save the Toy it's not getting any information from the script it's all default as if nothing has been set.
Here's my code for editing & saving.. Let me know if you need to see anything else please!
Editing The Toy:
Saving the Toy:
Here's also my enum for the Toy system:
Here's my code for editing & saving.. Let me know if you need to see anything else please!
Editing The Toy:
pawn Code:
public OnPlayerEditAttachedObject( playerid, response, index, modelid, boneid,
Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ,
Float:fRotX, Float:fRotY, Float:fRotZ,
Float:fScaleX, Float:fScaleY, Float:fScaleZ )
{
new string[128];
new purchasetoy = PurchaseToy[playerid];
new modifytoy = ModifyToy[playerid];
if(response == 1)
{
if(purchasetoy >= 0)
{
//Set the save info for the Toy
ToyInfo[playerid][purchasetoy][tCreated] = 1;
ToyInfo[playerid][purchasetoy][tEquipped] = 1;
ToyInfo[playerid][purchasetoy][tOffsetX] = fOffsetX;
ToyInfo[playerid][purchasetoy][tOffsetY] = fOffsetY;
ToyInfo[playerid][purchasetoy][tOffsetZ] = fOffsetZ;
ToyInfo[playerid][purchasetoy][tRotX] = fRotX;
ToyInfo[playerid][purchasetoy][tRotY] = fRotY;
ToyInfo[playerid][purchasetoy][tRotZ] = fRotZ;
ToyInfo[playerid][purchasetoy][tScaleX] = fScaleX;
ToyInfo[playerid][purchasetoy][tScaleY] = fScaleY;
ToyInfo[playerid][purchasetoy][tScaleZ] = fScaleZ;
SaveToys(playerid);
//Remove and then re-attach the saved Toy
RemovePlayerAttachedObject(playerid, purchasetoy);
SetPlayerAttachedObject(playerid,
ToyInfo[playerid][purchasetoy][tIndexID],
ToyInfo[playerid][purchasetoy][tModelID],
ToyInfo[playerid][purchasetoy][tBoneID],
ToyInfo[playerid][purchasetoy][tOffsetX],
ToyInfo[playerid][purchasetoy][tOffsetY],
ToyInfo[playerid][purchasetoy][tOffsetZ],
ToyInfo[playerid][purchasetoy][tRotX],
ToyInfo[playerid][purchasetoy][tRotY],
ToyInfo[playerid][purchasetoy][tRotZ],
ToyInfo[playerid][purchasetoy][tScaleX],
ToyInfo[playerid][purchasetoy][tScaleY],
ToyInfo[playerid][purchasetoy][tScaleZ]);
//Let them know what happened, Set their variables back to default
format(string, sizeof(string), "[TOYS]: You have purchased the %s for $500 on Index Slot %d", ToyInfo[playerid][purchasetoy][tName], ToyInfo[playerid][purchasetoy][tIndexID]);
SendClientMessage(playerid, COLOR_ORANGE, string);
PurchaseToy[playerid] = -1;
ToyModel[playerid] = -1;
strdel(ToyName[playerid], 0, 128);
return 1;
}
if(modifytoy >= 0)
{
//Save the Toys updated variables
ToyInfo[playerid][modifytoy][tEquipped] = 1;
ToyInfo[playerid][modifytoy][tOffsetX] = fOffsetX;
ToyInfo[playerid][modifytoy][tOffsetY] = fOffsetY;
ToyInfo[playerid][modifytoy][tOffsetZ] = fOffsetZ;
ToyInfo[playerid][modifytoy][tRotX] = fRotX;
ToyInfo[playerid][modifytoy][tRotY] = fRotY;
ToyInfo[playerid][modifytoy][tRotZ] = fRotZ;
ToyInfo[playerid][modifytoy][tScaleX] = fScaleX;
ToyInfo[playerid][modifytoy][tScaleY] = fScaleY;
ToyInfo[playerid][modifytoy][tScaleZ] = fScaleZ;
SaveToys(playerid);
//Remove the modified Toy and replace with updated variables
RemovePlayerAttachedObject(playerid, modifytoy);
SetPlayerAttachedObject(playerid,
ToyInfo[playerid][modifytoy][tIndexID],
ToyInfo[playerid][modifytoy][tModelID],
ToyInfo[playerid][modifytoy][tBoneID],
ToyInfo[playerid][modifytoy][tOffsetX],
ToyInfo[playerid][modifytoy][tOffsetY],
ToyInfo[playerid][modifytoy][tOffsetZ],
ToyInfo[playerid][modifytoy][tRotX],
ToyInfo[playerid][modifytoy][tRotY],
ToyInfo[playerid][modifytoy][tRotZ],
ToyInfo[playerid][modifytoy][tScaleX],
ToyInfo[playerid][modifytoy][tScaleY],
ToyInfo[playerid][modifytoy][tScaleZ]);
//Let the player know what happened
format(string, sizeof(string), "[TOYS]: You have edited the %s on Index Slot %d", ToyInfo[playerid][modifytoy][tName], ToyInfo[playerid][modifytoy][tIndexID]);
SendClientMessage(playerid, COLOR_ORANGE, string);
ModifyToy[playerid] = -1;
return 1;
}
}
if(response == 0)
{
if(purchasetoy >= 0)
{
//Remove the players Toy they cancelled the purchase of
RemovePlayerAttachedObject(playerid, purchasetoy);
SendClientMessage(playerid, COLOR_ORANGE, "[TOYS]: You have cancelled the purchase of your Toy");
//Reset the Toys variables to default
strdel(ToyInfo[playerid][purchasetoy][tName], 0, 128);
ToyInfo[playerid][purchasetoy][tIndexID] = 0;
ToyInfo[playerid][purchasetoy][tModelID] = 0;
ToyInfo[playerid][purchasetoy][tBoneID] = 0;
ToyInfo[playerid][purchasetoy][tOffsetX] = 0.0;
ToyInfo[playerid][purchasetoy][tOffsetY] = 0.0;
ToyInfo[playerid][purchasetoy][tOffsetZ] = 0.0;
ToyInfo[playerid][purchasetoy][tRotX] = 0.0;
ToyInfo[playerid][purchasetoy][tRotY] = 0.0;
ToyInfo[playerid][purchasetoy][tRotZ] = 0.0;
ToyInfo[playerid][purchasetoy][tScaleX] = 0.0;
ToyInfo[playerid][purchasetoy][tScaleY] = 0.0;
ToyInfo[playerid][purchasetoy][tScaleZ] = 0.0;
PurchaseToy[playerid] = -1;
ToyModel[playerid] = -1;
strdel(ToyName[playerid], 0, 128);
return 1;
}
if(modifytoy >= 0)
{
//Remove the players Toy they cancelled the editing of
RemovePlayerAttachedObject(playerid, modifytoy);
SendClientMessage(playerid, COLOR_ORANGE, "[TOYS]: You have cancelled the editing of your Toy");
//Reset the Toys variables to default
SetPlayerAttachedObject(playerid,
ToyInfo[playerid][modifytoy][tIndexID],
ToyInfo[playerid][modifytoy][tModelID],
ToyInfo[playerid][modifytoy][tBoneID],
ToyInfo[playerid][modifytoy][tOffsetX],
ToyInfo[playerid][modifytoy][tOffsetY],
ToyInfo[playerid][modifytoy][tOffsetZ],
ToyInfo[playerid][modifytoy][tRotX],
ToyInfo[playerid][modifytoy][tRotY],
ToyInfo[playerid][modifytoy][tRotZ],
ToyInfo[playerid][modifytoy][tScaleX],
ToyInfo[playerid][modifytoy][tScaleY],
ToyInfo[playerid][modifytoy][tScaleZ]);
ModifyToy[playerid] = -1;
return 1;
}
}
return 1;
}
pawn Code:
forward SaveToys(playerid);
public SaveToys(playerid)
{
for(new x = 0; x < MAX_TOYS; x++)
{
if(IsPlayerConnected(playerid))
{
if(PLogged[playerid])
{
new stringtoy[128];
format(stringtoy, sizeof(stringtoy), "South-WestRP/PlayerToys/%s.ini", GetPlayerNameEx(playerid));
new File: hFile = fopen(stringtoy, io_write);
if (hFile)
{
new var[32];
format(var, 32, "tCreated[x]=%d\n", ToyInfo[playerid][x][tCreated]);fwrite(hFile, var);
format(var, 32, "tEquipped[x]=%d\n", ToyInfo[playerid][x][tEquipped]);fwrite(hFile, var);
format(var, 32, "tName[x]=%s\n", ToyInfo[playerid][x][tName]);fwrite(hFile, var);
format(var, 32, "tIndexID[x]=%d\n", ToyInfo[playerid][x][tIndexID]);fwrite(hFile, var);
format(var, 32, "tModelID[x]=%d\n", ToyInfo[playerid][x][tModelID]);fwrite(hFile, var);
format(var, 32, "tBoneID[x]=%d\n", ToyInfo[playerid][x][tBoneID]);fwrite(hFile, var);
format(var, 32, "tOffsetX[x]=%f\n", ToyInfo[playerid][x][tOffsetX]);fwrite(hFile, var);
format(var, 32, "tOffsetY[x]=%f\n", ToyInfo[playerid][x][tOffsetY]);fwrite(hFile, var);
format(var, 32, "tOffsetZ[x]=%f\n", ToyInfo[playerid][x][tOffsetZ]);fwrite(hFile, var);
format(var, 32, "tRotX[x]=%f\n", ToyInfo[playerid][x][tRotX]);fwrite(hFile, var);
format(var, 32, "tRotY[x]=%f\n", ToyInfo[playerid][x][tRotY]);fwrite(hFile, var);
format(var, 32, "tRotZ[x]=%f\n", ToyInfo[playerid][x][tRotZ]);fwrite(hFile, var);
format(var, 32, "tScaleX[x]=%f\n", ToyInfo[playerid][x][tScaleX]);fwrite(hFile, var);
format(var, 32, "tScaleY[x]=%f\n", ToyInfo[playerid][x][tScaleY]);fwrite(hFile, var);
format(var, 32, "tScaleZ[x]=%f\n", ToyInfo[playerid][x][tScaleZ]);fwrite(hFile, var);
fclose(hFile);
}
}
}
}
return 1;
}
pawn Code:
enum ToySystem
{
tCreated,
tEquipped,
tName[128], // LINE 1049
tIndexID,
tModelID,
tBoneID,
Float: tOffsetX,
Float: tOffsetY,
Float: tOffsetZ,
Float: tRotX,
Float: tRotY,
Float: tRotZ,
Float: tScaleX,
Float: tScaleY,
Float: tScaleZ
}
new ToyInfo[MAX_PLAYERS][MAX_TOYS][ToySystem];