Add skill management system: implement Skill and PetSkill models, create SkillController, and update ApplicationDbContext for skills

This commit is contained in:
2025-02-02 15:30:48 -03:00
parent 06455db598
commit f234b5d84d
17 changed files with 543 additions and 749 deletions

View File

@@ -12,6 +12,9 @@ namespace PetCompanion.Data
public DbSet<Pet> Pets { get; set; }
public DbSet<PetStats> PetStats { get; set; }
public DbSet<Resources> Resources { get; set; }
public DbSet<Skill> Skills { get; set; }
public DbSet<SkillEffect> SkillEffects { get; set; }
public DbSet<PetSkill> PetSkills { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
@@ -29,6 +32,32 @@ namespace PetCompanion.Data
.HasConversion(
v => v != DateTime.MinValue ? v.ToUniversalTime() : v,
v => v != DateTime.MinValue ? DateTime.SpecifyKind(v, DateTimeKind.Utc) : v);
modelBuilder.Entity<PetSkill>()
.HasOne(ps => ps.Pet)
.WithMany(p => p.Skills)
.HasForeignKey(ps => ps.PetId);
modelBuilder.Entity<PetSkill>()
.HasOne(ps => ps.Skill)
.WithMany(s => s.PetSkills)
.HasForeignKey(ps => ps.SkillId);
modelBuilder.Entity<SkillEffect>()
.HasOne(se => se.Skill)
.WithMany(s => s.Effects)
.HasForeignKey(se => se.SkillId);
// Seed initial skills
var skills = SkillsData.GetInitialSkills();
foreach (var skill in skills)
{
modelBuilder.Entity<Skill>().HasData(skill);
foreach (var effect in skill.Effects)
{
modelBuilder.Entity<SkillEffect>().HasData(effect);
}
}
}
}
}

273
Data/SkillsData.cs Normal file
View File

@@ -0,0 +1,273 @@
using PetCompanion.Models;
namespace PetCompanion.Data
{
public static class SkillsData
{
public static IEnumerable<Skill> GetInitialSkills()
{
return new List<Skill>
{
new Skill
{
Id = 1,
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
}
}
},
new Skill
{
Id = 2,
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
}
}
},
new Skill
{
Id = 3,
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
}
}
},
new Skill
{
Id = 4,
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
}
}
},
new Skill
{
Id = 5,
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
}
}
},
new Skill
{
Id = 6,
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
}
}
},
new Skill
{
Id = 7,
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
}
}
}
};
}
}
}