| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660 |
- local Msg = require("core.Msg")
- local InnerMsg = require("core.InnerMsg")
- local ObjHuman = require("core.ObjHuman")
- local Util = require("common.Util")
- local Config = require("Config")
- local Lang = require("common.Lang")
- local LuaMongo = _G.lua_mongo
- local DB = require("common.DB")
- local RoleDBLogic = require("role.RoleDBLogic")
- local CombatLogic = require("combat.CombatLogic")
- local CombatPosLogic = require("combat.CombatPosLogic")
- local CombatDefine = require("combat.CombatDefine")
- local UnionWarDBLogic = require("union.UnionWarDBLogic")
- local UnionWarMiddleLogic = require("union.UnionWarMiddleLogic")
- local HeroGrid = require("hero.HeroGrid")
- local Grid = require("bag.Grid")
- local BagLogic = require("bag.BagLogic")
- local Broadcast = require("broadcast.Broadcast")
- local RoleDefine = require("role.RoleDefine")
- local UnionDBLogic = require("union.UnionDBLogic")
- local RoleLogic = require("role.RoleLogic")
- local MailManager = require("mail.MailManager")
- local BattleLogic = require("battle.BattleLogic")
- local MailDefine = require("mail.MailIdDefine")
- local MailExcel = require("excel.mail").mail
- local MonsterOutExcel = require("excel.monster").monsterOut
- local UnionWarExcel = require("excel.unionWar")
- local RobotExcel = UnionWarExcel.robot
- local DefineConf = UnionWarExcel.define[1]
- local LvExcel = UnionWarExcel.lv
- local RankExcel = UnionWarExcel.rank
- local RoleSystemLogic = require("roleSystem.RoleSystemLogic")
- local RoleSystemDefine = require("roleSystem.RoleSystemDefine")
- local BillboardDB = require("billboard.BillboardDB")
- local BillboardDefine = require("billboard.BillboardDefine")
- local Broadcast = require("broadcast.Broadcast")
- local Timer = require("core.Timer")
- local MiddleConnect = require("middle.MiddleConnect")
- local Config = require("Config")
- --活动阶段
- WDAY = {[1] = 1,[3] = 1,[5] = 1}
- --获取公会战阶段
- HOUR1 = {5,8} --确认
- HOUR2 = {8,12} --匹配
- HOUR3 = {12,20} --战斗
- HOUR4 = {20,24} --结算
- STATE0 = 0 --非活动阶段
- STATE1 = 1 --确认
- STATE2 = 2 --匹配
- STATE3 = 3 --战斗
- STATE4 = 4 --结算
- UNION_STATE1 = 1 --匹配成功
- UNION_STATE2 = 2 --确认不成功
- UNION_STATE3 = 3 --匹配不成功
- UNION_LV = 2 -- 公会等级条件
- UNION_HUOYUE = 5 --功会活跃人数条件
- HUOYUE_TIME = 86400
- UNION_FEIXU_CNT = 5 -- 废墟可挑战次数
- local function getLocalUnionWarData(localData,unionUuid)
- localData[unionUuid] = localData[unionUuid] or {member = {},memberCnt = 0,star = 0,cnt = 0,exp = 0,lv = 0,rank = {}}
- return localData[unionUuid]
- end
- local function getLocalMemberData(unionWarData,uuid)
- unionWarData.member[uuid] = unionWarData.member[uuid] or {name = "",cnt = 0,shop = {{},{}},chengjiu = {{},{}}}
- return unionWarData.member[uuid]
- end
- local function getUnionWarRankRewardID(rank)
- for k, v in ipairs(RankExcel) do
- if v.minRank <= rank and rank <= v.maxRank then
- return k
- end
- end
- return 0
- end
- local function getUnionWarData(human,memberData)
- if not human.db.unionWarData then
- human.db.unionWarData = {}
- human.db.unionWarData.shop = Util.copyTable(memberData.shop)
- human.db.unionWarData.upShopTime = memberData.upShopTime
- human.db.unionWarData.chengjiu = Util.copyTable(memberData.chengjiu)
- human.db.unionWarData.cnt = memberData.cnt
- end
- local now = os.time()
- if not human.db.unionWarData.upShopTime or human.db.unionWarData.upShopTime < now then
- human.db.unionWarData.upShopTime = Util.getWeekStartTime(now) + 86400 * 7
- human.db.unionWarData.shop[1] = {}
- end
- return human.db.unionWarData
- end
- function fontFakeObj(objList)
- local fakeList = {}
- for i = 1, CombatDefine.COMBAT_HERO_CNT do
- local obj = objList[i]
- if obj then
- fakeList[i] = {}
- fakeList[i] = Util.copyTable(obj)
- local fake = fakeList[i]
- fake.beSkillList = nil
- fake.skillList = nil
- fake.beSkillListTemp = nil
- fake.attrs = nil
- fake.attrs2 = {}
- fake.attrs2[RoleDefine.HP] = obj.attrs[RoleDefine.HP]
- fake.attrs2[RoleDefine.DEF] = obj.attrs[RoleDefine.DEF]
- fake.attrs2[RoleDefine.ATK] = obj.attrs[RoleDefine.ATK]
- fake.attrs2[RoleDefine.SPEED] = obj.attrs[RoleDefine.SPEED]
- fake.attrs2[RoleDefine.ATK_RATE] = obj.attrs[RoleDefine.SPEED_RATE]
- fake.attrs2[RoleDefine.DEF_RATE] = obj.attrs[RoleDefine.SPEED_RATE]
- fake.attrs2[RoleDefine.HP_RATE] = obj.attrs[RoleDefine.SPEED_RATE]
- fake.attrs2[RoleDefine.SPEED_RATE] = obj.attrs[RoleDefine.SPEED_RATE]
- -- fake.attrsting = ""
- -- for k,v in pairs(obj.attrs) do
- -- fake.attrsting = fake.attrsting .. "|" .. k.. "," .. v
- -- end
- end
- end
- return fakeList
- end
- local function getData(data)
- if data.lv < UNION_LV then return end
- local unionData = {member = {}}
- local len = 0
- local huoyueCnt = 0
- local sortList = {}
- local localData = UnionWarDBLogic.getLocalData()
- local unionUuid = data._id
- local now = os.time()
- local d = os.date("*t",now)
- d.hour = HOUR4[1]
- d.min = 0
- d.sec = 0
- local boxEndTime = os.time(d) + 24 * 3600
- local donateTime = Util.getDayStartTime(os.time())
- donateTime = donateTime - HUOYUE_TIME
- localData[unionUuid] = localData[unionUuid] or {member = {},memberCnt = 0,star = 0,cnt = 0,exp = 0,lv = 0,rank = {}}
- localData[unionUuid].rank = {}
- if localData[unionUuid].box and localData[unionUuid].box.endTime and localData[unionUuid].box.endTime < now then
- localData[unionUuid].isWin = nil
- localData[unionUuid].isMatch = nil
- end
- for k,v in pairs(data.member) do
- local db = RoleDBLogic.getDb(k)
- if db then
- if db.lastLoginTime and db.lastLoginTime >= donateTime then
- huoyueCnt = huoyueCnt + 1
- end
- local objList, helpList, rolebase,formation, jiban = CombatLogic.getHumanObjList({db = db},CombatDefine.COMBAT_TYPE3)
- if rolebase.zhandouli > 0 then
- len = len + 1
- local battleMonsterOutID = BattleLogic.getCombatMonsterOutID({db = db}, CombatDefine.DEFEND_SIDE)
- if not battleMonsterOutID then
- battleMonsterOutID = 10001
- end
- unionData.member[k] = {objList = objList,helpList = helpList,formation = formation, jiban = jiban , rolebase = rolebase,name = db.name ,attackStar = 0,defendStar = 3,defendCnt = 0,attackCnt = 0, jifen = 0,log = {},battleMonsterOutID = battleMonsterOutID} --
- sortList[len] = {k,rolebase.zhandouli}
- localData[unionUuid].member[k] = localData[unionUuid].member[k] or {name = db.name,cnt = 0,shop = {{},{}},chengjiu = {{},{}}}
- localData[unionUuid].member[k].join = 1
- localData[unionUuid].member[k].post = v.post
- localData[unionUuid].member[k].rolebase = rolebase
- localData[unionUuid].member[k].boxTime = boxEndTime
- end
- end
- end
- if len == 0 or huoyueCnt < UNION_HUOYUE then
- return
- end
- for k, v in pairs(localData[unionUuid].member) do
- if not data.member[k] then
- localData[unionUuid].member[k] = nil
- end
- end
- table.sort(sortList,function(a,b)
- return a[2] > b[2]
- end)
- for k,v in ipairs(sortList) do
- unionData.member[v[1]].index = k
- localData[unionUuid].rank[k] = {v[1],0,0}
- end
- unionData.memberCnt = len
- unionData.unionUuid = data._id
- unionData.name = data.name
- unionData.bannerID = data.bannerID
- unionData.lv = data.lv
- unionData.zhandouli = data.zhandouli
- unionData.svrName = Config.SVR_NAME
- unionData.svrIndex = Config.SVR_INDEX
- unionData.rank = BillboardDB.getRank(BillboardDefine.TYPE_UNION,data._id) or 0
- localData[unionUuid].memberCnt = len
- localData[unionUuid].star = 0
- return unionData
- end
- --重置公会战数据(资格确认)
- fileds = {unionUuid = 1,name = 1,bannerID = 1,lv = 1,zhandouli = 1,member = 1}
- local ToMidUnionList = nil
- function refreshData()
- print(" refreshData refreshData refreshData")
- ToMidUnionList = {}
- LuaMongo.find(DB.db_union,nil,fileds)
- local msgRet = InnerMsg.lw.LW_UNION_WAR_ADD
- msgRet.list = {}
- local len = 0
- local unionList = {}
- local unionUuid
- while true do
- local data = {}
- if not LuaMongo.next(data) then
- break
- end
- unionList[#unionList + 1] = data
- end
- for k,data in ipairs(unionList) do
- local unionData = getData(data)
- if unionData then
- unionUuid = unionData.unionUuid
- local toLen = #ToMidUnionList + 1
- ToMidUnionList[toLen] = {}
- ToMidUnionList[toLen].member = {}
- ToMidUnionList[toLen].unionUuid = unionUuid
- ToMidUnionList[toLen].member = Util.copyTable(unionData.member)
- unionData.member = {}
- len = len + 1
- msgRet.list[len] = unionData
- end
- if len >= 5 then
- InnerMsg.sendMsg(0, msgRet)
- Util.cleanTable(msgRet.list)
- len = 0
- end
- end
- if len >= 1 then
- InnerMsg.sendMsg(0, msgRet)
- end
- UnionWarDBLogic.updateDB()
- print(" Timer.addLater(1, sendUnionToMid) Timer.addLater(1, sendUnionToMid)")
- Timer.addLater(1, sendUnionToMid)
- end
- local function getSurCnt(member)
- local len = 0
- if not member then return len end
- for _ in pairs(member) do
- len = len + 1
- end
- return len
- end
- function sendUnionToMid()
- print(" sendUnionToMid , sendUnionToMid , sendUnionToMid")
- if ToMidUnionList and #ToMidUnionList > 0 then
- print(" sendUnionToMid sendUnionToMid sendUnionToMid", #ToMidUnionList)
- local data = ToMidUnionList[#ToMidUnionList]
- if data and data.unionUuid then
- local msgRet = InnerMsg.lw.LW_UNION_WAR_MEMBER
- msgRet.unionUuid = data.unionUuid
- msgRet.list = {}
- Util.cleanTable(msgRet.list)
- local len = 0
- local sendUuid = {}
- if #ToMidUnionList == 1 and getSurCnt(data.member) <= 10 then
- data.isEnd = 1
- end
- local isSend = false
- msgRet.isEnd = data.isEnd or 0
- for k,v in pairs(data.member) do
- len = len + 1
- msgRet.list[len] = {k,v}
- sendUuid[k] = 1
- if len >= 10 then
- -- Util.printTable(msgRet)
- InnerMsg.sendMsg(0, msgRet)
- Util.cleanTable(msgRet.list)
- isSend = true
- break
- end
- end
- if not isSend then
- -- Util.printTable(msgRet)
- InnerMsg.sendMsg(0, msgRet)
- Util.cleanTable(msgRet.list)
- end
- local surLen = 0
- for uuid in pairs(data.member) do
- if sendUuid[uuid] then
- data.member[uuid] = nil
- else
- surLen = surLen + 1
- end
- end
- print(" surLen surLen ", surLen)
- if surLen == 0 then
- ToMidUnionList[#ToMidUnionList] = nil
- print(" del ToMidUnionList !", #ToMidUnionList)
- end
- if #ToMidUnionList > 0 then
- Timer.addLater(1, sendUnionToMid)
- else
- ToMidUnionList = nil
- end
- end
- end
- end
- -- 匹配完成 各个单服 将匹配上的 公会标记 用于红点
- function middleUnionMatchFinish(msg)
- local localData = UnionWarDBLogic.getLocalData()
- for unionUuid in pairs(msg.list) do
- if localData[unionUuid] then
- localData[unionUuid].isMatch = true
- localData[unionUuid].matchTime = os.time()
- end
- end
- end
- function getState()
- local now = os.time()
- local d = os.date("*t",now)
- local wday = d.wday
- local h = d.hour
- -- 周一 周三 周五 公会战
- if WDAY[wday - 1] then
- if h >= HOUR1[1] and h < HOUR1[2] then
- return STATE1
- elseif h >= HOUR2[1] and h < HOUR2[2] then
- return STATE2
- elseif h >= HOUR3[1] and h < HOUR3[2] then
- return STATE3
- elseif h >= HOUR4[1] and h < HOUR4[2] then
- return STATE4
- end
- end
- return STATE0
- end
- function getEndTime(actState)
- local now = os.time()
- local d = os.date("*t",now)
- if actState == STATE0 then
- local wday = d.wday
- if wday < 6 then
- d.hour = HOUR2[2]
- local checkTime = os.time(d)
- return checkTime + 24 * 60 * 60 - now
- elseif wday == 6 then
- if actState < STATE3 then
- d.hour = HOUR2[2]
- else
- d.hour = HOUR3[2]
- end
- d.min = 0
- d.sec = 0
- local checkTime = os.time(d)
- return checkTime - now
- else
- local Monday = Util.getWeekStartTime()
- return Monday + 24 * 60 * 60 * 7 + HOUR2[2] * 3600 - now
- end
- else
- if actState < STATE3 then
- d.hour = HOUR2[2]
- else
- d.hour = HOUR3[2]
- end
- d.min = 0
- d.sec = 0
- local checkTime = os.time(d)
- return checkTime - now
- end
- end
- function getWarTime(human)
- local msgRet = Msg.gc.GC_UNION_WAR_TIME
- if MiddleConnect.IS_MIDDLE_CONNECT then
- local actState = getState()
- msgRet.actState = actState
- msgRet.time = getEndTime(actState)
- Msg.send(msgRet,human.fd)
- else
- msgRet.actState = 0
- msgRet.time = 0
- Msg.send(msgRet,human.fd)
- end
-
- end
- local function getChengjiuExcel(type)
- if type == 1 then
- return UnionWarExcel.chengjiu1
- else
- return UnionWarExcel.chengjiu2
- end
- end
- local function isDotChengjiu(human,localData,unionWarData,memberData,type)
- local ChengjiuExcel = getChengjiuExcel(type)
- if not memberData then
- --未参与公会战
- return
- end
- local getList,cnt
- local humanData = getUnionWarData(human,memberData)
- if type == 1 then
- cnt = humanData.cnt
- getList = humanData.chengjiu[1]
- else
- cnt = unionWarData.cnt
- getList = humanData.chengjiu[2]
- end
- for k, v in ipairs(ChengjiuExcel) do
- if not getList[k] and v.cnt <= cnt then
- return true
- end
- end
- end
- local function sendState(human,actState,unionState)
- local msgRet = Msg.gc.GC_UNION_WAR_STATE
- msgRet.actState = actState
- msgRet.unionState = unionState
- msgRet.winState = 0
- msgRet.cjDot = 0
- msgRet.zgDot = 0
- msgRet.shopDot = 0
- msgRet.fightDot = 0
- msgRet.pipeiDot = 0
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = getLocalUnionWarData(localData,human.db.unionUuid)
- local memberData = getLocalMemberData(unionWarData,human.db._id)
- if unionWarData and memberData and isDotChengjiu(human,localData,unionWarData,memberData,1) or isDotChengjiu(human,localData,unionWarData,memberData,2) then
- msgRet.cjDot = 1
- end
- if unionWarData and isDotByBox(human, unionWarData) then
- msgRet.zgDot = 1
- end
- if unionWarData and isDotByShop(human, unionWarData) then
- msgRet.shopDot = 1
- end
- if unionWarData and isDotByCnt(human, unionWarData) then
- msgRet.fightDot = 1
- end
- if unionWarData and isDotByPiPei(human, unionWarData) then
- msgRet.pipeiDot = 1
- end
- if actState == STATE4 and unionState == UNION_STATE1 then
- msgRet.winState = unionWarData.isWin and unionWarData.isWin or 0
- end
- Msg.send(msgRet,human.fd)
- end
- --请求:查询状态
- --返回:状态,攻守双方成员
- local function fontUnionWarTeam(net,data)
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = getLocalUnionWarData(localData,data.unionUuid)
- local rankData = unionWarData.rank
- local temp = {}
- for i = 1,3 do
- if rankData[i] then
- temp[rankData[i][1]] = i
- else
- break
- end
- end
- net.unionUuid = data.unionUuid
- net.name = data.name
- net.svrName = data.svrName or ""
- net.bannerID = data.bannerID
- net.star = data.star
- local len = 0
- for k,v in pairs(data.member) do
- len = len + 1
- net.list[len].index = v.index
- net.list[len].uuid = v.uuid
- net.list[len].name = v.name
- net.list[len].star = v.star
- net.list[len].zhandouli = v.zhandouli
- net.list[len].rank = temp[v.uuid] or 0
- local pos = RobotExcel[v.index].pos
- net.list[len].x = pos[1]
- net.list[len].y = pos[2]
- end
- net.list[0] = len
- end
- local function fontSimpleRank(net,unionUuid)
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = getLocalUnionWarData(localData,unionUuid)
- local memberList = unionWarData.member
- local len = 0
- local fields = {name = 1}
- local db
- for k,v in ipairs(unionWarData.rank) do
- len = len + 1
- net[len].rank = k
- db = RoleDBLogic.getDb(v[1], fields)
- net[len].name = db and db.name or memberList[v[1]].name
- if len >= 3 then
- break
- end
- end
- net[0] = len
- end
- function onLogin(human)
- end
- function query(human,msg, actState)
- local msgRet = Msg.gc.GC_UNION_WAR_QUERY
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = getLocalUnionWarData(localData,human.db.unionUuid)
-
- fontUnionWarTeam(msgRet.attacker,msg.attacker)
- fontUnionWarTeam(msgRet.defender,msg.defender)
- fontSimpleRank(msgRet.threeRank,msg.attacker.unionUuid)
- local now = os.time()
- local d = os.date("*t",now)
- d.hour = HOUR3[2]
- --[[
- if actState == STATE2 then
- d.hour = HOUR2[2]
- else
- d.hour = HOUR3[2]
- end
- ]]
-
- d.min = 0
- d.sec = 0
- local checkTime = os.time(d)
- msgRet.leftTime = checkTime - now
- msgRet.cnt = msg.cnt
- msgRet.maxCnt = DefineConf.cnt
- -- Msg.trace(msgRet)
- Msg.send(msgRet,human.fd)
- end
- function CGQuery(human)
-
- end
- function WLQuery(human,msg)
- local actState = getState()
- sendState(human,actState,msg.state)
- if msg.state == UNION_STATE1 then
- query(human,msg, actState)
- end
- end
- -- 客户端 最多请求三次
- -- 用于给 客户端 给予 停留在公会战界面 倒计时结束 公会战结果 查询更新
- function CGEndQuery(human)
- local msgRet = Msg.gc.GC_UNION_WAR_END_STATE_QUERY
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = getLocalUnionWarData(localData,human.db.unionUuid)
- msgRet.winState = unionWarData.isWin and unionWarData.isWin or 0
- Msg.send(msgRet,human.fd)
- end
- local function fontBufferNet(msgRet, lv)
- msgRet.maxBuff = #UnionWarExcel.buff
- local config = UnionWarExcel.buff[lv]
- msgRet.nowAttr[0] = 0
- msgRet.nextAttr[0] = 0
- if config then
- for k, v in ipairs(config.attr) do
- local net = msgRet.nowAttr[k]
- net.key = v[1]
- net.value = v[2]
- end
- msgRet.nowAttr[0] = #config.attr
- end
-
-
- if lv + 1 <= msgRet.maxBuff then
- local nextConfig = UnionWarExcel.buff[lv + 1]
- for k, v in ipairs(nextConfig.attr) do
- local net = msgRet.nextAttr[k]
- net.key = v[1]
- net.value = v[2]
- end
- msgRet.nextAttr[0] = #nextConfig.attr
- end
-
- end
- -- BUF 请求
- function CGBuffQuery(human)
- local msgRet = Msg.gc.GC_UNION_WAR_BUFF
- msgRet.buffLv = 0
- fontBufferNet(msgRet, 0)
- if human then
- Msg.send(msgRet,human.fd)
- end
- local actState = getState()
- if actState > STATE1 then
- local msgRet = InnerMsg.lw.LW_UNION_WAR_BUFF_QUERY
- msgRet.uuid = human.db._id
- msgRet.unionUuid = human.db.unionUuid
- InnerMsg.sendMsg(0, msgRet)
- end
- end
- function WLBuffQuery(human, msg)
- local msgRet = Msg.gc.GC_UNION_WAR_BUFF
- msgRet.buffLv = msg.buffLv
- fontBufferNet(msgRet, msg.buffLv)
- if human and human.fd then
- Msg.send(msgRet,human.fd)
- else
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = getLocalUnionWarData(localData, msg.unionUuid)
- if not unionWarData or not unionWarData.member then return end
- for uuid,_ in pairs(unionWarData.member) do
- local human = ObjHuman.onlineUuid[uuid]
- if human and human.fd then
- Msg.send(msgRet,human.fd)
- end
- end
- end
- end
- --请求:公会成员信息
- --返回:公会成员信息
- function CGInfo(human,unionUuid,targetUuid)
- local msgRet = InnerMsg.lw.LW_UNION_WAR_INFO
- msgRet.uuid = human.db._id
- msgRet.attackUnionUuid = human.db.unionUuid
- msgRet.unionUuid = unionUuid
- msgRet.targetUuid = targetUuid
- InnerMsg.sendMsg(0, msgRet)
- end
- -- 封装 英雄
- local function fontHeroList(net,data)
- local len = 0
- local monsterOutID = data.monsterOutID
- if monsterOutID then
- for k,v in ipairs(MonsterOutExcel[monsterOutID].member) do
- if v[1] > 0 then
- len = len + 1
- HeroGrid.makeHeroSimpleByMonsterID(net[len],v[1],{lv = v[2]})
- end
- end
- else
- for i = 1,CombatDefine.COMBAT_HERO_CNT do
- local obj = data.objList[i]
- if obj then
- len = len + 1
- HeroGrid.makeHeroSimpleByID(net[len],obj.id, obj.bagIndex,{lv = obj.lv,star = obj.star})
- end
- end
- end
- net[0] = len
- end
- function getDiff(robotConf,diff,monsterOutID, isFeixu)
- if isFeixu then
- diff = 3
- return robotConf.rate[diff],0,robotConf.jifen2
- else
- return robotConf.rate[diff],robotConf.star[diff],robotConf.jifen1[diff]
- end
-
- end
- -- 玩家信息
- function WLInfo(human,msg)
- local msgRet = Msg.gc.GC_UNION_WAR_INFO
- local target = msg.target
- msgRet.cnt = msg.cnt
- msgRet.maxCnt = DefineConf.cnt
- msgRet.unionUuid = msg.unionUuid
- msgRet.uuid = target.uuid
- msgRet.index = msg.index
- msgRet.star = target.defendStar
- msgRet.zhandouli = target.zhandouli
- msgRet.defendCnt = target.defendCnt
- msgRet.canFight = msg.canFight
- msgRet.feixuCnt = target.loseBuff
- local len = 0
- local monsterOutID = target.monsterOutID
- if monsterOutID then
- msgRet.isRobot = 1
- else
- msgRet.isRobot = 0
- end
- local robotConf = RobotExcel[target.index]
- local diffList = robotConf.diff
- local isFeixu = target.defendStar <= 0
- if isFeixu then
- diffList = {3}
- end
- for k,v in ipairs(diffList) do
- len = len + 1
- local net = msgRet.diffList[len]
- net.diff = v
- net.rate,net.star,net.jifen = getDiff(robotConf,k,monsterOutID)
- local len1 = 0
- for k1,v1 in ipairs(robotConf.item[v]) do
- len1 = len1 + 1
- Grid.makeItem(net.item[len1], v1[1], v1[2])
- end
- net.item[0] = len1
- end
- msgRet.diffList[0] = len
- -- Util.printTable(target)
- fontHeroList(msgRet.list,target)
- Msg.send(msgRet,human.fd)
- end
- --请求:匹配列表
- --返回:匹配列表
- function CGMatch(human)
- local msgRet = InnerMsg.lw.LW_UNION_WAR_MATCH
- msgRet.uuid = human.db._id
- msgRet.unionUuid = human.db.unionUuid
- InnerMsg.sendMsg(0, msgRet)
- end
- function WLMatch(human,msg)
- local msgRet = Msg.gc.GC_UNION_WAR_MATCH
- local len = 0
- for k,v in ipairs(msg.list) do
- len = len + 1
- local net = msgRet.list[len]
- net.nameLeft = v[1][1]
- net.rankLeft = v[1][3] or 0
- net.nameRight = v[2][1]
- net.rankRight = v[2][3] or 0
- net.svrNameLeft = v[3][3]
- net.svrNameRight = v[3][4]
- if len >= 60 then
- break
- end
- end
- msgRet.list[0] = len
- Msg.send(msgRet,human.fd)
- if human.db.unionUuid then
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = getLocalUnionWarData(localData,human.db.unionUuid)
- if unionWarData then
- local memberData = getLocalMemberData(unionWarData,human.db._id)
- local humanData = getUnionWarData(human,memberData)
-
- local actState = getState()
-
- if actState >= STATE2 and not Util.isSameDay(humanData.pipeiLook) then
- humanData.pipeiLook = os.time()
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_1006)
- end
- end
- end
- end
- --请求:日志
- --返回:日志
- function CGAtkLog(human, type)
- local msgRet = InnerMsg.lw.LW_UNION_WAR_ATKLOG
- msgRet.uuid = human.db._id
- msgRet.type = type
- msgRet.unionUuid = human.db.unionUuid
- InnerMsg.sendMsg(0, msgRet)
- end
- function WLAtkLog(human, msg)
- local msgRet = Msg.gc.GC_UNION_WAR_ATKLOG
- msgRet.type = msg.type
- local len = 0
- for k,v in ipairs(msg.list) do
- len = len + 1
- local net = msgRet.list[len]
- net.upTime = v[1]
- net.ret = v[2] and 1 or 0
- net.name = v[3]
- net.defName = v[4]
- net.star = v[5]
- net.jifen = v[6]
- net.unionUuid = v[7]
- net.atkUnionStar = v[8] or 0
- net.buffLv = v[9] and v[9] or 0
- end
- msgRet.list[0] = len
- -- Msg.trace(msgRet)
- Msg.send(msgRet,human.fd)
- end
- --请求 防守日志
- --返回 防守日志
- function CGDefLog(human,uuid, unionUuid)
- local msgRet = InnerMsg.lw.LW_UNION_WAR_DEFLOG
- msgRet.uuid = human.db._id
- msgRet.unionUuid = human.db.unionUuid
- msgRet.defendUuid = uuid
- msgRet.defendUnion = unionUuid
- InnerMsg.sendMsg(0, msgRet)
- end
- function WLDefLog(human,msg)
- local msgRet = Msg.gc.GC_UNION_WAR_DEFLOG
- msgRet.zhandouli = msg.defender.zhandouli
- fontHeroList(msgRet.heroList,msg.defender)
- local len = 0
- for k,v in ipairs(msg.list) do
- len = len + 1
- local net = msgRet.logList[len]
- net.id = 0
- net.name = v.name
- net.zhandouli = v.zhandouli
- net.diff = v.diff
- net.result = v.result
- net.time = v.upTime
- local formationConfig = CombatPosLogic.getFormationConfig(v.formation)
- net.formation = formationConfig.name
- net.videoIndex = v.videoIndex
- fontHeroList(net.list,v.target)
- end
- msgRet.logList[0] = len
- --Msg.trace(msgRet)
- Msg.send(msgRet,human.fd)
- end
- function CGVideo(human, videoIndex)
- local msgRet = InnerMsg.lw.LW_UNION_WAR_VIDEO
- msgRet.uuid = human.db._id
- msgRet.unionUuid = human.db.unionUuid
- msgRet.index = videoIndex
- InnerMsg.sendMsg(0, msgRet)
- end
- function WLVideo(human,msg)
- CombatLogic.repeatCombat(human, msg.combatInfo)
- end
- --请求:挑战
- --返回:挑战失败原因或者战斗帧
- function fight(human,args)
- local actState = getState()
- if actState ~= STATE3 then
- return Broadcast.sendErr(human, Lang.UNION_WAR_FIGHT_ERR_END)
- end
- local msgRet = InnerMsg.lw.LW_UNION_WAR_FIGHT
- msgRet.unionUuid = human.db.unionUuid
- msgRet.attackUuid = human.db._id
- msgRet.defendUuid = args[1]
- msgRet.diff = args[2]
- InnerMsg.sendMsg(0, msgRet)
- print("================fight", msgRet.diff)
- end
- function sendfightErr(human, msg)
- if msg.state == UnionWarMiddleLogic.FIGHT2 then
- Broadcast.sendErr(human, Lang.UNION_WAR_FIGHT_ERR_TILI)
- elseif msg.state == UnionWarMiddleLogic.FIGHT3 then
- Broadcast.sendErr(human, Lang.UNION_WAR_FIGHT_ERR_ING)
- elseif msg.state == UnionWarMiddleLogic.FIGHT4 then
- Broadcast.sendErr(human, Lang.UNION_WAR_FIGHT_ERR_BEING)
- elseif msg.state == UnionWarMiddleLogic.FIGHT5 then
- Broadcast.sendErr(human, Lang.UNION_WAR_FIGHT_ERR_STAR)
- elseif msg.state == UnionWarMiddleLogic.FIGHT6 then
- Broadcast.sendErr(human, Lang.UNION_WAR_FIGHT_ERR_ZIGE)
- end
- end
- function WLFight(human,msg)
- print("================wlfight",msg.state,UnionWarMiddleLogic.FIGHT1)
- if msg.state ~= UnionWarMiddleLogic.FIGHT1 then
- sendfightErr(human, msg)
- return
- end
- human.unionWar = {}
- human.unionWar.target = Util.copyTable(msg.defender)
- human.unionWar.diff = msg.diff
- human.unionWar.name = msg.name
- CombatLogic.combatBegin(human,1001, {}, CombatDefine.COMBAT_TYPE12)
- end
- function getCombatObjList(human, side)
- if side == CombatDefine.ATTACK_SIDE then
- return CombatLogic.getHumanObjList(human,CombatDefine.COMBAT_TYPE1)
- else
- local target = human.unionWar.target
- local diff = human.unionWar.diff
- local rate = RobotExcel[target.index].rate[diff]
- for k,v in pairs(target.objList) do
- v.attrs[RoleDefine.ATK] = v.attrs[RoleDefine.ATK] * rate/10000
- v.attrs[RoleDefine.DEF] = v.attrs[RoleDefine.DEF] * rate/10000
- v.attrs[RoleDefine.HP] = v.attrs[RoleDefine.HP] * rate/10000
- end
- return target.objList, target.helpList, target.rolebase,target.formation, target.jiban
- end
- end
- --挑战结束回调
- function onFightEnd(human,ret, combatType, cbParam, combatInfo)
- local msgRet = InnerMsg.lw.LW_UNION_WAR_FIGHT_END
- msgRet.upTime = os.time()
- msgRet.uuid = human.db._id
- msgRet.unionUuid = human.db.unionUuid
- msgRet.combatInfo = combatInfo
- InnerMsg.sendMsg(0, msgRet)
- combatInfo.endStatus = CombatLogic.COMBAT_END_STATUS1
- human.unionWar = human.unionWar or {}
- human.unionWar.combatInfo = combatInfo
- end
- function WLFightEnd(human,msg)
- local msgRet = Msg.gc.GC_UNION_WAR_FIGHT_END
- msgRet.diff = msg.diff
- msgRet.unionStar = msg.unionStar
- msgRet.defendStar = msg.defender.defendStar
- msgRet.defendUuid = msg.defender.uuid or ""
- msgRet.defIndex = msg.defender.index
- msgRet.cnt = msg.cnt
- local combatInfo = msg.combatInfo
- local target = msg.defender
- local diff = msg.diff
- local isFeixu = msg.isFeixu == 1 and true or false
- local robotConf = RobotExcel[target.index]
- local rate,star,jifen = getDiff(robotConf, diff,target.monsterOutID, isFeixu)
- combatInfo.endParam = rate.."|"..star.."|"..msg.defUnionName
- combatInfo.rewardItem = robotConf.item[diff]
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = localData[human.db.unionUuid]
- local rankData = unionWarData.rank
- local addStar = msg.addStar
- local memberData = unionWarData.member[human.db._id]
- if combatInfo.isWin then
- if memberData then
- memberData.cnt = memberData.cnt + 1
- local chengjiuData = getUnionWarData(human,memberData)
- chengjiuData.cnt = chengjiuData.cnt + 1
- end
- else
- combatInfo.rewardItem = robotConf.item2[diff]
- jifen = 1
- addStar = 0
- end
- if memberData then
- local humanData = getUnionWarData(human,memberData)
- humanData.fightCnt = humanData.fightCnt or 0
- humanData.fightCnt = msg.cnt
- humanData.fightTime = os.time()
- end
-
-
- -- 玩家增加 公会战积分 星级
- for k,v in ipairs(rankData) do
- if v[1] == human.db._id then
- v[2] = v[2] + jifen
- v[3] = v[3] + addStar
- break
- end
- end
- table.sort(rankData,function(a,b)
- return a[2] > b[2]
- end)
- UnionWarDBLogic.updateDB()
- fontSimpleRank(msgRet.threeRank, human.db.unionUuid)
- Msg.send(msgRet,human.fd)
-
- for k,v in ipairs(combatInfo.rewardItem) do
- BagLogic.addItem(human, v[1], v[2], "unionWar")
- end
- CombatLogic.sendCombatFinish(human,combatInfo)
- human.unionWar = nil
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_1006)
- end
- -- 通知参与公会战的在线玩家场景更新 星级 同步
- function WLFightTongzhi(msg)
- local msgRet = Msg.gc.GC_UNION_WAR_SCENE_INFO
- msgRet.unionUuid = msg.atkUnion
- msgRet.unionStar = msg.atkUnionStar
- msgRet.defendUuid = msg.defUuid
- msgRet.defendStar = msg.defStar
- msgRet.defIndex = msg.defIndex
- msgRet.targetUnion = msg.defUnion
- local ToUuid = msg.unionUuid
- fontSimpleRank(msgRet.threeRank, ToUuid)
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = getLocalUnionWarData(localData, ToUuid)
- for uuid,_ in pairs(unionWarData.member) do
- if uuid ~= msg.atkUuid then
- local human = ObjHuman.onlineUuid[uuid]
- if human then
- Msg.send(msgRet,human.fd)
- end
- end
- end
- end
- --请求:开箱子
- --返回:开箱子
- function CGBox(human)
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = getLocalUnionWarData(localData,human.db.unionUuid)
- local boxData = unionWarData.box
- local msgRet = Msg.gc.GC_UNION_WAR_BOX
- msgRet.leftTime = 0
- msgRet.isWin = 1
- local len = 0
- local now = os.time()
- if boxData and now < boxData.endTime then
- msgRet.leftTime = boxData.endTime - now
- msgRet.isWin = unionWarData.isWin
- for k,v in ipairs(boxData.list) do
- len = len + 1
- local net = msgRet.list[len]
- if v[3] then
- net.isOpen = 1
- net.name = unionWarData.member[v[3]].name
- Grid.makeItem(net.item[1],v[1],v[2])
- net.item[0] = 1
- if net.name == "" then
- local fake = {}
- RoleLogic.getRoleBaseByUuid(v[3], fake)
- net.name = fake and fake.name or ""
- end
- else
- net.isOpen = 2
- net.name = ""
- net.item[0] = 0
- end
- end
- end
- msgRet.list[0] = len
- -- Msg.trace(msgRet)
- Msg.send(msgRet,human.fd)
- end
- -- 战果宝箱领取
- function CGBoxGet(human,ind)
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = getLocalUnionWarData(localData,human.db.unionUuid)
- local boxData = unionWarData.box
- if not boxData then
- return
- end
- if not unionWarData.member[human.db._id] then
- return
- end
- local now = os.time()
- if now > boxData.endTime then
- Broadcast.sendErr(human, Lang.UNION_WAR_BOX_TIME_ERR)
- return
- end
- if not unionWarData.member[human.db._id].boxTime then
- Broadcast.sendErr(human, Lang.UNION_WAR_BOX_TIME_ERR_2)
- return
- end
- if unionWarData.member[human.db._id].boxTime < boxData.endTime then
- Broadcast.sendErr(human, Lang.UNION_WAR_BOX_TIME_ERR_2)
- return
- end
- if not boxData.list[ind] then
- return
- end
- if boxData.list[ind][3] then
- Broadcast.sendErr(human, Lang.UNION_WAR_BOX_NOT_ERR)
- return
- end
- for k,v in ipairs(boxData.list) do
- if v[3] == human.db._id then
- Broadcast.sendErr(human, Lang.UNION_WAR_BOX_GET_ERR)
- return
- end
- end
- boxData.list[ind][3] = human.db._id
- local itemID = boxData.list[ind][1]
- local itemCnt = boxData.list[ind][2]
- BagLogic.cleanMomentItemList()
- BagLogic.updateMomentItem(BagLogic.ADDITEM_TYPE_1, itemID, itemCnt)
- BagLogic.addMomentItemList(human, "unionWar")
- local msgRet = Msg.gc.GC_UNION_WAR_BOX_GET
- msgRet.ind = ind
- local net = msgRet.box
- net.isOpen = 1
- net.name = unionWarData.member[human.db._id].name
- Grid.makeItem(net.item[1],itemID, itemCnt)
- net.item[0] = 1
- Msg.send(msgRet,human.fd)
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_1006)
- updateRed(human)
- end
- -- 公会战结束
- function actFinish(msg)
- local localData = UnionWarDBLogic.getLocalData()
- local now = os.time()
- local d = os.date("*t",now)
- d.hour = HOUR4[1]
- d.min = 0
- d.sec = 0
- local endTime = os.time(d) + 24 * 3600
- local boxItem
- local perExp = DefineConf.perExp
- local randMax
- for k,v in ipairs(msg.list) do
- if v[4] == Config.SVR_INDEX then
- local unionWarData = localData[v[1]]
- if unionWarData then
- if v[3] == 1 then
- boxItem = DefineConf.boxItem
- else
- boxItem = DefineConf.boxItem2
- end
- randMax = #boxItem
- unionWarData.isWin = v[3]
- unionWarData.star = v[2]
- Util.initTable(unionWarData.box)
- unionWarData.box = {endTime = endTime,list = {}}
- for i = 1,unionWarData.memberCnt do
- local r = math.random(1,randMax)
- unionWarData.box.list[i] = {boxItem[r][1],boxItem[r][2]}
- end
- if v[3] == 1 then
- unionWarData.exp = unionWarData.exp + unionWarData.memberCnt * perExp
- unionWarData.cnt = unionWarData.cnt + 1
- unionWarData.lv = LvExcel[#LvExcel].lv
- for k,v in ipairs(LvExcel) do
- if unionWarData.exp < v.exp then
- unionWarData.lv = v.lv - 1
- break
- end
- end
- end
- end
- end
- end
- UnionWarDBLogic.updateDB()
- local localData = UnionWarDBLogic.getLocalData()
- local title = MailExcel[MailDefine.MAIL_ID_UNION_WAR].title
- local content = MailExcel[MailDefine.MAIL_ID_UNION_WAR].content
- local senderName = MailExcel[MailDefine.MAIL_ID_UNION_WAR].senderName
- for unionUuid,unionWarData in pairs(localData) do
- for k,v in ipairs(unionWarData.rank) do
- if v[2] == 0 then
- break
- end
- local rankID = getUnionWarRankRewardID(k)
- local conf = RankExcel[rankID]
- if not conf then
- break
- end
- MailManager.add(MailManager.SYSTEM, v[1], title, Util.format(content, k, v[2]) , conf.item, senderName)
- end
- end
- end
- --0 不可领取 1 可以领取 2 已经领取
- CHENGJIU_STATE0 = 0
- CHENGJIU_STATE1 = 1
- CHENGJIU_STATE2 = 2
- function CGChengjiu(human,type)
- local ChengjiuExcel = getChengjiuExcel(type)
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = getLocalUnionWarData(localData,human.db.unionUuid)
- local memberData = getLocalMemberData(unionWarData,human.db._id)
- local humanData = getUnionWarData(human,memberData)
- local getList,cnt
- if type == 1 then
- cnt = humanData.cnt
- getList = humanData.chengjiu[1]
- else
- cnt = unionWarData.cnt
- getList = humanData.chengjiu[2]
- end
- local msgRet = Msg.gc.GC_UNION_WAR_CHENGJIU
- msgRet.type = type
- local len = 0
- for k, v in ipairs(ChengjiuExcel) do
- len = len + 1
- local net = msgRet.list[len]
- net.id = k
- net.title = v.title or ""
- net.maxCnt = v.cnt
- net.cnt = cnt
- if getList[k] then
- net.state = CHENGJIU_STATE2
- elseif v.cnt <= cnt then
- net.state = CHENGJIU_STATE1
- else
- net.state = CHENGJIU_STATE0
- end
- local len1 = 0
- for k1,v1 in ipairs(v.item) do
- len1 = len1 + 1
- Grid.makeItem(net.item[len1],v1[1],v1[2])
- end
- net.item[0] = len1
- end
- msgRet.list[0] = len
- Msg.send(msgRet,human.fd)
- end
- function chegnjiuFinishGm(human, type)
- local ChengjiuExcel = getChengjiuExcel(type)
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = localData[human.db.unionUuid]
- local memberData = getLocalMemberData(unionWarData,human.db._id)
- if not memberData then
- --未参与公会战
- return
- end
- local humanData = getUnionWarData(human,memberData)
- if type == 1 then
- humanData.cnt = humanData.cnt or 0
- humanData.cnt = humanData.cnt + 10
- else
- unionWarData.cnt = unionWarData.cnt + 10
- end
- UnionWarDBLogic.updateDB()
- end
- function CGChengjiuGet(human,type,id)
- local ChengjiuExcel = getChengjiuExcel(type)
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = getLocalUnionWarData(localData,human.db.unionUuid)
- local memberData = getLocalMemberData(unionWarData,human.db._id)
- if not memberData then
- --未参与公会战
- return
- end
- local humanData = getUnionWarData(human,memberData)
- local getList,cnt
- if type == 1 then
- cnt = humanData.cnt
- getList = humanData.chengjiu[1]
- else
- cnt = unionWarData.cnt
- getList = humanData.chengjiu[2]
- end
- if getList[id] then
- --已经领取
- return
- end
- local conf = ChengjiuExcel[id]
- if cnt < conf.cnt then
- --未达成成就
- return
- end
- getList[id] = 1
- -- Util.printTable(conf.item)
- BagLogic.addItemList(human, conf.item, "unionWar")
- local msgRet = Msg.gc.GC_UNION_WAR_CHENGJIU_GET
- msgRet.type = type
- msgRet.id = id
- Msg.send(msgRet,human.fd)
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_1006)
- updateRed(human)
- end
- local function getShopExcel(type)
- if type == 1 then
- return UnionWarExcel.shop1
- else
- return UnionWarExcel.shop2
- end
- end
- function upWarShopLv(human, lv)
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = getLocalUnionWarData(localData,human.db.unionUuid)
- if not unionWarData then return end
- unionWarData.lv = lv
-
- end
- function CGShop(human,type)
- local ShopExcel = getShopExcel(type)
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = getLocalUnionWarData(localData,human.db.unionUuid)
- local memberData = getLocalMemberData(unionWarData,human.db._id)
- local humanData = getUnionWarData(human,memberData)
- local buyList
- if type == 1 then
- buyList = humanData.shop[1]
- else
- buyList = humanData.shop[2]
- end
- local msgRet = Msg.gc.GC_UNION_WAR_SHOP_QUERY
- msgRet.type = type
- local lv = unionWarData.lv
- msgRet.shopLv = lv
- msgRet.exp = unionWarData.exp
- local nextShopConf = LvExcel[unionWarData.lv + 1]
- msgRet.maxExp = nextShopConf and nextShopConf.exp or 0
- local len = 0
- for k,v in pairs(ShopExcel) do
- if v.lv <= lv + 1 then
- len = len + 1
- local net = msgRet.list[len]
- net.id = k
- net.cnt = buyList[k] or 0
- net.maxCnt = v.limit
- net.needLv = v.lv
- Grid.makeItem(net.item,v.item[1],v.item[2])
- net.cost = v.cost
- net.discount = v.discount
- end
-
- end
- msgRet.list[0] = len
- Msg.send(msgRet,human.fd)
- end
- function CGBuy(human,type,id,buyCnt)
- local ShopExcel = getShopExcel(type)
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = getLocalUnionWarData(localData,human.db.unionUuid)
- local memberData = getLocalMemberData(unionWarData,human.db._id)
- local humanData = getUnionWarData(human,memberData)
- local buyList
- if type == 1 then
- buyList = humanData.shop[1]
- else
- buyList = humanData.shop[2]
- end
- local conf = ShopExcel[id]
- if conf.lv > unionWarData.lv then
- --等级不够
- return
- end
- buyCnt = buyCnt or 1
- local cnt = buyList[id] or 0
- if conf.limit > 0 and cnt + buyCnt > conf.limit then
- --达到限购次数
- return
- end
- if not ObjHuman.checkRMB(human, conf.cost * buyCnt) then
- return
- end
- cnt = cnt + buyCnt
- buyList[id] = cnt
- ObjHuman.decZuanshi(human, -conf.cost * buyCnt, "unionWar")
- BagLogic.cleanMomentItemList()
- BagLogic.updateMomentItem(BagLogic.ADDITEM_TYPE_1, conf.item[1],conf.item[2] * buyCnt)
- BagLogic.addMomentItemList(human, "unionWar")
- local msgRet = Msg.gc.GC_UNION_WAR_SHOP_BUY
- msgRet.type = type
- msgRet.id = id
- msgRet.cnt = cnt
- Msg.send(msgRet,human.fd)
- RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_1006)
- updateRed(human)
- end
- function CGRank(human)
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = getLocalUnionWarData(localData,human.db.unionUuid)
- local memberList = unionWarData.member
- local msgRet = Msg.gc.GC_UNION_WAR_RANK
- local len = 0
- for k,v in ipairs(unionWarData.rank) do
- len = len + 1
- local net = msgRet.list[len]
- net.uuid = v[1]
- net.rank = k
- local member = memberList[v[1]]
- RoleLogic.makeRoleBase(member.rolebase,net.roleBase)
- net.job = member.post
- local rankID = getUnionWarRankRewardID(k)
- local len1 = 0
- for k1,v1 in ipairs(RankExcel[rankID].item) do
- len1 = len1 + 1
- Grid.makeItem(net.items[len1],v1[1],v1[2])
- end
- net.items[0] = len1
- net.jifen = v[2]
- net.star = v[3]
- end
- msgRet.list[0] = len
- Msg.send(msgRet,human.fd)
- end
- function auto(str)
- print(" auto 1111")
- local Gm = require("chat.Gm")
- local CreateRole = require("role.CreateRole")
- local memberCnt = 30
- local now = os.time()
- local union = UnionDBLogic.getUnionByName(str)
- local teamUuidStr = ""
- local teamHide = {[0] = memberCnt}
- for i = 1, memberCnt do
- local account = str .. string.format("%02d", i)
- local db = RoleDBLogic.getDbByAccount(account, Config.NEW_SVR_INDEX)
- if not db then
- db = CreateRole.creatFakeDb(account, Config.NEW_SVR_INDEX)
- db.lastLoginTime = os.time()
- db.lastLogoutTime = os.time()
- end
- local human = {}
- human.db = db
- -- ObjHuman.exPand(human)
- Gm.d3.god(human)
- if not union then
- union = UnionDBLogic.addUnion(human, str, 1, "")
- end
- if not union then return end
- if not db.unionUuid then
- db.unionUuid = union._id
- UnionDBLogic.addUnionMember(union, human.db._id)
- end
- CombatPosLogic.setCombatByUnionWarGm(human, CombatDefine.COMBAT_TYPE3)
- union.member[human.db._id].lastDonateTime = now
- ObjHuman.save(human)
- end
- union.lv = UNION_LV
- UnionDBLogic.updateUnionData(union)
- end
- local UNION_RANKREWARD_STATE = nil
- function CGRankReward(human)
- local msgRet = Msg.gc.GC_UNION_WAR_RANK_REWARD
- if not UNION_RANKREWARD_STATE then
- for k, v in ipairs(RankExcel) do
- local net = msgRet.list[k]
- net.id = k
- net.minRank = v.minRank
- net.maxRank = v.maxRank
- for j, h in ipairs(v.item) do
- Grid.makeItem(net.items[j], h[1], h[2])
- end
- net.items[0] = #v.item
- end
- msgRet.list[0] = #RankExcel
- end
- Msg.send(msgRet, human.fd)
- end
- function isDotByBox(human, unionWarData)
- local now = os.time()
-
- if not unionWarData then
- local localData = UnionWarDBLogic.getLocalData()
- unionWarData = getLocalUnionWarData(localData,human.db.unionUuid)
- end
- if not unionWarData then return end
- local boxData = unionWarData.box
- if not unionWarData.member[human.db._id] then
- return
- end
- if not boxData or not boxData.endTime then return end
- if now > boxData.endTime then
- return
- end
- -- 检测 有没有领过
- for k,v in ipairs(boxData.list) do
- if v[3] == human.db._id then
- return
- end
- end
- return true
- end
- function isDotByShop(human, unionWarData)
- local memberData = getLocalMemberData(unionWarData,human.db._id)
- local humanData = getUnionWarData(human,memberData)
- local buyList
- for type = 1 , 2 do
- if type == 1 then
- buyList = humanData.shop[1]
- else
- buyList = humanData.shop[2]
- end
- local lv = unionWarData.lv
- local len = 0
- local ShopExcel = getShopExcel(type)
- for k,v in pairs(ShopExcel) do
- if v.lv <= lv and not buyList[k] then
- return true
- end
- end
- end
- end
- function isDotByCnt(human, unionWarData)
- local actState = getState()
- if actState == STATE3 and unionWarData.isMatch and Util.isSameDay(unionWarData.matchTime) then
- local memberData = getLocalMemberData(unionWarData,human.db._id)
- local humanData = getUnionWarData(human,memberData)
- if not humanData.fightCnt then
- return true
- end
- if Util.isSameDay(humanData.fightTime) then
- if humanData.fightCnt and humanData.fightCnt < UnionWarExcel.define[1].cnt then
- return true
- end
- else
- return true
- end
- end
- end
- function isDotByPiPei(human, unionWarData)
- local memberData = getLocalMemberData(unionWarData,human.db._id)
- local humanData = getUnionWarData(human,memberData)
- local actState = getState()
- if actState >= STATE2 and actState < STATE4 and unionWarData.isMatch then
- if not Util.isSameDay(humanData.pipeiLook) then
- return true
- end
-
- end
- end
- function isDot(human)
- if not human.db.unionUuid then
- return
- end
- -- local localData = UnionWarDBLogic.getLocalData()
- -- local unionWarData = getLocalUnionWarData(localData,human.db.unionUuid)
- -- if not unionWarData then return end
- -- -- 成就
- -- local memberData = getLocalMemberData(unionWarData,human.db._id)
- -- if isDotChengjiu(human,localData,unionWarData,memberData,1) or isDotChengjiu(human,localData,unionWarData,memberData,2) then
- -- return true
- -- end
- -- if isDotByBox(human, unionWarData) then
- -- return true
- -- end
- -- if isDotByShop(human, unionWarData) then
- -- return true
- -- end
- -- if isDotByCnt(human, unionWarData) then
- -- return true
- -- end
- -- if isDotByPiPei(human, unionWarData) then
- -- return true
- -- end
- end
- -- 更新界面 红点
- function updateRed(human)
- local msgRet = Msg.gc.GC_UNION_WAR_RED
- msgRet.cjDot = 0
- msgRet.zgDot = 0
- msgRet.shopDot = 0
- msgRet.fightDot = 0
- msgRet.pipeiDot = 0
- local localData = UnionWarDBLogic.getLocalData()
- local unionWarData = getLocalUnionWarData(localData,human.db.unionUuid)
- local memberData = getLocalMemberData(unionWarData,human.db._id)
- if not memberData then
- Msg.send(msgRet,human.fd)
- return
- end
- if unionWarData and memberData and isDotChengjiu(human,localData,unionWarData,memberData,1) or isDotChengjiu(human,localData,unionWarData,memberData,2) then
- msgRet.cjDot = 1
- end
- if unionWarData and isDotByBox(human, unionWarData) then
- msgRet.zgDot = 1
- end
- if unionWarData and isDotByShop(human, unionWarData) then
- msgRet.shopDot = 1
- end
- if unionWarData and isDotByCnt(human, unionWarData) then
- msgRet.fightDot = 1
- end
- if unionWarData and isDotByPiPei(human, unionWarData) then
- msgRet.pipeiDot = 1
- end
- Msg.send(msgRet,human.fd)
- end
|