Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

[Release] Working GC Transactions

Skilled Illusionist
Joined
Apr 4, 2013
Messages
377
Reaction score
146
You should know where to place the following 4 files.

SQL functions:



API:



In WarZ.sln --> UserProfile.cpp


Under:
Code:
int CClientUserProfile::ApiFriendRemove(DWORD friendId)
{
    CWOBackendReq req(this, "api_Friends.aspx");
    req.AddParam("func", "remove");
    req.AddParam("FriendID", friendId);


    if(!req.Issue())
    {
        r3dOutToLog("ApiFriendRemove FAILED, code: %d\n", req.resultCode_);
        return req.resultCode_;
    }
    
    return 0;
}


Add:
Code:
int CClientUserProfile::ApiGetTransactions()
{
    CWOBackendReq req(this, "api_GetTransactions.aspx");
    req.AddParam("CustomerID", CustomerID);
    if(!req.Issue())
    {
        r3dOutToLog("ApiGetTransactions FAILED, code: %d\n", req.resultCode_);
        return req.resultCode_;
    }


    tscount = 0;
    m_tsData.reserve(1024*1024);
    m_tsData.clear();




    pugi::xml_document xmlFile;
    req.ParseXML(xmlFile);
    
    pugi::xml_node xml = xmlFile.child("trans");


    pugi::xml_node xmlItem = xml.first_child();
    while(!xmlItem.empty())
    {
        TSEntry_s ts;
        r3dscpy(ts.type, xmlItem.attribute("TId").value());
        r3dscpy(ts.time, xmlItem.attribute("Time").value());
        ts.itemID = xmlItem.attribute("ItemID").as_int();
        ts.amount = xmlItem.attribute("amount").as_float();
        ts.balance = xmlItem.attribute("bl").as_float();
        ts.id = xmlItem.attribute("id").as_int();
        m_tsData.push_back(ts);


        tscount++;
        xmlItem = xmlItem.next_sibling();
    }


    return 0;
}


int CClientUserProfile::ApiFriendGetStats(DWORD friendId)
{
    CWOBackendReq req(this, "api_Friends.aspx");
    req.AddParam("func", "stats");
    req.AddParam("FriendID", friendId);


    if(!req.Issue())
    {
        r3dOutToLog("ApiFriendGetStats FAILED, code: %d\n", req.resultCode_);
        return req.resultCode_;
    }
    
    pugi::xml_document xmlFile;
    req.ParseXML(xmlFile);
    friends->SetCurrentStats(xmlFile);
    
    return 0;
}


In WarZ.sln --> UserProfile.h


Under:
Code:
int        ApiGetItemsInfo();


Add:
Code:
int ApiGetTransactions();


In WarZ.sln --> FrontEndWarZ.cpp


Under:
Code:
gfxMovie.RegisterEventHandler("eventMyServerJoinServer", MAKE_CALLBACK(eventMyServerJoinServer));


Add:
Code:
gfxMovie.RegisterEventHandler("eventRequestGCTransactionData", MAKE_CALLBACK(eventRequestGCTransactionData));


Under:
Code:
void FrontendWarZ::eventRequestMyServerList(r3dScaleformMovie* pMovie, const Scaleform::GFx::Value* args, unsigned argCount)
{
    Scaleform::GFx::Value var[3];
    var[0].SetStringW(gLangMngr.getString("FetchingGamesListFromServer"));
    var[1].SetBoolean(false);
    var[2].SetString("");
    gfxMovie.Invoke("_root.api.showInfoMsg", var, 3);
    async_.StartAsyncOperation(this, &FrontendWarZ::as_BrowseGamesThread, &FrontendWarZ::OnMyServerListReceived);
}


Add:
Code:
void FrontendWarZ::eventRequestGCTransactionData(r3dScaleformMovie* pMovie, const Scaleform::GFx::Value* args, unsigned argCount)
{
    Scaleform::GFx::Value var[3];
    var[0].SetStringW(gLangMngr.getString("OneMomentPlease"));
    var[1].SetBoolean(false);
    var[2].SetString("");
    gfxMovie.Invoke("_root.api.showInfoMsg", var, 3);
    async_.StartAsyncOperation(this, &FrontendWarZ::as_TransactionsThread, &FrontendWarZ::OnTransactionsDataSuccess);
}


