/****************************************************************************\
 *									      *
 *			C R E A T O R    O F   L E G E N D S		      *
 *				(AberMud Version 5)			      *
 *									      *
 *  The Creator Of Legends System is (C) Copyright 1989 Alan Cox, All Rights  *
 *  Reserved.		  						      *
 *									      *
 \****************************************************************************/

/*
 *	Commands To Do With Players
 *
 *	1.00	AGC	Original Version
 *	1.01	AGC	Upgraded to 5.06
 *	1.02	AGC	5.07 Version using user defined bitnames
 *      1.03    AGC     Remote Addresses in Users
 *	1.04	AGC	Fixed formatting for >9 users.
 *	1.05	AGC	Added Slot Status Info
 */

#include "System.h"
#include "User.h"

extern USER UserList[];

Module "Player Commands";
Version "1.05";
Author "Alan Cox";



void Cmd_PlayerShow(i)
ITEM *i;
{
	ITEM *a;
	PLAYER *o;
	int ct=0;
	if(!ArchWizard(i))
	{
		SendItem(i,"Try EXAMINE.\n");
		return;
	}
	a=FindSomething(i,O_PARENT(i));
	if(a==NULL)
	{
		SendItem(i,"I don't know what that is.\n");
		return;
	}
	o=PlayerOf(a);
	if(o==NULL)
	{
		SendItem(i,"%s is not a character.\n",CNameOf(a));
		return;
	}
	SendItem(i,"Character Name : %s\n",CNameOf(a));
	SendItem(i,"UserKey : %d ",o->pl_UserKey);
	SendItem(i,"Size    : %d ",o->pl_Size);
	SendItem(i,"Weight  : %d \n",o->pl_Weight);
	SendItem(i,"Strength: %d ",o->pl_Strength);
	SendItem(i,"Level   : %d ",o->pl_Level);
	SendItem(i,"Score   : %d\n",o->pl_Score);
	ct=0;
	while(ct<16)
	{
		if(o->pl_Flags&(1<<ct))
			SendItem(i,"%s ",PBitName(ct));
		else
			if(strcmp(PBitName(ct),"{unset}"))
				SendItem(i,"-%s ",PBitName(ct));
		ct++;
	}
	SendItem(i,"\n");
}

void Cmd_SetPFlag(i)
ITEM *i;
{
	int c=0;
	ITEM *a;
	PLAYER *o;
	if(!ArchWizard(i))
	{
		SendItem(i,"No can do....\n");
		return;
	}
	a=FindSomething(i,O_PARENT(i));
	if(a==NULL)
	{
		SendItem(i,"I don't know what that is.\n");
		return;
	}
	o=PlayerOf(a);
	if(o==NULL)
	{
		SendItem(i,"%s is not a character.\n",CNameOf(a));
		return;
	}
	SkipPrep();
	while(GetParsedWord())
	{
		if(!strlen(WordBuffer))
		{
			SendItem(i,"What flag though ?\n");
			return;
		}
		if(*WordBuffer=='-')
		{
			c=FindPBit(WordBuffer+1);
			if(c==-1)
			{
				SendItem(i,"Unknown flag %s.\n",WordBuffer+1);
				return;
			}
			o->pl_Flags&=~(1<<c);
		}
		else
		{
			c=FindPBit(WordBuffer);
			if(c==-1)
			{
				SendItem(i,"Unknown flag %s.\n",WordBuffer);
				return;
			}
			o->pl_Flags|=(1<<c);
		}
	}
}

void Cmd_SetPSize(i)
ITEM *i;
{
	int n;
	ITEM *a;
	PLAYER *p;
	if(!ArchWizard(i))
	{
		SendItem(i,"No!\n");
		return;
	}
	a=FindSomething(i,O_PARENT(i));
	if(a==NULL)
	{
		SendItem(i,"I don't know what that is.\n");
		return;
	}
	p=PlayerOf(a);
	if(p==NULL)
	{
		SendItem(i,"%s is not a character.\n",CNameOf(a));
		return;
	}
	SkipPrep();
	n=GetNumber();
	if(n==-1)
	{
		SendItem(i,"Bad Size Value.\n");
		return;
	}
	p->pl_Size=n;
}

