<?php /* * * @copyright (c) 2009 animegame.eu * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public Licence * */ include_once ('char.inc.php'); function beautifyNumericValue($value, $step){ // RUNDEN(POTENZ(10;ABRUNDEN(MAX(LOG(I3;10);2)))/4;0) $tmp = round(pow(10,floor(max(log($value,10),2)))/$step); return round($value / $tmp) * $tmp; } function calculateRequiredExpChars($level){ // We have a polynom with grade 10 $g01 = $level * 1000; $g02 = pow($level,2) * 17; $g03 = pow($level,3) * 0.01; $g04 = pow($level,4) * 0.04; // No need for 5 $g06 = pow($level*$level,6) * pow(10,-18); $g07 = pow($level*$level,7) * pow(10,-22); $g08 = pow($level*$level,8) * pow(10,-26); $g09 = pow($level*$level,9) * pow(10,-30); $g10 = pow($level*$level,10) * pow(10,-33); return beautifyNumericValue($g01 + $g02 + $g03 + $g04 + $g06 + $g07 + $g08 + $g09 + $g10, 8); // return $g01 + $g02 + $g03 + $g04 + $g06 + $g07 + $g08 + $g09 + $g10; } function calculateTrainingPoints($level){ return round(400/(1+ exp($level *-1/15+3))/2) ; } function calculateRequiredExpArena($level){ $g00 = 250; $g01 = 2500 * $level; $g02 = 250 * pow($level, 2); $g03 = 250 * pow($level, 3); $g04 = 750 * pow($level, 4); return beautifyNumericValue($g00 + $g01 + $g02 + $g03 + $g04, 8); } /** * * @param $attacken array of 10 arrays with entry (anzahl and a_name) * @return unknown_type */ function addAttackUsageToChar($char_id, $attacken){ $char = getChar($char_id, false); // We really want the actual char!! // Erstmal die Attacken vermerken! for($i=0;$i<count($attacken);$i++){ // So jetzt nur noch die reqs einpflegen $sql = 'Update lernen set benutzt = benutzt + '.$attacken[$i]['anzahl'].' where name = \''.$attacken[$i]['a_name'].'\' and besitzer = '.$char_id; // echo $sql.'<br>'; mysql_query($sql); } // Sooo und nun gehts darum ob wir neue Attacken lernen können // Ersma die ganzen Infos laden $sql = 'SELECT * FROM lernen where besitzer = '.$char_id; $qry = mysql_query($sql); while($row = mysql_fetch_assoc($qry)){ $lern[$row['at_id']] = $row; // Zum späteren Check ob die Reqs erfüllt sind $atkid[] = $row['at_id']; // Zum ausschliessen der Attacken } // Wir können jetzt schon die Attacken ausschließen, die wir schon können!! if(count($atkid) > 0){ $zusatz = ' AND id NOT IN('.join($atkid,',').')'; } // Lernbare Attacken auswählen if(!is_null($char['frucht'])){ $sql = 'select * from attacken where (Frucht is NULL or Frucht = (Select id from wochen_markt where item = \''.$char['frucht'].'\')) and (rassen != \'\' and rassen != \'0\') and level <= '.$char['level'].$zusatz; } else { $sql = 'select * from attacken where (Frucht is NULL) and (rassen != \'\' and rassen != \'0\') and level <= '.$char['level'].$zusatz; } // echo $sql.'<br>'; $qry = mysql_query($sql); // Das geht leider nicht mit dieser Datenstruktur direkt auszuwählen $raceid[] = getCharRaceId($char_id); if(!is_null(getFusionRaceId($char_id))){ $raceid[] = getFusionRaceId($char_id); } // So und nun arbeite jede Attacke durch die nur im geringsten Lernbar sein könnte ... while($row = mysql_fetch_assoc($qry)) { // Erstmal checken ob es eine Fruchtattacke ist (durch die SQL-Anweisung werden alle nicht zutreffenden Früchte ausgeblockt) $learnable = false; if(!is_null($row['Frucht'])){ // Ok es is ne Frucht-attacke :) Also können wir sie lernen :) $learnable = true; } else { // Ok, dann müssen wir die Rasse checken :) $races = preg_split('#,#', $row['rassen']); for($i=0;$i<count($races);$i++){ for($t=0;$t<count($raceid);$t++){ // Walk through own races (remember: when fused we have two) if($races[$i] == $raceid[$t]){ // Die Rasse passt schonmal!! $learnable = true; // Gehen wir mal vom besten Fall aus // Da die Rasse gepasst hat können wir uns aus der Schleife verabschieden break; } } } } if($learnable){ // Haben wir die benötigten Attacken auch oft genug genutzt?? $r_atck = preg_split('#,#', $row['req_atk']); for($u = 0;$u < count($r_atck); $u++){ if($r_atck[$u] != '0' && $lern[$r_atck[$u]]['benutzt'] < $row['geld']){ // Passt nicht? dann brauchen wir garnich weiter machen // echo 'Der Char kann '.$row['name'].' nicht lernen, weil er die Attacke '.$lern[$r_atck[$u]]['name'].' nur '.$lern[$r_atck[$u]]['benutzt'].' mal eingesetzt hat und nicht '.$row['geld'].'<br>'; $learnable = false; break; } } } if($learnable){ mysql_query('INSERT lernen SET name=\''.$row['name'].'\', at_id=\''.$row['id'].'\', besitzer=\''.$char_id.'\', aktiv=\'1\''); echo '<script language="JavaScript">alert(\''.$char['name'].' hat die Technik '.$row['name'].' gelernt!\');</script>'; } } } function addExpToChar($char_id, $n_exp){ // TODO: Optimize so only one update is required ;) $char = getChar($char_id, false); // We really want the actual char!! $char_exp = explode(',', $char['exp']); $char_exp[0] += $n_exp; $lvls = 0; $tp = 0; $lp = 0; while($char_exp[0] >= $char_exp[1]){ // Level UP!! $lvls++; $char['level']++; $char_exp[0] -= $char_exp[1]; $char_exp[1] = calculateRequiredExpChars($char['level']); $tp += calculateTrainingPoints($char['level']); $lp += 10; } if($lvls > 0){ // Ist Char um mindestens ein Level gestiegen? echo '<script language="JavaScript">alert(\''.$char['name'].' ist um '.$lvls.' Level gestiegen!\');</script>'; $sql = 'Update chars set exp = \''.$char_exp[0].','.$char_exp[1].'\', lernpunkte = lernpunkte +'.$lp.', training_points = training_points + '.$tp.', level = level + '.$lvls.' where id = '.$char_id; } else { $sql = 'Update chars set exp = \''.$char_exp[0].','.$char_exp[1].'\' where id = '.$char_id; } // echo $sql.'<br>'; mysql_query($sql); $char = getChar($char_id, false); // We really want the actual char!! if($char['level'] > 25) { // remove this char out of the registration of the beginners tournament mysql_query('Delete from turnier1 where art = \'klein\' and charakter = \''.$char_id.'\''); } } function addExpToArena($user_id, $n_exp){ $sql = 'SELECT * from arena where besitzer = '.$user_id; $qry = mysql_query($sql); $arena = mysql_fetch_assoc($qry); $arena_exp = explode(',', $arena['exp']); $arena_exp[0] += $n_exp; $lvls = 0; while($arena_exp[0] >= $arena_exp[1]){ // Level UP!! $lvls++; $arena['level']++; $arena_exp[0] -= $arena_exp[1]; $arena_exp[1] = calculateRequiredExpArena($arena['level']); } if($lvls > 0){ // mysql_query("UPDATE arena SET exp='$ne_exp1,$new_exp', level='$level1', skill='$skill_points' WHERE besitzer='$user_ida[id]' LIMIT 1"); echo '<script language="JavaScript">alert(\'Arena ist um '.$lvls.' Level gestiegen!\');</script>'; mysql_query('Update arena set exp=\''.$arena_exp[0].','.$arena_exp[1].'\', level='.$arena['level'].', skill=skill+'.$lvls.' WHERE besitzer='.$user_id); } else{ mysql_query('Update arena set exp=\''.$arena_exp[0].','.$arena_exp[1].'\' WHERE besitzer='.$user_id); } } ?>