sumneko / w3x2lni

魔兽地图格式转换工具
GNU General Public License v3.0
115 stars 44 forks source link

转slk后lua创建单位失败 #83

Closed zengfanfan closed 3 years ago

zengfanfan commented 3 years ago

【现象】 构建obj正常,slk就不行,或者修改 config.iniremove_unuse_object = false 就可以

【版本】 2.7.2

【附代码】

在 main.lua 中: (base.string2id是从 moehero 拿过来的)

local j = require 'jass.common'
require 'war3.base'

local u
u = j.CreateUnit(j.Player(0), base.string2id('Ewar'), 0, 0, 0)
print("u=", u)
u = j.CreateUnit(j.Player(0), base.string2id('hpea'), 0, 0, 0)
print("u=", u)
u = j.CreateUnit(j.Player(0), base.string2id('Hamg'), 0, 0, 0)
print("u=", u)
u = j.CreateUnit(j.Player(0), base.string2id('hfoo'), 0, 0, 0)
print("u=", u)

if true then return end

输出:

u=      0
u=      0
u=      0
u=      0
sumneko commented 3 years ago

https://github.com/sumneko/w3x2lni/blob/master/docs/zh-cn/plugin.md#on_mark

zengfanfan commented 3 years ago

不行呢:(只有 步兵可以,没添加插件的时候也是只能创建步兵,别的都不行)

create hero[Ewar.0] = nil
create hero[Hamg.0] = nil
create unit[hfoo.1048743] = Footman
create unit[hpea.0] = nil

【附】tools/w3x2lni/plugin/.config (本无 plugin 目录,自建之)

units

【附】tools/w3x2lni/plugin/units.lua

local mt = {}

mt.info = {
    name = "units",
    version = 1.0,
    author = "winewolf@qq.com",
    description = "设置引用单位",
}

--[[ on_mark
引用标记事件,在该事件中可以对对象的引用进行标记,以免转换Slk时对象被当做未使用对象而删除。
这个事件期待返回一张表,这张表的所有key对应的对象都会被标记为引用。
--]]
function mt:on_mark()
    print(" ***** do units filter ***** ") -- 构建时这个也没打印
    return {
        hpea = true,
        hfoo = true,
        hkni = true,
        hrif = true,
        hmtm = true,
        hgyr = true,
        hgry = true,
        hmpr = true,
        hsor = true,
        hmtt = true,
        hspt = true,
        hdhw = true,
        Hpal = true,
        Hamg = true,
        Hmkg = true,
        Hblm = true,
    }
end

return mt
zengfanfan commented 3 years ago

78 应该是这个问题了,修复之后没有发 release 了?

谁能发我个编译好的不?或者教下怎么编译最新版——文档里面没看到编译方法

sumneko commented 3 years ago

直接覆盖script目录即可

zengfanfan commented 3 years ago

可以了,插件可以正常工作,单位创建成功~~ φ(゜▽゜*)♪