11.01.2016, 07:13
Ok guys i've been workin on this script for a while now. I just can't figure out how to attach my edited object on vehicle. So the script goes like this :
Defines
You use /buycartoys , get a toy and it saves in your files.
Then you use /cartoys to show, edit or hide your car toys
Here is the Dialog 231
Here are the dialog callbacks
Here is the onplayereditattachedobject
Here are the model names for the dialogs
So yeah the items saves well and all but what I want to do is use /cartoys to edit the item ( must be in a car so I can get CarId ) and then when the player has finished positioning his item then it is no longer attached to the player but to the vehicle. I know it can be done by getting item's location and sending it back to AttachPlayerObjectToVehicle but still I'm unable to do it. I can pay for help and ANY help is much appreciated ! Thanks to you guys
Defines
Код:
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; }