input routinen sammlung <- Niclas Input UPDATE: v. 1.52 von ???
[b:c20b0a1529][u:c20b0a1529]HIER KANN JEDER JA MAL SEINE INPUTS POSTEN[/u:c20b0a1529][/b:c20b0a1529]
...wenn er denn möchte.
Jeder kann sich sein bestes dann ja rauspicken...

falls ihr bugs findet posten
falls noch fragen sind (was wohl klar ist weil ich mich beim erkären der parameter nicht so viel mühe gegeben hab)

[code:1:c20b0a1529]
;input v. 1.52
;(c)2003 by Niclas Hoyer

;GLOBALS--------------------------------------
Global txt2$
Global blinker=MilliSecs()
Global blink=1
Global b2
Global pos
Global blinkalpha
Global doud
Global doud2
Global a2
Global wiederholzeit = MilliSecs()
Global wiederholzeit2 = MilliSecs()
;---------------------------------------------

;-----BEISPIEL---------------------
Graphics 640,480,32,1
SetBuffer BackBuffer()

img=LoadImage("test.bmp")

While Not MouseDown(1)
Cls

TileImage img,MouseX(),MouseY()

Color 0,255,0
;Input aufruf
input2(100,100,"Test:")
;------------
Text 100,120,txt2$
;fps counter
counter=counter+1
If time=0 Then time=MilliSecs()
If time+1001 <MilliSecs() Then
framerate=counter
counter=0
time=MilliSecs()
EndIf
;-----------
Color 0,255,0
Text 200,200,framerate
Flip
Wend
;----------------------------------

;--------------------------------------------------------------
;x = x position
;y = y position
;txt$ = Frage vor input
;max = Maximale buchstaben (0=unendlich)
;blinkertime = Millisekunden zeit des blinkers
;bcolor = die farbe die der buchstabe hat wenn der cursor über ihm ist
;blinkeralpha = Alphawert des blinkers 0=nicht sichtbar - 255=voll sichtbar -1 Blinked von vollsichtbar zu nichtsichtbar
;BAS = BlinkerAlphaSpeed Die Blinkgeschwindigkeit des alpha cursors (Nur wenn blinkeralpha auf -1 gesetzt ist!)
;wiederholung = die zeit in welchen abständen das zeichen wiederholt wird wenn man eine taste gedrückt hält.
;doppelhit = die zeit die man braucht damit wenn man eine taste so lange drückt das das zeichen immer weiter geht
;draw = ob etwas angezeigt werden soll (text + cursor) wenn draw = 0 ist wird nichts gezeichnet, falls man den text anders darstellen möchte. (txt2 ist die variable vom text)
;--------------------------------------------------------------
Function input2$(x,y,txt$,max=0,blinkerx=7,blinkertime=600,bcolor=$000000,blinkeralpha=255,BAS=3,doppelhit=400,wiederholung=35,draw=1)
a=GetKey()
FlushKeys
For b=1 To 237
If KeyDown(b) Then Exit
Next
If b>237 Then b=0

If a2=add_getkey(a,b) Then
a=0
If doud2=0 Then doud2=MilliSecs()
If MilliSecs()-doud2 => doppelhit And MilliSecs()-wiederholzeit => wiederholung Then
a=a2
wiederholzeit=MilliSecs()
End If
Else
If a<>0 Then a2=a
doud2=0
End If

If b2=b Then
b=0
If doud=0 Then doud=MilliSecs()
If MilliSecs()-doud => doppelhit And MilliSecs()-wiederholzeit2 => wiederholung Then
b=b2
wiederholzeit2=MilliSecs()
End If
Else
If b<> 0 Then b2=b Else b2=0
doud=0
End If

