示例#1
0
	def emailOpen(self, id):
		"""
		打开邮件
		"""
		
		if not self.email.has_key(id):
			return {'msg':'email_not_exist'}
		
		if self.email[id]['open']:
			return {'msg':'email_already_open'}
		
		usr = self.user
		emailConf = config.getConfig('email')
		emailInfo = emailConf[self.email[id]['emailid']]
		if emailInfo:
			awd = {}
			awd = drop.open(usr, emailInfo['dropid'], awd)
			awd = drop.makeData(awd, {})
		self.email[id]['open'] = True
		
		self.save()
		
		data = awd
		data['email_update'] = self.email[id]
		return data
示例#2
0
    def garcha_skill10(usr):
        """
		求技能10次
		"""

        gameConf = config.getConfig('game')

        goldCost = gameConf['garcha_skill_10_price']['gold']
        gemCost = gameConf['garcha_skill_10_price']['gem']

        if usr.gold < goldCost:
            return {'msg': 'gold_not_enough'}
        if usr.gem < gemCost:
            return {'msg': 'gem_not_enough'}

        awd = {}
        awd = drop.open(usr, gameConf['garcha_skill_10_dropid1'], awd)

        for i in range(9):
            awd = drop.open(usr, gameConf['garcha_skill_10_dropid2'], awd)

        data = drop.makeData(awd, {})

        usr.gold = usr.gold - goldCost
        usr.gem = usr.gem - gemCost

        usr.save()

        data['gold'] = usr.gold
        data['gem'] = usr.gem
        return data
示例#3
0
    def inviteAward(usr, inviteCount):
        """
		邀请领奖
		"""

        if inviteCount > len(usr.invite['invite']):
            return {'msg': 'invite_count_not_enough'}

        while len(usr.invite['invite_award']) < (inviteCount + 1):
            usr.invite['invite_award'].append('')

        if usr.invite['invite_award'][inviteCount]:
            return {'msg': 'invite_award_already_have'}

        inviteConf = config.getConfig('invite')

        dropid = inviteConf['invite_award'][inviteCount - 1]
        if not dropid:
            return {'msg': 'invite_not_have_award'}

        usr.invite['invite_award'][inviteCount] = dropid
        awd = {}
        awd = drop.open(usr, dropid, awd)
        data = drop.makeData(awd, {})
        #data.update(invite.getClientData(usr))
        usr.save()

        data['invite_award'] = []
        for (i, di) in enumerate(usr.invite['invite_award']):
            if di:
                data['invite_award'].append(i + 1)

        return data
示例#4
0
	def garcha_skill(usr, nature):
		"""
		求技能
		"""
		gameConf = config.getConfig('game')
		
		if (nature > len(gameConf['garcha_skill_dropid'])) or (nature < 0):
			return {'msg':'parameter_bad'}
				
		goldCost = gameConf['garcha_skill_price'][nature - 1]['gold']
		gemCost = gameConf['garcha_skill_price'][nature - 1]['gem']
		
		if int(goldCost) == 0 and int(gemCost) == 0:
			return {'msg':'parameter_bad'}
		
		if usr.gold < goldCost:
			return {'msg':'gold_not_enough'}
		if usr.gem < gemCost:
			return {'msg':'gem_not_enough'}	
				
		awd = {}
		awd = drop.open(usr, gameConf['garcha_skill_dropid'][nature - 1], awd)	
			
		data = drop.makeData(awd, {})
		
		usr.gold = usr.gold - goldCost
		usr.gem = usr.gem - gemCost
		
		data['gold'] = usr.gold
		data['gem'] = usr.gem
		return data
示例#5
0
    def emailOpen(self, id):
        """
		打开邮件
		"""

        if not self.email.has_key(id):
            return {'msg': 'email_not_exist'}

        if self.email[id]['open']:
            return {'msg': 'email_already_open'}

        usr = self.user
        emailConf = config.getConfig('email')
        emailInfo = emailConf[self.email[id]['emailid']]
        if emailInfo:
            awd = {}
            awd = drop.open(usr, emailInfo['dropid'], awd)
            awd = drop.makeData(awd, {})
        self.email[id]['open'] = True

        self.save()

        data = awd
        data['email_update'] = self.email[id]
        return data
示例#6
0
	def inviteAward(usr, inviteCount):
		"""
		邀请领奖
		"""
		
		if inviteCount > len(usr.invite['invite']):
			return {'msg':'invite_count_not_enough'}
							
		while len(usr.invite['invite_award']) < (inviteCount + 1):
			usr.invite['invite_award'].append('')
		
		if usr.invite['invite_award'][inviteCount]:
			return {'msg':'invite_award_already_have'}
				
		inviteConf = config.getConfig('invite')
		
		dropid = inviteConf['invite_award'][inviteCount - 1]
		if not dropid:
			return {'msg': 'invite_not_have_award'}
					
		usr.invite['invite_award'][inviteCount] = dropid
		awd = {}
		awd = drop.open(usr, dropid, awd)		
		data = drop.makeData(awd, {})				
		#data.update(invite.getClientData(usr))
		usr.save()
		
		data['invite_award'] = []
		for (i, di) in enumerate(usr.invite['invite_award']):
			if di:
				data['invite_award'].append(i + 1)			
		
		return data
示例#7
0
	def garcha_skill10(usr):
		"""
		求技能10次
		"""
		
		gameConf = config.getConfig('game')
		
		goldCost = gameConf['garcha_skill_10_price']['gold']
		gemCost = gameConf['garcha_skill_10_price']['gem']
		
		if usr.gold < goldCost:
			return {'msg':'gold_not_enough'}
		if usr.gem < gemCost:
			return {'msg':'gem_not_enough'}	
				
		awd = {}
		awd = drop.open(usr, gameConf['garcha_skill_10_dropid1'], awd)
		
		for i in range(9):
			awd = drop.open(usr, gameConf['garcha_skill_10_dropid2'], awd)
					
		data = drop.makeData(awd, {})
		
		usr.gold = usr.gold - goldCost
		usr.gem = usr.gem - gemCost
		
		usr.save()
		
		data['gold'] = usr.gold
		data['gem'] = usr.gem
		return data
示例#8
0
	def draw_award(usr, position):
		"""
		开服奖励
		"""
		openAwardConf = config.getConfig('open_award')
		drawidx = []
		
		for t in usr.signin['draw_award_time']:
			if is_same_day(t, currentTime()):
				return {'msg':'open_award_already_get'}
		
		for idx, ad in enumerate(openAwardConf['draw_award']):
			 if len(usr.signin['draw_award_time']) > idx and not usr.signin['draw_award_time'][idx]:
			 	continue
			 if ad['day'] > len(usr.signin['draw_award_time']):
			 	continue			 	
			 drawidx.append(idx)
			 
		if not drawidx:
			return {'msg':'open_award_already_get'}
			
		adidx = random.sample(drawidx, 1)[0]
		ad = openAwardConf['draw_award'][adidx]
		awd = {}
		awd = drop.open(usr, ad['dropid'], awd)
		while len(usr.signin['draw_award_time']) <= adidx:
			usr.signin['draw_award_time'].append({})
		usr.signin['draw_award_time'][adidx] = {'time':currentTime(), 'position': position}
		usr.save()
		data = drop.makeData(awd, {})
		
		return data	
