Saving Positions, need help.
#1

First let me say this: I am a new scripter, please don't post rude or obscene comments as replies, only if your helping me, may you reply to this.

Okay, well, i'm making a completely new script, since i thought it would be good practice.

This is the current script i made, all it includes is login/register, and the saving position thing i'm making.

Code:
// This is a comment
// uncomment the line below if you want to write a filterscript
//#define FILTERSCRIPT

#include <a_samp>
#include <YSI\y_ini>
#include <dini>

#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2
#define DIALOG_SUCCESS_1 3
#define DIALOG_SUCCESS_2 4
#define PATH "/Users/%s.ini"
#define COL_WHITE "{FFFFFF}"
#define COL_RED "{F81414}"
#define COL_GREEN "{00FF22}"
#define COL_LIGHTBLUE "{00CED1}"

enum pInfo
{
    Float:Posx,
	Float:Posy,
	Float:Posz,
    pPass,
    pCash,
    pAdmin,
    pKills,
    pDeaths
}
new PlayerInfo[MAX_PLAYERS][pInfo];

forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
    INI_Int("Password",PlayerInfo[playerid][pPass]);
    INI_Int("Cash",PlayerInfo[playerid][pCash]);
    INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
    INI_Int("Kills",PlayerInfo[playerid][pKills]);
    INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
    return 1;
}

#if defined FILTERSCRIPT

#endif

//==============================================================================//

//==============================================================================//

public OnGameModeInit()
{
	// Don't use these lines if it's a filterscript
	SetGameModeText("A:RP v0.1");
	AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
	return 1;
}

public OnGameModeExit()
{
	return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
	return 1;
}

public OnPlayerConnect(playerid)
{
    if(fexist(UserPath(playerid)))
    {
        INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_WHITE"Welcome to A:RP\nType your password to login","Login","Quit");
    }
    else
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,""COL_WHITE"Register",""COL_WHITE"Welcome to A:RP\nType your password below to register a new account.","Register","Quit");
    }
	return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    new INI:File = INI_Open(UserPath(playerid));
    new Float: X, Float: Y, Float:Z;
	GetPlayerPos(playerid, X, Y, Z);
	PlayerInfo[playerid][Posx] = X;
	PlayerInfo[playerid][Posy] = Y;
	PlayerInfo[playerid][Posz] = Z;
	INI_WriteInt(File,"PositionX",PlayerInfo[playerid][Posx]);
    INI_WriteInt(File,"PositionY",PlayerInfo[playerid][Posy]);
    INI_WriteInt(File,"PositionZ",PlayerInfo[playerid][Posz]);
    INI_SetTag(File,"data");
    INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));
    INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
    INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]);
    INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
    INI_Close(File);
	return 1;
}

public OnPlayerSpawn(playerid)
{
	return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    PlayerInfo[killerid][pKills]++;
    PlayerInfo[playerid][pDeaths]++;
	return 1;
}

public OnVehicleSpawn(vehicleid)
{
	return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
	return 1;
}

public OnPlayerText(playerid, text[])
{
	return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
	if (strcmp("/mycommand", cmdtext, true, 10) == 0)
	{
		// Do something here
		return 1;
	}
	return 0;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
	return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
	return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
	return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
	return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
	return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
	return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
	return 1;
}

public OnRconCommand(cmd[])
{
	return 1;
}

public OnPlayerRequestSpawn(playerid)
{
	return 1;
}

public OnObjectMoved(objectid)
{
	return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
	return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
	return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
	return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
	return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
	return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
	return 1;
}

public OnPlayerExitedMenu(playerid)
{
	return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
	return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
	return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
	return 1;
}

