HowToAddItemsStendhal

来自gamedev
跳转到导航 跳转到搜索


Template:Navigation for Stendhal Extenders 您可以通过几个非常简单的步骤将新物品添加到游戏中:

准备工作[编辑]

Stendhal on Eclipse中所述设置开发环境。

编辑items.xml文件[编辑]

所有items.xml 文件在 /data/conf/items/ directory.路径下,它们是按照“等级”(见下文)排列的,例如盾牌,剑,钥匙,食物等。 该文件包含游戏中所有物品的描述。 让我们从如何做武器开始,例如在swords.xml文件中:

  <item name="dagger">
    <type class="sword" subclass="dagger" tileid="-1"/>
    <description>You see a dagger, it is little more than decorative but you can jab pretty fast with it.</description>
    <implementation class-name="games.stendhal.server.entity.item.Item"/>    <attributes>
      <atk value="8"/>
      <rate value="3"/>
    </attributes>
    <weight value="0.2"/>
    <value value="8533"/>
    <equipable>
      <slot name="bag"/>
      <slot name="lhand"/>
      <slot name="rhand"/>
    </equipable>
  </item>

了解它是如何工作的很重要。

我们必须给该项目起一个名字,并在“item”标签中完成。 然后,我们在“ type”标签上指定类和子类。如果您检查子画面在客户端的结构方式,您将意识到它的方式类似于:

 sprites/
     items/
         class/
             subclass.png

这样,我们可以将单个GFX重新用于不同的项目。例如:小刀+1,旧刀,精灵刀... 我们在“ description”标签中为商品提供了一个很好的描述(玩家何时进行“Look”查找)。

除非该项目是可堆叠的,否则应该从上方复制实现标签,在这种情况下,请使用:

     <implementation class-name="games.stendhal.server.entity.item.StackableItem"/>

在“属性”标签内,您可以指定武器具有的属性:

  • ATK - 它是与物品可能造成的伤害成比例的值。
  • DEF - 是与物品可以阻挡多少伤害成正比的值。
  • RATE - 是使用进攻性武器打击的速度。
RATE 1表示您可以打每一回合,RATE 10表示每10个回合只能打一次。
RATE必须大于0,但没有上限。 (在stendhal,我们拥有的最低速度武器是15)
只有进攻性武器才能达到目标
  • RANGE-是远距离攻击属性武器,例如弓箭和长矛等射弹。
射程越大,武器越有效。
  • QUANTITY - 是箭头和长矛等可堆叠武器的属性(设置为1)
  • LIFESTEAL - 是进攻性武器的特殊属性。
它必须是介于-1和1之间的数字。
生命武器造成的任何攻击伤害都会在恢复生命值时“回血”给玩家
吸血能力为0.2的武器会向玩家造成敌人的伤害值回复20%的生命值。
负面吸血会根据玩家对敌人造成的伤害来消耗其生命值。


对于食品,饮料,药水和毒药,其属性为:

  • AMOUNT - 该物品恢复的总HP(有毒物品为负)
  • REGEN - 一次可以治愈多少水(药水应该等于AMOUNT,毒药应该是负数)
  • FREQUENCY - 修复的速度(数字越小表示速度越快,药水选择1)
  • QUANTITY - 应该使用(设置为1)它们都是可堆叠的项目。

请注意,饮料课上会使用药水和毒药(和解毒剂)。 解毒剂有:

  • AMOUNT - 他们保护您免受毒药的时间(例如,解毒剂为400,更大的为800)
  • REGEN 等于0
  • FREQUENCY 等于1
  • QUANTITY 等于1

对于滚动(其中大多数是传送滚动),请遵循scrolls.xml中的示例以了解要使用的实现。 标记滚动的属性INFOSTRING是滚动的目的地,例如

 <infostring value="0_nalwor_city 40 60"/>

对于召唤卷轴,INFOSTRING是生物名称,但是实现

 <implementation class-name="games.stendhal.server.entity.item.scroll.SummonScroll"/> 

会处理此问题,因此您无需设置它。

那应该是所有特殊项目。 许多物品(例如药草,钥匙,木材,金钱)将没有属性,或者除了数量之外没有属性。

最后,您需要指定可以在哪里装备该物品:

  • 左手(rhand)
  • 右手(lhand)
  • 盔甲(armor)
  • 头部(head)
  • 大腿(legs)
  • 披风(cloak)
  • 手指(finger)
  • 脚部(feet)
  • 钥匙圈(keyring)
  • 背包(bag)


除非您有充分的理由玩家不必携带这些物品,否则所有物品都应装在背包中。如果玩家想要拆分筹码,则所有可堆叠的物品都应装备在左手和右手。尽管在stendhal中,我们绘制了盾牌和剑在角色窗口上的位置图,但我们确实允许玩家用两只手来装备盾牌和武器。戒指可以戴在手指上,但在钥匙圈和背包中也很容易携带。

添加GFX[编辑]

现在将32x32精灵放置在文件夹中data/sprites/items/<class>/<subclass>.png

另请参见 如何知道物品的图形规格

