Upgrade 1.0.10 to 1.0.11

From VbGORE Visual Basic Online RPG Engine

Contents

This guide will lead you through how to upgrade Version 1.0.10 to Version 1.0.11. For help, please refer to the How to upgrade article. It is highly recommended you read it before ever upgrading.

Fix - Large Grh support

Open GameClient.vbp.

Find:

<vb> Dim ScreenX As Byte Dim ScreenY As Byte </vb>

Replace with:

<vb> Dim ScreenX As Long Dim ScreenY As Long </vb>

Add - Small client optimizations

Open GameClient.vbp.

Find:

<vb> Dim ChrID() As Integer </vb>

Before, add:

<vb> Dim LightOffset As Long </vb>

Find:

<vb>

   For Layer = 1 To 3

</vb>

After, add:

<vb>

       LightOffset = ((Layer - 1) * 4) + 1

</vb>

Find:

<vb>

               'Check if we have to draw with a shadow or not (slighty changes because we have to animate on the shadow, not the main render)
               If MapData(.TileX, .TileY).Shadow(Layer) = 1 Then
                   Engine_Render_Grh MapData(.TileX, .TileY).Graphic(Layer), .PixelPosX + PixelOffsetX, .PixelPosY + PixelOffsetY, 0, 1, True, ShadowColor, ShadowColor, ShadowColor, ShadowColor, 1
                   Engine_Render_Grh MapData(.TileX, .TileY).Graphic(Layer), .PixelPosX + PixelOffsetX, .PixelPosY + PixelOffsetY, 0, 0, True, MapData(.TileX, .TileY).Light(((Layer - 1) * 4) + 1), MapData(.TileX, .TileY).Light(((Layer - 1) * 4) + 2), MapData(.TileX, .TileY).Light(((Layer - 1) * 4) + 3), MapData(.TileX, .TileY).Light(((Layer - 1) * 4) + 4)
               Else
                   Engine_Render_Grh MapData(.TileX, .TileY).Graphic(Layer), .PixelPosX + PixelOffsetX, .PixelPosY + PixelOffsetY, 0, 1, True, MapData(.TileX, .TileY).Light(((Layer - 1) * 4) + 1), MapData(.TileX, .TileY).Light(((Layer - 1) * 4) + 2), MapData(.TileX, .TileY).Light(((Layer - 1) * 4) + 3), MapData(.TileX, .TileY).Light(((Layer - 1) * 4) + 4)
               End If

</vb>

Replace with:

<vb>

               'Check if we have to draw with a shadow or not (slighty changes because we have to animate on the shadow, not the main render)
               If MapData(.TileX, .TileY).Shadow(Layer) = 1 Then
                   Engine_Render_Grh MapData(.TileX, .TileY).Graphic(Layer), .PixelPosX + PixelOffsetX, .PixelPosY + PixelOffsetY, 0, 1, True, ShadowColor, ShadowColor, ShadowColor, ShadowColor, 1
                   Engine_Render_Grh MapData(.TileX, .TileY).Graphic(Layer), .PixelPosX + PixelOffsetX, .PixelPosY + PixelOffsetY, 0, 0, True, MapData(.TileX, .TileY).Light(LightOffset), MapData(.TileX, .TileY).Light(LightOffset + 1), MapData(.TileX, .TileY).Light(LightOffset + 2), MapData(.TileX, .TileY).Light(LightOffset + 3)
               Else
                   Engine_Render_Grh MapData(.TileX, .TileY).Graphic(Layer), .PixelPosX + PixelOffsetX, .PixelPosY + PixelOffsetY, 0, 1, True, MapData(.TileX, .TileY).Light(LightOffset), MapData(.TileX, .TileY).Light(LightOffset + 1), MapData(.TileX, .TileY).Light(LightOffset + 2), MapData(.TileX, .TileY).Light(LightOffset + 3)
               End If

</vb>

Find:

<vb>

   For Layer = 4 To 6

</vb>

After, add:

<vb>

       LightOffset = ((Layer - 1) * 4) + 1

</vb>

Find:

