def DoGroupFight(actors, maxtir_a, deffeners, maxtir_b): '''进行战斗 @param actors: []角色实例列表 @param maxtir_a: {}角色阵法信息 key:角色id,value:阵法位置 @param deffeners: []怪物实例列表 @param maxtir_b: {}怪物真发信息 key:怪物动态id,value:阵法位置 ''' challengers = BattleSide(actors, matrixType=1, matrixSetting=maxtir_a) defenders = BattleSide(deffeners, matrixType=1, matrixSetting=maxtir_b) fight = Fight(challengers, defenders, 550) fight.DoFight() return fight
def doZhangJie(self,zhangjieid): '''章节战斗 @param zhangjieid: int 章节的 ''' if zhangjieid>self.currentZJ: return {'result':False,'message':u'当前章节未被激活'} from app.scense.core.fight.fight_new import Fight zhanjieInfo = db_zhanyi.ALL_ZHANGJIE_INFO.get(self.currentZJ) levelrequired = zhanjieInfo.get('levelrequired') if self._owner.level.getLevel()<levelrequired: return {'result':False,'message':u'当前等级不足'} ruleInfo = eval(zhanjieInfo.get('mconfig')) temlist,rule = ruleInfo[0],ruleInfo[1] i = 100 challengers = BattleSide([self._owner]) deffen = [] for tem in temlist: i+=1 monser = Monster(id = i,templateId = tem) deffen.append(monser) defenders = BattleSide(deffen,state = 0) defenders.setMatrixPositionBatch(rule) data = Fight( challengers, defenders, 600) data.DoFight() if data.battleResult == 1 and zhangjieid==self.currentZJ:#如果战斗胜利 # self._owner.quest.cleanZhanYi(zhangjieid)#通知战役通关任务 zhanyilist = ZYManage().zhanyiSet.keys() zhanyilist.sort() zy = ZYManage().getZhanYiInfoById(self.currentZY) zhangjielist = zy.zhangjieSet.keys() zhangjielist.sort() index = zhangjielist.index(self.currentZJ) if index>=len(zhangjielist)-1: zhanyiindex = zhanyilist.index(self.currentZY) if zhanyiindex<len(zhanyilist)-1: zhanyiindex = zhanyilist.index(self.currentZY) self.currentZY = zhanyilist[zhanyiindex+1] zy = ZYManage().getZhanYiInfoById(self.currentZY) zhangjielist = zy.zhangjieSet.keys() zhangjielist.sort() self.currentZJ = zhangjielist[0] else: self.currentZJ = zhangjielist[index+1] if data.battleResult == 1: self._owner.quest.cleanZhanYi(zhangjieid)#通知战役通关任务 return {'result':True,'data':{'fight':data}}
def climb(self): '''开始爬塔 ''' nowtime = datetime.datetime.now() if self.lasttime and minusDatetimeForSecond(nowtime, self.lasttime) <= 30: return {'result': False, 'message': Lg().g(497)} self.lasttime = nowtime layer = self.nowLayers towerinfo = dbtower.ALL_TOWER_INFO.get(layer) if not towerinfo: return {'result': False, 'message': Lg().g(498)} monsterlist, eyes = towerinfo.get('rule', [[15001], [5]]) matrixid = towerinfo.get('matrixid', 100001) deffen = [] for index in range(len(monsterlist)): monster = Monster(id=1000 + index, templateId=monsterlist[index]) deffen.append(monster) challengers = BattleSide([self._owner]) defenders = BattleSide(deffen) defenders.setMatrixPositionBatch(eyes) fig = Fight(challengers, defenders, 550) fig.DoFight() bounds = {} if fig.battleResult == 1: #胜利 self.succedHandle() #胜利后的处理 bounds = self.doTowerBound(layer) #进行胜利后的奖励处理 else: #失败后的处理 pass msg = u'' msglist = [] exp = bounds.get('exp') item = bounds.get('item') bounds['name'] = self._owner.baseInfo.getName() if exp: msglist.append(Lg().g(499) + u':%d\n' % exp) if item: msglist.append(Lg().g(500) + u':%s' % item.baseInfo.getName()) if msglist: msg = msg.join(msglist) else: msg = Lg().g(143) data = {'message': msg, 'fight': fig, 'bound': bounds} return {'result': True, 'data': data}
def climb(self): '''开始爬塔 ''' nowtime = datetime.datetime.now() if self.lasttime and minusDatetimeForSecond(nowtime, self.lasttime)<=30: return {'result':False,'message':Lg().g(497)} self.lasttime = nowtime layer = self.nowLayers towerinfo = dbtower.ALL_TOWER_INFO.get(layer) if not towerinfo: return {'result':False,'message':Lg().g(498)} monsterlist,eyes = towerinfo.get('rule',[[15001],[5]]) matrixid = towerinfo.get('matrixid',100001) deffen = [] for index in range(len(monsterlist)): monster = Monster(id = 1000+index,templateId = monsterlist[index]) deffen.append(monster) challengers = BattleSide([self._owner]) defenders = BattleSide(deffen) defenders.setMatrixPositionBatch(eyes) fig = Fight( challengers, defenders, 550) fig.DoFight() bounds = {} if fig.battleResult == 1:#胜利 self.succedHandle()#胜利后的处理 bounds = self.doTowerBound(layer)#进行胜利后的奖励处理 else:#失败后的处理 pass msg = u'' msglist = [] exp = bounds.get('exp') item = bounds.get('item') bounds['name'] = self._owner.baseInfo.getName() if exp: msglist.append(Lg().g(499)+u':%d\n'%exp) if item: msglist.append(Lg().g(500)+u':%s'%item.baseInfo.getName()) if msglist: msg = msg.join(msglist) else: msg = Lg().g(143) data = {'message':msg,'fight':fig,'bound':bounds} return {'result':True,'data':data}
def DoFight( actors, deffeners, now_X, preDict={ 'extVitper': 0, 'extStrper': 0, 'extDexper': 0, 'extWisper': 0, 'extSpiper': 0, 'preVitper': 1, 'preStrper': 1, 'preDexper': 1, 'preWisper': 1, 'preSpiper': 1 }): '''进行战斗''' challengers = BattleSide(actors) defenders = BattleSide(deffeners, preDict=preDict) fight = Fight(challengers, defenders, now_X) fight.DoFight() return fight
def doRaids(self, rounds, raidsfamId): '''开始扫荡 @param rounds: int 扫荡回合数 @param raidsfamId: int 目标副本 ''' if raidsfamId not in self._owner.instance.clearances: return {'result': False, 'message': Lg().g(455)} from app.scense.core.instance.Instance import Instance if not rounds: rounds = self._owner.attribute.getEnergy() / 5 energyrequired = rounds * 5 if energyrequired > self._owner.attribute.getEnergy( ) or energyrequired == 0: msg = Lg().g(456) return {'result': False, 'message': msg} # if self._owner.baseInfo.getStatus()!=1: # msg = u"你正处于%s状态"%self._owner.baseInfo.getStatusName() # return {'result':False,'message':msg} # self._owner.baseInfo.setStatus(3) messagebox = [] monsters = [] instance = Instance(raidsfamId) for scene in instance._Scenes.values(): for mon in scene._monsters.values(): monsters.append(mon) challengers = BattleSide([self._owner]) for index in range(rounds): self._owner.attribute.addEnergy(-5) #消耗活力 msg = Lg().g(457) % (index + 1) messagebox.append(msg) for monindex in range(len(monsters)): msg = self.doFightBound(challengers, monsters[monindex], monindex) # self._owner.quest.killMonster(monsters[monindex].templateId) messagebox.append(msg) msg = self.doCardBound(instance) self._owner.quest.clearance(raidsfamId) self._owner.finance.updateAddMorale(2, state=True) messagebox.append(msg) self._owner.schedule.noticeSchedule(18) #成功后的日程目标通知 return {'result': True, 'message': u'', 'data': messagebox}
def FightInScene(self,monsterId,now_X,playerId): '''副本战斗 @param monsterId: int 怪物的id @param now_X: int 碰撞点的x坐标 ''' from app.scense.core.fight.fight_new import Fight if not self._monsters: return {'result':False,'message':u'不存在怪物实例'} fightInfo = {} fightType = 1 sendList = self.getSendList() players = [PlayersManager().getPlayerByID(playerId) for playerId in self._playerlist] monster = self._monsters.get(monsterId,None) deffen = [] if not monster: return {'result':False,'message':u'不存在怪物实例'} msgsendList = [] for pp in players:#如果有抓宠技能则消耗相应的道具 pp.skill.autoUnloadCatch() if pp.skill.checkHasEquipCatchSkill(): level = pp.skill.getCatchPetLevel() itemTemplateID = pp.skill.CATCHCONSUME.get(level,0) msgsendList.append(pp.getDynamicId()) if itemTemplateID: pp.pack.delItemByTemplateId(itemTemplateID,1) if monster.formatInfo['difficulty']==5 and msgsendList: msg = Lg().g(574) pushPromptedMessage(msg, msgsendList) challengers = BattleSide(players) matrixId = monster.getMatrixId() ruleInfo = monster.getRule() if not ruleInfo: deffen.append(monster) defenders = BattleSide(deffen) else: temlist,rule = ruleInfo for tem in temlist: _monser = self.createMonster(tem) deffen.append(_monser) defenders = BattleSide(deffen,state = 0) defenders.setMatrixPositionBatch(rule) #获取战场中心位置 realcenter = self._width/2 data = Fight( challengers, defenders, realcenter) data.DoFight() #战后处理 if data.battleResult == 1: self.dropMonster(monsterId) elif data.battleResult == 3: fightType = 3 monster = self._monsters[monsterId] for player in self._playerlist: pl = PlayersManager().getPlayerByID(player) pl.baseInfo.initPosition(self.getInitPosition()) monster.baseInfo.initPosition(monster.baseInfo.getStaticPosition()) elif data.battleResult == 2: fightType = 2 monster = self._monsters[monsterId] for player in self._playerlist: pl = PlayersManager().getPlayerByID(player) pl.baseInfo.initPosition(self.getInitPosition()) self.pushFightFailHelp(pl) monster.baseInfo.initPosition(monster.baseInfo.getStaticPosition()) if not self._monsters and self._type ==2: fightType = 4 #print '通关副本' settlementData = [] dropoutid = monster.formatInfo['dropoutid'] for player in data.fighters.values(): if player['characterType']==3:#宠物 pet = PlayersManager().getPlayerByID(playerId).pet._pets.get(player['chaId']) pet.attribute.updateHp(int(player['chaCurrentHp']))#更新宠物的血量 if data.battleResult == 1: exp = monster.formatInfo.get('expbound',100)*len(deffen) pet.level.addExp(exp) continue if player['characterType']==1: pp = PlayersManager().getPlayerByID(player['chaId']) if data.battleResult == 1: dropoutIitem = dropout.getDropByid(dropoutid) info = {} info['id'] = player['chaId'] info['name'] = player['chaName'] info['profession'] = player['figureType'] info['expBonus'] = monster.formatInfo.get('expbound',100)*len(deffen) info['coinBonus'] = 0 info['goldBonus'] = 0 info['itemsBonus'] = dropoutIitem#None#getDropByid(1) info['popularity'] = 0 info['attackGoal'] = 0 info['defenseGoal'] = 0 info['slayGoal'] = 0 settlementData.append(info) expEff = pp.attribute.getExpEff()#经验加成 pp.level.updateExp(pp.level.getExp()+info['expBonus']*expEff,state = 0) pp.finance.updateCoin(pp.finance.getCoin()+info['coinBonus'],state = 0) pp.finance.updateGold(pp.finance.getGold()+info['goldBonus'],state = 0) if info['itemsBonus']: pp.pack.putNewItemInPackage(info['itemsBonus'],state=0) for monster in deffen: pp.quest.killMonster(monster.templateId) pp.attribute.updateHp(int(player['chaCurrentHp']),state = 0) pp.effect.doEffectHot()#执行效果战后处理 fightInfo['fightType'] = fightType fightInfo['battle'] = data fightInfo['sendList'] = sendList fightInfo['centerX'] = realcenter fightInfo['setData'] = settlementData fightInfo['centerY'] = HEIGHT return {'result':True,'data':fightInfo}
def doFight(self): '''开始国战 ''' if not IsFightTime(): thisRound = self.getRound() if thisRound == 0: self.ClearingFight() return RivalInfo = self.MatchRival() if not RivalInfo: reactor.callLater(30, self.doFight) return from app.scense.core.character.PlayerCharacter import PlayerCharacter from app.scense.core.fight.fight_new import Fight from app.scense.core.fight.battleSide import BattleSide from app.scense.netInterface import pushObjectNetInterface # from app.scense.serverconfig.publicnode import publicnoderemote actor = RivalInfo['actor'] defender = RivalInfo['defender'] player = PlayerCharacter(actor['memberId']) player.attribute.Restoration() #角色满状态 toplayer = PlayerCharacter(defender['memberId']) toplayer.attribute.Restoration() #角色满状态 challengers = BattleSide([player]) defenders = BattleSide([toplayer]) data = Fight(challengers, defenders, 550) data.DoFight() battleResult = data.battleResult pplist = [actor['memberId'], defender['memberId']] if battleResult == 1: pId = player.baseInfo.getId() pname = player.baseInfo.getName() pcoin = player.level.getLevel() * 100 pweiwang = 2 tId = toplayer.baseInfo.getId() tname = toplayer.baseInfo.getName() tcoin = 1000 tweiwang = 0 else: pId = toplayer.baseInfo.getId() pname = toplayer.baseInfo.getName() pcoin = toplayer.level.getLevel() * 100 pweiwang = 2 tId = player.baseInfo.getId() tname = player.baseInfo.getName() tcoin = 1000 tweiwang = 0 #战后处理 self.battleResultHandle(battleResult) #战斗奖励发放 gm1 = 'player.finance.addCoin(%d);player.finance.addPrestige(%d);\ player.guild.updateGuildBattleInfo(%d,%d,%d,%d)' % (pcoin, pweiwang, 1, 0, pcoin, pweiwang) gm2 = 'player.finance.addCoin(%d);\ player.guild.updateGuildBattleInfo(%d,%d,%d,%d)' % (tcoin, 0, 1, tcoin, 0) # publicnoderemote.callRemote("updateplayerInfo",pId,gm1) # publicnoderemote.callRemote("updateplayerInfo",tId,gm2) #添加国战斗信息 self.addBattleInfo(pId, pname, tId, tname, pcoin) #战斗消息推送处理 msg = u'%s: %d金币 %d威望 \n%s: %d金币 %d威望' % (pname, pcoin, pweiwang, tname, tcoin, tweiwang) zy = self.sceneId pushObjectNetInterface.getzudui_4308(data, pplist, msg, zy) reactor.callLater(30, self.doFight)
def FightInScene(self, monsterId, now_X, playerId): '''副本战斗 @param monsterId: int 怪物的id @param now_X: int 碰撞点的x坐标 ''' from app.scense.core.fight.fight_new import Fight if not self._monsters: return {'result': False, 'message': u'不存在怪物实例'} fightInfo = {} fightType = 1 sendList = self.getSendList() players = [ PlayersManager().getPlayerByID(playerId) for playerId in self._playerlist ] monster = self._monsters.get(monsterId, None) deffen = [] if not monster: return {'result': False, 'message': u'不存在怪物实例'} msgsendList = [] for pp in players: #如果有抓宠技能则消耗相应的道具 pp.skill.autoUnloadCatch() if pp.skill.checkHasEquipCatchSkill(): level = pp.skill.getCatchPetLevel() itemTemplateID = pp.skill.CATCHCONSUME.get(level, 0) msgsendList.append(pp.getDynamicId()) if itemTemplateID: pp.pack.delItemByTemplateId(itemTemplateID, 1) if monster.formatInfo['difficulty'] == 5 and msgsendList: msg = Lg().g(574) pushPromptedMessage(msg, msgsendList) challengers = BattleSide(players) matrixId = monster.getMatrixId() ruleInfo = monster.getRule() if not ruleInfo: deffen.append(monster) defenders = BattleSide(deffen) else: temlist, rule = ruleInfo for tem in temlist: _monser = self.createMonster(tem) deffen.append(_monser) defenders = BattleSide(deffen, state=0) defenders.setMatrixPositionBatch(rule) #获取战场中心位置 realcenter = self._width / 2 data = Fight(challengers, defenders, realcenter) data.DoFight() #战后处理 if data.battleResult == 1: self.dropMonster(monsterId) elif data.battleResult == 3: fightType = 3 monster = self._monsters[monsterId] for player in self._playerlist: pl = PlayersManager().getPlayerByID(player) pl.baseInfo.initPosition(self.getInitPosition()) monster.baseInfo.initPosition(monster.baseInfo.getStaticPosition()) elif data.battleResult == 2: fightType = 2 monster = self._monsters[monsterId] for player in self._playerlist: pl = PlayersManager().getPlayerByID(player) pl.baseInfo.initPosition(self.getInitPosition()) self.pushFightFailHelp(pl) monster.baseInfo.initPosition(monster.baseInfo.getStaticPosition()) if not self._monsters and self._type == 2: fightType = 4 #print '通关副本' settlementData = [] dropoutid = monster.formatInfo['dropoutid'] for player in data.fighters.values(): if player['characterType'] == 3: #宠物 pet = PlayersManager().getPlayerByID(playerId).pet._pets.get( player['chaId']) pet.attribute.updateHp(int(player['chaCurrentHp'])) #更新宠物的血量 if data.battleResult == 1: exp = monster.formatInfo.get('expbound', 100) * len(deffen) pet.level.addExp(exp) continue if player['characterType'] == 1: pp = PlayersManager().getPlayerByID(player['chaId']) if data.battleResult == 1: dropoutIitem = dropout.getDropByid(dropoutid) info = {} info['id'] = player['chaId'] info['name'] = player['chaName'] info['profession'] = player['figureType'] info['expBonus'] = monster.formatInfo.get( 'expbound', 100) * len(deffen) info['coinBonus'] = 0 info['goldBonus'] = 0 info['itemsBonus'] = dropoutIitem #None#getDropByid(1) info['popularity'] = 0 info['attackGoal'] = 0 info['defenseGoal'] = 0 info['slayGoal'] = 0 settlementData.append(info) expEff = pp.attribute.getExpEff() #经验加成 pp.level.updateExp(pp.level.getExp() + info['expBonus'] * expEff, state=0) pp.finance.updateCoin(pp.finance.getCoin() + info['coinBonus'], state=0) pp.finance.updateGold(pp.finance.getGold() + info['goldBonus'], state=0) if info['itemsBonus']: pp.pack.putNewItemInPackage(info['itemsBonus'], state=0) for monster in deffen: pp.quest.killMonster(monster.templateId) pp.attribute.updateHp(int(player['chaCurrentHp']), state=0) pp.effect.doEffectHot() #执行效果战后处理 fightInfo['fightType'] = fightType fightInfo['battle'] = data fightInfo['sendList'] = sendList fightInfo['centerX'] = realcenter fightInfo['setData'] = settlementData fightInfo['centerY'] = HEIGHT return {'result': True, 'data': fightInfo}