Upload from upload_mods.ps1
This commit is contained in:
248
Harmony/Harmony_RewardLootItem.cs
Normal file
248
Harmony/Harmony_RewardLootItem.cs
Normal file
@@ -0,0 +1,248 @@
|
||||
using Audio;
|
||||
using Platform;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
|
||||
namespace Harmony.RewardLootItemPatches
|
||||
{
|
||||
[HarmonyPatch(typeof(RewardLootItem))]
|
||||
[HarmonyPatch("SetupReward")]
|
||||
public class SetupRewardPatch
|
||||
{
|
||||
public static bool Prefix(RewardLootItem __instance)
|
||||
{
|
||||
//Log.Out("RewardLootItem-SetupReward item: " + __instance.Item.itemValue.ItemClass.Name);
|
||||
if (RebirthUtilities.ScenarioSkip())
|
||||
{
|
||||
string name = __instance.Item.itemValue.ItemClass.Name.ToLower();
|
||||
if (name.StartsWith("armor") &&
|
||||
(name.Contains("helmet") ||
|
||||
name.Contains("outfit") ||
|
||||
name.Contains("gloves") ||
|
||||
name.Contains("boots")
|
||||
)
|
||||
)
|
||||
{
|
||||
//int questTier = __instance.OwnerQuest.OwnerJournal.GetCurrentFactionTier((byte)1);
|
||||
|
||||
int questTier = __instance.OwnerQuest.QuestClass.DifficultyTier;
|
||||
|
||||
//Log.Out("RewardLootItem-SetupReward questTier: " + questTier);
|
||||
|
||||
Dictionary<string, int> perks = new Dictionary<string, int>();
|
||||
|
||||
if (questTier > 1 && questTier <= 2)
|
||||
{
|
||||
perks = new Dictionary<string, int>
|
||||
{
|
||||
{ "perkMeleeDamage", 1 },
|
||||
{ "perkSexualTrex", 1 },
|
||||
{ "perkMiner69r", 1 },
|
||||
{ "perkMotherLode", 1 },
|
||||
{ "perkRuleOneCardio", 1 },
|
||||
{ "perkParkour", 1 },
|
||||
{ "perkDodge", 1 },
|
||||
{ "perkPackMule", 1 }
|
||||
};
|
||||
}
|
||||
else if (questTier > 2 && questTier <= 3)
|
||||
{
|
||||
perks = new Dictionary<string, int>
|
||||
{
|
||||
{ "perkMeleeDamage", 2 },
|
||||
{ "perkSexualTrex", 2 },
|
||||
{ "perkMiner69r", 2 },
|
||||
{ "perkMotherLode", 2 },
|
||||
{ "perkRuleOneCardio", 2 },
|
||||
{ "perkParkour", 2 },
|
||||
{ "perkDodge", 2 },
|
||||
{ "perkPackMule", 2 },
|
||||
{ "perkHealingFactor", 1 },
|
||||
{ "perkSlowMetabolism", 1 },
|
||||
{ "perkDeepCuts", 1 },
|
||||
{ "perkLuckyLooter", 1 },
|
||||
{ "perkPhysician", 1 },
|
||||
{ "perkTreasureHunter", 1 },
|
||||
{ "perkDaringAdventurer", 1 },
|
||||
{ "perkBetterBarter", 1 },
|
||||
{ "perkCharismaticNature", 1 }
|
||||
};
|
||||
}
|
||||
else if (questTier > 3 && questTier <= 4)
|
||||
{
|
||||
perks = new Dictionary<string, int>
|
||||
{
|
||||
{ "perkMeleeDamage", 3 },
|
||||
{ "perkSexualTrex", 3 },
|
||||
{ "perkMiner69r", 3 },
|
||||
{ "perkMotherLode", 3 },
|
||||
{ "perkRuleOneCardio", 3 },
|
||||
{ "perkParkour", 3 },
|
||||
{ "perkDodge", 3 },
|
||||
{ "perkPackMule", 3 },
|
||||
{ "perkHealingFactor", 2 },
|
||||
{ "perkSlowMetabolism", 2 },
|
||||
{ "perkDeepCuts", 2 },
|
||||
{ "perkLuckyLooter", 2 },
|
||||
{ "perkPhysician", 2 },
|
||||
{ "perkTreasureHunter", 2 },
|
||||
{ "perkDaringAdventurer", 2 },
|
||||
{ "perkBetterBarter", 2 },
|
||||
{ "perkCharismaticNature", 2 }
|
||||
};
|
||||
}
|
||||
else if (questTier > 4)
|
||||
{
|
||||
perks = new Dictionary<string, int>
|
||||
{
|
||||
{ "perkMeleeDamage", 4 },
|
||||
{ "perkSexualTrex", 4 },
|
||||
{ "perkMiner69r", 4 },
|
||||
{ "perkMotherLode", 4 },
|
||||
{ "perkRuleOneCardio", 4 },
|
||||
{ "perkParkour", 4 },
|
||||
{ "perkDodge", 4 },
|
||||
{ "perkPackMule", 4 },
|
||||
{ "perkHealingFactor", 2 },
|
||||
{ "perkSlowMetabolism", 2 },
|
||||
{ "perkDeepCuts", 2 },
|
||||
{ "perkLuckyLooter", 2 },
|
||||
{ "perkPhysician", 2 },
|
||||
{ "perkTreasureHunter", 2 },
|
||||
{ "perkDaringAdventurer", 2 },
|
||||
{ "perkBetterBarter", 2 },
|
||||
{ "perkCharismaticNature", 2 }
|
||||
};
|
||||
}
|
||||
|
||||
int chance = Manager.random.RandomRange(0, 101);
|
||||
|
||||
EntityPlayer player = __instance.OwnerQuest.OwnerJournal.OwnerPlayer;
|
||||
|
||||
float threshold = 60;
|
||||
|
||||
if (player != null)
|
||||
{
|
||||
ProgressionValue progressionValue = player.Progression.GetProgressionValue("perkDaringAdventurer");
|
||||
float perkDaringAdventurer = RebirthUtilities.GetCalculatedLevel(player, progressionValue);
|
||||
|
||||
threshold = threshold + perkDaringAdventurer * 5;
|
||||
}
|
||||
|
||||
if (questTier > 1 && chance <= threshold)
|
||||
{
|
||||
System.Random random = new System.Random();
|
||||
KeyValuePair<string, int> randomPerk = perks.ElementAt(random.Next(perks.Count));
|
||||
|
||||
ItemValue itemValue = new ItemValue(ItemClass.GetItem(__instance.Item.itemValue.ItemClass.Name, false).type);
|
||||
itemValue.SetMetadata("bonus", randomPerk.Key, TypedMetadataValue.TypeTag.String);
|
||||
itemValue.SetMetadata("type", "", TypedMetadataValue.TypeTag.String);
|
||||
itemValue.SetMetadata("level", randomPerk.Value, TypedMetadataValue.TypeTag.Integer);
|
||||
itemValue.SetMetadata("active", 2, TypedMetadataValue.TypeTag.Integer);
|
||||
|
||||
__instance.Item.itemValue = itemValue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
List<string> tagNames = __instance.Item.itemValue.ItemClass.ItemTags.GetTagNames();
|
||||
|
||||
bool isMelee = RebirthUtilities.isMeleeWeapon(tagNames);
|
||||
bool isRanged = RebirthUtilities.hasTag(tagNames, "ranged");
|
||||
bool isTool = RebirthUtilities.hasTag(tagNames, "tool");
|
||||
bool isAxe = RebirthUtilities.hasTag(tagNames, "axe");
|
||||
bool isRepairTool = RebirthUtilities.hasTag(tagNames, "repairTool");
|
||||
bool isAmmo = RebirthUtilities.hasTag(tagNames, "ammo");
|
||||
|
||||
if ((isRanged && !isAmmo) ||
|
||||
(isMelee && !(isTool || isRepairTool)) ||
|
||||
(isAxe && !isRepairTool)
|
||||
)
|
||||
{
|
||||
int questTier = __instance.OwnerQuest.QuestClass.DifficultyTier;
|
||||
|
||||
int chance = Manager.random.RandomRange(0, 101);
|
||||
|
||||
EntityPlayer player = __instance.OwnerQuest.OwnerJournal.OwnerPlayer;
|
||||
|
||||
float threshold = 25;
|
||||
|
||||
if (player != null )
|
||||
{
|
||||
ProgressionValue progressionValue = player.Progression.GetProgressionValue("perkDaringAdventurer");
|
||||
float perkDaringAdventurer = RebirthUtilities.GetCalculatedLevel(player, progressionValue);
|
||||
|
||||
threshold = threshold + perkDaringAdventurer * 5;
|
||||
}
|
||||
|
||||
if (questTier > 1 && chance <= threshold)
|
||||
{
|
||||
string bonusName = RebirthVariables.weaponAura[Manager.random.RandomRange(0, RebirthVariables.weaponAura.Count)];
|
||||
string bonusType = "aura";
|
||||
int bonusLevel = Manager.random.RandomRange(questTier, questTier + 1) - 1;
|
||||
|
||||
ItemValue itemValue = new ItemValue(ItemClass.GetItem(__instance.Item.itemValue.ItemClass.Name, false).type);
|
||||
itemValue.SetMetadata("bonus", bonusName, TypedMetadataValue.TypeTag.String);
|
||||
itemValue.SetMetadata("type", bonusType, TypedMetadataValue.TypeTag.String);
|
||||
itemValue.SetMetadata("level", bonusLevel, TypedMetadataValue.TypeTag.Integer);
|
||||
itemValue.SetMetadata("active", 1, TypedMetadataValue.TypeTag.Integer);
|
||||
|
||||
__instance.Item.itemValue = itemValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
__instance.LootGameStage = Convert.ToInt32(__instance.Value);
|
||||
ItemClass itemClass = __instance.Item.itemValue.ItemClass;
|
||||
__instance.Description = itemClass.GetLocalizedItemName();
|
||||
__instance.ValueText = __instance.Value;
|
||||
switch (itemClass.Groups[0].ToLower())
|
||||
{
|
||||
case "ammo/weapons":
|
||||
__instance.Icon = "ui_game_symbol_knife";
|
||||
break;
|
||||
case "basics":
|
||||
__instance.Icon = "ui_game_symbol_shopping_cart";
|
||||
break;
|
||||
case "books":
|
||||
__instance.Icon = "ui_game_symbol_book";
|
||||
break;
|
||||
case "building":
|
||||
__instance.Icon = "ui_game_symbol_map_house";
|
||||
break;
|
||||
case "chemicals":
|
||||
__instance.Icon = "ui_game_symbol_water";
|
||||
break;
|
||||
case "clothing":
|
||||
__instance.Icon = "ui_game_symbol_shirt";
|
||||
break;
|
||||
case "decor/miscellaneous":
|
||||
__instance.Icon = "ui_game_symbol_chair";
|
||||
break;
|
||||
case "food/cooking":
|
||||
__instance.Icon = "ui_game_symbol_fork";
|
||||
break;
|
||||
case "mods":
|
||||
__instance.Icon = "ui_game_symbol_assemble";
|
||||
break;
|
||||
case "resources":
|
||||
__instance.Icon = "ui_game_symbol_resource";
|
||||
break;
|
||||
case "science":
|
||||
__instance.Icon = "ui_game_symbol_science";
|
||||
break;
|
||||
case "special items":
|
||||
__instance.Icon = "ui_game_symbol_book";
|
||||
break;
|
||||
case "tools/traps":
|
||||
__instance.Icon = "ui_game_symbol_tool";
|
||||
break;
|
||||
}
|
||||
__instance.IconAtlas = "ItemIconAtlas";
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user