fix npc home removal. rename something related.

This commit is contained in:
鱼鱼 2020-05-24 16:47:54 +08:00
parent ae87f242d7
commit e39af6f917
3 changed files with 18 additions and 10 deletions

View file

@ -6,6 +6,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin
* Update for OTAPI 2.0.0.36 and Terraria 1.4.0.4. (@hakusaro, @Patrikkk, @DeathCradle) * Update for OTAPI 2.0.0.36 and Terraria 1.4.0.4. (@hakusaro, @Patrikkk, @DeathCradle)
* Fixed /wind command. (@AxeelAnder) * Fixed /wind command. (@AxeelAnder)
* Fixed NPC buff bouncer. (@AxeelAnder) * Fixed NPC buff bouncer. (@AxeelAnder)
* Fixed players are unable to remove an NPC. Change `byte NPCHomeChangeEventArgs.Homeless` to `HouseholdStatus NPCHomeChangeEventArgs.HouseholdStatus`. (@AxeelAnder)
## TShock 4.4.0 (Pre-release 7 (Entangled)) ## TShock 4.4.0 (Pre-release 7 (Entangled))
* Fixed bed spawn issues when trying to remove spawn point in SSC. (@Olink) * Fixed bed spawn issues when trying to remove spawn point in SSC. (@Olink)

View file

@ -1547,7 +1547,6 @@ namespace TShockAPI
int id = args.ID; int id = args.ID;
short x = args.X; short x = args.X;
short y = args.Y; short y = args.Y;
byte homeless = args.Homeless;
if (!args.Player.HasBuildPermission(x, y)) if (!args.Player.HasBuildPermission(x, y))
{ {
@ -1558,7 +1557,8 @@ namespace TShockAPI
return; return;
} }
if (!args.Player.IsInRange(x, y)) // When kicking out an npc, x and y in args are 0, we shouldn't check range at this case
if (args.HouseholdStatus != HouseholdStatus.Homeless && !args.Player.IsInRange(x, y))
{ {
args.Player.SendData(PacketTypes.UpdateNPCHome, "", id, Main.npc[id].homeTileX, Main.npc[id].homeTileY, args.Player.SendData(PacketTypes.UpdateNPCHome, "", id, Main.npc[id].homeTileX, Main.npc[id].homeTileY,
Convert.ToByte(Main.npc[id].homeless)); Convert.ToByte(Main.npc[id].homeless));

View file

@ -125,7 +125,7 @@ namespace TShockAPI
{ PacketTypes.NpcSpecial, HandleSpecial }, { PacketTypes.NpcSpecial, HandleSpecial },
{ PacketTypes.NpcAddBuff, HandleNPCAddBuff }, { PacketTypes.NpcAddBuff, HandleNPCAddBuff },
{ PacketTypes.PlayerAddBuff, HandlePlayerAddBuff }, { PacketTypes.PlayerAddBuff, HandlePlayerAddBuff },
{ PacketTypes.UpdateNPCHome, UpdateNPCHome }, { PacketTypes.UpdateNPCHome, HandleUpdateNPCHome },
{ PacketTypes.SpawnBossorInvasion, HandleSpawnBoss }, { PacketTypes.SpawnBossorInvasion, HandleSpawnBoss },
{ PacketTypes.PaintTile, HandlePaintTile }, { PacketTypes.PaintTile, HandlePaintTile },
{ PacketTypes.PaintWall, HandlePaintWall }, { PacketTypes.PaintWall, HandlePaintWall },
@ -1307,6 +1307,13 @@ namespace TShockAPI
return args.Handled; return args.Handled;
} }
public enum HouseholdStatus : byte
{
None = 0,
Homeless = 1,
HasRoom = 2,
}
/// <summary> /// <summary>
/// For use in a NPCHome event /// For use in a NPCHome event
/// </summary> /// </summary>
@ -1325,15 +1332,15 @@ namespace TShockAPI
/// </summary> /// </summary>
public short Y { get; set; } public short Y { get; set; }
/// <summary> /// <summary>
/// ByteBool homeless /// HouseholdStatus of the NPC
/// </summary> /// </summary>
public byte Homeless { get; set; } public HouseholdStatus HouseholdStatus { get; set; }
} }
/// <summary> /// <summary>
/// NPCHome - Called when an NPC's home is changed /// NPCHome - Called when an NPC's home is changed
/// </summary> /// </summary>
public static HandlerList<NPCHomeChangeEventArgs> NPCHome = new HandlerList<NPCHomeChangeEventArgs>(); public static HandlerList<NPCHomeChangeEventArgs> NPCHome = new HandlerList<NPCHomeChangeEventArgs>();
private static bool OnUpdateNPCHome(TSPlayer player, MemoryStream data, short id, short x, short y, byte homeless) private static bool OnUpdateNPCHome(TSPlayer player, MemoryStream data, short id, short x, short y, byte houseHoldStatus)
{ {
if (NPCHome == null) if (NPCHome == null)
return false; return false;
@ -1345,7 +1352,7 @@ namespace TShockAPI
ID = id, ID = id,
X = x, X = x,
Y = y, Y = y,
Homeless = homeless, HouseholdStatus = (HouseholdStatus) houseHoldStatus,
}; };
NPCHome.Invoke(null, args); NPCHome.Invoke(null, args);
return args.Handled; return args.Handled;
@ -2763,14 +2770,14 @@ namespace TShockAPI
return true; return true;
} }
private static bool UpdateNPCHome(GetDataHandlerArgs args) private static bool HandleUpdateNPCHome(GetDataHandlerArgs args)
{ {
var id = args.Data.ReadInt16(); var id = args.Data.ReadInt16();
var x = args.Data.ReadInt16(); var x = args.Data.ReadInt16();
var y = args.Data.ReadInt16(); var y = args.Data.ReadInt16();
var homeless = args.Data.ReadInt8(); var householdStatus = args.Data.ReadInt8();
if (OnUpdateNPCHome(args.Player, args.Data, id, x, y, homeless)) if (OnUpdateNPCHome(args.Player, args.Data, id, x, y, householdStatus))
return true; return true;
if (!args.Player.HasPermission(Permissions.movenpc)) if (!args.Player.HasPermission(Permissions.movenpc))