[Aportes indexados] Pasajes

Estado
Cerrado para nuevas respuestas.

DarkMage

Destructor Lvl 1
[SERVIDOR] Pasajes

Para el Servidor

Este codigo lo encontre bajando por slk.. y como algunos me lo pedian por MSN aca se los dejo

Buscamos Sub UseInvItem, y en ese sub nos posicionamos debajo de:

[vb]
Select Case Obj.ObjType [/vb]


y ponemos:

[vb]
' Tales
    Case OBJTYPE_PASAJES
     'Se asegura que el target es un npc
         If UserList(UserIndex).flags.TargetNPC = 0 Then
             Call SendData(ToIndex, UserIndex, 0, "||Primero tenes que seleccionar un personaje, hace click izquierdo sobre el." & FONTTYPE_INFO)
             Exit Sub
         End If
         ' Verificamos que sea el pirata
        If Npclist(UserList(UserIndex).flags.TargetNPC).NPCtype <> 9 Then Exit Sub      
 
         ' Si esta muy lejos no actua
         If Distancia(UserList(UserIndex).Pos, Npclist(UserList(UserIndex).flags.TargetNPC).Pos) > 10 Then
             Call SendData(ToIndex, UserIndex, 0, "||Estas demasiado lejos del pirata para tomar el pasaje." & FONTTYPE_INFO)
             Exit Sub
         End If
 
         ' Si esta muerto no puede usar el pasaje.
     If UserList(UserIndex).flags.Muerto = 1 Then
            Call SendData(ToIndex, UserIndex, 0, "||Estas muerto, solo los vivos pueden usar los pasajes!!!" & FONTTYPE_WARNING)
            Exit Sub
            End If
           
    ' Esta en zona Segura?
            If MapInfo(UserList(UserIndex).Pos.Map).Pk = True Then
            Call SendData(ToIndex, UserIndex, 0, "|| Debes estar en sona segura para utilizar un pasaje!!!" & FONTTYPE_INFO)
            Exit Sub
            End If
           
    ' Para prevenir que no se quede trabado el pj verificamos si el mapa de destino es un mapa valido.
            If MapaValido(Obj.mapa) Then
        ' Transportamos al usuario
                Call WarpUserChar(UserIndex, Obj.mapa, Obj.X, Obj.Y, True)
                Call SendData(ToIndex, UserIndex, 0, "|| Has sido transportado." & FONTTYPE_INFO)
                'Quitamos el item del inventario.
                Call QuitarUserInvItem(UserIndex, Slot, 1)
            Else
' Si no es un mapa valido se lo informamos al usuario.
                Call SendData(ToIndex, UserIndex, 0, "|| El mapa al que se dirije el pase no es un mapa valido." & FONTTYPE_INFO)
         exit sub
     End If
           
                Call UpdateUserInv(False, UserIndex, Slot)
                Call SendUserStatsBox(UserIndex)
       
        Exit Sub
' Tales [/vb]


Ahora vamos al modulo Declares y Buscamos:


[vb]
Public Const OBJTYPE_MANCHAS = 35 [/vb]


y debajo de esto ponemos:

[vb]
Public Const OBJTYPE_PASAJES = 36 [/vb]


Buscamos:

[vb]
Public Const NPCTYPE_GUARDIASCAOS = 8 [/vb]

y debajo ponemos :

[vb]
' Tales declaramos al pirata
Public Const NPCTYPE_PIRATA = 9 [/vb]



Buscamos

[vb]
Public Type ObjData[/vb]

y debajo ponemos:

[vb]
' Tales
' Le damos los atributos al objeto.
    Mapa As Integer
    X As Integer
    Y As Integer
' Tales [/vb]



Luego buscamos en el Sub LoadObjData buscamos:


[vb]
If ObjData(Object).ObjType = OBJTYPE_ARMOUR Then [/vb]

y arriba de eso ponemos:

[vb]
' Tales
'Tomamos el destino del pasaje.
    If ObjData(Object).ObjType = OBJTYPE_PASAJES Then
        ObjData(Object).mapa = val(Leer.DarValor("OBJ" & Object, "Mapa"))
        ObjData(Object).X = val(Leer.DarValor("OBJ" & Object, "X"))
        ObjData(Object).Y = val(Leer.DarValor("OBJ" & Object, "Y"))
    End If
    ' Tales [/vb]


Ahora los DATs que tienen que poner

Del Objeto

Código:
[OBJ708] 
Name=Pasaje a Ullathorpe 
GrhIndex=506 
ObjType=36 
Valor=1 
Mapa=1 
X=50 
Y=50



Del Pirata:

Código:
[NPCXXX] 'NPC 
Name=Pirata 
Desc=Hola, deseas tomar un pasaje? Hasme Click y luego utilisalo. 
NpcType=9 
Head=0 
Body=18 
Heading=3 
Movement=1 
Comercia=1 
Alineacion=0 
ReSpawn=0 
NROITEMS=1 
Obj1=2-1

Codigo realizado por Tales

Cualquier duda pregunten, el codigo ya lo probe y anda de diez, a continuacion explico lo que hace.

Al tomar el pasaje te teleporta al lugar indicado en el obj, para tomarlo hay que hacerle clic al pirata, no se lo puede tomar estando muerto, en zona insegura, o muy lejos del pirata, si el mapa de destino es invalido no se teleporta, ojala que les sirva.

DarkMage
 
Estado
Cerrado para nuevas respuestas.
Arriba