Esempio n. 1
0
//
//InspectCreatureDefMessage
//
int InspectCreatureDefMessage::handleMessage(SimulatorThread *sim, CharacterServerData *pld,
		SimulatorQuery *query, CreatureInstance *creatureInstance) {

	int CDefID = GetInteger(&sim->readPtr[sim->ReadPos], sim->ReadPos);

	g_CharacterManager.GetThread("SimulatorThread::handle_inspectCreatureDef");
	CharacterData *charData = g_CharacterManager.GetPointerByID(CDefID);
	g_CharacterManager.ReleaseThread();
	if (charData != NULL) {
		/* Is a player, is it for a player in the current active instance? If so, we need
		 * appearance modifiers so use the creature instance's calculated appearance.
		 *
		 * TODO Em - I don't really like this. It makes me wonder if modifiers should
		 * be on the creature def.
		 */
		CreatureInstance* cInst =
				creatureInstance == NULL || creatureInstance->actInst == NULL ?
						NULL :
						creatureInstance->actInst->GetPlayerByCDefID(
								charData->cdef.CreatureDefID);
		if (cInst != NULL) {
			CreatureDefinition cd(charData->cdef);
			cd.css.SetAppearance(cInst->PeekAppearance().c_str());
			cd.css.SetEqAppearance(cInst->PeekAppearanceEq().c_str());
			return PrepExt_CreatureDef(sim->SendBuf, &cd);

//			std::string currentAppearance = charData->cdef.css.appearance;
//			std::string currentEqAppearance = charData->cdef.css.eq_appearance;
//			charData->cdef.css.SetAppearance(cInst->PeekAppearance().c_str());
//			charData->cdef.css.SetEqAppearance(cInst->PeekAppearanceEq().c_str());
//
//			AttemptSend(SendBuf, PrepExt_CreatureDef(SendBuf, &charData->cdef));
//
//			charData->cdef.css.SetAppearance(currentAppearance.c_str());
//			charData->cdef.css.SetEqAppearance(currentEqAppearance.c_str());
		} else
			return PrepExt_CreatureDef(sim->SendBuf, &charData->cdef);
	} else {
		CreatureDefinition *target = CreatureDef.GetPointerByCDef(CDefID);
		if (target != NULL)
			return PrepExt_CreatureDef(sim->SendBuf, target);
		else
			g_Logs.simulator->warn(
					"[%d] inspectCreatureDef: could not find ID [%d]",
					sim->InternalID, CDefID);
	}
	return 0;
}