Upgrade 1.0.0 to 1.0.1

From VbGORE Visual Basic Online RPG Engine

Contents

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

[edit] Fix - SavePass saving

Open GameClient.vbp.

Find:

    SavePass = CBool(Var_Get(DataPath & "Game.ini", "INIT", "SavePass"))

Replace with:

    SavePass = CBool(Val(Var_Get(DataPath & "Game.ini", "INIT", "SavePass")) * -1)

Find:

    Var_Write DataPath & "Game.ini", "INIT", "SavePass", CBool(SavePass)

Replace with:

    Var_Write DataPath & "Game.ini", "INIT", "SavePass", Val(SavePass) * -1

[edit] Fix - Data_User_Trade_BuyFromNPC

Open GameServer.vbp.

Find:

Sub Data_User_Trade_BuyFromNPC(ByRef rBuf As DataBuffer, ByVal UserIndex As Integer)

Replace the whole sub (from Sub to End Sub, including the Sub and End Sub tags) with this modified sub:

Sub Data_User_Trade_BuyFromNPC(ByRef rBuf As DataBuffer, ByVal UserIndex As Integer)
 
'*****************************************************************
'Buy an item from NPC
'<Slot(B)><Amount(I)>
'*****************************************************************
Dim AmountBought As Integer
Dim PurchaseObj As Integer
Dim NPCIndex As Integer
Dim UserSlot As Integer
Dim Amount As Integer
Dim Slot As Byte
 
    Log "Call Data_User_Trade_BuyFromNPC([" & ByteArrayToStr(rBuf.Get_Buffer) & "]," & UserIndex & ")", CodeTracker '//\\LOGLINE//\\
 
    Slot = rBuf.Get_Byte
    Amount = rBuf.Get_Integer
 
    'Set the NPC index to trade with
    NPCIndex = UserList(UserIndex).flags.TradeWithNPC
 
    'Check for invalid values
    If NPCIndex <= 0 Then Exit Sub
    If NPCIndex > LastNPC Then Exit Sub
    If Slot > NPCList(NPCIndex).NumVendItems Then Exit Sub
    If Slot <= 0 Then Exit Sub
    If UserList(UserIndex).flags.TradeWithNPC <= 0 Then Exit Sub
    If NPCList(NPCIndex).VendItems(Slot).ObjIndex <= 0 Then Exit Sub
    If NPCList(NPCIndex).VendItems(Slot).Amount = 0 Then Exit Sub
    If Amount < 0 Then Exit Sub
 
    'Check for valid locations
    If UserList(UserIndex).Pos.Map <> NPCList(NPCIndex).Pos.Map Then
        Data_Send ToIndex, UserIndex, cMessage(36).Data
        Exit Sub
    End If
    If Server_RectDistance(UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.Y, NPCList(NPCIndex).Pos.X, NPCList(NPCIndex).Pos.Y, 6, 6) = 0 Then
        Data_Send ToIndex, UserIndex, cMessage(36).Data
        Exit Sub
    End If
 
    'Set the ObjData of the item to be purchased to the PurchaseObj variable
    PurchaseObj = NPCList(NPCIndex).VendItems(Slot).ObjIndex
 
    'Check that the user has enough money
    If UserList(UserIndex).Stats.BaseStat(SID.Gold) < ObjData.Value(PurchaseObj) * Amount Then
        ConBuf.PreAllocate 5 + Len(ObjData.Name(PurchaseObj))
        ConBuf.Put_Byte DataCode.Server_Message
        ConBuf.Put_Byte 65
        ConBuf.Put_Integer Amount
        ConBuf.Put_String ObjData.Name(PurchaseObj)
        Data_Send ToIndex, UserIndex, ConBuf.Get_Buffer
        Exit Sub
    End If
 
    'Reduce the amount of items the NPC has
    If NPCList(NPCIndex).VendItems(Slot).Amount <> -1 Then
 
        'Check if there is enough
        If NPCList(NPCIndex).VendItems(Slot).Amount - Amount < 0 Then
            ConBuf.PreAllocate 7 + Len(ObjData.Name(PurchaseObj))
            ConBuf.Put_Byte DataCode.Server_Message
            ConBuf.Put_Byte 66
            ConBuf.Put_Integer Amount
            ConBuf.Put_String ObjData.Name(PurchaseObj)
            ConBuf.Put_Integer NPCList(NPCIndex).VendItems(Slot).Amount
            Data_Send ToIndex, UserIndex, ConBuf.Get_Buffer
            Exit Sub
        End If
 
        'Reduce the amount
        NPCList(NPCIndex).VendItems(Slot).Amount = NPCList(NPCIndex).VendItems(Slot).Amount - Amount
 
        'Check if the NPC has hit 0
        If NPCList(NPCIndex).VendItems(Slot).Amount = 0 Then
            NPCList(NPCIndex).VendItems(Slot).ObjIndex = 0
            User_TradeWithNPC UserIndex, NPCIndex    'Update the NPC trade page user-side
        End If
 
    End If
 
    'Give the user the objects
    AmountBought = User_GiveObj(UserIndex, PurchaseObj, Amount, True)
 
    'Take the user's money
    UserList(UserIndex).Stats.BaseStat(SID.Gold) = UserList(UserIndex).Stats.BaseStat(SID.Gold) - (ObjData.Value(PurchaseObj) * AmountBought)
 
    'Send the purchase message
    ConBuf.Put_Byte DataCode.Server_Message
    ConBuf.Put_Byte 67
    ConBuf.Put_Integer Amount
    ConBuf.Put_String ObjData.Name(PurchaseObj)
    ConBuf.Put_Long (ObjData.Value(PurchaseObj) * Amount)
    Data_Send ToIndex, UserIndex, ConBuf.Get_Buffer
 
