查看: 356|回复: 17

[问题求助] 就教一下只能在副本里利用的技术!

[复制链接]

72

时沙

0

精华

2

主题

声望: 107   虚弱: 0

Lv.2(潜行者)

假死猎人

 楼主| 发表于 2021-3-19 10:25:49 | 显示全部楼层 |阅读模式
50DKP
这个是怎样实现的。还是VM不支持这个!就是物品技术只能在FB利用。不在副本就提醒“你必须处于s%状态” 这个笔墨。叨教这个是数据库还是源码实现的。DKP不多了。如能处理顿时补上。

1

1

最佳答案

查看完整内容

是在源码里实现的!具体是在spell.cpp系列的源码文件里,控制技能的源码系列文件有很多,基本都在spell关键字里面的cpp里。找到了文件之后搜索技能id(数字)然后就可以找到触发条件,把需要满足的条件注释掉即可
回复

使用道具 举报

209

时沙

1

精华

0

主题

声望: 161   虚弱: 0

Lv.2(潜行者)

今天也只能打恢复的增强萨金鼠(ytfirefox制)

发表于 2021-3-19 10:25:50 发表自手机触屏版 | 显示全部楼层
是在源码里实现的!具体是在spell.cpp系列的源码文件里,控制技能的源码系列文件有很多,基本都在spell关键字里面的cpp里。找到了文件之后搜索技能id(数字)然后就可以找到触发条件,把需要满足的条件注释掉即可
回复

使用道具 举报

200

时沙

0

精华

1

主题

声望: 964   虚弱: 1

Lv.3(忠诚者)

炉石假死猎人吟游牧师金鼠(ytfirefox制) 犇向牛年(fang139842制)

发表于 2021-3-20 00:12:31 发表自手机触屏版 | 显示全部楼层
lua也许可以?
回复

使用道具 举报

72

时沙

0

精华

2

主题

声望: 107   虚弱: 0

Lv.2(潜行者)

假死猎人

 楼主| 发表于 2021-3-20 01:13:47 发表自手机触屏版 | 显示全部楼层
好吧你赢了 发表于 2021-3-20 00:12
lua也许可以?

不用lua!就想知道是数据库还是源码实现的!
回复

使用道具 举报

41

时沙

0

精华

2

主题

声望: 280   虚弱: 0

Lv.2(潜行者)

炉石

发表于 2021-3-20 14:58:40 | 显示全部楼层
一看就是非常高深的问题, 我不懂  给你顶一下
回复

使用道具 举报

790

时沙

8

精华

12

主题

声望: 5669   虚弱: 0

Lv.6(觉醒者)

犇向牛年(fang139842制)炉石伊利丹·怒风积少成多时沙之瓶炉石天马雷施银色北伐军祖国万岁!!小咕信仰战今天也只能打恢复的增强萨吟游牧师潜行者金鼠(ytfirefox制)

发表于 2021-3-20 16:55:35 | 显示全部楼层
你描述的还不够明确或者有具体的实例说明!

一般类似的(在3.3.5环境下)可以在spell.dbc中设置;
1、其第[19]列:施法需要的静物/区域 对应 SpellFocusObject.dbc
2、其第[225]列:施法需要区域 对应 AreaTable.dbc

再复杂点还可以用 conditions 表(SourceType=17)在增加某些条件来限制对应的法术/技能
[发帖际遇]: altf4在魔古山宝库发现大量宝箱,大肆搜刮后获得523 金币. 幸运榜 / 衰神榜
We will never be slaves !But we will be conquerors .
这个世界随着我的痛苦而起伏,那些卑微的王国在我的怒火下颤抖 !
回复

使用道具 举报

188

时沙

0

精华

0

主题

声望: 290   虚弱: 0

Lv.2(潜行者)

炉石金鼠(ytfirefox制)

发表于 2021-3-20 17:11:39 | 显示全部楼层
楼上正解    具体还要看情况
回复

使用道具 举报

72

时沙

0

精华

