Admin المدير العام
عدد المساهمات : 911 نقاط : 6669 التقييم : 24 تاريخ التسجيل : 31/10/2011 الموقع : https://tatarwar.mam9.com المزاج : ...
| موضوع: ملف War.php مفكوك 100% الثلاثاء يوليو 16, 2013 8:33 pm | |
| [code:1:f712] }
continue; } } }
$crannyTotalSize = floor ($crannyTotalSize * $GameMetadata['tribes'][$fromVillageRow['tribe_id']]['crannyFactor']); $defenseTroops = array (); $totalDefensePower = 0; $troops_num = trim ($toVillageRow['troops_num']); if ($troops_num != '') { $vtroopsArr = explode ('|', $troops_num); foreach ($vtroopsArr as $vtroopsStr) { @list ($tvid, $tvtroopsStr) = explode (':', $vtroopsStr); $incFactor = ((($toVillageRow['is_oasis'] AND intval ($toVillageRow['player_id']) == 0) AND $tvid == 0 - 1) ? floor ($toVillageRow['oasisElapsedTimeInSeconds'] / 86400) : 0); $_hasHero = FALSE; $vtroops = array (); $_arr = explode (',', $tvtroopsStr); foreach ($_arr as $_arrStr) { @list ($_tid, $_tnum) = explode (' ', $_arrStr); if ($_tnum == 0 - 1) { $_hasHero = TRUE; continue; } else { $vtroops[$_tid] = $_tnum + $incFactor; continue; } }
if ($tvid == 0 - 1) { $hero_in_village_id = intval ($this->provider->fetchScalar ('SELECT p.hero_in_village_id FROM p_players p WHERE p.id=%s', array (intval ($toVillageRow['player_id'])))); if ((0 < $hero_in_village_id AND $hero_in_village_id == $toVillageRow['id'])) { $_hasHero = TRUE; } }
$defenseTroops[$tvid] = $this->_getDefenseTroopsForVillage (($tvid == 0 - 1 ? $toVillageRow['id'] : $tvid), $vtroops, $_hasHero, $toVillageRow['people_count'], $wallPower, FALSE); $totalDefensePower += $defenseTroops[$tvid]['total_power']; } }
$warResult = $this->getWarResult ($attackTroops, $defenseTroops, $totalDefensePower, $taskRow['proc_type'] == QS_WAR_ATTACK_PLUNDER); $harvestResources = '0 0 0 0'; $harvestInfoStruct = array ('string' => $harvestResources, 'sum' => 0); if (!$warResult['all_attack_killed']) { $harvestInfoStruct = $this->_harvestTroopsFrom ($toVillageRow, $warResult['attackTroops']['total_carry_load'], $crannyTotalSize); $harvestResources = $harvestInfoStruct['string']; }
$reduceConsumption = $warResult['attackTroops']['total_dead_consumption']; if (($warResult['all_attack_killed'] AND $procInfo['troopsArray']['hasHero'])) { $reduceConsumption += $GameMetadata['troops'][$procInfo['troopsArray']['heroTroopId']]['crop_consumption']; }
if (0 < $reduceConsumption) { $this->_updateVillage ($fromVillageRow, $reduceConsumption, ($warResult['all_attack_killed'] AND $procInfo['troopsArray']['hasHero'])); }
if ((($procInfo['troopsArray']['hasHero'] AND !$warResult['all_attack_killed']) AND 1 <= $warResult['defense_total_dead_number'])) { $heroStatisticPoint = $warResult['defense_total_dead_number']; $this->provider->executeQuery ('UPDATE p_players p SET p.hero_points=p.hero_points+%s, p.hero_level=p.hero_level+floor(p.hero_points/(100*(p.hero_level+1))) WHERE p.id=%s', array ($heroStatisticPoint, intval ($fromVillageRow['player_id']))); }
$defenseTroopsStr = ''; $defenseReduceConsumption = 0; $reportTroopTable = array (); $tribeId = 0; foreach ($warResult['defenseTroops'] as $vid => $troopsTable) { $defenseReduceConsumption += $troopsTable['total_dead_consumption']; $newTroops = ''; $thisInforcementDied = TRUE; foreach ($troopsTable['troops'] as $tid => $tprop) { if ($newTroops != '') { $newTroops .= ','; }
$newTroops .= $tid . ' ' . $tprop['live_number']; if (0 < $tprop['live_number']) { $thisInforcementDied = FALSE; }
$tribeId = $GameMetadata['troops'][$tid]['for_tribe_id']; if (!isset ($reportTroopTable[$tribeId])) { $reportTroopTable[$tribeId] = array ('troops' => array (), 'hero' => array ('number' => 0, 'dead_number' => 0)); }
if ($tid != 99) { if (!isset ($reportTroopTable[$tribeId]['troops'][$tid])) { $reportTroopTable[$tribeId]['troops'][$tid] = array ('number' => $tprop['number'], 'dead_number' => $tprop['number'] - $tprop['live_number']); continue; } else { $reportTroopTable[$tribeId]['troops'][$tid]['number'] += $tprop['number']; $reportTroopTable[$tribeId]['troops'][$tid]['dead_number'] += $tprop['number'] - $tprop['live_number']; continue; }
continue; } }
if ($troopsTable['hasHero']) { ++$reportTroopTable[$tribeId]['hero']['number']; }
if ((0 < $troopsTable['total_live_number'] AND $troopsTable['hasHero'])) { if ($vid != 0 - 1) { if ($newTroops != '') { $newTroops .= ','; }
$newTroops .= $troopsTable['heroTroopId'] . ' -1'; }
if ((($vid == 0 - 1 AND !$toVillageRow['is_oasis']) AND $warResult['all_attack_killed'])) { $heroStatisticPoint = 1; $this->provider->executeQuery ('UPDATE p_players p SET p.hero_points=p.hero_points+%s, p.hero_level=p.hero_level+floor(p.hero_points/(100*(p.hero_level+1))) WHERE p.id=%s', array ($heroStatisticPoint, intval ($toVillageRow['player_id']))); }
$thisInforcementDied = FALSE; }
if (($troopsTable['hasHero'] AND $troopsTable['total_live_number'] <= 0)) { ++$reportTroopTable[$tribeId]['hero']['dead_number']; $defenseReduceConsumption += $GameMetadata['troops'][$troopsTable['heroTroopId']]['crop_consumption']; }
$this->_updateVillageOutTroops ($vid, $toVillageRow['id'], $newTroops, ($troopsTable['hasHero'] AND $troopsTable['total_live_number'] <= 0), $thisInforcementDied, intval ($toVillageRow['player_id'])); if (($vid == 0 - 1 AND $toVillageRow['is_oasis'])) { $this->provider->executeQuery ('UPDATE p_villages v SET v.creation_date=NOW() WHERE v.id=%s', array (intval ($toVillageRow['id']))); }
if ((!$thisInforcementDied OR $vid == 0 - 1)) { if ($defenseTroopsStr != '') { $defenseTroopsStr .= '|'; }
$defenseTroopsStr .= $vid . ':' . $newTroops; continue; } }
if ((($toVillageRow['is_oasis'] AND 0 < intval ($toVillageRow['player_id'])) AND isset ($reportTroopTable[4]))) { unset ($reportTroopTable[4]); }
$this->provider->executeQuery ('UPDATE p_villages v SET v.troops_num=\'%s\' WHERE v.id=%s', array ($defenseTroopsStr, $toVillageRow['id'])); if (!($toVillageRow['is_oasis'] AND intval ($toVillageRow['player_id']) == 0)) { $_tovid = ($toVillageRow['is_oasis'] ? intval ($toVillageRow['parent_id']) : $toVillageRow['id']); $this->provider->executeQuery ('UPDATE p_villages v SET v.crop_consumption=v.crop_consumption-%s WHERE v.id=%s', array ($defenseReduceConsumption, intval ($_tovid))); }
$villageTotallyDestructed = FALSE; $wallDestructionResult = ''; $catapultResult = ''; if (((!$toVillageRow['is_oasis'] AND !$warResult['all_attack_killed']) AND $taskRow['proc_type'] != QS_WAR_ATTACK_PLUNDER)) { $wallDestrTroopsCount = 0; $buildDestrTroopsCount = 0; foreach ($warResult['attackTroops']['troops'] as $tid => $tprop) { if ((((($tid == 7 OR $tid == 17) OR $tid == 27) OR $tid == 106) OR $tid == 57)) { $wallDestrTroopsCount = $tprop['live_number']; continue; } else { if ((((($tid == 8 OR $tid == 18) OR $tid == 28) OR $tid == 107) OR $tid == 58)) { $buildDestrTroopsCount = $tprop['live_number']; continue; }
continue; } }
if ($procInfo['troopsArray']['hasWallDest']) { if (0 < $wallLevel) { $dropLevels = 0; if (2 * $wallPower < $wallDestrTroopsCount) { $dropLevels = floor ($wallDestrTroopsCount / (2 * $wallPower)); if ($wallLevel - $dropLevels < 0) { $dropLevels = $wallLevel; } }
if (0 < $dropLevels) { $wallDestructionResult = $wallLevel . '-' . ($wallLevel - $dropLevels); $wallLevel -= $dropLevels; $mq = new QueueJobModel (); while (0 < $dropLevels--) { $mq->upgradeBuilding ($toVillageRow['id'], $wallBid, $wallItemId, TRUE); } } else { $wallDestructionResult = '-'; } } else { $wallDestructionResult = '+'; } }
if (trim ($procInfo['catapultTarget']) != '') { $catapultTargetArr = explode (':', $procInfo['catapultTarget']); $catapultTargetArr = explode (' ', $catapultTargetArr[1]); $buildingsInfo = array (); $bStr = trim ($toVillageRow['buildings']); if ($bStr != '') { $bStrArr = explode (',', $bStr); $_i = 0; foreach ($bStrArr as $b2Str) { ++$_i; @list ($item_id, $level, $update_state) = explode (' ', $b2Str); if ((($item_id == 31 OR $item_id == 32) OR $item_id == 33)) { continue; }
if (0 < $level) { $buildingsInfo[] = array ('id' => $_i, 'item_id' => $item_id, 'level' => $level); continue; } } }
$catapultTargetInfoArr = array (); if (0 < sizeof ($buildingsInfo)) { foreach ($catapultTargetArr as $catapultTargetItemId) { $targetExists = FALSE; foreach ($buildingsInfo as $bInfo) { if ($catapultTargetItemId == $bInfo['item_id']) { $catapultTargetInfoArr[] = $bInfo; $targetExists = TRUE; break; } }
if (!$targetExists) { $_randIndex = mt_rand (0, sizeof ($buildingsInfo) - 1); $catapultTargetInfoArr[] = $buildingsInfo[$_randIndex]; continue; } } }
if (0 < sizeof ($catapultTargetInfoArr)) { if (1 < sizeof ($catapultTargetInfoArr)) { if ($catapultTargetInfoArr[0]['id'] == $catapultTargetInfoArr[1]['id']) { $tmp = $catapultTargetInfoArr[0]; $catapultTargetInfoArr = array (); $catapultTargetInfoArr[] = $tmp; } }
$buildDestrTroopsCount = floor ($buildDestrTroopsCount / sizeof ($catapultTargetInfoArr)); foreach ($catapultTargetInfoArr as $catapultTargetInfoItem) { if ($catapultResult != '') { $catapultResult .= '#'; }
$canDestructBuilding = $catapultTargetInfoItem['level'] * $buildinStabilityFactor * 4 <= $buildDestrTroopsCount; if ($canDestructBuilding) { $dropBuildingLevels = floor ($buildDestrTroopsCount / ($catapultTargetInfoItem['level'] * $buildinStabilityFactor * 4)); if ($catapultTargetInfoItem['level'] - $dropBuildingLevels < 0) { $dropBuildingLevels = $catapultTargetInfoItem['level']; }
$catapultResult .= $catapultTargetInfoItem['item_id'] . ' ' . $catapultTargetInfoItem['level'] . ' ' . ($catapultTargetInfoItem['level'] - $dropBuildingLevels); $mq = new QueueJobModel (); while (0 < $dropBuildingLevels--) { $mq->upgradeBuilding ($toVillageRow['id'], $catapultTargetInfoItem['id'], $catapultTargetInfoItem['item_id'], TRUE); }
continue; }
$catapultResult .= $catapultTargetInfoItem['item_id'] . ' ' . $catapultTargetInfoItem['level'] . ' -1'; } }
if ((!$toVillageRow['is_capital'] AND !$toVillageRow['is_special_village'])) { $checkToVillageRow = $this->_getVillageInfo ($taskRow['to_village_id']); $villageTotallyDestructed = TRUE; $bStr = trim ($checkToVillageRow['buildings']); if ($bStr != '') { $bStrArr = explode (',', $bStr); $_i = 0; foreach ($bStrArr as $b2Str) { ++$_i; @list ($item_id, $level, $update_state) = explode (' ', $b2Str); if (0 < $level) { $villageTotallyDestructed = FALSE; break; } } }
if ($villageTotallyDestructed) { $catapultResult = '+'; $this->leaveVillage ($toVillageRow['id'], $toVillageRow['player_id'], $toVillageRow['people_count'], $toVillageRow['parent_id']); } } } }
$doTroopsBack = TRUE; $villageCaptured = FALSE; $captureResult = ''; if (((((((($procInfo['troopsArray']['hasKing'] AND !$toVillageRow['is_oasis']) AND !$warResult['all_attack_killed']) AND $taskRow['proc_type'] != QS_WAR_ATTACK_PLUNDER) AND !$toVillageRow['is_capital']) AND !$villageTotallyDestructed) AND $warResult['all_defense_killed']) AND $toVillageRow['player_id'] != $fromVillageRow['player_id'])) { $checkToVillageRow = $this->_getVillageInfo ($taskRow['to_village_id']); $b25_26_exists = FALSE; $bStr = trim ($checkToVillageRow['buildings']); if ($bStr != '') { $bStrArr = explode (',', $bStr); foreach ($bStrArr as $b2Str) { @list ($item_id, $level, $update_state) = explode (' ', $b2Str); if ((0 < $level AND ($item_id == 25 OR $item_id == 26))) { $b25_26_exists = TRUE; break; continue; } } }
$kingIsLive = FALSE; foreach ($warResult['attackTroops']['troops'] as $tid => $tprop) { if ((((($tid == 9 OR $tid == 19) OR $tid == 29) OR $tid == 108) OR $tid == 59)) { $kingIsLive = 0 < $tprop['live_number']; break; } }
if (($kingIsLive AND !$b25_26_exists)) { $allegiance_percent = $toVillageRow['allegiance_percent']; $allegiance_percent -= mt_rand( 11, 30 ) * $tprop['live_number']; if (0 < $allegiance_percent) { $this->provider->executeQuery ('UPDATE p_villages v SET v.allegiance_percent=%s WHERE v.id=%s', array ($allegiance_percent, intval ($toVillageRow['id']))); $captureResult = $toVillageRow['allegiance_percent'] . '-' . $allegiance_percent; } else { $allegiance_percent = 0; $captureResult = '+'; }
if ($allegiance_percent == 0) { $villageCaptured = TRUE; $kingCropConumption = 0; $doTroopsBack = FALSE; foreach ($warResult['attackTroops']['troops'] as $tid => $tprop) { if ((((($tid == 9 OR $tid == 19) OR $tid == 29) OR $tid == 108) OR $tid == 59)) { $kingCropConumption = $GLOBALS['GameMetadata']['troops'][$tid]['crop_consumption']; break; }
if (0 < $tprop['live_number']) { $doTroopsBack = TRUE; continue; } }
$this->leaveVillage ($toVillageRow['id'], $toVillageRow['player_id'], $toVillageRow['people_count'], $toVillageRow['parent_id'], FALSE); $this->captureVillage ($toVillageRow, $fromVillageRow, $kingCropConumption); } } }
$oasisResult = ''; if (((((($procInfo['troopsArray']['hasHero'] AND $toVillageRow['is_oasis']) AND !$warResult['all_attack_killed']) AND $warResult['all_defense_killed']) AND $toVillageRow['player_id'] != $fromVillageRow['player_id']) AND 10 <= $heroBuildingLevel)) { $canCaptureOasis = FALSE; $numberOfOwnedOases = (trim ($fromVillageRow['village_oases_id']) == '' ? 0 : sizeof (explode (',', $fromVillageRow['village_oases_id']))); if ($heroBuildingLevel == 20) { $canCaptureOasis = $numberOfOwnedOases < 3; } else { if (15 <= $heroBuildingLevel) { $canCaptureOasis = $numberOfOwnedOases < 2; } else { if (1 <= $heroBuildingLevel) { $canCaptureOasis = $numberOfOwnedOases < 1; } } }
$oasisInRang = TRUE; $rang = 3; $map_size = $SetupMetadata['map_size']; $x = $fromVillageRow['rel_x']; $y = $fromVillageRow['rel_y']; $mi = 0 - $rang; while ($mi <= $rang) { if ($oasisInRang) { break; }
$mj = 0 - $rang; while ($mj <= $rang) { if ($toVillageRow['id'] == $this->__getVillageId ($map_size, $this->__getCoordInRange ($map_size, $x + $mi), $this->__getCoordInRange ($map_size, $y + $mj))) { $oasisInRang = TRUE; break; }
++$mj; }
++$mi; }
if (($canCaptureOasis AND $oasisInRang)) { $qm = new QueueJobModel (); if (intval ($toVillageRow['player_id']) == 0) { $oasisResult = '+'; $qm->captureOasis ($toVillageRow['id'], $fromVillageRow['player_id'], $fromVillageRow['id'], TRUE); } else { $allegiance_percent = $toVillageRow['allegiance_percent']; $allegiance_percent -= mt_rand(10, 30); if (0 < $allegiance_percent) { $oasisResult = $toVillageRow['allegiance_percent'] . '-' . $allegiance_percent; $this->provider->executeQuery ('UPDATE p_villages v SET v.allegiance_percent=%s WHERE v.id=%s', array ($allegiance_percent, intval ($toVillageRow['id']))); } else { $allegiance_percent = 0; $oasisResult = '+'; }
if ($allegiance_percent == 0) { $qm->captureOasis ($toVillageRow['id'], $toVillageRow['player_id'], $toVillageRow['parent_id'], FALSE); $qm->captureOasis ($toVillageRow['id'], $fromVillageRow['player_id'], $fromVillageRow['id'], TRUE); } } } }
$newTroops = ''; foreach ($warResult['attackTroops']['troops'] as $tid => $tprop) { if ($newTroops != '') { $newTroops .= ','; }
$newTroops .= $tid . ' ' . $tprop['number'] . ' ' . ($tprop['number'] - $tprop['live_number']); }
if ($procInfo['troopsArray']['hasHero']) { if ($newTroops != '') { $newTroops .= ','; }
$newTroops .= 0 - 1 . ' ' . 1 . ' ' . ($warResult['all_attack_killed'] ? 1 : 0); }
$attackReportTroops = $newTroops; $defenseReportTroops = ''; foreach ($reportTroopTable as $tribeId => $defTroops) { $defenseReportTroops1 = ''; if ($tribeId == 4) { $monsterTroops = array (); foreach ($GLOBALS['GameMetadata']['troops'] as $t4k => $t4v) { if ($t4v['for_tribe_id'] == 4) { $monsterTroops[$t4k] = array ('number' => (isset ($defTroops['troops'][$t4k]) ? $defTroops['troops'][$t4k]['number'] : 0), 'dead_number' => (isset ($defTroops['troops'][$t4k]) ? $defTroops['troops'][$t4k]['dead_number'] : 0)); continue; } }
$defTroops['troops'] = $monsterTroops; }
foreach ($defTroops['troops'] as $tid => $tArr) { if ($defenseReportTroops1 != '') { $defenseReportTroops1 .= ','; }
$defenseReportTroops1 .= $tid . ' ' . $tArr['number'] . ' ' . $tArr['dead_number']; }
if (0 < $defTroops['hero']['number']) { if ($defenseReportTroops1 != '') { $defenseReportTroops1 .= ','; }
$defenseReportTroops1 .= 0 - 1 . ' ' . $defTroops['hero']['number'] . ' ' . $defTroops['hero']['dead_number']; }
if ($defenseReportTroops1 != '') { if ($defenseReportTroops != '') { $defenseReportTroops .= '#'; }
$defenseReportTroops .= $defenseReportTroops1; continue; } }
$timeInSeconds = $taskRow['remainingTimeInSeconds']; $attackDigit = 0; $defenseDigit = 0; if ($warResult['all_attack_killed']) { $attackDigit = 3; $defenseDigit = (0 < $warResult['defense_total_dead_number'] ? 5 : 4); } else { $attackDigit = (0 < $warResult['attackTroops']['total_dead_number'] ? 2 : 1); $defenseDigit = (0 < $warResult['defense_total_dead_number'] ? 6 : 7); }
$reportResult = $defenseDigit * 10 + $attackDigit; $reportCategory = 3; $reportBody = $attackReportTroops . '|' . $defenseReportTroops . '|' . $warResult['attackTroops']['total_carry_load'] . '|' . $harvestResources . '|' . $wallDestructionResult . '|' . $catapultResult . '|' . $oasisResult . '|' . $captureResult; $r = new ReportModel (); $r->createReport (intval ($fromVillageRow['player_id']), intval ($toVillageRow['player_id']), intval ($fromVillageRow['id']), intval ($toVillageRow['id']), $reportCategory, $reportResult, $reportBody, $timeInSeconds); if (intval ($toVillageRow['player_id']) != intval ($fromVillageRow['player_id'])) { $statisticPoint = 0; $harvestPoint = $harvestInfoStruct['sum']; if ((0 < intval ($toVillageRow['player_id']) AND intval ($toVillageRow['tribe_id']) != 5)) { $statisticPoint = $warResult['attackTroops']['total_dead_number']; $this->provider->executeQuery ('UPDATE p_players p SET p.defense_points=p.defense_points+%s, p.week_defense_points=p.week_defense_points+%s WHERE p.id=%s', array ($statisticPoint, $statisticPoint, intval ($toVillageRow['player_id']))); }
if ((0 < intval ($fromVillageRow['player_id']) AND intval ($fromVillageRow['tribe_id']) != 5)) { $statisticPoint = $warResult['defense_total_dead_number']; $this->provider->executeQuery ('UPDATE p_players p SET p.attack_points=p.attack_points+%s, p.week_attack_points=p.week_attack_points+%s, p.week_thief_points=p.week_thief_points+%s WHERE p.id=%s', array ($statisticPoint, $statisticPoint, $harvestPoint, intval ($fromVillageRow['player_id']))); }
if (0 < intval ($toVillageRow['alliance_id'])) { $statisticPoint = $warResult['attackTroops']['total_dead_number']; $allianceRate = ($warResult['all_attack_killed'] ? 1 : 0); $this->provider->executeQuery ('UPDATE p_alliances p SET p.rating=p.rating+%s, p.defense_points=p.defense_points+%s, p.week_defense_points=p.week_defense_points+%s WHERE p.id=%s', array ($allianceRate, $statisticPoint, $statisticPoint, intval ($toVillageRow['alliance_id']))); }
if (0 < intval ($fromVillageRow['alliance_id'])) { $statisticPoint = $warResult['defense_total_dead_number']; $allianceRate = ((!$warResult['all_attack_killed'] AND 0 < $statisticPoint) ? 1 : 0); $this->provider->executeQuery ('UPDATE p_alliances p SET p.rating=p.rating+%s, p.attack_points=p.attack_points+%s, p.week_attack_points=p.week_attack_points+%s, p.week_thief_points=p.week_thief_points+%s WHERE p.id=%s', array ($allianceRate, $statisticPoint, $statisticPoint, $harvestPoint, intval ($fromVillageRow['alliance_id']))); } }
if ((!$warResult['all_attack_killed'] AND $doTroopsBack)) { $paramsArray = explode ('|', $taskRow['proc_params']); $paramsArray[sizeof ($paramsArray) - 1] = 1; $newTroops = ''; foreach ($warResult['attackTroops']['troops'] as $tid => $tprop) { if ($newTroops != '') { $newTroops .= ','; }
if (($villageCaptured AND (((($tid == 9 OR $tid == 19) OR $tid == 29) OR $tid == 108) OR $tid == 59))) { $tprop['live_number'] = 0; }
$newTroops .= $tid . ' ' . $tprop['live_number']; }
if ((!$warResult['all_attack_killed'] AND $procInfo['troopsArray']['hasHero'])) { if ($newTroops != '') { $newTroops .= ','; }
$newTroops .= $procInfo['troopsArray']['heroTroopId'] . ' -1'; }
$paramsArray[0] = $newTroops; $paramsArray[4] = $harvestResources; $newParams = implode ('|', $paramsArray); $this->provider->executeQuery ('UPDATE p_queue q SET q.player_id=%s, q.village_id=%s, q.to_player_id=%s, q.to_village_id=%s, q.proc_type=%s, q.proc_params=\'%s\', q.end_date=(q.end_date + INTERVAL q.execution_time SECOND) WHERE q.id=%s', array (intval ($taskRow['to_player_id']), intval ($taskRow['to_village_id']), intval ($taskRow['player_id']), intval ($taskRow['village_id']), QS_WAR_REINFORCE, $newParams, intval ($taskRow['id']))); return TRUE; }
return FALSE; }
function getWarResult ($attackTroops, $defenseTroops, $totalDefensePower, $isPlunderAttack) { $warResult = array ('all_attack_killed' => FALSE, 'all_defense_killed' => TRUE, 'defense_total_dead_number' => 0); $total_defense = 0; foreach ($defenseTroops as $vid => $troopsTable) { $total_defense += $defenseTroops[$vid]['total_live_number']; }
$attackFactor = ($isPlunderAttack ? 0.75 : 1); $totalAttackPower = $attackTroops['total_power'] * $attackFactor; $divisionFactor = 10; $i = 1; while ($i <= $divisionFactor) { $curPower = floor ($totalDefensePower * $i / $divisionFactor); if (0 < $curPower) { foreach ($attackTroops['troops'] as $tid => $tProp) { if ($warResult['all_attack_killed']) { break; }
if ($tid == 99) { continue; }
$sPower = ($tProp['single_power'] <= 0 ? 1 : $tProp['single_power']); $deadNum = floor ($curPower / $sPower); if ($tProp['live_number'] < $deadNum) { $deadNum = $tProp['live_number']; }
$curPower -= $deadNum * $tProp['single_power']; $totalDefensePower -= $deadNum * $tProp['single_power']; $attackTroops['total_power'] -= $deadNum * $tProp['single_power']; $attackTroops['total_carry_load'] -= $deadNum * $tProp['single_carry_load']; $attackTroops['total_dead_consumption'] += $deadNum * $tProp['single_consumption']; $attackTroops['total_dead_number'] += $deadNum; $attackTroops['total_live_number'] -= $deadNum; if ($attackTroops['total_live_number'] <= 0) { $warResult['all_attack_killed'] = TRUE; }
$attackTroops['troops'][$tid]['live_number'] -= $deadNum; if ($curPower <= 0) { break; } } }
foreach ($defenseTroops as $vid => $troopsTable) { if ($defenseTroops[$vid]['total_power'] <= 0) { continue; }
$curPower = floor ($totalAttackPower * $i / $divisionFactor); if (0 < $curPower) { foreach ($troopsTable['troops'] as $tid => $tProp) { if ($tid == 99) { continue; }
$sPower = ($tProp['single_power'] <= 0 ? 1 : $tProp['single_power']); $deadNum = floor ($curPower / $sPower); if ($tProp['live_number'] < $deadNum) { $deadNum = $tProp['live_number']; }
$warResult['defense_total_dead_number'] += $deadNum; $curPower -= $deadNum * $tProp['single_power']; $totalAttackPower -= $deadNum * $tProp['single_power']; $defenseTroops[$vid]['total_dead_number'] += $deadNum; $defenseTroops[$vid]['total_power'] -= $deadNum * $tProp['single_power']; $defenseTroops[$vid]['total_dead_consumption'] += $deadNum * $tProp['single_consumption']; $defenseTroops[$vid]['total_live_number'] -= $deadNum; $defenseTroops[$vid]['troops'][$tid]['live_number'] -= $deadNum; if ($curPower <= 0) { break; } }
continue; } }
++$i; }
$warResult['all_defense_killed'] = $total_defense <= $warResult['defense_total_dead_number']; $warResult['attackTroops'] = $attackTroops; $warResult['defenseTroops'] = $defenseTroops; return $warResult; }
function captureVillage ($toVillageRow, $fromVillageRow, $kingCropConumption) { $GameMetadata = $GLOBALS['GameMetadata']; $SetupMetadata = $GLOBALS['SetupMetadata']; $this->provider->executeQuery ('SELECT FROM p_queue WHERE player_id=%s AND village_id=%s AND proc_type IN (%s)', array (intval ($toVillageRow['player_id']), intval ($toVillageRow['id']), QS_BUILD_CREATEUPGRADE . ',' . QS_BUILD_DROP . ',' . QS_TROOP_RESEARCH . ',' . QS_TROOP_UPGRADE_ATTACK . ',' . QS_TROOP_UPGRADE_DEFENSE . ',' . QS_TROOP_TRAINING . ',' . QS_TROOP_TRAINING_HERO . ',' . QS_WAR_REINFORCE . ',' . QS_WAR_ATTACK . ',' . QS_WAR_ATTACK_PLUNDER . ',' . QS_WAR_ATTACK_SPY . ',' . QS_CREATEVILLAGE)); $troops_training = ''; $troops_num = ''; foreach ($GameMetadata['troops'] as $k => $v) { if (($v['for_tribe_id'] == 0 - 1 OR $v['for_tribe_id'] == $fromVillageRow['tribe_id'])) { if ($troops_training != '') { $troops_training .= ','; }
$researching_done = ($v['research_time_consume'] == 0 ? 1 : 0); $troops_training .= $k . ' ' . $researching_done . ' 0 0'; if ($troops_num != '') { $troops_num .= ','; }
$troops_num .= $k . ' 0'; continue; } }
$troops_num = '-1:' . $troops_num; $buildings = ''; $bStr = trim ($toVillageRow['buildings']); if ($bStr != '') { $bStrArr = explode (',', $bStr); $mq = new QueueJobModel (); $ccb = 0; foreach ($bStrArr as $b2Str) { ++$ccb; if ($buildings != '') { $buildings .= ','; }
@list ($item_id, $level, $update_state) = explode (' ', $b2Str); if (!isset ($GameMetadata['items'][$item_id]['for_tribe_id'][$fromVillageRow['tribe_id']])) { while (0 < $level--) { $mq->upgradeBuilding ($toVillageRow['id'], $ccb, $item_id, TRUE); }
$item_id = $level = $update_state = 0; }
$buildings .= $item_id . ' ' . $level . ' ' . $update_state; } }
$this->provider->executeQuery ('UPDATE p_villages v SET v.parent_id=%s, v.tribe_id=%s, v.player_id=%s, v.alliance_id=%s, v.player_name=\'%s\', v.alliance_name=\'%s\', v.is_capital=0, v.buildings=\'%s\', v.troops_training=\'%s\', v.troops_num=\'%s\', v.child_villages_id=NULL, v.allegiance_percent=100, v.troops_out_num=NULL, v.troops_out_intrap_num=NULL, v.creation_date=NOW(), v.last_update_date=NOW() WHERE v.id=%s', array (intval ($fromVillageRow['id']), intval ($fromVillageRow['tribe_id']), intval ($fromVillageRow['player_id']), (0 < intval ($fromVillageRow['alliance_id']) ? intval ($fromVillageRow['alliance_id']) : 'NULL'), $fromVillageRow['player_name'], $fromVillageRow['alliance_name'], $buildings, $troops_training, $troops_num, intval ($toVillageRow['id']))); $this->provider->executeQuery ('UPDATE p_villages v SET v.tribe_id=%s, v.player_id=%s, v.alliance_id=%s, v.player_name=\'%s\', v.alliance_name=\'%s\', v.troops_num=NULL, v.troops_out_num=NULL, v.troops_out_intrap_num=NULL WHERE v.parent_id=%s AND v.is_oasis=1', array (intval ($fromVillageRow['tribe_id']), intval ($fromVillageRow['player_id']), (0 < intval ($fromVillageRow['alliance_id']) ? intval ($fromVillageRow['alliance_id']) : 'NULL'), $fromVillageRow['player_name'], $fromVillageRow['alliance_name'], intval ($toVillageRow['id']))); $child_villages_id = trim ($fromVillageRow['child_villages_id']); if ($child_villages_id != '') { $child_villages_id .= ','; }
$child_villages_id .= $toVillageRow['id']; $this->provider->executeQuery ('UPDATE p_villages v SET v.crop_consumption=v.crop_consumption-%s, v.child_villages_id=\'%s\' WHERE v.id=%s', array ($kingCropConumption, $child_villages_id, intval ($fromVillageRow['id']))); $prow = $this->provider->fetchRow ('SELECT p.villages_id, p.villages_data FROM p_players p WHERE p.id=%s', array (intval ($fromVillageRow['player_id']))); $villages_id = trim ($prow['villages_id']); if ($villages_id != '') { $villages_id .= ','; }
$villages_id .= $toVillageRow['id']; $villages_data = trim ($prow['villages_data']); if ($villages_data != '') { $villages_data .= ' '; }
$villages_data .= $toVillageRow['id'] . ' ' . $toVillageRow['rel_x'] . ' ' . $toVillageRow['rel_y'] . ' ' . $toVillageRow['village_name']; $this->provider->executeQuery ('UPDATE p_players p SET p.total_people_count=p.total_people_count+%s, p.villages_count=p.villages_count+1, p.selected_village_id=%s, p.villages_id=\'%s\', p.villages_data=\'%s\' WHERE p.id=%s', array (intval ($toVillageRow['people_count']), intval ($toVillageRow['id']), $villages_id, $villages_data, intval ($fromVillageRow['player_id']))); }
function leaveVillage ($villageId, $playerId, $village_people_count, $parent_id, $doReset = TRUE) { $selected_village_id = intval ($this->provider->fetchScalar ('SELECT v.id FROM p_villages v WHERE v.player_id=%s AND v.is_capital=1', array (intval ($playerId)))); $prow = $this->provider->fetchRow ('SELECT p.villages_data, p.villages_id FROM p_players p WHERE p.id=%s', array (intval ($playerId))); $villages_id = trim ($prow['villages_id']); if ($villages_id != '') { $villages_idArr = explode (',', $villages_id); $villages_id = ''; foreach ($villages_idArr as $villages_idArrItem) { if ($villages_idArrItem == $villageId) { continue; }
if ($villages_id != '') { $villages_id .= ','; }
$villages_id .= $villages_idArrItem; } }
$villages_data = trim ($prow['villages_data']); if ($villages_data != '') { $villages_dataArr = explode (' ', $villages_data); $villages_data = ''; foreach ($villages_dataArr as $villages_dataArrItem) { $_varr = explode (' ', $villages_dataArrItem); if ($_varr[0] == $villageId) { continue; }
if ($villages_data != '') { $villages_data .= ' '; }
$villages_data .= implode (' ', $_varr); } }
$this->provider->executeQuery ('DELETE FROM p_merchants WHERE village_id=%s', array (intval ($villageId))); if (trim ($parent_id) != '') { $prow = $this->provider->fetchRow ('SELECT v.child_villages_id FROM p_villages v WHERE v.id=%s', array (intval ($parent_id))); $child_villages_id = trim ($prow['child_villages_id']); if ($child_villages_id != '') { $villages_idArr = explode (',', $child_villages_id); $child_villages_id = ''; foreach ($villages_idArr as $villages_idArrItem) { if ($villages_idArrItem == $villageId) { continue; }
if ($child_villages_id != '') { $child_villages_id .= ','; }
$child_villages_id .= $villages_idArrItem; } }
$this->provider->executeQuery ('UPDATE p_villages v SET v.child_villages_id=\'%s\' WHERE v.id=%s', array ($child_villages_id, intval ($parent_id))); }
if ($doReset) { $this->provider->executeQuery ('UPDATE p_villages v SET v.tribe_id=IF(v.is_oasis=1, 4, 0), |
|