/*Coded by Xkilla and made by Xkilla*/
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "player.h"
void do_makezerg( CHAR_DATA *ch, char *argument )
{
CHAR_DATA *victim;
char arg [MAX_INPUT_LENGTH];
argument = one_argument( argument, arg );
if (IS_NPC(ch)) return;
if (!IS_CLASS(ch, CLASS_ZERG) )
{
send_to_char("Huh?\n\r",ch);
return;
}
if ( arg[0] == '\0' )
{
send_to_char( "Class whom?\n\r", ch );
return;
}
if ( ( victim = get_char_room( ch, arg ) ) == NULL )
{
send_to_char( "They aren't here.\n\r", ch );
return;
}
if ( IS_NPC(victim) )
{
send_to_char( "Not on NPC's.\n\r", ch );
return;
}
if ( IS_IMMORTAL(victim) )
{
send_to_char( "Not on Immortals's.\n\r", ch );
return;
}
if ( ch == victim )
{
send_to_char( "You cannot class yourself.\n\r", ch );
return;
}
if (IS_CLASS(victim, CLASS_MONK))
{
send_to_char( "They are Monk.\n\r", ch );
return;
}
if ( victim->level != LEVEL_AVATAR && !IS_IMMORTAL(victim) )
{
send_to_char( "You can only guide avatars.\n\r", ch );
return;
}
if (IS_CLASS(victim, CLASS_VAMPIRE) || IS_SET(victim->pcdata->stats[UNI_AFF], VAM_MORTAL))
{
send_to_char( "You are unable to class vampires!\n\r", ch );
return;
}
if (IS_CLASS(victim, CLASS_WEREWOLF))
{
send_to_char( "You are unable to class werewolves!\n\r", ch );
return;
}
if (IS_CLASS(victim, CLASS_DEMON) || IS_SET(victim->special, SPC_CHAMPION))
{
send_to_char( "You are unable to class demons!\n\r", ch );
return;
}
if (IS_CLASS(victim, CLASS_HIGHLANDER))
{
send_to_char( "You are unable to class highlanders.\n\r", ch );
return;
}
if (IS_CLASS(victim, CLASS_ZERG))
{
send_to_char( "You are unable to class Zergs.\n\r", ch );
return;
}
if (IS_CLASS(victim, CLASS_NINJA))
{
send_to_char( "You are unable to class ninjas.\n\r", ch);
return;
}
if (!IS_IMMUNE(victim,IMM_VAMPIRE))
{
send_to_char( "You cannot class an unwilling person.\n\r", ch );
return;
}
if (ch->exp < 1000)
{
send_to_char("You cannot afford the 1000 exp required to guide them.\n\r",ch);
return;
}
if (victim->exp < 1000)
{
send_to_char("They cannot afford the 1000 exp required to be guided from you.\n\r",ch);
return;
}
ch->exp -= 1000;
victim->exp -= 1000;
act("You make $N a Zerg.", ch, NULL, victim, TO_CHAR);
act("$n makes $N a Zerg.", ch, NULL, victim, TO_NOTVICT);
act("$n makes you a Zerg.", ch, NULL, victim, TO_VICT);
send_to_char( "You are now a Zerg.\n\r", victim );
free_string(victim->lord);
victim->lord = str_dup(ch->name);
victim->class = CLASS_ZERG;
victim->generation = ch->generation+1;
save_char_obj(ch);
save_char_obj(victim);
return;
}
void do_zergpower( CHAR_DATA *ch, char *argument )
{
char arg1 [MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
int improve;
improve = PZERG;
argument = one_argument( argument, arg1 );
if (IS_NPC(ch)) return;
if (!IS_CLASS(ch, CLASS_ZERG))
{
send_to_char("Huh?\n\r",ch);
return;
}
if (arg1[0] == '\0')
{
send_to_char(" Zerg Powers.\n\r",ch);
send_to_char("- Remember to put single quotes ( ' ) around the power.\n\r", ch);
if ( ch->pcdata->powers[PZERG] < 1 ) send_to_char("Eyes of Zerg\n\r", ch);
if ( ch->pcdata->powers[PZERG] < 2 ) send_to_char("Speed
Power\n\r", ch);
if ( ch->pcdata->powers[PZERG] < 3 ) send_to_char("Super Invis\n\r", ch);
if ( ch->pcdata->powers[PZERG] < 4 ) send_to_char("Toughness\n\r", ch);
if ( ch->pcdata->powers[PZERG] < 5 ) send_to_char("Super
Shield\n\r", ch);
if ( ch->pcdata->powers[PZERG] < 6 ) send_to_char("Travel\n\r", ch);
return;
}
if (!str_cmp(arg1,"eyes of zerg"))
{
if ( ch->pcdata->powers[PZERG] > 0 )
send_to_char("You already have the Eyes of Zerg Power.\n\r", ch);
else if ( ch->practice < 10)
send_to_char("You don't have the 10 required primal.\n\r", ch);
else
{
ch->pcdata->powers[improve] += 1;
ch->practice -= 10;
send_to_char("You master the Eyes of Zerg Power.\n\r", ch);
}
return;
}
else if (!str_cmp(arg1,"speed power"))
{
if ( ch->pcdata->powers[PZERG] > 1 )
send_to_char("You already have the Speed Power.\n\r", ch);
else if ( ch->pcdata->powers[PZERG] < 1 )
send_to_char("You need all the powers before this one to receive this power.\n\r", ch);
else if ( ch->practice < 20)
send_to_char("You don't have the 20 required primal.\n\r", ch);
else
{
ch->pcdata->powers[improve] += 1;
ch->practice -= 20;
send_to_char("You master the Speed Power.\n\r", ch);
}
return;
}
else if (!str_cmp(arg1,"super invis"))
{
if ( ch->pcdata->powers[PZERG] > 2 )
send_to_char("You already have the Super Invis Power.\n\r", ch);
else if ( ch->pcdata->powers[PZERG] < 2 )
send_to_char("You need all the powers before this one to receive this power.\n\r", ch);
else if ( ch->practice < 30)
send_to_char("You don't have the 30 required primal.\n\r", ch);
else
{
ch->pcdata->powers[improve] += 1;
ch->practice -= 30;
send_to_char("You master the Super Invis Power.\n\r", ch);
}
return;
}
else if (!str_cmp(arg1,"toughness"))
{
if ( ch->pcdata->powers[PZERG] > 3 )
send_to_char("You already have the Toughness Power.\n\r", ch);
else if ( ch->pcdata->powers[PZERG] < 3 )
send_to_char("You need all the power before this one to receive this power.\n\r", ch);
else if ( ch->practice < 40)
send_to_char("You don't have the 40 required primal.\n\r", ch);
else
{
ch->pcdata->powers[improve] += 1;
ch->practice -= 40;
send_to_char("You master the Toughness Power.\n\r", ch);
}
return;
}
else if (!str_cmp(arg1,"super shield"))
{
if ( ch->pcdata->powers[PZERG] > 4 )
send_to_char("You already have the Super Shield power.\n\r", ch);
else if ( ch->pcdata->powers[PZERG] < 4 )
send_to_char("You need all the power before this one to receive this power.\n\r", ch);
else if ( ch->practice < 50)
send_to_char("You don't have the 50 required primal.\n\r", ch);
else
{
ch->pcdata->powers[improve] += 1;
ch->practice -= 50;
send_to_char("You master the Super Shield Power.\n\r", ch);
}
return;
}
else if (!str_cmp(arg1,"travel"))
{
if ( ch->pcdata->powers[PZERG] > 5 )
send_to_char("You already have the travel power.\n\r", ch);
else if ( ch->pcdata->powers[PZERG] < 5 )
send_to_char("You need all the power before this one to receive this power.\n\r", ch);
else if ( ch->practice < 60)
send_to_char("You don't have the 60 required primal.\n\r", ch);
else
{
ch->pcdata->powers[improve] += 1;
ch->practice -= 60;
send_to_char("You master the travel power.\n\r", ch);
}
return;
}
sprintf(buf,"Powers Learned (%d).\n\r", ch->pcdata->powers[PZERG]);
send_to_char(buf,ch);
return;
}
void do_eyesofzerg( CHAR_DATA *ch, char *argument )
{
if ( IS_NPC(ch) )
return;
if ( !IS_CLASS(ch, CLASS_ZERG) )
{
send_to_char("Huh?\n\r", ch);
return;
}
if ( ch->pcdata->powers[PZERG] < 1 )
{
send_to_char("You have not learned the Eyes of Zerg Power.\n\r", ch);
return;
}
if ( IS_SET(ch->act, PLR_HOLYLIGHT) )
{
REMOVE_BIT(ch->act, PLR_HOLYLIGHT);
send_to_char( "Your lose your Zergly sight.\n\r", ch );
}
else
{
send_to_char( "Xkilla gives you his eye vision.\n\r", ch );
SET_BIT(ch->act, PLR_HOLYLIGHT);
}
return;
}
void do_supershield( CHAR_DATA *ch, char *argument )
{
if ( IS_NPC(ch) )
return;
if (!IS_CLASS(ch, CLASS_ZERG) )
{
send_to_char("Huh?\n\r", ch);
return;
}
if ( ch->pcdata->powers[PZERG] < 5 )
{
send_to_char("You have not learned the Super Shield Power.\n\r", ch);
return;
}
/* Remove super shield in handler.c */
if ( IS_AFFECTED(ch, AFF_STEELSHIELD) )
{
REMOVE_BIT( ch->affected_by, AFF_STEELSHIELD );
send_to_char( "Your super shield disappears.\n\r", ch );
}
else
{
send_to_char( "You are surrounded by a super shield\n\r", ch );
SET_BIT(ch->affected_by, AFF_STEELSHIELD);
}
return;
}
void do_ztravel( CHAR_DATA *ch, char *argument )
{
char arg[MAX_INPUT_LENGTH];
CHAR_DATA *victim;
CHAR_DATA *mount;
one_argument( argument, arg );
if ( !IS_CLASS(ch, CLASS_ZERG) )
{
send_to_char("Huh?\n\r", ch);
return;
}
if (IS_CLASS(ch, CLASS_ZERG) && ch->pcdata->powers[PZERG] < 6 )
{
send_to_char("You have not learned the travel power.\n\r", ch);
return;
}
if ( arg[0] == '\0' )
{
send_to_char( "Travel to where?\n\r", ch );
return;
}
if ( ch->position == POS_FIGHTING )
{
send_to_char( "No way! You are fighting.\n\r", ch );
return;
}
if ( ( victim = get_char_world( ch, arg ) ) == NULL )
{
send_to_char( "Nobody by that name.\n\r", ch );
return;
}
if( IS_IMMUNE(victim, IMM_TRAVEL) && !IS_NPC(victim))
{
send_to_char( "They don't wish to be traveled to.\n\r", ch);
return;
}
if ( !IS_IMMUNE(victim, IMM_SUMMON) && !IS_NPC(victim))
{
send_to_char("They do not wish to be astraled to!\n\r", ch);
return;
}
act( "You travel.", ch, NULL, NULL, TO_CHAR );
act( "$n travels.", ch, NULL, NULL, TO_ROOM );
char_from_room( ch );
char_to_room( ch, get_room_index(victim->in_room->vnum) );
act( "You appear infront of $N", ch, NULL, victim, TO_CHAR );
act( "$n appears infront of $N.", ch, NULL, victim, TO_ROOM );
do_look( ch, "auto" );
if ( (mount = victim->mount) == NULL ) return;
char_from_room( mount );
char_to_room( mount, get_room_index(victim->in_room->vnum) );
do_look( mount, "auto" );
return;
}
void do_superinvis( CHAR_DATA *ch, char *argument )
{
if (IS_NPC(ch)) return;
if (!IS_CLASS(ch, CLASS_ZERG) )
{
send_to_char("Huh?\n\r", ch);
return;
}
if (IS_CLASS(ch, CLASS_ZERG) && ch->pcdata->powers[PMONK] < 3 )
{
send_to_char("You have not learned the Super Invis.\n\r", ch);
return;
}
if ( IS_SET(ch->act, PLR_WIZINVIS) )
{
REMOVE_BIT(ch->act, PLR_WIZINVIS);
send_to_char( "You appear from a shroud of light.\n\r", ch );
act( "$n appears from a shroud of light.", ch, NULL, NULL, TO_ROOM );
}
else
{
send_to_char( "You shield yourself in a shroud of light.\n\r", ch );
act( "$n is shielded in a shroud of light.", ch, NULL, NULL, TO_ROOM );
SET_BIT(ch->act, PLR_WIZINVIS);
}
return;
}
void do_zclan( CHAR_DATA *ch, char *argument )
{
char buf[MAX_STRING_LENGTH];
CHAR_DATA *gch;
char lord[MAX_INPUT_LENGTH];
if (IS_NPC(ch)) return;
if (!IS_CLASS(ch, CLASS_ZERG) )
{
send_to_char("Huh?\n\r",ch);
return;
}
if( ch->generation < 3 )
strcpy(lord,ch->name);
else strcpy(lord,ch->lord);
sprintf( buf, "%s's Zergs:\n\r", ch->lord );
send_to_char( buf, ch );
send_to_char("[ Name ] [ Hits % ] [ Mana % ] [ Move % ]\n\r", ch );
for ( gch = char_list; gch != NULL; gch = gch->next )
{
if ( IS_NPC(gch) ) continue;
if ( !IS_CLASS(gch, CLASS_ZERG) ) continue;
if ( !str_cmp(gch->lord,lord)|| !str_cmp(gch->name,lord) )
{
sprintf( buf,
"[%-16s] [%-6d%3d] [%-6d%3d] [%-6d%3d]\n\r",
capitalize( gch->name ),
gch->hit, (gch->hit * 100 / gch->max_hit ),
gch->mana, (gch->mana * 100 / gch->max_mana),
gch->move, (gch->move * 100 / gch->max_move) );
send_to_char( buf, ch );
}
}
return;
}