From 6cf8220f28001c9b044cf7dc2717c882fe2d2ecc Mon Sep 17 00:00:00 2001 From: Will Rogers Date: Tue, 10 Apr 2012 20:41:54 -0400 Subject: [PATCH 1/2] Add SetUnitLabors protobuf API. --- library/RemoteTools.cpp | 16 ++++++++++++++++ library/proto/Basic.proto | 6 ++++++ library/proto/BasicApi.proto | 7 ++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/library/RemoteTools.cpp b/library/RemoteTools.cpp index 00344d6a2..7f86134b1 100644 --- a/library/RemoteTools.cpp +++ b/library/RemoteTools.cpp @@ -614,6 +614,20 @@ static command_result ListSquads(color_ostream &stream, return CR_OK; } +static command_result SetUnitLabors(color_ostream &stream, const SetUnitLaborsIn *in) +{ + for (size_t i = 0; i < in->change_size(); i++) + { + auto change = in->change(i); + auto unit = df::unit::find(change.unit_id()); + + if (unit) + unit->status.labors[change.labor()] = change.value(); + } + + return CR_OK; +} + CoreService::CoreService() { suspend_depth = 0; @@ -637,6 +651,8 @@ CoreService::CoreService() { addFunction("ListMaterials", ListMaterials, SF_CALLED_ONCE); addFunction("ListUnits", ListUnits); addFunction("ListSquads", ListSquads); + + addFunction("SetUnitLabors", SetUnitLabors); } CoreService::~CoreService() diff --git a/library/proto/Basic.proto b/library/proto/Basic.proto index 246fba22e..64eaea8eb 100755 --- a/library/proto/Basic.proto +++ b/library/proto/Basic.proto @@ -188,3 +188,9 @@ message BasicSquadInfo { // Member histfig ids: repeated sint32 members = 4; }; + +message UnitLaborState { + required int32 unit_id = 1; + required int32 labor = 2; + required bool value = 3; +}; diff --git a/library/proto/BasicApi.proto b/library/proto/BasicApi.proto index 3072f9cad..a5a07aa1c 100755 --- a/library/proto/BasicApi.proto +++ b/library/proto/BasicApi.proto @@ -99,4 +99,9 @@ message ListUnitsOut { message ListSquadsIn {} message ListSquadsOut { repeated BasicSquadInfo value = 1; -} +}; + +// RPC SetUnitLabors : SetUnitLaborsIn -> EmptyMessage +message SetUnitLaborsIn { + repeated UnitLaborState change = 1; +}; From 8c40a27ea03f80419088e022e2675ac64d4bb962 Mon Sep 17 00:00:00 2001 From: Will Rogers Date: Tue, 10 Apr 2012 20:42:23 -0400 Subject: [PATCH 2/2] Add unit_misc_trait list to BasicUnitInfo protobuf API. --- library/RemoteTools.cpp | 14 ++++++++++++++ library/proto/Basic.proto | 9 +++++++++ 2 files changed, 23 insertions(+) diff --git a/library/RemoteTools.cpp b/library/RemoteTools.cpp index 7f86134b1..c8af46cbf 100644 --- a/library/RemoteTools.cpp +++ b/library/RemoteTools.cpp @@ -61,6 +61,7 @@ POSSIBILITY OF SUCH DAMAGE. #include "df/world.h" #include "df/world_data.h" #include "df/unit.h" +#include "df/unit_misc_trait.h" #include "df/unit_soul.h" #include "df/unit_skill.h" #include "df/material.h" @@ -316,6 +317,19 @@ void DFHack::describeUnit(BasicUnitInfo *info, df::unit *unit, } } + if (mask && mask->misc_traits()) + { + auto &vec = unit -> status.misc_traits; + + for (size_t i = 0; i < vec.size(); i++) + { + auto trait = vec[i]; + auto item = info->add_misc_traits(); + item->set_id(trait->id); + item->set_value(trait->value); + } + } + if (unit->curse.add_tags1.whole || unit->curse.add_tags2.whole || unit->curse.rem_tags1.whole || diff --git a/library/proto/Basic.proto b/library/proto/Basic.proto index 64eaea8eb..c387bef01 100755 --- a/library/proto/Basic.proto +++ b/library/proto/Basic.proto @@ -130,6 +130,11 @@ message SkillInfo { required int32 experience = 3; }; +message UnitMiscTrait { + required int32 id = 1; + required int32 value = 2; +}; + message BasicUnitInfo { required int32 unit_id = 1; @@ -166,6 +171,9 @@ message BasicUnitInfo { // IF mask.skills: repeated SkillInfo skills = 12; + // IF mask.misc_traits: + repeated UnitMiscTrait misc_traits = 24; + optional UnitCurseInfo curse = 16; repeated int32 burrows = 21; @@ -175,6 +183,7 @@ message BasicUnitInfoMask { optional bool labors = 1 [default = false]; optional bool skills = 2 [default = false]; optional bool profession = 3 [default = false]; + optional bool misc_traits = 4 [default = false]; }; message BasicSquadInfo {