SA-MP Forums Archive
MySQL - R38 loading houses help - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: MySQL - R38 loading houses help (/showthread.php?tid=508585)



MySQL - R38 loading houses help - vernz - 23.04.2014

Hi, anyone have an idea how to load EVERY houses stored into the database with the lastest plugins R38, cant figured it out it should be similar to the player account like this:

Код:
stock LoadAccount(playerid)
{
	new query[128];

	format(query, sizeof(query), "SELECT * FROM `players` WHERE `ID` = %d", PlayerInfo[playerid][pSQLid]);
	mysql_tquery(g_Handle, query, "OnAccountLoad", "d", playerid);
}

forward OnAccountLoad(playerid);
public OnAccountLoad(playerid)
{
	ToggleMainMenu(playerid, 0);
	SetCameraBehindPlayer(playerid);

	PlayerInfo[playerid][pHealth]         = cache_get_field_content_float(0, "Health");
	PlayerInfo[playerid][pPos][0]         = cache_get_field_content_float(0, "PosX");
	PlayerInfo[playerid][pPos][1]         = cache_get_field_content_float(0, "PosY");
	PlayerInfo[playerid][pPos][2]         = cache_get_field_content_float(0, "PosZ");
	PlayerInfo[playerid][pPos][3]         = cache_get_field_content_float(0, "Angle");
	PlayerInfo[playerid][pInterior]       = cache_get_field_content_int(0, "Interior");
	PlayerInfo[playerid][pVirtualWorld]   = cache_get_field_content_int(0, "VirtualWorld");
	PlayerInfo[playerid][pSkin]           = cache_get_field_content_int(0, "Skin");
	PlayerInfo[playerid][pSex]            = cache_get_field_content_int(0, "Sex");
	PlayerInfo[playerid][pAge]            = cache_get_field_content_int(0, "Age");
	PlayerInfo[playerid][pOrigine]        = cache_get_field_content_int(0, "Origine");
	PlayerInfo[playerid][pMoney]          = cache_get_field_content_int(0, "Money");
	PlayerInfo[playerid][pJob]            = cache_get_field_content_int(0, "Job");
	PlayerInfo[playerid][pFaction]        = cache_get_field_content_int(0, "Faction");

	SetPlayerHealth(playerid, PlayerInfo[playerid][pHealth]);
	SetSpawnInfo(playerid, 0, PlayerInfo[playerid][pSkin], posArr{PlayerInfo[playerid][pPos]}, PlayerInfo[playerid][pPos][3], 0, 0, 0, 0, 0, 0);
	SpawnPlayer(playerid);
	/*SetPlayerPos(playerid, posArr{PlayerInfo[playerid][pPos]});
	SetPlayerFacingAngle(playerid, PlayerInfo[playerid][pPos][3]);*/
	SetPlayerInterior(playerid, PlayerInfo[playerid][pInterior]);
	SetPlayerVirtualWorld(playerid, PlayerInfo[playerid][pVirtualWorld]);
	SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
	GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
	return 1;
}
need the same who loop through all houses created into the database and then create the 3dtext etc... any ideas ?

thanks in advance


Re: MySQL - R38 loading houses help - DobbysGamertag - 23.04.2014

Not sure if this helps any but:

pawn Код:
if(cache_num_rows())
{
    for(new i = 0; i<cache_num_rows(); i++)
    {
        cache_get_field_content_int(i,"id",connectionHandle);
        cache_get_field_content_float(i,"x",connectionHandle); //the row becomes "i". Since you're looping the number of rows found.
        //load more...
    }
}
Simple for() or maybe even a while() loop will do it.


Re : MySQL - R38 loading houses help - vernz - 23.04.2014

What about
Код HTML:
stock LoadAccount(playerid)
{
	new query[128];

	format(query, sizeof(query), "SELECT * FROM `users` WHERE `ID` = %d", PlayerInfo[playerid][pSQLid]);
	mysql_tquery(g_Handle, query, "OnAccountLoad", "d", playerid);
}
should i do something like this or select * houses right under OnHouseLoad by example ?


Re: MySQL - R38 loading houses help - DobbysGamertag - 23.04.2014

You can use a straight query for that.

pawn Код:
public OnGameModeInit()
{
    mysql_pquery(connectionHandle,"SELECT * FROM `houses`","OnHousesLoad");
    return 1;
}



Re : MySQL - R38 loading houses help - vernz - 23.04.2014

pawn Код:
mysql_pquery(g_Handle, "SELECT * FROM `houses`", "OnHouseLoad");



