/****************************************************************************
* _______ _ ______ _______ _______ ______ *
* ( ____ \( \ ( __ \ |\ /|( ___ )( )|\ /|( __ \ *
* | ( \/| ( | ( \ )| ) ( || ( ) || () () || ) ( || ( \ ) *
* | (__ | | | | ) || (___) || (___) || || || || | | || | ) | *
* | __) | | | | | || ___ || ___ || |(_)| || | | || | | | *
* | ( | | | | ) || ( ) || ( ) || | | || | | || | ) | *
* | (____/\| (____/\| (__/ )| ) ( || ) ( || ) ( || (___) || (__/ ) *
* (_______/(_______/(______/ |/ \||/ \||/ \|(_______)(______/ *
* +-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+ *
* |T|h|e| |O|a|k|l|a|n|d| |C|h|r|o|n|i|c|l|e|s| *
* +-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+ *
* ------------------------------------------------------------------------- *
* EldhaMUD code (C) 2003-2005 by Robert Powell (Tommi) *
* EldhaMUD Team: Celest, Altere and Krelowyn *
* ------------------------------------------------------------------------- *
* *
****************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "./Headers/mud.h"
#include "./Headers/commands.h"
void do_pk_toggle( CHAR_DATA * ch, char *argument )
{
int cost = 500000; /* Cost to change */
CHAR_DATA *mob;
if( argument[0] == '\0' )
{
send_to_char( "&RSyntax: pk-toggle on\n\r", ch );
send_to_char( "&RSyntax: pk-toggle off\n\r", ch );
send_to_char( "&RSee &YHELP pk-toggle &Rfor more info.\n\r", ch );
return;
}
/*
* check for toggle mob
*/
for( mob = ch->in_room->first_person; mob; mob = mob->next_in_room )
{
if( IS_NPC( mob ) && xIS_SET( mob->act, ACT_PKTOGGLE ) )
{
break;
}
else
{
send_to_char( "&wThere doesn't seem to be anyone here who can help you with that!\n\r", ch );
return;
}
}
if( !str_cmp( argument, "on" ) )
{
if( get_age( ch ) < 18 )
{
send_to_char( "&rYou be 18 years of age to be a Player Killer.\n\r", ch );
}
else
{
if( CAN_PKILL( ch ) )
{
send_to_char( "&rYou are already a Player Killer!\n\r", ch );
}
else
{
send_to_char( "&rPK has been toggled on, you are now a Deadly Player!!!\n\r", ch );
SET_BIT( ch->pcdata->flags, PCFLAG_DEADLY );
xREMOVE_BIT( ch->act, PLR_NICE );
save_char_obj( ch );
saving_char = NULL;
}
}
return;
}
if( !str_cmp( argument, "off" ) )
{
if( !CAN_PKILL( ch ) )
{
send_to_char( "&rYou are already peaceful!\n\r", ch );
return;
}
else
{
if( ch->gold < cost )
{
send_to_char( "&rYou do not have enough money to toggle PK off!\n\r", ch );
return;
}
else
{
ch->gold -= cost;
REMOVE_BIT( ch->pcdata->flags, PCFLAG_DEADLY );
xSET_BIT( ch->act, PLR_NICE );
send_to_char( "&wPk has been toggled off. You are now a peacfull player.\n\r", ch );
save_char_obj( ch );
saving_char = NULL;
}
}
return;
}
}
void do_travel( CHAR_DATA * ch, char *argument )
{
CHAR_DATA *travel_mage;
CHAR_DATA *mount;
char buf[MAX_STRING_LENGTH];
char arg1[MAX_STRING_LENGTH];
char arg2[MAX_STRING_LENGTH];
int j;
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
travel_mage = NULL;
for( travel_mage = ch->in_room->first_person; travel_mage; travel_mage = travel_mage->next_in_room )
{
if( IS_NPC( travel_mage ) && xIS_SET( travel_mage->act, ACT_TRAVELMAGE ) )
break;
}
if( !travel_mage )
{
ch_printf( ch, "There is no travel mage here.\n\r" );
return;
}
if( arg1[0] == '\0' || !strcmp( arg1, "list" ) )
{
int i;
ch_printf( ch, "I offer the following locations...\n\r" );
ch_printf( ch, " \n\r" );
ch_printf( ch, "[Location Name ] [Price ]\n\r" );
ch_printf( ch, "---------------------------------------------------\n\r" );
for( i = 0; i < ( MAX_TRAVEL_LOCATION - 1 ); i++ )
{
sprintf( buf, "[%-40s] [%-6ld]\n\r", travel_table[i].long_desc, travel_table[i].cost );
ch_printf( ch, "%s", buf );
}
ch_printf( ch, " \n\r" );
ch_printf( ch, "Please type 'travel buy <location>' and have your gold ready!\n\r" );
ch_printf( ch, "For more information type 'help travelmage' and read!\n\r" );
return;
}
if( !strcmp( arg1, "buy" ) )
{
if( arg2[0] == '\0' )
{
sprintf( buf, "%s You must tell me where you wish to travel to.\n\r", ch->name );
send_to_char( buf, travel_mage );
return;
}
for( j = 0; j < MAX_TRAVEL_LOCATION; j++ )
{
if( !str_cmp( arg2, travel_table[j].keyword ) )
{
if( ch->gold < travel_table[j].cost )
{
sprintf( buf, "%s Sorry you dont have enough gold to travel to %s\n\r", ch->name, travel_table[j].long_desc );
send_to_char( buf, travel_mage );
return;
}
ch->gold -= travel_table[j].cost;
act( AT_PLAIN, "$n disappears in a violet fog.\n\r", ch, NULL, NULL, TO_ROOM );
sprintf( buf, "You are surrounded by a violet fog.{x\n\r" );
char_from_room( ch );
char_to_room( ch, get_room_index( travel_table[j].vnum ) );
ch_printf( ch, "%s", buf );
mount = ch->mount;
if( ch->mount != NULL && ch->mount->in_room == ch->in_room )
{
char_from_room( mount );
char_to_room( mount, get_room_index( travel_table[j].vnum ) );
act( AT_PLAIN, "&M$n disappears in a violet fog.&x\n\r", ch, NULL, NULL, TO_ROOM );
}
do_look( ch, "" );
return;
}
}
send_to_char( "Sorry, that location is not on the list.\n\r", ch );
return;
}
}
void do_heal( CHAR_DATA * ch, char *argument )
{
CHAR_DATA *mob;
char arg[MAX_INPUT_LENGTH];
int cost, sn;
SPELL_FUN *spell;
char *words;
/*
* Search for an act_healer
*/
for( mob = ch->in_room->first_person; mob; mob = mob->next_in_room )
{
if( IS_NPC( mob ) && xIS_SET( mob->act, ACT_HEALER ) )
break;
}
if( mob == NULL )
{
send_to_char( "You can't do that here.\n\r", ch );
return;
}
one_argument( argument, arg );
if( arg[0] == '\0' )
{
/*
* display price list
*/
act( AT_PLAIN, "$N says 'I offer the following spells:'", ch, NULL, mob, TO_CHAR );
send_to_char( " light: cure light wounds 1000 gold\n\r", ch );
send_to_char( " serious: cure serious wounds 1500 gold\n\r", ch );
send_to_char( " critical: cure critical wounds 2500 gold\n\r", ch );
send_to_char( " heal: healing spell 5000 gold\n\r", ch );
send_to_char( " blind: cure blindness 2000 gold\n\r", ch );
send_to_char( " poison: cure poison 2500 gold\n\r", ch );
send_to_char( " curse: remove curse 5000 gold\n\r", ch );
send_to_char( " refresh: restore movement 500 gold\n\r", ch );
send_to_char( " mana: restore mana 1000 gold\n\r", ch );
send_to_char( " Type heal <type> to be healed.\n\r", ch );
return;
}
if( !str_cmp( arg, "light" ) )
{
spell = spell_smaug;
sn = skill_lookup( "cure light" );
words = "judicandus dies";
cost = 1000;
}
else if( !str_cmp( arg, "serious" ) )
{
spell = spell_smaug;
sn = skill_lookup( "cure serious" );
words = "judicandus gzfuajg";
cost = 1600;
}
else if( !str_cmp( arg, "critical" ) )
{
spell = spell_smaug;
sn = skill_lookup( "cure critical" );
words = "judicandus qfuhuqar";
cost = 2500;
}
else if( !str_cmp( arg, "heal" ) )
{
spell = spell_smaug;
sn = skill_lookup( "heal" );
words = "pzar";
cost = 5000;
}
else if( !str_cmp( arg, "blind" ) )
{
spell = spell_cure_blindness;
sn = skill_lookup( "cure blindness" );
words = "judicandus noselacri";
cost = 2000;
}
else if( !str_cmp( arg, "poison" ) )
{
spell = spell_cure_poison;
sn = skill_lookup( "cure poison" );
words = "judicandus sausabru";
cost = 2500;
}
else if( !str_cmp( arg, "curse" ) )
{
spell = spell_remove_curse;
sn = skill_lookup( "remove curse" );
words = "candussido judifgz";
cost = 5000;
}
else if( !str_cmp( arg, "mana" ) )
{
spell = NULL;
sn = -1;
words = "energizer";
cost = 1000;
}
else if( !str_cmp( arg, "refresh" ) )
{
spell = spell_smaug;
sn = skill_lookup( "refresh" );
words = "candusima";
cost = 500;
}
else
{
act( AT_PLAIN, "$N says ' Type 'heal' for a list of spells.'", ch, NULL, mob, TO_CHAR );
return;
}
if( cost > ch->gold )
{
act( AT_PLAIN, "$N says 'You do not have enough gold for my services.'", ch, NULL, mob, TO_CHAR );
return;
}
WAIT_STATE( ch, PULSE_VIOLENCE );
ch->gold -= cost;
act( AT_PLAIN, "$n utters the words '$T'.", mob, NULL, words, TO_ROOM );
if( spell == NULL )
{
ch->mana += dice( 2, 8 ) + ch->level / 3;
ch->mana += UMIN( ch->level, ch->max_mana - ch->mana );
send_to_char( "A warm glow passes through you.\n\r", ch );
return;
}
if( sn == -1 )
return;
spell( sn, ch->level, mob, ch );
}
void do_restring( CHAR_DATA * ch, char *argument )
{
CHAR_DATA *mob = NULL;
char arg[MAX_INPUT_LENGTH];
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
OBJ_DATA *obj = NULL;
int value;
smash_tilde( argument );
argument = one_argument( argument, arg );
argument = one_argument( argument, arg1 );
strcpy( arg2, argument );
if( arg[0] == '\0' || arg1[0] == '\0' || arg2[0] == '\0' )
{
send_to_char( "Syntax:\n\r", ch );
send_to_char( " restring <Obj-Name> <Field> <String>\n\r", ch );
send_to_char( " fields: name short long\n\r", ch );
return;
}
if( ( obj = get_obj_world( ch, arg ) ) == NULL )
{
send_to_char( "There is nothing like that in all the realms.\n\r", ch );
return;
}
for( mob = ch->in_room->first_person; mob; mob = ch->next_in_room )
{
if( IS_NPC( mob ) && xIS_SET( mob->act, ACT_RESTRING ) )
break;
}
if( !mob )
{
send_to_char( "You need to be at a restringer to do that.\n\r", ch );
return;
}
if( ch->gold < 2000 )
{
send_to_char( "&rYou do not have enough money to restring anything!\n\r", ch );
return;
}
strcpy( arg, obj->name );
separate_obj( obj );
value = atoi( arg2 );
if( !str_cmp( arg1, "name" ) )
{
STRFREE( obj->name );
obj->name = STRALLOC( arg2 );
send_to_char( "Ok.\n\r", ch );
ch->gold -= 2000;
return;
}
if( !str_cmp( arg1, "short" ) )
{
STRFREE( obj->short_descr );
obj->short_descr = STRALLOC( arg2 );
send_to_char( "Ok.\n\r", ch );
ch->gold -= 2000;
return;
}
if( !str_cmp( arg1, "long" ) )
{
STRFREE( obj->description );
obj->description = STRALLOC( arg2 );
send_to_char( "Ok.\n\r", ch );
ch->gold -= 2000;
return;
}
}