[C++] Coins oszlop (SELECT / UPDATE)

Indította Pisti95, 2018-05-10, 14:42:00

Mivel többek szeretnének SÉ-t jóváírni, valamint az egyenleget jóváírni a SÉ jegyekkel, ezért írtam meg ezt a leírást. Nekem is volt problémám az os.execute() -s questekkel, mert már 40k-nál nem igazán akar működni a dolog.


Mielőtt hozzáfogsz, feltétlenül szükséged lesz a mysql_query() adatfeldolgozó függvényre, hogy a forrásodban legyen!

MYSQL_QUERY():
[spoiler]
http://metin2hungary.net/index.php/topic,200802.0.html[/spoiler]




questlua_pc.cpp-t nyisd meg!

Keress rá erre:
int pc_get_killee_drop_pct(lua_State* L)
{
...
}



Másold be alá ezt:
/////////Pisti95/////////////
int pc_add_coins(lua_State * L)
{
if (!lua_isnumber(L, 1))
{
sys_err("invalid argument");
return 0;
}

LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
long val = (long)lua_tonumber(L, 1);
SQLMsg *msg;

msg = DBManager::instance().DirectQuery("UPDATE account.account SET coins = coins + '%ld' WHERE id = '%d'", val, ch->GetAID());

if (msg->uiSQLErrno != 0)
{
sys_err("pc_update_add_coins query failed");
return 0;
}
delete msg;
}

int pc_del_coins(lua_State * L)
{
if (!lua_isnumber(L, 1))
{
sys_err("invalid argument");
return 0;
}

LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
long val = (long)lua_tonumber(L, 1);
SQLMsg *msg;

msg = DBManager::instance().DirectQuery("UPDATE account.account SET coins = coins - '%ld' WHERE id = '%d'", val, ch->GetAID());

if (msg->uiSQLErrno != 0)
{
sys_err("pc_update_del_coins query failed");
return 0;
}
delete msg;
}
int pc_get_coins(lua_State* L)
{
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();

if (ch == NULL)
return 0;

SQLMsg *msg = DBManager::instance().DirectQuery("SELECT coins FROM account.account WHERE id = '%d'", ch->GetAID());

if (msg->uiSQLErrno != 0)
return 0;

MYSQL_RES *res = msg->Get()->pSQLResult;

MYSQL_ROW row = mysql_fetch_row(res);

if (!row[0])
return 0;

lua_pushnumber(L, atoi(row[0]));
return 1;
}
//////////////////////////////////////////////////////////////



Keress rá erre:
void RegisterPCFunctionTable()


Másold be a tömbbe ezeket a sorokat:
////////////////Pisti95//////////////////
{ "add_coins", pc_add_coins },
{ "del_coins", pc_del_coins },
{ "get_coins", pc_get_coins },
/////////////////////////////////////////



Quest_functions-ba írd be ezeket a sorokat:
pc.del_coins
pc.add_coins
pc.get_coins



Questben így tudod használni az új parancsokat:

pc.del_coins(100) ----levon 100SÉ-t az account.account oszlopban lévő 'coins' oszlopból!

pc.add_coins(100) ----hozzáad 100SÉ-t az account.account oszlopban lévő 'coins' oszlophoz!

pc.get_coins()  ---lekérdezi az adott értékét a 'coins' oszlopnak.




Példa Quest:


quest se_utalvany begin
state start begin
when 80009.use begin ----100-as SÉ utalvány
if pc.count_item(80009) >= 1 then
say_reward("100SÉ jóváírva!")
pc.remove_item(80009, 1)  ---utalvány törlése
pc.add_coins(100)  ---SÉ-hez + 100
else
say_reward("Nincs nálad SÉ utalvány(100),")
say_reward("így nem írható jóvá Sárkányérme!")
end
end
end
end




Ennyi lenne! Sok sikert hozzá!


Üdv, Pisti95