End Sub

[edit] Change - Experimental texture compression

Open GameClient.vbp.

Find:

        Set SurfaceDB(TextureNum) = D3DX.CreateTextureFromFileEx(D3DDevice, FilePath, D3DX_DEFAULT, D3DX_DEFAULT, 0, 0, UseTextureFormat, D3DPOOL_MANAGED, D3DX_FILTER_POINT, D3DX_FILTER_NONE, &HFF000000, TexInfo, ByVal 0)

Replace with:

        Set SurfaceDB(TextureNum) = D3DX.CreateTextureFromFileEx(D3DDevice, FilePath, D3DX_DEFAULT, D3DX_DEFAULT, 0, 0, D3DFMT_DXT5, D3DPOOL_MANAGED, D3DX_FILTER_POINT, D3DX_FILTER_NONE, &HFF000000, TexInfo, ByVal 0)

Find:

        Set SurfaceDB(TextureNum) = D3DX.CreateTextureFromFileEx(D3DDevice, FilePath, SurfaceSize(TextureNum).X, SurfaceSize(TextureNum).Y, 0, 0, SurfaceSize(TextureNum).BmpFormat, D3DPOOL_MANAGED, D3DX_FILTER_POINT, D3DX_FILTER_NONE, &HFF000000, ByVal 0, ByVal 0)

Replace with:

        Set SurfaceDB(TextureNum) = D3DX.CreateTextureFromFileEx(D3DDevice, FilePath, SurfaceSize(TextureNum).X, SurfaceSize(TextureNum).Y, 0, 0, D3DFMT_DXT5, D3DPOOL_MANAGED, D3DX_FILTER_POINT, D3DX_FILTER_NONE, &HFF000000, ByVal 0, ByVal 0)

Find and delete:

        If Bit32 Then
            UseTextureFormat = D3DFMT_UNKNOWN
        Else
            UseTextureFormat = D3DFMT_A4R4G4B4
        End If

Dim UseTextureFormat As CONST_D3DFORMAT

        If Bit32 Then
            SurfaceSize(TextureNum).BmpFormat = TexInfo.Format
        Else
            SurfaceSize(TextureNum).BmpFormat = D3DFMT_A1R5G5B5
        End If

    BmpFormat As Long

            SurfaceSize(j).BmpFormat = 0

[edit] Fix - Summon Bandit mana reduction

Open GameServer.vbp.

Go to sub Skill_SummonBandit_PC in module Skills.

Find:

UserList(CasterIndex).Stats.BaseStat(SID.MinMAN) = UserList(CasterIndex).Stats.BaseStat(SID.MinMAN) - Int(UserList(CasterIndex).Stats.ModStat(SID.Mag) * Bless_Cost)

Replace with:

UserList(CasterIndex).Stats.BaseStat(SID.MinMAN) = UserList(CasterIndex).Stats.BaseStat(SID.MinMAN) - Int(UserList(CasterIndex).Stats.ModStat(SID.Mag) * SumBandit_Cost)

[edit] Fix - Freezing in User_GiveObj

Open GameServer.vbp.

Find:

If UserList(UserIndex).Object(Slot).ObjIndex < ObjData.Stacking(ObjIndex) Then Exit Do

Replace with:

If UserList(UserIndex).Object(Slot).Amount < ObjData.Stacking(ObjIndex) Then Exit Do

[edit] Change - More accurate German NPC chat translations

Open \Data\NPC Chat\german.ini.

Replace all of file's contents with:

BEGINFILE  
  
[1]  
FORMAT RANDOM  
STYLE BUBBLE  
  
