Если вы хотите написать весь код в InventoryManager, он будет выглядеть как
simulated function bool AddInventory(Inventory NewItem, optional bool bDoNotActivate){
local Inventory Item, LastItem;
// The item should not have been destroyed if we get here.
if( (NewItem != None) && !NewItem.bDeleteMe )
{
//if weapon - work in personal weapon function
if(Weapon(NewItem) != none)
return AddItemWeapon(NewItem, bDoNotActivate);
// if we don't have an inventory list, start here
if( InventoryChain == None )
{
InventoryChain = newItem;
}
else
{
// Skip if already in the inventory.
for (Item = InventoryChain; Item != None; Item = Item.Inventory)
{
if( Item == NewItem )
{
return FALSE;
}
LastItem = Item;
}
LastItem.Inventory = NewItem;
}
//Edited by Matt Kerns
`LogInv("adding" @ NewItem @ "bDoNotActivate:" @ bDoNotActivate);
`Log ("Added to inventory!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
NewItem.SetOwner( Instigator );
NewItem.Instigator = Instigator;
NewItem.InvManager = Self;
NewItem.GivenTo( Instigator, bDoNotActivate);
// Trigger inventory event
Instigator.TriggerEventClass(class'SeqEvent_GetInventory', NewItem);
return TRUE;
}
return FALSE;
}
имитированная функция AddItemWeapon (Inventory NewItem, необязательный bool bDoNotActivate)
{
local Inventory Item, LastItem;
local Weapon WeaponNewItem;
WeaponNewItem= Weapon(NewItem);
// The item should not have been destroyed if we get here.
if( (NewItem != None) && !NewItem.bDeleteMe )
{
// if we don't have an inventory list, start here
if( InventoryChain == None )
{
InventoryChain = newItem;
}
else
{
//look for our group
for (Item = InventoryChain; Item != None; Item = Item.Inventory){
if(Weapon(Item) != none && Weapon(Item).Group == WeaponNewItem.Group){
RemoveFromInventory(Item);
break;
}
}
// Skip if already in the inventory.
for (Item = InventoryChain; Item != None; Item = Item.Inventory)
{
if( Item == NewItem )
{
return FALSE;
}
LastItem = Item;
}
LastItem.Inventory = NewItem;
}
//Edited by Matt Kerns
`LogInv("adding" @ NewItem @ "bDoNotActivate:" @ bDoNotActivate);
`Log ("Added to inventory!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
NewItem.SetOwner( Instigator );
NewItem.Instigator = Instigator;
NewItem.InvManager = Self;
NewItem.GivenTo( Instigator, bDoNotActivate);
// Trigger inventory event
Instigator.TriggerEventClass(class'SeqEvent_GetInventory', NewItem);
return TRUE;
}
return FALSE;
}
Это лучший способ, если ваша игра использует сеть и копирует инвентарь. Если нет, то вы можете просто написать что-то вроде
simulated function AddItemWeapon(Inventory NewItem, optional bool bDoNotActivate){
local Inventory Item, LastItem;
local Weapon WeaponNewItem;
local bool bAddNewWeapon;
bAddNewWeapon = true;
WeaponNewItem = Weapon(NewItem);
// The item should not have been destroyed if we get here.
if( (NewItem != None) && !NewItem.bDeleteMe )
{
// if we don't have an inventory list, start here
if( InventoryChain == None )
{
InventoryChain = newItem;
}
else
{
//look for our group
for (Item = InventoryChain; Item != None; Item = Item.Inventory){
if(Weapon(Item) != none && Weapon(Item).Group == WeaponNewItem.Group){
NewItem.Inventory = Item.Inventory;
bAddNewWeapon = false;
RemoveFromInventory(Item);
break;
}
LastItem = Item;
}
if(bAddNewWeapon){
for (Item = InventoryChain; Item != None; Item = Item.Inventory){
LastItem = Item;
}
}
LastItem.Inventory = NewItem;
}
Но я уверен, что это плохой путь. Вы должны написать класс, который будет сохранять все используемые группы оружия и использовать InventoryManager только в качестве хранилища