From 7d684d12b474c98cb3b73919349474a92f5c8b45 Mon Sep 17 00:00:00 2001 From: sizeak Date: Mon, 9 Aug 2010 19:28:35 +0100 Subject: [PATCH] Job writing for mood material editing --- library/include/dfhack/modules/Creatures.h | 2 +- library/modules/Creatures.cpp | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/library/include/dfhack/modules/Creatures.h b/library/include/dfhack/modules/Creatures.h index 1ba4d36af..1686be281 100644 --- a/library/include/dfhack/modules/Creatures.h +++ b/library/include/dfhack/modules/Creatures.h @@ -380,7 +380,6 @@ namespace DFHack int32_t GetDwarfCivId ( void ); /* Write Functions */ - // write labors of a creature (for Dwarf Therapist) 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); @@ -390,6 +389,7 @@ namespace DFHack bool WriteTraits(const uint32_t index, const t_soul &soul); bool WriteMood(const uint32_t index, const uint16_t mood); bool WriteMoodSkill(const uint32_t index, const uint16_t moodSkill); + bool WriteJob(const t_creature * furball, std::vector const& mat); bool WritePos(const uint32_t index, const t_creature &creature); bool WriteCiv(const uint32_t index, const int32_t civ); diff --git a/library/modules/Creatures.cpp b/library/modules/Creatures.cpp index 0edb713f3..2e9e319cd 100644 --- a/library/modules/Creatures.cpp +++ b/library/modules/Creatures.cpp @@ -519,6 +519,27 @@ bool Creatures::WriteMoodSkill(const uint32_t index, const uint16_t moodSkill) return true; } +bool Creatures::WriteJob(const t_creature * furball, std::vector const& mat) +{ + unsigned int i; + if(!d->Inited) return false; + if(!furball->current_job.active) return false; + Process * p = d->owner; + memory_info * minfo = d->d->offset_descriptor; + + DfVector cmats(p, furball->current_job.occupationPtr + minfo->getOffset("job_materials_vector")); + + for(i=0;iwriteWord(cmats[i] + minfo->getOffset("job_material_maintype"), mat[i].itemType); + p->writeWord(cmats[i] + minfo->getOffset("job_material_sectype1"), mat[i].subType); + p->writeWord(cmats[i] + minfo->getOffset("job_material_sectype2"), mat[i].subIndex); + p->writeDWord(cmats[i] + minfo->getOffset("job_material_sectype3"), mat[i].index); + p->writeDWord(cmats[i] + minfo->getOffset("job_material_flags"), mat[i].flags); + } + return true; +} + bool Creatures::WritePos(const uint32_t index, const t_creature &creature) { if(!d->Started)