CMD:lock(playerid, params[]) { static id = -1; if (!IsPlayerInAnyVehicle(playerid) && (id = (House_Inside(playerid) == -1) ? (House_Nearest(playerid)) : (House_Inside(playerid))) != -1 && House_IsOwner(playerid, id)) { if (!HouseData[id][houseLocked]) { HouseData[id][houseLocked] = true; House_Save(id); ShowPlayerFooter(playerid, "You have ~r~locked~w~ your house!"); PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0); } else { HouseData[id][houseLocked] = false; House_Save(id); ShowPlayerFooter(playerid, "You have ~g~unlocked~w~ your house!"); PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0); } } else if (!IsPlayerInAnyVehicle(playerid) && (id = (Business_Inside(playerid) == -1) ? (Business_Nearest(playerid)) : (Business_Inside(playerid))) != -1) { if (Business_IsOwner(playerid, id)) { if (!BusinessData[id][bizLocked]) { BusinessData[id][bizLocked] = true; Business_Refresh(id); Business_Save(id); ShowPlayerFooter(playerid, "You have ~r~locked~w~ the business!"); PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0); } else { BusinessData[id][bizLocked] = false; Business_Refresh(id); Business_Save(id); ShowPlayerFooter(playerid, "You have ~g~unlocked~w~ the business!"); PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0); } } } else if (!IsPlayerInAnyVehicle(playerid) && (id = (Entrance_Inside(playerid) == -1) ? (Entrance_Nearest(playerid)) : (Entrance_Inside(playerid))) != -1) { if (strlen(EntranceData[id][entrancePass])) { Dialog_Show(playerid, EntrancePass, DIALOG_STYLE_INPUT, "Entrance Pass", "Please enter the password for this entrance:", "Submit", "Cancel"); } } else if ((id = Car_Nearest(playerid)) != -1) { static engine, lights, alarm, doors, bonnet, boot, objective; GetVehicleParamsEx(CarData[id][carVehicle], engine, lights, alarm, doors, bonnet, boot, objective); if (Car_IsOwner(playerid, id) || (PlayerData[playerid][pFaction] != -1 && CarData[id][carFaction] == GetFactionType(playerid))) { if (!CarData[id][carLocked]) { CarData[id][carLocked] = true; Car_Save(id); ShowPlayerFooter(playerid, "You have ~r~locked~w~ the vehicle!"); PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0); SetVehicleParamsEx(CarData[id][carVehicle], engine, lights, alarm, 1, bonnet, boot, objective); } else { CarData[id][carLocked] = false; Car_Save(id); ShowPlayerFooter(playerid, "You have ~g~unlocked~w~ the vehicle!"); PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0); SetVehicleParamsEx(CarData[id][carVehicle], engine, lights, alarm, 0, bonnet, boot, objective); } } } else SendErrorMessage(playerid, "You are not in range of anything you can lock."); return 1; }
Car_Nearest(playerid) { static Float:fX, Float:fY, Float:fZ; for (new i = 0; i != MAX_DYNAMIC_CARS; i ++) if (CarData[i][carExists]) { GetVehiclePos(CarData[i][carVehicle], fX, fY, fZ); if (IsPlayerInRangeOfPoint(playerid, 3.0, fX, fY, fZ)) { return i; } } return -1; }
I always check if the vehicle is streamed in for the player before checking the distance... Just as a random thing.
|
You'll probably want to test it more, as this is likely to be something else. Test with more players, try respawn the car, try using someone elses car, to see if it is going to pick up that you aren't actually near it.
You also should mind out having too much on that one command. House and Business, no worries... But you could make the vehicle lock work off another command to make it more defined. |