Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Server Code Submissions

 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
  #1  
Old 06-04-2010, 09:12 AM
joligario's Avatar
joligario
Developer
 
Join Date: Mar 2003
Posts: 1,498
Default COMMITTED: Grid Waypoints

Changes which allow the mob AI to use headings from the grid entries table. Also changes to the #wp and #wpadd commands to save heading data when adding a new grid entry.

zone/command.cpp
Code:
Index: zone/command.cpp
===================================================================
--- zone/command.cpp	(revision 1520)
+++ zone/command.cpp	(working copy)
@@ -2433,7 +2433,7 @@
 	if (strcasecmp("add",sep->arg[1]) == 0) {
 		if (wp == 0) //AndMetal: default to highest if it's left blank, or we enter 0
 			wp = database.GetHighestWaypoint(zone->GetZoneID(), atoi(sep->arg[2])) + 1;
-		database.AddWP(c, atoi(sep->arg[2]),wp, c->GetX(), c->GetY(), c->GetZ(), atoi(sep->arg[3]),zone->GetZoneID());
+		database.AddWP(c, atoi(sep->arg[2]),wp, c->GetX(), c->GetY(), c->GetZ(), atoi(sep->arg[3]),zone->GetZoneID(), c->GetHeading());
 	}
 	else if (strcasecmp("delete",sep->arg[1]) == 0)
 		database.DeleteWaypoint(c, atoi(sep->arg[2]),wp,zone->GetZoneID());
@@ -5955,7 +5955,7 @@
 				return;
 			}
 		}
-		int32 tmp_grid = database.AddWPForSpawn(c, s2info->GetID(), c->GetX(),c->GetY(),c->GetZ(), pause, type1, type2, zone->GetZoneID());
+		int32 tmp_grid = database.AddWPForSpawn(c, s2info->GetID(), c->GetX(),c->GetY(),c->GetZ(), pause, type1, type2, zone->GetZoneID(),c->GetHeading());
 		if (tmp_grid)
 			t->CastToNPC()->SetGrid(tmp_grid);
zone/mob.h
Code:
Index: zone/mob.h
===================================================================
--- zone/mob.h	(revision 1520)
+++ zone/mob.h	(working copy)
@@ -1199,6 +1200,7 @@
 	float cur_wp_y;
 	float cur_wp_z;
 	int cur_wp_pause;
+	float cur_wp_heading;
 
 	int patrol;
 	float fear_walkto_x;
zone/MobAI.cpp
Code:
Index: zone/MobAI.cpp
===================================================================
--- zone/MobAI.cpp	(revision 1520)
+++ zone/MobAI.cpp	(working copy)
@@ -1594,6 +1594,7 @@
 				if (cur_wp_x == GetX() && cur_wp_y == GetY()) 
 				{	// are we there yet? then stop
 					mlog(AI__WAYPOINTS, "We have reached waypoint %d (%.3f,%.3f,%.3f) on grid %d", cur_wp, GetX(), GetY(), GetZ(), GetGrid());
+					SetHeading(cur_wp_heading);
 					SetWaypointPause();
 					SetAppearance(eaStanding, false);
 					SetMoving(false);
Index: zone/waypoints.cpp
Code:
Index: waypoints.cpp
===================================================================
--- waypoints.cpp	(revision 1520)
+++ waypoints.cpp	(working copy)
@@ -202,6 +202,7 @@
 	cur_wp_y = mty;
 	cur_wp_z = mtz;
 	cur_wp_pause = 0;
+	cur_wp_heading = mth;
 }
 
 void NPC::UpdateWaypoint(int wp_index)
@@ -218,7 +219,8 @@
 	cur_wp_y = cur->y;
 	cur_wp_z = cur->z;
 	cur_wp_pause = cur->pause;
-	mlog(AI__WAYPOINTS, "Next waypoint %d: (%.3f, %.3f, %.3f)", wp_index, cur_wp_x, cur_wp_y, cur_wp_z);
+	cur_wp_heading = cur->heading;
+	mlog(AI__WAYPOINTS, "Next waypoint %d: (%.3f, %.3f, %.3f, %.3f)", wp_index, cur_wp_x, cur_wp_y, cur_wp_z, cur_wp_heading);
 		
 	//fix up pathing Z
 	if(zone->HasMap() && RuleB(Map, FixPathingZAtWaypoints))
@@ -847,7 +849,7 @@
 	    adverrorinfo = 7561;
 
 	    // Retrieve all waypoints for this grid
-	    if(database.RunQuery(query,MakeAnyLenString(&query,"SELECT `x`,`y`,`z`,`pause` FROM grid_entries WHERE `gridid`=%i AND `zoneid`=%i ORDER BY `number`",grid,zone->GetZoneID()),errbuf,&result))
+	    if(database.RunQuery(query,MakeAnyLenString(&query,"SELECT `x`,`y`,`z`,`pause`,`heading` FROM grid_entries WHERE `gridid`=%i AND `zoneid`=%i ORDER BY `number`",grid,zone->GetZoneID()),errbuf,&result))
 	    {
 	    	roamer = true;
 			max_wp = -1;	// Initialize it; will increment it for each waypoint successfully added to the list
@@ -878,6 +880,7 @@
 				}
 
 				newwp.pause = atoi(row[3]);
+				newwp.heading = atof(row[4]);
 				Waypoints.push_back(newwp);
 			    }
 			}
@@ -1033,7 +1036,7 @@
 	char errbuff[MYSQL_ERRMSG_SIZE];
 	MYSQL_RES *result;
 	MYSQL_ROW row;