<vb>

               If MapData(.TileX, .TileY).Shadow(Layer) = 1 Then
                   Engine_Render_Grh MapData(.TileX, .TileY).Graphic(Layer), .PixelPosX + PixelOffsetX, .PixelPosY + PixelOffsetY, 0, 1, True, ShadowColor, ShadowColor, ShadowColor, ShadowColor, 1
                   Engine_Render_Grh MapData(.TileX, .TileY).Graphic(Layer), .PixelPosX + PixelOffsetX, .PixelPosY + PixelOffsetY, 0, 0, True, MapData(.TileX, .TileY).Light(((Layer - 1) * 4) + 1), MapData(.TileX, .TileY).Light(((Layer - 1) * 4) + 2), MapData(.TileX, .TileY).Light(((Layer - 1) * 4) + 3), MapData(.TileX, .TileY).Light(((Layer - 1) * 4) + 4)
               Else
                   Engine_Render_Grh MapData(.TileX, .TileY).Graphic(Layer), .PixelPosX + PixelOffsetX, .PixelPosY + PixelOffsetY, 0, 1, True, MapData(.TileX, .TileY).Light(((Layer - 1) * 4) + 1), MapData(.TileX, .TileY).Light(((Layer - 1) * 4) + 2), MapData(.TileX, .TileY).Light(((Layer - 1) * 4) + 3), MapData(.TileX, .TileY).Light(((Layer - 1) * 4) + 4)
               End If

</vb>

Replace with:

<vb>

               If MapData(.TileX, .TileY).Shadow(Layer) = 1 Then
                   Engine_Render_Grh MapData(.TileX, .TileY).Graphic(Layer), .PixelPosX + PixelOffsetX, .PixelPosY + PixelOffsetY, 0, 1, True, ShadowColor, ShadowColor, ShadowColor, ShadowColor, 1
                   Engine_Render_Grh MapData(.TileX, .TileY).Graphic(Layer), .PixelPosX + PixelOffsetX, .PixelPosY + PixelOffsetY, 0, 0, True, MapData(.TileX, .TileY).Light(LightOffset), MapData(.TileX, .TileY).Light(LightOffset + 1), MapData(.TileX, .TileY).Light(LightOffset + 2), MapData(.TileX, .TileY).Light(LightOffset + 3)
               Else
                   Engine_Render_Grh MapData(.TileX, .TileY).Graphic(Layer), .PixelPosX + PixelOffsetX, .PixelPosY + PixelOffsetY, 0, 1, True, MapData(.TileX, .TileY).Light(LightOffset), MapData(.TileX, .TileY).Light(LightOffset + 1), MapData(.TileX, .TileY).Light(LightOffset + 2), MapData(.TileX, .TileY).Light(LightOffset + 3)
               End If

</vb>

Find:

<vb> Public TileBufferSize As Integer </vb>

After, add:

<vb> Public TileBufferOffset As Long 'Used to calculate offset value in certain cases </vb>

Find:

<vb>

   If TileBufferSize < 2 Then TileBufferSize = 2

</vb>

After, add:

<vb>

   'Cache the TileBufferOffset value to prevent always having to calculate it on the fly
   TileBufferOffset = ((10 - TileBufferSize) * 32)

</vb>

Find every instance of:

<vb>

+ ((10 - TileBufferSize) * 32)

</vb>

Replace with:

<vb>

+ TileBufferOffset

</vb>

Fix - Objects in quests

Open GameServer.vbp.

Find:

<vb>

   End If
   '*** Quest was completed! ***

</vb>

Before, add:

<vb>

       'If we made it through the whole loop without finding a slot (that is, if the slot = MAX_INVENTORY_SLOTS + 1) then
       'the object was not found in the user's inventory at all, so give them the missing error and abort
       If Slot = MAX_INVENTORY_SLOTS + 1 Then
           Quest_SayIncomplete UserIndex, NPCIndex
           Exit Sub
       End If

</vb>

Fix - Character icon updating

Open GameServer.vbp.

Find:

