diff --git a/Codigo/Acciones.bas b/Codigo/Acciones.bas index 10f3c527..d3853cc8 100644 --- a/Codigo/Acciones.bas +++ b/Codigo/Acciones.bas @@ -97,244 +97,60 @@ PuedeUsarObjeto_Err: Call TraceError(Err.Number, Err.Description, "Acciones.PuedeUsarObjeto", Erl) End Function -Public Sub CompletarAccionFin(ByVal UserIndex As Integer) - On Error GoTo CompletarAccionFin_Err +Public Sub EndProgrammedAction(ByVal UserIndex As Integer) + On Error GoTo EndProgrammedAction_Err Dim obj As t_ObjData Dim Slot As Byte - Select Case UserList(UserIndex).Accion.TipoAccion - Case e_AccionBarra.Runa - obj = ObjData(UserList(UserIndex).Accion.RunaObj) - Slot = UserList(UserIndex).Accion.ObjSlot - Select Case obj.TipoRuna - Case e_RuneType.ReturnHome 'lleva a la ciudad de origen vivo o muerto - Dim DeDonde As t_CityWorldPos - Dim Map As Integer - Dim x As Byte - Dim y As Byte - If UserList(UserIndex).flags.Muerto = 0 Then - Select Case UserList(UserIndex).Hogar - Case e_Ciudad.cUllathorpe - DeDonde = CityUllathorpe - Case e_Ciudad.cNix - DeDonde = CityNix - Case e_Ciudad.cBanderbill - DeDonde = CityBanderbill - Case e_Ciudad.cLindos 'Vamos a tener que ir por todo el desierto... uff! - DeDonde = CityLindos - Case e_Ciudad.cArghal - DeDonde = CityArghal - Case e_Ciudad.cForgat - DeDonde = CityForgat - Case e_Ciudad.cEldoria - DeDonde = CityEldoria - Case e_Ciudad.cArkhein - DeDonde = CityArkhein - Case e_Ciudad.cPenthar - DeDonde = CityPenthar - Case Else - DeDonde = CityUllathorpe - End Select - Map = DeDonde.Map - x = DeDonde.x - y = DeDonde.y - Else - If MapInfo(UserList(UserIndex).pos.Map).ResuCiudad <> 0 Then - Select Case MapInfo(UserList(UserIndex).pos.Map).ResuCiudad - Case e_Ciudad.cUllathorpe - DeDonde = CityUllathorpe - Case e_Ciudad.cNix - DeDonde = CityNix - Case e_Ciudad.cBanderbill - DeDonde = CityBanderbill - Case e_Ciudad.cLindos - DeDonde = CityLindos - Case e_Ciudad.cArghal - DeDonde = CityArghal - Case e_Ciudad.cForgat - DeDonde = CityForgat - Case e_Ciudad.cArkhein - DeDonde = CityArkhein - Case e_Ciudad.cEldoria - DeDonde = CityEldoria - Case e_Ciudad.cPenthar - DeDonde = CityPenthar - Case Else - DeDonde = CityUllathorpe - End Select - Else - Select Case UserList(UserIndex).Hogar - Case e_Ciudad.cUllathorpe - DeDonde = CityUllathorpe - Case e_Ciudad.cNix - DeDonde = CityNix - Case e_Ciudad.cBanderbill - DeDonde = CityBanderbill - Case e_Ciudad.cLindos - DeDonde = CityLindos - Case e_Ciudad.cArghal - DeDonde = CityArghal - Case e_Ciudad.cForgat - DeDonde = CityForgat - Case e_Ciudad.cArkhein - DeDonde = CityArkhein - Case e_Ciudad.cEldoria - DeDonde = CityEldoria - Case e_Ciudad.cPenthar - DeDonde = CityPenthar - Case Else - DeDonde = CityUllathorpe - End Select + With UserList(UserIndex) + Select Case .Accion.TipoAccion + Case e_AccionBarra.Runa + obj = ObjData(.Accion.RunaObj) + Slot = .Accion.ObjSlot + Select Case obj.TipoRuna + Case e_RuneType.ReturnHome + Call HomeArrival(UserIndex) + Case e_RuneType.MesonSafePassage + If .pos.Map = MAP_MESON_HOSTIGADO Or .pos.Map = MAP_MESON_HOSTIGADO_TRADING_ZONE Then + Call WriteLocaleMsg(UserIndex, MSG_NOT_USABLE_INSIDE_MESON, e_FontTypeNames.FONTTYPE_INFO) + Exit Sub End If - Map = DeDonde.MapaResu - x = DeDonde.ResuX - y = DeDonde.ResuY - Dim Resu As Boolean - Resu = True - End If - Call FindLegalPos(UserIndex, Map, x, y) - Call WarpUserChar(UserIndex, Map, x, y, True) - 'Msg1065= Has regresado a tu ciudad de origen. - Call WriteLocaleMsg(UserIndex, 1065, e_FontTypeNames.FONTTYPE_WARNING) - 'Call WriteFlashScreen(UserIndex, &HA4FFFF, 150, True) - If UserList(UserIndex).flags.Navegando = 1 Then - Dim barca As t_ObjData - barca = ObjData(UserList(UserIndex).invent.EquippedShipObjIndex) - Call DoNavega(UserIndex, barca, UserList(UserIndex).invent.EquippedShipSlot) - End If - If Resu Then - UserList(UserIndex).Counters.TimerBarra = 5 - Call SendData(SendTarget.ToPCArea, UserIndex, PrepareMessageParticleFX(UserList(UserIndex).Char.charindex, e_ParticleEffects.Resucitar, UserList( _ - UserIndex).Counters.TimerBarra, False)) - Call SendData(SendTarget.ToPCArea, UserIndex, PrepareMessageBarFx(UserList(UserIndex).Char.charindex, UserList(UserIndex).Counters.TimerBarra, _ - e_AccionBarra.Resucitar)) - UserList(UserIndex).Accion.AccionPendiente = True - UserList(UserIndex).Accion.Particula = e_ParticleEffects.Resucitar - UserList(UserIndex).Accion.TipoAccion = e_AccionBarra.Resucitar - Call SendData(SendTarget.ToPCArea, UserIndex, PrepareMessagePlayWave("104", UserList(UserIndex).pos.x, UserList(UserIndex).pos.y)) - 'Msg82=El Cura lanza unas palabras al aire. Comienzas a sentir como tu cuerpo se vuelve a formar... - Call WriteLocaleMsg(UserIndex, 82, e_FontTypeNames.FONTTYPE_INFOIAO) - End If - If Not Resu Then - UserList(UserIndex).Accion.AccionPendiente = False - UserList(UserIndex).Accion.Particula = 0 - UserList(UserIndex).Accion.TipoAccion = e_AccionBarra.CancelarAccion - End If - UserList(UserIndex).Accion.HechizoPendiente = 0 - UserList(UserIndex).Accion.RunaObj = 0 - UserList(UserIndex).Accion.ObjSlot = 0 - Case e_RuneType.Escape - Map = obj.HastaMap - x = obj.HastaX - y = obj.HastaY - If obj.DesdeMap = 0 Then - Call FindLegalPos(UserIndex, Map, x, y) - Call WarpUserChar(UserIndex, Map, x, y, True) - 'Msg1066= Te has teletransportado por el mundo. - Call WriteLocaleMsg(UserIndex, 1066, e_FontTypeNames.FONTTYPE_WARNING) + If obj.HastaMap <> MAP_MESON_HOSTIGADO Then + Call WriteLocaleMsg(UserIndex, MSG_INVALID_RUNE, e_FontTypeNames.FONTTYPE_INFO) + Exit Sub + End If + If Not IsValidMapPosition(obj.HastaMap, obj.HastaX, obj.HastaY) Then + Call WriteLocaleMsg(UserIndex, MSG_INVALID_RUNE, e_FontTypeNames.FONTTYPE_INFO) + Exit Sub + End If + .flags.ReturnPos = .pos + Call WarpUserChar(UserIndex, obj.HastaMap, obj.HastaX, obj.HastaY, True) + Call WriteLocaleMsg(UserIndex, MSG_SUCCESFULLY_TELEPORTED, e_FontTypeNames.FONTTYPE_WARNING) + Case e_RuneType.FastTravel + If .pos.Map <> obj.DesdeMap Then + Call WriteLocaleMsg(UserIndex, MSG_INVALID_FAST_TRAVEL_MAP_ORIGIN, e_FontTypeNames.FONTTYPE_WARNING) + End If + If Not IsValidMapPosition(obj.HastaMap, obj.HastaX, obj.HastaY) Then + Call WriteLocaleMsg(UserIndex, MSG_INVALID_RUNE, e_FontTypeNames.FONTTYPE_INFO) + Exit Sub + End If + Call WarpUserChar(UserIndex, obj.HastaMap, obj.HastaX, obj.HastaY, True) + Call WriteLocaleMsg(UserIndex, MSG_SUCCESFULLY_TELEPORTED, e_FontTypeNames.FONTTYPE_WARNING) Call QuitarUserInvItem(UserIndex, Slot, 1) Call UpdateUserInv(False, UserIndex, Slot) - Else - If UserList(UserIndex).pos.Map <> obj.DesdeMap Then - 'Msg1067= Esta runa no puede ser usada desde aquí. - Call WriteLocaleMsg(UserIndex, 1067, e_FontTypeNames.FONTTYPE_INFO) - Else - Call QuitarUserInvItem(UserIndex, Slot, 1) - Call UpdateUserInv(False, UserIndex, Slot) - Call FindLegalPos(UserIndex, Map, x, y) - Call WarpUserChar(UserIndex, Map, x, y, True) - 'Msg1068= Te has teletransportado por el mundo. - Call WriteLocaleMsg(UserIndex, 1068, e_FontTypeNames.FONTTYPE_WARNING) - End If - End If - UserList(UserIndex).Accion.Particula = 0 - UserList(UserIndex).Accion.TipoAccion = e_AccionBarra.CancelarAccion - UserList(UserIndex).Accion.HechizoPendiente = 0 - UserList(UserIndex).Accion.RunaObj = 0 - UserList(UserIndex).Accion.ObjSlot = 0 - UserList(UserIndex).Accion.AccionPendiente = False - Case e_RuneType.MesonSafePassage - If UserList(UserIndex).pos.Map = MAP_MESON_HOSTIGADO Or UserList(UserIndex).pos.Map = MAP_MESON_HOSTIGADO_TRADING_ZONE Then - 'mensaje de error de "no puedes usar la runa estando en el meson" - Call WriteLocaleMsg(UserIndex, 2081, e_FontTypeNames.FONTTYPE_INFO) - Exit Sub - End If - If obj.HastaMap <> MAP_MESON_HOSTIGADO Then - 'mensaje de error de runa invalida, hay algo mal dateado llamar a un gm o avisar a soporte - Call WriteLocaleMsg(UserIndex, 2080, e_FontTypeNames.FONTTYPE_INFO) - Exit Sub - End If - UserList(UserIndex).flags.ReturnPos = UserList(UserIndex).pos - Map = obj.HastaMap - x = obj.HastaX - y = obj.HastaY - Call WarpUserChar(UserIndex, Map, x, y, True) - 'Msg1066= Te has teletransportado por el mundo. - Call WriteLocaleMsg(UserIndex, 1066, e_FontTypeNames.FONTTYPE_WARNING) - UserList(UserIndex).Accion.Particula = 0 - UserList(UserIndex).Accion.TipoAccion = e_AccionBarra.CancelarAccion - UserList(UserIndex).Accion.HechizoPendiente = 0 - UserList(UserIndex).Accion.RunaObj = 0 - UserList(UserIndex).Accion.ObjSlot = 0 - UserList(UserIndex).Accion.AccionPendiente = False - End Select - Case e_AccionBarra.Hogar - Call HomeArrival(UserIndex) - UserList(UserIndex).Accion.AccionPendiente = False - UserList(UserIndex).Accion.Particula = 0 - UserList(UserIndex).Accion.TipoAccion = e_AccionBarra.CancelarAccion - Case e_AccionBarra.Intermundia - If UserList(UserIndex).flags.Muerto = 0 Then - Dim uh As Integer - Dim Mapaf As Integer - Dim Xf As Integer - Dim Yf As Integer - uh = UserList(UserIndex).Accion.HechizoPendiente - Mapaf = Hechizos(uh).TeleportXMap - Xf = Hechizos(uh).TeleportXX - Yf = Hechizos(uh).TeleportXY - Call SendData(SendTarget.ToPCArea, UserIndex, PrepareMessagePlayWave(Hechizos(uh).wav, UserList(UserIndex).flags.TargetX, UserList(UserIndex).flags.TargetY)) 'Esta linea faltaba. Pablo (ToxicWaste) - 'Msg1069= ¡Has abierto la puerta a intermundia! - Call WriteLocaleMsg(UserIndex, 1069, e_FontTypeNames.FONTTYPE_INFO) - Call SendData(SendTarget.ToPCArea, UserIndex, PrepareMessageParticleFX(UserList(UserIndex).Char.charindex, e_GraphicEffects.Runa, -1, True)) - UserList(UserIndex).flags.Portal = 10 - UserList(UserIndex).flags.PortalMDestino = Mapaf - UserList(UserIndex).flags.PortalYDestino = Xf - UserList(UserIndex).flags.PortalXDestino = Yf - Dim Mapa As Integer - Mapa = UserList(UserIndex).flags.PortalM - x = UserList(UserIndex).flags.PortalX - y = UserList(UserIndex).flags.PortalY - MapData(Mapa, x, y).Particula = e_ParticleEffects.HaloGreen - MapData(Mapa, x, y).TimeParticula = -1 - MapData(Mapa, x, y).TileExit.Map = UserList(UserIndex).flags.PortalMDestino - MapData(Mapa, x, y).TileExit.x = UserList(UserIndex).flags.PortalXDestino - MapData(Mapa, x, y).TileExit.y = UserList(UserIndex).flags.PortalYDestino - Call SendData(SendTarget.toMap, UserList(UserIndex).flags.PortalM, PrepareMessageParticleFXToFloor(x, y, e_ParticleEffects.HaloGreen, -1)) - Call SendData(SendTarget.toMap, UserList(UserIndex).flags.PortalM, PrepareMessageLightFXToFloor(x, y, &HFF80C0, 105)) - End If - UserList(UserIndex).Accion.Particula = 0 - UserList(UserIndex).Accion.TipoAccion = e_AccionBarra.CancelarAccion - UserList(UserIndex).Accion.HechizoPendiente = 0 - UserList(UserIndex).Accion.RunaObj = 0 - UserList(UserIndex).Accion.ObjSlot = 0 - UserList(UserIndex).Accion.AccionPendiente = False - ' - Case e_AccionBarra.Resucitar - ' Msg585=¡Has sido resucitado! - Call WriteLocaleMsg(UserIndex, 585, e_FontTypeNames.FONTTYPE_INFO) - Call SendData(SendTarget.ToPCArea, UserIndex, PrepareMessageParticleFX(UserList(UserIndex).Char.charindex, e_ParticleEffects.Resucitar, 250, True)) - Call SendData(SendTarget.ToPCArea, UserIndex, PrepareMessagePlayWave("117", UserList(UserIndex).pos.x, UserList(UserIndex).pos.y)) - Call RevivirUsuario(UserIndex, True) - UserList(UserIndex).Accion.Particula = 0 - UserList(UserIndex).Accion.TipoAccion = e_AccionBarra.CancelarAccion - UserList(UserIndex).Accion.HechizoPendiente = 0 - UserList(UserIndex).Accion.RunaObj = 0 - UserList(UserIndex).Accion.ObjSlot = 0 - UserList(UserIndex).Accion.AccionPendiente = False - End Select + End Select + Case e_AccionBarra.Hogar + Call HomeArrival(UserIndex) + End Select + .Accion.Particula = 0 + .Accion.TipoAccion = e_AccionBarra.CancelarAccion + .Accion.HechizoPendiente = 0 + .Accion.RunaObj = 0 + .Accion.ObjSlot = 0 + .Accion.AccionPendiente = False + End With Exit Sub -CompletarAccionFin_Err: - Call TraceError(Err.Number, Err.Description, "Acciones.CompletarAccionFin", Erl) +EndProgrammedAction_Err: + Call TraceError(Err.Number, Err.Description, "Acciones.EndProgrammedAction", Erl) End Sub Sub Accion(ByVal UserIndex As Integer, ByVal Map As Integer, ByVal x As Integer, ByVal y As Integer) diff --git a/Codigo/Declares.bas b/Codigo/Declares.bas index 6518561c..47ea4748 100644 --- a/Codigo/Declares.bas +++ b/Codigo/Declares.bas @@ -72,9 +72,6 @@ End Enum Public Enum e_AccionBarra Runa = 1 - Resucitar = 2 - Intermundia = 3 - GoToPareja = 5 Hogar = 6 CancelarAccion = 99 End Enum @@ -1561,8 +1558,8 @@ End Enum Public Enum e_RuneType ReturnHome = 1 - Escape = 2 - MesonSafePassage = 3 + MesonSafePassage = 2 + FastTravel = 3 End Enum Public Enum e_UseOnceSubType diff --git a/Codigo/FileIO.bas b/Codigo/FileIO.bas index 2f4960cb..3217dcd5 100644 --- a/Codigo/FileIO.bas +++ b/Codigo/FileIO.bas @@ -1199,11 +1199,12 @@ Sub LoadOBJData() .MaxItems = val(Leer.GetValue(ObjKey, "Peces")) End If Case e_OBJType.otRecallStones - .TipoRuna = val(Leer.GetValue(ObjKey, "TipoRuna")) + .TipoRuna = val(Leer.GetValue(ObjKey, "Runetype")) .DesdeMap = val(Leer.GetValue(ObjKey, "DesdeMap")) - .HastaMap = val(Leer.GetValue(ObjKey, "Map")) - .HastaX = val(Leer.GetValue(ObjKey, "X")) - .HastaY = val(Leer.GetValue(ObjKey, "Y")) + .HastaMap = val(Leer.GetValue(ObjKey, "HastaMap")) + .HastaX = val(Leer.GetValue(ObjKey, "HastaX")) + .HastaY = val(Leer.GetValue(ObjKey, "HastaY")) + .Cooldown = val(Leer.GetValue(ObjKey, "Cooldown")) Case e_OBJType.otTeleport .Radio = val(Leer.GetValue(ObjKey, "Radio")) Case e_OBJType.otChest diff --git a/Codigo/General.bas b/Codigo/General.bas index bb972f3a..60b2141f 100644 --- a/Codigo/General.bas +++ b/Codigo/General.bas @@ -1446,18 +1446,7 @@ Sub PasarSegundo() If .Counters.TimerBarra > 0 Then .Counters.TimerBarra = .Counters.TimerBarra - 1 If .Counters.TimerBarra = 0 Then - Select Case .Accion.TipoAccion - Case e_AccionBarra.Hogar - Call HomeArrival(i) - Case e_AccionBarra.Runa - Call CompletarAccionFin(i) - End Select - .Accion.Particula = 0 - .Accion.TipoAccion = e_AccionBarra.CancelarAccion - .Accion.HechizoPendiente = 0 - .Accion.RunaObj = 0 - .Accion.ObjSlot = 0 - .Accion.AccionPendiente = False + Call EndProgrammedAction(i) End If End If If .flags.UltimoMensaje > 0 Then diff --git a/Codigo/InvUsuario.bas b/Codigo/InvUsuario.bas index d1a3a69e..818e0db2 100644 --- a/Codigo/InvUsuario.bas +++ b/Codigo/InvUsuario.bas @@ -2722,14 +2722,11 @@ Sub UseInvItem(ByVal UserIndex As Integer, ByVal Slot As Byte, ByVal ByClick As If .Accion.AccionPendiente Then Exit Sub End If - Select Case ObjData(ObjIndex).TipoRuna - Case e_RuneType.ReturnHome - .Counters.TimerBarra = HomeTimer - Case e_RuneType.Escape - .Counters.TimerBarra = HomeTimer - Case e_RuneType.MesonSafePassage - .Counters.TimerBarra = 5 - End Select + If obj.Cooldown > 32766 Then + .Counters.TimerBarra = 32766 + Else + .Counters.TimerBarra = CInt(obj.Cooldown) + End If If Not EsGM(UserIndex) Then Call SendData(SendTarget.ToPCAliveArea, UserIndex, PrepareMessageParticleFX(.Char.charindex, e_GraphicEffects.Runa, 400, False)) Call SendData(SendTarget.ToPCAliveArea, UserIndex, PrepareMessageBarFx(.Char.charindex, 350, e_AccionBarra.Runa)) diff --git a/Codigo/ModMap.bas b/Codigo/ModMap.bas index 4eba9954..49d8f862 100644 --- a/Codigo/ModMap.bas +++ b/Codigo/ModMap.bas @@ -47,3 +47,24 @@ Public Sub ActivateTrap(ByVal TargetIndex, ByVal TargetType As e_ReferenceType, End If Call MapData(Map, PosX, PosY).Trap.trigger(TargetIndex, TargetType) End Sub + +Public Function IsValidMapIndex(ByVal mapIndex As Integer) As Boolean + On Error GoTo InvalidIndex + Dim LowerBound As Long + Dim UpperBound As Long + LowerBound = LBound(MapInfo) + UpperBound = UBound(MapInfo) + If mapIndex < LowerBound Or mapIndex > UpperBound Then Exit Function + IsValidMapIndex = True + Exit Function +InvalidIndex: + Err.Clear + IsValidMapIndex = False +End Function + +Public Function IsValidMapPosition(ByVal mapIndex As Integer, ByVal x As Integer, ByVal y As Integer) As Boolean + If Not IsValidMapIndex(mapIndex) Then Exit Function + If x < XMinMapSize Or x > XMaxMapSize Then Exit Function + If y < YMinMapSize Or y > YMaxMapSize Then Exit Function + IsValidMapPosition = True +End Function diff --git a/Codigo/Protocol.bas b/Codigo/Protocol.bas index 45b9009f..c6c2c49a 100644 --- a/Codigo/Protocol.bas +++ b/Codigo/Protocol.bas @@ -6509,7 +6509,7 @@ Private Sub HandleCompletarAccion(ByVal UserIndex As Integer) Accion = reader.ReadInt8() If .Accion.AccionPendiente = True Then If .Accion.TipoAccion = Accion Then - Call CompletarAccionFin(UserIndex) + Call EndProgrammedAction(UserIndex) Else ' Msg749=Servidor » La acción que solicitas no se corresponde. Call WriteLocaleMsg(UserIndex, 749, e_FontTypeNames.FONTTYPE_SERVER) diff --git a/Codigo/modFishing.bas b/Codigo/modFishing.bas index 99587e51..d5250292 100644 --- a/Codigo/modFishing.bas +++ b/Codigo/modFishing.bas @@ -1,32 +1,26 @@ Attribute VB_Name = "modFishing" Option Explicit - -Private FishingLevelBonus() As Double -Private FishingBonusesInitialized As Boolean - -Public Const OBJ_FISHING_ROD_BASIC As Integer = 881 -Public Const OBJ_FISHING_ROD_COMMON As Integer = 2121 -Public Const OBJ_FISHING_ROD_FINE As Integer = 2132 -Public Const OBJ_FISHING_ROD_ELITE As Integer = 2133 -Public Const OBJ_BROKEN_FISHING_ROD_BASIC As Integer = 3457 -Public Const OBJ_BROKEN_FISHING_ROD_COMMON As Integer = 3456 -Public Const OBJ_BROKEN_FISHING_ROD_FINE As Integer = 3459 -Public Const OBJ_BROKEN_FISHING_ROD_ELITE As Integer = 3458 -Public Const OBJ_FISHING_NET_BASIC As Integer = 138 -Public Const OBJ_FISHING_NET_ELITE As Integer = 139 -Public Const OBJ_FISHING_LINE As Integer = 2183 -Public Const OBJ_FISH_BANK As Integer = 1992 -Public Const OBJ_SQUID_BANK As Integer = 1990 -Public Const OBJ_SHRIMP_BANK As Integer = 1991 -Public Const OBJ_FISH_AREA As Integer = 3740 - - +Private FishingLevelBonus() As Double +Private FishingBonusesInitialized As Boolean +Public Const OBJ_FISHING_ROD_BASIC As Integer = 881 +Public Const OBJ_FISHING_ROD_COMMON As Integer = 2121 +Public Const OBJ_FISHING_ROD_FINE As Integer = 2132 +Public Const OBJ_FISHING_ROD_ELITE As Integer = 2133 +Public Const OBJ_BROKEN_FISHING_ROD_BASIC As Integer = 3457 +Public Const OBJ_BROKEN_FISHING_ROD_COMMON As Integer = 3456 +Public Const OBJ_BROKEN_FISHING_ROD_FINE As Integer = 3459 +Public Const OBJ_BROKEN_FISHING_ROD_ELITE As Integer = 3458 +Public Const OBJ_FISHING_NET_BASIC As Integer = 138 +Public Const OBJ_FISHING_NET_ELITE As Integer = 139 +Public Const OBJ_FISHING_LINE As Integer = 2183 +Public Const OBJ_FISH_BANK As Integer = 1992 +Public Const OBJ_SQUID_BANK As Integer = 1990 +Public Const OBJ_SHRIMP_BANK As Integer = 1991 +Public Const OBJ_FISH_AREA As Integer = 3740 Public Sub InitializeFishingBonuses() If FishingBonusesInitialized Then Exit Sub - ReDim FishingLevelBonus(1 To 47) As Double - FishingLevelBonus(1) = 0# FishingLevelBonus(2) = 0.009 FishingLevelBonus(3) = 0.015 @@ -74,7 +68,6 @@ Public Sub InitializeFishingBonuses() FishingLevelBonus(45) = 1.8 FishingLevelBonus(46) = 2# FishingLevelBonus(47) = 2.5 - FishingBonusesInitialized = True End Sub @@ -252,12 +245,9 @@ Private Function IsValidUserIndex(ByVal UserIndex As Integer) As Boolean On Error GoTo InvalidIndex Dim LowerBound As Long Dim UpperBound As Long - LowerBound = LBound(UserList) UpperBound = UBound(UserList) - If UserIndex < LowerBound Or UserIndex > UpperBound Then Exit Function - IsValidUserIndex = True Exit Function InvalidIndex: @@ -265,16 +255,13 @@ InvalidIndex: IsValidUserIndex = False End Function -Private Function IsValidObjectIndex(ByVal objectIndex As Integer) As Boolean +Private Function IsValidObjectIndex(ByVal ObjectIndex As Integer) As Boolean On Error GoTo InvalidIndex Dim LowerBound As Long Dim UpperBound As Long - LowerBound = LBound(ObjData) UpperBound = UBound(ObjData) - - If objectIndex < LowerBound Or objectIndex > UpperBound Then Exit Function - + If ObjectIndex < LowerBound Or ObjectIndex > UpperBound Then Exit Function IsValidObjectIndex = True Exit Function InvalidIndex: @@ -282,37 +269,11 @@ InvalidIndex: IsValidObjectIndex = False End Function -Private Function IsValidMapIndex(ByVal mapIndex As Integer) As Boolean - On Error GoTo InvalidIndex - Dim LowerBound As Long - Dim UpperBound As Long - - LowerBound = LBound(MapInfo) - UpperBound = UBound(MapInfo) - - If mapIndex < LowerBound Or mapIndex > UpperBound Then Exit Function - - IsValidMapIndex = True - Exit Function -InvalidIndex: - Err.Clear - IsValidMapIndex = False -End Function - -Private Function IsValidMapPosition(ByVal mapIndex As Integer, ByVal x As Integer, ByVal y As Integer) As Boolean - If Not IsValidMapIndex(mapIndex) Then Exit Function - If x < XMinMapSize Or x > XMaxMapSize Then Exit Function - If y < YMinMapSize Or y > YMaxMapSize Then Exit Function - IsValidMapPosition = True -End Function - Private Function ClampFishingLevel(ByVal level As Long) As Long Dim LowerBound As Long Dim UpperBound As Long - LowerBound = LBound(FishingLevelBonus) UpperBound = UBound(FishingLevelBonus) - If level < LowerBound Then ClampFishingLevel = LowerBound ElseIf level > UpperBound Then @@ -357,43 +318,36 @@ End Function Public Function ObtenerPezRandom(ByVal PoderCania As Integer) As Long On Error GoTo ObtenerPezRandom_Err - - Dim PesoMinimo As Long - Dim PesoMaximo As Long + Dim PesoMinimo As Long + Dim PesoMaximo As Long Dim ValorGenerado As Long - Dim PezIndex As Long - + Dim PezIndex As Long ' Aseguramos que PoderCania esté dentro del rango válido del array. PoderCania = Clamp(PoderCania, LBound(PesoPeces), UBound(PesoPeces)) - ' PesoMaximo: suma de pesos acumulados de todos los peces que puede pescar esta caña PesoMaximo = PesoPeces(PoderCania) - ' Esto asegura que el aleatorio solo considere los peces que pertenecen al Power actual If PoderCania > LBound(PesoPeces) Then PesoMinimo = PesoPeces(PoderCania - 1) Else PesoMinimo = 0 End If - ' Generamos un valor aleatorio solo dentro del rango correspondiente If PesoMaximo <= PesoMinimo Then ValorGenerado = RandomNumber(0, PesoMaximo - 1) Else ValorGenerado = RandomNumber(PesoMinimo, PesoMaximo - 1) End If - ' Obtenemos el pez correspondiente PezIndex = BinarySearchPeces(ValorGenerado) ' BinarySearchPeces() espera un valor en el mismo espacio acumulado que PesoPeces(). ObtenerPezRandom = Peces(PezIndex).ObjIndex - Exit Function - ObtenerPezRandom_Err: Call TraceError(Err.Number, Err.Description, "modFishing.ObtenerPezRandom", Erl) End Function + Public Function IsUniqueMapFish(ByVal ObjIndex As Long) As Boolean -On Error GoTo IsUniqueMapFish_Err + On Error GoTo IsUniqueMapFish_Err Dim i As Long For i = 1 To UniqueMapFishCount If UniqueMapFishIDs(i) = ObjIndex Then @@ -498,4 +452,3 @@ Private Function IsAdjacentToWater(ByRef pos As t_WorldPos) As Boolean (MapData(pos.Map, pos.x, pos.y + 1).Blocked And FLAG_AGUA) <> 0 Or _ (MapData(pos.Map, pos.x, pos.y - 1).Blocked And FLAG_AGUA) <> 0 End Function - diff --git a/Codigo/modHechizos.bas b/Codigo/modHechizos.bas index a4539c1f..a7c90668 100644 --- a/Codigo/modHechizos.bas +++ b/Codigo/modHechizos.bas @@ -951,53 +951,6 @@ HechizoSobreArea_Err: Call TraceError(Err.Number, Err.Description, "modHechizos.HechizoSobreArea", Erl) End Sub -Sub HechizoPortal(ByVal UserIndex As Integer, ByRef b As Boolean) - On Error GoTo HechizoPortal_Err - Dim PosCasteadaX As Byte - Dim PosCasteadaY As Byte - Dim PosCasteadaM As Integer - Dim uh As Integer - Dim TempX As Integer - Dim TempY As Integer - PosCasteadaX = UserList(UserIndex).flags.TargetX - PosCasteadaY = UserList(UserIndex).flags.TargetY - PosCasteadaM = UserList(UserIndex).flags.TargetMap - uh = UserList(UserIndex).Stats.UserHechizos(UserList(UserIndex).flags.Hechizo) - 'Envio Palabras magicas, wavs y fxs. - If MapData(UserList(UserIndex).pos.Map, UserList(UserIndex).flags.TargetX, UserList(UserIndex).flags.TargetY).ObjInfo.amount > 0 Or (MapData(UserList(UserIndex).pos.Map, _ - UserList(UserIndex).flags.TargetX, UserList(UserIndex).flags.TargetY).Blocked And e_Block.ALL_SIDES) <> e_Block.ALL_SIDES Or MapData(UserList(UserIndex).pos.Map, _ - UserList(UserIndex).flags.TargetX, UserList(UserIndex).flags.TargetY).TileExit.Map > 0 Or UserList(UserIndex).flags.TargetUser.ArrayIndex <> 0 Then - b = False - 'Call WriteConsoleMsg(UserIndex, "Area invalida para lanzar este Hechizo!", e_FontTypeNames.FONTTYPE_INFO) - Call WriteLocaleMsg(UserIndex, 262, e_FontTypeNames.FONTTYPE_INFO) - Else - If Hechizos(uh).TeleportX = 1 Then - If UserList(UserIndex).flags.Portal = 0 Then - Call SendData(SendTarget.ToPCArea, UserIndex, PrepareMessageParticleFX(UserList(UserIndex).Char.charindex, e_GraphicEffects.Runa, -1, False)) - UserList(UserIndex).flags.PortalM = UserList(UserIndex).pos.Map - UserList(UserIndex).flags.PortalX = UserList(UserIndex).flags.TargetX - UserList(UserIndex).flags.PortalY = UserList(UserIndex).flags.TargetY - Call SendData(SendTarget.ToPCArea, UserIndex, PrepareMessageBarFx(UserList(UserIndex).Char.charindex, 600, e_AccionBarra.Intermundia)) - UserList(UserIndex).Accion.AccionPendiente = True - UserList(UserIndex).Accion.Particula = e_GraphicEffects.Runa - UserList(UserIndex).Accion.TipoAccion = e_AccionBarra.Intermundia - UserList(UserIndex).Accion.HechizoPendiente = uh - If UserList(UserIndex).flags.NoPalabrasMagicas = 0 Then - Call DecirPalabrasMagicas(uh, UserIndex) - End If - b = True - Else - 'Msg788= No podés lanzar mas de un portal a la vez. - Call WriteLocaleMsg(UserIndex, 788, e_FontTypeNames.FONTTYPE_INFO) - b = False - End If - End If - End If - Exit Sub -HechizoPortal_Err: - Call TraceError(Err.Number, Err.Description, "modHechizos.HechizoPortal", Erl) -End Sub - Sub HechizoMaterializacion(ByVal UserIndex As Integer, ByRef b As Boolean) On Error GoTo HechizoMaterializacion_Err Dim h As Integer @@ -1034,8 +987,6 @@ Sub HandleHechizoTerreno(ByVal UserIndex As Integer, ByVal uh As Integer) Call HechizoMaterializacion(UserIndex, b) Case e_TipoHechizo.uArea 'Tipo 5 Call HechizoSobreArea(UserIndex, b) - Case e_TipoHechizo.uPortal 'Tipo 6 - Call HechizoPortal(UserIndex, b) Case e_TipoHechizo.uMultiShoot Dim TargetPos As t_WorldPos TargetPos.Map = .pos.Map diff --git a/Codigo/modMessageIDs.bas b/Codigo/modMessageIDs.bas index 8196a53b..39f2b473 100644 --- a/Codigo/modMessageIDs.bas +++ b/Codigo/modMessageIDs.bas @@ -97,3 +97,9 @@ Public Const MSG_CONNECTION_DARK_LEGION_8 As Integer = 2156 Public Const MSG_CONNECTION_DARK_LEGION_9 As Integer = 2157 Public Const MSG_CONNECTION_DARK_LEGION_10 As Integer = 2158 Public Const MSG_PERFORATED_ARMOR As Integer = 2161 + +Public Const MSG_SUCCESFULLY_RETURN_TO_HOME_CITY = 1065 +Public Const MSG_SUCCESFULLY_TELEPORTED = 1066 +Public Const MSG_INVALID_RUNE = 2080 +Public Const MSG_NOT_USABLE_INSIDE_MESON = 2081 +Public Const MSG_INVALID_FAST_TRAVEL_MAP_ORIGIN = 2162