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;
Adatbázisban kell tárolnod vhogy, h megkapta-e vagy nem.
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
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.
Köszönöm a választ!
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 :).
#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
Köszönöm Sunny!
TrinityCore rev. 2012-09-22 02:41:36 -0700 (5faa9d37b424+) (Unix, Release)-n Beforogna a script?
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...