//
// C Implementation: commands.c
//
// Description: This c file will comtain any commands that dont realy have a permant home
//
//
// Author: robo <powell123@yahoo.com>, (C) 2005
//
//
//
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "mud.h"
#include "commands.h"
void do_pk_toggle( CHAR_DATA *ch, char *argument )
{
int cost=500000; /* Cost to change */
CHAR_DATA *mob;
// char arg[MAX_INPUT_LENGTH];
// cost = 100000;
// argument = one_argument( argument, arg );
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];
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, 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;
}
int j;
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, 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);
}