tModLoader

tModLoader

Weapon Fusion
andro951 Sep 10, 2023 @ 8:36am
Mod call for OnFuseItems
//ModGlobalItem.cs
public static List<Action<Item, Item>> onFuseItemsFunctions = new();
private static void CombineAllItem(Item item, Player player)
{
List<Item> items = ModGlobalItem.GetCombustibleItems(item, player).OrderByDescending(GetLevel).ToList();
items.Add(item);
items.Reverse();
bool hasCombined = true;
while (hasCombined)
{
hasCombined = false;
foreach (int level in (from e in items.Select(GetLevel)
where e < WeaponFusionConfig.Current.MaxLevel
select e).Distinct().ToList())
{
List<Item> levelItems = items.Where((Item e) => ModGlobalItem.GetLevel(e) == level).ToList();
int count = levelItems.Count;
while (count > 1)
{
Item mergeItem = levelItems[0];
Item conbustibleItem = levelItems[1];
ModGlobalItem.SetLevel(mergeItem, ModGlobalItem.GetLevel(mergeItem) + 1);
foreach (Action<Item, Item> onConsumeItem in onFuseItemsFunctions) {
onConsumeItem(mergeItem, conbustibleItem);
}

conbustibleItem.TurnToAir();
levelItems.Remove(mergeItem);
levelItems.Remove(conbustibleItem);
items.Remove(conbustibleItem);
count -= 2;
hasCombined = true;
}
}
}
}



//WeaponFusion.cs
using System;
using System.Collections.Generic;
using Terraria;
using Terraria.ModLoader;
using WeaponFusion.Items;

namespace WeaponFusion;
public class WeaponFusion : Mod
{
public override object Call(params object[] args) {
if (args.Length < 2 || args.Length > 2)
return -1;

if (args[0] is not int callID)
return -1;

switch (callID) {
case 0:
//First item is the item that will still exist. The 2nd will be turned to air right after the onFuseItems functions are called.
if (args[1] is not Action<Item, Item> onFuseItems)
return -1;

ModGlobalItem.onFuseItemsFunctions.Add(onFuseItems);
return 0;
}

return -1;
}
}