diff --git a/Codigo/Admin.bas b/Codigo/Admin.bas index 8849d9ab..1ba68487 100644 --- a/Codigo/Admin.bas +++ b/Codigo/Admin.bas @@ -154,6 +154,7 @@ Public AssistDamageValidTime As Long 'valid time for damage to count as a Public AssistHelpValidTime As Long 'valid time for helpful spell to count as assist Public HideAfterHitTime As Long 'required time to hide again after a hit remove us from this state Public FactionReKillTime As Long 'required time between killing the same user to get factions points +Public AirHitReductParalisisTime As Integer 'you can hit to the air to reduce inmo/paralisis time Public Puerto As Long diff --git a/Codigo/EffectOverTime/MultipleAttacks.cls b/Codigo/EffectOverTime/MultipleAttacks.cls index 0f483123..355395d7 100644 --- a/Codigo/EffectOverTime/MultipleAttacks.cls +++ b/Codigo/EffectOverTime/MultipleAttacks.cls @@ -122,7 +122,7 @@ Public Sub IBaseEffectOverTime_Update(ByVal deltaTime As Long) If mPendingBlow > 0 Then mPendingBlowTime = mPendingBlowTime + deltaTime If mPendingBlowTime > 100 Then - Call UserAttackPosition(mDotInfo.TargetRef.ArrayIndex, mPendingBlowPos) + Call UserAttackPosition(mDotInfo.TargetRef.ArrayIndex, mPendingBlowPos, True) mPendingBlow = mPendingBlow - 1 If mPendingBlow = 0 And mTicks = 0 Then mDotInfo.RemoveEffect = True diff --git a/Codigo/FileIO.bas b/Codigo/FileIO.bas index 83558c8d..d7f77010 100644 --- a/Codigo/FileIO.bas +++ b/Codigo/FileIO.bas @@ -1084,6 +1084,7 @@ Sub LoadBalance() AssistHelpValidTime = val(BalanceIni.GetValue("EXTRA", "AssistHelpValidTime")) HideAfterHitTime = val(BalanceIni.GetValue("EXTRA", "HideAfterHitTime")) FactionReKillTime = val(BalanceIni.GetValue("EXTRA", "FactionReKillTime")) + AirHitReductParalisisTime = val(BalanceIni.GetValue("EXTRA", "AirHitReductParalisisTime")) 'stun PlayerStunTime = val(BalanceIni.GetValue("STUN", "PlayerStunTime")) NpcStunTime = val(BalanceIni.GetValue("STUN", "NpcStunTime")) diff --git a/Codigo/Protocol.bas b/Codigo/Protocol.bas index 713486a7..0f4ad35e 100644 --- a/Codigo/Protocol.bas +++ b/Codigo/Protocol.bas @@ -3577,9 +3577,6 @@ Private Sub HandleWorkLeftClick(ByVal UserIndex As Integer) Dim envie As Boolean Dim Particula As Integer Dim Tiempo As Long - If IsFeatureEnabled("remove-inv-on-attack") Then - Call RemoveUserInvisibility(UserIndex) - End If 208 Call UsuarioAtacaUsuario(UserIndex, tU, Ranged) Dim FX As Integer If .Invent.MunicionEqpObjIndex Then @@ -3589,7 +3586,7 @@ Private Sub HandleWorkLeftClick(ByVal UserIndex As Integer) UserList(tU).Counters.timeFx = 2 212 Call SendData(SendTarget.ToPCAliveArea, tU, PrepareMessageCreateFX(UserList(tU).Char.charindex, FX, 0, UserList(tU).Pos.X, UserList(tU).Pos.y)) End If - If ProjectileType > 0 And .flags.Oculto = 0 Then + If ProjectileType > 0 And (.flags.Oculto = 0 Or Not MapInfo(.pos.Map).KeepInviOnAttack) Then Call SendData(SendTarget.ToPCAliveArea, UserIndex, PrepareCreateProjectile(UserList(UserIndex).Pos.X, UserList(UserIndex).Pos.y, X, y, ProjectileType)) End If 'Si no es GM invisible, le envio el movimiento del arma. diff --git a/Codigo/SistemaCombate.bas b/Codigo/SistemaCombate.bas index 8b584644..d27e9f1e 100644 --- a/Codigo/SistemaCombate.bas +++ b/Codigo/SistemaCombate.bas @@ -921,7 +921,7 @@ UsuarioAtacaNpc_Err: End Sub -Public Sub UserAttackPosition(ByVal UserIndex As Integer, ByRef TargetPos As t_WorldPos) +Public Sub UserAttackPosition(ByVal UserIndex As Integer, ByRef TargetPos As t_WorldPos, Optional ByVal IsExtraHit As Boolean = False) 'Exit if not legal 126 If TargetPos.X >= XMinMapSize And TargetPos.X <= XMaxMapSize And TargetPos.Y >= YMinMapSize And TargetPos.Y <= YMaxMapSize Then 128 If ((MapData(TargetPos.map, TargetPos.X, TargetPos.Y).Blocked And 2 ^ (UserList(UserIndex).Char.Heading - 1)) <> 0) Then @@ -949,6 +949,12 @@ Public Sub UserAttackPosition(ByVal UserIndex As Integer, ByRef TargetPos As t_W Exit Sub Else 152 Call SendData(SendTarget.ToPCAliveArea, UserIndex, PrepareMessageCharSwing(UserList(UserIndex).Char.charindex, True, False)) + With UserList(UserIndex) + If Not IsExtraHit And .flags.Inmovilizado + .flags.Paralizado > 0 Then + .Counters.Inmovilizado = max(0, .Counters.Inmovilizado - PlayerInmuneTime) + .Counters.Paralisis = max(0, .Counters.Paralisis - PlayerInmuneTime) + End If + End With End If Else 154 Call SendData(SendTarget.ToPCAliveArea, UserIndex, PrepareMessageCharSwing(UserList(UserIndex).Char.charindex, True, False)) @@ -1002,10 +1008,10 @@ Public Sub UsuarioAtaca(ByVal UserIndex As Integer) Call IncreaseSingle(.Modifiers.PhysicalDamageBonus, -0.25) 'Side targets gets 50% damage AttackPos = UserList(UserIndex).pos Call GetHeadingRight(.Char.Heading, AttackPos) - Call UserAttackPosition(UserIndex, AttackPos) + Call UserAttackPosition(UserIndex, AttackPos, True) AttackPos = UserList(UserIndex).pos Call GetHeadingLeft(.Char.Heading, AttackPos) - Call UserAttackPosition(UserIndex, AttackPos) + Call UserAttackPosition(UserIndex, AttackPos, True) Call IncreaseSingle(.Modifiers.PhysicalDamageBonus, 0.5) 'return to prev state Else Call UserAttackPosition(UserIndex, AttackPos)