If Len(txt2$)<max Or max=0 Then
If a>31 And a < 256 And b<>181 Then txt2$=fillstring$(txt2$,Chr$(a),pos):pos=pos+1
Select b
Case 83
txt2$=fillstring$(txt2$,",",pos):pos=pos+1
Case 82
txt2$=fillstring$(txt2$,"0",pos):pos=pos+1
Case 79
txt2$=fillstring$(txt2$,"1",pos):pos=pos+1
Case 80
txt2$=fillstring$(txt2$,"2",pos):pos=pos+1
Case 81
txt2$=fillstring$(txt2$,"3",pos):pos=pos+1
Case 75
txt2$=fillstring$(txt2$,"4",pos):pos=pos+1
Case 76
txt2$=fillstring$(txt2$,"5",pos):pos=pos+1
Case 77
txt2$=fillstring$(txt2$,"6",pos):pos=pos+1
Case 71
txt2$=fillstring$(txt2$,"7",pos):pos=pos+1
Case 72
txt2$=fillstring$(txt2$,"8",pos):pos=pos+1
Case 73
txt2$=fillstring$(txt2$,"9",pos):pos=pos+1
Case 181
txt2$=fillstring$(txt2$,"/",pos):pos=pos+1
End Select
End If
Select b
Case 211
If pos<Len(txt2$) Then txt2$=delstring$(txt2$,pos+1)
Case 203
If pos>0 Then pos=pos-1
Case 205
If pos<Len(txt2$) Then pos=pos+1
Case 199
pos=0
Case 207
pos=Len(txt2$)
End Select
c=StringWidth(txt$)
d=StringWidth(txt2$)
x2=x+c
If MilliSecs()-blinker => blinkertime And blinkerx>0 Then
blinker=MilliSecs()
blink=1-blink
End If

If b<>0 Or a<>0 Then blink=1:blinker=MilliSecs()

x3=x2+StringWidth(Left$(txt2$,pos))
txt2b$=replace2$(txt2$," ",pos+1)
txt2cx=x+StringWidth(Left$(txt2$,pos))+StringWidth(txt$)
If draw=1 Then
fr=ColorRed()
fg=ColorGreen()
fb=ColorBlue()

fkr=(bcolor And $FF0000)/$10000
fkg=(bcolor And $FF00)/$100
fkb=bcolor And $FF

If blink=1 Or blinkeralpha<0 Then
If blinkeralpha=255 Then Rect x3+1,y,blinkerx,FontHeight():Color fkr,fkg,fkb: Text txt2cx,y,Mid$(txt2$,pos+1,1)
If blinkeralpha>0 And blinkeralpha<255 Then alpharect(x3+1,y,blinkerx,FontHeight(),fr,fg,fb,blinkeralpha)
If blinkeralpha<0 Then
blinkalpha=blinkalpha-BAS
If blinkalpha= -1 Then blinkalpha=255
alpharect(x3+1,y,blinkerx,FontHeight(),fr,fg,fb,blinkalpha)
End If
End If

Color fr,fg,fb
Text x,y,txt$
If blink=1 And blinkeralpha>-1 Then Text x2,y,txt2b$ Else Text x2,y,txt2$
End If


If a=13 Then tx$=txt2$:txt2$="":pos=0:Return tx$
If a=8 And Len(txt2$)>0 And pos>0 Then txt2$=delstring$(txt2$,pos):pos=pos-1
If a=27 Then txt2$="":pos=0
End Function

;--------------------------------------------------------------
;x = x position
;y = y position
;txt$ = Frage vor input
;max = Maximale buchstaben (0=unendlich)
;blinkertime = Millisekunden zeit des blinkers
;bcolor = die farbe die der buchstabe hat wenn der cursor über ihm ist
;blinkeralpha = Alphawert des blinkers 0=nicht sichtbar - 255=voll sichtbar -1 Blinked von vollsichtbar zu nichtsichtbar
;BAS = BlinkerAlphaSpeed Die Blinkgeschwindigkeit des alpha cursors (Nur wenn blinkeralpha auf -1 gesetzt ist!)
;draw = ob etwas angezeigt werden soll (text + cursor) wenn draw = 0 ist wird nichts gezeichnet, falls man den text anders darstellen möchte. (txt2 ist die variable vom text)
;--------------------------------------------------------------
Function input2_lite$(x,y,txt$,max=0,blinkerx=7,blinkertime=500,bcolor=$000000,blinkeralpha=255,BAS=3,draw=1)
a=GetKey()
FlushKeys
For b=1 To 237
If KeyDown(b) Then Exit
Next
If b>237 Then b=0
If b2=b Then b=0 Else b2=b
If Len(txt2$)<max Or max=0 Then
If a>31 And a < 256 And b<>181 Then txt2$=fillstring$(txt2$,Chr$(a),pos):pos=pos+1
Select b
Case 83
txt2$=fillstring$(txt2$,",",pos):pos=pos+1
Case 82
txt2$=fillstring$(txt2$,"0",pos):pos=pos+1
Case 79
txt2$=fillstring$(txt2$,"1",pos):pos=pos+1
Case 80
txt2$=fillstring$(txt2$,"2",pos):pos=pos+1
Case 81
txt2$=fillstring$(txt2$,"3",pos):pos=pos+1
Case 75
txt2$=fillstring$(txt2$,"4",pos):pos=pos+1
Case 76
txt2$=fillstring$(txt2$,"5",pos):pos=pos+1
Case 77
txt2$=fillstring$(txt2$,"6",pos):pos=pos+1
Case 71
txt2$=fillstring$(txt2$,"7",pos):pos=pos+1
Case 72
txt2$=fillstring$(txt2$,"8",pos):pos=pos+1
Case 73
txt2$=fillstring$(txt2$,"9",pos):pos=pos+1
Case 181
txt2$=fillstring$(txt2$,"/",pos):pos=pos+1
Case 203
If pos>0 Then pos=pos-1
Case 205
If pos<Len(txt2$) Then pos=pos+1
Case 199
pos=0
Case 207 pos=Len(txt2$)
End Select
End If
c=StringWidth(txt$)
d=StringWidth(txt2$)
x2=x+c
If MilliSecs()-blinker => blinkertime And blinkerx>0 Then
blinker=MilliSecs()
blink=1-blink
End If

