new Ctoyslot[MAX_PLAYERS]; pCToyModel[3], Float:pCToyX[3], Float:pCToyY[3], Float:pCToyZ[3], Float:pCToyRX[3], Float:pCToyRY[3], Float:pCToyRZ[3], Float:pCToySX[3], Float:pCToySY[3], Float:pCToySZ[3],
for(new i=0; i<3; i++) // Toys { PlayerInfo[playerid][pCToyModel][i] = 0; PlayerInfo[playerid][pCToyX][i] = 0; PlayerInfo[playerid][pCToyY][i] = 0; PlayerInfo[playerid][pCToyZ][i] = 0; PlayerInfo[playerid][pCToyRX][i] = 0; PlayerInfo[playerid][pCToyRY][i] = 0; PlayerInfo[playerid][pCToyRZ][i] = 0; PlayerInfo[playerid][pCToySX][i] = 0; PlayerInfo[playerid][pCToySY][i] = 0; PlayerInfo[playerid][pCToySZ][i] = 0;
CMD:buycartoys(playerid, params[]) { new option, index, model, idx = GetPlayerVirtualWorld(playerid)-100, string[128]; if(!IsPlayerLoggedIn(playerid) || PlayerInfo[playerid][pAsshole] == 1) return SendClientMessage(playerid, COLOR_GREY, "You are not allowed to use command."); if (IsPlayerInRangeOfPoint(playerid, 3.0, 1891.9252, -2328.7129, 13.5469)) return SendClientMessage(playerid, COLOR_GREY, "You are not inside a Garage."); if(sscanf(params, "ii", option, index)) { ShowPlayerDialog(playerid, 9999, DIALOG_STYLE_MSGBOX, "USAGE: /buycartoys [Item Number] [Toy slot (0-3)]", "Surfboard = 1 | Snowplow = 2 | GM454 (Motor) = 3", "Close", "Close"); return 1; } if(index < 0 || index > 3) return SendClientMessage(playerid, COLOR_GREY, "Slots are between 0 and 3."); switch(option) { case 1 : model = 2404; case 2 : model = 19601; case 3 : model = 19917; } if(PlayerInfo[playerid][pMoney] < 300) return SendClientMessage(playerid, COLOR_GREY, "You don't have enough money to do this."); PlayerInfo[playerid][pCToyModel][index] = model; GiveDodMoney(playerid, -300); format(string, sizeof(string), "* %s has bought a car toy for $300.", RPN(playerid), params); SendNearbyMessage(playerid, 15, string, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE); SendClientMessage(playerid, COLOR_WHITE, " You can view and edit your toys using /cartoys."); return 1; }
CMD:cartoys(playerid, params[]) { if(!IsPlayerLoggedIn(playerid) || PlayerInfo[playerid][pAsshole] == 1) return SendClientMessage(playerid, COLOR_GREY, "You are not allowed to use command."); { ShowDialog(playerid, 231); } return 1; }
else if(dialogid == 231) { if(response) { switch(listitem) { case 0: Ctoyslot[playerid] = 0; case 1: Ctoyslot[playerid] = 1; case 2: Ctoyslot[playerid] = 2; } new index = Ctoyslot[playerid]; if(PlayerInfo[playerid][pCToyModel][index] == 0) { ShowDialog(playerid, 231); } else { ShowDialog(playerid, 241); } } } else if(dialogid == 241) { if(response) { switch(listitem) { case 0: { if(!IsPlayerAttachedObjectSlotUsed(playerid, Ctoyslot[playerid])) { ShowDialog(playerid, 251); } else { RemovePlayerAttachedObject(playerid, Ctoyslot[playerid]); } } case 1: { EditAttachedObject(playerid, Ctoyslot[playerid]); } } } else ShowDialog(playerid, 231); } else if(dialogid == 251) { if(response) { new bone, index = Ctoyslot[playerid]; switch(listitem) { case 0: bone = 1; case 1: bone = 1; } SetPlayerAttachedObject(playerid, index, PlayerInfo[playerid][pCToyModel][index], bone, Float:PlayerInfo[playerid][pCToyX][index], Float:PlayerInfo[playerid][pCToyY][index], Float:PlayerInfo[playerid][pCToyZ][index], Float:PlayerInfo[playerid][pCToyRX][index], Float:PlayerInfo[playerid][pToyRY][index], Float:PlayerInfo[playerid][pCToyRZ][index], Float:PlayerInfo[playerid][pCToySX][index], Float:PlayerInfo[playerid][pCToySY][index], Float:PlayerInfo[playerid][pCToySZ][index]); new vehicle; vehicle = GetPlayerVehicleID(playerid); AttachPlayerObjectToVehicle(playerid, PlayerInfo[playerid][pCToyModel][index], vehicle, Float:PlayerInfo[playerid][pToyX][index], Float:PlayerInfo[playerid][pToyY][index], Float:PlayerInfo[playerid][pToyZ][index], Float:PlayerInfo[playerid][pToyRX][index], Float:PlayerInfo[playerid][pToyRY][index], Float:PlayerInfo[playerid][pToyRZ][index]); } else ShowDialog(playerid, 241); }
case 231: // Car Toys { // 1 SurfBoard, 2 Snowplow, 3 GM 454 Motor format(string, sizeof(string), "Slot 0 (%s)\nSlot 1 (%s)\nSlot 2 (%s)", RCTN(playerid, 0), RCTN(playerid, 1), RCTN(playerid, 2)); ShowPlayerDialog(playerid, 231, DIALOG_STYLE_LIST, "Your car toys", string, "Choose", "Cancel"); } case 241: // Toy Add/Remove/Edit { new info[16], type[16]; if(!IsPlayerAttachedObjectSlotUsed(playerid, Ctoyslot[playerid])) format(info, sizeof(info), "Show Car Toy"); else format(info, sizeof(info), "Hide Car Toy"); format(string, sizeof(string), "%s\nEdit Car Toy", info); format(type, sizeof(type), "Car Toy Slot %d", Ctoyslot[playerid]); ShowPlayerDialog(playerid, 241, DIALOG_STYLE_LIST, type, string, "Choose", "Back"); } case 251: // Car Toy adding bones { ShowPlayerDialog(playerid, 251, DIALOG_STYLE_LIST, "Confirm Car Toy Spawn", "Yes\nNo", "Choose", "Back"); }
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) { SetPlayerAttachedObject(playerid, index, modelid, boneid, Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ, Float:fRotX, Float:fRotY, Float:fRotZ, Float:fScaleX, Float:fScaleY, Float:fScaleZ); PlayerInfo[playerid][pCToyX][index] = fOffsetX; PlayerInfo[playerid][pCToyY][index] = fOffsetY; PlayerInfo[playerid][pCToyZ][index] = fOffsetZ; PlayerInfo[playerid][pCToyRX][index] = fRotX; PlayerInfo[playerid][pCToyRY][index] = fRotY; PlayerInfo[playerid][pCToyRZ][index] = fRotZ; PlayerInfo[playerid][pCToySX][index] = fScaleX; PlayerInfo[playerid][pCToySY][index] = fScaleY; PlayerInfo[playerid][pCToySZ][index] = fScaleZ; return 1; }
stock RCTN(playerid, slot) { new name[241], Ctoy = PlayerInfo[playerid][pCToyModel][slot]; format(name, sizeof(name), "None"); // Model assigning if(Ctoy >= 2403 && Ctoy <= 2405) format(name, sizeof(name), "Surfboard"); else if(Ctoy >= 19600 && Ctoy <= 19602) format(name, sizeof(name), "Snowplow"); else if(Ctoy >= 19916 && Ctoy <= 19918) format(name, sizeof(name), "GM 454"); return name; }
Description | Object | Player Object | Attached Object |
Create with | CreateObject | CreatePlayerObject | - |
Set with | - | - | SetPlayerAttachedObject |
Destroy with | DestroyObject | DestroyPlayerObject | - |
Remove with | - | - | RemovePlayerAttachedObject |
Select with (cursor) | SelectObject | SelectObject | - |
Check if valid with | IsValidObject | IsValidPlayerObject | IsPlayerAttachedObjectSlotUsed |
Edit with | EditObject | EditPlayerObject | EditAttachedObject |
Set pos with | SetObjectPos | SetPlayerObjectPos | SetPlayerAttachedObject |
Set rot with | SetObjectRot | SetPlayerObjectRot | SetPlayerAttachedObject |
Set material with | SetObjectMaterial | SetPlayerObjectMaterial | SetPlayerAttachedObject (only color at index 0 and 1) |
Set material text with | SetObjectMaterialText | SetPlayerObjectMaterialText | - |
Move with | MoveObject | MovePlayerObject | - |
Attach to object with | AttachObjectToObject | - | - |
Attach to player with | AttachObjectToPlayer | AttachPlayerObjectToPlayer | SetPlayerAttachedObject |
Attach to vehicle with | AttachObjectToVehicle | AttachPlayerObjectToVehicle | - |
Attach camera with | AttachCameraToObject | AttachCameraToPlayerObject | - |
Object | Player Object | Attached Object |
OnObjectMoved | OnPlayerObjectMoved | - |
OnPlayerEditObject | OnPlayerEditObject | OnPlayerEditAttachedObject |
OnPlayerSelectObject | OnPlayerSelectObject | - |
SetPlayerAttachedObject(playerid, index, PlayerInfo[playerid][pCToyModel][index], bone, Float:PlayerInfo[playerid][pCToyX][index], Float:PlayerInfo[playerid][pCToyY][index], Float:PlayerInfo[playerid][pCToyZ][index], Float:PlayerInfo[playerid][pCToyRX][index], Float:PlayerInfo[playerid][pToyRY][index], Float:PlayerInfo[playerid][pCToyRZ][index], Float:PlayerInfo[playerid][pCToySX][index], Float:PlayerInfo[playerid][pCToySY][index], Float:PlayerInfo[playerid][pCToySZ][index]); new vehicle; vehicle = GetPlayerVehicleID(playerid); AttachPlayerObjectToVehicle(playerid, PlayerInfo[playerid][pCToyModel][index], vehicle, Float:PlayerInfo[playerid][pToyX][index], Float:PlayerInfo[playerid][pToyY][index], Float:PlayerInfo[playerid][pToyZ][index], Float:PlayerInfo[playerid][pToyRX][index], Float:PlayerInfo[playerid][pToyRY][index], Float:PlayerInfo[playerid][pToyRZ][index]);
Thanks for the answer ! I didn't know that those functions couldn't be used together but still: I am convinced that it can be made this way : Spawn the object at the player's position then get the player/vehicle position and then use the EditAttachedObject function to move it around. Also, when it's finished use the AttachObjectToVehicle on the coordinates returned by EditAttachedObject
I'll explain it again in other words so we don't get misunderstood : Lets say the player creates an object ; then this object positions are saved on a file ( so float x , y , z , rx, ry, and rz ( no sizes ) ) and that editplayerobject also read and save those files. Then , lets say that when the object is done editing , it creates an object ( like you said with the good function ) and then reads from previously saved positions . I dont know if im mistaken or if you understand what i mean. Thanks a lot by the way |