Пример #1
0
    def claimed_loots(self):
        """Return a list of loot based on the rank of the player"""
        #TODO: prendre en compte le débordement d'inventaire avec courier

        recipes_1 = [tool.recipe for tool in self.rank.gain_tools]
        upgraders_1 = [
            Item.by_name(f'upgrader_{min(self.rank.index,5)}'),
        ]

        recipes_2 = [tool.recipe for tool in self.rank.allowed_tools]
        upgraders_2 = [
            Item.by_name(f'upgrader_{i}')
            for i in range(min(self.rank.index, 5) + 1)
        ]

        loots = {}

        for i in range(random.randint(3, 5)):  # 1 + 2-4
            recipe_list = recipes_1 if (i == 0) else recipes_2
            upgrader_list = upgraders_1 if (i == 0) else upgraders_2
            if (random.random() < 0.1):  # 10%
                loot = Item.weighted_choice(recipe_list)
            else:
                loot = Item.weighted_choice(upgrader_list)

            if loot in loots:
                loots[loot] += 1
            else:
                loots[loot] = 1

        return Stack.to_stack_list(loots)
Пример #2
0
 def allowed_tools(self):
     try:
         # tool_names = self.pre_rank.allowed_tools + self._allowed_tools
         return self.pre_rank.allowed_tools + [
             Item.by_name(name) for name in self._allowed_tools
         ]
     except:
         # tool_names = self._allowed_tools
         return [Item.by_name(name) for name in self._allowed_tools]
Пример #3
0
    async def unequip(self, ctx, item_id):
        _item = Item(item_id)
        _user = User(ctx.message.author.id)

        if _user.is_Registered is False:
            await self.bot.say(self.errors.USER_NOT_IN_DB)
            return

        if _item.exists is False:
            await self.bot.say(self.errors.ITEM_NOT_EXIST)
            return

        if len(_user.get_user_item(item_id)) == 0 and len(
                _user.get_user_badge(item_id)) == 0:
            await self.bot.say(self.errors.ITEM_DONT_OWN)
            return

        try:
            if _user.get_user_item(item_id)[0][2] == 0:
                await self.bot.say(self.errors.NOT_EQUIPPED)
                return
        except:
            if _user.get_user_badge(item_id)[0][2] == 0:
                await self.bot.say(self.errors.NOT_EQUIPPED)
                return

        if _item.kind == 3:
            _user.unequip_badge(item_id)
        else:
            _user.unequip_item(item_id)

        await self.bot.say(self.msg.ITEM_UNEQUIPPED)
Пример #4
0
    async def myitems(self, ctx):
        _user = User(ctx.message.author.id)

        if _user.is_Registered is False:
            await self.bot.say(self.errors.USER_NOT_IN_DB)
            return

        items = _user.user_items

        user_items = []

        for item_id in items:
            _item = Item(item_id)
            conc = f"`{_item.name}` | ID: `{item_id}`"
            user_items.append(conc)

        msg = ""

        for i in user_items:
            msg += f"{i}\n"

        if len(msg) == 0:
            msg = f"No items in your inventory. Buy some items at `{self.configs.PREFIX}shop`!"

        embed = discord.Embed(description="This is your backpack! 🎒",
                              color=self.themes.MAIN_COL)
        embed.set_author(name=f"{ctx.message.author.name}'s Inventory",
                         icon_url=ctx.message.author.avatar_url)
        embed.add_field(name="Inventory", value=msg)
        embed.set_footer(
            text=f"Use {self.configs.PREFIX}equip <Item_ID> to equip an item.")

        await self.bot.say(embed=embed)
Пример #5
0
    async def sell(self, ctx, item_id):
        _item = Item(item_id)
        _user = User(ctx.message.author.id)

        if _user.is_Registered is False:
            await self.bot.say(self.errors.USER_NOT_IN_DB)
            return

        if _item.exists is False:
            await self.bot.say(self.errors.ITEM_NOT_EXIST)
            return

        if len(_user.get_user_item(item_id)) == 0:
            await self.bot.say(self.errors.ITEM_DONT_OWN)
            return

        if _item.kind == 3:
            await self.bot.say("❌ | Badges cannot be sold.")

        cost = _item.cost
        give_back = cost * 0.20

        _user.delete_user_item(item_id)
        _user.add_money(int(give_back))

        await self.bot.say(self.msg.SELL_STR.format(int(give_back)))
