[Aporte] Fix lluvia cliente shak 13.3

nachocaroo

Newbie Lvl 4
#1
el "problema" era que cuando desactivabas la lluvia seguia dibujandola ahi re loca :p
obvio en el cliente
buscamos el Sub Effect_UpdateAll()
y remplazamos por

CSS:
Sub Effect_UpdateAll()
If ClientSetup.ParticleEngine = False And bRain = False Then Exit Sub
'*****************************************************************
'Updates all of the effects and renders them
'More info: http://www.vbgore.com/CommonCode.Particles.Effect_UpdateAll
'*****************************************************************
Dim LoopC As Long

    'Make sure we have effects
    If NumEffects = 0 Then Exit Sub

    'Set the render state for the particle effects
    DirectDevice.SetRenderState D3DRS_DESTBLEND, D3DBLEND_ONE

    'Update every effect in use
    For LoopC = 1 To NumEffects

        'Make sure the effect is in use
        If Effect(LoopC).Used Then
     
            'Update the effect position if the screen has moved
            Effect_UpdateOffset LoopC
            'Update the effect position if it is binded
            Effect_UpdateBinding LoopC
         
            'Find out which effect is selected, then update it
         

                If Effect(LoopC).EffectNum = EffectNum_Fire Then Effect_Fire_Update LoopC
                If Effect(LoopC).EffectNum = EffectNum_Snow Then Effect_Snow_Update LoopC
                If Effect(LoopC).EffectNum = EffectNum_Heal Then Effect_Heal_Update LoopC
                If Effect(LoopC).EffectNum = EffectNum_Bless Then Effect_Bless_Update LoopC
                If Effect(LoopC).EffectNum = EffectNum_Protection Then Effect_Protection_Update LoopC
                If Effect(LoopC).EffectNum = EffectNum_Strengthen Then Effect_Strengthen_Update LoopC
                If Effect(LoopC).EffectNum = EffectNum_Rain Then Effect_Rain_Update LoopC
                If Effect(LoopC).EffectNum = EffectNum_EquationTemplate Then Effect_EquationTemplate_Update LoopC
                If Effect(LoopC).EffectNum = EffectNum_Waterfall Then Effect_Waterfall_Update LoopC
                If Effect(LoopC).EffectNum = EffectNum_Summon Then Effect_Summon_Update LoopC
                If Effect(LoopC).EffectNum = EffectNum_Rayo Then Effect_Rayo_Update LoopC
                If Effect(LoopC).EffectNum = EffectNum_Smoke Then Effect_Smoke_Update LoopC
     
         
            'Render the effect
            Effect_Render LoopC, False

        End If

    Next
 
    'Set the render state back for normal rendering
    DirectDevice.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA

End Sub
arriba de ese mismo sub agregamos

CSS:
Private Sub Effect_UpdateOffset(ByVal EffectIndex As Integer)
        '***************************************************
        'Update an effect's position if the screen has moved
        'More info: http://www.vbgore.com/CommonCode.Particles.Effect_UpdateOffset
        '***************************************************

        If UserCharIndex <> 0 Then
                If EffectIndex <> charlist(UserCharIndex).ParticleIndex Then
                        Effect(EffectIndex).X = Effect(EffectIndex).X + (LastOffsetX - ParticleOffsetX)
                        Effect(EffectIndex).Y = Effect(EffectIndex).Y + (LastOffsetY - ParticleOffsetY)
                End If
        End If

End Sub

En el modulo general buscan

HTML:
'###################
    ' ANIMACIONES EXTRAS
    Call AddtoRichTextBox(frmCargando.Status, "Creando animaciones extra... ", 255, 255, 255, True, False, True)
    Call CargarTips
    'Call CargarArrayLluvia
    Call CargarAnimArmas
    Call CargarAnimEscudos
    Call CargarColores
    Call AddtoRichTextBox(frmCargando.Status, "Hecho", 255, 0, 0, True, False, False)
remplazan todo eso por:

HTML:
'###################
    ' ANIMACIONES EXTRAS
    Call AddtoRichTextBox(frmCargando.Status, "Creando animaciones extra... ", 255, 255, 255, True, False, True)
    Call CargarTips
    Call CargarArrayLluvia
    Call CargarAnimArmas
    Call CargarAnimEscudos
    Call CargarColores
    Call AddtoRichTextBox(frmCargando.Status, "Hecho", 255, 0, 0, True, False, False)


