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.
333 lines
12 KiB
333 lines
12 KiB
<?php
|
|
/*
|
|
*
|
|
* @copyright (c) 2011 animegame.eu
|
|
* @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public Licence
|
|
*
|
|
*/
|
|
|
|
include_once(ROOT_PATH.'/include/user.inc.php');
|
|
include_once (ROOT_PATH . '/include/defines.inc.php');
|
|
|
|
defineIfNotDefined('EVENT_TEST', 0);
|
|
defineIfNotDefined('EVENT_SCHATZ_SUCHE', 1);
|
|
defineIfNotDefined('EVENT_TURNIER', 2);
|
|
defineIfNotDefined('EVENT_KAMPF', 3);
|
|
defineIfNotDefined('EVENT_LIGA', 4);
|
|
defineIfNotDefined('EVENT_WANTED', 5);
|
|
defineIfNotDefined('EVENT_CLAN_FIGHT', 6);
|
|
|
|
defineIfNotDefined('KEY_LOGE', 'LOGE');
|
|
defineIfNotDefined('KEY_SITZ', 'SITZ');
|
|
defineIfNotDefined('KEY_STEH', 'STEH');
|
|
defineIfNotDefined('KEY_EXP_CHAR1', 'EXP_CHAR1');
|
|
defineIfNotDefined('KEY_EXP_CHAR2', 'EXP_CHAR2');
|
|
defineIfNotDefined('KEY_GELD_CHAR1', 'GELD_CHAR1');
|
|
defineIfNotDefined('KEY_GELD_CHAR2', 'GELD_CHAR2');
|
|
defineIfNotDefined('KEY_AXP_CHAR1', 'AXP_CHAR1');
|
|
defineIfNotDefined('KEY_AXP_CHAR2', 'AXP_CHAR2');
|
|
defineIfNotDefined('KEY_ITM_CHAR1', 'ITM_CHAR1');
|
|
|
|
|
|
/**
|
|
* Creates an event for a given type and returns the id of this event!
|
|
* @param string $type
|
|
* @return int the id of the event
|
|
*/
|
|
function createEvent($type) {
|
|
while(!$finished) {
|
|
$sql = 'SELECT IFNULL(max(event_id),0) + 1 FROM events';
|
|
$row = mysql_fetch_row(mysql_query($sql));
|
|
mysql_query('INSERT INTO events(event_id, event_type) values('.$row[0].', \''.$type.'\')');
|
|
$finished = mysql_affected_rows() > 0;
|
|
$id = $row[0];
|
|
}
|
|
|
|
return $id;
|
|
}
|
|
/**
|
|
* Adds a participant to a given event
|
|
* @param int event_id
|
|
* @param array $char
|
|
* @return int the id of the participant (usually the charid), NULL on failure!
|
|
*/
|
|
function addParticipant($event_id, array $char) {
|
|
// Okay now add the char ;)
|
|
$user = getUser($char['besitzer']);
|
|
$hp = explode(',', $char['hp']);
|
|
$mp = explode(',', $char['mp']);
|
|
|
|
$sql = 'INSERT INTO event_chars(event_id, event_char_id, char_id, char_name, char_bild, user_id, user_name, hp, mp, strength, speed, defense, luck, stamina, block_begin, block_end)';
|
|
$sql .= ' value('. $event_id . ', '.$char['id'] .', '.$char['id'] .', \''.$char['name'].'\', \''.$char['bild'].'\', '.$char['besitzer'].', \''.$user['nickname'].'\', '.$hp[1].', '.$mp[1].', '.$char['starke'].', '.$char['speed'].', '.$char['verteidigung'].', '.$char['glueck'].', '.$char['ausdauer'].', now(), TIMESTAMPADD(Minute, 1, now()))';
|
|
|
|
// echo $sql . '<br>';
|
|
|
|
mysql_query($sql);
|
|
if(mysql_affected_rows() == 0)
|
|
return NULL;
|
|
return $char['id'];
|
|
}
|
|
|
|
/**
|
|
* 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 $endTimestamp unix timestamp for the end of the battle
|
|
* @return int the id of the fight
|
|
*/
|
|
function persistFight($event_id, array $combinedArray, $startTimestamp, $endTimestamp) {
|
|
// persist a fight of two chars (calculated by the wrapper) ^^"
|
|
//echo 'The fight was about ' . count($combinedArray) . ' rounds <br>';
|
|
|
|
$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 WHERE event_id = ' .$event_id;
|
|
$row = mysql_fetch_row(mysql_query($sql));
|
|
$sql = 'INSERT INTO event_fights(event_id, event_fight_id, host, winner, `starting`, visible) values('.$event_id.', \''.$row[0].'\', '. $hostId . ', ' . $winnerId .', \''.date("Y-m-d H:i:s",$startTimestamp).'\', \''.date("Y-m-d H:i:s",$endTimestamp).'\')';
|
|
if(mysql_query($sql) === FALSE) {
|
|
echo $sql . '<br>';
|
|
break;
|
|
}
|
|
$finished = mysql_affected_rows() > 0;
|
|
$event_fight_id = $row[0];
|
|
}
|
|
|
|
// now we have a $event_fight_id ;) lets insert the other stuff ;)
|
|
|
|
|
|
|
|
for($round = 0; $round < count($roundsArray) ; $round++) {
|
|
// persist this round ^^"
|
|
|
|
// first persist char1
|
|
$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, visible)';
|
|
$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']===NULL?'NULL': '\''.$roundsArray[$round]['atk_char1'].'\'' ).', '. ($roundsArray[$round]['dmg_char1']===NULL?'NULL': '\''.$roundsArray[$round]['dmg_char1'].'\'' ).', \''.date("Y-m-d H:i:s",$endTimestamp).'\')';
|
|
|
|
|
|
$res = mysql_query($sql);
|
|
if(!$res)
|
|
echo $sql .'<br>';
|
|
// now persist char2
|
|
$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, visible)';
|
|
$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']===NULL?'NULL': '\''.$roundsArray[$round]['atk_char2'].'\'' ).', '. ($roundsArray[$round]['dmg_char2']===NULL?'NULL': '\''.$roundsArray[$round]['dmg_char2'].'\'' ).', \''.date("Y-m-d H:i:s",$endTimestamp).'\')';
|
|
|
|
$res = mysql_query($sql);
|
|
if(!$res)
|
|
echo $sql .'<br>';
|
|
}
|
|
|
|
// 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.'\')';
|
|
// echo $sql . ' <br>';
|
|
mysql_query($sql);
|
|
}
|
|
|
|
mysql_query('UPDATE event_chars SET block_begin = \''.date("Y-m-d H:i:s",$startTimestamp).'\', block_end = \''.date("Y-m-d H:i:s",$endTimestamp).'\' WHERE event_id = ' . $event_id);
|
|
|
|
}
|
|
|
|
|
|
function getEventStatus($charid) {
|
|
$sql = 'SELECT event_type FROM event_chars ec inner join events e on ec.event_id = e.event_id where (block_end > now() or abgeholt = 1) and char_id = ' . $charid;
|
|
// echo $sql . '<br>';
|
|
$qry = mysql_query($sql);
|
|
$row = mysql_fetch_assoc($qry);
|
|
switch ($row['event_type']) {
|
|
case EVENT_TEST:
|
|
return 'Test';
|
|
case EVENT_SCHATZ_SUCHE:
|
|
return 'Schatzsuche';
|
|
case EVENT_TURNIER:
|
|
return 'Turnier';
|
|
case EVENT_KAMPF:
|
|
return 'Kampf';
|
|
case EVENT_LIGA:
|
|
return 'Liga';
|
|
case EVENT_WANTED:
|
|
return 'Wanted';
|
|
case EVENT_CLAN_FIGHT:
|
|
return 'Clanfight';
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
|
|
function getEventStatusBlocked($charid) {
|
|
$sql = 'SELECT Timestampdiff(Second,now(),MAX(block_end)) FROM event_chars WHERE char_id = ' . $charid;
|
|
// echo $sql . '<br>';
|
|
$row = mysql_fetch_row(mysql_query($sql));
|
|
return $row[0];
|
|
}
|
|
|
|
function isEventToFetchAwaiting($charid) {
|
|
$sql = 'SELECT count(*) FROM event_chars e WHERE abgeholt = 1 AND char_id = ' .$charid;
|
|
$row = mysql_fetch_row(mysql_query($sql));
|
|
return $row[0] > 0;
|
|
}
|
|
|
|
function getEventIdsToFetch($charid) {
|
|
$sql = 'SELECT event_id FROM event_chars e WHERE block_end < now() and abgeholt = 1 AND char_id = ' .$charid;
|
|
$qry = mysql_query($sql);
|
|
|
|
$result = array();
|
|
|
|
while ($row = mysql_fetch_row($qry)) {
|
|
$result[] = $row[0];
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
function abholenChar(array $user, $event_id, $char_id) {
|
|
// okay, first checking the basic things
|
|
$char = getChar($charid);
|
|
if($char['besitzer'] != $user) {
|
|
return 'Du kannst den Char nicht abholen weil er dir nicht gehört!!';
|
|
}
|
|
|
|
$ressource = 'User:'.$user_ida['id'];
|
|
if(!semaphoreUP($ressource)){ // TRUE, diese Anfrage darf bearbeitet werden
|
|
return 'Verarbeitung gerade in Gange, bitte warten...';
|
|
}
|
|
|
|
$event_char = getEventChar($event_id, $char_id);
|
|
if($event_char === NULL) {
|
|
semaphoreDown($ressource); // free the previously reserved semaphore!
|
|
return 'Der Char hat an diesem Event garnicht teil genommen!';
|
|
}
|
|
|
|
if($event_char['abgeholt'] == TRUE) {
|
|
semaphoreDown($ressource); // free the previously reserved semaphore!
|
|
return 'Der Char wurde schon abgeholt!';
|
|
}
|
|
|
|
// now get the ids of fights that the char has at the event!
|
|
$fight_ids = getEventFightIdsByChar($event_id, $char_id);
|
|
if(count($fight_ids) <= 0) {
|
|
semaphoreDown($ressource); // free the previously reserved semaphore!
|
|
return 'Der Char hat in diesem Event keinen Fight bestritten!';
|
|
}
|
|
|
|
$char_exp = 0;
|
|
$char_aexp = 0;
|
|
$char_geld = 0;
|
|
// Okay and now calculate those fights?
|
|
// Get the "chars" data :)
|
|
foreach ($fight_ids as $fight_id) {
|
|
$fight = getEventFight($event_id, $fight_id);
|
|
$fight_meta = getEventFightMetaData($event_id, $fight_id);
|
|
if($fight['host'] == $char_id) {
|
|
$char_exp += $fight_meta['KEY_EXP_CHAR1'];
|
|
$char_aexp += $fight_meta['KEY_AXP_CHAR1'];
|
|
$char_geld += $fight_meta['KEY_GELD_CHAR1'];
|
|
} else {
|
|
$char_exp += $fight_meta['KEY_EXP_CHAR2'];
|
|
$char_aexp += $fight_meta['KEY_AXP_CHAR2'];
|
|
$char_geld += $fight_meta['KEY_GELD_CHAR2'];
|
|
}
|
|
}
|
|
// add the experience to the char
|
|
addExpToChar($char_id, $char_exp);
|
|
// add the experience to the arena
|
|
if($char_aexp > 0) {
|
|
addExpToArena($char['besitzer'], $char_aexp);
|
|
}
|
|
addMoneyToUser($char['besitzer'], $char_geld);
|
|
|
|
// Okay and now we want to learn the attacks :)
|
|
$sql = 'SELECT attack, count(attack) as anzahl FROM event_fight_rounds e group by attack where event_id = ' . $event_id . ' AND event_char_id = ' . $char_id;
|
|
$qry = mysql_query($sql);
|
|
|
|
$attacken_usage = array();
|
|
|
|
while($row = mysql_fetch_assoc($qry)) {
|
|
$attacken_usage[] = array('id' => $row['attack'], 'anzahl' => $row['anzahl']);
|
|
}
|
|
|
|
addAttackUsageToChar($char_id, $attacken_usage);
|
|
|
|
return $fight_ids; // Return the fight ids that the char has participated in!
|
|
}
|
|
|
|
|
|
function getEvent($event_id) {
|
|
$result = mysql_fetch_assoc(mysql_query('SELECT * FROM events WHERE event_id = ' . $event_id));
|
|
if($result)
|
|
return $result;
|
|
return NULL;
|
|
}
|
|
|
|
function getEventChar($event_id, $event_char_id) {
|
|
$result = mysql_fetch_assoc(mysql_query('SELECT * FROM event_chars WHERE event_id = ' . $event_id . ' AND event_char_id = ' . $event_char_id));
|
|
if($result)
|
|
return $result;
|
|
return NULL;
|
|
|
|
}
|
|
|
|
function getEventFight($event_id, $event_fight_id) {
|
|
$result = mysql_fetch_assoc(mysql_query('SELECT * FROM event_fights WHERE event_id = ' . $event_id. ' AND event_fight_id = ' .$event_fight_id ));
|
|
if($result)
|
|
return $result;
|
|
return NULL;
|
|
}
|
|
|
|
function getEventFightMetaData($event_id, $event_fight_id) {
|
|
$qry = mysql_query('SELECT * FROM event_fight_metadata WHERE event_id = ' . $event_id. ' AND event_fight_id = ' .$event_fight_id);
|
|
while($row = mysql_fetch_assoc($qry)) {
|
|
$result[$row['key']]= $row['value'];
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
function getEventFightIds($event_id) {
|
|
$qry = mysql_query('SELECT event_fight_id FROM event_fights WHERE event_id = ' . $event_id . ' ORDER by event_fight_id ASC');
|
|
$result = array();
|
|
while($row = mysql_fetch_assoc($qry)) {
|
|
$result[]= $row['event_fight_id'];
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
// this is more tricky XD
|
|
function getEventFightIdsByChar($event_id, $event_char_id) {
|
|
$sql = 'SELECT event_fight_id FROM event_fight_rounds where event_id = ' . $event_id . ' AND event_char_id = ' . $event_char_id . ' AND `round` = 0';
|
|
$qry = mysql_query($sql);
|
|
while($row = mysql_fetch_assoc($qry)) {
|
|
$result[]= $row['event_fight_id'];
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
function getEventFightRoundData($event_id, $event_fight_id, $round) {
|
|
$sql = 'SELECT * FROM event_fight_rounds WHERE event_id = ' . $event_id . ' AND event_fight_id = ' . $event_fight_id . ' AND `round` = ' .$round;
|
|
|
|
$qry = mysql_query($sql);
|
|
if(!$qry) {
|
|
echo $sql . '<br>';
|
|
return;
|
|
}
|
|
while($row = mysql_fetch_assoc($qry)) {
|
|
$result[$row['event_char_id']] = $row;
|
|
}
|
|
return $result;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
?>
|