Seite 1 von 2

Erweiterte InGame Console mit Chat

Verfasst: 31.12.2009 18:30
von Shadow-Gamer
Hallo Leute,

Das ist mein 1. Codeschnipsel, welchen ich hier im Forum veröffentliche:

Eine InGame Konsole, welche es erlaubt Befehle,Chat u. Werte zu den Befehlen farblich zu trennen.
Man kann z.B. komfortabel die Framerate ändern mit /fps dann Leerzeichen u. dann die Anzahl der Bilder pro Sekunde(z.B. /fps 33)
Allerdings lässt sich sicher vieles noch verbessern, deswegen stelle ich den Code hier Online, damit wir den Code gemeinsam(wer möchte) verbessern können.
Ihr könnt mit dem Code machen was ihr wollt, außer wenn ihr den Code wiederveröffentlicht, dann sollte zumindest mein Name genannt werden :)

Dank an Benubi, denn der Beitrag InGameConsole im CodeArchiv hat mir sehr geholfen.
Viel Spaß beim ausprobieren <)

------------------Updates---------------------
1. Hoch&Runter Funktion hinzugefügt@SLC_KeysAndActions()
2. Bugfix:zu viele Konsoleneinträge @SLC_PrintN()|KeysAndActions()
3. zu Moks Scripter Kompatibel gemacht: Auskopplung der Befehle in SLC_Commands u. anpassung der Variablennamen
-----------------------------------------------

Screenshots:
BildBildBild
Exe zum Ausprobieren: http://em.q-soft.ch/files/get/CqYSnHEPS6/slc.exe[updated]

Lol den Code vergessen xD

Code:

Code: Alles auswählen

;-Konstante
#SLC_EntryLimit     = 18;Max. Anzahl an Konsolen-Einträgen(!-Wichtig)
#SLC_ChatEntryLimit = 5;Max. Anzahl an Chatbeiträgen(!-Wichtig)
#SLC_TextLimit     = 30
#SLC_ChatTextLimit = 40

#SLC_Return         = Chr(13);Zeichen welches einen Zeilenumbruch auslöst
#SLC_Whitespace     = " ";Zeichen welches als Seperator von Befehl u. dazugehörigem Wert (z.B. /FPS 125) dient
#SLC_StartOperator  = "/";Zeichen welches einen Befehl einleitet


Enumeration
  #SLC_ConsoleSprite
  #SLC_ChatSprite
EndEnumeration

;-Listen
Global NewList SLC_Buffer.s();Liste der Konsoleneinträge
AddElement(SLC_Buffer())
Global NewList SLC_ChatBuffer.s();Liste der Chateinträge
AddElement(SLC_ChatBuffer())

;- Variablen

Define.l SLC_BGColor      = RGB(0,0,0);HG-Farbe
Define.l SLC_InputBGColor = RGB(35,35,35);HG-Farbe des Eingabefeldes
Define.l SLC_CursorColor  = RGB(255,0,0)

Define.l SLC_X      = 0;X Position der Konsole
Define.l SLC_Y      = 0;Y Position der Konsole
Define.l SLC_Width  = 800;Breite der Konsole
Define.l SLC_Height = 300;Höhe der Konsole(Bitte #SLC_EntryLimit anpassen)


Define.l SLC_ChatX  = 10;X Position des Chats
Define.l SLC_ChatY  = 400;Y Position des Chats
Define.l SLC_ChatWidth  = 600;Breite des Chats(Muss in DrawChatSprite überarbeitet werden)
Define.l SLC_ChatHeight = 300;Höhe des Chats(Bitte #SLC_ChatEntryLimit anpassen)

Define.l SLC_Visible       = #True;Konsole An/Aus
Define.l SLC_ChatVisible   = #False;Chat An/Aus

;Textausgabe
Define.l SLC_ChatTextColor = $FFFFFF;Chattextfarbe
Define.l SLC_MainTextColor = $C3C53C;Farbe von z.B. /FPS
Define.l SLC_SubTextColor  = $B8F0D5;Farbe von 125 bei /FPS 125
Define.l SLC_SubTextColor  = $B8F0D5;Farbe von 125 bei /FPS 125

;Eingabefeld
Define.l SLC_ChatTextColor2 = $FFFFFF
Define.l SLC_MainTextColor2 = $C3C53C
Define.l SLC_SubTextColor2  = RGB(234, 68, 21)
Define.l SLC_PreColor      = RGB(204, 134, 51); Ist der Text, welcher vor dem eingegebenen Text steht

;Chat
Define.l SLC_ChatTextColor3  = $701F08
Define.l SLC_ChatPersonColor = RGB(255, 0, 0);Unused
Define.l SLC_PreChatColor    = $701F08

Declare SCR_ExecFile(FileName$)

Procedure SLC_Init();Bilder erstellen
  Shared SLC_Width,SLC_Height,SLC_ChatWidth,SLC_ChatHeight
  CreateSprite(#SLC_ConsoleSprite,SLC_Width,SLC_Height);Bild wo die Konsole gerendert wird
  CreateSprite(#SLC_ChatSprite,SLC_ChatWidth,SLC_ChatHeight);Bild wo der Chat gerendert wird
  TransparentSpriteColor(#SLC_ChatSprite, RGB(193, 8, 62));damit der Chat keinen HG hat
EndProcedure
Procedure SLC_CheckAndDelete(Buffer.l,Limit.l = 4,LastElement.l = #True);Prüfen ob eines der Entrylimits überschritten wurde u. ggf. löschen
  If Buffer = 0;Konsole
    If ListSize(SLC_Buffer()) > Limit+1;wenn das Limit erreicht wurde
      FirstElement(SLC_Buffer())
      DeleteElement(SLC_Buffer());wird das letzte Element gelöscht
      If LastElement = #True;weil manchmal schon ein Lastelement vorhanden ist
        LastElement(SLC_Buffer())
      EndIf
    EndIf
  ElseIf Buffer = 1;Chat
    
    If ListSize(SLC_ChatBuffer()) > Limit+1
      FirstElement(SLC_ChatBuffer())
      DeleteElement(SLC_ChatBuffer())
      If LastElement = #True
        LastElement(SLC_ChatBuffer())
      EndIf
    EndIf

  EndIf
EndProcedure
Procedure SLC_Chat(text.s);Neuer Chat-Eintrag
  ;z.B. Netzwerk...mist,...
  AddElement(SLC_Buffer());Chateintrag wird auch in der Konsole angezeigt
  LastElement(SLC_ChatBuffer())
  SLC_ChatBuffer() = text
  AddElement(SLC_ChatBuffer());Chatelement hinzufügen
  SLC_CheckAndDelete(0,#SLC_EntryLimit);Limits prüfen
  SLC_CheckAndDelete(1,#SLC_ChatEntryLimit,#False)
EndProcedure
Procedure SLC_PrintN(text.s);Neuer Konsolen-Eintrag

  Protected Output.s,NumOfReturns,x.l
  NumOfReturns = CountString(text,#SLC_Return)+1;Anzahl der Zeilenumbrüche
  For x = 1 To NumOfReturns Step 1;Zeile für Zeile durchgehen
    Output = StringField(text,x,#SLC_Return)
    SLC_Buffer() =  Output
    AddElement(SLC_Buffer());Konsolenelement hinzufügen
    SLC_CheckAndDelete(0,#SLC_EntryLimit)
  Next
EndProcedure
Procedure SLC_Commands(RawCommand$,Check$,Argument$,Argument2$="") ;Befehle!
  ;RawCommand$ is unused at present
  Select Check$;Befehl only^^ z.B. fps 
    Case "exec"
      SLC_PrintN("Plugin wurde nicht installiert! Siehe Pure-Board.de")
    Case "help"
      SLC_PrintN("Nobody"+#SLC_Return+"Can"+#SLC_Return+"Help"+#SLC_Return+"You"+#SLC_Return+"Anymore!")
    Case "quit"
      StartDrawing(ScreenOutput())
        DrawText(100,100,"Shutdown...")
      StopDrawing()
      Delay(1000)
        End    
    Case "fps"
      If Val(Argument$) > 200
        SLC_PrintN("The framerate "+Argument$+" is above the limit(200)")
      Else 
        SetFrameRate(Val(Argument$))
        SLC_PrintN("Framerate was changed to "+Argument$)
      EndIf 
    Case "zahl"
      SLC_PrintN("Die Zahl heißt "+Argument$)
    Case "name"
      SLC_PrintN("Dein neuer Name ist "+Argument$)
    Case "message"
      MessageRequester("Message",Argument$)
      SLC_PrintN(Argument$)
    Default 
      DeleteElement(SLC_Buffer());keine Ausgabe bei falschem Befehl
    EndSelect
EndProcedure 
Procedure SLC_KeysAndActions();Tastenbelegung
  Shared SLC_Visible,SLC_ChatVisible
  Protected RawArgument$,Argument$,Check$
  Protected PreviousElement$:Static PreviousElements,KeyUpPressed;Um vorige Befehle anzuzeigen(mittels Pfeil-Hoch-Taste)
  
  ;Konsole&Chat ein/ausschalten
  If KeyboardReleased(#PB_Key_F1) And SLC_ChatVisible = #False
    SLC_Visible!1
  EndIf
  If KeyboardReleased(#PB_Key_T) And SLC_Visible = #False
    SLC_ChatVisible = #True
  EndIf
  
  ;Hoch und Runter Funktionen
  If SLC_Visible = #True
    If KeyboardReleased(#PB_Key_Up)
      If KeyUpPressed = 0;Wenn Enter gedrückt wurde muss es zurückgesetzt werden
        PreviousElements = 0;Zurücksetzten
        KeyUpPressed = 1;signalisiert, dass es beim nächsten mal nicht zurückgesetzt wird
      EndIf  
      If ListSize(SLC_Buffer())-PreviousElements-1 > 0 ;Prüfen ob das ganze innerhalb des ListenIndexes ist um Fehler zu vermeiden
        PreviousElements + 1;ein LinkedList Element niedriger  
        SelectElement(SLC_Buffer(),ListSize(SLC_Buffer())-PreviousElements-1);das vorherige Element wird ausgewählt
        PreviousElement$ = SLC_Buffer();in Variable gespeichert
        LastElement(SLC_Buffer())
        SLC_Buffer() = PreviousElement$;und in das Aktuelle übertragen  
      EndIf   
    ElseIf KeyboardReleased(#PB_Key_Down)
      If KeyUpPressed = 1 And PreviousElements > 1;prüfen ob überhaupt ein vorheriges ausgewählt wurde   
        PreviousElements -1;Ein LinkedList Element höher 
        SelectElement(SLC_Buffer(),ListSize(SLC_Buffer())-PreviousElements-1)
        PreviousElement$ = SLC_Buffer()
        LastElement(SLC_Buffer())
        SLC_Buffer() = PreviousElement$  
      EndIf 
    EndIf 
  EndIf 
  ;Letztes Zeichen löschen
  If KeyboardReleased(#PB_Key_Back)
    If SLC_Visible = #True
      SLC_Buffer()=Left(SLC_Buffer(),Len(SLC_Buffer())-1)
    ElseIf SLC_ChatVisible = #True
      SLC_ChatBuffer()=Left(SLC_ChatBuffer(),Len(SLC_ChatBuffer())-1)
    EndIf 
  EndIf
  
  ;Befehl Ausführen&Chatten
  If KeyboardReleased(#PB_Key_Return)
    If SLC_Visible = #True;Bei der Konsole
      If KeyUpPressed = 1;Setzt die Hoch und Runter Funktion(Pfeil rauf u. runter Tasten) zurück
        KeyUpPressed = 0
      EndIf
      ;Eventuell Case #SLC_StartOperator + <Ausdruck> verwenden
      If SLC_Buffer() = "":Else; Wenn nichts eingegeben wurde, wird auch nichts hinzugefügt
        If LastElement(SLC_Buffer()) And LSet(SLC_Buffer(),1) = #SLC_StartOperator; Auf befehle prüfen
          RawArgument$  = SLC_Buffer(); z.B. '/fps 125'
          Check$ = StringField(ReplaceString(LCase(RawArgument$),#SLC_StartOperator,""),1,#SLC_Whitespace);den Befehl herausfiltern z.B. fps
          Argument$ = StringField(SLC_Buffer(),2,#SLC_Whitespace); z.B. '125' bei '/fps 125'
          AddElement(SLC_Buffer())
          SLC_Commands(RawArgument$,Check$,Argument$);Befehle 
      Else
        SLC_Chat(SLC_Buffer());Wenn kein Befehl benutzt wurde z.B. kein '/', dann wird das ganze im Chat ausgegeben
      EndIf
      SLC_CheckAndDelete(0,#SLC_EntryLimit)
    EndIf 
    
    ElseIf SLC_ChatVisible = #True;Im Chat
      If SLC_ChatBuffer() = "":SLC_ChatVisible = 0:Else ;Wenn nichts eingegeben wurde, wird auch nichts hinzugefügt
       SLC_PrintN(SLC_ChatBuffer());
       DeleteElement(SLC_Buffer())
       SLC_Chat(SLC_ChatBuffer());
       SLC_ChatVisible = 0;Chat wird automatisch geschlossen
      EndIf 
    EndIf
  EndIf
EndProcedure
Procedure SLC_DrawConsoleSprite();Konsole erstellen
  Shared SLC_MainTextColor,SLC_SubTextColor,SLC_ChatTextColor,SLC_MainTextColor2,SLC_SubTextColor2,SLC_ChatTextColor2,SLC_CursorColor,SLC_PreColor
  Shared SLC_Width,SLC_Height
  Shared SLC_BGColor,SLC_InputBGColor
  Protected Pre$,Pre,OverallTextHeight,TextHeight,A$,B$
  Pre$ = "Command:"
  Pre  = 5
  LastElement(SLC_Buffer())

  If StartDrawing(SpriteOutput(#SLC_ConsoleSprite))
    TextHeight = TextHeight("A")
    OverallTextHeight = SLC_Height-TextHeight-2
    Box(0,0,SLC_Width,SLC_Height,SLC_BGColor);BG
    Box(0,SLC_Height-TextHeight,SLC_Width,TextHeight,SLC_InputBGColor);InputBG
    DrawingMode(#PB_2DDrawing_Transparent);Transparente Text-Mode
    DrawText(Pre,SLC_Height-TextHeight,Pre$,SLC_PreColor)
    ;Input field
    If LSet(SLC_Buffer(),1) = #SLC_StartOperator
      A$ = StringField(SLC_Buffer(), 1,#SLC_Whitespace)
      B$ = StringField(SLC_Buffer(), 2,#SLC_Whitespace)
      DrawText(Pre*2+TextWidth(Pre$),SLC_Height-TextHeight,A$,SLC_MainTextColor2);text
      DrawText(Pre*2+TextWidth(Pre$)+TextWidth(A$)+Pre,SLC_Height-TextHeight,B$,SLC_SubTextColor2);text
    Else
      DrawText(Pre*2+TextWidth(Pre$),SLC_Height-TextHeight-1,SLC_Buffer(),SLC_ChatTextColor2);text
    EndIf
    ;Ausgabe
    If ListSize(SLC_Buffer()) > 1
      While PreviousElement(SLC_Buffer()) ;Die Liste mit den Konsoleneinträgen durchgehen.
        OverallTextHeight - TextHeight
        If LSet(SLC_Buffer(),1) = #SLC_StartOperator
          A$ = StringField(SLC_Buffer(), 1, #SLC_Whitespace)
          B$ = StringField(SLC_Buffer(), 2, #SLC_Whitespace)
          DrawText(Pre,OverallTextHeight,A$,SLC_MainTextColor);text
          DrawText(Pre+TextWidth(A$)+Pre,OverallTextHeight,B$,SLC_SubTextColor);text
        Else
          DrawText(Pre,OverallTextHeight,SLC_Buffer(),SLC_ChatTextColor);text
        EndIf
      Wend
    EndIf
    LastElement(SLC_Buffer())
    If Date()&1:Line(Pre+2+TextWidth(SLC_Buffer())+TextWidth(Pre$)+2,SLC_Height-2,TextWidth("  "),0,SLC_CursorColor):EndIf;Cursor
  StopDrawing():EndIf
EndProcedure
Procedure SLC_DrawChatSprite(activated = #False);Chat erstellen
  Protected OverallTextHeight,TextHeight,Pre$,Pre,A$,B$
  Shared SLC_ChatTextColor3,SLC_ChatPersonColor,SLC_CursorColor,SLC_PreChatColor
  Shared SLC_ChatWidth,SLC_ChatHeight
  Pre$ = "Chat:"
  Pre  = 5

  LastElement(SLC_ChatBuffer())

  If StartDrawing(SpriteOutput(#SLC_ChatSprite))
    Box(0,0,SLC_ChatWidth,SLC_ChatHeight,RGB(193, 8, 62));BG
    TextHeight = TextHeight("A")
    OverallTextHeight = SLC_ChatHeight-TextHeight*2
    DrawingMode(#PB_2DDrawing_Transparent);Transparente Text-Mode
    If activated = #True:DrawText(Pre,SLC_ChatHeight-TextHeight*2,Pre$,SLC_PreChatColor):EndIf; Pre$ anzeigen, wenn Chat aktiviert 
    DrawText(Pre*2+TextWidth(Pre$),SLC_ChatHeight-TextHeight*2,SLC_ChatBuffer(),SLC_ChatTextColor3)
    If ListSize(SLC_ChatBuffer()) > 1
      While PreviousElement(SLC_ChatBuffer());Die Liste mit den Chatelementen durchgehen.
        OverallTextHeight - TextHeight
        DrawText(Pre,OverallTextHeight,SLC_ChatBuffer(),SLC_ChatTextColor3);text
      Wend
    EndIf
    LastElement(SLC_ChatBuffer())
    If Date()&1 And activated = #True:Line(Pre+TextWidth(SLC_ChatBuffer())+TextWidth(Pre$)+2,SLC_ChatHeight-TextHeight,TextWidth("  "),0,SLC_CursorColor):EndIf
  StopDrawing():EndIf
EndProcedure
Procedure SLC_Render();Konsole&Chat Darstellen;
  Shared SLC_Visible,SLC_ChatVisible
  Shared SLC_X,SLC_Y,SLC_ChatX,SLC_ChatY
  
  If SLC_ChatVisible = #True;Wenn der Chat Aktiviert wurde,
    If Len(SLC_ChatBuffer()) < #SLC_ChatTextLimit:SLC_ChatBuffer() + KeyboardInkey():EndIf;werden neue Texteingaben hinzugefügt
    SLC_DrawChatSprite(1);der Chat wird mit Cursor gezeichnet
    DisplayTransparentSprite(#SLC_ChatSprite,SLC_ChatX,SLC_ChatY);und dargestellt
  Else ;Wenn der Chat nicht aktiviert wurde
    SLC_DrawChatSprite(0);wird der Chat ohne Cursor gezeichnet
    DisplayTransparentSprite(#SLC_ChatSprite,SLC_ChatX,SLC_ChatY);und dargestellt
  EndIf
  If  SLC_Visible = #True;Wenn die Konsole aktiviert wurde
    If Len(SLC_Buffer()) < #SLC_TextLimit:SLC_Buffer() + KeyboardInkey():EndIf;;werden neue Texteingaben hinzugefügt
    SLC_DrawConsoleSprite();wird die Konsole gezeichnet
    DisplaySprite(#SLC_ConsoleSprite,SLC_X,SLC_Y);und dargestellt
  EndIf

  SLC_KeysAndActions();Hier werden Tastendrücke registriert und Aktionen umgestetzt

EndProcedure

;-Scripter Prozeduren############################################
;Platzhalter für das Plugin von Mok
;bitte auch über den Prozeduren z.B. Declare SCR_ExecFile(FileName$) um die Prozedur nutzbar zu machen
;außerdem noch in SLC_Commands() die exec funktion ergänzen


InitSprite()
InitKeyboard()

OpenScreen(1024,768,32,"[S]hot[l]oad [C]onsole")
SLC_Init()
SLC_PrintN("==========================================")
SLC_PrintN("=                  (c) Shadow-Gamer 2010                        =")
SLC_PrintN("==========================================")
SLC_PrintN("=                  F1 = Öffnen/Schließen                           =")
SLC_PrintN("=                        T = Chat öffnen                                =")
SLC_PrintN("=          Pfeil Hoch/Runter = vorherige Einträge        =")
SLC_PrintN("==========================================")
SLC_PrintN("Type in:"+#SLC_Return+"/quit"+#SLC_Return+"/help "+#SLC_Return+"/name <yourname>" +#SLC_Return+"/fps <yourFramesPerSecond>"+#SLC_Return+"/zahl <zahl>"+#SLC_Return+"/exec <Dateiname>(Plugin erforderlich!)")
SLC_PrintN("-----------------------------------------------------------------------------------")

Repeat
  ExamineKeyboard()
  ClearScreen(RGB(200,200,200))
  SLC_Render()
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
End
Frohes Neues! <)

Re: Erweiterte InGame Console mit Chat

Verfasst: 01.01.2010 16:21
von Mok
Ein Wort: GENIAL!
Ich erweitere den Code nur mal mit <Pfeil-rauf>, der Rest ist gut wie er ist :D

Re: Erweiterte InGame Console mit Chat

Verfasst: 01.01.2010 22:07
von Shadow-Gamer
Danke Mok :) ,
ich habe s mal mit der Pfeil nach oben Taste probiert u. gesehen das man ne kleine Anpassung vornehmen muss, denn sonst wird immer ein ^ in die Console geschrieben, dürfte aber nicht das Problem sein, allerdings lass ich erstmal F1...

habe gerade gesehen, dass noch 2 Variablen drin waren SLC_Value$ u. SLC_Text$, welche keine Funktionen mehr haben. Außerdem hab ich dieses Kommentar mit ##########..., welches unnütz war herausgenommen. ... Habs oben editiert

Re: Erweiterte InGame Console mit Chat

Verfasst: 02.01.2010 12:21
von Mok
Mit Pfeil-rauf hab ich gemeint, dass der vorige Befehl wieder im Input steht.
Im Übrigen bin ich zu blöd, das selber zu machen :(

Re: Erweiterte InGame Console mit Chat

Verfasst: 03.01.2010 13:05
von Shadow-Gamer
Mok hat geschrieben:Mit Pfeil-rauf hab ich gemeint, dass der vorige Befehl wieder im Input steht.
Im Übrigen bin ich zu blöd, das selber zu machen :(
ah sry hatte dich falsch verstanden, habs mal probiert u. so gelöst:

Alles in SLC_KeysAndActions():
Anfang der Prozedur:

Code: Alles auswählen

Protected PreviousElement$:Static PreviousElements,KeyUpPressed;Um vorige Befehle anzuzeigen(mittels Pfeil-Hoch-Taste)
Irgendwo bei den Abfragen:(Updated[Schönheit^^])

Code: Alles auswählen

  ;Hoch und Runter Funktionen
  If SLC_Visible = #True
    If KeyboardReleased(#PB_Key_Up)
      If KeyUpPressed = 0;Wenn Enter gedrückt wurde muss es zurückgesetzt werden
        PreviousElements = 0;Zurücksetzten
        KeyUpPressed = 1;signalisiert, dass es beim nächsten mal nicht zurückgesetzt wird
      EndIf  
      If ListSize(SLC_Buffer())-PreviousElements-1 > 0 ;Prüfen ob das ganze innerhalb des ListenIndexes ist um Fehler zu vermeiden
        PreviousElements + 1;ein LinkedList Element niedriger  
        SelectElement(SLC_Buffer(),ListSize(SLC_Buffer())-PreviousElements-1);das vorherige Element wird ausgewählt
        PreviousElement$ = SLC_Buffer();in Variable gespeichert
        LastElement(SLC_Buffer())
        SLC_Buffer() = PreviousElement$;und in das Aktuelle übertragen  
      EndIf   
    ElseIf KeyboardReleased(#PB_Key_Down)
      If KeyUpPressed = 1 And PreviousElements > 1;prüfen ob überhaupt ein vorheriges ausgewählt wurde   
        PreviousElements -1;Ein LinkedList Element höher 
        SelectElement(SLC_Buffer(),ListSize(SLC_Buffer())-PreviousElements-1)
        PreviousElement$ = SLC_Buffer()
        LastElement(SLC_Buffer())
        SLC_Buffer() = PreviousElement$  
      EndIf 
    EndIf 
  EndIf 
und bei der Abschicken Prozedur sprich #PB_Key_Return
direkt unter If SLC_Visible = #True

Code: Alles auswählen

      If KeyUpPressed = 1;Setzt die Hoch und Runter Funktion(Pfeil rauf u. runter Tasten) zurück
        KeyUpPressed = 0
      EndIf  
 
Viel Spaß und vielleicht findest du ja eine bessere Möglichkeit bzw. vielleicht Bugs,obwohl ich mir recht sicher bin das es funktioniert :)

Re: Erweiterte InGame Console mit Chat

Verfasst: 03.01.2010 13:51
von Mok
:allright: Jetzt funzt alles bestens
Da ich vorhabe, eine Kosole nach diesem Muster bei meinem nächsten Spiel einzubauen, bin ich gerade dabei einen Zeile-für-Zeile Interpreter oder Compiler oder was auch immer zu schreiben (für Commands à la /exec autoexec). Weicht nicht besonders von dem Standardcode ab, aber soll ich den Code dann trotzdem posten?

Re: Erweiterte InGame Console mit Chat

Verfasst: 03.01.2010 14:33
von Shadow-Gamer
Mok hat geschrieben: Weicht nicht besonders von dem Standardcode ab, aber soll ich den Code dann trotzdem posten?
Wäre nicht schlecht, aber nur wenn du es möchtest :wink:
aber poste wenn möglich nur das was du eingefügt hast bzw geändert, weil der Thread ansonsten möglicherweise zu voll wird, entscheide du <)

Re: Erweiterte InGame Console mit Chat

Verfasst: 03.01.2010 18:06
von Mok
Von mir aus gerne :D
Aber ich werde wohl mit Platzhaltern arbeiten müssen, denn jedes Spiel hat ja eine andere Funktionsweise, z.B.

Code: Alles auswählen

;Inhalt der autoexec.script
/name Mok_der_Mega_Basher
;~~~~~~~~~~~~~~~
;Prozedur im Programm
[...] Name$ = Value$
So siehts im Programm 1 aus. Im Programm 2 wird das aber nicht gehen, weil da der Spielername nicht Name$ ist, sondern PlayerName$ oder Player(0) in einem Multiplayer-Spiel. Den Code sollte man dann auch seinen Bedürfnissen anpassen, da in einem Singleplayer Ego-Shooter beispielsweise der Befehl /buy Pistol nützlicher sein wird als in einem MMO oder einem Rennspiel (wo man dann /buy Lamborghini oder so braucht) :)

Re: Erweiterte InGame Console mit Chat

Verfasst: 03.01.2010 18:59
von Shadow-Gamer
hast recht, wäre cool wenn du das hinbekommen würdest :allright:

Mok ich habe den Code mal geupdated(siehe 1 Beitrag)

mal sehen ob ich alles zusammenbekomme:

@SLC_PrintN()

Edit:ich habe das hoch u. runter zeug direkt oben in den code geschmissen u. ein bisschen verändert, von der Funktionsweise gleich, aber ich finde es mit Elseif besser.

Code: Alles auswählen

SLC_CheckAndDelete(0,#SLC_EntryLimit)
nach unten verschoben

@KeysAndActions()

Code: Alles auswählen

SLC_CheckAndDelete(0,#SLC_EntryLimit)
ziemlich weit unten eingefügt


hoffe mal bei dir funzt noch alles, ist ja nicht all zu viel was sich geändert hat :)

PS: hab mir das Zitat in deiner Sigi durchgelesen u. dann als 1. meinen Namen darüber gesehen, dachte schon da wäre ein Zitat von mir :lol: nee aber cool das du mich erwähnt hast

Re: Erweiterte InGame Console mit Chat

Verfasst: 03.01.2010 19:47
von Mok
Shadow-Gamer hat geschrieben:hoffe mal bei dir funzt noch alles, ist ja nicht all zu viel was sich geändert hat :)
(Noch) funzt alles einwandfrei :D
Shadow-Gamer hat geschrieben:nee aber cool das du mich erwähnt hast
Ich finde das einfach "assi", wenn man einen OpenSource-Code verändert und dann den Urheber nicht mal in die Credits schreibt.

Edit: Hab grade nen Bug gefunden: Wenn man im Argument ein Leerzeichen schreibt (/name Vorname Nachname), dann werden ab dem Leerzeichen nur noch Leerzeichen gedruckt, statt den "echten" Zeichen