0

好的,所以问题是我正在尝试为具有多种项目类型的游戏制作插件,类似于暗黑破坏神 2 的项目。现在就像暗黑破坏神 2 一样,该物品有几率生成为魔法或稀有物品。

如果物品被选为魔法或稀有物品,那么它可以有前缀和后缀。

现在它选择前缀/后缀的方式是:要确定可用的词缀,请使用magicprefix.txt 和magicsuffix.txt 文件中的级别列作为所需的最小词缀lvl(alvl)。然后它通过maxlevel(一些不能出现在更高alvl项目上),以及适当的项目类型和排除类型(排除项目类型)过滤项目。

我还需要排除与已选择的词缀具有相同组号的任何词缀。然后为了确定获得词缀的机会,我需要对特定类型(前缀/后缀)的频率求和,并通过 affix_frequency/frequency_sum 获得该特定词缀的机会。

此描述取自:http ://diablo2.diablowiki.net/index.php?title=Item_Generation_v1.09&action=edit§ion=18

并链接到包含前缀/后缀数据的各种 txt 文件: https://code.google.com/p/d2spe/source/browse/trunk/data/global/excel/MagicSuffix.txt https://code.google .com/p/d2spe/source/browse/trunk/data/global/excel/MagicPrefix.txt

什么是基于词缀级别有效访问前缀/后缀组的良好数据结构?

目前我正在考虑只是静态生成分组并只有一个巨大的查找表,但是将它们存储在一个数据结构中会更好. 该函数本质上将返回一组可以选择的有效词缀。

4

1 回答 1

0

查找所需前缀/后缀的最简单方法可能是简单地创建前缀和后缀列表,并为您希望过滤的所有属性创建单独的列表。

例如:

List<String> prefixes = Arrays.asList("Sturdy", "Strong", "Glorious", "Blessed", "Saintly");
List<String> suffixes = Arrays.asList("of Health", "of Protection", "of Absorption", "of Life", "of Warding");

List<Integer> prefixMinLevel = Arrays.asList(1,3,7,22,59);
List<Integer> suffixMinLevel = Arrays.asList(10,4,8,3,11);

List<Integer> prefixType = Arrays.asList(1,1,1,2,2);
List<Integer> suffixType = Arrays.asList(1,2,3,3,3);

然后简单地创建一个自定义方法来根据项目检索有效的前缀/后缀列表:

public List<String> getPrefixList(List<String> prevPrefixes, int itemLevel, int itemType){
    List<String> newPrefixes = new ArrayList<String>();

    for(int i = 0; i < prefixes.size(); i++){
        if(!prevPrefixes.contains(prefixes.get(i)))//Filtering out previous prefixes
        if(itemLevel >= prefixMinLevel.get(i))//Checking item level
        if(itemType == prefixType.get(i)){//Checking item type
            newPrefixes.add(prefixes.get(i));
        }
    }

    return newPrefixes;
}

您可能可以为后缀创建类似的函数。

您还可以添加许多不同的标准,例如物品稀有度和物品价值。然后只需将这些条件添加到上面示例中的列表中,并将它们添加到 getPrefixList() 函数中。

于 2013-11-06T07:23:19.773 回答