示例#9
0
    def garcha_skill(usr, nature):
        """
		求技能
		"""
        gameConf = config.getConfig('game')

        if (nature > len(gameConf['garcha_skill_dropid'])) or (nature < 0):
            return {'msg': 'parameter_bad'}

        goldCost = gameConf['garcha_skill_price'][nature - 1]['gold']
        gemCost = gameConf['garcha_skill_price'][nature - 1]['gem']

        if int(goldCost) == 0 and int(gemCost) == 0:
            return {'msg': 'parameter_bad'}

        if usr.gold < goldCost:
            return {'msg': 'gold_not_enough'}
        if usr.gem < gemCost:
            return {'msg': 'gem_not_enough'}

        awd = {}
        awd = drop.open(usr, gameConf['garcha_skill_dropid'][nature - 1], awd)

        data = drop.makeData(awd, {})

        usr.gold = usr.gold - goldCost
        usr.gem = usr.gem - gemCost

        data['gold'] = usr.gold
        data['gem'] = usr.gem
        return data
示例#10
0
文件: arena.py 项目: xueboy/cardgameX
    def defeate(usr):
        """
		击败
		"""
        res = None
        if usr.arena.has_key('challenge_roleid'):

            if SIGLE_SERVER:
                from arenarank.routine.arena import arena as arenaR
                return arenaR.defeat(str(usr.roleid),
                                     str(usr.arena['challenge_roleid']))
            else:
                res = json.loads(
                    curl.url(
                        ARENE_SERVER + '/arena/defeat/', None, {
                            'offence_roleid': usr.roleid,
                            'defence_roleid': usr.arena['challenge_roleid']
                        }))

            arenaLootConf = config.getConfig('arena_loot')
            gameConf = config.getConfig('game')

            if res.has_key('msg'):
                return res

            alreadyReach = False
            for item in gameConf['arena_rank_award']:
                if item['rank'] >= res['position'] and (
                        not usr.arena['rank_award'].has_key(item['rank'])):
                    usr.arena['rank_award'][item['rank']] = True

            arenaLootInfo = arenaLootConf[usr.level - 1]
            challengeRole = usr.__class__.get(usr.arena['challenge_roleid'])
            challengeRole.gold = challengeRole.gold - arenaLootInfo['gold']
            if challengeRole.gold < 0:
                challengeRole.gold = 0
            challengeRole.notify_gold()
            challengeRole.save()
            del usr.arena['challenge_roleid']
            card = None
            gold = 0
            skl = None
            data = {}
            if usr.arena.has_key('loot'):
                data = drop.do_award(usr, usr.arena['loot'], data)
                data = drop.makeData(data, res, 'award')

            usr.gainExp(arenaLootInfo['exp'])
            usr.gold = usr.gold + arenaLootInfo['gold']
            data['exp'] = usr.exp
            data['level'] = usr.level
            data['gold'] = usr.gold
            usr.save()
            return data
        return {'msg': 'arena_ladder_have_not_chellenge'}
示例#11
0
    def explore(usr):
        """
		探险
		"""
        explore.update_explore(usr)

        exploreConf = config.getConfig('explore_award')
        exploreInfo = exploreConf[str(usr.level)]
        gameConf = config.getConfig('game')
        usr.explore['times'] = usr.explore['times'] + 1
        if usr.explore['times'] >= gameConf['explore_max_times']:
            return {'msg': 'explore_max_times'}
        usr.explore['last_update_times_time'] = currentTime()
        awd = {}
        awd = drop.roll(exploreInfo[0], awd)
        rv = random.uniform(gameConf['explore_gold_and_exp_revision'][0],
                            gameConf['explore_gold_and_exp_revision'][1])
        if awd.has_key('gold'):
            awd['gold'] = awd['gold'] * rv
        if awd.has_key('exp'):
            awd['exp'] = awd['exp'] * rv
        rd = randint()
        if rd < gameConf['explore_critical_probability'] + usr.explore[
                'critical_count'] * gameConf[
                    'explore_critical_probability_growth']:
            for key in awd:
                awd[key] = awd[key] * gameConf['explore_critical_income_rate']

        awd = drop.roll(exploreInfo[1], awd)
        awd = drop.do_award(usr, awd, {})
        data = drop.makeData(awd, {})

        rd = randint()
        if rd < gameConf['explore_extra_times_probability']:
            usr.explore['times'] = usr.explore['times'] - 1
            if usr.explore['times'] < 0:
                usr.explore['times'] = 0
            data['explore_times'] = usr.explore['times']

        rd = randint()
        if rd < gameConf['explore_friend_probability']:
            friendData = explore.recommend_friend(usr)
            if friendData:
                data['friend_data'] = friendData

        rd = randint()
        if rd < gameConf['infection_explore_probability']:
            infaction_battle = infection.explore_encounter(usr, gameConf)
            if infaction_battle:
                data['infaction_battle'] = infaction_battle

        usr.save()
        return data
示例#12
0
def end(request):
    """
	结束地下城
	"""
    battleId = request.GET['battle_id']
    fieldId = request.GET['field_id']
    star = request.GET['star']
    star = int(star)
    usr = request.user
    dun = usr.getDungeon()
    dunConf = config.getConfig('dungeon')

    if dun.curren_field['battleid'] != battleId or fieldId != dun.curren_field[
            'fieldid']:
        return {'msg': 'dungeon_finished'}

    for battleConf in dunConf:
        if battleConf['battleId'] == battleId:
            for fieldConf in battleConf['field']:
                if fieldConf['fieldId'] == fieldId:
                    gameConf = config.getConfig('game')
                    exp = fieldConf['exp']
                    if dun.daily_recored[battleId][fieldId]['vip_reset']:
                        exp = int(exp * gameConf['dungeon_reset_benefit'])
                    usr.gainExp(exp)
                    data = {}
                    if fieldConf['dropid']:
                        awd = {}
                        awd = drop.open(usr, fieldConf['dropid'], awd)
                        data = dun.award()
                        data = drop.makeData(awd, data)

                    data['exp'] = usr.exp
                    data['level'] = usr.level
                    data['gold'] = usr.gold

                    infectionBattle = infection.dungeon_encounter(usr)
                    if infectionBattle:
                        if not infectionBattle.has_key('msg'):
                            data['infection_battle'] = infectionBattle
                    #if dun.curren_field['battleid'] == dun.last_dungeon['battleid'] and dun.curren_field['fieldid'] == dun.last_dungeon['fieldid']:
                    #	dun.nextField()
                    dun.curren_field = {'battleid': '', 'fieldid': ''}
                    dun.normalRecordEnd(battleId, fieldId, star)
                    #data['last_dungeon'] = dun.last_dungeon
                    qt = usr.getQuest()
                    qt.updateDungeonCountQuest()
                    qt.updateFinishDungeonQuest(battleId, fieldId)
                    dun.save()
                    return data
    return {'msg': 'field_not_exist'}
示例#13
0
	def prestige_award(usr):
		"""
		声望奖励
		"""
		res = infection.PrestigeAward(usr)
		if res.has_key('msg'):
			return res
		
		awd = {}
		for dropid in res['award']:
			awd = drop.open(usr, dropid, awd)
		data = drop.makeData(awd, {})
		
		return data
示例#14
0
    def prestige_award(usr):
        """
		声望奖励
		"""
        res = infection.PrestigeAward(usr)
        if res.has_key('msg'):
            return res

        awd = {}
        for dropid in res['award']:
            awd = drop.open(usr, dropid, awd)
        data = drop.makeData(awd, {})

        return data
