查看: 106|回复: 1

[问题求助] 关于事务框架源码的利用题目

[复制链接]

203

时沙

0

精华

5

主题

声望: 686   虚弱: 0

Lv.3(忠诚者)

瓦格里的标记假死猎人今天也只能打恢复的增强萨金鼠(ytfirefox制)

 楼主| 发表于 2021-4-1 13:59:58 | 显示全部楼层 |阅读模式
10DKP
本帖最初由 tangsilu2009 于 2021-4-1 14:06 编辑

源代码是在论坛下载的,编译时有个题目,就是显现没有成员event_name,start_time,length,occurence..........
麻烦大神能帮我分析下这个要怎样点窜处理。本人是AZ的焦点
#include "ScriptMgr.h"

struct CustomEventTemplate
{
    std::string event_name;
    uint64 start_time;
    uint64 length;
    uint64 occurence;
    std::string notice_60s;
    std::string notice_30s;
    std::string notice;
    std::string notice_done;
    bool flag;
    IntervalTimer m_timer_60s;
    IntervalTimer m_timer_30s;
    IntervalTimer m_timer;
    IntervalTimer m_timer_done;
};
std::vector<CustomEventTemplate> CustomEventInfo;
class Custom_Event : public WorldScript
{
public:
    Custom_Event() : WorldScript("Custom_Event") {}
    time_t t;

