Index: src/game/CreatureAI.h =================================================================== --- src/game/CreatureAI.h (revision 5626) +++ src/game/CreatureAI.h (working copy) @@ -81,6 +81,9 @@ // Called when creature is spawned or respawned (for reseting variables) virtual void JustRespawned() {} + + // Called at waypoint reached or point movement finished + virtual void MovementInform(uint32 /*MovementType*/, uint32 /*Data*/) {} }; struct SelectableAI : public FactoryHolder, public Permissible Index: src/game/Makefile.am =================================================================== --- src/game/Makefile.am (revision 5626) +++ src/game/Makefile.am (working copy) @@ -185,6 +185,8 @@ Player.h \ PlayerDump.cpp \ PlayerDump.h \ + PointMovementGenerator.cpp \ + PointMovementGenerator.h \ QueryHandler.cpp \ QuestDef.cpp \ QuestDef.h \ Index: src/game/MotionMaster.h =================================================================== --- src/game/MotionMaster.h (revision 5626) +++ src/game/MotionMaster.h (working copy) @@ -38,7 +38,8 @@ CONFUSED_MOTION_TYPE = 4, // ConfusedMovementGenerator.h TARGETED_MOTION_TYPE = 5, // TargetedMovementGenerator.h HOME_MOTION_TYPE = 6, // HomeMovementGenerator.h - FLIGHT_MOTION_TYPE = 7 // WaypointMovementGenerator.h + FLIGHT_MOTION_TYPE = 7, // WaypointMovementGenerator.h + POINT_MOTION_TYPE = 8, // PointMovementGenerator.h }; class MANGOS_DLL_SPEC MotionMaster : private std::stack Index: src/game/PointMovementGenerator.cpp =================================================================== --- src/game/PointMovementGenerator.cpp (revision 0) +++ src/game/PointMovementGenerator.cpp (revision 0) @@ -0,0 +1,61 @@ +/* +* Copyright (C) 2005-2008 MaNGOS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "PointMovementGenerator.h" +#include "Errors.h" +#include "Creature.h" +#include "CreatureAI.h" +#include "MapManager.h" +#include "DestinationHolderImp.h" + +//----- Point Movement Generator +template +void PointMovementGenerator::Initialize(T &unit) +{ + unit.StopMoving(); + Traveller traveller(unit); + i_destinationHolder.SetDestination(traveller,x,y,z); +} + +void PointMovementGenerator::MovementInform(Creature &unit) +{ + unit.AI()->MovementInform(POINT_MOTION_TYPE, id); +} + +template +bool PointMovementGenerator::Update(T &unit, const uint32 &diff) +{ + if(!&unit) + return false; + + if(unit.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNDED)) + return true; + + Traveller traveller(unit); + + i_destinationHolder.UpdateTraveller(traveller, diff, false); + + if(i_destinationHolder.HasArrived()) + { + unit.StopMoving(); + MovementInform(unit); + return false; + } + + return true; +} \ No newline at end of file Property changes on: src\game\PointMovementGenerator.cpp ___________________________________________________________________ Name: svn:eol-style + native Index: src/game/PointMovementGenerator.h =================================================================== --- src/game/PointMovementGenerator.h (revision 0) +++ src/game/PointMovementGenerator.h (revision 0) @@ -0,0 +1,55 @@ +/* +* Copyright (C) 2005-2008 MaNGOS +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef MANGOS_POINTMOVEMENTGENERATOR_H +#define MANGOS_POINTMOVEMENTGENERATOR_H + +#include "MovementGenerator.h" +#include "DestinationHolder.h" +#include "Traveller.h" +#include "FollowerReference.h" + +template +class MANGOS_DLL_SPEC PointMovementGenerator + : public MovementGeneratorMedium< T, PointMovementGenerator > +{ +public: + PointMovementGenerator(uint32 _id, float _x, float _y, float _z) : id(_id), + x(_x), y(_y), z(_z), i_nextMoveTime(0) {} + + void Initialize(T &); + void Finalize(T &) {} + void Reset(T &unit) { unit.StopMoving(); } + bool Update(T &, const uint32 &diff); + + void MovementInform(T &); + + MovementGeneratorType GetMovementGeneratorType() { return POINT_MOTION_TYPE; } + +private: + TimeTracker i_nextMoveTime; + float x,y,z; + uint32 id; + DestinationHolder< Traveller > i_destinationHolder; +}; + +//template<> +void MANGOS_DLL_SPEC PointMovementGenerator::Initialize(Creature &unit); +//template<> +bool MANGOS_DLL_SPEC PointMovementGenerator::Update(Creature &unit, const uint32 &diff); +#endif Property changes on: src\game\PointMovementGenerator.h ___________________________________________________________________ Name: svn:eol-style + native Index: src/game/WaypointMovementGenerator.cpp =================================================================== --- src/game/WaypointMovementGenerator.cpp (revision 5626) +++ src/game/WaypointMovementGenerator.cpp (working copy) @@ -37,6 +37,7 @@ #include "ObjectMgr.h" #include "Creature.h" #include "DestinationHolderImp.h" +#include "CreatureAI.h" #include @@ -98,7 +99,6 @@ tmpWPB->text[2] = text3; tmpWPB->text[3] = text4; tmpWPB->text[4] = text5; - tmpWPB->aiscript = aiscript; tmpWPB->orientation = orientation; tmpWPB->emote = emote; tmpWPB->spell = spell; @@ -218,10 +218,6 @@ { creature.SetUInt32Value(UNIT_NPC_EMOTESTATE,tmpBehavior->emote); } - if(!tmpBehavior->aiscript.empty()) - { - WPAIScript(creature, tmpBehavior->aiscript); - } //sLog.outDebug("DEBUG: tmpBehavior->text[0] TEST"); if(!tmpBehavior->text[0].empty()) { @@ -262,6 +258,7 @@ creature.SetDisplayId(tmpBehavior->model1); } tmpBehavior->HasDone = true; + MovementInform(creature); } // HasDone == false } // wpBehaviour found } // i_creature.IsStopped() @@ -304,49 +301,11 @@ return true; } -void -WaypointMovementGenerator::WPAIScript(Creature &pCreature, std::string pAiscript) +void WaypointMovementGenerator::MovementInform(Creature &unit) { - time_t curr; - tm local; - time(&curr); // get current time_t value - local=*(localtime(&curr)); // - int cT = ((local.tm_hour*100)+local.tm_min); + unit.AI()->MovementInform(WAYPOINT_MOTION_TYPE, i_currentNode); +} - sLog.outDebug("WPAIScript: %s", pAiscript.c_str()); - - if( pAiscript == "guard-sw") //demo script for WP-AI System - { - // 1423 - SW guard - // 68 - SW city guard - if((pCreature.GetEntry() == 68) || (pCreature.GetEntry() == 1423) ) - { - if(!( (cT < 1800) && (cT > 800) )) //If time not smaller than 1800 and not bigger than 800 (24 hour format) - { //try to set model of Off-hand (shield) to 0 (imo it doesn't work...) - pCreature.SetUInt32Value( UNIT_VIRTUAL_ITEM_SLOT_DISPLAY+1, 0); - pCreature.SetUInt32Value( UNIT_VIRTUAL_ITEM_INFO + 2, 234948100); - pCreature.SetUInt32Value( UNIT_VIRTUAL_ITEM_INFO + 2 + 1, 4); - - //set new Off-Hand Item as lamp - pCreature.SetUInt32Value( UNIT_VIRTUAL_ITEM_SLOT_DISPLAY+1, 7557); - pCreature.SetUInt32Value( UNIT_VIRTUAL_ITEM_INFO + 2, 385941508); - pCreature.SetUInt32Value( UNIT_VIRTUAL_ITEM_INFO + 2 + 1, 7); - } //else do it in other direction... - else - { - pCreature.SetUInt32Value( UNIT_VIRTUAL_ITEM_SLOT_DISPLAY+1, 0); - pCreature.SetUInt32Value( UNIT_VIRTUAL_ITEM_INFO + 2, 385941508); - pCreature.SetUInt32Value( UNIT_VIRTUAL_ITEM_INFO + 2 + 1, 7); - - pCreature.SetUInt32Value( UNIT_VIRTUAL_ITEM_SLOT_DISPLAY+1, 2080); - pCreature.SetUInt32Value( UNIT_VIRTUAL_ITEM_INFO + 2, 234948100); - pCreature.SetUInt32Value( UNIT_VIRTUAL_ITEM_INFO + 2 + 1, 4); - } - } - sLog.outDebug("guard-sw"); - } // guard-sw -} // WPAIScript - std::set WaypointMovementGenerator::si_waypointHolders; //----------------------------------------------------// Index: src/game/WaypointMovementGenerator.h =================================================================== --- src/game/WaypointMovementGenerator.h (revision 5626) +++ src/game/WaypointMovementGenerator.h (working copy) @@ -47,7 +47,6 @@ float orientation; uint32 model1; uint32 model2; - std::string aiscript; bool HasDone; }; @@ -90,7 +89,6 @@ public: WaypointMovementGenerator(Creature &) : i_nextMoveTime(0) {} ~WaypointMovementGenerator() { ClearWaypoints(); } - void WPAIScript(Creature &pCreature, std::string pAiscript); void Initialize(Creature &u) { i_nextMoveTime.Reset(0); // TODO: check the lower bound (0 is probably too small) @@ -100,6 +98,9 @@ void Finalize(Creature &) {} void Reset(Creature &u) { ReloadPath(u); } bool Update(Creature &u, const uint32 &diff); + + void MovementInform(Creature &); + MovementGeneratorType GetMovementGeneratorType() { return WAYPOINT_MOTION_TYPE; } // now path movement implmementation Index: win/VC71/game.vcproj =================================================================== --- win/VC71/game.vcproj (revision 5626) +++ win/VC71/game.vcproj (working copy) @@ -640,6 +640,12 @@ RelativePath="..\..\src\game\Player.h"> + + + + + + + + Index: win/VC90/game.vcproj =================================================================== --- win/VC90/game.vcproj (revision 5626) +++ win/VC90/game.vcproj (working copy) @@ -1,7 +1,7 @@ + + + +