0

我正在编写一个脚本,并且可以使用一些指导。该脚本的目的是让玩家获得魔法物品并将它们存储在特定的插槽中。我遇到了尝试根据给定的插槽生成项目的问题。

我正在创建一个dict类型的子类。这是我将存储用户项目的地方。

class PlayerData(dict):
    def __init__(self):
        self.weapon = 0
        self.head = 0
        self.back = 0
        self.chest = 0
        self.hands = 0
        self.feet = 0

    def __getattr__(self, attr):
        return self.__getitem__(attr)

    def __setattr__(self, attr, value):
        self.__setitem__(attr, value)

我将这些值存储在字典中。我有一个修改这些条目的类。其中一种方法遍历 PlayerData 中的项目,如果所有项目都为空,则随机抓取一个并尝试向其中添加一个对象(MagicItem 类型)。“self.steamid”是对玩家的引用。

def addItem(self):
    chance = 75
    slot = 0
    count = 0
    for k,v in PlayerDataDictionary[self.steamid].iteritems():
        if not v:
            count += 1
    if count = 6:
        chance = 100
    if random.randint(1,100) <= chance:
        slot = random.choice(PlayerDataDictionary[self.steamid])
        if slot:
            chooseReplace(self, slot)
        else:
            PlayerDataDictionary[self.steamid][slot] = MagicItem(slot)
    else:
        es.tell(userid, '#green', 'You destroyed your item during creation!')
        # This is a custom module for a game, this function works as intended

但是,创建哪个项目取决于插槽。我如何确定 PlayerData 中的哪个插槽被传递给了 MagicItem 类?

4

1 回答 1

1

从我理解发生了什么的方式来看,这条线:

slot = random.choice(PlayerDataDictionary[self.steamid])

是唯一slot被分配的地方。因此,您应该能够将该变量传递到某个地方(打印、另一个函数,无论您想用它做什么)。如果您正在寻找特定的索引,那么您要么需要编写一个PlayerDataDictionary可以返回插槽索引的函数,要么:

size = len(PlayerDataDictionary[self.steamid])
random_slot = random.randint(0, size)

这将留下random_slot一个索引值,然后您可以传递

if PlayerDataDictionary[self.steamid][random_slot]:
    chooseReplace(self, random_slot)
else:
    PlayerDataDictionary[self.steamid][random_slot] = MagicItem(random_slot)

只要我正确理解您的问题,这应该可以工作。你对你到底在寻找什么留下了一些含糊不清的地方,所以如果我错过了确切的问题,请告诉我。

于 2013-09-18T06:53:40.993 回答