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?