或者为什么 frishek 社区总是抱怨并且会抱怨下降。
所以,如果你看过这篇文章,那么我认为你已经对 Aion、服务器模拟器等是什么有所了解。
所以,有一次当我看到frishka的源代码时,起初我简直不敢相信自己的眼睛,但在重新检查了所有的开源之后,我确信这是真的,这是一场噩梦。
原始《永恒之塔》中的液滴是如何计算的?玩家试图杀死的暴徒/NPC有许多假想的投递箱。
1 个板条箱,这是生物类型的主要掉落物,有些物品会以某种方式以一定的机会掉落到下拉列表中。
2-N – 装有不同物品套装的盒子,其中一件且只能掉落一件物品
每件物品都有自己的掉落机会。但是,各地的计算公式都不同。
对于主要掉落,每个项目都是单独计算的。有条件地说,有多少鱼竿被扔进这个盒子里,就有多少盒子里的物品。如果有 4 个物体,则用 4 根钓鱼竿,然后拉。有什么东西被钩住了,拉了出来。因此,从主投递箱中,您几乎可以拉出所有物品。
对于额外的盒子,系统的工作原理略有不同。拿一个装有所有物品的盒子,比方说一个装着蓝色衣服的盒子,洗牌,然后在那里扔一根钓鱼竿,然后伸展,如果有什么东西抓住,它会掉到玩家身上,如果没有,那么对不起。但是对于每个额外的盒子,鱼竿被铸造一次,而且一次。从额外掉落中拉出物品的几率 = 盒子中每个单独物品的几率之和。这意味着,如果盒子中有 10 件物品的 10 次机会,那么该物品肯定会掉落。
现在它是如何在 frishki 上工作的。基本上,它的工作原理与原版几乎相同。除了:
让我们看一下代码:
1) 类 NpcDrop
循环,用于生物中掉落的每一组(物品框)。
爪哇岛:
for (DropGroup dg : this.dropGroup) { if (dg.getRace() == Race.PC_ALL || dg.getRace() == race) index = dg.dropCalculator(result, index, dropModifier, race, groupMembers); }
2) class DropGroup
从组中随机取一个项目
爪哇岛:
if (this.useCategory.booleanValue()) { Drop d = this.drop.get(Rnd.get(0, this.drop.size() - 1)); return d.dropCalculator(result, index, dropModifier, race, groupMembers); }
3) 班级掉落
根据这个项目的机会,我们确定它是否放弃。
爪哇岛:
if (Rnd.get() * 100.0F < percent)
我希望我能够向你解释它是如何工作的。我将尝试在图片中显示击倒衣服的机会在哪里会更清晰可见。
你问为什么?因为编写免费服务器第一版的人与游戏机制相去甚远,并没有将其记在心。而那些至今仍在开放服务器的人从“歪门邪道”的开发人员那里购买了“笨拙”的构建。就是这样。
现在的开发者还做不成一个加权选择系统) - 随机加权选择
java 示例代码
爪哇岛:
public class RandomizeDrop { private List<RandomizeEntry> entries = new ArrayList<>(); private double accumulatedChance; private Random rand = new Random(); // Собираем суммированную шкалу public void addEntry(int object, float chance) { accumulatedChance += chance; RandomizeEntry ent = new RandomizeEntry(); ent.object = object; ent.accumulatedWeight = accumulatedChance; entries.add(ent); } // По шкале, селектим нужный предмет public int getRandom() { double r = rand.nextDouble() * accumulatedChance; int returnedObj = entries.get(0).object; for (RandomizeEntry entry : entries) { if (r >= entry.accumulatedWeight) { returnedObj = entry.object; } } return returnedObj; } }
感谢您的关注!