If b<>0 Or a<>0 Then blink=1:blinker=MilliSecs()

x3=x2+StringWidth(Left$(txt2$,pos))
txt2b$=replace2$(txt2$," ",pos+1)
txt2cx=x+StringWidth(Left$(txt2$,pos))+StringWidth(txt$)
If draw=1 Then
fr=ColorRed()
fg=ColorGreen()
fb=ColorBlue()

fkr=(bcolor And $FF0000)/$10000
fkg=(bcolor And $FF00)/$100
fkb=bcolor And $FF

If blink=1 Or blinkeralpha<0 Then
If blinkeralpha=255 Then Rect x3+1,y,blinkerx,FontHeight():Color fkr,fkg,fkb: Text txt2cx,y,Mid$(txt2$,pos+1,1)
If blinkeralpha>0 And blinkeralpha<255 Then alpharect(x3+1,y,blinkerx,FontHeight(),fr,fg,fb,blinkeralpha)
If blinkeralpha<0 Then
blinkalpha=blinkalpha-BAS
If blinkalpha= -1 Then blinkalpha=255
alpharect(x3+1,y,blinkerx,FontHeight(),fr,fg,fb,blinkalpha)
End If
End If

Color fr,fg,fb
Text x,y,txt$
If blink=1 And blinkeralpha>-1 Then Text x2,y,txt2b$ Else Text x2,y,txt2$
End If


If a=13 Then tx$=txt2$:txt2$="":pos=0:Return tx$
If a=8 And Len(txt2$)>0 And pos>0 Then txt2$=delstring$(txt2$,pos):pos=pos-1
If a=27 Then txt2$="":pos=0
End Function

Function fillstring$(strg1$,strg2$,posi)
If posi<Len(strg1$)
If posi>0 Then
t1$=Left$(strg1$,posi)
t2$=Right$(strg1$,Len(strg1$)-posi)
Return t1$+strg2$+t2$
Else
Return strg2$+strg1$
End If
Else
Return strg1$+strg2$
End If
End Function

Function delstring$(strg1$,posi)
If posi>0 Then
If posi<Len(strg1$) Then
t1$=Left$(strg1$,posi)
t2$=Right$(strg1$,Len(strg1$)-posi)
If t1$<>"" Then Return Left$(t1$,Len(t1$)-1)+t2$
Else
If strg1$<>"" Then Return Left$(strg1$,Len(strg1$)-1)
End If
End If
End Function

Function replace2$(strg1$,strg2$,posi)
strg$ = delstring$(strg1$,posi)
strg$ = fillstring$(strg$,strg2$,posi-1)
lent=Len(strg1$)
If posi>lent Or posi<1 Then Return strg1$ Else Return strg$
End Function

Function alpharect(x,y,xplus, yplus,r,g,b,alpha)
LockBuffer BackBuffer
For xx = x To x + xplus
For yy = y To y + yplus

rgb = ReadPixelFast(xx,yy)

read_rot = (rgb And $FF0000)/$10000
read_gruen = (rgb And $FF00)/$100
read_blau = rgb And $FF

