def GetJingJiInfo3700(dynamicId,characterId): '''获取竞技场信息 ''' player = PlayersManager().getPlayerByID(characterId) res = CanDoServer(characterId) if not res['result']: pushOtherMessage(905, res.get('message',u''), [dynamicId]) return res if not player or not player.CheckClient(dynamicId): return {'result':False,'message':Lg().g(18)} data = player.arena.getArenaAllInfo() return {'result':True,'data':data}
def ArenaBattle_3704(dynamicId,characterId,tocharacterId): '''竞技场战斗 ''' player = PlayersManager().getPlayerByID(characterId) res = CanDoServer(characterId) if not res['result']: pushOtherMessage(905, res.get('message',u''), [dynamicId]) return res if not player or not player.CheckClient(dynamicId): return {'result':False,'message':Lg().g(18)} result = player.arena.doFight(tocharacterId) msg = result.get('message',u'') if msg: pushOtherMessage(905, result.get('message',u''), [dynamicId]) return result
def FightInScene(dynamicId, characterId, monsterId): '''副本战斗 @param dynamicId: int 客户端的动态id @param characterId: int 角色的id @param monsterId: int 碰撞的怪物在场景中的id ''' res = CanDoServer(characterId) if not res['result']: return res player = PlayersManager().getPlayerByID(characterId) if not player.CheckClient(dynamicId): return {'result': False, 'message': Lg().g(18)} if not player.status.getLifeStatus(): return {'result': False, 'message': Lg().g(97)} if player.baseInfo.getState() == 1: #如果角色在副本 dtid = player.baseInfo.getInstancetag() #副本动态Id instance = InstanceManager().getInstanceByIdTag(dtid) #获取副本实例 sceneId = player.baseInfo.getLocation() nowScene = instance._Scenes[sceneId] #获取场景实例 else: town = player.baseInfo.getTown() nowScene = MapManager().getMapId(town) # return {'result':False,'message':Lg().g(64)} data = nowScene.FightInScene(monsterId, int(player.baseInfo.getPosition()[0]), characterId) if data.get('result'): player.baseInfo.setStatus(4) #角色状态设置为战斗状态 return data
def enterGuildBattleField(dynamicId,characterId): '''进入行会战副本 @param dynamicId: int 客户端的动态id @param characterId: int 角色的id ''' res = CanDoServer(characterId) if not res['result']: return res player = PlayersManager().getPlayerByID(characterId) if not player.CheckClient(dynamicId): return {'result':False,'message':Lg().g(18)} if not player.status.getLifeStatus(): return {'result':False,'message':Lg().g(97)} if player.baseInfo.getState()==1: return {'result':False,'message':Lg().g(98)} guildId = player.guild.getID() if not guildId: return {'result':False,'message':Lg().g(79)} battleArea = BattleAreaManager().getGuildBattleAreaIdByGuildId(guildId) if not battleArea: return {'result':False,'message':Lg().g(99)} nowSceneId = battleArea.enterGuildBattleField(guildId,characterId) if not nowSceneId: return {'result':False,'message':Lg().g(100)} lastscene = SceneManager_new().getSceneById(player.baseInfo.getLocation()) lastscene.dropPlayer(player.baseInfo.id) player.baseInfo.setState(2) data = {'placeId':nowSceneId} return {'result':True,'data':data}
def TowerBattle_4203(dynamicId,characterId): '''爬塔战斗 @param dynamicId: int 客户端的连接ID @param characterId: int 角色的ID ''' player = PlayersManager().getPlayerByID(characterId) res = CanDoServer(characterId) if not res['result']: pushOtherMessage(905, res.get('message',u''), [dynamicId]) return res if not player or not player.CheckClient(dynamicId): return {'result':False,'message':Lg().g(18)} result = player.tower.climb() msg = result.get('message') if msg: pushOtherMessage(905, msg, [dynamicId]) return result
def RefreshInfo4201(dynamicId,characterId): '''刷新爬塔信息 @param dynamicId: int 客户端的连接ID @param characterId: int 角色的ID ''' player = PlayersManager().getPlayerByID(characterId) res = CanDoServer(characterId) if not res['result']: pushOtherMessage(905, res.get('message',u''), [dynamicId]) return res if not player or not player.CheckClient(dynamicId): return {'result':False,'message':Lg().g(18)} data = player.tower.flushTowerRecord() msg = data.get('message') if msg: pushOtherMessage(905, msg, [dynamicId]) return data
def GetCurLevelInfo4200(dynamicId,characterId): '''获取当前塔层的信息 @param dynamicId: int 客户端的连接ID @param characterId: int 角色的ID ''' player = PlayersManager().getPlayerByID(characterId) res = CanDoServer(characterId) if not res['result']: pushOtherMessage(905, res.get('message',u''), [dynamicId]) return res if not player or not player.CheckClient(dynamicId): return {'result':False,'message':Lg().g(18)} data = player.tower.getTowerInfo() msg = data.get('message') if msg: pushOtherMessage(905, msg, [dynamicId]) return {'result':True,'data':data}
def FightWithPlayer(dynamicId, characterId, tid): '''玩家PK @param dynamicId: int 客户端的动态id @param characterId: int 角色的id @param tid: int 对方的id ''' res = CanDoServer(characterId) if not res['result']: return res player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': Lg().g(18)} toplayer = PlayersManager().getPlayerByID(tid) if not toplayer: return {'result': False, 'message': Lg().g(66)} guildid = player.guild.getID() tguildid = toplayer.guild.getID() town = player.baseInfo.getTown() ttown = toplayer.baseInfo.getTown() if not player.pvp.checktime(): return {'result': False, 'message': u"PK战斗CD中"} if not toplayer.pvp.checktime(): return {'result': False, 'message': u"对方PK战斗CD中"} if town != ttown: return {'result': False, 'message': u"不在统一场景无法进行战斗"} if player.guild.getID() == toplayer.guild.getID() or 0 in [ guildid, tguildid ]: return {'result': False, 'message': u"不允许本国之间战斗"} level = player.level.getLevel() tlevel = player.level.getLevel() if level < 25 or tlevel < 25: return {'result': False, 'message': u"低于25级不能进行战斗"} player.pvp.recordtime() toplayer.pvp.recordtime() data = DoFight([player], [toplayer], now_X=550) #战后的处理 battleresult = data.battleResult nowscene = MapManager().getMapId(ttown) #获取当前场景 if battleresult == 1: #如果主动方胜利 nowscene.dropPlayer(tid) #在当前场景中移除被攻击的玩家 toscene = MapManager().getMapId(1000) #扔回其他场景 toscene.addPlayer(tid) toscene.pushEnterPlace([toplayer.dynamicId]) toplayer.baseInfo.setTown(1000) else: nowscene.dropPlayer(characterId) #在当前场景中移主动攻击的玩家 toscene = MapManager().getMapId(1000) #扔回其他场景 toscene.addPlayer(characterId) toscene.pushEnterPlace([player.dynamicId]) player.baseInfo.setTown(1000) return { 'result': True, 'data': data, 'sendlist': [dynamicId, toplayer.dynamicId] }
def instanceColonizeBattle_712(dynamicId, request_proto): '''副本殖民战斗''' argument = ColonizationBattle712_pb2.FightRequest() argument.ParseFromString(request_proto) response = ColonizationBattle712_pb2.FightResponse() dynamicId = dynamicId cid = argument.id #角色id 挑战方ids instanceid = argument.copyId #副本id(难度最小的那个) player = PlayersManager().getPlayerByID(cid) res = CanDoServer(cid) if not res['result']: pushOtherMessage(905, res.get('message', u''), [dynamicId]) return res if player: player.quest.specialTaskHandle(106, state=0) #特殊任务处理 else: log.err(u"instanceColonize_net-76row-not playerid-%s-error" % cid) iname = InstanceColonizeGuerdon.getInstancenameByinstanceid(instanceid) if not InstanceColonizeGuerdon.goClonizeGue(cid): #如果没有战书 response.result = False response.message = Lg().g(611) return response.SerializeToString() list1, zon, pid = InstanceColonizeGuerdon.getBattlePlayer( instanceid, cid) #返回 list,zon if not list1: response.result = False response.message = zon response.data.setData.itemsBonus.extend([]) response.data.setData.sceneName = u"" response.data.battleResult = 0 response.data.centerX = 0 response.data.centerY = 0 return response.SerializeToString() data1 = InstanceColonizeGuerdon.getFightData(cid, list1, zon, instanceid) response.result = True response.data.battleResult = data1.battleResult response.data.centerX = data1.center response.data.centerY = 325 rResArr = response.data.rResArr startData = response.data.startData setpdata = response.data.stepData data1.SerializationResource(rResArr) data1.SerializationInitBattleData(startData) data1.SerializationStepData(setpdata) pids = InstanceColonizeGuerdon.getPidByinstanceid(instanceid) cb = False #入侵成功或者失败 ,默认失败 if data1.battleResult == 1: cb = True else: cb = False if pids > 0: if pids == cid: response.result = False response.message = Lg().g(612) response.data.setData.itemsBonus.extend([]) response.data.setData.sceneName = iname return response.SerializeToString() else: pushObjectNetInterface.pushEnterPlace_new(pid, [dynamicId]) #推送进入场景 else: pushObjectNetInterface.pushEnterPlace_new(pid, [dynamicId]) #推送进入场景 itemList = instance_app.dropItem( cid, instanceid, cb, iname) ##########添加成功失败记录,获取掉落物品,返回物品列表和副本名称 if (not itemList) or (len(itemList)) < 1: response.data.setData.itemsBonus.extend([]) else: it = response.data.setData.itemsBonus.add() for item in itemList: item.SerializationItemInfo(it) response.data.setData.sceneName = iname ct = InstanceColonizeGuerdon.getWinningCount(cid) response.data.setData.sucNum = ct #连胜次数 plv = player.level.getLevel() response.data.setData.goldNum = plv * 1000 #连胜奖金 return response.SerializeToString()
def instanceColonizeBattle_712(dynamicId, request_proto): '''副本殖民战斗''' argument = ColonizationBattle712_pb2.FightRequest() argument.ParseFromString(request_proto) response = ColonizationBattle712_pb2.FightResponse() dynamicId = dynamicId cid = argument.id #角色id 挑战方ids instanceid = argument.copyId #副本id(难度最小的那个) player=PlayersManager().getPlayerByID(cid) res = CanDoServer(cid) if not res['result']: pushOtherMessage(905, res.get('message',u''), [dynamicId]) return res if player: player.quest.specialTaskHandle(106,state=0) #特殊任务处理 else: log.err(u"instanceColonize_net-76row-not playerid-%s-error"%cid) iname=InstanceColonizeGuerdon.getInstancenameByinstanceid(instanceid) if not InstanceColonizeGuerdon.goClonizeGue(cid): #如果没有战书 response.result = False response.message=Lg().g(611) return response.SerializeToString() list1,zon,pid= InstanceColonizeGuerdon.getBattlePlayer(instanceid,cid) #返回 list,zon if not list1: response.result = False response.message=zon; response.data.setData.itemsBonus.extend([]) response.data.setData.sceneName=u"" response.data.battleResult = 0 response.data.centerX = 0 response.data.centerY = 0 return response.SerializeToString() data1=InstanceColonizeGuerdon.getFightData(cid, list1, zon,instanceid) response.result = True response.data.battleResult = data1.battleResult response.data.centerX = data1.center response.data.centerY = 325 rResArr = response.data.rResArr startData = response.data.startData setpdata = response.data.stepData data1.SerializationResource(rResArr) data1.SerializationInitBattleData(startData) data1.SerializationStepData(setpdata) pids=InstanceColonizeGuerdon.getPidByinstanceid(instanceid) cb=False #入侵成功或者失败 ,默认失败 if data1.battleResult==1: cb=True else: cb=False if pids>0: if pids==cid: response.result = False response.message=Lg().g(612) response.data.setData.itemsBonus.extend([]) response.data.setData.sceneName=iname return response.SerializeToString() else: pushObjectNetInterface.pushEnterPlace_new(pid,[dynamicId]) #推送进入场景 else: pushObjectNetInterface.pushEnterPlace_new(pid,[dynamicId]) #推送进入场景 itemList=instance_app.dropItem(cid, instanceid, cb,iname)##########添加成功失败记录,获取掉落物品,返回物品列表和副本名称 if (not itemList) or (len(itemList))<1: response.data.setData.itemsBonus.extend([]) else: it=response.data.setData.itemsBonus.add() for item in itemList: item.SerializationItemInfo(it) response.data.setData.sceneName=iname ct=InstanceColonizeGuerdon.getWinningCount(cid) response.data.setData.sucNum=ct#连胜次数 plv=player.level.getLevel() response.data.setData.goldNum=plv*1000 #连胜奖金 return response.SerializeToString()
def lobbyOperate(dynamicId, characterId, operaType, duration): ''' 大厅操作:修炼、卖艺 @param operaType: 操作类型:1、训练 2、卖艺 @param duration: 持续时间 训练得到的经验=[(自身等级+1)*33]^1.15*训练小时数 训练消耗的铜币=[(自身等级+1)*44]^1.15*训练小时数 ''' ret = CanDoServer(characterId) if not ret['result']: return ret player = PlayersManager().getPlayerByID(characterId) if player is None: return {'result': False, 'message': Lg().g(18)} level = player.level.getLevel() exp = player.level.getExp() coin = player.finance.getCoin() startTime = datetime.datetime.now() finishTime = startTime + datetime.timedelta(hours=1) status = 0 getExp = 0 costCoin = 0 if operaType == 1: #训练 status = 3 getExp = int(math.pow((level + 1) * 33, 1.15) * duration) costCoin = int(math.pow(((level) + 1) * 44, 1.15) * duration) exp += getExp coin -= costCoin if coin < 0: return {'result': False, 'message': u'您的铜币不足'} dbaccess.updatePlayerInfo(characterId, { 'status': status, 'coin': coin }) bonusCount = getExp else: #卖艺 status = 6 pass dbaccess.updatePlayerLobbyRecord( characterId, { 'startTime': str(startTime), 'finishTime': str(finishTime), 'isDoubleBonus': 0 }) player.finance.setCoin(coin) player.baseInfo.setStatus(status) statusDesc = player.baseInfo.setStatus(1) durationTime = duration * 3600 reactor.callLater(durationTime, doWhenLobbyOperateFinsihed, { 'status': 1, 'coin': coin, 'exp': exp }, player) startTime = int(time.mktime(startTime.timetuple())) finishTime = int(time.mktime(finishTime.timetuple())) return {'result':True, 'data':{'status':statusDesc, 'bonusCount':bonusCount, \ 'startTime':startTime, 'finishTime':finishTime, \ 'duration':duration}}