Exemplo n.º 1
0
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.'}
Exemplo n.º 2
0
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}
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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'}
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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}
Exemplo n.º 7
0
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)}
Exemplo n.º 8
0
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}
Exemplo n.º 9
0
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.'}
Exemplo n.º 10
0
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}
Exemplo n.º 11
0
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
Exemplo n.º 12
0
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']}
Exemplo n.º 13
0
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}
Exemplo n.º 14
0
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"]}
Exemplo n.º 15
0
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}
Exemplo n.º 16
0
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}
Exemplo n.º 17
0
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)}
Exemplo n.º 18
0
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}
Exemplo n.º 19
0
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.'}
Exemplo n.º 20
0
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}
Exemplo n.º 21
0
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
Exemplo n.º 22
0
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']}
Exemplo n.º 23
0
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}
Exemplo n.º 24
0
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']}
Exemplo n.º 25
0
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.'}
Exemplo n.º 26
0
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}
Exemplo n.º 27
0
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
Exemplo n.º 28
0
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}
Exemplo n.º 29
0
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}
Exemplo n.º 30
0
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