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.

Fix - SavePass saving

Open GameClient.vbp.

Find:

<vb>

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

</vb>

Replace with:

<vb>

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

</vb>

Find:

<vb>

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

</vb>

Replace with:

<vb>

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

</vb>

Fix - Data_User_Trade_BuyFromNPC

Open GameServer.vbp.

Find:

<vb> Sub Data_User_Trade_BuyFromNPC(ByRef rBuf As DataBuffer, ByVal UserIndex As Integer) </vb>

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

<vb> 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 </vb>

Change - Experimental texture compression

Open GameClient.vbp.

Find:

<vb>

       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)

</vb>

Replace with:

<vb>

       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)

</vb>

Find:

<vb>

       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)

</vb>

Replace with:

<vb>

       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)

</vb>

Find and delete:

<vb>

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

</vb>
<vb> Dim UseTextureFormat As CONST_D3DFORMAT </vb>
<vb>

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

</vb>
<vb>

   BmpFormat As Long

</vb>
<vb>

           SurfaceSize(j).BmpFormat = 0

</vb>

Fix - Summon Bandit mana reduction

Open GameServer.vbp.

Go to sub Skill_SummonBandit_PC in module Skills.

Find:

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

Replace with:

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

Fix - Freezing in User_GiveObj

Open GameServer.vbp.

Find:

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

Replace with:

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

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!

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:

<vb>

           User_UpdateInv False, UserIndex, Slot

</vb>

Change to:

<vb>

           User_UpdateInv False, UserIndex, Slots(i)

</vb>

Fix - Redundant mail updating

Open GameServer.vbp.

Find:

<vb>

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

</vb>

Change to:

<vb>

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

</vb>

Fix - Warcrying summons

Open GameServer.vbp.

Find:

<vb>

                       If NPCList(LoopC).Hostile Then

</vb>

After, add:

<vb>

                           If NPCList(LoopC).OwnerIndex = 0 Then

</vb>

Find:

<vb>

   Next LoopC

</vb>

Before, add:

<vb>

      End If

</vb>

Fix - ToolFreeNumber

Open ToolFreeNumber.vbp.

Find:

<vb>

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

</vb>

Replace with:

<vb>

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

</vb>

Personal tools