actboy168 / MoeHero

我的英雄不可能那么萌
GNU General Public License v3.0
80 stars 38 forks source link

模拟投射物会造成异步吗 #16

Closed hongtaoStudio closed 5 years ago

hongtaoStudio commented 5 years ago

目前只能定位到这块代码导致异步


function mt:range_attack_start(data)
    --发射一个弹道
    local target = data.target
    local size = self:get_size()
    local start = self:get_launch_point()
    local speed = self.missile_speed or (self.weapon and self.weapon['弹道速度']) or self:get_slk('Missilespeed_1', 0)
    local arc = self.weapon and self.weapon['弹道弧度'] or self:get_slk('Missilearc_1', 0)
    local mover_data = ac.mover.target
    {
        source = self,
        start = start,
        target = target,
        path = true,
        speed = speed,
        model = self.missile_art or (self.weapon and self.weapon['弹道模型']) or self:get_slk 'Missileart_1',
        height = self:get_point() * target:get_point() * arc,
        damage = data.damage,
        size = size,
        skill = false,
        need_elevation = self:is_type('英雄'),
    }

    -- 弹道击中目标时造成伤害
    function mover_data:on_finish()
        if self.target:is_alive() then
            data.missile = mover_data.mover
            self.source:attackDamage(data)
        end
    end

    if speed <= 0 then
        mover_data.mover:set_position(target:get_point(), true)
        mover_data.mover:set_high(mover_data.target_high)
        mover_data:on_finish()
        mover_data:remove()
    end
end
hongtaoStudio commented 5 years ago

进一步确认到

    if move_index then
        mover.mover_group[move_index] = nil
        mover.count = mover.count - 1
    end
    local tbl = {}
    for mover_data in pairs(mover.mover_group) do
        tbl[#tbl + 1] = mover_data
    end
    for i = 1, #tbl do
        move_index = tbl[i]
        if tbl[i].paused <= 0 then
            mover.next(tbl[i])
        end
    end
    move_index = nil
end

pairs(mover.mover_group) 导致的乱序,既然 libs_debug.cpp 中

static int gchash(lua_State* /*L*/)
    {
        // ÒѾ­Ã»ÓÃÁË
        return 0;
    }

这里已经是空实现了,那么设置 gchash 还有作用吗