Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[C++] Coins oszlop (SELECT / UPDATE)
#1
Thumbs Up 
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!

Show ContentMysql_query():



questlua_pc.cpp-t nyisd meg!

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


Másold be alá ezt:
Code:
    /////////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:
Code:
void RegisterPCFunctionTable()


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


Quest_functions-ba írd be ezeket a sorokat:
Code:
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:


Code:
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
[Image: 1453876818-b8928becdb9a3058b7c9ff22ccc5caf6.jpeg]
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)