首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unrealscript:只有当你的武器组是唯一的时,如何才能将武器添加到清单中

Unrealscript:只有当你的武器组是唯一的时,如何才能将武器添加到清单中
EN

Stack Overflow用户
提问于 2012-02-02 04:42:57
回答 1查看 2K关注 0票数 1

我一直在尝试让一个自定义的清单脚本在unrealscript中工作。我需要检查你正在拿的武器是否有与你已经拥有的武器相匹配的武器组。如果是这样的话,它会交换给定组的武器。如果没有,你将获得新的武器。目前我们有4个武器群。我试图寻找的是如何找到被拾取武器的武器组,但没有找到。以及如何与其他武器进行对比。我一直在使用add inventory功能。

NewItem是您刚刚与之交互的项目。我需要在你现在的库存中找到其他的武器和它们的武器组。

代码语言:javascript
复制
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 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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-22 19:04:15

如果您想用InventoryManager编写所有代码,它将如下所示

代码语言:javascript
复制
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) {

代码语言:javascript
复制
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;

}

如果您的游戏使用网络并复制库存,这是最好的方法。如果不是这样,您可以简单地编写如下代码

代码语言:javascript
复制
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作为存储

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9103057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档