#define MAX_GARAGES 500 static str[144], sendername[MAX_PLAYER_NAME+1]; new Text3D:GarageInfoText3D[MAX_GARAGES]; new EditingGarage[MAX_PLAYERS]; enum gInfo { gCreatedBy[MAX_PLAYER_NAME+1], gCreated, gOwnerID, Float:gOutsideX, Float:gOutsideY, Float:gOutsideZ, Float:gOutsideA, Float:gOutsideCarX, Float:gOutsideCarY, Float:gOutsideCarZ, Float:gInsideX, Float:gInsideY, Float:gInsideZ, Float:gInsideA, gLocked, gOutsidePickup, }; new GarageInfo[MAX_GARAGES][gInfo]; stock SetGarageType(gid, type) //more types might get added in the future.. { if(GarageInfo[gid][gCreated] != 0) { switch(type) { case 1: { GarageInfo[gid][gInsideX] = 2565.6995; GarageInfo[gid][gInsideY] = -832.8325; GarageInfo[gid][gInsideZ] = 68; GarageInfo[gid][gInsideA] = -90; } case 2: { GarageInfo[gid][gInsideX] = 2565.6995; GarageInfo[gid][gInsideY] = -845.6425; GarageInfo[gid][gInsideZ] = 68; GarageInfo[gid][gInsideA] = -90; } } } } CMD:editgarage(playerid, params[]) { if(PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pDev] >= 2 || PlayerInfo[playerid][pMapper] == MAPPERRANK_MANAGER || PlayerInfo[playerid][pBizMod] != 0 || PlayerInfo[playerid][pShopMod] != 0) { new action[24], nothing; if(!sscanf(params, "s[24]I(-1)", action, nothing)) { if(!strcmp(action, "create", true)) { new gType, confirmed[24]; if(!sscanf(params, "s[24]iS()[24]", action, gType, confirmed)) { if(gType < 1 || gType > 2) return SendClientMessage(playerid, COLOR_GRAD2, "Invalid garage type."); new garageid, bool:found =false; for(new i =1; i MAX_GARAGES) return SendClientMessage(playerid, COLOR_GRAD1, "Invalid garage ID."); if(GarageInfo[gid][gCreated] == 1) { EditingGarage[playerid] = gid; format(str, sizeof(str), "You are now editing garage(%d).", EditingGarage[playerid]); SendClientMessage(playerid, COLOR_GRAD1, str); } else { SendClientMessage(playerid, COLOR_GRAD1, "Invalid garage Id."); } } else { SendClientMessage(playerid, COLOR_GRAD2, "{00BFFF}Usage:{FFFFFF} /editgarage id [GARAGEID)]"); } } else if(!strcmp(action, "pickupposition", true)) { if(EditingGarage[playerid] != 0) { if(!sscanf(params, "s[24]", action)) { new Float:px, Float:py, Float:pz, Float:pa; GetPlayerPos(playerid, px, py, pz); GetPlayerFacingAngle(playerid, pa); DestroyDynamic3DTextLabel(GarageInfoText3D[EditingGarage[playerid]]); GarageInfo[EditingGarage[playerid]][gOutsideX] = px; GarageInfo[EditingGarage[playerid]][gOutsideY] = py; GarageInfo[EditingGarage[playerid]][gOutsideZ] = pz; GarageInfo[EditingGarage[playerid]][gOutsideA] = pa; GarageInfo[EditingGarage[playerid]][gOutsideCarX] = px; GarageInfo[EditingGarage[playerid]][gOutsideCarY] = py; GarageInfo[EditingGarage[playerid]][gOutsideCarZ] = pz; if(GarageInfo[EditingGarage[playerid]][gOutsidePickup]) { DestroyDynamicPickup(GarageInfo[EditingGarage[playerid]][gOutsidePickup]); } GarageInfo[EditingGarage[playerid]][gOutsidePickup] = CreateDynamicPickup(2485, 1, GarageInfo[EditingGarage[playerid]][gOutsideX], GarageInfo[EditingGarage[playerid]][gOutsideY], GarageInfo[EditingGarage[playerid]][gOutsideZ]); new garagestring[64]; //format(garagestring, sizeof(garagestring), "HID: %d", GarageInfo[EditingGarage[playerid]][gOwnerID]); format(garagestring, sizeof(garagestring), "{E2C582}Garage{FFFFFF}\nOwner ID: %d", GarageInfo[EditingGarage[playerid]][gOwnerID]); GarageInfoText3D[EditingGarage[playerid]] = CreateDynamic3DTextLabel(garagestring, COLOR_GARAGETEXT, GarageInfo[EditingGarage[playerid]][gOutsideX], GarageInfo[EditingGarage[playerid]][gOutsideY], GarageInfo[EditingGarage[playerid]][gOutsideZ] +0.5, 20.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, -1, -1, -1, 100); UpdateDynamic3DTextLabelText(GarageInfoText3D[EditingGarage[playerid]], COLOR_GARAGETEXT, garagestring); format(str, sizeof(str), "You have fully moved garage(%d) to your current position.", EditingGarage[playerid]); SendClientMessage(playerid, COLOR_GRAD1, str); } } else { SendClientMessage(playerid, COLOR_GRAD1, "You are not editing any garage."); } } else if(!strcmp(action,"enterposition",true)) { if(EditingGarage[playerid] != 0){ new Float:px, Float:py, Float:pz, Float:pa; GetPlayerPos(playerid, px, py, pz); if(IsPlayerInAnyVehicle(playerid)) { GetVehicleZAngle(GetPlayerVehicleID(playerid), pa); } else { GetPlayerFacingAngle(playerid, pa); } GarageInfo[EditingGarage[playerid]][gInsideX] = px; GarageInfo[EditingGarage[playerid]][gInsideY] = py; GarageInfo[EditingGarage[playerid]][gInsideZ] = pz; GarageInfo[EditingGarage[playerid]][gInsideA] = pa; format(str, sizeof(str), "Enter position of garage(%d) adjusted.", EditingGarage[playerid]); SendClientMessage(playerid, COLOR_GRAD1, str); } else{ SendClientMessage(playerid, COLOR_GRAD1, "You are not editing any garage."); } } else if(!strcmp(action,"exitposition",true)) { if(EditingGarage[playerid] != 0) { new Float:px, Float:py, Float:pz, Float:pa; GetPlayerPos(playerid, px, py, pz); if(IsPlayerInAnyVehicle(playerid)) { GetVehicleZAngle(GetPlayerVehicleID(playerid), pa); } else { GetPlayerFacingAngle(playerid, pa); } GarageInfo[EditingGarage[playerid]][gOutsideCarX] = px; GarageInfo[EditingGarage[playerid]][gOutsideCarY] = py; GarageInfo[EditingGarage[playerid]][gOutsideCarZ] = pz; GarageInfo[EditingGarage[playerid]][gOutsideA] = pa; format(str, sizeof(str), "Exit position of garage(%d) adjusted.", EditingGarage[playerid]); SendClientMessage(playerid, COLOR_GRAD1, str); } else{ SendClientMessage(playerid, COLOR_GRAD1, " You are not editing any garage !"); } } /*else if(!strcmp(action, "houseid", true)) { if(EditingGarage[playerid] != 0) { new hid; if(!sscanf(params, "s[24]i", action, hid)) { if(HouseInfo[hid][hCreated] == 1) { GarageInfo[EditingGarage[playerid]][gOwnerID] = hid; format(str, sizeof(str), "Garage(%d) was succesfully connected to house %i.", EditingGarage[playerid], hid); SendClientMessage(playerid, COLOR_GRAD1, str); new garagestring[64]; //format(garagestring, sizeof(garagestring), "HID: %d", GarageInfo[EditingGarage[playerid]][gOwnerID]); format(garagestring, sizeof(garagestring), "{E2C582}Garage{FFFFFF}\nOwner ID: %d", GarageInfo[EditingGarage[playerid]][gOwnerID]); UpdateDynamic3DTextLabelText(GarageInfoText3D[EditingGarage[playerid]], COLOR_DARKRED, garagestring); } else { SendClientMessage(playerid, COLOR_GRAD1, "Invalid house ID."); } } else { SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /editgarage houseid [HOUSEID(to connect the garage to)]"); } } else { SendClientMessage(playerid, COLOR_GRAD1, "You are not editing any garage."); } }*/ else if(!strcmp(action, "ownerid", true)) { if(EditingGarage[playerid] != 0) { new oid; if(!sscanf(params, "s[24]i", action, oid)) { GarageInfo[EditingGarage[playerid]][gOwnerID] = oid; format(str, sizeof(str), "Garage(%d) was succesfully connected to Owner ID %i.", EditingGarage[playerid], oid); SendClientMessage(playerid, COLOR_GRAD1, str); new garagestring[64]; //format(garagestring, sizeof(garagestring), "HID: %d", GarageInfo[EditingGarage[playerid]][gOwnerID]); format(garagestring, sizeof(garagestring), "{E2C582}Garage{FFFFFF}\nOwner ID: %d", GarageInfo[EditingGarage[playerid]][gOwnerID]); UpdateDynamic3DTextLabelText(GarageInfoText3D[EditingGarage[playerid]], COLOR_DARKRED, garagestring); } else { SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /editgarage ownerid [/nametosql for the SQL ID]"); } } else { SendClientMessage(playerid, COLOR_GRAD1, "You are not editing any garage."); } } else if(!strcmp(action, "delete", true)) { if(EditingGarage[playerid] != 0) { strmid(GarageInfo[EditingGarage[playerid]][gCreatedBy], "", 0, strlen("None"), 255); DestroyDynamic3DTextLabel(GarageInfoText3D[EditingGarage[playerid]]); GarageInfoText3D[EditingGarage[playerid]] = Text3D:INVALID_3DTEXT_ID; GarageInfo[EditingGarage[playerid]][gOutsideX] = 0; GarageInfo[EditingGarage[playerid]][gOutsideY] = 0; GarageInfo[EditingGarage[playerid]][gOutsideZ] = 0; GarageInfo[EditingGarage[playerid]][gOutsideA] = 0; GarageInfo[EditingGarage[playerid]][gOutsideCarX] = 0; GarageInfo[EditingGarage[playerid]][gOutsideCarY] = 0; GarageInfo[EditingGarage[playerid]][gOutsideCarZ] = 0; GarageInfo[EditingGarage[playerid]][gInsideX] = 0; GarageInfo[EditingGarage[playerid]][gInsideY] = 0; GarageInfo[EditingGarage[playerid]][gInsideZ] = 0; GarageInfo[EditingGarage[playerid]][gInsideA] = 0; GarageInfo[EditingGarage[playerid]][gLocked] = 0; GarageInfo[EditingGarage[playerid]][gOwnerID] = 0; GarageInfo[EditingGarage[playerid]][gCreated] = 0; if(GarageInfo[EditingGarage[playerid]][gOutsidePickup]) { DestroyDynamicPickup(GarageInfo[EditingGarage[playerid]][gOutsidePickup]); } format(str, sizeof(str), "You have fully deleted garage(%d).", EditingGarage[playerid]); SendClientMessage(playerid, COLOR_GRAD1, str); format(str, sizeof(str), "{FF0000}AdmWarning{FFFFFF}: %s has deleted garage(%d).", PlayerICName(playerid), EditingGarage[playerid]); ABroadCast(COLOR_WHITE, str, 1); EditingGarage[playerid] = 0; } else { SendClientMessage(playerid, COLOR_GRAD1, "You are not editing any garage."); } } else if(!strcmp(action, "stop", true)) { if(EditingGarage[playerid] != 0) { SendClientMessage(playerid, COLOR_GRAD1, "Editing progress was ended."); EditingGarage[playerid] = 0; } else { SendClientMessage(playerid, COLOR_GRAD1, "You are not editing any garage."); } } else { SendClientMessage(playerid, COLOR_WHITE, "Invalid action."); } } else { SendClientMessage(playerid, COLOR_GREY, "{00BFFF}Usage:{FFFFFF} /editgarage [action]"); SendClientMessage(playerid, COLOR_GREY, "Available actions: create, id, pickupposition, enterposition, exitposition, houseid, delete, stop"); } } else { AdmErrorMsg; } return 1; } CMD:gotogarage(playerid, params[]) { new gid; if(PlayerInfo[playerid][pDev] >= 2 || PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pMapper] == MAPPERRANK_MANAGER) { if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING) { SendClientMessage(playerid, COLOR_GREY, "You can not do that while spectating."); return 1; } if(!sscanf(params, "d", gid)) { if(gid > MAX_GARAGES) { return SendClientMessage(playerid, COLOR_GRAD1, "Garage ID was above the max garages."); } if(GarageInfo[gid][gCreated] == 1) { SetPlayerPos(playerid, GarageInfo[gid][gOutsideX], GarageInfo[gid][gOutsideY], GarageInfo[gid][gOutsideZ]); SetPlayerInterior(playerid, 0); PlayerInfo[playerid][pInt] = 0; SetPlayerVirtualWorld(playerid, 0); PlayerInfo[playerid][pVirtualWorld] = 0; format(str, sizeof(str), "~w~Teleporting to ~b~Garage~w~."); displayCenterHUDInfo(playerid, str, 8); //display for 8 seconds } else { SendClientMessage(playerid, COLOR_GRAD1, "Invalid garage ID."); } } else { SendClientMessage(playerid, COLOR_GRAD2, "{00BFFF}Usage:{FFFFFF} /gotogarage [Garageid]"); } } else { AdmErrorMsg; } return 1; } CMD:garageinfo(playerid, params[]) { if(PlayerInfo[playerid][pDev] >= 2 || PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pMapper] == MAPPERRANK_MANAGER) { for(new gr =1; gr = 4 || PlayerInfo[playerid][pMapper] == 3) { SendClientMessage(playerid, COLOR_YELLOW, "____________________________________________"); SendClientMessage(playerid, COLOR_WHITE, "COMMANDS: /editgarage, /gotogarage, /garageinfo"); } else { AdmErrorMsg; } return 1; }