quater_id) ? HAUS_DEFAULT_LOC : $quater->quater_id; $id = haus_build::generate_id(); $nr = haus_build::generate_id($street_id); haus_build::insertBasic(array($id,$nr,-3,$street_id)); haus_build::insertData(array($id,$cost['sgold'], $cost['sgems'], $cost['sturn'])); wvKey::generateKeys($id, 1, $user['acctid']); wvStreet::incHouses($street_id); $retid = $id; } return $retid; } function insertBasic($data) { $sqlstr = 'INSERT INTO `' . HAUS_TABLE . '` (`' . HAUS_ID_FIELD . '`,`' . HAUS_NR_FIELD . '`,`level`,`street_id`) VALUES(%u,%u,%s,%u)'; dying_query(vsprintf($sqlstr,$data),'Fehler beim Anlegen der Basisinformationen für ein neues Haus',__FILE__,__LINE__); } function insertData($data) { $sqlstr = 'INSERT INTO `' . HAUS_DATA_TABLE . '` (`' . HAUS_ID_FIELD . '`,`gold`,`gems`,`turn`) VALUES(%u,%u,%u,%u)'; dying_query(vsprintf($sqlstr,$data),'Fehler beim Anlegen der erweiterten Informationen für ein neues Haus',__FILE__,__LINE__); } function generate_id($street_id = false) { $loc_str = $street_id !== false ? 'WHERE `street_id`="' . $street_id . '"' : ''; $loc_str2 = $street_id !== false ? 'AND `h`.`street_id`=' . $street_id : ''; $field_str = $street_id !== false ? HAUS_NR_FIELD : HAUS_ID_FIELD; $sql = 'SELECT IF((SELECT MIN(`' . $field_str . '`) FROM `' . HAUS_TABLE . '` ' . $loc_str . ')>1,1,(SELECT IF(ISNULL(MIN(`h`.`' . $field_str . '`)+1),1,MIN(`h`.`' . $field_str . '`)+1) AS `new` FROM `' . HAUS_TABLE . '` `h` LEFT OUTER JOIN `' . HAUS_TABLE . '` `n` ON `n`.`' . $field_str . '` = `h`.`' . $field_str . '`+1 WHERE ISNULL(`n`.`' . $field_str . '`) ' . $loc_str2 . ')) AS `neu`'; $res = dying_query($sql, 'Generieren eines neuen HausIndexes schlug fehl', __FILE__, __LINE__); $neu = db_fetch_assoc($res); db_free_result($res); return $neu['neu']; } function getMissingCosts() { $cost = haus_build::getCosts(); return array('gold'=>$cost['gold'] - $this->get('gold'), 'gems'=>$cost['gems'] - $this->get('gems'), 'turn'=>$cost['turn'] - $this->get('turn')); } function canBuild($user) { $cost = haus_build::getCosts(); $own = haus_basic::findByUser($user['acctid'], true, -3); $miss = array(); if($user['gold'] < $cost['sgold']) $miss['gold'] = $cost['sgold'] - $user['gold']; if($user['gems'] < $cost['sgems']) $miss['gems'] = $cost['sgems'] - $user['gems']; if($user['turns'] < $cost['sturn']) $miss['turn'] = $cost['sturn'] - $user['turns']; if($user['dragonkills'] < $cost['dk']) $miss['dk'] = $cost['dk'] - $user['dragonkills']; if(count($own) > 0) $miss['building'] = 1; return empty($miss) ? true : $miss; } function getCosts() { return array('gold'=>getsetting('baukostengold', 25000), 'gems'=>getsetting('baukostengems', 50), 'dk'=>getsetting('abwannbauen', 3), 'turn'=>getsetting('baukostenturn', 30), 'sgold'=>getsetting('baukostengold_start', 10000), 'sgems'=>getsetting('baukostengems_start', 10), 'sturn'=>getsetting('baukostenturn_start', 5)); } function corrigatePrefVal($user,$valname,$prefval,$maxval = false) { if(!$maxval) { $mcost = $this->getMissingCosts(); $maxval = $mcost[$valname]; } if($maxval > $prefval) $prefval = $maxval; if($user[($valname == 'turn' ? 'turns' : $valname)] < $prefval) $prefval = $user[($valname == 'turn' ? 'turns' : $valname)]; return $prefval; } function pay(&$user,$initial = false,$pref = array('gold'=>0,'gems'=>0,'turn'=>0)) { if($initial) { $cost = haus_build::getCosts(); $pref = array('gold'=>$cost['sgold'], 'gems'=>$cost['sgems'], 'turn'=>$cost['sturn']); } $gold = haus_build::corrigatePrefVal($user, 'gold', $pref['gold'], $pref['gold']); //,$maxvals['gold']); $gems = haus_build::corrigatePrefVal($user, 'gems', $pref['gems'], $pref['gems']); //,$maxvals['gems']); $turn = haus_build::corrigatePrefVal($user, 'turn', $pref['turn'], $pref['turn']); //,$maxvals['turn']); if(!$initial) $this->spend($gold, $gems, $turn); $user['gold'] -= $gold; $user['gems'] -= $gems; $user['turns'] -= $turn; return array('gold'=>$gold, 'gems'=>$gems, 'turn'=>$turn); } function spend($gold = 0,$gems = 0,$turn = 0) { $this->set('gold', $this->get('gold') + $gold); $this->set('gems', $this->get('gems') + $gems); $this->set('turn', $this->get('turn') + $turn); } function isFinished() { $miss = $this->getMissingCosts(); return ($this->get('level') >= 0) || ($miss['gold'] <= 0 && $miss['gems'] <= 0 && $miss['turn'] <= 0); } function getProgressText($user) { $wvtxt = & sysTxt::instance(); global $wvnav; $cost = haus_build::getCosts(); $miss = $this->getMissingCosts(); $str = $wvtxt->massGet(array('process_intro', 'process_main')); $sea = array('{GOLD}', '{GEMS}', '{TURN}', '{P_GOLD}', '{P_GEMS}', '{P_TURN}', '{L_GOLD}', '{L_GEMS}', '{L_TURN}', '{GOLD_BAR}', '{GEMS_BAR}', '{TURN_BAR}'); $rep = array($cost['gold'], $cost['gems'], $cost['turn'], $cost['gold'] - $miss['gold'], $cost['gems'] - $miss['gems'], $cost['turn'] - $miss['turn'], $miss['gold'], $miss['gems'], $miss['turn'], grafbar($cost['gold'], $cost['gold'] - $miss['gold'], 150, 15), grafbar($cost['gems'], $cost['gems'] - $miss['gems'], 150, 15), grafbar($cost['turn'], $cost['turn'] - $miss['turn'], 150, 15)); $str .= $wvtxt->repGet('process_cost', $sea, $rep); if($user['turns'] > 0) { $sea = array('{LINK}', '{GOLD}', '{GEMS}'); $formlink = $wvnav->link('house_id=' . $this->get(HAUS_ID_FIELD) . '&act=work', true); addnav('', $formlink); $rep = array($formlink, haus_build::corrigatePrefVal($user, 'gold', $miss['gold'], $miss['gold']), haus_build::corrigatePrefVal($user, 'gems', $miss['gems'], $miss['gems'])); $str .= $wvtxt->repGet('process_spend', $sea, $rep); } return $str; } function getWorkText(&$user) { $wvtxt = & sysTxt::instance(); global $wvnav; $str = ''; if($user['turns'] > 0) { $paid = $this->pay($user, false, array('gold'=>$_POST['spend_gold'], 'gems'=>$_POST['spend_gems'], 'turn'=>$_POST['spend_turn'])); if($this->isFinished()) { $wvnav->clear(); $str .= $wvtxt->get('work_finish'); $formlink = $wvnav->link('act=finish&' . HAUS_ID_FIELD . '=' . $this->get(HAUS_ID_FIELD), true); addnav('', $formlink); $sea = array('{LINK}', '{NAME}'); $rep = array($formlink, $user['login'] . "s Haus"); $str .= str_replace($sea, $rep, $wvtxt->get('work_config')); } else { $str .= $wvtxt->get('work_intro'); } $sea = array('{GOLD}', '{GEMS}', '{TURN}'); $rep = array($paid['gold'], $paid['gems'], $paid['turn']); $str .= str_replace($sea, $rep, $wvtxt->get('work_cost')); } else { $str .= $wvtxt->get('work_fail'); } return $str; } function getFinishText($user) { $wvtxt = & sysTxt::instance(); $_POST['house_name'] = urldecode($_POST['house_name']); $baselevel = new wvLevel(); wvKey::generateKeys($this->get(HAUS_ID_FIELD), $baselevel->keys - 1, $user['acctid'], 2); $this->set('level', 1); $this->set('name', $_POST['house_name']); $this->set('gold', 0); $this->set('gems', 0); $this->set('turn', 'NULL'); $str = $wvtxt->get('finish_intro'); $sea = array('{NAME}', '{KEYS}'); $rep = array($_POST['house_name'], $baselevel->keys); $str .= str_replace($sea, $rep, $wvtxt->get('finish_main')); return $str; } function getInfoText() { $wvtxt = & sysTxt::instance(); $cost = haus_build::getCosts(); $sea = array('{GOLD}', '{GEMS}', '{TURN}', '{S_GOLD}', '{S_GEMS}', '{S_TURN}', '{DK}'); $rep = array($cost['gold'], $cost['gems'], $cost['turn'], $cost['sgold'], $cost['sgems'], $cost['sturn'], $cost['dk']); $str = $wvtxt->massGet(array('info_intro', 'info_main')); $str .= str_replace($sea, $rep, $wvtxt->get('info_cost')); $str .= $wvtxt->get('info_end'); return $str; } function getStartText() { $wvtxt = & sysTxt::instance(); $cost = $this->getCosts(); $mcost = $this->getMissingCosts(); $str = $wvtxt->get('start_intro'); $sea = array('{GOLD}', '{GEMS}', '{TURN}'); $rep = array($cost['gold'] - $mcost['gold'], $cost['gems'] - $mcost['gems'], $cost['turn'] - $mcost['turn']); $str .= $wvtxt->repGet('start_cost', $sea, $rep); return $str; } function getSelectText($street_id = 0) { global $quater, $wvnav; require_once './lib/formulaclass.php'; $pref_street_id = empty($street_id) ? 0 : intval($street_id); $link = $wvnav->link('act=start', true); addnav('', $link); $form = input::start_form($link); $usable = $quater->findStreets(true); $vars = array(); foreach($usable as $street) { $vars[] = array('value'=>$street->street_id, 'name'=>$street->name . '(' . $street->house_num . ' Häuser)'); } $form .= input::selectv('street_id', $pref_street_id, 1, $vars); $form .= '`n' . input::button('Bauen!') . ''; return $form; } }