示例#15
0
def end(request):
	"""
	结束地下城
	"""
	battleId = request.GET['battle_id']
	fieldId = request.GET['field_id']
	star = request.GET['star']
	star = int(star)
	usr = request.user
	dun = usr.getDungeon()	
	dunConf = config.getConfig('dungeon')
	
	if dun.curren_field['battleid'] != battleId or fieldId != dun.curren_field['fieldid']:
		return {'msg':'dungeon_finished'}
	
	for battleConf in dunConf:
		if battleConf['battleId'] == battleId:
			for fieldConf in battleConf['field']:
				if fieldConf['fieldId'] == fieldId:
					gameConf = config.getConfig('game')
					exp = fieldConf['exp']
					if dun.daily_recored[battleId][fieldId]['vip_reset']:
						exp = int(exp * gameConf['dungeon_reset_benefit'])
					usr.gainExp(exp)
					data = {}
					if fieldConf['dropid']:
						awd = {}					
						awd = drop.open(usr, fieldConf['dropid'], awd)					
						data = dun.award()
						data = drop.makeData(awd, data)
						
					data['exp'] = usr.exp
					data['level'] = usr.level
					data['gold'] = usr.gold	
					
					infectionBattle = infection.dungeon_encounter(usr)
					if infectionBattle:
						if not infectionBattle.has_key('msg'):
							data['infection_battle'] = infectionBattle
					#if dun.curren_field['battleid'] == dun.last_dungeon['battleid'] and dun.curren_field['fieldid'] == dun.last_dungeon['fieldid']:
					#	dun.nextField()
					dun.curren_field = {'battleid':'', 'fieldid':''}
					dun.normalRecordEnd(battleId, fieldId, star)
					#data['last_dungeon'] = dun.last_dungeon
					qt = usr.getQuest()
					qt.updateDungeonCountQuest()
					qt.updateFinishDungeonQuest(battleId, fieldId)
					dun.save()
					return data					
	return {'msg':'field_not_exist'}
示例#16
0
文件: arena.py 项目: xueboy/cardgameX
	def defeate(usr):
		"""
		击败
		"""
		res = None
		if usr.arena.has_key('challenge_roleid'):
			
			if SIGLE_SERVER:
				from arenarank.routine.arena import arena as arenaR
				return arenaR.defeat(str(usr.roleid), str(usr.arena['challenge_roleid']))
			else:
				res = json.loads(curl.url(ARENE_SERVER +  '/arena/defeat/', None, {'offence_roleid':usr.roleid, 'defence_roleid':usr.arena['challenge_roleid']}))
			
			arenaLootConf = config.getConfig('arena_loot')
			gameConf = config.getConfig('game')
						
			if res.has_key('msg'):
				return res
				
			alreadyReach = False
			for item in gameConf['arena_rank_award']:
				if item['rank'] >= res['position'] and (not usr.arena['rank_award'].has_key(item['rank'])):
					usr.arena['rank_award'][item['rank']] = True
					
				
			arenaLootInfo = arenaLootConf[usr.level - 1]
			challengeRole = usr.__class__.get(usr.arena['challenge_roleid'])
			challengeRole.gold = challengeRole.gold - arenaLootInfo['gold']
			if challengeRole.gold < 0:
				challengeRole.gold = 0
			challengeRole.notify_gold()
			challengeRole.save()
			del usr.arena['challenge_roleid']
			card = None
			gold = 0
			skl = None			
			data = {}
			if usr.arena.has_key('loot'):
				data = drop.do_award(usr, usr.arena['loot'], data)
				data = drop.makeData(data, res, 'award')
				
			usr.gainExp(arenaLootInfo['exp'])
			usr.gold = usr.gold + arenaLootInfo['gold']
			data['exp'] = usr.exp
			data['level'] = usr.level
			data['gold'] = usr.gold
			usr.save()
			return data			
		return {'msg':'arena_ladder_have_not_chellenge'}
示例#17
0
	def award(self):
		"""
		领奖
		"""
		usr = self.user
		inv = usr.getInventory()		
		waves = self.curren_field_waves
		awd = {}
		for wave in waves:
			for monsterDrop in waves[wave]:
				dropData = monsterDrop['drop']				
				awd = drop.do_award(usr, dropData, awd)				
					
		self.curren_field_waves = []
		awd = drop.makeData(awd, {})
		return awd
示例#18
0
    def award(self):
        """
		领奖
		"""
        usr = self.user
        inv = usr.getInventory()
        waves = self.curren_field_waves
        awd = {}
        for wave in waves:
            for monsterDrop in waves[wave]:
                dropData = monsterDrop['drop']
                awd = drop.do_award(usr, dropData, awd)

        self.curren_field_waves = []
        awd = drop.makeData(awd, {})
        return awd
示例#19
0
    def battle_award(usr, battleRoleid, create_time):
        """
		战斗奖励
		"""
        res = infection.BattleAward(usr, battleRoleid, create_time)
        if res.has_key('msg'):
            return res

        awd = {}
        if res.has_key('call_dropid'):
            awd = drop.open(usr, res['call_dropid'], awd)
        if res.has_key('last_hit_dropid'):
            awd = drop.open(usr, res['last_hit_dropid'], awd)
        if res.has_key('hit_dropid'):
            awd = drop.open(usr, res['hit_dropid'], awd)
        data = drop.makeData(awd, {})

        return data
示例#20
0
	def battle_award(usr, battleRoleid, create_time):
		"""
		战斗奖励
		"""
		res = infection.BattleAward(usr, battleRoleid, create_time)
		if res.has_key('msg'):
			return res
		
		awd = {}
		if res.has_key('call_dropid'):
			awd = drop.open(usr, res['call_dropid'], awd)
		if res.has_key('last_hit_dropid'):
			awd = drop.open(usr, res['last_hit_dropid'], awd)
		if res.has_key('hit_dropid'):
			awd = drop.open(usr, res['hit_dropid'], awd)			
		data = drop.makeData(awd, {})
		
		return data
示例#21
0
	def do_signin(usr):
		"""
		是否签名
		"""
		
		now = currentTime()
		
		if signin.have_signin(usr, now):
			return {'msg':'signin_already_have'}
		
		signinConf = config.getConfig('signin')
		signin_index = (usr.signin['login_count'] - 1) % len(signinConf)
		signinAward = signinConf[signin_index]
		
		awd = {}
		awd = drop.open(usr, signinAward['dropid'], awd)
		awd = drop.makeData(awd, {})
		usr.signin['last_signin_time'] = now
		usr.save()
		return awd		
示例#22
0
    def do_signin(usr):
        """
		是否签名
		"""

        now = currentTime()

        if signin.have_signin(usr, now):
            return {'msg': 'signin_already_have'}

        signinConf = config.getConfig('signin')
        signin_index = (usr.signin['login_count'] - 1) % len(signinConf)
        signinAward = signinConf[signin_index]

        awd = {}
        awd = drop.open(usr, signinAward['dropid'], awd)
        awd = drop.makeData(awd, {})
        usr.signin['last_signin_time'] = now
        usr.save()
        return awd
示例#23
0
	def enterInviteCode(usr, invite_code):
		"""
		输入邀请码
		"""
		
		gameConf = config.getConfig('game')				
		accountid = inviteU.reverseCode(invite_code)
		
		now = currentTime()
		if now - usr.invite['open_time'] > gameConf['invite_open_duration']:
			return {'msg':'invite_not_available'}
		
		invAccount = usr.getAccountCls().get(accountid)
		if not invAccount:
			return {'msg':'invite_code_bad'}
		if usr.accountid == accountid:
			return {'msg': 'invite_can_not_self'}
			
		invUsr = invAccount.getUser()
		if len(invUsr.invite['invite']) >= gameConf['invite_max_count']:
			return {'msg': 'invitee_max_count'}
		if str(usr.roleid) in invUsr.invite['invite']:
			return {'msg':'invite_code_already_use'}
		invUsr.invite['invite'].append(str(usr.roleid))
		
		if str(invUsr.roleid) in usr.invite['invitee']:
			return {'msg':'invite_code_already_use'}
		usr.invite['invitee'].append(str(invUsr.roleid))
		
		inviteConf = config.getConfig('invite')
		
		dropid = inviteConf['invitee_award']
		awd = {}
		data = {}
		if dropid:
			awd = drop.open(usr, dropid, awd)
			data = drop.makeData(awd, {})
		
		invUsr.save()
		usr.save()		
		return data
