Skip to content

Commit

Permalink
fix: readbuffer not support sign integer
Browse files Browse the repository at this point in the history
  • Loading branch information
dulingzhi committed Jul 11, 2023
1 parent 126cb86 commit 3ede76b
Show file tree
Hide file tree
Showing 6 changed files with 175 additions and 32 deletions.
30 changes: 25 additions & 5 deletions bin/build.lua
Original file line number Diff line number Diff line change
Expand Up @@ -83,16 +83,28 @@ local function generateAPI(file, name)
o:close()

local apis = {}
local super = {}

local lastfunc
local lastClass
local lastfunc, lastClass, lastSuperClass
for i, line in ipairs(string.split(lua, '\n')) do
if string.startswith(line, '_G.') then
lastClass = line:split(' ')[3]
elseif string.find(line, 'function') then
local cls = string.gmatch(line, "= class%('(%w+)'.*%)")()
if cls then
lastClass = cls
lastSuperClass = nil
elseif string.find(line, '^function ') then
lastfunc = string.gsub(string.gsub(line, 'function %w+:', ''), '%(.*%)', '')
elseif string.find(line, '^end') then
if lastSuperClass then
super[lastSuperClass] = lastClass
else
super[0] = lastClass
end
lastfunc = nil
elseif string.find(line, 'self.def = ') then
local s, i = string.gsub(line, ".*'(%w+)'.*", '%1')
if i > 0 then
lastSuperClass = s
end
elseif string.find(line, 'self.def:') then
local k = string.gsub(line, '.*%(\'(%w+).*', '%1')
apis[k] = {cls = lastClass, func = lastfunc}
Expand All @@ -103,8 +115,16 @@ local function generateAPI(file, name)
for key, value in pairs(apis) do
table.insert(lines, string.format('["%s"]={cls="%s", func="%s"},', key, value.cls, value.func))
end
table.insert(lines, '["super"] = {')
for key, value in pairs(super) do
table.insert(lines, string.format('["%s"]="%s",', key, value))
end
table.insert(lines, '},')
table.insert(lines, '}')
local ret = table.concat(lines, '\n')
local f = io.open(file .. '.txt', 'w')
f:write(ret)
f:close()
return files[name], ret
end

Expand Down
2 changes: 1 addition & 1 deletion init.bat
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
cd /d "%~dp0"
call bin\premake5.exe vs2019
call bin\premake5.exe vs2022
6 changes: 3 additions & 3 deletions src/lua/core/checker.lua
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ function checktype(value, checkType, api, index)
return
end

if checkType == 'float' and t == 'integer' then
if checkType == 'float' and t == 'integer' or checkType == 'integer' and t == 'float' then
return
end

Expand All @@ -42,9 +42,9 @@ function checkenum(value, enum, api, index)
if not e then
return
end
if enumCache[e][value] then
if enumCache[e][value] or value == '' then
return
end

