257 lines
6.6 KiB
Plaintext
257 lines
6.6 KiB
Plaintext
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
|
||
|