It's still a tad rough but here ya go, I recommend using #repop between uses if you are using large ranges.
Usage:
#modeltest [Start Race] [End Race] [Start Gender] [End Gender] [Start Texture] [End Texture] [Helm Texture]
Examples:
#modeltest 1 3
Shows a model for human, barbarian and erudite for each gender with a texture of 0 and helm texture of 0.
#modeltest 1 3 0 0
Shows only male models for human, barbarian and erudite with a texture of 0 and helm texture of 0.
#modeltest 1 3 0 0 0 10
Shows only male models for human, barbarian and erudite with textures 0 through 10 and helm texture of 0.
#modeltest 1 3 0 0 0 10 2
Shows only male models for human, barbarian and erudite with textures 0 through 10 and helm texture of 2.
#modeltest 1 400
Shows a model for races 1 through 400 for each gender with a texture of 0 and helm texture of 0 and causes a ton of lag!
The Code:
command.h
change:
	Code:
	void command_mlog(Client *c, const Seperator *sep);
 to:
	Code:
	void command_mlog(Client *c, const Seperator *sep);
// EverHood 6/14/06
void command_modeltest(Client *c, const Seperator *sep);
 command.cpp 
change:
	Code:
			command_add("npcemote","[message] - Make your NPC target emote a message.",150,command_npcemote)
 to:
	Code:
			command_add("npcemote","[message] - Make your NPC target emote a message.",150,command_npcemote) ||
		// EverHood 6/14/06
		command_add("modeltest","- Spawn an NPC for every race in a grid. *Use in open areas!",250,command_modeltest)
 Add this to the end:
	Code:
	// EverHood 6/14/06
// Wifes world buidling request
void command_modeltest(Client *c, const Seperator *sep)
{
	if(sep->arg[1][0] == '\0') {
		c->Message(0, "Syntax: #modeltest [Start Race] [End Race] [Start Gender] [End Gender] [Start Texture] [End Texture] [Helm Texture]");
		return;
	}
	int x = 1,y = 1,StartGender = 0,EndGender=2,StartTexture=0,EndTexture=0,HelmTexture=0;
	int start_race = atoi(sep->arg[1]);
	int maxraces = atoi(sep->arg[2]);
	if(!sep->arg[3][0] == '\0')
		StartGender=atoi(sep->arg[3]);
	if(!sep->arg[4][0] == '\0')
		EndGender=atoi(sep->arg[4]);
	if(!sep->arg[5][0] == '\0')
		StartTexture=atoi(sep->arg[5]);
	if(!sep->arg[6][0] == '\0')
		EndTexture=atoi(sep->arg[6]);
	if(!sep->arg[7][0] == '\0')
		HelmTexture=atoi(sep->arg[7]);
	if(maxraces<start_race)
		maxraces=start_race;
	c->Message(0,"Spawning %i Races %i Genders and %i Textures.",maxraces-start_race,(EndGender-StartGender)+1,(EndTexture-StartTexture)+1);
	for(int race = start_race;race<=maxraces; race++){
		for(int gender = StartGender;gender<=EndGender; gender++){
			for(int texture = StartTexture;texture<=EndTexture; texture++){
				//Time to create the NPC!!
				NPCType* npc_type = new NPCType;
				memset(npc_type, 0, sizeof(NPCType));
				strcpy(npc_type->name,"Test");
				npc_type->cur_hp = 100; 
				npc_type->max_hp = 100; 
				npc_type->race = race;
				npc_type->gender = gender; 
				npc_type->class_ = 1; 
				npc_type->deity= 1;
				npc_type->level = 1;
				npc_type->npc_id = 0;
				npc_type->loottable_id = 0;
				npc_type->texture = texture;
				npc_type->light = 0;
				npc_type->walkspeed = 0.67;
				npc_type->runspeed = 1.25;
				npc_type->merchanttype = 0;	
				npc_type->bodytype = 0;
				npc_type->equipment[7] = 0;
				npc_type->equipment[8] = 0;
				npc_type->helmtexture = HelmTexture;
				npc_type->STR = 150;
				npc_type->STA = 150;
				npc_type->DEX = 150;
				npc_type->AGI = 150;
				npc_type->INT = 150;
				npc_type->WIS = 150;
				npc_type->CHA = 150;
				
				NPC* npc = new NPC(npc_type, 0,c->GetX()+(x*10)-(gender*2), c->GetY()+(y*60)-(gender*9)-(texture*3), c->GetZ(), 180);
				npc->GiveNPCTypeData(npc_type);
				//safe_delete(npc_type);
			
				entity_list.AddNPC(npc);
			}
		}
		if(x==10){
			x=1;
			y++;
		}else{
			x++;
		}
	}
}
 Let me know if anyone wants a unified diff of this and I'll work one up.
Enjoy 
