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

Passed
Pull Request — master (#1005)
by Dan
04:25
created

getModifiedForceAccuracyAgainstPlayerUsingRandom()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 5
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 3
1
<?php declare(strict_types=1);
2
3
class SmrCombatDrones extends AbstractSmrCombatWeapon {
4
	const MAX_CDS_RAND = 54;
5
	protected $numberOfCDs;
6
7
	public function __construct($gameTypeID, $numberOfCDs, $portPlanetDrones = false) {
8
		$this->gameTypeID = $gameTypeID;
9
		$this->numberOfCDs = $numberOfCDs;
10
		$this->name = 'Combat Drones';
11
		$this->raceID = 0;
0 ignored issues
show
Bug Best Practice introduced by
The property raceID does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
12
		if ($portPlanetDrones === false) {
13
			$this->maxDamage = 2;
14
			$this->shieldDamage = 2;
15
			$this->armourDamage = 2;
16
		} else {
17
			$this->maxDamage = 1;
18
			$this->shieldDamage = 1;
19
			$this->armourDamage = 1;
20
		}
21
		$this->accuracy = 3;
22
		$this->damageRollover = true;
23
	}
24
25
	public function getNumberOfCDs() {
26
		return $this->numberOfCDs;
27
	}
28
29
	public function getModifiedAccuracy() {
30
		$modifiedAccuracy = $this->getBaseAccuracy();
31
		return $modifiedAccuracy;
32
	}
33
34
	protected function getModifiedAccuracyAgainstForcesUsingRandom(AbstractSmrPlayer $weaponPlayer, SmrForce $forces, $random) {
0 ignored issues
show
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

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

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

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

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...
35
		$modifiedAccuracy = $this->getModifiedAccuracy();
36
		$modifiedAccuracy += $random;
37
38
		return max(0, min(100, $modifiedAccuracy));
39
	}
40
	public function getModifiedAccuracyAgainstForces(AbstractSmrPlayer $weaponPlayer, SmrForce $forces) {
41
		return $this->getModifiedAccuracyAgainstForcesUsingRandom($weaponPlayer, $forces, rand(3, self::MAX_CDS_RAND));
42
	}
43
44
	protected function getModifiedAccuracyAgainstPortUsingRandom(AbstractSmrPlayer $weaponPlayer, SmrPort $port, $random) {
0 ignored issues
show
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

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

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

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

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...
45
		$modifiedAccuracy = $this->getModifiedAccuracy();
46
		$modifiedAccuracy += $random;
47
48
		return max(0, min(100, $modifiedAccuracy));
49
	}
50
	public function getModifiedAccuracyAgainstPort(AbstractSmrPlayer $weaponPlayer, SmrPort $port) {
51
		return $this->getModifiedAccuracyAgainstPortUsingRandom($weaponPlayer, $port, rand(3, self::MAX_CDS_RAND));
52
	}
53
54
	protected function getModifiedAccuracyAgainstPlanetUsingRandom(AbstractSmrPlayer $weaponPlayer, SmrPlanet $planet, $random) {
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

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

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

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

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...
55
		$modifiedAccuracy = $this->getModifiedAccuracy();
56
		$modifiedAccuracy += $random;
57
58
		return max(0, min(100, $modifiedAccuracy));
59
	}
60
	public function getModifiedAccuracyAgainstPlanet(AbstractSmrPlayer $weaponPlayer, SmrPlanet $planet) {
61
		return $this->getModifiedAccuracyAgainstPlanetUsingRandom($weaponPlayer, $planet, rand(3, self::MAX_CDS_RAND));
62
	}
63
64
65
	public function getModifiedAccuracyAgainstPlayer(AbstractSmrPlayer $weaponPlayer, AbstractSmrPlayer $targetPlayer) {
66
		return $this->getModifiedAccuracyAgainstPlayerUsingRandom($weaponPlayer, $targetPlayer, rand(3, self::MAX_CDS_RAND));
67
	}
68
69
	protected function getModifiedAccuracyAgainstPlayerUsingRandom(AbstractSmrPlayer $weaponPlayer, AbstractSmrPlayer $targetPlayer, $random) {
70
		$modifiedAccuracy = $this->getModifiedAccuracy();
71
		$levelRand = rand(IFloor($weaponPlayer->getLevelID() / 2), $weaponPlayer->getLevelID());
72
		$modifiedAccuracy += ($random + $levelRand - ($targetPlayer->getLevelID() - $weaponPlayer->getLevelID()) / 3) / 1.5;
73
74
		$weaponShip = $weaponPlayer->getShip();
75
		$targetShip = $targetPlayer->getShip();
76
		$mrDiff = $targetShip->getMR() - $weaponShip->getMR();
77
		if ($mrDiff > 0) {
78
			$modifiedAccuracy -= $this->getBaseAccuracy() * ($mrDiff / MR_FACTOR) / 100;
79
		}
80
81
		return max(0, min(100, $modifiedAccuracy));
82
	}
83
84
	public function getModifiedForceAccuracyAgainstPlayer(SmrForce $forces, AbstractSmrPlayer $targetPlayer) {
85
		return $this->getModifiedForceAccuracyAgainstPlayerUsingRandom($forces, $targetPlayer, rand(3, self::MAX_CDS_RAND));
86
	}
87
88
	protected function getModifiedForceAccuracyAgainstPlayerUsingRandom(SmrForce $forces, AbstractSmrPlayer $targetPlayer, $random) {
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

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

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

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

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...
89
		$modifiedAccuracy = $this->getModifiedAccuracy();
90
		$modifiedAccuracy += $random;
91
92
		return max(0, min(100, $modifiedAccuracy));
93
	}
94
95
	protected function getModifiedPortAccuracyAgainstPlayer(SmrPort $port, AbstractSmrPlayer $targetPlayer) {
0 ignored issues
show
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

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

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 $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

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

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...
96
		return 100;
97
	}
98
99
	protected function getModifiedPlanetAccuracyAgainstPlayer(SmrPlanet $planet, AbstractSmrPlayer $targetPlayer) {
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

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

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

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

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