Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #include <YSI\y_ini>
- #include <sscanf2>
- main() { return 0; }
- #define MAX_POS_NAME_LENGTH 16
- #define MIN_POS_NAME_LENGTH 2
- new str_tmp[32];
- stock PlayerPath(playerid) {
- new str[MAX_PLAYER_NAME+22], name[MAX_PLAYER_NAME];
- GetPlayerName(playerid, name, sizeof(name));
- format(str, sizeof(str), "/PlayerPositions/%s.txt", name);
- return str;
- }
- enum {
- DIALOG_MAIN,
- DIALOG_NAME,
- DIALOG_NAMEUSED,
- DIALOG_REMOVE
- }
- enum e_pos_data {
- total_saved_pos,
- currIndex,
- Float:pos[4],
- interior,
- virtual_world,
- pos_name[MAX_POS_NAME_LENGTH]
- }
- new pos_arr[MAX_PLAYERS][e_pos_data];
- SavePlayerPos_data(playerid)
- {
- new INI:file = INI_Open(PlayerPath(playerid));
- INI_WriteInt(file, "total_saved_pos", pos_arr[playerid][total_saved_pos]);
- format(str_tmp, sizeof(str_tmp), "pos_x_%d", pos_arr[playerid][currIndex]);
- INI_WriteFloat(file, str_tmp, pos_arr[playerid][pos][0]);
- format(str_tmp, sizeof(str_tmp), "pos_y_%d", pos_arr[playerid][currIndex]);
- INI_WriteFloat(file, str_tmp, pos_arr[playerid][pos][1]);
- format(str_tmp, sizeof(str_tmp), "pos_z_%d", pos_arr[playerid][currIndex]);
- INI_WriteFloat(file, str_tmp, pos_arr[playerid][pos][2]);
- format(str_tmp, sizeof(str_tmp), "pos_a_%d", pos_arr[playerid][currIndex]);
- INI_WriteFloat(file, str_tmp, pos_arr[playerid][pos][3]);
- format(str_tmp, sizeof(str_tmp), "interior_%d", pos_arr[playerid][currIndex]);
- INI_WriteInt(file, str_tmp, pos_arr[playerid][interior]);
- format(str_tmp, sizeof(str_tmp), "virtual_world_%d", pos_arr[playerid][currIndex]);
- INI_WriteInt(file, str_tmp, pos_arr[playerid][virtual_world]);
- format(str_tmp, sizeof(str_tmp), "pos_name_%d", pos_arr[playerid][currIndex]);
- INI_WriteString(file, str_tmp, pos_arr[playerid][pos_name]);
- INI_Close(file);
- return 1;
- }
- forward LoadPlayerPos_data(playerid,name[],value[]);
- public LoadPlayerPos_data(playerid,name[],value[])
- {
- INI_Int("total_saved_pos", pos_arr[playerid][total_saved_pos]);
- format(str_tmp, sizeof(str_tmp), "pos_x_%d", pos_arr[playerid][currIndex]);
- INI_Float(str_tmp, pos_arr[playerid][pos][0]);
- format(str_tmp, sizeof(str_tmp), "pos_y_%d", pos_arr[playerid][currIndex]);
- INI_Float(str_tmp, pos_arr[playerid][pos][1]);
- format(str_tmp, sizeof(str_tmp), "pos_z_%d", pos_arr[playerid][currIndex]);
- INI_Float(str_tmp, pos_arr[playerid][pos][2]);
- format(str_tmp, sizeof(str_tmp), "pos_a_%d", pos_arr[playerid][currIndex]);
- INI_Float(str_tmp, pos_arr[playerid][pos][3]);
- format(str_tmp, sizeof(str_tmp), "interior_%d", pos_arr[playerid][currIndex]);
- INI_Int(str_tmp, pos_arr[playerid][interior]);
- format(str_tmp, sizeof(str_tmp), "virtual_world_%d", pos_arr[playerid][currIndex]);
- INI_Int(str_tmp, pos_arr[playerid][virtual_world]);
- format(str_tmp, sizeof(str_tmp), "pos_name_%d", pos_arr[playerid][currIndex]);
- INI_String(str_tmp, pos_arr[playerid][pos_name], MAX_POS_NAME_LENGTH+9);
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- if(!fexist(PlayerPath(playerid)))
- {
- }
- else
- {
- INI_ParseFile(PlayerPath(playerid), "LoadPlayerPos_%s", .bExtra = true, .extra = playerid);
- }
- return 1;
- }
- GetPosNameFromFile(playerid, f_pos_name[])
- {
- new fString[32], name[MAX_POS_NAME_LENGTH+9], value[MAX_POS_NAME_LENGTH];
- new File:file = fopen(PlayerPath(playerid), io_read);
- while(fread(file, fString))
- {
- if(!sscanf(fString, "s[16]'='s[16]", name, value))
- {
- if(!strcmp(name, f_pos_name))
- {
- pos_arr[playerid][pos_name] = value;
- //printf("%s", pos_arr[playerid][pos_name]);
- return 1;
- }
- }
- }
- return 0;
- }
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- if(!strcmp(cmdtext, "/spos") || !strcmp(cmdtext, "/sp"))
- {
- if(pos_arr[playerid][total_saved_pos] < 15)
- {
- ShowPlayerDialog(playerid, DIALOG_NAME, DIALOG_STYLE_INPUT, "~Name your position~", "Give a name to your current position", "Save", "Cancel");
- }
- else
- {
- return SendClientMessage(playerid, -1, "ERROR: You've got the maximal amount of saved spots used! Use /rpos to remove a position.");
- }
- return 1;
- }
- if(!strcmp(cmdtext, "/lpos") || !strcmp(cmdtext, "/lp"))
- {
- new str[12], dialog_str[1024];
- for(new i = 0; i < pos_arr[playerid][total_saved_pos]; i++)
- {
- format(str, sizeof(str), "pos_name_%d", i);
- GetPosNameFromFile(playerid, str);
- format(dialog_str,sizeof(dialog_str), "%s\n%d. %s", dialog_str, i, pos_arr[playerid][pos_name]);
- }
- ShowPlayerDialog(playerid, DIALOG_MAIN, DIALOG_STYLE_LIST, "~Load a position~", dialog_str, "Load", "Cancel");
- return 1;
- }
- return 0;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- if(dialogid == DIALOG_NAME)
- {
- if(!response)
- {
- return SendClientMessage(playerid, -1, "FAILURE: Cancelled position saving.");
- }
- else
- {
- if(MIN_POS_NAME_LENGTH <= strlen(inputtext) <= MAX_POS_NAME_LENGTH)
- {
- pos_arr[playerid][currIndex] = pos_arr[playerid][total_saved_pos];
- pos_arr[playerid][total_saved_pos]++;
- GetPlayerPos(playerid, pos_arr[playerid][pos][0], pos_arr[playerid][pos][1], pos_arr[playerid][pos][2]);
- GetPlayerFacingAngle(playerid, pos_arr[playerid][pos][3]);
- pos_arr[playerid][interior] = GetPlayerInterior(playerid);
- pos_arr[playerid][virtual_world] = GetPlayerVirtualWorld(playerid);
- new str[128];
- format(pos_arr[playerid][pos_name], MAX_POS_NAME_LENGTH, "%s", inputtext);
- SavePlayerPos_data(playerid);
- format(str, sizeof(str), "SUCCESS: Saved position as %s.(%d)", pos_arr[playerid][pos_name], pos_arr[playerid][currIndex]);
- SendClientMessage(playerid, -1, str);
- }
- }
- }
- return 1;
- }
- stock SetPlayerPosEx(playerid, Float:x, Float:y , Float:z, Inte, VW, Float:a)
- {
- if(!IsPlayerInAnyVehicle(playerid)) return SetPlayerPos(playerid, x, y, z), SetPlayerInterior(playerid, Inte), SetPlayerVirtualWorld(playerid, VW), SetPlayerFacingAngle(playerid, a);
- else return SetVehiclePos(GetPlayerVehicleID(playerid), x, y, z), SetVehicleZAngle(GetPlayerVehicleID(playerid), a), SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), VW), LinkVehicleToInterior(GetPlayerVehicleID(playerid), Inte);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement