unit clan;
interface
uses
dtypes;
type
GClan = class
name : string;
leader : string;
minlevel : integer; { Minimum level to join }
clanobj : integer; { VNum of clan obj (e.g. a ring) }
clanvnum : integer; { Clan area starting VNum }
procedure load(fname : string);
constructor Create;
end;
var
clan_list : GDLinkedList;
procedure load_clans;
function findClan(s : string) : GClan;
implementation
uses
SysUtils,
strip,
mudsystem;
constructor GClan.Create;
begin
inherited Create;
minlevel := 50;
clanvnum := 0;
clanobj := 0;
leader := '';
name := 'Untitled Clan';
end;
procedure GClan.load(fname : string);
var cf : textfile;
d,r:string;
begin
assignfile(cf,'clans\'+fname);
{$I-}
reset(cf);
{$I+}
if (IOResult <> 0) then
begin
bugreport('GClan.load', 'clan.pas', 'could not open clans\' + fname,
'Could not open the specified clan file.');
exit;
end;
repeat
readln(cf,d);
until uppercase(d)='#CLAN';
repeat
readln(cf,d);
r:=uppercase(stripl(d,':'));
if r='NAME' then
begin
name := striprbeg(d,' ');
write_console(' '+name);
end
else
if r='LEADER' then
leader := striprbeg(d,' ')
else
if r='MINLEVEL' then
try
minlevel:=strtoint(striprbeg(d,' '))
except
minlevel:=0;
bugreport('load_clan', 'area.pas', 'illegal character in MINLEVEL parameter',
'The string was not a valid numeric value.');
end
else
if r='CLANOBJ' then
try
clanobj:=strtoint(striprbeg(d,' '))
except
clanobj:=0;
bugreport('load_clan', 'area.pas', 'illegal character in CLANOBJ parameter',
'The string was not a valid numeric value.');
end
else
if r='CLANVNUM' then
try
clanvnum:=strtoint(striprbeg(d,' '));
except
clanvnum:=0;
bugreport('load_clan', 'area.pas', 'illegal character in CLANVNUM parameter',
'The string was not a valid numeric value.');
end;
until uppercase(d)='#END';
close(cf);
end;
procedure load_clans;
var clan : GClan;
s:string;
f:textfile;
begin
assign(f,'clans\clan.list');
{$I-}
reset(f);
{$I+}
if IOResult<>0 then
begin
bugreport('load_clans', 'area.pas', 'could not open clans\clan.list',
'The specified clan list could not be found.');
exit;
end;
repeat
readln(f,s);
if (s <> '$') then
begin
clan := GClan.Create;
clan.load(s);
clan_list.insertLast(clan);
end;
until s='$';
close(f);
end;
function findClan(s : string) : GClan;
var
node : GListNode;
clan : GClan;
begin
findClan := nil;
node := clan_list.head;
while (node <> nil) do
begin
clan := node.element;
if (s = clan.name) then
begin
findClan := clan;
exit;
end;
node := node.next;
end;
end;
begin
clan_list := GDLinkedList.Create;
end.