Advanced Item and Pickup Components
Module — 2 files
These files compile together (same module folder).
file_1.verse
using { /UnrealEngine.com/Itemization }
using { /UnrealEngine.com/JSON }
using { /Verse.org/Simulation }
using { /Verse.org/SceneGraph }
using { /Fortnite.com/Itemization/FortniteRarities }
using { /Fortnite.com/Items }
using { /Verse.org/Presentation }
using { /Verse.org/Assets }
using { /Fortnite.com/Game }
DefaultItemNameMessage<localizes><public>: message = "Item Name"
DefaultItemDescriptionMessage<localizes><public>: message = "Item Description"
DefaultItemShortDescriptionMessage<localizes><public>: message = "Item Short Description"
item_rarities_enum<public>:= enum:
Rarity_Common,
Rarity_Uncommon,
Rarity_Rare,
Rarity_Epic,
Rarity_Legendary,
Rarity_Mythic,
Rarity_Exotic
item_details_definition<public>:= class(has_description):
advanced_item_component<public>:= class<final_super>(item_component):
@editable
var ItemRarity<public>: item_rarities_enum = item_rarities_enum.Rarity_Epic
@editable
var ItemDetails<public>: item_details_definition = item_details_definition{Name:=DefaultItemNameMessage, Description:=DefaultItemDescriptionMessage, ShortDescription:=DefaultItemShortDescriptionMessage}
@editable
var ItemIcon<public>: ?texture = false
var _ItemRarity<private>: rarity = Epic
var MaybeItemOwner<private>: ?agent = false
var SubscriptionEvents<private> : []cancelable = array{}
EnumRarityToRarity<public>(EnumRarity:item_rarities_enum):rarity=
case(EnumRarity):
item_rarities_enum.Rarity_Common => Common
item_rarities_enum.Rarity_Uncommon => Uncommon
item_rarities_enum.Rarity_Rare => Rare
item_rarities_enum.Rarity_Epic => Epic
item_rarities_enum.Rarity_Legendary => Legendary
item_rarities_enum.Rarity_Mythic =>
if(MythicRarity := MythicGoldfish_BR_CH2S1_Mythic{}.GetComponent[rarity_component].Rarity):
MythicRarity
else:
Legendary
item_rarities_enum.Rarity_Exotic =>
if(ExoticRarity := RiftPointDevice_Ballistic_V1_Exotic{}.GetComponent[rarity_component].Rarity):
ExoticRarity
else:
Legendary
SetItemIcon<public>(NewIcon : ?texture):void=
set ItemIcon = NewIcon
UpdateIcon()
SetItemName<public>(NewName : message):void=
set ItemDetails.Name = NewName
UpdateDetails()
SetItemDescription<public>(NewDescription : message):void=
set ItemDetails.Description = NewDescription
UpdateDetails()
UpdateIcon<private>():void=
if(Icon := ItemIcon?):
if(IconComp := Entity.GetComponent[icon_component]):
set IconComp.Icon = Icon
else:
NewIconComp : icon_component = icon_component:
Entity:=Entity
Icon:=Icon
Entity.AddComponent(NewIconComp)
UpdateDetails<private>():void=
if(DescriptionComp := Entity.GetComponent[description_component]):
set DescriptionComp.Name = ItemDetails.Name
set DescriptionComp.Description = ItemDetails.Description
set DescriptionComp.ShortDescription = ItemDetails.ShortDescription
else:
NewDescriptionComp : description_component = description_component:
Entity:=Entity
Name:=ItemDetails.Name
Description:=ItemDetails.Description
ShortDescription:=ItemDetails.ShortDescription
Entity.AddComponent(NewDescriptionComp)
SetRarity<public>(TargetRarity:item_rarities_enum):void=
SetRarity(EnumRarityToRarity(ItemRarity))
SetRarity<public>(TargetRarity:rarity):void=
set _ItemRarity = TargetRarity
if(RarityComp := Entity.GetComponent[rarity_component]):
set RarityComp.Rarity = TargetRarity
else:
NewRarityComp : rarity_component = rarity_component:
Entity:=Entity
Rarity:=TargetRarity
Entity.AddComponent(NewRarityComp)
GetItemRarity<public>():rarity=
_ItemRarity
GetItemNameAsString<public>():string=
Localize(ItemDetails.Name)
GetItemDescriptionAsString<public>():string=
Localize(ItemDetails.Description)
GetItemName<public>():message=
ItemDetails.Name
GetItemDescription<public>():message=
ItemDetails.Description
GetItemIcon<public>():texture=
if(Icon := ItemIcon?):
return Icon
else:
if(IconComp := Entity.GetComponent[icon_component]):
return IconComp.Icon
else:
NewIconComp : icon_component = icon_component:
Entity:=Entity
return NewIconComp.Icon
GetItemOwner<public>()<decides><reads>:agent=
MaybeItemOwner?
OnEquipChanges<private>(Result:change_equipped_result):void=
if(Result.IsItemEquipped?):
OnEquipped()
else:
OnUnequipped()
OnEquipped<public>():void=
Print("[{GetItemNameAsString()}] Equipped!")
OnUnequipped<public>():void=
Print("[{GetItemNameAsString()}] Unequipped!")
OnInventoryChanges<private>(Result:change_inventory_result):void=
if(GetParentInventory[]):
if(ItemOwner := Entity.FindItemOwnerAgent[]):
OnItemAdded(ItemOwner)
set MaybeItemOwner = option{ItemOwner}
else:
if(OldOwner := MaybeItemOwner?):
OnItemRemoved(OldOwner)
set MaybeItemOwner = false
OnItemRemoved<public>(Agent:agent):void=
Print("[{GetItemNameAsString()}] Item Removed!")
OnItemAdded<public>(Agent:agent):void=
Print("[{GetItemNameAsString()}] Item Added!")
CancelOldEvents<private>():void=
for(OldEvent : SubscriptionEvents):
OldEvent.Cancel()
OnBeginSimulation<override>():void=
(super:)OnBeginSimulation()
SetRarity(ItemRarity)
UpdateIcon()
UpdateDetails()
CancelOldEvents()
if(RoundManager := Entity.GetFortRoundManager[]):
RoundEndEvent := RoundManager.SubscribeRoundEnded(CancelOldEvents)
set SubscriptionEvents += array{RoundEndEvent}
InventoryEvent :=ChangeInventoryEvent.Subscribe(OnInventoryChanges)
EquippedEvent := ChangeEquippedEvent.Subscribe(OnEquipChanges)
set SubscriptionEvents += array{EquippedEvent, InventoryEvent}
(InEntity:entity).AddComponent<public>(TargetComp:component):void=
InEntity.AddComponents(array{TargetComp})
(Entity:entity).FindItemOwnerAgent<public>()<decides><transacts>:agent=
if:
Agent := agent[Entity]
then:
Agent
else:
Entity.GetParent[].FindItemOwnerAgent[]
Sign in to download module
Copy-paste each file above is always free.