Refactor skill allocation to upgrade; implement skill requirements and resource checks; remove experience from Pet model; update README for skill tree progress

This commit is contained in:
2025-02-08 22:46:19 -03:00
parent f553196ca0
commit 653cc451d2
13 changed files with 723 additions and 355 deletions

View File

@@ -51,6 +51,11 @@ namespace PetCompanion.Data
.WithMany(s => s.Effects)
.HasForeignKey(se => se.SkillId);
modelBuilder.Entity<SkillRequirement>()
.HasOne(se => se.Skill)
.WithMany(s => s.SkillRequirements)
.HasForeignKey(se => se.SkillId);
modelBuilder.Entity<EquippedItem>()
.HasOne(e => e.Pet)
.WithMany(p => p.EquippedItemsList)
@@ -61,31 +66,14 @@ namespace PetCompanion.Data
.WithMany()
.HasForeignKey(e => e.GameItemId);
// Seed initial skills
var skills = SkillsData.GetInitialSkills();
var skillWithoutEffects = SkillsData.GetInitialSkills().Select(s => new Skill
{
Id = s.Id,
Name = s.Name,
Type = s.Type,
Description = s.Description,
PointsCost = s.PointsCost,
Icon = s.Icon,
SkillsIdRequired = s.SkillsIdRequired
}).ToList();
// Seed initial data
var skills = SkillsData.GetInitialSkillsWithoutRelations();
var requirements = SkillsData.GetInitialSkillRequirements();
var effects = SkillsData.GetInitialSkillEffects();
foreach (var skill in skillWithoutEffects)
{
modelBuilder.Entity<Skill>().HasData(skill);
}
foreach (var skill in skills)
{
foreach (var effect in skill.Effects)
{
modelBuilder.Entity<SkillEffect>().HasData(effect);
}
}
modelBuilder.Entity<Skill>().HasData(skills);
modelBuilder.Entity<SkillRequirement>().HasData(requirements);
modelBuilder.Entity<SkillEffect>().HasData(effects);
}
}
}

View File

