Combat Examples
===============

Fighting Monsters
-----------------

Basic monster combat:

.. code-block:: python

   from artifacts import ArtifactsClient
   
   with ArtifactsClient(token="your_token") as client:
       char = client.character("MyCharacter")
       
       # Move to monster location
       char.move(x=0, y=1)  # Example: chicken location
       
       # Fight the monster
       result = char.fight()
       
       # Check result
       print(f"Fight result: {result.fight.result}")  # "win" or "lose"
       print(f"XP gained: {result.fight.xp}")
       print(f"Gold gained: {result.fight.gold}")
       
       # Check drops
       if result.fight.drops:
           for drop in result.fight.drops:
               print(f"Dropped: {drop.quantity}x {drop.code}")

Combat Loop
-----------

Fight monsters continuously with automatic cooldown handling:

.. code-block:: python

   from artifacts import ArtifactsClient, wait_for_cooldown
   import time
   
   with ArtifactsClient(token="your_token") as client:
       char = client.character("Fighter")
       
       # Move to monster location
       char.move(x=0, y=1)
       
       # Fight 10 times
       for i in range(10):
           result = char.fight()
           
           print(f"Fight {i+1}: {result.fight.result}")
           print(f"  XP: +{result.fight.xp}, Gold: +{result.fight.gold}")
           
           # Wait for cooldown before next fight
           if result.data.cooldown_expiration:
               wait_for_cooldown(result.data.cooldown_expiration)

Multi-Character Combat
----------------------

Run multiple characters fighting simultaneously:

.. code-block:: python

   from artifacts import AsyncArtifactsClient
   import asyncio
   
   async def fight_loop(client, char_name, location):
       char = client.character(char_name)
       await char.move(x=location[0], y=location[1])
       
       for i in range(5):
           result = await char.fight()
           print(f"{char_name} fight {i+1}: {result.fight.result}")
           
           # Async sleep for cooldown
           if result.data.cooldown > 0:
               await asyncio.sleep(result.data.cooldown)
   
   async def main():
       async with AsyncArtifactsClient(token="your_token") as client:
           # Fight with multiple characters in parallel
           await asyncio.gather(
               fight_loop(client, "Fighter1", (0, 1)),
               fight_loop(client, "Fighter2", (0, 1)),
               fight_loop(client, "Mage1", (2, 3))
           )
   
   asyncio.run(main())

Equipment Management
--------------------

Equip weapons and armor for combat:

.. code-block:: python

   from artifacts import ArtifactsClient
   
   with ArtifactsClient(token="your_token") as client:
       char = client.character("Fighter")
       
       # Equip a weapon
       char.equip(code="wooden_sword", slot="weapon")
       print("Equipped wooden sword")
       
       # Equip armor
       char.equip(code="leather_armor", slot="body_armor")
       print("Equipped leather armor")
       
       # Unequip an item
       char.unequip(slot="weapon")
       print("Unequipped weapon")

Healing After Combat
--------------------

Use consumables to restore HP:

.. code-block:: python

   with ArtifactsClient(token="your_token") as client:
       char = client.character("Fighter")
       
       # Check HP
       char_data = char.get()
       print(f"HP: {char_data.hp}/{char_data.max_hp}")
       
       # Rest to restore HP (if at spawn point)
       if char_data.hp < char_data.max_hp:
           result = char.rest()
           char_data = result.data
           print(f"Rested - HP: {char_data.hp}/{char_data.max_hp}")

Boss Farming
------------

Farm a boss with automatic retry on defeat:

.. code-block:: python

   from artifacts import ArtifactsClient, wait_for_cooldown
   
   with ArtifactsClient(token="your_token") as client:
       char = client.character("BossHunter")
       
       # Move to boss location
       char.move(x=5, y=5)  # Example boss location
       
       wins = 0
       attempts = 0
       
       while wins < 10:
           result = char.fight()
           attempts += 1
           
           if result.fight.result == "win":
               wins += 1
               print(f"Victory {wins}/10!")
               
               # Check for rare drops
               if result.fight.drops:
                   for drop in result.fight.drops:
                       print(f"  DROP: {drop.quantity}x {drop.code}")
           else:
               print(f"Defeat... (Attempt {attempts})")
           
           # Wait for cooldown
           if result.data.cooldown_expiration:
               wait_for_cooldown(result.data.cooldown_expiration)
