Flechas qe te persiguen
2 participantes
Página 1 de 1.
Flechas qe te persiguen
Cliente:
Agregan estos metodos:
Buscan:
Y arriba ponen:
en el sub renderscreen, Abajo de:
ponen:
Ahora declaran:
Listo, Psamos al Server:
en el sub usuarioatacanpc buscan:
y abajo ponen:
ahora, mas abajo donde dice:
pobemos:
Ahora en el sub UsuarioAtacaUsuario
Buscan:
y abajo ponen:
Ahora en el sub userdañouser buscan:
y abajo ponen:
Saludos
Agregan estos metodos:
- Código:
Public Function Engine_GetAngle(ByVal CenterX As Integer, ByVal CenterY As Integer, ByVal TargetX As Integer, ByVal TargetY As Integer) As Single
'************************************************************
'Gets the angle between two points in a 2d plane
'More info: http://www.vbgore.com/GameClient.TileEn ... e_GetAngle
'************************************************************
Dim SideA As Single
Dim SideC As Single
On Error GoTo ErrOut
'Check for horizontal lines (90 or 270 degrees)
If CenterY = TargetY Then
'Check for going right (90 degrees)
If CenterX < TargetX Then
Engine_GetAngle = 90
'Check for going left (270 degrees)
Else
Engine_GetAngle = 270
End If
'Exit the function
Exit Function
End If
'Check for horizontal lines (360 or 180 degrees)
If CenterX = TargetX Then
'Check for going up (360 degrees)
If CenterY > TargetY Then
Engine_GetAngle = 360
'Check for going down (180 degrees)
Else
Engine_GetAngle = 180
End If
'Exit the function
Exit Function
End If
'Calculate Side C
SideC = Sqr(Abs(TargetX - CenterX) ^ 2 + Abs(TargetY - CenterY) ^ 2)
'Side B = CenterY
'Calculate Side A
SideA = Sqr(Abs(TargetX - CenterX) ^ 2 + TargetY ^ 2)
'Calculate the angle
Engine_GetAngle = (SideA ^ 2 - CenterY ^ 2 - SideC ^ 2) / (CenterY * SideC * -2)
Engine_GetAngle = (Atn(-Engine_GetAngle / Sqr(-Engine_GetAngle * Engine_GetAngle + 1)) + 1.5708) * 57.29583
'If the angle is >180, subtract from 360
If TargetX < CenterX Then Engine_GetAngle = 360 - Engine_GetAngle
'Exit function
Exit Function
'Check for error
ErrOut:
'Return a 0 saying there was an error
Engine_GetAngle = 0
Exit Function
End Function
Public Sub Crear_Flecha(ByVal AI As Integer, ByVal CI As Integer, ByVal grh As Integer, ByVal R As Byte, fallo As Byte)
Dim i As Integer
For i = 1 To MaxFlecha
If Flechas_list(i).EnUso = 0 Then Exit For
Next
If i = 0 Then i = 1
Dim addfalloX As Byte
Dim addFalloY As Integer
If fallo <> 0 Then
addfalloX = RandomNumber(-25, 25)
addFalloY = RandomNumber(5, 25)
Else
addFalloY = -35
'addfalloX = 16
End If
Flechas_list(i).xb = CharList(CI).POS.X * 32 + CharList(CI).MoveOffset.X + addfalloX
Flechas_list(i).yb = CharList(CI).POS.Y * 32 + CharList(CI).MoveOffset.Y + addFalloY
Flechas_list(i).Rotacion = R
Flechas_list(i).X = CharList(AI).POS.X * 32 + CharList(AI).MoveOffset.X
Flechas_list(i).Y = CharList(AI).POS.Y * 32 + CharList(AI).MoveOffset.Y '+ addFalloY
Flechas_list(i).EnUso = 1
InitGrh Flechas_list(i).grh, grh
'Flechas_list(i).Angle = Engine_GetAngle(Flechas_list(i).xb, Flechas_list(i).Y, Flechas_list(i).xb, Flechas_list(i).yb)
End Sub
Buscan:
- Código:
Case "!!"
If PuedoQuitarFoco Then
Rdata = Right$(Rdata, Len(Rdata) - 2)
frmMensaje.msg.Caption = Rdata
frmMensaje.Show
End If
Exit Sub
Y arriba ponen:
- Código:
Case "FC" 'flecha a char
Rdata = Right$(Rdata, Len(Rdata) - 2)
Crear_Flecha Val(ReadField(1, Rdata, 44)), Val(ReadField(2, Rdata, 44)), Val(ReadField(3, Rdata, 44)), 0, Val(ReadField(4, Rdata, 44))
Exit Sub
en el sub renderscreen, Abajo de:
- Código:
For Y = screenminY To screenmaxY
For X = screenminX To screenmaxX
'Layer 1 **********************************
If X <= 100 And Y <= 100 Then
Call DDrawTransGrhtoSurface(MapData(X, Y).Graphic(1), _
(ScreenX - 1) * 32 + PixelOffsetX, _
(ScreenY - 1) * 32 + PixelOffsetY, _
1, 1, , X, Y)
If MapData(X, Y).Graphic(2).grhindex <> 0 Then
Call DDrawTransGrhtoSurface(MapData(X, Y).Graphic(2), (ScreenX - 1) * 32 + PixelOffsetX, (ScreenY - 1) * 32 + PixelOffsetY, 1, 2, , X, Y)
End If
End If
'******************************************
ScreenX = ScreenX + 1
Next X
'Reset ScreenX to original value and increment ScreenY
ScreenX = ScreenX - X + screenminX
ScreenY = ScreenY + 1
Next Y
ponen:
- Código:
Dim j As Integer
Dim Angle As Single
Dim xb As Integer
Dim yb As Integer
For j = 0 To MaxFlecha
If Flechas_list(j).EnUso = 1 Then
'Update the position
Angle = DegreeToRadian * Engine_GetAngle(Flechas_list(j).X, Flechas_list(j).Y, Flechas_list(j).xb, Flechas_list(j).yb)
Flechas_list(j).X = (Flechas_list(j).X + (Sin(Angle) * timerElapsedTime * 0.63))
Flechas_list(j).Y = (Flechas_list(j).Y - (Cos(Angle) * timerElapsedTime * 0.63))
'Update the rotation
If Flechas_list(j).Rotacion > 0 Then
Flechas_list(j).Angle = Flechas_list(j).Angle + (Flechas_list(j).Rotacion * timerElapsedTime * 0.1)
Do While Flechas_list(j).Angle > 360
Flechas_list(j).Angle = Flechas_list(j).Angle - 360
Loop
End If
'Draw if within range
xb = ((-minX - 1) * 32) + Flechas_list(j).X + PixelOffsetX - 250 '((10 - 32) * 32)
yb = ((-minY - 1) * 32) + Flechas_list(j).Y + PixelOffsetY - 250 '((10 - 32) * 32)
If yb >= -32 Then
If yb <= (ScreenHeight + 32) Then
If xb >= -32 Then
If xb <= (ScreenWidth + 32) Then
If (Flechas_list(j).X > Flechas_list(j).xb) And (Flechas_list(j).Y > Flechas_list(j).yb) Then
DDrawTransGrhtoSurface Flechas_list(j).grh, xb, yb, 0, 1, , X, Y, , , , , 23.5
ElseIf (Flechas_list(j).X > Flechas_list(j).xb) And (Flechas_list(j).Y < Flechas_list(j).yb) Then
DDrawTransGrhtoSurface Flechas_list(j).grh, xb, yb, 0, 1, , X, Y, , , , , 110
ElseIf (Flechas_list(j).X < Flechas_list(j).xb) And (Flechas_list(j).Y < Flechas_list(j).yb) Then
DDrawTransGrhtoSurface Flechas_list(j).grh, xb, yb, 0, 1, , X, Y, , , , , 1.3
ElseIf (Flechas_list(j).X = Flechas_list(j).xb) And (Flechas_list(j).Y < Flechas_list(j).yb) Then
DDrawTransGrhtoSurface Flechas_list(j).grh, xb, yb, 0, 1, , X, Y, , , , , 1.92
ElseIf (Flechas_list(j).X = Flechas_list(j).xb) And (Flechas_list(j).Y > Flechas_list(j).yb) Then
DDrawTransGrhtoSurface Flechas_list(j).grh, xb, yb, 0, 1, , X, Y, , , , , 200
Else
' DDrawTransGrhtoSurface Flechas_list(j).grh, xb, yb, 0, 1, , X, Y, , , , , Flechas_list(j).Angle '* 0.1
DDrawTransGrhtoSurface Flechas_list(j).grh, xb, yb, 0, 1, , X, Y, , , , , 0
End If
End If
End If
End If
End If
End If
Next j
For j = 0 To MaxFlecha
If Flechas_list(j).grh.grhindex Then
If Abs(Flechas_list(j).X - Flechas_list(j).xb) <= 20 Then
If Abs(Flechas_list(j).Y - Flechas_list(j).yb) <= 20 Then
Flechas_list(j).EnUso = 0
End If
End If
End If
Next j
Ahora declaran:
- Código:
Type Flecha
X As Single
Y As Single
xb As Single
yb As Single
Angle As Single
grh As grh
Rotacion As Byte
EnUso As Byte
End Type
Public Const MaxFlecha As Byte = 15
Public Flechas_list(MaxFlecha) As Flecha
Listo, Psamos al Server:
en el sub usuarioatacanpc buscan:
- Código:
If Npclist(NpcIndex).flags.Snd2 Then
Call SendData(ToPCArea, Userindex, UserList(Userindex).POS.Map, "" & UserList(Userindex).Char.CharIndex & "," & Npclist(NpcIndex).flags.Snd2)
Else
Call SendData(ToPCArea, Userindex, UserList(Userindex).POS.Map, "?" & UserList(Userindex).Char.CharIndex)
End If
y abajo ponen:
- Código:
If UserList(Userindex).Invent.MunicionEqpObjIndex And ObjData(UserList(Userindex).Invent.WeaponEqpObjIndex).proyectil = 1 Then
SendData ToNPCArea, NpcIndex, 0, "FC" & UserList(Userindex).Char.CharIndex & "," & Npclist(NpcIndex).Char.CharIndex & "," & ObjData(UserList(Userindex).Invent.MunicionEqpObjIndex).GrhIndex
End If
ahora, mas abajo donde dice:
- Código:
Call SendData(ToIndex, Userindex, 0, "U1")
pobemos:
- Código:
If UserList(Userindex).Invent.MunicionEqpObjIndex And ObjData(UserList(Userindex).Invent.WeaponEqpObjIndex).proyectil = 1 Then
SendData ToNPCArea, NpcIndex, 0, "FC" & UserList(Userindex).Char.CharIndex & "," & Npclist(NpcIndex).Char.CharIndex & "," & ObjData(UserList(Userindex).Invent.MunicionEqpObjIndex).GrhIndex & "," & 1
End If
Ahora en el sub UsuarioAtacaUsuario
Buscan:
- Código:
Call SendData(ToPCArea, AtacanteIndex, UserList(AtacanteIndex).POS.Map, "-" & UserList(AtacanteIndex).Char.CharIndex)
Call SendData(ToIndex, AtacanteIndex, 0, "U1")
Call SendData(ToIndex, VictimaIndex, 0, "U3" & UserList(AtacanteIndex).Name)
y abajo ponen:
- Código:
If ObjData(UserList(AtacanteIndex).Invent.WeaponEqpObjIndex).proyectil Then
SendData ToPCArea, VictimaIndex, 0, "FC" & UserList(AtacanteIndex).Char.CharIndex & "," & UserList(VictimaIndex).Char.CharIndex & "," & ObjData(UserList(AtacanteIndex).Invent.MunicionEqpObjIndex).GrhIndex & "," & 1
End If
Ahora en el sub userdañouser buscan:
- Código:
If UserList(AtacanteIndex).flags.Hambre = 0 And UserList(AtacanteIndex).flags.Sed = 0 Then
If UserList(AtacanteIndex).Invent.WeaponEqpObjIndex Then
If ObjData(UserList(AtacanteIndex).Invent.WeaponEqpObjIndex).proyectil Then
Call SubirSkill(AtacanteIndex, Proyectiles)
y abajo ponen:
- Código:
SendData ToPCArea, VictimaIndex, 0, "FC" & UserList(AtacanteIndex).Char.CharIndex & "," & UserList(VictimaIndex).Char.CharIndex & "," & ObjData(UserList(AtacanteIndex).Invent.MunicionEqpObjIndex).GrhIndex
Saludos
santi55Nivel 12 -
Advertencias : 1
Mensajes : 156
Puntos : 49387
Reputación : 1
Fecha de inscripción : 19/12/2010
País :
Re: Flechas qe te persiguen
Muy buen aporte, supongo que será DX8.
Está muy bueno porque le da realismo a las flechas.
Está muy bueno porque le da realismo a las flechas.
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|