@@ -4,7 +4,7 @@ namespace PetCompanion.Data
{
public static class SkillsData
{
public static IEnumerable<Skill> GetInitialSkills()
public static IEnumerable<Skill> GetInitialSkillsWithoutRelations()
{
return new List<Skill>
{
@@ -14,36 +14,8 @@ namespace PetCompanion.Data
Name = "Vitality Mastery",
Description = "Increases maximum health of your pet, making it more resilient.",
Type = SkillType.GROUND,
PointsCost = 1,
Icon = "❤",
SkillsIdRequired = null,
Effects = new List<SkillEffect>
{
new SkillEffect
{
Id = 1,
SkillId = 1,
Tier = SkillTier.I,
Effect = "MaxHealth",
Value = 25
},
new SkillEffect
{
Id = 2,
SkillId = 1,
Tier = SkillTier.II,
Effect = "MaxHealth",
Value = 50
},
new SkillEffect
{
Id = 3,
SkillId = 1,
Tier = SkillTier.III,
Effect = "MaxHealth",
Value = 100
}
}
SkillsIdRequired = null
},
new Skill
{
@@ -51,36 +23,8 @@ namespace PetCompanion.Data
Name = "Mind Enhancement",
Description = "Increases maximum intelligence of your pet, improving its learning capabilities.",
Type = SkillType.GROUND,
PointsCost = 1,
Icon = "🧠",
SkillsIdRequired = null,
Effects = new List<SkillEffect>
{
new SkillEffect
{
Id = 4,
SkillId = 2,
Tier = SkillTier.I,
Effect = "MaxIntelligence",
Value = 5
},
new SkillEffect
{
Id = 5,
SkillId = 2,
Tier = SkillTier.II,
Effect = "MaxIntelligence",
Value = 10
},
new SkillEffect
{
Id = 6,
SkillId = 2,
Tier = SkillTier.III,
Effect = "MaxIntelligence",
Value = 20
}
}
SkillsIdRequired = null
},
new Skill
{
@@ -88,36 +32,8 @@ namespace PetCompanion.Data
Name = "Strength Training",
Description = "Increases maximum strength of your pet, making it more powerful.",
Type = SkillType.GROUND,
PointsCost = 1,
Icon = "💪",
SkillsIdRequired = null,
Effects = new List<SkillEffect>
{
new SkillEffect
{
Id = 7,
SkillId = 3,
Tier = SkillTier.I,
Effect = "MaxStrength",
Value = 5
},
new SkillEffect
{
Id = 8,
SkillId = 3,
Tier = SkillTier.II,
Effect = "MaxStrength",
Value = 10
},
new SkillEffect
{
Id = 9,
SkillId = 3,
Tier = SkillTier.III,
Effect = "MaxStrength",
Value = 20
}
}
SkillsIdRequired = null
},
new Skill
{
@@ -125,36 +41,8 @@ namespace PetCompanion.Data
Name = "Charisma Boost",
Description = "Increases maximum charisma of your pet, making it more charming.",
Type = SkillType.GROUND,
PointsCost = 1,
Icon = "🎭",
SkillsIdRequired = null,
Effects = new List<SkillEffect>
{
new SkillEffect
{
Id = 10,
SkillId = 4,
Tier = SkillTier.I,
Effect = "MaxCharisma",
Value = 5
},
new SkillEffect
{
Id = 11,
SkillId = 4,
Tier = SkillTier.II,
Effect = "MaxCharisma",
Value = 10
},
new SkillEffect
{
Id = 12,
SkillId = 4,
Tier = SkillTier.III,
Effect = "MaxCharisma",
Value = 20
}
}
SkillsIdRequired = null
},
new Skill
{
@@ -162,36 +50,8 @@ namespace PetCompanion.Data
Name = "Luck of the Draw",
Description = "Increases luck of your pet, making it more fortunate to find rare items.",
Type = SkillType.GROUND,
PointsCost = 1,
Icon = "🍀",
SkillsIdRequired = new List<int> { 4 },
Effects = new List<SkillEffect>
{
new SkillEffect
{
Id = 13,
SkillId = 5,
Tier = SkillTier.I,
Effect = "Luck",
Value = 1
},
new SkillEffect
{
Id = 14,
SkillId = 5,
Tier = SkillTier.II,
Effect = "Luck",
Value = 2
},
new SkillEffect
{
Id = 15,
SkillId = 5,
Tier = SkillTier.III,
Effect = "Luck",
Value = 3
}
}
SkillsIdRequired = new List<int> { 4 }
},
new Skill
{
@@ -199,36 +59,8 @@ namespace PetCompanion.Data
Name = "Agility Training",
Description = "Increases agility of your pet, making it faster in combat.",
Type = SkillType.GROUND,
PointsCost = 1,
Icon = "🏃",
SkillsIdRequired = new List<int> { 3 },
Effects = new List<SkillEffect>
{
new SkillEffect
{
Id = 16,
SkillId = 6,
Tier = SkillTier.I,
Effect = "Agility",
Value = 1
},
new SkillEffect
{
Id = 17,
SkillId = 6,
Tier = SkillTier.II,
Effect = "Agility",
Value = 2
},
new SkillEffect
{
Id = 18,
SkillId = 6,
Tier = SkillTier.III,
Effect = "Agility",
Value = 3
}
}
SkillsIdRequired = new List<int> { 3 }
},
new Skill
{
@@ -236,36 +68,237 @@ namespace PetCompanion.Data
Name = "Perception Boost",
Description = "Increases perception of your pet, making it more aware of its surroundings.",
Type = SkillType.GROUND,
PointsCost = 1,
Icon = "👀",
SkillsIdRequired = new List<int> { 2 },
Effects = new List<SkillEffect>
{
new SkillEffect
{
Id = 19,
SkillId = 7,
Tier = SkillTier.I,
Effect = "Perception",
Value = 1
},
new SkillEffect
{
Id = 20,
SkillId = 7,
Tier = SkillTier.II,
Effect = "Perception",
Value = 2
},
new SkillEffect
{
Id = 21,
SkillId = 7,
Tier = SkillTier.III,
Effect = "Perception",
Value = 3
}
}
SkillsIdRequired = new List<int> { 2 }
},
new Skill
{
Id = 8,
Name = "Resourcefulness",
Description = "Increases the amount of resources gathered by your pet.",
Type = SkillType.GRAND,
Icon = "📦",
SkillsIdRequired = new List<int> { 5, 6, 7 }
}
};
}
public static IEnumerable<SkillRequirement> GetInitialSkillRequirements()
{
return new List<SkillRequirement>
{
new SkillRequirement { Id = 1, SkillId = 1, Resource = "Wisdom", Cost = 100 },
new SkillRequirement { Id = 2, SkillId = 1, Resource = "Food", Cost = 150 },
new SkillRequirement { Id = 3, SkillId = 2, Resource = "Wisdom", Cost = 150 },
new SkillRequirement { Id = 4, SkillId = 3, Resource = "Gold", Cost = 100 },
new SkillRequirement { Id = 5, SkillId = 3, Resource = "Food", Cost = 150 },
new SkillRequirement { Id = 6, SkillId = 4, Resource = "Wisdom", Cost = 200 },
new SkillRequirement { Id = 7, SkillId = 5, Resource = "Gold", Cost = 200 },
new SkillRequirement { Id = 8, SkillId = 6, Resource = "Gold", Cost = 200 },
new SkillRequirement { Id = 9, SkillId = 7, Resource = "Gold", Cost = 100 },
new SkillRequirement { Id = 10, SkillId = 7, Resource = "Junk", Cost = 100 },
new SkillRequirement { Id = 11, SkillId = 8, Resource = "Gold", Cost = 500 },
new SkillRequirement { Id = 12, SkillId = 8, Resource = "Junk", Cost = 500 },
new SkillRequirement { Id = 13, SkillId = 8, Resource = "Wisdom", Cost = 300 },
new SkillRequirement { Id = 14, SkillId = 8, Resource = "Food", Cost = 300 }
};
}
public static IEnumerable<SkillEffect> GetInitialSkillEffects()
{
return new List<SkillEffect>
{
new SkillEffect
{
Id = 1,
SkillId = 1,
Tier = SkillTier.I,
Effect = "MaxHealth",
Value = 25
},
new SkillEffect
{
Id = 2,
SkillId = 1,
Tier = SkillTier.II,
Effect = "MaxHealth",
Value = 50
},
new SkillEffect
{
Id = 3,
SkillId = 1,
Tier = SkillTier.III,
Effect = "MaxHealth",
Value = 100
},
new SkillEffect
{
Id = 4,
SkillId = 2,
Tier = SkillTier.I,
Effect = "MaxIntelligence",
Value = 5
},
new SkillEffect
{
Id = 5,
SkillId = 2,
Tier = SkillTier.II,
Effect = "MaxIntelligence",
Value = 10
},
new SkillEffect
{
Id = 6,
SkillId = 2,
Tier = SkillTier.III,
Effect = "MaxIntelligence",
Value = 20
},
new SkillEffect
{
Id = 7,
SkillId = 3,
Tier = SkillTier.I,
Effect = "MaxStrength",
Value = 5
},
new SkillEffect
{
Id = 8,
SkillId = 3,
Tier = SkillTier.II,
Effect = "MaxStrength",
Value = 10
},
new SkillEffect
{
Id = 9,
SkillId = 3,
Tier = SkillTier.III,
Effect = "MaxStrength",
Value = 20
},
new SkillEffect
{
Id = 10,
SkillId = 4,
Tier = SkillTier.I,
Effect = "MaxCharisma",
Value = 5
},
new SkillEffect
{
Id = 11,
SkillId = 4,
Tier = SkillTier.II,
Effect = "MaxCharisma",
Value = 10
},
new SkillEffect
{
Id = 12,
SkillId = 4,
Tier = SkillTier.III,
Effect = "MaxCharisma",
Value = 20
},
new SkillEffect
{
Id = 13,
SkillId = 5,
Tier = SkillTier.I,
Effect = "Luck",
Value = 1
},
new SkillEffect
{
Id = 14,
SkillId = 5,
Tier = SkillTier.II,
Effect = "Luck",
Value = 2
},
new SkillEffect
{
Id = 15,
SkillId = 5,
Tier = SkillTier.III,
Effect = "Luck",
Value = 3
},
new SkillEffect
{
Id = 16,
SkillId = 6,
Tier = SkillTier.I,
Effect = "Agility",
Value = 1
},
new SkillEffect
{
Id = 17,
SkillId = 6,
Tier = SkillTier.II,
Effect = "Agility",
Value = 2
},
new SkillEffect
{
Id = 18,
SkillId = 6,
Tier = SkillTier.III,
Effect = "Agility",
Value = 3
},
new SkillEffect
{
Id = 19,
SkillId = 7,
Tier = SkillTier.I,
Effect = "Perception",
Value = 1
},
new SkillEffect
{
Id = 20,
SkillId = 7,
Tier = SkillTier.II,
Effect = "Perception",
Value = 2
},
new SkillEffect
{
Id = 21,
SkillId = 7,
Tier = SkillTier.III,
Effect = "Perception",
Value = 3
},
new SkillEffect
{
Id = 22,
SkillId = 8,
Tier = SkillTier.I,
Effect = "Resourcefulness",
Value = 1
},
new SkillEffect
{
Id = 23,
SkillId = 8,
Tier = SkillTier.II,
Effect = "Resourcefulness",
Value = 2
},
new SkillEffect
{
Id = 24,
SkillId = 8,
Tier = SkillTier.III,
Effect = "Resourcefulness",
Value = 3
}
};
}