2025-06-04 05:02:57 +08:00

257 lines
6.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

MsgParserProxy = class('MsgParserProxy', pm.Proxy)
MsgParserProxy.Instance = nil;
MsgParserProxy.NAME = "MsgParserProxy"
--[item=xxxx] [npc=yyyy] []
function MsgParserProxy:ctor(proxyName, data)
self.proxyName = proxyName or MsgParserProxy.NAME
if(MsgParserProxy.Instance == nil) then
MsgParserProxy.Instance = self
end
self:InitPatterns()
end
function MsgParserProxy:InitPatterns()
self.myName = "%[PlayerName%]"
self.upAdvLvCost = "%[UpAdvLvCost%]"
self.itemPattern = "({item=(%d+)(,-)(%d-)})"
self.npcPattern = "({npc=(%d+)(,-)(%d-)})"
self.mapPattern = "({map=(%d+)})"
self.questPattern = "({quest=(%d+)})"
self.countDownPattern = "({countDown=(%d+)(,-)(%d-)})"
self.iconPattern = "({(%w+)icon=(%w+)(_-)(%w-)})"
-- self.mainStagePattern = "({ectype=(%d+)})"
-- self.subStagePattern = "({stage=(%d+)})"
self.singleIconPattern = "(%w+)=(%w+_*%w*)"
end
-- function MsgParserProxy:DoParse(text)
-- end
function MsgParserProxy:GetIconInfo(text)
return string.match(text, self.singleIconPattern)
end
--是否使用[item=21321],兌換[item=232321]?
--是否賣掉%s個[item=%s],獲得%s金幣
function MsgParserProxy:ReplaceIconInfo(text,replace)
replace = replace or ""
return string.gsub(text,self.iconPattern,replace)
end
function MsgParserProxy:TryParse(text,...)
local isError
text,isError = self:ReplaceDynamicParams(text,...)
return self:DoParse(text), isError
end
local function GetMatchPatternTimes(text,pattern,index)
local s,e = string.find(text,pattern,index)
if(e) then
return GetMatchPatternTimes(text,pattern,e) + 1
end
return 0
end
function MsgParserProxy:ReplaceDynamicParams(text,...)
local textNum = GetMatchPatternTimes(text,"%%s+",1)
-- local textNum = 0
-- for str in string.gmatch(text , "%%s+") do
-- textNum = textNum + 1
-- end
if(...~=nil and textNum ~= 0) then
local argLength = select("#", ...)
if argLength == textNum then
return string.format(text,...)
else
printRed(string.format("MsgParserProxy ReplaceDynamicParams : text = %s , textNum = %s , #arg = %s",tostring(text),tostring(textNum),tostring(argLength)))
local argStr = {}
local isError
for k,v in ipairs({...}) do
table.insert( argStr, v )
end
if argLength > textNum then
for i=argLength,(textNum+1),-1 do
table.remove(argStr , i)
end
elseif argLength < textNum then
for i=1,(textNum - argLength) do
table.insert(argStr , argLength + i , "(缺少參數)")
end
isError = true
end
return string.format(text,unpack(argStr)),isError
end
else
return text
end
end
local str,id,split,num,replaceStr
function MsgParserProxy:_ReplaceItemPattern(text)
str,id,split,num = string.match(text, self.itemPattern)
if(str) then
replaceStr = self:GetItemNameWithQuality(id,num)
if(replaceStr~=nil) then
text = (string.gsub(text,str,replaceStr))
return self:_ReplaceItemPattern(text)
end
end
return text
end
function MsgParserProxy:_ReplaceNpcPattern(text)
str,id,split,num = string.match(text, self.npcPattern)
if(str) then
replaceStr = self:GetNpcNameWithQuality(id,num)
if(replaceStr~=nil) then
text = (string.gsub(text,str,replaceStr))
return self:_ReplaceNpcPattern(text)
end
end
return text
end
function MsgParserProxy:_ReplaceMapPattern(text)
str,id = string.match(text, self.mapPattern)
if(str) then
replaceStr = self:GetMapName(id)
if(replaceStr~=nil) then
text = (string.gsub(text,str,replaceStr))
return self:_ReplaceMapPattern(text)
end
end
return text
end
function MsgParserProxy:_ReplaceQuestPattern(text)
str,id,split,num = string.match(text, self.questPattern)
if(str) then
replaceStr = self:GetQuestName(id)
if(replaceStr~=nil) then
text = (string.gsub(text,str,replaceStr))
return self:_ReplaceQuestPattern(text)
end
end
return text
end
local _ReplaceItemPattern = MsgParserProxy._ReplaceItemPattern
local _ReplaceNpcPattern = MsgParserProxy._ReplaceNpcPattern
local _ReplaceMapPattern = MsgParserProxy._ReplaceMapPattern
local _ReplaceQuestPattern = MsgParserProxy._ReplaceQuestPattern
function MsgParserProxy:DoParse(text)
--物品
text = _ReplaceItemPattern(self,text)
--npc
text = _ReplaceNpcPattern(self,text)
--map
text = _ReplaceMapPattern(self,text)
--quest
text = _ReplaceQuestPattern(self,text)
text = StringUtil.Replace(text,self.myName,self:GetMyName())
text = StringUtil.Replace(text,self.upAdvLvCost,self:GetUpAdvLvCostStr())
return text
end
function MsgParserProxy:TryParseCountDown(text, isHideTime)
local data
for str,time,split,num in string.gmatch(text, self.countDownPattern) do
if isHideTime then
text = (string.gsub(text,str,""))
else
text = (string.gsub(text,str,"%%s"))
end
data = {time=tonumber(time),decimal = (num~=nil and tonumber(num) or 0),isHideTime=isHideTime}
end
return text,data
end
function MsgParserProxy:GetQuestName(id)
-- local data = Table_Quest[tonumber(id)]
local data = QuestProxy.Instance:getStaticDataById(id)
if(data~=nil) then
return data.Name
end
return nil
end
function MsgParserProxy:GetMapName(id)
local data = Table_Map[tonumber(id)]
if(data~=nil) then
return data.NameZh
end
return nil
end
function MsgParserProxy:GetCachedItemNameWithQuality(id)
local data = Table_Item[tonumber(id)]
if(data~=nil) then
if(data.customColorName==nil) then
data.customColorName = ItemQualityColor[data.Quality]..data.NameZh.."[-]"
end
return data.customColorName
end
return nil
end
function MsgParserProxy:GetItemNameWithQuality(id,num)
local data = Table_Item[tonumber(id)]
if(data~=nil) then
local numStr = ""
if(num~=nil and num~="") then numStr = "×"..num end
if(data.Quality==1) then return ItemQualityColor[data.Quality]..data.NameZh..numStr.."[-]" end
return '[c]'..ItemQualityColor[data.Quality]..data.NameZh..numStr.."[-][/c]"
end
return nil
end
function MsgParserProxy:GetNpcNameWithQuality(id,num)
local data = Table_Npc[tonumber(id)]
if(data~=nil) then
local numStr = ""
if(num~=nil and num~="") then numStr = "×"..num end
return data.NameZh..numStr
end
return nil
end
function MsgParserProxy:GetMyName()
if(self.myself==nil) then
self.myself = Game.Myself
end
if(self.myself and self.myself.data) then
return self.myself.data:GetName()
end
return "我"
end
function MsgParserProxy:GetUpAdvLvCostStr()
local result = "";
if(self.myself==nil) then
self.myself = Game.Myself
end
if(self.myself)then
local nowAdvlv = AdventureDataProxy.Instance:getManualLevel()
local cost = nowAdvlv and Table_AdventureLevel[nowAdvlv] and Table_AdventureLevel[nowAdvlv].Item;
if(cost)then
local id = cost.id;
local num = cost.num;
if(Table_Item[id] and num)then
result = num..Table_Item[id].NameZh;
end
end
end
return result;
end