def api_finish_story(player, story): data = '{{"storyId":"{}"}}'.format(story) res = utils.post_to_gs('/story/finishStory', data, player) # 游戏数据差量更新 player.update_attr(res['playerDataDelta']['modified']) logger.i('完成剧情: uid:{}, story: {}'.format(player.get_uid(), story)) return
def api_recieve_mail(player, mail_id, mail_type): data = '{{"type":{},"mailId":{}}}'.format(mail_type, mail_id) res = utils.post_to_gs('/mail/receiveMail', data, player) # 游戏数据差量更新 player.update_attr(res['playerDataDelta']['modified']) logger.i('邮件收取成功: uid:{}, 邮件id:{}'.format(player.get_uid(), mail_id)) return
def api_checkin(player): data = '{}' res = utils.post_to_gs('/user/checkIn', data, player) # 游戏数据差量更新 player.update_attr(res['playerDataDelta']['modified']) logger.i('每日签到完成: uid:{}'.format(player.get_uid())) return
def api_sync_normal_gacha(player): data = '{}' res = utils.post_to_gs('/gacha/syncNormalGacha', data, player) # 游戏数据差量更新 player.update_attr(res['playerDataDelta']['modified']) logger.i('卡池信息同步成功: uid:{}'.format(player.get_uid())) return
def api_confirm_mission(player, mission_id): data = '{{"missionId":"{}"}}'.format(mission_id) res = utils.post_to_gs('/mission/confirmMission', data, player) # 游戏数据差量更新 player.update_attr(res['playerDataDelta']['modified']) logger.i('完成任务: uid:{}, mission_id:{}'.format(player.get_uid(), mission_id)) return
def api_activity_checkin(player, activity_id, index): data = '{{"index":{},"activityId":"{}"}}'.format(index, activity_id) res = utils.post_to_gs('/activity/getActivityCheckInReward', data, player) # 游戏数据差量更新 player.update_attr(res['playerDataDelta']['modified']) logger.i('活动签到完成: uid:{}, 活动id:{}, 当前签到次数:{}'.format( player.get_uid(), activity_id, index)) return
def api_sync_status(player, modules): data = '{{"modules":{},"params":{{"16":{{"goodIdMap":{{"LS":[],"HS":[],"ES":[],"CASH":[],"GP":["GP_Once_1"],"SOCIAL":[]}}}}}}}}'.format( modules) res = utils.post_to_gs('/account/syncStatus', data, player) # 游戏数据差量更新 player.update_attr(res['playerDataDelta']['modified']) logger.i('状态同步成功: uid:{}, 更新账号上线时间:{}'.format(player.get_uid(), res['ts'])) return
def api_squad_formation(player, squad_id, slots, change_skill=0): data = '{{"squadId":"{}","slots":{},"changeSkill":{}}}'.format( squad_id, json.dumps(slots, ensure_ascii=False), change_skill) res = utils.post_to_gs('/quest/squadFormation', data, player) # 游戏数据差量更新 player.update_attr(res['playerDataDelta']['modified']) logger.i('编队更新成功: uid:{}'.format(player.get_uid())) return
def api_advancedGacha(player, pool_id, use_ticket): data = '{{"poolId":"{}","useTkt":{}}}'.format(pool_id, use_ticket) res = utils.post_to_gs('/gacha/advancedGacha', data, player) # 游戏数据差量更新 player.update_attr(res['playerDataDelta']['modified']) is_new = '新' if res['charGet']['isNew'] else '重复' logger.i('单抽成功: uid:{}, 获得{}卡牌: {}'.format(player.get_uid(), is_new, res['charGet']['charId'])) return
def api_bind_nickname(player, nickname): data = '{{"nickName":"{}"}}'.format(nickname) res = utils.post_to_gs('/user/bindNickName', data, player) code = int(res['result']) if code: panic('设置昵称失败: data={}, err_code={}'.format(data, code)) # 游戏数据差量更新 player.update_attr(res['playerDataDelta']['modified']) logger.i('昵称设置成功: uid:{}, 昵称:{}'.format(player.get_uid(), nickname)) return
def api_use_item(player, inst_id, item_id, cnt): data = '{{"instId":{},"itemId":"{}","cnt":{}}}'.format( inst_id, item_id, cnt) res = utils.post_to_gs('/user/useItem', data, player) # 游戏数据差量更新 player.update_attr(res['playerDataDelta']['modified']) logger.i('道具使用成功: uid:{}, 道具id:{}, 道具剩余数量:{}'.format( player.get_uid(), item_id, player.get_attr()['consumable'][item_id][inst_id]['count'])) return
def api_sync_data(player): data = '{"platform":1}' res = utils.post_to_gs('/account/syncData', data, player) logger.i('数据同步成功: uid:{}, 服务器时间:{}'.format(player.get_uid(), res['ts'])) # 本地时间校正 utils.set_time_diff(res['ts']) # 记录玩家上线时间 player.set_login_time(res['user']['event']['status']) # 保存玩家游戏数据 player.update_attr(res['user']) logger.i('登陆时间戳已保存: uid:{}, login_time:{}'.format(player.get_uid(), player.get_login_time())) return res
def api_login(player): if not RES_VERSION or not CLIENT_VERSION: panic('获取客户端版本号失败!') data = '''{{"networkVersion":"{}","uid":"{}","token":"{}","assetsVersion":"{}","clientVersion":"{}","platform":{},"deviceId":"{}","deviceId2":"{}","deviceId3":"{}"}}'''.format( config.NETWORK_VERSION, player.get_uid(), player.get_token(), RES_VERSION, CLIENT_VERSION, config.PLATFORM, player.get_device_id(), player.get_device_id2(), player.get_device_id3()) res = utils.post_to_gs('/account/login', data, player) code = int(res['result']) if code: panic('登录失败: data={}, err_code={}'.format(data, code)) player.set_secret(res['secret']) logger.i('账号登录成功: uid={}, secret={}'.format(player.get_uid(), player.get_secret())) return player.get_secret()
def api_get_meta_info_list(player): data = '{{"from":{}}}'.format(utils.get_local_time()) res = utils.post_to_gs('/mail/getMetaInfoList', data, player) # 游戏数据差量更新 player.update_attr(res['playerDataDelta']['modified']) unread_mail_list = [] has_item = False for mail in res['result']: if 0 == mail['state']: unread_mail_list.append({ 'mailId': mail['mailId'], 'type': mail['type'] }) if mail['hasItem']: has_item = True logger.i('成功获取邮件列表: uid:{}, 未读邮件数:{}, 是否有物品:{}'.format( player.get_uid(), len(unread_mail_list), has_item)) return unread_mail_list
def api_battle_start(player, stage_id, squad='null', is_weekly_copy=False): cgi = '/quest/battleStart' if not is_weekly_copy else '/campaign/battleStart' # 不演习/不求助好友/不自动战斗 use_practice_ticket = 0 assist_friend = 'null' is_replay = 0 data = '''{{"usePracticeTicket":{},"stageId":"{}","squad":{},"assistFriend":{},"isReplay":{},"startTs":{}}}'''.format( use_practice_ticket, stage_id, squad, assist_friend, is_replay, utils.get_local_time()) res = utils.post_to_gs(cgi, data, player) code = int(res['result']) if code: panic('进入副本失败: data={}, err_code={}'.format(data, code)) battle_id = res['battleId'] # 游戏数据差量更新 player.update_attr(res['playerDataDelta']['modified']) logger.i('进入副本成功: uid:{}, 副本id:{}, battle_id:{}'.format( player.get_uid(), stage_id, battle_id)) return battle_id
def api_battle_finish(player, battle_id, battle_start_time, battle_data, is_weekly_copy=False): cgi = '/quest/battleFinish' if not is_weekly_copy else '/campaign/battleFinish' # 校正battle_data数据 battle_data['battleId'] = battle_id # 生成is_cheat校验参数 is_cheat = encrypt_utils.get_is_cheat(battle_id) battle_data['battleData']['isCheat'] = is_cheat # 通关时间 now = utils.get_local_time() complete_time = config.get_random_complete_time(now - battle_start_time) battle_data['battleData']['completeTime'] = complete_time battle_data['battleData']['stats']['beginTs'] = battle_start_time battle_data['battleData']['stats']['endTs'] = now # 生成access校验 access = encrypt_utils.get_access_token(player.get_login_time()) battle_data['battleData']['stats']['access'] = access # 应用包名 battle_data['battleData']['stats']['packageName'] = config.PACKAGE_NAME # 平台 battle_data['platform'] = config.PLATFORM # 战斗数据更多优化 config.adjust_battle_data(battle_data) # battle_data加密 encrypted_data = encrypt_utils.battle_finish_data_encrypt( json.dumps(battle_data), player.get_login_time()) data = '''{{"data":"{}","battleData":{{"isCheat":"{}","completeTime":{},"stats":null}}}}'''.format( encrypted_data, is_cheat, complete_time) res = utils.post_to_gs(cgi, data, player) code = int(res['result']) if code: panic('副本通关失败: data={}, err_code={}'.format(data, code)) # 游戏数据差量更新 player.update_attr(res['playerDataDelta']['modified']) logger.i('副本通关成功: uid:{}, 当前剩余体力: {}/{}'.format( player.get_uid(), player.get_attr()['status']['ap'], player.get_attr()['status']['maxAp'])) return res
def api_get_unconfirmed_orderid_list(player): data = '{}' utils.post_to_gs('/pay/getUnconfirmedOrderIdList', data, player) logger.i('获取未完成订单成功: uid:{}'.format(player.get_uid())) return