// //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; }