actboy168 / YDWE

A Tool to Help the Creation of Warcraft III Map
GNU General Public License v3.0
469 stars 137 forks source link

预处理生成物编引擎是如何判断上次生成的对象是否被修改的? #152

Closed PhoenixZeng closed 5 years ago

PhoenixZeng commented 5 years ago

目前我封装了两种读取表格你用预处理生成物编的方法 其中一种无论对象是否有变化都会提示修改 另一种可以正确的识别是否有变化 希望可以告知预处理生成物编引擎是如何判断当前对象是否比修改的? 这样我更容易去进行修正我的bug

另: 在预处理时 打印大量日志会导致ydwe崩溃 (log.info(xxx)) 也不算特别多 1MB左右

sumneko commented 5 years ago

本次创建对象的属性和现有对象的属性不同就会提示有变化。你可以检查一下是不是你生成了一些错误的数据,这些数据会在保存时纠正,导致每次都不同。

PhoenixZeng commented 5 years ago

目前是采用读取了一行表格 再用slk元数据的那种四词type作为键去读数据.再将键替换成英文key. 并针对表格特点 将null引入.找了一下没找到问题. 估计是产生了你说的那种错误的数据 .

--k是id
--v是来自表格的一行
        for k1 ,v1 in pairs(v) do
            if v1 == "null" then
                v[k1] = ""
            elseif v1 == "" then
                v[k1] = nil
            end
        end
        local oid = v.oid
        v.id = nil
        v.oid = nil
        v.TYPE = nil
        local obj = slk[type][oid]:new(k)(v)
PhoenixZeng commented 5 years ago

哇 忽然发现你们的元数据和slk的不一样 slk里面有一些是重复字段.我看你们是在技能的一些字段后面加数字来区别等级 有些重复的采用_1,_2来处理的.除了这两项还有别的不同吗? 我感觉需要看看源码了