def make_shop(vnum: int) -> ShopBehavior: """Create an instance of a shop given by the vnum""" try: return converted_shops[vnum] except KeyError: c_shop = shops[vnum] shop = ShopBehavior() shop.circle_vnum = c_shop.circle_vnum # keep the vnum shop.shopkeeper_vnum = c_shop.shopkeeper # keep the vnum of the shopkeeper shop.banks_money = c_shop.banks shop.will_fight = c_shop.fights shop.buyprofit = c_shop.buyprofit # price factor when shop buys an item assert shop.buyprofit <= 1.0 shop.sellprofit = c_shop.sellprofit # price factor when shop sells item assert shop.sellprofit >= 1.0 open_hrs = (max(0, c_shop.open1), min(24, c_shop.close1)) shop.open_hours = [open_hrs] if c_shop.open2 and c_shop.close2: open_hrs = (max(0, c_shop.open2), min(24, c_shop.close2)) shop.open_hours.append(open_hrs) # items to be cloned when sold (endless supply): shop.forsale = set() missing_items = set() for item_vnum in c_shop.forsale: try: shop.forsale.add(make_item(item_vnum)) except KeyError: missing_items.add(item_vnum) if missing_items: print("Shop #%d: unknown items:" % vnum, missing_items) shop.msg_playercantafford = c_shop.msg_playercantafford shop.msg_playercantbuy = c_shop.msg_playercantbuy shop.msg_playercantsell = c_shop.msg_playercantsell shop.msg_shopboughtitem = c_shop.msg_shopboughtitem shop.msg_shopcantafford = c_shop.msg_shopcantafford shop.msg_shopdoesnotbuy = c_shop.msg_shopdoesnotbuy shop.msg_shopsolditem = c_shop.msg_shopsolditem shop.action_temper = c_shop.msg_temper shop.willbuy = c_shop.willbuy shop.wontdealwith = c_shop.wontdealwith converted_shops[vnum] = shop return shop
def setUp(self): self.shopkeeper = Shopkeeper("lucy", "f") shop = ShopBehavior() shop.open_hours = [(9, 17), (22, 3)] # from 9 to 17 and in the night from 22 to 03 self.shopkeeper.set_shop(shop)
def make_shop(vnum: int) -> ShopBehavior: """Create an instance of a shop given by the vnum""" try: return converted_shops[vnum] except KeyError: c_shop = shops[vnum] shop = ShopBehavior() shop.circle_vnum = c_shop.circle_vnum # type: ignore # keep the vnum shop.shopkeeper_vnum = c_shop.shopkeeper # keep the vnum of the shopkeeper shop.banks_money = c_shop.banks shop.will_fight = c_shop.fights shop.buyprofit = c_shop.buyprofit # price factor when shop buys an item assert shop.buyprofit <= 1.0 shop.sellprofit = c_shop.sellprofit # price factor when shop sells item assert shop.sellprofit >= 1.0 open_hrs = (max(0, c_shop.open1), min(24, c_shop.close1)) shop.open_hours = [open_hrs] if c_shop.open2 and c_shop.close2: open_hrs = (max(0, c_shop.open2), min(24, c_shop.close2)) shop.open_hours.append(open_hrs) # items to be cloned when sold (endless supply): shop.forsale = set() missing_items = set() for item_vnum in c_shop.forsale: try: shop.forsale.add(make_item(item_vnum)) except KeyError: missing_items.add(item_vnum) if missing_items: print("Shop #%d: unknown items:" % vnum, missing_items) shop.msg_playercantafford = c_shop.msg_playercantafford shop.msg_playercantbuy = c_shop.msg_playercantbuy shop.msg_playercantsell = c_shop.msg_playercantsell shop.msg_shopboughtitem = c_shop.msg_shopboughtitem shop.msg_shopcantafford = c_shop.msg_shopcantafford shop.msg_shopdoesnotbuy = c_shop.msg_shopdoesnotbuy shop.msg_shopsolditem = c_shop.msg_shopsolditem shop.action_temper = c_shop.msg_temper shop.willbuy = c_shop.willbuy shop.wontdealwith = c_shop.wontdealwith converted_shops[vnum] = shop return shop
# Using this notification override his is the best way to react to a certain # creatures (NPCs) arriving in the shop. # You could sniff the location's messages via a wiretap, but that often requires # nasty string parsing because they are messages meant for humans really. # We use pubsub to notify anyone interested. if npc.name == "rat": topic("shoppe-rat-arrival").send(npc) def notify_player_arrived(self, player: Player, previous_location: Location) -> None: # same as above, but for players entering the scene topic("shoppe-player-arrival").send(player) # create the Olde Shoppe and its owner shopinfo = ShopBehavior() toothpick = Item("toothpick", "pointy wooden toothpick") toothpick.value = 0.12 shopinfo.forsale.add(toothpick) # never run out of toothpicks shopinfo.banks_money = True shopkeeper = ShoppeShopkeeper( "Lucy", "f", short_descr= "Lucy, the shop owner, is looking happily at her newly arrived customer.") shopkeeper.money = 14000 shop = Shoppe("Curiosity Shoppe", "A weird little shop. It sells odd stuff.") shop.insert(shopkeeper, None) shop.get_wiretap().subscribe( shopkeeper ) # the shopkeeper wants to act on certain things happening in her shop.
def notify_npc_arrived(self, npc: Living, previous_location: Location) -> None: # Using this notification override his is the best way to react to a certain # creatures (NPCs) arriving in the shop. # You could sniff the location's messages via a wiretap, but that often requires # nasty string parsing because they are messages meant for humans really. # We use pubsub to notify anyone interested. if npc.name == "rat": topic("shoppe-rat-arrival").send(npc) def notify_player_arrived(self, player: Player, previous_location: Location) -> None: # same as above, but for players entering the scene topic("shoppe-player-arrival").send(player) # create the Olde Shoppe and its owner shopinfo = ShopBehavior() toothpick = Item("toothpick", "pointy wooden toothpick") toothpick.value = 0.12 shopinfo.forsale.add(toothpick) # never run out of toothpicks shopinfo.banks_money = True shopkeeper = ShoppeShopkeeper("Lucy", "f", short_descr="Lucy, the shop owner, is looking happily at her newly arrived customer.") shopkeeper.money = 14000 shop = Shoppe("Curiosity Shoppe", "A weird little shop. It sells odd stuff.") shop.insert(shopkeeper, None) shop.get_wiretap().subscribe(shopkeeper) # the shopkeeper wants to act on certain things happening in her shop. shop.add_exits([Exit(["door", "out"], "town.lane", "A fancy door provides access back to the lane outside.")]) # provide some items in the shop clock = gameclock.clone() clock.value = 500