/**************************************************************
* Myth Mud improvements ALL by David Spink aka Morglum. *
* This mud is NOT to be copied in whole or in part! No one *
* has the permission to authorise the use of this code. *
* In order to use this code you MUST comply with the terms *
* and conditions in 'license.myth' (as shipped). *
**************************************************************/
#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"
/*
* Local functions.
*/
void do_fade( CHAR_DATA *ch, char *argument )
{
char arg[MIL];
CHAR_DATA *victim;
char buf[MIL];
int cost = 50;
argument = one_argument( argument, arg );
if (IS_NPC(ch)) return;
if (!IS_HIGHLANDER(ch))
{
STC( "Huh?\n\r", ch );
return;
}
if (!IS_SET(ch->pcdata->disc[HIGH_POWERS],HIGH_FADE))
{
if (ch->practice < cost)
{
sprintf(buf,"You need another %d primal to be able to fade through reality.\n\r",cost - ch->practice );
STC(buf,ch);
return;
}
else
{
ch->practice -= cost;
STC("You are now able to fade through reailty.\n\r", ch);
SET_BIT(ch->pcdata->disc[HIGH_POWERS],HIGH_FADE);
}
}
if ( !IS_NPC(ch) && ch->mana < 500 )
{
STC( "You don't have enough mana.\n\r", ch );
return;
}
if (arg[0] == '\0')
{
STC( "Who do you wish to fade to?\n\r", ch );
return;
}
if ( ( victim = get_char_world( ch, arg)) == NULL)
{
STC("Nothing happens.\n\r",ch);
return;
}
victim = get_char_world(ch, arg);
if ( victim->in_room == ch->in_room)
{
STC( "But you are already there!\n\r", ch );
return;
}
switch (check_moveto_mob(ch, victim))
{
case 2:
guardian_message(victim);
act("$n just failed to fade into reality here.",ch,NULL,victim,TO_VICT);
// Drop thru
case 1:
act("You failed.",ch,NULL,victim,TO_CHAR);
return;
}
if (IS_NPC(victim) && victim->level > 199)
{
act("You failed.",ch,NULL,victim,TO_CHAR);
return;
}
STC("You fade out of reality.\n\r",ch);
act("$n fades out of reality and vanishes from sight.",ch,NULL,NULL,TO_ROOM);
char_from_room(ch);
char_to_room(ch,victim->in_room);
do_look(ch,"");
STC("You fade into reality.\n\r",ch);
act("$N fades into reality.",victim,NULL,ch,TO_ROOM);
ch->mana -= 500;
return;
}
void do_weaponskill( CHAR_DATA *ch, char *argument )
{
char buf[MIL];
int cost = 100;
if (IS_NPC(ch)) return;
if (!IS_HIGHLANDER(ch) )
{
STC("Huh?\n\r",ch);
return;
}
if (IS_SET(ch->pcdata->disc[HIGH_POWERS],HIGH_WEAPONSKILL))
{
STC("You already got that power.\n\r",ch);
return;
}
if (ch->practice < cost)
{
sprintf(buf,"You need another %d primal to get supreme weaponskill.\n\r",cost - ch->practice );
STC(buf,ch);
return;
}
ch->practice -= cost;
STC("You gain a superior insight in weapons.\n\r",ch);
SET_BIT(ch->pcdata->disc[HIGH_POWERS],HIGH_WEAPONSKILL);
return;
}
void do_fast_healing( CHAR_DATA *ch, char *argument )
{
char buf [MIL];
int cost = 75;
if (IS_NPC(ch)) return;
if (!IS_HIGHLANDER(ch) )
{
STC("Huh?\n\r",ch);
return;
}
if (IS_SET(ch->pcdata->disc[HIGH_POWERS],HIGH_REGENERATE))
{
STC("You already got that power.\n\r",ch);
return;
}
if (ch->practice < cost)
{
sprintf(buf,"You need another %d primal to get Fast Healing.\n\r",cost - ch->practice );
STC(buf,ch);
return;
}
ch->practice -= cost;
STC("Your body gains the ability to regenerate itself.\n\r",ch);
SET_BIT(ch->pcdata->disc[HIGH_POWERS],HIGH_REGENERATE);
return;
}
void do_sword( CHAR_DATA *ch, char *argument )
{
OBJ_INDEX_DATA *pObjIndex;
OBJ_DATA *obj;
char buf[MSL];
char arg1[MIL];
char arg2[MIL];
int vnum = 0;
int primal,amount,cost = 0;
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
if (IS_NPC(ch)) return;
if (!IS_HIGHLANDER(ch))
{
STC("Huh?\n\r",ch);
return;
}
if ( arg1[0] == '\0' )
{
STC(" 300 primal - The Ultimate Katana \n\r",ch);
STC(" 200 primal - Divine Wakazasi\n\r",ch);
STC(" 175 primal - Katana of Sharpness\n\r",ch);
STC(" 150 primal - Katana of speed\n\r",ch);
STC(" 125 primal - Shimmering Wakazasi\n\r",ch);
STC(" 100 primal - Gleaming Katana\n\n\r",ch);
STC("To craft a new weapon, type sword followed by the amount of primal points you wish to spend.\n\r",ch);
return;
}
if (!is_number(arg1))
{
STC("Please enter a numeric value.\n\r",ch);
return;
}
amount = atoi( arg1 );
primal = ch->practice;
if (amount>299) {vnum = 29611;cost=300;}
else if (amount>199) {vnum = 29610;cost=200;}
else if (amount>174) {vnum = 29609;cost=175;}
else if (amount>149) {vnum = 29608;cost=150;}
else if (amount>124) {vnum = 29607;cost=125;}
else if (amount>99) {vnum = 29606;cost=100;}
else if (amount<100)
{
STC("Please enter a higher number.\n\r",ch);
return;
}
if (primal < amount)
{
STC("You don't have enough primal points.\n\r",ch);
return;
}
if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL)
{
STC("Missing object, please inform Morglum.\n\r",ch);
return;
}
obj = create_object(pObjIndex, 50);
obj_to_char(obj, ch);
ch->practice -= cost;
sprintf( buf, obj->name, "sword", ch->name );
free_string( obj->name );
obj->name = str_dup( buf );
sprintf( buf, obj->short_descr);
free_string( obj->short_descr );
obj->short_descr = str_dup( buf );
sprintf( buf, obj->description);
free_string( obj->description );
obj->description = str_dup( buf );
free_string( obj->questmaker );
obj->questmaker = str_dup( ch->name );
free_string( obj->questowner );
obj->questowner = str_dup( ch->name );
obj->level = 60;
SET_BIT( obj->spectype, SITEM_HIGHLANDER );
act("$p appears in your hands in a blast of magic.",ch,obj,NULL,TO_CHAR);
act("$p appears in $n's hands in a blast of magic.",ch,obj,NULL,TO_ROOM);
return;
}
void do_block( CHAR_DATA *ch, char *argument )
{
char buf [MIL];
int cost = 100;
if (IS_NPC(ch)) return;
if (!IS_HIGHLANDER(ch) )
{
STC("Huh?\n\r",ch);
return;
}
if (IS_SET(ch->pcdata->disc[HIGH_POWERS],HIGH_BLOCK))
{
STC("You already got that power.\n\r",ch);
return;
}
if (ch->practice < cost)
{
sprintf(buf,"You need another %d primal to get block.\n\r",cost - ch->practice );
STC(buf,ch);
return;
}
ch->practice -= cost;
STC("You gain the ability to block the path of fleeing enemies.\n\r",ch);
SET_BIT(ch->pcdata->disc[HIGH_POWERS],HIGH_BLOCK);
return;
}
/*
void do_selfempower( CHAR_DATA *ch, char *argument)
{
// AFFECT_DATA af;
// int sn =skill_lookup("selfempower");
int mainweapon,weaponsk;
OBJ_DATA *obj = get_eq_char( ch, WEAR_WIELD);
if (obj == NULL) mainweapon=0;
else
mainweapon = obj->value[3];
weaponsk = ch->wpn[mainweapon];
if (!IS_HIGHLANDER(ch))
{
STC("Huh?\n\r",ch);
return;
}
if (ch->pcdata->absorb[ABS_MOB_HP] > 0)
{
ch->max_hit -= ch->pcdata->absorb[ABS_MOB_HP];
ch->max_mana -= ch->pcdata->absorb[ABS_MOB_HP];
ch->max_move -= ch->pcdata->absorb[ABS_MOB_HP];
ch->pcdata->absorb[ABS_MOB_HP] = 0;
ch->pcdata->absorb[ABS_MOB_MAX_HP] = 0;
STC( "You feel a lot weaker.\n\r",ch);
act(" $n starts to look a lot weaker.", ch, NULL, NULL, TO_ROOM );
return;
}
if (!IS_CHOSEN(ch))
{
ch->max_hit += weaponsk;
ch->max_mana += weaponsk;
ch->max_move += weaponsk;
ch->pcdata->absorb[ABS_MOB_HP] = weaponsk;
ch->pcdata->absorb[ABS_MOB_MAX_HP] = weaponsk * 5;
}
else
{
ch->max_hit += weaponsk/2;
ch->max_mana += weaponsk/2;
ch->max_move += weaponsk/2;
ch->pcdata->absorb[ABS_MOB_HP] = weaponsk/2;
ch->pcdata->absorb[ABS_MOB_MAX_HP] = (weaponsk/2) * 5;
}
act( "$n suddenly looks far stronger.", ch, NULL, NULL, TO_ROOM );
STC( "You feel much more powerful.\n\r", ch);
return;
}
*/