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

Method readNpcVariant

source/game/StarNpcDatabase.cpp:183–244  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

181}
182
183NpcVariant NpcDatabase::readNpcVariant(ByteArray const& data, NetCompatibilityRules rules) const {
184 DataStreamBuffer ds(data);
185 ds.setStreamCompatibilityVersion(rules);
186
187 NpcVariant variant;
188
189 ds.read(variant.species);
190 ds.read(variant.typeName);
191 ds.read(variant.level);
192 ds.read(variant.seed);
193 ds.read(variant.overrides);
194
195 auto config = buildConfig(variant.typeName, variant.overrides);
196
197 variant.scripts = jsonToStringList(config.get("scripts"));
198 variant.scriptConfig = config.get("scriptConfig");
199
200 ds.read(variant.initialScriptDelta);
201 ds.read(variant.humanoidIdentity);
202
203 auto speciesDefinition = Root::singleton().speciesDatabase()->species(variant.species);
204 if (config.contains("humanoidConfig"))
205 variant.humanoidConfig = Root::singleton().assets()->json(config.getString("humanoidConfig"));
206 else
207 variant.humanoidConfig = speciesDefinition->humanoidConfig();
208
209 variant.movementParameters =
210 jsonMerge(variant.humanoidConfig.get("movementParameters"), config.get("movementParameters", {}));
211 variant.statusControllerSettings = config.get("statusControllerSettings");
212
213 auto functionDatabase = Root::singleton().functionDatabase();
214 float powerMultiplierModifier =
215 functionDatabase->function("npcLevelPowerMultiplierModifier")->evaluate(variant.level);
216 float protectionMultiplier = functionDatabase->function("npcLevelProtectionMultiplier")->evaluate(variant.level);
217 float maxHealthMultiplier = functionDatabase->function("npcLevelHealthMultiplier")->evaluate(variant.level);
218 float maxEnergyMultiplier = functionDatabase->function("npcLevelEnergyMultiplier")->evaluate(variant.level);
219
220 variant.innateStatusEffects =
221 config.get("innateStatusEffects", JsonArray()).toArray().transformed(jsonToPersistentStatusEffect);
222 variant.innateStatusEffects.append(StatModifier(StatValueModifier{"powerMultiplier", powerMultiplierModifier}));
223 variant.innateStatusEffects.append(StatModifier(StatBaseMultiplier{"protection", protectionMultiplier}));
224 variant.innateStatusEffects.append(StatModifier(StatBaseMultiplier{"maxHealth", maxHealthMultiplier}));
225 variant.innateStatusEffects.append(StatModifier(StatBaseMultiplier{"maxEnergy", maxEnergyMultiplier}));
226
227 variant.touchDamageConfig = config.get("touchDamage", {});
228
229 ds.readMapContainer(variant.items);
230
231 variant.disableWornArmor = config.getBool("disableWornArmor", true);
232 variant.dropPools = jsonToStringList(config.get("dropPools", JsonArray{}));
233
234 ds.read(variant.persistent);
235 ds.read(variant.keepAlive);
236 ds.read(variant.damageTeam);
237 ds.read(variant.damageTeamType);
238
239 variant.nametagColor = jsonToVec3B(config.get("nametagColor", JsonArray{255, 255, 255}));
240

Callers

nothing calls this directly

Calls 15

jsonToStringListFunction · 0.85
singletonClass · 0.85
jsonToVec3BFunction · 0.85
EntitySplashConfigClass · 0.85
speciesDatabaseMethod · 0.80
jsonMethod · 0.80
assetsMethod · 0.80
getStringMethod · 0.80
humanoidConfigMethod · 0.80
functionDatabaseMethod · 0.80
functionMethod · 0.80

Tested by

no test coverage detected