/***************************************************************************
* This snippet was written by Donut for the Khrooon Mud. *
* Original Coded by Yago Diaz <yago@cerberus.uab.es> *
* (C) June 1997 *
* (C) Last Modification October 1997 *
* Major enhancement/neatening done by *
* Kharas (root@fading.tcimet.net) *
* (eg: Made sum_dat table, shortened function, etc) *
* Rewrite summoner_data, summoner_table, ... by Yago *
* November 1997 *
***************************************************************************/
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "recycle.h"
#include "tables.h"
#include "clan.h"
#define MONEY "Gold"
struct summoner_data
{
char *name;
int cost;
int vnum;
};
const struct summoner_data summoner_table [] =
{
/* Name */ /* Cost */ /* Vnum */
{ "The Mutant Dump", 150, 11800 },
{ "City Of Annonymous", 200, 12500 },
{ "Hell", 100, 10416 },
{ "Troy", 9000, 10983 },
{ "Divided Souls", 75, 11600 },
{ "Drakyri Isle", 100, 11700 },
{ "Sanuba Desert", 900, 42900 },
{ "Shadow Grove", 50, 1300 },
{ "Mysteria", 850, 1951 },
{ "Githyanki Keep", 300, 7750 },
{ "Keep of Mahntor", 75, 2361 },
{ "Black Water Park", 7500, 17527 },
{ "Kingdoms", 10000, 17542 },
// { "Remort Challenge", 1000, 9400 },
{ NULL, 0, 0 }
};
DECLARE_DO_FUN( do_look );
CHAR_DATA * find_summoner args( ( CHAR_DATA *ch ) );
CHAR_DATA *find_summoner ( CHAR_DATA *ch )
{
CHAR_DATA * summoner;
for ( summoner = ch->in_room->people; summoner != NULL; summoner = summoner->next_in_room )
{
if (!IS_NPC(summoner))
continue;
if (summoner->spec_fun == spec_lookup( "spec_summoner" ))
return summoner;
}
if (summoner == NULL || summoner->spec_fun != spec_lookup( "spec_summoner" ))
{
send_to_char("You can't do that here.\n\r",ch);
return NULL;
}
if ( summoner->fighting != NULL)
{
send_to_char("Wait until the fighting stops.\n\r",ch);
return NULL;
}
return NULL;
}
void do_travel(CHAR_DATA *ch, char *argument)
{
CHAR_DATA *summoner,*pet;
ROOM_INDEX_DATA *room;
int i;
char buf[MAX_STRING_LENGTH], arg[MAX_STRING_LENGTH];
char arg1[MAX_STRING_LENGTH];
argument = one_argument(argument, arg );
argument = one_argument(argument, arg1);
summoner = find_summoner (ch);
if (!summoner)
return;
if (arg[0] == '\0')
{
sprintf(buf, "You must tell me what travel you want to do:\n\r"
"\tTRAVEL list - shows possible locations to travel to.\n\r"
"\tTRAVEL buy <name> - Travel to selected location.");
act("$N says '$t'", ch, buf, summoner, TO_CHAR);
return;
}
if (!str_cmp( arg, "list"))
{
sprintf(buf, "%s says you may travel to the following locations:\n\r", PERS(ch,summoner));
send_to_char(buf,ch);
for( i=0; summoner_table[i].name != NULL; i++ )
{
sprintf(buf,"\t%-15s - %-3d %s\n\r",
summoner_table[i].name, summoner_table[i].cost, MONEY);
send_to_char(buf,ch);
}
return;
}
if (!str_cmp( arg, "buy"))
{
if (arg1[0] == '\0')
{
sprintf(buf, "You must tell me where you wish to travel");
act("$N says '$t'.", ch, buf, summoner, TO_CHAR);
return;
}
for( i=0; summoner_table[i].name != NULL; i++ )
if(is_name(arg1,summoner_table[i].name))
break;
if(summoner_table[i].name == NULL)
{
sprintf(buf, "That location of travel is not on the list");
act("$N says '$t'.", ch, buf, summoner, TO_CHAR);
return;
}
if ( ( ch->silver / 100 + ch->gold + ch->platinum * 100 ) >= summoner_table[i].cost )
send_to_char("Splendid, you have the required funds.\n\r",ch);
else
{
sprintf(buf, "You don't have enough %s for my services", MONEY);
act("$N says '$t'.", ch, buf, summoner, TO_CHAR);
return;
}
room = get_room_index(summoner_table[i].vnum);
if( !room )
{
send_to_char("That location's room doesn't seem to exist,"
"Please inform your Imp.\n\r",ch);
return;
}
if ( (pet = ch->pet) != NULL && pet->in_room == ch->in_room)
{
char_from_room( pet );
char_to_room( pet, get_room_index(summoner_table[i].vnum) );
}
char_from_room( ch );
char_to_room( ch, get_room_index(summoner_table[i].vnum) );
deduct_cost(ch,summoner_table[i].cost,VALUE_GOLD);
sprintf(buf, "%s utters the words 'hasidsindsad'\n\rYou are surrounded by a violet fog.\n\r", summoner->short_descr);
send_to_char(buf, ch);
do_look (ch, "");
return;
}
else
do_travel(ch,"");
}