def loginToServer_101(dynamicId, request_proto): """登陆服务器 """ from app.scense.protoFile.login import loginToServer_pb2 argument = loginToServer_pb2.loginToServerRequest() argument.ParseFromString(request_proto) response = loginToServer_pb2.loginToServerResponse() dynamicId = dynamicId username = argument.user password = argument.password data = login.loginToServer(dynamicId, username, password) response.result = data.get("result", False) response.message = data.get("message", "") if data.get("data", None): response.data.len = data["data"].get("len", 0) response.data.userId = data["data"].get("userId", 0) response.data.defaultId = data["data"].get("defaultId", -1) for character in data["data"].get("UserCharacterList", []): characterInfo = response.data.character.add() characterInfo.id = character.get("id", 0) characterInfo.nickname = character.get("nickname", u"") characterInfo.level = character.get("level", 1) professionId = character.get("profession", 1) professionName = loader.getById("profession", professionId, ["name"]).get("name", u"新手") characterInfo.profession = professionName characterInfo.viptype = character.get("viptype", 1) return response.SerializeToString()
def activeNewPlayer_102(dynamicId, request_proto): """创建角色 """ from app.scense.protoFile.login import activeNewPlayer_pb2 argument = activeNewPlayer_pb2.activeNewPlayerRequest() argument.ParseFromString(request_proto) response = activeNewPlayer_pb2.activeNewPlayerResponse() dynamicId = dynamicId userId = argument.userId nickName = argument.nickName profession = argument.profession data = login.activeNewPlayer(dynamicId, userId, nickName, profession) response.result = data.get("result", False) response.message = data.get("message", "") if data.get("data", None): response.data.len = data["data"].get("len", 0) response.data.userId = userId response.data.newCharacterId = data["data"].get("newCharacterId", 0) for character in data["data"].get("UserCharacterList", []): characterInfo = response.data.character.add() characterInfo.id = character.get("id", 0) characterInfo.nicName = character.get("nickname", u"") characterInfo.level = character.get("level", 1) professionId = character.get("profession", 1) professionName = loader.getById("profession", professionId, ["name"]).get("name", u"新手") characterInfo.profession = professionName characterInfo.roletype = character.get("viptype", 1) return response.SerializeToString()
def deleteRole_104(dynamicId, request_proto): '''删除角色''' from app.scense.protoFile.login import deleteRole_pb2 argument = deleteRole_pb2.deleteRoleRequest() argument.ParseFromString(request_proto) response = deleteRole_pb2.deleteRoleResponse() userId = argument.userId characterId = argument.id password = argument.password data = login.deleteRole(dynamicId, userId, characterId,password) response.result = data.get('result',False) response.message = data.get('message',u'') if data.get('data',None): response.data.len = len(data.get('data',[])) for character in data['data'].get('UserCharacterListInfo',[]): characterInfo = response.data.character.add() characterInfo.id = character.get('id',0) characterInfo.nicName = character.get('nickname',u'') characterInfo.level = character.get('level',1) professionId = character.get('profession',1) professionName = loader.getById('profession',professionId,['name']).get('name',u'新手') characterInfo.profession = professionName characterInfo.roletype = character.get('viptype',1) return response.SerializeToString()
def activeNewPlayer_102(dynamicId, request_proto): '''创建角色 ''' from app.scense.protoFile.login import activeNewPlayer_pb2 argument = activeNewPlayer_pb2.activeNewPlayerRequest() argument.ParseFromString(request_proto) response = activeNewPlayer_pb2.activeNewPlayerResponse() dynamicId = dynamicId userId = argument.userId nickName = argument.nickName profession = argument.profession data = login.activeNewPlayer(dynamicId, userId, nickName, profession) response.result = data.get('result', False) response.message = data.get('message', '') if data.get('data', None): response.data.len = data['data'].get('len', 0) response.data.userId = userId response.data.newCharacterId = data['data'].get('newCharacterId', 0) for character in data['data'].get('UserCharacterList', []): characterInfo = response.data.character.add() characterInfo.id = character.get('id', 0) characterInfo.nicName = character.get('nickname', u'') characterInfo.level = character.get('level', 1) professionId = character.get('profession', 1) professionName = loader.getById('profession', professionId, ['name']).get('name', u'新手') characterInfo.profession = professionName characterInfo.roletype = character.get('viptype', 1) return response.SerializeToString()
def deleteRole_104(dynamicId, request_proto): """删除角色""" from app.scense.protoFile.login import deleteRole_pb2 argument = deleteRole_pb2.deleteRoleRequest() argument.ParseFromString(request_proto) response = deleteRole_pb2.deleteRoleResponse() userId = argument.userId characterId = argument.id password = argument.password data = login.deleteRole(dynamicId, userId, characterId, password) response.result = data.get("result", False) response.message = data.get("message", u"") if data.get("data", None): response.data.len = len(data.get("data", [])) for character in data["data"].get("UserCharacterListInfo", []): characterInfo = response.data.character.add() characterInfo.id = character.get("id", 0) characterInfo.nicName = character.get("nickname", u"") characterInfo.level = character.get("level", 1) professionId = character.get("profession", 1) professionName = loader.getById("profession", professionId, ["name"]).get("name", u"新手") characterInfo.profession = professionName characterInfo.roletype = character.get("viptype", 1) return response.SerializeToString()
def deleteRole_104(dynamicId, request_proto): '''删除角色''' from app.scense.protoFile.login import deleteRole_pb2 argument = deleteRole_pb2.deleteRoleRequest() argument.ParseFromString(request_proto) response = deleteRole_pb2.deleteRoleResponse() userId = argument.userId characterId = argument.id password = argument.password data = login.deleteRole(dynamicId, userId, characterId, password) response.result = data.get('result', False) response.message = data.get('message', u'') if data.get('data', None): response.data.len = len(data.get('data', [])) for character in data['data'].get('UserCharacterListInfo', []): characterInfo = response.data.character.add() characterInfo.id = character.get('id', 0) characterInfo.nicName = character.get('nickname', u'') characterInfo.level = character.get('level', 1) professionId = character.get('profession', 1) professionName = loader.getById('profession', professionId, ['name']).get('name', u'新手') characterInfo.profession = professionName characterInfo.roletype = character.get('viptype', 1) return response.SerializeToString()
def loginToServer_101(dynamicId, request_proto): '''登陆服务器 ''' from app.scense.protoFile.login import loginToServer_pb2 argument = loginToServer_pb2.loginToServerRequest() argument.ParseFromString(request_proto) response = loginToServer_pb2.loginToServerResponse() dynamicId = dynamicId username = argument.user password = argument.password data = login.loginToServer(dynamicId, username, password) response.result = data.get('result', False) response.message = data.get('message', '') if data.get('data', None): response.data.len = data['data'].get('len', 0) response.data.userId = data['data'].get('userId', 0) response.data.defaultId = data['data'].get('defaultId', -1) for character in data['data'].get('UserCharacterList', []): characterInfo = response.data.character.add() characterInfo.id = character.get('id', 0) characterInfo.nickname = character.get('nickname', u'') characterInfo.level = character.get('level', 1) professionId = character.get('profession', 1) professionName = loader.getById('profession', professionId, ['name']).get('name', u'新手') characterInfo.profession = professionName characterInfo.viptype = character.get('viptype', 1) return response.SerializeToString()
def loginToServer_101(dynamicId, request_proto): '''登陆服务器 ''' from app.scense.protoFile.login import loginToServer_pb2 argument = loginToServer_pb2.loginToServerRequest() argument.ParseFromString(request_proto) response = loginToServer_pb2.loginToServerResponse() dynamicId = dynamicId username = argument.user password = argument.password data = login.loginToServer(dynamicId, username, password) response.result = data.get('result',False) response.message = data.get('message','') if data.get('data',None): response.data.len = data['data'].get('len',0) response.data.userId = data['data'].get('userId',0) response.data.defaultId = data['data'].get('defaultId',-1) for character in data['data'].get('UserCharacterList',[]): characterInfo = response.data.character.add() characterInfo.id = character.get('id',0) characterInfo.nickname = character.get('nickname',u'') characterInfo.level = character.get('level',1) professionId = character.get('profession',1) professionName = loader.getById('profession',professionId,['name']).get('name',u'新手') characterInfo.profession = professionName characterInfo.viptype = character.get('viptype',1) return response.SerializeToString()
def activeNewPlayer_102(dynamicId, request_proto): '''创建角色 ''' from app.scense.protoFile.login import activeNewPlayer_pb2 argument = activeNewPlayer_pb2.activeNewPlayerRequest() argument.ParseFromString(request_proto) response = activeNewPlayer_pb2.activeNewPlayerResponse() dynamicId = dynamicId userId = argument.userId nickName = argument.nickName profession = argument.profession data = login.activeNewPlayer(dynamicId, userId, nickName, profession) response.result = data.get('result',False) response.message = data.get('message','') if data.get('data',None): response.data.len = data['data'].get('len',0) response.data.userId = userId response.data.newCharacterId = data['data'].get('newCharacterId',0) for character in data['data'].get('UserCharacterList',[]): characterInfo = response.data.character.add() characterInfo.id = character.get('id',0) characterInfo.nicName = character.get('nickname',u'') characterInfo.level = character.get('level',1) professionId = character.get('profession',1) professionName = loader.getById('profession',professionId,['name']).get('name',u'新手') characterInfo.profession = professionName characterInfo.roletype = character.get('viptype',1) return response.SerializeToString()
def getShopItemExtraAttr(self, shopInfo): '''得到商店物品附加属性''' characterLevel = self._owner.level.getLevel() cursor = connection.cursor() sql = "select parameterMin,parameterMax from `shop_extra_attr_level_config` where type=%d and characterLevel=%d"\ % (shopInfo['extraAttrLevelConfigType'], characterLevel) cursor.execute(sql) result = cursor.fetchone() min = result['parameterMin'] max = result['parameterMax'] r = random.randint(min, max) cursor.execute("select level from `exattribute_level` where value>=%d" % r) level = cursor.fetchone()['level'] cursor.execute("select * from `extra_attributes` where level=%d" % level) tempAttributeList = cursor.fetchall() r1 = random.randint(0, len(tempAttributeList) - 1) attributeInfo = tempAttributeList[r1] attributeInfo['attributeEffects'] = [] if attributeInfo['effects'] <> '-1' or attributeInfo['effects'] <> u'-1': effects = attributeInfo['effects'].split(';') for effect in effects: effect = int(effect) description = loader.getById('effect', effect, ['description'])['description'] attributeInfo['attributeEffects'].append(description) else: script = attributeInfo['script'] script = util.parseScript(script) attributeInfo['attributeEffects'].append(script) return attributeInfo
def getShopItemPrice(self, itemTemplateId, extraAttribute): '''获取商店物品的购买价格''' #all_ItemTemplate = dbaccess.all_ItemTemplate.values() sellPrice = dbaccess.all_ItemTemplate[itemTemplateId]['buyingRateCoin']#loader.getById('item_template', itemTemplateId, ['buyingRateCoin'])['buyingRateCoin'] extraAttributes = eval('[' + extraAttribute + ']') for extraAttrId in extraAttributes: extraAttrId = int(extraAttrId) isValidExtraAttrID = loader.getById('extra_attributes', extraAttrId, ['id']) if((extraAttrId != -1) and isValidExtraAttrID): eAttribute = loader.getById('extra_attributes', extraAttrId, ['level']) cursor = connection.cursor() cursor.execute("select price from exattribute_level where level=%d" % eAttribute['level']) value = cursor.fetchone() cursor.close() sellPrice += int(value['price']) return sellPrice
def __init__(self,id = -1,name='',templateId= 0,x = 300,y = 400): '''初始化怪物类 ''' Character.__init__(self, id, name) self.CharacterType = 2 self.templateId = templateId self.baseInfo.setPosition((x,y)) data = loader.getById('npc',templateId, '*') self.formatInfo = {} if data: self.initialise(data)
def __init__(self, id=-1, name='', templateId=0, x=300, y=400): '''初始化怪物类 ''' Character.__init__(self, id, name) self.CharacterType = 2 self.templateId = templateId self.baseInfo.setPosition((x, y)) data = loader.getById('npc', templateId, '*') self.formatInfo = {} if data: self.initialise(data)
def getShopItemPrice(self, itemTemplateId, extraAttribute): '''获取商店物品的购买价格''' #all_ItemTemplate = dbaccess.all_ItemTemplate.values() sellPrice = dbaccess.all_ItemTemplate[itemTemplateId][ 'buyingRateCoin'] #loader.getById('item_template', itemTemplateId, ['buyingRateCoin'])['buyingRateCoin'] extraAttributes = eval('[' + extraAttribute + ']') for extraAttrId in extraAttributes: extraAttrId = int(extraAttrId) isValidExtraAttrID = loader.getById('extra_attributes', extraAttrId, ['id']) if ((extraAttrId != -1) and isValidExtraAttrID): eAttribute = loader.getById('extra_attributes', extraAttrId, ['level']) cursor = connection.cursor() cursor.execute( "select price from exattribute_level where level=%d" % eAttribute['level']) value = cursor.fetchone() cursor.close() sellPrice += int(value['price']) return sellPrice
def immediateFinishPractice(self, payType, payNum): '''立即完成修炼''' id = self._owner.baseInfo.id gold = self._owner.finance.getGold() coupon = self._owner.finance.getCoupon() exp = self._owner.level.getExp() if payType == 'gold': gold -= payNum else: coupon -= payNum if gold < 0: return {'result': False, 'reason': u'您的黄金不够'} if coupon < 0: return {'result': False, 'reason': u'您的礼券不够'} record = dbaccess.getPlayerPracticeRecord(id) countHit = record[3] totalExp = record[3] * record[6] exp += totalExp monster = loader.getById('npc', record[2], '*') monsterName = monster['name'] for i in range(0, countHit): self._owner.quest.onSuccessKillOneMonster(record[2], 'battle') # break # if item: # self._owner.pack.putOneItemIntoTempPackage(item,1) self.placePracticeItems(countHit, monster) self._owner.level.setExp(exp) if not self._owner.level.updateLevel(): dbaccess.updatePlayerInfo(id, { 'status': 1, 'gold': gold, 'coupon': coupon, 'exp': exp }) else: dbaccess.updatePlayerInfo(id, { 'status': 1, 'gold': gold, 'coupon': coupon }) self._owner.baseInfo.setStatus(1) self._owner.finance.setGold(gold) self._owner.finance.setCoupon(coupon) return {'result':True, 'data':{'monsterName':monsterName, 'totalExp':totalExp, 'countHit':countHit, \ 'gold':gold, 'coupon':coupon, 'status':self._owner.baseInfo.getStatus(), \ 'level':self._owner.level.getLevel()}}
def getPracticeInfo(self): '''获取玩家修炼的信息''' id = self._owner.baseInfo.id record = dbaccess.getPlayerPracticeRecord(id) monsterName = loader.getById('npc', record[2], ['name']) if not monsterName: return {'result':False, 'reason':u'没有找到修炼的怪物'} monsterName = monsterName['name'] countHit = record[3] finishTime = record[5] seconds = (finishTime - datetime.datetime.now()).seconds singleMonsterExpBonus = record[6] totalExp = singleMonsterExpBonus * countHit return {'countHit':countHit, 'seconds':seconds, 'totalExp':totalExp, 'monsterName':monsterName}
def immediateFinishPractice(self, payType, payNum): '''立即完成修炼''' id = self._owner.baseInfo.id gold = self._owner.finance.getGold() coupon = self._owner.finance.getCoupon() exp = self._owner.level.getExp() if payType == 'gold': gold -= payNum else: coupon -= payNum if gold < 0 : return {'result':False, 'reason':u'您的黄金不够'} if coupon < 0: return {'result':False, 'reason':u'您的礼券不够'} record = dbaccess.getPlayerPracticeRecord(id) countHit = record[3] totalExp = record[3] * record[6] exp += totalExp monster = loader.getById('npc', record[2], '*') monsterName = monster['name'] for i in range(0,countHit): self._owner.quest.onSuccessKillOneMonster(record[2],'battle') # break # if item: # self._owner.pack.putOneItemIntoTempPackage(item,1) self.placePracticeItems(countHit, monster) self._owner.level.setExp(exp) if not self._owner.level.updateLevel(): dbaccess.updatePlayerInfo(id, {'status':1, 'gold':gold, 'coupon':coupon, 'exp':exp}) else: dbaccess.updatePlayerInfo(id, {'status':1, 'gold':gold, 'coupon':coupon}) self._owner.baseInfo.setStatus(1) self._owner.finance.setGold(gold) self._owner.finance.setCoupon(coupon) return {'result':True, 'data':{'monsterName':monsterName, 'totalExp':totalExp, 'countHit':countHit, \ 'gold':gold, 'coupon':coupon, 'status':self._owner.baseInfo.getStatus(), \ 'level':self._owner.level.getLevel()}}
def getPracticeInfo(self): '''获取玩家修炼的信息''' id = self._owner.baseInfo.id record = dbaccess.getPlayerPracticeRecord(id) monsterName = loader.getById('npc', record[2], ['name']) if not monsterName: return {'result': False, 'reason': u'没有找到修炼的怪物'} monsterName = monsterName['name'] countHit = record[3] finishTime = record[5] seconds = (finishTime - datetime.datetime.now()).seconds singleMonsterExpBonus = record[6] totalExp = singleMonsterExpBonus * countHit return { 'countHit': countHit, 'seconds': seconds, 'totalExp': totalExp, 'monsterName': monsterName }
def getSingleMonsterPracticeExp(self, monsterId): id = self._owner.baseInfo.id monsterInfo = loader.getById('npc', monsterId, ['monsterGroupId', 'levelGroup']) if not monsterInfo: return False, Lg().g(439) levelList = list(monsterInfo['levelGroup'].split(';')) groupId = monsterInfo['monsterGroupId'] tempList = [] for level in levelList: level = int(level) tempList.append(level) caughtLevel = tempList[0] cursor = connection.cursor() cursor.execute("select expBonus from `monster_instance` where level=%d and groupId=%d" % (caughtLevel, groupId)) monsterInstance = cursor.fetchone() cursor.close() if not monsterInstance: return False, Lg().g(439) expBonus = monsterInstance['expBonus'] return True, expBonus,caughtLevel
def doWhenPracticeFinsihed(self, attrs): '''当修炼结束时''' id = self._owner.baseInfo.id practiceRecord = dbaccess.getPlayerPracticeRecord(id) monsterId = practiceRecord[2] countHit = practiceRecord[3] finishTime = practiceRecord[5] now = datetime.datetime.now() if not finishTime or (finishTime - now).seconds < 0: return self._owner.level.updateExp(attrs['exp']) # if not self._owner.level.updateLevel(): # dbaccess.updatePlayerInfo(id, attrs) self._owner.baseInfo.setStatus(1) npc = loader.getById('npc', monsterId, '*') if npc: # for i in range(0, countHit): # self._owner.quest.onSuccessKillOneMonster(monsterId) self.placePracticeItems(countHit, npc) practiceFinsihed(id)
def getShopItemExtraAttr(self, shopInfo): '''得到商店物品附加属性''' characterLevel = self._owner.level.getLevel() cursor = connection.cursor() sql = "select parameterMin,parameterMax from `shop_extra_attr_level_config` where type=%d and characterLevel=%d"\ % (shopInfo['extraAttrLevelConfigType'], characterLevel) cursor.execute(sql) result = cursor.fetchone() min = result['parameterMin'] max = result['parameterMax'] r = random.randint(min, max) cursor.execute( "select level from `exattribute_level` where value>=%d" % r) level = cursor.fetchone()['level'] cursor.execute("select * from `extra_attributes` where level=%d" % level) tempAttributeList = cursor.fetchall() r1 = random.randint(0, len(tempAttributeList) - 1) attributeInfo = tempAttributeList[r1] attributeInfo['attributeEffects'] = [] if attributeInfo['effects'] <> '-1' or attributeInfo[ 'effects'] <> u'-1': effects = attributeInfo['effects'].split(';') for effect in effects: effect = int(effect) description = loader.getById('effect', effect, ['description'])['description'] attributeInfo['attributeEffects'].append(description) else: script = attributeInfo['script'] script = util.parseScript(script) attributeInfo['attributeEffects'].append(script) return attributeInfo
def getSingleMonsterPracticeExp(self, monsterId): id = self._owner.baseInfo.id monsterInfo = loader.getById('npc', monsterId, ['monsterGroupId', 'levelGroup']) if not monsterInfo: return False, Lg().g(439) levelList = list(monsterInfo['levelGroup'].split(';')) groupId = monsterInfo['monsterGroupId'] tempList = [] for level in levelList: level = int(level) tempList.append(level) caughtLevel = tempList[0] cursor = connection.cursor() cursor.execute( "select expBonus from `monster_instance` where level=%d and groupId=%d" % (caughtLevel, groupId)) monsterInstance = cursor.fetchone() cursor.close() if not monsterInstance: return False, Lg().g(439) expBonus = monsterInstance['expBonus'] return True, expBonus, caughtLevel
def terminatePractice(self): ''' 终止玩家修炼 ''' id = self._owner.baseInfo.id exp = self._owner.level.getExp() record = dbaccess.getPlayerPracticeRecord(id) monsterId = record[2] startTime = record[4] finishTime = record[5] singleExpBonus = record[6] now = datetime.datetime.now() currentCountHit = int((now - startTime).seconds / (60 * 3)) int((finishTime - startTime).seconds / 60) currentExp = currentCountHit * singleExpBonus monster = loader.getById('npc', monsterId, '*') if not monster: return {'result': False, 'message': Lg().g(441)} for i in range(0, currentCountHit): pass # self._owner.quest.onSuccessKillOneMonster(monsterId) # break # if item: # self._owner.pack.putOneItemIntoTempPackage(item, currentCountHit) # pushMessage(str(self._owner.baseInfo.id),'newTempPackage') # self.placePracticeItems(currentCountHit, monster) monsterName = monster['name'] self._owner.level.setExp(exp + currentExp) dbaccess.updatePlayerInfo(id, {'status': 1}) self._owner.baseInfo.setStatus(1) return {'result':True, 'data':{'monsterName':monsterName, 'currentExp':currentExp, \ 'currentCountHit':currentCountHit, 'status':self._owner.baseInfo.getStatus(), \ 'level':self._owner.level.getLevel()}}
def getItemByDropping(self, dropConfigId): ''' 根据掉落配置得到物品 @param dropConfigId: 掉落配置id ''' dropConfig = loader.getById('drop_config', dropConfigId, '*') if not dropConfig or len(dropConfig.items()) == 0: log.err( _why= 'no item for the dropconfig dropConfigId(%d) characterId(%d)'%(dropConfigId,self._owner.baseInfo.id)) return None itemTemplate = self.getDropItemTemplate(dropConfig) # itemTemplate = dbaccess.all_ItemTemplate[1] if itemTemplate: isBound = 0 if itemTemplate['bindType']==1: isBound = 1 itemTemplate['id'] = 27 dropItem = Item(itemTemplateId =itemTemplate['id']) dropItem.attribute.setIsBound(isBound) # itemId = dropItem.InsertItemIntoDB(characterId = self._owner.baseInfo.id) # dropItem.baseInfo.setId(itemId) return dropItem else: return None
def terminatePractice(self): ''' 终止玩家修炼 ''' id = self._owner.baseInfo.id exp = self._owner.level.getExp() record = dbaccess.getPlayerPracticeRecord(id) monsterId = record[2] startTime = record[4] finishTime = record[5] singleExpBonus = record[6] now = datetime.datetime.now() currentCountHit = int((now - startTime).seconds / (60 * 3)) int((finishTime - startTime).seconds / 60) currentExp = currentCountHit * singleExpBonus monster = loader.getById('npc', monsterId, '*') if not monster: return {'result':False, 'message':Lg().g(441)} for i in range(0, currentCountHit): pass # self._owner.quest.onSuccessKillOneMonster(monsterId) # break # if item: # self._owner.pack.putOneItemIntoTempPackage(item, currentCountHit) # pushMessage(str(self._owner.baseInfo.id),'newTempPackage') # self.placePracticeItems(currentCountHit, monster) monsterName = monster['name'] self._owner.level.setExp(exp + currentExp) dbaccess.updatePlayerInfo(id, {'status':1}) self._owner.baseInfo.setStatus(1) return {'result':True, 'data':{'monsterName':monsterName, 'currentExp':currentExp, \ 'currentCountHit':currentCountHit, 'status':self._owner.baseInfo.getStatus(), \ 'level':self._owner.level.getLevel()}}
def initSkillBaseInfo(self): '''初始化技能基础信息''' skillInfo = loader.getById('skill', self.templateId, '*') if not skillInfo: raise "skill(%d) not found " % self.templateId self.setName(skillInfo['name'])
def getSkillBaseInfo(self): '''获取技能基础信息''' return loader.getById('skill', self.templateId, '*')
def Fight(self,ch ,de ,tag): '''产生每一个行动者的战斗数据''' if self.battlefield[ch]['died'] == 1: return {} if self.battlefield[de]['died'] == 1: return {} self.battlefield[ch]['attackNum'] = self.battlefield[ch]['attackNum'] + 1 self.battlefield[de]['defenseNum'] = self.battlefield[de]['defenseNum'] +1 owner = self.battlefield[ch] opponent = self.battlefield[de] data = {} data['actorsDBId'] = self.battlefield[ch]['id'] data['actors'] = ch data['actType'] = 103# 行动类型 data['isCrit']= 0 data['actorsFightType'] = self.battlefield[ch]['fightType']#角色的攻击类型,由角色的职业来决定 1 为近战 2为远程 data['actorsFigure'] = self.battlefield[ch]['figure'] #攻击者的形象 #---------------*------技能特效相关-------*---------------- data['skillId'] = -1# 技能id -1 表示没有使用技能 data['skillReleaseEffect'] = -1 #发动技能时自身产生的特效 data['skillthrowEffect'] = -1 # 技能投射的特效ID data['fixedPointEffectId'] = -1 # 定点特效ID data['startPosition'] = self.battlefield[ch]['position']#起始坐标 data['endPosition'] = [0,0]#结束坐标 data['actorsHp'] = self.battlefield[ch]['hp']#行动者当前血量值 data['actorsMp'] = self.battlefield[ch]['mp']#行动者当前魔力值 data['actorsMaxHp']= self.battlefield[ch]['maxHp']#行动者最大血量值 data['actorsMaxMp']= self.battlefield[ch]['maxMp']#行动者最大魔力值 data['actorLostHp'] = 0#行动者丢失血量 data['actorLostMp'] = 0#行动者丢失魔力 #--------------------*----受攻击者信息-----*--------------- data['victimDBId'] = self.battlefield[de]['id'] data['victim'] = de#受伤者的id data['victimFigure'] = self.battlefield[de]['figure'] #受攻击者的形象 data['victimPosition'] = self.battlefield[de]['position']#受伤者所处的位置 data['skillBearEffect'] = -1 #技能承受时产生的特效 data['victimFixedPointEffectId'] = -1#受伤者定点特效ID data['injuredType'] = 104#受伤者的受伤类型 104 受攻击 105 死亡 #106 miss #暴击 4破防 5暴击+破防 6 闪避 7 死亡 data['victimHp'] = self.battlefield[de]['hp']#受攻击者当前血量 data['victimMp'] = self.battlefield[de]['mp']#受攻击者当前魔力 data['victimMaxHp'] = self.battlefield[de]['maxHp']#受攻击者最大血量 data['victimMaxMp'] = self.battlefield[de]['maxMp']#受攻击者最大魔力 data['victimLostHp'] = 0#受攻击者丢失血量 data['victimLostMp'] = 0#受攻击者丢失魔力 if self.battlefield[ch]['camp'] == 1: data['endPosition'] = [data['victimPosition'][0]-100,data['victimPosition'][1]] else: data['endPosition'] = [data['victimPosition'][0]+100,data['victimPosition'][1]] #开始计算伤害 damageType = 104 skillId = self.ProcessSkill(owner) skillInfo = loader.getById('attackSkill',skillId,'*') data['skillId'] = skillId data['skillReleaseEffect'] = skillInfo['skillReleaseEffect'] data['skillthrowEffect'] = skillInfo['skillthrowEffect'] data['skillBearEffect'] = skillInfo['skillBearEffect'] #damage = 0 damage = self.doSkill(skillId, owner, opponent) reduction = opponent['defense'] isMissed = 0 #是否miss 0未miss 1 miss if skillId == owner['OrdinarySkills']: hitRate = (95 + owner['hitRate'] - opponent['dodgeRate']) r = random.uniform(0, 100) if r <= hitRate:#是否命中 命中 tag_cri = 0 #暴击标识 0未暴击 1暴击 tag_bogey = 0 #破防标识 0 未破防 1破防 r = random.uniform(0, 100) if r <= 30 and self.battlefield[ch]['figure'] in [1,2,3,4]:#owner['criRate']:#是否暴击 tag_cri = 1 self.battlefield[ch]['criNum'] = self.battlefield[ch]['criNum']+1 damage = damage * 1.5 data['isCrit'] =1 r = random.uniform(0, 100)#是否破防 if r <= owner['bogeyRate']: tag_bogey = 1 self.battlefield[ch]['bogeyNum'] = self.battlefield[ch]['bogeyNum']+1 reduction = 0 #破防后减伤为 0 if tag_cri==1 and tag_bogey==1: self.battlefield[ch]['cri_bogeyNum'] = self.battlefield[ch]['cri_bogeyNum']+1 else:#未命中 self.battlefield[ch]['beDodgeNum'] = self.battlefield[ch]['beDodgeNum']+1 self.battlefield[de]['dodgeNum'] = self.battlefield[de]['dodgeNum']+1 damageType = 104 isMissed = 1 damage = 0 if isMissed !=1: #是否miss damage = damage - (float(reduction) * 0.000215) if damage < 1: #如果没有miss 造成的最终伤害小于1时,强制掉血1点 damage = 1 opponent['hp'] = opponent['hp'] - damage if opponent['hp']<=0 :#受攻击者的血量小于或等于0 死亡 damageType =105 #print "one fighter died %d"%de self.battlefield[de]['hp'] = 0 opponent['hp'] = 0 if owner['hp'] <= 0: owner['hp'] =0 data['victimLostHp'] = -(data['victimHp'] - opponent['hp']) data['victimLostMp'] = -(data['victimMp'] - opponent['mp']) data['actorLostHp'] = -(data['actorsHp'] - owner['hp']) data['actorLostMp'] = -(data['actorsMp'] - owner['mp']) data['injuredType'] = damageType #记录保留战斗后的数据 self.battlefield[de]['hp'] = opponent['hp'] self.battlefield[de]['mp'] = opponent['mp'] self.battlefield[ch]['hp'] = owner['hp'] self.battlefield[ch]['mp'] = owner['mp'] if damageType == 105: self.battlefield[de]['died'] = 1 #print "% id died"%de if opponent['camp'] ==1: self.allFighter['ch'].remove(de) else: self.allFighter['de'].remove(de) return data
def Fight(self, ch, de, tag): '''产生每一个行动者的战斗数据''' if self.battlefield[ch]['died'] == 1: return {} if self.battlefield[de]['died'] == 1: return {} self.battlefield[ch][ 'attackNum'] = self.battlefield[ch]['attackNum'] + 1 self.battlefield[de][ 'defenseNum'] = self.battlefield[de]['defenseNum'] + 1 owner = self.battlefield[ch] opponent = self.battlefield[de] data = {} data['actorsDBId'] = self.battlefield[ch]['id'] data['actors'] = ch data['actType'] = 103 # 行动类型 data['isCrit'] = 0 data['actorsFightType'] = self.battlefield[ch][ 'fightType'] #角色的攻击类型,由角色的职业来决定 1 为近战 2为远程 data['actorsFigure'] = self.battlefield[ch]['figure'] #攻击者的形象 #---------------*------技能特效相关-------*---------------- data['skillId'] = -1 # 技能id -1 表示没有使用技能 data['skillReleaseEffect'] = -1 #发动技能时自身产生的特效 data['skillthrowEffect'] = -1 # 技能投射的特效ID data['fixedPointEffectId'] = -1 # 定点特效ID data['startPosition'] = self.battlefield[ch]['position'] #起始坐标 data['endPosition'] = [0, 0] #结束坐标 data['actorsHp'] = self.battlefield[ch]['hp'] #行动者当前血量值 data['actorsMp'] = self.battlefield[ch]['mp'] #行动者当前魔力值 data['actorsMaxHp'] = self.battlefield[ch]['maxHp'] #行动者最大血量值 data['actorsMaxMp'] = self.battlefield[ch]['maxMp'] #行动者最大魔力值 data['actorLostHp'] = 0 #行动者丢失血量 data['actorLostMp'] = 0 #行动者丢失魔力 #--------------------*----受攻击者信息-----*--------------- data['victimDBId'] = self.battlefield[de]['id'] data['victim'] = de #受伤者的id data['victimFigure'] = self.battlefield[de]['figure'] #受攻击者的形象 data['victimPosition'] = self.battlefield[de]['position'] #受伤者所处的位置 data['skillBearEffect'] = -1 #技能承受时产生的特效 data['victimFixedPointEffectId'] = -1 #受伤者定点特效ID data[ 'injuredType'] = 104 #受伤者的受伤类型 104 受攻击 105 死亡 #106 miss #暴击 4破防 5暴击+破防 6 闪避 7 死亡 data['victimHp'] = self.battlefield[de]['hp'] #受攻击者当前血量 data['victimMp'] = self.battlefield[de]['mp'] #受攻击者当前魔力 data['victimMaxHp'] = self.battlefield[de]['maxHp'] #受攻击者最大血量 data['victimMaxMp'] = self.battlefield[de]['maxMp'] #受攻击者最大魔力 data['victimLostHp'] = 0 #受攻击者丢失血量 data['victimLostMp'] = 0 #受攻击者丢失魔力 if self.battlefield[ch]['camp'] == 1: data['endPosition'] = [ data['victimPosition'][0] - 100, data['victimPosition'][1] ] else: data['endPosition'] = [ data['victimPosition'][0] + 100, data['victimPosition'][1] ] #开始计算伤害 damageType = 104 skillId = self.ProcessSkill(owner) skillInfo = loader.getById('attackSkill', skillId, '*') data['skillId'] = skillId data['skillReleaseEffect'] = skillInfo['skillReleaseEffect'] data['skillthrowEffect'] = skillInfo['skillthrowEffect'] data['skillBearEffect'] = skillInfo['skillBearEffect'] #damage = 0 damage = self.doSkill(skillId, owner, opponent) reduction = opponent['defense'] isMissed = 0 #是否miss 0未miss 1 miss if skillId == owner['OrdinarySkills']: hitRate = (95 + owner['hitRate'] - opponent['dodgeRate']) r = random.uniform(0, 100) if r <= hitRate: #是否命中 命中 tag_cri = 0 #暴击标识 0未暴击 1暴击 tag_bogey = 0 #破防标识 0 未破防 1破防 r = random.uniform(0, 100) if r <= 30 and self.battlefield[ch]['figure'] in [ 1, 2, 3, 4 ]: #owner['criRate']:#是否暴击 tag_cri = 1 self.battlefield[ch][ 'criNum'] = self.battlefield[ch]['criNum'] + 1 damage = damage * 1.5 data['isCrit'] = 1 r = random.uniform(0, 100) #是否破防 if r <= owner['bogeyRate']: tag_bogey = 1 self.battlefield[ch][ 'bogeyNum'] = self.battlefield[ch]['bogeyNum'] + 1 reduction = 0 #破防后减伤为 0 if tag_cri == 1 and tag_bogey == 1: self.battlefield[ch]['cri_bogeyNum'] = self.battlefield[ ch]['cri_bogeyNum'] + 1 else: #未命中 self.battlefield[ch][ 'beDodgeNum'] = self.battlefield[ch]['beDodgeNum'] + 1 self.battlefield[de][ 'dodgeNum'] = self.battlefield[de]['dodgeNum'] + 1 damageType = 104 isMissed = 1 damage = 0 if isMissed != 1: #是否miss damage = damage - (float(reduction) * 0.000215) if damage < 1: #如果没有miss 造成的最终伤害小于1时,强制掉血1点 damage = 1 opponent['hp'] = opponent['hp'] - damage if opponent['hp'] <= 0: #受攻击者的血量小于或等于0 死亡 damageType = 105 #print "one fighter died %d"%de self.battlefield[de]['hp'] = 0 opponent['hp'] = 0 if owner['hp'] <= 0: owner['hp'] = 0 data['victimLostHp'] = -(data['victimHp'] - opponent['hp']) data['victimLostMp'] = -(data['victimMp'] - opponent['mp']) data['actorLostHp'] = -(data['actorsHp'] - owner['hp']) data['actorLostMp'] = -(data['actorsMp'] - owner['mp']) data['injuredType'] = damageType #记录保留战斗后的数据 self.battlefield[de]['hp'] = opponent['hp'] self.battlefield[de]['mp'] = opponent['mp'] self.battlefield[ch]['hp'] = owner['hp'] self.battlefield[ch]['mp'] = owner['mp'] if damageType == 105: self.battlefield[de]['died'] = 1 #print "% id died"%de if opponent['camp'] == 1: self.allFighter['ch'].remove(de) else: self.allFighter['de'].remove(de) return data
def initSkillBaseInfo(self): '''初始化技能基础信息''' skillInfo = loader.getById('skill', self.templateId, '*') if not skillInfo: raise "skill(%d) not found "%self.templateId self.setName(skillInfo['name'])