require("game.proto.110.Require110")
|
|
require("game.chat.ChatModel")
|
|
require("game.chat.TV")
|
|
require("game.chat.ChatView")
|
|
require("game.chat.ChatItem")
|
|
require("game.chat.ChatBarBtn")
|
|
require("game.chat.HornView")
|
|
require("game.chat.IndividuationView")
|
|
require("game.chat.ChannelSettingView")
|
|
require("game.chat.VoiceVo")
|
|
require("game.chat.ChatVoiceManager")
|
|
require("game.chat.CecretView")
|
|
require("game.chat.FaceItem")
|
|
require("game.chat.TextFaceItem")
|
|
require("game.chat.CecretChatItem")
|
|
require("game.chat.HistroyItem")
|
|
require("game.chat.PartnerShowItem")
|
|
require("game.chat.EquipShowItem")
|
|
require("game.chat.CecretShowItem")
|
|
require("game.chat.ChatBagView")
|
|
require("game.chat.ChatCustomTextView")
|
|
require("game.chat.HistoryTextItem")
|
|
require("game.chat.ChatChannelToggleItem")
|
|
ChatController = ChatController or BaseClass(BaseController)
|
|
local table_insert = table.insert
|
|
function ChatController:__init()
|
|
ChatController.Instance = self
|
|
self.model = ChatModel:getInstance()
|
|
|
|
self:RegisterProtocals()
|
|
self:InitEvent()
|
|
end
|
|
|
|
function ChatController:RegisterProtocals()
|
|
self:RegisterProtocal(11000, "on11000")
|
|
self:RegisterProtocal(11001, "on11001")
|
|
self:RegisterProtocal(11002, "on11002")
|
|
self:RegisterProtocal(11102, "on11102")
|
|
self:RegisterProtocal(11003, "on11003")
|
|
self:RegisterProtocal(11004, "on11004")
|
|
self:RegisterProtocal(11005, "on11005")
|
|
self:RegisterProtocal(11010, "on11010")
|
|
self:RegisterProtocal(11011, "on11011")
|
|
self:RegisterProtocal(11013, "on11013")
|
|
self:RegisterProtocal(11016, "on11016")
|
|
self:RegisterProtocal(11017, "on11017")
|
|
self:RegisterProtocal(11020, "on11020")
|
|
self:RegisterProtocal(11021, "on11021")
|
|
self:RegisterProtocal(11050, "on11050")
|
|
self:RegisterProtocal(11014, "on11014")
|
|
self:RegisterProtocal(11060, "on11060")
|
|
self:RegisterProtocal(11061, "on11061")
|
|
self:RegisterProtocal(11063, "on11063")
|
|
self:RegisterProtocal(11022, "on11022") --社团求助
|
|
self:RegisterProtocal(11046, "on11046")
|
|
self:RegisterProtocal(11064, "on11064")--通用怪物AI警戒传闻
|
|
self:RegisterProtocal(11066, "on11066")--屏蔽操作
|
|
self:RegisterProtocal(11065, "on11065")--屏蔽列表
|
|
self:RegisterProtocal(11067, "on11067")-- 剧情气泡推送
|
|
self:RegisterProtocal(11023, "on11023") --模拟聊天缓存
|
|
self:RegisterProtocal(11091, "on11091") --更新通知
|
|
end
|
|
|
|
--公告
|
|
function ChatController:on11050()
|
|
|
|
local vo = SCMD11050.New(true)
|
|
self.model:StartGongGaoList(vo)
|
|
end
|
|
|
|
--物品不够的错误码
|
|
function ChatController:on11000()
|
|
local vo = SCMD11000.New(true)
|
|
if vo then
|
|
ErrorCodeShow(vo.error_code)
|
|
end
|
|
end
|
|
|
|
--通用文字聊天
|
|
function ChatController:on11001()
|
|
|
|
local vo = SCMD11001.New(true)
|
|
|
|
|
|
--if vo.result == 2 then return end -- 有些tips各种格式都有,先开出
|
|
|
|
|
|
local is_in_shield_list = SocialityModel:getInstance():IsRelaviveType(vo.player_id,Config.ConfigSocial.RelativeType.black)
|
|
if is_in_shield_list then--屏蔽掉
|
|
return
|
|
end
|
|
|
|
for k,v in pairs(self.model.limit_way_list) do
|
|
if v == ChatModel.LIMIY_WAY.BABY then-- and vo.channel == ChatModel.CHANNEL_CSCITY then
|
|
local x_s,x_end = string.find(vo.msg,"@showbaby@")
|
|
if x_end and x_end > 0 then
|
|
return
|
|
end
|
|
end
|
|
if v == ChatModel.LIMIY_WAY.CHAT then--then--and vo.channel == ChatModel.CHANNEL_CSCITY then
|
|
local showbaby_s,showbaby_end = string.find(vo.msg,"@showbaby@")
|
|
local team_s,team_end = string.find(vo.msg,"@team@")
|
|
if not showbaby_s and not team_s then
|
|
return
|
|
end
|
|
end
|
|
if v == ChatModel.LIMIY_WAY.RECRUIT then--and vo.channel == ChatModel.CHANNEL_CSCITY then
|
|
local team_s,team_end = string.find(vo.msg,"@team@")
|
|
-- print("============>>> YiRan:ChatController [start:95]team_end:", team_end,"team_s:",team_s)
|
|
if team_end and team_end > 0 then
|
|
return
|
|
end
|
|
end
|
|
end
|
|
if vo.channel == ChatModel.CHANNEL_BARRAGE then--弹幕不走聊天框
|
|
SpiritWarModel:getInstance():TryAddDanMu(vo)
|
|
DiamondFightModel:getInstance():TryAddDanMu(vo)
|
|
else
|
|
if vo.channel == ChatModel.CHANNEL_GUILDTV then--如果是跑马频道的消息 要先做个拼接
|
|
vo.guild_txt = vo.name..":"..vo.msg
|
|
vo.length = CalStringTrueLength(vo.guild_txt) + 0.5--算出字符长度(固定有个0.5占位的中文冒号,应该当中文字符)
|
|
--以下加入弹幕中
|
|
if GuildTVModel:GetInstance().can_fire_TV_barrage then--打开了弹幕界面才能开始发弹幕
|
|
local data = {
|
|
name = vo.name,
|
|
id = vo.role_id,
|
|
time = vo.time,
|
|
}
|
|
data.content = vo.msg
|
|
GuildTVModel:GetInstance():AddGuildTVBarrageMessage(data)
|
|
end
|
|
end
|
|
vo.iType = ChatModel.MSG_TYPE.TEXT --信息的种类是消息非语音
|
|
self.model:AddMsg(vo) --
|
|
self.model:Fire(ChatModel.CHANGE_CHANNEL_SEND_INTERVAL, vo)
|
|
self.model:Fire(ChatModel.UPDATE_SEND_TIME)
|
|
self.model:AddMainRoleChatContent(vo.msg, vo.player_id)
|
|
end
|
|
end
|
|
|
|
--通用文字私聊
|
|
function ChatController:on11003()
|
|
--[[
|
|
channel:int8 // 频道
|
|
role_id:int64 // 玩家id
|
|
figure:rec_figure // 形象数据
|
|
auto_id:int32 // 自增id
|
|
receive_id:int32 // 接受者id
|
|
voice_text:string // 语音文字内容
|
|
voice_msg_time:int16 // 语音时间(秒)
|
|
]]
|
|
local scmd = {}
|
|
|
|
local channel = self:ReadFmt("c")
|
|
local ser_id = UserMsgAdapter.ReadFmt("h")
|
|
local ser_num = UserMsgAdapter.ReadFmt("h")
|
|
local ser_name = UserMsgAdapter.ReadFmt("s")
|
|
-- if role_id == RoleManager:getInstance():GetMainRoleVo().role_id then
|
|
-- return
|
|
-- end
|
|
scmd.player_list = {}
|
|
local figure = {}
|
|
local alength = self:ReadFmt("h")
|
|
for i = 1, alength do
|
|
local data = {player_id = self:ReadFmt("l")}
|
|
FigureProtoVo.ReadFmt(data)
|
|
table.insert(scmd.player_list, data)
|
|
end
|
|
local data_ver, voice_id, receive_id, voice_text, voice_msg_time, send_time = self:ReadFmt("lllshi")
|
|
local lv_rank, combat_rank = self:ReadFmt("cc")
|
|
local mainRoleVo = RoleManager:getInstance():GetMainRoleVo()
|
|
scmd.iType = ChatModel.MSG_TYPE.VOICE
|
|
scmd.voice_id = voice_id
|
|
scmd.length = voice_msg_time
|
|
scmd.channel = channel
|
|
scmd.ser_id = ser_id
|
|
scmd.ser_name = ser_name
|
|
scmd.player_id = scmd.player_list[1].player_id
|
|
scmd.msg = voice_text or ""
|
|
scmd.args = ""
|
|
scmd.result = 0
|
|
scmd.time = send_time
|
|
scmd.data_ver = data_ver
|
|
scmd.ser_num = ser_num
|
|
scmd.lv_rank = lv_rank
|
|
scmd.combat_rank = combat_rank
|
|
|
|
if receive_id == 0 then
|
|
setmetatable(scmd, {__index = scmd.player_list[1]})
|
|
end
|
|
local engine_version = tonumber(AppConst.EnglineVer)
|
|
if engine_version < scmd.data_ver and scmd.data_ver < 34 then
|
|
return
|
|
else
|
|
ChatVoiceManager:getInstance():SetVoiceVersion(scmd.voice_id, scmd.data_ver)
|
|
end
|
|
|
|
local is_in_shield_list = SocialityModel:getInstance():IsRelaviveType(scmd.player_id,Config.ConfigSocial.RelativeType.black)
|
|
if is_in_shield_list then--黑名单屏蔽掉
|
|
return
|
|
end
|
|
|
|
local catch = not self.model:AddMsg(scmd)
|
|
self.model:Fire(ChatModel.CHANGE_CHANNEL_SEND_INTERVAL, scmd)
|
|
self.model:Fire(ChatModel.UPDATE_SEND_TIME)
|
|
self.model:AddMainRoleChatContent(scmd.msg, scmd.player_id)
|
|
if catch then return end
|
|
local subType = SettingModel.C2T[channel]
|
|
local autoPlay = (subType == nil) or (SettingModel:getInstance():GetSettingInfo(SettingModel.TYPE.VOICE, subType) == 1)
|
|
-- local key = GameSettingManager.blockChannel[channel]
|
|
-- local has_block = GameSettingManager:getInstance():GetBlockProperty(key) -- 检查语音自动播放屏蔽
|
|
local has_block = (lua_settingM:GetBlockProperty("chatVoice") == true) -- 检查语音自动播放屏蔽
|
|
if autoPlay and not has_block then
|
|
if SettingModel:getInstance():GetSettingInfo(SettingModel.TYPE.VOICE, SettingModel.SUBTYPE.AUTOPLAY) == 1 then
|
|
local wifiState = Application.internetReachability == UnityEngine.NetworkReachability.IntToEnum(2)
|
|
if wifiState then
|
|
if not ChatVoiceManager:getInstance():GetVoice(scmd.voice_id) then
|
|
self.model:Fire(ChatModel.REQUEST_CCMD_EVENT, 11004, scmd.voice_id, scmd.player_id, scmd.time, "")
|
|
else
|
|
ChatVoiceManager:getInstance():PlayVoice(scmd.voice_id)
|
|
end
|
|
end
|
|
else
|
|
if not ChatVoiceManager:getInstance():GetVoice(scmd.voice_id) then
|
|
self.model:Fire(ChatModel.REQUEST_CCMD_EVENT, 11004, scmd.voice_id, scmd.player_id, scmd.time, "")
|
|
else
|
|
ChatVoiceManager:getInstance():PlayVoice(scmd.voice_id)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- self.model:AddMsg(scmd)
|
|
--print("channel, role_id, voice_msg_time, math.floor(tk_time), ticket =" , channel, role_id, math.floor(voice_msg_time), voice_text, voice_id)
|
|
end
|
|
|
|
--发送语音和语音文字信息
|
|
function ChatController:on11004()
|
|
--[[
|
|
auto_id:int32 // 自增id
|
|
data_send:byte32 // 语音内容
|
|
]]
|
|
local erroCode = self:ReadFmt("i")
|
|
local voice_id = self:ReadFmt("l")
|
|
local voice_data = self:ReadFmt("B")
|
|
if erroCode ~= 1 then
|
|
ErrorCodeShow(erroCode)
|
|
return
|
|
end
|
|
|
|
ChatVoiceManager:getInstance():AddVoiceData(voice_id, voice_data)
|
|
ChatVoiceManager:getInstance():PushPlay(voice_id)
|
|
end
|
|
|
|
function ChatController:on11005()
|
|
local scmd = SCMD11005.New(true)
|
|
if scmd.error_code ~= 1 then
|
|
ErrorCodeShow(scmd.error_code)
|
|
end
|
|
end
|
|
|
|
--缓存
|
|
function ChatController:on11010()
|
|
local vo = SCMD11010.New(true)
|
|
if vo and vo.cache_list and vo.cache_list[1] then
|
|
self.model.all_chat_list[vo.cache_list[1].channel] = nil
|
|
end
|
|
|
|
if vo and vo.cache_list and #vo.cache_list > 0 then --在这防止多次添加
|
|
if vo.cache_list[1].channel == 1 then -- 世界频道的话需要插入缓存的假数据
|
|
local list = self.model:GetAiMsgList() --插入模拟对话的
|
|
if list then
|
|
-- print("============>>> YiRan:ChatController [start:255] #vo.cache_list[1]:",#vo.cache_list,"#lis:t",#list)
|
|
for k,v in pairs(list) do
|
|
table.insert(vo.cache_list,v)
|
|
end
|
|
--print("============>>> YiRan:ChatController [start:255] #vo.cache_list[1]:",#vo.cache_list,"#lis:t",#list)
|
|
end
|
|
end
|
|
local function sort_func(a, b)
|
|
return a.time > b.time
|
|
end
|
|
table.sort( vo.cache_list, sort_func )
|
|
end
|
|
|
|
for i = 1, #vo.cache_list do
|
|
if vo.cache_list[i].result ~= 2 then
|
|
------陌生人离线私聊的特殊处理
|
|
if vo.cache_list[i].channel == 6 then
|
|
--如果是私聊并且对方不在黑名单中不在最近联系人列表中时候,先把他加到最近联系人列表
|
|
if vo.cache_list[i].player_list[1].player_id ~= RoleManager.Instance.mainRoleInfo.role_id and
|
|
not SocialityModel:getInstance():IsRelaviveType(vo.cache_list[i].player_list[1].player_id,Config.ConfigSocial.RelativeType.recent) and
|
|
not SocialityModel:getInstance():IsRelaviveType(vo.cache_list[i].player_list[1].player_id,Config.ConfigSocial.RelativeType.black) then
|
|
SocialityModel:getInstance():Fire(SocialityModel.REQUEST_CCMD_EVENT,14020,vo.cache_list[i].player_list[1].player_id)
|
|
end
|
|
self.model:SetPriateChatInfo(vo.cache_list[i])--存储私聊对象的消息
|
|
end
|
|
------
|
|
vo.cache_list[i].iType = ChatModel.MSG_TYPE.TEXT
|
|
self.model:DealWithCacheMsg(vo.cache_list[i])
|
|
end
|
|
end
|
|
--添加进聊天框的顺序要反过来
|
|
if self.cache_msg_list == nil then
|
|
self.cache_msg_list = {}
|
|
end
|
|
for i = #vo.cache_list, 1, -1 do
|
|
if vo.cache_list[i].result ~= 2 then
|
|
-- self.model:AddMsg(vo.cache_list[i])
|
|
local is_in_shield_list = SocialityModel:getInstance():IsRelaviveType(vo.cache_list[i].player_list[1].player_id,Config.ConfigSocial.RelativeType.black)
|
|
if not is_in_shield_list then--屏蔽的不需要缓存
|
|
self.model:AddMsg(vo.cache_list[i])
|
|
end
|
|
end
|
|
end
|
|
self.model.require_11010_times = self.model.require_11010_times - 1
|
|
if self.model.require_11010_times <= 0 then
|
|
self.model:Fire(ChatModel.INIT_FIRST_GAME_CHAT_DATA)
|
|
end
|
|
|
|
end
|
|
|
|
function ChatController:on11011()
|
|
local vo = SCMD11011.New(true)
|
|
self.model:SetCrossChatTime(vo.count)
|
|
end
|
|
|
|
--更新通知
|
|
function ChatController:on11091( )
|
|
local scmd = SCMD11091.New(true)
|
|
self.model:SetClientUpdateInfo(scmd)
|
|
local tb = {type = Config.ConfigMainIcon.TipType.client_update}
|
|
MsgManager:getInstance():Add(tb)
|
|
end
|
|
|
|
function ChatController:on11022()
|
|
local vo = SCMD11022.New(true)
|
|
end
|
|
|
|
--私聊的多加了一个figure,私聊会发送到这里
|
|
function ChatController:on11002(vo)
|
|
local vo = SCMD11002.New(true)
|
|
|
|
local is_in_shield_list = SocialityModel:getInstance():IsRelaviveType(vo.player_list[1].player_id,Config.ConfigSocial.RelativeType.black)
|
|
if is_in_shield_list then--屏蔽掉
|
|
return
|
|
end
|
|
|
|
--不在最近联系人列表中人发来消息时加入最近联系人列表
|
|
if vo.player_list[1].player_id ~= RoleManager.Instance.mainRoleInfo.role_id and
|
|
not SocialityModel:getInstance():IsRelaviveType(vo.player_list[1].player_id,Config.ConfigSocial.RelativeType.recent) then
|
|
SocialityModel:getInstance():Fire(SocialityModel.REQUEST_CCMD_EVENT,14020,vo.player_list[1].player_id)
|
|
end
|
|
|
|
vo.iType = ChatModel.MSG_TYPE.TEXT
|
|
self.model:AddMsg(vo)
|
|
self.model:Fire(ChatModel.CHANGE_CHANNEL_SEND_INTERVAL, vo)
|
|
self.model:Fire(ChatModel.UPDATE_SEND_TIME)
|
|
self.model:AddMainRoleChatContent(vo.msg, vo.player_id)
|
|
|
|
local player_id = vo.player_list[1].player_id --取出私聊对象的id
|
|
if player_id ~= RoleManager.Instance.mainRoleInfo.role_id then
|
|
--收到私聊消息后更新和该好友的最后私聊时间
|
|
SocialityModel:getInstance():UpdateLastChatTime(player_id,vo.time)
|
|
self.model:SetChatInfo(true,vo)
|
|
self.model:SetPriateChatInfo(vo)--存储私聊对象的消息
|
|
SocialityModel:getInstance():Fire(SocialityModel.REFRESH_SUB_BTN_RED)--刷新subBtn红点
|
|
GlobalEventSystem:Fire(EventName.REFRESH_SOCIAL_RED_DOT)--更新外部红点
|
|
end
|
|
end
|
|
|
|
|
|
--½ÓÊÕϵͳÐÅÏ¢
|
|
function ChatController:on11060()
|
|
local scmd = SCMD11060.New(true)
|
|
if scmd.type == 2 then
|
|
if EmpowerModel:GetInstance():GetIsShowingGameView() and not EmpowerModel:GetInstance():GetIsShowingShopView() then
|
|
return
|
|
end
|
|
if GoodsModel:getInstance():CheckCanFlyGood() then--检查飞道具图标的条件
|
|
MainUIModel:getInstance():AddFloatInfo(scmd.goods_list)
|
|
if SceneManager:getInstance():IsExpDun() then--如果是经验副本并且是经验值道具
|
|
local goods_list = {}
|
|
for i,v in ipairs(scmd.goods_list) do
|
|
if v.goods_type_id == 100007 then
|
|
goods_list[#goods_list + 1] = v.goods_type_id
|
|
end
|
|
end
|
|
if #goods_list > 0 then
|
|
MainUIModel:getInstance():PlayGoodsFlyList(goods_list)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
local function show(str)
|
|
if scmd.type == 1 then
|
|
if not GiftModel:getInstance():getIsOpenView() then--and not TreasureHuntModel:getInstance().bool_hunting
|
|
-- and not CustomActivityModel:getInstance():getIsThrowEgg() then--礼包界面|寻宝过程|砸蛋过程中不显示提示
|
|
-- Message.show(str)
|
|
end
|
|
elseif scmd.type == 2 then
|
|
ChatModel:getInstance():AddInfoToChatView(str, ChatModel.CHANNEL_SYSTEM, self.model:GetGoodsTipNum() or 0)
|
|
elseif scmd.type == 3 then
|
|
-- Message.show(str)
|
|
ChatModel:getInstance():AddInfoToChatView(str, ChatModel.CHANNEL_SYSTEM, self.model:GetGoodsTipNum() or 0)
|
|
end
|
|
end
|
|
local gvo = nil
|
|
for i, v in ipairs(scmd.goods_list) do
|
|
gvo = GoodsModel:getInstance():GetGoodsBasicByTypeId(v.goods_type_id)
|
|
if gvo then
|
|
local name = gvo.goods_name
|
|
if gvo.type == 11 and (gvo.subtype == 10 or gvo.subtype == 11) then
|
|
local type_id, _name, icon = EquipModel:getInstance():GetIdentifyGoodsNameAndIcon(gvo.type_id, RoleManager.Instance.mainRoleInfo.career, gvo.color)
|
|
name = _name
|
|
end
|
|
-- str = "获得 <color="..WordManager.GetGoodsColor(gvo.color) .. ">" .. name .. "x" .. v.num .. "</color>"
|
|
local str = "获得 <color="..WordManager.GetGoodsColor(gvo.color) .. ">" .. name .. "x" .. v.num .. "</color>" --改成用传闻面板特殊的颜色
|
|
show(str)
|
|
-- Message.show(str)
|
|
-- ChatModel:getInstance():AddInfoToChatView(str,ChatModel.CHANNEL_SYSTEM,1)
|
|
end
|
|
end
|
|
-- GoodsModel:getInstance():Fire(GoodsModel.GET_A_GOODS)
|
|
end
|
|
|
|
--获得物品显示信息在右下角提示框内
|
|
function ChatController:on11061()
|
|
local scmd = SCMD11061.New(true)
|
|
local gvo = nil
|
|
for i, v in ipairs(scmd.goods_list) do
|
|
-- local typeId = v.typeId
|
|
-- if v.style ~= 0 then
|
|
-- typeId = GoodsModel:getInstance():GetMappingTypeId(v.style)
|
|
-- end
|
|
local typeId, lock = GoodsModel:getInstance():GetMappingTypeId(tonumber(v.style), tonumber(v.typeId))
|
|
gvo = GoodsModel:getInstance():GetGoodsBasicByTypeId(typeId)
|
|
if gvo then
|
|
local name = gvo.goods_name
|
|
if gvo.type == 11 and (gvo.subtype == 10 or gvo.subtype == 11) then
|
|
local type_id, _name, icon = EquipModel:getInstance():GetIdentifyGoodsNameAndIcon(gvo.type_id, RoleManager.Instance.mainRoleInfo.career, gvo.color)
|
|
name = _name
|
|
end
|
|
local str = ""
|
|
if v.count > 1 then
|
|
str = "获得 <color='#"..WordManager.GetGoodsColor(gvo.color) .. "'>" .. name .. "x" .. v.count .. "</color>"
|
|
else
|
|
str = "获得 <color='#"..WordManager.GetGoodsColor(gvo.color) .. "'>" .. name .. "</color>"
|
|
end
|
|
Message.show(str)
|
|
end
|
|
end
|
|
-- GoodsModel:getInstance():Fire(GoodsModel.GET_A_GOODS)
|
|
end
|
|
|
|
--获得物品显示信息在右下角提示框内
|
|
function ChatController:on11016()
|
|
local vo = SCMD11016.New(true)
|
|
if vo then
|
|
--社团申请列表状态
|
|
if vo.module_id == 400 and vo.type == ChatModel.RedPointType.GUILD_APPLY_LIST then
|
|
-- vo.num 在社团类型中对应【申请的职位】,0代表入团,其他代表职位
|
|
GuildModel:getInstance():SetApplyRedPointState(vo.num)
|
|
-- GuildModel:getInstance():CheckGuildRedDot(Config.ConfigGuild.TabId.List, true)
|
|
-- GlobalEventSystem:Fire(EventName.SHOW_FUNCTION_RED_POINT, 400, GuildModel:getInstance():CheckGuildRedDot())
|
|
-- elseif vo.module_id == 400 and vo.type == 2 then
|
|
-- GlobalEventSystem:Fire(EventName.SHOW_FUNCTION_RED_POINT, 400, true)
|
|
elseif vo.module_id == 339 and vo.type == 1 then
|
|
-- local tb = {}
|
|
-- tb.type = Config.ConfigMainIcon.TipType.guild_redpacket
|
|
-- tb.zoom = true
|
|
-- MsgManager:getInstance():Add(tb)
|
|
elseif vo.module_id == 223 and vo.type == 1 then --鲜花
|
|
local tb = {}
|
|
tb.type = Config.ConfigMainIcon.TipType.flower
|
|
MsgManager:getInstance():Add(tb)
|
|
GlobalEventSystem:Fire(EventName.REFRESH_SOCIAL_RED_DOT)
|
|
elseif vo.module_id == 441 then --激活图鉴
|
|
GlobalEventSystem:Fire(EventName.SET_ACTIVE_PIC, vo.type, vo.num)
|
|
end
|
|
GlobalEventSystem:Fire(EventName.BROADCAST_RED_POINT_STATE, vo)
|
|
end
|
|
end
|
|
|
|
--聊天频道的错误码消息
|
|
function ChatController:on11017()
|
|
local vo = SCMD11017.New(true)
|
|
--type 1只飘字 2只聊天框 3飘字加聊天框
|
|
-- PrintTable(vo)
|
|
local str = self.model:GetErrorCode(vo.error_code, vo.error_code_args)
|
|
if vo.type == 1 then
|
|
if vo.error_code == 1500098 then --返回礼包模块去处理
|
|
GiftModel:getInstance():handleGiftShowAll(vo.error_code_args)
|
|
else
|
|
Message.show(str)
|
|
end
|
|
elseif vo.type == 2 then
|
|
if vo.error_code == 6100035 then
|
|
if SceneManager.Instance:IsOutdoorScene() then
|
|
local scene_id = SceneManager.Instance:GetSceneId()
|
|
local birth_x, birth_y = SceneManager.Instance:GetSceneBirthPos()
|
|
local findVo = {type = FindVo.SCENE, sceneId = scene_id, id = 0, x = math.ceil(birth_x / SceneObj.LogicRealRatio.x), y = math.ceil(birth_y / SceneObj.LogicRealRatio.y)}
|
|
local scene_name = SceneManager.Instance:GetSceneName()
|
|
local content = string.format("<a@scene2@%s@%s@%s></a>", findVo.sceneId, findVo.x, findVo.y)
|
|
str = str .. " " .. content
|
|
end
|
|
end
|
|
self.model:AddInfoToChatView(str, ChatModel.CHANNEL_TEAM)
|
|
elseif vo.type == 3 then
|
|
Message.show(str)
|
|
self.model:AddInfoToChatView(str, ChatModel.CHANNEL_TEAM)
|
|
end
|
|
end
|
|
|
|
function ChatController:on11014()
|
|
local vo = SCMD11014.New(true)
|
|
if vo then
|
|
Message.show("发送频率过快,请销后再试...", "fault")
|
|
end
|
|
end
|
|
|
|
--广播语音文字
|
|
function ChatController:on11013()
|
|
local scmd = SCMD11013.New(true)
|
|
self.model:UpdateRegText(scmd)
|
|
if self.model.curr_channel == scmd.channel then
|
|
self.model:Fire(ChatModel.BROADCAST_VOICE_TEXT, scmd)
|
|
end
|
|
end
|
|
|
|
function ChatController:on11020()
|
|
local scmd = SCMD11020.New(true)
|
|
Message.show(scmd.content)
|
|
end
|
|
|
|
function ChatController:on11021()
|
|
local scmd = SCMD11021.New(true)
|
|
self.model:AddGmHorn(scmd)
|
|
end
|
|
|
|
function ChatController:on11046()
|
|
local scmd = SCMD11046.New(true)
|
|
for k, v in pairs(scmd.list) do
|
|
if RoleManager.Instance.mainRoleInfo.role_id ~= v.role_id then
|
|
for channel, _ in pairs(self.model.all_chat_list) do
|
|
self.model:DelMsgInChannelById(channel, v.role_id)
|
|
end
|
|
self.model:Fire(ChatModel.DEL_CHAT_ITEM, v.role_id)
|
|
end
|
|
end
|
|
--更新界面
|
|
self.model:Fire(ChatModel.REFRESH_VIEW)
|
|
self.model:Fire(ChatModel.SHOW_TAB_RED_POINT, self.model.all_chat_list_count)
|
|
SocialityModel:getInstance():Fire(SocialityModel.UPDATE_SOCIALITY_VIEW)
|
|
end
|
|
|
|
--通用播放特效
|
|
function ChatController:on11063()
|
|
local scmd = SCMD11063.New(true)
|
|
local tb = {}
|
|
tb.effect = scmd.effect
|
|
SocialityModel:getInstance():PlayFlowerEffect(tb)
|
|
end
|
|
|
|
--通用怪物AI警戒传闻
|
|
function ChatController:on11064()
|
|
local scmd = SCMD11064.New(true)
|
|
local config = Config.Languageextra
|
|
local key = scmd.module_id .. "@" .. scmd.id
|
|
if config[key] and config[key].content then
|
|
local str = ChuanWenManager:getInstance():FormatColorTag2(config[key].content, true)
|
|
local data =
|
|
{
|
|
head_type = 1000,
|
|
desc = str,
|
|
head_name = scmd.name or "",
|
|
hide_time = 8,
|
|
dalay_time = 1,
|
|
is_task_type = true,
|
|
}
|
|
GlobalEventSystem:Fire(EventName.SHOW_COM_DIALOGUE_SHOW_VIEW,data)
|
|
end
|
|
end
|
|
|
|
function ChatController:on11065( )--屏蔽列表
|
|
local scmd = SCMD11065.New(true)
|
|
for k,v in pairs(scmd.figure_list) do
|
|
v.role_name = v.name
|
|
v.vip = v.vip_flag
|
|
v.lv = v.level
|
|
end
|
|
SocialityModel:getInstance():SetRelativeInfo(Config.ConfigSocial.RelativeType.black,scmd.figure_list)
|
|
-- if not self.model.request_cache then--检测聊天缓存
|
|
-- self.model.request_cache = true
|
|
-- if RoleManager.Instance.mainRoleInfo.guild_id > 0 then
|
|
-- self.model:Fire(ChatModel.REQUEST_CACHE_EVENT, ChatModel.CHANNEL_GUILD)
|
|
-- end
|
|
-- self.model:Fire(ChatModel.REQUEST_CACHE_EVENT, ChatModel.CHANNEL_WORLD)
|
|
-- self.model:Fire(ChatModel.REQUEST_CACHE_EVENT, ChatModel.CHANNEL_CECRET)
|
|
-- end
|
|
end
|
|
|
|
function ChatController:on11067( )--屏蔽列表
|
|
local scmd = SCMD11067.New(true)
|
|
SocialityModel:getInstance():Fire(SocialityModel.BROADCAST_MIDDLE_MESSAGE, scmd.module_id, scmd.id)
|
|
end
|
|
|
|
function ChatController:on11066( )--屏蔽操作
|
|
local scmd = SCMD11066.New(true)
|
|
if scmd.errcode == 1 then
|
|
Message.show("操作成功", "success")
|
|
scmd.role_name = scmd.name
|
|
scmd.vip = scmd.vip_flag
|
|
scmd.lv = scmd.level
|
|
SocialityModel:getInstance():UpdateShieldList(scmd.type,scmd)
|
|
SocialityModel:getInstance():Fire(SocialityModel.REQUEST_SOCIAL_LIST)
|
|
else
|
|
ErrorCodeShow(scmd.errcode)
|
|
end
|
|
end
|
|
|
|
|
|
--########### 模拟聊天缓存 ##############
|
|
--protocol=11023
|
|
--{
|
|
-- s2c{
|
|
-- cache_list:array{
|
|
-- name:string
|
|
-- sex:int8
|
|
-- vip:int8
|
|
-- picture:int32
|
|
-- msg:string // 数据
|
|
-- time:int32 // 服务器时间戳
|
|
-- }
|
|
-- }
|
|
--}
|
|
function ChatController:on11023( )--
|
|
local scmd = SCMD11023.New(true)
|
|
-- if scmd.errcode == 1 then
|
|
-- print("=============>>> YiRan:ChatController [start:537] SCMD11023------------------------------------------")
|
|
-- PrintTable(scmd)
|
|
-- print("=============>>> YiRan:ChatController [end] ------------------------------------------")
|
|
self.model:SetVo11023(scmd)
|
|
-- else
|
|
-- ErrorCodeShow(scmd.errcode)
|
|
----end
|
|
end
|
|
|
|
function ChatController:InitEvent()
|
|
local onChangeAccount = function ()
|
|
self.model:ClearGongGaoTimer()
|
|
self:StopLearnHorn()
|
|
self.model:Fire(ChatModel.CLEAR_DATA)--清除主聊天界面的item
|
|
self.model:InitLoginTime()
|
|
end
|
|
GlobalEventSystem:Bind(EventName.CHANGE_ACCOUNT, onChangeAccount)
|
|
GlobalEventSystem:Bind(EventName.CHANGE_ROLE, onChangeAccount)
|
|
|
|
local function onChangeLevel( )
|
|
local role_lv = RoleManager.Instance:GetMainRoleLevel2()
|
|
--if self.need_reset_lv_list[role_lv] then
|
|
-- self:StarPlayTeachingHorn()
|
|
--end
|
|
end
|
|
RoleManager.Instance.mainRoleInfo:Bind(EventName.CHANGE_LEVEL, onChangeLevel)
|
|
--切换账号
|
|
local gameStartHandler = function ()
|
|
self.model:Fire(ChatModel.CLEAR_DATA)--清除主聊天界面的item
|
|
|
|
if self.ChatView then
|
|
self.ChatView:Close()
|
|
end
|
|
self.model:Clear()
|
|
self.cache_msg_list = {}
|
|
-- lua_settingM:LoadChatVoiceSetting()
|
|
self:SendFmtToGame(11050)--请求11050
|
|
self:SendFmtToGame(11065)--请求屏蔽列表
|
|
--self:StarPlayTeachingHorn()
|
|
self.model:InitLoginTime()
|
|
end
|
|
GlobalEventSystem:Bind(EventName.GAME_START, gameStartHandler)
|
|
|
|
local function onSendMsgHandler(channel, content, target_id, args, is_mySelf_send)--is_mySelf_send是否是玩家自己发的如果是就是1
|
|
-- print('Cat:ChatController.lua[484] channel, content, target_id, args', channel, content, target_id, args)
|
|
is_mySelf_send = is_mySelf_send or ChatModel.CHAT_COMMON_TYPE.COMMON--默认发0告诉服务端是玩家正常发言
|
|
self.model:Fire(ChatModel.REQUEST_CCMD_EVENT, 11001, channel, content, target_id, args, is_mySelf_send)
|
|
end
|
|
self.model:Bind(ChatModel.SEND_MSG, onSendMsgHandler)
|
|
|
|
local function onShowGonggaoHandler(info)
|
|
if info then
|
|
local vo = {channel = ChatModel.CHANNEL_SYSTEM, time = Status.NowTime, msg = info.content}
|
|
vo.iType = ChatModel.MSG_TYPE.TEXT
|
|
self.model:AddMsg(vo)
|
|
end
|
|
end
|
|
GlobalEventSystem:Bind(EventName.SHOW_GONGGAO, onShowGonggaoHandler)
|
|
|
|
local function onShowChuanwenHandler(content, chuanwen_cfg, scmd)
|
|
if chuanwen_cfg.subtype ~= 0 and content then
|
|
|
|
-- local tmpChannel = Config.ConfigChat.channel_level[chuanwen_cfg.subtype].channel
|
|
-- local vo = {channel = ChatModel.CHANNEL_SYSTEM,time = Status.NowTime,msg = content}
|
|
-- channel = tmpChannel
|
|
-- local vo = {channel=chuanwen_cfg.subtype, time=Status.NowTime, msg=content,showtype=ChatModel.CHANNEL_SYSTEM, tip=chuanwen_cfg.tip}
|
|
-- self.model:AddMsg(vo)
|
|
scmd.channel = chuanwen_cfg.subtype
|
|
-- scmd.time = Status.NowTime
|
|
scmd.time = TimeUtil:getServerTime()
|
|
scmd.msg = content
|
|
if not scmd.type or scmd.type == 11015 then
|
|
scmd.showtype = ChatModel.CHANNEL_SYSTEM
|
|
end
|
|
-- scmd.tip = chuanwen_cfg.tip -- 这会增添了自己的tip
|
|
scmd.iType = ChatModel.MSG_TYPE.TEXT
|
|
self.model:AddMsg(scmd)
|
|
end
|
|
end
|
|
GlobalEventSystem:Bind(EventName.SHOW_CHUANWEN, onShowChuanwenHandler)
|
|
|
|
--通用聊天
|
|
local function onRequestHandler(...)
|
|
local args_list = {...}
|
|
if args_list[1] == 11001 then
|
|
local channel = args_list[2]
|
|
local receiveId = args_list[4] or 0
|
|
local data = args_list[3]
|
|
local args = args_list[5] or ""
|
|
local tk_time = Status.NowTime
|
|
local ticket = "ticket"
|
|
local is_mySelf_send = args_list[6] or ChatModel.CHAT_COMMON_TYPE.COMMON
|
|
self:SendFmtToGame(11001, "clssisc", channel, receiveId, data, args, math.floor(tk_time), ticket, is_mySelf_send)
|
|
print("发送聊天:", channel, receiveId, data, args, math.floor(tk_time), ticket, is_mySelf_send)
|
|
elseif args_list[1] == 11003 then
|
|
--[[
|
|
channel:int8 // 频道
|
|
receive_id:int64 // 接受者id
|
|
voice_msg_time:int32 // 语音时间(秒)
|
|
tk_time:int32 // 时间戳
|
|
ticket:string // 加密字符
|
|
data_send:byte32 // 语音内容
|
|
voice_text:string // 语音文字内容
|
|
auto_id:int32 // 自增id
|
|
is_end:int8 // 是否完成语音信息发送(1:完成,2:未完成)CMD11012返回1后继续发送语音剩余部分
|
|
]]
|
|
local channel = args_list[2]
|
|
local receive_id = args_list[3] or 0
|
|
local voice_msg_time = args_list[4]
|
|
local tk_time = Status.NowTime
|
|
local ticket = "ticket"
|
|
local data_send = args_list[5]
|
|
local voice_text = args_list[6] or ""
|
|
local auto_id = args_list[7]
|
|
local is_end = 0
|
|
local voiceLength = 0
|
|
for i = 0, data_send.Length - 1 do
|
|
if i == data_send.Length - 1 then is_end = 1 end
|
|
UserMsgAdapter.WriteBegin(11003)
|
|
UserMsgAdapter.WriteFMT("cliis", channel, receive_id, math.floor(voice_msg_time), math.floor(tk_time), ticket)
|
|
UserMsgAdapter.WriteFMT("B", data_send[i])
|
|
UserMsgAdapter.WriteFMT("slc", voice_text, auto_id, is_end)
|
|
UserMsgAdapter.SendToGame()
|
|
voiceLength = voiceLength + data_send[i].Length
|
|
end
|
|
Debugger.Log("Voice Data Size is "..voiceLength)
|
|
--print("channel, receive_id, voice_msg_time, math.floor(tk_time), ticket =" , channel, receive_id, math.floor(voice_msg_time), math.floor(tk_time), ticket, voice_text, auto_id, is_end, data_send.Length)
|
|
elseif args_list[1] == 11004 then
|
|
--[[
|
|
auto_id:int32 // 自增id
|
|
player_id:int64 // 语音信息发送者id
|
|
tk_time:int32 // unix时间戳
|
|
ticket:string // 加密字符
|
|
]]
|
|
local auto_id = args_list[2]
|
|
local player_id = args_list[3]
|
|
local voice_msg_time = args_list[4]
|
|
local ticket = "ticket"
|
|
UserMsgAdapter.WriteBegin(11004)
|
|
UserMsgAdapter.WriteFMT("llis", auto_id, player_id, math.floor(voice_msg_time), ticket)
|
|
UserMsgAdapter.SendToGame()
|
|
--print("auto_id, player_id, voice_msg_time, ticket =" , auto_id, player_id, math.floor(voice_msg_time),ticket)
|
|
elseif args_list[1] == 11005 then
|
|
self:SendFmtToGame(11005, "clls", args_list[2], args_list[3], args_list[4], args_list[5])
|
|
elseif args_list[1] == 11022 then
|
|
self:SendFmtToGame(args_list[1], "cls", args_list[2], args_list[3], args_list[4])
|
|
elseif args_list[1] == 11011 then
|
|
self:SendFmtToGame(args_list[1], "c", args_list[2])
|
|
end
|
|
end
|
|
self.model:Bind(ChatModel.REQUEST_CCMD_EVENT, onRequestHandler)
|
|
local function onOpenChatView(channel)
|
|
if self.ChatView == nil then
|
|
self.ChatView = ChatView.New()
|
|
end
|
|
if not self.ChatView:HasOpen() then
|
|
self.ChatView:Open(channel)
|
|
end
|
|
end
|
|
GlobalEventSystem:Bind(EventName.OPEN_CHAT_VIEW, onOpenChatView)
|
|
|
|
local function onCloseChatView()
|
|
if self.ChatView and self.ChatView:HasOpen() then
|
|
self.ChatView:Close()
|
|
end
|
|
end
|
|
GlobalEventSystem:Bind(EventName.CLOSE_CHAT_VIEW, onCloseChatView)
|
|
|
|
--打开私聊一对一 用于从其他模块进入聊天
|
|
local function onOpenCecretChannel(key_id, name)
|
|
if self.ChatView == nil then
|
|
self.ChatView = ChatView.New()
|
|
local index = self.model:GetTabIndexWithChannel(ChatModel.CHANNEL_CECRET)
|
|
self.ChatView:Open(index)
|
|
end
|
|
if not self.ChatView.is_moving and not self.ChatView:HasOpen() then
|
|
local index = self.model:GetTabIndexWithChannel(ChatModel.CHANNEL_CECRET)
|
|
self.ChatView:Open(index)
|
|
end
|
|
self.ChatView:OpenCecretChannel(key_id, name)
|
|
end
|
|
GlobalEventSystem:Bind(EventName.OPEN_CHAT_CECRET_CHANNEL, onOpenCecretChannel)
|
|
|
|
local function onOpenHornView()
|
|
if self.HornView == nil then
|
|
self.HornView = HornView.New()
|
|
end
|
|
if self.HornView:HasOpen() then
|
|
self.HornView:Close()
|
|
else
|
|
self.HornView:Open()
|
|
end
|
|
end
|
|
GlobalEventSystem:Bind(EventName.OPEN_HORN_VIEW, onOpenHornView)
|
|
|
|
local function onOpenIndividuationView(bar_index, pos_x, pos_y, is_close_after_sendpos, chating_key_id,is_reset_anchor, scale_num)
|
|
if self.IndividuationView == nil then
|
|
self.IndividuationView = IndividuationView.New()
|
|
end
|
|
if self.IndividuationView:HasOpen() then
|
|
self.IndividuationView:Close()
|
|
else
|
|
self.IndividuationView:Open(bar_index, pos_x, pos_y, is_close_after_sendpos, chating_key_id, is_reset_anchor, scale_num)
|
|
end
|
|
end
|
|
GlobalEventSystem:Bind(EventName.OPEN_INDIVIDUATION_VIEW, onOpenIndividuationView)
|
|
|
|
local function onCloseIndividuationView()
|
|
if self.IndividuationView and self.IndividuationView:HasOpen() then
|
|
self.IndividuationView:Close()
|
|
end
|
|
end
|
|
GlobalEventSystem:Bind(EventName.CLOSE_INDIVIDUATION_VIEW, onCloseIndividuationView)
|
|
|
|
local function onOpenChatBagView()
|
|
if self.ChatBagView == nil then
|
|
self.ChatBagView = ChatBagView.New()
|
|
end
|
|
self.ChatBagView:Open()
|
|
-- if self.ChatBagView:HasOpen() then
|
|
-- self.ChatBagView:Close()
|
|
-- else
|
|
-- self.ChatBagView:Open()
|
|
-- end
|
|
end
|
|
GlobalEventSystem:Bind(EventName.OPEN_CHAT_BAG_VIEW, onOpenChatBagView)
|
|
|
|
local function onCloseChatBagView()
|
|
if self.ChatBagView and self.ChatBagView:HasOpen() then
|
|
self.ChatBagView:Close()
|
|
end
|
|
end
|
|
GlobalEventSystem:Bind(EventName.CLOSE_CHAT_BAG_VIEW, onCloseChatBagView)
|
|
|
|
local function onOpenChatCustomTextView(index)
|
|
if self.ChatCustomTextView == nil then
|
|
self.ChatCustomTextView = ChatCustomTextView.New()
|
|
end
|
|
if self.ChatCustomTextView:HasOpen() then
|
|
self.ChatCustomTextView:Close()
|
|
else
|
|
self.ChatCustomTextView:Open(index)
|
|
end
|
|
end
|
|
GlobalEventSystem:Bind(EventName.OPEN_CHAT_CUSTOM_TEXT_VIEW, onOpenChatCustomTextView)
|
|
|
|
-- local function onOpenChannelSettingView()
|
|
-- if self.ChannelSettingView == nil then
|
|
-- self.ChannelSettingView = ChannelSettingView.New()
|
|
-- end
|
|
-- if self.ChannelSettingView:HasOpen() then
|
|
-- self.ChannelSettingView:Close()
|
|
-- else
|
|
-- self.ChannelSettingView:Open()
|
|
-- end
|
|
-- end
|
|
-- GlobalEventSystem:Bind(EventName.OPEN_CHANNELSETTING_VIEW, onOpenChannelSettingView)
|
|
|
|
local function onRequestCacheMsg(channel)
|
|
self:SendFmtToGame(11010, "c", channel)
|
|
end
|
|
self.model:Bind(ChatModel.REQUEST_CACHE_EVENT, onRequestCacheMsg)
|
|
|
|
local function onChangeChannelSendStartTime(vo)
|
|
self.model:ChangeChannelSendStartTime(vo, Status.NowTime)
|
|
end
|
|
|
|
self.model:Bind(ChatModel.CHANGE_CHANNEL_SEND_INTERVAL, onChangeChannelSendStartTime)
|
|
|
|
-- local function onRequestWorldChatNum()
|
|
-- --请求缓存
|
|
-- if not self.model.request_cache then
|
|
-- self.model.request_cache = true
|
|
-- self.model:Fire(ChatModel.REQUEST_CACHE_EVENT, ChatModel.CHANNEL_WORLD)
|
|
-- if RoleManager.Instance.mainRoleInfo.guild_id > 0 then
|
|
-- self.model:Fire(ChatModel.REQUEST_CACHE_EVENT, ChatModel.CHANNEL_GUILD)
|
|
-- end
|
|
-- end
|
|
-- end
|
|
-- GlobalEventSystem:Bind(EventName.GAME_START, onRequestWorldChatNum)
|
|
|
|
local function onRequestRedPointState(module_id, type)
|
|
self:SendFmtToGame(11016, "hh", module_id, type)
|
|
end
|
|
|
|
GlobalEventSystem:Bind(EventName.REQUEST_RED_POINT_STATE, onRequestRedPointState)
|
|
|
|
--处理屏蔽功能11066协议的发送
|
|
local function ON_SEND_PROTOCAL( ... )
|
|
local args = {...}
|
|
if args[1] == 11065 then
|
|
elseif args[1] == 11066 then
|
|
self:SendFmtToGame(args[1], "cl", args[2],args[3])
|
|
else
|
|
self:SendFmtToGame(args[1])
|
|
end
|
|
|
|
end
|
|
self.model:Bind(ChatModel.SEND_PROTOCAL, ON_SEND_PROTOCAL)
|
|
|
|
|
|
GlobalEventSystem:Bind(ChatModel.ON_RESULT_OF_SPEECH, function(reg_txt)
|
|
reg_txt = LanguageFilter.FilterMsg(reg_txt)
|
|
self.model.reg_txt = reg_txt
|
|
if not self.model.loading_voice then
|
|
if SettingModel:getInstance():GetSettingInfo(SettingModel.TYPE.VOICE, SettingModel.SUBTYPE.TEXTONLY) == 1 then
|
|
self.model:Fire(ChatModel.REQUEST_CCMD_EVENT, 11001, self.model.reg_channel, reg_txt, self.model.chating_key_id or 0, "", nil, "")
|
|
else
|
|
if self.model.sendAlready then
|
|
self.model:Fire(ChatModel.REQUEST_CCMD_EVENT, 11005, self.model.reg_channel, self.model.reg_receive_id, self.model.voice_id, reg_txt)
|
|
else
|
|
self:SendVoice()
|
|
end
|
|
end
|
|
-- local scmd = {auto_id = self.model.voice_id, channel = self.model.reg_channel, voice_text = reg_txt}
|
|
-- self.model:UpdateRegText(scmd)
|
|
-- self.model:Fire(ChatModel.BROADCAST_VOICE_TEXT, scmd)
|
|
end
|
|
end)
|
|
|
|
GlobalEventSystem:Bind(ChatModel.ON_END_OF_SPEECH, function(data)
|
|
if self.model.end_speech_data then
|
|
if data ~= "" then
|
|
Message.show(data)
|
|
end
|
|
self.model.end_speech_data = nil
|
|
else
|
|
self.model.end_speech_data = data
|
|
end
|
|
if not self.model.loading_voice and not self.model.sendAlready then
|
|
print("tanar: ChatController [910] Bind ON_END_OF_SPEECH")
|
|
self:SendVoice()
|
|
end
|
|
end)
|
|
|
|
GlobalEventSystem:Bind(EventName.CHANGE_ACCOUNT, function()
|
|
self.model.voice_id = nil
|
|
self.model.reg_channel = nil
|
|
self.model.loading_voice = nil
|
|
self.model.end_speech_data = nil
|
|
ChatVoiceManager:getInstance():Reset()
|
|
end)
|
|
|
|
GlobalEventSystem:Bind(EventName.CHANGE_ROLE, function()
|
|
self.model.voice_id = nil
|
|
self.model.reg_channel = nil
|
|
self.model.loading_voice = nil
|
|
self.model.end_speech_data = nil
|
|
ChatVoiceManager:getInstance():Reset()
|
|
end)
|
|
|
|
local function onGuildChange()
|
|
local guild_id = RoleManager.Instance:GetMainRoleVo().guild_id
|
|
if not guild_id or guild_id == 0 then
|
|
self.model.all_chat_list[ChatModel.CHANNEL_GUILD] = nil
|
|
end
|
|
end
|
|
RoleManager:getInstance():GetMainRoleVo():BindOne("guild_id", onGuildChange)
|
|
|
|
local function onOpenLockScreenView( )
|
|
--进入省电模式关闭聊天界面
|
|
if self.ChatView then
|
|
self.ChatView:Close()
|
|
end
|
|
end
|
|
GlobalEventSystem:Bind(SceneEventType.SCREEN_BRIGHT_DEL_EVENT, onOpenLockScreenView)
|
|
|
|
end
|
|
|
|
function ChatController:SendVoice()
|
|
print("tanar: ChatController [949] =========== SendVoice")
|
|
print("tanar: [ChatController 950]=> self.model.voice_id: ",self.model.voice_id)
|
|
if self.model.voice_id and SettingModel:getInstance():GetSettingInfo(SettingModel.TYPE.VOICE, SettingModel.SUBTYPE.TEXTONLY) == 0 then
|
|
ChatVoiceManager:getInstance():AddMainRoleVoicePath(self.model.voice_id, self.model.voice_path)
|
|
local sendId = self.model.voice_id
|
|
local function onLoadCallback(voice_data, time_len)
|
|
print("tanar: [ChatController 956]=> onLoadCallback: ",self.model.reg_channel)
|
|
print("tanar: [ChatController 957]=> self.model.voice_id == sendId: ",self.model.voice_id == sendId)
|
|
if self.model.voice_id == sendId and self.model.reg_channel then
|
|
local channel = self.model.reg_channel
|
|
local receive_id = self.model.chating_key_id or 0
|
|
local voice_msg_time = math.max(1, math.floor(time_len + 0.5))
|
|
local data_send = voice_data
|
|
local voice_text
|
|
local auto_id = self.model.voice_id
|
|
if self.model.reg_txt then
|
|
voice_text = self.model.reg_txt
|
|
self.model.reg_txt = nil
|
|
else
|
|
voice_text = ""
|
|
self.model.reg_receive_id = receive_id
|
|
end
|
|
self.model.reg_txt = nil
|
|
self.model:Fire(ChatModel.REQUEST_CCMD_EVENT, 11003, channel, receive_id, voice_msg_time, data_send, voice_text, auto_id)
|
|
self.model.sendAlready = true
|
|
end
|
|
end
|
|
self.model.loading_voice = true
|
|
self.model.sendAlready = nil
|
|
ChatVoiceManager:getInstance():LoadMainRoleVoiceData(self.model.voice_id, onLoadCallback)
|
|
end
|
|
end
|
|
|
|
function ChatController:StopLearnHorn( )
|
|
if self.play_learn_id then
|
|
GlobalTimerQuest:CancelQuest(self.play_learn_id)
|
|
self.play_learn_id = nil
|
|
end
|
|
SysInfoCtrl.Instance:HideHornView(true)
|
|
end
|
|
|
|
function ChatController:StarPlayTeachingHorn( )
|
|
self.need_reset_lv_list = {} --到特定等级需要刷新
|
|
if self.play_learn_id then
|
|
GlobalTimerQuest:CancelQuest(self.play_learn_id)
|
|
self.play_learn_id = nil
|
|
end
|
|
local chuanwen_list = {}
|
|
local role_lv = RoleManager.Instance:GetMainRoleLevel2()
|
|
for _,v in pairs(Config.ConfigChat.teaching) do
|
|
if role_lv < v.start_lv then
|
|
self.need_reset_lv_list[v.start_lv] = true
|
|
end
|
|
if role_lv < v.end_lv + 1 then
|
|
self.need_reset_lv_list[v.end_lv+1] = true
|
|
end
|
|
if role_lv >= v.start_lv and role_lv <= v.end_lv then
|
|
for _,vo in pairs(v.msg_list) do
|
|
table_insert(chuanwen_list,vo)
|
|
end
|
|
end
|
|
end
|
|
local index = 1
|
|
local chuanwen_len = #chuanwen_list
|
|
if chuanwen_len > 0 then
|
|
local function onTimer( )
|
|
local cfg, scmd = {subtype = ChatModel.CHANNEL_SYSTEM} ,{}
|
|
if index > chuanwen_len then
|
|
index = 1
|
|
end
|
|
local msg = chuanwen_list[index].msg or ""
|
|
msg = Trim(msg)
|
|
index = index + 1
|
|
if msg ~= "" then
|
|
ChatModel:getInstance():DealWithHornSystemMsg({name = "系统", msg = msg,is_teaching = true}, true,true)
|
|
GlobalEventSystem:Fire(EventName.SHOW_CHUANWEN, msg, cfg, scmd)
|
|
end
|
|
end
|
|
self.play_learn_id = GlobalTimerQuest:AddPeriodQuest(onTimer,Config.ConfigChat.teachingTime)
|
|
|
|
setTimeout(onTimer,5)
|
|
end
|
|
end
|