Items that make you warp

From VbGORE Visual Basic Online RPG Engine

Feature [Item-Warping]


First, Find Public Sub User_UseInvItem(ByVal UserIndex As Integer, ByVal Slot As Byte) in GameServer.vbp Users module Add The Following <vb> Dim tpos As WorldPos Dim npos As WorldPos If ObjData.WarpMap(ObjIndex) > 0 Then If Server_LegalPos(ObjData.WarpMap(ObjIndex), ObjData.WarpX(ObjIndex), ObjData.WarpY(ObjIndex), 1) Then

User_WarpChar UserIndex, ObjData.WarpMap(ObjIndex), ObjData.WarpX(ObjIndex), ObjData.WarpY(ObjIndex), False

Else tpos.Map = ObjData.WarpMap(ObjIndex) tpos.X = ObjData.WarpX(ObjIndex) tpos.Y = ObjData.WarpY(ObjIndex) Server_ClosestLegalPos tpos, npos User_WarpChar UserIndex, npos.Map, npos.X, npos.Y, False End If End If

</vb> Next We need to get obj info in sql,
IN FileIO.bas Module Find Public Sub Load_OBJs() You may replace the whole sub with this, or just append the needed

<vb>

Do While Not DB_RS.EOF   'Loop until we reach the end of the recordset
       With TempObjData
           Log "Load_OBJs: Filling ObjData for object ID " & DB_RS!id, CodeTracker '//\\LOGLINE//\\
           .Name = Trim$(DB_RS!Name)
           .Value = Val(DB_RS!Price)
           .ClassReq = Val(DB_RS!ClassReq)
           .ObjType = Val(DB_RS!ObjType)
           .WeaponType = Val(DB_RS!WeaponType)
           .WeaponRange = Val(DB_RS!WeaponRange)
           .ProjectileRotateSpeed = Val(DB_RS!ProjectileRotateSpeed)
           .UseGrh = Val(DB_RS!UseGrh)
           .UseSfx = Val(DB_RS!UseSfx)
           .GrhIndex = Val(DB_RS!GrhIndex)
           .SpriteBody = Val(DB_RS!sprite_body)
           .SpriteWeapon = Val(DB_RS!sprite_weapon)
           .SpriteHair = Val(DB_RS!sprite_hair)
           .SpriteHead = Val(DB_RS!sprite_head)
           .SpriteWings = Val(DB_RS!sprite_wings)
           .RepHP = Val(DB_RS!replenish_hp)
           .RepMP = Val(DB_RS!replenish_mp)
           .RepSP = Val(DB_RS!replenish_sp)
           .RepHPP = Val(DB_RS!replenish_hp_percent)
           .RepMPP = Val(DB_RS!replenish_mp_percent)
           .RepSPP = Val(DB_RS!replenish_sp_percent)
           .AddStat(SID.Speed) = Val(DB_RS!stat_speed)
           .AddStat(SID.Str) = Val(DB_RS!stat_str)
           .AddStat(SID.Agi) = Val(DB_RS!stat_agi)
           .AddStat(SID.Mag) = Val(DB_RS!stat_mag)
           .AddStat(SID.DEF) = Val(DB_RS!stat_def)
           .AddStat(SID.MinHIT) = Val(DB_RS!stat_hit_min)
           .AddStat(SID.MaxHIT) = Val(DB_RS!stat_hit_max)
           .AddStat(SID.MaxHP) = Val(DB_RS!stat_hp)
           .AddStat(SID.MaxMAN) = Val(DB_RS!stat_mp)
           .AddStat(SID.MaxSTA) = Val(DB_RS!stat_sp)
           .ReqAgi = Val(DB_RS!req_agi)
           .ReqStr = Val(DB_RS!req_str)
           .ReqLvl = Val(DB_RS!req_lvl)
           .ReqMag = Val(DB_RS!req_mag)
           .Stacking = Val(DB_RS!Stacking)
           .WarpMap = Val(DB_RS!WarpMap)
           .WarpX = Val(DB_RS!WarpX)
           .WarpY = Val(DB_RS!WarpY)
           If .Stacking < 1 Then .Stacking = MaxObjAmount
       End With
       
       'Save the file
       FileNum = FreeFile
       Open ServerTempPath & "o" & DB_RS!id & ".temp" For Binary Access Write As #FileNum
           Put #FileNum, , TempObjData
       Close #FileNum
       
       'Move to the next object
       DB_RS.MoveNext
       
   Loop