示例#24
0
    def enterInviteCode(usr, invite_code):
        """
		输入邀请码
		"""

        gameConf = config.getConfig('game')
        accountid = inviteU.reverseCode(invite_code)

        now = currentTime()
        if now - usr.invite['open_time'] > gameConf['invite_open_duration']:
            return {'msg': 'invite_not_available'}

        invAccount = usr.getAccountCls().get(accountid)
        if not invAccount:
            return {'msg': 'invite_code_bad'}
        if usr.accountid == accountid:
            return {'msg': 'invite_can_not_self'}

        invUsr = invAccount.getUser()
        if len(invUsr.invite['invite']) >= gameConf['invite_max_count']:
            return {'msg': 'invitee_max_count'}
        if str(usr.roleid) in invUsr.invite['invite']:
            return {'msg': 'invite_code_already_use'}
        invUsr.invite['invite'].append(str(usr.roleid))

        if str(invUsr.roleid) in usr.invite['invitee']:
            return {'msg': 'invite_code_already_use'}
        usr.invite['invitee'].append(str(invUsr.roleid))

        inviteConf = config.getConfig('invite')

        dropid = inviteConf['invitee_award']
        awd = {}
        data = {}
        if dropid:
            awd = drop.open(usr, dropid, awd)
            data = drop.makeData(awd, {})

        invUsr.save()
        usr.save()
        return data
示例#25
0
文件: arena.py 项目: xueboy/cardgameX
    def rank_award(usr, rk):
        """
		排名奖励
		"""
        if not usr.arena['rank_award'].has_key(rk):
            return {'msg': 'arena_rank_award_not_exist'}
        if not usr.arena['rank_award'][rk]:
            return {'msg': 'arena_rank_award_already_have'}

        gameConf = config.getConfig('game')

        for item in gameConf['arena_rank_award']:
            if item['rank'] == int(rk):
                #res = arena.award_score(usr.roleid, item['point'])
                data = {}
                awd = drop.open(usr, item['drop'], {})
                data = drop.makeData(awd, {})
                usr.arena['rank_award'][rk] = False
                usr.save()
                return data
        return {'msg': 'arena_rank_award_not_exist'}
示例#26
0
文件: arena.py 项目: xueboy/cardgameX
	def rank_award(usr, rk):
		"""
		排名奖励
		"""
		if not usr.arena['rank_award'].has_key(rk):
			return {'msg':'arena_rank_award_not_exist'}
		if not usr.arena['rank_award'][rk]:
			return {'msg':'arena_rank_award_already_have'}
		
		gameConf = config.getConfig('game')
		
		for item in gameConf['arena_rank_award']:
			if item['rank'] == int(rk):				
				#res = arena.award_score(usr.roleid, item['point'])
				data = {}
				awd = drop.open(usr, item['drop'], {})
				data = drop.makeData(awd, {})
				usr.arena['rank_award'][rk] = False				
				usr.save()
				return data				
		return {'msg':'arena_rank_award_not_exist'}
示例#27
0
	def award(usr, level):
		"""
		升级奖励
		"""
		if usr.level < level:
			return {'msg':'level_required'}
		if level in usr.levelup['record']:
			return {'msg':'levelup_award_already_have'}
				
		levelupConf = config.getConfig('levelup')
		
		levelKey = str(level)
		if not levelupConf.has_key(levelKey):
			return {'msg':'levelup_award_not_exist'}
		
		dropid = levelupConf[levelKey]
		
		awd = {}
		awd = drop.open(usr, dropid, awd)
		usr.levelup['record'].append(level)
		data = drop.makeData(awd, {})
		usr.save()
		return data
示例#28
0
    def award(usr, level):
        """
		升级奖励
		"""
        if usr.level < level:
            return {'msg': 'level_required'}
        if level in usr.levelup['record']:
            return {'msg': 'levelup_award_already_have'}

        levelupConf = config.getConfig('levelup')

        levelKey = str(level)
        if not levelupConf.has_key(levelKey):
            return {'msg': 'levelup_award_not_exist'}

        dropid = levelupConf[levelKey]

        awd = {}
        awd = drop.open(usr, dropid, awd)
        usr.levelup['record'].append(level)
        data = drop.makeData(awd, {})
        usr.save()
        return data
示例#29
0
    def draw_award(usr, position):
        """
		开服奖励
		"""
        openAwardConf = config.getConfig('open_award')
        drawidx = []

        for t in usr.signin['draw_award_time']:
            if is_same_day(t, currentTime()):
                return {'msg': 'open_award_already_get'}

        for idx, ad in enumerate(openAwardConf['draw_award']):
            if len(usr.signin['draw_award_time']
                   ) > idx and not usr.signin['draw_award_time'][idx]:
                continue
            if ad['day'] > len(usr.signin['draw_award_time']):
                continue
            drawidx.append(idx)

        if not drawidx:
            return {'msg': 'open_award_already_get'}

        adidx = random.sample(drawidx, 1)[0]
        ad = openAwardConf['draw_award'][adidx]
        awd = {}
        awd = drop.open(usr, ad['dropid'], awd)
        while len(usr.signin['draw_award_time']) <= adidx:
            usr.signin['draw_award_time'].append({})
        usr.signin['draw_award_time'][adidx] = {
            'time': currentTime(),
            'position': position
        }
        usr.save()
        data = drop.makeData(awd, {})

        return data
示例#30
0
    def sweep(self, battleid, fieldid, cnt):
        """
		扫荡
		"""
        if not self.normal_recored.has_key(battleid):
            return {'msg': 'dungeon_not_finished'}
        if not self.normal_recored[battleid].has_key(fieldid):
            return {'msg': 'dungeon_not_finished'}

        usr = self.user
        gameConf = config.getConfig('game')
        if (not vip.canDungeonSweep(usr)) and (
                gameConf['dungeon_vip0_sweep_star'] >
                self.normal_recored[battleid][fieldid]):
            return {'msg': 'dungeon_sweep_not_allowed'}
        self.curren_field = {'battleid': '', 'fieldid': ''}
        dunConf = config.getConfig('dungeon')
        resultData = {}
        resultData['sweep'] = []
        for battleConf in dunConf:
            if battleConf['battleId'] == battleid:
                for fieldConf in battleConf['field']:
                    if fieldConf['fieldId'] == fieldid:

                        staminaCost = fieldConf['stamina']
                        if usr.stamina < staminaCost:
                            return {'msg': 'stamina_not_enough'}
                        if fieldConf['dayCount'] == self.daily_recored[
                                battleid][fieldid]['count']:
                            return {'msg': 'dungeon_max_count'}
                        if fieldConf['dayCount'] < (
                                self.daily_recored[battleid][fieldid]['count']
                                + cnt):
                            cnt = fieldConf['dayCount'] - self.daily_recored[
                                battleid][fieldid]['count']
                        qt = usr.getQuest()
                        for i in range(cnt):
                            waves = self.arrangeWaves(fieldConf)
                            staminaCost = fieldConf['stamina']
                            if usr.stamina < staminaCost:
                                break
                            usr.stamina = usr.stamina - staminaCost
                            self.daily_recored[battleid][fieldid][
                                'count'] = self.daily_recored[battleid][
                                    fieldid]['count'] + 1
                            waves = self.arrangeWaves(fieldConf)
                            exp = fieldConf['exp']
                            if self.daily_recored[battleid][fieldid][
                                    'vip_reset']:
                                exp = int(exp *
                                          gameConf['dungeon_reset_benefit'])
                            usr.gainExp(exp)
                            data = {}
                            if fieldConf['dropid']:
                                awd = {}
                                awd = drop.open(usr, fieldConf['dropid'], awd)
                                data = self.award()
                                data = drop.makeData(awd, data)

                            data['add_exp'] = exp

                            resultData['sweep'].append(data)
                            #if dun.curren_field['battleid'] == dun.last_dungeon['battleid'] and dun.curren_field['fieldid'] == dun.last_dungeon['fieldid']:
                            #	dun.nextField()

                            #data['last_dungeon'] = dun.last_dungeon
                            qt.updateDungeonCountQuest()
                            qt.updateFinishDungeonQuest(battleid, fieldid)
                            self.save()
                            usr.save()
        resultData['stamina'] = usr.stamina
        resultData['exp'] = usr.exp
        resultData['level'] = usr.level
        resultData['gold'] = usr.gold
        return resultData