pawn Код:
forward OnHouseLoad();
public OnHouseLoad()
{
    if(cache_num_rows())
    {
        for(new i = 0; i<cache_num_rows(); i++)
        {
            cache_get_field_content_int(i,"SQLID",g_Handle);
            cache_get_field_content_float(i,"Posx",g_Handle);
            cache_get_field_content_float(i,"Posy",g_Handle);
            cache_get_field_content_float(i,"Posz",g_Handle); //the row becomes "i". Since you're looping the number of rows found.
            //load more...
            print("test");
        }
    }
}


Not sure if I miss something but it doesnt print so theres is something wrong


Re: MySQL - R38 loading houses help - DobbysGamertag - 23.04.2014

have you enabled debug mode via MySQL?


Re : MySQL - R38 loading houses help - vernz - 23.04.2014

Yes, I do


Re: MySQL - R38 loading houses help - DobbysGamertag - 23.04.2014

I presume its not putting anything relating to fieldnames/tablenames into the txt file. I'll open up pawno now

Edit:

Using this script:

pawn Код:
new
    Database = 1;
main(){}
public OnGameModeInit()
{
    mysql_log(LOG_ALL,LOG_TYPE_TEXT);
    Database = mysql_connect("localhost","user","testdb","pass");
    mysql_tquery(Database,"SELECT * FROM `houses`","OnHouseLoad");
    return 1;
}
forward OnHouseLoad();
public OnHouseLoad()
{
    if(cache_num_rows())
    {
        for(new i = 0; i<cache_num_rows(); i++)
        {
            new ID = cache_get_field_content_int(i,"id",Database);
            new Float:x =  cache_get_field_content_float(i,"x",Database);
            new Float:y =  cache_get_field_content_float(i,"y",Database);
            new Float:z =  cache_get_field_content_float(i,"z",Database);
            printf("Loaded house %d %f %f %f",ID,x,y,z);
        }
    }
    else print("No houses found.");
    return 1;
}
Outputs:

Код:
----------
Loaded log file: "server_log.txt".
----------

SA-MP Dedicated Server
----------------------
v0.3z-R2, ©2005-2014 SA-MP Team

[02:30:27] 
[02:30:27] Server Plugins
[02:30:27] --------------
[02:30:27]  Loading plugin: mysql
[02:30:27]  >> plugin.mysql: R38 successfully loaded.
[02:30:27]   Loaded.
[02:30:27]  Loading plugin: streamer
[02:30:27]   Loaded.
[02:30:27]  Loaded 2 plugins.

[02:30:27] 
[02:30:27] Filterscripts
[02:30:27] ---------------
[02:30:27]   Loaded 0 filterscripts.

[02:30:27] Number of vehicle models: 0
[02:30:27] Loaded house 1 123.000000 456.000000 789.000000



Re : MySQL - R38 loading houses help - vernz - 23.04.2014

Код HTML:
[21:26:40] [ERROR] "mysql_pquery" - invalid connection handle (id: 0)
[21:26:40] [DEBUG] mysql_connect - host: "localhost", user: "root", database: "samp", password: "****", port: 3306, autoreconnect: true, pool_size: 2
[21:26:40] [DEBUG] CMySQLHandle::Create - creating new connection..
[21:26:40] [DEBUG] CMySQLHandle::CMySQLHandle - constructor called
[21:26:40] [DEBUG] CMySQLHandle::Create - connection created (id: 1)
[21:26:40] [DEBUG] CMySQLConnection::Connect - establishing connection to database...
[21:26:40] [DEBUG] CMySQLConnection::Connect - connection was successful
[21:26:40] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled
[21:26:40] [DEBUG] CMySQLConnection::Connect - establishing connection to database...
[21:26:40] [DEBUG] CMySQLConnection::Connect - establishing connection to database...
[21:26:40] [DEBUG] CMySQLConnection::Connect - connection was successful
[21:26:40] [DEBUG] CMySQLConnection::Connect - connection was successful
[21:26:40] [DEBUG] CMySQLConnection::Connect - connection was successful
[21:26:40] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled
[21:26:40] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled


Код HTML:
[21:26:40] [ERROR] "mysql_pquery" - invalid connection handle (id: 0)



Re: MySQL - R38 loading houses help - DobbysGamertag - 23.04.2014

Wait i know!


Set your connectionhandle to 1.

EG:

pawn Код:
new Database = 1; //Database being Connection handle.
Also edited my above post.