# HG changeset patch # User koda # Date 1363480464 -3600 # Node ID 3eb1891f81ef05a922d99ced62a1b24eae1a0be0 # Parent bbab7e35eaf28636dfc9a7e5f2555bd0cc7c051c use a local storage for chat history which prevents mix ups in netgame and simplifies code diff -r bbab7e35eaf2 -r 3eb1891f81ef hedgewars/uChat.pas --- a/hedgewars/uChat.pas Sun Mar 17 01:26:40 2013 +0100 +++ b/hedgewars/uChat.pas Sun Mar 17 01:34:24 2013 +0100 @@ -45,8 +45,10 @@ var Strs: array[0 .. MaxStrIndex] of TChatLine; MStrs: array[0 .. MaxStrIndex] of shortstring; + LocalStrs: array[0 .. MaxStrIndex] of shortstring; missedCount: LongWord; lastStr: LongWord; + localLastStr: LongWord; history: LongWord; visibleCount: LongWord; InputStr: TChatLine; @@ -304,7 +306,7 @@ procedure KeyPressChat(Key: Longword); const firstByteMark: array[0..3] of byte = (0, $C0, $E0, $F0); var i, btw, index: integer; - utf8, chatLine: shortstring; + utf8: shortstring; begin if Key <> 0 then case Key of @@ -329,18 +331,14 @@ {arrow keys (up, down)} 63232, 63233: begin - if (Key = 63232) and (history < lastStr) then inc(history); + if (Key = 63232) and (history < localLastStr) then inc(history); if (Key = 63233) and (history > 0) then dec(history); - index:= lastStr - history + 1; - if (index > lastStr) then + index:= localLastStr - history + 1; + if (index > localLastStr) then SetLine(InputStr, '', true) else - begin - btw:= Pos(': ', Strs[index].s) + 2; // remove the nick - chatLine:= copy(Strs[index].s, btw, Length(Strs[index].s)); - SetLine(InputStr, chatLine, true); - end; + SetLine(InputStr, LocalStrs[index], true); end; {arrow keys (left, right)} 63234, 63235: begin end; @@ -384,7 +382,11 @@ if copy(s, 1, 4) = '/me ' then s:= #2 + '* ' + UserNick + ' ' + copy(s, 5, Length(s) - 4) else + begin + localLastStr:= (localLastStr + 1) mod MaxStrIndex; + LocalStrs[localLastStr]:= s; s:= #1 + UserNick + ': ' + s; + end; AddChatString(s) end; @@ -425,6 +427,7 @@ RegisterVariable('chat', @chChat, true ); lastStr:= 0; + localLastStr:= 0; history:= 0; visibleCount:= 0; showAll:= false;