Skip to content

Commit

Permalink
Added error messages for spell tomes
Browse files Browse the repository at this point in the history
  • Loading branch information
Aurocosh committed Oct 4, 2022
1 parent 0cf6b39 commit eacd1e6
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 15 deletions.
49 changes: 43 additions & 6 deletions Content/Items/SpellTomes/Base/SpellTome.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,11 @@ public override void SetDefaults()
{
Item.consumable = true;
Item.useStyle = ItemUseStyleID.HoldUp;
Item.useTime = 90;
Item.useTime = 30;
Item.maxStack = 30;
Item.autoReuse = false;
Item.UseSound = SoundID.Item4;
Item.useAnimation = 90;
Item.useAnimation = 30;
Item.value = Item.buyPrice(0, 0, 10);
Item.rare = ItemRarityID.Blue;
}
Expand All @@ -41,21 +42,59 @@ public SpellTomeContent GetContent()
return null;
}

public override bool? UseItem(Player player)
public override bool CanUseItem(Player player)
{
SpellwrightPlayer spellPlayer = player.GetModPlayer<SpellwrightPlayer>();
if (!spellPlayer.LearnedBasics)
{
Main.NewText(Spellwright.GetTranslation("General", "DidNotLearnedBasics"), Color.Red);
return false;
}
if (!spellPlayer.CanCastSpells)
{
Main.NewText(Spellwright.GetTranslation("General", "CannotCastSpells"), Color.Red);
return false;
}

if (!tomeContents.TryGetValue(Type, out var tome))
{
Main.NewText(Spellwright.GetTranslation("General", "TomeContentError"), Color.Red);
return false;
}

List<ModSpell> unknownSpells = GetUnknownSpells(spellPlayer, tome);
if (unknownSpells.Count == 0)
{
Main.NewText(Spellwright.GetTranslation("General", "AllSpellsKnown"), Color.Red);
return false;
}

return true;
}

public override bool? UseItem(Player player)
{
return true;
}

protected static List<ModSpell> GetUnknownSpells(SpellwrightPlayer spellPlayer, SpellTomeContent tome)
{
var unknownSpells = new List<ModSpell>();
foreach (var spell in tome.Spells)
if (!spellPlayer.KnownSpells.Contains(spell.Type))
unknownSpells.Add(spell);
return unknownSpells;
}

public override void OnConsumeItem(Player player)
{
SpellwrightPlayer spellPlayer = player.GetModPlayer<SpellwrightPlayer>();
if (!tomeContents.TryGetValue(Type, out var tome))
return;

List<ModSpell> unknownSpells = GetUnknownSpells(spellPlayer, tome);
if (unknownSpells.Count == 0)
return false;
return;

var highLevelSpells = new DistributedRandom<ModSpell>();
var appropriateLevelSpells = new DistributedRandom<ModSpell>();
Expand Down Expand Up @@ -97,8 +136,6 @@ public SpellTomeContent GetContent()

var spawner = new LevelUpDustSpawner(player, learnedSpells.Select(x => x.SpellLevel));
spawner.Execute();

return true;
}
}
}
36 changes: 28 additions & 8 deletions Content/Items/SpellTomes/SpellwrightTeachings.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using Microsoft.Xna.Framework;
using Spellwright.Common.Players;
using Spellwright.Content.Items.SpellTomes.Base;
using Spellwright.Content.Spells.Base;
Expand Down Expand Up @@ -38,19 +39,40 @@ public override void SetDefaults()
Item.rare = ItemRarityID.Blue;
}

public override bool? UseItem(Player player)
public override bool CanUseItem(Player player)
{
SpellwrightPlayer spellPlayer = player.GetModPlayer<SpellwrightPlayer>();

if (!tomeContents.TryGetValue(Type, out var tome))
{
Main.NewText(Spellwright.GetTranslation("General", "TomeContentError"), Color.Red);
return false;
}

var unknownSpells = new List<ModSpell>();
foreach (var spell in tome.Spells)
if (!spellPlayer.KnownSpells.Contains(spell.Type))
unknownSpells.Add(spell);

List<ModSpell> unknownSpells = GetUnknownSpells(spellPlayer, tome);
if (spellPlayer.LearnedBasics && unknownSpells.Count == 0)
{
Main.NewText(Spellwright.GetTranslation("General", "LearnedBasics"), Color.Red);
return false;
}

return true;
}

public override bool? UseItem(Player player)
{
return true;
}

public override void OnConsumeItem(Player player)
{
SpellwrightPlayer spellPlayer = player.GetModPlayer<SpellwrightPlayer>();
if (!tomeContents.TryGetValue(Type, out var tome))
return;

List<ModSpell> unknownSpells = GetUnknownSpells(spellPlayer, tome);
if (spellPlayer.LearnedBasics && unknownSpells.Count == 0)
return;

foreach (var spell in unknownSpells)
spellPlayer.KnownSpells.Add(spell.Type);
Expand All @@ -59,8 +81,6 @@ public override void SetDefaults()

var spawner = new LevelUpDustSpawner(player, unknownSpells.Select(x => x.SpellLevel));
spawner.Execute();

return true;
}
}
}
4 changes: 4 additions & 0 deletions Localization/en-US.hjson
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ Mods: {
SpellsLearned: "Spells learned: {0}"
SpellLevelTooLow: My spellcasting level is too low
AllSpellsKnown: I already know all spells in this tome
LearnedBasics: I already learned basics of spellcraft
CannotCastSpells: I cannot cast spells yet
DidNotLearnedBasics: I need to learn basics of spellcraft first
TomeContentError: Tome content error
}

CastErrors: {
Expand Down
2 changes: 1 addition & 1 deletion build.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
displayName = Spellwright
author = Aurocosh
version = 0.8.1.3
version = 0.8.1.4
dllReferences = NetSerializer
languageVersion = 7
buildIgnore = *.csproj, *.sln, *.user, *.md, obj\*, bin\*, .vs\*, .git\*, .gitignore
Expand Down

0 comments on commit eacd1e6

Please sign in to comment.