y listo, video de como funciona(no se para que):

 
Última edición:

nachocaroo

Newbie Lvl 4
#3
Tenes razon, colgue.. en el modulo general buscá
HTML:
'###################
    ' ANIMACIONES EXTRAS
    Call AddtoRichTextBox(frmCargando.Status, "Creando animaciones extra... ", 255, 255, 255, True, False, True)
    Call CargarTips
    'Call CargarArrayLluvia
    Call CargarAnimArmas
    Call CargarAnimEscudos
    Call CargarColores
    Call AddtoRichTextBox(frmCargando.Status, "Hecho", 255, 0, 0, True, False, False)
y modificalo por

HTML:
'###################
    ' ANIMACIONES EXTRAS
    Call AddtoRichTextBox(frmCargando.Status, "Creando animaciones extra... ", 255, 255, 255, True, False, True)
    Call CargarTips
    Call CargarArrayLluvia
    Call CargarAnimArmas
    Call CargarAnimEscudos
    Call CargarColores
    Call AddtoRichTextBox(frmCargando.Status, "Hecho", 255, 0, 0, True, False, False)

ahi edito el original
 

ElAguSS

Destructor Lvl 1
#5
Te aviso que solo sacando el apostrofe a 'Call CargarArrayLluvia , ya se arregla el bug sin modificar todo lo que pusiste vos!!

Saludos
 

miqueas150

The Prophet
Ex-Staff
#8
Ya esta solucionado, pero no se precisa hacer todo lo que puso arriba, solo con sacar el apostrofe a 'Call CargarArrayLluvia ya se soluciona!!
Eso no es una solucion...
Si se crea una particula simplemente hay que eliminarla, lo que hacen puede solucionarlo de alguna manera rara digamos.
Pero en si esta mal, dejen de hacer las cosas atadas con alambre por favor..
 
#9
El paquete que crea la lluvia con partículas esta mal cuando la booleana esta en false debería borrar las particulas y no hacer esa comprobacion en el Effect_UpdateAll como dice miqueas
 
Última edición:
#10
Eso no es una solucion...
Si se crea una particula simplemente hay que eliminarla, lo que hacen puede solucionarlo de alguna manera rara digamos.
Pero en si esta mal, dejen de hacer las cosas atadas con alambre por favor..
Por que está mal?, osea se que esta forma "lo soluciona"... pero cual sería la mejor forma de solucionarlo?
edit: y sobre el "dejen de atar las cosas con alambre", trato de hacerlo lo mejor q puedo, estoy aprendiendo (con onda te lo digo), no seas sorete, de ultima decinos como lo harias vos y listo, muchas gracias.
 
Última edición:

miqueas150

The Prophet
Ex-Staff
#11
Por que está mal?, osea se que esta forma "lo soluciona"... pero cual sería la mejor forma de solucionarlo?
edit: y sobre el "dejen de atar las cosas con alambre", trato de hacerlo lo mejor q puedo, estoy aprendiendo (con onda te lo digo), no seas sorete, de ultima decinos como lo harias vos y listo, muchas gracias.
a ver alguno es tan generoso de dejar el paquete que crea la lluvia con particulas por favor..
 

ElAguSS

