MCPcopy Create free account
hub / github.com/OpenStarbound/OpenStarbound / readNpcVariantFromJson

Method readNpcVariantFromJson

source/game/StarNpcDatabase.cpp:261–319  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

259}
260
261NpcVariant NpcDatabase::readNpcVariantFromJson(Json const& data) const {
262 NpcVariant variant;
263
264 variant.species = data.getString("species");
265 variant.typeName = data.getString("typeName");
266 variant.level = data.getFloat("level");
267 variant.seed = data.getUInt("seed");
268 variant.overrides = data.get("overrides");
269
270 auto config = buildConfig(variant.typeName, variant.overrides);
271
272 variant.scripts = jsonToStringList(config.get("scripts"));
273 variant.scriptConfig = config.get("scriptConfig");
274
275 variant.initialScriptDelta = data.getInt("initialScriptDelta");
276 variant.humanoidIdentity = HumanoidIdentity(data.get("humanoidIdentity"));
277
278 auto speciesDefinition = Root::singleton().speciesDatabase()->species(variant.species);
279 if (config.contains("humanoidConfig"))
280 variant.humanoidConfig = Root::singleton().assets()->json(config.getString("humanoidConfig"));
281 else
282 variant.humanoidConfig = speciesDefinition->humanoidConfig();
283
284 variant.movementParameters =
285 jsonMerge(variant.humanoidConfig.get("movementParameters"), config.get("movementParameters", {}));
286 variant.statusControllerSettings = config.get("statusControllerSettings", {});
287
288 auto functionDatabase = Root::singleton().functionDatabase();
289 float powerMultiplierModifier =
290 functionDatabase->function("npcLevelPowerMultiplierModifier")->evaluate(variant.level);
291 float protectionMultiplier = functionDatabase->function("npcLevelProtectionMultiplier")->evaluate(variant.level);
292 float maxHealthMultiplier = functionDatabase->function("npcLevelHealthMultiplier")->evaluate(variant.level);
293 float maxEnergyMultiplier = functionDatabase->function("npcLevelEnergyMultiplier")->evaluate(variant.level);
294
295 variant.innateStatusEffects =
296 config.get("innateStatusEffects", JsonArray()).toArray().transformed(jsonToPersistentStatusEffect);
297 variant.innateStatusEffects.append(StatModifier(StatValueModifier{"powerMultiplier", powerMultiplierModifier}));
298 variant.innateStatusEffects.append(StatModifier(StatBaseMultiplier{"protection", protectionMultiplier}));
299 variant.innateStatusEffects.append(StatModifier(StatBaseMultiplier{"maxHealth", maxHealthMultiplier}));
300 variant.innateStatusEffects.append(StatModifier(StatBaseMultiplier{"maxEnergy", maxEnergyMultiplier}));
301
302 variant.touchDamageConfig = config.get("touchDamage", {});
303
304 variant.items = jsonToMapV<StringMap<ItemDescriptor>>(data.get("items"), ItemDescriptor::loadStore);
305
306 variant.disableWornArmor = config.getBool("disableWornArmor", true);
307 variant.dropPools = jsonToStringList(config.get("dropPools", JsonArray{}));
308
309 variant.persistent = data.getBool("persistent");
310 variant.keepAlive = data.getBool("keepAlive");
311 variant.damageTeam = data.getUInt("damageTeam");
312 variant.damageTeamType = TeamTypeNames.getLeft(data.getString("damageTeamType"));
313
314 variant.nametagColor = jsonToVec3B(config.get("nametagColor", JsonArray{255, 255, 255}));
315
316 variant.splashConfig = EntitySplashConfig(config.get("splashConfig"));
317
318 return variant;

Callers

nothing calls this directly

Calls 15

jsonToStringListFunction · 0.85
HumanoidIdentityClass · 0.85
singletonClass · 0.85
jsonToVec3BFunction · 0.85
EntitySplashConfigClass · 0.85
getStringMethod · 0.80
getFloatMethod · 0.80
getUIntMethod · 0.80
getIntMethod · 0.80
speciesDatabaseMethod · 0.80
jsonMethod · 0.80
assetsMethod · 0.80

Tested by

no test coverage detected