饰品
方法
继承自ModItem
| 方法名称 | 用处 |
|---|---|
| UpdateAccessory | 实际的饰品效果,只运行一次,但是每游戏刻更新一次 |
常用加成
更多加成可以CTRL + 左键 进入 玩家类查看,主要为字段 / 属性,代码行1550前后,需要注意的是,部分加成使用乘算,因此进行修改时需要使用 *= 1 + %
使用Player.Get可以获得大量加成提示
| 属性 / 字段名称 | 作用 |
|---|---|
| GetDamage | 获取伤害加成引用 |
| GetCritChance | 获取暴击率加成引用 |
| GetArmorPenetration | 获取盔甲穿透力引用 |
|
|
Mod Player
使用饰品为玩家提供原版加成是在大多数情况下是次要的,除了伤害加成等,tModLoader为我们提供了 ModPlayer类,可以让开发者自定义玩家属性,从而达到特殊的判定等。例如特殊装备的冷却计时
-
创建自己的
ModPlayer类1public class MyModPlayer : ModPlayer{} -
定义自定义
属性 / 字段例如xxxxTimer或bool类型,对于非bool类型,应当自行控制何时增减,对于bool类型,应当在ResetInfoAccessories方法中将其恢复为默认值,此方法用来重置自定义属性,每游戏刻都会更新一次,但是在所有加成完成之后,否则饰品效果自然无效了1 2 3 4 5 6 7public int NewTextTimer = 0; public bool Yes = false; public override void ResetInfoAccessories() { Yes = false; } -
在饰品的
UpdateAccessory中,更改 / 使用自定义的玩家属性,也可以在ModPlayer提供的virtual方法中执行这些操作,下面的代码示例,当玩家佩戴次饰品时,我们自定义的Yes字段被设置为true,并且设置NewTextTimer每游戏刻自增11 2 3 4 5 6 7 8public override void UpdateAccessory(Player player, bool hideVisual) { player.GetDamage(DamageClass.Generic) *= 1 + 0.5f; var modPlayer = player.GetModPlayer<MyModPlayer>(); modPlayer.Yes = true; if(modPlayer.NewTextTimer < 60) modPlayer.NewTextTimer++; } -
效果我们可以直接在
UpdateAccessory里面写,也可以在ModPlayer的UpdateEquips方法中,或者其他任何你想进行的地方,只需要你确保,你应用的方法在此字段被恢复为默认值之前就可。加成不建议写每游戏刻运行一次的方法,而是写在每游戏刻更新一次的方法。可以写一个简单绘制,如果绘制没有按照预期绘制,但是此方法内的Main.NewText却一直运行,那大概率是目标方法了。1 2 3 4 5 6 7 8 9 10public override void UpdateEquips() { //Player.inventory 玩家背包 if (Yes) Player.statLifeMax2 += 100; if (NewTextTimer >= 60) { CombatText.NewText(new((int)Player.Center.X, (int)Player.Center.Y, 20, 20), Color.Aqua, "60!"); NewTextTimer = 0; } base.UpdateEquips(); }
本地化
对于饰品,进行加成本地化时有两种方法,一种是直接写死在hjson文件中,另一种是在代码中传值,可以保证本地化显示与实际同步,强烈建议是在代码中传值,hjson中使用占位符
|
|
|
|
这样写后是,效果与相同,实际上这两个数字可以使用变量 / 属性进行存储
|
|
|
|
相应的,加成部分需要使用这两个字段来进行加成
|
|
甚至可以将加成字段统一管理起来,这个就看个人喜好了。