Skip to content

Commit

Permalink
Character TakeDamage, Fix ServerData Weapons params
Browse files Browse the repository at this point in the history
  • Loading branch information
Matodor committed Jan 10, 2019
1 parent d0fe0f4 commit 21c5216
Show file tree
Hide file tree
Showing 8 changed files with 91 additions and 12 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
![Logo of TeeSharp](https://github.com/Matodor/TeeSharp/raw/master/res/TeeSharp.png)

# TeeSharp
TeeSharp is implementation of Teeworlds in .NET
TeeSharp is implementation of Teeworlds in .NET Core

[![Discord](https://img.shields.io/discord/403578274284044299.svg?label=discord&style=for-the-badge)](https://discord.gg/qgBV9qZ)
[![Website](https://img.shields.io/website-up-down-green-red/http/shields.io.svg?label=teeworlds.su&style=for-the-badge)](http://teeworlds.su/)
Expand Down
4 changes: 2 additions & 2 deletions TeeSharp.Server/src/game/Entity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ private void OnDestroyed(Entity obj)
public delegate void EntityEvent(Entity entity);
public abstract class Entity : BaseInterface
{
public event EntityEvent Destroyed;
public event EntityEvent Reseted;
public virtual event EntityEvent Destroyed;
public virtual event EntityEvent Reseted;

/// <summary>
/// All entities on map
Expand Down
2 changes: 1 addition & 1 deletion TeeSharp.Server/src/game/GameContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ public override void CreateDeath(Vector2 position, int clientId)
e.ClientId = clientId;
}

public override void CreateDamage(Vector2 pos, Vector2 source,
public override void CreateDamageIndicator(Vector2 pos, Vector2 source,
int clientId, int healthAmount, int armorAmount, bool self)
{
var e = Events.Create<SnapshotEventDamage>(pos);
Expand Down
7 changes: 6 additions & 1 deletion TeeSharp.Server/src/game/GameController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,12 @@ public override bool IsTeamplay()
{
return GameFlags.HasFlag(GameFlags.Teams);
}


public override bool IsFriendlyFire(int clientId1, int clientId2)
{
return false;
}

public override bool CanSelfKill(BasePlayer player)
{
return true;
Expand Down
2 changes: 1 addition & 1 deletion TeeSharp.Server/src/game/abstract/BaseGameContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public abstract void SendGameplayMessage(int clientId, GameplayMessage message,
public abstract void CreateExplosion(Vector2 position, int owner, Weapon weapon, int maxDamage);
public abstract void CreatePlayerSpawn(Vector2 pos);
public abstract void CreateDeath(Vector2 position, int clientId);
public abstract void CreateDamage(Vector2 pos, Vector2 source,
public abstract void CreateDamageIndicator(Vector2 pos, Vector2 source,
int clientId, int healthAmount, int armorAmount, bool self);
public abstract void CreateHammerHit(Vector2 pos);
public abstract void CreateSound(Vector2 position, Sound sound, int mask = -1);
Expand Down
1 change: 1 addition & 0 deletions TeeSharp.Server/src/game/abstract/BaseGameController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ public abstract class BaseGameController : BaseInterface
public abstract bool IsPlayerReadyMode();
public abstract bool IsTeamChangeAllowed(BasePlayer player);
public abstract bool IsTeamplay();
public abstract bool IsFriendlyFire(int clientId1, int clientId2);
public abstract int Score(int clientId);

public abstract void Tick();
Expand Down
79 changes: 76 additions & 3 deletions TeeSharp.Server/src/game/entities/Character.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public delegate void CharacterDeadEvent(Character victim,

public class Character : Entity<Character>
{
public event CharacterDeadEvent Died;
public virtual event CharacterDeadEvent Died;

public readonly BasePlayer Player;

Expand Down Expand Up @@ -500,9 +500,82 @@ public virtual bool TakeDamage(Vector2 force, Vector2 source, int damage, int fr
{
Core.Velocity += force;

SetEmote(Emote.Pain, Server.Tick + Server.TickSpeed / 2);
if (GameContext.GameController.IsFriendlyFire(Player.ClientId, from))
return false;

if (from == Player.ClientId)
damage = Math.Max(1, damage / 2);

var prevHealth = Health;
var prevArmor = Armor;

if (damage > 0)
{
if (Armor > 0)
{
if (damage > 1)
{
Health--;
damage--;
}

if (damage > Armor)
{
damage -= Armor;
Armor = 0;
}
else
{
Armor -= damage;
damage = 0;
}
}

Health -= damage;
}

GameContext.CreateDamageIndicator(Position, source, Player.ClientId,
prevHealth - Health,
prevArmor - Armor, from == Player.ClientId);

bool AttackerExist() => from >= 0 && from != Player.ClientId && GameContext.Players[from] != null;

GameContext.CreateDamage(Position, source, Player.ClientId, 1, 1, from == Player.ClientId);
if (AttackerExist())
{
var mask = BaseGameContext.MaskOne(from);
for (var i = 0; i < GameContext.Players.Length; i++)
{
if (GameContext.Players[i] != null && (
GameContext.Players[i].Team == Team.Spectators ||
GameContext.Players[i].DeadSpectatorMode) &&
GameContext.Players[i].SpectatorId == from)
{
mask |= BaseGameContext.MaskOne(i);
}
}

GameContext.CreateSound(GameContext.Players[from].ViewPos, Sound.Hit, mask);
}

if (Health <= 0)
{
Die(from, weapon);

if (AttackerExist())
{
GameContext.Players[from]
.GetCharacter()?
.SetEmote(Emote.Happy, Server.Tick + Server.TickSpeed);
}

return false;
}

GameContext.CreateSound(Position, damage > 2
? Sound.PlayerPainLong
: Sound.PlayerPainShort);

SetEmote(Emote.Pain, Server.Tick + Server.TickSpeed / 2);
return true;
}

Expand Down
6 changes: 3 additions & 3 deletions TeeSharp.Server/src/server/ServerData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -125,15 +125,15 @@ public DataWeaponInfo this[Weapon weapon]
FireDelay = 500,
MaxAmmo = 10,
AmmoRegenTime = 0,
Damage = 1,
Damage = 6,
Curvature = 7f,
Speed = 1000f,
Lifetime = 2f,
},
new DataWeaponInfoRifle
{
Name = "rifle",
FireDelay = 500,
FireDelay = 800,
MaxAmmo = 10,
AmmoRegenTime = 0,
Damage = 5,
Expand All @@ -145,7 +145,7 @@ public DataWeaponInfo this[Weapon weapon]
new DataWeaponInfoNinja
{
Name = "ninja",
FireDelay = 500,
FireDelay = 800,
MaxAmmo = 10,
AmmoRegenTime = 0,
Damage = 9,
Expand Down

0 comments on commit 21c5216

Please sign in to comment.