/*
....[@@@..[@@@..............[@.................. MUD++ is a written from
....[@..[@..[@..[@..[@..[@@@@@....[@......[@.... scratch multi-user swords and
....[@..[@..[@..[@..[@..[@..[@..[@@@@@..[@@@@@.. sorcery game written in C++.
....[@......[@..[@..[@..[@..[@....[@......[@.... This server is an ongoing
....[@......[@..[@@@@@..[@@@@@.................. development project. All
................................................ contributions are welcome.
....Copyright(C).1995.Melvin.Smith.............. Enjoy.
------------------------------------------------------------------------------
Melvin Smith (aka Fusion) msmith@hom.net
MUD++ development mailing list mudpp@van.ml.org
------------------------------------------------------------------------------
social.cc
*/
#include "config.h"
#include "social.h"
#include "io.h"
LList<Social> social_table[26];
const char * he_she[] = { "it", "he", "she" };
const char * him_her[] = { "it", "him", "her" };
const char * his_her[] = { "its", "his", "her" };
void loadSocials()
{
int count = 0;
int ihash;
String str;
char buf[256];
Social * social;
InputFile in( "../etc/socials.db" );
if( !in )
{
Cout << "Error loading socials database.\n";
return;
}
while( 1 )
{
in.getword( buf );
if( buf[0] == '#' )
{
Cout << "Socials database loaded with " << count << " entries.\n";
return;
}
if( !isalpha( buf[0] ) )
in.error( "Social name has illegal name." );
social = new Social( buf );
in.getword( buf );
if( buf[0] != '{' )
in.error( "Invalid social syntax: missing {" );
social->selftargnone << "\n\r" << in.getstring( buf ) << "\n\r";
social->roomtargnone << "\n\r" << in.getstring( buf ) << "\n\r";
social->selftargself << "\n\r" << in.getstring( buf ) << "\n\r";
social->roomtargself << "\n\r" << in.getstring( buf ) << "\n\r";
social->selftargother << "\n\r" << in.getstring( buf ) << "\n\r";
social->roomtargother << "\n\r" << in.getstring( buf ) << "\n\r";
social->targother << "\n\r" << in.getstring( buf ) << "\n\r";
in.getword( buf );
if( buf[0] != '}' )
in.error( "Invalid social syntax: missing }" );
ihash = tolower( social->getName()[0] ) - 'a';
social_table[ ihash ].add( social );
count++;
}
}
const Social * lookupSocial( const String & name )
{
const Social *social;
int ihash = tolower( name[0] ) - 'a';
if( ihash < 0 || ihash > 25 )
return 0;
social_table[ihash].reset();
while( ( social = social_table[ihash].peek() ) )
{
social_table[ihash].next();
if( name.isAbbrev( social->getName() ) )
return social;
}
return 0;
}