#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "emlen.h"
void
check_pkdata (CHAR_DATA * ch)
{
int k, i;
int oldslot[PKN];
int newslot[PKN];
float charinfo[PKN];
bool in_pkdata_already[PKN];
bool foundnew[PKN];
if (IS_MOB (ch))
return;
if (LEVEL(ch) > 90) return;
/* Prevent Neutrals from appearing in pkdata */
if (ALIGN (ch) == 0 )
return;
for (i = 0; i < PKN; i++)
charinfo[i] = 0.0;
if (ch->pcdata->warpoints <0) ch->pcdata->warpoints = 0;
if (current_time - ch->pcdata->created > 0 && current_time - startup_time > 0)
{
charinfo[10] = (float)((float) (ch->pcdata->played + (current_time
- ch->pcdata->logon)))*100.0/((float)(current_time-ch->pcdata->created));
charinfo[11] = (float)((float)
(ch->pcdata->played)*100.0)/((float)(current_time-startup_time));
}
if (ch->pcdata->pkills > 20)
{
charinfo[0] = (float) ch->pcdata->pkills;
charinfo[1] = (float) ((float) ch->pcdata->pklevels /
(float) ch->pcdata->pkills);
charinfo[2] = (float) ((float) ch->pcdata->pkills /
(float) ch->pcdata->pkhelpers);
charinfo[5] = (float) ch->pcdata->total_wps;
charinfo[6] = (float) ((float) ch->pcdata->pkills /
(float) ch->pcdata->pklevels);
charinfo[7] = (float) ((float) ch->pcdata->pkhelpers/
(float) ch->pcdata->pkills);
charinfo[8] = (float) ch->pcdata->warpoints;
charinfo[9] = (float) ch->pcdata->hard_pkills;
}
if (ch->pcdata->pkilled >=1)
{
charinfo[3] = (float) ((float) ch->pcdata->pkilled);
charinfo[4] = (float) ((float) ch->pcdata->pkers /
(float) ch->pcdata->pkilled);
}
for (k=0; k < PKN; k++)
{
oldslot[k] = -1;
in_pkdata_already[k] = FALSE;
newslot[k] = -1;
foundnew[k] = FALSE;
}
for (i=0; i < PKN; i++)
{
for (k = 0; k < MAX_PKDATA; k++)
{
if (!str_cmp (capitalize (NAME (ch)), pkdata[k][i].name))
{
in_pkdata_already[i] = TRUE;
oldslot[i] = k;
}
}
}
send_to_char("\n\r", ch);
for (i = 0; i < PKN; i++)
{
if (in_pkdata_already[i] && (oldslot[i] <= (MAX_PKDATA-2)) && (oldslot[i] >=0))
{
for (k = oldslot[i]; k < (MAX_PKDATA -1); k++)
{
if (k > (MAX_PKDATA-2))
break;
strcpy (pkdata[k][i].name, pkdata[k+1][i].name);
pkdata[k][i].value = pkdata[k+1][i].value;
pkdata[k][i].alignment = pkdata[k+1][i].alignment;
}
strcpy (pkdata[MAX_PKDATA-1][i].name, "Free-Slot");
pkdata[MAX_PKDATA-1][i].value = 0.0;
pkdata[MAX_PKDATA-1][i].alignment = FALSE;
}
}
for(i=0; i < PKN; i++)
{
if (charinfo[i] > 0)
{
for (k=0; k < MAX_PKDATA; k++)
{
if(charinfo[i] > pkdata[k][i].value)
{
newslot[i] = k;
break;
}
}
}
else
newslot[i] = -1;
}
for(i=0; i < PKN;i ++)
{
if ((newslot[i] >=0) && (newslot[i] < (MAX_PKDATA-1)))
{
for (k = (MAX_PKDATA -1); k > newslot[i]; k--)
{
strcpy (pkdata[k][i].name, pkdata[k-1][i].name);
pkdata[k][i].value = pkdata[k-1][i].value;
pkdata[k][i].alignment = pkdata[k-1][i].alignment;
}
}
if(newslot >=0)
{
strcpy (pkdata[newslot[i]][i].name, capitalize (NAME (ch)));
pkdata[newslot[i]][i].alignment = ch->pcdata->alignment;
pkdata[newslot[i]][i].value = charinfo[i];
strcpy (pkdata[newslot[i]][i].name, capitalize (NAME (ch)));
}
}
return;
}
void
check_topten (CHAR_DATA * ch)
{
int k;
int oldslot;
int newslot;
bool in_topten_already;
if (IS_MOB (ch))
return;
if (LEVEL (ch) > 90 ) return;
/* Prevent Neutrals from appearing on topten */
if (ALIGN (ch)== 0 )
return;
oldslot = -1;
in_topten_already = FALSE;
if (ch->pcdata->warpoints < 0) ch->pcdata->warpoints = 0;
for (k = 0; k < MAX_TOPTEN; k++)
{
if (!str_cmp (capitalize (NAME (ch)), topten.topten_name[k]))
{
in_topten_already = TRUE;
oldslot = k;
break;
}
}
if (in_topten_already && (oldslot <= (MAX_TOPTEN-2)))
{
for (k = oldslot; k < (MAX_TOPTEN -1); k++)
{
if (k > (MAX_TOPTEN-2))
break;
strcpy (topten.topten_name[k], topten.topten_name[k + 1]);
topten.topten_warpoints[k] = topten.topten_warpoints[k + 1];
topten.topten_alignment[k] = topten.topten_alignment[k + 1];
}
strcpy (topten.topten_name[MAX_TOPTEN-1], "Free-Slot");
topten.topten_warpoints[MAX_TOPTEN-1] = 0;
topten.topten_alignment[MAX_TOPTEN-1] = TRUE;
}
newslot = -1;
for (k=0; k < MAX_TOPTEN; k++)
{
if (ch->pcdata->warpoints > topten.topten_warpoints[k])
{
newslot = k;
break;
}
}
if (newslot >=0)
{
/*Move everyone after that slot down on the list */
for (k = (MAX_TOPTEN -1); k > newslot; k--)
{
strcpy (topten.topten_name[k], topten.topten_name[k - 1]);
topten.topten_warpoints[k] = topten.topten_warpoints[k - 1];
topten.topten_alignment[k] = topten.topten_alignment[k - 1];
}
topten.topten_warpoints[newslot] = ch->pcdata->warpoints;
strcpy (topten.topten_name[newslot], capitalize (NAME (ch)));
topten.topten_alignment[newslot] = ch->pcdata->alignment;
}
if (number_range(1,3) == 2)
save_topten ();
return;
}
void
check_rating (CHAR_DATA * ch)
{
int k;
int oldslot = -1;
int newslot;
bool in_rating_already;
int ratng = rating(ch);
if (IS_MOB (ch))
return;
if (LEVEL(ch) > 91)
return;
/* Prevent Neutrals from appearing on rating */
if (ALIGN(ch)==0)
return;
in_rating_already = FALSE;
for (k = 0; k < MAX_RATING; k++)
{
if (!str_cmp (capitalize (NAME (ch)), ratingd.rating_name[k]))
{
in_rating_already = TRUE;
oldslot = k;
break;
}
}
if (in_rating_already && (oldslot < (MAX_RATING-1)))
{
for (k = oldslot; k < (MAX_RATING -1); k++)
{
if (k > (MAX_RATING-1))
break;
strcpy (ratingd.rating_name[k], ratingd.rating_name[k + 1]);
ratingd.rating_rating[k] = ratingd.rating_rating[k + 1];
ratingd.rating_alignment[k] = ratingd.rating_alignment[k + 1];
}
strcpy (ratingd.rating_name[MAX_RATING-1], "<Free-Slot>");
ratingd.rating_rating[MAX_RATING-1] = 0;
ratingd.rating_alignment[MAX_RATING-1] = TRUE;
}
if (in_rating_already)
ratingd.rating_rating[MAX_RATING-1] = 0;
newslot = -1;
for (k=0; k < MAX_RATING; k++)
{
if (ratng > ratingd.rating_rating[k])
{
newslot = k;
break;
}
}
if (newslot >=0)
{
if (newslot < (MAX_RATING-1))
{
/*Move everyone after that slot down on the list */
for (k = (MAX_RATING -1); k > newslot; k--)
{
strcpy (ratingd.rating_name[k], ratingd.rating_name[k - 1]);
ratingd.rating_rating[k] = ratingd.rating_rating[k - 1];
ratingd.rating_alignment[k] = ratingd.rating_alignment[k - 1];
}
}
ratingd.rating_rating[newslot] = rating(ch);
strcpy (ratingd.rating_name[newslot], capitalize (NAME (ch)));
ratingd.rating_alignment[newslot] = ch->pcdata->alignment;
if (number_range(1,3) == 2)
save_rating ();
}
return;
}
void
do_trophy (CHAR_DATA * ch, char *argy)
{
bool foundy;
char buffy[500];
int i;
DEFINE_COMMAND ("trophy", do_trophy, POSITION_SLEEPING, 0, LOG_NORMAL, "Shows your mob or pkill trophy.")
if (IS_MOB (ch))
return;
foundy = FALSE;
send_to_char (" \x1B[1;34m[\x1B[30mTrophy of Kills\x1B[34m]\x1B[1;37m\n\r\n\r", ch);
sprintf (buffy, "%5s %6s %5s\n\r",
"\x1B[1;30m[\x1B[32mLvl\x1B[30m]",
"\x1B[1;31m[\x1B[37mName\x1B[31m]",
"\x1B[1;36m[\x1B[35mTimes\x1B[36m]");
send_to_char (buffy, ch);
for (i = 0; i < MAX_TROPHY; i++)
if ((ch->pcdata->trophy_name[i] != '\0') && (ch->pcdata->trophy_level[i] >=1) && (ch->pcdata->trophy_times[i] >=1))
{
foundy = TRUE;
sprintf (buffy,
"\x1B[37;0m[\x1B[1;34m%3d\x1B[37;0m] %-23s\x1B[1;37m*%-4d\n\r",
ch->pcdata->trophy_level[i],
ch->pcdata->trophy_name[i], ch->pcdata->trophy_times[i]);
send_to_char (buffy, ch);
}
if (!foundy)
{
send_to_char ("\n\rNone.\n\r", ch);
}
send_to_char ("\x1B[37;0m", ch);
return;
}
void
do_topten (CHAR_DATA * ch, char *argy)
{
char buffy[500];
char buf[200];
int position;
int i;
DEFINE_COMMAND ("topten", do_topten, POSITION_SLEEPING, 0, LOG_NORMAL, "Shows the top PKillers.")
if (IS_MOB (ch))
return;
position = ch->position;
ch->position = POSITION_STANDING;
if (LEVEL(ch) < 90)
check_topten(ch);
if (!str_cmp(argy, "reset") && LEVEL(ch) == MAX_LEVEL)
{
send_to_char("Resetting topten.\n\r", ch);
for (i = 0; i < MAX_RATING; i++)
{
strcpy(topten.topten_name[i], "Free-Slot");
topten.topten_warpoints[i] = 0;
topten.topten_alignment[i] = 0;
}
return;
}
for ( i=0; i < MAX_TOPTEN; i++)
{
sprintf (buffy, "\x1b[1;3%dm* $B$0#%-2d $B$7%-35s $B$0-->$B$7 %-6ld$4 $B$4Warpoints$7",
(URANGE(0,(topten.topten_alignment[i]-1)*7, 7)),i + 1,
topten.topten_name[i], topten.topten_warpoints[i]);
act (buffy, ch, NULL, ch, TO_CHAR);
}
sprintf(buffy, "\n\rYou have \x1b[1;31m%ld\x1b[0;37m warpoints.\n\r", ch->pcdata->warpoints);
send_to_char(buffy, ch);
ch->position = position;
return;
}
void
do_pkstat (CHAR_DATA * ch, char *argy)
{
char buffy[SML_LENGTH];
int position;
int i, k;
char arg1[SML_LENGTH];
DEFINE_COMMAND ("pkstat", do_pkstat, POSITION_SLEEPING, 0, LOG_NORMAL,
"Shows the pkstat info.")
if (IS_MOB (ch))
return;
if (LEVEL(ch) < 91) check_pkdata (ch);
position = ch->position;
ch->position = POSITION_STANDING;
if (number_range(1,5) == 4)
save_pkdata();
if (!str_cmp(argy, "reset") && LEVEL(ch) == MAX_LEVEL)
{
for (i = 0; i < MAX_PKDATA; i++)
{
for (k = 0; k < PKN; k++)
{
strcpy(pkdata[i][k].name, "Free-Slot");
pkdata[i][k].alignment = 0;
pkdata[i][k].value = 0.0;
}
}
send_to_char("Resetting pkdata.\n\r", ch);
return;
}
argy = one_argy(argy, arg1);
if (!str_cmp(arg1, "pkills"))
{
i=0;
send_to_char("\x1b[0;31mTotal number of pkills:\n\n\r", ch);
for ( k=0; k < MAX_PKDATA; k++)
{
int pkillz = (int) pkdata[k][i].value;
sprintf (buffy, "\x1b[1;3%dm* $R$4#%-2d $3%-35s $0-->$5 %-7d",
(pkdata[k][i].alignment),k + 1,
pkdata[k][i].name, pkillz);
act (buffy, ch, NULL, ch, TO_CHAR);
}
sprintf(buffy, "\n\rYour total number of pkills is: \x1b[1;32m%d\x1b[0;37m.\n\r", ch->pcdata->pkills);
send_to_char(buffy, ch);
ch->position = position;
return;
}
if (!str_cmp(arg1, "ave"))
{
send_to_char("\x1b[0;31mAverage level of pkill victims:\n\n\r",ch);
i=1;
for ( k=0; k < MAX_PKDATA; k++)
{
sprintf (buffy, "\x1b[1;3%dm* $B$2%-2d $0%-35s $4-->$1 %2.4f",
(pkdata[k][i].alignment),k + 1,
pkdata[k][i].name, pkdata[k][i].value);
act (buffy, ch, NULL, ch, TO_CHAR);
}
sprintf(buffy, "\n\rYour average level of pkill victims is \x1b[1;34m%2.4f\x1b[0;37m.\n\r", (float) ((float)ch->pcdata->pklevels)/((float) (UMAX(ch->pcdata->pkills, 1))));
send_to_char(buffy, ch);
ch->position = position;
return;
}
if (!str_cmp(arg1, "num"))
{
i=2;
send_to_char("\x1b[0;31mYour average groupsize when you pkill someone.\n\n\r", ch);
for ( k=0; k < MAX_PKDATA; k++)
{
float groupsize;
if (pkdata[k][i].value > 0)
groupsize = 1 / pkdata[k][i].value;
else groupsize = 0;
sprintf (buffy, "\x1b[1;3%dm* $B$1#%-2d $2%-35s $5-->$0% 2.4f",
(pkdata[k][i].alignment), k + 1,
pkdata[k][i].name, groupsize);
act (buffy, ch, NULL, ch, TO_CHAR);
}
sprintf(buffy, "\n\rYour average groupsize when you pkill someone is \x1b[1;34m%2.4f\x1b[0;37m.\n\r", (float) ((float)ch->pcdata->pkhelpers)/((float) (UMAX(ch->pcdata->pkills, 1))));
send_to_char(buffy, ch);
ch->position = position;
return;
}
if (!str_cmp(arg1, "pdeaths") && LEVEL(ch) < 111)
{
i=3;
send_to_char("\x1b[0;31mThe people who have been pkilled the most.\n\n\r", ch);
for ( k=0; k < MAX_PKDATA; k++)
{
int pdeaths = (int) pkdata[k][i].value;
sprintf (buffy, "\x1b[1;3%dm* $B$7#%-2d $5%-35s $B$4-->$1 %-6d$R$7",
(pkdata[k][i].alignment),k + 1,
pkdata[k][i].name, pdeaths);
act (buffy, ch, NULL, ch, TO_CHAR);
}
sprintf(buffy, "\n\rYour total number of times you have been pkilled is: \x1b[1;32m%d\x1b[0;37m.\n\r", ch->pcdata->pkilled);
send_to_char(buffy, ch);
send_to_char ("\x1B[37;0m", ch);
ch->position = position;
return;
}
if (!str_cmp(arg1, "dif"))
{
i=4;
send_to_char("\x1b[0;31mThe people who need the most opponents to kill them.\n\n\r", ch);
for ( k=0; k < MAX_PKDATA; k++)
{
float diff = pkdata[k][i].value;
sprintf (buffy, "\x1b[1;3%dm* $B$4#%-2d $3%-35s $0--> $1%2.3f",
(pkdata[k][i].alignment),k + 1,
pkdata[k][i].name, diff);
act (buffy, ch, NULL, ch, TO_CHAR);
}
sprintf(buffy, "\n\rYou require \x1b[1;34m%2.4f\x1b[0;37m people to kill you on average.\n\r", (float) ((float)ch->pcdata->pkers)/((float) (UMAX(ch->pcdata->pkilled, 1))));
send_to_char(buffy, ch);
ch->position = position;
return;
}
if (!str_cmp(arg1, "total_wps"))
{
send_to_char("\x1b[0;31mTotal Warpoints:\n\n\r",ch);
i=5;
for ( k=0; k < MAX_PKDATA; k++)
{
int twps = (int) pkdata[k][i].value;
sprintf (buffy, "\x1b[1;3%dm* $B$2%-2d $0%-35s $4-->$1 %-3d",
(pkdata[k][i].alignment),k + 1,
pkdata[k][i].name, twps);
act (buffy, ch, NULL, ch, TO_CHAR);
}
sprintf(buffy, "\n\rYour total number of warpoints is: \x1b[1;32m%ld\x1b[0;37m.\n\r", ch->pcdata->total_wps);
send_to_char(buffy, ch);
send_to_char ("\x1B[37;0m", ch);
ch->position = position;
return;
}
if (!str_cmp(arg1, "hard"))
{
send_to_char("\x1b[0;31mHard Pkills:\n\n\r",ch);
i=9;
for ( k=0; k < MAX_PKDATA; k++)
{
int twps = (int) pkdata[k][i].value;
sprintf (buffy, "\x1b[1;3%dm* $B$2%-2d $0%-35s $4-->$1 %-3d",
(pkdata[k][i].alignment),k + 1,
pkdata[k][i].name, twps);
act (buffy, ch, NULL, ch, TO_CHAR);
}
sprintf(buffy, "\n\rYour total number of hard pkills is: \x1b[1;32m%ld\x1b[0;37m.\n\r", ch->pcdata->hard_pkills);
send_to_char(buffy, ch);
send_to_char ("\x1B[37;0m", ch);
ch->position = position;
return;
}
/*if (!str_cmp(arg1, "warpoints"))
{
send_to_char("\x1b[0;31mWarpoints:\n\n\r",ch);
i=8;
for ( k=0; k < MAX_PKDATA; k++)
{
int twps = (int) pkdata[k][i].value;
sprintf (buffy, "\x1b[1;3%dm* $B$2%-2d $0%-35s $4-->$1 %-3d",
(pkdata[k][i].alignment),k + 1,
pkdata[k][i].name, twps);
act (buffy, ch, NULL, ch, TO_CHAR);
}
sprintf(buffy, "\n\rYour number of warpoints is: \x1b[1;32m%d\x1b[0;37m.\n\r", ch->pcdata->warpoints);
send_to_char(buffy, ch);
send_to_char ("\x1B[37;0m", ch);
ch->position = position;
return;
}*/
if (!str_cmp(arg1, "newbie_killers") && LEVEL(ch) > 100)
{
send_to_char("\x1b[0;31mNewbie Killers:\n\n\r",ch);
i=6;
for ( k=0; k < MAX_PKDATA; k++)
{
float groupsize;
if (pkdata[k][i].value > 0)
groupsize = 1 / pkdata[k][i].value;
else groupsize = 0;
sprintf (buffy, "\x1b[1;3%dm* $B$2%-2d $0%-35s $4-->$1 %2.4f",
(pkdata[k][i].alignment),k + 1,
pkdata[k][i].name, groupsize);
act (buffy, ch, NULL, ch, TO_CHAR);
}
sprintf(buffy, "\n\rYour average level of pkill victims is \x1b[1;34m%2.4f\x1b[0;37m.\n\r", (float) ((float)ch->pcdata->pklevels)/((float) (UMAX(ch->pcdata->pkills, 1))));
send_to_char(buffy, ch);
ch->position = position;
return;
}
if (!str_cmp(arg1, "bgpkw") && LEVEL(ch) < 111)
{
i=7;
send_to_char("\x1b[0;31mBig Group Pkill Whores:\n\n\r",ch);
for ( k=0; k < MAX_PKDATA; k++)
{
sprintf (buffy, "\x1b[1;3%dm* $B$2%-2d $0%-35s $4-->$1 %2.4f",
(pkdata[k][i].alignment),k + 1,
pkdata[k][i].name, pkdata[k][i].value);
act (buffy, ch, NULL, ch, TO_CHAR);
}
sprintf(buffy, "\n\rYour average groupsize when you pkill someone is \x1b[1;34m%2.4f\x1b[0;37m.\n\r", (float) ((float)ch->pcdata->pkhelpers)/((float) (UMAX(ch->pcdata->pkills, 1))));
send_to_char(buffy, ch);
ch->position = position;
return;
}
/*if (!str_cmp(arg1, "losers"))
{
i=10;
send_to_char("\x1b[0;31mMost time on since they created:\n\n\r",ch);
for ( k=0; k < MAX_PKDATA; k++)
{
sprintf (buffy, "\x1b[1;3%dm* $B$2%-2d $0%-35s $4-->$1 %2.4f percent",
(pkdata[k][i].alignment),k + 1,
pkdata[k][i].name, pkdata[k][i].value);
act (buffy, ch, NULL, ch, TO_CHAR);
}
sprintf(buffy, "\n\rYour percentage of playing time since your creation is:\x1b[1;34m%2.4f\x1b[0;37m.\n\r", (float) ((float)(ch->pcdata->played + current_time - ch->pcdata->logon)*100.0/((float) (current_time - ch->pcdata->created))));
send_to_char(buffy, ch);
ch->position = position;
return;
} */
if (!str_cmp(arg1, "no_life_dorks") && LEVEL(ch) < 111)
{
i=11;
send_to_char("\x1b[0;31mMost time on since beginning of the game:\n\n\r",ch);
for ( k=0; k < MAX_PKDATA; k++)
{
sprintf (buffy, "\x1b[1;3%dm* $B$2%-2d $0%-35s $4-->$1 %2.4f percent",
(pkdata[k][i].alignment),k + 1,
pkdata[k][i].name, pkdata[k][i].value);
act (buffy, ch, NULL, ch, TO_CHAR);
}
sprintf(buffy, "\n\rYour percentage of playing time since the game originally started is:\x1b[1;34m%2.4f\x1b[0;37m.\n\r", (float) ((float)(ch->pcdata->played + current_time - ch->pcdata->logon)*100.0/((float) (current_time - startup_time))));
send_to_char(buffy, ch);
ch->position = position;
return;
}
send_to_char("Choose one of: pkills, ave, num, pdeaths, dif, total_wps, bgpkw, newbie_killers.\n\r", ch);
ch->position = position;
return;
}
void
do_rating (CHAR_DATA * ch, char *argy)
{
bool foundy;
char buffy[500];
int i;
int position;
DEFINE_COMMAND ("rating", do_rating, POSITION_SLEEPING, 0, LOG_NORMAL, "Shows you your current rating.")
if (IS_MOB (ch))
return;
if (LEVEL (ch) < 100)
check_rating (ch);
if (!str_cmp(argy, "reset") && LEVEL(ch) == MAX_LEVEL)
{
send_to_char("Resetting rating.\n\r", ch);
for (i = 0; i < MAX_RATING; i++)
{
strcpy(ratingd.rating_name[i], "Free-Slot");
ratingd.rating_rating[i] = 0;
ratingd.rating_alignment[i] = 0;
}
return;
}
position = ch->position;
ch->position = POSITION_STANDING;
foundy = FALSE;
act ("$B$0[$7Top Ten Rated Players$0]", ch, NULL, ch, TO_CHAR);
send_to_char ("\n\r", ch);
for (i = 0; i < MAX_RATING; i++)
{
sprintf (buffy, "\x1b[1;3%dm* $B$0#%-2d $B$7%-35s $B$0-->$B$7 %-6ld $B$4Rating$R$7",
URANGE(0,(ratingd.rating_alignment[i]-1)*7, 7),
i + 1, ratingd.rating_name[i], ratingd.rating_rating[i]);
act (buffy, ch, NULL, ch, TO_CHAR);
}
sprintf (buffy, "\n\r\x1B[0;37mYour current rating: \x1B[1;37m%d\x1B[0;37m\n\r", rating (ch));
send_to_char (buffy, ch);
ch->position = position;
return;
}
int
free_trophy_slot (CHAR_DATA * ch, CHAR_DATA * victim)
{
int i;
int templev;
int tempnum;
if (IS_MOB (ch))
return -1;
for (i = 0; i < MAX_TROPHY; i++)
{
if (ch->pcdata->trophy_name[i][0] == '\0')
return i;
}
/*Okay, no free slots, replace lowest level */
templev = 1000;
tempnum = -1;
for (i = 0; i < MAX_TROPHY; i++)
{
if (ch->pcdata->trophy_level[i] < templev)
{
tempnum = i;
templev = ch->pcdata->trophy_level[i];
}
}
if (ch->pcdata->trophy_level[tempnum] <= LEVEL (victim))
return tempnum;
else
return -1;
}
void
check_add_trophy (CHAR_DATA * ch, CHAR_DATA * victim, int same_align, int
diff_align)
{
int i;
int nummy;
int wpstogive;
float warpoints_mult = 1.0;
float level_mult = 1.0;
float groupsize_mult = 1.0;
float remorts_mult = 1.0;
float same = (float) same_align;
float diff = (float) diff_align;
if (IS_MOB (ch) || IS_MOB (victim))
return;
/* JRAJRA */
check_pkdata(ch);
check_pkdata(victim);
ch->pcdata->online_spot->pk_since_locate++;
level_mult = (float) (((float)LEVEL (victim)))/((float)(LEVEL (ch)));
if (level_mult > 2)
level_mult = 2;
if (level_mult < .2)
level_mult = .2;
groupsize_mult = diff/same;
if (groupsize_mult >= 1.5)
groupsize_mult = 1.5;
if (groupsize_mult < .05)
groupsize_mult = .05;
remorts_mult=(float)((float)(5+victim->pcdata->remort_times))/((float)(5+ch->pcdata->remort_times));
if (remorts_mult > 2)
remorts_mult = 2;
if (remorts_mult < .3)
remorts_mult = .3;
warpoints_mult = level_mult * groupsize_mult * remorts_mult;
if (warpoints_mult < .03)
warpoints_mult = .03;
if (warpoints_mult > 1.5)
warpoints_mult = 1.5;
/* Large Group Discouragement
if (same_align > diff_align && same_align > 15)
{
if (same_align - 2 > diff_align)
{
warpoints_mult *= .1;
}
else {
warpoints_mult *= .05;
}
}
*/
else if (same_align > 6)
{
if (same_align <= diff_align)
{
warpoints_mult *= 1.1;
}
else if (same_align <= diff_align + 4)
{
warpoints_mult *= 1;
}
else if (same_align <= diff_align + 5)
{
warpoints_mult *= .8;
}
else if (same_align < diff_align + 7)
{
warpoints_mult *= .7;
}
else
{
warpoints_mult *= .5;
}
}
if (same_align == 1)
warpoints_mult = 1.7;
if (warpoints_mult < .03)
warpoints_mult = .03;
if (warpoints_mult > 2)
warpoints_mult = 2;
wpstogive = (int)((warpoints_mult*((float)LEVEL(victim))));
/* This was set by STRUCTURE to allow all players to get 1.5 the amount of
xp per kill on a person then normal WARPOINTS */
/* if (IS_SET(ch->pcdata->act2, PLR_HARDCORE)) */
wpstogive *= 1.5;
if (victim->pcdata->died_recently > 2)
{
wpstogive = 0;
send_to_char("Your victim is spam dying, you gain 1 warpoint.\n\r", ch);
send_to_char("YOU ARE SPAM DYING, STOP OR BE FROZEN! NO WARPOINTS AWARDED!\n\r", victim);
send_to_char("YOU HAVE LOST 50 WARPOINTS!\n\r", victim);
victim->pcdata->warpoints -=50;
if (victim->pcdata->warpoints < 0)
victim->pcdata->warpoints = 0;
}
if (wpstogive > 1)
{
ch->pcdata->warpoints +=wpstogive;
ch->pcdata->total_wps +=wpstogive;
}
else
{
ch->pcdata->total_wps += 1;
ch->pcdata->warpoints += 1;
}
if (LEVEL (victim) > 59 && victim->pcdata->remort_times > 7)
{
ch->pcdata->total_wps += 1;
ch->pcdata->warpoints += 1;
}
if (LEVEL(ch) <= 90)
check_topten (ch);
for (i = 0; i < MAX_TROPHY; i++)
{
if (ch->pcdata->trophy_name[i][0] == '\0')
continue;
if (!str_cmp (RNAME (victim), ch->pcdata->trophy_name[i]))
{
ch->pcdata->trophy_times[i]++;
ch->pcdata->trophy_level[i] = LEVEL (victim);
sort_trophy(ch, "moo");
return;
}
}
nummy = free_trophy_slot (ch, victim);
if (nummy == -1) return;
strcpy (ch->pcdata->trophy_name[nummy], RNAME (victim));
ch->pcdata->trophy_times[nummy] = 1;
ch->pcdata->trophy_level[nummy] = LEVEL (victim);
sort_trophy(ch, "moo");
return;
}
void
sort_trophy (CHAR_DATA *ch, char *argy)
{
int i,k;
int templev;
int tempnum;
char tempname[20];
for (k = 0; k < (MAX_TROPHY - 1); k++)
{
if ((ch->pcdata->trophy_level[k] > 0) &&
(ch->pcdata->trophy_times[k] > 0) && (ch->pcdata->trophy_name[k][0] !=
'\0'))
for (i = (k+1); i < MAX_TROPHY; i++)
{
if ((ch->pcdata->trophy_level[k]) <
(ch->pcdata->trophy_level[i]))
{
templev = ch->pcdata->trophy_level[i];
ch->pcdata->trophy_level[i] = ch->pcdata->trophy_level[k];
ch->pcdata->trophy_level[k] = templev;
tempnum = ch->pcdata->trophy_times[i];
ch->pcdata->trophy_times[i] = ch->pcdata->trophy_times[k];
ch->pcdata->trophy_times[k] = tempnum;
strcpy(tempname, ch->pcdata->trophy_name[i]);
strcpy(ch->pcdata->trophy_name[i],
ch->pcdata->trophy_name[k]);
strcpy(ch->pcdata->trophy_name[k], tempname);
}
}
}
return;
}