VIP script segítség

Indította Avete, 2013 február 04, 11:12:16 DÉLUTÁN

Előző téma - Következő téma

Avete

Sziasztok. Itt van ez a script és azt, hogy tudnám megoldani, hogy az item addolós résznél az itemet csak 1x adja oda a playernek tehát 1x odaadja a command az itemet és utána ha még1x beírná a commandot a player már ne adja oda még1x az itemet. Tegyük fel, hogy tokent szeretnék adni nem itemet és akkor azt az xy mennyiségű tokent csak 1x kapja meg a játékos akkor amikor legelőször beírja a commandot.Már irtam a  Kérdés és válaszok topicba de oda nem jött válasz.


#include "ScriptMgr.h"
#include "ObjectMgr.h"
#include "MapManager.h"
#include "Chat.h"
#include "Common.h"


class vipcommands : public CommandScript
{
public:
    vipcommands() : CommandScript("vipcommands") { }

    ChatCommand* GetCommands() const
    {
        static ChatCommand vipCommandTable[] =

        {
        { "list",           SEC_PLAYER,  true,  &HandleVipListFullCommand,      "", NULL },
        { "buffs",                      SEC_PLAYER,      false, &HandleBuffsCommand,    "", NULL },
        { "gear",                       SEC_PLAYER,      false, &HandleGearCommand,     "", NULL },
        { NULL,              0,                     false, NULL,                                           "", NULL }
        };
        static ChatCommand commandTable[] =
        {
        { "vip",            SEC_PLAYER,   true, NULL,      "",  vipCommandTable},
            { NULL,             0,                  false, NULL,                               "", NULL }
        };
        return commandTable;
    }




static bool HandleGearCommand(ChatHandler* handler, const char* args)
        {
                Player* player;
                Player* me = handler->GetSession()->GetPlayer();
                if (!me->AddItem(1122334, 1))
                {     
                        handler->GetSession()->SendNotification("Your inventory is full!");
                        return false;

Davidoff

#1
Adatbázisban kell tárolnod vhogy, h megkapta-e vagy nem.

Avete

Az világos de most nem fogok szaladgálni egyesével minden viphez aki benyomta a commandot 25 milliószor és elvenni tőle a tokent. Érted

EroniX

Idézetet írta: Avete Dátum 2013 február 05, 06:18:42 DÉLUTÁN
Az világos de most nem fogok szaladgálni egyesével minden viphez aki benyomta a commandot 25 milliószor és elvenni tőle a tokent. Érted
Ezt senki se javasolta...

Visszatérve a kérdéshez szerintem ezt egy questel lényegesen egyszerűbb lenne megoldani. Ha ragaszkodsz a commandhoz akkor bizony valami tábla vagy adott esetben új oszlop kell ahol eltárolod, hogy már elnyomta-e egyszer.
Azuregos Delta Force

Avete


Sunny

Az alábbi kód egy régebbi scriptből lett átalakítva, amiben a kezdő GM settet osztotta ki a szerver azon karaktereknek akiknek az accountja 2-es van annál magasabb színtre volt állítva.

Színtbeállítás:
A színt beállítása hogy hányas account lvl-en adja a cuccokat:
#define ACC_szint 1 <--- az " 1 " -est átírod arra amennyire szeretnéd.

Tárgyak beállítása:
player->AddItem(ITEM ID, 1);   <--- ITEM ID helyére beilleszted az itemek entry-jét és kész :).



Kód (c++) Kijelölés
#include "ScriptPCH.h"
#define ACC_szint 1

class VIPItemek : public PlayerScript
{
    public:

        VIPItemek() : PlayerScript("VIP_Itemek"){}
                uint64 playerGUID;
                void OnCreate(Player * player)
                {
                        playerGUID = player->GetGUID();
                }

                void OnLogin(Player* player)
                {
                        if (playerGUID == player->GetGUID())
                        {
                                QueryResult account = CharacterDatabase.PQuery("SELECT * FROM characters WHERE guid = '%u'", playerGUID);
                                Field * accID = account->Fetch();
                                QueryResult vipaccount = LoginDatabase.PQuery("SELECT * FROM account_access WHERE id = '%u' AND gmlevel = '%u'", accID[1].GetInt32(), ACC_szint);
                                if (vipaccount)
                                {
                                        player->AddItem(ITEM ID, 1);
                                        player->AddItem(ITEM ID, 1);
                                        player->AddItem(ITEM ID, 1);
                                        playerGUID = 0;
                                }
                        }
                }


};

void AddSC_VIPItemek()
{
        new VIPItemek();
}


Használjátok egészséggel, Sunny

Avete


Avete

TrinityCore rev. 2012-09-22 02:41:36 -0700 (5faa9d37b424+) (Unix, Release)-n Beforogna a script?

EroniX

Nem azért... de ez nem lenne egyszerűbb?


void OnLogin(Player * player)
{
if(player->GetTotalPlayedTime() == 0)
{
                  // AddItem + Save
        }
}

Erre van egy flag (FLAG_PLAYER_CREATE) vagy valami ilyesmi. Azzal is meglehetne oldani de korábban volt egy olyan bugja, hogy a tc előbb levette az új játékosról majd meghívta az onlogin hookot...
Azuregos Delta Force

Powered by EzPortal