diff --git a/library/include/dfhack/modules/Creatures.h b/library/include/dfhack/modules/Creatures.h index 2e27ff3b9..07d457d1b 100644 --- a/library/include/dfhack/modules/Creatures.h +++ b/library/include/dfhack/modules/Creatures.h @@ -381,6 +381,7 @@ namespace DFHack bool WriteLabors(const uint32_t index, uint8_t labors[NUM_CREATURE_LABORS]); bool WriteHappiness(const uint32_t index, const uint32_t happinessValue); bool WriteFlags(const uint32_t index, const uint32_t flags1, const uint32_t flags2); + bool WriteSkills(const uint32_t index, t_soul &soul); private: struct Private; diff --git a/library/modules/Creatures.cpp b/library/modules/Creatures.cpp index e9193e9dc..467ddcd15 100644 --- a/library/modules/Creatures.cpp +++ b/library/modules/Creatures.cpp @@ -385,6 +385,30 @@ bool Creatures::WriteFlags(const uint32_t index, return true; } +bool Creatures::WriteSkills(const uint32_t index, t_soul &soul) +{ + if(!d->Started) + return false; + + uint32_t temp = d->p_cre->at (index); + Process * p = d->owner; + uint32_t souloff = p->readDWord(temp + d->creatures.default_soul_offset); + + if(!souloff) + return false; + + DfVector skills(p, souloff + d->creatures.soul_skills_vector_offset); + + for (uint32_t i=0; iwriteByte(temp2 + 4, soul.skills[i].rating); + p->writeWord(temp2 + 8, soul.skills[i].experience); + } + + return true; +} + uint32_t Creatures::GetDwarfRaceIndex() { if(!d->Inited) return 0;