Scrutinizer GitHub App not installed

We could not synchronize checks via GitHub's checks API since Scrutinizer's GitHub App is not installed for this repository.

Install GitHub App

Failed Conditions
Push — master ( 9b048e...fe1ddb )
by Dan
23s queued 16s
created

SmrCombatDrones::getNumberOfCDs()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 2
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php declare(strict_types=1);
2
3
class SmrCombatDrones extends AbstractSmrCombatWeapon {
4
	use Traits\CombatWeaponForce;
5
6
	const MAX_CDS_RAND = 54;
7
8
	public function __construct(int $numberOfCDs, bool $portPlanetDrones = false) {
9
		$this->amount = $numberOfCDs;
10
		$this->name = 'Combat Drones';
11
		if ($portPlanetDrones === false) {
12
			$this->shieldDamage = 2;
13
			$this->armourDamage = 2;
14
		} else {
15
			$this->shieldDamage = 1;
16
			$this->armourDamage = 1;
17
		}
18
		$this->accuracy = 3;
19
		$this->damageRollover = true;
20
	}
21
22
	public function getModifiedAccuracy() : float {
23
		$modifiedAccuracy = $this->getBaseAccuracy();
24
		return $modifiedAccuracy;
25
	}
26
27
	protected function getModifiedAccuracyAgainstForcesUsingRandom(AbstractSmrPlayer $weaponPlayer, SmrForce $forces, int $random) : float {
0 ignored issues
show
Unused Code introduced by
The parameter $weaponPlayer is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

27
	protected function getModifiedAccuracyAgainstForcesUsingRandom(/** @scrutinizer ignore-unused */ AbstractSmrPlayer $weaponPlayer, SmrForce $forces, int $random) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $forces is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

27
	protected function getModifiedAccuracyAgainstForcesUsingRandom(AbstractSmrPlayer $weaponPlayer, /** @scrutinizer ignore-unused */ SmrForce $forces, int $random) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
28
		$modifiedAccuracy = $this->getModifiedAccuracy();
29
		$modifiedAccuracy += $random;
30
31
		return max(0, min(100, $modifiedAccuracy));
32
	}
33
34
	public function getModifiedAccuracyAgainstForces(AbstractSmrPlayer $weaponPlayer, SmrForce $forces) : float {
35
		return $this->getModifiedAccuracyAgainstForcesUsingRandom($weaponPlayer, $forces, rand(3, self::MAX_CDS_RAND));
36
	}
37
38
	protected function getModifiedAccuracyAgainstPortUsingRandom(AbstractSmrPlayer $weaponPlayer, SmrPort $port, int $random) : float {
0 ignored issues
show
Unused Code introduced by
The parameter $weaponPlayer is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

38
	protected function getModifiedAccuracyAgainstPortUsingRandom(/** @scrutinizer ignore-unused */ AbstractSmrPlayer $weaponPlayer, SmrPort $port, int $random) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $port is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

38
	protected function getModifiedAccuracyAgainstPortUsingRandom(AbstractSmrPlayer $weaponPlayer, /** @scrutinizer ignore-unused */ SmrPort $port, int $random) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
39
		$modifiedAccuracy = $this->getModifiedAccuracy();
40
		$modifiedAccuracy += $random;
41
42
		return max(0, min(100, $modifiedAccuracy));
43
	}
44
45
	public function getModifiedAccuracyAgainstPort(AbstractSmrPlayer $weaponPlayer, SmrPort $port) : float {
46
		return $this->getModifiedAccuracyAgainstPortUsingRandom($weaponPlayer, $port, rand(3, self::MAX_CDS_RAND));
47
	}
48
49
	protected function getModifiedAccuracyAgainstPlanetUsingRandom(AbstractSmrPlayer $weaponPlayer, SmrPlanet $planet, int $random) : float {
0 ignored issues
show
Unused Code introduced by
The parameter $planet is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

49
	protected function getModifiedAccuracyAgainstPlanetUsingRandom(AbstractSmrPlayer $weaponPlayer, /** @scrutinizer ignore-unused */ SmrPlanet $planet, int $random) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $weaponPlayer is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

49
	protected function getModifiedAccuracyAgainstPlanetUsingRandom(/** @scrutinizer ignore-unused */ AbstractSmrPlayer $weaponPlayer, SmrPlanet $planet, int $random) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
50
		$modifiedAccuracy = $this->getModifiedAccuracy();
51
		$modifiedAccuracy += $random;
52
53
		return max(0, min(100, $modifiedAccuracy));
54
	}
55
56
	public function getModifiedAccuracyAgainstPlanet(AbstractSmrPlayer $weaponPlayer, SmrPlanet $planet) : float {
57
		return $this->getModifiedAccuracyAgainstPlanetUsingRandom($weaponPlayer, $planet, rand(3, self::MAX_CDS_RAND));
58
	}
59
60
	public function getModifiedAccuracyAgainstPlayer(AbstractSmrPlayer $weaponPlayer, AbstractSmrPlayer $targetPlayer) : float {
61
		return $this->getModifiedAccuracyAgainstPlayerUsingRandom($weaponPlayer, $targetPlayer, rand(3, self::MAX_CDS_RAND));
62
	}
63
64
	protected function getModifiedAccuracyAgainstPlayerUsingRandom(AbstractSmrPlayer $weaponPlayer, AbstractSmrPlayer $targetPlayer, int $random) : float {
65
		$modifiedAccuracy = $this->getModifiedAccuracy();
66
		$levelRand = rand(IFloor($weaponPlayer->getLevelID() / 2), $weaponPlayer->getLevelID());
67
		$modifiedAccuracy += ($random + $levelRand - ($targetPlayer->getLevelID() - $weaponPlayer->getLevelID()) / 3) / 1.5;
68
69
		$weaponShip = $weaponPlayer->getShip();
70
		$targetShip = $targetPlayer->getShip();
71
		$mrDiff = $targetShip->getMR() - $weaponShip->getMR();
72
		if ($mrDiff > 0) {
73
			$modifiedAccuracy -= $this->getBaseAccuracy() * ($mrDiff / MR_FACTOR) / 100;
74
		}
75
76
		return max(0, min(100, $modifiedAccuracy));
77
	}
78
79
	public function getModifiedForceAccuracyAgainstPlayer(SmrForce $forces, AbstractSmrPlayer $targetPlayer) : float {
80
		return $this->getModifiedForceAccuracyAgainstPlayerUsingRandom($forces, $targetPlayer, rand(3, self::MAX_CDS_RAND));
81
	}
82
83
	protected function getModifiedForceAccuracyAgainstPlayerUsingRandom(SmrForce $forces, AbstractSmrPlayer $targetPlayer, int $random) : float {
0 ignored issues
show
Unused Code introduced by
The parameter $targetPlayer is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

83
	protected function getModifiedForceAccuracyAgainstPlayerUsingRandom(SmrForce $forces, /** @scrutinizer ignore-unused */ AbstractSmrPlayer $targetPlayer, int $random) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $forces is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

83
	protected function getModifiedForceAccuracyAgainstPlayerUsingRandom(/** @scrutinizer ignore-unused */ SmrForce $forces, AbstractSmrPlayer $targetPlayer, int $random) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
84
		$modifiedAccuracy = $this->getModifiedAccuracy();
85
		$modifiedAccuracy += $random;
86
87
		return max(0, min(100, $modifiedAccuracy));
88
	}
89
90
	protected function getModifiedPortAccuracyAgainstPlayer(SmrPort $port, AbstractSmrPlayer $targetPlayer) : float {
0 ignored issues
show
Unused Code introduced by
The parameter $targetPlayer is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

90
	protected function getModifiedPortAccuracyAgainstPlayer(SmrPort $port, /** @scrutinizer ignore-unused */ AbstractSmrPlayer $targetPlayer) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $port is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

90
	protected function getModifiedPortAccuracyAgainstPlayer(/** @scrutinizer ignore-unused */ SmrPort $port, AbstractSmrPlayer $targetPlayer) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
91
		return 100;
92
	}
93
94
	protected function getModifiedPlanetAccuracyAgainstPlayer(SmrPlanet $planet, AbstractSmrPlayer $targetPlayer) : float {
0 ignored issues
show
Unused Code introduced by
The parameter $targetPlayer is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

94
	protected function getModifiedPlanetAccuracyAgainstPlayer(SmrPlanet $planet, /** @scrutinizer ignore-unused */ AbstractSmrPlayer $targetPlayer) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $planet is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

94
	protected function getModifiedPlanetAccuracyAgainstPlayer(/** @scrutinizer ignore-unused */ SmrPlanet $planet, AbstractSmrPlayer $targetPlayer) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
95
		return 100;
96
	}
97
98
	public function getModifiedDamageAgainstForces(AbstractSmrPlayer $weaponPlayer, SmrForce $forces) : array {
99
		if (!$this->canShootForces()) {
100
			// If we can't shoot forces then just return a damageless array and don't waste resources calculated any damage mods.
101
			return array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
102
		}
103
		$damage = $this->getDamage();
104
		$damage['Launched'] = ICeil($this->getAmount() * $this->getModifiedAccuracyAgainstForces($weaponPlayer, $forces) / 100);
105
		$damage['Kamikaze'] = 0;
106
		if ($weaponPlayer->isCombatDronesKamikazeOnMines()) { // If kamikaze then damage is same as MINE_ARMOUR
107
			$damage['Kamikaze'] = min($damage['Launched'], $forces->getMines());
108
			$damage['Launched'] -= $damage['Kamikaze'];
109
		}
110
		$damage['MaxDamage'] = ICeil($damage['Launched'] * $damage['MaxDamage']);
111
		$damage['Shield'] = ICeil($damage['Launched'] * $damage['Shield']);
112
		$damage['Armour'] = ICeil($damage['Launched'] * $damage['Armour']);
113
114
		$damage['Launched'] += $damage['Kamikaze'];
115
		$damage['MaxDamage'] += $damage['Kamikaze'] * MINE_ARMOUR;
116
		$damage['Shield'] += $damage['Kamikaze'] * MINE_ARMOUR;
117
		$damage['Armour'] += $damage['Kamikaze'] * MINE_ARMOUR;
118
119
		return $damage;
120
	}
121
122
	public function getModifiedDamageAgainstPort(AbstractSmrPlayer $weaponPlayer, SmrPort $port) : array {
123
		if (!$this->canShootPorts()) {
124
			// If we can't shoot forces then just return a damageless array and don't waste resources calculated any damage mods.
125
			return array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
126
		}
127
		$damage = $this->getDamage();
128
		$damage['Launched'] = ICeil($this->getAmount() * $this->getModifiedAccuracyAgainstPort($weaponPlayer, $port) / 100);
129
		$damage['MaxDamage'] = ICeil($damage['Launched'] * $damage['MaxDamage']);
130
		$damage['Shield'] = ICeil($damage['Launched'] * $damage['Shield']);
131
		$damage['Armour'] = ICeil($damage['Launched'] * $damage['Armour']);
132
133
		return $damage;
134
	}
135
136
	public function getModifiedDamageAgainstPlanet(AbstractSmrPlayer $weaponPlayer, SmrPlanet $planet) : array {
137
		if (!$this->canShootPlanets()) {
138
			// If we can't shoot forces then just return a damageless array and don't waste resources calculated any damage mods.
139
			return array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
140
		}
141
		$damage = $this->getDamage();
142
		$damage['Launched'] = ICeil($this->getAmount() * $this->getModifiedAccuracyAgainstPlanet($weaponPlayer, $planet) / 100);
143
		$planetMod = self::PLANET_DAMAGE_MOD;
144
		$damage['MaxDamage'] = ICeil($damage['Launched'] * $damage['MaxDamage'] * $planetMod);
145
		$damage['Shield'] = ICeil($damage['Launched'] * $damage['Shield'] * $planetMod);
146
		$damage['Armour'] = ICeil($damage['Launched'] * $damage['Armour'] * $planetMod);
147
148
		return $damage;
149
	}
150
151
	public function getModifiedDamageAgainstPlayer(AbstractSmrPlayer $weaponPlayer, AbstractSmrPlayer $targetPlayer) : array {
152
		if (!$this->canShootTraders()) { // If we can't shoot traders then just return a damageless array and don't waste resources calculated any damage mods.
153
			$return = array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
154
			return $return;
155
		}
156
		$damage = $this->getDamage();
157
		if ($targetPlayer->getShip()->hasDCS()) {
158
			$damage['MaxDamage'] *= DCS_PLAYER_DAMAGE_DECIMAL_PERCENT;
159
			$damage['Shield'] *= DCS_PLAYER_DAMAGE_DECIMAL_PERCENT;
160
			$damage['Armour'] *= DCS_PLAYER_DAMAGE_DECIMAL_PERCENT;
161
		}
162
		$damage['Launched'] = ICeil($this->getAmount() * $this->getModifiedAccuracyAgainstPlayer($weaponPlayer, $targetPlayer) / 100);
163
		$damage['MaxDamage'] = ICeil($damage['Launched'] * $damage['MaxDamage']);
164
		$damage['Shield'] = ICeil($damage['Launched'] * $damage['Shield']);
165
		$damage['Armour'] = ICeil($damage['Launched'] * $damage['Armour']);
166
		return $damage;
167
	}
168
169
	public function getModifiedForceDamageAgainstPlayer(SmrForce $forces, AbstractSmrPlayer $targetPlayer) : array {
170
		if (!$this->canShootTraders()) { // If we can't shoot traders then just return a damageless array and don't waste resources calculated any damage mods.
171
			$return = array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
172
			return $return;
173
		}
174
		$damage = $this->getDamage();
175
176
		if ($targetPlayer->getShip()->hasDCS()) {
177
			$damage['MaxDamage'] *= DCS_FORCE_DAMAGE_DECIMAL_PERCENT;
178
			$damage['Shield'] *= DCS_FORCE_DAMAGE_DECIMAL_PERCENT;
179
			$damage['Armour'] *= DCS_FORCE_DAMAGE_DECIMAL_PERCENT;
180
		}
181
182
		$damage['Launched'] = ICeil($this->getAmount() * $this->getModifiedForceAccuracyAgainstPlayer($forces, $targetPlayer) / 100);
183
		$damage['MaxDamage'] = ICeil($damage['Launched'] * $damage['MaxDamage']);
184
		$damage['Shield'] = ICeil($damage['Launched'] * $damage['Shield']);
185
		$damage['Armour'] = ICeil($damage['Launched'] * $damage['Armour']);
186
		return $damage;
187
	}
188
189
	public function getModifiedPortDamageAgainstPlayer(SmrPort $port, AbstractSmrPlayer $targetPlayer) : array {
190
		if (!$this->canShootTraders()) { // If we can't shoot traders then just return a damageless array and don't waste resources calculated any damage mods.
191
			$return = array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
192
			return $return;
193
		}
194
		$damage = $this->getDamage();
195
196
		if ($targetPlayer->getShip()->hasDCS()) {
197
			$damage['MaxDamage'] *= DCS_PORT_DAMAGE_DECIMAL_PERCENT;
198
			$damage['Shield'] *= DCS_PORT_DAMAGE_DECIMAL_PERCENT;
199
			$damage['Armour'] *= DCS_PORT_DAMAGE_DECIMAL_PERCENT;
200
		}
201
		$damage['Launched'] = ICeil($this->getAmount() * $this->getModifiedPortAccuracyAgainstPlayer($port, $targetPlayer) / 100);
202
		$damage['MaxDamage'] = ICeil($damage['Launched'] * $damage['MaxDamage']);
203
		$damage['Shield'] = ICeil($damage['Launched'] * $damage['Shield']);
204
		$damage['Armour'] = ICeil($damage['Launched'] * $damage['Armour']);
205
		return $damage;
206
	}
207
208
	public function getModifiedPlanetDamageAgainstPlayer(SmrPlanet $planet, AbstractSmrPlayer $targetPlayer) : array {
209
		if (!$this->canShootTraders()) { // If we can't shoot traders then just return a damageless array and don't waste resources calculated any damage mods.
210
			$return = array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
211
			return $return;
212
		}
213
		$damage = $this->getDamage();
214
215
		if ($targetPlayer->getShip()->hasDCS()) {
216
			$damage['MaxDamage'] *= DCS_PLANET_DAMAGE_DECIMAL_PERCENT;
217
			$damage['Shield'] *= DCS_PLANET_DAMAGE_DECIMAL_PERCENT;
218
			$damage['Armour'] *= DCS_PLANET_DAMAGE_DECIMAL_PERCENT;
219
		}
220
		$damage['Launched'] = ICeil($this->getAmount() * $this->getModifiedPlanetAccuracyAgainstPlayer($planet, $targetPlayer) / 100);
221
		$damage['MaxDamage'] = ICeil($damage['Launched'] * $damage['MaxDamage']);
222
		$damage['Shield'] = ICeil($damage['Launched'] * $damage['Shield']);
223
		$damage['Armour'] = ICeil($damage['Launched'] * $damage['Armour']);
224
		return $damage;
225
	}
226
227
	public function shootForces(AbstractSmrPlayer $weaponPlayer, SmrForce $forces) : array {
228
		$return = array('Weapon' => $this, 'TargetForces' => $forces, 'Hit' => true);
229
		$return = $this->doPlayerDamageToForce($return, $weaponPlayer, $forces);
230
		if ($return['WeaponDamage']['Kamikaze'] > 0) {
231
			$weaponPlayer->getShip()->decreaseCDs($return['WeaponDamage']['Kamikaze']);
232
		}
233
		return $return;
234
	}
235
236
	public function shootPort(AbstractSmrPlayer $weaponPlayer, SmrPort $port) : array {
237
		$return = array('Weapon' => $this, 'TargetPort' => $port, 'Hit' => true);
238
		return $this->doPlayerDamageToPort($return, $weaponPlayer, $port);
239
	}
240
241
	public function shootPlanet(AbstractSmrPlayer $weaponPlayer, SmrPlanet $planet, bool $delayed) : array {
242
		$return = array('Weapon' => $this, 'TargetPlanet' => $planet, 'Hit' => true);
243
		return $this->doPlayerDamageToPlanet($return, $weaponPlayer, $planet, $delayed);
244
	}
245
246
	public function shootPlayer(AbstractSmrPlayer $weaponPlayer, AbstractSmrPlayer $targetPlayer) : array {
247
		$return = array('Weapon' => $this, 'TargetPlayer' => $targetPlayer, 'Hit' => true);
248
		return $this->doPlayerDamageToPlayer($return, $weaponPlayer, $targetPlayer);
249
	}
250
251
	public function shootPlayerAsForce(SmrForce $forces, AbstractSmrPlayer $targetPlayer) : array {
252
		$return = array('Weapon' => $this, 'TargetPlayer' => $targetPlayer, 'Hit' => true);
253
		return $this->doForceDamageToPlayer($return, $forces, $targetPlayer);
254
	}
255
256
	public function shootPlayerAsPort(SmrPort $forces, AbstractSmrPlayer $targetPlayer) : array {
257
		$return = array('Weapon' => $this, 'TargetPlayer' => $targetPlayer, 'Hit' => true);
258
		return $this->doPortDamageToPlayer($return, $forces, $targetPlayer);
259
	}
260
261
	public function shootPlayerAsPlanet(SmrPlanet $forces, AbstractSmrPlayer $targetPlayer) : array {
262
		$return = array('Weapon' => $this, 'TargetPlayer' => $targetPlayer, 'Hit' => true);
263
		return $this->doPlanetDamageToPlayer($return, $forces, $targetPlayer);
264
	}
265
}
266