Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Sub MoveUserChar(ByVal UserIndex As Integer, ByVal nHeading As eHeading)
- '*************************************************
- 'Author: Unknown
- 'Last modified: 30/03/2009
- 'Moves the char, sending the message to everyone in range.
- '30/03/2009: ZaMa - Now it's legal to move where a casper is, changing its pos to where the moving char was.
- '*************************************************
- On Error GoTo MoveUserChar_Error
- On Error GoTo err:
- Dim sailing As Boolean
- Dim OldIntemperie As Boolean
- Dim CasperIndex As Integer
- Dim oldUserIndex As Integer
- Dim nPos As WorldPos
- Dim CasPerPos As WorldPos
- Dim CasperHeading As eHeading
- Dim RestarX As Integer
- Dim RestarY As Integer
- With UserList(UserIndex)
- sailing = PuedeAtravesarAgua(UserIndex)
- nPos = .Pos
- Call HeadtoPos(nHeading, nPos)
- If MoveToLegalPos(UserList(UserIndex).Pos.Map, nPos.X, nPos.Y, sailing, Not sailing, UserIndex) Then
- 'si no estoy solo en el mapa...
- If MapInfo(.Pos.Map).NumUsers > 1 Then
- CasperIndex = MapData(.Pos.Map, nPos.X, nPos.Y).UserIndex
- 'Si hay un usuario, y paso la validacion, entonces es un casper
- If CasperIndex > 0 Then
- CasperHeading = InvertHeading(nHeading)
- CasPerPos = UserList(CasperIndex).Pos
- Call HeadtoPos(CasperHeading, CasPerPos)
- With UserList(CasperIndex)
- Call WriteForceCharMove(CasperIndex, CasperHeading)
- 'Update map and user pos
- .Pos = CasPerPos
- .Char.Heading = CasperHeading
- MapData(.Pos.Map, CasPerPos.X, CasPerPos.Y).UserIndex = CasperIndex
- 'Actualizamos las áreas de ser necesario
- Call ModAreas.CheckUpdateNeededUser(CasperIndex, CasperHeading)
- Call SendData(SendTarget.ToPCAreaButIndex, CasperIndex, PrepareMessageCharacterMoves(.Char.CharIndex, CasPerPos.X, CasPerPos.Y))
- End With
- End If
- If .flags.AdminInvisible = 1 Then
- Call SendData(SendTarget.ToMayorRangoAreaButIndex, UserIndex, PrepareMessageCharacterMoves(UserList(UserIndex).Char.CharIndex, nPos.X, nPos.Y))
- Else
- Call SendData(SendTarget.ToPCAreaButIndex, UserIndex, PrepareMessageCharacterMoves(UserList(UserIndex).Char.CharIndex, nPos.X, nPos.Y))
- End If
- If ElRey(1) <> 0 And ElRey(1) <> UserIndex Then If UserList(UserIndex).flags.EnEvento And UserList(UserIndex).Pos.Map = UserList(ElRey(1)).Pos.Map Then Call SendData(SendTarget.ToMapButIndex, UserIndex, PrepareMessageRadarMove(.Char.CharIndex, nPos.X, nPos.Y)) 'Call WriteRadarMove(ElRey(1), UserList(UserIndex).flags.IndexEvento, UserList(UserIndex).flags.EventoTeam, nPos.X, nPos.Y)
- If ElRey(2) <> 0 And ElRey(2) <> UserIndex Then If UserList(UserIndex).flags.EnEvento And UserList(UserIndex).Pos.Map = UserList(ElRey(2)).Pos.Map Then Call SendData(SendTarget.ToMapButIndex, UserIndex, PrepareMessageRadarMove(.Char.CharIndex, nPos.X, nPos.Y)) 'Call WriteRadarMove(ElRey(2), UserList(UserIndex).flags.IndexEvento, UserList(UserIndex).flags.EventoTeam, nPos.X, nPos.Y)
- If .PartyIndex > 0 Or .GuildIndex > 0 And .flags.EnEvento = False Then
- Call SendData(SendTarget.ToClanAndPartyMap, UserIndex, PrepareMessageRadarMove(.Char.CharIndex, nPos.X, nPos.Y))
- End If
- End If
- CasperIndex = MapData(.Pos.Map, nPos.X, nPos.Y).NpcIndex
- 'Si hay un usuario, y paso la validacion, entonces es un casper
- If CasperIndex > 0 Then
- CasperHeading = InvertHeading(nHeading)
- CasPerPos = NpcList(CasperIndex).Pos
- Call HeadtoPos(CasperHeading, CasPerPos)
- With NpcList(CasperIndex)
- MapData(.Pos.Map, .Pos.X, .Pos.Y).NpcIndex = 0
- .Pos = CasPerPos
- .Char.Heading = CasperHeading
- MapData(.Pos.Map, CasPerPos.X, CasPerPos.Y).NpcIndex = CasperIndex
- Call SendData(SendTarget.ToNPCArea, CasperIndex, PrepareMessageCharacterMoves(.Char.CharIndex, CasPerPos.X, CasPerPos.Y))
- End With
- End If
- OldIntemperie = Intemperie(UserIndex)
- oldUserIndex = MapData(.Pos.Map, .Pos.X, .Pos.Y).UserIndex
- ' Si no hay intercambio de pos con nadie
- If oldUserIndex = UserIndex Then
- MapData(.Pos.Map, .Pos.X, .Pos.Y).UserIndex = 0
- End If
- .Pos = nPos
- .Char.Heading = nHeading
- MapData(.Pos.Map, .Pos.X, .Pos.Y).UserIndex = UserIndex
- If Intemperie(UserIndex) <> OldIntemperie Then
- Call WriteUpdateSta(UserIndex)
- End If
- 'Actualizamos las áreas de ser necesario
- Call ModAreas.CheckUpdateNeededUser(UserIndex, nHeading)
- Else
- If nHeading = eHeading.North Then
- RestarY = 1
- End If
- If nHeading = eHeading.South Then
- RestarY = -1
- End If
- If nHeading = eHeading.East Then
- RestarX = -1
- End If
- If nHeading = eHeading.West Then
- RestarX = 1
- End If
- UserList(UserIndex).Char.Heading = nHeading
- Call ChangeUserChar(UserIndex, UserList(UserIndex).Char.Body, UserList(UserIndex).Char.Head, UserList(UserIndex).Char.Heading, UserList(UserIndex).Char.WeaponAnim, UserList(UserIndex).Char.ShieldAnim, UserList(UserIndex).Char.CascoAnim)
- If MapData(.Pos.Map, nPos.X, nPos.Y).Blocked = 1 Then Call Bloquear(False, UserIndex, nPos.X, nPos.Y, MapData(.Pos.Map, nPos.X, nPos.Y).Blocked)
- If HayAgua(.Pos.Map, nPos.X, nPos.Y) Then
- Call WritePosUpdate(UserIndex)
- Else
- Call WriteRetroceder(UserIndex, RestarX, RestarY)
- End If
- If MapData(.Pos.Map, nPos.X, nPos.Y).UserIndex <> 0 Then
- Call WriteActPos(UserIndex, UserList(MapData(UserList(UserIndex).Pos.Map, nPos.X, nPos.Y).UserIndex).Char.CharIndex)
- ElseIf MapData(UserList(UserIndex).Pos.Map, nPos.X, nPos.Y).NpcIndex <> 0 Then
- Call WriteActPos(UserIndex, NpcList(MapData(UserList(UserIndex).Pos.Map, nPos.X, nPos.Y).NpcIndex).Char.CharIndex)
- End If
- End If
- If .Counters.Trabajando Then .Counters.Trabajando = .Counters.Trabajando - 1
- If .Counters.Ocultando Then .Counters.Ocultando = .Counters.Ocultando - 1
- Call CheckCampaignLocation(UserIndex) '[/About] by xpprocess09
- End With
- Exit Sub
- err:
- On Error GoTo 0
- Exit Sub
- MoveUserChar_Error:
- Call LogError("Error " & err.Number & " Descripción: & (" & err.Description & ") del procedimiento MoveUserChar del Módulo UsUaRiOs" & " En la linea: " & Erl)
- End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement