function captureVillage($toVillageRow, $fromVillageRow, $kingCropConumption) { global $GameMetadata, $SetupMetadata; $this->provider->executeQuery('DELETE 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_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'] == -1 || $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'; } } $troops_num = '-1:' . $troops_num; $buildings = ''; $reCheckBuilding = $this->provider->fetchScalar('SELECT v.buildings FROM p_villages v WHERE v.id=%s', array(intval($toVillageRow['id']))); $bStr = trim($reCheckBuilding); 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']), intval($fromVillageRow['alliance_id']) > 0 ? 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']), intval($fromVillageRow['alliance_id']) > 0 ? 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 .= "\n"; } $villages_data .= $toVillageRow['id'] . ' ' . $toVillageRow['rel_x'] . ' ' . $toVillageRow['rel_y'] . ' ' . $toVillageRow['village_name']; $toCheckPeople = $this->provider->fetchScalar('SELECT v.people_count FROM p_villages v WHERE v.id=%s', array(intval($toVillageRow['id']))); $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($toCheckPeople), intval($toVillageRow['id']), $villages_id, $villages_data, intval($fromVillageRow['player_id']))); }
public function makeVillageAsCapital($playerId, $villageId) { $mq = new QueueJobModel(); $capitalRow = $this->provider->fetchRow("SELECT v.id, v.buildings FROM p_villages v WHERE v.player_id=%s AND v.is_capital=1", array($playerId)); $buildingArr = explode(",", $capitalRow['buildings']); $c = 0; foreach ($buildingArr as $buildingItem) { ++$c; $update_state = explode(" ", $buildingItem[2]); $level = explode(" ", $buildingItem[1]); $item_id = explode(" ", $buildingItem[0]); list($item_id, $level, $update_state) = $item_id; if ($item_id == 0) { continue; } $max_lvl_in_non_capital = $GLOBALS['GameMetadata']['items'][$item_id]['max_lvl_in_non_capital']; if ($max_lvl_in_non_capital == NULL || $level + $update_state <= $max_lvl_in_non_capital) { continue; } $dropLevels = $level + $update_state - $max_lvl_in_non_capital; while (0 < $dropLevels--) { $mq->upgradeBuilding($capitalRow['id'], $c, $item_id, TRUE); } } $this->provider->executeQuery("UPDATE p_villages v SET v.is_capital=0 WHERE v.player_id=%s", array($playerId)); $this->provider->executeQuery("UPDATE p_villages v SET v.is_capital=1 WHERE v.id=%s AND v.player_id=%s", array($villageId, $playerId)); }
public function captureVillage($toVillageRow, $fromVillageRow, $kingCropConumption) { $GameMetadata = $GLOBALS['GameMetadata']; $SetupMetadata = $GLOBALS['SetupMetadata']; $this->provider->executeQuery("DELETE 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 || $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"; } } $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 .= ","; } $update_state = explode(" ", $b2Str); $level = explode(" ", $b2Str); $item_id = explode(" ", $b2Str); list($item_id, $level, $update_state) = $item_id; 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\r\n\t\t\tSET\r\n\t\t\t\tv.parent_id=%s,\r\n\t\t\t\tv.tribe_id=%s,\r\n\t\t\t\tv.player_id=%s,\r\n\t\t\t\tv.alliance_id=%s,\r\n\t\t\t\tv.player_name='%s',\r\n\t\t\t\tv.alliance_name='%s',\r\n\t\t\t\tv.is_capital=0,\r\n\t\t\t\tv.buildings='%s',\r\n\t\t\t\tv.troops_training='%s',\r\n\t\t\t\tv.troops_num='%s',\r\n\t\t\t\tv.child_villages_id=NULL,\r\n\t\t\t\tv.allegiance_percent=100,\r\n\t\t\t\tv.troops_out_num=NULL,\r\n\t\t\t\tv.troops_out_intrap_num=NULL,\r\n\t\t\t\tv.creation_date=NOW(),\r\n\t\t\t\tv.last_update_date=NOW()\r\n\t\t\tWHERE 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\r\n\t\t\tSET\r\n\t\t\t\tv.tribe_id=%s,\r\n\t\t\t\tv.player_id=%s,\r\n\t\t\t\tv.alliance_id=%s,\r\n\t\t\t\tv.player_name='%s',\r\n\t\t\t\tv.alliance_name='%s',\r\n\t\t\t\tv.troops_num=NULL,\r\n\t\t\t\tv.troops_out_num=NULL,\r\n\t\t\t\tv.troops_out_intrap_num=NULL\r\n\t\t\tWHERE 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\r\n\t\t\tSET\r\n\t\t\t\tv.crop_consumption=v.crop_consumption-%s,\r\n\t\t\t\tv.child_villages_id='%s'\r\n\t\t\tWHERE 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 .= "\n"; } $villages_data .= $toVillageRow['id'] . " " . $toVillageRow['rel_x'] . " " . $toVillageRow['rel_y'] . " " . $toVillageRow['village_name']; $this->provider->executeQuery("UPDATE p_players p\r\n\t\t\tSET\r\n\t\t\t\tp.total_people_count=p.total_people_count+%s,\r\n\t\t\t\tp.villages_count=p.villages_count+1,\r\n\t\t\t\tp.selected_village_id=%s,\r\n\t\t\t\tp.villages_id='%s',\r\n\t\t\t\tp.villages_data='%s'\r\n\t\t\tWHERE\r\n\t\t\t\tp.id=%s", array(intval($toVillageRow['people_count']), intval($toVillageRow['id']), $villages_id, $villages_data, intval($fromVillageRow['player_id']))); }