Skip to content

Commit

Permalink
Fixed and rebalances
Browse files Browse the repository at this point in the history
  • Loading branch information
Sellafield committed Dec 30, 2024
1 parent ee6cc7e commit 894cd66
Show file tree
Hide file tree
Showing 3 changed files with 130 additions and 102 deletions.
22 changes: 13 additions & 9 deletions src/Perpetuum.RequestHandlers/EPBonusEvent.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
using System;
using Perpetuum.Accounting;
using Perpetuum.Data;
using Perpetuum.Data;
using Perpetuum.Host.Requests;
using Perpetuum.Services.EventServices;
using System;

namespace Perpetuum.RequestHandlers.Extensions
{
Expand All @@ -20,16 +19,21 @@ public EPBonusEvent(EPBonusEventService eventService)

public void HandleRequest(IRequest request)
{
using (var scope = Db.CreateTransaction())
using (System.Transactions.TransactionScope scope = Db.CreateTransaction())
{
var bonusAmount = request.Data.GetOrDefault<int>(k.bonus);
var durationHours = request.Data.GetOrDefault<int>(k.duration);
int existingBonus = _eventService.GetBonus();
int bonusAmount = request.Data.GetOrDefault<int>(k.bonus);
int resultingBonus = existingBonus + bonusAmount;

var checkArgs = bonusAmount >= MIN_BONUS && bonusAmount <= MAX_BONUS;
checkArgs = checkArgs && durationHours <= MAX_DURATION.TotalHours;
int timeRemained = _eventService.GetTimeRemained().Hours;
int durationHours = request.Data.GetOrDefault<int>(k.duration);
int resultingTime = timeRemained + durationHours;

bool checkArgs = resultingBonus >= MIN_BONUS && resultingBonus <= MAX_BONUS;
checkArgs = checkArgs && resultingTime <= MAX_DURATION.TotalHours;
checkArgs.ThrowIfFalse(ErrorCodes.InputTooHigh);

_eventService.SetEvent(bonusAmount, TimeSpan.FromHours(durationHours));
_eventService.SetEvent(resultingBonus, TimeSpan.FromHours(resultingTime));

scope.Complete();
}
Expand Down
47 changes: 27 additions & 20 deletions src/Perpetuum/Modules/ScorcherModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -69,29 +69,36 @@ protected override void OnAction()
.WithState(BeamState.Hit)
.WithDuration(TimeSpan.FromSeconds(5));
Zone.CreateBeam(deployBeamBuilder);
double coreNeutralized = electricDamage.Value * chainedDamageModifier;
double coreNeutralizedDone = 0.0;
ModifyValueByReactorRadiation(target, ref coreNeutralized);
coreNeutralized = ModifyValueByOptimalRange(chainedRobot, target, coreNeutralized);
if (coreNeutralized > 0.0)
{
double core = target.Core;

target.Core -= coreNeutralized;
coreNeutralizedDone = Math.Abs(core - target.Core);
target.OnCombatEvent(ParentRobot, new EnergyDispersionEventArgs(coreNeutralizedDone));

double threatValue = (coreNeutralizedDone / 2) + 1;

target.AddThreat(ParentRobot, new Threat(ThreatType.EnWar, threatValue));
if (!target.IsPlayer() || !Zone.Configuration.IsAlpha || target.HasPvpEffect)
{
double coreNeutralized = electricDamage.Value * chainedDamageModifier;
double coreNeutralizedDone = 0.0;
ModifyValueByReactorRadiation(target, ref coreNeutralized);
coreNeutralized = ModifyValueByOptimalRange(chainedRobot, target, coreNeutralized);
if (coreNeutralized > 0.0)
{
double core = target.Core;

target.Core -= coreNeutralized;
coreNeutralizedDone = Math.Abs(core - target.Core);
target.OnCombatEvent(ParentRobot, new EnergyDispersionEventArgs(coreNeutralizedDone));

double threatValue = (coreNeutralizedDone / 2) + 1;

target.AddThreat(ParentRobot, new Threat(ThreatType.EnWar, threatValue));
}

IDamageBuilder builder = GetDamageBuilder(coreNeutralizedDone);
_ = Task.Delay(TimeSpan.FromSeconds(1)).ContinueWith(t => target.TakeDamage(builder.Build()));
CombatLogPacket packet = new CombatLogPacket(CombatLogType.EnergyNeutralize, target, ParentRobot, this);
packet.AppendDouble(coreNeutralized);
packet.AppendDouble(coreNeutralizedDone);
packet.Send(target, ParentRobot);

ParentRobot.OnAggression(target);
}

IDamageBuilder builder = GetDamageBuilder(coreNeutralizedDone);
_ = Task.Delay(TimeSpan.FromSeconds(1)).ContinueWith(t => target.TakeDamage(builder.Build()));
CombatLogPacket packet = new CombatLogPacket(CombatLogType.EnergyNeutralize, target, ParentRobot, this);
packet.AppendDouble(coreNeutralized);
packet.AppendDouble(coreNeutralizedDone);
packet.Send(target, ParentRobot);
chainedRobot = (Robot)target;
chainedDamageModifier -= 0.15;
}
Expand Down
163 changes: 90 additions & 73 deletions src/Perpetuum/Services/EventServices/EPBonusEventService.cs
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
using Perpetuum.Threading.Process;
using Perpetuum.Threading;
using Perpetuum.Threading;
using Perpetuum.Threading.Process;
using System;
using System.Threading;
using System.Threading.Tasks;

namespace Perpetuum.Services.EventServices
{
public class EPBonusEventService : Process, IDisposable
{
private readonly TimeSpan THREAD_TIMEOUT = TimeSpan.FromSeconds(1);
private bool _disposedValue = false;
{
private readonly TimeSpan THREAD_TIMEOUT = TimeSpan.FromSeconds(1);
private bool _disposedValue = false;

private TimeSpan _duration;
private TimeSpan _duration;
private TimeSpan _elapsed;
private bool _eventStarted;
private bool _endingEvent;
Expand All @@ -20,71 +20,88 @@ public class EPBonusEventService : Process, IDisposable

public EPBonusEventService()
{
_lock = new ReaderWriterLockSlim();
Init();
_lock = new ReaderWriterLockSlim();
Init();
}

private void Init()
{
using (_lock.Write(THREAD_TIMEOUT))
{
_bonus = 0;
_duration = TimeSpan.MaxValue;
_elapsed = TimeSpan.Zero;
_eventStarted = false;
_endingEvent = false;
}
using (_lock.Write(THREAD_TIMEOUT))
{
_bonus = 0;
_duration = TimeSpan.MaxValue;
_elapsed = TimeSpan.Zero;
_eventStarted = false;
_endingEvent = false;
}
}

public int GetBonus()
{
using (_lock.Read(THREAD_TIMEOUT))
return _bonus;
using (_lock.Read(THREAD_TIMEOUT))
{
return _bonus;
}
}

public TimeSpan GetTimeRemained()
{
using (_lock.Read(THREAD_TIMEOUT))
{
return _duration - _elapsed;
}
}

public void SetEvent(int bonus, TimeSpan duration)
{
using (_lock.Write(THREAD_TIMEOUT))
{
_bonus = bonus;
_elapsed = TimeSpan.Zero;
_duration = duration;
_endingEvent = false;
_eventStarted = true;
}
using (_lock.Write(THREAD_TIMEOUT))
{
_bonus = bonus;
_elapsed = TimeSpan.Zero;
_duration = duration;
_endingEvent = false;
_eventStarted = true;
}
}

private void EndEvent()
{
using (_lock.Write(THREAD_TIMEOUT))
{
_bonus = 0;
_elapsed = TimeSpan.Zero;
_duration = TimeSpan.MaxValue;
_eventStarted = false;
_endingEvent = false;
}
using (_lock.Write(THREAD_TIMEOUT))
{
_bonus = 0;
_elapsed = TimeSpan.Zero;
_duration = TimeSpan.MaxValue;
_eventStarted = false;
_endingEvent = false;
}
}

public override void Update(TimeSpan time)
{
using (_lock.Read(THREAD_TIMEOUT))
{

if (!_eventStarted)
return;

if (_endingEvent)
return;
}

using (_lock.Write(THREAD_TIMEOUT))
{
_elapsed += time;
if (_elapsed < _duration)
return;
_endingEvent = true;
}
using (_lock.Read(THREAD_TIMEOUT))
{

if (!_eventStarted)
{
return;
}

if (_endingEvent)
{
return;
}
}

using (_lock.Write(THREAD_TIMEOUT))
{
_elapsed += time;
if (_elapsed < _duration)
{
return;
}

_endingEvent = true;
}

Task.Run(() => EndEvent());
}
Expand All @@ -100,26 +117,26 @@ public override void Start()
base.Start();
}

#region IDisposable Support

protected virtual void Dispose(bool disposing)
{
if (!_disposedValue)
{
if (disposing)
{
_lock?.Dispose();
_lock = null; // This shouldn't be necessary but added for good practice
}

_disposedValue = true;
}
}
public void Dispose()
{
Dispose(true);
}
#endregion
}
#region IDisposable Support

protected virtual void Dispose(bool disposing)
{
if (!_disposedValue)
{
if (disposing)
{
_lock?.Dispose();
_lock = null; // This shouldn't be necessary but added for good practice
}

_disposedValue = true;
}
}

public void Dispose()
{
Dispose(true);
}
#endregion
}
}

0 comments on commit 894cd66

Please sign in to comment.