Пример #6
0
    async def purgebadge(self, ctx, user: discord.Member, badge):
        _user = User(user.id)
        _item = Item(badge)

        if _user.is_Registered is False:
            await self.bot.say(self.errors.USER_NOT_IN_DB)
            return

        if _item.exists is False:
            await self.bot.say(self.errors.ITEM_NOT_EXIST)
            return

        if _item.kind != 3:
            await self.bot.say("❌ | Item is not a badge.")
            return

        try:
            if len(_user.get_user_badge(badge)) == 0:
                await self.bot.say(self.errors.ITEM_DONT_OWN)
                return
        except:
            pass

        _user.purge_user_badge(badge)

        await self.bot.say(f"You purged **{_item.name}** from {user.mention}.")
Пример #7
0
    def swap_stack(self, idx_1, idx_2):
        """Swap two stacks, if boths stacks have same items, fill a stack with the other"""
        stack_1 = self._inventory.get(str(idx_1), None)
        stack_2 = self._inventory.get(str(idx_2),
                                      None)  # move stack_1 TO stack_2

        # merge two stacks if same stack
        if (stack_1 is not None) and (stack_2 is not None):
            if stack_1['item_name'] == stack_2['item_name']:
                item = Item.by_name(stack_1['item_name'])
                place_left = (item.stack_size - stack_2['quantity'])
                if stack_1['quantity'] > place_left:
                    stack_1['quantity'] -= place_left
                    stack_2['quantity'] = item.stack_size
                else:
                    stack_2['quantity'] += stack_1['quantity']
                    stack_1 = None
                return
            else:
                self._inventory[str(idx_1)] = stack_2
                self._inventory[str(idx_2)] = stack_1

        if (stack_1 is not None) ^ (stack_2 is not None):
            if stack_2 is not None:
                self._inventory[str(idx_1)] = stack_2
            else:
                del self._inventory[str(idx_1)]

            if stack_1 is not None:
                self._inventory[str(idx_2)] = stack_1
            else:
                del self._inventory[str(idx_2)]
Пример #8
0
    async def grantbadge(self, ctx, user: discord.Member, badge):
        _user = User(user.id)
        _item = Item(badge)

        if _user.is_Registered is False:
            await self.bot.say(self.errors.USER_NOT_IN_DB)
            return

        if _item.exists is False:
            await self.bot.say(self.errors.ITEM_NOT_EXIST)
            return

        if _item.kind != 3:
            await self.bot.say("❌ | Item is not a badge.")
            return

        try:
            if badge == _user.get_user_badge(badge)[0][1]:
                await self.bot.say(self.errors.ALREADY_OWNED)
                return
        except:
            pass

        _user.store_badge(badge)

        await self.bot.say(
            f"You gave {user.mention} the badge **{_item.name}**.")
Пример #9
0
def add_item():
    global items
    item_name = request.args.get('itemName')
    price = request.args.get('Price')
    item_url = request.args.get('itemUrl')
    description = request.args.get('comment')
    item = Item(item_name, price, item_url, description)
    items.append(item)
    return Response("", 204)
Пример #10
0
    def random_loot(self):
        loot_weight = {
            item_name: Item.by_name(item_name).frequency
            for item_name in self.tool_used.item.loots
        }

        luck = self.get('stats')['luck']
        apply_luck(loot_weight, luck)

        summ = sum([weight for weight in loot_weight.values()])
        offset = random.random() * summ
        for item_name, weight in loot_weight.items():
            if offset < weight:
                return Stack(item_name, 1)
            offset -= weight
