def terminateLobbyOperation(dynamicId,characterId,operaType): ''' 中断大厅操作 @param operaType: 操作类型:1、训练 2、卖艺 ''' player = PlayersManager().getPlayerByID(characterId) if player is None: return {'result':False,'message':Lg().g(18)} level = player.level.getLevel() lobbyRecord = dbaccess.getPlayerLobbyRecord(characterId) if lobbyRecord[2] == None or lobbyRecord[3] == None: return {'result':False, 'message':u'您的大厅操作记录不正确'} now = datetime.datetime.now() duration = int(((lobbyRecord[3] - now).seconds) / 3600) bonus = 0 exp = player.level.getExp() if operaType == 1: if lobbyRecord[4] == 1:#双倍奖励 bonus = int(math.pow((level + 1) * 33, 1.15) * duration * 2) else: bonus = int(math.pow((level + 1) * 33, 1.15) * duration) exp += bonus dbaccess.updatePlayerInfo(characterId, {'status':1, 'exp':exp}) player.level.setExp(exp) player.level.updateLevel() player.baseInfo.setStatus(1) else: pass return {'result':True, 'data':{'bonus':bonus, 'level':player.level.getLevel()}}
def _doSleep(self, index, payType, payNum, energy, energyDelta, gold, coupon, restRecord, ttype): pid = self._owner.baseInfo.id if payType == 'gold': gold -= payNum if gold < 0: return {'result':False, 'message':u'您的黄金量不足'} if ttype == 'spoor': if restRecord[index] >= 2: return {'result':False, 'message':u'您今天不能此操作'} else: if restRecord[index] >= 1: return {'result':False, 'message':u'您今天不能此操作'} energy += energyDelta if energy > 200: return {'result':False, 'message':u'您的活力已达上限'} dbaccess.updatePlayerInfo(pid, {'energy':energy, 'gold':gold}) else: coupon -= payNum if coupon < 0: return {'result':False, 'message':u'您的礼券量不足'} energy += energyDelta if energy > 200: return {'result':False, 'message':u'您的活力已达上限'} dbaccess.updatePlayerInfo(pid, {'energy':energy, 'coupon':coupon}) return {'result':True, 'data':{'gold':gold, 'coupon':coupon, 'energy':energy}}
def doFirstRechargeBound(self): '''首次充值奖励 ''' package = self._owner.pack._package.getPackageByType(1) nowsize = package.getSize()+1 package.setSize(nowsize) dbaccess.updatePlayerInfo(self._owner.baseInfo.id, {'packageSize':nowsize}) self._owner.pack.putNewItemsInPackage(20700071,1)#添加首充礼包
def doFirstRechargeBound(self): '''首次充值奖励 ''' package = self._owner.pack._package.getPackageByType(1) nowsize = package.getSize() + 1 package.setSize(nowsize) dbaccess.updatePlayerInfo(self._owner.baseInfo.id, {'packageSize': nowsize}) self._owner.pack.putNewItemsInPackage(20700071, 1) #添加首充礼包
def pratice(self, monsterId, singleExpBonus, monsterCount, monsterLevel): ''' 修炼怪物 @param monsterId: 怪物id @param singleExpBonus: 每个怪得到的经验奖励 @param monsterCount: 修炼怪物数量 @param monsterLevel: 修炼怪物等级 ''' id = self._owner.baseInfo.id energy = self._owner.attribute.getEnergy() if energy == 0: return {'result': False, 'message': Lg().g(440)} coin = self._owner.finance.getCoin() exp = self._owner.level.getExp() status = 2 #修炼状态 costEnergy = monsterCount * 1 totalExp = singleExpBonus * monsterCount costCoin = int( math.pow(monsterLevel, 1.1) * 9 * (1 + (monsterLevel / 150.0))) * monsterCount duration = 60 * 3 * monsterCount energy -= costEnergy coin -= costCoin exp += totalExp if energy < 0: return {'result': False, 'message': Lg().g(440)} if coin < 0: return {'result': False, 'message': Lg().g(267)} dbaccess.updatePlayerInfo(id, { 'status': status, 'coin': coin, 'energy': energy }) startTime = datetime.datetime.now() finishTime = startTime + datetime.timedelta(minutes=3 * monsterCount) dbaccess.updatePlayerPracticeRecord(id, {'monsterId':monsterId, 'countHit':monsterCount, \ 'startTime':str(startTime), 'finishTime':str(finishTime), \ 'singleExpBonus':singleExpBonus}) reactor.callLater(int(duration), self.doWhenPracticeFinsihed, { 'status': 1, 'exp': exp }) self._owner.baseInfo.setStatus(status) self._owner.attribute.setEnergy(energy) self._owner.finance.setCoin(coin) return { 'result': True, 'data': { 'status': self._owner.baseInfo.getStatus() } }
def doWhenLobbyOperateFinsihed(attrs, player): '''当大厅操作时间结束时''' now = datetime.datetime.now() lobbyRecord = dbaccess.getPlayerLobbyRecord(player.baseInfo.id) finishTime = lobbyRecord[3] if (not finishTime) or (finishTime > now): return dbaccess.updatePlayerInfo(player.baseInfo.id, attrs) # pushMessage(str(player.baseInfo.id), 'finish') player.baseInfo.setStatus(1) player.finance.setCoin(attrs['coin']) player.level.setExp(attrs['exp']) player.level.updateLevel()
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}}
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 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 packageExpansion(self,position): '''包裹扩充''' package = self.pack PurposeSize = position +1 start = package.getSize()-self.INITSIZE if start<0: return {'result':False,'message':u'坑爹呢!'} end = PurposeSize - package.getSize() cost = 0 while end>0: start += 1 cost += start*2 end -=1 if self._owner.finance.getGold()<cost: return {'result':False,'message':Lg().g(190)} self._owner.finance.updateGold(self._owner.finance.getGold()-cost) self._owner.updatePlayerInfo() package.setSize(PurposeSize) dbaccess.updatePlayerInfo(self._owner.baseInfo.id, {'famPackSize':PurposeSize}) pushPromptedMessage(Lg().g(352)%cost,[self._owner.getDynamicId()]) return {'result':True,'message':Lg().g(352)%cost}
def pratice(self, monsterId, singleExpBonus, monsterCount,monsterLevel): ''' 修炼怪物 @param monsterId: 怪物id @param singleExpBonus: 每个怪得到的经验奖励 @param monsterCount: 修炼怪物数量 @param monsterLevel: 修炼怪物等级 ''' id = self._owner.baseInfo.id energy = self._owner.attribute.getEnergy() if energy == 0: return {'result':False, 'message':Lg().g(440)} coin = self._owner.finance.getCoin() exp = self._owner.level.getExp() status = 2#修炼状态 costEnergy = monsterCount * 1 totalExp = singleExpBonus * monsterCount costCoin = int(math.pow(monsterLevel,1.1)*9*(1+(monsterLevel/150.0)))*monsterCount duration = 60 * 3 * monsterCount energy -= costEnergy coin -= costCoin exp += totalExp if energy < 0: return {'result':False, 'message':Lg().g(440)} if coin < 0: return {'result':False, 'message':Lg().g(267)} dbaccess.updatePlayerInfo(id, {'status':status, 'coin':coin, 'energy':energy}) startTime = datetime.datetime.now() finishTime = startTime + datetime.timedelta(minutes = 3 * monsterCount) dbaccess.updatePlayerPracticeRecord(id, {'monsterId':monsterId, 'countHit':monsterCount, \ 'startTime':str(startTime), 'finishTime':str(finishTime), \ 'singleExpBonus':singleExpBonus}) reactor.callLater(int(duration), self.doWhenPracticeFinsihed, {'status':1, 'exp':exp}) self._owner.baseInfo.setStatus(status) self._owner.attribute.setEnergy(energy) self._owner.finance.setCoin(coin) return {'result':True, 'data':{'status':self._owner.baseInfo.getStatus()}}
def packageExpansion(self,packageType,curpage,position): '''包裹扩充''' package = self._package.getPackageByType(packageType) PurposeSize = (curpage-1)*self._package.LIMIT + position +1 start = package.getSize()-24 if start<0: return {'result':False,'message':u'坑爹呢!'} end = PurposeSize - package.getSize() if end<0: return {'result':False,'message':u'坑爹呢!'} cost = 0 while end>0: start += 1 cost += start*2 end -=1 if self._owner.finance.getGold()<cost: return {'result':False,'message':Lg().g(190)} self._owner.finance.updateGold(self._owner.finance.getGold()-cost) self._owner.updatePlayerInfo() package.setSize(PurposeSize) dbaccess.updatePlayerInfo(self._owner.baseInfo.id, {'packageSize':PurposeSize}) pushPromptedMessage(Lg().g(352)%cost,[self._owner.getDynamicId()]) return {'result':True,'message':Lg().g(352)%cost}
def terminateLobbyOperation(dynamicId, characterId, operaType): ''' 中断大厅操作 @param operaType: 操作类型:1、训练 2、卖艺 ''' player = PlayersManager().getPlayerByID(characterId) if player is None: return {'result': False, 'message': Lg().g(18)} level = player.level.getLevel() lobbyRecord = dbaccess.getPlayerLobbyRecord(characterId) if lobbyRecord[2] == None or lobbyRecord[3] == None: return {'result': False, 'message': u'您的大厅操作记录不正确'} now = datetime.datetime.now() duration = int(((lobbyRecord[3] - now).seconds) / 3600) bonus = 0 exp = player.level.getExp() if operaType == 1: if lobbyRecord[4] == 1: #双倍奖励 bonus = int(math.pow((level + 1) * 33, 1.15) * duration * 2) else: bonus = int(math.pow((level + 1) * 33, 1.15) * duration) exp += bonus dbaccess.updatePlayerInfo(characterId, {'status': 1, 'exp': exp}) player.level.setExp(exp) player.level.updateLevel() player.baseInfo.setStatus(1) else: pass return { 'result': True, 'data': { 'bonus': bonus, 'level': player.level.getLevel() } }
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 packageExpansion(self, packageType, curpage, position): '''包裹扩充''' package = self._package.getPackageByType(packageType) PurposeSize = (curpage - 1) * self._package.LIMIT + position + 1 start = package.getSize() - 24 if start < 0: return {'result': False, 'message': u'坑爹呢!'} end = PurposeSize - package.getSize() if end < 0: return {'result': False, 'message': u'坑爹呢!'} cost = 0 while end > 0: start += 1 cost += start * 2 end -= 1 if self._owner.finance.getGold() < cost: return {'result': False, 'message': Lg().g(190)} self._owner.finance.updateGold(self._owner.finance.getGold() - cost) self._owner.updatePlayerInfo() package.setSize(PurposeSize) dbaccess.updatePlayerInfo(self._owner.baseInfo.id, {'packageSize': PurposeSize}) pushPromptedMessage(Lg().g(352) % cost, [self._owner.getDynamicId()]) return {'result': True, 'message': Lg().g(352) % cost}
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 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}}
def doRest(self,ttype,payType,payNum): '''宿屋休息''' pid = self._owner.baseInfo.id profession = self._owner.profession.getProfession() level = self._owner.level.getLevel() coin = self._owner.finance.getCoin() gold = self._owner.finance.getGold() coupon = self._owner.finance.getCoupon() hp = self.getHp() mp = self.getMp() energy = self.getEnergy() count = 0 restRecord = dbaccess.getPlayerRestRecord(pid) if ttype == 'meal':#用餐 hp = self.getMaxHp(profession, pid, level) mp = self.getMaxMp(profession, pid, level) coin -= payNum if coin < 0: return {'result':False, 'message':Lg().g(267)} count = -1 dbaccess.updatePlayerInfo(pid, {'hp':hp, 'mp':mp, 'coin':coin}) elif ttype == 'nap':#小憩 energyDelta = payNum result = self._doSleep(2, payType, payNum, energy, energyDelta, gold, coupon, restRecord, ttype) if not result['result']: return result gold = result['data']['gold'] coupon = result['data']['coupon'] energy = result['data']['energy'] count = 1 - (int(restRecord[2]) + 1) dbaccess.updatePlayerRestRecord(pid, {'napCount':restRecord[2] + 1}) elif ttype == 'lightSleep':#浅睡 energyDelta = payNum result = self._doSleep(3, payType, payNum, energy, energyDelta, gold, coupon, restRecord, ttype) if not result['result']: return result gold = result['data']['gold'] coupon = result['data']['coupon'] energy = result['data']['energy'] count = 1 - (int(restRecord[3]) + 1) dbaccess.updatePlayerRestRecord(pid, {'lightSleepCount':restRecord[3] + 1}) elif ttype == 'peacefulSleep':#安眠 energyDelta = payNum result = self._doSleep(4, payType, payNum, energy, energyDelta, gold, coupon, restRecord, ttype) if not result['result']: return result gold = result['data']['gold'] coupon = result['data']['coupon'] energy = result['data']['energy'] count = 1 - (int(restRecord[4]) + 1) dbaccess.updatePlayerRestRecord(pid, {'peacefulSleepCount':restRecord[4] + 1}) elif ttype == 'spoor':#酣睡 energyDelta = payNum result = self._doSleep(5, payType, payNum, energy, energyDelta, gold, coupon, restRecord, ttype) if not result['result']: return result gold = result['data']['gold'] coupon = result['data']['coupon'] energy = result['data']['energy'] count = 2 - (int(restRecord[5]) + 1) dbaccess.updatePlayerRestRecord(pid, {'spoorCount':restRecord[5] + 1}) self.setHp(hp) self.setMp(mp) self.setEnergy(energy) self._owner.finance.setCoin(coin) self._owner.finance.setGold(gold) self._owner.finance.setCoupon(coupon) return {'result':True, 'data':{'hp':hp, 'mp':mp, 'energy':energy, 'gold':gold, \ 'coupon':coupon, 'coin':coin, 'type':ttype, 'count':count}}