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