void Cmd_SetPWeight(i)
ITEM *i;
{
	int n;
	ITEM *a;
	PLAYER *p;
	if(!ArchWizard(i))
	{
		SendItem(i,"No!\n");
		return;
	}
	a=FindSomething(i,O_PARENT(i));
	if(a==NULL)
	{
		SendItem(i,"I don't know what that is.\n");
		return;
	}
	p=PlayerOf(a);
	if(p==NULL)
	{
		SendItem(i,"%s is not a character.\n",CNameOf(a));
		return;
	}
	SkipPrep();
	n=GetNumber();
	if(n==-1)
	{
		SendItem(i,"Bad Weight Value.\n");
		return;
	}
	p->pl_Weight=n;
}

void Cmd_SetPStrength(i)
ITEM *i;
{
	int n;
	ITEM *a;
	PLAYER *p;
	if(!ArchWizard(i))
	{
		SendItem(i,"No!\n");
		return;
	}
	a=FindSomething(i,O_PARENT(i));
	if(a==NULL)
	{
		SendItem(i,"I don't know what that is.\n");
		return;
	}
	p=PlayerOf(a);
	if(p==NULL)
	{
		SendItem(i,"%s is not a character.\n",CNameOf(a));
		return;
	}
	SkipPrep();
	n=GetNumber();
	if(n==-1)
	{
		SendItem(i,"Bad Strength Value.\n");
		return;
	}
	p->pl_Strength=n;
}

void Cmd_SetPLevel(i)
ITEM *i;
{
	int n;
	ITEM *a;
	PLAYER *p;
	if(!ArchWizard(i))
	{
		SendItem(i,"No!\n");
		return;
	}
	a=FindSomething(i,O_PARENT(i));
	if(a==NULL)
	{
		SendItem(i,"I don't know what that is.\n");
		return;
	}
	p=PlayerOf(a);
	if(p==NULL)
	{
		SendItem(i,"%s is not a character.\n",CNameOf(a));
		return;
	}
	SkipPrep();
	n=GetNumber();
	if(n==-1)
	{
		SendItem(i,"Bad Level Value.\n");
		return;
	}
	p->pl_Level=n;
}

void Cmd_SetPScore(i)
ITEM *i;
{
	long n;
	ITEM *a;
	PLAYER *p;
	if(!ArchWizard(i))
	{
		SendItem(i,"No!\n");
		return;
	}
	a=FindSomething(i,O_PARENT(i));
	if(a==NULL)
	{
		SendItem(i,"I don't know what that is.\n");
		return;
	}
	p=PlayerOf(a);
	if(p==NULL)
	{
		SendItem(i,"%s is not a character.\n",CNameOf(a));
		return;
	}
	SkipPrep();
	n=GetNumber();
	if(n==-1)
	{
		SendItem(i,"Bad Score Value.\n");
		return;
	}
	p->pl_Score=n;
}

void Cmd_Users(i)
ITEM *i;
{
	int a=0;
	int v=GetNumber();
	while(a<MAXUSER)
	{
		if((UserList[a].us_Port)&&
		   (UserList[a].us_Item)&&
		   (CanSee(LevelOf(i),UserList[a].us_Item)))
		{
			if(Arch(i))
			{
				SendItem(i,"%-2d) %-20s %-40s  (%d)\n",a,
					UserList[a].us_Name,
					UserList[a].us_UserName,
					UserList[a].us_State);
			}
			else
				SendItem(i,"%-40s %s\n",UserList[a].us_Name,
					UserList[a].us_UserName);
		}
		else
		{
			if(Arch(i)&&v==1)
			{
				SendItem(i,"%-2d) %-20s %-40s  (%d)\n",a,
					"<free slot>","<unset>",
					 UserList[a].us_State);
			}
			if(Arch(i)&&v==2)
			{
				SendItem(i,"%-2d) %-20s %-40s  (%d)\n",a,
					"<free slot>",isalpha(*UserList[a].us_Name)?UserList[a].us_UserName:"<unset>",
					 UserList[a].us_State);
			}
		}
		a++;
	}
}