示例#31
0
	def sweep(self, battleid, fieldid, cnt):
		"""
		扫荡
		"""
		if not self.normal_recored.has_key(battleid):
			return {'msg' : 'dungeon_not_finished'}
		if not self.normal_recored[battleid].has_key(fieldid):
			return {'msg' : 'dungeon_not_finished'}
		
		usr = self.user
		gameConf = config.getConfig('game')
		if (not vip.canDungeonSweep(usr)) and (gameConf['dungeon_vip0_sweep_star'] > self.normal_recored[battleid][fieldid]):
			return {'msg':'dungeon_sweep_not_allowed'}
		self.curren_field = {'battleid':'', 'fieldid':''}	
		dunConf = config.getConfig('dungeon')
		resultData = {}
		resultData['sweep'] = []
		for battleConf in dunConf:
			if battleConf['battleId'] == battleid:
				for fieldConf in battleConf['field']:
					if fieldConf['fieldId'] == fieldid:					
						
						staminaCost = fieldConf['stamina']
						if usr.stamina < staminaCost:
							return {'msg':'stamina_not_enough'}						
						if fieldConf['dayCount'] == self.daily_recored[battleid][fieldid]['count']:
							return {'msg':'dungeon_max_count'}
						if fieldConf['dayCount'] < (self.daily_recored[battleid][fieldid]['count'] + cnt):
							cnt = fieldConf['dayCount'] - self.daily_recored[battleid][fieldid]['count']
						qt = usr.getQuest()
						for i in range(cnt):
							waves = self.arrangeWaves(fieldConf)
							staminaCost = fieldConf['stamina']
							if usr.stamina < staminaCost:
								break
							usr.stamina = usr.stamina - staminaCost
							self.daily_recored[battleid][fieldid]['count'] = self.daily_recored[battleid][fieldid]['count'] + 1
							waves = self.arrangeWaves(fieldConf)
							exp = fieldConf['exp']
							if self.daily_recored[battleid][fieldid]['vip_reset']:
								exp = int(exp * gameConf['dungeon_reset_benefit'])
							usr.gainExp(exp)
							data = {}
							if fieldConf['dropid']:
								awd = {}					
								awd = drop.open(usr, fieldConf['dropid'], awd)					
								data = self.award()
								data = drop.makeData(awd, data)
						
							data['add_exp'] = exp							
							
							resultData['sweep'].append(data)
							#if dun.curren_field['battleid'] == dun.last_dungeon['battleid'] and dun.curren_field['fieldid'] == dun.last_dungeon['fieldid']:
							#	dun.nextField()
												
							#data['last_dungeon'] = dun.last_dungeon							
							qt.updateDungeonCountQuest()
							qt.updateFinishDungeonQuest(battleid, fieldid)
							self.save()
							usr.save()
		resultData['stamina'] = usr.stamina
		resultData['exp'] = usr.exp
		resultData['level'] = usr.level
		resultData['gold'] = usr.gold
		return resultData
示例#32
0
	def garcha_once(usr, garchaAmount):
		"""
		一次求将
		"""
		inv = usr.getInventory()
		garchaConf = config.getConfig('garcha')
		gameConf = config.getConfig('game')
		
		now = currentTime()
		garcha.update_garcha(usr, now)
		
		garchaInfo = None
		if garchaAmount == 10:
			garchaInfo = usr.garcha['garcha10']
		elif garchaAmount == 100:
			garchaInfo = usr.garcha['garcha100']
		elif garchaAmount == 10000:
			garchaInfo = usr.garcha['garcha10000']
				
		isFirstTime = (garchaInfo['last_time'] == 0)
		isFree = False
		duration = now - garchaInfo['last_time']
		cooldownConf = 0
		cooldown = 0
		isCooldown = False
		if garchaAmount == 10:
			cooldownConf = gameConf['garcha_10_cooldown']
		if garchaAmount == 100:
			cooldownConf = gameConf['garcha_100_cooldown']
		if garchaAmount == 10000:
			cooldownConf = gameConf['garcha_10000_cooldown']
		
		cooldown = cooldownConf - duration
		
		if cooldown > 0:
			isCooldown = True
		else:
			isCooldown = False
			cooldown = 0
		
		if garchaAmount == 10:
			isFree = ((gameConf['garcha_10_times'] - garchaInfo['count']) > 0) and not isCooldown
		elif garchaAmount == 100:
			isFree = ((gameConf['garcha_100_times'] - garchaInfo['count']) > 0) and not isCooldown
		elif garchaAmount == 10000:
			isFree = ((gameConf['garcha_10000_times'] - garchaInfo['count']) > 0) and not isCooldown
			
		garchaCostGold = 0
		garchaCostGem = 0
		garchaType = ''
		garchaDropid1 = ''
		garchaDropid2 = ''
		garchaDropid3 = ''
		time_score = 0
		luck_score = 0
		petConf = config.getConfig('pet')
		
		if not isFree:
			if garchaAmount == 10:
				garchaCostGold = gameConf['garcha_10_price']['gold']
				garchaCostGem = gameConf['garcha_10_price']['gem']
				garchaType = 'garcha_10'
				garchaDropid1 = gameConf['garcha_10_dropid1']				
			elif garchaAmount == 100:
				garchaCostGold = gameConf['garcha_100_price']['gold']
				garchaCostGem = gameConf['garcha_100_price']['gem']
				garchaType = 'garcha_100'
				garchaDropid2 = gameConf['garcha_100_dropid2']
				garchaDropid1 = gameConf['garcha_100_dropid1']
				garchaDropid3 = gameConf['garcha_100_dropid3']
				time_score = garchaConf[vip.level(usr)]['garcha_100_free_time_score']
				luck_score = garchaConf[vip.level(usr)]['garcha_100_free_luck_score']
				if not garchaInfo.has_key('time_score'):
					garchaInfo['time_score'] = 0
				if not garchaInfo.has_key('luck_score'):
					garchaInfo['luck_score'] = 0					
				
			elif garchaAmount == 10000:
				garchaCostGold = gameConf['garcha_10000_price']['gold']
				garchaCostGem = gameConf['garcha_10000_price']['gem']
				garchaDropid1 = gameConf['garcha_10000_dropid1']
				garchaDropid2 = gameConf['garcha_10000_dropid2']
				garchaDropid3 = gameConf['garcha_10000_dropid3']
				time_score = garchaConf[vip.level(usr)]['garcha_10000_free_time_score']
				luck_score = garchaConf[vip.level(usr)]['garcha_10000_free_luck_score']
				if not garchaInfo.has_key('time_score'):
					garchaInfo['time_score'] = 0
				if not garchaInfo.has_key('luck_score'):
					garchaInfo['luck_score'] = 0
				garchaType = 'garcha_10000'
			if inv.CountCardByQuality(5, petConf) > 0:			 
					time_score = int(time_score / 2)
		else:
			if garchaAmount == 10:
				garchaType = 'garcha_10_free'
				garchaDropid1 = gameConf['garcha_10_dropid1']		
			elif garchaAmount == 100:
				garchaType = 'garcha_100_free'
				garchaDropid2 = gameConf['garcha_100_dropid2']
				garchaDropid1 = gameConf['garcha_100_dropid1']
				garchaDropid3 = gameConf['garcha_100_dropid3']
				time_score = garchaConf[vip.level(usr)]['garcha_100_time_score']
				luck_score = garchaConf[vip.level(usr)]['garcha_100_luck_score']
				if not garchaInfo.has_key('time_score'):
					garchaInfo['time_score'] = 0
				if not garchaInfo.has_key('luck_score'):
					garchaInfo['luck_score'] = 0
			elif garchaAmount == 10000:
				garchaType = 'garcha_10000_free'
				garchaDropid1 = gameConf['garcha_10000_dropid1']
				garchaDropid2 = gameConf['garcha_10000_dropid2']
				garchaDropid3 = gameConf['garcha_10000_dropid3']
				time_score = garchaConf[vip.level(usr)]['garcha_10000_time_score']
				luck_score = garchaConf[vip.level(usr)]['garcha_10000_luck_score']
				if not garchaInfo.has_key('time_score'):
					garchaInfo['time_score'] = 0
				if not garchaInfo.has_key('luck_score'):
					garchaInfo['luck_score'] = 0
			fatigue = inv.CountCardByQuality(5, petConf)
			if fatigue > 5:
				fatigue = 5
			time_score = int(time_score / (1 + fatigue))
		if usr.gold < garchaCostGold:
			return {'msg':'gold_not_enough'}
		if usr.gem < garchaCostGem:
			return {'msg':'gem_not_enough'}			

		awd = {}
		if garchaAmount == 10:			
			awd = drop.open(usr, garchaDropid1, awd)
		else:
			awd = {}
			if garchaInfo['time_score'] >= 800:
				rd = randint()
				if (rd <= 300) or (garchaInfo['time_score'] >= 1200):
					if garchaInfo['luck_score'] < 96:
						awd = drop.open(usr, garchaDropid2, awd)
					else:
						rd = randint()
						if rd < 5000:
							awd = drop.open(usr, garchaDropid3, awd)
						else:
							awd = drop.open(usr, garchaDropid2, awd)	
					garchaInfo['time_score'] = 0
					garchaInfo['luck_score'] = 0
					time_score = 0
					luck_score = 0
				else:
					awd = drop.open(usr, garchaDropid1, awd)
			else: 
				awd = drop.open(usr, garchaDropid1, awd)	
					
		data = drop.makeData(awd, {})
				
		usr.gold = usr.gold - garchaCostGold
		usr.gem = usr.gem - garchaCostGem
		if isFree:
			garchaInfo['last_time'] = now
			garchaInfo['count'] = garchaInfo['count'] + 1
		
		if time_score or luck_score:
			garchaInfo['time_score'] = garchaInfo['time_score'] + time_score
			garchaInfo['luck_score'] = garchaInfo['luck_score'] + luck_score
			
		duration = now - garchaInfo['last_time']
		cooldown = cooldownConf - duration		
		data['gold'] = usr.gold
		data['gem'] = usr.gem	
		
		data['garcha'] = {}
		data['garcha']['count'] = garchaInfo['count']
		data['garcha']['cooldown'] = cooldown
		
		usr.save()
		inv.save()
		return data
