ro-table/Asstes/Resources/Script/FrameWork/GUI/cell/Adventure/AchievementDescriptionCell.txt
2025-06-04 05:02:57 +08:00

472 lines
15 KiB
Plaintext

local baseCell = autoImport("BaseCell")
AchievementDescriptionCell = class("AchievementDescriptionCell",baseCell)
autoImport("AchievementQuestCell")
autoImport("AchievementPreQuestCell")
AchievementDescriptionCell.behaviorEnum = {
levelup = "levelup",
addfriend = "addfriend",
mapmove = "mapmove",
killmonster = "killmonster",
killcat = "killcat",
Commissioned = "Commissioned",
Quest = "questfinish",
Achieve = "achievementfinish",
}
AchievementDescriptionCell.SubAchieve = {
Achieve = 1,
Quest = 2
}
local tempVector3 = LuaVector3.zero
local tempArray = {}
AchievementDescriptionCell.RewardTextColor = LuaColor.New(65/255,138/255,197/255,1);
AchievementDescriptionCell.SubAchieveClick = "AchievementDescriptionCell_SubAchieveClick"
function AchievementDescriptionCell:Init()
self:initView()
self:AddCellClickEvent();
-- self:addViewEventListener()
-- self:addListEventListener()
end
function AchievementDescriptionCell:initView( )
-- body
self.name = self:FindComponent("AchievementName",UILabel)
self.completeDate = self:FindComponent("completeDate",UILabel)
self.AchievementCondition = self:FindComponent("AchievementCondition",UILabel)
self.description = self:FindComponent("description",UILabel)
self.icon = self:FindComponent("icon",UISprite)
self.bg = self:FindComponent("bg",UISprite)
self.description = self:FindComponent("description",UILabel)
local rewardTitle = self:FindComponent("rewardTitle",UILabel)
rewardTitle.text = ZhString.AdventureAchievePage_RewardTitle
local rewardGrid = self:FindComponent("rewardGrid",UIGrid)
self.rewardGrid = UIGridListCtrl.new(rewardGrid,AdvTipRewardCell,"AdvTipRewardCell")
self.rewardGrid:AddEventListener(MouseEvent.MouseClick,self.RewardItemClick,self)
local achievementQuestGrid = self:FindComponent("AchievementQuestGrid",UIGrid)
self.achievementQuestGrid = UIGridListCtrl.new(achievementQuestGrid,AchievementQuestCell,"AchievementQuestCell")
self.achievementQuestGrid:AddEventListener(MouseEvent.MouseClick,self.SubAchieveClick,self)
self.completeIcon = self:FindGO("completeIcon")
self.AchievementIcon = self:FindComponent("AchievementIcon",UISprite)
self.collapse = self:FindGO("collapse")
self.shareBtn = self:FindGO("shareBtn")
self:Hide(self.shareBtn)
self.rewardCt = self:FindGO("rewardCt")
self.questCt = self:FindGO("questCt")
local tipCell = self:FindGO("AdvTipRewardCell")
self.AdvTipRewardCell = AdvTipRewardCell.new(tipCell)
self:AddClickEvent(self.shareBtn,function ( )
-- body
end)
self.addSymbol = self:FindGO("addSymbol")
self:AddClickEvent(self.addSymbol ,function ( )
-- body
ServiceAchieveCmdProxy.Instance:CallRewardGetAchCmd(self.data.id)
self:PlayUnlockEffect()
end)
self.content = self:FindGO("content")
self.collRewardGrid = self:FindComponent("collRewardGrid",UITable)
self.BufferLabel = self:FindComponent("BufferLabel",UILabel)
self:Hide(self.BufferLabel.gameObject)
self.effectContainer = self:FindGO("EffectContainer");
end
function AchievementDescriptionCell:SubAchieveClick( cellCtl )
if(cellCtl.data and cellCtl.data.type == AchievementDescriptionCell.SubAchieve.Achieve)then
self:PassEvent(AchievementDescriptionCell.SubAchieveClick , cellCtl.data);
end
end
function AchievementDescriptionCell:RewardItemClick( cellCtl )
if(cellCtl.data)then
local data = cellCtl.data.value
if(data and type(data) == "table")then
local newClickId = data[1]
if(self.clickId~=newClickId)then
self.clickId = newClickId;
local callback = function ()
self.clickId = 0
end
local itemData = ItemData.new(nil,data[1])
local stick = self.bg
if(itemData.staticData.Type == 10)then
--TODO
local t = Table_Appellation[itemData.staticData.id]
if(t and t.GroupID)then
local csv = Table_Appellation[itemData.staticData.id]
local sdata = TitleData.new(t.GroupID,csv)
sdata.hideFlag = true
local data = {
itemdata = sdata,
};
if(self.data and not self.data:canGetReward( ) and self.data:getCompleteString())then
data.itemdata.unlocked=true
end
TipManager.Instance:ShowTitleTip(data,stick,nil,{200,0})
end
else
local sdata = {
itemdata = itemData,
funcConfig = {},
hideGetPath = true,
callback = callback,
};
self:ShowItemTip(sdata,stick, nil, {200,0});
end
else
self:ShowItemTip();
self.clickId = 0;
end
else
self:ShowItemTip();
self.clickId = 0;
end
else
self:ShowItemTip();
self.clickId = 0;
end
end
function AchievementDescriptionCell:SetData( data )
-- body
self.data = data
self:SetRewardData()
self.name.text = self.data.staticData.Name
local atlas = self.data.staticData.Atlas
atlas = UIAtlasConfig.IconAtlas[atlas]
atlas = atlas and atlas or UIAtlasConfig.IconAtlas["uiicon"]
local sus = IconManager:SetIcon(self.data.staticData.Icon,self.icon, atlas)
if(sus)then
self:Show(self.icon.gameObject)
else
self:Hide(self.icon.gameObject)
end
-- self.icon:MakePixelPerfect();
local textData = Table_AchievementText[self.data.staticData.AchievementTextID]
local textStr = ""
if(textData)then
-- if(self.data.staticData.Visibility == 1)then
-- textStr = ZhString.AdventureAchievePage_InvisibleAchievePreText
-- end
textStr = textData.Text
end
self.description.text = textStr
self:SetTraceInfo()
self:SetAchieveQuest()
local dateStr = data:getCompleteString()
if(data:canGetReward())then
self:Show(self.addSymbol)
self:SetTextureGrey(self.icon)
self:Hide(self.completeIcon)
elseif(dateStr)then
self:Hide(self.addSymbol)
self:SetTextureWhite(self.icon)
self:Show(self.completeDate.gameObject)
self:Show(self.completeIcon)
-- self:Show(self.shareBtn)
self.completeDate.text = string.format(ZhString.AdventureAchievePage_CompleteDate,dateStr)
local bd = NGUIMath.CalculateRelativeWidgetBounds(self.rewardCt.transform,true)
local height = bd.size.y
local x,y,z = LuaGameObject.GetLocalPosition(self.rewardCt.transform)
y = y - height - 20
local x1,y1,z1 = LuaGameObject.GetLocalPosition(self.completeDate.transform)
tempVector3:Set(x1,y,z1)
self.completeDate.transform.localPosition = tempVector3
else
self:Hide(self.addSymbol)
self:SetTextureGrey(self.icon)
self:Hide(self.completeIcon)
self:Hide(self.shareBtn)
self:Hide(self.completeDate.gameObject)
end
self.isSelected = true
self:setSelected(false)
end
function AchievementDescriptionCell:SetAchieveQuest( )
local bd = NGUIMath.CalculateRelativeWidgetBounds(self.description.transform,true)
local height = bd.size.y
local x,y,z = LuaGameObject.GetLocalPosition(self.description.transform)
y = y - height - 20
local x1,y1,z1 = LuaGameObject.GetLocalPosition(self.questCt.transform)
tempVector3:Set(x1,y,z1)
self.questCt.transform.localPosition = tempVector3
local staticData = self.data.staticData
local preach = staticData.behavior == AchievementDescriptionCell.behaviorEnum.Achieve and staticData.time or nil
local quest = staticData.behavior == AchievementDescriptionCell.behaviorEnum.Quest and staticData.time or nil
TableUtility.ArrayClear(tempArray)
if(quest and #quest>0)then
for i=1,#quest do
local exsitQuestData = QuestProxy.Instance:getQuestDataByIdAndType(quest[i])
if(not exsitQuestData)then
exsitQuestData = QuestProxy.Instance:getQuestDataByIdAndType(quest[i],SceneQuest_pb.EQUESTLIST_SUBMIT)
end
local result = self:GetQuestName(quest[i])
local preQuestS,preAccept = self:GetPreQuest(quest[i])
local questListType = exsitQuestData and exsitQuestData.questListType or preAccept
local data = {type = AchievementDescriptionCell.SubAchieve.Quest,content = result,questListType = questListType ,preQuestS = preQuestS}
table.insert(tempArray,data)
end
end
if(preach and #preach>0)then
for i=1,#preach do
local tableData = Table_Achievement[preach[i]]
local content = ""
if(tableData)then
content= tableData.Name
local data = {type = AchievementDescriptionCell.SubAchieve.Achieve,content = content,id = preach[i]}
table.insert(tempArray,data)
end
end
end
self.achievementQuestGrid:ResetDatas(tempArray)
local bd = NGUIMath.CalculateRelativeWidgetBounds(self.questCt.transform,true)
local height = bd.size.y
local x,y,z = LuaGameObject.GetLocalPosition(self.questCt.transform)
y = y - height - 20
local x1,y1,z1 = LuaGameObject.GetLocalPosition(self.rewardCt.transform)
tempVector3:Set(x1,y,z1)
self.rewardCt.transform.localPosition = tempVector3
end
function AchievementDescriptionCell:GetQuestName(questId)
if(self.data.questDatas)then
for i=1, #self.data.questDatas do
local single = self.data.questDatas[i]
if(single.id == questId)then
return single.name
end
end
end
end
function AchievementDescriptionCell:GetValidPreQuest(questId,pre)
if(pre and #pre>0)then
local list = {}
local preAccept = nil
local id = QuestProxy.Instance:getQuestID(questId)
local questIds = {}
local questData = {}
for i=1,#pre do
local single = pre[#pre - i +1]
local preId = QuestProxy.Instance:getQuestID(single.id)
local questData = questIds[preId] or {}
questData[#questData +1] = single
if(id ~= preId and not questIds[preId])then
list[#list+1] = questData
questIds[preId] = questData
else
if(not preAccept and id == preId)then
local exsitQuestData = QuestProxy.Instance:getQuestDataByIdAndType(single.id)
if(exsitQuestData)then
preAccept = SceneQuest_pb.EQUESTLIST_ACCEPT
end
end
end
end
return list,preAccept
end
end
function AchievementDescriptionCell:GetPreQuest(questId)
if(self.data.questDatas)then
for i=1, #self.data.questDatas do
local single = self.data.questDatas[i]
if(single.id == questId)then
return self:GetValidPreQuest(questId,single.pre)
end
end
end
end
function AchievementDescriptionCell:GetAchieveQuestTrace(questData,step)
end
function AchievementDescriptionCell:SetTraceInfo( )
-- levelup = "levelup"
-- addfriend = "addfriend",
-- mapmove = "mapmove",
-- killmonster = "killmonster",
-- killcat = "killcat",
-- Commissioned = "Commissioned",
local behavior = self.data.staticData.behavior
-- if(AchievementDescriptionCell.behaviorEnum[behavior])then
local traceText = ""
-- if(behavior == AchievementDescriptionCell.behaviorEnum.levelup)then
-- local nowRoleLevel = MyselfProxy.Instance:RoleLevel() or 0
-- local currentBaseLv = tostring(nowRoleLevel)
-- local time = self.data.staticData.time and self.data.staticData.time[1] or 0
-- traceText = string.format(self.data.staticData.combination,currentBaseLv,time)
-- elseif(behavior == AchievementDescriptionCell.behaviorEnum.addfriend)then
-- local time = self.data.staticData.time and self.data.staticData.time[1] or 0
-- traceText = string.format(self.data.staticData.combination,self.data:getProcess(),time)
-- elseif(behavior == AchievementDescriptionCell.behaviorEnum.mapmove)then
-- traceText = self.data.staticData.combination
-- elseif(behavior == AchievementDescriptionCell.behaviorEnum.killmonster)then
-- local time = self.data.staticData.time and self.data.staticData.time[1] or 0
-- traceText = string.format(self.data.staticData.combination,self.data:getProcess(),time)
-- elseif(behavior == AchievementDescriptionCell.behaviorEnum.killcat)then
-- local time = self.data.staticData.time and self.data.staticData.time[1] or 0
-- traceText = string.format(self.data.staticData.combination,self.data:getProcess(),time)
-- elseif(behavior == AchievementDescriptionCell.behaviorEnum.Commissioned)then
-- local time = self.data.staticData.time and self.data.staticData.time[1] or 0
-- traceText = string.format(self.data.staticData.combination,self.data:getProcess(),time)
-- end
traceText = string.format(self.data.staticData.combination,self.data:getProcess())
self.AchievementCondition.text = traceText
-- else
-- self:Log("error,unsupport behavior!!!!!")
-- end
end
function AchievementDescriptionCell:checkCanAddPrayCount( behavior )
local tb = GameConfig.AchievementType_TimeReward or {}
return TableUtility.TableFindKey(tb,behavior)
end
function AchievementDescriptionCell:SetRewardData( )
local staticData = self.data.staticData
local behavior = staticData.behavior
local RewardExp = staticData.RewardExp
local RewardItems = staticData.RewardItems
local RewardTimes = staticData.RewardTimes
-- local rewards = ItemUtil.GetRewardItemIdsByTeamId(rewardId)
-- if(rewards and #rewards>0)then
local advRDatas = {}
self.noReward = true
if(RewardExp)then
local temp = {};
temp.type = "AdventureValue";
temp.value = RewardExp;
temp.showName = true;
temp.color = AchievementDescriptionCell.RewardTextColor;
table.insert(advRDatas, temp);
self.noReward = false
end
if(self:checkCanAddPrayCount(behavior) and RewardTimes and RewardTimes ~="")then
local temp = {};
temp.type = "text";
temp.preLabelTxt = RewardTimes;
temp.value = "";
table.insert(advRDatas, temp);
self.noReward = false
end
local titleData = nil
local normalData = nil
self.noReward = false
local titleReward = false
if(RewardItems and #RewardItems>0)then
for i=1,#RewardItems do
local single = RewardItems[i]
local itemData = Table_Item[single[1]]
if(itemData )then
if(itemData.Type == 10)then
titleData = itemData
local titleStr = TitleProxy.Instance:GetPropStrByTitleId(single[1])
if(titleStr)then
self.BufferLabel.text = titleStr
titleReward = true
end
else
normalData = itemData
end
local temp = {};
local data = {
single[1],
single[2]
}
temp.type = "item"
temp.value = data
temp.showName = true
temp.color = AchievementDescriptionCell.RewardTextColor;
temp.addbracket = true
table.insert(advRDatas, temp);
end
end
end
if(titleReward)then
self:Show(self.BufferLabel.gameObject)
else
self:Hide(self.BufferLabel.gameObject)
end
self.rewardGrid:ResetDatas(advRDatas)
if(not self.data:getCompleteString() and advRDatas[1])then
local tipData = advRDatas[1]
tipData.showName = false
self:Show(self.collRewardGrid.gameObject)
self.AdvTipRewardCell:SetData(tipData)
else
self:Hide(self.collRewardGrid.gameObject)
end
if(titleData)then
self:Show(self.AchievementIcon.gameObject)
local atlas = RO.AtlasMap.GetAtlas("NewUI1")
self.AchievementIcon.atlas = atlas
self.AchievementIcon.spriteName = "Adventure_icon_badge"
elseif(normalData)then
self:Show(self.AchievementIcon.gameObject)
IconManager:SetItemIcon(normalData.Icon,self.AchievementIcon)
else
self:Hide(self.AchievementIcon.gameObject)
end
if(not self.noReward)then
self:Show(self.rewardCt)
else
self:Hide(self.collRewardGrid.gameObject)
self:Hide(self.rewardCt)
end
self.collRewardGrid:Reposition()
end
function AchievementDescriptionCell:setSelected(isSelected)
if(self.isSelected ~= isSelected)then
self.isSelected = isSelected
if(isSelected)then
-- self.bg.height = 333
self:Show(self.collapse)
self:Hide(self.collRewardGrid.gameObject)
else
-- self.bg.height = 110
self:Hide(self.collapse)
if(self.data and not self.noReward and not self.data:getCompleteString())then
self:Show(self.collRewardGrid.gameObject)
end
end
self.collRewardGrid:Reposition()
local bd = NGUIMath.CalculateRelativeWidgetBounds(self.content.transform,false)
local height = bd.size.y
self.bg.height = height + 25
end
NGUITools.UpdateWidgetCollider(self.gameObject);
end
function AchievementDescriptionCell:PlayUnlockEffect()
self:PlayUIEffect(EffectMap.UI.Activation,self.effectContainer,true)
end