Пример #11
0
    async def equip(self, ctx, item_id):
        _item = Item(item_id)
        _user = User(ctx.message.author.id)

        if _user.is_Registered is False:
            await self.bot.say(self.errors.USER_NOT_IN_DB)
            return

        if _item.exists is False:
            await self.bot.say(self.errors.ITEM_NOT_EXIST)
            return

        if len(_user.get_user_item(item_id)) == 0 and len(
                _user.get_user_badge(item_id)) == 0:
            await self.bot.say(self.errors.ITEM_DONT_OWN)
            return

        try:
            if _user.get_user_item(item_id)[0][2] == 1:
                await self.bot.say(self.errors.ALREADY_EQUIPPED)
                return
        except:
            if _user.get_user_badge(item_id)[0][2] == 1:
                await self.bot.say(self.errors.ALREADY_EQUIPPED)
                return

        if _user.equipped_background is not None and _item.kind == 0:  # if background
            _user.unequip_item(_user.equipped_background)

        if _user.equipped_badge is not None and _item.kind == 3:  #if badge
            _user.unequip_badge(_user.equipped_badge)

        if _item.kind == 3:
            _user.equip_badge(item_id)
        else:
            _user.equip_item(item_id)

        await self.bot.say(self.msg.ITEM_EQUIPPED)
Пример #12
0
    async def buy(self, ctx, item_id):
        _user = User(ctx.message.author.id)
        _item = Item(item_id)

        if _user.is_Registered is False:
            await self.bot.say(self.errors.USER_NOT_IN_DB)
            return

        if _item.exists is False:
            await self.bot.say(self.errors.ITEM_NOT_EXIST)
            return

        try:
            if item_id == _user.get_user_item(item_id)[0][1]:
                await self.bot.say(self.errors.ALREADY_OWNED)
                return
        except:
            try:
                if item_id == _user.get_user_badge(item_id)[0][1]:
                    await self.bot.say(self.errors.ALREADY_OWNED)
                    return
            except:
                pass

        cost = _item.cost

        if _user.money < cost:
            await self.bot.say(self.errors.INSUF_MONEY)
            return

        if _item.kind == 3:
            _user.store_badge(item_id)
        else:
            _user.put_background(item_id)

        _user.add_money(-cost)

        await self.bot.say(self.msg.ITEM_INV)
Пример #13
0
 def frequency(self):
     return Item.by_name(self.result).frequency * 2
Пример #14
0
class Room(object):
    def __init__(self, roomType, enemies, items, obstructions=stdObstructions):
        self.type = roomType
        self.enemies = enemies
        self.items = items
        self.obstructions = obstructions
        self.doors = []

# START
start = Room("standard",[],[],[])

# STANDARD
standard = [
    Room("standard", [Enemy("apple")], []),
    Room("standard", [Enemy("apple"), Enemy("cherry")],[Item(1)]),
    Room("standard", [Enemy("cherry"), Enemy("cherry")], [Item(1,25),Item(0,-25)]),
    Room("standard", [Spawner("banana")], [])
]

# SHOP
shop = [
    Room("shop", [], [Item(3)]),
    Room("shop", [], [Item(4)])
]

# DISH
dish = [
    Room("dish", [], [Item(0,-5,-10)])
]
Пример #15
0
 def recipe(self):
     """Return the recipe of the current equipment"""
     parts = self.name.split('_')
     parts.insert(len(parts) - 1, 'recipe')
     recip_name = '_'.join(parts)
     return Item.by_name(recip_name)
Пример #16
0
        }
    }

    node_factory.create_new_node({
        'db_position': position,
        'instance_components': {
            "components": json.dumps(component_data)
        }
    })


with session_manager.get_session() as session:
    _, node_factory, node_factory_db, object_db, player_factory, account_utils = setup_objects(
        all_db_components, all_components, session)
    object_db.set_session(session)

    session.add(Item("iron ore", 'ore'))
    session.add(Item("silver ore", 'ore'))
    session.add(Item("gold ore", 'ore'))

    session.add(Item("trishot", 'upgrade'))
    session.add(Item("health", 'upgrade'))

    create_spacestation(node_factory_db,
                        position={
                            "x": 0,
                            "y": -200
                        },
                        radius=200)
    create_shop(node_factory_db, {"x": 0, "y": -200}, session)
