Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * 'Scripter: CaptainBoi'
- * 'Version: 1.0'
- * 'Released: 08-09-2018'
- *
- */
- /* Includes */
- #include <a_samp>
- #include <a_mysql>
- #include <streamer>
- #include <sscanf2>
- #include <zcmd>
- /* MySQL Entities */
- #define MYSQL_HOST ""
- #define MYSQL_USER ""
- #define MYSQL_PASS ""
- #define MYSQL_DB ""
- /* DB Name */
- new MySQL: ObjectsDB;
- /* Enumerator */
- enum objectinfo
- {
- O_TAKEN,
- O_MODEL,
- Text3D:O_TEXTID,
- O_ID,
- Float:O_X,
- Float:O_Y,
- Float:O_Z,
- Float:O_A,
- O_INT,
- O_VW
- }
- new oInfo[MAX_OBJECTS][objectinfo];
- new EditingObject[MAX_PLAYERS];
- new gObjCount= 0;
- /* Format Message With String */
- new string2[100], bool:False = false;
- #define format2(%0,%1,%2,%3) do{ format(string2, sizeof (string2), (%2), %3); SendClientMessage((%0),(%1), string2); } while (False)
- public OnFilterScriptInit()
- {
- print("\n--------------------------------------");
- print(" Dynamic Object System By CaptainBoi");
- print("--------------------------------------\n");
- new MySQLOpt: option_id = mysql_init_options();
- mysql_set_option(option_id, AUTO_RECONNECT, true);
- ObjectsDB = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DB, option_id);
- if(ObjectsDB == MYSQL_INVALID_HANDLE || mysql_errno(ObjectsDB) != 0)
- {
- print("Cannot connect to mysql database");
- SendRconCommand("exit");
- return 1;
- }
- else print("Connected to mysql database.");
- /* Objects Database */
- mysql_query(ObjectsDB, "CREATE TABLE IF NOT EXISTS `objects` (\
- `ID` INT, \
- `Model` INT(10), \
- `Taken` INT, \
- `X` FLOAT DEFAULT 0, \
- `Y` FLOAT DEFAULT 0, \
- `Z` FLOAT DEFAULT 0, \
- `Angle` FLOAT DEFAULT 0, \
- `Interior` INT, \
- `VirtualWorld` INT)");
- mysql_tquery(ObjectsDB, "SELECT * FROM `objects`", "LoadDynamicObjects", "");
- LoadDynamicObjects();
- return 1;
- }
- public OnFilterScriptExit()
- {
- SaveDynamicObjects();
- mysql_close(ObjectsDB);
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- EditingObject[playerid] = -1;
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- EditingObject[playerid] = -1;
- return 1;
- }
- /* Commands */
- CMD:createobject(playerid, params[])
- {
- new id = GetNextObjectID(), modelid;
- if(sscanf(params, "d", modelid)) return SendClientMessage(playerid, -1, "USAGE: /createobject [modelid]");
- GetPlayerPos(playerid, oInfo[id][O_X], oInfo[id][O_Y], oInfo[id][O_Z]);
- GetPlayerFacingAngle(playerid, oInfo[id][O_A]);
- GetXYInFrontOfPlayer(playerid, oInfo[id][O_X], oInfo[id][O_Y], 2.0);
- oInfo[id][O_TAKEN] = 1;
- oInfo[id][O_MODEL] = modelid;
- oInfo[id][O_INT] = GetPlayerInterior(playerid);
- oInfo[id][O_VW] = GetPlayerVirtualWorld(playerid);
- oInfo[id][O_A] += 90;
- SendClientMessage(playerid, 0xFFFF00FF, "You have created an Object.");
- new TEXTLABEL[16];
- format(TEXTLABEL, sizeof(TEXTLABEL), "Object\nID: %d", id);
- gObjCount++;
- oInfo[id][O_TEXTID] = CreateDynamic3DTextLabel(TEXTLABEL, 0x1D9F00AA, oInfo[id][O_X], oInfo[id][O_Y], oInfo[id][O_Z]+1.5, 5.0, _, _, _, oInfo[id][O_VW], oInfo[id][O_INT], _, _);
- oInfo[id][O_ID] = CreateDynamicObject(modelid, oInfo[id][O_X], oInfo[id][O_Y], oInfo[id][O_Z], 0.0, 0.0, oInfo[id][O_A], oInfo[id][O_VW], oInfo[id][O_INT], _, _);
- SaveDynamicObjects();
- return 1;
- }
- CMD:deleteobject(playerid, params[])
- {
- new id, query[200];
- if(sscanf(params, "d", id)) return SendClientMessage(playerid, -1, "USAGE: /deleteobject [id]");
- DestroyDynamic3DTextLabel(oInfo[id][O_TEXTID]);
- DestroyDynamicObject(oInfo[id][O_ID]);
- oInfo[id][O_TAKEN] = 0;
- oInfo[id][O_X] = 0.0;
- oInfo[id][O_Y] = 0.0;
- oInfo[id][O_Z] = 0.0;
- oInfo[id][O_A] = 0;
- mysql_format(ObjectsDB,query,sizeof(query),"SELECT `ID` FROM `objects` WHERE `ID` = '%d'",id);
- mysql_query(ObjectsDB, query);
- new rows;
- cache_get_row_count(rows);
- if(rows != 0)
- {
- mysql_format(ObjectsDB, query, sizeof(query), "DELETE FROM `objects` WHERE (`ID` = '%d')", id);
- mysql_query(ObjectsDB, query);
- format2(playerid, -1, "Object: %d has been removed", id);
- return 1;
- }
- else
- {
- format2(playerid, -1, "Object: %d does not exist.", id);
- }
- return 1;
- }
- CMD:editobject(playerid, params[])
- {
- if(!gObjCount) {
- return SendClientMessage(playerid, 0xFFFFFFFF, "SERVER: No Objects have been created.");
- }
- new object;
- if(sscanf(params, "d", object)) return SendClientMessage(playerid, -1, "USAGE: /editobject [id]");
- DestroyDynamic3DTextLabel(oInfo[object][O_TEXTID]);
- EditDynamicObject(playerid, oInfo[object][O_ID]);
- EditingObject[playerid] = object;
- return 1;
- }
- /* Stocks */
- GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
- {
- new Float:a;
- GetPlayerPos(playerid, x, y, a);
- if (IsPlayerInAnyVehicle(playerid))
- GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
- else
- GetPlayerFacingAngle(playerid, a);
- x += (distance * floatsin(-a, degrees));
- y += (distance * floatcos(-a, degrees));
- }
- GetNextObjectID()
- {
- new i=0;
- while(i != MAX_OBJECTS) {
- if(oInfo[i][O_TAKEN] == 0) {
- return i;
- }
- i++;
- }
- return -1;
- }
- /* Forwards & Publics */
- forward SaveDynamicObjects();
- public SaveDynamicObjects()
- {
- new szQuery[270], ID, time = GetTickCount(), objcount;
- for(new i=0; i<MAX_OBJECTS; i++)
- {
- if(oInfo[i][O_TAKEN] == 1)
- {
- objcount++;
- mysql_format(ObjectsDB, szQuery, sizeof(szQuery), "INSERT INTO `objects` (`ID`, `Taken`) VALUES ('%d', '1')", ID);
- mysql_tquery(ObjectsDB, szQuery, "", "");
- mysql_format(ObjectsDB, szQuery, sizeof(szQuery), "UPDATE `objects` SET `Model` = '%d', `X` = '%f', `Y` = '%f', `Z` = '%f', `Angle` = '%f', `Interior` = '%d', `VirtualWorld` = '%d' WHERE `ID` = %d", oInfo[i][O_MODEL], oInfo[i][O_X], oInfo[i][O_Y], oInfo[i][O_Z], oInfo[i][O_A], oInfo[i][O_INT], oInfo[i][O_VW], ID);
- mysql_tquery(ObjectsDB, szQuery,"","");
- ID++;
- }
- }
- printf("%d Dynamic Objects saved in %dms.", objcount, GetTickCount()-time);
- return 1;
- }
- forward LoadDynamicObjects();
- public LoadDynamicObjects()
- {
- new time = GetTickCount();
- new rows;
- cache_get_row_count(rows);
- if(rows)
- {
- new i = 0;
- while(i < rows)
- {
- cache_get_value_name_int(i, "Model", oInfo[i][O_MODEL]);
- cache_get_value_name_float(i, "X", oInfo[i][O_X]);
- cache_get_value_name_float(i, "Y", oInfo[i][O_Y]);
- cache_get_value_name_float(i, "Z", oInfo[i][O_Z]);
- cache_get_value_name_float(i, "Angle", oInfo[i][O_A]);
- cache_get_value_name_int(i, "Interior", oInfo[i][O_INT]);
- cache_get_value_name_int(i, "VirtualWorld", oInfo[i][O_VW]);
- new TEXTLABEL[16];
- format(TEXTLABEL, sizeof(TEXTLABEL), "Object\nID: %d", i);
- oInfo[i][O_TEXTID] = CreateDynamic3DTextLabel(TEXTLABEL, 0x1D9F00AA, oInfo[i][O_X], oInfo[i][O_Y], oInfo[i][O_Z]+1.5, 5.0, _, _, _, oInfo[i][O_VW], oInfo[i][O_INT], _, _);
- oInfo[i][O_ID] = CreateDynamicObject(oInfo[i][O_MODEL], oInfo[i][O_X], oInfo[i][O_Y], oInfo[i][O_Z], 0.0, 0.0, oInfo[i][O_A], oInfo[i][O_VW], oInfo[i][O_INT], _, _);
- gObjCount++;
- i++;
- }
- printf("%d Dynamic Objects loaded in %dms.", rows, GetTickCount()-time);
- }
- return 1;
- }
Add Comment
Please, Sign In to add comment