Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- some notes:
- - the ORM system only works with global variables
- - never destroy a orm object after calling _select or _insert
- - destroying after calling _update or _delete is fine though
- - there has to be a valid key value for _select, _update or _delete
- - if not, OnQueryError is called
- - before calling _setkey, you have to call _addvar
- - both times they must have the identical name
- */
- new SQL = -1;
- enum e_Player
- {
- ORM:ORM_ID,
- ID,
- Name[MAX_PLAYER_NAME],
- Money,
- Level,
- Float:PosX,
- Float:PosY,
- Float:PosZ,
- };
- new Player[MAX_PLAYERS][e_Player];
- #define DIALOG_LOGIN 1
- #define DIALOG_REGISTER 2
- enum e_Vehicle
- {
- ORM:ORM_ID,
- VID,
- ID,
- ModelID,
- Color1,
- Plate[32],
- Float:Pos[4],
- };
- new Vehicle[MAX_VEHICLES][e_Vehicle];
- public OnGameModeInit()
- {
- mysql_log();
- SQL = mysql_connect("127.0.0.1", "root", "test", "1234");
- //load vehicles
- mysql_tquery(SQL, "SELECT * FROM `vehicles`", "OnVehiclesLoad", "");
- return 1;
- }
- forward OnVehiclesLoad();
- public OnVehiclesLoad()
- {
- new rows, fields;
- cache_get_data(rows, fields);
- for(new r=0; r < rows; ++r) {
- new ORM:ormid = Vehicle[r][ORM_ID] = orm_create("vehicles");
- orm_addvar_int(ormid, Vehicle[r][ID], "ID"); //this is the key
- orm_setkey(ormid, "ID"); //here we declare it as the key
- orm_addvar_int(ormid, Vehicle[r][ModelID], "ModelID");
- orm_addvar_int(ormid, Vehicle[r][Color1], "Color1");
- orm_addvar_string(ormid, Vehicle[r][Plate], 32, "Plate");
- orm_addvar_float(ormid, Vehicle[r][Pos][0], "PosX");
- orm_addvar_float(ormid, Vehicle[r][Pos][1], "PosY");
- orm_addvar_float(ormid, Vehicle[r][Pos][2], "PosZ");
- orm_addvar_float(ormid, Vehicle[r][Pos][3], "PosA");
- orm_apply_cache(ormid, r);
- Vehicle[r][VID] = CreateVehicle(Vehicle[r][ModelID], Vehicle[r][Pos][0], Vehicle[r][Pos][1], Vehicle[r][Pos][2], Vehicle[r][Pos][3], Vehicle[r][Color1], -1, -1);
- }
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- new ORM:ormid = Player[playerid][ORM_ID] = orm_create("players");
- GetPlayerName(playerid, Player[playerid][Name], MAX_PLAYER_NAME);
- orm_addvar_int(ormid, Player[playerid][ID], "ID");
- orm_addvar_string(ormid, Player[playerid][Name], MAX_PLAYER_NAME, "Name"); //this is not the key, we don't have "ID" yet
- orm_setkey(ormid, "Name"); // but we need the name for the "WHERE" part of the select query, so we set it as a key
- orm_addvar_int(ormid, Player[playerid][Money], "Money");
- orm_addvar_int(ormid, Player[playerid][Level], "Level");
- orm_addvar_float(ormid, Player[playerid][PosX], "PosX");
- orm_addvar_float(ormid, Player[playerid][PosY], "PosY");
- orm_addvar_float(ormid, Player[playerid][PosZ], "PosZ");
- orm_select(ormid, "OnPlayerDataLoad", "d", playerid);
- return 1;
- }
- public OnPlayerUpdate(playerid)
- {
- static ticks[MAX_PLAYERS];
- ticks[playerid]++;
- if(ticks[playerid] >= 5000) {
- ticks[playerid] = 0;
- orm_update(Player[playerid][ORM_ID]);
- }
- }
- forward OnPlayerDataLoad(playerid);
- public OnPlayerDataLoad(playerid)
- {
- orm_setkey(Player[playerid][ORM_ID], "ID"); //now we set the real key, regardless whether there is data or not, because:
- // if there is data: cool, we don't need to call any other native now, but for future purposes set the correct key
- // if there is no data set the correct key ('ID') so orm_insert saves the key into the right variable (or else it would insert the key in the Name variable)
- switch(orm_errno(Player[playerid][ORM_ID]))
- {
- case ERROR_OK:
- ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Please insert your password.", "Login", "Abort");
- case ERROR_NO_DATA:
- ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Register", "Please insert your password.", "Register", "Abort");
- }
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- switch(dialogid)
- {
- case DIALOG_LOGIN:
- {
- //...
- }
- case DIALOG_REGISTER:
- {
- orm_insert(Player[playerid][ORM_ID], "OnPlayerRegister", "d", playerid);
- }
- default:
- return 0;
- }
- return 1;
- }
- forward OnPlayerRegister(playerid);
- public OnPlayerRegister(playerid)
- {
- printf("Player registered with ID '%d'.", Player[playerid][ID]);
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- orm_update(Player[playerid][ORM_ID]);
- orm_destroy(Player[playerid][ORM_ID]);
- return 1;
- }
- public OnGameModeExit()
- {
- mysql_close(SQL);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement