Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Easy vehicle saving
- Version 0.1
- ~ By [HiC]TheKiller ~
- */
- /*
- native SaveVehicle(playerid, slotid = 1)
- native LoadVehicle(playerid, slotid = 1, type = TYPE_CREATE_VEHICLE, respawntime = 999999999999)
- native DoesPlayerHaveVehicleInSlot(playerid, slotid)
- native GetVehicleModelInSlot(playerid, slotid)
- native DeleteVehicleInSlot(playerid, slotid)
- native CountPlayerVehicles(playerid)
- native ReturnPlayerVehicleSlots(playerid, arraydest[])
- native GetTotalVehiclesSaved()
- */
- //Compiler stuff
- #if defined _samp_included
- #else
- #include <a_samp>
- #define _samp_included
- #endif
- #if defined Included_tkvehicle
- #endinput
- #endif
- #define Included_tkvehicle
- //====================================
- //Defines for returns
- #define SUCCESSFUL_SAVE 1
- #define NO_VEHICLE_IN_SLOT 2
- #define UNABLE_TO_SAVE_VEHICLE 3
- #define PLAYER_NOT_IN_VEHICLE 4
- #define PLAYER_NOT_CONNECTED 5
- #define TYPE_CREATE_VEHICLE 1
- #define TYPE_ADD_STATIC_VEHICLE 2
- #define TYPE_ADD_STATIC_VEHICLE_EX 3
- //====================================
- //Global variables / used defines
- new DB:vehicledb, DBResult:queryresult;
- #define vdb_query(%1) db_query(vehicledb, %1)
- //==========================================
- //Hooks
- public OnGameModeInit()
- {
- vehicledb = db_open("vehicledb.db");
- vdb_query("CREATE TABLE IF NOT EXISTS vehicleinfo (username VARCHAR(24), vehicleinfo VARCHAR(300), slotid INT)");
- return CallLocalFunction("hooking_OnGameModeInit", "");
- }
- #if defined _ALS_OnGameModeInit
- #undef OnGameModeInit
- #else
- #define _ALS_OnGameModeInit
- #endif
- #define OnGameModeInit hooking_OnGameModeInit
- forward hooking_OnGameModeInit();
- public OnFilterScriptInit()
- {
- vehicledb = db_open("vehicledb.db");
- vdb_query("CREATE TABLE IF NOT EXISTS vehicleinfo (username VARCHAR(24), vehicleinfo VARCHAR(300), slotid INT)");
- return CallLocalFunction("hooking_OnFilterScriptInit", "");
- }
- #if defined _ALS_OnFilterScriptInit
- #undef OnFilterScriptInit
- #else
- #define _ALS_OnFilterScriptInit
- #endif
- #define OnFilterScriptInit hooking_OnFilterScriptInit
- forward hooking_OnFilterScriptInit();
- //==============================================================
- //The following is mostly Ryder's include but it has been edited
- //Credits go to Ryder :)
- //==============================================================
- #define PROPERTY_OFFSET_P(%0) \
- ((((%0) * ((%0) << 1)) << 2) + 65536*2)
- #define PROPERTY_OFFSET_C(%0) \
- ((((%0) * ((%0) << 1)) << 2) + 65536)
- public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
- {
- new str[50];
- valstr(str, paintjobid);
- setproperty(_, "", PROPERTY_OFFSET_P(vehicleid), str);
- return CallLocalFunction("hooking_OnVehiclePaintjob", "");
- }
- #if defined _ALS_OnVehiclePaintjob
- #undef OnVehiclePaintjob
- #else
- #define _ALS_OnVehiclePaintjob
- #endif
- #define OnVehiclePaintjob hooking_OnVehiclePaintjob
- forward hooking_OnVehiclePaintjob();
- stock x_ChangeVehiclePaintjob(_vehicleID, _paintjobid)
- {
- new str[50];
- valstr(str, _paintjobid);
- setproperty(_, "", PROPERTY_OFFSET_P(_vehicleID), str);
- return ChangeVehiclePaintjob(_vehicleID, _paintjobid);
- }
- stock GetVehiclePaintJob(_vehicleID)
- {
- _vehicleID = PROPERTY_OFFSET_P(_vehicleID);
- if(existproperty(_, "", _vehicleID))
- {
- new str[5];
- getproperty(_, "", _vehicleID, str);
- strunpack(str, str);
- return strval(str);
- }
- return 0;
- }
- stock x_AddStaticVehicle(modelID, Float: spawn_X, Float: spawn_Y, Float: spawn_Z, Float: z_Angle, color1, color2, paintjob = -1)
- {
- if(color1 < -1 || color2 < 0)
- {
- color1 = random(127);
- color2 = random(127);
- }
- modelID = AddStaticVehicle(modelID, spawn_X, spawn_Y, spawn_Z, z_Angle, color1, color2);
- new colorStr[24];
- format(colorStr, sizeof(colorStr), "%d-%d", color1, color2);
- setproperty(_, "", PROPERTY_OFFSET_C(modelID), colorStr);
- valstr(colorStr, paintjob);
- setproperty(_, "", PROPERTY_OFFSET_P(modelID), colorStr);
- if(paintjob != -1) ChangeVehiclePaintjob(modelID, paintjob);
- return modelID;
- }
- stock x_AddStaticVehicleEx(modelID, Float: spawn_X, Float: spawn_Y, Float: spawn_Z, Float: z_Angle, color1, color2, respawn_Delay, paintjob = -1)
- {
- if(color1 < 0 || color2 < 0)
- {
- color1 = random(127);
- color2 = random(127);
- }
- modelID = AddStaticVehicleEx(modelID, spawn_X, spawn_Y, spawn_Z, z_Angle, color1, color2, respawn_Delay);
- new colorStr[24];
- format(colorStr, sizeof(colorStr), "%d-%d", color1, color2);
- setproperty(_, "", PROPERTY_OFFSET_C(modelID), colorStr);
- valstr(colorStr, paintjob);
- setproperty(_, "", PROPERTY_OFFSET_P(modelID), colorStr);
- if(paintjob != -1) ChangeVehiclePaintjob(modelID, paintjob);
- return modelID;
- }
- stock x_CreateVehicle(modelID, Float: spawn_X, Float: spawn_Y, Float: spawn_Z, Float: z_Angle, color1, color2, respawn_Delay, paintjob = -1)
- {
- if(color1 < 0 || color2 < 0)
- {
- color1 = random(127);
- color2 = random(127);
- }
- modelID = CreateVehicle(modelID, spawn_X, spawn_Y, spawn_Z, z_Angle, color1, color2, respawn_Delay);
- new colorStr[24];
- format(colorStr, sizeof(colorStr), "%d-%d", color1, color2);
- setproperty(_, "", PROPERTY_OFFSET_C(modelID), colorStr);
- valstr(colorStr, paintjob);
- setproperty(_, "", PROPERTY_OFFSET_P(modelID), colorStr);
- if(paintjob != -1) ChangeVehiclePaintjob(modelID, paintjob);
- return modelID;
- }
- stock x_DestroyVehicle(vehicleID)
- {
- deleteproperty(_, "", PROPERTY_OFFSET_C(vehicleID));
- deleteproperty(_, "", PROPERTY_OFFSET_P(vehicleID));
- return DestroyVehicle(vehicleID);
- }
- stock x_ChangeVehicleColor(vehicleID, color1, color2)
- {
- new colorStr[24];
- format(colorStr, sizeof(colorStr), "%d-%d", color1, color2);
- setproperty(_, "", PROPERTY_OFFSET_C(vehicleID), colorStr);
- return ChangeVehicleColor(vehicleID, color1, color2);
- }
- public OnVehicleRespray(playerid, vehicleid, color1, color2)
- {
- new colorStr[24];
- format(colorStr, sizeof(colorStr), "%d-%d", color1, color2);
- setproperty(_, "", PROPERTY_OFFSET_C(vehicleid), colorStr);
- return CallLocalFunction("x_OnVehicleRespray", "iiii", playerid, vehicleid, color1, color2);
- }
- stock GetVehicleColor(vehicleID, &color1, &color2)
- {
- vehicleID = PROPERTY_OFFSET_C(vehicleID);
- if(existproperty(_, "", vehicleID))
- {
- new colorStr[24], strPos;
- getproperty(_, "", vehicleID, colorStr);
- strunpack(colorStr, colorStr);
- while(colorStr[strPos] != '-') strPos++;
- color1 = strval(colorStr);
- color2 = strval(colorStr[strPos + 1]);
- return 1;
- }
- return 0;
- }
- #define AddStaticVehicle x_AddStaticVehicle
- #define AddStaticVehicleEx x_AddStaticVehicleEx
- #define CreateVehicle x_CreateVehicle
- #define DestroyVehicle x_DestroyVehicle
- #define ChangeVehicleColor x_ChangeVehicleColor
- #define ChangeVehiclePaintjob x_ChangeVehiclePaintjob
- #if defined _ALS_OnVehicleRespray
- #undef OnVehicleRespray
- #else
- #define _ALS_OnVehicleRespray
- #endif
- #define OnVehicleRespray x_OnVehicleRespray
- forward x_OnVehicleRespray(playerid, vehicleid, color1, color2);
- //=================================================
- stock SaveVehicle(playerid, slotid = 1)
- {
- if(!IsPlayerInAnyVehicle(playerid)) return PLAYER_NOT_IN_VEHICLE;
- if(!IsPlayerConnected(playerid)) return PLAYER_NOT_CONNECTED;
- new v_color[2], v_id = GetPlayerVehicleID(playerid), vehinfo[250];
- GetVehicleColor(v_id, v_color[0], v_color[1]);
- format(vehinfo, sizeof(vehinfo), "%s%d-%d-%d-%d", vehinfo, GetVehicleModel(v_id), v_color[0], v_color[1], GetVehiclePaintJob(v_id));
- for ( new z; z < 14; z++ )
- format(vehinfo, sizeof(vehinfo), "%s-%d", vehinfo, GetVehicleComponentInSlot(v_id, z));
- new pname[24], v_query[350];
- GetPlayerName(playerid, pname, 24);
- format(v_query, sizeof(v_query), "SELECT slotid FROM vehicleinfo WHERE username = '%s' AND slotid = %d", pname, slotid);
- queryresult = vdb_query(v_query);
- if(db_num_rows(queryresult) == 1)
- format(v_query, sizeof(v_query), "UPDATE vehicleinfo SET vehicleinfo = '%s' WHERE username = '%s' AND slotid = %d", vehinfo, pname, slotid);
- else
- format(v_query, sizeof(v_query), "INSERT INTO vehicleinfo (username, vehicleinfo, slotid) VALUES ('%s', '%s', %d)", pname, vehinfo, slotid);
- db_free_result(queryresult);
- vdb_query(v_query);
- return SUCCESSFUL_SAVE;
- }
- stock LoadVehicle(playerid, slotid = 1, type = TYPE_CREATE_VEHICLE, respawntime = 999999999999)
- {
- new pname[24], v_query[150], vehinfo[350], veh_id;
- GetPlayerName(playerid, pname, 24);
- format(v_query, sizeof(v_query), "SELECT vehicleinfo FROM vehicleinfo WHERE username = '%s' AND slotid = %d", pname, slotid);
- queryresult = vdb_query(v_query);
- if(!db_num_rows(queryresult))
- {
- db_free_result(queryresult);
- return NO_VEHICLE_IN_SLOT;
- }
- else
- {
- db_get_field_assoc(queryresult, "vehicleinfo", vehinfo, sizeof(vehinfo));
- db_free_result(queryresult);
- new veh_info[19];
- #if defined sscanf
- sscanf(vehinfo, "p<->ddddddddddddddddddd", veh_info[0], veh_info[1], veh_info[2], veh_info[3],
- veh_info[4], veh_info[5], veh_info[6], veh_info[7],veh_info[8], veh_info[9], veh_info[10],
- veh_info[11], veh_info[12],veh_info[13], veh_info[14], veh_info[15], veh_info[16], veh_info[17], veh_info[18]);
- #else
- new vehinformation[19][7];
- split(vehinfo, vehinformation, '-');
- for( new xx; xx<18; xx++ )
- {
- veh_info[xx] = strval(vehinformation[xx]);
- }
- #endif
- new Float:pos[4];
- GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
- GetPlayerFacingAngle(playerid, pos[3]);
- if(type == TYPE_CREATE_VEHICLE)
- veh_id = CreateVehicle(veh_info[0], pos[0], pos[1], pos[2], pos[3], veh_info[1], veh_info[2], respawntime, veh_info[3]);
- if(type == TYPE_ADD_STATIC_VEHICLE)
- veh_id = AddStaticVehicle(veh_info[0], pos[0], pos[1], pos[2], pos[3], veh_info[1], veh_info[2], veh_info[3]);
- if(type == TYPE_ADD_STATIC_VEHICLE_EX)
- veh_id = AddStaticVehicleEx(veh_info[0], pos[0], pos[1], pos[2], pos[3], veh_info[1], veh_info[2], respawntime, veh_info[3]);
- for( new xx; xx<13; xx++ )
- if(veh_info[xx + 4] != 0) AddVehicleComponent(veh_id, veh_info[xx + 4]);
- PutPlayerInVehicle(playerid, veh_id, 0);
- }
- return veh_id;
- }
- stock DoesPlayerHaveVehicleInSlot(playerid, slotid)
- {
- new pname[24], v_query[150];
- GetPlayerName(playerid, pname, 24);
- format(v_query, sizeof(v_query), "SELECT slotid FROM vehicleinfo WHERE username = '%s' AND slotid = %d", pname, slotid);
- queryresult = vdb_query(v_query);
- new numresults = db_num_rows(queryresult);
- db_free_result(queryresult);
- if(!numresults)
- return false;
- return true;
- }
- stock GetVehicleModelInSlot(playerid, slotid)
- {
- new pname[24], v_query[150], vehinfo[200], modelid[10];
- GetPlayerName(playerid, pname, 24);
- format(v_query, sizeof(v_query), "SELECT vehicleinfo FROM vehicleinfo WHERE username = '%s' AND slotid = %d", pname, slotid);
- queryresult = vdb_query(v_query);
- if(!db_num_rows(queryresult))
- {
- db_free_result(queryresult);
- return NO_VEHICLE_IN_SLOT;
- }
- else
- {
- db_get_field_assoc(queryresult, "vehicleinfo", vehinfo, sizeof(vehinfo));
- db_free_result(queryresult);
- new id;
- while(vehinfo[id] != '-') id++;
- strmid(modelid, vehinfo, 0, id);
- }
- return strval(modelid);
- }
- stock DeleteVehicleInSlot(playerid, slotid)
- {
- new pname[24], v_query[150];
- GetPlayerName(playerid, pname, 24);
- format(v_query, sizeof(v_query), "DELETE FROM vehicleinfo WHERE username = '%s' AND slotid = %d", pname, slotid);
- vdb_query(v_query);
- return 1;
- }
- stock CountPlayerVehicles(playerid)
- {
- new pname[24], v_query[150];
- GetPlayerName(playerid, pname, 24);
- format(v_query, sizeof(v_query), "SELECT slotid FROM vehicleinfo WHERE username = '%s'", pname);
- queryresult = vdb_query(v_query);
- new numresults = db_num_rows(queryresult);
- db_free_result(queryresult);
- return numresults;
- }
- stock ReturnPlayerVehicleSlots(playerid, arraydest[])
- {
- new pname[24], v_query[150], slotid[10];
- GetPlayerName(playerid, pname, 24);
- format(v_query, sizeof(v_query), "SELECT slotid FROM vehicleinfo WHERE username = '%s'", pname);
- queryresult = vdb_query(v_query);
- new numresults = db_num_rows(queryresult);
- db_free_result(queryresult);
- if(numresults == 1)
- {
- db_get_field_assoc(queryresult, "slotid", slotid, 10);
- arraydest[0] = strval(slotid);
- }
- else
- {
- for(new r; r < numresults; r++ )
- {
- db_get_field_assoc(queryresult, "slotid", slotid, 10);
- arraydest[r] = strval(slotid);
- db_next_row(queryresult);
- }
- }
- return numresults;
- }
- stock GetTotalVehiclesSaved()
- {
- queryresult = vdb_query("SELECT slotid FROM vehicleinfo");
- new numresults = db_num_rows(queryresult);
- db_free_result(queryresult);
- return numresults;
- }
- #if defined sscanf
- #else
- //modded version of split
- stock split(const strsrc[], strdest[][], delimiter)
- {
- new li, aNum, len, lenx = strlen(strsrc);
- for (new i; i <= lenx; i++)
- {
- if(strsrc[i] == delimiter || i == lenx)
- {
- len = strmid(strdest[aNum], strsrc, li, i, 10);
- strdest[aNum][len] = 0;
- li = i+1;
- aNum++;
- }
- }
- return 1;
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement