SCAR Code:
type
MyChat = record
Chatter: TStringArray;
Said: TStringArray;
LastResponded: integer;
end;
var
Trigger: Array of Array[0..1] of TStringArray; //questions, could make more triggers... if i
Answers: Array of TStringArray; //find i need them
RMTalks: MyChat;
procedure SetupRespond;
var FishType:string;
begin
SetLength(RMTalks.Chatter, 8);
SetLength(RMTalks.Said, 8);
SetLength(Trigger, 5); //how many questions
SetLength(Answers, Length(Trigger));
//you can have as many trigger words and rows as you want
//you can have as many answers as you want
Trigger[0][0]:= ['fish', 'fishing', '><>', '<><']; // trigger words 1
Trigger[0][1]:= ['lvl', 'level', 'levl', 'lvel']; // trigger words 2
//Trigger[0][2]:= ['','','','','','']; // trigger words 3
Answers[0]:= [
'My Fishing Level is: '+IntToStr(Players[CurrentPlayer].Level[17]), //answer 1
'Fishing: '+IntToStr(Players[CurrentPlayer].Level[17]), //answer 2
IntToStr(Players[CurrentPlayer].Level[17])+' '+chr(62)+chr(60)+chr(62)+' lvl', //answer 3
'my '+chr(62)+chr(60)+chr(62)+' lvl is '+IntToStr(Players[CurrentPlayer].Level[17]) //answer 4
]
Trigger[1][0] := ['fish', '><>'];
Trigger[1][1] := ['which', 'what'];
case lowercase(Players[CurrentPlayer].Strings[0]) of
'harpoon': FishType := 'tuna';
'cage': FishType := 'lobby';
'fly': FishType := 'trout';
'rod': FishType := 'pike';
'net': FishType := 'shrimp';
end;
Answers[1] := [
'I''m fishing '+FishType,
FishType,
+chr(62)+chr(60)+chr(62)+': '+FishType
]
Trigger[2][0]:= ['place', 'train'];
Trigger[2][1]:= ['fishing', '><>', 'fish'];
Answers[2] := [
'Try Training fishing at Draynor',
'Draynor', 'Edgy', 'Al-Kharid', 'Karamja',
'Try Training fishing at Edgeville',
'Try Training fishing at Al-Kharid, close to bank',
'Try Training fishing at lumbridge'
]
Trigger[3][0]:= ['hi','hey', 'hello', 'sup?']; // trigger words 1
Trigger[3][1]:= ['']; // trigger words 2
Answers[3]:= ['hi','hey', 'hello', 'sup?', 'how do you do?']
end;
//from srl, modded ofr any line
function GetChatTextLine(var chat: string; line:integer): Boolean;
var
x, y: Integer;
textP: TPoint;
begin
if not LoggedIn then exit;
textP := TextCoords(line);
if findcolor(x, y, 16711680, textp.x, textp.y, textp.x + 200, textp.y + 14) then
begin
chat := LowerCase(Trim(GetTextAtEx(x - 3, textp.y - 2, 0, SmallChars, False,
False, -1, 1, 16711680, 60, False, tr_allChars)));
Result := True;
end;
end;
//from srl, modded for any line
function GetChatterLine(var name: string; line:integer): Boolean;
var
i: Integer;
textP: TPoint;
begin
if not LoggedIn then exit;
textP := TextCoords(line);
name := LowerCase(Trim(GetTextAtEx(textP.x - 2, textP.y - 2, 0, SmallChars, False, False, 0, 1,
0, 60, False, tr_allChars)))
i := Pos(':', name)
if (i <> 0) then
begin
Delete(name, i, i);
Result := True;
end;
end;
procedure RMRespond;
var
str: string;
i, h, t, k, triggered:integer;
TSA:TStringArray;
begin
if not LoggedIn then exit;
if (TimeFromMark(RMTalks.LastResponded) < 60000+Random(30000)) then exit;
SetLength(TSA, 8)
str:='';
TSA:=['', '', '', '', '', '', '', ''];
RMTalks.said := ['', '', '', '', '', '', '', ''];
triggered := 0;
// Getting text on all the lines
for i:= 7 DownTo 0 do
begin
GetChatterLine(RMTalks.Chatter[i], i+1);
if Pos(Lowercase(Players[CurrentPlayer].Nick), Lowercase(RMTalks.Chatter[i])) > 0 then
break; //if we already answered, it means we already checked further up.
GetChatTextLine(RMTalks.said[i], i+1);
TSA[i] := RMTalks.said[i];
end;
for i:=High(TSA) DownTo 0 do //all text lines
for h:= 0 to High(Trigger) do //questions
begin
triggered:= 0;
for t:=0 to High(Trigger[h]) do //How many triggers
for k:=0 to High(Trigger[h][t]) do //specific trigger
if Pos(Trigger[h][t][k], TSA[i]) > 0 then
begin
Inc(triggered);
if triggered >= 2 then
begin
Inc(Responses);
str:=(Answers[h][Random(Length(Answers[h]))]);
TypeSend(AddMistakes(str, RandomRange(10, 30)));
RMDebug('Question: '+Trigger[h][0][0]+ ' ' + Trigger[h][t][k]);
RMDebug('Responding: ' + str);
str := '';
MarkTime(RMTalks.LastResponded);
triggered := 0;
SetupRespond;
exit;
end; //end if
break;
end; //end if
//end k loop
end; //end h loop
//end of i loop
end;