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