View Single Post
  #1  
Old 08-18-2006, 02:35 PM
WildcardX
Developer
 
Join Date: Apr 2003
Posts: 589
Default New Spawnstatus Command

I found the existing spawnstatus command to be limiting and have enhanced it to provide additional functionality that I think most server operators will applaud. Unfortunately, I don't have a diff file for this code so please accept what I can offer, the code snippets below...

Replace the existing "command_spawnstatus()" method with the following in the command.cpp file...

Code:
void command_spawnstatus(Client *c, const Seperator *sep)
{
	if((isalpha(sep->arg[1][0])) | (sep->arg[1][0] == 0))
	{
		if((sep->arg[1][0] == 'e') | (sep->arg[1][0] == 'E'))
		{
			// show only enabled spawns
			zone->ShowEnabledSpawnStatus(c);
		}
		else if((sep->arg[1][0] == 'd') | (sep->arg[1][0] == 'D'))
		{
			// show only disabled spawns
			zone->ShowDisabledSpawnStatus(c);
		}
		else if((sep->arg[1][0] == 'a') | (sep->arg[1][0] == 'A'))
		{
			// show all spawn staus with no filters
			zone->SpawnStatus(c);
		}
		else
		{
			c->Message(0, "Usage: #spawnstatus <all | disabled | enabled | {Spawn2 ID}>");
		}
	}
	else
	{
		// show spawn status by spawn2 id
		zone->ShowSpawnStatusByID(c, atoi(sep->arg[1]));
	}
}
Add the following declarations in zone.h...

Code:
void	ShowEnabledSpawnStatus(Mob* client);
void    ShowDisabledSpawnStatus(Mob* client);
void    ShowSpawnStatusByID(Mob* client, uint32 spawnid);
Add the following methods to the zone.cpp file...

Code:
void Zone::ShowEnabledSpawnStatus(Mob* client)
{
	LinkedListIterator<Spawn2*> iterator(spawn2_list);
	int x = 0;
	int iEnabledCount = 0;

	iterator.Reset();

	while(iterator.MoreElements())
	{
		if (iterator.GetData()->timer.GetRemainingTime() != 0xFFFFFFFF)
		{
			client->Message(0, "  %d:  %1.1f, %1.1f, %1.1f:  %1.2f", iterator.GetData()->GetID(), iterator.GetData()->GetX(), iterator.GetData()->GetY(), iterator.GetData()->GetZ(), (float)iterator.GetData()->timer.GetRemainingTime() / 1000);
			iEnabledCount++;
		}

		x++;
		iterator.Advance();
	}

	client->Message(0, "%i of %i spawns listed.", iEnabledCount, x);
}

void Zone::ShowDisabledSpawnStatus(Mob* client)
{
	LinkedListIterator<Spawn2*> iterator(spawn2_list);
	int x = 0;
	int iDisabledCount = 0;

	iterator.Reset();

	while(iterator.MoreElements())
	{
		if (iterator.GetData()->timer.GetRemainingTime() == 0xFFFFFFFF)
		{
			client->Message(0, "  %d:  %1.1f, %1.1f, %1.1f:  disabled", iterator.GetData()->GetID(), iterator.GetData()->GetX(), iterator.GetData()->GetY(), iterator.GetData()->GetZ());
			iDisabledCount++;
		}

		x++;
		iterator.Advance();
	}

	client->Message(0, "%i of %i spawns listed.", iDisabledCount, x);
}

void Zone::ShowSpawnStatusByID(Mob* client, uint32 spawnid)
{
	LinkedListIterator<Spawn2*> iterator(spawn2_list);
	int x = 0;
	int iSpawnIDCount = 0;

	iterator.Reset();

	while(iterator.MoreElements())
	{
		if (iterator.GetData()->GetID() == spawnid)
		{
			if (iterator.GetData()->timer.GetRemainingTime() == 0xFFFFFFFF)
				client->Message(0, "  %d:  %1.1f, %1.1f, %1.1f:  disabled", iterator.GetData()->GetID(), iterator.GetData()->GetX(), iterator.GetData()->GetY(), iterator.GetData()->GetZ());
			else
				client->Message(0, "  %d:  %1.1f, %1.1f, %1.1f:  %1.2f", iterator.GetData()->GetID(), iterator.GetData()->GetX(), iterator.GetData()->GetY(), iterator.GetData()->GetZ(), (float)iterator.GetData()->timer.GetRemainingTime() / 1000);

			iSpawnIDCount++;

			break;
		}

		x++;
		iterator.Advance();
	}

	if(iSpawnIDCount > 0)
		client->Message(0, "%i of %i spawns listed.", iSpawnIDCount, x);
	else
		client->Message(0, "No matching spawn id was found in this zone.");
}
I have implemented and tested this code on EQEmu 0.7.0-843, enjoy.
Reply With Quote