diff --git a/.gitignore b/.gitignore index abb04e2..697e522 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ src/test/ src/config/api_config.yaml important_stuff.txt *.pyc +/src/app/tmp diff --git a/src/endpoints/user_handeling.py b/src/endpoints/user_handeling.py index 0f84bdc..21f10eb 100644 --- a/src/endpoints/user_handeling.py +++ b/src/endpoints/user_handeling.py @@ -485,9 +485,9 @@ def challenges_get_challenges(): response = request.get_json() challenge_type = sanitize_input(response["data"]["challengeType"]) if challenge_type == "Weekly": - return_data = new_challenge_handler.get_time_based_challenges(challenge_type="weekly", userid=userid) + return_data = new_challenge_handler.get_time_based_challenges(challenge_type="Weekly", userid=userid) elif challenge_type == "Daily": - return_data = new_challenge_handler.get_time_based_challenges(challenge_type="daily", userid=userid) + return_data = new_challenge_handler.get_time_based_challenges(challenge_type="Daily", userid=userid) else: logger.graylog_logger(level="error", handler="getChallenges", message=f"Unknown challenge type {challenge_type}") @@ -1422,10 +1422,26 @@ def challenges_get_challenge_progression_batch(): challenge_ids = data["data"]["challengeIds"] challenge_list = [] userid = data["data"]["userId"] + + #moved this call to outside get_progression_batch to reduce the amount of database calls + #change array to dict for quicker element access + db_challenge = mongo.get_data_with_list(login=userid, login_steam=False, items={"challengeProgression"})[ + "challengeProgression"] + db_challenge_dict = {} + for challenge in db_challenge: + #We do not want timestamp in our key otherwise duplicate weekly/daily challenges are created + db_challenge_dict[challenge["challengeId"].split(":")[0]] = challenge + for challenge in challenge_ids: + challenge_data = None if ":" in challenge: challenge = challenge.split(":")[0] - challenge_data = new_challenge_handler.get_progression_batch(challenge, userid) + challenge_data = new_challenge_handler.get_time_based_progression_batch(challenge, + userid, db_challenge_dict) + else: + challenge_data = new_challenge_handler.get_time_based_progression_batch(challenge, + userid, db_challenge_dict) + if challenge_data: challenge_list.append(challenge_data) else: diff --git a/src/logic/challenge_handler_new.py b/src/logic/challenge_handler_new.py index ea764a9..7894994 100644 --- a/src/logic/challenge_handler_new.py +++ b/src/logic/challenge_handler_new.py @@ -15,12 +15,9 @@ from src.util.challenge_data import * def update_challenge_time(current_challenge_data, challenge_type): - if challenge_type == "daily": - current_challenge_data["lifetime"]["creationTime"] = get_lifetime("daily")[0] - current_challenge_data["lifetime"]["expirationTime"] = get_lifetime("daily")[1] - elif challenge_type == "weekly": - current_challenge_data["lifetime"]["creationTime"] = get_lifetime("weekly")[0] - current_challenge_data["lifetime"]["expirationTime"] = get_lifetime("weekly")[1] + if challenge_type == "Weekly" or challenge_type == "Daily": + current_challenge_data["lifetime"]["creationTime"] = get_lifetime(challenge_type)[0] + current_challenge_data["lifetime"]["expirationTime"] = get_lifetime(challenge_type)[1] else: logger.graylog_logger(level="Error", handler="update_challenge_time", message="Invalid challenge type") return None @@ -103,44 +100,10 @@ def get_challenge_ids_from_inventory(user_id): class ChallengeHandler: def __init__(self): - self.weekly_challenges = [ - "Challenge_ARB_Damage_HunterWeekly", - "Challenge_AssaultRifleWins_HunterWeekly", - "Challenge_BleedOut_HunterWeekly", - "Challenge_BleedOut_RunnerWeekly", - "Challenge_Damage_HunterWeekly", - "Challenge_Double_HunterWeekly", - "Challenge_DroneActivation_HunterWeekly", - "Challenge_Efficient_HunterWeekly", - "Challenge_Emotional_HunterWeekly", - "Challenge_Emotional_RunnerWeekly", - "Challenge_Greed_HunterWeekly", - "Challenge_Greed_RunnerWeekly", - "Challenge_Headshot_HunterWeekly", - "Challenge_HuntingShotgunWins_HunterWeekly", - "Challenge_InDenial_HunterWeekly", - "Challenge_LMGWins_HunterWeekly", - "Challenge_Mines_HunterWeekly", - "Challenge_Mines_RunnerWeekly", - "Challenge_Reveals_hunterWeekly", - "Challenge_RingOut_hunterWeekly", - "Challenge_Shields_RunnerWeekly", - "Challenge_ShotgunDowns_HunterWeekly", - "Challenge_Speed_HunterWeekly", - "Challenge_SpeedCapture_RunnerWeekly", - "Challenge_Stuns_RunnerWeekly", - "Challenge_Turrets_HunterWeekly", - "Challenge_Turrets_RunnerWeekly", - "Challenge_UPs_RunnerWeekly", - "Challenge_Wasteful_HunterWeekly", - "Challenge_Wasteful_RunnerWeekly", - "Challenge_WUP_HunterWeekly", - "Challenge_WUP_RunnerWeekly" - ] - self.daily_challenges = [ - "Daily_Domination_Hunter", - "Daily_Domination_Runner", - ] + # imported from challenge data weekly_challenges + self.weekly_challenges = weekly_challenges + # imported from challenge data daily_challenges + self.daily_challenges = daily_challenges self.event_challenges = [] def get_challenge_by_id(self, challenge_id, user_id): @@ -236,9 +199,9 @@ class ChallengeHandler: } def get_time_based_challenges(self, userid, challenge_type): - if challenge_type == "daily": + if challenge_type == "Daily": challenges = self.daily_challenges - elif challenge_type == "weekly": + elif challenge_type == "Weekly": challenges = self.weekly_challenges else: return None @@ -250,12 +213,18 @@ class ChallengeHandler: if user_data is not None: for challenge in user_data: user_time_challenges.append(challenge["challengeId"].split(":")[0]) + else: + logger.graylog_logger(level="info", handler="get_time_based_challenges", + message=f"No User Challenge Data Found") for challenge_id in challenges: if challenge_id not in user_time_challenges: current_challenge_data = self.add_challenge_to_user(userid, challenge_id, challenge_type) else: + logger.graylog_logger(level="info", handler="get_time_based_challenges", + message=f"Data {user_data[user_time_challenges.index(challenge_id)]})") + current_challenge_data = user_data[user_time_challenges.index(challenge_id)] lifetime = get_lifetime(challenge_type)[0] if lifetime > current_challenge_data["lifetime"]["expirationTime"]: @@ -267,13 +236,11 @@ class ChallengeHandler: "lifetime": current_challenge_data["lifetime"], "challengeType": challenge_type, "challengeId": current_challenge_data["challengeId"], - "challengeCompletionValue": challenge_data[challenge_id]["ChallengeCompletionValue"], - "faction": challenge_data[challenge_id]["faction"], - "challengeBlueprint": challenge_data[challenge_id]["challengeBlueprint"], - "rewards": [get_reward(challenge_data[challenge_id]["challengeBlueprint"])] + "challengeCompletionValue": challenges[challenge_id]["ChallengeCompletionValue"], + "faction": challenges[challenge_id]["faction"], + "challengeBlueprint": challenges[challenge_id]["challengeBlueprint"], + "rewards": [get_reward(challenges[challenge_id]["challengeBlueprint"])] }) - else: - logger.graylog_logger(level="info", handler="get_time_based_challenges", message=f"No User Challenge Data Found ({challenge_type})") return return_data @@ -364,21 +331,123 @@ class ChallengeHandler: data = { "challengeId": challenge_id, "completed": False, + "value": 0, + "challengeType": challenge_type + #Seems like many functions rely on challengeType to exist } - if challenge_type.upper() == "WEEKLY" or challenge_type.upper() == "DAILY": + if challenge_type == "Weekly" or challenge_type == "Daily": data["lifetime"] = { "creationTime": "", "expirationTime": "" } data = update_challenge_time(data, challenge_type) - data["challengeId"] = challenge_id + ":" + get_lifetime(challenge_type)[0] + data["challengeId"] = challenge_id + ":" + get_lifetime(challenge_type)[0] user_challenge_data.append(data) mongo.write_data_with_list(login=user_id, login_steam=False, items_dict={"challengeProgression": user_challenge_data}) return data + #for each challenge id sent in request + #look at each time based challenge + #if challenge id is matched with a time based challenge + # grab challenge progression from back end database + # iterate through database challenges + # if database challenge matches challenge id from request + # + # + # + def get_time_based_progression_batch(self, challenge_id, userid, db_challenge): + #combine challenge dicts and see if ID is in them + #Should not alter anything if challenge_id is not a recognized challenge + if challenge_id in {**self.daily_challenges, **self.weekly_challenges, **challenge_data}: + if challenge_id in db_challenge: + challenge = db_challenge[challenge_id] + if challenge["value"] == 0: + data = {"challengeId": challenge["challengeId"], + "completed": False} + else: + if challenge["completed"]: + reward_key = "rewards" + # TEST should be rewardsClaimed + else: + reward_key = "rewards" + data = { + "challengeId": challenge["challengeId"], + "className": "ChallengeProgressionCounter", + reward_key: [ + { + "weight": 100, + "type": "currency", + "amount": 30, + "id": "CurrencyA" + } + ], + "completed": challenge["completed"], + "schemaVersion": 1, + "value": challenge["value"] + } + if challenge["challengeType"] == "Daily": + create_time, expiration_time = get_lifetime("Daily") + elif challenge["challengeType"] == "Weekly": + create_time, expiration_time = get_lifetime("Weekly") + else: + return data + if create_time > challenge["lifetime"]["expirationTime"]: + challenge["completed"] = False + challenge["completion_count"] = challenge["completion_count"] + 1 + challenge["lifetime"]["creationTime"] = create_time + challenge["lifetime"]["expirationTime"] = expiration_time + mongo.write_data_with_list(login=userid, login_steam=False, + items_dict={"challenges": db_challenge}) + return data + else: + start_data = challenge["lifetime"]["creationTime"] + expiration_date = challenge["lifetime"]["expirationTime"] + data["lifetime"] = { + "creationTime": start_data, + "expirationTime": expiration_date + } + return data + + #if not found in user db_challenge create challenge + else: + print("CHALLENGE NOT IN DB_CHALLENGE") + challenge_type = \ + {**self.daily_challenges, **self.weekly_challenges, **challenge_data}[challenge_id]["className"] + + if challenge_type == "Daily": + create_time, expiration_time = get_lifetime("Daily") + self.add_challenge_to_user(userid, challenge_id, challenge_type) + return {"challengeId": challenge_id, "completed": False, "className": "Weekly", + "lifetime": { + "creationTime": create_time, + "expirationTime": expiration_time + }, + "completion_count": 0} + if challenge_type == "Weekly": + create_time, expiration_time = get_lifetime("Weekly") + self.add_challenge_to_user(userid, challenge_id, challenge_type) + return {"challengeId": challenge_id, "completed": False, "className": "Weekly", + "lifetime": { + "creationTime": create_time, + "expirationTime": expiration_time + }, + "completion_count": 0} + self.add_challenge_to_user(userid, challenge_id, challenge_type) + return {"challengeId": challenge_id, "completed": False} + + else: + #A lot of challenges are sent that are not in challenge_data + #Add them anyways + if challenge_id not in db_challenge: + self.add_challenge_to_user(userid, challenge_id, "ChallengeProgressionCounter") + return {"challengeId": challenge_id, "completed": False} + logger.graylog_logger(level="error", handler="get_progression_batch", + message=f"Challenge KEY ERROR {challenge_id}") + + return None; def get_progression_batch(self, challenge_id, userid): #challenge_data is now a dict #will loop through keys diff --git a/src/logic/time_handler.py b/src/logic/time_handler.py index 0d2905c..8b48d87 100644 --- a/src/logic/time_handler.py +++ b/src/logic/time_handler.py @@ -33,10 +33,10 @@ def get_lifetime(challenge_type): # "creationTime":"2019-11-25T02:17:22.484Z", # "expirationTime":"2019-11-25T17:59:59.000Z" # } - if challenge_type == "daily": + if challenge_type == "Daily": creation_time = datetime.datetime.now().isoformat(timespec='milliseconds') expiration_time = (datetime.datetime.now() + datetime.timedelta(days=1)).replace(hour=23, minute=59, second=59, microsecond=0).isoformat(timespec='milliseconds') - elif challenge_type == "weekly": + elif challenge_type == "Weekly": creation_time = datetime.datetime.now().isoformat(timespec='milliseconds') expiration_time = (datetime.datetime.now() + datetime.timedelta(days=7)).replace(hour=23, minute=59, second=59, microsecond=0).isoformat(timespec='milliseconds') else: diff --git a/src/util/challenge_data.py b/src/util/challenge_data.py index a71e5d4..cff1a71 100644 --- a/src/util/challenge_data.py +++ b/src/util/challenge_data.py @@ -39,7 +39,8 @@ time_based_challenge = { } ] } -weekly_challenges = [ + +old_weekly_challenges = [ "Challenge_ARB_Damage_HunterWeekly", "Challenge_AssaultRifleWins_HunterWeekly", "Challenge_BleedOut_HunterWeekly", @@ -73,11 +74,220 @@ weekly_challenges = [ "Challenge_WUP_HunterWeekly", "Challenge_WUP_RunnerWeekly" ] -daily_challenges = [ +old_daily_challenges = [ "Daily_Domination_Hunter", "Daily_Domination_Runner", ] +weekly_challenges = { +'Challenge_ARB_Damage_HunterWeekly': {'challenge_id': 'Challenge_ARB_Damage_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_ARB_Damage_HunterWeekly.Challenge_ARB_Damage_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 10000, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_AssaultRifleWins_HunterWeekly': {'challenge_id': 'Challenge_AssaultRifleWins_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_AssaultRifleWins_HunterWeekly.Challenge_AssaultRifleWins_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 100, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_BleedOut_HunterWeekly': {'challenge_id': 'Challenge_BleedOut_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_BleedOut_HunterWeekly.Challenge_BleedOut_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 15, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_BleedOut_RunnerWeekly': {'challenge_id': 'Challenge_BleedOut_RunnerWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_BleedOut_RunnerWeekly.Challenge_BleedOut_RunnerWeekly', + 'faction': 'Runner', + 'ChallengeCompletionValue': 30, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_Damage_HunterWeekly': {'challenge_id': 'Challenge_Damage_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Damage_HunterWeekly.Challenge_Damage_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 10000, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_Double_HunterWeekly': {'challenge_id': 'Challenge_Double_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Double_HunterWeekly.Challenge_Double_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 10, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_DroneActivation_HunterWeekly': {'challenge_id': 'Challenge_DroneActivation_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_DroneActivation_HunterWeekly.Challenge_DroneActivation_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 100, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_Efficient_HunterWeekly': {'challenge_id': 'Challenge_Efficient_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Efficient_HunterWeekly.Challenge_Efficient_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 20, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_Emotional_HunterWeekly': {'challenge_id': 'Challenge_Emotional_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Emotional_HunterWeekly.Challenge_Emotional_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 60, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_Emotional_RunnerWeekly': {'challenge_id': 'Challenge_Emotional_RunnerWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Emotional_RunnerWeekly.Challenge_Emotional_RunnerWeekly', + 'faction': 'Runner', + 'ChallengeCompletionValue': 60, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_Greed_HunterWeekly': {'challenge_id': 'Challenge_Greed_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Greed_HunterWeekly.Challenge_Greed_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 200, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_Greed_RunnerWeekly': {'challenge_id': 'Challenge_Greed_RunnerWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Greed_RunnerWeekly.Challenge_Greed_RunnerWeekly', + 'faction': 'Runner', + 'ChallengeCompletionValue': 200, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_Headshot_HunterWeekly': {'challenge_id': 'Challenge_Headshot_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Headshot_HunterWeekly.Challenge_Headshot_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 15, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_HuntingShotgunWins_HunterWeekly': {'challenge_id': 'Challenge_HuntingShotgunWins_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_HuntingShotgunWins_HunterWeekly.Challenge_HuntingShotgunWins_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 30, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_InDenial_HunterWeekly': {'challenge_id': 'Challenge_InDenial_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_InDenial_HunterWeekly.Challenge_InDenial_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 50, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_LMGWins_HunterWeekly': {'challenge_id': 'Challenge_LMGWins_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_LMGWins_HunterWeekly.Challenge_LMGWins_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 100, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_Mines_HunterWeekly': {'challenge_id': 'Challenge_Mines_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Mines_HunterWeekly.Challenge_Mines_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 60, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_Mines_RunnerWeekly': {'challenge_id': 'Challenge_Mines_RunnerWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Mines_RunnerWeekly.Challenge_Mines_RunnerWeekly', + 'faction': 'Runner', + 'ChallengeCompletionValue': 50, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_Reveals_hunterWeekly': {'challenge_id': 'Challenge_Reveals_hunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Reveals_hunterWeekly.Challenge_Reveals_hunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 100, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_RingOut_hunterWeekly': {'challenge_id': 'Challenge_RingOut_hunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_RingOut_hunterWeekly.Challenge_RingOut_hunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 15, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_Shields_RunnerWeekly': {'challenge_id': 'Challenge_Shields_RunnerWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Shields_RunnerWeekly.Challenge_Shields_RunnerWeekly', + 'faction': 'Runner', + 'ChallengeCompletionValue': 100, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_ShotgunDowns_HunterWeekly': {'challenge_id': 'Challenge_ShotgunDowns_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_ShotgunDowns_HunterWeekly.Challenge_ShotgunDowns_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 100, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_Speed_HunterWeekly': {'challenge_id': 'Challenge_Speed_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Speed_HunterWeekly.Challenge_Speed_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 10, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_SpeedCapture_RunnerWeekly': {'challenge_id': 'Challenge_SpeedCapture_RunnerWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_SpeedCapture_RunnerWeekly.Challenge_SpeedCapture_RunnerWeekly', + 'faction': 'Runner', + 'ChallengeCompletionValue': 10, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_Stuns_RunnerWeekly': {'challenge_id': 'Challenge_Stuns_RunnerWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Stuns_RunnerWeekly.Challenge_Stuns_RunnerWeekly', + 'faction': 'Runner', + 'ChallengeCompletionValue': 100, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_Turrets_HunterWeekly': {'challenge_id': 'Challenge_Turrets_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Turrets_HunterWeekly.Challenge_Turrets_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 30, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_Turrets_RunnerWeekly': {'challenge_id': 'Challenge_Turrets_RunnerWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Turrets_RunnerWeekly.Challenge_Turrets_RunnerWeekly', + 'faction': 'Runner', + 'ChallengeCompletionValue': 10, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_UPs_RunnerWeekly': {'challenge_id': 'Challenge_UPs_RunnerWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_UPs_RunnerWeekly.Challenge_UPs_RunnerWeekly', + 'faction': 'Runner', + 'ChallengeCompletionValue': 30, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_Wasteful_HunterWeekly': {'challenge_id': 'Challenge_Wasteful_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Wasteful_HunterWeekly.Challenge_Wasteful_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 10000, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_Wasteful_RunnerWeekly': {'challenge_id': 'Challenge_Wasteful_RunnerWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Wasteful_RunnerWeekly.Challenge_Wasteful_RunnerWeekly', + 'faction': 'Runner', + 'ChallengeCompletionValue': 10000, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_WUP_HunterWeekly': {'challenge_id': 'Challenge_WUP_HunterWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_WUP_HunterWeekly.Challenge_WUP_HunterWeekly', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 150, + 'type': 'currency', + 'challengeType': 'Weekly'}, + 'Challenge_WUP_RunnerWeekly': {'challenge_id': 'Challenge_WUP_RunnerWeekly', + 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_WUP_RunnerWeekly.Challenge_WUP_RunnerWeekly', + 'faction': 'Runner', + 'ChallengeCompletionValue': 150, + 'type': 'currency', + 'challengeType': 'Weekly'} +} + +daily_challenges = { + 'Daily_Domination_Hunter': {'challenge_id': 'Daily_Domination_Hunter', + 'challengeBlueprint': '/Game/Challenges/Daily/Challenge_Domination_Hunter.Challenge_Domination_Hunter', + 'faction': 'Hunter', + 'ChallengeCompletionValue': 1, + 'type': 'currency', + 'challengeType': 'Daily'}, + 'Daily_Domination_Runner': {'challenge_id': 'Daily_Domination_Runner', + 'challengeBlueprint': '/Game/Challenges/Daily/Challenge_Domination_Runner.Challenge_Domination_Runner', + 'faction': 'Runner', + 'ChallengeCompletionValue': 1, + 'type': 'currency', + 'challengeType': 'Daily'}, +} challenge_data = { 'AAA17F074165BF5D36D1029C127A0D4E': {'challenge_id': 'AAA17F074165BF5D36D1029C127A0D4E', @@ -3248,210 +3458,6 @@ challenge_data = { 'ChallengeCompletionValue': 58800, 'type': 'currency', 'challengeType': 'ChallengeProgressionCounter'}, - 'Daily_Domination_Hunter': {'challenge_id': 'Daily_Domination_Hunter', - 'challengeBlueprint': '/Game/Challenges/Daily/Challenge_Domination_Hunter.Challenge_Domination_Hunter', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 1, - 'type': 'currency', - 'challengeType': 'Daily'}, - 'Daily_Domination_Runner': {'challenge_id': 'Daily_Domination_Runner', - 'challengeBlueprint': '/Game/Challenges/Daily/Challenge_Domination_Runner.Challenge_Domination_Runner', - 'faction': 'Runner', - 'ChallengeCompletionValue': 1, - 'type': 'currency', - 'challengeType': 'Daily'}, - 'Challenge_ARB_Damage_HunterWeekly': {'challenge_id': 'Challenge_ARB_Damage_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_ARB_Damage_HunterWeekly.Challenge_ARB_Damage_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 10000, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_AssaultRifleWins_HunterWeekly': {'challenge_id': 'Challenge_AssaultRifleWins_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_AssaultRifleWins_HunterWeekly.Challenge_AssaultRifleWins_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 100, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_BleedOut_HunterWeekly': {'challenge_id': 'Challenge_BleedOut_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_BleedOut_HunterWeekly.Challenge_BleedOut_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 15, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_BleedOut_RunnerWeekly': {'challenge_id': 'Challenge_BleedOut_RunnerWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_BleedOut_RunnerWeekly.Challenge_BleedOut_RunnerWeekly', - 'faction': 'Runner', - 'ChallengeCompletionValue': 30, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_Damage_HunterWeekly': {'challenge_id': 'Challenge_Damage_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Damage_HunterWeekly.Challenge_Damage_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 10000, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_Double_HunterWeekly': {'challenge_id': 'Challenge_Double_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Double_HunterWeekly.Challenge_Double_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 10, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_DroneActivation_HunterWeekly': {'challenge_id': 'Challenge_DroneActivation_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_DroneActivation_HunterWeekly.Challenge_DroneActivation_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 100, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_Efficient_HunterWeekly': {'challenge_id': 'Challenge_Efficient_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Efficient_HunterWeekly.Challenge_Efficient_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 20, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_Emotional_HunterWeekly': {'challenge_id': 'Challenge_Emotional_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Emotional_HunterWeekly.Challenge_Emotional_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 60, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_Emotional_RunnerWeekly': {'challenge_id': 'Challenge_Emotional_RunnerWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Emotional_RunnerWeekly.Challenge_Emotional_RunnerWeekly', - 'faction': 'Runner', - 'ChallengeCompletionValue': 60, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_Greed_HunterWeekly': {'challenge_id': 'Challenge_Greed_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Greed_HunterWeekly.Challenge_Greed_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 200, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_Greed_RunnerWeekly': {'challenge_id': 'Challenge_Greed_RunnerWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Greed_RunnerWeekly.Challenge_Greed_RunnerWeekly', - 'faction': 'Runner', - 'ChallengeCompletionValue': 200, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_Headshot_HunterWeekly': {'challenge_id': 'Challenge_Headshot_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Headshot_HunterWeekly.Challenge_Headshot_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 15, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_HuntingShotgunWins_HunterWeekly': {'challenge_id': 'Challenge_HuntingShotgunWins_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_HuntingShotgunWins_HunterWeekly.Challenge_HuntingShotgunWins_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 30, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_InDenial_HunterWeekly': {'challenge_id': 'Challenge_InDenial_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_InDenial_HunterWeekly.Challenge_InDenial_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 50, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_LMGWins_HunterWeekly': {'challenge_id': 'Challenge_LMGWins_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_LMGWins_HunterWeekly.Challenge_LMGWins_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 100, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_Mines_HunterWeekly': {'challenge_id': 'Challenge_Mines_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Mines_HunterWeekly.Challenge_Mines_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 60, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_Mines_RunnerWeekly': {'challenge_id': 'Challenge_Mines_RunnerWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Mines_RunnerWeekly.Challenge_Mines_RunnerWeekly', - 'faction': 'Runner', - 'ChallengeCompletionValue': 50, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_Reveals_hunterWeekly': {'challenge_id': 'Challenge_Reveals_hunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Reveals_hunterWeekly.Challenge_Reveals_hunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 100, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_RingOut_hunterWeekly': {'challenge_id': 'Challenge_RingOut_hunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_RingOut_hunterWeekly.Challenge_RingOut_hunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 15, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_Shields_RunnerWeekly': {'challenge_id': 'Challenge_Shields_RunnerWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Shields_RunnerWeekly.Challenge_Shields_RunnerWeekly', - 'faction': 'Runner', - 'ChallengeCompletionValue': 100, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_ShotgunDowns_HunterWeekly': {'challenge_id': 'Challenge_ShotgunDowns_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_ShotgunDowns_HunterWeekly.Challenge_ShotgunDowns_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 100, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_Speed_HunterWeekly': {'challenge_id': 'Challenge_Speed_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Speed_HunterWeekly.Challenge_Speed_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 10, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_SpeedCapture_RunnerWeekly': {'challenge_id': 'Challenge_SpeedCapture_RunnerWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_SpeedCapture_RunnerWeekly.Challenge_SpeedCapture_RunnerWeekly', - 'faction': 'Runner', - 'ChallengeCompletionValue': 10, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_Stuns_RunnerWeekly': {'challenge_id': 'Challenge_Stuns_RunnerWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Stuns_RunnerWeekly.Challenge_Stuns_RunnerWeekly', - 'faction': 'Runner', - 'ChallengeCompletionValue': 100, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_Turrets_HunterWeekly': {'challenge_id': 'Challenge_Turrets_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Turrets_HunterWeekly.Challenge_Turrets_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 30, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_Turrets_RunnerWeekly': {'challenge_id': 'Challenge_Turrets_RunnerWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Turrets_RunnerWeekly.Challenge_Turrets_RunnerWeekly', - 'faction': 'Runner', - 'ChallengeCompletionValue': 10, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_UPs_RunnerWeekly': {'challenge_id': 'Challenge_UPs_RunnerWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_UPs_RunnerWeekly.Challenge_UPs_RunnerWeekly', - 'faction': 'Runner', - 'ChallengeCompletionValue': 30, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_Wasteful_HunterWeekly': {'challenge_id': 'Challenge_Wasteful_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Wasteful_HunterWeekly.Challenge_Wasteful_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 10000, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_Wasteful_RunnerWeekly': {'challenge_id': 'Challenge_Wasteful_RunnerWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_Wasteful_RunnerWeekly.Challenge_Wasteful_RunnerWeekly', - 'faction': 'Runner', - 'ChallengeCompletionValue': 10000, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_WUP_HunterWeekly': {'challenge_id': 'Challenge_WUP_HunterWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_WUP_HunterWeekly.Challenge_WUP_HunterWeekly', - 'faction': 'Hunter', - 'ChallengeCompletionValue': 150, - 'type': 'currency', - 'challengeType': 'Weekly'}, - 'Challenge_WUP_RunnerWeekly': {'challenge_id': 'Challenge_WUP_RunnerWeekly', - 'challengeBlueprint': '/Game/Challenges/Weekly/Challenge_WUP_RunnerWeekly.Challenge_WUP_RunnerWeekly', - 'faction': 'Runner', - 'ChallengeCompletionValue': 150, - 'type': 'currency', - 'challengeType': 'Weekly'}, 'B4B156CC47C8D987B9BDBEB910B12C9E': {'challenge_id': 'B4B156CC47C8D987B9BDBEB910B12C9E', 'challengeBlueprint': '/Game/Challenges/Progression/Challenge_AmmoOpportunist_Runner.Challenge_AmmoOpportunist_Runner', 'faction': 'Runner',