示例#33
0
文件: item.py 项目: xueboy/cardgameX
	def use(usr, id, cnt):
		
		inv = usr.getInventory()
		it = inv.getItem(id)
		if not it:
			return {'msg' : 'item_not_exist'}
		if it['count'] < cnt:
			return {'msg': 'time_not_enough'}
				
		itemid = it['itemid']
		itemConfig = config.getConfig('item')
		itemInfo = itemConfig[itemid]		
		
		data = {}
		data['delete_item_array'] = []
		data['update_item_array'] = []		
		itemCount = cnt
		save_usr = False
		save_inv = False
		for (funkey, v) in itemInfo['fun'].items():			
			if funkey == 'treasure':
				key = None
				while itemCount > 0:
					keyitemid = v[1]
					dropid = v[0]		
					if keyitemid != '':
						key = item.get_by_itemid(inv, keyitemid)
						if not key:
							if itemCount == cnt:
								return {'msg':'key_not_exist'}
							else:
								break
						updateIt = inv.delItem(key['id'])
						if updateIt == None:
							data['delete_item_array'].append(key['id'])
						else: 
							data['update_item_array'].append(updateIt)
							key = None										
						inv.save()	
					awd = {}
					awd = drop.open(usr, dropid, awd)
					data = drop.makeData(awd, data)					
					itemCount = itemCount - 1					
				if key:					
					data['update_item_array'].append(key)				
			elif funkey == 'protect':
				if not vip.canBuyArenaProtectTimes(usr):
					return {'msg':'vip_required'}
				addProtectTime = v[0]
				newProtectTime = medal.add_protect_time(usr, addProtectTime)
				data['protect_time'] = newProtectTime
				usr.vip['buy_arena_protect_times'] = usr.vip['buy_arena_protect_times'] + 1
				save_usr = True
			elif funkey == 'stamina':
				if not vip.canBuyStamina(usr):
					return {'msg':'vip_required'}
				stamina = int(v[0])
				usr.chargeStamina(stamina * itemCount)
				itemCount = 0
				data['st'] = usr.stamina
				usr.vip['buy_stamina_count'] = usr.vip['buy_stamina_count'] + 1
				save_usr = True
			elif funkey == 'sp':
				if not vip.canBuyStamina(usr):
					return {'msg':'vip_required'}
				sp = int(v[0])
				usr.sp = usr.sp + sp * itemCount
				itemCount = 0
				data['sp'] = usr.sp
				usr.vip['buy_sp_count'] = usr.vip['buy_sp_count'] + 1
				save_usr = True
			elif funkey == 'arena_count':
				if not vip.canBuyArenaTimes(usr):
					return {'msg' : 'vip_required'}
				times = int(v[0])
				usr.arena['times'] = usr.arena['times'] - times * itemCount
				itemCount = 0
				data['arena_times'] = usr.arena['times']
				usr.vip['buy_arena_times'] = usr.vip['buy_arena_times'] + 1
				save_usr = True
			elif funkey == 'protect':
				pass				
			elif funkey == 'key':
				treasure = None
				while itemCount > 0:
					treasureid = v[0]				
					treasure = item.get_by_itemid(treasureid)
					if not treasure:
						if itemCount == cnt:
							return {'msg':'treasure_not_exist'}
						else:
							break
					treasureInfo = itemConfig[treasure['itemid']]
					if not treasureInfo['fun'].has_key('treasure'):
						if itemCount == cnt:
							return {'msg':'treasure_is_not'}
						else: 
							break
					dropid = treasureInfo['fun']['treasure'][0]
					awd = {}
					awd = drop.open(usr, dropid, awd).s()
					data = drop.makeData(awd, data)	
					if inv.delItem(treasure['id']) == None:						
						data['delete_item_array'].append(treasure['id'])
						treasure = None
					inv.save()
				if treasure:					
					data['update_item_array'].append(treasure)
			elif funkey == 'medium':
				pass		
		if inv.delItem(it['id'], cnt - itemCount) == None:
			data['delete_item_array'].append(it['id'])
		else:
			data['update_item_array'].append(it)
		save_inv = True
		if not data['delete_item_array']:
			del data['delete_item_array']
		if not data['update_item_array']:
			del data['update_item_array']
		if save_inv:
			inv.save()
		if save_usr:
			usr.save()
		return data			
