Mirage Engine
Select Sprite On Newchar "Configure In Class.ini"! - Printable Version

+- Mirage Engine (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: Resources (https://mirage-engine.uk/forums/forumdisplay.php?fid=49)
+---- Thread: Select Sprite On Newchar "Configure In Class.ini"! (/showthread.php?tid=1791)



Select Sprite On Newchar "Configure In Class.ini"! - mustorze - 26-05-2008

hello I did for my game!
decided post to help you!

starting!
servidor and client
in modtypes :

before the "end type" of type "classrec" add:
Code:
sprite1 As Integer
    Sprite2 As Integer
    Sprite3 As Integer

open the first project of the server look for:
Code:
Sub AddChar

replace the entire sub for:
Code:
Sub AddChar(ByVal Index As Long, ByVal Name As String, ByVal Sex As Byte, ByVal ClassNum As Byte, ByVal CharNum As Long, ByVal Sprite As Byte)
Dim f As Long

    If Trim$(Player(Index).Char(CharNum).Name) = vbNullString Then
        Player(Index).CharNum = CharNum
        
        Player(Index).Char(CharNum).Name = Name
        Player(Index).Char(CharNum).Sex = Sex
        Player(Index).Char(CharNum).Class = ClassNum
        
        If Player(Index).Char(CharNum).Sex = SEX_MALE Then
            Player(Index).Char(CharNum).Sprite = Sprite
        Else
            Player(Index).Char(CharNum).Sprite = Sprite
        End If
        
        Player(Index).Char(CharNum).Level = 1
                    
        Player(Index).Char(CharNum).STR = Class(ClassNum).STR
        Player(Index).Char(CharNum).DEF = Class(ClassNum).DEF
        Player(Index).Char(CharNum).SPEED = Class(ClassNum).SPEED
        Player(Index).Char(CharNum).MAGI = Class(ClassNum).MAGI
        
        Player(Index).Char(CharNum).Map = START_MAP
        Player(Index).Char(CharNum).x = START_X
        Player(Index).Char(CharNum).y = START_Y
            
        Player(Index).Char(CharNum).HP = GetPlayerMaxHP(Index)
        Player(Index).Char(CharNum).MP = GetPlayerMaxMP(Index)
        Player(Index).Char(CharNum).SP = GetPlayerMaxSP(Index)
                
        ' Append name to file
        f = FreeFile
        Open App.Path & "\accounts\charlist.txt" For Append As #f
            Print #f, Name
        Close #f
        
        Call SavePlayer(Index)
            
        Exit Sub
    End If
End Sub

look for:
Code:
Sub LoadClasses()

replace the entire sub for:
Code:
Sub LoadClasses()
Dim FileName As String
Dim i As Long

    Call CheckClasses
    
    FileName = App.Path & "\data\classes.ini"
    
    Max_Classes = Val(GetVar(FileName, "INIT", "MaxClasses"))
    
    ReDim Class(0 To Max_Classes) As ClassRec
    
    Call ClearClasses
    
    For i = 0 To Max_Classes
        Class(i).Name = GetVar(FileName, "CLASS" & i, "Name")
        Class(i).sprite1 = GetVar(FileName, "CLASS" & i, "Sprite1")
        Class(i).STR = Val(GetVar(FileName, "CLASS" & i, "STR"))
        Class(i).DEF = Val(GetVar(FileName, "CLASS" & i, "DEF"))
        Class(i).SPEED = Val(GetVar(FileName, "CLASS" & i, "SPEED"))
        Class(i).MAGI = Val(GetVar(FileName, "CLASS" & i, "MAGI"))
        Class(i).MAGI = Val(GetVar(FileName, "CLASS" & i, "MAGI"))
        Class(i).Sprite2 = GetVar(FileName, "CLASS" & i, "Sprite2")
        Class(i).Sprite3 = GetVar(FileName, "CLASS" & i, "Sprite3")
        DoEvents
    Next i
End Sub

look for:
Code:
' :: Add character packet ::

that a little and see:
Code:
Call AddChar(Index, Name, Sex, Class,

before breaking up the parameters add:
Code:
, Sprite

then after you see above:
Code:
CharNum = Val(Parse(4))

add:
Code:
Sprite = Val(Parse(5))

look for:
Code:
Sub SendNewCharClasses

replace it all by:
Code:
Sub SendNewCharClasses(ByVal Index As Long)
Dim Packet As String
Dim i As Long

    Packet = "NEWCHARCLASSES" & SEP_CHAR & Max_Classes & SEP_CHAR
    For i = 0 To Max_Classes
        Packet = Packet & GetClassName(i) & SEP_CHAR & GetClassMaxHP(i) & SEP_CHAR & GetClassMaxMP(i) & SEP_CHAR & GetClassMaxSP(i) & SEP_CHAR & Class(i).STR & SEP_CHAR & Class(i).DEF & SEP_CHAR & Class(i).SPEED & SEP_CHAR & Class(i).MAGI & SEP_CHAR & Class(i).sprite1 & SEP_CHAR & Class(i).Sprite2 & SEP_CHAR & Class(i).Sprite3 & SEP_CHAR
    Next i
    Packet = Packet & END_CHAR
    
    Call SendDataTo(Index, Packet)
End Sub

look for:
Code:
Sub SendClasses(ByVal Index As Long)

replace it all by:
Code:
Sub SendClasses(ByVal Index As Long)
Dim Packet As String
Dim i As Long

    Packet = "CLASSESDATA" & SEP_CHAR & Max_Classes & SEP_CHAR
    For i = 0 To Max_Classes
        Packet = Packet & GetClassName(i) & SEP_CHAR & GetClassMaxHP(i) & SEP_CHAR & GetClassMaxMP(i) & SEP_CHAR & GetClassMaxSP(i) & SEP_CHAR & Class(i).STR & SEP_CHAR & Class(i).DEF & SEP_CHAR & Class(i).SPEED & SEP_CHAR & Class(i).MAGI & SEP_CHAR & Class(i).sprite1 & SEP_CHAR & Class(i).Sprite2 & SEP_CHAR & Class(i).Sprite3 & SEP_CHAR
    Next i
    Packet = Packet & END_CHAR
    
    Call SendDataTo(Index, Packet)
End Sub

!!Client !!

look for:
Code:
' :: Classes data packet ::

replace the entire package by:
Code:
' :::::::::::::::::::::::::
    ' :: Classes data packet ::
    ' :::::::::::::::::::::::::
    If LCase$(Parse(0)) = "classesdata" Then
        n = 1
        
        ' Max classes
        Max_Classes = Val(Parse(n))
        ReDim Class(0 To Max_Classes) As ClassRec
        
        n = n + 1
        
        For i = 0 To Max_Classes
            Class(i).Name = Parse(n)
            
            Class(i).HP = Val(Parse(n + 1))
            Class(i).MP = Val(Parse(n + 2))
            Class(i).SP = Val(Parse(n + 3))
            
            Class(i).STR = Val(Parse(n + 4))
            Class(i).DEF = Val(Parse(n + 5))
            Class(i).SPEED = Val(Parse(n + 6))
            Class(i).MAGI = Val(Parse(n + 7))
            Class(i).sprite1 = Val(Parse(n + 8))
            Class(i).Sprite2 = Val(Parse(n + 9))
            Class(i).Sprite3 = Val(Parse(n + 10))
            n = n + 11
        Next i
        Exit Sub
    End If

look for:
Code:
' :: New character classes data packet ::

replace the entire package by:
Code:
' :::::::::::::::::::::::::::::::::::::::
    ' :: New character classes data packet ::
    ' :::::::::::::::::::::::::::::::::::::::
    If LCase$(Parse(0)) = "newcharclasses" Then
        n = 1
        
        ' Max classes
        Max_Classes = Val(Parse(n))
        ReDim Class(0 To Max_Classes) As ClassRec
        
        n = n + 1
        
        For i = 0 To Max_Classes
            Class(i).Name = Parse(n)
            
            Class(i).HP = Val(Parse(n + 1))
            Class(i).MP = Val(Parse(n + 2))
            Class(i).SP = Val(Parse(n + 3))
            Class(i).STR = Val(Parse(n + 4))
            Class(i).DEF = Val(Parse(n + 5))
            Class(i).SPEED = Val(Parse(n + 6))
            Class(i).MAGI = Val(Parse(n + 7))
            Class(i).sprite1 = Val(Parse(n + 8))
            Class(i).Sprite2 = Val(Parse(n + 9))
            Class(i).Sprite3 = Val(Parse(n + 10))
            n = n + 11
        Next i
        
        ' Used for if the player is creating a new character
        frmNewChar.Visible = True
        frmSendGetData.Visible = False

        frmNewChar.cmbClass.Clear

        For i = 0 To Max_Classes
            frmNewChar.cmbClass.AddItem Trim$(Class(i).Name)
        Next i
            
        frmNewChar.cmbClass.ListIndex = 0
        frmNewChar.lblHP.Caption = STR(Class(0).HP)
        frmNewChar.lblMP.Caption = STR(Class(0).MP)
        frmNewChar.lblSP.Caption = STR(Class(0).SP)
    
        frmNewChar.lblSTR.Caption = STR(Class(0).STR)
        frmNewChar.lblDEF.Caption = STR(Class(0).DEF)
        frmNewChar.lblSPEED.Caption = STR(Class(0).SPEED)
        frmNewChar.lblMAGI.Caption = STR(Class(0).MAGI)
        Exit Sub
    End If

open frmnewchar
create
Picturebox (2)
Picture 1 - properties
Appearance = 0
name = Picture1
H = 32
W = 32

create within the picture1!
Picture 2 - properties
Appearance = 0
name = Picture2
autoredraw = true
autosize = true
top = 0
Left = 0
Picture = sprites.bmp

create a label:
name = Label14
Caption = 1

create a button:
name = any name

in the event click of the button add:
Code:
If Label14.Caption = "1" Then
Picture2.top = Int(Class(cmbClass.ListIndex).sprite1) * -480
Label14.Caption = "2"
Exit Sub
End If
If Label14.Caption = "2" Then
Picture2.top = Int(Class(cmbClass.ListIndex).Sprite2) * -480
Label14.Caption = "3"
Exit Sub
End If
If Label14.Caption = "3" Then
Picture2.top = Int(Class(cmbClass.ListIndex).Sprite3) * -480
Label14.Caption = "1"
Exit Sub
End If

in frmnewchar find:
Code:
cmbClass_click

add before the "end sub"
Code:
Picture2.top = Int(Class(cmbClass.ListIndex).sprite1) * -480

look:
Code:
Case MENU_STATE_ADDCHAR

replace the entire case by:
Code:
Case MENU_STATE_ADDCHAR
        Dim spritea As Integer
            frmNewChar.Visible = False
            If ConnectToServer = True Then
                Call SetStatus("Conectado, Mandando Adição De Char...")
                
                If frmNewChar.Label14.Caption = 1 Then
                spritea = Class(frmNewChar.cmbClass.ListIndex).Sprite3
                End If
                If frmNewChar.Label14.Caption = 2 Then
                spritea = Class(frmNewChar.cmbClass.ListIndex).sprite1
                End If
                If frmNewChar.Label14.Caption = 3 Then
                spritea = Class(frmNewChar.cmbClass.ListIndex).Sprite2
                End If
                
                If frmNewChar.optMale.Value = True Then
                    Call SendAddChar(frmNewChar.txtName, 0, frmNewChar.cmbClass.ListIndex, frmChars.lstChars.ListIndex + 1, spritea)
                Else
                    Call SendAddChar(frmNewChar.txtName, 1, frmNewChar.cmbClass.ListIndex, frmChars.lstChars.ListIndex + 1, spritea)
                End If
            End If

look for:
Code:
Sub SendAddChar

replace the entire sub for:
Code:
Sub SendAddChar(ByVal Name As String, ByVal Sex As Long, ByVal ClassNum As Long, ByVal Slot As Long, ByVal Sprite As Integer)
Dim Packet As String

    Packet = "addchar" & SEP_CHAR & Trim$(Name) & SEP_CHAR & Sex & SEP_CHAR & ClassNum & SEP_CHAR & Slot & SEP_CHAR & Sprite & SEP_CHAR & END_CHAR
    Call SendData(Packet)
End Sub

Final Big Grin!!!!!!

Now in class.ini:
ADD:
Code:
Sprite1= 7 'numero da sprite
Sprite2= 6  'numero da sprite
Sprite3= 8  'numero da sprite

delete:
Code:
Sprite= 6 ' seu numero

Big GrinDDDDD Big GrinDDDD
thanks,
bugs,
tips,
Here!

No More,
Mustorze.


Re: Select Sprite On Newchar "Configure In Class.ini"! - Stomach Pulser - 26-05-2008

Tip: Dont name things generic names such as 'Picture1', the typical is to use a three letter abbreviation of the control and then a name so that you know what it is.

Ex:
picSprite


Re: Select Sprite On Newchar "Configure In Class.ini"! - mustorze - 26-05-2008

ok, next tutorial already do with that.
place the code was very good Big Grin