diff --git a/LifemaxExtra/LifemaxExtra.csproj b/LifemaxExtra/LifemaxExtra.csproj index f041a9b..fa782b0 100644 --- a/LifemaxExtra/LifemaxExtra.csproj +++ b/LifemaxExtra/LifemaxExtra.csproj @@ -1,13 +1,13 @@ - - net6.0 - enable - enable - + + net6.0 + enable + enable + - - - + + + diff --git a/LifemaxExtra/PluginContainer.cs b/LifemaxExtra/PluginContainer.cs index 301effe..4198424 100644 --- a/LifemaxExtra/PluginContainer.cs +++ b/LifemaxExtra/PluginContainer.cs @@ -2,6 +2,7 @@ using TerrariaApi.Server; using TShockAPI; using TShockAPI.Hooks; +using static TShockAPI.GetDataHandlers; namespace LifemaxExtra { @@ -11,7 +12,7 @@ public class LifemaxExtra : TerrariaPlugin public override string Author => "佚名,肝帝熙恩添加自定义"; public override string Description => "提升生命值上限"; public override string Name => "LifemaxExtra"; - public override Version Version => new Version(1, 0, 0, 5); + public override Version Version => new Version(1, 0, 0, 6); public static Configuration Config; private bool[] controlUseItemOld; private int[] itemUseTime; @@ -38,7 +39,7 @@ private static void ReloadConfig(ReloadEventArgs args) public override void Initialize() { GeneralHooks.ReloadEvent += ReloadConfig; - ServerApi.Hooks.GameUpdate.Register(this, new HookHandler(this.OnUpdate)); + GetDataHandlers.PlayerUpdate += OnPlayerUpdate; PlayerHooks.PlayerPostLogin += OnPlayerPostLogin; } @@ -48,7 +49,7 @@ protected override void Dispose(bool disposing) { GeneralHooks.ReloadEvent -= ReloadConfig; PlayerHooks.PlayerPostLogin -= OnPlayerPostLogin; - ServerApi.Hooks.GameUpdate.Deregister(this, new HookHandler(this.OnUpdate)); + GetDataHandlers.PlayerUpdate -= OnPlayerUpdate; } base.Dispose(disposing); } @@ -79,64 +80,61 @@ private static void CheckAndSetPlayerHealth(TSPlayer tsplayer) } } - private void OnUpdate(EventArgs args) + private void OnPlayerUpdate(object sender, PlayerUpdateEventArgs args) { - foreach (TSPlayer tsplayer in TShock.Players) + TSPlayer tsplayer = TShock.Players[args.PlayerId]; + if (tsplayer != null) { + int index = tsplayer.Index; + Player tplayer = tsplayer.TPlayer; + Item heldItem = tplayer.HeldItem; - if (!(tsplayer == null)) + if (!this.controlUseItemOld[index] && tsplayer.TPlayer.controlUseItem && this.itemUseTime[index] <= 0) { - int index = tsplayer.Index; - Player tplayer = tsplayer.TPlayer; - Item heldItem = tplayer.HeldItem; + int useTime = heldItem.useTime; // 获取物品使用时间 + int type = heldItem.type; // 获取物品类型 - if (!this.controlUseItemOld[index] && tsplayer.TPlayer.controlUseItem && this.itemUseTime[index] <= 0) + if (type != 29) // 如果物品不是 ID 为 29 的物品 { - int useTime = heldItem.useTime; // 获取物品使用时间 - int type = heldItem.type; // 获取物品类型 - - if (type != 29) // 如果物品不是 ID 为 29 的物品 + if (type == 1291) // 如果物品是 ID 为 1291 的物品(Life Fruit) { - if (type == 1291) // 如果物品是 ID 为 1291 的物品(Life Fruit) + if (tplayer.statLifeMax >= Config.LifeCrystalMaxLife) // 如果玩家的生命上限大于等于配置的最大水晶生命值 { - if (tplayer.statLifeMax >= Config.LifeCrystalMaxLife) // 如果玩家的生命上限大于等于配置的最大水晶生命值 + if (tsplayer.TPlayer.statLifeMax < Config.LifeFruitMaxLife) // 如果玩家当前生命上限小于配置的最大果实生命值 + { + tsplayer.TPlayer.inventory[tsplayer.TPlayer.selectedItem].stack--; // 减少玩家背包中选定物品的堆叠数量 + tsplayer.SendData(PacketTypes.PlayerSlot, "", index, (float)tplayer.selectedItem); // 更新客户端的选定物品槽位 + tplayer.statLifeMax += 5; // 增加玩家的生命上限 + tsplayer.SendData(PacketTypes.PlayerHp, "", index); // 更新客户端的生命值显示 + } + else if (tsplayer.TPlayer.statLifeMax > Config.LifeFruitMaxLife) // 如果玩家当前生命上限大于配置的最大果实生命值 { - if (tsplayer.TPlayer.statLifeMax < Config.LifeFruitMaxLife) // 如果玩家当前生命上限小于配置的最大果实生命值 - { - tsplayer.TPlayer.inventory[tsplayer.TPlayer.selectedItem].stack--; // 减少玩家背包中选定物品的堆叠数量 - tsplayer.SendData(PacketTypes.PlayerSlot, "", index, (float)tplayer.selectedItem); // 更新客户端的选定物品槽位 - tplayer.statLifeMax += 5; // 增加玩家的生命上限 - tsplayer.SendData(PacketTypes.PlayerHp, "", index); // 更新客户端的生命值显示 - } - else if (tsplayer.TPlayer.statLifeMax > Config.LifeFruitMaxLife) // 如果玩家当前生命上限大于配置的最大果实生命值 - { - tplayer.statLifeMax = Config.LifeFruitMaxLife; // 将玩家的生命上限设置为配置的最大果实生命值 - tsplayer.SendData(PacketTypes.PlayerHp, "", index); // 更新客户端的生命值显示 - } + tplayer.statLifeMax = Config.LifeFruitMaxLife; // 将玩家的生命上限设置为配置的最大果实生命值 + tsplayer.SendData(PacketTypes.PlayerHp, "", index); // 更新客户端的生命值显示 } } } - else // 如果物品是 ID 为 29 的物品(Life Crystal) + } + else // 如果物品是 ID 为 29 的物品(Life Crystal) + { + if (tplayer.statLifeMax <= Config.LifeCrystalMaxLife) // 如果玩家的生命上限小于等于最大水晶生命值 { - if (tplayer.statLifeMax <= Config.LifeCrystalMaxLife) // 如果玩家的生命上限小于等于最大水晶生命值 - { - if (tsplayer.TPlayer.statLifeMax < Config.LifeCrystalMaxLife) // 如果玩家当前生命上限小于配置的最大水晶生命值 - { - tsplayer.TPlayer.inventory[tplayer.selectedItem].stack--; // 减少玩家背包中选定物品的堆叠数量 - tsplayer.SendData(PacketTypes.PlayerSlot, "", index, (float)tplayer.selectedItem); // 更新客户端的选定物品槽位 - tplayer.statLifeMax += 20; // 增加玩家的生命上限 - tsplayer.SendData(PacketTypes.PlayerHp, "", index); // 更新客户端的生命值显示 - } - else if (tsplayer.TPlayer.statLifeMax > Config.LifeFruitMaxLife) // 如果玩家当前生命上限大于配置的最大果生命值 - { - tplayer.statLifeMax = Config.LifeFruitMaxLife; // 将玩家的生命上限设置为配置的最大生命果生命值 - tsplayer.SendData(PacketTypes.PlayerHp, "", index); // 更新客户端的生命值显示 - } + if (tsplayer.TPlayer.statLifeMax < Config.LifeCrystalMaxLife) // 如果玩家当前生命上限小于配置的最大水晶生命值 + { + tsplayer.TPlayer.inventory[tplayer.selectedItem].stack--; // 减少玩家背包中选定物品的堆叠数量 + tsplayer.SendData(PacketTypes.PlayerSlot, "", index, (float)tplayer.selectedItem); // 更新客户端的选定物品槽位 + tplayer.statLifeMax += 20; // 增加玩家的生命上限 + tsplayer.SendData(PacketTypes.PlayerHp, "", index); // 更新客户端的生命值显示 + } + else if (tsplayer.TPlayer.statLifeMax > Config.LifeFruitMaxLife) // 如果玩家当前生命上限大于配置的最大果生命值 + { + tplayer.statLifeMax = Config.LifeFruitMaxLife; // 将玩家的生命上限设置为配置的最大生命果生命值 + tsplayer.SendData(PacketTypes.PlayerHp, "", index); // 更新客户端的生命值显示 } } } - this.controlUseItemOld[index] = tsplayer.TPlayer.controlUseItem; } + this.controlUseItemOld[index] = tsplayer.TPlayer.controlUseItem; } } }