示例#34
0
    def garcha_once(usr, garchaAmount):
        """
		一次求将
		"""
        inv = usr.getInventory()
        garchaConf = config.getConfig('garcha')
        gameConf = config.getConfig('game')

        now = currentTime()
        garcha.update_garcha(usr, now)

        garchaInfo = None
        if garchaAmount == 10:
            garchaInfo = usr.garcha['garcha10']
        elif garchaAmount == 100:
            garchaInfo = usr.garcha['garcha100']
        elif garchaAmount == 10000:
            garchaInfo = usr.garcha['garcha10000']

        isFirstTime = (garchaInfo['last_time'] == 0)
        isFree = False
        duration = now - garchaInfo['last_time']
        cooldownConf = 0
        cooldown = 0
        isCooldown = False
        if garchaAmount == 10:
            cooldownConf = gameConf['garcha_10_cooldown']
        if garchaAmount == 100:
            cooldownConf = gameConf['garcha_100_cooldown']
        if garchaAmount == 10000:
            cooldownConf = gameConf['garcha_10000_cooldown']

        cooldown = cooldownConf - duration

        if cooldown > 0:
            isCooldown = True
        else:
            isCooldown = False
            cooldown = 0

        if garchaAmount == 10:
            isFree = ((gameConf['garcha_10_times'] - garchaInfo['count']) >
                      0) and not isCooldown
        elif garchaAmount == 100:
            isFree = ((gameConf['garcha_100_times'] - garchaInfo['count']) >
                      0) and not isCooldown
        elif garchaAmount == 10000:
            isFree = ((gameConf['garcha_10000_times'] - garchaInfo['count']) >
                      0) and not isCooldown

        garchaCostGold = 0
        garchaCostGem = 0
        garchaType = ''
        garchaDropid1 = ''
        garchaDropid2 = ''
        garchaDropid3 = ''
        time_score = 0
        luck_score = 0
        petConf = config.getConfig('pet')

        if not isFree:
            if garchaAmount == 10:
                garchaCostGold = gameConf['garcha_10_price']['gold']
                garchaCostGem = gameConf['garcha_10_price']['gem']
                garchaType = 'garcha_10'
                garchaDropid1 = gameConf['garcha_10_dropid1']
            elif garchaAmount == 100:
                garchaCostGold = gameConf['garcha_100_price']['gold']
                garchaCostGem = gameConf['garcha_100_price']['gem']
                garchaType = 'garcha_100'
                garchaDropid2 = gameConf['garcha_100_dropid2']
                garchaDropid1 = gameConf['garcha_100_dropid1']
                garchaDropid3 = gameConf['garcha_100_dropid3']
                time_score = garchaConf[vip.level(
                    usr)]['garcha_100_free_time_score']
                luck_score = garchaConf[vip.level(
                    usr)]['garcha_100_free_luck_score']
                if not garchaInfo.has_key('time_score'):
                    garchaInfo['time_score'] = 0
                if not garchaInfo.has_key('luck_score'):
                    garchaInfo['luck_score'] = 0

            elif garchaAmount == 10000:
                garchaCostGold = gameConf['garcha_10000_price']['gold']
                garchaCostGem = gameConf['garcha_10000_price']['gem']
                garchaDropid1 = gameConf['garcha_10000_dropid1']
                garchaDropid2 = gameConf['garcha_10000_dropid2']
                garchaDropid3 = gameConf['garcha_10000_dropid3']
                time_score = garchaConf[vip.level(
                    usr)]['garcha_10000_free_time_score']
                luck_score = garchaConf[vip.level(
                    usr)]['garcha_10000_free_luck_score']
                if not garchaInfo.has_key('time_score'):
                    garchaInfo['time_score'] = 0
                if not garchaInfo.has_key('luck_score'):
                    garchaInfo['luck_score'] = 0
                garchaType = 'garcha_10000'
            if inv.CountCardByQuality(5, petConf) > 0:
                time_score = int(time_score / 2)
        else:
            if garchaAmount == 10:
                garchaType = 'garcha_10_free'
                garchaDropid1 = gameConf['garcha_10_dropid1']
            elif garchaAmount == 100:
                garchaType = 'garcha_100_free'
                garchaDropid2 = gameConf['garcha_100_dropid2']
                garchaDropid1 = gameConf['garcha_100_dropid1']
                garchaDropid3 = gameConf['garcha_100_dropid3']
                time_score = garchaConf[vip.level(
                    usr)]['garcha_100_time_score']
                luck_score = garchaConf[vip.level(
                    usr)]['garcha_100_luck_score']
                if not garchaInfo.has_key('time_score'):
                    garchaInfo['time_score'] = 0
                if not garchaInfo.has_key('luck_score'):
                    garchaInfo['luck_score'] = 0
            elif garchaAmount == 10000:
                garchaType = 'garcha_10000_free'
                garchaDropid1 = gameConf['garcha_10000_dropid1']
                garchaDropid2 = gameConf['garcha_10000_dropid2']
                garchaDropid3 = gameConf['garcha_10000_dropid3']
                time_score = garchaConf[vip.level(
                    usr)]['garcha_10000_time_score']
                luck_score = garchaConf[vip.level(
                    usr)]['garcha_10000_luck_score']
                if not garchaInfo.has_key('time_score'):
                    garchaInfo['time_score'] = 0
                if not garchaInfo.has_key('luck_score'):
                    garchaInfo['luck_score'] = 0
            fatigue = inv.CountCardByQuality(5, petConf)
            if fatigue > 5:
                fatigue = 5
            time_score = int(time_score / (1 + fatigue))
        if usr.gold < garchaCostGold:
            return {'msg': 'gold_not_enough'}
        if usr.gem < garchaCostGem:
            return {'msg': 'gem_not_enough'}

        awd = {}
        if garchaAmount == 10:
            awd = drop.open(usr, garchaDropid1, awd)
        else:
            awd = {}
            if garchaInfo['time_score'] >= 800:
                rd = randint()
                if (rd <= 300) or (garchaInfo['time_score'] >= 1200):
                    if garchaInfo['luck_score'] < 96:
                        awd = drop.open(usr, garchaDropid2, awd)
                    else:
                        rd = randint()
                        if rd < 5000:
                            awd = drop.open(usr, garchaDropid3, awd)
                        else:
                            awd = drop.open(usr, garchaDropid2, awd)
                    garchaInfo['time_score'] = 0
                    garchaInfo['luck_score'] = 0
                    time_score = 0
                    luck_score = 0
                else:
                    awd = drop.open(usr, garchaDropid1, awd)
            else:
                awd = drop.open(usr, garchaDropid1, awd)

        data = drop.makeData(awd, {})

        usr.gold = usr.gold - garchaCostGold
        usr.gem = usr.gem - garchaCostGem
        if isFree:
            garchaInfo['last_time'] = now
            garchaInfo['count'] = garchaInfo['count'] + 1

        if time_score or luck_score:
            garchaInfo['time_score'] = garchaInfo['time_score'] + time_score
            garchaInfo['luck_score'] = garchaInfo['luck_score'] + luck_score

        duration = now - garchaInfo['last_time']
        cooldown = cooldownConf - duration
        data['gold'] = usr.gold
        data['gem'] = usr.gem

        data['garcha'] = {}
        data['garcha']['count'] = garchaInfo['count']
        data['garcha']['cooldown'] = cooldown

        usr.save()
        inv.save()
        return data
