From 918e5ded0d6306720537862468ca5732e10c9e80 Mon Sep 17 00:00:00 2001 From: Maikel de Vries Date: Sat, 7 Jan 2017 14:46:52 +0100 Subject: [PATCH] add rule to prevent friendly fire --- .../AppendTo.ocd/System.ocg/MeleeWeapons.c | 13 ++ .../AppendTo.ocd/System.ocg/RangedWeapons.c | 17 +++ .../Rules.ocd/NoFriendlyFire.ocd/DefCore.txt | 7 + .../NoFriendlyFire.ocd/Graphics.4.png | Bin 0 -> 14324 bytes .../Rules.ocd/NoFriendlyFire.ocd/Script.c | 141 ++++++++++++++++++ .../NoFriendlyFire.ocd/StringTblDE.txt | 2 + .../NoFriendlyFire.ocd/StringTblUS.txt | 2 + 7 files changed, 182 insertions(+) create mode 100644 planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/AppendTo.ocd/System.ocg/MeleeWeapons.c create mode 100644 planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/AppendTo.ocd/System.ocg/RangedWeapons.c create mode 100644 planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/DefCore.txt create mode 100644 planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/Graphics.4.png create mode 100644 planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/Script.c create mode 100644 planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/StringTblDE.txt create mode 100644 planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/StringTblUS.txt diff --git a/planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/AppendTo.ocd/System.ocg/MeleeWeapons.c b/planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/AppendTo.ocd/System.ocg/MeleeWeapons.c new file mode 100644 index 000000000..0d4fa3694 --- /dev/null +++ b/planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/AppendTo.ocd/System.ocg/MeleeWeapons.c @@ -0,0 +1,13 @@ +// Disable friendly fire for melee weapons if rule is active. + +#appendto Library_MeleeWeapon + +public func ApplyShieldFactor(from, target, ...) +{ + var w_controller = from->GetController(); + var t_controller = target->GetController(); + if (FindObject(Find_ID(Rule_NoFriendlyFire))) + if (w_controller != NO_OWNER && t_controller != NO_OWNER && !Hostile(w_controller, t_controller)) + return 100; + return inherited(from, target, ...); +} \ No newline at end of file diff --git a/planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/AppendTo.ocd/System.ocg/RangedWeapons.c b/planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/AppendTo.ocd/System.ocg/RangedWeapons.c new file mode 100644 index 000000000..1e01c46a8 --- /dev/null +++ b/planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/AppendTo.ocd/System.ocg/RangedWeapons.c @@ -0,0 +1,17 @@ +// Disable friendly fire for ranged weapons if rule is active. + +#appendto Arrow +#appendto Javelin +#appendto LeadBullet +#appendto Boompack +#appendto Shrapnel + +public func HitObject(object target, ...) +{ + var w_controller = this->GetController(); + var t_controller = target->GetController(); + if (FindObject(Find_ID(Rule_NoFriendlyFire))) + if (w_controller != NO_OWNER && t_controller != NO_OWNER && !Hostile(w_controller, t_controller)) + return false; + return inherited(target, ...); +} diff --git a/planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/DefCore.txt b/planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/DefCore.txt new file mode 100644 index 000000000..e047d328a --- /dev/null +++ b/planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/DefCore.txt @@ -0,0 +1,7 @@ +[DefCore] +id=Rule_NoFriendlyFire +Version=8,0 +Category=C4D_StaticBack|C4D_Rule +Width=32 +Height=32 +Offset=-16,-16 \ No newline at end of file diff --git a/planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/Graphics.4.png b/planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/Graphics.4.png new file mode 100644 index 0000000000000000000000000000000000000000..c813e266dc13993cc37d362d9692b23ff521c24e GIT binary patch literal 14324 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 1) + return; + + // Find all crew members and protect them from friendly fire. + for (var crew in FindObjects(Find_OCF(OCF_CrewMember))) + DisableFriendlyFire(crew); + return; +} + +public func Destruction() +{ + // If this is not the last copy of this rule do nothing. + if (ObjectCount(Find_ID(Rule_NoFriendlyFire)) > 1) + return; + + // Find all crew members and allow friendly fire. + for (var crew in FindObjects(Find_OCF(OCF_CrewMember))) + EnableFriendlyFire(crew); + return; +} + +public func OnClonkRecruitment(object clonk, int plr) +{ + DisableFriendlyFire(clonk); + return; +} + +public func OnClonkDerecruitment(object clonk, int plr) +{ + EnableFriendlyFire(clonk); + return; +} + +public func OnClonkDeath(object clonk, int killed_by) +{ + EnableFriendlyFire(clonk); + return; +} + + +/*-- Friendly Fire --*/ + +public func DisableFriendlyFire(object for_obj) +{ + // Overload several functions to check for friendly fire. + if (for_obj.QueryCatchBlow != Rule_NoFriendlyFire.NoFF_QueryCatchBlow) + { + for_obj.Backup_QueryCatchBlow = for_obj.QueryCatchBlow; + for_obj.QueryCatchBlow = Rule_NoFriendlyFire.NoFF_QueryCatchBlow; + } + if (for_obj.BlastObject != Rule_NoFriendlyFire.NoFF_BlastObject) + { + for_obj.Backup_BlastObject = for_obj.BlastObject ?? Global.BlastObject; + for_obj.BlastObject = Rule_NoFriendlyFire.NoFF_BlastObject; + } + if (for_obj.DoShockwaveCheck != Rule_NoFriendlyFire.NoFF_DoShockwaveCheck) + { + for_obj.Backup_DoShockwaveCheck = for_obj.DoShockwaveCheck ?? Global.DoShockwaveCheck; + for_obj.DoShockwaveCheck = Rule_NoFriendlyFire.NoFF_DoShockwaveCheck; + } + return; +} + +public func EnableFriendlyFire(object for_obj) +{ + // Stop overloading functions to check for friendly fire. + if (for_obj.Backup_QueryCatchBlow != nil) + { + for_obj.QueryCatchBlow = for_obj.Backup_QueryCatchBlow; + for_obj.Backup_QueryCatchBlow = nil; + } + if (for_obj.Backup_BlastObject != nil) + { + for_obj.BlastObject = for_obj.Backup_BlastObject; + for_obj.Backup_BlastObject = nil; + } + if (for_obj.Backup_DoShockwaveCheck != nil) + { + for_obj.DoShockwaveCheck = for_obj.Backup_DoShockwaveCheck; + for_obj.Backup_DoShockwaveCheck = nil; + } + return; +} + +public func NoFF_QueryCatchBlow(object projectile, ...) +{ + var w_controller = projectile->GetController(); + var t_controller = this->GetController(); + if (w_controller != NO_OWNER && t_controller != NO_OWNER && !Hostile(w_controller, t_controller)) + return true; + if (this.Backup_QueryCatchBlow) + return this->Backup_QueryCatchBlow(projectile, ...); + return false; +} + +public func NoFF_BlastObject(int level, int caused_by, ...) +{ + var w_controller = caused_by; + var t_controller = this->GetController(); + if (w_controller != NO_OWNER && t_controller != NO_OWNER && !Hostile(w_controller, t_controller)) + return true; + return this->Backup_BlastObject(level, caused_by, ...); +} + +public func NoFF_DoShockwaveCheck(int x, int y, int caused_by, ...) +{ + var w_controller = caused_by; + var t_controller = this->GetController(); + if (w_controller != NO_OWNER && t_controller != NO_OWNER && !Hostile(w_controller, t_controller)) + return false; + return this->Backup_DoShockwaveCheck(x, y, caused_by, ...); +} + + +/*-- Description --*/ + +public func Activate(int plr) +{ + MessageWindow(this.Description, plr); + return true; +} + + +/*-- Properties --*/ + +local Name = "$Name$"; +local Description = "$Description$"; +local Visibility = VIS_Editor; +local EditorPlacementLimit = 1; diff --git a/planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/StringTblDE.txt b/planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/StringTblDE.txt new file mode 100644 index 000000000..2187842dc --- /dev/null +++ b/planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/StringTblDE.txt @@ -0,0 +1,2 @@ +Name=Kein Teambeschuss +Description=Clan-Mitglieder bekommen nur Schaden von feindlichen Angriffe ab. \ No newline at end of file diff --git a/planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/StringTblUS.txt b/planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/StringTblUS.txt new file mode 100644 index 000000000..6b54b44c1 --- /dev/null +++ b/planet/Objects.ocd/Rules.ocd/NoFriendlyFire.ocd/StringTblUS.txt @@ -0,0 +1,2 @@ +Name=No friendly fire +Description=Crew members only take damage from hostile fire. \ No newline at end of file