-- <* -- @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("如邀请社团助手协助完成拼单,收益增长值将比邀请玩家低,是否确认邀请?", 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 = "系统在线" -- 邀请情况 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 = "放置冒险中" 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("%s", 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