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)

これらの値を辞書に保存します。これらのエントリを変更するクラスがあります。メソッドの 1 つは 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 に答える