-	if (RunQuery(query, MakeAnyLenString(&query,"SELECT x, y, z, pause from grid_entries where gridid = %i and number = %i and zoneid = %i",grid,num,zoneid),errbuff,&result)) {
+	if (RunQuery(query, MakeAnyLenString(&query,"SELECT x, y, z, pause, heading from grid_entries where gridid = %i and number = %i and zoneid = %i",grid,num,zoneid),errbuff,&result)) {
 		safe_delete_array(query);
 		if (mysql_num_rows(result) == 1) {
 			row = mysql_fetch_row(result);
@@ -1042,6 +1045,7 @@
 				wp->y = atof( row[1] );
 				wp->z = atof( row[2] );
 				wp->pause = atoi( row[3] );
+				wp->heading = atof( row[4] );
 			}
 			mysql_free_result(result);
 			return true;
@@ -1204,12 +1208,12 @@
 * AddWP - Adds a new waypoint to a specific grid for a specific zone.
 */
 
-void ZoneDatabase::AddWP(Client *c, int32 gridid, int32 wpnum, float xpos, float ypos, float zpos, int32 pause, int16 zoneid)
+void ZoneDatabase::AddWP(Client *c, int32 gridid, int32 wpnum, float xpos, float ypos, float zpos, int32 pause, int16 zoneid, float heading)
 {   
 	char *query = 0;
 	char errbuf[MYSQL_ERRMSG_SIZE];
 
-	if(!RunQuery(query,MakeAnyLenString(&query,"INSERT INTO grid_entries (gridid,zoneid,`number`,x,y,z,pause) values (%i,%i,%i,%f,%f,%f,%i)",gridid,zoneid,wpnum,xpos,ypos,zpos,pause), errbuf)) {
+	if(!RunQuery(query,MakeAnyLenString(&query,"INSERT INTO grid_entries (gridid,zoneid,`number`,x,y,z,pause,heading) values (%i,%i,%i,%f,%f,%f,%i,%f)",gridid,zoneid,wpnum,xpos,ypos,zpos,pause,heading), errbuf)) {
 		LogFile->write(EQEMuLog::Error, "Error adding waypoint '%s': '%s'", query, errbuf);
 	} else {
 		if(c) c->LogSQL(query);
@@ -1251,7 +1255,7 @@
 * the created grid is returned.
 */
 
-int32 ZoneDatabase::AddWPForSpawn(Client *c, int32 spawn2id, float xpos, float ypos, float zpos, int32 pause, int type1, int type2, int16 zoneid) {
+int32 ZoneDatabase::AddWPForSpawn(Client *c, int32 spawn2id, float xpos, float ypos, float zpos, int32 pause, int type1, int type2, int16 zoneid, float heading) {
 	char	*query = 0;
     int32	grid_num,	// The grid number the spawn is assigned to (if spawn has no grid, will be the grid number we end up creating)
 		next_wp_num;	// The waypoint number we should be assigning to the new waypoint
@@ -1323,7 +1327,7 @@
 	}
 
 	query = 0;
-	if(!RunQuery(query, MakeAnyLenString(&query,"INSERT INTO grid_entries(gridid,zoneid,`number`,x,y,z,pause) VALUES (%i,%i,%i,%f,%f,%f,%i)",grid_num,zoneid,next_wp_num,xpos,ypos,zpos,pause), errbuf)) {
+	if(!RunQuery(query, MakeAnyLenString(&query,"INSERT INTO grid_entries(gridid,zoneid,`number`,x,y,z,pause,heading) VALUES (%i,%i,%i,%f,%f,%f,%i,%f)",grid_num,zoneid,next_wp_num,xpos,ypos,zpos,pause,heading), errbuf)) {
 		LogFile->write(EQEMuLog::Error, "Error adding grid entry '%s': '%s'", query, errbuf);
 	} else {
 		if(c) c->LogSQL(query);
zone/zonedb.h
Code:
===================================================================
--- zone/zonedb.h	(revision 1520)
+++ zone/zonedb.h	(working copy)
@@ -12,6 +12,7 @@
 	float y;
 	float z;
 	int	  pause;
+	float heading;
 };
 
 #pragma pack(1)
@@ -226,8 +227,8 @@
 	void	DeleteGrid(Client *c, int32 sg2, int32 grid_num, bool grid_too,int16 zoneid);
 	void	DeleteWaypoint(Client *c, int32 grid_num, int32 wp_num,int16 zoneid);
 //	int32	AddWP(Client *c, int32 sg2, int16 grid_num, int8 wp_num, float xpos, float ypos, float zpos, int32 pause, float xpos1, float ypos1, float zpos1, int type1, int type2,int16 zoneid);
-	void	AddWP(Client *c, int32 gridid, int32 wpnum, float xpos, float ypos, float zpos, int32 pause, int16 zoneid);
-	int32	AddWPForSpawn(Client *c, int32 spawn2id, float xpos, float ypos, float zpos, int32 pause, int type1, int type2, int16 zoneid);
+	void	AddWP(Client *c, int32 gridid, int32 wpnum, float xpos, float ypos, float zpos, int32 pause, int16 zoneid, float heading);
+	int32	AddWPForSpawn(Client *c, int32 spawn2id, float xpos, float ypos, float zpos, int32 pause, int type1, int type2, int16 zoneid, float heading);
 	void	ModifyGrid(Client *c, bool remove, int32 id, int8 type = 0, int8 type2 = 0,int16 zoneid = 0);
 	void    ModifyWP(Client *c, int32 grid_id, int32 wp_num, float xpos, float ypos, float zpos, int32 script=0,int16 zoneid =0);
 	int8    GetGridType(int32 grid,int32 zoneid);
Reply With Quote
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 05:57 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3