From 5ee447997f23d90883b9ad7952a03ca7c4a02c43 Mon Sep 17 00:00:00 2001 From: hecht Date: Wed, 5 Oct 2011 20:16:32 +0000 Subject: [PATCH] Heute ne ganze Menge in Richtung Clanfights gemacht. Die Berechnung sollte nun (zumindest in der Theorie) schonmal klappen. Alle Daten werden in die Datenbank geschrieben. Was nun noch erledigt werden muss ist, dass die Fights zu bestimmten Zeiten "sichtbar" werden! --- ag/clan/clan_info.php | 4 ++- ag/clan/new.php | 7 +++++ ag/include/arena.inc.php | 41 ++++++++------------------- ag/include/attackenset.inc.php | 14 +++++----- ag/include/char.inc.php | 10 ------- ag/include/clan.inc.php | 1 + ag/include/clan_fights.inc.php | 40 ++++++++++++++++++++++---- ag/include/event.inc.php | 48 +++++++++++++++++++++++++++----- ag/include/kampf_wrapper.inc.php | 40 ++++++++++++++++++++++++-- 9 files changed, 143 insertions(+), 62 deletions(-) diff --git a/ag/clan/clan_info.php b/ag/clan/clan_info.php index 17b5e1b..7946cef 100644 --- a/ag/clan/clan_info.php +++ b/ag/clan/clan_info.php @@ -10,7 +10,6 @@ include_once($_SERVER['DOCUMENT_ROOT'].'ag/include/clan.inc.php'); include_once($_SERVER['DOCUMENT_ROOT'].'ag/include/clan_fights.inc.php'); include_once($_SERVER['DOCUMENT_ROOT'].'ag/include/fehlerausgabe.inc.php'); - // GET-Section if(isset($_GET['action'])) { @@ -454,6 +453,9 @@ function setProfile($what, $value1, $value2, $clanid, $rootlvl){ mysql_query('UPDATE clan SET homepage = \''.$value1.'\' where id = '.$clanid); return NULL; case 'Clanzeichen': + if(strlen($value1.$value2) > MAX_CHARS_CLANSIGN) { + return 'Clanzeichen sind ungültig: Summe aus beiden Teilen darf nicht größer als '.MAX_CHARS_CLANSIGN.' Zeichen sein!'; + } mysql_query('UPDATE clan SET clanz_pre = \''.$value1.'\', clanz_suff = \''.$value2.'\' where id = '.$clanid); return NULL; case 'Banner': diff --git a/ag/clan/new.php b/ag/clan/new.php index 0dfc4f2..d4a1f60 100644 --- a/ag/clan/new.php +++ b/ag/clan/new.php @@ -9,6 +9,8 @@ include_once ($_SERVER['DOCUMENT_ROOT'] . 'ag/include/config.inc.php'); include_once ($_SERVER['DOCUMENT_ROOT'] . 'ag/include/designfunctions.inc.php'); include_once ($_SERVER['DOCUMENT_ROOT'] . 'ag/include/fehlerausgabe.inc.php'); include_once ($_SERVER['DOCUMENT_ROOT'] . 'ag/include/parse.inc.php'); +include_once ($_SERVER['DOCUMENT_ROOT'] . 'ag/include/clan.inc.php'); + // GET-Section // Kritisch (SQL-Injections) $clan_name = validateName($_GET['clan_name']); @@ -27,6 +29,11 @@ if ($charm == 1) { exit; } + if(strlen($clan_for.$clan_back) > MAX_CHARS_CLANSIGN) { + displayErrorMessage(NULL, 'Clanzeichen sind ungültig: Summe aus beiden Teilen darf nicht größer als '.MAX_CHARS_CLANSIGN.' Zeichen sein!.', displayHistoryBackLink()); + exit; + } + if (!$clan_name) { displayErrorMessage(NULL, 'Sie müssen einen Clannamen haben.', displayHistoryBackLink()); exit; diff --git a/ag/include/arena.inc.php b/ag/include/arena.inc.php index ad6ac20..cf40f7c 100644 --- a/ag/include/arena.inc.php +++ b/ag/include/arena.inc.php @@ -8,38 +8,21 @@ include_once($_SERVER['DOCUMENT_ROOT'].'ag/include/char.inc.php'); -//if($chara_1['id']) { -// $arena = mysql_fetch_array(mysql_query("SELECT id, name, ring, platz, lux, preis, level, skill, exp FROM arena WHERE besitzer='$chara_2[besitzer]' LIMIT 1")); -//} else { -// $arena = mysql_fetch_array(mysql_query("SELECT id, name, ring, platz, lux, preis, level, skill, exp FROM arena WHERE besitzer='$user_ida[id]' LIMIT 1")); -//} -//$arena_geld = ($arena['platz'] / 2) + ($arena['ring'] * 3) + ($arena['lux'] * 50); -//$arena_geld /= 4; -// -//$exp1 = explode(",",$arena[exp]); -//$exp1[0] = round($exp1[0]); -//$arena_besucher = ($arena[ring] * 3) + ($arena[lux] * 200); -//if($arena[preis] != 0){ -// $arena_besucher = round($arena_besucher / ($arena[preis] / 10)); -//} else{ -// $arena_besucher = 1; -//} -//if($arena_besucher<0) { -//$arena_besucher = 0; -//} -// -//if($arena_besucher>$arena[platz]) { -//$arena_besucher = $arena[platz]; -//} -// -//$arena_einkommen = $arena_besucher * $arena[preis]; - function calculateArenaData($owner_id, $char_1, $char_2, $factor){ // echo 'Berechne die Arena-Daten mit Faktor '.$factor; $lf = 0.7; // Luxus Exponent $kf_1 = 1/3; // Kampf Exponent a) $kf_2 = $kf_1 * $kf_1; // Kampf Exponent b) - + + // default arena! + if($owner_id == NULL) { + $arena['luxus'] = 2; + $arena['level'] = 2; + $arena['steh'] = 1000000; + $arena['sitz'] = 1000000; + $arena['loge'] = 1000000; + } + $arena = mysql_fetch_assoc(mysql_query('SELECT * FROM arena WHERE besitzer = '.$owner_id)); $wert_char1 = max(0.75,min(1.25,$char_1['siege']/($char_1['niederlagen'] + 0.01))) * getPowerLevelWithBuffs($char_1['id']); $wert_char2 = max(0.75,min(1.25,$char_2['siege']/($char_2['niederlagen'] + 0.01))) * getPowerLevelWithBuffs($char_2['id']); @@ -47,7 +30,7 @@ function calculateArenaData($owner_id, $char_1, $char_2, $factor){ $kampf_wert = (pow($wert_char1,$kf_1)+pow($wert_char1,$kf_2))*(pow($wert_char2,$kf_1)+pow($wert_char2,$kf_2)); // Neue Kalkulation :) $arena_wert = pow($arena['luxus'], $lf)+log($arena['level'],4)+0.5; - + $zuschauer = $kampf_wert*$arena_wert*$factor; $z_loge = floor(0.01*$zuschauer); $z_sitz = round(0.36*$zuschauer); @@ -68,7 +51,7 @@ function calculateUnterhaltsKosten($arena){ } function calculateRenovierungsKosten($arena){ - return (1-$arena['zustand'])*($arena['steh']*10+$arena['sitz']*150+$arena['loge']*18000); + return (1-$arena['zustand'])*($arena['steh']*10+$arena['sitz']*150+$arena['loge']*18000); } ?> \ No newline at end of file diff --git a/ag/include/attackenset.inc.php b/ag/include/attackenset.inc.php index 9dfd2dd..b31191f 100644 --- a/ag/include/attackenset.inc.php +++ b/ag/include/attackenset.inc.php @@ -7,7 +7,7 @@ */ ?> - $result['gruppen_id'], "gruppen_name" => $result['gruppen_name']); + $set[$result['round']] = $result['attack_id']; } return $set; } function updateCharAttackSet($set) { - -} + +} function createCharAttackSet() { - + } diff --git a/ag/include/char.inc.php b/ag/include/char.inc.php index 7ddfc5a..a9375c6 100644 --- a/ag/include/char.inc.php +++ b/ag/include/char.inc.php @@ -389,14 +389,4 @@ function getAttacksforChar($charid, $mode = 0) { return $overview; } -/** - * This function reads out the attack set of the char - * @param string $name - * @param int $char_id - */ -function getAttackenSet($name, $char_id) { - // TODO: Further implementation - return NULL; -} - ?> diff --git a/ag/include/clan.inc.php b/ag/include/clan.inc.php index 2f1599a..6e59f65 100644 --- a/ag/include/clan.inc.php +++ b/ag/include/clan.inc.php @@ -7,6 +7,7 @@ */ +define('MAX_CHARS_CLANSIGN', 8); $GLOBALS['clan_buffered_instances'] = array (); diff --git a/ag/include/clan_fights.inc.php b/ag/include/clan_fights.inc.php index 4a53b80..b879051 100644 --- a/ag/include/clan_fights.inc.php +++ b/ag/include/clan_fights.inc.php @@ -7,6 +7,8 @@ */ include_once ($_SERVER['DOCUMENT_ROOT'] . 'ag/include/clan.inc.php'); +include_once ($_SERVER['DOCUMENT_ROOT'] . 'ag/include/attackenset.inc.php'); +include_once ($_SERVER['DOCUMENT_ROOT'] . 'ag/include/arena.inc.php'); include_once ($_SERVER['DOCUMENT_ROOT'] . 'ag/include/kampf_wrapper.inc.php'); include_once ($_SERVER['DOCUMENT_ROOT'] . 'ag/include/semaphore.inc.php'); include_once ($_SERVER['DOCUMENT_ROOT'] . 'ag/include/event.inc.php'); @@ -511,17 +513,45 @@ function calculateSurvivalClanFight($event_id, array $clan_ids, array $clan_char * @return the winners array */ function battle($event_id, array $char1, array $char2, $attack_set) { + $char1['attacke'] = implode(',', getCharAttackSet($char1['id'], $attack_set)); + $char2['attacke'] = implode(',', getCharAttackSet($char2['id'], $attack_set)); + $combinedArray = calculateFight($char1, $char2); + $exp = calculateExperience($char1, $char2, $combinedArray['winner'], 0.01); // very few exp + + $combinedArray[KEY_EXP_CHAR1] = $exp[$char1['id']]; + $combinedArray[KEY_EXP_CHAR2] = $exp[$char2['id']]; + + $arena = calculateArenaData(null, $char_1, $char_2, 0.01); + $combinedArray[KEY_LOGE] = $arena['loge']; + $combinedArray[KEY_SITZ] = $arena['sitz']; + $combinedArray[KEY_STEH] = $arena['steh']; + + if($combinedArray['winner'] == $char1['id']) { + $combinedArray[KEY_GELD_CHAR1] = $result['geld'] * 0.7; + $combinedArray[KEY_GELD_CHAR2] = $result['geld'] * 0.3; + } else { + $combinedArray[KEY_GELD_CHAR2] = $result['geld'] * 0.7; + $combinedArray[KEY_GELD_CHAR1] = $result['geld'] * 0.3; + } + // first persist the fight and then check who was the winner and adjust the char array for him ;) persistFight($event_id, $combinedArray); - // now determine the winner - // TODO: implement - - // now adjust the winners array - // TODO: implement + // now get the winners array + $rounds = $combinedArray['rounds']; + $lastRound = $rounds[count($rounds) - 1]; + $newChar = null; + if($lastRound['char1_array']['id'] == $combinedArray['winner']){ + $newChar = $lastRound['char1_array']; + } else { + $newChar = $lastRound['char2_array']; + } + $newChar['mp'] = $newChar['mp']. ','.$newChar['mp_max']; + $newChar['hp'] = $newChar['hp']. ','.$newChar['hp_max']; + return $newChar; } diff --git a/ag/include/event.inc.php b/ag/include/event.inc.php index 6a17744..f6da500 100644 --- a/ag/include/event.inc.php +++ b/ag/include/event.inc.php @@ -16,6 +16,25 @@ define('EVENT_LIGA', 4); define('EVENT_WANTED', 5); define('EVENT_CLAN_FIGHT', 6); +// The fights duration is fixed +define('DURATION_FIGHT', 0); +// The fights duration is resolved by the amount of rounds +define('DURATION_ROUND', 1); +// The fights duration is fixed but the time ouf rounds is resolved! +define('DURATION_FIGHT_RESOLVED_ROUNDS', 2); + +define('KEY_LOGE', 'LOGE'); +define('KEY_SITZ', 'SITZ'); +define('KEY_STEH', 'STEH'); +define('KEY_EXP_CHAR1', 'EXP_CHAR1'); +define('KEY_EXP_CHAR2', 'EXP_CHAR2'); +define('KEY_GELD_CHAR1', 'GELD_CHAR1'); +define('KEY_GELD_CHAR2', 'GELD_CHAR2'); +define('KEY_AXP_CHAR1', 'AXP_CHAR1'); +define('KEY_AXP_CHAR2', 'AXP_CHAR2'); +define('KEY_ITM_CHAR1', 'ITM_CHAR1'); + + /** * Creates an event for a given type and returns the id of this event! * @param string $type @@ -59,18 +78,28 @@ function addParticipant($event_id, array $char) { * Persists a fight of one event. * @param int $event_id * @param array combined array that is calculated in the kampf_wrapper + * @param int $startTimestamp unix timestamp for the start of the battle + * @param int $durationType the duration value (see the DURATION constants) + * @param int $durationValue the amount of time in minutes * @return int the id of the fight */ -function persistFight($event_id, array $combinedArray) { +function persistFight($event_id, array $combinedArray, $startTimestamp, $durationType, $durationValue) { // persist a fight of two chars (calculated by the wrapper) ^^" //echo 'The fight was about ' . count($combinedArray) . ' rounds
'; + + $roundsArray = $combinedArray['rounds']; + $winnerId = $combinedArray['winner']; + $hostId = $combinedArray['host']; + $data = $combinedArray['data']; + + // first get a fight id ;). $finished = FALSE; while(!$finished) { $sql = 'SELECT IFNULL(max(event_fight_id),0) + 1 FROM event_fights'; $row = mysql_fetch_row(mysql_query($sql)); - mysql_query('INSERT INTO event_fights(event_id, event_fight_id) values('.$event_id.', \''.$row[0].'\')'); + mysql_query('INSERT INTO event_fights(event_id, event_fight_id, host, winner) values('.$event_id.', \''.$row[0].'\, '. $hostId . ', ' . $winnerId .')'); $finished = mysql_affected_rows() > 0; $event_fight_id = $row[0]; } @@ -79,28 +108,33 @@ function persistFight($event_id, array $combinedArray) { - for($round = 0; $round < count($combinedArray) ; $round++) { + for($round = 0; $round < count($roundsArray) ; $round++) { // persist this round ^^" // first persist char1 - $chara_1 = $combinedArray[$round]['char1_array']; + $chara_1 = $roundsArray[$round]['char1_array']; $sql = 'INSERT INTO event_fight_rounds(event_id, event_fight_id, round, event_char_id, hp, mp, strength, speed, defense, luck, stamina, attack, damage)'; - $sql .= ' values('.$event_id.','.$event_fight_id.','.$round.',' .$chara_1['id'].','. $chara_1['hp'].', '. $chara_1['mp'].', '. $chara_1['starke'].', '. $chara_1['speed'].', '. $chara_1['verteidigung'].', '. $chara_1['glueck'].', '. $chara_1['ausdauer'].', \''. $combinedArray[$round]['atk_char1'] .'\', \''. $combinedArray[$round]['dmg_char1'] .'\')'; + $sql .= ' values('.$event_id.','.$event_fight_id.','.$round.',' .$chara_1['id'].','. $chara_1['hp'].', '. $chara_1['mp'].', '. $chara_1['starke'].', '. $chara_1['speed'].', '. $chara_1['verteidigung'].', '. $chara_1['glueck'].', '. $chara_1['ausdauer'].', \''. $roundsArray[$round]['atk_char1'] .'\', \''. $roundsArray[$round]['dmg_char1'] .'\')'; // echo $sql .'
'; mysql_query($sql); // now persist char2 - $chara_2 = $combinedArray[$round]['char2_array']; + $chara_2 = $roundsArray[$round]['char2_array']; $sql = 'INSERT INTO event_fight_rounds(event_id, event_fight_id, round, event_char_id, hp, mp, strength, speed, defense, luck, stamina, attack, damage)'; - $sql .= ' values('.$event_id.','.$event_fight_id.','.$round.',' .$chara_2['id'].', '. $chara_2['hp'].', '. $chara_2['mp'].', '. $chara_2['starke'].', '. $chara_2['speed'].', '. $chara_2['verteidigung'].', '. $chara_2['glueck'].', '. $chara_2['ausdauer'].', \''. $combinedArray[$round]['atk_char2'] .'\', \''. $combinedArray[$round]['dmg_char2'] .'\')'; + $sql .= ' values('.$event_id.','.$event_fight_id.','.$round.',' .$chara_2['id'].', '. $chara_2['hp'].', '. $chara_2['mp'].', '. $chara_2['starke'].', '. $chara_2['speed'].', '. $chara_2['verteidigung'].', '. $chara_2['glueck'].', '. $chara_2['ausdauer'].', \''. $roundsArray[$round]['atk_char2'] .'\', \''. $roundsArray[$round]['dmg_char2'] .'\')'; // echo $sql .'
'; mysql_query($sql); + } + // Okay now do we have any additional data left? + foreach ($data as $key => $value) { + $sql = 'INSERT INTO event_fight_metadata(event_id, event_fight_id, key, value) values('.$event_id.','.$event_fight_id.',\''.$key.'\',\''.$value.'\')'; + mysql_query($sql); } } diff --git a/ag/include/kampf_wrapper.inc.php b/ag/include/kampf_wrapper.inc.php index 293c12b..6fc3e9b 100644 --- a/ag/include/kampf_wrapper.inc.php +++ b/ag/include/kampf_wrapper.inc.php @@ -6,6 +6,9 @@ * */ +include_once ($_SERVER['DOCUMENT_ROOT'] . 'ag/include/arena.inc.php'); + + /** * * Converts the learn-ids of a char to the attack ids (that can be used to determine the technique) @@ -33,7 +36,7 @@ function convertLearnIDToAttackID (array $learnids, $char_id) { * Lets char1 fight against char2 (the attacks that are in the entry "attacken" will be used, no conditions!) * @param array $char1 the char-array for the first char that should be used (like it is) * @param array $char2 the char-array for the second char that should be used (like it is) - * @return an array with the contents of the several rounds + * @return an array with the contents of the several rounds + metadata */ function calculateFight(array $char1, array $char2) { @@ -105,14 +108,15 @@ function calculateFight(array $char1, array $char2) { } } + + $metaData = array(); + $metaData['host'] = $char1['id']; ## Start the fight ;) // The "rundenArray" has a specific structure. For each round played another entry is placed. // An entry contains { char1_array*, char2_array*, atk_char1, atk_char2, dmg_char1, dmg_char2 } // the char arrays contain the stats of the chars at the end of the round ! - - $rundenArray = array(); $tmp_hp = array(); @@ -206,10 +210,40 @@ function calculateFight(array $char1, array $char2) { $x++; $rundenArray[] = $runde; + } + if(($k_hp[0] > $k_aufgabe[0] && $k_hp[1] > $k_aufgabe[1]) || ($k_hp[0] < $k_aufgabe[0] && $k_hp[1] < $k_aufgabe[1])) { + // Both are above or both are below their limit to surrender? + if($k_hp[0] >= $k_hp[1]) { // If even the creator wins ;) + $metaData['winner'] = $chara_1['id']; + } else { + $metaData['winner'] = $chara_2['id']; + } + } else if($k_hp[0] < $k_aufgabe[0]) { // char1 is about to surrender + $metaData['winner'] = $chara_2['id']; + } else { + $metaData['winner'] = $chara_1['id']; } + $metaData['rounds'] = $rundenArray; + $metaData['data'] = array(); return $rundenArray; } + +function calculateExperience(array $char1, array $char2, $winner, $factor) { + $exp[$char1['id']] = 0; + $exp[$char2['id']] = 0; + if($winner == $char1['id']) { + $exp[$char1['id']] = (getPowerLevelWithBuffs($chara_1['id']) + getPowerLevelWithBuffs($chara_2['id'])) * 2.2 * $factor; + $exp[$char2['id']] = (getPowerLevelWithBuffs($chara_1['id']) + getPowerLevelWithBuffs($chara_2['id'])) * $factor; + } else { + $exp[$char1['id']] = (getPowerLevelWithBuffs($chara_1['id']) + getPowerLevelWithBuffs($chara_2['id'])) * $factor; + $exp[$char2['id']] = (getPowerLevelWithBuffs($chara_1['id']) + getPowerLevelWithBuffs($chara_2['id'])) * 2.2 * $factor; + } + return $exp; +} + + + ?> \ No newline at end of file