def becomeVIP(playerId,prop_id): player = db_tool.__getPlayerById(playerId) bool=1 time_now = int(time.time()) if(PROP_CONFIG[prop_id]['KB']>0): player['kb'] -= PROP_CONFIG[prop_id]['KB'] if player['kb'] < 0: bool=0 else: #add cost log player_module.addCostLog(playerId,PROP_CONFIG[prop_id]['KB'],'becomeVIP') elif (PROP_CONFIG[prop_id]['GB']>0): player['gb'] -= PROP_CONFIG[prop_id]['GB'] if player['gb'] < 0: bool=0 if(bool): if player['vip'] > time_now: player['vip'] += PROP_CONFIG[prop_id]['period'] else: player['vip'] = time_now + PROP_CONFIG[prop_id]['period'] db_tool.__updatePlayer(player['id'],{'vip':player['vip'],'kb':player['kb'],'gb':player['gb']}) return {'status':1,'vip':player['vip'],'kb':player['kb']} else: return {'status':0,'msg':'Not enough money.'}
def addLotteryReward(playerId): player = db_tool.__getPlayerById(playerId) lottery_num = player['lottery_num'] if lottery_num == 0: return {'status':0,'msg':'lottery_num == 0'} else: lottery_num -= 1 db_tool.__updatePlayer(player['id'],{'lottery_num':lottery_num}) rewardList = DAILY_REWARD_CONF['common'] todayTime = int(time.time()) if player['vip']>todayTime: rewardList = rewardList + DAILY_REWARD_CONF['vip'] rewardInfo = random.choice(rewardList) rewardType = rewardInfo['definitionID'] rewardNum = rewardInfo['num'] prop = db_tool.getAllProp(playerId) db_tool.__addPropItem(prop,rewardType,rewardNum) db_tool.saveAllProp(playerId,prop) return {'status':1,'bag':prop,'definitionID':rewardType,'num':rewardNum}
def decorativeScene(serverInfo,param): playerId = serverInfo['playerId'] habitatId = param['map_index'] player = db_tool.__getPlayerById(playerId) maps=db_tool.getMapsbyPlayerId(playerId,habitatId) propDict= db_tool.getAllProp(playerId) if not __checkItems(param['sell'],maps): return {'status':0,'msg':'sell item is not in map'} if not __checkItems(param['move'],maps): return {'status':0,'msg':'move item is not in map'} if not __checkItems(param['back'],maps): return {'status':0,'msg':'back item is not in map'} moveItems,sellItems,backItems,propDict=updateMapItems(playerId,habitatId,param,propDict) #卖出获得的钱 income_money = __getSellMoney(param['sell']) player['gb']=income_money+player['gb'] db_tool.__updatePlayer(playerId,{'gb':player['gb']}) returnVal = {'status':1} returnVal['move']=moveItems returnVal['back']=backItems returnVal['sell']=sellItems returnVal['playerBag'] = propDict returnVal['player']=player return returnVal
def sellProps(playerId,param): player = db_tool.__getPlayerById(playerId) prop_id = str(param['definitionId']) prop_num= param['number'] propDict = db_tool.getAllProp(playerId) if propDict.has_key(prop_id) and propDict[prop_id] >= prop_num: propDict[prop_id]-=prop_num itemType = prop_id[0] itemStar = prop_id[-1] #是否是残片 if (itemType != '1'): return {'status':0,'msg':'err definitionIds'} #卖出的金额 gold = SELL_UNMIX_CONFIG[int(itemStar)+1]*prop_num player['gb'] += gold db_tool.__updatePlayer(player['id'],{'gb':player['gb']}) db_tool.saveAllProp(player['id'],propDict) return {'status':1,'player':player,'sell_info':param} else: return {'status':0,'msg':'not enough definitionIds'}
def getRewardAndExp(db,conn,snsId,config): db.execute("UPDATE user_box set is_open = 1 where owner_id = %s",(snsId,)) #第一次添加经验 exp = 0 player = db_tool.__getPlayer(snsId) #get collection collectionStr = db_tool.__getPlayerCollection(player['id'])['status'] collectionList = collection.__collectionToList(collectionStr) #随机获取一个未收集到的图鉴奖励 rewards = config.get('reward') uncollectItem = getUnCollectItem(collectionList,rewards) #如果都收集过了 if(not uncollectItem): uncollectItem = rewards reward = random.choice(uncollectItem) prop = db_tool.getAllProp(player['id']) for propId in reward.keys(): #add collection if str(propId) in collectionList: exp += 0 else: exp += DRAWING_CONFIG[int('1'+propId)]['exp'] player['exp'] += exp db_tool.__updatePlayer(player['id'],{'exp':player['exp']}) collection.__updateCollection(player,propId) #add prop db_tool.__addPropItem(prop,propId,reward[propId]) db_tool.saveAllProp(player['id'],prop) conn.commit() return reward,exp
def decorateGroupInShop(playerId,param): habitatId = param['map_index'] groupId = param['groupId'] groupItems = param['group'] item = {'definitionId':groupId} #买装饰物需要花费的钱 cost_money=__getCostMoney(item) player = db_tool.__getPlayerById(playerId) #比较 if (player['kb']<cost_money['kb']): return {'status':0,'msg':'not enough KB'} elif (player['gb']<cost_money['gb']): return {'status':0,'msg':'not enough GB'} #扣除 player['gb'] -=cost_money['gb'] player['kb'] -=cost_money['kb'] player['exp'] += cost_money['exp'] #添加 addItems = db_tool.addMapItemList(playerId,habitatId,groupItems) db_tool.__updatePlayer(player['id'],{'gb':player['gb'],'kb':player['kb'],'exp':player['exp']}) #add cost log if cost_money['kb']>0: player_module.addCostLog(player['id'],cost_money['kb'],'decorateGroupInShop') return {'status':1,'group':addItems,'player':player}
def acceptSystemReward(playerId,sysRewardId): if not str(sysRewardId): return {'status':0,'msg':'no sysRewardId'} player = db_tool.__getPlayerById(playerId) system_reward = player['system_reward'] system_reward_list = str2list(system_reward) if str(sysRewardId) in system_reward_list: #更新领取状态 system_reward_list.remove(str(sysRewardId)) db_tool.__updatePlayer(playerId,{'system_reward':list2str(system_reward_list)}) #给与奖励 for systemReward in SYSTEM_REWARD_CONFIG[sysRewardId]: system_reward_type = systemReward['type'] system_reward_num = systemReward['num'] db_tool.addPropAndMoney(playerId,system_reward_type,system_reward_num) propDict = db_tool.getAllProp(playerId) player = db_tool.__getPlayerById(playerId) return {'status':1,'sysRewardId':sysRewardId,'player':player,'bag':propDict} else: return {'status':0,'msg':'no sysRewardId '+str(sysRewardId)}
def updateGuide(id,guide_id): bool= db_tool.__updatePlayer(id,{"guide":guide_id}); if(bool): #做完新手导读 if(guide_id == GUIDE_STEP['totalsteps']): reward = [] for rewardType in GUIDE_CONFIG.keys(): db_tool.addPropAndMoney(id,rewardType,GUIDE_CONFIG[rewardType]) #format retval = {} retval['definationID'] = rewardType retval['num'] = GUIDE_CONFIG[rewardType] reward.append(retval) #增加3点经验使玩家升级 player = db_tool.__getPlayerById(id) player['exp'] = player['exp']+3 db_tool.__updatePlayer(id,{'exp':player['exp']}); return {'status':1,'player':player,'guide':guide_id,'reward':reward,'bag':db_tool.getAllProp(id)} else: return {'status':1,'guide':guide_id} else: return {'status':0,'guide':guide_id}
def startTreasure(playerId,info): player = db_tool.__getPlayerById(playerId) if not player: return {'status':0,'msg':'can not find player by player id :'+str(playerId)} player=__updateEnergy(player) #挖宝消耗的能量 energyCost = 10 #操作状态 bool = False #免费挖宝次数['free_times'] if(player['free_times'] > 0): player['free_times'] -= 1 bool = db_tool.__updatePlayer(player['id'],{'free_times':player['free_times']}) elif player['energy'] >= energyCost : player['energy'] -= energyCost bool = db_tool.__updatePlayer(player['id'],{'energy':player['energy'],'last_energy_time':player['last_energy_time']}) else: return {'status':0,'msg':'not enough energy.','energy':player['energy'],'last_energy_time':player['last_energy_time']} treasureInfo = getTreasureInfo(playerId) if(bool): return {'status':1,'player':player,'confirmCode':treasureInfo['start_time']} else: return {'status':0,'msg':'update player info error.'}
def finishAlchemy(db,conn,playerId,alchemyId): #正在或等待炼化的信息 alchemyInfoList = getAlchemyInfo(playerId) for alchemy in alchemyInfoList: if(alchemy['id'] == alchemyId): finishAlchemy = alchemy break; if not finishAlchemy: return {'status':0,'msg':'err alchemyId for finishAlchemy'} needTime = ALCHEMY_CONFIG[alchemyId]['time'] alchemyTime = finishAlchemy['time'] helpFriends = finishAlchemy['friends'] successRate = getRateOfFriends(helpFriends)+ALCHEMY_CONFIG[alchemyId]['percent'] totalCostTime = alchemyTime+needTime time_now = int(time.time()) if time_now < totalCostTime: return {'status':0,'msg':'not enough time to finishAlchemy'} #炼化成功率 randNum = random.randint(1,100) if 1 <= randNum <= successRate: success = True else: success = False #玩家+背包信息 player = db_tool.__getPlayerById(playerId) prop = db_tool.getAllProp(playerId) #炼化失败 if not success: alchemyInfoList.remove(finishAlchemy) formulaList = ALCHEMY_CONFIG[alchemyId]['formula'] for formula in formulaList: neetDefinitionId = formula['definitionID'] neetDefinitionIdNum = formula['num'] db_tool.__addPropItem(prop,neetDefinitionId,neetDefinitionIdNum) updateAlchemy(playerId,alchemyInfoList) db_tool.saveAllProp(playerId,prop) #return {'status':0,'msg':'Alchemy failed ...'} else: rewardDefinitionID = ALCHEMY_CONFIG[finishAlchemy['id']]['award']['definitionID'] rewardExp = ALCHEMY_CONFIG[finishAlchemy['id']]['award']['exp'] player['exp']+=rewardExp db_tool.__updatePlayer(playerId,{'exp':player['exp']}) db_tool.__addPropItem(prop,rewardDefinitionID,1) db_tool.saveAllProp(playerId,prop) #更新炼化信息 alchemyInfoList.remove(finishAlchemy) updateAlchemy(playerId,alchemyInfoList) return {'status':1,'flag':success,'alchemyId':alchemyId,'player':player,'bag':prop}
def getDigItemReward(playerId): #奖励 rewardGb = 0 rewardEnergy = 0 rewardDefinitionId = 0 #消耗能量 costEnergy = 1 player = db_tool.__getPlayerById(playerId) #更新能量 player = player_module.__updateEnergy(player) if player['energy'] < costEnergy: return {'status':0,'msg':'not enough energy.'} #扣除能量 player['energy'] -= costEnergy #获取背包信息 propDict = db_tool.getAllProp(playerId) oddsInfo = EXPLORE_DIG_REWARD_CONFIG[1] random_table_key = 'explore_dig_random_table_1' rewardItems = random_tool.getRandomItemList(random_table_key,oddsInfo) for odds in rewardItems: rewardType = odds['type'] rewardNum = odds['num'] #金币 if rewardType == 2: rewardGb = rewardNum player['gb'] += rewardNum #能量 elif rewardType == 4: rewardEnergy = rewardNum player['energy'] += rewardNum #钥匙 else: rewardDefinitionId = rewardType db_tool.__addPropItem(propDict,rewardType,rewardNum) db_tool.saveAllProp(playerId,propDict) #更新player db_tool.__updatePlayer(playerId,{'gb':player['gb'],'energy':player['energy'],'last_energy_time':player['last_energy_time']}) returnVal = { 'status':1, 'gb':rewardGb, 'energy':rewardEnergy, 'definitionId':rewardDefinitionId, 'player':player, 'bag':propDict } return returnVal
def speedupAlchemy(playerId,param): useNum = param['use_num'] needNum = param['need_num'] player = db_tool.__getPlayerById(playerId) #验证KB costKb = 0 if needNum>0: costKb = needNum*10 player['kb'] -= costKb if player['kb'] < 0: return {'status':0,'msg':'not enough kb'} propDict = db_tool.getAllProp(playerId) prop_id='2020' #验证加速道具 if useNum > 0: if not propDict.has_key(prop_id) or propDict[prop_id]<useNum : return {'status':0,'msg':'no or not enough '+prop_id} #获取当前正在炼化的信息 active_alchemy = getActiveAlchemyInfo(playerId) if not active_alchemy: return {'status':0,'msg':'no active_alchemy '+str(playerId)} startTime = active_alchemy['time'] alchemy_circle = ALCHEMY_CONFIG[active_alchemy['id']]['time']*60 time_now = int(time.time()) remainTime = alchemy_circle - (time_now - startTime)%alchemy_circle #总使用道具数 prop_num = useNum+needNum #加速时间一小时 speedTime = PROP_CONFIG[int(prop_id)]['speed'] #炼化时间重新赋值 if remainTime > speedTime*prop_num: subtractTime = speedTime*prop_num else: subtractTime = remainTime #正在或等待炼化的信息 alchemyInfoList = getAlchemyInfo(playerId) for alchemy in alchemyInfoList: alchemy['time'] -= subtractTime updateAlchemy(playerId,alchemyInfoList) if useNum>0: db_tool.__subtractPropItem(propDict,prop_id,useNum) db_tool.saveAllProp(playerId,propDict)#update prop db if costKb > 0: db_tool.__updatePlayer(playerId,{'kb':player['kb']}) return {'status':1,'bag':propDict,'alchemy':alchemyInfoList,'kb':player['kb']}
def startExchangeTask(playerId): propDict = db_tool.getAllProp(playerId) player = db_tool.__getPlayerById(playerId) player = player_module.__updateEnergy(player) taskInfo = getExchangeTask(playerId) taskId = taskInfo['task_id'] if not EXCHANGE_TASK_CONFIG.has_key(taskId): return {'status':0,'msg':'没有相应的兑换任务 '+str(taskId)} needDefinitonList = EXCHANGE_TASK_CONFIG[taskId]['needDefinitonID'] if not checkBag(playerId,needDefinitonList,propDict): return {'status':0,'msg':'不满足兑换条件 '+str(taskId)} rewardList = EXCHANGE_TASK_CONFIG[taskId]['reward'] rewardGb = 0 rewardExp = 0 rewardEnergy = 0 rewardDefinitionId = 0 for reward in rewardList: rewardType = reward['type'] rewardNum = reward['num'] #金币 if rewardType == 2: rewardGb = rewardNum player['gb'] += rewardNum #经验 if rewardType == 3: rewardExp = rewardNum player['exp'] += rewardNum #能量 elif rewardType == 4: rewardEnergy = rewardNum player['energy'] += rewardNum #物品 else: rewardDefinitionId = rewardType db_tool.__addPropItem(propDict,rewardType,rewardNum) #更新player db_tool.__updatePlayer(playerId,{'gb':player['gb'],'exp':player['exp'],'energy':player['energy'],'last_energy_time':player['last_energy_time']}) db_tool.saveAllProp(playerId,propDict) #更新兑换状态 updTaskInfo = {} updTaskInfo['status'] = 1 updateExchangeTask(playerId,updTaskInfo) return {'status':1,'reward':rewardList,'player':player,'bag':propDict}
def speedupSearch(playerId, param): useNum = param["use_num"] needNum = param["need_num"] player = db_tool.__getPlayerById(playerId) # 验证KB costKb = 0 if needNum > 0: costKb = needNum * 10 player["kb"] -= costKb if player["kb"] < 0: return {"status": 0, "msg": "not enough kb"} propDict = db_tool.getAllProp(playerId) prop_id = "2020" # 验证加速道具 if useNum > 0: if not propDict.has_key(prop_id) or propDict[prop_id] < useNum: return {"status": 0, "msg": "no or not enough " + prop_id} searchInfo = getSearchTeamById(playerId) searchTypeId = searchInfo["type"] areaId = searchInfo["area"] searchStartTime = searchInfo["last_start_time"] needTime = SEARCH_TYPE[searchTypeId]["time"] * 3600 # 获取搜索队上次搜索时间 last_start_time = searchStartTime # 剩余时间 time_now = int(time.time()) remainTime = needTime - (time_now - searchStartTime) # 总使用道具数 prop_num = useNum + needNum # 加速时间一小时 speedTime = PROP_CONFIG[int(prop_id)]["speed"] # 搜索时间重新赋值 if remainTime > speedTime * prop_num: last_start_time -= speedTime * prop_num else: last_start_time -= remainTime # update and save db_tool.__updateSearchTeam(playerId, last_start_time) if useNum > 0: db_tool.__subtractPropItem(propDict, prop_id, useNum) db_tool.saveAllProp(playerId, propDict) # update prop db if costKb > 0: db_tool.__updatePlayer(playerId, {"kb": player["kb"]}) return {"status": 1, "last_start_time": last_start_time, "bag": propDict, "kb": player["kb"]}
def getDailyReward(playerId,isfan): #get player player = db_tool.__getPlayerById(playerId) #if(not player): # return {'status':0,'msg':'player not exist'} #compare login time todayTime = int(time.time()) lastLoginTime = player['last_login_time'] #get login times login_times = player['login_times'] lottery_num = player['lottery_num'] #计算连续登录天数 if(time_tool.isToday(lastLoginTime)): return {'lottery_num':lottery_num,'login_times':login_times} elif(time_tool.isYesterday(lastLoginTime)): login_times+=1 else: login_times = 1 #根据登录天数赠送金币+抽奖次数 rewardDays = login_times if rewardDays>5: rewardDays = 5 rewardGg = DAILY_CONFIG[rewardDays]['gb'] rewardLotteryNum = DAILY_CONFIG[rewardDays]['lotteryNum'] player['gb'] += rewardGg player['lottery_num'] = rewardLotteryNum #vip多一次抽奖机会 #if player['vip']>todayTime: # player['lottery_num'] += 1 #赠送免费挖宝次数 if(isfan): free_treasure_times = 4 else: free_treasure_times = 3 free_times = player['free_times']+free_treasure_times #每日送免费能量 player['help_energy'] = 50 db_tool.__updatePlayer(player['id'],{'free_times':free_times, 'gb':player['gb'], 'lottery_num':player['lottery_num'], 'last_login_time':todayTime, 'login_times':login_times, 'help_energy':player['help_energy']}) return {'lottery_num':player['lottery_num'],'login_times':login_times}
def harvest(db,conn,playerId,itemId): mapItem = db_tool.lockItem(db,conn,playerId,itemId) if not mapItem: return {'status':0,'msg':'no such item'} definitionId = item_module.getDrawIdByMixId(mapItem['definitionId']) startTime = mapItem['created_time'] friends = mapItem['friends'] #收获消耗的能量,时间,获得的GB costEnergy = 1 addGb = DRAWING_CONFIG[definitionId]['harvest']['income'] costTime = DRAWING_CONFIG[definitionId]['harvest']['duration'] time_now = int(time.time()) if (startTime+costTime) > time_now: return {'status':0,'msg':'need more time for growth'} player = db_tool.__getPlayerById(playerId) player=__updateEnergy(player) #是否被好友收过 if friends: addGb = addGb*3/4 else: player['energy'] -= costEnergy if player['energy'] < 0: return {'status':0,'msg':'not enough energy.'} player['gb'] += addGb db_tool.__updatePlayer(player['id'],{'energy':player['energy'],'gb':player['gb'],'last_energy_time':player['last_energy_time']}) #生长时间置0 updateInfo = {} updateInfo['created_time'] = 0 updateInfo['friends'] = '' db_tool.updateItemById(db,conn,playerId,itemId,updateInfo) ''' #掉落动力石 stone=0 randNum = random.randint(1,100) if 1 <= randNum <= 5: stone=1 else: stone=0 if stone>0: propDict = db_tool.getAllProp(playerId) db_tool.__addPropItem(propDict,10050,stone) db_tool.saveAllProp(playerId,propDict) ''' return {'status':1,'gb':addGb,'playerInfo':player,'id':itemId}
def buyAuction(db,conn,playerId,transaction_id,buyer_name): player = db_tool.__getPlayerById(playerId) playerId = player['id'] returnVal = {} transaction= __lockTransactionById(db,conn,transaction_id) if transaction: number = transaction['number'] price = transaction['price'] seller_id = transaction['user_id'] seller = db_tool.__getPlayerById(seller_id) player['gb']-=price if(player['gb']>=0): tax_rate=1/0.05 tax=int((price+tax_rate-1)/tax_rate) seller_income=price-tax; #修改卖家gb db_tool.__updatePlayer(seller_id,{'gb':seller['gb']+seller_income}) #修改买家gb及背包 db_tool.__updatePlayer(playerId,{'gb':player['gb']}) props = db_tool.getAllProp(playerId) db_tool.__addPropItem(props,transaction['prop_id'],number) db_tool.saveAllProp(playerId,props) #删除记录 __delLockTransactionItem(db,conn,transaction_id) log_info = {} log_info['player_id'] = playerId log_info['price'] = price log_info['buyer'] = buyer_name log_info['number'] = number log_info['prop_id'] = transaction['prop_id'] auctionEvent(log_info,seller_id) returnVal['status'] = 1 returnVal['bag'] = db_tool.getAllProp(playerId) returnVal['player'] = player returnVal['cost']=price returnVal['auctionId'] = transaction_id returnVal['auctionStatus'] = player_module.getAuctionStatus(seller_id) return returnVal else: return {'status':0,'error_type':100,'msg':'Not enough money'} else: return {'status':0,'error_type':1,'auctionId':transaction_id,'msg':'Can not find the Transaction by id '+str(transaction_id)}
def finishTreasure(playerId,info): player = db_tool.__getPlayerById(playerId) if not player: return {'status':0,'msg':'can not find player by player id :'+str(playerId)} energyCost = 10 player=__updateEnergy(player) player['gb']+=info['gb'] player['energy']+=info['energy'] player['exp']+=info['exp'] if(info['continue']): if(player['free_times'] > 0): player['free_times'] -= 1 elif(player['energy']<energyCost): return {'status':0,'msg':'not enough energy.'} else: player['energy']-= energyCost #重置confirmCode treasureInfo = getTreasureInfo(playerId) info['confirmCode'] = treasureInfo['start_time'] else: #验证是否可以挖宝 if not checkTreasure(playerId,info['confirmCode']): return {'status':0,'msg':'confirmCode error, player id :'+str(playerId)} bool= db_tool.__updatePlayer(playerId,{'gb':player['gb'],'exp':player['exp'],'energy':player['energy'],'last_energy_time':player['last_energy_time'],'free_times':player['free_times']}) if(bool): return {'status':1,'player':player,'info':info} else: return {'status':0,'player':player,'info':info}
def usePropInBag(playerId,prop_id): propDict = db_tool.getAllProp(playerId) prop_id=str(prop_id) if propDict.has_key(prop_id) and propDict[prop_id] >0 : player = db_tool.__getPlayerById(playerId) player = player_module.__updateEnergy(player) boxItem = {} #能量道具 if prop_id == '2010' or prop_id == '2011' or prop_id == '2012': player['energy'] += PROP_CONFIG[int(prop_id)]['num'] db_tool.__updatePlayer(player['id'],{'energy':player['energy'],'last_energy_time':player['last_energy_time']}) #VIP道具 elif prop_id == '2001' or prop_id == '2002' or prop_id == '2003': time_now = int(time.time()) if player['vip'] > time_now: player['vip'] += PROP_CONFIG[int(prop_id)]['period'] else: player['vip'] = time_now + PROP_CONFIG[int(prop_id)]['period'] db_tool.__updatePlayer(player['id'],{'vip':player['vip']}) #材料包 elif prop_id == '3001' or prop_id == '3002' or prop_id == '3003': props = PROP_CONFIG[int(prop_id)]['items'] for item in props: db_tool.__addPropItem(propDict,item['type'],item['num']) #神秘箱子 elif prop_id == '4000' or prop_id == '4010': random_table_key = 'magic_box_random_table_'+prop_id boxItem = random_tool.getRandomItem(random_table_key,MAGIC_BOX[int(prop_id)]) db_tool.__addPropItem(propDict,boxItem['type'],boxItem['num']) else: return {'status':0,'msg':'未配置效果物品 ['+str(prop_id)+'].'} propDict[prop_id]-=1 db_tool.saveAllProp(player['id'],propDict) #有箱子信息 if boxItem: return {'status':1,'player':player,'bag':propDict,'time_now':int(time.time()),'prop_id':prop_id,'box_item_type':boxItem['type'],'box_item_num':boxItem['num']} else: return {'status':1,'player':player,'bag':propDict,'time_now':int(time.time()),'prop_id':prop_id} else: return {'status':0,'msg':'Can not find ['+str(prop_id)+'] in bag.'}
def helpHarvest(db,conn,playerId,param): playerId = param['player_id'] playerName = param['player_name'] playerPic = param['player_pic'] friendId = param['friend_id'] itemId = param['id'] mapItem = db_tool.lockItem(db,conn,friendId,itemId) if not mapItem: return {'status':0,'msg':'no such item'} definitionId = item_module.getDrawIdByMixId(mapItem['definitionId']) friends = mapItem['friends'] if friends: return {'status':0,'msg':'has helped by others'} player = db_tool.__getPlayerById(playerId) #消耗免费能量 player['help_energy'] -= 1 if player['help_energy'] < 0: return {'status':0,'msg':'not enough helpEnergy'} #获得的GB addGb = DRAWING_CONFIG[definitionId]['harvest']['income']/4 player['gb'] += addGb #获得奖励 db_tool.__updatePlayer(player['id'],{'gb':player['gb'],'help_energy':player['help_energy']}) #记录好友信息 friendsInfo = {} friendsInfo['id'] = playerId friendsInfo['name'] = playerName friendsInfo['pic'] = playerPic updateInfo = {'friends':db_tool.__dictToString(friendsInfo)} db_tool.updateItemById(db,conn,friendId,itemId,updateInfo) #添加交互日志 log_info = {} log_info['player_id'] = playerId log_info['player_name'] = playerName interaction_event.writeInteractionEventLog(log_info,friendId,4) return {'status':1,'gb':addGb,'playerInfo':player,'id':itemId}
def updateInviteReward(db,conn,snsId,alreadyRewardTimes,curRewardTimes): player = db_tool.__getPlayer(snsId) playerId = player['id'] system_reward = player['system_reward'] system_reward_list = system_reward_module.str2list(system_reward) #更新系统奖励 all_sys = system_reward_list+getSysRewardBoxs(alreadyRewardTimes,curRewardTimes) system_reward = system_reward_module.list2str(all_sys) db_tool.__updatePlayer(playerId,{'system_reward':system_reward}) totalRewardTimes = alreadyRewardTimes+curRewardTimes db.execute("update invite set sys_reward_times=%s where invite_id=%s",(totalRewardTimes,snsId)) conn.commit() return totalRewardTimes
def speedupProduce(playerId,param): machineId = param['machineId'] useNum = param['use_num'] needNum = param['need_num'] player = db_tool.__getPlayerById(playerId) #验证KB costKb = 0 if needNum>0: costKb = needNum*10 player['kb'] -= costKb if player['kb'] < 0: return {'status':0,'msg':'not enough kb'} propDict = db_tool.getAllProp(playerId) prop_id='2020' #验证加速道具 if useNum > 0: if not propDict.has_key(prop_id) or propDict[prop_id]<useNum : return {'status':0,'msg':'no or not enough '+prop_id} produceList = getProduceList(playerId) produce_start_time = produceList[str(machineId)]['startTime'] #总使用道具数 prop_num = useNum+needNum #加速时间一小时 speedTime = PROP_CONFIG[int(prop_id)]['speed'] #生产时间重新赋值 produce_start_time -= speedTime*prop_num produceList[str(machineId)]['startTime'] = produce_start_time updateProduce(playerId,produceList) if useNum>0: db_tool.__subtractPropItem(propDict,prop_id,useNum) db_tool.saveAllProp(playerId,propDict)#update prop db if costKb > 0: db_tool.__updatePlayer(playerId,{'kb':player['kb']}) return {'status':1,'bag':propDict,'pid':machineId,'produce':produceList[str(machineId)],'kb':player['kb']}
def habitatLevelUp(playerId,infos): habitatId = infos['habitat_id'] type = infos['money_type'] habitatInfo = getHabitatInfo(playerId) levelInfo = str2dict(habitatInfo['info']) if not levelInfo.has_key(str(habitatId)): return {'status':0,'msg':'err habitatId'} nextLevel = levelInfo[str(habitatId)]+1 limitInfo = HABITAT_CONFIG[habitatId][nextLevel] player = db_tool.__getPlayerById(playerId) #使用GB升级 if(type==1): price = limitInfo['GB'] if player['gb'] < price: return {'status':0,'msg':'not enough GB'} elif player['level'] < limitInfo['levelLimit']: return {'status':0,'msg':'not enough Level'} else : player['gb']-=price db_tool.__updatePlayer(playerId,{'gb':player['gb']}) #使用KB升级 else : price = limitInfo['KB'] if player['kb'] < price: return {'status':0,'msg':'not enough KB'} else: player['kb']-=price db_tool.__updatePlayer(playerId,{'kb':player['kb']}) #add cost log player_module.addCostLog(player['id'],price,'habitatLevelUp') levelInfo[str(habitatId)] = nextLevel updateInfo = {'info':dict2str(levelInfo)} updateHabitatInfo(playerId,updateInfo) return {'status':1,'gb':player['gb'],'kb':player['kb'],'id':habitatId,'level':nextLevel,'habitat':levelInfo}
def mix(playerId,definitionId): player = db_tool.__getPlayerById(playerId) propDict = db_tool.getAllProp(playerId) if not propDict.has_key(str(definitionId)): return {'status':0,'msg':'no definitionId'+str(definitionId)} drawing = propDict[str(definitionId)] if not drawing or drawing <= 0: return {'status':0,'type_error':13,'msg':' '} mix_prop = DRAWING_CONFIG[definitionId]['mix'] item_id = item_module.getMixIdByDrawId(definitionId) #合成新物种加经验 collectionStr = db_tool.__getPlayerCollection(player['id'])['status'] collection = __collectionToList(collectionStr) if str(item_id) in collection: exp = 0 else: exp = DRAWING_CONFIG[definitionId]['exp'] player['exp'] += exp #验证合成需要的材料 if not __checkNum(player,mix_prop,propDict): return {'status':0,'type_error':23,'msg':'材料数量不够'} for each in mix_prop: if each['type'] == 2: player['gb']-=each['value'] else: db_tool.__subtractPropItem(propDict,each['type'],each['value']) db_tool.__updatePlayer(player['id'],{'gb':player['gb'],'exp':player['exp']}) db_tool.__addPropItem(propDict,str(item_id),1) db_tool.__subtractPropItem(propDict,str(definitionId),1) db_tool.saveAllProp(player['id'],propDict)#update db __updateCollection(player,item_id) #num = db_tool.getGlobalDefinitionNum(item_id) #num=1 return {'status':1,'bag':propDict,"item_id":item_id,'add_exp':exp,'player_exp':player['exp'],'player_gb':player['gb']}
def buyPropInShop(playerId,params): player = db_tool.__getPlayerById(playerId) bool = True for each in params : prop_id = each['definitionId'] number = each['number'] # if str(prop_id) == '2': pass elif PROP_CONFIG[prop_id]['KB']>0 : #logging.debug(each) money=PROP_CONFIG[prop_id]['KB']*number player['kb']-=money if player['kb'] < 0: bool=False else: #add cost log player_module.addCostLog(playerId,money,'buyPropInShop') elif PROP_CONFIG[prop_id]['GB']>0: money=PROP_CONFIG[prop_id]['GB']*number player['gb']-=money if player['gb'] < 0: bool=False else: return {'status':0,'msg':'There is a error in PROP_CONFIG'} if bool: db_tool.__updatePlayer(player['id'],{'gb':player['gb'],'kb':player['kb']}) propDict = db_tool.getAllProp(playerId) for each in params : db_tool.__addPropItem(propDict,each['definitionId'],each['number'])#Not update db db_tool.saveAllProp(player['id'],propDict)#update db returnVal = {} returnVal['status'] = 1 returnVal['player'] = player returnVal['bag'] = propDict returnVal['items'] = params return returnVal else : return {'status':0,'msg':'Not enough money.'}
def finishCollection(playerId,definitionId): player = db_tool.__getPlayerById(playerId) # collectionListStr = db_tool.__getPlayerCollectionList(player['id'])['status'] if not collectionListStr: collectionListList = [] else: collectionListList = __collectionToList(collectionListStr) if str(definitionId) in collectionListList: return {'status':0,'msg':''} collectionStr = db_tool.__getPlayerCollection(player['id'])['status'] # if not collectionStr: collectionList = [] else: collectionList = __collectionToList(collectionStr) content = COLLECTION_CONFIG[definitionId]['content'] for each in content: if str(each) not in collectionList: return {'status':0} award = COLLECTION_CONFIG[definitionId]['award'] if award['gb']: player['gb'] += award['gb'] if award['exp']: player['exp'] += award['exp'] db_tool.__updatePlayer(player['id'],{'gb':player['gb'],'exp':player['exp']}) collectionListList.append(str(definitionId)) strCollection = __listToCollection(collectionListList) db_tool.updateCollectionList(strCollection,player['id']) prop = db_tool.getAllProp(playerId) if award['definitionId']: db_tool.__addPropItem(prop,award['definitionId'],1) db_tool.saveAllProp(playerId,prop) return {'status':1,'bag':prop,'player':player}
def buildingLevelUp(playerId,type): player = db_tool.__getPlayerById(playerId) produceInfo = produce_module.getProduceById(playerId) nextLevel = produceInfo['level']+1 produce_module.updateProduceLevel(playerId,nextLevel) #使用GB升级 if(type==1): price = PRODUCE_COFIG[nextLevel]['GB'] if player['gb'] < price: return {'status':0,'msg':'not enough GB'} elif player['level'] < PRODUCE_COFIG[nextLevel]['levelLimit']: return {'status':0,'msg':'not enough Level'} else : player['gb']-=price db_tool.__updatePlayer(playerId,{'gb':player['gb']}) #使用KB升级 else : price = PRODUCE_COFIG[nextLevel]['KB'] if player['kb'] < price: return {'status':0,'msg':'not enough KB'} else: player['kb']-=price db_tool.__updatePlayer(playerId,{'kb':player['kb']}) #add cost log player_module.addCostLog(player['id'],price,'buildingLevelUp') returnVal = {} returnVal['status'] = 1 returnVal['level'] = nextLevel returnVal['gb'] = player['gb'] returnVal['kb'] = player['kb'] returnVal['player'] = player return returnVal
def expandBagCapacity(db,conn,playerId,expandType): currentCapacity = getBagCapacity(playerId) #下次的扩容数 nextCapacity = currentCapacity+BAG_INCREMENT_CONFIG['increment'] if BAG_CONFIG.has_key(nextCapacity) and BAG_CONFIG[nextCapacity].has_key(expandType): player = db_tool.__getPlayerById(playerId) #验证扩充需要的gb or kb if player[expandType] < BAG_CONFIG[nextCapacity][expandType]: return {'status':0,'msg':'not enough '+expandType} player[expandType] = player[expandType] - BAG_CONFIG[nextCapacity][expandType] db.execute("UPDATE prop set capacity = %s WHERE user_id = %s",(nextCapacity,playerId)) db_tool.__updatePlayer(playerId,{expandType:player[expandType]}) conn.commit() return {'status':1,'player':player,'bagMax':nextCapacity} else: return {'status':0,'msg':'BAG_CONFIG error key : '+nextCapacity}
def startGrowth(playerId,itemId): mapItem = db_tool.__getItem(playerId,itemId) if not mapItem: return {'status':0,'msg':'no such item'} definitionId = item_module.getDrawIdByMixId(mapItem['definitionId']) #消耗GB costGb = DRAWING_CONFIG[definitionId]['harvest']['cost'] player = db_tool.__getPlayerById(playerId) player['gb'] -= costGb if player['gb'] < 0: return {'status':0,'msg':'not enough gb for growth'} db_tool.__updatePlayer(playerId,{'gb':player['gb']}) time_now = int(time.time()) updateInfo = {'created_time':time_now} db_tool.updateItem(playerId,itemId,updateInfo) return {'status':1,'id':itemId,'gb':costGb,'start_time':time_now}
def expandMap(playerId,type,snsObj): player = db_tool.__getPlayerById(playerId) returnVal = {} if type == 1: price = EXPAND_CONFIG[player['expand']+1]['KB'] if player['kb'] - price >= 0: player['kb'] -= price db_tool.__updatePlayer(player['id'],{'kb':player['kb'],'expand':player['expand']+1}) #add cost log addCostLog(player['id'],price,'expandMap') returnVal['status'] = 1 else: returnVal['status'] = 0 returnVal['msg'] = 'KB不足' return returnVal else: ''' friends = len(snsObj.getFriends()) if player['expand'] >= EXPAND_CONFIG[player['level']]['expand'] or friends <= EXPAND_CONFIG[player['level']]['friends']: returnVal['status'] = 0 returnVal['msg'] = '好友数量不足' return returnVal ''' price = EXPAND_CONFIG[player['expand']+1]['GB'] if player['gb'] - price >= 0: player['gb'] -= price db_tool.__updatePlayer(player['id'],{'gb':player['gb'],'expand':player['expand']+1}) returnVal['status'] = 1 else: returnVal['status'] = 0 returnVal['msg'] = 'GB不足' return returnVal player['expand'] += 1 returnVal['player'] = player return returnVal