public void SendSpells(Creature npc, Player player, LocaleConstant locale) { float reputationDiscount = player.GetReputationPriceDiscount(npc); TrainerList trainerList = new TrainerList(); trainerList.TrainerGUID = npc.GetGUID(); trainerList.TrainerType = (int)_type; trainerList.TrainerID = (int)_id; trainerList.Greeting = GetGreeting(locale); foreach (TrainerSpell trainerSpell in _spells) { if (!player.IsSpellFitByClassAndRace(trainerSpell.SpellId)) { continue; } TrainerListSpell trainerListSpell = new TrainerListSpell(); trainerListSpell.SpellID = trainerSpell.SpellId; trainerListSpell.MoneyCost = (uint)(trainerSpell.MoneyCost * reputationDiscount); trainerListSpell.ReqSkillLine = trainerSpell.ReqSkillLine; trainerListSpell.ReqSkillRank = trainerSpell.ReqSkillRank; trainerListSpell.ReqAbility = trainerSpell.ReqAbility.ToArray(); trainerListSpell.Usable = GetSpellState(player, trainerSpell); trainerListSpell.ReqLevel = trainerSpell.ReqLevel; trainerList.Spells.Add(trainerListSpell); } player.SendPacket(trainerList); }
void SendTeachFailure(Creature npc, Player player, uint spellId, TrainerFailReason reason) { TrainerBuyFailed trainerBuyFailed = new TrainerBuyFailed(); trainerBuyFailed.TrainerGUID = npc.GetGUID(); trainerBuyFailed.SpellID = spellId; trainerBuyFailed.TrainerFailedReason = reason; player.SendPacket(trainerBuyFailed); }
void _RewardKillCredit(Player player) { // 4.4. Give kill credit (player must not be in group, or he must be alive or without corpse). if (!_group || player.IsAlive() || player.GetCorpse() == null) { Creature target = _victim.ToCreature(); if (target != null) { player.KilledMonster(target.GetCreatureTemplate(), target.GetGUID()); player.UpdateCriteria(CriteriaTypes.KillCreatureType, (ulong)target.GetCreatureType(), 1, 0, target); } } }
public Creature CreateNPCPassenger(ulong guid, CreatureData data) { Map map = GetMap(); Creature creature = Creature.CreateCreatureFromDB(guid, map, false); if (!creature) { return(null); } float x = data.posX; float y = data.posY; float z = data.posZ; float o = data.orientation; creature.SetTransport(this); creature.m_movementInfo.transport.guid = GetGUID(); creature.m_movementInfo.transport.pos.Relocate(x, y, z, o); creature.m_movementInfo.transport.seat = -1; CalculatePassengerPosition(ref x, ref y, ref z, ref o); creature.Relocate(x, y, z, o); creature.SetHomePosition(creature.GetPositionX(), creature.GetPositionY(), creature.GetPositionZ(), creature.GetOrientation()); creature.SetTransportHomePosition(creature.m_movementInfo.transport.pos); // @HACK - transport models are not added to map's dynamic LoS calculations // because the current GameObjectModel cannot be moved without recreating creature.AddUnitState(UnitState.IgnorePathfinding); if (!creature.IsPositionValid()) { Log.outError(LogFilter.Transport, "Creature (guidlow {0}, entry {1}) not created. Suggested coordinates aren't valid (X: {2} Y: {3})", creature.GetGUID().ToString(), creature.GetEntry(), creature.GetPositionX(), creature.GetPositionY()); return(null); } PhasingHandler.InitDbPhaseShift(creature.GetPhaseShift(), data.phaseUseFlags, data.phaseId, data.phaseGroup); PhasingHandler.InitDbVisibleMapId(creature.GetPhaseShift(), data.terrainSwapMap); if (!map.AddToMap(creature)) { return(null); } _staticPassengers.Add(creature); Global.ScriptMgr.OnAddCreaturePassenger(this, creature); return(creature); }
public Creature CreateNPCPassenger(ulong guid, CreatureData data) { Map map = GetMap(); Creature creature = new Creature(); if (!creature.LoadCreatureFromDB(guid, map, false)) { return(null); } float x = data.posX; float y = data.posY; float z = data.posZ; float o = data.orientation; creature.SetTransport(this); creature.m_movementInfo.transport.guid = GetGUID(); creature.m_movementInfo.transport.pos.Relocate(x, y, z, o); creature.m_movementInfo.transport.seat = -1; CalculatePassengerPosition(ref x, ref y, ref z, ref o); creature.Relocate(x, y, z, o); creature.SetHomePosition(creature.GetPositionX(), creature.GetPositionY(), creature.GetPositionZ(), creature.GetOrientation()); creature.SetTransportHomePosition(creature.m_movementInfo.transport.pos); // @HACK - transport models are not added to map's dynamic LoS calculations // because the current GameObjectModel cannot be moved without recreating creature.AddUnitState(UnitState.IgnorePathfinding); if (!creature.IsPositionValid()) { Log.outError(LogFilter.Transport, "Creature (guidlow {0}, entry {1}) not created. Suggested coordinates aren't valid (X: {2} Y: {3})", creature.GetGUID().ToString(), creature.GetEntry(), creature.GetPositionX(), creature.GetPositionY()); return(null); } if (data.phaseid != 0) { creature.SetInPhase(data.phaseid, false, true); } else if (data.phaseGroup != 0) { foreach (var phase in Global.DB2Mgr.GetPhasesForGroup(data.phaseGroup)) { creature.SetInPhase(phase, false, true); } } else { creature.CopyPhaseFrom(this); } if (!map.AddToMap(creature)) { return(null); } _staticPassengers.Add(creature); Global.ScriptMgr.OnAddCreaturePassenger(this, creature); return(creature); }
public static void AddCreatureToGroup(uint groupId, Creature member) { Map map = member.GetMap(); if (!map) { return; } var creatureGroup = map.CreatureGroupHolder.LookupByKey(groupId); //Add member to an existing group if (creatureGroup != null) { Log.outDebug(LogFilter.Unit, "Group found: {0}, inserting creature GUID: {1}, Group InstanceID {2}", groupId, member.GetGUID().ToString(), member.GetInstanceId()); creatureGroup.AddMember(member); } //Create new group else { Log.outDebug(LogFilter.Unit, "Group not found: {0}. Creating new group.", groupId); CreatureGroup group = new CreatureGroup(groupId); map.CreatureGroupHolder[groupId] = group; group.AddMember(member); } }
public void AddMember(Creature member) { Log.outDebug(LogFilter.Unit, "CreatureGroup.AddMember: Adding unit GUID: {0}.", member.GetGUID().ToString()); //Check if it is a leader if (member.GetSpawnId() == m_groupID) { Log.outDebug(LogFilter.Unit, "Unit GUID: {0} is formation leader. Adding group.", member.GetGUID().ToString()); m_leader = member; } m_members[member] = FormationMgr.CreatureGroupMap.LookupByKey(member.GetSpawnId()); member.SetFormation(this); }