27.01.2013, 17:21
Code:
#define pinfo pDB[playerid]
#define pid playerid
#define ti strval(tmp)
enum
{
GANG_CREATE,
GANG_CREATE2,
GANG_MEMBERS
};
forward updateGang(type, pid);
public updateGang(type, pid)
{
switch(type)
{
case GANG_MEMBERS:
{
new rows, fields;
cache_get_data(rows, fields);
SendClientMessage(pid, -1, F("members: %i / %i",getMembers(pinfo[gang]), rows));
}
case GANG_CREATE2:
{
mysql_function_query(1, F("SELECT id FROM gaujos WHERE leader = %i", pinfo[DBID]), true, "updateGang", "ii", GANG_CREATE, pid);
}
case GANG_CREATE:
{
new tmp[11];
cache_get_row(0, 0, tmp);
addMember(pid, ti);
}
}
}
function::createGang(pid, name[])
{
mysql_real_escape_string(name, name);
mysql_function_query(1, F("INSERT INTO `gangs` (gang,leader) VALUES ('%s',%i)", name, pinfo[DBID]), true, "updateGang", "ii", GANG_CREATE2, pid);
}
function::addMember(pid, id)
{
pinfo[gang] = id;
mysql_function_query(1, F("UPDATE players SET gang = %i WHERE id = %i", id, pinfo[DBID]), false, "", "");
}
function::getMembers(id)
{
new count = 0;
foreach(new i : Player)
{
if(pDB[i][gang] == id)
count++;
}
return count;
}
function::isPlayerInAnyGang(pid)
{
if(pinfo[gang]) return 1;
return 0;
}
YCMD:gang_new(playerid, params[], help)
{
if(!isPlayerInAnyGang(pid))
{
createGang(pid, params);
}
return 1;
}
YCMD:gang_check(playerid, params[], help)
{
mysql_function_query(1, F("SELECT * FROM players WHERE gang = '%i'", pinfo[gang]), true, "updateGang", "ii", GANG_MEMBERS, pid);
return 1;
}
and then /gang_check
message are "members: 1 / 0".
why cache_get_data returns 0 rows?
mysql log:
[20:38:36] >> mysql_query_callback( Connection handle: 1 )
[20:38:36] Passing query INSERT INTO `gangs` (gang,leader) VALUES ('lollypop',71) | ii
[20:38:36] ProcessQueryThread(updateGang) - Query was successful. (INSERT INTO `gangs` (gang,leader) VALUES ('lollypop',71))
[20:38:36] ProcessQueryThread(updateGang) - Data caching enabled.
[20:38:36] CMySQLHandler::StoreResult() - No data to store.
[20:38:36] CMySQLHandler::ProcessQueryThread() - Data is getting passed to ->ProcessTick()
[20:38:36] updateGang(ii) - Threaded function called.
[20:38:36] >> mysql_query_callback( Connection handle: 1 )
[20:38:36] ProcessTick() - The cache has been cleared.
[20:38:36] Passing query SELECT id FROM gangs WHERE leader = 71 | ii
[20:38:36] ProcessQueryThread(updateGang) - Query was successful. (SELECT id FROM gangs WHERE leader = 71)
[20:38:36] ProcessQueryThread(updateGang) - Data caching enabled.
[20:38:36] CMySQLHandler::StoreResult() - Result was stored.
[20:38:36] CMySQLHandler::FreeResult() - Result was successfully free'd.
[20:38:36] CMySQLHandler::ProcessQueryThread() - Data is getting passed to ->ProcessTick()
[20:38:36] updateGang(ii) - Threaded function called.
[20:38:36] >> mysql_query_callback( Connection handle: 1 )
[20:38:36] ProcessTick() - The cache has been cleared.
[20:38:36] Passing query UPDATE players SET gang = 11 WHERE id = 71 |
[20:38:36] ProcessQueryThread() - Query was successful. (UPDATE players SET gang = 11 WHERE id = 71)
[20:38:36] CMySQLHandler::ProcessQueryThread() - Data is getting passed to ->ProcessTick()
[20:38:47] >> mysql_query_callback( Connection handle: 1 )
[20:38:47] Passing query SELECT * FROM players WHERE gang = '11' | ii
[20:38:47] ProcessQueryThread(updateGang) - Query was successful. (SELECT * FROM players WHERE gang = '11')
[20:38:47] ProcessQueryThread(updateGang) - Data caching enabled.
[20:38:47] CMySQLHandler::StoreResult() - Result was stored.
[20:38:47] CMySQLHandler::FreeResult() - Result was successfully free'd.
[20:38:47] CMySQLHandler::ProcessQueryThread() - Data is getting passed to ->ProcessTick()
[20:38:47] updateGang(ii) - Threaded function called.
[20:38:47] >> cache_get_data( Connection handle: 1 )
[20:38:47] ProcessTick() - The cache has been cleared.
and why result is free'd before threaded function is called?

