1using { /Verse.org/Simulation }
2using { /Verse.org/SceneGraph }
3using { /Fortnite.com/Devices }
4
5var PlayerInventoryData : weak_map(player, player_persistable_inventory) = map{}
6
7player_persistable_inventory := class<final><persistable>:
8 Version : int = 0
9 Currency : int = 0
10
11(Player : player).AddCurrency(Amount : int)<transacts>:void=
12 PD := Player.GetPersistentInventory()
13 NewPD := player_persistable_inventory:
14 Currency := PD.Currency + Amount
15 MakeSaveDataTableForInventory<constructor>(PD)
16 Player.SetInventory(NewPD)
17
18
19(Player : player).SubtractCurrency(Amount : int)<transacts>:void=
20 PD := Player.GetPersistentInventory()
21 NewPD := player_persistable_inventory:
22 Currency := if(PD.Currency - Amount < 0){0}else{PD.Currency - Amount}
23 MakeSaveDataTableForInventory<constructor>(PD)
24 Player.SetInventory(NewPD)
25
26
27(Player:player).SetInventory(NewSaveData : player_persistable_inventory)<transacts>:void=
28 if(not Player.IsActive[]):
29 return
30
31 if(set PlayerInventoryData[Player] = NewSaveData):
32
33(Player:player).GetPersistentInventory()<transacts>:player_persistable_inventory=
34 if(not Player.IsActive[]):
35 return player_persistable_inventory{}
36
37 if(PID := PlayerInventoryData[Player]):
38 return PID
39 else:
40 NewInventoryData := player_persistable_inventory{}
41 if(set PlayerInventoryData[Player] = NewInventoryData):
42
43 return player_persistable_inventory{}
44
45MakeSaveDataTableForInventory<constructor>(OldTable:player_persistable_inventory)<transacts>:=player_persistable_inventory:
46 Version := OldTable.Version
47 Currency := OldTable.Currency
48
49MoneyTriggerClass := class:
50 @editable Amount : int = 0
51 @editable Trigger : trigger_device = trigger_device{}
52
53playaer_inventory_component := class<final_super>(component):
54
55 @editable AddCurrencyTriggerClass : MoneyTriggerClass = MoneyTriggerClass{}
56 @editable SubtractCurrencyTriggerClass : MoneyTriggerClass = MoneyTriggerClass{}
57 @editable ResetDataTrigger : trigger_device = trigger_device{}
58
59 OnSimulate<override>():void=
60 spawn:
61 ListenForTriggers()
62
63 ListenForTriggers()<suspends>:void=
64 sync:
65 loop:
66 mAgent := AddCurrencyTriggerClass.Trigger.TriggeredEvent.Await()
67 if(Player := player[mAgent?]):
68 Player.AddCurrency(AddCurrencyTriggerClass.Amount)
69 Sleep(0.0)
70 loop:
71 mAgent := SubtractCurrencyTriggerClass.Trigger.TriggeredEvent.Await()
72 if(Player := player[mAgent?]):
73 Player.SubtractCurrency(AddCurrencyTriggerClass.Amount)
74 Sleep(0.0)
75 loop:
76 mAgent := ResetDataTrigger.TriggeredEvent.Await()
77 if(Player := player[mAgent?]):
78 Player.SetInventory(player_persistable_inventory{})
79 Sleep(0.0)