75 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			75 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | import random | ||
|  | 
 | ||
|  | from typing import TYPE_CHECKING, List | ||
|  | if TYPE_CHECKING: | ||
|  |     from .Civ6Client import CivVIContext | ||
|  | 
 | ||
|  | # any is also an option but should not be considered an effect | ||
|  | DEATH_LINK_EFFECTS = ["Gold", "Faith", "Era Score", "Unit Killed"] | ||
|  | 
 | ||
|  | 
 | ||
|  | async def handle_receive_deathlink(ctx: 'CivVIContext', message: str): | ||
|  |     """Resolves the effects of a deathlink received from the multiworld based on the options selected by the player""" | ||
|  |     chosen_effects: List[str] = ctx.slot_data["death_link_effect"] | ||
|  |     effect = random.choice(chosen_effects) | ||
|  | 
 | ||
|  |     percent = ctx.slot_data["death_link_effect_percent"] | ||
|  |     if effect == "Gold": | ||
|  |         ctx.logger.info(f"Decreasing gold by {percent}%") | ||
|  |         await ctx.game_interface.decrease_gold_by_percent(percent, message) | ||
|  |     elif effect == "Faith": | ||
|  |         ctx.logger.info(f"Decreasing faith by {percent}%") | ||
|  |         await ctx.game_interface.decrease_faith_by_percent(percent, message) | ||
|  |     elif effect == "Era Score": | ||
|  |         ctx.logger.info("Decreasing era score by 1") | ||
|  |         await ctx.game_interface.decrease_era_score_by_amount(1, message) | ||
|  |     elif effect == "Unit Killed": | ||
|  |         ctx.logger.info("Destroying a random unit") | ||
|  |         await ctx.game_interface.kill_unit(message) | ||
|  | 
 | ||
|  | 
 | ||
|  | async def handle_check_deathlink(ctx: 'CivVIContext'): | ||
|  |     """Checks if the local player should send out a deathlink to the multiworld as well as if we should respond to any pending deathlinks sent to us """ | ||
|  |     # check if we received a death link | ||
|  |     if ctx.received_death_link: | ||
|  |         ctx.received_death_link = False | ||
|  |         await handle_receive_deathlink(ctx, ctx.death_link_message) | ||
|  | 
 | ||
|  |     # Check if we should send out a death link | ||
|  |     result = await ctx.game_interface.get_deathlink() | ||
|  |     if ctx.death_link_just_changed: | ||
|  |         ctx.death_link_just_changed = False | ||
|  |         return | ||
|  |     if result != "false": | ||
|  |         messages = [f"lost a unit to a {result}", | ||
|  |                     f"offered a sacrifice to the great {result}", | ||
|  |                     f"was killed by a {result}", | ||
|  |                     f"made a donation to the {result} fund", | ||
|  |                     f"made a tactical error", | ||
|  |                     f"picked a fight with a {result} and lost", | ||
|  |                     f"tried to befriend an enemy {result}", | ||
|  |                     f"used a {result} to reduce their military spend", | ||
|  |                     f"was defeated by a {result} in combat", | ||
|  |                     f"bravely struck a {result} and paid the price", | ||
|  |                     f"had a lapse in judgement against a {result}", | ||
|  |                     f"learned at the hands of a {result}", | ||
|  |                     f"attempted to non peacefully negotiate with a {result}", | ||
|  |                     f"was outsmarted by a {result}", | ||
|  |                     f"received a lesson from a {result}", | ||
|  |                     f"now understands the importance of not fighting a {result}", | ||
|  |                     f"let a {result} get the better of them", | ||
|  |                     f"allowed a {result} to show them the error of their ways", | ||
|  |                     f"heard the tragedy of Darth Plagueis the Wise from a {result}", | ||
|  |                     f"refused to join a {result} in their quest for power", | ||
|  |                     f"was tired of sitting in BK and decided to fight a {result} instead", | ||
|  |                     f"purposely lost to a {result} as a cry for help", | ||
|  |                     f"is wanting to remind everyone that they are here to have fun and not to win", | ||
|  |                     f"is reconsidering their pursuit of a domination victory", | ||
|  |                     f"had their plans toppled by a {result}", | ||
|  |                     ] | ||
|  | 
 | ||
|  |         if ctx.slot is not None: | ||
|  |             player = ctx.player_names[ctx.slot] | ||
|  |             message = random.choice(messages) | ||
|  |             await ctx.send_death(f"{player} {message}") |