<vb>

   '*** Status icons ***
   If UserList(UserIndex).Skills.Bless > 0 Then
       ConBuf.Allocate 4
       ConBuf.Put_Byte DataCode.Server_IconBlessed
       ConBuf.Put_Byte 1
       ConBuf.Put_Integer UserList(UserIndex).Char.CharIndex
   End If
   If UserList(UserIndex).Skills.Protect > 0 Then
       ConBuf.Allocate 4
       ConBuf.Put_Byte DataCode.Server_IconProtected
       ConBuf.Put_Byte 1
       ConBuf.Put_Integer UserList(UserIndex).Char.CharIndex
   End If
   If UserList(UserIndex).Skills.IronSkin > 0 Then
       ConBuf.Allocate 4
       ConBuf.Put_Byte DataCode.Server_IconIronSkin
       ConBuf.Put_Byte 1
       ConBuf.Put_Integer UserList(UserIndex).Char.CharIndex
   End If
   If UserList(UserIndex).Skills.Strengthen > 0 Then
       ConBuf.Allocate 4
       ConBuf.Put_Byte DataCode.Server_IconStrengthened
       ConBuf.Put_Byte 1
       ConBuf.Put_Integer UserList(UserIndex).Char.CharIndex
   End If
   If UserList(UserIndex).Skills.WarCurse > 0 Then
       ConBuf.Allocate 4
       ConBuf.Put_Byte DataCode.Server_IconWarCursed
       ConBuf.Put_Byte 1
       ConBuf.Put_Integer UserList(UserIndex).Char.CharIndex
   End If

</vb>

Replace with:

<vb>

   '*** Status icons ***
   With UserList(UserIndex)
       If .Skills.Bless > 0 Then
           ConBuf.Allocate 4
           ConBuf.Put_Byte DataCode.Server_IconBlessed
           ConBuf.Put_Byte 1
           ConBuf.Put_Integer .Char.CharIndex
       End If
       If .Skills.Protect > 0 Then
           ConBuf.Allocate 4
           ConBuf.Put_Byte DataCode.Server_IconProtected
           ConBuf.Put_Byte 1
           ConBuf.Put_Integer .Char.CharIndex
       End If
       If .Skills.IronSkin > 0 Then
           ConBuf.Allocate 4
           ConBuf.Put_Byte DataCode.Server_IconIronSkin
           ConBuf.Put_Byte 1
           ConBuf.Put_Integer .Char.CharIndex
       End If
       If .Skills.Strengthen > 0 Then
           ConBuf.Allocate 4
           ConBuf.Put_Byte DataCode.Server_IconStrengthened
           ConBuf.Put_Byte 1
           ConBuf.Put_Integer .Char.CharIndex
       End If
       If .Skills.WarCurse > 0 Then
           ConBuf.Allocate 4
           ConBuf.Put_Byte DataCode.Server_IconWarCursed
           ConBuf.Put_Byte 1
           ConBuf.Put_Integer .Char.CharIndex
       End If
   End With

</vb>

Find:

<vb>

   'Send the NPC
   If SendPacket Then Data_Send sndRoute, sndIndex, ConBuf.Get_Buffer, Map

</vb>

Before, add:

<vb>

   '*** Status icons ***
   With NPCList(NPCIndex)
       If .Skills.Bless > 0 Then
           ConBuf.Allocate 4
           ConBuf.Put_Byte DataCode.Server_IconBlessed
           ConBuf.Put_Byte 1
           ConBuf.Put_Integer .Char.CharIndex
       End If
       If .Skills.Protect > 0 Then
           ConBuf.Allocate 4
           ConBuf.Put_Byte DataCode.Server_IconProtected
           ConBuf.Put_Byte 1
           ConBuf.Put_Integer .Char.CharIndex
       End If
       If .Skills.IronSkin > 0 Then
           ConBuf.Allocate 4
           ConBuf.Put_Byte DataCode.Server_IconIronSkin
           ConBuf.Put_Byte 1
           ConBuf.Put_Integer .Char.CharIndex
       End If
       If .Skills.Strengthen > 0 Then
           ConBuf.Allocate 4
           ConBuf.Put_Byte DataCode.Server_IconStrengthened
           ConBuf.Put_Byte 1
           ConBuf.Put_Integer .Char.CharIndex
       End If
       If .Skills.WarCurse > 0 Then
           ConBuf.Allocate 4
           ConBuf.Put_Byte DataCode.Server_IconWarCursed
           ConBuf.Put_Byte 1
           ConBuf.Put_Integer .Char.CharIndex
       End If
   End With