如果您想让物品的图像动起来(例如赚钱),只需制作一个32N x 32的精灵即可。 例如。 如果动画中有5帧,它将是160 x 32的精灵。 它将自动显示动画。

注册类[编辑]

到目前为止,我们已经定义了服务器的外观。注册该类将告诉客户端该如何处理。(它是可堆叠的,应该显示数字吗?是否可以使用,并且应该显示用途?)大多数类已经注册,您可能可以忽略本节...继续查找以查找。

默认情况下,物料将表现为客户端不可堆叠,不可使用的物料。这包括盔甲,武器和大多数不变的物品。可堆叠但不能使用的类别按类别注册,例如金钱,导弹,草药等。大多数可用物品(例如食物,饮料)都注册为整个类。因此,如果您要添加到任何现有的类中,则很可能会忽略以下所有这些内容。如果无法解决问题,请回来...就像您期望能够使用您的新产品而不能使用一样。或者,如果您要添加一个全新的类。

因此,如果您有一个新类,并且希望它是可堆叠的或可使用的,或者是一个全新的客户端对象,扩展Item,</ small>,则为您的类添加类型(项目),类和您选择的类其余行为在rc / games / stendhal / client / entity / factory / EntityMap.java中,例如

// flower was a new class of stackables
register("item", "flower", null, StackableItem.class);
// drink was a new class of Useables
register("item", "drink", null, UseableItem.class);
// Box is a new client side object 
register("item", "box", null, Box.class);

如果您的商品属于可堆叠和不可堆叠或可使用和不可使用的类的一部分,该怎么办?请记住,默认值是不可堆叠和不可使用的。因此,您需要分别注册特殊的。这是通过类型(项目),类(如前)以及子类(与xml中的子类)完成的,以指定您要指的是哪个确切项目。

// most tools don't have a Use but the sugar mill should. the subclass in xml is sugarmill
register("item", "tool", "sugarmill", UseableItem.class);

最后,仅当您需要添加到上面的EntityMap时,转到src / games / stendhal / client / gui / j2d / entity / EntityViewFactory.java并以相同的方式配置项目。例子是

// flower was a new class of stackables
register("item", "flower", null, StackableItem2DView.class);
// drink was a new class of Useables
register("item", "drink", null, UseableItem2DView.class);
// Box is a new client side object 
register("item", "box", null, Box2DView.class);
// most tools don't have a Use but the sugar mill should. the subclass in xml is sugarmill
register("item", "tool", "sugarmill", UseableItem2DView.class);


添加语法[编辑]

项目名称应简短且足以识别该项目,但是在口语和书面英语中,可能会有一些额外的单词与该项目相关。例如,卡门应该提供“100瓶药水”而不是“100瓶”。 (在此处添加npc文本示例吗?)

一些例子:

potion bottle of potion
leather legs pair of leather legs
wine glass of wine
plate armor suit of plate armor
meat piece of meat

要将这样的语法前缀添加到NPC语音和语音识别中,请编辑src/games/stendhal/common/grammar/PrefixManager.java. Template:TODO

加入游戏[编辑]

生物掉落[编辑]

您可以让一个生物掉落您新制造的物品。通过在文件位置中的XML文件中编辑该生物来完成此操作projects/stendhal/data/conf/creatures.游戏中的每个生物都位于该文件夹中,并按生物类型分类。 例如,可以在文件中找到老鼠projects/stendhal/data/conf/creatures/animal.xml.

添加到地图或种植者[编辑]

您可能希望在地图上添加物品(供玩家拾取或收获)。您可以通过创建Java文件来添加区域(适用于一次性项目,例如Haizen小屋中的毒药和Haizen桌子的滚动条),也可以使用tiled添加,这在开始时比较繁琐,但允许您将内容添加到tileed中的对象层 将来一次又一次。(非常适合从地面,草药等收集铁矿石)。这需要有关生成器(也称为种植者)的完整教程,请参阅HowToAddGrowers

由NPC出售[编辑]

如果尚未创建NPC,则可以编码新的NPC。然后,您将需要在NPC中添加卖方行为,这应该单独讨论。在完成此操作之前,请在源代码中查看卖方示例,例如Semos Tavern中的Margaret。该文件是src/games/stendhal/server/maps/semos/tavern/BarMaidNPC.java.如果NPC在了解项目名称方面有任何问题,则可能需要检查How to test NPC Parser

由NPC生产[编辑]

如果尚未创建NPC,则可以code a new NPC。您将需要向NPC添加生产者行为,应单独进行介绍。在完成此操作之前,请在源代码中查看Producer示例,例如Ados Bakery中的Arlindo。该文件是 src/games/stendhal/server/maps/ados/bakery/BakerNPC.java. 如果您对NPC理解项目名称有任何疑问,您可能需要检查How to test NPC Parser

物品任务和任务奖励[编辑]

也许您会希望NPC为玩家装备一件物品,作为任务的一部分,请参阅HowToCreateQuests。 您还可以将您的物品添加到Daily Item questWeekly item quest中,这些物品与世界各地的外观有关(例如稀有物品? )。


Back to stendhal main wiki page