mirror of
https://github.com/Facepunch/Facepunch.Steamworks.git
synced 2024-12-24 13:45:37 +03:00
Fixed inventory.item reliance on definition
This commit is contained in:
parent
835770772f
commit
80bf89c9e6
@ -11,8 +11,16 @@ public partial class Inventory
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// An item in your inventory.
|
/// An item in your inventory.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public struct Item : IEquatable<Item>
|
public class Item : IEquatable<Item>
|
||||||
{
|
{
|
||||||
|
internal Item( Inventory Inventory, ulong Id, int Quantity, int DefinitionId )
|
||||||
|
{
|
||||||
|
this.Inventory = Inventory;
|
||||||
|
this.Id = Id;
|
||||||
|
this.Quantity = Quantity;
|
||||||
|
this.DefinitionId = DefinitionId;
|
||||||
|
}
|
||||||
|
|
||||||
public struct Amount
|
public struct Amount
|
||||||
{
|
{
|
||||||
public Item Item;
|
public Item Item;
|
||||||
@ -24,12 +32,26 @@ public struct Amount
|
|||||||
|
|
||||||
public int DefinitionId;
|
public int DefinitionId;
|
||||||
|
|
||||||
|
internal Inventory Inventory;
|
||||||
|
|
||||||
public Dictionary<string, string> Properties { get; internal set; }
|
public Dictionary<string, string> Properties { get; internal set; }
|
||||||
|
|
||||||
|
private Definition _cachedDefinition;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Careful, this might not be available. Especially on a game server.
|
/// Careful, this might not be available. Especially on a game server.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Definition Definition;
|
public Definition Definition
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if ( _cachedDefinition != null )
|
||||||
|
return _cachedDefinition;
|
||||||
|
|
||||||
|
_cachedDefinition = Inventory.FindDefinition( DefinitionId );
|
||||||
|
return _cachedDefinition;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public bool TradeLocked;
|
public bool TradeLocked;
|
||||||
|
|
||||||
@ -73,10 +95,10 @@ public override int GetHashCode()
|
|||||||
public Result Consume( int amount = 1 )
|
public Result Consume( int amount = 1 )
|
||||||
{
|
{
|
||||||
SteamNative.SteamInventoryResult_t resultHandle = -1;
|
SteamNative.SteamInventoryResult_t resultHandle = -1;
|
||||||
if ( !Definition.inventory.inventory.ConsumeItem( ref resultHandle, Id, (uint)amount ) )
|
if ( !Inventory.inventory.ConsumeItem( ref resultHandle, Id, (uint)amount ) )
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
return new Result( Definition.inventory, resultHandle, true );
|
return new Result( Inventory, resultHandle, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -85,10 +107,10 @@ public Result Consume( int amount = 1 )
|
|||||||
public Result SplitStack( int quantity = 1 )
|
public Result SplitStack( int quantity = 1 )
|
||||||
{
|
{
|
||||||
SteamNative.SteamInventoryResult_t resultHandle = -1;
|
SteamNative.SteamInventoryResult_t resultHandle = -1;
|
||||||
if ( !Definition.inventory.inventory.TransferItemQuantity( ref resultHandle, Id, (uint)quantity, ulong.MaxValue ) )
|
if ( !Inventory.inventory.TransferItemQuantity( ref resultHandle, Id, (uint)quantity, ulong.MaxValue ) )
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
return new Result( Definition.inventory, resultHandle, true );
|
return new Result( Inventory, resultHandle, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
SteamNative.SteamInventoryUpdateHandle_t updateHandle;
|
SteamNative.SteamInventoryUpdateHandle_t updateHandle;
|
||||||
@ -97,35 +119,35 @@ private void UpdatingProperties()
|
|||||||
{
|
{
|
||||||
if (updateHandle != 0) return;
|
if (updateHandle != 0) return;
|
||||||
|
|
||||||
updateHandle = Definition.inventory.inventory.StartUpdateProperties();
|
updateHandle = Inventory.inventory.StartUpdateProperties();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool SetProperty( string name, string value )
|
public bool SetProperty( string name, string value )
|
||||||
{
|
{
|
||||||
UpdatingProperties();
|
UpdatingProperties();
|
||||||
Properties[name] = value.ToString();
|
Properties[name] = value.ToString();
|
||||||
return Definition.inventory.inventory.SetProperty(updateHandle, Id, name, value);
|
return Inventory.inventory.SetProperty(updateHandle, Id, name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool SetProperty(string name, bool value)
|
public bool SetProperty(string name, bool value)
|
||||||
{
|
{
|
||||||
UpdatingProperties();
|
UpdatingProperties();
|
||||||
Properties[name] = value.ToString();
|
Properties[name] = value.ToString();
|
||||||
return Definition.inventory.inventory.SetProperty0(updateHandle, Id, name, value);
|
return Inventory.inventory.SetProperty0(updateHandle, Id, name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool SetProperty(string name, long value)
|
public bool SetProperty(string name, long value)
|
||||||
{
|
{
|
||||||
UpdatingProperties();
|
UpdatingProperties();
|
||||||
Properties[name] = value.ToString();
|
Properties[name] = value.ToString();
|
||||||
return Definition.inventory.inventory.SetProperty1(updateHandle, Id, name, value);
|
return Inventory.inventory.SetProperty1(updateHandle, Id, name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool SetProperty(string name, float value)
|
public bool SetProperty(string name, float value)
|
||||||
{
|
{
|
||||||
UpdatingProperties();
|
UpdatingProperties();
|
||||||
Properties[name] = value.ToString();
|
Properties[name] = value.ToString();
|
||||||
return Definition.inventory.inventory.SetProperty2(updateHandle, Id, name, value);
|
return Inventory.inventory.SetProperty2(updateHandle, Id, name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -140,12 +162,12 @@ public bool SubmitProperties()
|
|||||||
{
|
{
|
||||||
SteamNative.SteamInventoryResult_t result = -1;
|
SteamNative.SteamInventoryResult_t result = -1;
|
||||||
|
|
||||||
if (!Definition.inventory.inventory.SubmitUpdateProperties(updateHandle, ref result))
|
if (!Inventory.inventory.SubmitUpdateProperties(updateHandle, ref result))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Definition.inventory.inventory.DestroyResult(result);
|
Inventory.inventory.DestroyResult(result);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -194,15 +194,8 @@ internal Item ItemFrom( SteamInventoryResult_t handle, SteamItemDetails_t detail
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var item = new Item()
|
var item = new Item( this, detail.ItemId, detail.Quantity, detail.Definition );
|
||||||
{
|
item.Properties = props;
|
||||||
Quantity = detail.Quantity,
|
|
||||||
Id = detail.ItemId,
|
|
||||||
DefinitionId = detail.Definition,
|
|
||||||
TradeLocked = ((int)detail.Flags & (int)SteamNative.SteamItemFlags.NoTrade) != 0,
|
|
||||||
Definition = FindDefinition(detail.Definition),
|
|
||||||
Properties = props
|
|
||||||
};
|
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,9 @@ internal Inventory( BaseSteamworks steamworks, SteamNative.SteamInventory c, boo
|
|||||||
|
|
||||||
Result.Pending = new Dictionary<int, Result>();
|
Result.Pending = new Dictionary<int, Result>();
|
||||||
|
|
||||||
FetchItemDefinitions(); // onDefinitionsUpdated should get called on next Update
|
FetchItemDefinitions();
|
||||||
|
LoadDefinitions();
|
||||||
|
UpdatePrices();
|
||||||
|
|
||||||
if ( !server )
|
if ( !server )
|
||||||
{
|
{
|
||||||
@ -287,14 +289,19 @@ public static float PriceCategoryToFloat( string price )
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// You really need me to explain what this does?
|
/// We might be better off using a dictionary for this, once there's 1000+ definitions
|
||||||
/// Use your brains.
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Definition FindDefinition( int DefinitionId )
|
public Definition FindDefinition( int DefinitionId )
|
||||||
{
|
{
|
||||||
if ( Definitions == null ) return null;
|
if ( Definitions == null ) return null;
|
||||||
|
|
||||||
return Definitions.FirstOrDefault( x => x.Id == DefinitionId );
|
for( int i=0; i< Definitions.Length; i++ )
|
||||||
|
{
|
||||||
|
if ( Definitions[i].Id == DefinitionId )
|
||||||
|
return Definitions[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public unsafe Result Deserialize( byte[] data, int dataLength = -1 )
|
public unsafe Result Deserialize( byte[] data, int dataLength = -1 )
|
||||||
|
Loading…
Reference in New Issue
Block a user