    void LoadDataFromDataBase()
    {

        CustomEventInfo.clear();
        QueryResult result = WorldDatabase.PQuery("SELECT event_name, UNIX_TIMESTAMP(start_time),length, occurence,notice_60s,notice_30s,notice,notice_done FROM wow_custom_event");
        if (!result)
        {
            return;
        }
        do
        {
            Field* fields = result->Fetch();
            CustomEventTemplate CustomEventTemp;
            CustomEventTemp.event_name               = fields[0].GetString();
            CustomEventTemp.start_time                   = fields[1].GetUInt64();
            CustomEventTemp.length                    = fields[2].GetUInt64();
            CustomEventTemp.occurence           = fields[3].GetUInt64();
                        CustomEventTemp.notice_60s                        = fields[4].GetString();
                        CustomEventTemp.notice_30s                        = fields[5].GetString();
                        CustomEventTemp.notice                                = fields[6].GetString();
                        CustomEventTemp.notice_done                        = fields[7].GetString();
            CustomEventInfo.push_back(CustomEventTemp);
        }
        while (result->NextRow());
    }
    void OnConfigLoad(bool /*reload*/)
    {
        LoadDataFromDataBase();//worldscript可以实现启动办事端加载数据库
    }
    void OnStartup()
    {
                for (uint32 i=0;i<CustomEventInfo.size();i++)
                {
                        //按时器设备
                        CustomEventInfo.m_timer_60s.SetInterval(CustomEventInfo.occurence*60*1000);
                        CustomEventInfo.m_timer_60s.SetCurrent((time(&t)-CustomEventInfo.start_time)*1000+61*1000);
                        CustomEventInfo.m_timer_30s.SetInterval(CustomEventInfo.occurence*60*1000);
                        CustomEventInfo.m_timer_30s.SetCurrent((time(&t)-CustomEventInfo.start_time)*1000+31*1000);
                        CustomEventInfo.m_timer.SetInterval(CustomEventInfo.occurence*60*1000);
                        CustomEventInfo.m_timer.SetCurrent((time(&t)-CustomEventInfo.start_time)*1000);
                        CustomEventInfo.m_timer_done.SetInterval(CustomEventInfo.occurence*60*1000);
                        CustomEventInfo.m_timer_done.SetCurrent((time(&t)-CustomEventInfo.start_time)*1000-CustomEventInfo.length*60*1000);
                }
    }
    void OnUpdate(const uint32 diff)
    {
        for (uint32 i=0;i<CustomEventInfo.size();i++)
        {
                        CustomEventInfo.m_timer_60s.Update(diff);
                        if (CustomEventInfo.m_timer_60s.Passed())
                        {
                                CustomEventInfo.m_timer_60s.Reset();
                                SessionMap const& smap = sWorld->GetAllSessions();//获得一切在线玩家
                                for (SessionMap::const_iterator iter = smap.begin(); iter != smap.end(); ++iter)
                if (Player* player = iter->second->GetPlayer())
                {
                    if (player->GetSession())
                                        {
                                                player->GetSession()->SendNotification("︻╋████◤");
                                                player->GetSession()->SendNotification(CustomEventInfo.notice_60s.c_str());//60秒事务提醒
                                                player->GetSession()->SendNotification("︻╋████◤");
                                        }
                }
                        }
                        CustomEventInfo.m_timer_30s.Update(diff);
                        if (CustomEventInfo.m_timer_30s.Passed())
                        {
                                CustomEventInfo.m_timer_30s.Reset();
                                SessionMap const& smap = sWorld->GetAllSessions();//获得一切在线玩家
                                for (SessionMap::const_iterator iter = smap.begin(); iter != smap.end(); ++iter)
                if (Player* player = iter->second->GetPlayer())
                {
                    if (player->GetSession())
                                        {
                                                player->GetSession()->SendNotification("︻╋████◤");
                                                player->GetSession()->SendNotification(CustomEventInfo.notice_30s.c_str());//30秒事务提醒
                                                player->GetSession()->SendNotification("︻╋████◤");
                                        }
                }
                        }
                        CustomEventInfo.m_timer.Update(diff);
                        if (CustomEventInfo.m_timer.Passed())
                        {
                                CustomEventInfo.m_timer.Reset();
                                SessionMap const& smap = sWorld->GetAllSessions();//获得一切在线玩家
                                for (SessionMap::const_iterator iter = smap.begin(); iter != smap.end(); ++iter)
                if (Player* player = iter->second->GetPlayer())
                {
                    if (player->GetSession())
                                        {
                                                player->GetSession()->SendNotification("︻╋████◤");
                                                player->GetSession()->SendNotification(CustomEventInfo.notice.c_str());//事务起头提醒
                                                player->GetSession()->SendNotification("︻╋████◤");
                                        }
                }
                        }
                        CustomEventInfo.m_timer_done.Update(diff);
                        if (CustomEventInfo.m_timer_done.Passed())
                        {
                                CustomEventInfo.m_timer_done.Reset();
                                SessionMap const& smap = sWorld->GetAllSessions();//获得一切在线玩家
                                for (SessionMap::const_iterator iter = smap.begin(); iter != smap.end(); ++iter)
                if (Player* player = iter->second->GetPlayer())
                {
                    if (player->GetSession())
                                        {
                                                player->GetSession()->SendNotification("︻╋████◤");
                                                player->GetSession()->SendNotification(CustomEventInfo.notice_done.c_str());//事务竣事提醒
                                                player->GetSession()->SendNotification("︻╋████◤");
                                        }
                }
                        }
            if (((time(&t)-CustomEventInfo.start_time)%(CustomEventInfo.occurence*60))<=CustomEventInfo.length*60)
            {
                CustomEventInfo.flag=true;
            }
            else
                CustomEventInfo.flag=false;
        }
    }
};
class npc_summon : public CreatureScript
{
public:
    npc_summon() : CreatureScript("npc_summon")
    {
    }
    bool OnGossipHello(Player * player, Creature * creature)
    {
        for (uint32 i=0;i<CustomEventInfo.size();i++)
        {
            if (CustomEventInfo.flag)
                player->PlayerTalkClass->GetGossipMenu().AddMenuItem(GOSSIP_ICON_CHAT, CustomEventInfo.event_name, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
        }
        player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
        return true;
    }
    bool OnGossipSelect(Player * player, Creature * creature, uint32 sender, uint32 actions)
    {
        if (sender==GOSSIP_SENDER_MAIN)
        {
            /*这里停止事务处置*/
        }
        return true;
    }
};
void AddSC_Custom_Event()
{
    new Custom_Event();
    new npc_summon();
}

回复

使用道具 举报

180

时沙

3

精华

8

主题

声望: 2645   虚弱: 1

Lv.3(忠诚者)

犇向牛年(fang139842制)炉石瓦格里的标记信仰战吟游牧师金鼠(ytfirefox制)

发表于 2021-4-2 09:16:30 | 显示全部楼层
不懂源码,帮不上
回复

使用道具 举报

快速回复 返回顶部 返回列表