示例#35
0
文件: item.py 项目: xueboy/cardgameX
    def use(usr, id, cnt):

        inv = usr.getInventory()
        it = inv.getItem(id)
        if not it:
            return {'msg': 'item_not_exist'}
        if it['count'] < cnt:
            return {'msg': 'time_not_enough'}

        itemid = it['itemid']
        itemConfig = config.getConfig('item')
        itemInfo = itemConfig[itemid]

        data = {}
        data['delete_item_array'] = []
        data['update_item_array'] = []
        itemCount = cnt
        save_usr = False
        save_inv = False
        for (funkey, v) in itemInfo['fun'].items():
            if funkey == 'treasure':
                key = None
                while itemCount > 0:
                    keyitemid = v[1]
                    dropid = v[0]
                    if keyitemid != '':
                        key = item.get_by_itemid(inv, keyitemid)
                        if not key:
                            if itemCount == cnt:
                                return {'msg': 'key_not_exist'}
                            else:
                                break
                        updateIt = inv.delItem(key['id'])
                        if updateIt == None:
                            data['delete_item_array'].append(key['id'])
                        else:
                            data['update_item_array'].append(updateIt)
                            key = None
                        inv.save()
                    awd = {}
                    awd = drop.open(usr, dropid, awd)
                    data = drop.makeData(awd, data)
                    itemCount = itemCount - 1
                if key:
                    data['update_item_array'].append(key)
            elif funkey == 'protect':
                if not vip.canBuyArenaProtectTimes(usr):
                    return {'msg': 'vip_required'}
                addProtectTime = v[0]
                newProtectTime = medal.add_protect_time(usr, addProtectTime)
                data['protect_time'] = newProtectTime
                usr.vip['buy_arena_protect_times'] = usr.vip[
                    'buy_arena_protect_times'] + 1
                save_usr = True
            elif funkey == 'stamina':
                if not vip.canBuyStamina(usr):
                    return {'msg': 'vip_required'}
                stamina = int(v[0])
                usr.chargeStamina(stamina * itemCount)
                itemCount = 0
                data['st'] = usr.stamina
                usr.vip['buy_stamina_count'] = usr.vip['buy_stamina_count'] + 1
                save_usr = True
            elif funkey == 'sp':
                if not vip.canBuyStamina(usr):
                    return {'msg': 'vip_required'}
                sp = int(v[0])
                usr.sp = usr.sp + sp * itemCount
                itemCount = 0
                data['sp'] = usr.sp
                usr.vip['buy_sp_count'] = usr.vip['buy_sp_count'] + 1
                save_usr = True
            elif funkey == 'arena_count':
                if not vip.canBuyArenaTimes(usr):
                    return {'msg': 'vip_required'}
                times = int(v[0])
                usr.arena['times'] = usr.arena['times'] - times * itemCount
                itemCount = 0
                data['arena_times'] = usr.arena['times']
                usr.vip['buy_arena_times'] = usr.vip['buy_arena_times'] + 1
                save_usr = True
            elif funkey == 'protect':
                pass
            elif funkey == 'key':
                treasure = None
                while itemCount > 0:
                    treasureid = v[0]
                    treasure = item.get_by_itemid(treasureid)
                    if not treasure:
                        if itemCount == cnt:
                            return {'msg': 'treasure_not_exist'}
                        else:
                            break
                    treasureInfo = itemConfig[treasure['itemid']]
                    if not treasureInfo['fun'].has_key('treasure'):
                        if itemCount == cnt:
                            return {'msg': 'treasure_is_not'}
                        else:
                            break
                    dropid = treasureInfo['fun']['treasure'][0]
                    awd = {}
                    awd = drop.open(usr, dropid, awd).s()
                    data = drop.makeData(awd, data)
                    if inv.delItem(treasure['id']) == None:
                        data['delete_item_array'].append(treasure['id'])
                        treasure = None
                    inv.save()
                if treasure:
                    data['update_item_array'].append(treasure)
            elif funkey == 'medium':
                pass
        if inv.delItem(it['id'], cnt - itemCount) == None:
            data['delete_item_array'].append(it['id'])
        else:
            data['update_item_array'].append(it)
        save_inv = True
        if not data['delete_item_array']:
            del data['delete_item_array']
        if not data['update_item_array']:
            del data['update_item_array']
        if save_inv:
            inv.save()
        if save_usr:
            usr.save()
        return data
示例#36
0
文件: tower.py 项目: xueboy/cardgameX
	def beat(usr, difficulty, star, dp, ehc):
		"""
		战胜
		"""
		if not usr.tower['current']:
			return {'msg':'tower_not_start'}
				
		if usr.tower['current'].has_key('enhance') and (ehc == -1):
			return {'msg':'tower_enhance_required'}
				
		gameConf = config.getConfig('game')
		towerAwardConf = config.getConfig('tower_award')
		towerMonster = config.getConfig('tower_monster')
						
		usr.tower['current']['point'] = usr.tower['current']['point'] + star * difficulty
		usr.tower['current']['energy'] = usr.tower['current']['energy'] + star * difficulty
		usr.tower['current']['score'] = usr.tower['current']['score'] + star * difficulty		
		usr.tower['current']['floor'] = usr.tower['current']['floor'] + 1
		
		if usr.tower['max_point'] < usr.tower['current']['point']:
			usr.tower['max_point'] = usr.tower['current']['point']
		
		while len(usr.tower['floor_score']) < usr.tower['current']['floor']:
			usr.tower['floor_score'].append(0)
		while len(usr.tower['floor_point']) < usr.tower['current']['floor']:
			usr.tower['floor_point'].append(0)
				
		newPoint = False
		if usr.tower['floor_point'][usr.tower['current']['floor'] - 1] < usr.tower['current']['point']:
			newPoint = True			
		
		newScore = False
		if usr.tower['floor_score'][usr.tower['current']['floor'] - 1] < usr.tower['current']['score']:
			newScore = True
		print usr.tower['floor_score'][usr.tower['current']['floor'] - 1], usr.tower['current']['score']
		
		data = {}		
					
		if ehc != -1:
			if not usr.tower['current'].has_key('enhance'):
				return {'msg':'tower_enhance_not_exsit'}
			tower.do_enhance(usr, ehc, gameConf)
				
		enhance = []
		if usr.tower['current']['floor'] % gameConf['tower_enhance_interval_floor'] == 0:
			enhance = tower.make_enhance_list()
			usr.tower['current']['enhance'] = enhance
		
		
			
		if usr.tower['current']['floor'] % gameConf['tower_award_interval_floor'] == 0:
			towerAwardInfo = towerAwardConf[str(usr.tower['current']['floor'])]
			if newPoint:
				awd = {}
				awd = drop.open(usr, towerAwardInfo[1], awd)
				data = drop.makeData(awd, data,'top_drop')
				usr.tower['floor_point'][usr.tower['current']['floor'] - 1] = usr.tower['current']['point']
			if newScore:				
				if usr.tower['current']['score'] > 45:
					awd = {}
					awd = drop.open(usr, towerAwardInfo[3], awd)
					data = drop.makeData(awd, data, 'record_drop')
				if usr.tower['current']['score'] > 30:
					awd = {}
					awd = drop.open(usr, towerAwardInfo[2], awd)
					data = drop.makeData(awd, data, 'record_drop')
				usr.tower['floor_score'][usr.tower['current']['floor'] - 1] = usr.tower['current']['score']
			usr.tower['current']['score'] = 0

		if usr.tower['max_floor'] < usr.tower['current']['floor']:
			 usr.tower['max_floor'] = usr.tower['current']['floor']				

		if dp:
			awd = {}
			awd = drop.open(usr, towerMonster[usr.tower['current']['floor']]['dropid'], awd)
			data = drop.makeData(awd, data, 'random_drop')		
		
		usr.save()
		if enhance:
			data['tower_enhance'] = enhance
		data['tower_point'] = usr.tower['current']['point']
		data['tower_energy'] = usr.tower['current']['energy']
		data['tower_strength'] = usr.tower['current']['strength']
		data['tower_intelligence'] = usr.tower['current']['intelligence']
		data['tower_artifice'] = usr.tower['current']['artifice']
		data['tower_floor'] = usr.tower['current']['floor']
		data['tower_max_floor'] = usr.tower['max_floor']
		data['tower_max_point'] = usr.tower['max_point']
		return data