Player now pays for what he buys and buying a heart does not put it in the inventory. Solves #38 and #36
This commit is contained in:
@ -2,7 +2,7 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
from random import choice, randint
|
||||
from typing import Optional
|
||||
from typing import Optional, Any
|
||||
|
||||
from .player import Player
|
||||
from ..interfaces import Entity, FightingEntity, Map
|
||||
@ -15,12 +15,14 @@ class Item(Entity):
|
||||
"""
|
||||
held: bool
|
||||
held_by: Optional[Player]
|
||||
price: int
|
||||
|
||||
def __init__(self, held: bool = False, held_by: Optional[Player] = None,
|
||||
def __init__(self, held: bool = False, held_by: Optional[Player] = None, price : int=2,
|
||||
*args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.held = held
|
||||
self.held_by = held_by
|
||||
self.price = price
|
||||
|
||||
def drop(self) -> None:
|
||||
"""
|
||||
@ -64,6 +66,19 @@ class Item(Entity):
|
||||
def get_all_items() -> list:
|
||||
return [BodySnatchPotion, Bomb, Heart, Sword]
|
||||
|
||||
def be_sold(self, buyer: Entity, seller: Entity, game : Any) -> bool:
|
||||
"""
|
||||
Does all necessary actions when an object is to be sold.
|
||||
Is overwritten by some classes that cannot exist in the player's inventory
|
||||
"""
|
||||
if buyer.hazel>=self.price :
|
||||
buyer.add_to_inventory(self)
|
||||
seller.remove_from_inventory(self)
|
||||
buyer.change_hazel_balance(-self.price)
|
||||
seller.change_hazel_balance(self.price)
|
||||
return True
|
||||
else :
|
||||
return False
|
||||
|
||||
class Heart(Item):
|
||||
"""
|
||||
@ -71,8 +86,8 @@ class Heart(Item):
|
||||
"""
|
||||
healing: int
|
||||
|
||||
def __init__(self, name: str = "heart", healing: int = 5, *args, **kwargs):
|
||||
super().__init__(name=name, *args, **kwargs)
|
||||
def __init__(self, name: str = "heart", healing: int = 5, price: int = 3, *args, **kwargs):
|
||||
super().__init__(name=name, price=price, *args, **kwargs)
|
||||
self.healing = healing
|
||||
|
||||
def hold(self, player: "Player") -> None:
|
||||
@ -90,6 +105,20 @@ class Heart(Item):
|
||||
d["healing"] = self.healing
|
||||
return d
|
||||
|
||||
def be_sold(self, buyer: Entity, seller: Entity, game: Any) -> str:
|
||||
"""
|
||||
Does all necessary actions when an object is to be sold.
|
||||
Is overwritten by some classes that cannot exist in the player's inventory
|
||||
"""
|
||||
if buyer.hazel>=self.price :
|
||||
self.hold(buyer)
|
||||
seller.remove_from_inventory(self)
|
||||
buyer.change_hazel_balance(-self.price)
|
||||
seller.change_hazel_balance(self.price)
|
||||
return True
|
||||
else :
|
||||
return False
|
||||
|
||||
|
||||
class Bomb(Item):
|
||||
"""
|
||||
@ -101,8 +130,8 @@ class Bomb(Item):
|
||||
tick: int
|
||||
|
||||
def __init__(self, name: str = "bomb", damage: int = 5,
|
||||
exploding: bool = False, *args, **kwargs):
|
||||
super().__init__(name=name, *args, **kwargs)
|
||||
exploding: bool = False, price: int = 4, *args, **kwargs):
|
||||
super().__init__(name=name, price=price, *args, **kwargs)
|
||||
self.damage = damage
|
||||
self.exploding = exploding
|
||||
self.tick = 4
|
||||
@ -172,8 +201,8 @@ class Sword(Weapon):
|
||||
"""
|
||||
A basic weapon
|
||||
"""
|
||||
def __init__(self, name: str = "sword", *args, **kwargs):
|
||||
super().__init__(name=name, *args, **kwargs)
|
||||
def __init__(self, name: str = "sword", price: int = 20, *args, **kwargs):
|
||||
super().__init__(name=name, price=price, *args, **kwargs)
|
||||
self.name = name
|
||||
|
||||
|
||||
@ -183,8 +212,8 @@ class BodySnatchPotion(Item):
|
||||
other entity.
|
||||
"""
|
||||
|
||||
def __init__(self, name: str = "body_snatch_potion", *args, **kwargs):
|
||||
super().__init__(name=name, *args, **kwargs)
|
||||
def __init__(self, name: str = "body_snatch_potion", price: int = 14, *args, **kwargs):
|
||||
super().__init__(name=name, price=price, *args, **kwargs)
|
||||
|
||||
def use(self) -> None:
|
||||
"""
|
||||
|
Reference in New Issue
Block a user