final_rot = read_rot + (alpha * (r - read_rot) / 255)
final_gruen = read_gruen + (alpha * (g - read_gruen) / 255)
final_blau = read_blau + (alpha * (b - read_blau) / 255)

WritePixelFast xx,yy, final_rot * $10000 + final_gruen * $100 + final_blau

Next
Next
UnlockBuffer BackBuffer
End Function

Function add_getkey(fga,fgb)
If fgb<>0 And (fgb<>83 And fgb<>82 And fgb<>79 And fgb<>80 And fgb<>81 And (Not (fgb>74 And fgb<78)) And (Not (fgb>70 And fgb<74)) And fgb<>181 And fgb<>203 And fgb<>205 And fgb<>199 And fgb<>207 And (Not (fgb>58 And fgb<69)) And fgb<>208 And fgb<>200 And 1-(fgb=41 And fga=0) And fgb<>15 And fgb<>58 And 1-(fgb=42 And fga=0) And 1-(fgb=54 And fga=0) And fgb<>29 And fgb<>219 And fgb<>56 And fgb<>184 And fgb<>220 And fgb<>221 And fgb<>157 And fgb<>183 And fgb<>70 And fgb<>197 And (Not (fgb>208 And fgb<212)) And fgb<>201) Then If fga=0 Then Ret=a2 Else Ret=fga
If a2=fga Then ret=0
Return ret
End Function
[/code:1:c20b0a1529]
===
von ???
Hier mal ein (unvollständiges) Gegenbeispiel.

file: test.bb
[code:1:13a89729d7]
Include "./inc/console.bb"


Graphics 800,600,32,2
SetBuffer(BackBuffer())

While Not KeyHit(1)
Cls()

doKeyboard()
doCon()
clearKeyInput()

Flip()
Wend

End
[/code:1:13a89729d7]

file: console.bb
[code:1:13a89729d7]
Include "./inc/input.bb"
Include "./inc/stringlist.bb"


Global showConCursor=True
Global conCursorX=0
Global conCursorY=0
Global conCursorInterval=25
Global conCursorTime=0
Global conCursorVisible=True
Global conCharWidth=8
Global conCharHeight=8
Global conMaxLines=100
Global conMaxLinesVisible=10
Global conMaxLinesX=20
Global conInputLine$=""
Global conLines.stringList=New stringList
Local tempString$=""


Function drawCon()
Text(conCursorY,0,conInputLine)

If showConCursor Then
If conCursorTime<conCursorInterval Then
conCursorTime=conCursorTime+1
Else
conCursorTime=0
conCursorVisible=Not conCursorVisible
EndIf

If conCursorVisible Then
Text(conCursorX*conCharWidth,conCursorY*conCharHeight,"_")
Else
Text(conCursorX*conCharWidth,conCursorY*conCharHeight," ")
EndIf
EndIf
End Function


Function doCon()
If inKey<>0 Then
If inKey>31 And inKey<127 Then
If conCursorX>=Len(conInputLine) Then
conCursorX=conCursorX+1
conInputLine=conInputLine+Chr(inKey)
Else
tempString$=Mid$(conInputLine,1,conCursorX)+Chr$(inKey)+Mid$(conInputLine,conCursorX+1,Len(conInputLine)-conCursorX)
conInputLine=tempString
conCursorX=conCursorX+1
EndIf
EndIf

If KeyHit(203) And conCursorX>0 Then ;left
conCursorX=conCursorX-1
EndIf

If KeyHit(205) And conCursorX<Len(conInputLine) Then ;right
conCursorX=conCursorX+1
EndIf

If KeyHit(14) And conCursorX>0 Then ;backspace
tempString$=Mid$(conInputLine,1,Len(conInputLine)-1)
conInputLine=tempString
conCursorX=conCursorX-1
EndIf
EndIf

drawCon()
End Function


Function conSetMaxLines(i)
conMaxLines=i
End Function


Function conSetMaxLinesVisible(i)
conMaxLinesVisible=i
End Function
[/code:1:13a89729d7]

file: input.bb
[code:1:13a89729d7]
Global inKey=0


Function doKeyboard()
inKey=GetKey()
End Function


Function clearKeyInput()
inKey=0
End Function
[/code:1:13a89729d7]

