| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012 |
- -------------------------------------------------------
- -- 头像&头像框
- -- 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
|