terraria-source-code/GameContent/ItemDropRules/CommonCode.cs
2021-10-26 12:45:26 -04:00

117 lines
4.1 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Terraria.GameContent.ItemDropRules.CommonCode
// Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null
// MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83
// Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe
using Microsoft.Xna.Framework;
using Terraria.Utilities;
namespace Terraria.GameContent.ItemDropRules
{
public static class CommonCode
{
public static void DropItemFromNPC(NPC npc, int itemId, int stack, bool scattered = false)
{
if (itemId <= 0 || itemId >= 5045)
return;
int X = (int) npc.position.X + npc.width / 2;
int Y = (int) npc.position.Y + npc.height / 2;
if (scattered)
{
X = (int) npc.position.X + Main.rand.Next(npc.width + 1);
Y = (int) npc.position.Y + Main.rand.Next(npc.height + 1);
}
int itemIndex = Item.NewItem(X, Y, 0, 0, itemId, stack, pfix: -1);
CommonCode.ModifyItemDropFromNPC(npc, itemIndex);
}
public static void DropItemLocalPerClientAndSetNPCMoneyTo0(
NPC npc,
int itemId,
int stack,
bool interactionRequired = true)
{
if (itemId <= 0 || itemId >= 5045)
return;
if (Main.netMode == 2)
{
int number = Item.NewItem((int) npc.position.X, (int) npc.position.Y, npc.width, npc.height, itemId, stack, true, -1);
Main.timeItemSlotCannotBeReusedFor[number] = 54000;
for (int remoteClient = 0; remoteClient < (int) byte.MaxValue; ++remoteClient)
{
if (Main.player[remoteClient].active && (npc.playerInteraction[remoteClient] || !interactionRequired))
NetMessage.SendData(90, remoteClient, number: number);
}
Main.item[number].active = false;
}
else
CommonCode.DropItemFromNPC(npc, itemId, stack);
npc.value = 0.0f;
}
public static void DropItemForEachInteractingPlayerOnThePlayer(
NPC npc,
int itemId,
UnifiedRandom rng,
int dropsAtXOutOfY_TheX,
int dropsAtXOutOfY_TheY,
int stack = 1,
bool interactionRequired = true)
{
if (itemId <= 0 || itemId >= 5045)
return;
if (Main.netMode == 2)
{
for (int index = 0; index < (int) byte.MaxValue; ++index)
{
Player player = Main.player[index];
if (player.active && (npc.playerInteraction[index] || !interactionRequired) && rng.Next(dropsAtXOutOfY_TheY) < dropsAtXOutOfY_TheX)
{
int itemIndex = Item.NewItem(player.position, player.Size, itemId, stack, prefixGiven: -1);
CommonCode.ModifyItemDropFromNPC(npc, itemIndex);
}
}
}
else if (rng.Next(dropsAtXOutOfY_TheY) < dropsAtXOutOfY_TheX)
CommonCode.DropItemFromNPC(npc, itemId, stack);
npc.value = 0.0f;
}
private static void ModifyItemDropFromNPC(NPC npc, int itemIndex)
{
Item obj = Main.item[itemIndex];
switch (obj.type)
{
case 23:
if (npc.type != 1 || npc.netID == -1 || npc.netID == -2 || npc.netID == -5 || npc.netID == -6)
break;
obj.color = npc.color;
NetMessage.SendData(88, number: itemIndex, number2: 1f);
break;
case 319:
switch (npc.netID)
{
case 542:
obj.color = new Color(189, 148, 96, (int) byte.MaxValue);
NetMessage.SendData(88, number: itemIndex, number2: 1f);
return;
case 543:
obj.color = new Color(112, 85, 89, (int) byte.MaxValue);
NetMessage.SendData(88, number: itemIndex, number2: 1f);
return;
case 544:
obj.color = new Color(145, 27, 40, (int) byte.MaxValue);
NetMessage.SendData(88, number: itemIndex, number2: 1f);
return;
case 545:
obj.color = new Color(158, 113, 164, (int) byte.MaxValue);
NetMessage.SendData(88, number: itemIndex, number2: 1f);
return;
default:
return;
}
}
}
}
}