Destructor Lvl 1
#13
Sera esto ??
Código:
Function Effect_Rain_Begin(ByVal Gfx As Integer, ByVal Particles As Integer) As Integer
'*****************************************************************
'More info: http://www.vbgore.com/CommonCode.Particles.Effect_Rain_Begin
'*****************************************************************
Dim EffectIndex As Integer
Dim LoopC As Long

    'Get the next open effect slot
    EffectIndex = Effect_NextOpenSlot
    If EffectIndex = -1 Then Exit Function

    'Return the index of the used slot
    Effect_Rain_Begin = EffectIndex

    'Set the effect's variables
    Effect(EffectIndex).EffectNum = EffectNum_Rain      'Set the effect number
    Effect(EffectIndex).ParticleCount = Particles       'Set the number of particles
    Effect(EffectIndex).Used = True     'Enabled the effect
    Effect(EffectIndex).Gfx = Gfx       'Set the graphic

    'Set the number of particles left to the total avaliable
    Effect(EffectIndex).ParticlesLeft = Effect(EffectIndex).ParticleCount

    'Set the float variables
    Effect(EffectIndex).FloatSize = Effect_FToDW(10)    'Size of the particles

    'Redim the number of particles
    ReDim Effect(EffectIndex).Particles(0 To Effect(EffectIndex).ParticleCount)
    ReDim Effect(EffectIndex).PartVertex(0 To Effect(EffectIndex).ParticleCount)

    'Create the particles
    For LoopC = 0 To Effect(EffectIndex).ParticleCount
        Set Effect(EffectIndex).Particles(LoopC) = New Particle
        Effect(EffectIndex).Particles(LoopC).Used = True
        Effect(EffectIndex).PartVertex(LoopC).rhw = 1
        Effect_Rain_Reset EffectIndex, LoopC, 1
    Next LoopC

    'Set The Initial Time
    Effect(EffectIndex).PreviousFrame = timeGetTime

End Function

Código:
Private Sub Effect_Rain_Reset(ByVal EffectIndex As Integer, ByVal Index As Long, Optional ByVal FirstReset As Byte = 0)
'*****************************************************************
'More info: http://www.vbgore.com/CommonCode.Particles.Effect_Rain_Reset
'*****************************************************************

    If FirstReset = 1 Then

        'The very first reset
        Effect(EffectIndex).Particles(Index).ResetIt -200 + (Rnd * (frmMain.ScaleWidth + 400)), Rnd * (frmMain.ScaleHeight + 50), Rnd * 5, 25 + Rnd * 12, 0, 0

    Else

        'Any reset after first
        Effect(EffectIndex).Particles(Index).ResetIt -200 + (Rnd * 1200), -15 - Rnd * 185, Rnd * 5, 25 + Rnd * 12, 0, 0
        If Effect(EffectIndex).Particles(Index).sngX < -20 Then Effect(EffectIndex).Particles(Index).sngY = Rnd * (frmMain.ScaleHeight + 50)
        If Effect(EffectIndex).Particles(Index).sngX > frmMain.ScaleWidth Then Effect(EffectIndex).Particles(Index).sngY = Rnd * (frmMain.ScaleHeight + 50)
        If Effect(EffectIndex).Particles(Index).sngY > frmMain.ScaleHeight Then Effect(EffectIndex).Particles(Index).sngX = Rnd * (frmMain.ScaleWidth + 50)

    End If

    'Set the color
    Effect(EffectIndex).Particles(Index).ResetColor 1, 1, 1, 0.4, 0

End Sub
Código:
Private Sub Effect_Rain_Update(ByVal EffectIndex As Integer)
'*****************************************************************
'More info: http://www.vbgore.com/CommonCode.Particles.Effect_Rain_Update
'*****************************************************************
Dim ElapsedTime As Single
Dim LoopC As Long

    'Calculate the time difference
    ElapsedTime = (timeGetTime - Effect(EffectIndex).PreviousFrame) * 0.01
    Effect(EffectIndex).PreviousFrame = timeGetTime

    'Go through the particle loop
    For LoopC = 0 To Effect(EffectIndex).ParticleCount

        'Check if the particle is in use
        If Effect(EffectIndex).Particles(LoopC).Used Then

            'Update the particle
            Effect(EffectIndex).Particles(LoopC).UpdateParticle ElapsedTime

            'Check if to reset the particle
            If Effect(EffectIndex).Particles(LoopC).sngX < -200 Then Effect(EffectIndex).Particles(LoopC).sngA = 0
            If Effect(EffectIndex).Particles(LoopC).sngX > (frmMain.ScaleWidth + 200) Then Effect(EffectIndex).Particles(LoopC).sngA = 0
            If Effect(EffectIndex).Particles(LoopC).sngY > (frmMain.ScaleHeight + 200) Then Effect(EffectIndex).Particles(LoopC).sngA = 0

            'Time for a reset, baby!
            If Effect(EffectIndex).Particles(LoopC).sngA <= 0 Then

                'Reset the particle
                Effect_Rain_Reset EffectIndex, LoopC

            Else

                'Set the particle information on the particle vertex
                Effect(EffectIndex).PartVertex(LoopC).Color = D3DColorMake(Effect(EffectIndex).Particles(LoopC).sngR, Effect(EffectIndex).Particles(LoopC).sngG, Effect(EffectIndex).Particles(LoopC).sngB, Effect(EffectIndex).Particles(LoopC).sngA)
                Effect(EffectIndex).PartVertex(LoopC).X = Effect(EffectIndex).Particles(LoopC).sngX
                Effect(EffectIndex).PartVertex(LoopC).Y = Effect(EffectIndex).Particles(LoopC).sngY

            End If

        End If

    Next LoopC

