| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019 |
- -------------------------------------------------------
- -- 头像&头像框
- -- head = nil, -- 头像
- -- headList = nil, -- 已激活头像列表(除默认赠送外)
- -- headFrame = nil, -- 头像框
- -- headFrameList = nil, -- 已激活头像框列表(除默认赠送外)
- -- body = nil, -- 形象
- -- bodyList = nil, -- 已激活形象
- -- chenghao = nil, -- 称号
- -- chenghaoList = nil, -- 已激活称号
- -- headHasNewFlag = nil, -- 头像1/头像框2/形象4/称号8有新的flag
- --------------------------------------------------------
- local Util = require("common.Util")
- local Lang = require("common.Lang")
- local Log = require("common.Log")
- local LogDefine = require("common.LogDefine")
- local RoleExcel = require("excel.role")
- local HeroExcel = require("excel.hero")
- local Msg = require("core.Msg")
- local ObjHuman = require("core.ObjHuman")
- local RoleSystemLogic = require("roleSystem.RoleSystemLogic")
- local RoleSystemDefine = require("roleSystem.RoleSystemDefine")
- local Broadcast = require("broadcast.Broadcast")
- local CombatPosLogic = require("combat.CombatPosLogic")
- local CombatDefine = require("combat.CombatDefine")
- local ChenghaoImp = require("role.ChenghaoImp")
- local RoleDBLogic = require("role.RoleDBLogic")
- local RoleDefine = require("role.RoleDefine")
- local RoleAttr = require("role.RoleAttr")
- local RoleLogic = require("role.RoleLogic")
- local ObjHumam = require("core.ObjHuman")
- local HuanJingTowerLogic = require("huanjingTower.HuanjingTowerLogic")
- local HeroLogic = require("hero.HeroLogic")
- local TheStarsDBLogic = require("theStars.TheStarsDBLogic")
- local Timer = require("core.Timer")
- local TriggerLogic = require("trigger.TriggerLogic")
- local TriggerDefine = require("trigger.TriggerDefine")
- local Config = require("Config")
- local SkinConfig = require("excel.skin").skin
- local CommonDefine = require("common.CommonDefine")
- HEAD_TYPE_1 = 1 -- 头像
- HEAD_TYPE_2 = 2 -- 头像框
- HEAD_TYPE_3 = 3 -- 形象
- HEAD_TYPE_4 = 4 -- 称号
- HEAD_TYPE_5 = 5 -- 立绘
- HEAD_TYPE_6 = 6 -- 背景
- DEFAULT_FREE_ACTIVE_TYPE = 2 -- 默认激活类型
- DEFAULT_HEAD_MALE_ID = 1 -- 默认男性头像id
- DEFAULT_HEAD_FEMALE_ID = 2 -- 默认女性头像id
- DEFAULT_HEADFREAM_ID = 6000 -- 默认头像框id
- DEFAULT_BACKGROUND_ID = 1010 -- 默认背景id
- DEFAULT_DEL_TYPE = 99
- -- 背景解锁 类型
- BACKGROUND_TYPE_4 = 4 -- 战役通关X关
- local function getConfig(headType, id)
- if headType == HEAD_TYPE_1 then
- return RoleExcel.head[id]
- elseif headType == HEAD_TYPE_2 then
- return RoleExcel.headFrame[id]
- elseif headType == HEAD_TYPE_3 then
- return RoleExcel.body[id]
- elseif headType == HEAD_TYPE_4 then
- return RoleExcel.chenghao[id]
- elseif headType == HEAD_TYPE_5 then
- return RoleExcel.body[id]
- elseif headType == HEAD_TYPE_6 then
- return RoleExcel.background[id]
- end
- end
- --定时函数,用来检查称号过期
- local function timeFunc(human)
- -- if not IsOnline then
- -- return
- -- end
- if not ObjHuman.onlineNewUniqueTag[human.db.newUniqueTag] then
- return
- end
- if human and human.db.chenghaoList then
- local isContinue = false
- for id, data in pairs(human.db.chenghaoList) do
- if type(data) == "table" and data.keepTime then
- isActive(human, HEAD_TYPE_4, id)
- isContinue = true
- end
- end
- if isContinue then
- Timer.addLater(60, function()
- timeFunc(human)
- end)
- end
- end
- end
- function onLogin(human)
- timeFunc(human)
- RoleLogic.onLogin(human)
- end
- function isActive(human, headType, id)
- local config = nil
- local checkDB = nil
- if headType == HEAD_TYPE_1 then -- 头像
- config = RoleExcel.head[id]
- if id == DEFAULT_HEAD_MALE_ID or
- id == DEFAULT_HEAD_FEMALE_ID or
- config.type == DEFAULT_FREE_ACTIVE_TYPE then
- return true
- end
- if not human.db.headList then
- return
- end
- checkDB = human.db.headList[id]
- elseif headType == HEAD_TYPE_2 then -- 头像框
- config = RoleExcel.headFrame[id]
- if id == DEFAULT_HEADFREAM_ID or
- config.type == DEFAULT_FREE_ACTIVE_TYPE then
- return true
- end
- if not human.db.headFrameList then
- return
- end
- checkDB = human.db.headFrameList[id]
- elseif headType == HEAD_TYPE_3 then -- 形象
- config = RoleExcel.body[id]
- if config.type == DEFAULT_FREE_ACTIVE_TYPE then
- return true
- end
- if not human.db.bodyList then
- return
- end
- checkDB = human.db.bodyList[id]
- elseif headType == HEAD_TYPE_4 then -- 称号
- config = RoleExcel.chenghao[id]
- if config.type == DEFAULT_FREE_ACTIVE_TYPE then
- return true
- end
- if not human.db.chenghaoList then
- return
- end
- checkDB = human.db.chenghaoList[id]
- elseif headType == HEAD_TYPE_5 then -- 立绘
- config = RoleExcel.body[id]
- if config.type == DEFAULT_FREE_ACTIVE_TYPE then
- return true
- end
- if not human.db.animationList then
- return
- end
- checkDB = human.db.animationList[id]
- elseif headType == HEAD_TYPE_6 then -- 背景
- config = RoleExcel.background[id]
- if config.type == DEFAULT_FREE_ACTIVE_TYPE or
- id == DEFAULT_BACKGROUND_ID then
- return true
- elseif config.type == BACKGROUND_TYPE_4 then
- if human.db.battleID >= config.need then
- return true
- end
- end
- if not human.db.backgroundList then
- return
- end
- checkDB = human.db.backgroundList[id]
- end
-
- if checkDB == nil then
- return
- end
-
- if checkDB == true then
- return true
- end
-
- if checkDB.keepTime < 0 or (checkDB.ts + checkDB.keepTime > os.time()) then
- return true
- else
- -- 过期了
- unActive(human.db._id, headType, id)
- end
- end
- function active(human, headType, id)
- local conf = getConfig(headType, id)
- if conf == nil then
- return
- end
- local keepTime = conf.keepTime * 60*60 -- conf.keepTime 为小时数
- if isActive(human, headType, id) then
- if headType == HEAD_TYPE_4 and keepTime > 0 then
- else
- return
- end
- end
- if headType == HEAD_TYPE_1 then -- 头像
- human.db.headList = human.db.headList or {}
- if keepTime == nil then
- human.db.headList[id] = true
- else
- human.db.headList[id] = {ts = os.time(), keepTime = keepTime}
- end
- elseif headType == HEAD_TYPE_2 then -- 头像框
- human.db.headFrameList = human.db.headFrameList or {}
- if keepTime == nil then
- human.db.headFrameList[id] = true
- else
- human.db.headFrameList[id] = {ts = os.time(), keepTime = keepTime}
- end
- elseif headType == HEAD_TYPE_3 then -- 形象
- human.db.bodyList = human.db.bodyList or {}
- if keepTime == nil then
- human.db.bodyList[id] = true
- else
- human.db.bodyList[id] = {ts = os.time(), keepTime = keepTime}
- end
- if human.db.body == nil then
- human.db.body = id
- -- 通知客户端
- local msgRet = Msg.gc.GC_ROLE_HEAD_SET
- msgRet.headID = id
- msgRet.headType = headType
- Msg.send(msgRet, human.fd)
- end
- elseif headType == HEAD_TYPE_4 then -- 称号
- if conf.group ~= 0 then
- for k, v in pairs(RoleExcel.chenghao) do
- if k ~= id and v.group == conf.group then
- unActive(human.db._id, HEAD_TYPE_4, k)
- end
- end
- end
-
- human.db.chenghaoList = human.db.chenghaoList or {}
- if keepTime == nil then
- human.db.chenghaoList[id] = true
- else
- human.db.chenghaoList[id] = {ts = os.time(), keepTime = keepTime}
- timeFunc(human)
- end
- elseif headType == HEAD_TYPE_5 then -- 立绘
- human.db.animationList = human.db.animationList or {}
- if keepTime == nil then
- human.db.animationList[id] = true
- else
- human.db.animationList[id] = {ts = os.time(), keepTime = keepTime}
- end
- if human.db.animation == nil then
- human.db.animation = id
- -- 通知客户端
- local msgRet = Msg.gc.GC_ROLE_HEAD_SET
- msgRet.headID = id
- msgRet.headType = headType
- msgRet.headID = GetCorrectBodyId(human)
- Msg.send(msgRet, human.fd)
- end
- elseif headType == HEAD_TYPE_6 then -- 背景
- human.db.backgroundList = human.db.backgroundList or {}
- if keepTime == nil then
- human.db.backgroundList[id] = true
- else
- human.db.backgroundList[id] = {ts = os.time(), keepTime = keepTime}
- end
- end
-
- setNewFlag(human, headType, true)
- if #conf.attrs > 0 then
- RoleAttr.cleanHeroAttrCache(human)
- ObjHuman.doCalcHero(human)
- ObjHuman.sendAttr(human, RoleDefine.ZHANDOULI)
- end
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_101)
- end
- function unActive(uuid, headType, id)
- local changed = nil
- local human = ObjHumam.onlineUuid[uuid]
- if headType == HEAD_TYPE_1 then -- 头像
- local db = RoleDBLogic.getDb(uuid,{head = 1, headList = 1})
- if db.headList and db.headList[id] then
- db.headList[id] = nil
- if db.head == id then
- db.head = DEFAULT_HEAD_MALE_ID
- if human then
- human.db.head = DEFAULT_HEAD_MALE_ID
- end
- end
- RoleDBLogic.saveRoleSset(db)
- changed = true
- end
- elseif headType == HEAD_TYPE_2 then -- 头像框
- local db = RoleDBLogic.getDb(uuid,{headFrame = 1, headFrameList = 1})
- if db.headFrameList and db.headFrameList[id] then
- db.headFrameList[id] = nil
- if db.headFrame == id then
- db.headFrame = DEFAULT_HEADFREAM_ID
- if human then
- human.db.headFrame = DEFAULT_HEADFREAM_ID
- end
- end
- RoleDBLogic.saveRoleSset(db)
- changed = true
- end
- elseif headType == HEAD_TYPE_3 then -- 形象
- local db = RoleDBLogic.getDb(uuid,{body = 1, bodyList = 1})
- if db.bodyList and db.bodyList[id] then
- db.bodyList[id] = nil
- if db.body == id then
- db.body = nil
- if human then
- human.db.body = nil
- end
- end
- RoleDBLogic.saveRoleSset(db)
- changed = true
- end
- elseif headType == HEAD_TYPE_4 then -- 称号
- local db = RoleDBLogic.getDb(uuid,{chenghao = 1, chenghaoList = 1})
- if db.chenghaoList and db.chenghaoList[id] then
- db.chenghaoList[id] = nil
- if db.chenghao == id then
- db.chenghao = nil
- if human then
- human.db.chenghao = nil
- end
- end
- RoleDBLogic.saveRoleSset(db)
- changed = true
- end
- elseif headType == HEAD_TYPE_5 then -- 立绘
- local db = RoleDBLogic.getDb(uuid,{body = 1, animationList = 1})
- if db.animationList and db.animationList[id] then
- db.animationList[id] = nil
- if db.animation == id then
- db.animation = nil
- if human then
- human.db.animation = nil
- end
- end
- RoleDBLogic.saveRoleSset(db)
- changed = true
- end
- elseif headType == HEAD_TYPE_6 then -- 背景
- local db = RoleDBLogic.getDb(uuid,{chenghao = 1, backgroundList = 1})
- if db.backgroundList and db.backgroundList[id] then
- db.backgroundList[id] = nil
- if db.background == id then
- db.background = nil
- if human then
- human.db.background = nil
- end
- end
- RoleDBLogic.saveRoleSset(db)
- changed = true
- end
- end
-
- if changed then
- if human then
- RoleAttr.cleanHeroAttrCache(human)
- local config = getConfig(headType, id)
- if config and #config.attrs > 0 then
- ObjHuman.doCalcHero(human)
- end
- ObjHuman.sendHumanInfo(human)
- ObjHuman.sendAttr(human, RoleDefine.ZHANDOULI)
- end
- end
- end
- -- 是否有红点
- function isDotByType(human, headType)
- if human.db.headHasNewFlag == nil then
- return
- end
-
- local val = human.db.headHasNewFlag or 0
- local bit = Util.getBit(val, headType)
- if bit ~= 0 then
- return true
- end
- end
- function setNewFlag(human, type, flag)
- local val = human.db.headHasNewFlag or 0
- if (Util.getBit(val, type) > 0) == flag then
- return
- end
-
- if flag == true then
- val = Util.setBit(val, type)
- else
- local bit = Util.getBit(val, type)
- if bit ~= 0 then
- val = val - 2 ^ type
- end
- end
-
- if val == 0 then
- val = nil
- end
- human.db.headHasNewFlag = val
- end
- function query(human, headType)
- if headType < HEAD_TYPE_1 or headType > HEAD_TYPE_6 then
- return
- end
- local msgRet = Msg.gc.GC_ROLE_HEAD_QUERY
- msgRet.type = headType
- msgRet.headList[0] = 0
- msgRet.isDot[0] = 4
- msgRet.isDot[1] = isDotByType(human, HEAD_TYPE_1) and 1 or 0
- msgRet.isDot[2] = isDotByType(human, HEAD_TYPE_2) and 1 or 0
- msgRet.isDot[3] = isDotByType(human, HEAD_TYPE_3) and 1 or 0
- msgRet.isDot[4] = isDotByType(human, HEAD_TYPE_4) and 1 or 0
-
- if headType == HEAD_TYPE_1 then -- 头像
- for id, cf in pairs(RoleExcel.head) do
- if cf.type ~= DEFAULT_DEL_TYPE then
- msgRet.headList[0] = msgRet.headList[0] + 1
- local headNet = msgRet.headList[msgRet.headList[0]]
- headNet.headID = id
- headNet.isActive = isActive(human, HEAD_TYPE_1, id) and 1 or 0
- headNet.desc = cf.desc or ""
- headNet.keepTime = getKeepTime(human, HEAD_TYPE_1, id)
- headNet.name = cf.name or ""
- headNet.camp = cf.camp or 0
- local len = #cf.attrs
- for i = 1,len do
- headNet.attr[i].key = cf.attrs[i][1]
- headNet.attr[i].value = cf.attrs[i][2]
- end
- headNet.attr[0] = len
- end
- end
- msgRet.useID = human.db.head or 0
- elseif headType == HEAD_TYPE_2 then -- 头像框
- for id, cf in pairs(RoleExcel.headFrame) do
- if cf.type ~= DEFAULT_DEL_TYPE then
- msgRet.headList[0] = msgRet.headList[0] + 1
- local headNet = msgRet.headList[msgRet.headList[0]]
- headNet.headID = id
- headNet.isActive = isActive(human, HEAD_TYPE_2, id) and 1 or 0
- headNet.desc = cf.desc or ""
- headNet.keepTime = getKeepTime(human, HEAD_TYPE_2, id)
- headNet.name = cf.name or ""
- headNet.camp = cf.camp or 0
- local len = #cf.attrs
- for i = 1,len do
- headNet.attr[i].key = cf.attrs[i][1]
- headNet.attr[i].value = cf.attrs[i][2]
- end
- headNet.attr[0] = len
- end
- end
- msgRet.useID = human.db.headFrame or 0
- elseif headType == HEAD_TYPE_3 then -- 形象
- for id, cf in pairs(RoleExcel.body) do
- if cf.type ~= DEFAULT_DEL_TYPE then
- msgRet.headList[0] = msgRet.headList[0] + 1
- local headNet = msgRet.headList[msgRet.headList[0]]
- headNet.headID = id
- headNet.isActive = isActive(human, HEAD_TYPE_3, id) and 1 or 0
- headNet.desc = cf.desc or ""
- headNet.keepTime = getKeepTime(human, HEAD_TYPE_3, id)
- headNet.name = cf.name or ""
- headNet.camp = 0
- local len = #cf.attrs
- for i = 1,len do
- headNet.attr[i].key = cf.attrs[i][1]
- headNet.attr[i].value = cf.attrs[i][2]
- end
- headNet.attr[0] = len
- end
- end
- msgRet.useID = human.db.body or 0
- elseif headType == HEAD_TYPE_4 then -- 称号
- msgRet.headList[0] = 0
- msgRet.useID = 0
-
- ChenghaoImp.query(human)
- elseif headType == HEAD_TYPE_5 then -- 立绘
- for id, cf in pairs(RoleExcel.body) do
- if cf.type ~= DEFAULT_DEL_TYPE then
- msgRet.headList[0] = msgRet.headList[0] + 1
- local headNet = msgRet.headList[msgRet.headList[0]]
- headNet.headID = id
- headNet.isActive = isActive(human, HEAD_TYPE_5, id) and 1 or 0
- headNet.desc = cf.desc or ""
- headNet.keepTime = getKeepTime(human, HEAD_TYPE_5, id)
- headNet.name = cf.name or ""
- headNet.camp = cf.camp or 0
- headNet.attr[0] = 0
- end
- end
- msgRet.useID = GetCorrectBodyId(human)
- elseif headType == HEAD_TYPE_6 then -- 背景
- for id, cf in pairs(RoleExcel.background) do
- if cf.type ~= DEFAULT_DEL_TYPE then
- msgRet.headList[0] = msgRet.headList[0] + 1
- local headNet = msgRet.headList[msgRet.headList[0]]
- headNet.headID = id
- headNet.isActive = isActive(human, HEAD_TYPE_6, id) and 1 or 0
- headNet.desc = cf.desc or ""
- headNet.keepTime = getKeepTime(human, HEAD_TYPE_6, id)
- headNet.name = cf.name or ""
- headNet.camp = cf.camp or 0
- headNet.attr[0] = 0
- end
- end
- msgRet.useID = human.db.background or 0
- end
-
- setNewFlag(human, headType, nil)
-
- --Msg.trace(msgRet)
- Msg.send(msgRet, human.fd)
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_101)
- end
- -- 背景立绘查询
- function bgAndLhQuery(human)
- local msgRet = Msg.gc.GC_ROLE_BG_LH_QUERY
- msgRet.data[0] = 2
- local dataNet = msgRet.data[1]
- dataNet.headList[0] = 0
- for id, cf in pairs(RoleExcel.body) do
- dataNet.headList[0] = dataNet.headList[0] + 1
- dataNet.type = HEAD_TYPE_5
- local headNet = dataNet.headList[dataNet.headList[0]]
- headNet.headID = id
- headNet.isActive = isActive(human, HEAD_TYPE_5, id) and 1 or 0
- headNet.desc = cf.desc or ""
- headNet.keepTime = getKeepTime(human, HEAD_TYPE_5, id)
- headNet.name = cf.name or ""
- headNet.camp = cf.camp or 0
- headNet.attr[0] = 0
- dataNet.useID = GetCorrectBodyId(human)
- end
- setNewFlag(human, HEAD_TYPE_5, nil)
- dataNet = msgRet.data[2]
- dataNet.headList[0] = 0
- local bl = true
- for id, cf in pairs(RoleExcel.background) do
- bl = true
- if cf.type == 5 and not isActive(human, HEAD_TYPE_3, id) then -- 皮肤新增的背景图,只发已经激活的
- bl = false
- end
- if bl then
- dataNet.headList[0] = dataNet.headList[0] + 1
- local headNet = dataNet.headList[dataNet.headList[0]]
- dataNet.type = HEAD_TYPE_6
- headNet.headID = id
- -- headNet.isActive = isActive(human, HEAD_TYPE_6, id) and 1 or 0
- headNet.desc = cf.desc or ""
- -- headNet.keepTime = getKeepTime(human, HEAD_TYPE_6, id)
- headNet.name = cf.name or ""
- headNet.camp = cf.camp or 0
- headNet.attr[0] = 0
- if cf.type == 5 then -- 皮肤新增的背景图
- -- 根据皮肤的body值来判断
- headNet.isActive = 1
- headNet.keepTime = getKeepTime(human, HEAD_TYPE_3, id)
- else
- headNet.isActive = isActive(human, HEAD_TYPE_6, id) and 1 or 0
- headNet.keepTime = getKeepTime(human, HEAD_TYPE_6, id)
- end
- dataNet.useID = human.db.background or 0
- end
- end
- setNewFlag(human, HEAD_TYPE_6, nil)
-
- Msg.send(msgRet, human.fd)
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_101)
- end
- --获取角色当前形象数据,如:头像,形象。。。
- function getRoleAppearance(human, type)
- if not type or type < HEAD_TYPE_1 or type > HEAD_TYPE_6 then
- return
- end
- local adornId = 0
- if type == HEAD_TYPE_1 then
- adornId = human.db.head or 0
- elseif type == HEAD_TYPE_2 then
- adornId = human.db.headFrame or 0
- elseif type == HEAD_TYPE_3 then
- adornId = human.db.body or 0
- elseif type == HEAD_TYPE_5 then
- adornId = GetCorrectBodyId(human)
- elseif type == HEAD_TYPE_6 then
- adornId = human.db.background or 0
- end
- return adornId
- end
- -- 获取当前角色已获得的某类装饰的所有数据
- function GetRoleAdornInfo(human, adornType)
- if not adornType or adornType < HEAD_TYPE_1 or adornType > HEAD_TYPE_6 then
- return
- end
- if adornType == HEAD_TYPE_1 then
- return human.db.headList
- elseif adornType == HEAD_TYPE_2 then
- return human.db.headFrameList
- elseif adornType == HEAD_TYPE_3 then
- return human.db.bodyList
- elseif adornType == HEAD_TYPE_4 then
- return human.db.chenghaoList
- elseif adornType == HEAD_TYPE_5 then
- return human.db.animationList
- elseif adornType == HEAD_TYPE_6 then
- return human.db.backgroundList
- end
- end
- -- 设置头像/头像框/形象
- function setHead(human, headID, headType)
- if headType < HEAD_TYPE_1 or headType > HEAD_TYPE_6 then
- return
- end
- local finalType = headType
- if headType == HEAD_TYPE_6 then
- local backgroundCfg = RoleExcel.background[headID]
- if backgroundCfg and backgroundCfg.type == 5 then
- finalType = HEAD_TYPE_3
- end
- end
- if isActive(human, finalType, headID) ~= true then
- return
- end
- local changed = nil
- local useID = nil
- if headType == HEAD_TYPE_1 then -- 头像
- useID = human.db.head or 0
- if useID == headID then
- return
- end
- human.db.head = headID
- changed = true
- TriggerLogic.PublishEvent(TriggerDefine.SET_HEAD, human.db._id, 1)
- elseif headType == HEAD_TYPE_2 then -- 头像框
- useID = human.db.headFrame or 0
- if useID == headID then
- return
- end
- human.db.headFrame = headID
- changed = true
- TriggerLogic.PublishEvent(TriggerDefine.SET_HEAD_FRAME, human.db._id, 1)
- elseif headType == HEAD_TYPE_3 then -- 形象
- useID = human.db.body or 0
- if useID == headID then
- return
- end
- human.db.body = headID
- changed = true
- TriggerLogic.PublishEvent(TriggerDefine.SET_MODELING, human.db._id, 1)
- -- 查询是否有占领王座,如有占领,更改形象
- local list = TheStarsDBLogic.getThroneList()
- for i, v in ipairs(list) do
- if v.uuid ~= nil and v.uuid == human.db._id then
- v.body = headID
- TheStarsDBLogic.updateThroneDB(v)
- break
- end
- end
- elseif headType == HEAD_TYPE_4 then -- 称号
- useID = human.db.chenghao or 0
- if useID == headID then
- return
- end
- human.db.chenghao = headID
- changed = true
- TriggerLogic.PublishEvent(TriggerDefine.SET_TITLE, human.db._id, 1)
- elseif headType == HEAD_TYPE_5 then -- 立绘
- useID = human.db.animation or 0
- if useID == headID then
- return
- end
- human.db.animation = headID
- changed = true
- elseif headType == HEAD_TYPE_6 then -- 背景
- useID = human.db.background or 0
- if useID == headID then
- return
- end
- human.db.background = headID
- changed = true
- end
-
- RoleAttr.cleanHeroAttrCache(human)
- if changed == true then
- -- 通知客户端
- local msgRet = Msg.gc.GC_ROLE_HEAD_SET
- msgRet.headID = headID
- msgRet.headType = headType
- if headType == HEAD_TYPE_5 then
- msgRet.headID = GetCorrectBodyId(human)
- end
- Msg.send(msgRet, human.fd)
- --同步头像设置
- if headType == HEAD_TYPE_5 or headType == HEAD_TYPE_6 then -- 立绘
- bgAndLhQuery(human)
- else
- query(human, headType)
- end
- if headType == HEAD_TYPE_1 then -- 头像
- HuanJingTowerLogic.changeHeadAfter(human)
- end
- if headType == HEAD_TYPE_1 or headType == HEAD_TYPE_2 or headType == HEAD_TYPE_3 then
- local showType = 3
- if headType == HEAD_TYPE_2 then
- showType = 4
- elseif headType == HEAD_TYPE_3 then
- showType = 5
- end
- local GodsAreaNS = require("godsArea.GodsAreaNS")
- GodsAreaNS.UpdateShowData(human, showType)
- end
- end
- end
- function getKeepTime(human, headType, id)
- local config = nil
- local checkDB = nil
- if headType == HEAD_TYPE_1 then -- 头像
- if id == DEFAULT_HEAD_MALE_ID or
- id == DEFAULT_HEAD_FEMALE_ID then
- return -1
- end
- config = RoleExcel.head[id]
- if config == nil then
- return 0
- end
- if not human.db.headList then
- return config.keepTime == -1 and config.keepTime or config.keepTime*60*60
- end
- checkDB = human.db.headList[id]
- elseif headType == HEAD_TYPE_2 then -- 头像框
- if id == DEFAULT_HEADFREAM_ID then
- return -1
- end
-
- config = RoleExcel.headFrame[id]
- if config == nil then
- return 0
- end
- if not human.db.headFrameList then
- return config.keepTime == -1 and config.keepTime or config.keepTime*60*60
- end
- checkDB = human.db.headFrameList[id]
- elseif headType == HEAD_TYPE_3 then -- 形象
-
- config = RoleExcel.body[id]
- if config == nil then
- return 0
- end
- if not human.db.bodyList then
- return config.keepTime == -1 and config.keepTime or config.keepTime*60*60
- end
- checkDB = human.db.bodyList[id]
- elseif headType == HEAD_TYPE_4 then -- 称号
- config = RoleExcel.chenghao[id]
- if config == nil then
- return 0
- end
- if not human.db.chenghaoList then
- return config.keepTime == -1 and config.keepTime or config.keepTime*60*60
- end
- checkDB = human.db.chenghaoList[id]
- elseif headType == HEAD_TYPE_5 then -- 立绘
-
- config = RoleExcel.body[id]
- if config == nil then
- return 0
- end
- if not human.db.animationList then
- return config.keepTime == -1 and config.keepTime or config.keepTime*60*60
- end
- checkDB = human.db.animationList[id]
- elseif headType == HEAD_TYPE_6 then -- 背景
- config = RoleExcel.background[id]
- if config == nil then
- return 0
- end
- if not human.db.backgroundList then
- return config.keepTime == -1 and config.keepTime or config.keepTime*60*60
- end
- checkDB = human.db.backgroundList[id]
- end
-
- if checkDB == nil then
- return 0
- end
-
- if checkDB == true then
- return -1
- end
-
- if checkDB.keepTime < 0 then
- return -1
- end
- local now = os.time()
- if checkDB.ts + checkDB.keepTime <= now then
- return 0
- else
- return checkDB.ts + checkDB.keepTime - now
- end
- end
- -- 获得英雄回调
- function onAddHero(human, heroID)
- local heroConfig = HeroExcel.hero[heroID]
- active(human, HEAD_TYPE_1, heroConfig.head)
- active(human, HEAD_TYPE_3, heroConfig.body)
- active(human, HEAD_TYPE_5, heroConfig.body)
- end
- function isDot(human)
- if human.db.headHasNewFlag then
- return true
- end
- end
- function CG_ROLE_COMBATHERO_QUERY(human, type)
- local combatType = type
- local combatHero,helpList = CombatPosLogic.getCombatHeros(human, combatType, nil, true)
- if not combatHero then return end
- local msgRet = Msg.gc.GC_ROLE_COMBATHERO_QUERY
- msgRet.combatType = combatType
- msgRet.titleId = human.db.chenghao or 0
- msgRet.totalcombat = CombatPosLogic.getCombatHeroZDL(human, combatType, true)
- --msgRet.bagIndex[0] = CombatDefine.COMBAT_HERO_CNT
- local len = 0
- for k,v in pairs(combatHero) do
- local heroGrid = HeroLogic.getHeroGridByUuid(human, v)
- if heroGrid then
- len = len + 1
- msgRet.bagIndex[len] = heroGrid.bagIndex
- end
- end
- for k,v in pairs(helpList) do
- local heroGrid = HeroLogic.getHeroGridByUuid(human, v)
- if heroGrid then
- len = len + 1
- msgRet.bagIndex[len] = heroGrid.bagIndex
- end
- end
- msgRet.bagIndex[0] = len
- --Msg.trace(msgRet)
- Msg.send(msgRet, human.fd)
- end
- function doCalcHero(human, attrs)
- if not human then return end
-
- if human.db.headList then
- for k, v in pairs(human.db.headList) do
- if isActive(human, HEAD_TYPE_1, k) and human.db.head == k then
- local config = getConfig(HEAD_TYPE_1, k)
- for k1,v1 in ipairs(config.attrs) do
- RoleAttr.updateValue(v1[1], v1[2], attrs)
- end
- end
- end
- end
-
- if human.db.headFrameList then
- for k, v in pairs(human.db.headFrameList) do
- -- if isActive(human, HEAD_TYPE_2, k) and human.db.headFrame == k then
- -- local config = getConfig(HEAD_TYPE_2, k)
- -- for k1,v1 in ipairs(config.attrs) do
- -- RoleAttr.updateValue(v1[1], v1[2], attrs)
- -- end
- -- end
- -- 改为所有头像框加成属性叠加
- if isActive(human, HEAD_TYPE_2, k) then
- local config = getConfig(HEAD_TYPE_2, k)
- for k1,v1 in ipairs(config.attrs) do
- RoleAttr.updateValue(v1[1], v1[2], attrs)
- end
- end
- end
- end
-
- if human.db.bodyList then
- for k, v in pairs(human.db.bodyList) do
- if isActive(human, HEAD_TYPE_3, k) and human.db.body == k then
- local config = getConfig(HEAD_TYPE_3, k)
- for k1,v1 in ipairs(config.attrs) do
- RoleAttr.updateValue(v1[1], v1[2], attrs)
- end
- end
- end
- end
-
- if human.db.chenghaoList then
- for k, v in pairs(human.db.chenghaoList) do
- if isActive(human, HEAD_TYPE_4, k) then
- local config = getConfig(HEAD_TYPE_4, k)
- for k1,v1 in ipairs(config.attrs) do
- RoleAttr.updateValue(v1[1], v1[2], attrs)
- end
- end
- end
- end
- if human.db.animationList then
- for k, v in pairs(human.db.animationList) do
- if isActive(human, HEAD_TYPE_5, k) and human.db.animation == k then
- local config = getConfig(HEAD_TYPE_5, k)
- for k1,v1 in ipairs(config.attrs) do
- RoleAttr.updateValue(v1[1], v1[2], attrs)
- end
- end
- end
- end
- if human.db.backgroundList then
- for k, v in pairs(human.db.backgroundList) do
- if isActive(human, HEAD_TYPE_6, k) then
- local config = getConfig(HEAD_TYPE_6, k)
- for k1,v1 in ipairs(config.attrs) do
- RoleAttr.updateValue(v1[1], v1[2], attrs)
- end
- end
- end
- end
- end
- function GetCorrectBodyId(human)
- local nowBodyId = human.db.animation or 0
- if nowBodyId <= 0 then
- return nowBodyId
- end
- local bl = false
- for _, channelId in ipairs(Config.SVR_CHANEL or {}) do
- if channelId == CommonDefine.CHANNEL_TAG_WX then
- bl = true
- break
- end
- end
- if not bl then
- return nowBodyId
- end
- local skinCfg = SkinConfig[nowBodyId]
- if skinCfg and (skinCfg.body1 or 0) > 0 then
- nowBodyId = skinCfg.body1
- end
- return nowBodyId
- end
- function GM_Active(human, headType, id)
- active(human, headType, id)
- end
- function GM_UnActive(human, headType, id)
- unActive(human.db._id, headType, id)
- end
|