</vb>

Add - Stat raise packet security

Open GameServer.vbp.

Find:

<vb>

   'Raise the stat if possible

</vb>

Before, add:

<vb>

   'Check for a valid class to add
   Select Case StatID
       'Invalid stats
       Case SID.DEF, SID.ELU, SID.ELV, SID.EXP, SID.Gold, SID.MaxMAN, SID.MaxSTA, SID.MaxHIT, _
           SID.MaxHP, SID.MinMAN, SID.MinSTA, SID.MinHIT, SID.MinHP, SID.Points, SID.Speed
           Exit Sub
   
   End Select

</vb>

Fix - ToolGrhRawAssistant

Replace your copy of ToolGrhRawAssistant with that from v1.0.11.

Fix - Major rectangle render optimization

Open GameClient.vbp.

Find:

<vb>

   If Degrees <> 0 Or Degrees <> 360 Then

</vb>

Replace with:

<vb>

   If Degrees <> 0 And Degrees <> 360 Then

</vb>

Repeat the process for EditorMap.vbp.

Fix - NPC kill requirement crashing server loading

Open GameServer.vbp.

Find:

<vb> Public Sub Load_NPC_Names() </vb>

Replace whole sub with:

<vb> Public Sub Load_NPC_Names()

'***************************************************************** 'Loads the names of NPCs (only if they are used in a quest) '***************************************************************** Dim i As Long

   'Grab all of the indexes of NPCs used in quests
   DB_RS.Open "SELECT finish_req_killnpc FROM quests ORDER BY finish_req_killnpc DESC", DB_Conn, adOpenStatic, adLockOptimistic
   If Val(DB_RS(0)) = 0 Then
       
       'No NPCs used for quests, abort because we have no names we need
       DB_RS.Close
       Exit Sub
       
   End If
   
   'Resize the NPC name array by the highest index used (remember, we're ordered descending, so this is the highest index)
   ReDim NPCName(1 To DB_RS(0))
   'Loop through all the IDs
   Do While Not DB_RS.EOF  'Loop until we reach the end of the recordset
       
       'If the ID is used, mark it with ".", so we can get the real name later
       If Val(DB_RS(0)) > 0 Then NPCName(Val(DB_RS(0))) = "."
       
       'Move to the next record
       DB_RS.MoveNext
       
   Loop
   
   DB_RS.Close
       
   'Fill in the values
   For i = 1 To UBound(NPCName)
       
       'A "." states we need to get the name
       If NPCName(i) = "." Then
           
           'Get the name
           DB_RS.Open "SELECT name FROM npcs WHERE id=" & i, DB_Conn, adOpenStatic, adLockOptimistic
           NPCName(i) = Trim$(DB_RS(0))
           DB_RS.Close
       
       End If
       
   Next i
       

End Sub </vb>

Fix - Removing damage text on map switch

Open GameClient.vbp.

Find:

<vb>

       'Erase characters
       LastChar = 0
       Erase CharList

</vb>

After, add:

<vb>

       'Erase damage
       LastDamage = 0
       Erase DamageList

</vb>

Fix - Quest log scaling down

Open GameClient.vbp.

Find:

<vb>

               QuestInfo(Byt1).Name = vbNullString

</vb>

After, add:

<vb>

               Lng1 = QuestInfoUBound
               Do
                   If Lng1 = 0 Then Exit Do
                   If QuestInfo(Lng1).Name <> vbNullString Then Exit Do
                   Lng1 = Lng1 - 1
               Loop
               If Lng1 = 0 Then
                   Erase QuestInfo
                   QuestInfoUBound = 0
               Else
                   ReDim Preserve QuestInfo(1 To Lng1)
                   QuestInfoUBound = Lng1
               End If

</vb>

Personal tools