| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659 |
- 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")
- --活动阶段
- 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)
- if not db then
- db = CreateRole.creatFakeDb(account)
- 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
|