源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

287 lines
12 KiB

-- <*
-- @Author: Saber
-- @Description: 社团拼单邀请社员节点
-- *>
GuildSpellListInviteItem = GuildSpellListInviteItem or BaseClass(BaseItem)
local GuildSpellListInviteItem = GuildSpellListInviteItem
local TimeUtil = TimeUtil
local ShaderTools = ShaderTools
local PetModel = PetModel
function GuildSpellListInviteItem:__init(parent_wnd,prefab_asset,layer_name)
self.base_file = "guild"
self.layout_file = "GuildSpellListInviteItem"
self.parent_wnd = parent_wnd
self.layer_name = layer_name
-- 邀请cd
self.is_invited = false
self.model = GuildModel:getInstance()
self.invite_cd = self.model:GetGuildKvByKey("order_receive_time").val or 60
self.is_in_cd = false
self:Load()
end
function GuildSpellListInviteItem:Load_callback()
local nodes = {
"invite_btn:obj:img",
"invite_btn/invite_btn_lb:tmp",
"head_con",
"info_con", "info_con/ai_icon:img", "info_con/vip_con:obj", "info_con/name:tmp",
"online_icon:img", "online_flag:tmp", "arrow:img",
"profit_pec:tmp",
}
self:GetChildren(nodes)
self.head_item = HeadRoleItem.New(self.head_con)
self.head_item:SetItemSize(69, 69)
self.vip_item = RoleVipItem.New(self.vip_con)
self.vip_item:SetAnchoredPosition(0, 0)
self:AddEvents()
if self.need_refreshData then
self:UpdateView()
end
end
function GuildSpellListInviteItem:AddEvents( )
local function click_event(target)
if target == self.invite_btn_obj then
if self.data then
local cur_order_id = self.model:GetCurSelectedSpellListId()
if not self.is_invited then -- 发送邀请前判断是否已经满人了
local data = self.model:GetCurSelectedSpellListData()
if not data then return end
-- 获取订单配置
local sl_cfg = Config.Guildorder[data.cfg]
local max_member = TableSize(data.teams) >= (sl_cfg.max_num - 1)
-- 满人了不邀请
if max_member then
Message.show("拼单人数已达上限", "fault")
return
end
end
if self.data.role_id == 1 then -- 假人,走不同的邀请逻辑
-- 2代表取消邀请,1代表邀请
if self.is_invited then
self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40037, cur_order_id, 2)
else
local function ok( ... )
self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40037, cur_order_id, 1)
end
local life_skill_active = PetModel:getInstance():IsLifeSkillActived(PetConst.LifeSkill.GuildSpellAssitRewardUp)
if life_skill_active then
ok()
else
local ask_str = string.format("如邀请<color=%s>社团助手</color>协助完成拼单,收益增长值将比邀请玩家低,是否确认邀请?", ColorUtil.GREEN_DARK)
Alert.show(ask_str, Alert.Type.Two, ok, nil, "确定", "取消")
end
end
else
-- 邀请真人玩家
if self.is_invited then
-- Message.show("已邀请该社员", "fault")
return
end
if self.can_invite then
self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40037, cur_order_id, self.data.role_id)
self.model:SetGuildSLInviteMemTime(self.data.role_id)
self:UpdateRealRoleInviteStatus()
return
end
end
end
end
end
AddClickEvent(self.invite_btn_obj, click_event)
local function updateCurSLData()
-- 主要是为了监听邀请状态的变化
self:UpdateView()
end
self:BindEvent(self.model, GuildModel.UPDATE_SELECTED_GUILD_SL_DATA, updateCurSLData)
-- 更新选中的订单时,刷新每个成员的收益率
local function updateProfitWhileChangeSpellList()
self:UpdateProfitPercentage()
end
self:BindEvent(self.model, GuildModel.UPDATE_SELECTED_GUILD_SL_DATA, updateProfitWhileChangeSpellList)
end
function GuildSpellListInviteItem:SetData( data,index,buff_add_percent )
self.data = data
self.buff_add_percent = buff_add_percent
if self.is_loaded then
self.need_refreshData = false
self:UpdateView()
else
self.need_refreshData = true
end
end
function GuildSpellListInviteItem:UpdateView( )
if self.data then
if self.data.role_id == 1 then -- 假人
self:UpdateFakeRoleData()
else
self:UpdateRealRoleData()
end
self:UpdateProfitPercentage()
end
end
-- 加载假人数据
function GuildSpellListInviteItem:UpdateFakeRoleData( )
-- 加载头像
local head_data = {
vo = {
id = self.data.role_id,
profile_photo_id = 424008,
do_not_click = true,
},
show_tip = false,
}
self.head_item:SetData(head_data)
self.head_item:SetGray(false)
-- 加载玩家数据
self.vip_item:SetData(self.data.vip_flag, self.data.sup_vip_type)
self.ai_icon_img.enabled = true
SetAnchoredPositionX(self.name, 42)
self.name_tmp.text = self.data.name
lua_resM:setImageSprite(self, self.online_icon_img, "guild_asset", "guild_sl_online_flag1", true)
self.online_flag_tmp.text = "<color=#2cf86f>系统在线</color>"
-- 邀请情况
self:UpdateFakeRoleInviteStatus()
end
-- 更新假人的邀请情况
function GuildSpellListInviteItem:UpdateFakeRoleInviteStatus( )
self:CleanCDTimer()
self.is_invited = self.model:GetGuildSLInvitedFakeRole()
SetButtonGray(self.invite_btn_img, nil, false)
SetTMPSharedMaterial(self.invite_btn_lb_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn)
if self.is_invited then
self.invite_btn_lb_tmp.text = "取消邀请"
else
self.invite_btn_lb_tmp.text = "请求协助"
end
end
-- 加载真人数据
function GuildSpellListInviteItem:UpdateRealRoleData( )
-- 加载头像
local head_data = {
vo = {
id = self.data.role_id,
server_id = self.data.server_id,
career = self.data.career,
sex = self.data.sex,
turn = self.data.turn,
picture_ver = self.data.picture_ver,
picture = self.data.picture,
profile_photo_id = self.data.profile_photo_id,
level = self.data.level,
dress_board_id = self.data.dress_id or self.data.dress_board,
},
}
self.head_item:SetData(head_data)
-- 加载玩家数据
self.vip_item:SetData(self.data.vip_flag, self.data.sup_vip_type)
SetAnchoredPositionX(self.name, self.data.vip_flag == 0 and 5 or 42)
self.ai_icon_img.enabled = false
self.name_tmp.text = self.data.name
-- 加载在线情况
if self.data.online_flag == 0 and TimeUtil:getServerTime() - self.data.offline_time < 86400 then -- 离线时间不足一天,按放置挂机状态处理
self.online_flag_tmp.text = "<color=#aaaaaa>放置冒险中</color>"
lua_resM:setImageSprite(self, self.online_icon_img, "guild_asset", "guild_sl_online_flag2", true)
else
lua_resM:setImageSprite(self, self.online_icon_img, "guild_asset", "guild_sl_online_flag" .. self.data.online_flag, true)
self.online_flag_tmp.text = string.format("<color=%s>%s</color>",
self.data.online_flag == 0 and "#8b8b8b" or "#2cf86f",
self.data.online_flag == 0 and "离线" or "在线")
end
self.head_item:SetGray(self.data.online_flag == 0)
self:UpdateRealRoleInviteStatus()
end
function GuildSpellListInviteItem:UpdateRealRoleInviteStatus( )
self:CleanCDTimer()
-- 是否已经被邀请
self.is_invited = self.model:GetGuildSLMemInvited(self.data.role_id)
if self.is_invited then
self.invite_btn_lb_tmp.text = "已加入"
SetButtonGray(self.invite_btn_img, nil, true)
SetTMPSharedMaterial(self.invite_btn_lb_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
else
local last_invite_time = self.model:GetGuildSLInviteMemTime(self.data.role_id)
-- 确定是否可以邀请
local function updateInviteCD()
-- 是否处于cd中
self.is_in_cd = TimeUtil:getServerTime() - last_invite_time <= self.invite_cd
self.can_invite = self.data.online_flag == 1 and not self.is_in_cd
if self.is_in_cd then
self.invite_btn_lb_tmp.text = string.format("已邀请(%s)", self.invite_cd - (TimeUtil:getServerTime() - last_invite_time))
SetButtonGray(self.invite_btn_img, nil, true)
SetTMPSharedMaterial(self.invite_btn_lb_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
else
self.invite_btn_lb_tmp.text = "邀请"
SetButtonGray(self.invite_btn_img, nil, not self.can_invite)
SetTMPSharedMaterial(self.invite_btn_lb_tmp, self.can_invite and ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn
or ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
self:CleanCDTimer()
end
end
self.cd_timer_id = GlobalTimerQuest:AddPeriodQuest(updateInviteCD, 1, -1)
-- 先执行一次
updateInviteCD()
SetButtonGray(self.invite_btn_img, nil, not self.can_invite)
SetTMPSharedMaterial(self.invite_btn_lb_tmp, self.can_invite and ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn
or ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
end
end
function GuildSpellListInviteItem:CleanCDTimer( )
if self.cd_timer_id then
GlobalTimerQuest:CancelQuest(self.cd_timer_id)
self.cd_timer_id = nil
end
end
function GuildSpellListInviteItem:UpdateProfitPercentage( )
local data = self.model:GetCurSelectedSpellListData()
if not data then return end
-- 获取订单配置
local sl_cfg = Config.Guildorder[data.cfg]
if self.data.role_id == 1 then -- 假人
--宠物生活技能 拼单邀请社团助手时额外增加收益
local add_ratio = sl_cfg.ai_ratio
local life_skill_active = PetModel:getInstance():IsLifeSkillActived(PetConst.LifeSkill.GuildSpellAssitRewardUp)
local life_skill_ratio = PetModel:getInstance():GetPetLifeSkillRatio(PetConst.LifeSkill.GuildSpellAssitRewardUp)
if life_skill_active then
add_ratio = add_ratio + life_skill_ratio
end
self.profit_pec_tmp.text = string.format("收益+%s%%%s", add_ratio,self.buff_add_percent > 0 and HtmlColorTxt("+"..self.buff_add_percent.."%", ColorUtil.YELLOW_DARK) or "")
SetAnchoredPositionX(self.profit_pec, 115 - (life_skill_active and 8 or 0))
-- 根据是否激活了宠物生活技能,显示出上升箭头
self.arrow_img.enabled = life_skill_active and true or false
SetAnchoredPositionX(self.arrow, self.profit_pec.anchoredPosition.x + self.profit_pec_tmp.preferredWidth * 0.5 + 10)
else
SetAnchoredPositionX(self.profit_pec, 115)
self.arrow_img.enabled = false
self.profit_pec_tmp.text = string.format("收益+%s%%%s", sl_cfg.people_ratio,self.buff_add_percent > 0 and HtmlColorTxt("+"..self.buff_add_percent.."%", ColorUtil.YELLOW_DARK) or "")
end
end
function GuildSpellListInviteItem:__delete( )
if self.head_item then
self.head_item:DeleteMe()
self.head_item = nil
end
if self.vip_item then
self.vip_item:DeleteMe()
self.vip_item = nil
end
self:CleanCDTimer()
end