Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 103 additions & 0 deletions common/luaUtilities/lua_rules_msg.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
--- LuaRulesMsg wire format (widget↔gadget); keep serialization and parsing in one place

local LuaRulesMsg = {}

local RESOURCE_SHARE_PREFIX = "share:resource:"

---Serialize a resource share request for SendLuaRulesMsg
---@param senderTeamID number
---@param targetTeamID number
---@param resourceType string
---@param amount number
---@return string
function LuaRulesMsg.SerializeResourceShare(senderTeamID, targetTeamID, resourceType, amount)
return RESOURCE_SHARE_PREFIX .. senderTeamID .. ":" .. targetTeamID .. ":" .. resourceType .. ":" .. amount
end

---Parse a resource share message from RecvLuaMsg
---@param msg string
---@return ResourceShareParams|nil params nil if not a resource share message or invalid
function LuaRulesMsg.ParseResourceShare(msg)
if msg:sub(1, #RESOURCE_SHARE_PREFIX) ~= RESOURCE_SHARE_PREFIX then
return nil
end

local parts = {}
for part in msg:gmatch("[^:]+") do
parts[#parts + 1] = part
end

if #parts < 6 then
return nil
end

local senderTeamID = tonumber(parts[3])
local targetTeamID = tonumber(parts[4])
local resourceType = parts[5]
local amount = tonumber(parts[6])

if not senderTeamID or not targetTeamID or not resourceType or not amount or amount <= 0 then
return nil
end

return {
senderTeamID = senderTeamID,
targetTeamID = targetTeamID,
resourceType = resourceType,
amount = amount,
}
end

local UNIT_TRANSFER_PREFIX = "share:units:"

---@class UnitTransferParams
---@field targetTeamID number
---@field unitIDs number[]

---Serialize a unit transfer request for SendLuaRulesMsg
---@param targetTeamID number
---@param unitIDs number[]
---@return string
function LuaRulesMsg.SerializeUnitTransfer(targetTeamID, unitIDs)
return UNIT_TRANSFER_PREFIX .. targetTeamID .. ":" .. table.concat(unitIDs, ",")
end

---Parse a unit transfer message from RecvLuaMsg
---@param msg string
---@return UnitTransferParams|nil params nil if not a unit transfer message or invalid
function LuaRulesMsg.ParseUnitTransfer(msg)
if msg:sub(1, #UNIT_TRANSFER_PREFIX) ~= UNIT_TRANSFER_PREFIX then
return nil
end

local rest = msg:sub(#UNIT_TRANSFER_PREFIX + 1)
local colonPos = rest:find(":")
if not colonPos then
return nil
end

local targetTeamID = tonumber(rest:sub(1, colonPos - 1))
if not targetTeamID then
return nil
end

local unitIDsStr = rest:sub(colonPos + 1)
local unitIDs = {}
for idStr in unitIDsStr:gmatch("[^,]+") do
local id = tonumber(idStr)
if id then
unitIDs[#unitIDs + 1] = id
end
end

if #unitIDs == 0 then
return nil
end

return {
targetTeamID = targetTeamID,
unitIDs = unitIDs,
}
end

return LuaRulesMsg
31 changes: 0 additions & 31 deletions luarules/gadgets/game_disable_unit_sharing.lua

This file was deleted.

49 changes: 0 additions & 49 deletions luarules/gadgets/game_no_share_to_enemy.lua

This file was deleted.

63 changes: 0 additions & 63 deletions luarules/gadgets/game_prevent_excessive_share.lua

This file was deleted.

106 changes: 0 additions & 106 deletions luarules/gadgets/game_restrict_unit_sharing.lua

This file was deleted.

Loading
Loading