public OnPlayerUpdate(playerid)
{
	return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
	return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
	return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
	return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
	return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch( dialogid )
    {
        case DIALOG_REGISTER:
        {
            if (!response) return Kick(playerid);
            if(response)
            {
                if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, ""COL_WHITE"Registering...",""COL_RED"You have entered an invalid password.\n"COL_WHITE"Type your password below to register a new account.","Register","Quit");
                new INI:File = INI_Open(UserPath(playerid));
                INI_SetTag(File,"data");
                INI_WriteInt(File,"Password",udb_hash(inputtext));
                INI_WriteInt(File,"Cash",0);
                INI_WriteInt(File,"Admin",0);
                INI_WriteInt(File,"Kills",0);
                INI_WriteInt(File,"Deaths",0);
                INI_Close(File);

                SetSpawnInfo(playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0);
                SpawnPlayer(playerid);
                SendClientMessage(playerid, 0xF81414AA, "Thank you for registering");
            }
        }

        case DIALOG_LOGIN:
        {
            if ( !response ) return Kick ( playerid );
            if( response )
            {
                if(udb_hash(inputtext) == PlayerInfo[playerid][pPass])
                {
                    INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
                    GivePlayerMoney(playerid, PlayerInfo[playerid][pCash]);
                    new Float: X, Float: Y, Float:Z;
					GetPlayerPos(playerid, X, Y, Z);
					SetPlayerPos(playerid, PlayerInfo[playerid][Posx], PlayerInfo[playerid][Posy], PlayerInfo[playerid][Posz]);
                }
                else
                {
                    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_RED"You have entered an incorrect password.\n"COL_WHITE"Type your password below to login.","Login","Quit");
                }
                return 1;
            }
        }
    }
	return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
	return 1;
}

stock UserPath(playerid)
{
    new string[128],playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,sizeof(playername));
    format(string,sizeof(string),PATH,playername);
    return string;
}

/*Credits to Dracoblue*/
stock udb_hash(buf[]) {
    new length=strlen(buf);
    new s1 = 1;
    new s2 = 0;
    new n;
    for (n=0; n<length; n++)
    {
       s1 = (s1 + buf[n]) % 65521;
       s2 = (s2 + s1)     % 65521;
    }
    return (s2 << 16) + s1;
}
When i compile it, it comes up with 3 warnings:

Code:
(91) : warning 213: tag mismatch
(92) : warning 213: tag mismatch
(93) : warning 213: tag mismatch
Lines 91, 92, and 93:

Code:
INI_WriteInt(File,"PositionX",PlayerInfo[playerid][Posx]);
INI_WriteInt(File,"PositionY",PlayerInfo[playerid][Posy]);
INI_WriteInt(File,"PositionZ",PlayerInfo[playerid][Posz]);
When i log in, it doesn't go to the position, and it still has the Right ((<)) and Left ((>)) arrows including the Spawn button. When i click spawn, it sends me to another place. ((Basic spawn, elevator, CJ skin, etc)).

I need help so it doesn't show < > Spawn when i login and i want it to spawn me after i login. ((To the position))

Help is appreciated

PS: Another reminder, please don't troll, post obscene or rude replies to this thread.
Reply
#2

Ok so u have made the pozx ,y,z as floats but then save them as Ints ?
pawn Code:
INI_WriteFloat(File,"PositionX",PlayerInfo[playerid][Posx]);
INI_WriteFloat(File,"PositionY",PlayerInfo[playerid][Posy]);
INI_WriteFloat(File,"PositionZ",PlayerInfo[playerid][Posz]);
So you need to save them as a float two!
Reply
#3

Could the problem be that you use "INI_WriteInt" instaid of "INI_WriteFloat"?

You also never load the position from the file so how could you ever spawn there?
Reply
#4

Can someone just edit this and send me the script? Maybe describe whats wrong a bit more.

Not to ask much.
Reply
#5

You created Posx, Posy, Posz as floats and then saved them as ints, you have to save them as floats.

And after you save them, you should load them OnPlayerConnect so you can spawn the player at the coords saved.
Reply
#6

Put That anywhere Under OnPlayerDisConnect

pawn Code:
new Float:X, Float:Y, Float:Z, Float:A, Float:I, Float:W;
    GetPlayerPos(playerid, X,Y,Z);
    GetPlayerFacingAngle(playerid, A);// I Added this Incase you asked later // A saves Players ANGLE
    I = GetPlayerInterior(playerid);//  This Saves Players Interior
    W = GetPlayerVirtualWorld(playerid); //  This saves Players Virtual World if you plan on using it
    INI_WriteFloat(File,"Health",HEALTH);
    INI_WriteFloat(File,"Armour",ARMOUR);
    INI_WriteFloat(File,"Posx",X);
    INI_WriteFloat(File,"Posy",Y);
    INI_WriteFloat(File,"Posz",Z);
    INI_WriteFloat(File,"Posa",A);
    INI_WriteFloat(File,"Posi",I);
    INI_WriteFloat(File,"Posw",W);
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)