/* Dynamic vehicle system with ORM created by justice96 Date created: 05/08/2015 Last updated: 07/08/2015 Note: Do not remove my name on credits! */ // Includes #include #include #include #include #include // MySQL connection details #define HOST "localhost" #define USER "root" #define PASS "" #define DATABASE "Database" // Function (forward & public) > (function) #define function%0(%1) \ forward%0(%1); public%0(%1) #define SEM(%0,%1); SendClientMessage(%0,COLOR_GREY,%1); // thanks to Tianmetal #define forex(%0,%1) for(new %0 = 0; %0 < %1; %0++) #define delstr(%0) strdel(%0,0,strlen(%0)) #define IsNull(%1) ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1])))) // updated function. // Main Colors #define COLOR_LIGHTBLUE 0x33CCFFAA #define COLOR_GREY 0xAFAFAFAA // Vehicle Func Define #define MAX_SERVER_VEHICLES 100 #define MAX_PLATE_NAME 30 // Iterator new Iterator:Vehicles; // Enumrators enum server_veh { ORM:ORM_ID, ID, Model, Color[2], Plate[MAX_PLATE_NAME], Float:Spawn[4] }; new ServerVehicle[MAX_SERVER_VEHICLES][server_veh]; new VehicleID[MAX_SERVER_VEHICLES]; new Database; #if defined FILTERSCRIPT public OnFilterScriptInit() { print("\n--------------------------------------"); print(" [Debug]: justice96 (Dynamic Vehicle ORM) loaded."); print("--------------------------------------\n"); Database = mysql_connect(HOST, USER, DATABASE, PASS); mysql_log(LOG_ERROR | LOG_WARNING); mysql_pquery(Database,"SELECT * FROM `server_vehicles` ORDER BY `veh_id` ASC","Vehicle_Load",""); // Load _ Vehicles by ascending AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); return 1; } public OnFilterScriptExit() { return 1; } #else main() { print("\n----------------------------------"); print(" Blank Gamemode by your name here"); print("----------------------------------\n"); } #endif public OnGameModeInit() { // Don't use these lines if it's a filterscript SetGameModeText("Blank Script"); return 1; } public OnGameModeExit() { return 1; } public OnPlayerRequestClass(playerid, classid) { SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746); return 1; } public OnPlayerConnect(playerid) { return 1; } public OnPlayerDisconnect(playerid, reason) { return 1; } public OnPlayerSpawn(playerid) { return 1; } public OnPlayerDeath(playerid, killerid, reason) { return 1; } public OnVehicleSpawn(vehicleid) { return 1; } public OnVehicleDeath(vehicleid, killerid) { return 1; } public OnPlayerText(playerid, text[]) { return 1; } // SSCANF Menu (cmd) SSCANF:servervehiclemenu(string[]) { if(!strcmp(string,"create",true)) return 1; else if(!strcmp(string,"add",true)) return 1; else if(!strcmp(string,"make",true)) return 1; else if(!strcmp(string,"remove",true)) return 2; else if(!strcmp(string,"delete",true)) return 2; else if(!strcmp(string,"destroy",true)) return 2; else if(!strcmp(string,"park",true)) return 3; else if(!strcmp(string,"parkvehicle",true)) return 3; else if(!strcmp(string,"plate",true)) return 4; else if(!strcmp(string,"setplate",true)) return 4; else if(!strcmp(string,"color",true)) return 5; else if(!strcmp(string,"colour",true)) return 5; else if(!strcmp(string,"setcolour",true)) return 5; else if(!strcmp(string,"setcolor",true)) return 5; return 0; } function Vehicle_Load() { new rows = cache_get_row_count(Database); if(rows != 0) { forex(row,rows) { new vehicleid = cache_get_row_int(row,0,Database); new ORM:ormid = ServerVehicle[vehicleid][ORM_ID] = orm_create("server_vehicles",Database); orm_addvar_int(ormid,ServerVehicle[vehicleid][ID],"veh_id"); orm_addvar_string(ormid,ServerVehicle[vehicleid][Plate],MAX_PLATE_NAME,"veh_plate"); orm_addvar_int(ormid,ServerVehicle[vehicleid][Model],"veh_model"); orm_addvar_int(ormid,ServerVehicle[vehicleid][Color][0],"veh_color_1"); orm_addvar_int(ormid,ServerVehicle[vehicleid][Color][1],"veh_color_2"); orm_addvar_float(ormid,ServerVehicle[vehicleid][Spawn][0],"veh_x"); orm_addvar_float(ormid,ServerVehicle[vehicleid][Spawn][1],"veh_y"); orm_addvar_float(ormid,ServerVehicle[vehicleid][Spawn][2],"veh_z"); orm_addvar_float(ormid,ServerVehicle[vehicleid][Spawn][3],"veh_a"); orm_apply_cache(ormid,row); orm_setkey(ormid,"veh_id"); Vehicle_Create(vehicleid,INVALID_PLAYER_ID); } } return 1; } function Vehicle_Create(vehicleid,playerid) { new string[144]; VehicleID[vehicleid] = CreateVehicle(ServerVehicle[vehicleid][Model],ServerVehicle[vehicleid][Spawn][0],ServerVehicle[vehicleid][Spawn][1],ServerVehicle[vehicleid][Spawn][2],ServerVehicle[vehicleid][Spawn][3],ServerVehicle[vehicleid][Color][0],ServerVehicle[vehicleid][Color][1],-1); SetVehicleNumberPlate(ServerVehicle[vehicleid][ID],ServerVehicle[vehicleid][Plate]); Iter_Add(Vehicles,vehicleid); if(playerid != INVALID_PLAYER_ID) { format(string,sizeof(string),": {ffffff}(Server) Vehicle has been created with ({ffff00}id:%d{ffffff})({ffff00}plate:%s{ffffff})",vehicleid,ServerVehicle[vehicleid][Plate]); SendClientMessage(playerid,COLOR_LIGHTBLUE,string); } return 1; } CMD:vehicle(playerid,params[]) { new action,string[128]; if(sscanf(params,"kS()[128]",action,string)) return SEM(playerid,": /vehicle [create/delete/park/plate/color]"); else { switch(action) { case 1: { new model,color1,color2,vehplate[MAX_PLATE_NAME]; if(sscanf(string,"ddds["#MAX_PLATE_NAME"]",model,color1,color2,vehplate)) return SEM(playerid,": /vehicle create [modelid] [color 1] [color 2] [plate name (max 30 chars)]"); if(model < 400 || model > 611) return SEM(playerid,": You have entered an invalid modelid !"); if(Iter_Free(Vehicles) == -1) return SEM(playerid,": No free vehicle slot available !"); if(color1 < 0 || color1 > 255 || color2 < 0 || color2 > 255) return SEM(playerid,": You have entered an invalid colorid !"); new vehicleid = Iter_Free(Vehicles); ServerVehicle[vehicleid][Model] = model; ServerVehicle[vehicleid][ID] = vehicleid; ServerVehicle[vehicleid][Color][0] = color1; ServerVehicle[vehicleid][Color][1] = color2; strmid(ServerVehicle[vehicleid][Plate],vehplate,0,strlen(vehplate),MAX_PLATE_NAME); GetPlayerPos(playerid,ServerVehicle[vehicleid][Spawn][0],ServerVehicle[vehicleid][Spawn][1],ServerVehicle[vehicleid][Spawn][2]); GetPlayerFacingAngle(playerid,ServerVehicle[vehicleid][Spawn][3]); new ORM:ormid = ServerVehicle[vehicleid][ORM_ID] = orm_create("server_vehicles",Database); orm_addvar_int(ormid,ServerVehicle[vehicleid][ID],"veh_id"); orm_addvar_string(ormid,ServerVehicle[vehicleid][Plate],MAX_PLATE_NAME,"veh_plate"); orm_addvar_int(ormid,ServerVehicle[vehicleid][Model],"veh_model"); orm_addvar_int(ormid,ServerVehicle[vehicleid][Color][0],"veh_color_1"); orm_addvar_int(ormid,ServerVehicle[vehicleid][Color][1],"veh_color_2"); orm_addvar_float(ormid,ServerVehicle[vehicleid][Spawn][0],"veh_x"); orm_addvar_float(ormid,ServerVehicle[vehicleid][Spawn][1],"veh_y"); orm_addvar_float(ormid,ServerVehicle[vehicleid][Spawn][2],"veh_z"); orm_addvar_float(ormid,ServerVehicle[vehicleid][Spawn][3],"veh_a"); orm_insert(ormid,"Vehicle_Create","dd",vehicleid,playerid); orm_setkey(ormid,"veh_id"); } case 2: { if(IsNull(string)) return SEM(playerid,": /vehicle delete [vehicleid]"); new vehicleid = strval(string); if(Iter_Contains(Vehicles,vehicleid)) { format(string,sizeof(string),": {ffffff}(Server) Vehicle with {ffff00}id %d {ffffff}has been deleted!",vehicleid); SendClientMessage(playerid,COLOR_LIGHTBLUE,string); DestroyVehicle(VehicleID[vehicleid]); orm_delete(ServerVehicle[vehicleid][ORM_ID],true); Iter_Remove(Vehicles,vehicleid); } else SEM(playerid,": Invalid vehicleid !"); } case 3: { if(IsNull(string)) return SEM(playerid,": /vehicle park [vehicleid]"); new vehicleid = strval(string); if(Iter_Contains(Vehicles,vehicleid)) { GetPlayerPos(playerid,ServerVehicle[vehicleid][Spawn][0],ServerVehicle[vehicleid][Spawn][1],ServerVehicle[vehicleid][Spawn][2]); GetPlayerFacingAngle(playerid,ServerVehicle[vehicleid][Spawn][3]); format(string,sizeof(string),": {ffffff}(Server) Vehicle with {ffff00}id %d {ffffff}has been parked!",vehicleid); SendClientMessage(playerid,COLOR_LIGHTBLUE,string); orm_update(ServerVehicle[vehicleid][ORM_ID]); } else SEM(playerid,": Invalid vehicleid !"); } case 4: { new vehicleid,newplate[MAX_PLATE_NAME]; if(sscanf(string,"ds["#MAX_PLATE_NAME"]",vehicleid,newplate)) return SEM(playerid,": /vehicle plate [modelid/vehicleid] [plate name (max 30 chars)]"); if(Iter_Contains(Vehicles,vehicleid)) { strmid(ServerVehicle[vehicleid][Plate],newplate,0,strlen(newplate),MAX_PLATE_NAME); format(string,sizeof(string),": {ffffff}You have changed the vehicle name to '{ffff00}%s{ffffff}'",newplate); SendClientMessage(playerid,COLOR_LIGHTBLUE,string); orm_update(ServerVehicle[vehicleid][ORM_ID]); } else SEM(playerid,": Invalid vehicleid !"); } case 5: { new vehicleid,color1,color2; if(sscanf(string,"ddd",vehicleid,color1,color2)) return SEM(playerid,": /vehicle color [modelid/vehicleid] [color 1] [color 2]"); if(Iter_Contains(Vehicles,vehicleid)) { ServerVehicle[vehicleid][Color][0] = color1; ServerVehicle[vehicleid][Color][1] = color2; format(string,sizeof(string),": {ffffff}You have changed the vehicle color with '{ffff00}id %d{ffffff}'",vehicleid); SendClientMessage(playerid,COLOR_LIGHTBLUE,string); orm_update(ServerVehicle[vehicleid][ORM_ID]); } else SEM(playerid,": Invalid vehicleid !"); } default: SEM(playerid,": /vehicle [create/delete/park/plate/color]"); } } return CMD_SUCCESS; } public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) { return 1; } public OnPlayerExitVehicle(playerid, vehicleid) { return 1; } public OnPlayerStateChange(playerid, newstate, oldstate) { return 1; } public OnPlayerEnterCheckpoint(playerid) { return 1; } public OnPlayerLeaveCheckpoint(playerid) { return 1; } public OnPlayerEnterRaceCheckpoint(playerid) { return 1; } public OnPlayerLeaveRaceCheckpoint(playerid) { return 1; } public OnRconCommand(cmd[]) { return 1; } public OnPlayerRequestSpawn(playerid) { return 1; } public OnObjectMoved(objectid) { return 1; } public OnPlayerObjectMoved(playerid, objectid) { return 1; } public OnPlayerPickUpPickup(playerid, pickupid) { return 1; } public OnVehicleMod(playerid, vehicleid, componentid) { return 1; } public OnVehiclePaintjob(playerid, vehicleid, paintjobid) { return 1; } public OnVehicleRespray(playerid, vehicleid, color1, color2) { return 1; } public OnPlayerSelectedMenuRow(playerid, row) { return 1; } public OnPlayerExitedMenu(playerid) { return 1; } public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid) { return 1; } public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { return 1; } public OnRconLoginAttempt(ip[], password[], success) { return 1; } public OnPlayerUpdate(playerid) { return 1; } public OnPlayerStreamIn(playerid, forplayerid) { return 1; } public OnPlayerStreamOut(playerid, forplayerid) { return 1; } public OnVehicleStreamIn(vehicleid, forplayerid) { return 1; } public OnVehicleStreamOut(vehicleid, forplayerid) { return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { return 1; } public OnPlayerClickPlayer(playerid, clickedplayerid, source) { return 1; }