Пример #17
0
 def display_name(self):
     return narr('item.equipment_recipe.name').format(
         item_name=Item.by_name(self.result).display_name)
Пример #18
0
 def description(self):
     return narr('item.equipment_recipe.desc').format(
         item_name=Item.by_name(self.result).display_name,
         quantity=self.result_quantity)
Пример #19
0
 def gain_tools(self):
     return [Item.by_name(name) for name in self._allowed_tools]
Пример #20
0
    def generate_recipe(self):
        """Generate a recip base on the generation values of the item then return a dict that contain all the ingredients"""
        desired_rarity = Item.by_name(
            self.result).rarity * self.result_quantity
        resource_to_use = [item() for item in Item.resources()]
        resource_to_use = resource_to_use[(self.min_resource_level) *
                                          7:(self.max_resource_level + 1) * 7]
        resource_to_use = [
            item for item in resource_to_use
            if (self.min_ratio_per_resource <= (
                item.rarity / desired_rarity) <= self.max_ratio_per_resource)
        ]
        final_recipe = {}  # key = item | value = quantity

        while desired_rarity > 0:
            if len(final_recipe
                   ) < self.max_ingredients:  # use the same ingredients
                if len(final_recipe) < self.min_ingredients:
                    resource_to_use_this_turn = [
                        item for item in resource_to_use
                        if (item.rarity < desired_rarity) and (
                            item not in final_recipe)
                    ]
                else:
                    resource_to_use_this_turn = [
                        item for item in resource_to_use
                        if (item.rarity < desired_rarity)
                    ]

                if len(resource_to_use_this_turn) > 0:
                    if len(
                            final_recipe
                    ) < self.max_ingredients:  # ici on ne prend pas un aléatoire avec poid pour pouvoir sortir des ressources rare dans la recette
                        actual_resource = random.choice(
                            resource_to_use_this_turn)
                    else:
                        actual_resource = self._weighted_choice(
                            resource_to_use_this_turn
                        )  # choice(resource_to_use_this_turn)
                else:
                    actual_resource = sorted(resource_to_use,
                                             key=lambda x: x.rarity)[0]
            else:
                resource_to_use_this_turn = [
                    item for item in final_recipe.keys()
                    if (item.rarity < desired_rarity)
                ]
                if len(resource_to_use_this_turn) > 0:
                    actual_resource = self._weighted_choice(
                        resource_to_use_this_turn
                    )  # choice(resource_to_use_this_turn)
                else:
                    actual_resource = sorted(final_recipe.keys(),
                                             key=lambda x: x.rarity)[0]

            if actual_resource in final_recipe:
                final_recipe[actual_resource] += 1
            else:
                final_recipe[actual_resource] = 1
            desired_rarity -= actual_resource.rarity
        return {
            item.name: quantity
            for item, quantity in sorted(final_recipe.items(),
                                         key=lambda tup: tup[0])
        }
Пример #21
0
                    "area": {"radius": 100},\
                    "position": "db_position",\
                    "force": {},\
                    "acceleration": {},\
                    "server_updated": {},\
                    "physics_update": {},\
                    "state_history": {}\
                }'
            }
        })

        if i % 100:
            print("Created " + str(i) + " asteroids")


with session_manager.get_session() as session:
    _, node_factory, node_factory_db, object_db, player_factory, account_utils = setup_objects(
        all_db_components, all_components, session)
    object_db.set_session(session)

    session.add(Item("iron ore"))
    session.add(Item("silver ore"))
    session.add(Item("gold ore"))
    session.add(Item("iron"))
    session.add(Item("silver"))
    session.add(Item("gold"))
    session.add(Item("gasoline"))

    create_asteroids(node_factory_db, session)
    create_planets(node_factory_db, session)