This is a simple way to
save player position after closing the game and loading it after the
player gets back.
First include these files (It will be attached with the script)
Код:
#include <Dini>
#include <dudb>
and then copy this to the end of the script.
Код:
Player(playerid)
{
new player[MAX_PLAYER_NAME];
GetPlayerName(playerid, player, sizeof(player));
return player;
}
Second declare these three variables as a global variables in the top of your script,
Код:
new Float:positionx;
new Float:positiony;
new Float:positionz;
Float for real numbers or decimal numbers.
Now we need to open a file on scriptfiles to
save our coordinates, to do that put this code at the end of your script.
Код:
FileStats(playerid)
{
new a[256]; format(a, sizeof(a), "%s.ini",udb_encode(Player(playerid)));
return a;
}
This will open a file in scriptfiles with the
player name.
Now we need to store these
positions in the file, to do that type this under the above code.
Код:
SaveStats(playerid)
{
dini_IntSet(FileStats(playerid), "PositionX", floatround(positionx));
dini_IntSet(FileStats(playerid), "PositionY", floatround(positiony));
dini_IntSet(FileStats(playerid), "PositionZ", floatround(positionz));
}
This will store
positionx as
PositionX = the x
position of the
player and so on.
Next is to load the
positions from the file, to do that type under the above code,
Код:
LoadStats(playerid)
{
positionx = dini_Int(FileStats(playerid), "PositionX");
positiony = dini_Int(FileStats(playerid), "PositionY");
positionz = dini_Int(FileStats(playerid), "PositionZ");
}
This will make the
positions
saved in the file equals to the
positions the
player will teleport to when he/she login.
Ok now we need to load the file when the
player connect, so we type this under On
PlayerConnect
Код:
LoadStats(playerid);
Ofcourse we need to
save the
positions in the file when the
player disconnect, so we type this under On
PlayerDisconnect
Код:
new Float:x;
new Float:y;
new Float:z;
GetPlayerPos(playerid,x,y,z);
positionx = x;
positiony = y;
positionz = z;
if (!dini_Exists(FileStats(playerid)))
{
dini_Create(FileStats(playerid));
}
SaveStats(playerid);
variables x, y and z is the current
player position when the command Get
PlayerPos used, so we make the
positions of the file equal the one of the
player.
Now we need to set the
player position when he/she enters so we copy this code under On
PlayerSpawn,
Код:
SetPlayerPos(playerid,positionx,positiony,positionz);
Finally we need to set the
player position when he/she dies so we have to copy this code under On
PlayerDeath
Код:
SetPlayerPos(playerid,1182.7733,-1323.6193,13.5785);
positionx = 1182.7733;
positiony = -1323.6193;
positionz = 13.5785;
This will set the
player to all saints los santos hospital, ofcourse you can change the
position of the place where you want your
player to spawn when he/she dies. If you don't put this code the
player will keep spawning in the loaded
positions in the file.
Ok Now the script will look like:
Код:
#include <Dini>
#include <dudb>
new Float:positionx;
new Float:positiony;
new Float:positionz;
public OnPlayerConnect(playerid)
{
LoadStats(playerid);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
new Float:x;
new Float:y;
new Float:z;
GetPlayerPos(playerid,x,y,z);
positionx = x;
positiony = y;
positionz = z;
if (!dini_Exists(FileStats(playerid)))
{
dini_Create(FileStats(playerid));
}
SaveStats(playerid);
return 1;
}
public OnPlayerSpawn(playerid)
{
SetPlayerPos(playerid,positionx,positiony,positionz);
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
SetPlayerPos(playerid,1182.7733,-1323.6193,13.5785);
positionx = 1182.7733;
positiony = -1323.6193;
positionz = 13.5785;
return 1;
}
Player(playerid)
{
new player[MAX_PLAYER_NAME];
GetPlayerName(playerid, player, sizeof(player));
return player;
}
FileStats(playerid)
{
new a[256]; format(a, sizeof(a), "%s.ini",udb_encode(Player(playerid)));
return a;
}
SaveStats(playerid)
{
dini_IntSet(FileStats(playerid), "PositionX", floatround(positionx));
dini_IntSet(FileStats(playerid), "PositionY", floatround(positiony));
dini_IntSet(FileStats(playerid), "PositionZ", floatround(positionz));
}
LoadStats(playerid)
{
positionx = dini_Int(FileStats(playerid), "PositionX");
positiony = dini_Int(FileStats(playerid), "PositionY");
positionz = dini_Int(FileStats(playerid), "PositionZ");
}
For those who need it for GF Edits, I included it with a full working pure gf Edit. I downloaded the origional gf edit and added my script to it, just run it and test it.
Here is the gf edit with full server included with my
save position script.
Download From Here
http://discoveryweb.net/savepositiongf.zip
Here is the full working script with the included files.
Download From Here
http://discoveryweb.net/saveposition.zip
Tell me if you need any help or if the link is broken.
Saleh Yassin