2

主题

声望: 107   虚弱: 0

Lv.2(潜行者)

假死猎人

 楼主| 发表于 2021-3-22 16:21:10 | 显示全部楼层
楼上各位大佬,原因找到了。在源码里。但是这段源码只查询数据库area字段的第一个ID而不是全部读取。在下边哪里着手?(就是我设置多区域同一个技能,但是就是只读第一个区域其他区域失效。)

void SpellMgr::LoadSpellAreas()
{
    mSpellAreaMap.clear();                                  // need for reload case
    mSpellAreaForQuestMap.clear();
    mSpellAreaForActiveQuestMap.clear();
    mSpellAreaForQuestEndMap.clear();
    mSpellAreaForAuraMap.clear();

    uint32 count = 0;

    //                                                              0      1     2            3                   4          5           6         7       8
    std::unique_ptr<QueryResult> result(WorldDatabase.Query("SELECT spell, area, quest_start, quest_start_active, quest_end, aura_spell, racemask, gender, autocast FROM spell_area"));

    if (!result)
    {
        BarGoLink bar(1);

        bar.step();

        sLog.outString();
        sLog.outString(">> Loaded %u spell area requirements", count);
        return;
    }

    BarGoLink bar(result->GetRowCount());

    do
    {
        Field* fields = result->Fetch();

        bar.step();

        uint32 spell = fields[0].GetUInt32();
        SpellArea spellArea;
        spellArea.spellId             = spell;
        spellArea.areaId              = fields[1].GetUInt32();
        spellArea.questStart          = fields[2].GetUInt32();
        spellArea.questStartCanActive = fields[3].GetBool();
        spellArea.questEnd            = fields[4].GetUInt32();
        spellArea.auraSpell           = fields[5].GetInt32();
        spellArea.raceMask            = fields[6].GetUInt32();
        spellArea.gender              = Gender(fields[7].GetUInt8());
        spellArea.autocast            = fields[8].GetBool();

        if (!sSpellMgr.GetSpellEntry(spell))
        {
            if (!sSpellMgr.IsExistingSpellId(spell))
                sLog.outErrorDb("Spell %u listed in `spell_area` does not exist", spell);
            continue;
        }

        {
            bool ok = true;
            SpellAreaMapBounds sa_bounds = GetSpellAreaMapBounds(spellArea.spellId);
            for (SpellAreaMap::const_iterator itr = sa_bounds.first; itr != sa_bounds.second; ++itr)
            {
                if (spellArea.spellId != itr->second.spellId)
                    continue;
                if (spellArea.areaId != itr->second.areaId)
                    continue;
                if (spellArea.questStart != itr->second.questStart)
                    continue;
                if (spellArea.auraSpell != itr->second.auraSpell)
                    continue;
                if ((spellArea.raceMask & itr->second.raceMask) == 0)
                    continue;
                if (spellArea.gender != itr->second.gender)
                    continue;

                // duplicate by requirements
                ok = false;
                break;
            }
回复

使用道具 举报

72

时沙

0

精华

2

主题

声望: 107   虚弱: 0

Lv.2(潜行者)

假死猎人

 楼主| 发表于 2021-3-22 16:22:01 | 显示全部楼层
forazeroth 发表于 2021-3-20 10:40
是在源码里实现的!具体是在spell.cpp系列的源码文件里,控制技能的源码系列文件有很多,基本都在spell关键 ...

大佬,找到位置了。代码在8楼。帮忙参谋一下。
回复

使用道具 举报

72

时沙

0

精华

2

主题

声望: 107   虚弱: 0

Lv.2(潜行者)

假死猎人

 楼主| 发表于 2021-3-22 16:23:29 | 显示全部楼层
altf4 发表于 2021-3-20 16:55
你描述的还不够明确或者有具体的实例说明!

一般类似的(在3.3.5环境下)可以在spell.dbc中设置;

大佬,找到位置了。代码在8楼。帮忙参谋一下。
回复

使用道具 举报

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