You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

197 lines
7.1 KiB

<?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>';
db_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 = db_query($sql);
while($row = mysqli_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 = db_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 = mysqli_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){
db_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>';
db_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
db_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 = db_query($sql);
$arena = mysqli_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){
// db_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>';
db_query('Update arena set exp=\''.$arena_exp[0].','.$arena_exp[1].'\', level='.$arena['level'].', skill=skill+'.$lvls.' WHERE besitzer='.$user_id);
} else{
db_query('Update arena set exp=\''.$arena_exp[0].','.$arena_exp[1].'\' WHERE besitzer='.$user_id);
}
}
?>