Kann man sicher auch in eine Datei legen. Geschmackssache. Ich finde es so übersichtlicher. Was es bisher leistet (es wurde schnell angefangen und ebenso schnell wurde alle Bemühungen eingestellt ;))? Zeichen und Ziffern annehmen, Cursor links, rechts, Text einfügen. Des Rest ist sicher einfachst.
===
Lob an(s) Wunderkind von ???
Hi! Sorry, dass ich jetzt kein Input poste...
Ich wollte eigentlich nur ein Lob an(s) Wunderkind aussprechen.

@Wunderkind
Du hast einen wirklich guten opjektorientierten Codestil :-)
Aber kommentiere ruhig mal ein bisschen mehr aus

@alle
Nehmt euch ein Beispiel an Wunderkind und programmiert auch mal so obejktorientiert, denn dann können andere Coder euren Code schneller lesen und verstehen. Mir geht es zumindest so.
===
von ???
also ich möchte jetzt mal ein lob an niclas aussprechen, es gefällt mir sehr gut, das man diverse optionen übergeben kann, gefällt mir sogar so gut, das ich sie in meinen tileed eingebunden hab (hier mal ein alpha screen, wenns ein interessier:[url]http://mitglied.lycos.de/ojay2k2/tileed_alpha.png[/url] =))

aber ein bug hab ich noch gefunden: wenn man die maximale stringlänge eingegeben hat, kann man nicht mehr mit den cursortasten nach links/rechts navigieren, erst wenn man min. ein zeichen löscht, geht es wieder...aber eher ein unbedeutender bug ;)
===
von ???
Kurz, einfach und meiner Meinung nach völlig ausreichen für alle Eingabefelder in Spielen:
enter$ ist der String der eingegeben wird

[code:1:df4bf52989]
;Eingabe ;
Function e_input() ;
Local key ;
key = GetKey() ;
If key <> 14 Then enter$=enter$+Chr(key) ;Eingeben
If KeyHit(14) And Len(enter$)>0 Then enter$ = LSet(enter$, Len(enter$)-1);Backspace
End Function ;
[/code:1:df4bf52989]

Aber wenns mehr seien soll sind die anderen Routinen sehr gut! Gefallen mir beide
===
von ???
Drück bei der Form mal auf Tabulator, oder Einfg, oder Entf, oder Pos1, oder Ende, oder BIld auf/ab, oder......

Mfg Sktaeboarder
===
von ???
@Ojay: thx

Ich wollte nur noch mal sagen: Ich weis sehr wohl das es einfacher gehen [b:daf5750124]könnte[/b:daf5750124] ich wollte aber einen Input der das kann was der normale bb input auch kann halt nur in echtzeit...
===
von ???
@Mike Nike 5
Vielen Dank, ich nehme deinen Kommentar als Lob :). Die Struktur, bzw. das strukturiertere Vorgehen kommt sicherlich von meiner "Ursprungssprache" C++ ;).

Zur Auskommentierung: tja, war ursprünglich einmal zur Eigennutzung gedacht. Aber dank des einfachen Stils, scheinst du es ja auch so verstanden zu haben :). Das sollte das Ziel vieler Quellcodes sein, denn eines Tages ist man seines eigenen Codes fremder Feind ;). Je einfacher die Struktur, desto besser. Das beginnt mit simplen Einrückungen..ohne mir ein Selbstlob aufzutischen, denn es gibt weitaus besseren Code :).

Merry XMas.
===
von ???
so hab jetzt den bug behoben und noch eine funktion eingebaut: Wenn man auf Entf drückt löscht er die zeichen vor dem cursor... (ich komme dem bb input immer näher :o )

edit: inpu2t_lite hinzugefügt. Diese function erkennt kein längerhalten der taste was glaub ich viel schneller ist.
Und parameter "draw" hinzugefügt. Wenn draw = 0 ist dann wird nichts gezeigt und nur text erkannt für die die den text anders anzeigen möchten.

ACHSO: ich nehme den download wieder raus weil sich das irgendwie nicht updaten lässt... (misst :x )
===
von ???
hhmm...weiß jetzt net, ob es schon einem aufgefallen is, oder ob ich nen fehler gemacht hab...aber kann es sein, das die funktion den string NICHT zurückgibt? :shock:

das ist mein funktionsaufruf:
[code:1:5b12ca9970]
Global txt2$,blinker=MilliSecs(),blink=1,b2,pos,blinkalpha,doud,doud2,a2