Under:
Code:
const char* FrontendWarZ::FindClanTagAndColorById(int id ,char* name,CUserClans* clan)
{
    if (id == 0) return name;
    //CUserClans* clan = new CUserClans();
    //clan->ApiClanGetLeaderboard();
    //const char* msg[512] = {0};
    for(std::list<CUserClans::ClanInfo_s>::iterator iter=clan->leaderboard_.begin(); iter!=clan->leaderboard_.end(); ++iter)
    {
        CUserClans::ClanInfo_s& clanInfo = *iter;
        //r3dOutToLog("id %d %s %d\n",id,name,clanInfo.ClanID);
        if (clanInfo.ClanID == id)
        {
            const char* tagColor = "#000000";
            switch(clanInfo.ClanTagColor)
            {
            case 1: tagColor = "#aa0000"; break;
            case 2: tagColor = "#a6780c"; break;
            case 3: tagColor = "#10a49e"; break;
            case 4: tagColor = "#20a414"; break;
            case 5: tagColor = "#104ea4"; break;
            case 6: tagColor = "#9610a4"; break;
            case 7: tagColor = "#444444"; break;
            case 8: tagColor = "#a4a4a4"; break;
            default:
                break;
            }
            char gamertag[512] = {0};
            sprintf(gamertag,"%s",name);
            sprintf(name,"<font color='%s'>[%s]</font>%s",tagColor,clanInfo.ClanTag,gamertag);
            break;
            //str = (const char*)msg;
            //return msg;
        }
    }
    //r3dOutToLog("%s\n");
    return name;
}


Add:
Code:
void FrontendWarZ::OnTransactionsDataSuccess()
{
    gfxMovie.Invoke("_root.api.hideInfoMsg", "");
    for(std::vector<CClientUserProfile::TSEntry_s>::iterator it = gUserProfile.m_tsData.begin(); it != gUserProfile.m_tsData.end(); ++it)
    {
        CClientUserProfile::TSEntry_s& tse = *it;


        char date[64] = {0};
        char name[64] = {0};
        char amount[64] = {0};
        char balance[64] = {0};
        sscanf(tse.time,"%s",&date);
        // TODO ADD LOGIC
        Scaleform::GFx::Value var[5];
        var[0].SetInt(tse.id);
        var[1].SetString(date); // date 


        const BaseItemConfig* cfg = g_pWeaponArmory->getConfig(tse.itemID);


        // transactions descriptions
        if (strcmp(tse.type, "INGAME")==0 && cfg) // buying in marketplace.
            sprintf(name,"Marketplace: %s",cfg->m_StoreName);
        else if (strcmp(tse.type, "EarlyRevive")==0)
            sprintf(name,"Early Revive");
        else if (strcmp(tse.type, "ConvertGCToGD")==0)
            sprintf(name,"Convert GC");
        else if (strcmp(tse.type, "Premium")==0)
            sprintf(name,"Premium Account");


        var[2].SetString(name); // name
        sprintf(amount,"-%.2f",tse.amount);
        var[3].SetString(amount); // amount
        sprintf(balance,"%.2f",tse.balance);
        var[4].SetString(balance); // balance
        if (name[0])
            gfxMovie.Invoke("_root.api.Main.Marketplace.addTransactionData", var, 5);
    }
    gfxMovie.Invoke("_root.api.Main.Marketplace.showTransactionsPopup", "");
}


unsigned int WINAPI FrontendWarZ::as_TransactionsThread(void* in_data)
{
    if (gUserProfile.ApiGetTransactions())
    {
        FrontendWarZ* This = (FrontendWarZ*)in_data;
        This->async_.SetAsyncError(0,L"Get Transactions Failed");
        return 1;
    }


    return 0;
}


In WarZ.sln --> FrontEndWarZ.h


Under:
Code:
static unsigned int WINAPI DrawThread(void* in_data);


Add:
Code:
static unsigned int WINAPI as_TransactionsThread(void* in_data);
    void OnTransactionsDataSuccess();


Under:
Code:
void eventRequestMyServerList(r3dScaleformMovie* pMovie, const Scaleform::GFx::Value* args, unsigned argCount);


Add:
Code:
void eventRequestGCTransactionData(r3dScaleformMovie* pMovie, const Scaleform::GFx::Value* args, unsigned argCount);
 
Newbie Spellweaver
Joined
Feb 7, 2014
Messages
16
Reaction score
2
When I run the Query gave this error:

KQjWqdX - [Release] Working GC Transactions - RaGEZONE Forums
 

Attachments

You must be registered for see attachments list
Experienced Elementalist
Joined
Oct 23, 2013
Messages
289
Reaction score
29
Laenoar - [Release] Working GC Transactions - RaGEZONE Forums



Im getting some errors :/
How can I fix them ?
(Im working with the new DNC Release)

--- Merged ---

Help me please

[Err] 42S02 - [SQL Server]Invalid object name 'dbo.WZ_GetTransactions'.

 
Last edited by a moderator:
Master Summoner
Joined
Mar 30, 2013
Messages
543
Reaction score
72
Guess you've forgotten this, Laenoar:

Code:
struct TSEntry_s
    {
        char    type[256];
        char    time[256];
        int        itemID;
        float    amount;
        float    balance;
        int        id;
    };
 
Back
Top