diff --git a/BuildItems.cpp b/BuildItems.cpp index 6be500f..842111b 100644 --- a/BuildItems.cpp +++ b/BuildItems.cpp @@ -85,7 +85,8 @@ PkmnLib::Library::ItemLibrary* BuildItems::Build(const std::string& path) { break; case json::value_t ::string: { auto s = p.get(); - parameters.Append(new CreatureLib::Library::EffectParameter(ArbUt::StringView(s.c_str(), s.length()))); + parameters.Append( + new CreatureLib::Library::EffectParameter(ArbUt::StringView(s.c_str(), s.length()))); break; } default: continue; @@ -96,9 +97,44 @@ PkmnLib::Library::ItemLibrary* BuildItems::Build(const std::string& path) { 100, ArbUt::StringView(effectName.get().c_str()), parameters); } + CreatureLib::Library::SecondaryEffect* battleEffect = nullptr; + auto& battleEffectJson = val["battleEffect"]; + if (battleEffectJson != nullptr) { + auto& effectName = battleEffectJson["name"]; + auto& parametersJson = battleEffectJson["parameters"]; + ArbUt::List parameters; + if (parametersJson != nullptr) { + for (auto& kv : parametersJson.items()) { + auto& p = kv.value(); + auto t = p.type(); + switch (t) { + case json::value_t::boolean: + parameters.Append(new CreatureLib::Library::EffectParameter(p.get())); + break; + case json::value_t::number_integer: + case json::value_t::number_unsigned: + parameters.Append(new CreatureLib::Library::EffectParameter(p.get())); + break; + case json::value_t::number_float: + parameters.Append(new CreatureLib::Library::EffectParameter(p.get())); + break; + case json::value_t ::string: { + auto s = p.get(); + parameters.Append( + new CreatureLib::Library::EffectParameter(ArbUt::StringView(s.c_str(), s.length()))); + break; + } + default: continue; + } + } + } + battleEffect = new CreatureLib::Library::SecondaryEffect( + 100, ArbUt::StringView(effectName.get().c_str()), parameters); + } + auto item = new PkmnLib::Library::Item(ArbUt::StringView(_name.get().c_str()), itemType, CreatureLib::Library::BattleItemCategory::None, _price.get(), - effect, flags, _flingPower.get()); + effect, battleEffect, flags, _flingPower.get()); lib->Insert(item->GetName(), item); } return lib;