Extend NetItem
This commit is contained in:
parent
0535f6b7c6
commit
d5fb8726cc
7 changed files with 170 additions and 194 deletions
|
|
@ -17,7 +17,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using MySql.Data.MySqlClient;
|
using MySql.Data.MySqlClient;
|
||||||
using Terraria;
|
using Terraria;
|
||||||
|
|
@ -75,7 +77,7 @@ namespace TShockAPI.DB
|
||||||
playerData.maxHealth = reader.Get<int>("MaxHealth");
|
playerData.maxHealth = reader.Get<int>("MaxHealth");
|
||||||
playerData.mana = reader.Get<int>("Mana");
|
playerData.mana = reader.Get<int>("Mana");
|
||||||
playerData.maxMana = reader.Get<int>("MaxMana");
|
playerData.maxMana = reader.Get<int>("MaxMana");
|
||||||
playerData.inventory = NetItem.Parse(reader.Get<string>("Inventory"));
|
playerData.inventory = reader.Get<string>("Inventory").Split('~').Select(NetItem.Parse).ToArray();
|
||||||
playerData.spawnX = reader.Get<int>("spawnX");
|
playerData.spawnX = reader.Get<int>("spawnX");
|
||||||
playerData.spawnY = reader.Get<int>("spawnY");
|
playerData.spawnY = reader.Get<int>("spawnY");
|
||||||
playerData.hair = reader.Get<int?>("hair");
|
playerData.hair = reader.Get<int?>("hair");
|
||||||
|
|
@ -104,23 +106,12 @@ namespace TShockAPI.DB
|
||||||
public bool SeedInitialData(User user)
|
public bool SeedInitialData(User user)
|
||||||
{
|
{
|
||||||
var inventory = new StringBuilder();
|
var inventory = new StringBuilder();
|
||||||
for (int i = 0; i < NetItem.maxNetInventory; i++)
|
|
||||||
{
|
var items = TShock.ServerSideCharacterConfig.StartingInventory;
|
||||||
if (i > 0)
|
if (items.Count < NetItem.MaxInventory)
|
||||||
{
|
items.AddRange(new NetItem[NetItem.MaxInventory - items.Count]);
|
||||||
inventory.Append("~");
|
|
||||||
}
|
string initialItems = String.Join("~", items.Take(NetItem.MaxInventory));
|
||||||
if (i < TShock.ServerSideCharacterConfig.StartingInventory.Count)
|
|
||||||
{
|
|
||||||
var item = TShock.ServerSideCharacterConfig.StartingInventory[i];
|
|
||||||
inventory.Append(item.netID).Append(',').Append(item.stack).Append(',').Append(item.prefix);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
inventory.Append("0,0,0");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
string initialItems = inventory.ToString();
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
database.Query("INSERT INTO tsCharacter (Account, Health, MaxHealth, Mana, MaxMana, Inventory, spawnX, spawnY, questsCompleted) VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8);",
|
database.Query("INSERT INTO tsCharacter (Account, Health, MaxHealth, Mana, MaxMana, Inventory, spawnX, spawnY, questsCompleted) VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8);",
|
||||||
|
|
@ -162,7 +153,7 @@ namespace TShockAPI.DB
|
||||||
{
|
{
|
||||||
database.Query(
|
database.Query(
|
||||||
"INSERT INTO tsCharacter (Account, Health, MaxHealth, Mana, MaxMana, Inventory, spawnX, spawnY, hair, hairDye, hairColor, pantsColor, shirtColor, underShirtColor, shoeColor, hideVisuals, skinColor, eyeColor, questsCompleted) VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13, @14, @15, @16, @17, @18);",
|
"INSERT INTO tsCharacter (Account, Health, MaxHealth, Mana, MaxMana, Inventory, spawnX, spawnY, hair, hairDye, hairColor, pantsColor, shirtColor, underShirtColor, shoeColor, hideVisuals, skinColor, eyeColor, questsCompleted) VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13, @14, @15, @16, @17, @18);",
|
||||||
player.User.ID, playerData.health, playerData.maxHealth, playerData.mana, playerData.maxMana, NetItem.ToString(playerData.inventory), player.TPlayer.SpawnX, player.TPlayer.SpawnY, player.TPlayer.hair, player.TPlayer.hairDye, TShock.Utils.EncodeColor(player.TPlayer.hairColor), TShock.Utils.EncodeColor(player.TPlayer.pantsColor),TShock.Utils.EncodeColor(player.TPlayer.shirtColor), TShock.Utils.EncodeColor(player.TPlayer.underShirtColor), TShock.Utils.EncodeColor(player.TPlayer.shoeColor), TShock.Utils.EncodeBitsByte(player.TPlayer.hideVisual), TShock.Utils.EncodeColor(player.TPlayer.skinColor),TShock.Utils.EncodeColor(player.TPlayer.eyeColor), player.TPlayer.anglerQuestsFinished);
|
player.User.ID, playerData.health, playerData.maxHealth, playerData.mana, playerData.maxMana, String.Join("~", playerData.inventory), player.TPlayer.SpawnX, player.TPlayer.SpawnY, player.TPlayer.hair, player.TPlayer.hairDye, TShock.Utils.EncodeColor(player.TPlayer.hairColor), TShock.Utils.EncodeColor(player.TPlayer.pantsColor),TShock.Utils.EncodeColor(player.TPlayer.shirtColor), TShock.Utils.EncodeColor(player.TPlayer.underShirtColor), TShock.Utils.EncodeColor(player.TPlayer.shoeColor), TShock.Utils.EncodeBitsByte(player.TPlayer.hideVisual), TShock.Utils.EncodeColor(player.TPlayer.skinColor),TShock.Utils.EncodeColor(player.TPlayer.eyeColor), player.TPlayer.anglerQuestsFinished);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|
@ -176,7 +167,7 @@ namespace TShockAPI.DB
|
||||||
{
|
{
|
||||||
database.Query(
|
database.Query(
|
||||||
"UPDATE tsCharacter SET Health = @0, MaxHealth = @1, Mana = @2, MaxMana = @3, Inventory = @4, spawnX = @6, spawnY = @7, hair = @8, hairDye = @9, hairColor = @10, pantsColor = @11, shirtColor = @12, underShirtColor = @13, shoeColor = @14, hideVisuals = @15, skinColor = @16, eyeColor = @17, questsCompleted = @18 WHERE Account = @5;",
|
"UPDATE tsCharacter SET Health = @0, MaxHealth = @1, Mana = @2, MaxMana = @3, Inventory = @4, spawnX = @6, spawnY = @7, hair = @8, hairDye = @9, hairColor = @10, pantsColor = @11, shirtColor = @12, underShirtColor = @13, shoeColor = @14, hideVisuals = @15, skinColor = @16, eyeColor = @17, questsCompleted = @18 WHERE Account = @5;",
|
||||||
playerData.health, playerData.maxHealth, playerData.mana, playerData.maxMana, NetItem.ToString(playerData.inventory), player.User.ID, player.TPlayer.SpawnX, player.TPlayer.SpawnY, player.TPlayer.hair, player.TPlayer.hairDye, TShock.Utils.EncodeColor(player.TPlayer.hairColor), TShock.Utils.EncodeColor(player.TPlayer.pantsColor), TShock.Utils.EncodeColor(player.TPlayer.shirtColor), TShock.Utils.EncodeColor(player.TPlayer.underShirtColor), TShock.Utils.EncodeColor(player.TPlayer.shoeColor), TShock.Utils.EncodeBitsByte(player.TPlayer.hideVisual), TShock.Utils.EncodeColor(player.TPlayer.skinColor), TShock.Utils.EncodeColor(player.TPlayer.eyeColor), player.TPlayer.anglerQuestsFinished);
|
playerData.health, playerData.maxHealth, playerData.mana, playerData.maxMana, String.Join("~", playerData.inventory), player.User.ID, player.TPlayer.SpawnX, player.TPlayer.SpawnY, player.TPlayer.hair, player.TPlayer.hairDye, TShock.Utils.EncodeColor(player.TPlayer.hairColor), TShock.Utils.EncodeColor(player.TPlayer.pantsColor), TShock.Utils.EncodeColor(player.TPlayer.shirtColor), TShock.Utils.EncodeColor(player.TPlayer.underShirtColor), TShock.Utils.EncodeColor(player.TPlayer.shoeColor), TShock.Utils.EncodeBitsByte(player.TPlayer.hideVisual), TShock.Utils.EncodeColor(player.TPlayer.skinColor), TShock.Utils.EncodeColor(player.TPlayer.eyeColor), player.TPlayer.anglerQuestsFinished);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|
|
||||||
|
|
@ -120,11 +120,11 @@ namespace TShockAPI
|
||||||
TShock.ServerSideCharacterConfig = new ServerSideConfig
|
TShock.ServerSideCharacterConfig = new ServerSideConfig
|
||||||
{
|
{
|
||||||
StartingInventory =
|
StartingInventory =
|
||||||
new List<NetItem>()
|
new List<NetItem>
|
||||||
{
|
{
|
||||||
new NetItem() {netID = -15, stack = 1, prefix = 0},
|
new NetItem(-15, 1, 0),
|
||||||
new NetItem() {netID = -13, stack = 1, prefix = 0},
|
new NetItem(-13, 1, 0),
|
||||||
new NetItem() {netID = -16, stack = 1, prefix = 0}
|
new NetItem(-16, 1, 0)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1278,14 +1278,14 @@ namespace TShockAPI
|
||||||
|
|
||||||
// Players send a slot update packet for each inventory slot right after they've joined.
|
// Players send a slot update packet for each inventory slot right after they've joined.
|
||||||
bool bypassTrashCanCheck = false;
|
bool bypassTrashCanCheck = false;
|
||||||
if (plr == args.Player.Index && !args.Player.HasSentInventory && slot == NetItem.maxNetInventory)
|
if (plr == args.Player.Index && !args.Player.HasSentInventory && slot == NetItem.MaxInventory)
|
||||||
{
|
{
|
||||||
args.Player.HasSentInventory = true;
|
args.Player.HasSentInventory = true;
|
||||||
bypassTrashCanCheck = true;
|
bypassTrashCanCheck = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (OnPlayerSlot(plr, slot, stack, prefix, type) || plr != args.Player.Index || slot < 0 ||
|
if (OnPlayerSlot(plr, slot, stack, prefix, type) || plr != args.Player.Index || slot < 0 ||
|
||||||
slot > NetItem.maxNetInventory)
|
slot > NetItem.MaxInventory)
|
||||||
return true;
|
return true;
|
||||||
if (args.Player.IgnoreSSCPackets)
|
if (args.Player.IgnoreSSCPackets)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
114
TShockAPI/NetItem.cs
Normal file
114
TShockAPI/NetItem.cs
Normal file
|
|
@ -0,0 +1,114 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Terraria;
|
||||||
|
|
||||||
|
namespace TShockAPI
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents an item.
|
||||||
|
/// </summary>
|
||||||
|
public struct NetItem
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The number of armor slots.
|
||||||
|
/// </summary>
|
||||||
|
public static readonly int ArmorSlots = 16;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The number of dye slots.
|
||||||
|
/// </summary>
|
||||||
|
public static readonly int DyeSlots = 8;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The inventory size.
|
||||||
|
/// </summary>
|
||||||
|
public static readonly int MaxInventory = 83;
|
||||||
|
|
||||||
|
private readonly int _netId;
|
||||||
|
private readonly byte _prefixId;
|
||||||
|
private readonly int _stack;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the net ID.
|
||||||
|
/// </summary>
|
||||||
|
public int NetId
|
||||||
|
{
|
||||||
|
get { return _netId; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the prefix.
|
||||||
|
/// </summary>
|
||||||
|
public byte PrefixId
|
||||||
|
{
|
||||||
|
get { return _prefixId; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the stack.
|
||||||
|
/// </summary>
|
||||||
|
public int Stack
|
||||||
|
{
|
||||||
|
get { return _stack; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new <see cref="NetItem"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="netId">The net ID.</param>
|
||||||
|
/// <param name="stack">The stack.</param>
|
||||||
|
/// <param name="prefixId">The prefix ID.</param>
|
||||||
|
public NetItem(int netId, int stack, byte prefixId)
|
||||||
|
{
|
||||||
|
_netId = netId;
|
||||||
|
_stack = stack;
|
||||||
|
_prefixId = prefixId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts the <see cref="NetItem"/> to a string.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return String.Format("{0},{1},{2}", _netId, _stack, _prefixId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts a string into a <see cref="NetItem"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="str">The string.</param>
|
||||||
|
/// <exception cref="ArgumentNullException"/>
|
||||||
|
/// <exception cref="FormatException"/>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static NetItem Parse(string str)
|
||||||
|
{
|
||||||
|
if (str == null)
|
||||||
|
throw new ArgumentNullException("str");
|
||||||
|
|
||||||
|
string[] comp = str.Split(',');
|
||||||
|
if (comp.Length != 3)
|
||||||
|
throw new FormatException("String does not contain three sections.");
|
||||||
|
|
||||||
|
int netId = Int32.Parse(comp[0]);
|
||||||
|
int stack = Int32.Parse(comp[1]);
|
||||||
|
byte prefixId = Byte.Parse(comp[2]);
|
||||||
|
|
||||||
|
return new NetItem(netId, stack, prefixId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts an <see cref="Item"/> into a <see cref="NetItem"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">The <see cref="Item"/>.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static explicit operator NetItem(Item item)
|
||||||
|
{
|
||||||
|
return item == null
|
||||||
|
? new NetItem()
|
||||||
|
: new NetItem(item.netID, item.stack, item.prefix);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1072,7 +1072,7 @@ namespace TShockAPI
|
||||||
|
|
||||||
public class PlayerData
|
public class PlayerData
|
||||||
{
|
{
|
||||||
public NetItem[] inventory = new NetItem[NetItem.maxNetInventory];
|
public NetItem[] inventory = new NetItem[NetItem.MaxInventory];
|
||||||
public int health = TShock.ServerSideCharacterConfig.StartingHealth;
|
public int health = TShock.ServerSideCharacterConfig.StartingHealth;
|
||||||
public int maxHealth = TShock.ServerSideCharacterConfig.StartingHealth;
|
public int maxHealth = TShock.ServerSideCharacterConfig.StartingHealth;
|
||||||
public int mana = TShock.ServerSideCharacterConfig.StartingMana;
|
public int mana = TShock.ServerSideCharacterConfig.StartingMana;
|
||||||
|
|
@ -1094,7 +1094,7 @@ namespace TShockAPI
|
||||||
|
|
||||||
public PlayerData(TSPlayer player)
|
public PlayerData(TSPlayer player)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < NetItem.maxNetInventory; i++)
|
for (int i = 0; i < NetItem.MaxInventory; i++)
|
||||||
{
|
{
|
||||||
this.inventory[i] = new NetItem();
|
this.inventory[i] = new NetItem();
|
||||||
}
|
}
|
||||||
|
|
@ -1102,28 +1102,18 @@ namespace TShockAPI
|
||||||
for (int i = 0; i < TShock.ServerSideCharacterConfig.StartingInventory.Count; i++)
|
for (int i = 0; i < TShock.ServerSideCharacterConfig.StartingInventory.Count; i++)
|
||||||
{
|
{
|
||||||
var item = TShock.ServerSideCharacterConfig.StartingInventory[i];
|
var item = TShock.ServerSideCharacterConfig.StartingInventory[i];
|
||||||
StoreSlot(i, item.netID, item.prefix, item.stack);
|
StoreSlot(i, item.NetId, item.PrefixId, item.Stack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void StoreSlot(int slot, int netID, int prefix, int stack)
|
public void StoreSlot(int slot, int netID, byte prefix, int stack)
|
||||||
{
|
{
|
||||||
if(slot > (this.inventory.Length - 1)) //if the slot is out of range then dont save
|
if(slot > (this.inventory.Length - 1)) //if the slot is out of range then dont save
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
this.inventory[slot].netID = netID;
|
|
||||||
if (this.inventory[slot].netID != 0)
|
|
||||||
{
|
|
||||||
this.inventory[slot].stack = stack;
|
|
||||||
this.inventory[slot].prefix = prefix;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.inventory[slot].stack = 0;
|
|
||||||
this.inventory[slot].prefix = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.inventory[slot] = new NetItem(netID, stack, prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CopyCharacter(TSPlayer player)
|
public void CopyCharacter(TSPlayer player)
|
||||||
|
|
@ -1157,75 +1147,21 @@ namespace TShockAPI
|
||||||
Item[] inventory = player.TPlayer.inventory;
|
Item[] inventory = player.TPlayer.inventory;
|
||||||
Item[] armor = player.TPlayer.armor;
|
Item[] armor = player.TPlayer.armor;
|
||||||
Item[] dye = player.TPlayer.dye;
|
Item[] dye = player.TPlayer.dye;
|
||||||
for (int i = 0; i < NetItem.maxNetInventory; i++)
|
for (int i = 0; i < NetItem.MaxInventory; i++)
|
||||||
{
|
{
|
||||||
if (i < NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots))
|
if (i < NetItem.MaxInventory - (NetItem.ArmorSlots + NetItem.DyeSlots))
|
||||||
{
|
{
|
||||||
if (player.TPlayer.inventory[i] != null)
|
this.inventory[i] = (NetItem)inventory[i];
|
||||||
{
|
|
||||||
this.inventory[i].netID = inventory[i].netID;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.inventory[i].netID = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.inventory[i].netID != 0)
|
|
||||||
{
|
|
||||||
this.inventory[i].stack = inventory[i].stack;
|
|
||||||
this.inventory[i].prefix = inventory[i].prefix;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.inventory[i].stack = 0;
|
|
||||||
this.inventory[i].prefix = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (i < NetItem.maxNetInventory - NetItem.dyeSlots)
|
else if (i < NetItem.MaxInventory - NetItem.DyeSlots)
|
||||||
{
|
{
|
||||||
var index = i - (NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots));
|
var index = i - (NetItem.MaxInventory - (NetItem.ArmorSlots + NetItem.DyeSlots));
|
||||||
if (player.TPlayer.armor[index] != null)
|
this.inventory[i] = (NetItem)armor[index];
|
||||||
{
|
|
||||||
this.inventory[i].netID = armor[index].netID;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.inventory[i].netID = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.inventory[i].netID != 0)
|
|
||||||
{
|
|
||||||
this.inventory[i].stack = armor[index].stack;
|
|
||||||
this.inventory[i].prefix = armor[index].prefix;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.inventory[i].stack = 0;
|
|
||||||
this.inventory[i].prefix = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var index = i - (NetItem.maxNetInventory - NetItem.dyeSlots);
|
var index = i - (NetItem.MaxInventory - NetItem.DyeSlots);
|
||||||
if (player.TPlayer.dye[index] != null)
|
this.inventory[i] = (NetItem)dye[index];
|
||||||
{
|
|
||||||
this.inventory[i].netID = dye[index].netID;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.inventory[i].netID = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.inventory[i].netID != 0)
|
|
||||||
{
|
|
||||||
this.inventory[i].stack = dye[index].stack;
|
|
||||||
this.inventory[i].prefix = dye[index].prefix;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.inventory[i].stack = 0;
|
|
||||||
this.inventory[i].prefix = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1268,59 +1204,38 @@ namespace TShockAPI
|
||||||
else
|
else
|
||||||
player.TPlayer.hideVisual.ClearAll();
|
player.TPlayer.hideVisual.ClearAll();
|
||||||
|
|
||||||
for (int i = 0; i < NetItem.maxNetInventory; i++)
|
for (int i = 0; i < NetItem.MaxInventory; i++)
|
||||||
{
|
{
|
||||||
if (i < NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots))
|
if (i < NetItem.MaxInventory - (NetItem.ArmorSlots + NetItem.DyeSlots))
|
||||||
{
|
{
|
||||||
if (this.inventory[i] != null)
|
player.TPlayer.inventory[i].netDefaults(this.inventory[i].NetId);
|
||||||
{
|
|
||||||
player.TPlayer.inventory[i].netDefaults(this.inventory[i].netID);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
player.TPlayer.inventory[i].netDefaults(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player.TPlayer.inventory[i].netID != 0)
|
if (player.TPlayer.inventory[i].netID != 0)
|
||||||
{
|
{
|
||||||
player.TPlayer.inventory[i].stack = this.inventory[i].stack;
|
player.TPlayer.inventory[i].stack = this.inventory[i].Stack;
|
||||||
player.TPlayer.inventory[i].prefix = (byte)this.inventory[i].prefix;
|
player.TPlayer.inventory[i].prefix = this.inventory[i].PrefixId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (i < NetItem.maxNetInventory - NetItem.dyeSlots)
|
else if (i < NetItem.MaxInventory - NetItem.DyeSlots)
|
||||||
{
|
{
|
||||||
var index = i - (NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots));
|
var index = i - (NetItem.MaxInventory - (NetItem.ArmorSlots + NetItem.DyeSlots));
|
||||||
if (this.inventory[i] != null)
|
player.TPlayer.armor[index].netDefaults(this.inventory[i].NetId);
|
||||||
{
|
|
||||||
player.TPlayer.armor[index].netDefaults(this.inventory[i].netID);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
player.TPlayer.armor[index].netDefaults(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player.TPlayer.armor[index].netID != 0)
|
if (player.TPlayer.armor[index].netID != 0)
|
||||||
{
|
{
|
||||||
player.TPlayer.armor[index].stack = this.inventory[i].stack;
|
player.TPlayer.armor[index].stack = this.inventory[i].Stack;
|
||||||
player.TPlayer.armor[index].prefix = (byte)this.inventory[i].prefix;
|
player.TPlayer.armor[index].prefix = (byte)this.inventory[i].PrefixId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var index = i - (NetItem.maxNetInventory - NetItem.dyeSlots);
|
var index = i - (NetItem.MaxInventory - NetItem.DyeSlots);
|
||||||
if (this.inventory[i] != null)
|
player.TPlayer.dye[index].netDefaults(this.inventory[i].NetId);
|
||||||
{
|
|
||||||
player.TPlayer.dye[index].netDefaults(this.inventory[i].netID);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
player.TPlayer.dye[index].netDefaults(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player.TPlayer.dye[index].netID != 0)
|
if (player.TPlayer.dye[index].netID != 0)
|
||||||
{
|
{
|
||||||
player.TPlayer.dye[index].stack = this.inventory[i].stack;
|
player.TPlayer.dye[index].stack = this.inventory[i].Stack;
|
||||||
player.TPlayer.dye[index].prefix = (byte)this.inventory[i].prefix;
|
player.TPlayer.dye[index].prefix = (byte)this.inventory[i].PrefixId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1401,49 +1316,4 @@ namespace TShockAPI
|
||||||
NetMessage.SendData(39, player.Index, -1, "", 400);
|
NetMessage.SendData(39, player.Index, -1, "", 400);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class NetItem
|
|
||||||
{
|
|
||||||
public static readonly int maxNetInventory = 83;
|
|
||||||
public static readonly int armorSlots = 16;
|
|
||||||
public static readonly int dyeSlots = 8;
|
|
||||||
public int netID;
|
|
||||||
public int stack;
|
|
||||||
public int prefix;
|
|
||||||
|
|
||||||
public static string ToString(NetItem[] inventory)
|
|
||||||
{
|
|
||||||
StringBuilder items = new StringBuilder();
|
|
||||||
for (int i = 0; i < maxNetInventory; i++)
|
|
||||||
{
|
|
||||||
items.Append(inventory[i].netID).Append(",");
|
|
||||||
if (inventory[i].netID != 0)
|
|
||||||
items.Append(inventory[i].stack).Append(",").Append(inventory[i].prefix).Append("~");
|
|
||||||
else
|
|
||||||
items.Append("0,0~");
|
|
||||||
}
|
|
||||||
return items.ToString(0, items.Length - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static NetItem[] Parse(string data)
|
|
||||||
{
|
|
||||||
NetItem[] inventory = new NetItem[maxNetInventory];
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < maxNetInventory; i++)
|
|
||||||
{
|
|
||||||
inventory[i] = new NetItem();
|
|
||||||
}
|
|
||||||
string[] items = data.Split('~');
|
|
||||||
i = 0;
|
|
||||||
foreach (string item in items)
|
|
||||||
{
|
|
||||||
string[] idata = item.Split(',');
|
|
||||||
inventory[i].netID = int.Parse(idata[0]);
|
|
||||||
inventory[i].stack = int.Parse(idata[1]);
|
|
||||||
inventory[i].prefix = int.Parse(idata[2]);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
return inventory;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -162,9 +162,9 @@ namespace TShockAPI
|
||||||
{
|
{
|
||||||
Config = new ConfigFile();
|
Config = new ConfigFile();
|
||||||
ServerSideCharacterConfig = new ServerSideConfig();
|
ServerSideCharacterConfig = new ServerSideConfig();
|
||||||
ServerSideCharacterConfig.StartingInventory.Add(new NetItem { netID = -15, prefix = 0, stack = 1 });
|
ServerSideCharacterConfig.StartingInventory.Add(new NetItem(-15, 1, 0));
|
||||||
ServerSideCharacterConfig.StartingInventory.Add(new NetItem { netID = -13, prefix = 0, stack = 1 });
|
ServerSideCharacterConfig.StartingInventory.Add(new NetItem(-13, 1, 0));
|
||||||
ServerSideCharacterConfig.StartingInventory.Add(new NetItem { netID = -16, prefix = 0, stack = 1 });
|
ServerSideCharacterConfig.StartingInventory.Add(new NetItem(-16, 1, 0));
|
||||||
Order = 0;
|
Order = 0;
|
||||||
instance = this;
|
instance = this;
|
||||||
}
|
}
|
||||||
|
|
@ -1844,9 +1844,9 @@ namespace TShockAPI
|
||||||
Item[] inventory = player.TPlayer.inventory;
|
Item[] inventory = player.TPlayer.inventory;
|
||||||
Item[] armor = player.TPlayer.armor;
|
Item[] armor = player.TPlayer.armor;
|
||||||
Item[] dye = player.TPlayer.dye;
|
Item[] dye = player.TPlayer.dye;
|
||||||
for (int i = 0; i < NetItem.maxNetInventory; i++)
|
for (int i = 0; i < NetItem.MaxInventory; i++)
|
||||||
{
|
{
|
||||||
if (i < NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots))
|
if (i < NetItem.MaxInventory - (NetItem.ArmorSlots + NetItem.DyeSlots))
|
||||||
{
|
{
|
||||||
Item item = new Item();
|
Item item = new Item();
|
||||||
if (inventory[i] != null && inventory[i].netID != 0)
|
if (inventory[i] != null && inventory[i].netID != 0)
|
||||||
|
|
@ -1863,10 +1863,10 @@ namespace TShockAPI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(i < (NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots)))
|
else if(i < (NetItem.MaxInventory - (NetItem.ArmorSlots + NetItem.DyeSlots)))
|
||||||
{
|
{
|
||||||
Item item = new Item();
|
Item item = new Item();
|
||||||
var index = i - (NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots));
|
var index = i - (NetItem.MaxInventory - (NetItem.ArmorSlots + NetItem.DyeSlots));
|
||||||
if (armor[index] != null && armor[index].netID != 0)
|
if (armor[index] != null && armor[index].netID != 0)
|
||||||
{
|
{
|
||||||
item.netDefaults(armor[index].netID);
|
item.netDefaults(armor[index].netID);
|
||||||
|
|
@ -1881,10 +1881,10 @@ namespace TShockAPI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (i < (NetItem.maxNetInventory - (NetItem.armorSlots + NetItem.dyeSlots)))
|
else if (i < (NetItem.MaxInventory - (NetItem.ArmorSlots + NetItem.DyeSlots)))
|
||||||
{
|
{
|
||||||
Item item = new Item();
|
Item item = new Item();
|
||||||
var index = i - (NetItem.maxNetInventory - NetItem.dyeSlots);
|
var index = i - (NetItem.MaxInventory - NetItem.DyeSlots);
|
||||||
if (dye[index] != null && dye[index].netID != 0)
|
if (dye[index] != null && dye[index].netID != 0)
|
||||||
{
|
{
|
||||||
item.netDefaults(dye[index].netID);
|
item.netDefaults(dye[index].netID);
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,7 @@
|
||||||
<Compile Include="Hooks\PlayerHooks.cs" />
|
<Compile Include="Hooks\PlayerHooks.cs" />
|
||||||
<Compile Include="Hooks\RegionHooks.cs" />
|
<Compile Include="Hooks\RegionHooks.cs" />
|
||||||
<Compile Include="ILog.cs" />
|
<Compile Include="ILog.cs" />
|
||||||
|
<Compile Include="NetItem.cs" />
|
||||||
<Compile Include="SqlLog.cs" />
|
<Compile Include="SqlLog.cs" />
|
||||||
<Compile Include="TextLog.cs" />
|
<Compile Include="TextLog.cs" />
|
||||||
<Compile Include="PaginationTools.cs" />
|
<Compile Include="PaginationTools.cs" />
|
||||||
|
|
@ -188,7 +189,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ProjectExtensions>
|
<ProjectExtensions>
|
||||||
<VisualStudio>
|
<VisualStudio>
|
||||||
<UserProperties BuildVersion_IncrementBeforeBuild="False" BuildVersion_StartDate="2011/6/17" BuildVersion_BuildVersioningStyle="None.None.None.MonthAndDayStamp" BuildVersion_BuildAction="Both" BuildVersion_UpdateFileVersion="True" BuildVersion_UpdateAssemblyVersion="True" />
|
<UserProperties BuildVersion_UpdateAssemblyVersion="True" BuildVersion_UpdateFileVersion="True" BuildVersion_BuildAction="Both" BuildVersion_BuildVersioningStyle="None.None.None.MonthAndDayStamp" BuildVersion_StartDate="2011/6/17" BuildVersion_IncrementBeforeBuild="False" />
|
||||||
</VisualStudio>
|
</VisualStudio>
|
||||||
</ProjectExtensions>
|
</ProjectExtensions>
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue