Mirage Source
InClassEditor system - Printable Version

+- Mirage Source (https://mirage-engine.uk/forums)
+-- Forum: Mirage Source (Nostalgia) (https://mirage-engine.uk/forums/forumdisplay.php?fid=61)
+--- Forum: Archive (2006-2011) (https://mirage-engine.uk/forums/forumdisplay.php?fid=18)
+---- Forum: General (https://mirage-engine.uk/forums/forumdisplay.php?fid=17)
+---- Thread: InClassEditor system (/showthread.php?tid=347)



InClassEditor system - DarkX - 03-10-2006

Hey I know you guys are probably getting annoyed with me, but I'm going to post the code that I have been working on for ingame class editor and maybe(hopefully) I can get some help on it.
starting server side in modhandledata
Code:
' :::::::::::::::::::::::::::::
    ' :: Request edit Class packet ::
    ' :::::::::::::::::::::::::::::
    If LCase(Parse(0)) = "requesteditclass" Then
        ' Prevent hacking
        If GetPlayerAccess(Index) < ADMIN_DEVELOPER Then
            Call HackingAttempt(Index, "Admin Cloning")
            Exit Sub
        End If
        
        Call SendDataTo(Index, "CLASSEDITOR" & SEP_CHAR & END_CHAR)
        Exit Sub
    End If
    
    ' :::::::::::::::::::::
    ' :: Edit class packet ::
    ' :::::::::::::::::::::
    If LCase(Parse(0)) = "editclass" Then
        ' Prevent hacking
        If GetPlayerAccess(Index) < ADMIN_DEVELOPER Then
            Call HackingAttempt(Index, "Admin Cloning")
            Exit Sub
        End If
        
        ' The class #
        n = Val(Parse(1))
        
        ' Prevent hacking
        If n < 0 Or n > Max_Classes Then
            Call HackingAttempt(Index, "Invalid CLASS Index")
            Exit Sub
        End If
        
        Call AddLog(GetPlayerName(Index) & " editing class #" & n & ".", ADMIN_LOG)
        Call SendEditClassTo(Index, n)
    End If
    
    ' :::::::::::::::::::::
    ' :: Save class packet ::
    ' :::::::::::::::::::::
    If LCase(Parse(0)) = "saveclass" Then
        ' Prevent hacking
        If GetPlayerAccess(Index) < ADMIN_DEVELOPER Then
            Call HackingAttempt(Index, "Admin Cloning")
            Exit Sub
        End If
        
        n = Val(Parse(1))
        
        ' Prevent hacking
        If n < 0 Or n > Max_Classes Then
            Call HackingAttempt(Index, "Invalid CLASS Index")
            Exit Sub
        End If
        
        ' Update the npc
        STR(n).Name = Parse(2)
        STR(n).Sprite = Val(Parse(3))
        STR(n).STR = Val(Parse(4))
        STR(n).DEF = Val(Parse(5))
        STR(n).SPEED = Val(Parse(6))
        STR(n).MAGI = Val(Parse(7))
        
        ' Save it
        Call SendUpdateClassToAll(n)
        Call SaveClass(n)
        Call AddLog(GetPlayerName(Index) & " saved Class #" & n & ".", ADMIN_LOG)
        Exit Sub
    End If
modServerTCP
Code:
Sub SendUpdateClassToAll(ByVal ClassNum As Long)
Dim Packet As String

    Packet = "UPDATECLASS" & SEP_CHAR & ClassNum & SEP_CHAR & Trim(Class(ClassNum).Name) & SEP_CHAR & Class(ClassNum).Sprite & SEP_CHAR & END_CHAR
    Call SendDataToAll(Packet)
End Sub

Sub SendUpdateClassTo(ByVal Index As Long, ByVal ClassNum As Long)
Dim Packet As String

    Packet = "UPDATECLASS" & SEP_CHAR & ClassNum & SEP_CHAR & Trim(Class(ClassNum).Name) & SEP_CHAR & Class(ClassNum).Sprite & SEP_CHAR & END_CHAR
    Call SendDataTo(Index, Packet)
End Sub

Sub SendEditClassTo(ByVal Index As Long, ByVal ClassNum As Long)
Dim Packet As String

    Packet = "EDITCLASS" & SEP_CHAR & ClassNum & SEP_CHAR & Trim(Class(ClassNum).Name) & SEP_CHAR & SEP_CHAR & Class(ClassNum).Sprite & SEP_CHAR & Class(ClassNum).STR & SEP_CHAR & Class(ClassNum).DEF & SEP_CHAR & Class(ClassNum).SPEED & SEP_CHAR & Class(ClassNum).MAGI & SEP_CHAR & END_CHAR
    Call SendDataTo(Index, Packet)
End Sub
ModDataBase
Code:
Sub SaveClass()
Dim i As Long
    
    For i = 1 To Max_Classes
        Call SaveClasses(i)
    Next i
End Sub

OK onto client side starting at frmclasseditor(YOU WILL HAVE TO CREATE THIS FORM YOURSELF) just a hint for any newbie who wants to add a untested code
Code:
Option Explicit

Private Sub scrlSprite_Change()
    lblSprite.Caption = STR(scrlSprite.Value)
End Sub

Private Sub scrlSTR_Change()
    lblSTR.Caption = STR(scrlSTR.Value)
    lblHp.Caption = STR(scrlSTR.Value * scrlDEF.Value)
End Sub

Private Sub scrlDEF_Change()
    lblDEF.Caption = STR(scrlDEF.Value)
    lblHp.Caption = STR(scrlSTR.Value * scrlDEF.Value)
End Sub

Private Sub scrlSPEED_Change()
    lblSPEED.Caption = STR(scrlSpeed.Value)
End Sub

Private Sub scrlMAGI_Change()
    lblMAGI.Caption = STR(scrlMAGI.Value)
End Sub

Private Sub cmdOk_Click()
    Call ClassEditorOk
End Sub

Private Sub cmdCancel_Click()
    Call ClassEditorCancel
End Sub

Private Sub tmrSprite_Timer()
    Call ClassEditorBltSprite
End Sub
Ok for ^ the above on the form create 1 text box and 5 hscroll bars; name then scrlsprite str def speed and magi; then 2 pic boxes, name them picsprite and picsprites; now a label called lblHp; then a timer called tmrsprite and the ok and cancel buttons. Moving along to frmindex
Code:
If InClassEditor = True Then
        Call SendData("EDITCLASS" & SEP_CHAR & EditorIndex & SEP_CHAR & END_CHAR)
    End If

    InClassEditor = False
modGameLogic
Code:
Public Sub ClassEditorInit()
    
    frmClassEditor.picSprites.Picture = LoadPicture(App.Path & GFX_PATH & "sprites" & GFX_EXT)
    
    frmClassEditor.txtName.Text = Trim(Class(EditorIndex).Name)
    frmClassEditor.scrlSprite.Value = STR(EditorIndex).Sprite
    frmClassEditor.scrlSTR.Value = STR(EditorIndex).STR
    frmClassEditor.scrlDEF.Value = STR(EditorIndex).DEF
    frmClassEditor.scrlSpeed.Value = STR(EditorIndex).SPEED
    frmClassEditor.scrlMAGI.Value = STR(EditorIndex).MAGI
    
    frmClassEditor.Show vbModal
End Sub

Public Sub ClassEditorOk()
    Class(EditorIndex).Name = frmClassEditor.txtName.Text
    Class(EditorIndex).Sprite = frmClassEditor.scrlSprite.Value
    Class(EditorIndex).STR = frmClassEditor.scrlSTR.Value
    Class(EditorIndex).DEF = frmClassEditor.scrlDEF.Value
    Class(EditorIndex).SPEED = frmClassEditor.scrlSpeed.Value
    Class(EditorIndex).MAGI = frmClassEditor.scrlMAGI.Value
    
    Call SendSaveClasses(EditorIndex)
    InClassEditor = False
    Unload frmClassEditor
End Sub

Public Sub ClassEditorCancel()
    InClassEditor = False
    Unload frmClassEditor
End Sub

Public Sub ClassEditorBltSprite()
    Call BitBlt(frmClassEditor.picSprite.hdc, 0, 0, PIC_X, PIC_Y, frmClassEditor.picSprites.hdc, 3 * PIC_X, frmClassEditor.scrlSprite.Value * PIC_Y, SRCCOPY)
End Sub
modGlobals
Code:
Public InClassEditor As Boolean
modhandledata[code] ' :::::::::::::::::::::::
' :: Class editor packet ::
' :::::::::::::::::::::::
If (LCase(Parse(0)) = "classeditor") Then
InClassEditor = True

frmIndex.Show
frmIndex.lstIndex.Clear

' Add the names
For i = 1 To MAX_CLASSES
frmIndex.lstIndex.AddItem i & ": " & Trim(Class(i).Name)
Next i

frmIndex.lstIndex.ListIndex = 0
Exit Sub
End If

' :::::::::::::::::::::::
' :: Update Class packet ::
' :::::::::::::::::::::::
If (LCase(Parse(0)) = "updateclass") Then
n = Val(Parse(1))

' Update the item
Class(n).Name = Parse(2)
Class(n).Sprite = Val(Parse(3))
Class(n).STR = 0
Class(n).DEF = 0
Class(n).SPEED = 0
Class(n).MAGI = 0
Exit Sub
End If

' :::::::::::::::::::::
' :: Edit class packet :: Max_Classes Then
Call HackingAttempt(Index, "Invalid CLASS Index")
Exit Sub
End If

' Update the npc
STR(n).Name = Parse(2)
STR(n).Sprite = Val(Parse(3))
STR(n).STR = Val(Parse(4))
STR(n).DEF = Val(Parse(5))
STR(n).SPEED = Val(Parse(6))
STR(n).MAGI = Val(Parse(7))

' Save it
Call SendUpdateClassToAll(n)
>>>>>>>>Call SaveClass(n)