SAY 10000 Ich hörte, da ist verrücktes Zeug unter diesem |Wasserfall|! Verrücktes Zeug!  
SAY 10000 Hast du mit dem kopflosem Mann gesprochen? Ich höre, daß er Hilfe benötigt! Klick ihn mal mit der |rechten Maustaste| an!  
SAY 10000 Wusstest du, dass du dein Inventar mit |Ctrl + W| anzeigen lassen kannst?  
SAY 10000 Hast du versucht, diesen |blauen Briefkasten| anzuklicken? Ich hörte, daß es Nachrichten und Gegenstände an Leute schicken kann!  
SAY 10000 Hast du ein neues Level erreicht? Verteile deine Statuspunkte indem du |Ctrl + S| drückst!  
SAY 10000 Danke das du vbGore verwendest! Guck auf die Homepage um Updates und Support zu bekommen!  
SAY 10000 Hast du überflüssige Items? |Verkaufe| sie beim NPC im westlichsten Haus indem du ihn mit der |rechten Maustaste| anklickst!  
SAY 10000 Durch einen Rechtsklick auf ein Item kannst du es bewegen oder dir Informationen über es anzeigen lassen!  
SAY 10000 Du kannst deine Schnellzugriffs Fähigkeiten ändern, indem du sie mit |Shift + links-Klick| anklickst!  
SAY 10000 |C|R|A|Z|Y| |H|A|P|P|Y| |F|U|N| |R|E|D| |T|E|X|T|!|!|!|!|!|!|  
SAY 10000 Wenn du den Server und den Client auf dem selben Rechner laufen lässt kann es zu lags kommen. Das liegt aber nicht an der engine sondern an deinem PC.  
  
!SAY hallo,hallo,he,sup,grüß_dich,servus,hi,morgen,tag  
SAY 5000 Hallo dort!   
SAY 5000 Grüß dich!  
SAY 5000 Hallo!  
SAY 5000 Hi!  
  
!SAY _du_stinkst,_hasse_dich,_idiot,_dummkopf,_arsch,_arschloch  
SAY 5000 Hey, Das ist ungerecht! :'(  
SAY 5000 Argh, sei nett! :'(  
SAY 5000 :'(  
  
[2]  
FORMAT RANDOM  
STYLE BUBBLE  
  
!CLEAR  
!HPMORETHAN 61  
SAY 17900 [EMPTY]  
SAY 8900 [EMPTY]  
SAY 6300 [EMPTY]  
SAY 27800 [EMPTY]  
SAY 7200 [EMPTY]  
SAY 20000 Fangt den Eindringling!  
SAY 16000 Er ist zu stark für uns!  
SAY 11000 Tötet Ihn!!!  
  
!CLEAR  
!HPLESSTHAN 30  
SAY 6800 [EMPTY]  
SAY 16000 Wir haben ihn schon fast!   
SAY 11000 Mach dich bereit zu sterben!  
  
!CLEAR  
!HPLESSTHAN 60  
!HPMORETHAN 31  
SAY 17900 [EMPTY]  
SAY 8900 [EMPTY]  
SAY 6300 [EMPTY]  
SAY 27800 [EMPTY]  
SAY 7200 [EMPTY]  
SAY 11000 Ha! So ists richtig! Spüre unsere Klingen!  
SAY 20000 Du fühlst den Schmerz, oder?!  
SAY 16000 Du wirst uns nie alle töten!  
SAY 11000 Du bist keine Herausforderung für uns!  
  
[3]  
FORMAT LINEAR  
STYLE BOTH  
  
SAY 10000 Hey du. Kannste mir mal helfen?  
SAY 10000 Ich gebe dir eine nette Belohnung!

[edit] Fix - Incorrect inventory slot updating on mailing

Open GameServer.vbp.

Go to sub Data_Server_MailCompose in module TCP.

At the bottom of the sub, find:

            User_UpdateInv False, UserIndex, Slot

Change to:

            User_UpdateInv False, UserIndex, Slots(i)

[edit] Fix - Redundant mail updating

Open GameServer.vbp.

Find:

                If .Equipped = 1 Then User_RemoveInvItem UserIndex, Slots(i)

Change to:

                If .Equipped = 1 Then User_RemoveInvItem UserIndex, Slots(i), False

[edit] Fix - Warcrying summons

Open GameServer.vbp.

Find:

                        If NPCList(LoopC).Hostile Then

After, add:

                            If NPCList(LoopC).OwnerIndex = 0 Then

Find:

    Next LoopC

Before, add:

       End If

[edit] Fix - ToolFreeNumber

Open ToolFreeNumber.vbp.

Find:

        If LenB(Var_Get(Data2Path & "GrhRaw.txt", "A", "Grh" & i)) <> 0 Then

Replace with:

        If LenB(Var_Get(Data2Path & "GrhRaw.txt", "A", "Grh" & i)) = 0 Then
Personal tools