سيرفرات حرب التتار بجميع انواعها سريع مدفوع x50000 x900000 ذهب مجاني والمزيد
 
الرئيسيةالرئيسية  س .و .جس .و .ج  بحـثبحـث  التسجيلالتسجيل  دخولدخول  

شاطر | .
 

 ملف War.php مفكوك 100%

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل 
كاتب الموضوعرسالة
Admin
المدير العام
المدير العام
avatar

عدد المساهمات : 911
نقاط : 6669
التقييم : 24
تاريخ التسجيل : 31/10/2011
الموقع : http://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), 
                 
الرجوع الى أعلى الصفحة اذهب الى الأسفل
http://tatarwar.mam9.com
 

ملف War.php مفكوك 100%

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
منتدى حرب التتار :: ¦ ¦آلعـآبـ آخــرى آـؤنـ لآيـنـ | Other Games Online ~ :: سيرفرات حرب التتار والعاب اونلاين اخرى-