Spawn::Spawn(uint16_t id, int16_t x, int16_t y, int16_t z, int16_t deltaX, int16_t deltaY, int16_t deltaZ, int8_t heading, int8_t deltaHeading, uint8_t animation) : Item(tSpawn, id) { // apply the unknown mob values m_name = "unknown"; setNPC(SPAWN_NPC_UNKNOWN); // set what is known setPos(x, y, z); setDeltas(deltaX, deltaY, deltaZ); setHeading(heading, deltaHeading); setAnimation(animation); // initialize what isn't to 0 setPetOwnerID(0); setLight(0); setGender(0); setDeity(0); setRace(0); setClassVal(0); setHP(0); setMaxHP(0); setLevel(0); for (int i = 0; i < tNumWearSlots; i++) setEquipment(i, 0); setTypeflag(0); setConsidered(false); // turn on auto delete for the track list m_spawnTrackList.setAutoDelete(true); }
Spawn::Spawn(Spawn& s, uint16_t id) : Item(tSpawn, id) { setName(s.name()); setLastName(s.lastName()); Item::setPoint(s.x(), s.y(), s.z()); setPetOwnerID(s.petOwnerID()); setLight(s.light()); setGender(s.gender()); setDeity(s.deity()); setRace(s.race()); setClassVal(s.classVal()); setHP(s.HP()); setMaxHP(s.maxHP()); setGuildID(s.GuildID()); setLevel(s.level()); for (int i = 0; i <= tLastCoreWearSlot; i++) setEquipment(i, s.equipment(i)); setEquipment(tUnknown1, 0); setTypeflag(s.typeflag()); setNPC(s.NPC()); setAnimation(s.animation()); setDeltas(s.deltaX(), s.deltaY(), s.deltaZ()); setHeading(s.heading(), s.deltaHeading()); setConsidered(s.considered()); // the new copy will own the spawn track list m_spawnTrackList.setAutoDelete(false); m_spawnTrackList = s.m_spawnTrackList; s.m_spawnTrackList.setAutoDelete(false); m_spawnTrackList.setAutoDelete(true); }
//---------------------------------------------------------------------- // Spawn Spawn::Spawn() : Item(tSpawn, 0) { m_name = "fake"; setNPC(SPAWN_NPC_UNKNOWN); Item::setPos(0, 0, 0); setDeltas(0, 0, 0); setHeading(0, 0); setAnimation(0); setPetOwnerID(0); setLight(0); setGender(0); setDeity(0); setRace(0); setClassVal(0); setHP(0); setMaxHP(0); setGuildID(0xffff); setGuildTag(NULL); setLevel(0); setTypeflag(0); for (int i = 0; i < tNumWearSlots; i++) setEquipment(i, 0); // just clear the considred flag since data would be outdated setConsidered(false); // finally, note when this update occurred. updateLast(); }
Spawn::Spawn(Spawn* s, uint16_t id) : Item(tSpawn, id) { setName(s->name()); setLastName(s->lastName()); Item::setPoint(s->x(), s->y(), s->z()); setPetOwnerID(s->petOwnerID()); setLight(s->light()); setGender(s->gender()); setDeity(s->deity()); setRace(s->race()); setClassVal(s->classVal()); setHP(s->HP()); setMaxHP(s->maxHP()); setGuildID(s->guildID()); setLevel(s->level()); for (int i = 0; i <= tLastCoreWearSlot; i++) setEquipment(i, s->equipment(i)); setEquipment(tUnknown1, SlotEmpty); setTypeflag(s->typeflag()); setGM(s->gm()); setNPC(s->NPC()); setAnimation(s->animation()); setDeltas(s->deltaX(), s->deltaY(), s->deltaZ()); setHeading(s->heading(), s->deltaHeading()); setConsidered(s->considered()); // the new copy will own the spawn track list m_spawnTrackList.setAutoDelete(false); m_spawnTrackList = s->m_spawnTrackList; s->m_spawnTrackList.setAutoDelete(false); m_spawnTrackList.setAutoDelete(true); }
void TotemSummon::Load(CreatureProto* proto, Unit* owner, LocationVector & position, uint32 spellid, int32 summonslot) { Summon::Load(proto, owner, position, spellid, summonslot); TotemDisplayIdEntry* totemdisplay = TotemDisplayIdStorage.LookupEntry(creature_info->Male_DisplayID); uint32 displayID = 0; if(totemdisplay != NULL) { switch(owner->getRace()) { case RACE_DRAENEI: displayID = totemdisplay->DraeneiId; break; case RACE_TROLL: displayID = totemdisplay->TrollId; break; case RACE_ORC: displayID = totemdisplay->OrcId; break; } } if(displayID == 0) displayID = creature_info->Male_DisplayID; // Set up the creature. SetMaxPower(POWER_TYPE_FOCUS, owner->getLevel() * 30); SetPower(POWER_TYPE_FOCUS, owner->getLevel() * 30); setLevel(owner->getLevel()); setRace(0); setClass(1); setGender(2); SetPowerType(1); SetBaseAttackTime(MELEE, 2000); SetBaseAttackTime(OFFHAND, 2000); SetBoundingRadius(1.0f); SetCombatReach(1.0f); SetDisplayId(displayID); SetNativeDisplayId(creature_info->Male_DisplayID); SetCastSpeedMod(1.0f); SetUInt32Value(OBJECT_FIELD_DYNAMIC_FLAGS, 0); InheritSMMods(owner); for(uint8 school = 0; school < SCHOOL_COUNT; school++) { ModDamageDone[ school ] = owner->GetDamageDoneMod(school); HealDoneMod[ school ] = owner->HealDoneMod[ school ]; } m_aiInterface->Init(this, AITYPE_TOTEM, MOVEMENTTYPE_NONE, owner); DisableAI(); }
void Spawn::update(const spawnStruct* s) { if (m_name.find(Spawn_Corpse_Designator) == -1) { setName(s->name); setLastName(s->lastName); } setPos(s->x >> 3, s->y >> 3, s->z >> 3); setPetOwnerID(s->petOwnerId); setLight(s->light); setGender(s->gender); setDeity(s->deity); setRace(s->race); setClassVal(s->class_); setHP(s->curHp); //setMaxHP(s->maxHp); setMaxHP(s->curHp); //maxHp is no longer part of the struct setGuildID(s->guildID); setLevel(s->level); for (int i = 0; i <= tLastCoreWearSlot; i++) setEquipment(i, s->equipment[i]); setEquipment(tUnknown1, 0); setTypeflag(s->bodytype); setGM(s->gm); // If it is a corpse with Unknown (NPC) religion. if ((s->NPC == SPAWN_PC_CORPSE) && (s->deity == DEITY_UNKNOWN)) setNPC(SPAWN_NPC_CORPSE); // it's a dead monster else setNPC(s->NPC); // otherwise it is what it is setAnimation(s->animation); // only non corpses and things with animation != 66 move if (!isCorpse() && (s->animation != 66)) { setDeltas(s->deltaX >> 2, s->deltaY >> 2, s->deltaZ >> 2); setHeading(s->heading, s->deltaHeading); }
void Monster::setMonsterType(TYPE_OF_CHARACTER_ID type) { deleteAllSkills(); if (!monsterDescriptions->exists(type)) { throw unknownIDException(); } const auto &monsterdef = (*monsterDescriptions)[type]; // set attributes setAttribute(Character::luck, Random::uniform(monsterdef.attributes.luck.first, monsterdef.attributes.luck.second)); setAttribute(Character::strength, Random::uniform(monsterdef.attributes.strength.first, monsterdef.attributes.strength.second)); setAttribute(Character::dexterity, Random::uniform(monsterdef.attributes.dexterity.first, monsterdef.attributes.dexterity.second)); setAttribute(Character::constitution, Random::uniform(monsterdef.attributes.constitution.first, monsterdef.attributes.constitution.second)); setAttribute(Character::agility, Random::uniform(monsterdef.attributes.agility.first, monsterdef.attributes.agility.second)); setAttribute(Character::intelligence, Random::uniform(monsterdef.attributes.intelligence.first, monsterdef.attributes.intelligence.second)); setAttribute(Character::perception, Random::uniform(monsterdef.attributes.perception.first, monsterdef.attributes.perception.second)); setAttribute(Character::willpower, Random::uniform(monsterdef.attributes.willpower.first, monsterdef.attributes.willpower.second)); setAttribute(Character::essence, Random::uniform(monsterdef.attributes.essence.first, monsterdef.attributes.essence.second)); setAttribute(Character::hitpoints, monsterdef.hitpoints); setAttribute(Character::height, Random::uniform(monsterdef.minsize, monsterdef.maxsize)); // set skills for (const auto &skill: monsterdef.skills) { increaseSkill(skill.first, Random::uniform(skill.second.first, skill.second.second)); } // add items for (const auto &item: monsterdef.items) { auto inventorySlot = item.first; auto possibleItems = item.second; int numberOfPossibleItems = possibleItems.size(); if (numberOfPossibleItems > 0) { int selectedItemIndex; if (numberOfPossibleItems == 1) { selectedItemIndex = 0; } else { selectedItemIndex = Random::uniform(0, numberOfPossibleItems - 1); } auto &selectedItem = possibleItems[selectedItemIndex]; items[inventorySlot].setId(selectedItem.itemid); items[inventorySlot].setNumber(Random::uniform(selectedItem.amount.first, selectedItem.amount.second)); items[inventorySlot].setWear(selectedItem.AgeingSpeed); } } SetMovement(monsterdef.movement); setRace(monsterdef.race); _canAttack = monsterdef.canattack; setName(monsterdef.nameEn); nameDe = monsterdef.nameDe; const auto raceConfiguration = raceTypes->getRandomRaceConfiguration(monsterdef.race); setAttribute(sex, raceConfiguration.subType); setHair(raceConfiguration.hair); setBeard(raceConfiguration.beard); setHairColour(raceConfiguration.hairColour); setSkinColour(raceConfiguration.skinColour); setSkinColour(raceConfiguration.skinColour); }