home *** CD-ROM | disk | FTP | other *** search
- Rem edit1.bas v2.9c
- Rem $Include: 'dndbbs.inc'
-
- Sub Search.Object
- On Local Error Goto 10002
- Do
- Temp1$=Nul
- Temp1=False
- Temp3=False
- Temp4=False
- Temp6=False
- Temp7=False
- Temp8=False
- Temp9=False
- Temp10=False
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]object name substring"
- If Temp1$<>Nul Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Temp1$+")"
- Endif
- Call IO.O
- Strng="[B]room link number"
- If Temp1 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp1),2)+")"
- Endif
- Call IO.O
- Strng="[C]key number"
- If Temp3 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp3),2)+")"
- Endif
- Call IO.O
- Strng="[D]invisible objects"
- If Temp4 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[E]hidden objects"
- If Temp6 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[F]trapped objects"
- If Temp7 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[G]locked objects"
- If Temp8 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[H]objects which relock"
- If Temp9 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[I]nonpermanent objects"
- If Temp10 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Object search option(s to search, q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- Strng="Object name substring?"
- Call IO.I
- Out2=Lcase$(Out2)
- Temp1$=Out2
- Case "B"
- Strng="Room link number?"
- Call IO.I
- Temp1=Int(Val(Out2))
- Case "C"
- Strng="Key number?"
- Call IO.I
- Temp3=Int(Val(Out2))
- Case "D"
- Temp4=True
- Case "E"
- Temp6=True
- Case "F"
- Temp7=True
- Case "G"
- Temp8=True
- Case "H"
- Temp9=True
- Case "I"
- Temp10=True
- Case "S"
- Strng="Enter range:"
- Call IO.O
- Temp5=Lof(6)/Len(ObjectRecord)
- Temp$=Mid$(Str$(Temp5),2)
- Strng="From(1-"+Temp$+")?"
- No.Input.Out="1"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp<1 Or Temp>Temp5 Then
- Strng=Range$
- Call IO.O
- Exit Do
- Endif
- Strng="To("+Mid$(Str$(Temp),2)+"-"+Temp$+")?"
- No.Input.Out=Temp$
- Call IO.I
- Temp2=Int(Val(Out2))
- If Temp2<Temp Then
- Strng=Range$
- Call IO.O
- Exit Do
- Endif
- If Temp2>Temp5 Then
- Temp2=Temp5
- Endif
- For Temp5=Temp To Temp2
- Get 6,Temp5,ObjectRecord
- TempX=False
- If Temp1$<>Nul Then
- If Instr(ObjectRecord.ObjectName,Temp1$) Then
- TempX=True
- Endif
- Endif
- If Temp1 Then
- If ObjectRecord.RoomLink=Temp1 Then
- TempX=True
- Endif
- Endif
- If Temp3 Then
- If ObjectRecord.Keyed=Temp3 Then
- TempX=True
- Endif
- Endif
- If Temp4 Then
- If ObjectRecord.Invisible Then
- TempX=True
- Endif
- Endif
- If Temp6 Then
- If ObjectRecord.Hidden Then
- TempX=True
- Endif
- Endif
- If Temp7 Then
- If ObjectRecord.JailTrap Then
- TempX=True
- Endif
- Endif
- If Temp8 Then
- If ObjectRecord.Closed Then
- TempX=True
- Endif
- Endif
- If Temp9 Then
- If ObjectRecord.Relocks Then
- TempX=True
- Endif
- Endif
- If Temp10 Then
- If ObjectRecord.Permanent=False Then
- TempX=True
- Endif
- Endif
- If TempX Then
- Call Display.Object(False)
- Call More.Prompt
- If No Then
- Exit Do
- Endif
- Endif
- Next
- Exit Do
- Case "Q"
- Exit Sub
- End Select
- Loop
- Loop
- 10001
- Exit Sub
- 10002
- Resume 10001
- End Sub
-
- Sub Search.Monsters
- On Local Error Goto 10012
- Do
- Temp1$=Nul
- Temp1=False
- Temp3=False
- Temp4=False
- Temp6=False
- Temp7=False
- Temp8=False
- Temp9=False
- Temp10=False
- Temp11=False
- Temp12=False
- Temp13=False
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]monster name substring"
- If Temp1$<>Nul Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Temp1$+")"
- Endif
- Call IO.O
- Strng="[B]monster level"
- If Temp1 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp1),2)+")"
- Endif
- Call IO.O
- Strng="[C]hit points"
- If Temp3>False And Temp4>False Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp3),2)+"-"+Mid$(Str$(Temp4),2)+")"
- Endif
- Call IO.O
- Strng="[D]experience"
- If Temp6>False And Temp7>False Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp6),2)+"-"+Mid$(Str$(Temp7),2)+")"
- Endif
- Call IO.O
- Strng="[E]poisons"
- If Temp8 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[F]drains levels"
- If Temp9 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[G]casts spells"
- If Temp10 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[H]jails attacker"
- If Temp11 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[I]psionic monsters"
- If Temp12 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[J]equation"
- If Temp13 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Monster search option(s to search, q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- Strng="Monster name substring?"
- Call IO.I
- Out2=Lcase$(Out2)
- Temp1$=Out2
- Case "B"
- Strng="Monster level?"
- Call IO.I
- Temp1=Int(Val(Out2))
- Case "C"
- Strng="Enter range:"
- Call IO.O
- No.Input.Out="1"
- Strng="From?"
- Call IO.I
- Temp3=Int(Val(Out2))
- No.Input.Out="10"
- Strng="To?"
- Call IO.I
- Temp4=Int(Val(Out2))
- Case "D"
- Strng="Enter range:"
- Call IO.O
- No.Input.Out="1"
- Strng="From?"
- Call IO.I
- Temp6=Int(Val(Out2))
- No.Input.Out="10"
- Strng="To?"
- Call IO.I
- Temp7=Int(Val(Out2))
- Case "E"
- Temp8=True
- Case "F"
- Temp9=True
- Case "G"
- Temp10=True
- Case "H"
- Temp11=True
- Case "I"
- Temp12=True
- Case "J"
- Temp13=True
- Case "S"
- Strng="Enter range:"
- Call IO.O
- Temp5=Lof(7)/Len(MonsterRecord)
- Temp$=Mid$(Str$(Temp5),2)
- Strng="From(1-"+Temp$+")?"
- No.Input.Out="1"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp<1 Or Temp>Temp5 Then
- Strng=Range$
- Call IO.O
- Exit Do
- Endif
- Strng="To("+Mid$(Str$(Temp),2)+"-"+Temp$+")?"
- No.Input.Out=Temp$
- Call IO.I
- Temp2=Int(Val(Out2))
- If Temp2<Temp Then
- Strng=Range$
- Call IO.O
- Exit Do
- Endif
- If Temp2>Temp5 Then
- Temp2=Temp5
- Endif
- For Temp5=Temp To Temp2
- TempX=False
- Get 7,Temp5,MonsterRecord
- If Temp1$<>Nul Then
- If Instr(MonsterRecord.MonsterName,Temp1$) Then
- TempX=True
- Endif
- Endif
- If Temp1 Then
- If MonsterRecord.Level=Temp1 Then
- TempX=True
- Endif
- Endif
- If Temp3 And Temp4 Then
- If MonsterRecord.Hits>=Temp3 And_
- MonsterRecord.Hits<=Temp4 Then
- TempX=True
- Endif
- Endif
- If Temp6 And Temp7 Then
- If MonsterRecord.Experience>=Temp6 And_
- MonsterRecord.Experience<=Temp7 Then
- TempX=True
- Endif
- Endif
- If Temp8 Then
- If MonsterRecord.Poison Then
- TempX=True
- Endif
- Endif
- If Temp9 Then
- If MonsterRecord.LevelDrain Then
- TempX=True
- Endif
- Endif
- If Temp10 Then
- If MonsterRecord.Spell Then
- TempX=True
- Endif
- Endif
- If Temp11 Then
- If MonsterRecord.Jail Then
- TempX=True
- Endif
- Endif
- If Temp12 Then
- If MonsterRecord.Psionic Then
- TempX=True
- Endif
- Endif
- If Temp13 Then
- If MonsterRecord.Equation Then
- TempX=True
- Endif
- Endif
- If TempX Then
- Call Display.Monster(False)
- Call More.Prompt
- If No Then
- Exit Do
- Endif
- Endif
- Next
- Exit Do
- Case "Q"
- Exit Sub
- End Select
- Loop
- Loop
- 10011
- Exit Sub
- 10012
- Resume 10011
- End Sub
-
- Sub Search.Nonplayers
- On Local Error Goto 10022
- Do
- Temp1$=Nul
- Temp1=False
- Temp3=False
- Temp4=False
- Temp6=False
- Temp7=False
- Temp8=False
- Temp9=False
- Temp10=False
- Temp11=False
- Temp12=False
- Temp13=False
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]nonplayer name substring"
- If Temp1$<>Nul Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Temp1$+")"
- Endif
- Call IO.O
- Strng="[B]nonplayer level"
- If Temp1 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp1),2)+")"
- Endif
- Call IO.O
- Strng="[C]hit points"
- If Temp3>False And Temp4>False Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp3),2)+"-"+Mid$(Str$(Temp4),2)+")"
- Endif
- Call IO.O
- Strng="[D]experience"
- If Temp6>False And Temp7>False Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp6),2)+"-"+Mid$(Str$(Temp7),2)+")"
- Endif
- Call IO.O
- Strng="[E]poisons"
- If Temp8 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[F]drains levels"
- If Temp9 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[G]casts spells"
- If Temp10 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[H]jails attacker"
- If Temp11 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[I]psionic nonplayers"
- If Temp12 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[J]equation"
- If Temp13 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Nonplayer search option(s to search, q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- Strng="Nonplayer name substring?"
- Call IO.I
- Out2=Lcase$(Out2)
- Temp1$=Out2
- Case "B"
- Strng="Nonplayer level?"
- Call IO.I
- Temp1=Int(Val(Out2))
- Case "C"
- Strng="Enter range:"
- Call IO.O
- No.Input.Out="1"
- Strng="From?"
- Call IO.I
- Temp3=Int(Val(Out2))
- No.Input.Out="10"
- Strng="To?"
- Call IO.I
- Temp4=Int(Val(Out2))
- Case "D"
- Strng="Enter range:"
- Call IO.O
- No.Input.Out="1"
- Strng="From?"
- Call IO.I
- Temp6=Int(Val(Out2))
- No.Input.Out="10"
- Strng="To?"
- Call IO.I
- Temp7=Int(Val(Out2))
- Case "E"
- Temp8=True
- Case "F"
- Temp9=True
- Case "G"
- Temp10=True
- Case "H"
- Temp11=True
- Case "I"
- Temp12=True
- Case "J"
- Temp13=True
- Case "S"
- Strng="Enter range:"
- Call IO.O
- Temp5=Lof(9)/Len(MonsterRecord)
- Temp$=Mid$(Str$(Temp5),2)
- Strng="From(1-"+Temp$+")?"
- No.Input.Out="1"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp<1 Or Temp>Temp5 Then
- Strng=Range$
- Call IO.O
- Exit Do
- Endif
- Strng="To("+Mid$(Str$(Temp),2)+"-"+Temp$+")?"
- No.Input.Out=Temp$
- Call IO.I
- Temp2=Int(Val(Out2))
- If Temp2<Temp Then
- Strng=Range$
- Call IO.O
- Exit Do
- Endif
- If Temp2>Temp5 Then
- Temp2=Temp5
- Endif
- For Temp5=Temp To Temp2
- TempX=False
- Get 9,Temp5,MonsterRecord
- If Temp1$<>Nul Then
- If Instr(MonsterRecord.MonsterName,Temp1$) Then
- TempX=True
- Endif
- Endif
- If Temp1 Then
- If MonsterRecord.Level=Temp1 Then
- TempX=True
- Endif
- Endif
- If Temp3 And Temp4 Then
- If MonsterRecord.Hits>=Temp3 And_
- MonsterRecord.Hits<=Temp4 Then
- TempX=True
- Endif
- Endif
- If Temp6 And Temp7 Then
- If MonsterRecord.Experience>=Temp6 And_
- MonsterRecord.Experience<=Temp7 Then
- TempX=True
- Endif
- Endif
- If Temp8 Then
- If MonsterRecord.Poison Then
- TempX=True
- Endif
- Endif
- If Temp9 Then
- If MonsterRecord.LevelDrain Then
- TempX=True
- Endif
- Endif
- If Temp10 Then
- If MonsterRecord.Spell Then
- TempX=True
- Endif
- Endif
- If Temp11 Then
- If MonsterRecord.Jail Then
- TempX=True
- Endif
- Endif
- If Temp12 Then
- If MonsterRecord.Psionic Then
- TempX=True
- Endif
- Endif
- If Temp13 Then
- If MonsterRecord.Equation Then
- TempX=True
- Endif
- Endif
- If TempX Then
- Call Display.Nonplayer(False)
- Call More.Prompt
- If No Then
- Exit Do
- Endif
- Endif
- Next
- Exit Do
- Case "Q"
- Exit Sub
- End Select
- Loop
- Loop
- 10021
- Exit Sub
- 10022
- Resume 10021
- End Sub
-
- Sub Search.Spells
- On Local Error Goto 10032
- Do
- Temp1$=Nul
- Temp2$=Nul
- Temp3=False
- Temp4=False
- Temp6=False
- Temp7=False
- Temp8=False
- Temp9=False
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]spell name substring"
- If Temp1$<>Nul Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Temp1$+")"
- Endif
- Call IO.O
- Strng="[B]chant substring"
- If Temp2$<>Nul Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Temp2$+")"
- Endif
- Call IO.O
- Strng="[C]spell level"
- If Temp3 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[D]psionic spells"
- If Temp4 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[E]spell type"
- If Temp6 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(Type:"+Str$(Temp6)+")"
- Endif
- Call IO.O
- Strng="[F]requires ingredients"
- If Temp7 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[G]casting type"
- If Temp8 Then
- Strng=Strng+Space$(30-Len(Strng))
- Select Case Temp8
- Case 1
- Strng=Strng+"(use)"
- Case 2
- Strng=Strng+"(read)"
- Case 3
- Strng=Strng+"(cast)"
- End Select
- Endif
- Call IO.O
- Strng="[H]equation"
- If Temp9 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Spell search option(s to search, q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- Strng="Spell name substring?"
- Call IO.I
- Out2=Lcase$(Out2)
- Temp1$=Out2
- Case "B"
- Strng="Chant substring?"
- Call IO.I
- Out2=Ucase$(Out2)
- Temp2$=Out2
- Case "C"
- Strng="Spell level?"
- Call IO.I
- Temp3=Int(Val(Out2))
- Case "D"
- Temp4=True
- Case "E"
- Call Spell.Types
- Strng="Spell type?"
- Line.Length=TempD
- No.Input.Out="A"
- Call IO.I
- Out2=Ucase$(Out2)
- Temp6=Instr("ABCDEFGHIJKLMNOPRSTUVWXYZ123",Out2)
- Case "F"
- Temp7=True
- Case "G"
- Graphics.Off=True
- Strng="[1]use command"
- Call IO.O
- Strng="[2]read scroll"
- Call IO.O
- Strng="[3]cast spell"
- Call IO.O
- Graphics.Off=False
- Line.Length=TempD
- Strng="Casting type("+Enter$+"=none)?"
- Call IO.I
- Select Case Int(Val(Out2))
- Case 1
- Temp8=Use.Spell.Type
- Case 2
- Temp8=Scroll.Spell.Type
- Case 3
- Temp8=Cast.Spell.Type
- Case Else
- Temp8=False
- End Select
- Case "H"
- Temp9=True
- Case "S"
- Strng="Enter range:"
- Call IO.O
- Temp5=Lof(4)/Len(SpellRecord)
- Temp$=Mid$(Str$(Temp5),2)
- Strng="From(1-"+Temp$+")?"
- No.Input.Out="1"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp<1 Or Temp>Temp5 Then
- Strng=Range$
- Call IO.O
- Exit Do
- Endif
- Strng="To("+Mid$(Str$(Temp),2)+"-"+Temp$+")?"
- No.Input.Out=Temp$
- Call IO.I
- Temp2=Int(Val(Out2))
- If Temp2<Temp Then
- Strng=Range$
- Call IO.O
- Exit Do
- Endif
- If Temp2>Temp5 Then
- Temp2=Temp5
- Endif
- For Temp5=Temp To Temp2
- TempX=False
- Get 4,Temp5,SpellRecord
- If Temp1$<>Nul Then
- If Instr(SpellRecord.SpellName,Temp1$) Then
- TempX=True
- Endif
- Endif
- If Temp2$<>Nul Then
- If Instr(SpellRecord.Chant,Temp2$) Then
- TempX=True
- Endif
- Endif
- If Temp3 Then
- If SpellRecord.Level=Temp3 Then
- TempX=True
- Endif
- Endif
- If Temp4 Then
- If SpellRecord.Psionic Then
- TempX=True
- Endif
- Endif
- If Temp6 Then
- If SpellRecord.SpellType=Temp6 Then
- TempX=True
- Endif
- Endif
- If Temp7 Then
- For TempY=1 To 5
- If SpellRecord.Ingred(TempY)>False Then
- TempX=True
- Exit For
- Endif
- Next
- Endif
- If Temp8 Then
- If SpellRecord.SpellFlag And Temp8 Then
- TempX=True
- Endif
- Endif
- If Temp9 Then
- If SpellRecord.Equation=True Then
- TempX=True
- Endif
- Endif
- If TempX Then
- Call Display.Spell(False)
- Call More.Prompt
- If No Then
- Exit Do
- Endif
- Endif
- Next
- Exit Do
- Case "Q"
- Exit Sub
- End Select
- Loop
- Loop
- 10031
- Exit Sub
- 10032
- Resume 10031
- End Sub
-
- Sub Search.Treasure
- On Local Error Goto 10042
- Do
- Temp1$=Nul
- Temp1=False
- Temp3=False
- Temp4=False
- Temp6=False
- Temp7=False
- Temp8=False
- Temp9=False
- Temp10=False
- Temp11=False
- Temp12=False
- Temp13=False
- Temp14=False
- Temp15=False
- Temp16=False
- Temp17=False
- Temp18=False
- Temp19=False
- Temp20=False
- Temp21=False
- Temp22=False
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]treasure name substring"
- If Temp1$<>Nul Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Temp1$+")"
- Endif
- Call IO.O
- Strng="[B]weight"
- If Temp1>False And Temp2>False Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp1),2)+"-"+Mid$(Str$(Temp2),2)+")"
- Endif
- Call IO.O
- Strng="[C]value"
- If Temp4>False And Temp6>False Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp4),2)+"-"+Mid$(Str$(Temp6),2)+")"
- Endif
- Call IO.O
- Strng="[D]hit plus"
- If Temp7 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp7),2)+")"
- Endif
- Call IO.O
- Strng="[E]strikes"
- If Temp8 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp7),2)+")"
- Endif
- Call IO.O
- Strng="[F]coins"
- If Temp11 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[G]potions"
- If Temp12 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[H]scrolls"
- If Temp13 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[I]loadable"
- If Temp14 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[J]ammunition"
- If Temp15 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[K]receptacles"
- If Temp16 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[L]key number"
- If Temp9 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp9),2)+")"
- Endif
- Call IO.O
- Strng="[M]spell name"
- If Temp10 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(number:"+Str$(Temp10)+")"
- Endif
- Call IO.O
- Strng="[N]rings"
- If Temp17 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[O]rustable"
- If Temp18 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[P]stealable"
- If Temp19 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[R]edible"
- If Temp20 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[T]launchable
- If Temp21 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Strng="[U]launch ammo"
- If Temp22 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(selected)"
- Endif
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Treasure search option(s to search, q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- Strng="Treasure name substring?"
- Call IO.I
- Out2=Lcase$(Out2)
- Temp1$=Out2
- Case "B"
- Strng="Enter range:"
- Call IO.O
- Strng="From?"
- No.Input.Out="1"
- Call IO.I
- Temp1=Int(Val(Out2))
- Strng="To?"
- No.Input.Out="10"
- Call IO.I
- Temp3=Int(Val(Out2))
- Case "C"
- Strng="Enter range:"
- Call IO.O
- Strng="From?"
- No.Input.Out="1"
- Call IO.I
- Temp4=Int(Val(Out2))
- Strng="To?"
- No.Input.Out="10"
- Call IO.I
- Temp6=Int(Val(Out2))
- Case "D"
- Strng="Hit plus?"
- Call IO.I
- Temp7=Int(Val(Out2))
- Case "E"
- Strng="Charges?"
- Call IO.I
- Temp8=Int(Val(Out2))
- Case "F"
- Temp11=True
- Case "G"
- Temp12=True
- Case "H"
- Temp13=True
- Case "I"
- Temp14=True
- Case "J"
- Temp15=True
- Case "K"
- Temp16=True
- Case "L"
- Strng="Key number?"
- Call IO.I
- Temp9=Int(Val(Out2))
- Case "M"
- Call Find.Spell
- If Temp Then
- Temp10=Temp
- Endif
- Case "N"
- Temp17=True
- Case "O"
- Temp18=True
- Case "P"
- Temp19=True
- Case "R"
- Temp20=True
- Case "T"
- Temp21=True
- Case "U"
- Temp22=True
- Case "S"
- Strng="Enter range:"
- Call IO.O
- Temp5=Lof(8)/Len(TreasureRecord)
- Temp$=Mid$(Str$(Temp5),2)
- Strng="From(1-"+Temp$+")?"
- No.Input.Out="1"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp<1 Or Temp>Temp5 Then
- Strng=Range$
- Call IO.O
- Exit Do
- Endif
- Strng="To("+Mid$(Str$(Temp),2)+"-"+Temp$+")?"
- No.Input.Out=Temp$
- Call IO.I
- Temp2=Int(Val(Out2))
- If Temp2<Temp Then
- Strng=Range$
- Call IO.O
- Exit Do
- Endif
- If Temp2>Temp5 Then
- Temp2=Temp5
- Endif
- For Temp5=Temp To Temp2
- TempX=False
- Get 8,Temp5,TreasureRecord
- If Temp1$<>Nul Then
- If Instr(TreasureRecord.TreasureName,Temp1$) Then
- TempX=True
- Endif
- Endif
- If Temp1 And Temp3 Then
- If TreasureRecord.Weight>=Temp1 And_
- TreasureRecord.Weight<=Temp3 Then
- TempX=True
- Endif
- Endif
- If Temp4 And Temp6 Then
- If TreasureRecord.Gold>=Temp4 And_
- TreasureRecord.Gold<=Temp6 Then
- TempX=True
- Endif
- Endif
- If Temp7 Then
- If Abs(TreasureRecord.Plus)=Temp7 Then
- TempX=True
- Endif
- Endif
- If Temp8 Then
- If Abs(TreasureRecord.Charges)=Temp8 Then
- TempX=True
- Endif
- Endif
- If Temp9 Then
- If TreasureRecord.Keyed=Temp9 Then
- TempX=True
- Endif
- Endif
- If Temp10 Then
- If TreasureRecord.Spell=Temp10 Then
- TempX=True
- Endif
- Endif
- If Temp11 Then
- If TreasureRecord.Coin Then
- TempX=True
- Endif
- Endif
- If Temp12 Then
- If TreasureRecord.Potion Then
- TempX=True
- Endif
- Endif
- If Temp13 Then
- If TreasureRecord.Scroll Then
- TempX=True
- Endif
- Endif
- If Temp14 Then
- If TreasureRecord.Loadable Then
- TempX=True
- Endif
- Endif
- If Temp15 Then
- If TreasureRecord.Ammunition Then
- TempX=True
- Endif
- Endif
- If Temp16 Then
- If TreasureRecord.Recep Then
- TempX=True
- Endif
- Endif
- If Temp17 Then
- If TreasureRecord.RingType Then
- TempX=True
- Endif
- Endif
- If Temp18 Then
- If TreasureRecord.Rustable Then
- TempX=True
- Endif
- Endif
- If Temp19 Then
- If TreasureRecord.Stealable Then
- TempX=True
- Endif
- Endif
- If Temp20 Then
- If TreasureRecord.Edible Then
- TempX=True
- Endif
- Endif
- If Temp21 Then
- If TreasureRecord.Launchable Then
- TempX=True
- Endif
- Endif
- If Temp22 Then
- If TreasureRecord.LaunchAmmo Then
- TempX=True
- Endif
- Endif
- If TempX Then
- Call Display.Treasure(False)
- Call More.Prompt
- If No Then
- Exit Do
- Endif
- Endif
- Next
- Exit Do
- Case "Q"
- Exit Sub
- End Select
- Loop
- Loop
- 10041
- Exit Sub
- 10042
- Resume 10041
- End Sub
-
- Sub Search.Description
- On Local Error Goto 10052
- Do
- Temp1$=Nul
- Temp2$=Nul
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]long description"
- If Temp1$<>Nul Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Temp1$+")"
- Endif
- Call IO.O
- Strng="[B]short description"
- If Temp2$<>Nul Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Temp2$+")"
- Endif
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Description search option(s to search, q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- Strng="Long description substring?"
- Call IO.I
- Out2=Lcase$(Out2)
- Temp1$=Out2
- Case "B"
- Strng="Short description substring?"
- Call IO.I
- Out2=Lcase$(Out2)
- Temp2$=Out2
- Case "S"
- Strng="Enter range:"
- Call IO.O
- Temp3=Lof(5)/Len(RoomRecord)
- Temp$=Mid$(Str$(Temp3),2)
- Strng="From(1-"+Temp$+")?"
- No.Input.Out="1"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp<1 Or Temp>Temp3 Then
- Strng=Range$
- Call IO.O
- Exit Do
- Endif
- Strng="To("+Mid$(Str$(Temp),2)+"-"+Temp$+")?"
- No.Input.Out=Temp$
- Call IO.I
- Temp2=Int(Val(Out2))
- If Temp2<Temp Then
- Strng=Range$
- Call IO.O
- Exit Do
- Endif
- If Temp2>Temp3 Then
- Temp2=Temp3
- Endif
- For Temp5=Temp To Temp2
- TempX=False
- Get 5,Temp5,RoomRecord
- If Temp1$<>Nul Then
- For Temp3=1 To 4
- Out3=Lcase$(RoomRecord.LongDesc(Temp3))
- If Instr(Out3,Temp1$) Then
- TempX=True
- Exit For
- Endif
- Next
- Endif
- If Temp2$<>Nul Then
- Out3=Lcase$(RoomRecord.ShortDesc)
- If Instr(Out3,Temp2$) Then
- TempX=True
- Endif
- Endif
- If TempX Then
- Call Display.Room
- Call More.Prompt
- If No Then
- Exit Do
- Endif
- Endif
- Next
- Exit Do
- Case "Q"
- Exit Sub
- End Select
- Loop
- Loop
- 10051
- Exit Sub
- 10052
- Resume 10051
- End Sub
-
- Sub Add.User
- On Local Error Goto 10062
- Temp4=Lof(3)/Len(UserRecord)+1
- Strng=Deleted$
- Call Valid(Strng,30)
- Call Encrypt(Strng,True)
- UserRecord.CodeName=Strng
- Strng=Deleted$
- Call Valid(Strng,20)
- Call Encrypt(Strng,False)
- UserRecord.PassWord=Strng
- Strng=Deleted$
- Call Valid(Strng,20)
- Call Encrypt(Strng,True)
- UserRecord.ClassName=Strng
- UserRecord.ClassType=False
- For Temp6=1 To 7
- UserRecord.Stats(Temp6)=False
- Next
- For Temp6=1 To 4
- UserRecord.Weapons(Temp6)=False
- Next
- UserRecord.Room=False
- UserRecord.Level=False
- UserRecord.Experience=False
- UserRecord.Gold=False
- UserRecord.Borrow=False
- UserRecord.NumCalls=False
- UserRecord.Fatigue=False
- UserRecord.FatigueMax=False
- UserRecord.Vitality=False
- UserRecord.VitalityMax=False
- UserRecord.Magic=False
- UserRecord.MagicMax=False
- UserRecord.Psionic=False
- UserRecord.PsionicMax=False
- UserRecord.Poison=False
- UserRecord.Invisible=False
- UserRecord.Race=False
- UserRecord.Proficiency=False
- UserRecord.Bank=False
- UserRecord.PlayersKilled=False
- UserRecord.MonstersKilled=False
- UserRecord.Brief=False
- Strng=Date$
- Call Valid(Strng,10)
- Call Encrypt(Strng,True)
- UserRecord.DateOn=Strng
- UserRecord.Align1=False
- UserRecord.Align2=False
- UserRecord.Flags=False
- UserRecord.MaxCalls=False
- UserRecord.FromHour=False
- UserRecord.FromMin=False
- UserRecord.ToHour=False
- UserRecord.ToMin=False
- Put 3,Temp4,UserRecord
- 10061
- Exit Sub
- 10062
- Resume 10061
- End Sub
-
- Sub Edit.User
- On Local Error Goto 10072
- If Lof(3)=False Then
- Call Add.User
- Endif
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]dd"
- Call IO.O
- Strng="[C]hange"
- Call IO.O
- Strng="[L]ist"
- Call IO.O
- Strng="[P]ack"
- Call IO.O
- Strng="[S]earch"
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="User edit option(q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- Call Add.User
- Case "C"
- Call Change.User
- Case "L"
- Call List.User
- Case "P"
- Call Pack.Users
- Case "S"
- Call Search.Users
- Case "Q"
- Exit Sub
- End Select
- Loop
- 10071
- Exit Sub
- 10072
- Resume 10071
- End Sub
-
- Sub List.User
- On Local Error Goto 10082
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[D]ayfile"
- Call IO.O
- Strng="[L]ist"
- Call IO.O
- Strng="[T]op ten"
- Call IO.O
- Strng="[U]sers"
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="User list option(q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "D"
- Call Read.Dayfile
- Case "L"
- Call Show.Users
- Case "T"
- Call Top.Ten
- Case "U"
- Call User.Report
- Case "Q"
- Exit Sub
- End Select
- Loop
- 10081
- Exit Sub
- 10082
- Resume 10081
- End Sub
-
- Sub User.Report
- On Local Error Goto 10092
- Graphics.Off=True
- Strng="DNDBBS V"+Version$+" User List For "+FNclock$+"."
- Call IO.O
- Strng=Nul
- Call IO.O
- Strng="Number User Name Class Name"
- Strng=Strng+" Race Level"
- Call IO.O
- Strng=String$(73,"-")
- Call IO.O
- Temp5=4
- Allow.Break=True
- For Temp3=1 To Lof(3)/Len(UserRecord)
- Get 3,Temp3,UserRecord
- Strng=UserRecord.CodeName
- Call Decrypt(Strng)
- If Left$(Strng,9)<>Deleted$ Then
- Strng=Mid$(Str$(Temp3),2)+"."
- Strng=Strng+Space$(7-Len(Strng))
- Out2=UserRecord.CodeName
- Call Decrypt(Out2)
- Strng=Strng+Out2+" "
- Out2=UserRecord.ClassName
- Call Decrypt(Out2)
- Strng=Strng+Out2+" "
- If UserRecord.Race<1 Then
- UserRecord.Race=1
- Endif
- Out2=Race(UserRecord.Race)
- Out2=Rtrim$(Out2)
- Out2=Out2+Space$(8-Len(Out2))
- Strng=Strng+Out2
- If UserRecord.Level<1 Then
- Out2=" -dead-"
- Else
- Out2=Str$(UserRecord.Level)
- Endif
- Out2=Out2+Space$(7-Len(Out2))
- If UserRecord.Flags And Locked.User Then
- Out2=Out2+Mask$
- Endif
- If UserRecord.ClassType>8 Then
- Out2=Out2+"*"
- Endif
- Strng=Strng+Out2
- Call IO.O
- If Break Then
- Exit For
- Endif
- Temp5=Temp5+1
- If Temp5=23 Then
- Temp5=False
- Call More.Prompt
- If No Then
- Exit For
- Endif
- Endif
- Endif
- Next
- If Temp5 Then
- Call More.Prompt
- Endif
- Allow.Break=False
- 10091
- Exit Sub
- 10092
- Resume 10091
- End Sub
-
- Sub Read.DayFile
- On Local Error Goto 10102
- Close 13
- Temp5=False
- Graphics.Off=True
- Allow.Break=True
- Open Day.File.FileName For Input Shared As #13
- Do While Not Eof(13) And Not Lost.Carrier
- Line Input #13,Strng
- Call IO.O
- If Break Then
- Exit Do
- Endif
- Temp5=Temp5+1
- If Temp5=23 Then
- Temp5=False
- Call More.Prompt
- If No Then
- Exit Do
- Endif
- Endif
- Loop
- Allow.Break=False
- If Temp5 Then
- Call More.Prompt
- Endif
- 10101
- Exit Sub
- 10102
- Resume 10101
- End Sub
-
- Sub Change.User
- On Local Error Goto 10112
- Graphics.Off=False
- Strng="User name, or number?"
- No.Input.Out="1"
- Call IO.I
- Temp7=False
- Out2=Ucase$(Out2)
- If Instr(Out2,"#") Then
- Temp7=Val(Mid$(Out2,Instr(Out2,"#")+1))
- Out2=Left$(Out2,Instr(Out2,"#")-1)
- Endif
- TempX=False
- No.Input=False
- Temp4=Len(Out2)
- For Temp5=1 To Lof(3)/Len(UserRecord)
- Get 3,Temp5,UserRecord
- Out3=UserRecord.CodeName
- Call Decrypt(Out3)
- If Left$(Out3,Temp4)=Out2 Then
- TempX=TempX+1
- If Temp7=False Or TempX=Temp7 Then
- No.Input=True
- Exit For
- Endif
- Endif
- Next
- If No.Input=False Then
- Temp5=Int(Val(Out2))
- If Temp5>False And Temp5<=Lof(3)/Len(UserRecord) Then
- No.Input=True
- Endif
- Endif
- If No.Input=False Then
- Strng="User name not found."
- Call IO.O
- Exit Sub
- Endif
- Get 3,Temp5,UserRecord
- Out3=UserRecord.CodeName
- Call Decrypt(Out3)
- If Left$(Out3,9)=Deleted$ Then
- Strng="Deleted user record."
- Call IO.O
- Exit Sub
- Endif
- Call Modify.User
- 10111
- Exit Sub
- 10112
- Resume 10111
- End Sub
-
- Sub Show.Users
- On Local Error Goto 10122
- Strng="Enter range:"
- Call IO.O
- Temp3=Lof(3)/Len(UserRecord)
- Temp$=Mid$(Str$(Temp3),2)
- Strng="From(1-"+Temp$+")?"
- No.Input.Out="1"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp<1 Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- Strng="To("+Mid$(Str$(Temp),2)+"-"+Temp$+")?"
- No.Input.Out=Temp$
- Call IO.I
- Temp2=Int(Val(Out2))
- If Temp2<Temp Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- If Temp2>Temp3 Then
- Temp2=Temp3
- Endif
- For Temp5=Temp To Temp2
- Get 3,Temp5,UserRecord
- Out3=UserRecord.CodeName
- Call Decrypt(Out3)
- If Left$(Out3,9)<>Deleted$ Then
- Call Display.User(False)
- Call More.Prompt
- If No Then
- Exit For
- Endif
- Endif
- Next
- 10121
- Exit Sub
- 10122
- Resume 10121
- End Sub
-
- Sub Display.User(TempX)
- On Local Error Goto 10132
- If TempX Then
- If TempC Then
- Exit Sub
- Endif
- Endif
- Graphics.Off=True
- Strng="User number"+Str$(Temp5)+"."
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[A]"
- Endif
- Out2=UserRecord.CodeName
- Call Decrypt(Out2)
- Out2=Rtrim$(Out2)
- Strng=Strng+"Username: "+Out2+" "
- If Local.Mode=False And Config2(81)=False Then
- Out2=String$(10,Mask$)
- Else
- Out2=UserRecord.PassWord
- Call Decrypt(Out2)
- Out2=Rtrim$(Out2)
- Endif
- If TempX Then
- Strng=Strng+"[B]"
- Endif
- Strng=Strng+"Password: "+Out2
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[C]"
- Endif
- Strng=Strng+"Level:"+Str$(UserRecord.Level)
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[D]"
- Endif
- Strng=Strng+"Class: "+Rtrim$(Class.Name(UserRecord.ClassType))
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[E]"
- Endif
- Strng=Strng+"Weapon proficiency: "+_
- Rtrim$(Weapon.Type.Name(UserRecord.Proficiency))
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[F]"
- Endif
- Strng=Strng+"Blunt proficiency%:"+Str$(UserRecord.Weapons(1))
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[G]"
- Endif
- Strng=Strng+"Pole proficiency%:"+Str$(UserRecord.Weapons(2))
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[H]"
- Endif
- Strng=Strng+"Sharp proficiency%:"+Str$(UserRecord.Weapons(3))
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[I]"
- Endif
- Strng=Strng+"Thrusting proficiency%:"+Str$(UserRecord.Weapons(4))
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[J]"
- Endif
- Strng=Strng+"Classname: "
- Out2=UserRecord.ClassName
- Call Decrypt(Out2)
- Out2=Rtrim$(Out2)
- Strng=Strng+Out2
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[K]"
- Endif
- Strng=Strng+"Strength:"+Str$(UserRecord.Stats(1))
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[L]"
- Endif
- Strng=Strng+"Intelligence:"+Str$(UserRecord.Stats(2))
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[M]"
- Endif
- Strng=Strng+"Wisdom:"+Str$(UserRecord.Stats(3))
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[N]"
- Endif
- Strng=Strng+"Dexterity:"+Str$(UserRecord.Stats(4))
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[O]"
- Endif
- Strng=Strng+"Constitution:"+Str$(UserRecord.Stats(5))
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[P]"
- Endif
- Strng=Strng+"Piety:"+Str$(UserRecord.Stats(6))
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[R]"
- Endif
- Strng=Strng+"Charisma:"+Str$(UserRecord.Stats(7))
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[S]"
- Endif
- Strng=Strng+"Experience:"+Str$(UserRecord.Experience)
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[T]"
- Endif
- Strng=Strng+"Gold:"+Str$(UserRecord.Gold)
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[U]"
- Endif
- Strng=Strng+"Room number:"+Str$(UserRecord.Room)
- Call IO.O
- Strng=""
- If TempX Then
- Strng="[V]Call restrictions."
- Call IO.O
- Strng="[W]Inventory."
- Call IO.O
- Endif
- Strng=""
- If TempX Then
- Strng="[X]"
- Endif
- Strng=Strng+"Special characters: "
- Temp=False
- If UserRecord.Flags And Special.Char1 Then
- Strng=Strng+"town mayor, "
- Temp=True
- Endif
- If UserRecord.Flags And Special.Char2 Then
- Strng=Strng+"governor, "
- Temp=True
- Endif
- If UserRecord.Flags And Special.Char3 Then
- Strng=Strng+"guild master, "
- Temp=True
- Endif
- If UserRecord.Flags And Special.Char4 Then
- Strng=Strng+"sysop, "
- Temp=True
- Endif
- If Temp Then
- Strng=Left$(Strng,Len(Strng)-2)+"."
- Else
- Strng=Strng+"none."
- Endif
- Call IO.O
- If TempX Then
- Strng="[!]delete User"
- Call IO.O
- Endif
- Graphics.Off=False
- 10131
- Exit Sub
- 10132
- Resume 10131
- End Sub
-
- Sub Modify.User
- On Local Error Goto 10142
- Do
- Call Display.User(True)
- Graphics.Off=False
- Strng="User change option(q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- If Local.Mode=False And Config2(81)=False Then
- Strng="Remote DMs cannot edit username."
- Call IO.O
- Else
- Strng="Username?"
- No.Input.Out=Deleted$
- Call IO.I
- Out2=Ucase$(Out2)
- Call Valid(Out2,30)
- If Out2=Nul Then
- Strng="Illegal characters in codename."
- Call IO.O
- Else
- Call Encrypt(Out2,True)
- UserRecord.CodeName=Out2
- Endif
- Endif
- Case "B"
- If Local.Mode=False And Config2(81)=False Then
- Strng="Remote DMs cannot edit password."
- Call IO.O
- Else
- Out2=UserRecord.PassWord
- Call Decrypt(Out2)
- If Out2=Nul Then
- Strng="This password has a checksum error."
- Call IO.O
- Endif
- Strng="Password?"
- No.Input.Out=Deleted$
- Call IO.I
- Out2=Ucase$(Out2)
- Call Valid(Out2,20)
- If Out2=Nul Then
- Strng="Illegal characters in password."
- Call IO.O
- Else
- Call Encrypt(Out2,False)
- UserRecord.PassWord=Out2
- Endif
- Endif
- Case "C"
- Strng="Level?"
- No.Input.Out="1"
- Call IO.I
- Temp3=Int(Val(Out2))
- UserRecord.Level=Temp3
- If Temp3>9999 Then
- Strng="User has dungeon master access."
- Call IO.O
- Else
- If Temp3>999 Then
- Strng="User has assistant dungeon master access."
- Call IO.O
- Endif
- Endif
- Call New.Stats
- Case "D"
- Do
- Graphics.Off=True
- If TempC=False Then
- For Temp3=1 To 9
- Strng="["+Chr$(64+Temp3)+"]"+Rtrim$(Class.Name(Temp3))
- Call IO.O
- Next
- If Local.Mode Then
- Strng="[J]"+Rtrim$(Class.Name(10))
- Call IO.O
- Endif
- Graphics.Off=False
- Endif
- Strng="Class option(q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Temp$=Ucase$(Out2)
- Select Case Temp$
- Case "A" To "I"
- UserRecord.ClassType=(Asc(Temp$)-64)
- Call New.Stats
- Case "J"
- If Local.Mode Then
- UserRecord.ClassType=10
- Call New.Stats
- Endif
- Case "Q"
- Exit Do
- End Select
- Loop
- Case "E"
- Do
- Graphics.Off=True
- If TempC=False Then
- For Temp3=1 To 4
- Strng="["+Chr$(64+Temp3)+"]"+_
- Rtrim$(Weapon.Type.Name(Temp3))
- Call IO.O
- Next
- Graphics.Off=False
- Endif
- Strng="Weapon proficiency(q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Temp$=Ucase$(Out2)
- Select Case Temp$
- Case "A" To "D"
- UserRecord.Proficiency=(Asc(Temp$)-64)
- Case "Q"
- Exit Do
- End Select
- Loop
- Case "F"
- Strng="Blunt weapon proficiency%(1-100)?"
- No.Input.Out="10"
- Call IO.I
- UserRecord.Weapons(1)=Int(Val(Out2))
- Case "G"
- Strng="Pole weapon proficiency%(1-100)?"
- No.Input.Out="10"
- Call IO.I
- UserRecord.Weapons(2)=Int(Val(Out2))
- Case "H"
- Strng="Sharp weapon proficiency%(1-100)?"
- No.Input.Out="10"
- Call IO.I
- UserRecord.Weapons(3)=Int(Val(Out2))
- Case "I"
- Strng="Thrusting weapon proficiency%(1-100)?"
- No.Input.Out="10"
- Call IO.I
- UserRecord.Weapons(4)=Int(Val(Out2))
- Case "J"
- Strng="Classname?"
- No.Input.Out=Deleted$
- Call IO.I
- Call Valid(Out2,20)
- If Out2=Nul Then
- Strng="Illegal characters in classname."
- Call IO.O
- Else
- Call Encrypt(Out2,True)
- UserRecord.ClassName=Out2
- Endif
- Case "K"
- Strng="Strength?"
- No.Input.Out=Mid$(Str$(Config1(4)),2)
- Call IO.I
- UserRecord.Stats(1)=Int(Val(Out2))
- Case "L"
- Strng="Intelligence?"
- No.Input.Out=Mid$(Str$(Config1(4)),2)
- Call IO.I
- UserRecord.Stats(2)=Int(Val(Out2))
- Case "M"
- Strng="Wisdom?"
- No.Input.Out=Mid$(Str$(Config1(4)),2)
- Call IO.I
- UserRecord.Stats(3)=Int(Val(Out2))
- Case "N"
- Strng="Dexterity?"
- No.Input.Out=Mid$(Str$(Config1(4)),2)
- Call IO.I
- UserRecord.Stats(4)=Int(Val(Out2))
- Case "O"
- Strng="Constitution?"
- No.Input.Out=Mid$(Str$(Config1(4)),2)
- Call IO.I
- UserRecord.Stats(5)=Int(Val(Out2))
- Case "P"
- Strng="Piety?"
- No.Input.Out=Mid$(Str$(Config1(4)),2)
- Call IO.I
- UserRecord.Stats(6)=Int(Val(Out2))
- Case "R"
- Strng="Charisma?"
- No.Input.Out=Mid$(Str$(Config1(4)),2)
- Call IO.I
- UserRecord.Stats(7)=Int(Val(Out2))
- Case "S"
- Strng="Experience?"
- No.Input.Out="128"
- Call IO.I
- UserRecord.Experience=Val(Out2)
- Case "T"
- Strng="Gold?"
- No.Input.Out=Mid$(Str$(Config2(32)),2)
- Call IO.I
- UserRecord.Gold=Val(Out2)
- Case "U"
- Strng="Room number?"
- No.Input.Out=Mid$(Str$(Val(Config3(24))),2)
- Call IO.I
- UserRecord.Room=Int(Val(Out2))
- Case "V"
- Graphics.Off=True
- Strng="Calls made today?"
- No.Input.Out="0"
- Call IO.I
- UserRecord.NumCalls=Int(Val(Out2))
- Strng="Maximum calls per day?"
- No.Input.Out=Mid$(Str$(Config2(1)),2)
- Call IO.I
- UserRecord.MaxCalls=Int(Val(Out2))
- Strng="Timeon restriction(from hour: form HH)?"
- No.Input.Out="00"
- Call IO.I
- UserRecord.FromHour=Int(Val(Out2))
- Strng="Timeon restriction(from minute: form MM)?"
- No.Input.Out="00"
- Call IO.I
- UserRecord.FromMin=Int(Val(Out2))
- Strng="Timeon restriction(to hour: form HH)?"
- No.Input.Out="00"
- Call IO.I
- UserRecord.ToHour=Int(Val(Out2))
- Strng="Timeon restriction(to minute: form MM)?"
- No.Input.Out="00"
- Call IO.I
- UserRecord.ToMin=Int(Val(Out2))
- Graphics.Off=False
- Case "W"
- Call Edit.Inventory
- Case "X"
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]town mayor"
- Call IO.O
- Strng="[B]governor"
- Call IO.O
- Strng="[C]guild master"
- Call IO.O
- Strng="[D]sysop"
- Call IO.O
- Strng="[E]none"
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Special class option(q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- UserRecord.Flags=UserRecord.Flags Or Special.Char1
- Strng="User is now town mayor."
- Call IO.O
- Case "B"
- UserRecord.Flags=UserRecord.Flags Or Special.Char2
- Strng="User is now governor."
- Call IO.O
- Case "C"
- UserRecord.Flags=UserRecord.Flags Or Special.Char3
- Strng="User is now guild master."
- Call IO.O
- Case "D"
- UserRecord.Flags=UserRecord.Flags Or Special.Char4
- Strng="User is now sysop."
- Call IO.O
- Case "E"
- UserRecord.Flags=UserRecord.Flags And Not Special.Char1
- UserRecord.Flags=UserRecord.Flags And Not Special.Char2
- UserRecord.Flags=UserRecord.Flags And Not Special.Char3
- UserRecord.Flags=UserRecord.Flags And Not Special.Char4
- Strng="User is cleared of special character class."
- Call IO.O
- Case "Q"
- Exit Do
- End Select
- Loop
- Case "!"
- Strng="Are you sure(y/n)?"
- Line.Length=TempD
- No.Input.Out="N"
- Call IO.I
- If Yes Then
- Call Delete.User
- Strng="User deleted."
- Call IO.O
- Exit Do
- Endif
- Case "Q"
- Exit Do
- End Select
- Loop
- Put 3,Temp5,UserRecord
- 10141
- Exit Sub
- 10142
- Resume 10141
- End Sub
-
- Sub Pack.Users
- On Local Error Goto 10152
- Strng="Delete -dead- users(y/n)?"
- Line.Length=TempD
- No.Input.Out="Y"
- Call IO.I
- TempX=False
- If Yes Then
- TempX=True
- Endif
- TempZ=False
- Strng="Delete users before date(y/n)?"
- Line.Length=TempD
- No.Input.Out="N"
- Call IO.I
- If Yes Then
- TempZ=True
- Strng="Enter date:"
- No.Input.Out="01-01-1980"
- Call IO.I
- Temp#=Int(DateValue#(Out2))
- Endif
- Graphics.Off=True
- Strng="Making backup of userfile.."
- Call IO.O
- Close 13
- FileName=Config3(11)+Config3(21)+".BAK"
- Open FileName For Random Shared As #13 Len=Len(UserRecord)
- Strng="User record copied:"+Space$(5)
- Carriage.Return=True
- Call IO.O
- For Temp3=1 To Lof(3)/Len(UserRecord)
- Get 3,Temp3,UserRecord
- Put 13,Temp3,UserRecord
- For Temp5=1 To 5
- Call Back.Space
- Next
- Strng=Str$(Temp3)
- Strng=Strng+Space$(5-Len(Strng))
- Carriage.Return=True
- Call IO.O
- Next
- Close 13
- Call IO.O
- Strng="User record deleted:"+Space$(5)
- Carriage.Return=True
- Call IO.O
- For Temp3=1 To Lof(3)/Len(UserRecord)
- Get 3,Temp3,UserRecord
- Call New.Stats
- Out3=UserRecord.CodeName
- Call Decrypt(Out3)
- Temp=False
- If TempX Then
- If UserRecord.Level=False Then
- Temp=True
- Endif
- Endif
- If TempZ Then
- Out2=UserRecord.DateOn
- Call Decrypt(Out2)
- If Int(DateValue#(Out2))<Temp# Then
- Temp=True
- Endif
- Endif
- If Temp Then
- If Left$(Out3,9)<>Deleted$ Then
- For Temp5=1 To 5
- Call Back.Space
- Next
- Strng=Str$(Temp3)
- Strng=Strng+Space$(5-Len(Strng))
- Carriage.Return=True
- Call IO.O
- Endif
- Call Delete.User
- Endif
- Put 3,Temp3,UserRecord
- Next
- Strng=Nul
- Call IO.O
- Graphics.Off=False
- Strng="User file packed."
- Call IO.O
- 10151
- Exit Sub
- 10152
- Resume 10151
- End Sub
-
- Sub Delete.User
- On Local Error Goto 10162
- Strng=Deleted$
- Call Valid(Strng,30)
- Call Encrypt(Strng,True)
- UserRecord.CodeName=Strng
- Strng=Deleted$
- Call Valid(Strng,20)
- Call Encrypt(Strng,False)
- UserRecord.PassWord=Strng
- Strng=Deleted$
- Call Valid(Strng,20)
- Call Encrypt(Strng,True)
- UserRecord.ClassName=Strng
- UserRecord.Level=False
- UserRecord.Flags=False
- UserRecord.ClassType=False
- UserRecord.ToMin=False
- UserRecord.ToHour=False
- UserRecord.FromMin=False
- UserRecord.FromHour=False
- UserRecord.MaxCalls=False
- For Temp6=1 To 15
- UserRecord.Inv(Temp6)=False
- UserRecord.Charges(Temp6)=False
- Next
- For Temp6=1 To 5
- UserRecord.Object(Temp6)=False
- UserRecord.ObjCharges(Temp6)=False
- Next
- 10161
- Exit Sub
- 10162
- Resume 10161
- End Sub
-
- Sub Search.Users
- On Local Error Goto 10172
- Do
- Temp1$=Nul
- Temp2$=Nul
- Temp3$=Nul
- Temp1=False
- Temp3=False
- Temp4=False
- Temp6=False
- Temp7=False
- Temp8=False
- Temp9=False
- Temp10=False
- Temp11=False
- Temp12=False
- Temp13#=False
- Temp14#=False
- Temp15#=False
- Temp16#=False
- Temp17=False
- Temp18=False
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]username substring"
- If Temp1$<>Nul Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Temp1$+")"
- Endif
- Call IO.O
- Strng="[B]password substring"
- If Temp2$<>Nul Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Temp2$+")"
- Endif
- Call IO.O
- Strng="[C]classname substring"
- If Temp3$<>Nul Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Temp3$+")"
- Endif
- Call IO.O
- Strng="[D]level"
- If Temp1 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp1),2)+")"
- Endif
- Call IO.O
- Strng="[E]class"
- If Temp3 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Rtrim$(Class.Name(Temp3))+")"
- Endif
- Call IO.O
- Strng="[F]weapon proficiency"
- If Temp4 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Rtrim$(Weapon.Type.Name(Temp4))+")"
- Endif
- Call IO.O
- Strng="[G]strength"
- If Temp6 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp6),2)+")"
- Endif
- Call IO.O
- Strng="[H]intelligence"
- If Temp7 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp7),2)+")"
- Endif
- Call IO.O
- Strng="[I]wisdom"
- If Temp8 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp8),2)+")"
- Endif
- Call IO.O
- Strng="[J]dexterity"
- If Temp9 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp9),2)+")"
- Endif
- Call IO.O
- Strng="[K]constitution"
- If Temp10 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp10),2)+")"
- Endif
- Call IO.O
- Strng="[L]piety"
- If Temp11 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp11),2)+")"
- Endif
- Call IO.O
- Strng="[M]charisma"
- If Temp12 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp12),2)+")"
- Endif
- Call IO.O
- Strng="[N]experience"
- If Temp13# Then
- If Temp14# Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp13#),2)+"-"+_
- Mid$(Str$(Temp14#),2)+")"
- Endif
- Endif
- Call IO.O
- Strng="[O]gold"
- If Temp15# Then
- If Temp16# Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp15#),2)+"-"+_
- Mid$(Str$(Temp16#),2)+")"
- Endif
- Endif
- Call IO.O
- Strng="[P]room number"
- If Temp17 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp17),2)+")"
- Endif
- Call IO.O
- Strng="[R]special character"
- If Temp18 Then
- Strng=Strng+Space$(30-Len(Strng))
- Select Case Temp18
- Case 1
- Strng=Strng+"(town mayor)"
- Case 2
- Strng=Strng+"(governor)"
- Case 3
- Strng=Strng+"(guild master)"
- Case 4
- Strng=Strng+"(sysop)"
- End Select
- Endif
- Call IO.O
-
- Graphics.Off=False
- Endif
- Strng="User search option(s to search, q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- Strng="Username substring?"
- Call IO.I
- Out2=Ucase$(Out2)
- Temp1$=Out2
- Case "B"
- Strng="Password substring?"
- Call IO.I
- Out2=Ucase$(Out2)
- Temp2$=Out2
- Case "C"
- Strng="Classname substring?"
- Call IO.I
- Out2=Ucase$(Out2)
- Temp3$=Out2
- Case "D"
- Strng="Level?"
- Call IO.I
- Temp1=Int(Val(Out2))
- Case "E"
- If TempC=False Then
- Graphics.Off=True
- For Temp5=1 To 10
- Strng="["+Mid$(Str$(Temp5),2)+"]"+Rtrim$(Class.Name(Temp5))
- Call IO.O
- Next
- Graphics.Off=False
- Endif
- Strng="Class(1-10)?"
- Call IO.I
- Temp3=Int(Val(Out2))
- If Temp3<1 Or Temp3>10 Then
- Temp3=False
- Endif
- Case "F"
- If TempC=False Then
- Graphics.Off=True
- For Temp5=1 To 4
- Strng="["+Mid$(Str$(Temp5),2)+"]"+_
- Rtrim$(Weapon.Type.Name(Temp5))
- Call IO.O
- Next
- Graphics.Off=False
- Endif
- Strng="Weapon proficiency(1-4)?"
- Call IO.I
- Temp4=Int(Val(Out2))
- If Temp4<1 Or Temp4>4 Then
- Temp4=False
- Endif
- Case "G"
- Strng="Strength?"
- Call IO.I
- Temp6=Int(Val(Out2))
- Case "H"
- Strng="Intelligence?"
- Call IO.I
- Temp7=Int(Val(Out2))
- Case "I"
- Strng="Wisdom?"
- Call IO.I
- Temp8=Int(Val(Out2))
- Case "J"
- Strng="Dexterity?"
- Call IO.I
- Temp9=Int(Val(Out2))
- Case "K"
- Strng="Constitution?"
- Call IO.I
- Temp10=Int(Val(Out2))
- Case "L"
- Strng="Piety?"
- Call IO.I
- Temp11=Int(Val(Out2))
- Case "M"
- Strng="Charisma?"
- Call IO.I
- Temp12=Int(Val(Out2))
- Case "N"
- Strng="Enter range:"
- Call IO.O
- No.Input.Out="1"
- Strng="From?"
- Call IO.I
- Temp13#=Val(Out2)
- No.Input.Out="10"
- Strng="To?"
- Call IO.I
- Temp14#=Val(Out2)
- Case "O"
- Strng="Enter range:"
- Call IO.O
- No.Input.Out="1"
- Strng="From?"
- Call IO.I
- Temp15#=Val(Out2)
- No.Input.Out="10"
- Strng="To?"
- Call IO.I
- Temp16#=Val(Out2)
- Case "P"
- Strng="Room number?"
- Call IO.I
- Temp17=Int(Val(Out2))
- Case "R"
- If TempC=False Then
- Graphics.Off=True
- Strng="[1]town mayor"
- Call IO.O
- Strng="[2]governor"
- Call IO.O
- Strng="[3]guild master"
- Call IO.O
- Strng="[4]sysop"
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Special character(1-4)?"
- Call IO.I
- Temp18=Int(Val(Out2))
- If Temp18<1 Or Temp18>4 Then
- Temp18=False
- Endif
- Case "S"
- Strng="Enter range:"
- Call IO.O
- Temp5=Lof(3)/Len(UserRecord)
- Temp$=Mid$(Str$(Temp5),2)
- Strng="From(1-"+Temp$+")?"
- No.Input.Out="1"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp<1 Or Temp>Temp5 Then
- Strng=Range$
- Call IO.O
- Exit Do
- Endif
- Strng="To("+Mid$(Str$(Temp),2)+"-"+Temp$+")?"
- No.Input.Out=Temp$
- Call IO.I
- Temp2=Int(Val(Out2))
- If Temp2<Temp Then
- Strng=Range$
- Call IO.O
- Exit Do
- Endif
- If Temp2>Temp5 Then
- Temp2=Temp5
- Endif
- For Temp5=Temp To Temp2
- Get 3,Temp5,UserRecord
- TempX=False
- If Temp1$<>Nul Then
- Call Decrypt(UserRecord.Codename)
- If Instr(Out3,Temp1$) Then
- TempX=True
- Endif
- Endif
- If Temp2$<>Nul Then
- Call Decrypt(UserRecord.Password)
- If Instr(Out3,Temp2$) Then
- TempX=True
- Endif
- Endif
- If Temp3$<>Nul Then
- Call Decrypt(UserRecord.Classname)
- If Instr(Out3,Temp3$) Then
- TempX=True
- Endif
- Endif
- If Temp1 Then
- If UserRecord.Level=Temp1 Then
- TempX=True
- Endif
- Endif
- If Temp3 Then
- If UserRecord.ClassType=Temp3 Then
- TempX=True
- Endif
- Endif
- If Temp4 Then
- If UserRecord.Proficiency=Temp4 Then
- TempX=True
- Endif
- Endif
- If Temp6 Then
- If UserRecord.Stats(1)=Temp6 Then
- TempX=True
- Endif
- Endif
- If Temp7 Then
- If UserRecord.Stats(2)=Temp7 Then
- TempX=True
- Endif
- Endif
- If Temp8 Then
- If UserRecord.Stats(3)=Temp8 Then
- TempX=True
- Endif
- Endif
- If Temp9 Then
- If UserRecord.Stats(4)=Temp9 Then
- TempX=True
- Endif
- Endif
- If Temp10 Then
- If UserRecord.Stats(5)=Temp10 Then
- TempX=True
- Endif
- Endif
- If Temp11 Then
- If UserRecord.Stats(6)=Temp11 Then
- TempX=True
- Endif
- Endif
- If Temp12 Then
- If UserRecord.Stats(7)=12 Then
- TempX=True
- Endif
- Endif
- If Temp13 And Temp14 Then
- If UserRecord.Experience>=Temp13 And_
- UserRecord.Experience<=Temp14 Then
- TempX=True
- Endif
- Endif
- If Temp15 And Temp16 Then
- If UserRecord.Gold>=Temp15 And_
- UserRecord.Gold<=Temp16 Then
- TempX=True
- Endif
- Endif
- If Temp17 Then
- If UserRecord.Room=Temp17 Then
- TempX=True
- Endif
- Endif
- If Temp18 Then
- Select Case Temp18
- Case 1
- If UserRecord.Flags And Special.Char1 Then
- TempX=True
- Endif
- Case 2
- If UserRecord.Flags And Special.Char2 Then
- TempX=True
- Endif
- Case 3
- If UserRecord.Flags And Special.Char3 Then
- TempX=True
- Endif
- Case 4
- If UserRecord.Flags And Special.Char4 Then
- TempX=True
- Endif
- End Select
- Endif
- If TempX Then
- Call Decrypt(UserRecord.Codename)
- If Left$(Out3,9)<>Deleted$ Then
- Call Display.User(False)
- Call More.Prompt
- If No Then
- Exit Do
- Endif
- Endif
- Endif
- Next
- Exit Do
- Case "Q"
- Exit Sub
- End Select
- Loop
- Loop
- 10171
- Exit Sub
- 10172
- Resume 10171
- End Sub
-
- Sub Edit.Inventory
- On Local Error Goto 10182
- Temp9=True
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]dd"
- Call IO.O
- Strng="[D]elete"
- Call IO.O
- If Temp9 Then
- Strng="[E]dit Objects"
- Else
- Strng="[E]dit Treasure"
- Endif
- Call IO.O
- Strng="[L]ist"
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Inventory edit option(q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- If Temp9 Then
- Call Find.Treasure
- If Temp5 Then
- For Temp2=1 To 15
- If UserRecord.Inv(Temp2)=False Then
- UserRecord.Inv(Temp2)=Temp5
- UserRecord.Charges(Temp2)=TreasureRecord.Charges
- Temp5=True
- Exit For
- Endif
- Next
- Endif
- Strng="Treasure not added to inventory."
- If Temp5=True Then
- Strng="Treasure added to inventory."
- Endif
- Call IO.O
- Else
- Call Find.Object
- If Temp Then
- For Temp2=1 To 5
- If UserRecord.Object(Temp2)=False Then
- UserRecord.Object(Temp2)=Temp
- UserRecord.ObjCharges(Temp2)=False
- Temp=True
- Exit For
- Endif
- Next
- Endif
- Strng="Object not added to inventory."
- If Temp=True Then
- Strng="Object added to inventory."
- Endif
- Call IO.O
- Endif
- Case "D"
- If Temp9 Then
- Strng="Number to delete?"
- No.Input.Out="1"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp>False And Temp<=15 Then
- If UserRecord.Inv(Temp)>False Then
- For Temp5=Temp To 14
- UserRecord.Inv(Temp5)=UserRecord.Inv(Temp5+1)
- UserRecord.Charges(Temp5)=UserRecord.Charges(Temp5+1)
- Next
- Temp=True
- UserRecord.Inv(15)=False
- UserRecord.Charges(15)=False
- Endif
- Endif
- Strng="Treasure not deleted from inventory."
- If Temp=True Then
- Strng="Treasure deleted from inventory"
- Endif
- Call IO.O
- Else
- Strng="Number to delete?"
- No.Input.Out="1"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp>False And Temp<=5 Then
- If UserRecord.Object(Temp)>False Then
- For Temp5=Temp To 4
- UserRecord.Object(Temp5)=UserRecord.Object(Temp5+1)
- UserRecord.ObjCharges(Temp5)=UserRecord.ObjCharges(Temp5+1)
- Next
- Temp=True
- UserRecord.Object(5)=False
- UserRecord.ObjCharges(5)=False
- Endif
- Endif
- Strng="Object not deleted from inventory."
- If Temp=True Then
- Strng="Object deleted from inventory"
- Endif
- Call IO.O
- Endif
- Case "L"
- If Temp9 Then
- Graphics.Off=True
- For Temp5=1 To 15
- Temp=UserRecord.Inv(Temp5)
- If Temp<False Then
- Temp=Abs(Temp)
- UserRecord.Inv(Temp5)=Temp
- Endif
- If Temp>False And Temp<=Lof(8)/Len(TreasureRecord) Then
- Get 8,Temp,TreasureRecord
- Out3=TreasureRecord.TreasureName
- Out3=Lcase$(Out3)
- Strng=Mid$(Str$(Temp5),2)+"."+Out3
- Call IO.O
- Endif
- Next
- Else
- Graphics.Off=True
- For Temp5=1 To 5
- Temp=UserRecord.Object(Temp5)
- If Temp<False Then
- UserRecord.Object(Temp5)=False
- UserRecord.ObjCharges(Temp5)=False
- Else
- If Temp>False And Temp<=Lof(6)/Len(ObjectRecord) Then
- Get 6,Temp,ObjectRecord
- Out3=ObjectRecord.ObjectName
- Out3=Lcase$(Out3)
- Strng=Mid$(Str$(Temp5),2)+"."+Out3
- Call IO.O
- Endif
- Endif
- Next
- Endif
- Case "E"
- Temp9=Not Temp9
- If Temp9 Then
- Strng="Now editing treasure."
- Else
- Strng="Now editing objects."
- Endif
- Call IO.O
- Case "Q"
- Exit Do
- End Select
- Loop
- 10181
- Exit Sub
- 10182
- Resume 10181
- End Sub
-
- Sub Edit.Room
- On Local Error Goto 10192
- If Lof(5)=False Then
- Call Add.Room
- Endif
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]dd room"
- Call IO.O
- Strng="[D]escription edit"
- Call IO.O
- Strng="[M]onster class"
- Call IO.O
- Strng="[O]bject edit"
- Call IO.O
- Strng="[R]oom link"
- Call IO.O
- Strng="[T]reasure edit"
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Room edit option(q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- Call Add.Room
- Case "D"
- Call Edit.Description
- Case "M"
- Call Edit.Room.MonsterClass
- Case "R"
- Call Edit.Room.Links
- Case "O"
- Call Edit.Room.Object
- Case "T"
- Call Edit.Room.Treasure
- Case "Q"
- Exit Do
- End Select
- Loop
- 10191
- Exit Sub
- 10192
- Resume 10191
- End Sub
-
- Sub Add.Room
- On Local Error Goto 10202
- Temp4=Lof(5)/Len(RoomRecord)+1
- RoomRecord.ShortDesc=Nul
- RoomRecord.Restrictions=False
- RoomRecord.MonsterClass=False
- RoomRecord.SpellTrigger=False
- RoomRecord.MonsterTrigger=False
- RoomRecord.HealthRate=False
- RoomRecord.EncounterRate=False
- RoomRecord.HitPoints=False
- RoomRecord.Inventory=False
- RoomRecord.MonsterTalk=False
- RoomRecord.Fumble=False
- RoomRecord.Level=False
- RoomRecord.Teleport=False
- RoomRecord.RustRate=False
- RoomRecord.StealRate=False
- For Temp6=1 To 4
- RoomRecord.LongDesc(Temp6)=Nul
- Next
- For Temp6=1 To 11
- RoomRecord.Direct(Temp6)=False
- Next
- For Temp6=1 To 10
- RoomRecord.Object(Temp6)=False
- RoomRecord.ObjCharges(Temp6)=False
- RoomRecord.Treasure(Temp6)=False
- RoomRecord.TreCharges(Temp6)=False
- RoomRecord.Flags(Temp6)=False
- Next
- Put 5,Temp4,RoomRecord
- Call Edit.Description
- Call Edit.Room.MonsterClass
- 10201
- Exit Sub
- 10202
- Resume 10201
- End Sub
-
- Sub Edit.Description
- On Local Error Goto 10212
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[E]dit description"
- Call IO.O
- Strng="[L]ist description"
- Call IO.O
- Strng="[S]earch description"
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Room description edit option(q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "E"
- Call Modify.Description
- Case "L"
- Call List.Room
- Case "S"
- Call Search.Description
- Case "Q"
- Exit Do
- End Select
- Loop
- 10211
- Exit Sub
- 10212
- Resume 10211
- End Sub
-
- Sub Modify.Description
- On Local Error Goto 10222
- Temp3=Lof(5)/Len(RoomRecord)
- Strng="Room number(1-"+Mid$(Str$(Temp3),2)+")?"
- No.Input.Out="1"
- Call IO.I
- Temp2=Int(Val(Out2))
- If Temp2<1 Or Temp2>Temp3 Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- Graphics.Off=True
- Get 5,Temp2,RoomRecord
- Strng="Short description:"
- Call IO.O
- Strng=Rtrim$(RoomRecord.ShortDesc)
- Call IO.O
- Strng="Enter new short description:"
- Call IO.O
- Strng="Press "+Enter$+" to leave unchanged."
- Call IO.O
- Strng="?"
- Call IO.I
- If No.Input=False Then
- RoomRecord.ShortDesc=Out2
- Endif
- Put 5,Temp2,RoomRecord
- Strng="Edit long description(y/n)?"
- Line.Length=TempD
- No.Input.Out="Y"
- Call IO.I
- If Yes Then
- Strng="Enter four lines for new description:"
- Call IO.O
- Strng="Press "+Enter$+" when done."
- Call IO.O
- For Temp3=1 To 4
- RoomRecord.LongDesc(Temp3)=Nul
- Next
- Word.Wrap=True
- For Temp3=1 To 4
- Strng="?"
- If Temp3=4 Then
- Word.Wrap=False
- Endif
- Call IO.I
- If No.Input Then
- Exit For
- Endif
- RoomRecord.LongDesc(Temp3)=Out2
- Next
- Word.Wrap=False
- Put 5,Temp2,RoomRecord
- Endif
- 10221
- Exit Sub
- 10222
- Resume 10221
- End Sub
-
- Sub List.Room
- On Local Error Goto 10232
- Strng="Enter range:"
- Call IO.O
- Temp3=Lof(5)/Len(RoomRecord)
- Temp$=Mid$(Str$(Temp3),2)
- Strng="From(1-"+Temp$+")?"
- No.Input.Out="1"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp<1 Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- Strng="To("+Mid$(Str$(Temp),2)+"-"+Temp$+")?"
- No.Input.Out=Temp$
- Call IO.I
- Temp2=Int(Val(Out2))
- If Temp2<Temp Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- If Temp2>Temp3 Then
- Temp2=Temp3
- Endif
- For Temp5=Temp To Temp2
- Get 5,Temp5,RoomRecord
- Call Display.Room
- Call More.Prompt
- If No Then
- Exit For
- Endif
- Next
- 10231
- Exit Sub
- 10232
- Resume 10231
- End Sub
-
- Sub Display.Room
- On Local Error Goto 10242
- If TempC Then
- Exit Sub
- Endif
- Graphics.Off=True
- Strng="Room number"+Str$(Temp5)+":"
- Call IO.O
- Strng="Short description:"
- Call IO.O
- Strng=Rtrim$(RoomRecord.ShortDesc)
- Call IO.O
- Strng="Long description:"
- Call IO.O
- For Temp3=1 To 4
- Strng=RoomRecord.LongDesc(Temp3)
- Strng=Rtrim$(Strng)
- If Len(Strng) Then
- Call IO.O
- Endif
- Next
- 10241
- Exit Sub
- 10242
- Resume 10241
- End Sub
-
- Sub Edit.Room.MonsterClass
- On Local Error Goto 10252
- Temp3=Lof(5)/Len(RoomRecord)
- Strng="Room number(1-"+Mid$(Str$(Temp3),2)+")?"
- No.Input.Out="1"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp<1 Or Temp>Temp3 Then
- Strng="Out of range"
- Call IO.O
- Exit Sub
- Endif
- Temp3=Lof(10)/Len(MonclassRecord)
- Strng="Monster class(1-"+Mid$(Str$(Temp3),2)+")?"
- No.Input.Out="1"
- Call IO.I
- Temp2=Int(Val(Out2))
- If Temp2<1 Or Temp2>Temp3 Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- Get 5,Temp,RoomRecord
- RoomRecord.MonsterClass=Temp2
- Put 5,Temp,RoomRecord
- Strng="Monster class in room number"+Str$(Temp)+" changed."
- Call IO.O
- 10251
- Exit Sub
- 10252
- Resume 10251
- End Sub
-
- Sub Edit.Room.Links
- On Local Error Goto 10262
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]dd link"
- Call IO.O
- Strng="[R]emove link"
- Call IO.O
- Strng="[L]ist links"
- Call IO.O
- Strng="[S]earch links"
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Room link edit option(q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- Call Change.Link(True)
- Case "R"
- Call Change.Link(False)
- Case "L"
- Call List.Links
- Case "S"
- Call Search.Links
- Case "Q"
- Exit Do
- End Select
- Loop
- 10261
- Exit Sub
- 10262
- Resume 10261
- End Sub
-
- Sub Change.Link(TempX)
- On Local Error Goto 10272
- Strng="Room number to link?"
- Call IO.I
- Temp2=Int(Val(Out2))
- If Temp2<1 Or Temp2>Lof(5)/Len(RoomRecord) Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- Strng="Direction:"
- Call IO.O
- Strng="N, E, S, W, O, U, D, NE, SE, SW, NW."
- Call IO.O
- Strng="Which direction?"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "N"
- Temp7=1
- Case "E"
- Temp7=2
- Case "S"
- Temp7=3
- Case "W"
- Temp7=4
- Case "O"
- Temp7=5
- Case "U"
- Temp7=6
- Case "D"
- Temp7=7
- Case "NE"
- Temp7=8
- Case "SE"
- Temp7=9
- Case "SW"
- Temp7=10
- Case "NW"
- Temp7=11
- Case Else
- Temp7=False
- End Select
- If Temp7=False Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- If TempX=False Then
- Get 5,Temp2,RoomRecord
- RoomRecord.Direct(Temp7)=False
- Put 5,Temp2,RoomRecord
- Strng="Link removed."
- Call IO.O
- Exit Sub
- Endif
- Strng="Link to which room number?"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp<1 Or Temp>Lof(5)/Len(RoomRecord) Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- Get 5,Temp2,RoomRecord
- RoomRecord.Direct(Temp7)=Temp
- Put 5,Temp2,RoomRecord
- Strng="Room"+Str$(Temp2)+" linked to"+Str$(Temp)+"."
- Call IO.O
- If Temp7=5 Then
- Exit Sub
- Endif
- Strng="Link back to room"+Str$(Temp2)+"(y/n)?"
- No.Input.Out="N"
- Call IO.I
- If Yes=False Then
- Exit Sub
- Endif
- Select Case Temp7
- Case 1
- Temp8=3
- Case 2
- Temp8=4
- Case 3
- Temp8=1
- Case 4
- Temp8=2
- Case 6
- Temp8=7
- Case 7
- Temp8=6
- Case 8
- Temp8=10
- Case 9
- Temp8=11
- Case 10
- Temp8=8
- Case 11
- Temp8=9
- End Select
- Get 5,Temp,RoomRecord
- RoomRecord.Direct(Temp8)=Temp2
- Put 5,Temp,RoomRecord
- Strng="Room"+Str$(Temp)+" linked back to"+Str$(Temp2)+"."
- Call IO.O
- 10271
- Exit Sub
- 10272
- Resume 10271
- End Sub
-
- Sub List.Links
- On Local Error Goto 10282
- Strng="Range of room numbers."
- Call IO.O
- Temp3=Lof(5)/Len(RoomRecord)
- Temp$=Mid$(Str$(Temp3),2)
- Strng="From(1-"+Temp$+")?"
- No.Input.Out="1"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp<1 Or Temp>Temp3 Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- Strng="To("+Mid$(Str$(Temp),2)+"-"+Temp$+")?"
- No.Input.Out=Temp$
- Call IO.I
- Temp2=Int(Val(Out2))
- If Temp2<Temp Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- If Temp2>Temp3 Then
- Temp2=Temp3
- Endif
- Temp6=False
- For Temp5=Temp To Temp2
- Get 5,Temp5,RoomRecord
- Graphics.Off=True
- Strng="Room number"+Str$(Temp5)+":"
- Call IO.O
- For Temp3=1 To 7
- Out2=Mid$("NESWOUD",Temp3,1)+_
- Str$(RoomRecord.Direct(Temp3))
- Strng=Strng+Out2+Space$(10-Len(Out2))
- Next
- Call IO.O
- For Temp3=8 To 11
- Out2=Mid$("NESESWNW",(Temp3-8)*2+1,2)+_
- Str$(RoomRecord.Direct(Temp3))
- Strng=Strng+Out2+Space$(10-Len(Out2))
- Next
- Call IO.O
- Temp6=Temp6+3
- If Temp6>=22 Then
- Temp6=False
- Call More.Prompt
- If No Then
- Exit For
- Endif
- Endif
- Next
- If Temp6 Then
- Call More.Prompt
- Endif
- 10281
- Exit Sub
- 10282
- Resume 10281
- End Sub
-
- Sub Search.Links
- On Local Error Goto 10292
- Do
- Temp1=False
- Temp2=False
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]room link"
- If Temp1 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp1),2)+")"
- Endif
- Call IO.O
- Strng="[B]room link and back"
- If Temp2 Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+Mid$(Str$(Temp2),2)+")"
- Endif
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Room link search option(s to search, q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Temp3=Lof(5)/Len(RoomRecord)
- Temp$=Mid$(Str$(Temp3),2)
- Select Case Ucase$(Out2)
- Case "A"
- Strng="Room link number(1-"+Temp$+")?"
- No.Input.Out="1"
- Call IO.I
- Temp1=Int(Val(Out2))
- If Temp1<1 Or Temp1>Temp3 Then
- Strng=Range$
- Call IO.O
- Temp1=False
- Endif
- Case "B"
- Strng="Room link number(1-"+Temp$+")?"
- No.Input.Out="1"
- Call IO.I
- Temp2=Int(Val(Out2))
- If Temp2<1 Or Temp2>Temp3 Then
- Strng=Range$
- Call IO.O
- Temp2=False
- Endif
- Case "S"
- Strng="Enter range:"
- Call IO.O
- Temp5=Lof(5)/Len(RoomRecord)
- Temp$=Mid$(Str$(Temp5),2)
- Strng="From(1-"+Temp$+")?"
- No.Input.Out="1"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp<1 Or Temp>Temp5 Then
- Strng=Range$
- Call IO.O
- Exit Do
- Endif
- Strng="To("+Mid$(Str$(Temp),2)+"-"+Temp$+")?"
- No.Input.Out=Temp$
- Call IO.I
- Temp3=Int(Val(Out2))
- If Temp3<Temp Then
- Strng=Range$
- Call IO.O
- Exit Do
- Endif
- If Temp4>Temp5 Then
- Temp4=Temp5
- Endif
- For Temp5=Temp To Temp3
- Get 5,Temp5,RoomRecord
- For Temp4=1 To 11
- TempX=False
- If Temp1 Then
- If RoomRecord.Direct(Temp4)=Temp1 Then
- TempX=True
- Endif
- Endif
- If Temp2 Then
- If RoomRecord.Direct(Temp4)=Temp2 Then
- If Temp4=1 Then
- Temp8=3
- Endif
- If Temp4=2 Then
- Temp8=4
- Endif
- If Temp4=3 Then
- Temp8=1
- Endif
- If Temp4=4 Then
- Temp8=2
- Endif
- If Temp4=6 Then
- Temp8=7
- Endif
- If Temp4=7 Then
- Temp8=6
- Endif
- If Temp4=8 Then
- Temp8=10
- Endif
- If Temp4=9 Then
- Temp8=11
- Endif
- If Temp4=10 Then
- Temp8=8
- Endif
- If Temp4=11 Then
- Temp8=9
- Endif
- Get 5,Temp2,RoomRecord
- If RoomRecord.Direct(Temp8)=Temp5 Then
- TempX=True
- Endif
- Get 5,Temp5,RoomRecord
- Endif
- Endif
- If TempX Then
- Graphics.Off=True
- Strng="Room number"+Str$(Temp5)+":"
- Call IO.O
- If Temp4>False And Temp4<8 Then
- Strng=Mid$("NESWOUD",Temp4,1)
- Endif
- If Temp4>7 And Temp4<12 Then
- Strng=Mid$("NESESWNW",(Temp4-1)*2+1,2)
- Endif
- Strng=Strng+Str$(RoomRecord.Direct(Temp4))
- Call IO.O
- If Temp2 Then
- Get 5,Temp2,RoomRecord
- Strng="Room number"+Str$(Temp2)+":"
- Call IO.O
- If Temp8>False And Temp8<8 Then
- Strng=Mid$("NESWOUD",Temp4,1)
- Endif
- If Temp8>7 And Temp8<12 Then
- Strng=Mid$("NESESWNW",(Temp8-1)*2+1,2)
- Endif
- Strng=Strng+Str$(RoomRecord.Direct(Temp8))
- Call IO.O
- Get 5,Temp5,RoomRecord
- Endif
- Call More.Prompt
- If No Then
- Exit Do
- Endif
- Endif
- Next
- Next
- Exit Do
- Case "Q"
- Exit Sub
- End Select
- Loop
- Loop
- 10291
- Exit Sub
- 10292
- Resume 10291
- End Sub
-
- Sub Edit.Room.Object
- On Local Error Goto 10302
- Temp5=Lof(5)/Len(RoomRecord)
- Strng="Room number(1-"+Mid$(Str$(Temp5),2)+")?"
- No.Input.Out="1"
- Call IO.I
- Temp3=Int(Val(Out2))
- If Temp3<1 Or Temp3>Temp5 Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]dd"
- Call IO.O
- Strng="[D]elete"
- Call IO.O
- Strng="[L]ist"
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Room object edit option(q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- Call Find.Object
- If Temp Then
- For Temp2=1 To 10
- If RoomRecord.Object(Temp2)=False Then
- RoomRecord.Object(Temp2)=Temp
- RoomRecord.ObjCharges(Temp2)=False
- RoomRecord.Flags(Temp2)=False
- Put 5,Temp3,RoomRecord
- Temp=True
- Exit For
- Endif
- Next
- Endif
- Strng="Object not added to room."
- If Temp=True Then
- Strng="Object added to room."
- Endif
- Call IO.O
- Case "D"
- Strng="Object number to delete?"
- No.Input.Out="1"
- Call IO.I
- Temp=False
- Temp5=Int(Val(Out2))
- If Temp5>False And Temp5<=10 Then
- If RoomRecord.Object(Temp5) Then
- RoomRecord.Object(Temp5)=False
- RoomRecord.ObjCharges(Temp5)=False
- RoomRecord.Flags(Temp5)=False
- Temp=True
- Put 5,Temp3,RoomRecord
- Endif
- Endif
- Strng="Object not deleted from room."
- If Temp=True Then
- Strng="Object deleted from room."
- Endif
- Call IO.O
- Case "L"
- Get 5,Temp3,RoomRecord
- Graphics.Off=True
- For Temp5=1 To 10
- Temp2=RoomRecord.Object(Temp5)
- If Temp2>False And Temp2<=Lof(6)/Len(ObjectRecord) Then
- Get 6,Temp2,ObjectRecord
- Strng=Mid$(Str$(Temp5),2)+"."+Rtrim$(ObjectRecord.ObjectName)
- Call IO.O
- Endif
- Next
- Case "Q"
- Exit Do
- End Select
- Loop
- 10301
- Exit Sub
- 10302
- Resume 10301
- End Sub
-
- Sub Edit.Room.Treasure
- On Local Error Goto 10312
- Temp5=Lof(5)/Len(RoomRecord)
- Strng="Room number(1-"+Mid$(Str$(Temp5),2)+")?"
- No.Input.Out="1"
- Call IO.I
- Temp3=Int(Val(Out2))
- If Temp3<1 Or Temp3>Temp5 Then
- Strng="Out of Range"
- Call IO.O
- Exit Sub
- Endif
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]dd"
- Call IO.O
- Strng="[D]elete"
- Call IO.O
- Strng="[L]ist
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Room treasure edit option(q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- Call Find.Treasure
- If Temp5 Then
- For Temp2=1 To 10
- If RoomRecord.Treasure(Temp2)=False Then
- RoomRecord.Treasure(Temp2)=Temp5
- RoomRecord.TreCharges(Temp2)=TreasureRecord.Charges
- RoomRecord.Flags(Temp2)=False
- Temp5=True
- Put 5,Temp3,RoomRecord
- Exit For
- Endif
- Next
- Endif
- Strng="Treasure not added to room."
- If Temp5=True Then
- Strng="Treasure added to room."
- Endif
- Call IO.O
- Case "D"
- Strng="Treasure number to delete?"
- No.Input.Out="1"
- Call IO.I
- Temp=False
- Temp5=Int(Val(Out2))
- If Temp5>False And Temp5<=10 Then
- If RoomRecord.Treasure(Temp5) Then
- RoomRecord.Treasure(Temp5)=False
- RoomRecord.TreCharges(Temp5)=False
- RoomRecord.Flags(Temp5)=False
- Temp=True
- Put 5,Temp3,RoomRecord
- Endif
- Endif
- Strng="Treasure not deleted from room."
- If Temp=True Then
- Strng="Treasure deleted from room."
- Endif
- Call IO.O
- Case "L"
- Get 5,Temp3,RoomRecord
- Graphics.Off=True
- For Temp5=1 To 10
- Temp2=RoomRecord.Treasure(Temp5)
- If Temp2>False And Temp2<=Lof(8)/Len(TreasureRecord) Then
- Get 8,Temp2,TreasureRecord
- Strng=Mid$(Str$(Temp5),2)+"."+Rtrim$(TreasureRecord.TreasureName)
- Call IO.O
- Endif
- Next
- Case "Q"
- Exit Do
- End Select
- Loop
- 10311
- Exit Sub
- 10312
- Resume 10311
- End Sub
-
- Sub Display.BaseTypes
- On Local Error Goto 10322
- If TempC Then
- Exit Sub
- Endif
- Graphics.Off=True
- Strng="[1]public"
- Call IO.O
- Strng="[2]private"
- Call IO.O
- Strng="[3]DMs only"
- Call IO.O
- Strng="[4]Sysops only"
- Call IO.O
- Strng="[5]Town Mayors only"
- Call IO.O
- Strng="[6]Governors only"
- Call IO.O
- Strng="[7]Guild Masters only"
- Call IO.O
- Strng="[8]Clear base types"
- Call IO.O
- Graphics.Off=False
- 10321
- Exit Sub
- 10322
- Resume 10321
- End Sub
-
- Sub Edit.Mail
- On Local Error Goto 10332
- Redim Temp.ArrayS(1 To 19) As String
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]dd message base"
- Call IO.O
- Strng="[C]hange message base"
- Call IO.O
- Strng="[D]elete message base"
- Call IO.O
- Strng="[E]dit messages"
- Call IO.O
- Strng="[L]ist message bases"
- Call IO.O
- Strng="[S]earch message bases"
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Message base edit option(q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- Call Add.Base
- Case "C"
- Call Change.Base
- Case "D"
- Call Delete.Base
- Case "E"
- Call Edit.Messages
- Case "L"
- Call List.Bases
- Case "S"
- Call Search.Bases
- Case "Q"
- Exit Do
- End Select
- Loop
- 10331
- Exit Sub
- 10332
- Resume 10331
- End Sub
-
- Sub Add.Base
- On Local Error Goto 10342
- Do
- Graphics.Off=True
- Strng="Message base topic name?"
- No.Input.Out=None$
- Call IO.I
- Out3=Ucase$(Out2)
- Strng="Message base filename(8 letters DOS)?"
- No.Input.Out=None$
- Call IO.I
- Out4=Ucase$(Out2)
- Temp2=False
- Do
- Call Display.BaseTypes
- Strng="Message base type option(q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- If Ucase$(Out2)="Q" Then
- Exit Do
- Endif
- Select Case Val(Out2)
- Case 1
- Temp2=Temp2 Or Public.Base
- Case 2
- Temp2=Temp2 Or Private.Base
- Case 3
- Temp2=Temp2 Or DM.Base
- Case 4
- Temp2=Temp2 Or Sysop.Base
- Case 5
- Temp2=Temp2 Or TownMayor.Base
- Case 6
- Temp2=Temp2 Or Governor.Base
- Case 7
- Temp2=Temp2 Or GuildMaster.Base
- Case 8
- Temp2=False
- End Select
- Loop
- Graphics.Off=False
- Strng="Add to message base file(y/n)?"
- Line.Length=TempD
- No.Input.Out="Y"
- Call IO.I
- If Yes Then
- For Temp=1 To Lof(12)/Len(MessageBaseRecord)
- Get 12,Temp,MessageBaseRecord
- If Left$(MessageBaseRecord.BaseMessName,9)=Deleted$ Then
- Exit For
- Endif
- Next
- MessageBaseRecord.BaseMessName=Out3
- MessageBaseRecord.BaseFileName=Out4
- MessageBaseRecord.BaseType=Temp2
- MessageBaseRecord.EmptyBuffer=False
- Put 12,Temp,MessageBaseRecord
- Endif
- Strng="Add another message base(y/n)?"
- Line.Length=TempD
- No.Input.Out="Y"
- Call IO.I
- If No Then
- Exit Do
- Endif
- Loop
- 10341
- Exit Sub
- 10342
- Resume 10341
- End Sub
-
- Sub Change.Base
- On Local Error Goto 10352
- Temp3=Lof(12)/Len(MessageBaseRecord)
- Strng="Message base number(1-"+Mid$(Str$(Temp3),2)+")?"
- No.Input.Out="1"
- Call IO.I
- Temp5=Int(Val(Out2))
- If Temp5<1 Or Temp5>Temp3 Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- Get 12,Temp5,MessageBaseRecord
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[C]lasstype"
- Call IO.O
- Strng="[F]ilename"
- Call IO.O
- Strng="[T]opic"
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Message base change option(q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "C"
- Temp2=MessageBaseRecord.BaseType
- Do
- Call Display.BaseTypes
- Strng="Message base type option(q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- If Ucase$(Out2)="Q" Then
- Exit Do
- Endif
- Select Case Val(Out2)
- Case 1
- Temp2=Temp2 Or Public.Base
- Case 2
- Temp2=Temp2 Or Private.Base
- Case 3
- Temp2=Temp2 Or DM.Base
- Case 4
- Temp2=Temp2 Or Sysop.Base
- Case 5
- Temp2=Temp2 Or TownMayor.Base
- Case 6
- Temp2=Temp2 Or Governor.Base
- Case 7
- Temp2=Temp2 Or GuildMaster.Base
- Case 8
- Temp2=False
- End Select
- Loop
- MessageBaseRecord.BaseType=Temp2
- Case "F"
- Strng="Message base filename(8 letters DOS)?"
- No.Input.Out=None$
- Call IO.I
- MessageBaseRecord.BaseFileName=Ucase$(Out2)
- Case "T"
- Strng="Message base topic name?"
- No.Input.Out=None$
- Call IO.I
- MessageBaseRecord.BaseMessName=Ucase$(Out2)
- Case "Q"
- Exit Do
- End Select
- Loop
- Put 12,Temp5,MessageBaseRecord
- Strng="Message base number"+Str$(Temp5)+" changed."
- Call IO.O
- 10351
- Exit Sub
- 10352
- Resume 10351
- End Sub
-
- Sub Delete.Base
- On Local Error Goto 10362
- Temp3=Lof(12)/Len(MessageBaseRecord)
- Strng="Delete base number(1-"+Mid$(Str$(Temp3),2)+")?"
- No.Input.Out="1"
- Call IO.I
- Temp5=Val(Out2)
- If Temp5<1 Or Temp5>Temp3 Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- Get 12,Temp5,MessageBaseRecord
- MessageBaseRecord.BaseMessName=Deleted$
- MessageBaseRecord.BaseFileName=None$
- MessageBaseRecord.BaseType=False
- MessageBaseRecord.EmptyBuffer=False
- Put 12,Temp5,MessageBaseRecord
- Strng="Message base number"+Str$(Temp5)+" deleted."
- Call IO.O
- 10361
- Exit Sub
- 10362
- Resume 10361
- End Sub
-
- Sub Edit.Messages
- On Local Error Goto 10372
- Temp3=Lof(12)/Len(MessageBaseRecord)
- Strng="Enter(P for public, R for private) or,"
- Call IO.O
- Strng="Edit base number(1-"+Mid$(Str$(Temp3),2)+")?"
- No.Input.Out="1"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "P"
- TempA$="public"
- TempX$=Config3(58)
- Case "R"
- TempA$="private"
- TempX$=Config3(60)
- Case Else
- Select Case Val(Out2)
- Case 1 To Temp3
- Get 12,Val(Out2),MessageBaseRecord
- If Left$(MessageBaseRecord.BaseMessName,9)=Deleted$ Then
- Strng="Deleted message base."
- Call IO.O
- Exit Sub
- Endif
- TempA$=Rtrim$(MessageBaseRecord.BaseMessName)
- TempX$=Rtrim$(MessageBaseRecord.BaseFileName)
- Case Else
- Strng=Range$
- Call IO.O
- Exit Sub
- End Select
- End Select
- Var$="Editing "+Lcase$(TempA$)+" message base."
- Call Open.Mail
- Do
- Strng=Var$
- Call IO.O
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]dd message"
- Call IO.O
- Strng="[C]hange message"
- Call IO.O
- Strng="[D]elete message"
- Call IO.O
- Strng="[L]ist messages"
- Call IO.O
- Strng="[S]earch messages"
- Call IO.O
- Strng="[U]ndelete message"
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Message edit option(q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- Call Add.Message
- Case "C"
- Call Change.Message
- Case "D"
- Call Delete.Message
- Case "L"
- Call List.Messages
- Case "S"
- Call Search.Messages
- Case "U"
- Call Undelete.Message
- Case "Q"
- Exit Do
- End Select
- Loop
- 10371
- Exit Sub
- 10372
- Resume 10371
- End Sub
-
- Sub Add.Message
- On Local Error Goto 10382
- For Temp2=1 To 19
- Temp.ArrayS(Temp2)=Nul
- Next
- Graphics.Off=True
- Strng="From(press "+Enter$+" for Sysop)?"
- No.Input.Out="Sysop"
- Call IO.I
- Strng3=Out2
- Strng="To(press "+Enter$+" for All)?"
- No.Input.Out="All"
- Call IO.I
- Message.To=Ucase$(Out2)
- Strng="Subject?"
- Call IO.I
- Subject=Lcase$(Out2)
- Strng="Stat(press "+Enter$+" for Sysop)?"
- No.Input.Out="Sysop"
- Call IO.I
- Message.Stat=Out2
- Strng="Enter message. Maximum 19 lines."
- Call IO.O
- Message.Length=False
- Do
- Strng="Press "+Enter$+" on a blank line to edit."
- Call IO.O
- Do
- Graphics.Off=True
- If Message.Length=19 Then
- Strng="Message buffer full."
- Call IO.O
- Exit Do
- Endif
- Word.Wrap=True
- Strng="?"
- Call IO.I
- If No.Input Then
- Exit Do
- Endif
- Message.Length=Message.Length+1
- Temp.ArrayS(Message.Length)=Out2
- Loop
- Word.Wrap=False
- Call More.Prompt
- Call Edit.Message(VarX)
- If VarX=-1 Then
- Strng="Continue editing."
- Call IO.O
- Endif
- If VarX=0 Then
- Exit Do
- Endif
- If VarX=1 Then
- Call Store.Message
- Exit Do
- Endif
- Loop
- 10381
- Exit Sub
- 10382
- Resume 10381
- End Sub
-
- Sub Change.Message
- On Local Error Goto 10392
- Do
- Graphics.Off=False
- Temp5=Lof(1)/Len(TableRecord)
- Strng="Message number to edit(1-"+Mid$(Str$(Temp5),2)+")?"
- No.Input.Out="1"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp<1 Or Temp>Temp5 Then
- Strng=Range$
- Call IO.O
- Else
- Get 1,Temp,TableRecord
- Strng="Edit message header(y/n)?"
- Line.Length=TempD
- No.Input.Out="Y"
- Call IO.I
- If Yes Then
- Graphics.Off=True
- Strng="From: "+TableRecord.MessageFrom
- Call IO.O
- Out2=TableRecord.MessageTo
- Out2=Rtrim$(Out2)
- If Out2=Nul Then
- Out2="ALL"
- Endif
- Out2=Lcase$(Out2)
- Mid$(Out2,1,1)=Ucase$(Mid$(Out2,1,1))
- Strng="To: "+Out2
- Call IO.O
- Strng="Subj: "+TableRecord.MessageSubject
- Call IO.O
- Graphics.Off=False
- Strng="Enter new message header:"
- Call IO.O
- Graphics.Off=True
- Strng="From(press "+Enter$+" for Sysop)?"
- No.Input.Out="Sysop"
- Call IO.I
- Strng3=Out2
- Strng="To(press "+Enter$+" for All)?"
- No.Input.Out="All"
- Call IO.I
- Message.To=Ucase$(Out2)
- Strng="Subject?"
- Call IO.I
- Subject=Lcase$(Out2)
- TableRecord.MessageFrom=Strng3
- TableRecord.MessageTo=Message.To
- If Subject<>Nul Then
- TableRecord.MessageSubject=Subject
- Endif
- Put 1,Temp,TableRecord
- Endif
- Graphics.Off=False
- Strng="Edit message text(y/n)?"
- Line.Length=TempD
- No.Input.Out="Y"
- Call IO.I
- If Yes Then
- Allow.Break=True
- Graphics.Off=True
- For Temp2=TableRecord.MessageStart To_
- TableRecord.MessageStart+TableRecord.MessageLength-1
- Get 2,Temp2,MessageRecord
- Strng=MessageRecord.Message
- VarX=Instr(Strng,Chr$(1))
- If VarX Then
- Strng=Left$(Strng,VarX-1)
- Endif
- Strng=Rtrim$(Strng)
- Call IO.O
- If Break Then
- Exit For
- Endif
- Next
- Allow.Break=False
- Do
- Graphics.Off=False
- Temp5=TableRecord.MessageLength
- Strng="Line number to edit(1-"+Mid$(Str$(Temp5),2)+",q to quit)?"
- No.Input.Out="Q"
- Call IO.I
- If Ucase$(Out2)="Q" Then
- Exit Do
- Endif
- Temp2=Int(Val(Out2))
- If Temp2<1 Or Temp2>Temp5 Then
- Strng=Range$
- Call IO.O
- Else
- Strng="New message text:"
- Call IO.O
- Graphics.Off=True
- Strng="?"
- Call IO.I
- MessageRecord.Message=Left$(Out2,79)+Chr$(1)
- Put 2,TableRecord.MessageStart+Temp2-1,MessageRecord
- Endif
- Loop
- Endif
- Endif
- Graphics.Off=False
- Strng="Edit another message(y/n)?"
- Line.Length=TempD
- No.Input.Out="Y"
- Call IO.I
- If No Then
- Exit Do
- Endif
- Loop
- 10391
- Exit Sub
- 10392
- Resume 10391
- End Sub
-
- Sub Delete.Message
- On Local Error Goto 10402
- Do
- Temp3=Lof(1)/Len(TableRecord)
- Strng="Message number to delete(1-"+Mid$(Str$(Temp3),2)+")?"
- No.Input.Out="1"
- Call IO.I
- Graphics.Off=True
- Temp=Val(Out2)
- If Temp<1 Or Temp>Temp3 Then
- Strng=Range$
- Call IO.O
- Else
- Get 1,Temp,TableRecord
- If TableRecord.MessageKilled="T" Then
- Strng="Message"+Str$(Temp)+" is already deleted."
- Call IO.O
- Else
- TableRecord.MessageKilled="T"
- Put 1,Temp,TableRecord
- Strng="Message"+Str$(Temp)+" deleted."
- Call IO.O
- Endif
- Endif
- Graphics.Off=False
- Strng="Delete more messages(y/n)?"
- Line.Length=TempD
- No.Input.Out="Y"
- Call IO.I
- If No Then
- Exit Do
- Endif
- Loop
- 10401
- Exit Sub
- 10402
- Resume 10401
- End Sub
-
- Sub List.Messages
- On Local Error Goto 10412
- Temp5=Lof(1)/Len(TableRecord)
- Temp$=Mid$(Str$(Temp5),2)
- Strng="From(1-"+Temp$+")?"
- No.Input.Out="1"
- Call IO.I
- Temp=Int(Val(Out2))
- Strng="To("+Mid$(Str$(Temp),2)+"-"+Temp$+")?"
- No.Input.Out=Temp$
- Call IO.I
- Temp1=Int(Val(Out2))
- If Temp<1 Or Temp>Temp1 Or Temp>Temp5 Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- If Temp1>Temp5 Then
- Temp1=Temp5
- Endif
- Graphics.Off=True
- For Temp2=Temp To Temp1
- Get 1,Temp2,TableRecord
- If TableRecord.MessageKilled="T" Then
- Strng="Message number"+Str$(Temp2)+" was deleted."
- Call IO.O
- Else
- Graphics.Off=True
- Strng="Msg#:"+Str$(Temp2)+" of"+Str$(Lof(1)/Len(TableRecord))
- Call IO.O
- Strng="From: "+TableRecord.MessageFrom
- Call IO.O
- Out2=TableRecord.MessageTo
- Out2=Rtrim$(Out2)
- If Out2=Nul Then
- Out2="ALL"
- Endif
- Out2=Lcase$(Out2)
- Mid$(Out2,1,1)=Ucase$(Mid$(Out2,1,1))
- Strng="To: "+Out2
- Call IO.O
- Strng="Subj: "+TableRecord.MessageSubject
- Call IO.O
- Strng="Time: "+TableRecord.MessageTime
- Call IO.O
- Allow.Break=True
- For Temp5=TableRecord.MessageStart To_
- TableRecord.MessageStart+TableRecord.MessageLength-1
- Get 2,Temp5,MessageRecord
- Strng=MessageRecord.Message
- VarX=Instr(Strng,Chr$(1))
- If VarX Then
- Strng=Left$(Strng,VarX-1)
- Endif
- Strng=Rtrim$(Strng)
- Call IO.O
- If Break Then
- Exit For
- Endif
- Next
- Endif
- Allow.Break=False
- Call More.Prompt
- If No Then
- Exit For
- Endif
- Next
- 10411
- Exit Sub
- 10412
- Resume 10411
- End Sub
-
- Sub Search.Messages
- On Local Error Goto 10422
- Do
- TempA$=Nul
- TempB$=Nul
- TempC$=Nul
- TempE$=Nul
- TempF$=Nul
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]from user"
- If TempA$<>Nul Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+TempA$+")"
- Endif
- Call IO.O
- Strng="[B]subject header"
- If TempB$<>Nul Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+TempB$+")"
- Endif
- Call IO.O
- Strng="[C]date of message"
- If TempC$<>Nul Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+TempC$+")"
- Endif
- Call IO.O
- Strng="[D]to user"
- If TempE$<>Nul Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+TempE$+")"
- Endif
- Call IO.O
- Strng="[E]message text"
- If TempF$<>Nul Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+TempF$+")"
- Endif
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Message search option(s to search, q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Graphics.Off=False
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- Strng="Username?"
- Call IO.I
- TempA$=Ucase$(Out2)
- Case "B"
- Strng="Subject substring?"
- Call IO.I
- TempB$=Ucase$(Out2)
- Case "C"
- Strng="Search date?"
- Call IO.I
- TempC$=Ucase$(Out2)
- Case "D"
- Strng="Username?"
- Call IO.I
- TempE$=Ucase$(Out2)
- Case "E"
- Strng="Message text substring?"
- Call IO.I
- TempF$=Ucase$(Out2)
- Case "S"
- Strng="Searching messages."
- Call IO.O
- For Temp=1 To Lof(1)/Len(TableRecord)
- Get 1,Temp,TableRecord
- Temp2=False
- If TempA$<>Nul Then
- If Instr(Ucase$(TableRecord.MessageFrom),TempA$) Then
- Temp2=True
- Endif
- Endif
- If TempB$<>Nul Then
- If Instr(Ucase$(TableRecord.MessageSubject),TempB$) Then
- Temp2=True
- Endif
- Endif
- If TempC$<>Nul Then
- If Int(DateValue#(TableRecord.MessageTime))=_
- Int(DateValue#(TempC$)) Then
- Temp2=True
- Endif
- Endif
- If TempE$<>Nul Then
- If Rtrim$(TableRecord.MessageTo)=Nul Then
- If TempE$="ALL" Then
- Temp2=True
- Endif
- Else
- If Instr(Ucase$(TableRecord.MessageTo),TempE$) Then
- Temp2=True
- Endif
- Endif
- Endif
- If TempF$<>Nul Then
- For Temp4=TableRecord.MessageStart+1 To_
- TableRecord.MessageStart+TableRecord.MessageLength-1
- Get 2,Temp4,MessageRecord
- If Instr(Ucase$(MessageRecord.Message),TempF$) Then
- Temp2=True
- Temp3=Temp4-TableRecord.MessageStart
- Exit For
- Endif
- Next
- Endif
- If Temp2 Then
- Graphics.Off=True
- Strng="From: "+TableRecord.MessageFrom
- Call IO.O
- Out2=TableRecord.MessageTo
- Out2=Rtrim$(Out2)
- If Out2=Nul Then
- Out2="ALL"
- Endif
- Out2=Lcase$(Out2)
- Mid$(Out2,1,1)=Ucase$(Mid$(Out2,1,1))
- Strng="To: "+Out2
- Call IO.O
- Strng="Subj: "+TableRecord.MessageSubject
- Call IO.O
- Strng="Time: "+TableRecord.MessageTime
- Call IO.O
- Strng="Msg#:"+Str$(Temp)+" of"+Str$(Lof(1)/Len(TableRecord))
- Call IO.O
- If TempF$<>Nul Then
- Strng="Text substring found in line"+Str$(Temp3)+":"
- Call IO.O
- Strng=MessageRecord.Message
- VarX=Instr(Strng,Chr$(1))
- If VarX Then
- Strng=Left$(Strng,VarX-1)
- Endif
- Strng=Rtrim$(Strng)
- Call IO.O
- Endif
- Call More.Prompt
- If No Then
- Exit Do
- Endif
- Endif
- Next
- Exit Do
- Case "Q"
- Exit Sub
- End Select
- Loop
- Loop
- 10421
- Exit Sub
- 10422
- Resume 10421
- End Sub
-
- Sub Undelete.Message
- On Local Error Goto 10452
- Do
- Temp3=Lof(1)/Len(TableRecord)
- Strng="Message number to undelete(1-"+Mid$(Str$(Temp3),2)+")?"
- No.Input.Out="1"
- Call IO.I
- Temp=Val(Out2)
- If Temp<1 Or Temp>Temp3 Then
- Strng=Range$
- Call IO.O
- Else
- Get 1,Temp,TableRecord
- If TableRecord.MessageKilled="F" Then
- Strng="Message"+Str$(Temp)+" is not deleted."
- Call IO.O
- Else
- TableRecord.MessageKilled="F"
- Put 1,Temp,TableRecord
- Strng="Message"+Str$(Temp)+" undeleted."
- Call IO.O
- Endif
- Endif
- Graphics.Off=False
- Strng="Unelete more messages(y/n)?"
- Line.Length=TempD
- No.Input.Out="Y"
- Call IO.I
- If No Then
- Exit Do
- Endif
- Loop
- 10451
- Exit Sub
- 10452
- Resume 10451
- End Sub
-
- Sub List.Bases
- On Local Error Goto 10462
- Graphics.Off=True
- Temp1=False
- For Temp=1 To Lof(12)/Len(MessageBaseRecord)
- Get 12,Temp,MessageBaseRecord
- If Left$(MessageBaseRecord.BaseMessName,9)=Deleted$ Then
- Strng="#"+Mid$(Str$(Temp),2)+": deleted."
- Call IO.O
- Else
- Out2=MessageBaseRecord.BaseMessName
- Out2=Rtrim$(Out2)
- Out2=Lcase$(Out2)
- Strng="#"+Mid$(Str$(Temp),2)+": "+Out2+", Type: "
- If MessageBaseRecord.BaseType And Public.Base Then
- Strng=Strng+"(public) "
- Endif
- If MessageBaseRecord.BaseType And Private.Base Then
- Strng=Strng+"(private) "
- Endif
- If MessageBaseRecord.BaseType And DM.Base Then
- Strng=Strng+"(DMs only) "
- Endif
- If MessageBaseRecord.BaseType And Sysop.Base Then
- Strng=Strng+"(Sysops only) "
- Endif
- If MessageBaseRecord.BaseType And TownMayor.Base Then
- Strng=Strng+"(Town Mayor) "
- Endif
- If MessageBaseRecord.BaseType And Governor.Base Then
- Strng=Strng+"(Governor) "
- Endif
- If MessageBaseRecord.BaseType And GuildMaster.Base Then
- Strng=Strng+"(Guild Master) "
- Endif
- Strng=Rtrim$(Strng)
- Call IO.O
- Temp1=Temp1+1
- If Temp1>22 Then
- Temp1=False
- Call More.Prompt
- If No Then
- Exit For
- Endif
- Endif
- Endif
- Next
- If Temp1 Then
- Call More.Prompt
- Endif
- 10461
- Exit Sub
- 10462
- Resume 10461
- End Sub
-
- Sub Search.Bases
- On Local Error Goto 10472
- TempA=False
- TempA$=Nul
- TempB$=Nul
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]message base name"
- If TempA$<>Nul Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+TempA$+")"
- Endif
- Call IO.O
- Strng="[B]message base filename"
- If TempB$<>Nul Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"("+TempB$+")"
- Endif
- Call IO.O
- Strng="[C]message base type"
- If TempA Then
- Strng=Strng+Space$(30-Len(Strng))
- Strng=Strng+"(type:"+Str$(TempA)+")"
- Endif
- Call IO.O
- Graphics.Off=False
- Endif
- Strng="Message base search option(s to search, q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Graphics.Off=False
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- Strng="Message base name substring?"
- Call IO.I
- TempA$=Ucase$(Out2)
- Case "B"
- Strng="Message base filename(8 letter DOS)?"
- Call IO.I
- TempB$=Ucase$(Out2)
- Case "C"
- Do
- Call Display.BaseTypes
- Strng="Message base type option(q to quit)?"
- Line.Length=TempD
- No.Input.Out="Q"
- Call IO.I
- If Ucase$(Out2)="Q" Then
- Exit Do
- Endif
- Temp=Val(Out2)
- Select Case Temp
- Case 1
- TempA=TempA Or Public.Base
- Case 2
- TempA=TempA Or Private.Base
- Case 3
- TempA=TempA Or DM.Base
- Case 4
- TempA=TempA Or Sysop.Base
- Case 5
- TempA=TempA Or TownMayor.Base
- Case 6
- TempA=TempA Or Governor.Base
- Case 7
- TempA=TempA Or GuildMaster.Base
- Case 8
- TempA=False
- End Select
- Loop
- Case "S"
- Strng="Searching message bases."
- Call IO.O
- Temp6=False
- Graphics.Off=True
- For Temp=1 To Lof(12)/Len(MessageBaseRecord)
- Get 12,Temp,MessageBaseRecord
- Temp2=False
- If TempA$<>Nul Then
- If Instr(MessageBaseRecord.BaseMessName,TempA$) Then
- Temp2=True
- Endif
- Endif
- If TempB$<>Nul Then
- If Rtrim$(MessageBaseRecord.BaseFileName)=TempB$ Then
- Temp2=True
- Endif
- Endif
- If TempA Then
- If MessageBaseRecord.BaseType=TempA Then
- Temp2=True
- Endif
- Endif
- If Temp2 Then
- Graphics.Off=True
- Out2=MessageBaseRecord.BaseMessName
- Out2=Rtrim$(Out2)
- Out2=Lcase$(Out2)
- Strng="Message base number"+Str$(Temp)+": "+Out2
- Call IO.O
- Temp6=Temp6+1
- If Temp6>22 Then
- Temp6=False
- Call More.Prompt
- If No Then
- Exit Sub
- Endif
- Endif
- Endif
- Next
- If Temp6 Then
- Call More.Prompt
- Endif
- TempA=False
- TempA$=Nul
- TempB$=Nul
- Case "Q"
- Exit Do
- End Select
- Loop
- 10471
- Exit Sub
- 10472
- Resume 10471
- End Sub
-
- Sub Edit.Message(Var)
- On Local Error Goto 10482
- Do
- Graphics.Off=True
- If TempC=False Then
- Strng="[A]bort"
- Call IO.O
- Strng="[C]ontinue"
- Call IO.O
- Strng="[D]elete"
- Call IO.O
- Strng="[E]dit"
- Call IO.O
- Strng="[I]nsert"
- Call IO.O
- Strng="[L]ist"
- Call IO.O
- Strng="[R]eplace"
- Call IO.O
- Graphics.Off=False
- Endif
- Line.Length=TempD
- No.Input.Out="S"
- Strng="Message edit option(s to store)?"
- Call IO.I
- Select Case Ucase$(Out2)
- Case "A"
- Strng="Are you sure(y/n)?"
- No.Input.Out="N"
- Call IO.I
- If Yes Then
- Var=0
- Exit Do
- Endif
- Case "C"
- Var=-1
- Exit Do
- Case "D"
- Call Delete.Line
- Case "E"
- Call Edit.Line
- Case "I"
- Call Insert.Lines
- Case "L"
- Call List.Lines
- Case "R"
- Call Replace.Line
- Case "S"
- Var=1
- Exit Do
- End Select
- Loop
- 10481
- Exit Sub
- 10482
- Resume 10481
- End Sub
-
- Sub List.Lines
- On Local Error Goto 10484
- Line.Length=1
- No.Input.Out="Y"
- Strng="Display line numbers(y/n)?"
- Call IO.I
- If Yes Then
- TempX=True
- Else
- TempX=False
- Endif
- Graphics.Off=True
- For Temp=1 To Message.Length
- Strng=Nul
- If TempX Then
- Strng=Right$(Str$(Temp+10),1)+":"
- Endif
- Strng=Strng+Temp.ArrayS(Temp)
- Strng=Left$(Strng,79)
- Call IO.O
- Next
- Call More.Prompt
- 10483
- Exit Sub
- 10484
- Resume 10483
- End Sub
-
- Sub Replace.Line
- On Local Error Goto 10492
- Strng="Line number?"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp<1 Or Temp>Message.Length Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- Strng="Replacement line:"
- Call IO.O
- Strng="?"
- Call IO.I
- Temp.ArrayS(Temp)=Out2
- Strng="Line number"+Str$(Temp)+" replaced."
- Call IO.O
- 10491
- Exit Sub
- 10492
- Resume 10491
- End Sub
-
- Sub Edit.Line
- On Local Error Goto 10502
- Strng="Line number?"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp<1 Or Temp>Message.Length Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- Strng="Replace what word?"
- Call IO.I
- Temp$=Out2
- Strng="Replace with what word?"
- Call IO.I
- Temp2$=Out2
- If Temp$=Nul Or Temp$=Temp2$ Then
- Strng="No changes made."
- Call IO.O
- Exit Sub
- Endif
- Temp2=False
- Temp1=Instr(Temp.ArrayS(Temp),Temp$)
- Do While Temp1
- If Temp2=1 Then
- Strng="Replace all words?"
- Call IO.I
- If No Then
- Exit Do
- Endif
- Endif
- Temp.ArrayS(Temp)=Left$(Temp.ArrayS(Temp),Temp1-1)+_
- Temp2$+Mid$(Temp.ArrayS(Temp),Temp1+Len(Temp$))
- Temp.ArrayS(Temp)=Left$(Temp.ArrayS(Temp),80)
- Temp2=Temp2+1
- Temp1=Instr(Temp.ArrayS(Temp),Temp$)
- Loop
- Strng="No changes made."
- If Temp2 Then
- Strng="Changed"+Str$(Temp2)+" words."
- Endif
- Call IO.O
- 10501
- Exit Sub
- 10502
- Resume 10501
- End Sub
-
- Sub Delete.Line
- On Local Error Goto 10512
- Strng="From line number(1-"+Mid$(Str$(Message.Length),2)+")?"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp<1 Or Temp>Message.Length Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- Strng="To line number("+Mid$(Str$(Temp),2)+"-"+_
- Mid$(Str$(Message.Length),2)+")?"
- Call IO.I
- Temp2=Int(Val(Out2))
- If Temp2<Temp Or Temp2>Message.Length Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- For Temp3=1 To Temp2-Temp+1
- Message.Length=Message.Length-1
- For Temp1=Temp To Message.Length
- Temp.ArrayS(Temp1)=Temp.ArrayS(Temp1+1)
- Next
- Next
- If Message.Length=False Then
- Strng="No message left."
- Call IO.O
- Exit Sub
- Endif
- Strng="Line numbers"+Str$(Temp)+" to"+Str$(Temp2)+" deleted."
- Call IO.O
- 10511
- Exit Sub
- 10512
- Resume 10511
- End Sub
-
- Sub Insert.Lines
- On Local Error Goto 10522
- If Message.Length>18 Then
- Strng="Message buffer full."
- Call IO.O
- Exit Sub
- Endif
- Strng="Before line number?"
- Call IO.I
- Temp=Int(Val(Out2))
- If Temp<1 Or Temp>Message.Length Then
- Strng=Range$
- Call IO.O
- Exit Sub
- Endif
- Graphics.Off=True
- Do While Message.Length<19
- Word.Wrap=True
- Strng="?"
- Call IO.I
- Word.Wrap=False
- If No.Input Then
- Exit Do
- Endif
- For Temp1=Message.Length To Temp Step -1
- Temp.ArrayS(Temp1+1)=Temp.ArrayS(Temp1)
- Next
- Temp.ArrayS(Temp)=Out2
- Temp=Temp+1
- Message.Length=Message.Length+1
- Loop
- Graphics.Off=False
- If Message.Length=19 Then
- Strng="Message buffer full."
- Call IO.O
- Endif
- Call More.Prompt
- 10521
- Exit Sub
- 10522
- Resume 10521
- End Sub
-
- Sub Store.Message
- On Local Error Goto 10532
- Strng="Storing message.."
- Call IO.O
- TableRecord.MessageTime=FNclock$
- TableRecord.MessageFrom=Strng3
- TableRecord.MessageKilled="F"
- TableRecord.MessageTo=Message.To
- TableRecord.MessageSubject=Subject
- TableRecord.MessageLength=Message.Length+1
- TableRecord.MessageStart=Lof(2)/Len(MessageRecord)+1
- Put 1,Lof(1)/Len(TableRecord)+1,TableRecord
- Strng="Stat: "+Message.Stat
- MessageRecord.Message=Left$(Strng,79)+Chr$(1)
- Put 2,Lof(2)/Len(MessageRecord)+1,MessageRecord
- For Temp=1 To Message.Length
- MessageRecord.Message=Left$(Temp.ArrayS(Temp),79)+Chr$(1)
- Put 2,Lof(2)/Len(MessageRecord)+1,MessageRecord
- Next
- 10531
- Exit Sub
- 10532
- Resume 10531
- End Sub
-
- Sub Open.Mail
- On Local Error Goto 10542
- Close 1, 2
- FileName=Config3(54)+TempX$+".TBL"
- Open FileName For Random Shared As #1 Len=Len(TableRecord)
- FileName=Config3(54)+TempX$+".DAT"
- Open FileName For Random Shared As #2 Len=Len(MessageRecord)
- 10541
- Exit Sub
- 10542
- Resume 10541
- End Sub
-
- Sub New.Stats
- On Local Error Goto 10560
- 10551
- Temp#=Cdbl(Training.Room(UserRecord.ClassType,1))*Cdbl(UserRecord.Level)
- 10552
- If Temp#>MaxInt Then
- Temp#=MaxInt
- Endif
- 10553
- UserRecord.FatigueMax=Cint(Temp#)
- 10554
- Temp#=Cdbl(Training.Room(UserRecord.ClassType,2))*Cdbl(UserRecord.Level)
- If Temp#>MaxInt Then
- Temp#=MaxInt
- Endif
- 10555
- UserRecord.VitalityMax=Cint(Temp#)
- 10556
- Temp#=Cdbl(Training.Room(UserRecord.ClassType,3))*Cdbl(UserRecord.Level)
- If Temp#>MaxInt Then
- Temp#=MaxInt
- Endif
- 10557
- UserRecord.MagicMax=Cint(Temp#)
- 10558
- Temp#=Cdbl(Training.Room(UserRecord.ClassType,4))*Cdbl(UserRecord.Level)
- If Temp#>MaxInt Then
- Temp#=MaxInt
- Endif
- UserRecord.PsionicMax=Cint(Temp#)
- If UserRecord.Fatigue<False Or_
- UserRecord.Fatigue>UserRecord.FatigueMax Then
- UserRecord.Fatigue=UserRecord.FatigueMax
- Endif
- If UserRecord.Vitality<False Or_
- UserRecord.Vitality>UserRecord.VitalityMax Then
- UserRecord.Vitality=UserRecord.VitalityMax
- Endif
- If UserRecord.Magic<False Or_
- UserRecord.Magic>UserRecord.MagicMax Then
- UserRecord.Magic=UserRecord.MagicMax
- Endif
- If UserRecord.Psionic<False Or_
- UserRecord.Psionic>UserRecord.PsionicMax Then
- UserRecord.Psionic=UserRecord.PsionicMax
- Endif
- If Config2(48) Then
- If UserRecord.Level>=10 Then
- If UserRecord.ClassType>=1 And UserRecord.ClassType<=10 Then
- Out2=High.Class.Name(UserRecord.ClassType)
- Call Valid(Out2,20)
- If Out2=Nul Then
- Strng="Illegal characters in high classname."
- Call IO.O
- Else
- Call Encrypt(Out2,True)
- UserRecord.ClassName=Out2
- Endif
- Endif
- Endif
- Endif
- 10559
- Exit Sub
- 10560
- If Erl=10551 Then
- Resume 10552
- Endif
- If Erl=10553 Then
- Resume 10554
- Endif
- If Erl=10555 Then
- Resume 10556
- Endif
- If Erl=10557 Then
- Resume 10558
- Endif
- Resume 10559
- End Sub
-
- Sub Top.Ten
- On Local Error Goto 10564
- Graphics.Off=True
- TempX=Lof(3)/Len(UserRecord)
- Redim Temp.Array1(1 To TempX) As Integer,_
- Temp.ArrayZ(1 To TempX) As Double
- Strng="DNDBBS V"+Version$+" Top Ten Player Rankings For "+FNclock$+"."
- Call IO.O
- Strng=Nul
- Call IO.O
- TempZ=False
- For Temp.User.Index=1 To TempX
- Get 3,Temp.User.Index,UserRecord
- Strng=UserRecord.CodeName
- Call Decrypt(Strng)
- If (UserRecord.Flags And Locked.User)=False Then
- If Left$(Strng,9)<>Deleted$ Then
- If UserRecord.Level>1 Then
- TempZ=TempZ+1
- Temp.Array1(TempZ)=Temp.User.Index
- 10561 TempA#=UserRecord.PlayersKilled*UserRecord.Level*2+_
- UserRecord.MonstersKilled*UserRecord.Level
- 10562 Temp.ArrayZ(TempZ)=TempA#
- Endif
- Endif
- Endif
- Next
-
- ' metzner sort
- TempQ=4
- While TempQ<=TempZ
- TempQ=TempQ*2
- Wend
- TempQ=Int((TempQ-1)/2)
- While TempQ>False
- For Var=1 To TempZ-TempQ
- VarX=Var
- While VarX>False
- If Temp.ArrayZ(VarX)<Temp.ArrayZ(VarX+TempQ) Then
- Swap Temp.Array1(VarX),Temp.Array1(VarX+TempQ)
- Swap Temp.ArrayZ(VarX),Temp.ArrayZ(VarX+TempQ)
- VarX=VarX-TempQ
- Else
- VarX=False
- Endif
- Wend
- Next
- TempQ=Int(TempQ/2)
- Wend
- ' end sort
-
- If TempZ>10 Then
- TempZ=10
- Endif
- Strng="Username Level Classname Ranking"
- Call IO.O
- Strng=String$(64,"-")
- Call IO.O
- TempX=False
- For Temp1=1 To TempZ
- Get 3,Temp.Array1(Temp1),UserRecord
- Strng=UserRecord.CodeName
- Call Decrypt(Strng)
- Strng=Lcase$(Strng)
- Mid$(Strng,1,1)=Ucase$(Mid$(Strng,1,1))
- If UserRecord.Level>32000 Then
- Strng=Strng+"Ghod "
- Else
- Strng=Strng+Str$(UserRecord.Level)
- Strng=Strng+Space$(6-Len(Str$(UserRecord.Level)))
- Endif
- Out2=UserRecord.ClassName
- Call Decrypt(Out2)
- Strng=Strng+Out2
- TempX=True
- Strng=Strng+Str$(Temp.ArrayZ(Temp1))
- Call IO.O
- Next
- If TempX=False Then
- Strng="No users have top scores."
- Call IO.O
- Endif
- Redim Temp.Array1(1) As Integer,_
- Temp.ArrayZ(1) As Double
- Call More.Prompt
- 10563
- Exit Sub
- 10564
- If Erl=10561 Then
- Resume 10562
- Endif
- Resume 10563
- End Sub
-
- Sub More.Prompt
- On Local Error Goto 10572
- Graphics.Off=False
- Strng=More$
- No.Echo=True
- Line.Length=1
- Call IO.I
- No.Echo=False
- 10571
- Exit Sub
- 10572
- Resume 10571
- End Sub
-
- Sub Valid(Var$,Var)
- On Local Error Goto 10582
- If Len(Var$)/2<>Len(Var$)\2 Then
- Var$=Var$+" "
- Endif
- If Var/2<>Var\2 Then
- Var=Var+1
- Endif
- Var$=Left$(Var$,Var)
- Var$=Var$+Space$(Var-Len(Var$))
- For Var1=1 To Var
- Var2=Asc(Mid$(Var$,Var1,1))
- If Var2<32 Or Var2>127 Then
- Var$=Nul
- Exit Sub
- Endif
- Next
- 10581
- Exit Sub
- 10582
- Resume 10581
- End Sub
-
- Sub Encrypt(Var$,Var)
- On Local Error Goto 10592
- Var1$=Nul
- For Var2=1 To Len(Var$) Step 2
- Var1=0
- VarA=Asc(Mid$(Var$,Var2,1))
- VarB=Asc(Mid$(Var$,Var2+1,1))
- If Var Then
- Var1=20000
- Else
- If (VarA+VarB)/2=(VarA+VarB)\2 Then
- Var1=10000
- Endif
- Endif
- Var1=Var1+(VarA-32)*100+(VarB-32)
- Var1$=Var1$+Mki$(Var1)
- Next
- Var$=Var1$
- 10591
- Exit Sub
- 10592
- Resume 10591
- End Sub
-
- Sub Decrypt(Var$)
- On Local Error Goto 10602
- Var1$=Nul
- For Var=1 To Len(Var$) Step 2
- Var1=Cvi(Mid$(Var$,Var,2))
- Var2=Var1\100
- VarA=Var1-Var2*100
- Var1=Var2
- VarA=VarA+32
- Var2=Var1\100
- VarB=Var1-Var2*100
- VarB=VarB+32
- If Var2=0 Then
- If ((VarA+VarB)/2)=((VarA+VarB)\2) Then
- Var$=Nul
- Exit Sub
- Endif
- Endif
- If Var2=1 Then
- If ((VarA+VarB)/2)<>((VarA+VarB)\2) Then
- Var$=Nul
- Exit Sub
- Endif
- Endif
- Var1$=Var1$+Chr$(VarB)+Chr$(VarA)
- Next
- Var$=Var1$
- 10601
- Exit Sub
- 10602
- Resume 10601
- End Sub
-