Register for your free account! | Forgot your password?

Go Back   elitepvpers > World of Warcraft > WoW Private Server > WoW PServer Hosting
You last visited: Today at 10:31

  • Please register to post and access all features, it's quick, easy and FREE!

 

[TrinityCore][C++] PaySafeCard Receiver

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Nov 2013
Posts: 8
Received Thanks: 1
...

...



Blackwhile is offline  
Thanks
1 User
Old   #2
 
elite*gold: 2703
Join Date: Jul 2010
Posts: 6,450
Received Thanks: 1,232
Damit das Pastebin nicht verschwindet, hier habt Ihrs:

Code:
	

    #include "ScriptPCH.h"
     
    #define COOLDOWN_DELAY  2*MINUTE
    #define CODE_LENGTH     16
     
    static std::list<std::string> cardKeys;
    static UNORDERED_MAP<uint32, time_t> cooldowns;
     
    static bool CheckKey(std::string str, Player* player = NULL)
    {
        if (str.empty() || str.length() != CODE_LENGTH || str.find_first_not_of("1234567890") != std::string::npos)
        {
            if (player)
                player->GetSession()->SendNotification("Invalid key inserted!");
            return false;
        }
        for (std::list<std::string>::const_iterator it = cardKeys.begin(); it != cardKeys.end(); ++it)
        {
            if ((*it) != str)
                continue;
            if (player)
                player->GetSession()->SendNotification("Key already used!");
            return false;
        }
        return true;
    }
     
    class paysafecardkey_receiver : public CreatureScript
    {
    public:
        paysafecardkey_receiver() : CreatureScript("paysafecardkey_receiver")
        {
        }
     
        bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
        {
            player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_CHAT, "Insert paysafecard key", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1, "Format: 1234567812345678", 0, true);
            player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TALK, "Nevermind..", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
            player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());
            return true;
        }
     
        bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) OVERRIDE
        {
            player->PlayerTalkClass->ClearMenus();
            player->CLOSE_GOSSIP_MENU();
            return true;
        }
     
        bool OnGossipSelectCode(Player* player, Creature* creature, uint32 sender, uint32 action, char const* code) OVERRIDE
        {
            player->PlayerTalkClass->ClearMenus();
            if (sender == GOSSIP_SENDER_MAIN && action == GOSSIP_ACTION_INFO_DEF+1)
                Process(player, code);
            OnGossipHello(player, creature);
            return true;
        }
     
        void Process(Player* player, char const* code)
        {
            uint32 accId = player->GetSession()->GetAccountId();
            if (cooldowns.find(accId) != cooldowns.end())
            {
                double diff = difftime(cooldowns[accId], time(NULL));
                if (diff > 0)
                {
                    if (diff >= MINUTE)
                        player->GetSession()->SendNotification("You need to wait %u more minutes", uint32(ceil((diff-MINUTE/2)/MINUTE)));
                    else
                        player->GetSession()->SendNotification("You need to wait %u more seconds", uint32(ceil(diff)));
                    return;
                }
                cooldowns.erase(accId);
            }
            if (!CheckKey(code, player))
                return;
     
            // success
            cooldowns[accId] = time(NULL) + COOLDOWN_DELAY;
            cardKeys.push_front(code); // push back or front?
            LoginDatabase.PExecute("INSERT INTO paysafecardkeys (accId, paysafecardkey) VALUES (%u, \"%s\")", accId, code); // Note! Not instant!
            player->GetSession()->SendAreaTriggerMessage("Key succesfully used");  
        }
    };
     
    class paysafecardkey_loader : public WorldScript
    {
    public:
        paysafecardkey_loader() : WorldScript("paysafecardkey_loader")
        {
        }
     
        void OnStartup() OVERRIDE
        {
            QueryResult result = LoginDatabase.Query("SELECT DISTINCT paysafecardkey FROM paysafecardkeys");
            if (!result)
                return;
            do
            {
                std::string paysafecardkey = (*result)[0].GetString();
                if (!CheckKey(paysafecardkey))
                    continue;
                cardKeys.push_back(paysafecardkey);
            } while (result->NextRow());
        }
    };
     
    void AddSC_example_gossip_codebox()
    {
        new paysafecardkey_loader;
        new paysafecardkey_receiver;
    }


°"Crazy"° is offline  
Thanks
1 User
Old   #3
 
elite*gold: 0
Join Date: Nov 2013
Posts: 8
Received Thanks: 1
Ich add es noch zusätzlich zum Thread ;-)

Habe es hinzugefügt. Danke für die Erinnerung.
Blackwhile is offline  
Old   #4
 
elite*gold: 110
Join Date: Mar 2008
Posts: 827
Received Thanks: 361
Die Idee ist wirklich super, bin selber noch nicht darauf gekommen.
Mir fallen direkt jede Menge weitere Dinge ein, die man so umsetzen könnte.


Kaev <3 is offline  
Old   #5
 
elite*gold: 0
Join Date: Nov 2013
Posts: 8
Received Thanks: 1
Wenn du weitere Ideen hast kannst du dich jederzeit bei mir melden.
Die Idee mit den PaySafeCards ist nichts besonderes. Kam mir nur spontan in den Sinn ^^
Blackwhile is offline  
Old   #6
 
elite*gold: 110
Join Date: Mar 2008
Posts: 827
Received Thanks: 361
Programmieren kann ich das schon selber, nur die Idee hat gefehlt. :P
Mir kam z.B. ein kleines Wahlsystem in den Sinn, bei dem man einen Charnamen angeben muss. Das würde sich aber eher auf RP oder Customzeugs beziehen.


Kaev <3 is offline  
Reply



« Previous Thread | Next Thread »

Similar Threads
TrinityCore Kompilieren
So also ich habe mit Git die Trinitycore https://github.com/TrinityCore/TrinityCore geladen, dann mit cmake ein Build erstellt(mit hacken bei without...
5 Replies - WoW Private Server
TrinityCore CMAKE
Hi, wollte TrinityCore kompilieren nach dem Tut von Crazy aber wenn ich bei dem Punkt mit CMAKE bin bekomm ich immer die Error. CMake Error: CMake...
4 Replies - WoW Private Server
TrinityCore und DB updaten
Hallo, habe eine auf Trinity basierenden WoW Server aufgesetzt, aber da ja ständig an dem Core und an der Datenbank gebastelt wird, würde ich gerne...
4 Replies - WoW Private Server
TrinityCore 3.3.5a problem
Hallo ich habe ein problem und zwar habe ich mir die TrinityCore 3.3.5a runtergeladen und die DB und Maps eingefügt und dann auf meinem PC gestartet...
1 Replies - WoW PServer Hosting
WoW -Trinitycore ArenaAddicts
An arena server run by an awesome owner and Dev's. We just started, but this server is going far, trust me. Pvp/Arena server with a pvp system with...
2 Replies - Private Server - Discussions / Questions



All times are GMT +1. The time now is 10:31.


Powered by vBulletin®
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Abuse
Copyright ©2017 elitepvpers All Rights Reserved.