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 ^^ '