def CorpsInviteReply(dynamicId,characterId,union_id,is_ok): '''邀请加入行会的反馈信息 @param dynamicId: int 客户端的动态id @param characterId: int 角色的id @param union_id: int 行会的id(邀请者的ID) @param is_ok: int 是否同意 0否 1是 ''' player = PlayersManager().getPlayerByID(characterId) fplayer = PlayersManager().getPlayerByID(union_id) if not player or not player.CheckClient(dynamicId): return {'result':False,'message':Lg().g(18)} nowguildId = player.guild.getID() toguildId = dbGuild.getCharacterGuildId(union_id) if fplayer and not is_ok: msg = "%s拒绝了你的邀请"%player.baseInfo.getName() pushOtherMessage(905, msg, [fplayer.getDynamicId()]) return {'result':True} if nowguildId: return {'result':False,'message':Lg().g(94)} guild = GuildManager().getGuildById(toguildId) if not guild: return {'result':False,'message':Lg().g(95)} surplushours = player.guild.getCanJoinTime() if surplushours: return {'result':False,'message':Lg().g(647)%surplushours} result = guild.JointGuild(characterId) if result.get('result',False): msg = u'成功加入%s'%guild.getGuildName() pushOtherMessage(905, msg, [dynamicId]) else: nmsg = result.get('message','') pushOtherMessage(905, nmsg, [dynamicId]) return result
def LevelUpEmblem(dynamicId,characterId): '''升级军徽 @param dynamicId: int 客户端的动态id @param characterId: int 角色的id ''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result':False,'message':Lg().g(18)} guildId = player.guild.getID() if not guildId: return {'result':False,'message':Lg().g(79)} guild = GuildManager().getGuildById(guildId) emblemlevel = guild.guildinfo.get('emblemLevel',0) goldRequired = {1:100,2:200,3:500,4:1000,5:2000,6:5000,7:10000,8:20000,9:50000,10:10000} goldcons = goldRequired.get(emblemlevel,100) if goldcons > player.finance.getGold(): msg = Lg().g(190) pushOtherMessage(905, msg, [dynamicId]) return {'result':False,'message':msg} data = guild.LevelUpEmblem(characterId) if data.get('result',False): player.finance.consGold(goldcons,6)#升级军徽消耗钻 player.guild.addContribution(int(goldcons*1.5)) player.updatePlayerInfo() else: pushOtherMessage(905, data.get('message',''), [dynamicId]) return data
def CorpsInviteOther(dynamicId,characterId,otherid,otername): '''邀请加入行会 @param dynamicId: int 客户端的动态id @param characterId: int 角色的id @param otherid: int 对方的Id @param otername: 对方的名称 ''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result':False,'message':Lg().g(18)} guildId = player.guild.getID() if not guildId: return {'result':False,'message':Lg().g(79)} toplayer = PlayersManager().getPlayerByID(otherid) if not toplayer: return {'result':False,'message':Lg().g(91)} if toplayer.level.getLevel()<LEVELREQUIRED: return {'result':False,'message':Lg().g(86)} guild = GuildManager().getGuildById(guildId) if guild.guildinfo.get('curMenberNum',50)>=guild.guildinfo.get('memberCount',50): return {'result':False,'message':Lg().g(83)} sendList = [toplayer.getDynamicId()] pushInviteOtherJoinGuild(characterId, guildId, player.baseInfo.getName(),\ guild.getGuildName(), sendList) msg = Lg().g(92) pushOtherMessage(905, msg, [dynamicId]) return {'result':True}
def NetConnLost_2(dynamicId): '''loginout''' player = PlayersManager().getPlayerBydynamicId(dynamicId) if not player: return True try: tag=player.baseInfo.getInstancetag() #副本动态Id InstanceManager().dropInstanceById(tag)#如果角色下线的时候在副本中,就清空副本 player.afk.stopMeditation()#在线挂机结算 player.updatePlayerDBInfo() # player.qhtime.dbupdate()#记录角色强化冷却时间 player.nobility.dbupdate()#记录爵位限制信息 player.petShop.dbupdate()#记录宠物商店信息 # publicnoderemote.callRemote('dropPCharacter',player.baseInfo.id) PlayersManager().dropPlayer(player) state = player.baseInfo.getState() if state == 0: sceneId = player.baseInfo.getTown() scene = MapManager().getMapId(sceneId) scene.dropPlayer(player.baseInfo.id) if player.baseInfo.getState()==0: scene.dropPlayer(player.baseInfo.id) for petId,pet in player.pet._pets.items(): if pet.getFlowFlag(): scene.dropPet(petId) except Exception as ex: log.err(ex) finally: return True
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 ObtainReward(pid, did): '''领取单个保卫奖励 @param pid: int 角色id @param did: int 保卫奖励表主键id ''' msg = u"" flg = True player = PlayersManager().getPlayerByID(pid) #获得角色id info = dbDefenceBonus.getByid(did) #根据奖励主键id获得奖励信息 if not info: pushObjectNetInterface.pushOtherMessage(905, Lg().g(61), [player.getDynamicId()]) return False, Lg().g(61) reward = info['reward'] player.finance.updatePrestige(player.finance.getPrestige() + reward) if not dbDefenceBonus.delByid(info['id']): msg += Lg().g(62) flg = False # item=Item(itemTemplateId=20030061) # item.pack.setStack(info['reward']) #物品的数量 # rs1=player.pack._package.canPutItem(item,info['reward']) #判断背包中是否可以放入这些数量的物品 # if rs1: #如果可以放进去 # player.pack.putNewItemsInPackage(20030061,info['reward']) # del item # if not dbDefenceBonus.delByid(info['id']) : # msg+=Lg().g(62) # flg=False # else: #如果一个奖励所获得物品不能放入背包 # del item # pushObjectNetInterface.pushOtherMessage(905, Lg().g(16), [player.getDynamicId()]) # return False,Lg().g(16) return flg, msg
def LevelUpEmblem(self, operator): '''升级军徽 @param operator: int 操作者的id ''' if self.MAXLEVEL <= self.get('emblemLevel'): return {'result': False, 'message': Lg().g(542)} player = PlayersManager().getPlayerByID(operator) self.emblemLevel += 1 result = True if result: msg = Lg().g(543)%\ (self.guildinfo['emblemLevel']) pushOtherMessage(905, msg, [player.getDynamicId()]) if self.guildinfo['emblemLevel'] == 20: utype = { 1: Lg().g(544), 2: Lg().g(545) }.get(self.guildinfo['camp'], Lg().g(546)) palyername = player.baseInfo.getName(0) gname = self.getGuildName() sendmsg = Lg().g(547) % (utype, palyername, gname) chatnoderemote.callRemote('pushSystemToInfo', sendmsg) return { 'result': True, 'message': Lg().g(548) % (self.guildinfo['emblemLevel']) } return {'result': False, 'message': Lg().g(549)}
def agreeGroup(dynamicId, id, tid): '''同意组队邀请 (别人进来) @param dynamicId: int 客户端的id @param id: int 被邀请人id @param tid: int 邀请人id ''' player = PlayersManager().getPlayerByID(id) #被邀请人 toplayer = PlayersManager().getPlayerByID(tid) #邀请人 sendPlayer = None #队长角色 if not player: return {'result': False, 'message': Lg().g(18)} if not toplayer: return {'result': False, 'message': Lg().g(256)} if player.teamcom.amITeamMember() and toplayer.teamcom.amITeamMember( ): #如果都有组队 return {'result': False, 'message': Lg().g(251)} elif not player.teamcom.amITeamMember( ) and not toplayer.teamcom.amITeamMember(): #如果都没有队伍 data = toplayer.teamcom.addTeamMember(player) #邀请者为队长 sendPlayer = toplayer else: sendPlayer = toplayer.teamcom.getMyTeamLeader() #队长角色 data = sendPlayer.teamcom.addTeamMember(player) if data['result']: player.teamcom.pushTeamMemberInfo() pushObjectNetInterface.pushOtherMessage(905, Lg().g(257), sendPlayer.dynamicId) return data
def StartUpGuaJi(dynamicId,characterId): '''角色开始挂机 @param characterId: int 角色的ID ''' from app.scense.core.campaign.FortressManager import FortressManager player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result':False,'message':Lg().g(18)} #判断是否有冥想加成 if player.baseInfo.getState()==1: #如果角色在副本 state = 0 else: guildId = player.guild.getID() sceneId = player.baseInfo.getTown() fortress= FortressManager().getFortressBySceneId(sceneId) if not fortress.isOccupied: state = 0 else: if fortress.kimori==guildId and guildId!=0: state=1 else: state = 0 result = player.afk.startMeditation(state=state) if not result.get('result'): msg = result.get('message') sendId = player.getDynamicId() pushOtherMessage(905, msg, [sendId]) return result
def getSxzy(characterid,item1,item2): '''获取属性转移后的效果及其花费信息 @param item1: int 物品id (转移后强化等级变成0的那个物品的id) @param item: int 物品id ''' if item1==item2: pushObjectNetInterface.pushOtherMessageByCharacterId(Lg().g(206), [characterid]) return {'result':False,'message':Lg().g(206),'data':None} player=PlayersManager().getPlayerByID(characterid) #角色实例 if not player: return {'result':False,'message':Lg().g(199),'data':None} if player.level.getLevel()<30: return {'result':False,'message':Lg().g(205),'data':None} items1=getItemByplayer(player, item1) if not items1: return {'result':False,'message':Lg().g(189),'data':None} items2=getItemByplayer(player, item2) if not items2: return {'result':False,'message':Lg().g(189),'data':None} if items1.getWQtype()!=items2.getWQtype(): return {'qh':None,'coin':0} level=Sxzy(items1, items2) zyyh=level+items2.attribute.getStrengthen()#转移以后装备的强化等级 if player.level.getLevel()<zyyh: pushObjectNetInterface.pushOtherMessage(905, Lg().g(207)%zyyh, [player.getDynamicId()]) Zcion=getSxzyCoin(items1, items2)#转移花费金币 return {'qh':level,'coin':Zcion}
def GetCityListInfo4402(dynamicId, characterId): '''获取城镇征战信息列表''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': Lg().g(18)} info = FortressManager().getAllFortressInfo() return {'result': True, 'data': info}
def NetConnLost_2(dynamicId): '''loginout''' player = PlayersManager().getPlayerBydynamicId(dynamicId) if not player: return True try: tag = player.baseInfo.getInstancetag() #副本动态Id InstanceManager().dropInstanceById(tag) #如果角色下线的时候在副本中,就清空副本 player.afk.stopMeditation() #在线挂机结算 player.updatePlayerDBInfo() # player.qhtime.dbupdate()#记录角色强化冷却时间 player.nobility.dbupdate() #记录爵位限制信息 player.petShop.dbupdate() #记录宠物商店信息 # publicnoderemote.callRemote('dropPCharacter',player.baseInfo.id) PlayersManager().dropPlayer(player) state = player.baseInfo.getState() if state == 0: sceneId = player.baseInfo.getTown() scene = MapManager().getMapId(sceneId) scene.dropPlayer(player.baseInfo.id) if player.baseInfo.getState() == 0: scene.dropPlayer(player.baseInfo.id) for petId, pet in player.pet._pets.items(): if pet.getFlowFlag(): scene.dropPet(petId) except Exception as ex: log.err(ex) finally: return True
def argeeApplyGroup(id, tid): '''同意申请入队 @param id: int 申请入队者id @param tid: int 有队的伍角色id ''' player = PlayersManager().getPlayerByID(id) #申请入队者 toplayer = PlayersManager().getPlayerByID(tid) #有队伍的角色id sendPlayer = toplayer.teamcom.getMyTeamLeader() #队长角色 if not player: return {'result': False, 'message': Lg().g(18)} if not toplayer: return {'result': False, 'message': Lg().g(256)} if player.teamcom.amITeamMember(): return {'result': False, 'message': Lg().g(254)} if not player.teamcom.amITeamMember(): return {'result': False, 'message': Lg().g(255)} if sendPlayer.teamcom.amITeamMember(): #如果队长有队伍 data = sendPlayer.teamcom.addTeamMember(player) if data['result']: player.teamcom.pushTeamMemberInfo() pushObjectNetInterface.pushOtherMessage(905, Lg().g(257), [sendPlayer.dynamicId]) return data
def GetGroupLingDiInfo4400(dynamicId, characterId): '''获取国领地信息 ''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': Lg().g(18)} guildId = player.guild.getID() if not guildId: return {'result': False, 'message': Lg().g(79)} guild = GuildManager().getGuildById(guildId) guildInfo = guild.guildinfo info = {} ldID = FortressManager().getGuildFortressId(guildId) fortress = FortressManager().getFortressById(ldID) if fortress: if not fortress.isOccupied: fortress = None info['ldType'] = ldID if fortress else 0 info['groupName'] = guildInfo['name'] info['groupLevel'] = guildInfo['level'] info['groupLeader'] = guildInfo['presidentname'] info['obtainJL'] = True if fortress else False info['icon'] = guildInfo['emblemLevel'] info['battleInfo'] = [] if not fortress else fortress.fightlog info['battleTime'] = 0 if not fortress else fortress.getNextFightTime() return {'result': True, 'data': info}
def addexp(characterId, argument): '''升级''' if len(argument) < 1: return player = PlayersManager().getPlayerByID(characterId) player.level.addExp(int(argument[0])) player.updatePlayerInfo()
def ObtainItem_2408(dynamicId, request_proto): '''放到自己背包中''' argument=ObtainItem2408_pb2.ObtainItemRequest() argument.ParseFromString(request_proto) response=ObtainItem2408_pb2.ObtainItemResponse() id=argument.id #角色id type=argument.type #0获取所有 1获取单个 pos=argument.pos # 单个在背包的位置 player=PlayersManager().getPlayerByID(id) #角色实例 if type==0: data=player.instance.putAllItemsInPack() if not data: response.result=False response.message=Lg().g(16) pushObjectNetInterface.pushOtherMessage(905, Lg().g(16), [player.getDynamicId()]) return response.SerializeToString() else: data=player.instance.getOneItemInPackByPosition(pos) if not data: response.result=False response.message=Lg().g(16) return response.SerializeToString() response.result=True response.message=u'' return response.SerializeToString()
def cleancd(characterId,argument): '''清除竞技场CD''' player = PlayersManager().getPlayerByID(characterId) if not player: return player.arena.clearCD() player.updatePlayerInfo()
def updateAllMonsterLocation(self): '''更新场景中所有怪物的坐标 ''' self._movetag += 1 tag = 0 for player in self._playerlist: #如果副本中有人在战斗,所有怪物停止移动 pl = PlayersManager().getPlayerByID(player) if pl.baseInfo.getStatus() == 4: return for monster in self._monsters.values(): hasMove = 0 if not monster.getMoveable(): #判断怪物在场景能否移动 continue mposition = monster.baseInfo.getStaticPosition() for playerId in self._playerlist: pposition = PlayersManager().getPlayerByID( playerId).baseInfo.getPosition() if abs(mposition[0] - pposition[0]) < DISTANCE: hasMove = 1 monster.baseInfo.setPosition(pposition) continue if not hasMove and self._movetag == MOVERATE: tag = 1 monster.updateLocation() if tag: self._movetag = 0
def ObtainReward(pid,did): '''领取单个保卫奖励 @param pid: int 角色id @param did: int 保卫奖励表主键id ''' msg=u"" flg=True player=PlayersManager().getPlayerByID(pid)#获得角色id info=dbDefenceBonus.getByid(did) #根据奖励主键id获得奖励信息 if not info: pushObjectNetInterface.pushOtherMessage(905, Lg().g(61), [player.getDynamicId()]) return False,Lg().g(61) reward=info['reward'] player.finance.updatePrestige(player.finance.getPrestige()+reward) if not dbDefenceBonus.delByid(info['id']) : msg+=Lg().g(62) flg=False # item=Item(itemTemplateId=20030061) # item.pack.setStack(info['reward']) #物品的数量 # rs1=player.pack._package.canPutItem(item,info['reward']) #判断背包中是否可以放入这些数量的物品 # if rs1: #如果可以放进去 # player.pack.putNewItemsInPackage(20030061,info['reward']) # del item # if not dbDefenceBonus.delByid(info['id']) : # msg+=Lg().g(62) # flg=False # else: #如果一个奖励所获得物品不能放入背包 # del item # pushObjectNetInterface.pushOtherMessage(905, Lg().g(16), [player.getDynamicId()]) # return False,Lg().g(16) return flg,msg
def TaskExcuteTalk(dynamicId, characterId, task_id, npc_id): '''任务交谈''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False} data = player.quest.talkWithNpc(npc_id, task_id) return {'result': data, 'message': u''}
def ObtainItem_2408(dynamicId, request_proto): '''放到自己背包中''' argument = ObtainItem2408_pb2.ObtainItemRequest() argument.ParseFromString(request_proto) response = ObtainItem2408_pb2.ObtainItemResponse() id = argument.id #角色id type = argument.type #0获取所有 1获取单个 pos = argument.pos # 单个在背包的位置 player = PlayersManager().getPlayerByID(id) #角色实例 if type == 0: data = player.instance.putAllItemsInPack() if not data: response.result = False response.message = Lg().g(16) pushObjectNetInterface.pushOtherMessage(905, Lg().g(16), [player.getDynamicId()]) return response.SerializeToString() else: data = player.instance.getOneItemInPackByPosition(pos) if not data: response.result = False response.message = Lg().g(16) return response.SerializeToString() response.result = True response.message = u'' return response.SerializeToString()
def isHaveQH(characterid, itemid): '''判断是否能够强化 @param characterid: int 角色id @param itemid: int 物品1(item)表主键id ''' item1 = None #物品实例1 player = PlayersManager().getPlayerByID(characterid) if itemid > 0: #如果物品1存在 if player.pack._package._PropsPagePack.getPositionByItemId( itemid) != -1: #背包中没有此物品 item1 = player.pack._package._PropsPagePack.getItemInfoByItemid( itemid) #获取物品实例 else: item1 = player.pack._equipmentSlot.getItemInfoByItemid(itemid) if not item1: return {'result': False, 'message': Lg().g(189), 'data': None} wqtype = item1.getWQtype( ) #武器类型 #装备类型id #0=衣服#1=裤子 #2=头盔#3=手套#4=靴子#5=护肩#6=项链#7=戒指#8=主武器#9=副武器#10=双手 if wqtype < 0 or wqtype > 10: #装备类型id pushObjectNetInterface.pushOtherMessage(905, Lg().g(196), [player.getDynamicId()]) return {'result': False, 'message': Lg().g(197), 'data': None} baseQuality = item1.baseInfo.getItemTemplateInfo().get( "baseQuality", 0) #基础品质 1灰 2白 3绿 4蓝 5紫 6橙 7红 itemlevel = item1.baseInfo.getItemTemplateInfo().get("levelRequire", 0) #装备等级 qlevel = item1.attribute.getStrengthen() #物品当前的强化等级 jinbi = coinCount(qlevel, baseQuality, wqtype, itemlevel) return qq(player, itemid, wqtype, baseQuality, jinbi, item1)
def getSxzy(characterid, item1, item2): '''获取属性转移后的效果及其花费信息 @param item1: int 物品id (转移后强化等级变成0的那个物品的id) @param item: int 物品id ''' if item1 == item2: pushObjectNetInterface.pushOtherMessageByCharacterId( Lg().g(206), [characterid]) return {'result': False, 'message': Lg().g(206), 'data': None} player = PlayersManager().getPlayerByID(characterid) #角色实例 if not player: return {'result': False, 'message': Lg().g(199), 'data': None} if player.level.getLevel() < 30: return {'result': False, 'message': Lg().g(205), 'data': None} items1 = getItemByplayer(player, item1) if not items1: return {'result': False, 'message': Lg().g(189), 'data': None} items2 = getItemByplayer(player, item2) if not items2: return {'result': False, 'message': Lg().g(189), 'data': None} if items1.getWQtype() != items2.getWQtype(): return {'qh': None, 'coin': 0} level = Sxzy(items1, items2) zyyh = level + items2.attribute.getStrengthen() #转移以后装备的强化等级 if player.level.getLevel() < zyyh: pushObjectNetInterface.pushOtherMessage(905, Lg().g(207) % zyyh, [player.getDynamicId()]) Zcion = getSxzyCoin(items1, items2) #转移花费金币 return {'qh': level, 'coin': Zcion}
def TaskPlayerTaskList(dynamicId, characterId): '''获取角色已接任务列表''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': Lg().g(18)} data = player.quest.getTaskProcessInfo() return {'result': True, 'tasks': data}
def addexp(characterId,argument): '''升级''' if len(argument)<1: return player = PlayersManager().getPlayerByID(characterId) player.level.addExp(int(argument[0])) player.updatePlayerInfo()
def addPlayerFriend(dynamicId,characterId,friendName,friendType,isSheildedMail=0): '''添加好友 @param dynamicId: int 客户端的动态id @param characterId: int 角色的id @param friendName: string 对方的昵称 @param friendType: int(1,2) 好友的类型 1:好友 2:黑名单 @param isSheildedMail: 是否屏蔽邮件 ''' player = PlayersManager().getPlayerByID(characterId) if not player: return {'result':False,'message':Lg().g(18)} friendId = dbaccess.getCharacterIdByNickName(friendName)#返回好友角色id [id] if not friendId: msg =Lg().g(75) pushObjectNetInterface.pushOtherMessage(905,msg, [player.getDynamicId()]) return {'result':False,'message':Lg().g(68)} pyid=-1 #关系好友动态id -1表示角色没有在线 其他表示角色动态id py1=PlayersManager().getPlayerByID(friendId[0]) if py1 and py1.friend.getTypeByid(characterId)==0:#如果好友在线 pyid=py1.getDynamicId() result = player.friend.addFriend(characterId,friendId[0],friendType,pyid) if result: pushObjectNetInterface.pushOtherMessage(905, result['message'], [player.getDynamicId()]) return {'result':True,'message':Lg().g(69)} return {'result':False,'message':Lg().g(70)}
def zudui(id, tid): '''组队功能 @param id: int 当前用户角色 @param tid: int 角色2 ''' player1 = PlayersManager().getPlayerByID(id) #当前用户实例 player2 = PlayersManager().getPlayerByID(tid) #角色2实例 player = None #队长实例 toplayer = None #队员 if not player1: #如果当前用户掉线 return {'result': False, 'message': Lg().g(18)} if not player2: #如果角色2掉线 return {'result': False, 'message': Lg().g(256)} if player1.teamcom.amITeamMember() and player2.teamcom.amITeamMember( ): #如果都有组队 return {'result': False, 'message': Lg().g(251)} if not player1.teamcom.amITeamMember( ) and not player2.teamcom.amITeamMember(): #如果都没有队伍 player = player1 toplayer = player2 elif player1.teamcom.amITeamMember(): #如果当前用户有队伍 player = player1.teamcom.getMyTeamLeader() #获取当前用户队伍中的队长 toplayer = player2 elif player2.teamcom.amITeamMember(): #如果角色2有队伍 player = player2.teamcom.getMyTeamLeader() #获取角色2队伍中的队长 toplayer = player1 data = player.teamcom.addTeamMember(toplayer)
def ReviveTeamMember(dynamicId,characterId,victimerId,paytype): '''复活队友 @param dynamicId: int 客户端的id @param characterId: int 角色的id @param victimerId: int 复活者的id @param paytype: int 支付类型 1 物品 2 金币 ''' player = PlayersManager().getPlayerByID(characterId) toplayer = PlayersManager().getPlayerByID(victimerId) if not player or not player.CheckClient(dynamicId): data = {'faildtype':0,'goldprice':0} return {'result':False,'message':Lg().g(18),'data':data} if not toplayer: data = {'faildtype':0,'goldprice':0} return {'result':False,'message':Lg().g(66),'data':data} if not player.teamcom.IsMyTeamMember(victimerId): data = {'faildtype':0,'goldprice':0} return {'result':False,'message':Lg().g(250),'data':data} if toplayer.status.getLifeStatus(): data = {'faildtype':0,'goldprice':0} return {'result':False,'message':Lg().g(185),'data':data} if paytype==1: if True: data = {'faildtype':1,'goldprice':100} return {'result':False,'message':Lg().g(248),'data':data} else: if True: data = {'faildtype':2,'goldprice':100} return {'result':False,'message':Lg().g(88),'data':data} toplayer.status.updateLifeStatus(1) toplayer.attribute.updateHp(int(player.attribute.getMaxHp()*0.01)+1) toplayer.attribute.updateMp(int(player.attribute.getMaxMp()*0.01)+1) player.teamcom.pushTeamMemberInfo() return {'result':True,'message':Lg().g(249)}
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 tiaozhuan(dynamicId,characterid,csz): '''场景间的跳转或者进入副本 ''' player = PlayersManager().getPlayerByID(characterid) if not player: return {'result':False,'message':Lg().g(18)} doorinfo = dbMap.ALL_DOOR_INFO.get(csz)#获取传送门的信息 lastscene = MapManager().getMapId(player.baseInfo.getTown()) if doorinfo.get('functionType')==1:#跳转场景 placeId = doorinfo.get('nextmap') position = (doorinfo.get('init_x'),doorinfo.get('init_y')) player.baseInfo.setTown( placeId) player.baseInfo.setState(0) PlayersManager().addPlayer(player) defencelog_app.isReward(player.baseInfo.id, player.getDynamicId()) scene = MapManager().getMapId(placeId) scenename = scene.getSceneName() chatnoderemote.callRemote('JoinRoom',characterid,placeId,scenename) scene.addPlayer(characterid) player.quest.setNpcList(scene._npclist) player.baseInfo.initPosition(position) scene.pushEnterPlace([dynamicId]) result = {'result':True} else: instanceId = doorinfo.get('famID') result = instance_app.enterInstance1(player,dynamicId, characterid, instanceId,0) if result.get('result'): lastscene.dropPlayer(characterid)
def pushSceneInfo(self,rate): '''给每一个在场景中的玩家推送场景信息 @param rate: int 移动的频率 ''' if not self._canRec: return self.updateAllPlayerLocation(rate) if self._monsters: self.updateAllMonsterLocation() groupState = configure.isteamInstanceTime(20)#组队副本时间判断 guildFightState = fortress.IsWarTime()#国战时间判断 for room in self.rooms: sendlist = [] sceneInfo = pushSceneMessage_pb2.pushSceneMessage() for playerId in room: player = PlayersManager().getPlayerByID(playerId) if not player: continue player.icon.groupIconManager(groupState)#组队战图标管理 player.icon.guildFightManager(guildFightState)#国战图标管理 PlayerPosition = sceneInfo.PlayerPosition.add() PlayerPosition.id = player.baseInfo.id PlayerPosition.name = player.baseInfo.getNickName() PlayerPosition.profession = player.profession.getProfessionName() PlayerPosition.headicon = player.profession.getFigure() GuildInfo = player.guild.getGuildInfo() if GuildInfo: PlayerPosition.guildname = GuildInfo.get('name','') PlayerPosition.figure = player.profession.getSceneFigure() position = player.baseInfo.getDestination() PlayerPosition.x = int(position[0]) PlayerPosition.y = int(position[1]) PlayerPosition.level = player.level.getLevel() PlayerPosition.viptype = player.baseInfo.getType() PlayerPosition.gemlevel = player.pack._equipmentSlot.getGemLevel() sendlist.append(player.getDynamicId()) ###############角色展示宠物的处理################ petremove = player.pet.popLastRemove() for petId in petremove: self.dropPet(petId) for petId in player.matrix._matrixSetting.values(): if petId<=0: continue pet = player.pet.getPet(petId) figure = pet.templateInfo['resourceid'] position = pet.getPosition() PetPosition = sceneInfo.petInfo.add() PetPosition.id = petId PetPosition.name = pet.baseInfo.getName() PetPosition.profession = pet.baseInfo.getName() PetPosition.headicon = figure PetPosition.figure = figure PetPosition.x = int(position[0]) PetPosition.y = int(position[1]) PetPosition.masterId = playerId sceneInfo.sceneId = self._id msg = sceneInfo.SerializeToString() pushApplyMessage(602,msg, sendlist)
def TaskPlayerDropTask(dynamicId, characterId, task_id): '''放弃任务''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': Lg().g(18)} data = player.quest.abandonQuest(task_id) return data
def AcceptOrRefuseApply(dynamicId, characterId, operType, appliId): '''拒绝或同意申请 @param dynamicId: int 客户端的动态id @param characterId: int 客户端的动态id @param operType: int 操作类型 0 接受 1 拒绝 @param appliId: int 申请ID ''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': Lg().g(18)} guildId = player.guild.getID() if not guildId: return {'result': False, 'message': Lg().g(79)} guild = GuildManager().getGuildById(guildId) if operType == 0: data = guild.acceptGuildApply(characterId, appliId) reason = {0:Lg().g(80),-1:Lg().g(81),-2:Lg().g(82),\ -3:Lg().g(83),-4:Lg().g(84)} if data == 1: result = {'result': True, 'message': Lg().g(85)} else: result = {'result': False, 'message': reason[data]} else: data = guild.refuseGuildApply(characterId, appliId) reason = {0: Lg().g(80), -1: Lg().g(81), -4: Lg().g(84)} if data == 1: result = {'result': True, 'message': Lg().g(85)} else: result = {'result': False, 'message': reason[data]} return result
def isHaveQH(characterid,itemid): '''判断是否能够强化 @param characterid: int 角色id @param itemid: int 物品1(item)表主键id ''' item1=None#物品实例1 player=PlayersManager().getPlayerByID(characterid) if itemid>0:#如果物品1存在 if player.pack._package._PropsPagePack.getPositionByItemId(itemid)!=-1:#背包中没有此物品 item1=player.pack._package._PropsPagePack.getItemInfoByItemid(itemid)#获取物品实例 else: item1=player.pack._equipmentSlot.getItemInfoByItemid(itemid) if not item1: return {'result':False,'message':Lg().g(189),'data':None} wqtype=item1.getWQtype()#武器类型 #装备类型id #0=衣服#1=裤子 #2=头盔#3=手套#4=靴子#5=护肩#6=项链#7=戒指#8=主武器#9=副武器#10=双手 if wqtype<0 or wqtype>10: #装备类型id pushObjectNetInterface.pushOtherMessage(905, Lg().g(196), [player.getDynamicId()]) return {'result':False,'message':Lg().g(197),'data':None} baseQuality=item1.baseInfo.getItemTemplateInfo().get("baseQuality",0)#基础品质 1灰 2白 3绿 4蓝 5紫 6橙 7红 itemlevel=item1.baseInfo.getItemTemplateInfo().get("levelRequire",0) #装备等级 qlevel=item1.attribute.getStrengthen() #物品当前的强化等级 jinbi= coinCount(qlevel,baseQuality,wqtype,itemlevel) return qq(player, itemid,wqtype,baseQuality,jinbi,item1)
def GroupPK4403(dynamicId, characterId, pkId): '''国战申请 ''' HAOJIAO = 20700072 player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': Lg().g(18)} guildId = player.guild.getID() if not guildId: return {'result': False, 'message': Lg().g(79)} if not FortressManager().checkCanApply(guildId): return {'result': False, 'message': Lg().g(648)} fortress = FortressManager().getFortressById(pkId) if not fortress: return {'result': False} itemcount = player.pack.countItemTemplateId(HAOJIAO) #检测战斗号角数量 if itemcount < 1: return {'result': False, 'message': Lg().g(656)} data = fortress.SignUp(guildId) result = data.get('result', False) if result: player.pack.delItemByTemplateId(HAOJIAO, 1) #扣除战斗号角 msgID = data.get('msgID', 0) message = u'' if msgID: message = Lg().g(msgID) return {'result': result, 'message': message}
def getSendList(self): '''获取可发送的客户端列表''' sendList = [] for pId in self._playerlist: pl = PlayersManager().getPlayerByID(pId) if pl and (pId in self._canRec) and pl.baseInfo.getStatus() != 4: sendList.append(pl.getDynamicId()) return sendList
def getSendList(self,room): '''获取接受场景消息的角色的客户端ID''' sendlist = [] for playerId in room: player = PlayersManager().getPlayerByID(playerId) if playerId in self._canRec and player and player.baseInfo.getStatus()!=4: sendlist.append(player.getDynamicId()) return sendlist
def getAllSendList(self): '''获取接受场景消息的角色的客户端ID''' sendlist = [] for playerId in self._canRec: player = PlayersManager().getPlayerByID(playerId) if player and player.baseInfo.getStatus() != 4: sendlist.append(player.getDynamicId()) return sendlist
def packageArrange(dynamicId,characterId,packageType): '''包裹整理''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result':False,'message':Lg().g(18)} player.pack.packageArrange(packageType) pushPromptedMessage(Lg().g(158),[player.getDynamicId()]) return {'result':True,'message':Lg().g(158)}
def getSendList(self): '''获取可发送的客户端列表''' sendList = [] for pId in self._playerlist: pl = PlayersManager().getPlayerByID(pId) if pl and (pId in self._canRec) and pl.baseInfo.getStatus()!=4: sendList.append(pl.getDynamicId()) return sendList
def GetRoleAndPetList(dynamicId, characterId): '''获取角色和宠物的星运装备栏信息 ''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': Lg().g(18)} data = player.fate.GetRoleAndPetFateList() return {'result': True, 'data': data}
def YiJianHeCheng(dynamicId, characterId): '''一键合成 ''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': Lg().g(18)} result = player.fate.HeChengAll() return result
def GetPackXingYunListInfo(dynamicId, characterId): '''获取占星包裹信息 ''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': Lg().g(18)} data = player.fate.getZhanXingPack() return {'result': True, 'data': data}
def getCanReceivedquestList(dynamicId, characterId): '''获取可接任务列表''' player = PlayersManager().getPlayerByID(characterId) if not player or not player.CheckClient(dynamicId): return {'result': False, 'message': Lg().g(18)} result = player.quest.getCanReceivedquestList() data = {'result': True, 'message': u'', 'data': result} return data
def addCoin(characterId,argument): '''添加金币''' if len(argument)<1: return player = PlayersManager().getPlayerByID(characterId) if not player: return player.finance.addCoin(int(argument[0])) player.updatePlayerInfo()
def vipup(characterId,argument): '''修改vip等级''' if len(argument)<1: return player = PlayersManager().getPlayerByID(characterId) if not player: return player.baseInfo.updateType(int(argument[0])) player.updatePlayerInfo()
def addhp(characterId,argument): '''添加兵力 ''' if len(argument)<1: return player = PlayersManager().getPlayerByID(characterId) if not player: return player.attribute.addHp(int(argument[0])) player.updatePlayerInfo()
def leaveScene_610(dynamicId,characterId): '''离开场景''' player = PlayersManager().getPlayerByID(characterId) if not player: return None,0 player.stopAllTimer() playerDumps = cPickle.dumps(player) player.startAllTimer() placeId = player.baseInfo.getTown() return playerDumps,placeId
def addxingyun(characterId,argument): '''添加幸运值 ''' if len(argument)<1: return player = PlayersManager().getPlayerByID(characterId) if not player: return player.petShop.addXy(int(argument[0])) player.updatePlayerInfo()
def updateSpirit(pid, contxt): """修改角色心情 @param pid: int 角色id @param context: str 心情 """ player = PlayersManager().getPlayerByID(pid) if player.baseInfo.updateSpirit(contxt): pushObjectNetInterface.pushOtherMessage(905, Lg().g(175), [player.getDynamicId()]) else: pushObjectNetInterface.pushOtherMessage(905, Lg().g(176), [player.getDynamicId()]) return {"result": True, "message": u""}
def updateAllPlayerLocation(self,rate): '''更新场景中所有角色的坐标 @param rate: int 移动的频率 ''' playerList = list(self._playerlist) for playerId in playerList: player = PlayersManager().getPlayerByID(playerId) if not player: self.dropPlayer(playerId) continue player.updateLocation(rate)#更新角色的位置
def runingQd(self, pid, gold): """祈祷逻辑 @param gold: int 钻石数量 """ from app.scense.serverconfig.chatnode import chatnoderemote from app.scense.core.PlayersManager import PlayersManager v = {1: Lg().g(564), 2: Lg().g(499), 3: Lg().g(565), 4: Lg().g(566), 0: Lg().g(564)} player = PlayersManager().getPlayerByID(pid) mygold = player.finance.getGold() if mygold < gold: pushObjectNetInterface.pushOtherMessage(905, Lg().g(567), [player.getDynamicId()]) return False result = configure.qd(gold) lx = result[0] # 奖励类型 1金币奖励 2经验奖励 3声望奖励 4活力 sl = result[1] # 奖励数量 bs = result[2] # 奖励倍数 if lx == 1: player.finance.addCoin(sl) ss = Lg().g(568) % (v.get(lx), sl) elif lx == 2: player.level.addExp(sl) ss = Lg().g(568) % (v.get(lx), sl) elif lx == 3: player.finance.addPrestige(sl) ss = Lg().g(568) % (v.get(lx), sl) elif lx == 4: player.attribute.addEnergy(sl) ss = Lg().g(568) % (v.get(lx), sl) else: player.finance.addCoin(sl) if bs > 1: ss += Lg().g(569) % bs pushObjectNetInterface.pushOtherMessage(905, ss, [player.getDynamicId()]) # player.finance.updateGold(mygold-gold) player.finance.consGold(gold, 1) bbs = 1 # 大于这个倍数的才会广播 sj = time.strftime("%w%H") sj = int(sj) if sj >= 310 and sj <= 314: bbs = 2 if bs > bbs: pname = player.baseInfo.getName() tm = time.strftime("%Y-%m-%d %X") mg = Lg().g(570) % (pname, bs, v.get(lx), sl) chatnoderemote.callRemote("pushSystemToInfo", mg) if len(self.getGG()) == 4: del self.gg[0] self.gg.append([tm, mg]) self.uploadGG(self.gg) return True
def pushRoomMatrixInfo(self): '''推送房间阵法的信息''' matrixInfo = self.matrix.fromatMatrixInfo() sendList = [] for key in self.members.keys(): member = self.members[key] if not member: continue player = PlayersManager().getPlayerByID(member['id']) if player: sendList.append(player.getDynamicId()) pushRoomMatrixInfo(sendList, matrixInfo)
def getPlayerInfo(dynamicId, characterId): """获取角色信息 @param dynamicId: int 客户端的id @param characterId: int 角色的id """ player = PlayersManager().getPlayerByID(characterId) if not player: return {"result": False, "message": Lg().g(18)} data = player.formatInfo() hasBuyCount = player.afk.turnenergytimes info = {"playerInfo": data, "hasBuyCount": hasBuyCount} return {"result": True, "message": u"获取信息成功", "data": info}
def backScnee(pid, instanceid, boo): """角色退出殖民战斗,返回城镇场景 @param pid: int 角色id @param instanceid: int 副本id @param boo: bool 战斗结果 """ player = PlayersManager().getPlayerByID(pid) player.msgbox.AfterFightMsgHandle() sceneId = player.baseInfo.getTown() scene = MapManager().getMapId(sceneId) scene.addPlayer(pid) scene.pushEnterPlace([player.getDynamicId()])
def CancelGuaJi(characterId): '''角色取消挂机 @param characterId: int 角色的ID ''' player = PlayersManager().getPlayerByID(characterId) if not player: return {'result':False,'message':Lg().g(18)} result = player.afk.stopMeditation() if not result.get('result'): msg = result.get('message') sendId = player.getDynamicId() pushOtherMessage(905, msg, [sendId]) return result
def pushGuildLevelUp(self,level): '''推送国升级的消息''' memberList = dbGuild.getGuildMemberIdList(self.id) sendlist = [] for memberId in memberList: player = PlayersManager().getPlayerByID(memberId) if player: sendlist.append(player.getDynamicId()) pushGuildLevelUpMessage(level, sendlist) if level==20: utype = {1:Lg().g(544),2:Lg().g(545)}.get(self.guildinfo['camp'],Lg().g(546)) gname = self.getGuildName() msg = Lg().g(558)%(utype,gname) chatnoderemote.callRemote('pushSystemToInfo',msg)