private Task StartRegen(PlayerStatId statId, PlayerStatId regenStatId, PlayerStatId timeStatId) { // TODO: merge regen updates with larger packets return(Task.Run(async() => { while (true) { await Task.Delay(Stats[timeStatId].Current); lock (Stats) { if (Stats[statId].Current >= Stats[statId].Max) { return; } // TODO: Check if regen-enabled Stats[statId] = AddStatRegen(statId, regenStatId); Session?.FieldManager.BroadcastPacket(StatPacket.UpdateStats(Session.FieldPlayer, statId)); if (Party != null) { Party.BroadcastPacketParty(PartyPacket.UpdateHitpoints(this)); } } } })); }
public void DecreaseBase(PlayerStatId statIndex, int amount) { // Clamp Min to 0? PlayerStat stat = this[statIndex]; Data[statIndex] = new PlayerStat(stat.Max - amount, stat.Min - amount, stat.Current - amount); }
public void Increase(PlayerStatId statIndex, int amount) { PlayerStat stat = this[statIndex]; int newCurrent = Math.Min(stat.Max, stat.Current + amount); Data[statIndex] = new PlayerStat(stat.Max, stat.Min, newCurrent); }
private PlayerStat AddStatRegen(PlayerStatId statIndex, PlayerStatId regenStatIndex) { PlayerStat stat = Stats[statIndex]; int regen = Stats[regenStatIndex].Current; int postRegen = Math.Clamp(stat.Current + regen, 0, stat.Max); return(new PlayerStat(stat.Max, stat.Min, postRegen)); }
public static void WriteStat(this PacketWriter pWriter, PlayerStatId statId, PlayerStat stat) { if (statId == PlayerStatId.Hp) { for (int i = 0; i < 3; i++) { pWriter.WriteLong(stat[i]); } return; } pWriter.Write(stat); }
public void DecreaseMax(PlayerStatId statIndex, int amount) { PlayerStat stat = this[statIndex]; int newMax = Math.Clamp(stat.Max - amount, stat.Min, stat.Max); int newCurrent = stat.Current - amount; if (statIndex == PlayerStatId.Hp || statIndex == PlayerStatId.Spirit) { newCurrent = Math.Clamp(newCurrent, 50, newMax); // TODO: Find Hp/Sp reset formula } Data[statIndex] = new PlayerStat(newMax, stat.Min, newCurrent); }
public PlayerStat this[PlayerStatId statIndex] { get { return((PlayerStat)Data[statIndex]); } set { Data[statIndex] = value; } }
private Task OnlineTimer(PlayerStatId statId) { return(Task.Run(async() => { await Task.Delay(60000); lock (Timestamps) { Timestamps.OnlineDuration += 1; Timestamps.LastOnline = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); TrophyUpdate(23100001, 1); } })); }
public static Packet UpdateStats(IFieldObject<Player> player, PlayerStatId statId, params PlayerStatId[] otherIds) { PacketWriter pWriter = PacketWriter.Of(SendOp.STAT); pWriter.WriteInt(player.ObjectId); pWriter.WriteEnum(StatsMode.UpdateStats); pWriter.WriteByte((byte) (1 + otherIds.Length)); pWriter.WriteEnum(statId); pWriter.WriteStat(statId, player.Value.Stats[statId]); foreach (PlayerStatId otherId in otherIds) { pWriter.WriteEnum(otherId); pWriter.WriteStat(otherId, player.Value.Stats[otherId]); } return pWriter; }
private Task StartRegen(PlayerStatId statId, PlayerStatId regenStatId, PlayerStatId timeStatId) { return(Task.Run(async() => { await Task.Delay(Stats[timeStatId].Current); // TODO: Check if regen-enabled while (Stats[statId].Current < Stats[statId].Max) { lock (Stats) { Stats[statId] = AddStatRegen(statId, regenStatId); Session.Send(StatPacket.UpdateStats(Session.FieldPlayer, statId)); } await Task.Delay(Stats[timeStatId].Current); } })); }
public void Allocate(PlayerStatId statIndex) { int gainAmount = 1; switch (statIndex) { case PlayerStatId.Hp: gainAmount = 10; break; case PlayerStatId.CritRate: gainAmount = 3; break; default: break; } IncreaseMax(statIndex, gainAmount); }
private Task StartRegen(PlayerStatId statId, PlayerStatId regenStatId, PlayerStatId timeStatId) { // TODO: merge regen updates with larger packets return(Task.Run(async() => { while (true) { await Task.Delay(Stats[timeStatId].Current); lock (Stats) { if (Stats[statId].Current >= Stats[statId].Max) { return; } // TODO: Check if regen-enabled Stats[statId] = AddStatRegen(statId, regenStatId); Session.Send(StatPacket.UpdateStats(Session.FieldPlayer, statId)); } } })); }
public void Decrease(PlayerStatId statIndex, int amount) { PlayerStat stat = this[statIndex]; Data[statIndex] = new PlayerStat(stat.Max, stat.Min, stat.Current - amount); }
public void IncreaseBase(PlayerStatId statIndex, int amount) { PlayerStat stat = this[statIndex]; Data[statIndex] = new PlayerStat(stat.Max + amount, stat.Min + amount, stat.Current + amount); }