error(string.format([[bad argument #%s to '%s' (%s expected, got %s)]], index, api, enum, type(value)))
error(string.format([[bad argument #%s to '%s' (%s expected, got %s, value %s)]], index, api, enum, type(value), value))
end
30 changes: 17 additions & 13 deletions src/lua/core/dummper.lua
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ function Dummper:prepareAPIs(defType)
return
end

self.file = io.open(string.format([[dump.%s.lua]], defType), 'w')
self.file = io.open(string.format([[%s.lua]], defType), 'w')

end

Expand All @@ -25,13 +25,14 @@ function Dummper:exec(defs)
return
end

local info = {}
local info = {'local u'}
for id, def in pairs(defs) do
local index = #info + 1
local cls
local sub = {}
for k, v in pairs(def.fields) do
if not sourcecode[self.defType][v.id] then
print('Miss API with', self.defType, def.id, v.id, v.value)
local api = sourcecode[self.defType][v.id]
if not api then
-- print('Miss API with', self.defType, def.id, v.id, v.value)
else
local value = v.value
if type(value) == 'string' then
Expand All @@ -41,20 +42,23 @@ function Dummper:exec(defs)
value = '""'
end
end
if v.level then
table.insert(info, string.format('u%s:%s(%s, %s)', def.id, sourcecode[self.defType][v.id].func,
if v.level and v.level > 0 then
table.insert(sub, string.format('u:%s(%s, %s)', api.func,
v.level, value))
else
table.insert(info, string.format('u%s:%s(%s)', def.id, sourcecode[self.defType][v.id].func, value))
table.insert(sub, string.format('u:%s(%s)', api.func, value))
end
cls = sourcecode[self.defType][v.id].cls
end
end

if def.superId then
table.insert(info, index, string.format('\nlocal u%s=%s:new("%s", "%s")', def.id, cls, def.id, def.superId))
local cls = sourcecode[self.defType].super[def.superId or def.id]
if cls then
table.insert(info, index, string.format('\nu=%s:new("%s")', cls, def.id))
else
table.insert(info, index, string.format('\nlocal u%s=%s:new("%s")', def.id, cls, def.id))
cls = sourcecode[self.defType].super["0"]
table.insert(info, index, string.format('\nu=%s:new("%s", "%s")', cls, def.id, def.superId or def.id))
end
if #sub > 0 then
table.insert(info, table.concat(sub, '\n'))
end
end

Expand Down
4 changes: 2 additions & 2 deletions src/lua/core/readbuffer.lua
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ function ReadBuffer:readRaw(n)
end

function ReadBuffer:readInt()
return string.unpack('I4<', self:readRaw(4))
return string.unpack('i4<', self:readRaw(4))
end

function ReadBuffer:readShort()
return string.unpack('I2<', self:readRaw(2))
return string.unpack('i2<', self:readRaw(2))
end

function ReadBuffer:readFloat()
Expand Down
135 changes: 127 additions & 8 deletions src/lua/object/AbilityObjEditing.lua
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
AbilityDefinition = class('AbilityDefinition')
_G.AbilityDefinition = AbilityDefinition

function AbilityDefinition:constructor(id, superId)
if superId then
self.def = createDefinition(DefinitionType.Ability, id, superId)
end
end

function AbilityDefinition:setName(value)
checktype(value, 'string', 'setName', 1)
self.def:setLvlDataString('anam', 0, 0, value)
Expand Down Expand Up @@ -231,6 +237,7 @@ function AbilityDefinition:setHotkeyTurnOff(value)
end

function AbilityDefinition:setRequirements(value)
checktype(self.def, 'table', 'setRequirements', 0)
checktype(value, 'string', 'setRequirements', 1)
self.def:setLvlDataString('areq', 0, 0, value)
end
Expand Down Expand Up @@ -5576,8 +5583,8 @@ end

function AbilityDefinitionNeutralBuilding:setInteractionType(level, value)
checktype(level, 'integer', 'setInteractionType', 1)
checktype(value, 'string', 'setInteractionType', 2)
self.def:setLvlDataString('Neu2', level, 2, value)
checktype(value, 'integer', 'setInteractionType', 2)
self.def:setLvlDataInt('Neu2', level, 2, value)
end

AbilityDefinitionShopSharing = class('AbilityDefinitionShopSharing', AbilityDefinition)
Expand Down Expand Up @@ -5607,8 +5614,8 @@ end

function AbilityDefinitionShopSharing:setInteractionType(level, value)
checktype(level, 'integer', 'setInteractionType', 1)
checktype(value, 'string', 'setInteractionType', 2)
self.def:setLvlDataString('Neu2', level, 2, value)
checktype(value, 'integer', 'setInteractionType', 2)
self.def:setLvlDataInt('Neu2', level, 2, value)
end

AbilityDefinitionRepairHuman = class('AbilityDefinitionRepairHuman', AbilityDefinition)
Expand Down Expand Up @@ -5716,6 +5723,49 @@ function AbilityDefinitionFirelordIncinerate:setDeathDamageHalfArea(level, value
self.def:setLvlDataUnreal('Nic5', level, 5, value)
end

AbilityDefinitionFirelordIncinerateArrow = class('AbilityDefinitionFirelordIncinerateArrow', AbilityDefinition)
_G.AbilityDefinitionFirelordIncinerateArrow = AbilityDefinitionFirelordIncinerateArrow

function AbilityDefinitionFirelordIncinerateArrow:constructor(id)
self.def = createDefinition(DefinitionType.Ability, id, 'ANia')
end

function AbilityDefinitionFirelordIncinerateArrow:setDeathDamageHalfAmount(level, value)
checktype(level, 'integer', 'setDeathDamageHalfAmount', 1)
checktype(value, 'float', 'setDeathDamageHalfAmount', 2)
self.def:setLvlDataUnreal('Nic4', level, 4, value)
end

function AbilityDefinitionFirelordIncinerateArrow:setDeathDamageFullArea(level, value)
checktype(level, 'integer', 'setDeathDamageFullArea', 1)
checktype(value, 'float', 'setDeathDamageFullArea', 2)
self.def:setLvlDataUnreal('Nic3', level, 3, value)
end

function AbilityDefinitionFirelordIncinerateArrow:setBonusDamageMultiplier(level, value)
checktype(level, 'integer', 'setBonusDamageMultiplier', 1)
checktype(value, 'float', 'setBonusDamageMultiplier', 2)
self.def:setLvlDataUnreal('Nic1', level, 1, value)
end

function AbilityDefinitionFirelordIncinerateArrow:setDeathDamageFullAmount(level, value)
checktype(level, 'integer', 'setDeathDamageFullAmount', 1)
checktype(value, 'float', 'setDeathDamageFullAmount', 2)
self.def:setLvlDataUnreal('Nic2', level, 2, value)
end

function AbilityDefinitionFirelordIncinerateArrow:setDeathDamageDelay(level, value)
checktype(level, 'integer', 'setDeathDamageDelay', 1)
checktype(value, 'float', 'setDeathDamageDelay', 2)
self.def:setLvlDataUnreal('Nic6', level, 6, value)
end

function AbilityDefinitionFirelordIncinerateArrow:setDeathDamageHalfArea(level, value)
checktype(level, 'integer', 'setDeathDamageHalfArea', 1)
checktype(value, 'float', 'setDeathDamageHalfArea', 2)
self.def:setLvlDataUnreal('Nic5', level, 5, value)
end

AbilityDefinitionBearform = class('AbilityDefinitionBearform', AbilityDefinition)
_G.AbilityDefinitionBearform = AbilityDefinitionBearform

Expand Down Expand Up @@ -6837,8 +6887,8 @@ end

function AbilityDefinitionNeutralBuildinganyunit:setInteractionType(level, value)
checktype(level, 'integer', 'setInteractionType', 1)
checktype(value, 'string', 'setInteractionType', 2)
self.def:setLvlDataString('Neu2', level, 2, value)
checktype(value, 'integer', 'setInteractionType', 2)
self.def:setLvlDataInt('Neu2', level, 2, value)
end

AbilityDefinitionGhost = class('AbilityDefinitionGhost', AbilityDefinition)
Expand Down Expand Up @@ -11552,8 +11602,8 @@ end

function AbilityDefinitionAlliedBuilding:setInteractionType(level, value)
checktype(level, 'integer', 'setInteractionType', 1)
checktype(value, 'string', 'setInteractionType', 2)
self.def:setLvlDataString('Neu2', level, 2, value)
checktype(value, 'integer', 'setInteractionType', 2)
self.def:setLvlDataInt('Neu2', level, 2, value)
end

AbilityDefinitionControlMagic = class('AbilityDefinitionControlMagic', AbilityDefinition)
Expand Down Expand Up @@ -11674,6 +11724,37 @@ function AbilityDefinitionAllPlus2:setStrengthBonus(level, value)
self.def:setLvlDataInt('Istr', level, 3, value)
end

AbilityDefinitionAllPlus3 = class('AbilityDefinitionAllPlus3', AbilityDefinition)
_G.AbilityDefinitionAllPlus3 = AbilityDefinitionAllPlus3

function AbilityDefinitionAllPlus3:constructor(id)
self.def = createDefinition(DefinitionType.Ability, id, 'AIx3')
end

function AbilityDefinitionAllPlus3:setHideButton(level, value)
checktype(level, 'integer', 'setHideButton', 1)
checktype(value, 'boolean', 'setHideButton', 2)
self.def:setLvlDataBoolean('Ihid', level, 4, value)
end

function AbilityDefinitionAllPlus3:setIntelligenceBonus(level, value)
checktype(level, 'integer', 'setIntelligenceBonus', 1)
checktype(value, 'integer', 'setIntelligenceBonus', 2)
self.def:setLvlDataInt('Iint', level, 2, value)
end

function AbilityDefinitionAllPlus3:setAgilityBonus(level, value)
checktype(level, 'integer', 'setAgilityBonus', 1)
checktype(value, 'integer', 'setAgilityBonus', 2)
self.def:setLvlDataInt('Iagi', level, 1, value)
end

function AbilityDefinitionAllPlus3:setStrengthBonus(level, value)
checktype(level, 'integer', 'setStrengthBonus', 1)
checktype(value, 'integer', 'setStrengthBonus', 2)
self.def:setLvlDataInt('Istr', level, 3, value)
end

AbilityDefinitionCrownofKingsAllPlus5 = class('AbilityDefinitionCrownofKingsAllPlus5', AbilityDefinition)
_G.AbilityDefinitionCrownofKingsAllPlus5 = AbilityDefinitionCrownofKingsAllPlus5

Expand Down Expand Up @@ -13446,6 +13527,37 @@ function AbilityDefinitionSeaWitchForkedLightning:setDistance(level, value)
self.def:setLvlDataUnreal('Ucs3', level, 3, value)
end

AbilityDefinitionLightning = class('AbilityDefinitionLightning', AbilityDefinition)
_G.AbilityDefinitionLightning = AbilityDefinitionLightning

function AbilityDefinitionLightning:constructor(id)
self.def = createDefinition(DefinitionType.Ability, id, 'ACfl')
end

function AbilityDefinitionLightning:setNumberofTargetsHit(level, value)
checktype(level, 'integer', 'setNumberofTargetsHit', 1)
checktype(value, 'integer', 'setNumberofTargetsHit', 2)
self.def:setLvlDataInt('Ocl2', level, 2, value)
end

function AbilityDefinitionLightning:setDamageperTarget(level, value)
checktype(level, 'integer', 'setDamageperTarget', 1)
checktype(value, 'float', 'setDamageperTarget', 2)
self.def:setLvlDataUnreal('Ocl1', level, 1, value)
end

function AbilityDefinitionLightning:setFinalArea(level, value)
checktype(level, 'integer', 'setFinalArea', 1)
checktype(value, 'float', 'setFinalArea', 2)
self.def:setLvlDataUnreal('Ucs4', level, 4, value)
end

function AbilityDefinitionLightning:setDistance(level, value)
checktype(level, 'integer', 'setDistance', 1)
checktype(value, 'float', 'setDistance', 2)
self.def:setLvlDataUnreal('Ucs3', level, 3, value)
end

AbilityDefinitionStrengthMod = class('AbilityDefinitionStrengthMod', AbilityDefinition)
_G.AbilityDefinitionStrengthMod = AbilityDefinitionStrengthMod

Expand Down Expand Up @@ -15876,3 +15988,10 @@ function AbilityDefinitionSunderingBlades:setDefenseTypeAffected(level, types)
checktype(types, 'integer', 'setDefenseTypeAffected', 2)
self.def:setLvlDataInt('Hsb3', level, 3, types)
end

AbilityDefinitionOrb = class('AbilityDefinitionOrb', AbilityDefinition)
_G.AbilityDefinitionOrb = AbilityDefinitionOrb

function AbilityDefinitionOrb:constructor(id)
self.def = createDefinition(DefinitionType.Ability, id, 'Asph')
end

0 comments on commit 3ede76b

Please sign in to comment.