-- <*
|
|
-- @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
|