End Sub
 

ElAguSS

Destructor Lvl 1
#15
pueden pasar el jodido paquete de la lluvia por favor ?
Este es?
Código:
Private Sub HandleRainToggle()
'***************************************************
'Author: Juan Martín Sotuyo Dodero (Maraxus)
'Last Modification: 05/17/06
'
'***************************************************
    'Remove packet ID
    Call incomingData.ReadByte
   
    If Not InMapBounds(UserPos.X, UserPos.Y) Then Exit Sub
   
    bTecho = (MapData(UserPos.X, UserPos.Y).Trigger = 1 Or _
            MapData(UserPos.X, UserPos.Y).Trigger = 2 Or _
            MapData(UserPos.X, UserPos.Y).Trigger = 4)
    If bRain Then
        If bLluvia(UserMap) Then
            'Stop playing the rain sound
            Call Audio.StopWave(RainBufferIndex)
            RainBufferIndex = 0
            If bTecho Then
                Call Audio.PlayWave("lluviainend.wav", 0, 0, LoopStyle.Disabled)
            Else
                Call Audio.PlayWave("lluviaoutend.wav", 0, 0, LoopStyle.Disabled)
            End If
            frmMain.IsPlaying = PlayLoop.plNone
        End If
    End If
   
    bRain = Not bRain
End Sub
 

ElAguSS

Destructor Lvl 1
#17
dios mio este shak donde mierda puso para crear la particula mejor busca Effect_Rain_Begin

y pasame donde esta.
Acá encontró esto solamente jaja
Código:
Sub Engine_Weather_Update()
    If bRain And CurMapAmbient.Rain = True Then
        If WeatherEffectIndex <= 0 Then
            WeatherEffectIndex = Effect_Rain_Begin(9, 100)
        ElseIf Effect(WeatherEffectIndex).EffectNum <> EffectNum_Rain Then
            Effect_Kill WeatherEffectIndex
            WeatherEffectIndex = Effect_Rain_Begin(9, 100)
        ElseIf Not Effect(WeatherEffectIndex).Used Then
            WeatherEffectIndex = Effect_Rain_Begin(9, 100)
        End If
    End If

    If CurMapAmbient.Snow = True Then
        If WeatherEffectIndex <= 0 Then
            WeatherEffectIndex = Effect_Snow_Begin(14, 200)
        ElseIf Effect(WeatherEffectIndex).EffectNum <> EffectNum_Snow Then
            Effect_Kill WeatherEffectIndex
            WeatherEffectIndex = Effect_Snow_Begin(14, 200)
        ElseIf Not Effect(WeatherEffectIndex).Used Then
            WeatherEffectIndex = Effect_Snow_Begin(14, 200)
        End If
    End If
           
    If CurMapAmbient.Fog <> -1 Then
        Engine_Weather_UpdateFog
    End If
   
    If OnRampageImgGrh <> 0 Then
        DDrawTransGrhIndextoSurface OnRampageImgGrh, 0, 0, 0, Normal_RGBList(), 0, True
    End If
   
End Sub
 

miqueas150

The Prophet
Ex-Staff
#20
el tema es que seguramente nunca pone

CurMapAmbient.Rain = not CurMapAmbient.Rain
en el paquete de la lluvia.

Private Sub HandleRainToggle()

lo que si es necesario que cuando empiece el motor grafico esa variable este en False. o ni idea de donde toma el valor, pero estando asi funca todo tranquilo.

Otra salida es poner esto en el paquete de lluvia cuando bRain = false


  1. If WeatherEffectIndex <= 0 then
  2. If Effect(WeatherEffectIndex).EffectNum = EffectNum_Rain Then
  3. Effect_Kill WeatherEffectIndex
  4. End if
  5. End if
 
Arriba