</vb> The Needed things is (You may choose to paste) <vb>

           .WarpMap = Val(DB_RS!WarpMap)
           .WarpX = Val(DB_RS!WarpX)
           .WarpY = Val(DB_RS!WarpY)

</vb> Next Find Declares Module in GameServer.vbp <vb> Public Type udtObjData

   Name As String                  'Name
   ObjType As Byte                 'Type (armor, weapon, item, etc)
   ClassReq As Integer             'Class requirement
   GrhIndex As Long                'Graphic index
   SpriteBody As Integer           'Index of the body sprite to change to
   SpriteWeapon As Integer         'Index of the weapon sprite to change to
   SpriteHair As Integer           'Index of the hair sprite to change to
   SpriteHead As Integer           'Index of the head sprite to change to
   SpriteWings As Integer          'Index of the wings sprite to change to
   WeaponType As Byte              'What type of weapon, if it is a weapon
   WeaponRange As Byte             'Range of the weapon (only applicable if a ranged WeaponType)
   UseGrh As Long                  'Grh of the object when used (projectile for ranged, slash for melee, effects for use-once)
   UseSfx As Byte                  'Sound effect played when the object is used (based on the .wav's number)
   ProjectileRotateSpeed As Byte   'How fast the projectile rotates (if at all)
   Value As Long                   'Value of the object
   RepHP As Long                   'How much HP to replenish
   RepMP As Long                   'How much MP to replenish
   RepSP As Long                   'How much SP to replenish
   RepHPP As Integer               'Percentage of HP to replenish
   RepMPP As Integer               'Percentage of MP to replenish
   RepSPP As Integer               'Percentage of SP to replenish
   ReqStr As Long                  'Required strength to use the item
   ReqAgi As Long                  'Required agility
   ReqMag As Long                  'Required magic
   ReqLvl As Long                  'Required level
   Stacking As Integer             'How much the item can be stacked up (-1 for no limit, 0 for
   AddStat(FirstModStat To NumStats) As Long   'How much to add to the stat by the SID
   Pointer As Integer

End Type </vb> Append This <vb>

   WarpMap As Integer
   WarpX As Byte
   WarpY As Byte

</vb> TO The End


Next, Go to ObjData.Cls Add This <vb>

   Public Property Get WarpMap(ByVal Index As Integer) As Byte
   If Index > 0 Then
       If Index <= MaxDatas Then
           ReadyObj Index
           WarpMap = cData(ObjIndexToDataIndex(Index)).WarpMap
       End If
   End If

End Property Public Property Get WarpX(ByVal Index As Integer) As Byte

   If Index > 0 Then
       If Index <= MaxDatas Then
           ReadyObj Index
           WarpX = cData(ObjIndexToDataIndex(Index)).WarpX
       End If
   End If

End Property Public Property Get WarpY(ByVal Index As Integer) As Byte

   If Index > 0 Then
       If Index <= MaxDatas Then
           ReadyObj Index
           WarpY = cData(ObjIndexToDataIndex(Index)).WarpY
       End If
   End If

End Property </vb>


Finally, Add the following to your database.Object <vb> WarpX WarpY WarpMap </vb> Now edit the warpmap, warpx and warpy to consider which place you want to send the player to, warpmap=0 means close function

Feel Free to edit it until you think it is good, or adding some particles effect as you like ^^ '

Personal tools