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 :: <- Used for item editor admins only
' :::::::::::::::::::::
If (LCase(Parse(0)) = "editclass") Then
n = Val(Parse(1))
' Update the class
Class(n).Name = Parse(2)
Class(n).Sprite = Val(Parse(3))
Class(n).STR = Val(Parse(4))
Class(n).DEF = Val(Parse(5))
Class(n).SPEED = Val(Parse(6))
Class(n).MAGI = Val(Parse(7))
' Initialize the Class editor
Call ClassEditorInit
Exit Sub
End If
modclienttcp
Code:
Sub SendRequestEditClass()
Dim Packet As String
Packet = "REQUESTEDITCLASS" & SEP_CHAR & END_CHAR
Call SendData(Packet)
End Sub
Public Sub SendSaveClasses(ByVal NpcNum As Long)
'****************************************************************
'* WHEN WHO WHAT
'* ---- --- ----
'* 07/12/2005 Shannara Optimized function.
'****************************************************************
Dim Packet As String
With Class(ClassNum)
Packet = "SAVECLASSES" & SEP_CHAR & ClassNum & SEP_CHAR & Trim(.Name) & SEP_CHAR & SEP_CHAR & .Sprite & SEP_CHAR & SEP_CHAR & .STR & SEP_CHAR & .DEF & SEP_CHAR & .SPEED & SEP_CHAR & .MAGI & SEP_CHAR & END_CHAR
End With
Call SendData(Packet)
End Sub
I can't get it to work because it highlights one thing on server side
Code:
' :::::::::::::::::::::
' :: 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
When it highlights that it says "Compile Error: wrong number of arguments or invalid property assignment" which I created SubSaveClass because it kept giving the same error. any idea of somethign thats wrong please post I could use all the help I can get. Thanks later
-----------EDIT----------
I fixed the above by removing the (n) at the end of it... Now just to get to actually bring up the class editor, since now when you bring it (through the admin panel only is how it opens) it has an error runtime error '424': object required. oohh and it highlights this
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