mock_campaigns.py (36894B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\mock_data\mock_campaigns.py 2 import datetime 3 from campaigns.client.v1.data_model.campaign import CampaignID 4 from eveProto import split_precision 5 from eveProto.generated.eve_public.campaign.api.requests_pb2 import GetResponse, GetAllUnredeemedRewardsResponse, GetParticipantStatsResponse 6 from eveProto.generated.eve_public.campaign.contributionmethod.configuration_pb2 import Configuration, ParameterConfiguration, MatcherParameterConfiguration 7 from eveProto.generated.eve_public.campaign.contributionmethod.definition.definition_pb2 import Identifier as ContributionMethodIdentifier 8 from eveProto.generated.eve_public.campaign.campaign_pb2 import Attributes as CampaignAttributes, Issuer as CampaignIssuer, Version, STATE_ACTIVE as CAMPAIGN_STATE_ACTIVE, Stats as CampaignStats 9 from eveProto.generated.eve_public.campaign.objective.objective_pb2 import Identifier as ObjectiveIdentifier, Attributes as ObjectiveAttributes, Issuer as ObjectiveIssuer, STATE_ACTIVE as OBJECTIVE_STATE_ACTIVE, Rewards, Stats as ObjectiveStats, ParticipantStats, PARTICIPANT_STATE_COMMITTED 10 from eveProto.generated.eve_public.career.career_pb2 import CAREER_INDUSTRIALIST 11 from eveProto.generated.eve_public.character.character_pb2 import Identifier as CharacterIdentifier 12 from eveProto.generated.eve_public.corporation.corporation_pb2 import Identifier as CorporationIdentifier 13 from eveProto.generated.eve_public.isk.isk_pb2 import Currency as IskCurrency 14 from eveProto.generated.eve_public.isk.wallet.wallet_pb2 import Owner 15 from eveProto.generated.eve_public.localization.message_pb2 import Identifier as LocalizationIdentifier 16 from eveProto.generated.eve_public.loyaltypoints.loyaltypoints_pb2 import Currency as LpCurrency 17 from eveProto.generated.eve_public.semanticversion_pb2 import Specification 18 from eveProto.generated.eve_public.standing.standing_pb2 import GainPercent, Source 19 from eveProto.generated.eve_public.ui.annotation_pb2 import Annotation 20 from eveProto.generated.eve_public.ui.contenttag_pb2 import Identifier as ContentTagIdentifier 21 from eveProto.generated.eve_public.ui.icon_pb2 import Identifier as IconIdentifier 22 from eveProto.generated.eve_public.ui.image_pb2 import Identifier as ImageIdentifier, Attributes as ImageAttributes 23 from google.protobuf.timestamp_pb2 import Timestamp 24 from uuid import UUID 25 CAMPAIGN_ID2 = CampaignID(UUID('12bf6798-f8d5-4933-ad43-89df6b63d2c6')) 26 CAMPAIGN_ID3 = CampaignID(UUID('b03d11ba-3b0c-4ff3-9c77-0e3a580575eb')) 27 CAMPAIGN_ID4 = CampaignID(UUID('ae320f8e-2f37-47df-8a35-a0c313cd3f35')) 28 CAMPAIGN_ID5 = CampaignID(UUID('ae320f8e-2f37-47df-8a35-a0c313cd3f36')) 29 OBJECTIVE_1_CAMP_2 = UUID('a143655c-d6d3-49e1-a0aa-1faaa1a77f87') 30 OBJECTIVE_1_CAMP_3 = UUID('a143655c-d6d3-49e1-a0aa-1faaa1a77f88') 31 OBJECTIVE_1_CAMP_4 = UUID('a143655c-d6d3-49e1-a0aa-1faaa1a77f89') 32 OBJECTIVE_1_CAMP_5 = UUID('a143655c-d6d3-49e1-a0aa-1faaa1a77f90') 33 CORP_CALDARI_PROVISIONS = 1000009 34 CORP_24TH_IMPERIAL = 1000179 35 CORP_BRUTOR_TRIBE = 1000049 36 CORP_ALGINTAL_CORE = 1000215 37 CORP_CBD = 1000002 38 ids_to_strings = {100: 'Amarr Campaign', 39 101: u"++Capsuleers, Jita's newfound independence has fractured certainty across the cluster. Where others see disorder, the Empire sees opportunity.<br><br>You will support the Basilica of Commerce. You will complete the assigned operational objectives before this campaign closes, and you will do so with urgency. The Empire is initiating a monumental enhancement to the Amarr trade hub - an enduring statement of Imperial primacy and stability. ", 40 102: u"Capsuleers, Jita's newfound independence has fractured certainty across the cluster. Where others see disorder, the Empire sees opportunity.<br><br>You will support the Basilica of Commerce. You will complete the assigned operational objectives before this campaign closes, and you will do so with urgency. The Empire is initiating a monumental enhancement to the Amarr trade hub - an enduring statement of Imperial primacy and stability. ", 41 103: u'In every victory, the light of Amarr shines eternal. It is done.<br>By righteous fire and steadfast faith, the divine order stands unbroken.<br>Your deeds are recorded in glory before God and Empire.', 42 104: u'The faithful have faltered.<br>The enemies of Amarr yet draw breath, and the light dims in their shadow.<br>Repent, regroup, and return in greater devotion.', 43 105: 'One Fine Amarr Objective', 44 106: 'Mine for me peon. - Amarr', 45 110: '<b>To:</b> Capsuleers operating under Imperial charter', 46 111: 'Faction Briefing', 47 112: 'If you deliver success, the Basilica works will complete at the start of the next season, and commerce conducted within the Amarr hub will be rewarded with reduced transactional burdens for a full following season.', 48 113: 'Understand this clearly: we are not offering comfort. We are purchasing results. If you fail to meet the campaign threshold, the Basilica project will stall in public view - unfinished scaffolding and a record of wasted effort will remain for all to see. Worse: disorder will spread. Raiders will test Imperial space. Pirates will grow bolder.', 49 114: 'Complete the objectives. Secure the lanes. Prove that commerce belongs under order - not chaos.', 50 200: 'Minmatar Campaign', 51 201: u"Capsuleers, Arzad is not a footnote. It is proof. Starkmanir history was buried by force, renamed by decree, and left to rot under someone else's story. We are ending that.<br><br>You will complete the campaign objectives until the Republic's success threshold is achieved, before this campaign closes. Not for symbolism - for outcome.", 52 202: u"Capsuleers, Arzad is not a footnote. It is proof. Starkmanir history was buried by force, renamed by decree, and left to rot under someone else's story. We are ending that.<br><br>You will complete the campaign objectives until the Republic's success threshold is achieved, before this campaign closes. Not for symbolism - for outcome.", 53 203: u'Through coordinated strikes, relentless pressure, and unwavering support across New Eden, the Minmatar Campaign has achieved its goal. The chains of the past have been challenged not by words, but by action and the Republic stands stronger for it. ', 54 204: u'Capsuleers of the Minmatar Republic, the campaign has come to an end but its goal remains unfulfilled.<br>Despite the courage and sacrifices made across the warzone, the Republic was unable to secure the resources and strategic leverage required to complete the Skarkon Liberation Array. Without these critical means, construction has been halted, and the projects future is now uncertain.', 55 205: 'One Fine Minmatar Objective', 56 206: 'Mine for me peon. - Minmatar', 57 210: "<b>To:</b> Capsuleers answering the Republic's call", 58 211: 'Faction Briefing', 59 212: 'If you succeed, Arzad II will be renamed Starkman Prime at the start of next season and Arzad and Ezzara systems will return under Republic sovereignty. A Republic station will be established in Arzad, because presence is not a speech, it is infrastructure.<br><br>And in the season that follows, we will commit resources to rebuild what was denied: planetary industry output will surge in selected systems, and convoys will begin moving through Great Wildlands. Additional reconstruction measures may be authorized to accelerate recovery and reward those who supplied it.', 60 213: 'If you fail, the Empire will answer in the language it prefers: monuments that erase truth and reprisals that punish defiance. The name will not return, and the counter-narrative will harden into a permanent scar.', 61 214: 'Bring the name back. Or watch it be buried again.', 62 300: u'Gallente Campaign', 63 301: u'Capsuleers, this is not a theoretical debate. Rogue drones are spreading, and every month we hesitate becomes another month the Federation looks weak, divided, and technologically irrelevant.<br><br>Your task is simple: contain the proliferation and recover what can be salvaged. Complete the campaign objectives until the success threshold is met, before this campaign ends. The Federation will not accept a partial effort disguised as principle.', 64 302: u'Capsuleers, this is not a theoretical debate. Rogue drones are spreading, and every month we hesitate becomes another month the Federation looks weak, divided, and technologically irrelevant.<br><br>Your task is simple: contain the proliferation and recover what can be salvaged. Complete the campaign objectives until the success threshold is met, before this campaign ends. The Federation will not accept a partial effort disguised as principle.', 65 303: u'Freedom prevails.<br>Through your courage, oppression has been pushed back and the Federation stands stronger.<br>The voices of the people endure. ', 66 304: u'Liberty has suffered a setback.<br>Tyranny advances where vigilance failed.<br>The Federation will not forget - nor surrender.', 67 305: 'One Fine Gallente Objective', 68 306: 'Mine for me peon. - Gallente', 69 310: '<b>To:</b> Capsuleers operating under Federal authorization', 70 311: 'Faction Briefing', 71 312: 'If you succeed, the Federation will permanently remove a portion of our systems from Factional Warfare exposure - our sovereignty remains intact, but the burden of constant defense will be reduced. The immediate season that follows will also see expanded drone swarm activity cluster-wide, alongside sanctioned prototype field trials for drone-adjacent technologies.', 72 313: 'If you fail, infestation zones will become a permanent scar. Breaches will intensify next season, including in areas that should never have been threatened - and industry will be forced to adapt under pressure rather than policy.', 73 314: 'Contain the drones. Strip them for knowledge. Then let the rest burn.', 74 400: u'Caldari Campaign', 75 401: u"Capsuleers, the State requires a direct corridor into Syndicate. Current routes cede too much leverage to hostile borders and unreliable intermediaries. That ends now.<br><br>Your instructions are simple: complete the campaign's operational objectives until the State's success threshold is reached. Do it before the campaign closes. The outcome will not be symbolic.", 76 402: u"Capsuleers, the State requires a direct corridor into Syndicate. Current routes cede too much leverage to hostile borders and unreliable intermediaries. That ends now.<br><br>Your instructions are simple: complete the campaign's operational objectives until the State's success threshold is reached. Do it before the campaign closes. The outcome will not be symbolic.", 77 403: u'Objective achieved.<br>State assets secured and opposition neutralized.<br>Your performance meets corporate expectations. ', 78 404: u'Objectives incomplete.<br>State interests remain exposed to risk.<br>Correct deficiencies. Return with results.', 79 405: 'One Fine Caldari Objective', 80 406: 'Mine for me peon. - Caldari', 81 410: '<b>To:</b> Capsuleers contracted for State operational objectives', 82 411: 'Faction Briefing', 83 412: 'If you succeed, a new stargate corridor will be activated at the start of next season, connecting our warzone space directly to Syndicate by building gates in [system A] and [system B]. The region will be refit for activity and rapid movement as soon the next season starts. In addition, the corporations presently flying under the Intaki Syndicate banner will be dissolved into a new alignment: under State authority.', 84 413: 'If you fail, the corridor will remain a half-built monument to wasted effort - visible, inert, and contested. And the same Syndicate corporations will be claimed instead by the Federation. Expect the region to destabilize: hostile operations will proliferate, and Serpentis opportunists will exploit the vacuum.', 85 414: 'This is a corridor. Build it - or watch someone else own it.'} 86 87 def _get_campaign2(): 88 response = GetResponse() 89 start_time = Timestamp() 90 start_time.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) 91 expiry_time = Timestamp() 92 expiry_time.FromDatetime(datetime.datetime(2026, 8, 24, 0, 0, 0)) 93 attributes = CampaignAttributes(title=LocalizationIdentifier(sequential=100), subtitle=LocalizationIdentifier(sequential=101), goal_description=LocalizationIdentifier(sequential=102), success_description=LocalizationIdentifier(sequential=103), failure_description=LocalizationIdentifier(sequential=104), icon=IconIdentifier(name='eveicon.amarr_logo'), logo=CampaignAttributes.Image(image=ImageIdentifier(path=''), attributes=ImageAttributes(display_width=200, display_height=100)), dashboard_background=ImageIdentifier(path='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_background_amarr.png'), ao_feature_page=ImageIdentifier(path=''), objective_background=ImageIdentifier(path='res:/UI/Texture/classes/Opportunities/campaigns/amarr_banner.png'), issuer=CampaignIssuer(corporation=CorporationIdentifier(sequential=CORP_24TH_IMPERIAL)), presenting_character=CharacterIdentifier(sequential=3003881), annotations=[Annotation(key='race', value='amarr'), 94 Annotation(key='theme_pack', value='amarr_campaign'), 95 Annotation(key='campaign_set', value='mil_camp_season1'), 96 Annotation(key='overview_button_texture_path', value='res:/UI/Texture/classes/Campaigns/Overview/cards/season1_amarr.png'), 97 Annotation(key='ui_idx', value='1'), 98 Annotation(key='dashboard_ambient_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_amarr.png'), 99 Annotation(key='dashboard_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_amarr.png'), 100 Annotation(key='dashboard_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_amarr.png'), 101 Annotation(key='briefing_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_amarr.png'), 102 Annotation(key='briefing_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_amarr.png'), 103 Annotation(key='briefing_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_amarr.png'), 104 Annotation(key='goal_description_header', value='111'), 105 Annotation(key='goal_description_subheader', value='110'), 106 Annotation(key='goal_description_success', value='112'), 107 Annotation(key='goal_description_failure', value='113'), 108 Annotation(key='goal_description_final_words', value='114')], total_objectives=30, scheduled_start_time=start_time, scheduled_expiry_time=expiry_time, version=Version(definition_version=Specification(major=1, minor=2, patch=3), etag=1234), not_finished=True, state=CAMPAIGN_STATE_ACTIVE, target_progress=25, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='complete_objectives'))) 109 start_date_one = Timestamp() 110 start_date_one.FromDatetime(datetime.datetime(2026, 2, 10, 1, 2, 3)) 111 start_date_two = Timestamp() 112 start_date_two.FromDatetime(datetime.datetime(2026, 2, 10, 14, 2, 4)) 113 restricted_objectives = [GetResponse.RestrictedObjective(scheduled_start_time=start_date_one, career=CAREER_INDUSTRIALIST), GetResponse.RestrictedObjective(scheduled_start_time=start_date_two)] 114 start_date_one = Timestamp() 115 start_date_one.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) 116 units, nanos = split_precision(0.001) 117 available_objectives = [GetResponse.AvailableObjective(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_2.bytes), attributes=ObjectiveAttributes(title=LocalizationIdentifier(sequential=105), subtitle=LocalizationIdentifier(sequential=106), issuer=ObjectiveIssuer(corporation=CorporationIdentifier(sequential=CORP_24TH_IMPERIAL)), presenting_character=CharacterIdentifier(sequential=3003881), content_tags=[ContentTagIdentifier(name='activity_mining'), ContentTagIdentifier(name='career_path_industrialist'), ContentTagIdentifier(name='feature_campaigns')], state=OBJECTIVE_STATE_ACTIVE, not_finished=True, scheduled_start_time=start_date_one, career=CAREER_INDUSTRIALIST, target_progress=12345678, max_progress_per_participant=1234, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='mine_materials'), parameters=[ParameterConfiguration(key='location', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='solarsystem', values=['30002389', '30002388', '30002387']), MatcherParameterConfiguration.ValueEntry(value_type='tags', values=['fw_occupancy.caldari', 'bulwark'])])), ParameterConfiguration(key='ore_type', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='ore_type', values=['1230'])]))]), rewards=Rewards(isk_reward=Rewards.IskReward(amount_per_interval=IskCurrency(units=10), issuer=Owner(corporation=CorporationIdentifier(sequential=CORP_24TH_IMPERIAL)), progress_interval=1), lp_reward=Rewards.LpReward(amount_per_interval=LpCurrency(amount=1, associated_corporation=CorporationIdentifier(sequential=CORP_24TH_IMPERIAL)), progress_interval=100), standing_reward=Rewards.StandingReward(gain_percent_per_interval=GainPercent(units=units, nanos=nanos), progress_interval=100, issuer=Source(corporation=CorporationIdentifier(sequential=CORP_24TH_IMPERIAL))))))] 118 response.attributes.MergeFrom(attributes) 119 response.available_objectives.extend(available_objectives) 120 response.restricted_objectives.extend(restricted_objectives) 121 return response 122 123 124 def _get_campaign3(): 125 response = GetResponse() 126 start_time = Timestamp() 127 start_time.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) 128 expiry_time = Timestamp() 129 expiry_time.FromDatetime(datetime.datetime(2026, 8, 24, 0, 0, 0)) 130 attributes = CampaignAttributes(title=LocalizationIdentifier(sequential=200), subtitle=LocalizationIdentifier(sequential=201), goal_description=LocalizationIdentifier(sequential=202), success_description=LocalizationIdentifier(sequential=203), failure_description=LocalizationIdentifier(sequential=204), icon=IconIdentifier(name='eveicon.minmatar_logo'), logo=CampaignAttributes.Image(image=ImageIdentifier(path=''), attributes=ImageAttributes(display_width=200, display_height=100)), dashboard_background=ImageIdentifier(path='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_background_minmatar.png'), ao_feature_page=ImageIdentifier(path=''), objective_background=ImageIdentifier(path='res:/UI/Texture/classes/Opportunities/campaigns/minmatar_banner.png'), issuer=CampaignIssuer(corporation=CorporationIdentifier(sequential=CORP_BRUTOR_TRIBE)), presenting_character=CharacterIdentifier(sequential=3003881), annotations=[Annotation(key='race', value='minmatar'), 131 Annotation(key='theme_pack', value='minmatar_campaign'), 132 Annotation(key='campaign_set', value='mil_camp_season1'), 133 Annotation(key='overview_button_texture_path', value='res:/UI/Texture/classes/Campaigns/Overview/cards/season1_minmatar.png'), 134 Annotation(key='ui_idx', value='4'), 135 Annotation(key='dashboard_ambient_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_minmatar.png'), 136 Annotation(key='dashboard_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_minmatar.png'), 137 Annotation(key='dashboard_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_minmatar.png'), 138 Annotation(key='briefing_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_minmatar.png'), 139 Annotation(key='briefing_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_minmatar.png'), 140 Annotation(key='briefing_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_minmatar.png'), 141 Annotation(key='goal_description_header', value='211'), 142 Annotation(key='goal_description_subheader', value='210'), 143 Annotation(key='goal_description_success', value='212'), 144 Annotation(key='goal_description_failure', value='213'), 145 Annotation(key='goal_description_final_words', value='214')], total_objectives=30, scheduled_start_time=start_time, scheduled_expiry_time=expiry_time, version=Version(definition_version=Specification(major=1, minor=2, patch=3), etag=1234), not_finished=True, state=CAMPAIGN_STATE_ACTIVE, target_progress=25, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='complete_objectives'))) 146 start_date_one = Timestamp() 147 start_date_one.FromDatetime(datetime.datetime(2026, 2, 10, 1, 2, 3)) 148 start_date_two = Timestamp() 149 start_date_two.FromDatetime(datetime.datetime(2026, 2, 10, 14, 2, 4)) 150 restricted_objectives = [GetResponse.RestrictedObjective(scheduled_start_time=start_date_one), GetResponse.RestrictedObjective(scheduled_start_time=start_date_two)] 151 start_date_one = Timestamp() 152 start_date_one.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) 153 units, nanos = split_precision(0.001) 154 available_objectives = [GetResponse.AvailableObjective(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_3.bytes), attributes=ObjectiveAttributes(title=LocalizationIdentifier(sequential=205), subtitle=LocalizationIdentifier(sequential=206), issuer=ObjectiveIssuer(corporation=CorporationIdentifier(sequential=CORP_BRUTOR_TRIBE)), presenting_character=CharacterIdentifier(sequential=3003881), content_tags=[ContentTagIdentifier(name='activity_mining'), ContentTagIdentifier(name='career_path_industrialist'), ContentTagIdentifier(name='feature_campaigns')], state=OBJECTIVE_STATE_ACTIVE, not_finished=True, scheduled_start_time=start_date_one, career=CAREER_INDUSTRIALIST, target_progress=12345678, max_progress_per_participant=1234, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='mine_materials'), parameters=[ParameterConfiguration(key='location', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='solarsystem', values=['30002389', '30002388', '30002387']), MatcherParameterConfiguration.ValueEntry(value_type='tags', values=['fw_occupancy.caldari', 'bulwark'])])), ParameterConfiguration(key='ore_type', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='ore_type', values=['1230'])]))]), rewards=Rewards(isk_reward=Rewards.IskReward(amount_per_interval=IskCurrency(units=10), issuer=Owner(corporation=CorporationIdentifier(sequential=CORP_BRUTOR_TRIBE)), progress_interval=1), lp_reward=Rewards.LpReward(amount_per_interval=LpCurrency(amount=1, associated_corporation=CorporationIdentifier(sequential=CORP_BRUTOR_TRIBE)), progress_interval=100), standing_reward=Rewards.StandingReward(gain_percent_per_interval=GainPercent(units=units, nanos=nanos), progress_interval=100, issuer=Source(corporation=CorporationIdentifier(sequential=CORP_BRUTOR_TRIBE))))))] 155 response.attributes.MergeFrom(attributes) 156 response.available_objectives.extend(available_objectives) 157 response.restricted_objectives.extend(restricted_objectives) 158 return response 159 160 161 def _get_campaign4(): 162 response = GetResponse() 163 start_time = Timestamp() 164 start_time.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) 165 expiry_time = Timestamp() 166 expiry_time.FromDatetime(datetime.datetime(2026, 8, 24, 0, 0, 0)) 167 attributes = CampaignAttributes(title=LocalizationIdentifier(sequential=300), subtitle=LocalizationIdentifier(sequential=301), goal_description=LocalizationIdentifier(sequential=302), success_description=LocalizationIdentifier(sequential=303), failure_description=LocalizationIdentifier(sequential=303), icon=IconIdentifier(name='eveicon.gallente_logo'), logo=CampaignAttributes.Image(image=ImageIdentifier(path=''), attributes=ImageAttributes(display_width=200, display_height=100)), dashboard_background=ImageIdentifier(path='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_background_gallente.png'), ao_feature_page=ImageIdentifier(path=''), objective_background=ImageIdentifier(path='res:/UI/Texture/classes/Opportunities/campaigns/gallente_banner.png'), issuer=CampaignIssuer(corporation=CorporationIdentifier(sequential=CORP_ALGINTAL_CORE)), presenting_character=CharacterIdentifier(sequential=3003881), annotations=[Annotation(key='race', value='gallente'), 168 Annotation(key='theme_pack', value='gallente_campaign'), 169 Annotation(key='campaign_set', value='mil_camp_season1'), 170 Annotation(key='overview_button_texture_path', value='res:/UI/Texture/classes/Campaigns/Overview/cards/season1_gallente.png'), 171 Annotation(key='ui_idx', value='3'), 172 Annotation(key='dashboard_ambient_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_gallente.png'), 173 Annotation(key='dashboard_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_gallente.png'), 174 Annotation(key='dashboard_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_gallente.png'), 175 Annotation(key='briefing_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_gallente.png'), 176 Annotation(key='briefing_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_gallente.png'), 177 Annotation(key='briefing_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_gallente.png'), 178 Annotation(key='goal_description_header', value='311'), 179 Annotation(key='goal_description_subheader', value='310'), 180 Annotation(key='goal_description_success', value='312'), 181 Annotation(key='goal_description_failure', value='313'), 182 Annotation(key='goal_description_final_words', value='314')], total_objectives=30, scheduled_start_time=start_time, scheduled_expiry_time=expiry_time, version=Version(definition_version=Specification(major=1, minor=2, patch=3), etag=1234), not_finished=True, state=CAMPAIGN_STATE_ACTIVE, target_progress=25, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='complete_objectives'))) 183 start_date_one = Timestamp() 184 start_date_one.FromDatetime(datetime.datetime(2026, 2, 10, 1, 2, 3)) 185 start_date_two = Timestamp() 186 start_date_two.FromDatetime(datetime.datetime(2026, 2, 10, 14, 2, 4)) 187 restricted_objectives = [GetResponse.RestrictedObjective(scheduled_start_time=start_date_one), GetResponse.RestrictedObjective(scheduled_start_time=start_date_two)] 188 start_date_one = Timestamp() 189 start_date_one.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) 190 units, nanos = split_precision(0.001) 191 available_objectives = [GetResponse.AvailableObjective(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_4.bytes), attributes=ObjectiveAttributes(title=LocalizationIdentifier(sequential=305), subtitle=LocalizationIdentifier(sequential=306), issuer=ObjectiveIssuer(corporation=CorporationIdentifier(sequential=CORP_ALGINTAL_CORE)), presenting_character=CharacterIdentifier(sequential=3003881), content_tags=[ContentTagIdentifier(name='activity_mining'), ContentTagIdentifier(name='career_path_industrialist'), ContentTagIdentifier(name='feature_campaigns')], state=OBJECTIVE_STATE_ACTIVE, not_finished=True, scheduled_start_time=start_date_one, career=CAREER_INDUSTRIALIST, target_progress=12345678, max_progress_per_participant=1234, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='mine_materials'), parameters=[ParameterConfiguration(key='location', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='solarsystem', values=['30002389', '30002388', '30002387']), MatcherParameterConfiguration.ValueEntry(value_type='tags', values=['fw_occupancy.caldari', 'bulwark'])])), ParameterConfiguration(key='ore_type', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='ore_type', values=['1230'])]))]), rewards=Rewards(isk_reward=Rewards.IskReward(amount_per_interval=IskCurrency(units=10), issuer=Owner(corporation=CorporationIdentifier(sequential=CORP_ALGINTAL_CORE)), progress_interval=1), lp_reward=Rewards.LpReward(amount_per_interval=LpCurrency(amount=1, associated_corporation=CorporationIdentifier(sequential=CORP_ALGINTAL_CORE)), progress_interval=100), standing_reward=Rewards.StandingReward(gain_percent_per_interval=GainPercent(units=units, nanos=nanos), progress_interval=100, issuer=Source(corporation=CorporationIdentifier(sequential=CORP_ALGINTAL_CORE))))))] 192 response.attributes.MergeFrom(attributes) 193 response.available_objectives.extend(available_objectives) 194 response.restricted_objectives.extend(restricted_objectives) 195 return response 196 197 198 def _get_campaign5(): 199 response = GetResponse() 200 start_time = Timestamp() 201 start_time.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) 202 expiry_time = Timestamp() 203 expiry_time.FromDatetime(datetime.datetime(2026, 8, 24, 0, 0, 0)) 204 attributes = CampaignAttributes(title=LocalizationIdentifier(sequential=400), subtitle=LocalizationIdentifier(sequential=401), goal_description=LocalizationIdentifier(sequential=402), success_description=LocalizationIdentifier(sequential=403), failure_description=LocalizationIdentifier(sequential=404), icon=IconIdentifier(name='eveicon.caldari_logo'), logo=CampaignAttributes.Image(image=ImageIdentifier(path=''), attributes=ImageAttributes(display_width=200, display_height=100)), dashboard_background=ImageIdentifier(path='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_background_caldari.png'), ao_feature_page=ImageIdentifier(path=''), objective_background=ImageIdentifier(path='res:/UI/Texture/classes/Opportunities/campaigns/caldari_banner.png'), issuer=CampaignIssuer(corporation=CorporationIdentifier(sequential=CORP_CBD)), presenting_character=CharacterIdentifier(sequential=3003881), annotations=[Annotation(key='race', value='caldari'), 205 Annotation(key='theme_pack', value='caldari_campaign'), 206 Annotation(key='campaign_set', value='mil_camp_season1'), 207 Annotation(key='ui_idx', value='2'), 208 Annotation(key='overview_button_texture_path', value='res:/UI/Texture/classes/Campaigns/Overview/cards/season1_caldari.png'), 209 Annotation(key='dashboard_ambient_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_ambient_caldari.png'), 210 Annotation(key='dashboard_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_caldari.png'), 211 Annotation(key='dashboard_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_caldari.png'), 212 Annotation(key='briefing_background', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_background_caldari.png'), 213 Annotation(key='briefing_middleground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_middleground_caldari.png'), 214 Annotation(key='briefing_foreground', value='res:/UI/Texture/classes/Campaigns/Overview/2026_q2_foreground_caldari.png'), 215 Annotation(key='goal_description_header', value='411'), 216 Annotation(key='goal_description_subheader', value='410'), 217 Annotation(key='goal_description_success', value='412'), 218 Annotation(key='goal_description_failure', value='413'), 219 Annotation(key='goal_description_final_words', value='414')], total_objectives=30, scheduled_start_time=start_time, scheduled_expiry_time=expiry_time, version=Version(definition_version=Specification(major=1, minor=2, patch=3), etag=1234), not_finished=True, state=CAMPAIGN_STATE_ACTIVE, target_progress=25, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='complete_objectives'))) 220 start_date_one = Timestamp() 221 start_date_one.FromDatetime(datetime.datetime(2026, 2, 10, 1, 2, 3)) 222 start_date_two = Timestamp() 223 start_date_two.FromDatetime(datetime.datetime(2026, 2, 10, 14, 2, 4)) 224 restricted_objectives = [GetResponse.RestrictedObjective(scheduled_start_time=start_date_one), GetResponse.RestrictedObjective(scheduled_start_time=start_date_two)] 225 start_date_one = Timestamp() 226 start_date_one.FromDatetime(datetime.datetime(2026, 2, 3, 0, 0, 0)) 227 units, nanos = split_precision(0.001) 228 available_objectives = [GetResponse.AvailableObjective(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_5.bytes), attributes=ObjectiveAttributes(title=LocalizationIdentifier(sequential=405), subtitle=LocalizationIdentifier(sequential=406), issuer=ObjectiveIssuer(corporation=CorporationIdentifier(sequential=CORP_CBD)), presenting_character=CharacterIdentifier(sequential=3003881), content_tags=[ContentTagIdentifier(name='activity_mining'), ContentTagIdentifier(name='career_path_industrialist'), ContentTagIdentifier(name='feature_campaigns')], state=OBJECTIVE_STATE_ACTIVE, not_finished=True, scheduled_start_time=start_date_one, career=CAREER_INDUSTRIALIST, target_progress=12345678, max_progress_per_participant=1234, contribution_method_configuration=Configuration(contribution_method=ContributionMethodIdentifier(name='mine_materials'), parameters=[ParameterConfiguration(key='location', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='solarsystem', values=['30002389', '30002388', '30002387']), MatcherParameterConfiguration.ValueEntry(value_type='tags', values=['fw_occupancy.caldari', 'bulwark'])])), ParameterConfiguration(key='ore_type', matcher=MatcherParameterConfiguration(values=[MatcherParameterConfiguration.ValueEntry(value_type='ore_type', values=['1230'])]))]), rewards=Rewards(isk_reward=Rewards.IskReward(amount_per_interval=IskCurrency(units=10), issuer=Owner(corporation=CorporationIdentifier(sequential=CORP_CBD)), progress_interval=1), lp_reward=Rewards.LpReward(amount_per_interval=LpCurrency(amount=1, associated_corporation=CorporationIdentifier(sequential=CORP_CBD)), progress_interval=100), standing_reward=Rewards.StandingReward(gain_percent_per_interval=GainPercent(units=units, nanos=nanos), progress_interval=100, issuer=Source(corporation=CorporationIdentifier(sequential=CORP_CBD))))))] 229 response.attributes.MergeFrom(attributes) 230 response.available_objectives.extend(available_objectives) 231 response.restricted_objectives.extend(restricted_objectives) 232 return response 233 234 235 campaigns = {CAMPAIGN_ID2: _get_campaign2(), 236 CAMPAIGN_ID3: _get_campaign3(), 237 CAMPAIGN_ID4: _get_campaign4(), 238 CAMPAIGN_ID5: _get_campaign5()} 239 campaigns_stats = {CAMPAIGN_ID2: CampaignStats(current_campaign_progress=13, total_contributors=11), 240 CAMPAIGN_ID3: CampaignStats(current_campaign_progress=4567, total_contributors=5), 241 CAMPAIGN_ID4: CampaignStats(current_campaign_progress=123, total_contributors=25), 242 CAMPAIGN_ID5: CampaignStats(current_campaign_progress=987, total_contributors=31)} 243 campaigns_objectives = {CAMPAIGN_ID2: [OBJECTIVE_1_CAMP_2], 244 CAMPAIGN_ID3: [OBJECTIVE_1_CAMP_3], 245 CAMPAIGN_ID4: [OBJECTIVE_1_CAMP_4], 246 CAMPAIGN_ID5: [OBJECTIVE_1_CAMP_5]} 247 objectives_stats = {OBJECTIVE_1_CAMP_2: ObjectiveStats(current_objective_progress=1298, committed_participants=120, total_participants=126, total_contributors=1200), 248 OBJECTIVE_1_CAMP_3: ObjectiveStats(current_objective_progress=1397, committed_participants=138, total_participants=1355, total_contributors=1399), 249 OBJECTIVE_1_CAMP_4: ObjectiveStats(current_objective_progress=1477, committed_participants=14, total_participants=140, total_contributors=145), 250 OBJECTIVE_1_CAMP_5: ObjectiveStats(current_objective_progress=1500, committed_participants=150, total_participants=155, total_contributors=159)} 251 participant_objective_stats = {CAMPAIGN_ID2: GetParticipantStatsResponse(participant_stats=[GetParticipantStatsResponse.ParticipantStats(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_2.bytes), stats=ParticipantStats(state=PARTICIPANT_STATE_COMMITTED, current_participant_progress=1000))]), 252 CAMPAIGN_ID3: GetParticipantStatsResponse(participant_stats=[GetParticipantStatsResponse.ParticipantStats(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_3.bytes), stats=ParticipantStats(state=PARTICIPANT_STATE_COMMITTED, current_participant_progress=500))]), 253 CAMPAIGN_ID4: GetParticipantStatsResponse(participant_stats=[GetParticipantStatsResponse.ParticipantStats(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_4.bytes), stats=ParticipantStats(state=PARTICIPANT_STATE_COMMITTED, current_participant_progress=1300))]), 254 CAMPAIGN_ID5: GetParticipantStatsResponse(participant_stats=[GetParticipantStatsResponse.ParticipantStats(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_5.bytes), stats=ParticipantStats(state=PARTICIPANT_STATE_COMMITTED, current_participant_progress=1000))])} 255 unredeemed_rewards = GetAllUnredeemedRewardsResponse(objectives=[GetAllUnredeemedRewardsResponse.Objective(objective=ObjectiveIdentifier(uuid=OBJECTIVE_1_CAMP_2.bytes), isk_intervals_unredeemed=1000000, lp_intervals_unredeemed=400)], next_page=None)