{ Summary: Clan routines ## $Id: clan.pas,v 1.4 2004/04/10 22:24:03 druid Exp $ } unit clan; interface uses dtypes; type GClan = class private _name : string; { clan name } _abbrev : string; { abbreviation of clan name, 3-4 chars } _leader : string; { leader of clan } _minlevel : integer; { Minimum level to join } _clanobj : integer; { VNum of clan obj (e.g. a ring) } _clanvnum : integer; { Clan area starting VNum } public constructor Create(); procedure load(const fname : string); property name : string read _name write _name; property abbrev : string read _abbrev write _abbrev; property leader : string read _leader write _leader; property minlevel : integer read _minlevel write _minlevel; property clanobj : integer read _clanobj write _clanobj; property clanvnum : integer read _clanvnum write _clanvnum; end; var clan_list : GDLinkedList; procedure load_clans(); function findClan(const s : string) : GClan; procedure initClans(); procedure cleanupClans(); implementation uses SysUtils, fsys, strip, console, mudsystem; constructor GClan.Create(); begin inherited Create; _minlevel := 50; _clanvnum := 0; _clanobj := 0; _leader := ''; _name := 'Untitled Clan'; _abbrev := ''; end; procedure GClan.load(const fname : string); var cf : textfile; d, r : string; i : integer; begin assignfile(cf, translateFileName('clans\'+fname)); {$I-} reset(cf); {$I+} if (IOResult <> 0) then begin bugreport('GClan.load', 'clan.pas', 'could not open clans\' + fname); exit; end; repeat readln(cf,d); until uppercase(d)='#CLAN'; repeat readln(cf,d); r:=uppercase(left(d,':')); if r='NAME' then begin name := right(d,' '); writeConsole(' '+name); end else if r='LEADER' then leader := right(d,' ') else if r='MINLEVEL' then try minlevel := strtointdef(right(d,' '), 0) except minlevel:=0; bugreport('load_clan', 'area.pas', 'illegal character in MINLEVEL parameter'); end else if r='CLANOBJ' then try clanobj := strtoint(right(d,' ')) except clanobj:=0; bugreport('load_clan', 'area.pas', 'illegal character in CLANOBJ parameter'); end else if r='CLANVNUM' then try clanvnum:=strtoint(right(d,' ')); except clanvnum:=0; bugreport('load_clan', 'area.pas', 'illegal character in CLANVNUM parameter'); end else if (r = 'ABBREV') then abbrev := right(d, ' '); until uppercase(d)='#END'; // simple heuristics to convert a clan name to an abbreviation when none is specified if (abbrev = '') then begin for i := 1 to length(name) do if (name[i] in ['A'..'Z']) then abbrev := abbrev + name[i]; if (length(abbrev) > 3) then abbrev := copy(abbrev, 1, 3); end; close(cf); end; procedure load_clans(); var clan : GClan; s:string; f:textfile; begin assign(f, translateFileName('clans\clan.list')); {$I-} reset(f); {$I+} if IOResult<>0 then begin bugreport('load_clans', 'area.pas', 'could not open clans\clan.list'); 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(const s : string) : GClan; var iterator : GIterator; clan : GClan; begin Result := nil; iterator := clan_list.iterator(); while (iterator.hasNext()) do begin clan := GClan(iterator.next()); if (s = clan.name) then begin Result := clan; break; end; end; iterator.Free(); end; procedure initClans(); begin clan_list := GDLinkedList.Create(); end; procedure cleanupClans(); begin clan_list.clear(); clan_list.Free(); end; end.