SetBuffer BackBuffer()
Repeat
eingabe=input2$(10,10,"")
If eingabe<>0 Then Color 255,255,255 : Text 10,30,eingabe
Flip
Cls
Until KeyHit(1)
End
[/code:1:5b12ca9970]

wie gesagt, berichtigt mich, aber bei mir returned der nischt :(
===
von ???
[code:1:8f43164a07]
eingabe$ = Input2$(...)
[/code:1:8f43164a07]

eingabe[b:8f43164a07]$[/b:8f43164a07] <-- :!:

außerdem gibt die function erst einen string zurück wenn man auf enter drückt.
Wenn du ständig den text haben willst mach so:
[code:1:8f43164a07]
eingabe$=txt2$
[/code:1:8f43164a07]
===
von ???
mit enter bestätigen war mir scho klar...ich hab mir deinen code ja auch genau angesehn, bevor ich was gesagt habe...

dieser schusselfehler, das ich vergesse eine variable als string zu deklarieren, is mir schon zum zweiten mal passiert! bb machts einem aber auch einfach das zu vergessen =)

trotzdem kein grund gleich gehässig zu werden...ich bin auch nur ein mensch, ein gestresster dazu :p

nichts desto trotz is deine input immernoch spitze ;)
===
von ???
danke, hät nicht gedacht das so ein massiger code irgendeinem gefällt :lol:

Nur das ziel war, das man ihn genauso wie den bb input anwenden kann, nur so das er da prog nicht anhält. (Was ja auch gut gelnugen ist)

ja es stimmt bb macht es einfach...
nicht wie in vb wo man deklarieren kann.
Wenn das in bb ginge (oder noch besser: MAn deklariert bestimmte variablem und alle die ganz ähnlich sind werden markiert z. B. ich deklariere "zeit" und ich vertippr mich in "zeitz" (t ist neben z also realistisch 8) ) und das wir rot markiert.)
===
von ???
version 1.4...
es gibt einen neuen parameter: "wiederholung".
er gibt an wie oft bei gedrückter taste das zeichen wiederholt wird.
Mir war das wiederholen des zeichens bei jedem durchgang zu schnell...
===
von ???
version 1.5...
bug behoben, mit dem parameter "wiederholung". Mit dem parameter funzten die scancodes nicht mehr...
===
von ???
version 1.51...

Der Cursor blinkt jetzt nicht mehr wenn man schreibt. Das hat den vorteil das man immer weis wo man ist beim schreiben. Ist bei jedem anderem input auch so...
===
von ???
Ich hab meinen input eben auf b+ getestet, und lief soweit j auch, aber die tastenerkennung läuft überhauptnicht korekt...

Testet das ding mal in b+! bitte!

ist mit den befehlen in b+ keydown/keyhit/getkey ist da irgendwas anders als wie in bb2d/bb3d ?

der input funzt in bb2d/bb3d perfekt...
===
von ???
GETKEY() in BB+ wurde komplett umgeschrieben. So haben sich jetzt Cursortatsen geändert - und GetKEY() liefert endlich werte zurück, wenn man eine taste festhält - es ist jetzt so wie es immer sein sollte. Ich habe vor kurzem 2 kleine Fehler in GETKEY() gefunden - sollte demnächst korrigiert sein (Einfg/Entf/Pos1/Ende/Bild liefern falsche codes und ein weiterer verrückter fehler, den ich nur in meinem Programm gesehen habe und sonst nicht nachbauen kann).
===
Re: Lob an(s) Wunderkind von ???
[quote="Mike Nike 5"]Ich wollte eigentlich nur ein Lob an(s) Wunderkind aussprechen.

@Wunderkind
Du hast einen wirklich guten opjektorientierten Codestil :-)
Aber kommentiere ruhig mal ein bisschen mehr aus[quote]

so code ich schon immer -.-

@all: yay gute routinen ^^ weiter so
===
von ???
ich hab von meiner auch schon eine version die in b+ funzt und nun endlich wieder einen "normalen" input darstellt... nur leider sind noch ein par bugs drinne, mal sehen...
===
Neue Version... von ???
Nach langer langer zeit, wo ich diesen code wieder für mein game gebrauche, habe ich noch einen bug gefunden, man konnte keinee scancodetaste doppelt drücken, also v. 1.52 ist oben editiert...



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: