Conditions | 43 |
Paths | > 20000 |
Total Lines | 138 |
Code Lines | 78 |
Lines | 0 |
Ratio | 0 % |
Changes | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
1 | <?php |
||
131 | function sn_ube_combat_result_apply(&$combat_data) { |
||
132 | // TODO: Поменять все отладки на запросы |
||
133 | $destination_user_id = $combat_data[UBE_FLEETS][0][UBE_OWNER]; |
||
134 | |||
135 | $outcome = &$combat_data[UBE_OUTCOME]; |
||
136 | $planet_info = &$outcome[UBE_PLANET]; |
||
137 | $planet_id = $planet_info[PLANET_ID]; |
||
138 | // Обновляем поле обломков на планете |
||
139 | if (!$combat_data[UBE_OPTIONS][UBE_COMBAT_ADMIN] && !empty($outcome[UBE_DEBRIS])) { |
||
140 | DBStaticPlanet::db_planet_set_by_gspt($planet_info[PLANET_GALAXY], $planet_info[PLANET_SYSTEM], $planet_info[PLANET_PLANET], "`debris_metal` = `debris_metal` + " . floor($outcome[UBE_DEBRIS][RES_METAL]) . ", `debris_crystal` = `debris_crystal` + " . floor($outcome[UBE_DEBRIS][RES_CRYSTAL]), |
||
141 | PT_PLANET |
||
142 | ); |
||
143 | } |
||
144 | |||
145 | $db_save = array( |
||
146 | UBE_FLEET_GROUP => array(), // Для САБов |
||
147 | ); |
||
148 | |||
149 | $fleets_outcome = &$outcome[UBE_FLEETS]; |
||
150 | foreach ($combat_data[UBE_FLEETS] as $fleet_id => &$fleet_info) { |
||
151 | if ($fleet_info[UBE_FLEET_GROUP]) { |
||
152 | $db_save[UBE_FLEET_GROUP][$fleet_info[UBE_FLEET_GROUP]] = $fleet_info[UBE_FLEET_GROUP]; |
||
153 | } |
||
154 | |||
155 | $fleet_info[UBE_COUNT] = $fleet_info[UBE_COUNT] ? $fleet_info[UBE_COUNT] : array(); |
||
156 | $fleets_outcome[$fleet_id][UBE_UNITS_LOST] = $fleets_outcome[$fleet_id][UBE_UNITS_LOST] ? $fleets_outcome[$fleet_id][UBE_UNITS_LOST] : array(); |
||
157 | |||
158 | $fleet_query = array(); |
||
159 | $db_changeset = array(); |
||
160 | $old_fleet_count = array_sum($fleet_info[UBE_COUNT]); |
||
161 | $new_fleet_count = $old_fleet_count - array_sum($fleets_outcome[$fleet_id][UBE_UNITS_LOST]); |
||
162 | // Перебираем юниты если во время боя количество юнитов изменилось и при этом во флоту остались юниты или это планета |
||
163 | if ($new_fleet_count != $old_fleet_count && (!$fleet_id || $new_fleet_count)) { |
||
164 | // Просматриваем результаты изменения флотов |
||
165 | foreach ($fleet_info[UBE_COUNT] as $unit_id => $unit_count) { |
||
166 | // Перебираем аутком на случай восстановления юнитов |
||
167 | $units_lost = (float)$fleets_outcome[$fleet_id][UBE_UNITS_LOST][$unit_id]; |
||
168 | |||
169 | $units_left = $unit_count - $units_lost; |
||
170 | if ($fleet_id) { |
||
171 | // Не планета - всегда сразу записываем строку итогов флота |
||
172 | $fleet_query[$unit_id] = "{$unit_id},{$units_left}"; |
||
173 | } elseif ($units_lost) { |
||
174 | // Планета - записываем в ИД юнита его потери только если есть потери |
||
175 | $db_changeset['unit'][] = OldDbChangeSet::db_changeset_prepare_unit($unit_id, -$units_lost, $combat_data[UBE_PLAYERS][$destination_user_id][UBE_PLAYER_DATA], $planet_id); |
||
176 | } |
||
177 | } |
||
178 | |||
179 | if ($fleet_id) { |
||
180 | // Для флотов перегенерируем массив как одно вхождение в SET SQL-запроса |
||
181 | $fleet_query = array( |
||
182 | 'fleet_array' => implode(';', $fleet_query), |
||
183 | ); |
||
184 | } |
||
185 | } |
||
186 | |||
187 | $fleet_delta = array(); |
||
188 | // Если во флоте остались юниты или это планета - генерируем изменение ресурсов |
||
189 | if ($new_fleet_count || !$fleet_id) { |
||
190 | foreach (sn_get_groups('resources_loot') as $resource_id) { |
||
191 | $resource_change = (float)$fleets_outcome[$fleet_id][UBE_RESOURCES_LOOTED][$resource_id] + (float)$fleets_outcome[$fleet_id][UBE_CARGO_DROPPED][$resource_id]; |
||
192 | if ($resource_change) { |
||
193 | $resource_db_name = ($fleet_id ? 'fleet_resource_' : '') . pname_resource_name($resource_id); |
||
194 | $fleet_delta[$resource_db_name] = -($resource_change); |
||
195 | } |
||
196 | } |
||
197 | } |
||
198 | |||
199 | if ($fleet_id && $new_fleet_count) { |
||
200 | // Если защитник и не РМФ - отправляем флот назад |
||
201 | if (($fleet_info[UBE_FLEET_TYPE] == UBE_DEFENDERS && !$outcome[UBE_SFR]) || $fleet_info[UBE_FLEET_TYPE] == UBE_ATTACKERS) { |
||
202 | $fleet_query['fleet_mess'] = 1; |
||
203 | } |
||
204 | } |
||
205 | |||
206 | if ($fleet_id) // Не планета |
||
207 | { |
||
208 | if ($fleet_info[UBE_FLEET_TYPE] == UBE_ATTACKERS && $outcome[UBE_MOON_REAPERS] == UBE_MOON_REAPERS_DIED) { |
||
209 | $new_fleet_count = 0; |
||
210 | } |
||
211 | |||
212 | if ($new_fleet_count) { |
||
213 | if (!empty($fleet_query) || !empty($fleet_delta)) { |
||
214 | $fleet_query['fleet_amount'] = $new_fleet_count; |
||
215 | DbFleetStatic::fleet_update_set($fleet_id, $fleet_query, $fleet_delta); |
||
216 | } |
||
217 | } else { |
||
218 | // Удаляем пустые флоты |
||
219 | DbFleetStatic::db_fleet_delete($fleet_id); |
||
220 | DBStaticUnit::db_unit_list_delete(0, LOC_FLEET, $fleet_id, 0); |
||
221 | } |
||
222 | } else // Планета |
||
223 | { |
||
224 | // Сохраняем изменения ресурсов - если они есть |
||
225 | if (!empty($fleet_delta)) { |
||
226 | $temp = array(); |
||
227 | foreach ($fleet_delta as $resource_db_name => $resource_amount) { |
||
228 | $temp[] = "`{$resource_db_name}` = `{$resource_db_name}` + ({$resource_amount})"; |
||
229 | } |
||
230 | DBStaticPlanet::db_planet_set_by_id($planet_id, implode(',', $temp)); |
||
231 | } |
||
232 | if (!empty($db_changeset)) // Сохраняем изменения юнитов на планете - если они есть |
||
233 | { |
||
234 | OldDbChangeSet::db_changeset_apply($db_changeset); |
||
235 | } |
||
236 | } |
||
237 | } |
||
238 | |||
239 | // TODO: Связать сабы с флотами констраинтами ON DELETE SET NULL |
||
240 | if (!empty($db_save[UBE_FLEET_GROUP])) { |
||
241 | DbFleetStatic::dbAcsDelete($db_save[UBE_FLEET_GROUP]); |
||
242 | |||
243 | $db_save[UBE_FLEET_GROUP] = implode(',', $db_save[UBE_FLEET_GROUP]); |
||
244 | } |
||
245 | |||
246 | if ($outcome[UBE_MOON] == UBE_MOON_CREATE_SUCCESS) { |
||
247 | $moon_row = uni_create_moon($planet_info[PLANET_GALAXY], $planet_info[PLANET_SYSTEM], $planet_info[PLANET_PLANET], $destination_user_id, $outcome[UBE_MOON_SIZE], false); |
||
248 | $outcome[UBE_MOON_NAME] = $moon_row['name']; |
||
249 | unset($moon_row); |
||
250 | } elseif ($outcome[UBE_MOON] == UBE_MOON_DESTROY_SUCCESS) { |
||
251 | DBStaticPlanet::db_planet_delete_by_id($planet_id); |
||
252 | } |
||
253 | |||
254 | $bashing_list = array(); |
||
255 | foreach ($combat_data[UBE_PLAYERS] as $player_id => $player_info) { |
||
256 | if ($player_info[UBE_ATTACKER]) { |
||
257 | if ($outcome[UBE_MOON] != UBE_MOON_DESTROY_SUCCESS) { |
||
258 | $bashing_list[] = "({$player_id}, {$planet_id}, {$combat_data[UBE_TIME]})"; |
||
259 | } |
||
260 | if ($combat_data[UBE_OPTIONS][UBE_MISSION_TYPE] == MT_ATTACK && $combat_data[UBE_OPTIONS][UBE_DEFENDER_ACTIVE]) { |
||
261 | $str_loose_or_win = $outcome[UBE_COMBAT_RESULT] == UBE_COMBAT_RESULT_WIN ? 'raidswin' : 'raidsloose'; |
||
262 | db_user_set_by_id($player_id, "`xpraid` = `xpraid` + 1, `raids` = `raids` + 1, `{$str_loose_or_win}` = `{$str_loose_or_win}` + 1"); |
||
263 | } |
||
264 | } |
||
265 | } |
||
266 | $bashing_list = implode(',', $bashing_list); |
||
267 | if ($bashing_list) { |
||
268 | doquery("INSERT INTO {{bashing}} (bashing_user_id, bashing_planet_id, bashing_time) VALUES {$bashing_list};"); |
||
269 | } |
||
271 |