attackenset.inc.php komplett neu geschrieben, Methodenname in anderen php-files angepasst
main
radiskull 10 years ago
parent 3417d36296
commit 1b9c9e3228

@ -15,7 +15,7 @@ include_once(ROOT_PATH.'//include/char_profil.inc.php'); //Allgemeine Funktionen
include_once(ROOT_PATH.'//include/defines.inc.php');
include_once(ROOT_PATH.'//include/attackenset.inc.php');
defineIfNotDefined('MAX_ROUNDS', 10);
defineIfNotDefined('KAMPF_RUNDEN', 10);
/* Diese Datei ist etwas komisch, darum die Abweichende SQL-Injection methode */
@ -31,12 +31,24 @@ function stelledar($char_id,$user_ida,$name) {
$learned_atts = getCharAttacks($char_id);
//Attackensets laden
$clanfight_attset = getCharAttackSet($char_id, CLANKAMPF);
$normfight_attset = getCharAttackSet($char_id, NORMALKAMPF);
$clanfight_attset = getAttackSet($char_id, CLANKAMPF);
if(count($clanfight_attset) == 0) {
createAttackSet($char_id, CLANKAMPF);
for($i = 1; $i < KAMPF_RUNDEN+1;$i++) {
$clanfight_attset[$i] = -1;
}
}
$normfight_attset = getAttackSet($char_id, NORMALKAMPF);
if(count($normfight_attset) == 0) {
createAttackSet($char_id, NORMALKAMPF);
for($i = 1; $i < KAMPF_RUNDEN+1;$i++) {
$normfight_attset[$i] = -1;
}
}
//TODO:prüfen ob man nicht auch den name aus $learned_atts holen kann
$clanfight_attset_name = getAttackNamesFromAttackSet($clanfight_attset);
$normfight_attset_name = getAttackNamesFromAttackSet($normfight_attset);
$clanfight_attset_name = getAttackNames($clanfight_attset);
$normfight_attset_name = getAttackNames($normfight_attset);
//Rüstung laden
$e_schuhe = mysql_query("SELECT i.name, w.id, i.level FROM ware w LEFT JOIN item i ON(i.id=w.item_id) WHERE (i.type='$char_1[type]' OR i.type='ALL') AND w.user='$user_ida[id]' AND w.ru_mal='1' AND i.s_type='Schuhe' AND i.level <='$char_1[level]' group by i.name order by i.level desc");
@ -351,8 +363,8 @@ function eintragen($char_id,$name,$user_ida) {
}
//überprüfen, wie oft welche Attacke benutzt wird, sowie andere Abhängigkeiten
$fehler[0] = validateAttackSetTypes($attset_cf);
$fehler[1] = validateAttackSetTypes($attset_nf);
$fehler[0] = validateAttackSet($attset_cf);
$fehler[1] = validateAttackSet($attset_nf);
//andere Sachen überprüfen
if($bild11 != $_POST['bild11']){
@ -369,13 +381,13 @@ function eintragen($char_id,$name,$user_ida) {
mysql_query($qry);
//neues updaten von Attacken
updateCharAttackSet($char_id, $attset_cf, CLANKAMPF);
updateCharAttackSet($char_id, $attset_nf, NORMALKAMPF);
updateAttackSet($char_id, CLANKAMPF, $attset_cf);
updateAttackSet($char_id, NORMALKAMPF, $attset_nf);
echo 'Profil erfolgreich ge&auml;ndert!!<br>';
echo '<a href=index.php?as=char_profil&char_id='.$char_id.'><div align=center>weiter...</div></a>';
} else {
displayErrorMessage(NULL, $fehler[0].'<br>'.$fehler[1].'<br>'.$fehler[2], displayHistoryBackLink());
//displayErrorMessage(NULL, $fehler[0].'<br>'.$fehler[1].'<br>'.$fehler[2], displayHistoryBackLink());
return;
}
}

@ -90,8 +90,10 @@ function learnNewAttacks($charid, $att_ids) {
$att_names[$result['id']] = $result['name'];
}
$tmp_ids = array();
foreach ($att_ids as $att) {
if($learned_atts[$att] == NULL) {
if($learned_atts[$att] == NULL && $tmp_ids[$att] == NULL) {
$tmp_ids[$att] = 1;
/*
* Keine Gute Lösung, es wird zwar von der db verhindert, dass doppelte Einträge gespeichert werden
* aber ungebrauchte Attacken werden so auch nicht gelöscht (höchstens der NPC wird gelöscht)
@ -101,7 +103,7 @@ function learnNewAttacks($charid, $att_ids) {
}
}
function getAttackSet($charid, $att_ids) {
function getNPCAttackSet($charid, $att_ids) {
$sql = 'SELECT at_id, id FROM lernen WHERE besitzer = '.$charid.' AND at_id in ('.implode(',', $att_ids).');';
$qry = db_query($sql);
@ -125,7 +127,7 @@ function getAttackSet($charid, $att_ids) {
function buildAttackSet($charid, $att_ids) {
learnNewAttacks($charid, $att_ids);
return getAttackSet($charid, $att_ids);
return getNPCAttackSet($charid, $att_ids);
}
function displayNPCInfo($action, $task, $charid) {
@ -145,8 +147,8 @@ function displayNPCInfo($action, $task, $charid) {
//initialisieren falls editiert wird (dort existieren schon Inhalte)
if($task == TASK_EDIT) {
$attset = getCharAttackSet($charid, NORMALKAMPF);
$attset_names = getAttackNamesFromAttackSet($attset);
$attset = getAttackSet($charid, NORMALKAMPF);
$attset_names = getAttackNames($attset);
$sql = 'SELECT * FROM chars c inner join npc_item ni on ni.charakter = c.id inner join kampf_list kl on ni.charakter = kl.charakter WHERE c.id ='.$charid;
//$sql = 'SELECT * FROM chars c inner join kampf_list kl on c.id = kl.charakter WHERE c.id ='.$charid;
@ -220,7 +222,7 @@ function displayNPCInfo($action, $task, $charid) {
function editNPC($charid, $data, $att_ids) {
$attset = buildAttackSet($charid, $att_ids);
$error = validateAttackSetTypes($attset);
$error = validateAttackSet($attset);
$d_array = array('name', 'type', 'hp', 'mp', 'starke', 'verteidigung', 'speed',
'ausdauer', 'glueck', 'level', 'bild');
@ -262,7 +264,7 @@ function editNPC($charid, $data, $att_ids) {
}
if($error == NULL) {
updateCharAttackSet($charid, $attset, NORMALKAMPF);
updateAttackSet($charid, NORMALKAMPF, $attset);
//alter müll
$qry = 'UPDATE chars SET attacken=\''.implode(',', $attset).'\', '.
'attacken2=\''.implode(',', $attset).'\' WHERE id='.$charid.' LIMIT 1';
@ -315,15 +317,16 @@ function createNPC($data, $att_ids) {
db_query($sql);
//Attacksets soweit einbinden
createAttackSet($char_id, NORMALKAMPF);
$attset = buildAttackSet($char_id, $att_ids);
$error = validateAttackSetTypes($attset);
$error = validateAttackSet($attset);
echo "\t".'<tr><td colspan="2" style="text-align:center">NPC '.$data['name'].' wurde erfolgreich erstellt!</td></tr>'."\n";
if($error != null) {
echo "\t".'<tr><td colspan="2" style="text-align:center">Es gab Probleme beim erstellen des Attacksets!</td></tr>'."\n";
echo "\t".'<tr><td colspan="2" style="text-align:center">'.$error.'</td></tr>'."\n";
} else {
updateCharAttackSet($char_id, $attset, NORMALKAMPF);
updateAttackSet($char_id, NORMALKAMPF, $attset);
//alter müll
$qry = 'UPDATE chars SET attacken=\''.implode(',', $attset).'\', '.
'attacken2=\''.implode(',', $attset).'\' WHERE id='.$char_id.' LIMIT 1';

@ -12,69 +12,67 @@ include_once (ROOT_PATH.'/include/defines.inc.php');
defineIfNotDefined('NORMALKAMPF', 1);
defineIfNotDefined('CLANKAMPF', 2);
//Anzahl der Typen die in einem Kampf erlaubt sind
//TODO: sollte überprüft werden, welche typen es eigentlich ingame noch gibt
defineIfNotDefined('KAMPF_SSJ', 1); // SSJ ist eine Art technik die werte mal setzt
defineIfNotDefined('KAMPF_TAUSCH', 1); // Tausch ist eine Art technik die alle werte vertauscht gegner und sich selbst
defineIfNotDefined('KAMPF_HP', 2); // HP ist eine technik die es erlaubt sich zu Heilen
defineIfNotDefined('KAMPF_HPMP', 1); // HPMP ist eine art die HP+MP erhoeht
defineIfNotDefined('KAMPF_SPIRIT', 1); // spirit ist was mit spirit stones
defineIfNotDefined('KAMPF_LOSE', 1); // Lose ist wie Kaioken nur das man werte verliert
defineIfNotDefined('KAMPF_KAIOKEN', 1); // Kaioken ist eine technik die werte gibt
defineIfNotDefined('KAMPF_SUMMON', 1); // spirit2 ist was mit spirit stones
defineIfNotDefined('KAMPF_GIFT', 1); // Lose ist wie Kaioken nur das man werte verliert
defineIfNotDefined('KAMPF_SCHATTEN', 2); // Kaioken ist eine technik die werte gibt
defineIfNotDefined('KAMPF_COPY', 1); // Man Trasfert werte.
defineIfNotDefined('KAMPF_KAIOKEN2', 1); // Man Bekommt sau viel staerke fuer 1runde
defineIfNotDefined('KAMPF_LOSE2', 1); // MP Wegmachen
defineIfNotDefined('KAMPF_MAJIN', 1); // Jemnand als majin machen.
defineIfNotDefined('KAMPF_KONTERHEAL', 2); // Eine Heal-Attacke kontern.
defineIfNotDefined('KAMPF_TAUSCH2', 3); // Attacke Kopieren.
defineIfNotDefined('KAMPF_FRUCHT', 1);
function getCharAttackSet($char_id, $type) {
$qry = null;
// default values (in case the data is not or partially set)
for ($i = 1; $i < 11; $i++) {
$set[$i] = -1;
}
if(is_numeric($char_id)) {
$qry = mysql_query('SELECT attack_id, round FROM attackenset WHERE char_id = '.$char_id.' AND type = '.$type);
//Anzahl der Runden pro Kampf
defineIfNotDefined('KAMPF_RUNDEN', 10);
while ($result = mysql_fetch_assoc($qry)) {
$set[$result['round']] = $result['attack_id'];
function createAttackSet($char_id, $type) {
if(!is_numeric($char_id) || !is_numeric($type)) {
return false;
}
for($i = 1; $i < KAMPF_RUNDEN + 1; $i++) {
$values .= '('.$char_id.',-1,'.$type.','.$i.')';
if($i < 10) {
$values .= ',';
}
return $set;
}
$qry = 'INSERT INTO attackenset VALUES '.$values.';';
return mysql_query($qry);
}
function updateCharAttack($char_id, $att_id,$round, $type) {
$qry = 'UPDATE attackenset SET attack_id = '.$att_id.' WHERE char_id = '.$char_id.' AND type = '.$type.' AND round = '.$round.';';
mysql_query($qry);
function deleteAttackSet($char_id, $type) {
if(!is_numeric($char_id) || !is_numeric($type)) {
return false;
}
$qry = 'DELETE FROM attackenset WHERE char_id = '.$char_id.' AND type = '.$type.';';
return mysql_query($qry);
}
function createCharAttack($char_id, $att_id,$round, $type) {
$qry = 'INSERT INTO attackenset VALUES('.$char_id.','.$att_id.','.$type.','.$round.');';
mysql_query($qry);
function getAttackSet($char_id, $type) {
if(!is_numeric($char_id) || !is_numeric($type)) {
return false;
}
$qry = mysql_query('SELECT attack_id, round FROM attackenset WHERE char_id = '.$char_id.' AND type = '.$type);
while ($result = mysql_fetch_assoc($qry)) {
$set[$result['round']] = $result['attack_id'];
}
return $set;
}
function updateCharAttackSet($char_id, $set, $type) {
$old_set = getCharAttackSet($char_id, $type);
function updateAttackSet($char_id, $type, $newSet) {
if(!is_numeric($char_id) || !is_numeric($type) || !is_array($newSet) || count($newSet) == 0) {
return false;
}
$oldset = getAttackSet($char_id, $type);
for ($i = 1; $i < count($set)+1; $i++) {
if($old_set[$i] < 0 && $set[$i] > 0) {
//insert new value
createCharAttack($char_id, $set[$i], $i, $type);
} elseif($old_set > 0 && $set[$i] != $old_set[$i]) {
//update old value
updateCharAttack($char_id,$set[$i], $i, $type);
for ($i = 1; $i < KAMPF_RUNDEN + 1; $i++) {
if($oldset[$i] != $newSet[$i]) {
$qry = 'UPDATE attackenset SET attack_id = '.$newSet[$i].' WHERE char_id = '.$char_id.' AND type = '.$type.' AND round = '.$i.';';
mysql_query($qry);
}
}
return true;
}
function getAttackNamesFromAttackSet($attset) {
$qry = mysql_query('SELECT l.id,a.name FROM attacken a INNER JOIN lernen l ON a.id=l.at_id WHERE l.id in ('.implode(',', $attset).');');
function getAttackNames($attackSet) {
if(!is_array($attackSet) || count($attackSet) == 0) {
return array();
}
$qry = mysql_query('SELECT l.id,a.name FROM attacken a INNER JOIN lernen l ON a.id=l.at_id WHERE l.id in ('.implode(',', $attackSet).');');
while ($result = mysql_fetch_assoc($qry)) {
$set[$result['id']] = $result['name'];
@ -83,121 +81,64 @@ function getAttackNamesFromAttackSet($attset) {
return $set;
}
function getAttackTypesFromAttackSet($attset) {
if($attset == NULL || count($attset) == 0) {
function getAttackTypes($attackSet) {
if(!is_array($attackSet) || count($attackSet) == 0) {
return array();
}
$qry = mysql_query('SELECT l.id,a.type FROM attacken a INNER JOIN lernen l ON a.id=l.at_id WHERE l.id in ('.implode(',', $attset).');');
$qry = mysql_query('SELECT l.id,a.type,a.options FROM attacken a INNER JOIN lernen l ON a.id=l.at_id WHERE l.id in ('.implode(',', $attackSet).');');
while ($result = mysql_fetch_assoc($qry)) {
if($result['type'] == 'generic') {
$options = json_decode($result['options'], true);
$set[$result['id']] = $options['type'];
} else {
$set[$result['id']] = $result['type'];
}
}
return $set;
}
function validateAttackSetTypes($attset) {
//the attset is empty or wasn't even initialised
if($attset == NULL || count($attset) == 0) {
return NULL;
function validateAttackSet($attackSet) {
if(!is_array($attackSet) || count($attackSet) == 0) {
return 'Invalides Attackenset!';
}
//lets check for id's other then -1 (if every id is -1, it means the array is empty!)
$hit = false;
for($i = 1; $i < count($attset); $i++) {
if($attset[$i] != -1) {
$hit = true;
}
$types = getAttackTypes($attackSet);
//attackentypen im set zählen
$data = array();
for($i = 1; $i < 11; $i++) {
if(is_string($types[$attackSet[$i]])) {
$data[$types[$attackSet[$i]]] += 1;
}
if(!$hit) {
return NULL;
}
$types = getAttackTypesFromAttackSet($attset);
if(count($types)==0) {
return 'Es wurden garkeine Attacken ausgewählt!';
//Alle Attackentypen auslesen
$qry = mysql_query('SELECT name, anzahl, kategorie FROM attackentyp;');
$types = array();
while ($row = mysql_fetch_assoc($qry)) {
$types[$row['name']] = array('anzahl' => $row['anzahl'], 'kategorie' => $row['kategorie']);
}
foreach ($attset as $att_id) {
if($types[$att_id] == "tausch") { $kampf_tausch_n++;
}elseif($types[$att_id] == "SSJ") { $kampf_ssj_n++;
}elseif($types[$att_id] == "hpmp") { $kampf_hpmp_n++;
}elseif($types[$att_id] == "hp") { $kampf_hp_n++;
}elseif($types[$att_id] == "lose") { $kampf_lose_n++;
}elseif($types[$att_id] == "kaioken") { $kampf_kaioken_n++;
}elseif($types[$att_id] == "summon") { $kampf_summon_n++;
}elseif($types[$att_id] == "gift") { $kampf_gift_n++;
}elseif($types[$att_id] == "schatten") { $kampf_schatten_n++;
}elseif($types[$att_id] == "copy") { $kampf_copy_n++;
}elseif($types[$att_id] == "kaioken2") { $kampf_kaioken2_n++;
}elseif($types[$att_id] == "lose2") { $kampf_lose2_n++;
}elseif($types[$att_id] == "majin") { $kampf_majin_n++;
}elseif($types[$att_id] == "tausch2") { $kampf_tausch2_n++;
}elseif($types[$att_id] == "frucht") { $kampf_frucht_n++;
}elseif($types[$att_id] == "konterhp") { $kampf_konterheal_n++;
}
if($kampf_copy_n > KAMPF_COPY) {
return "Fehler die Technik vom type: Copy darf nur ".KAMPF_COPY." mal benutzt werden.";
}
if($kampf_kaioken2_n > KAMPF_KAIOKEN2) {
return "Fehler die Technik vom type: Kaiaoken2 darf nur ".KAMPF_KAIOKEN2." mal benutzt werden.";
}
if($kampf_lose2_n > KAMPF_LOSE2) {
return "Fehler die Technik vom type: lose2 darf nur ".KAMPF_LOSE2." mal benutzt werden.";
}
if($kampf_majin_n > KAMPF_MAJIN) {
return "Fehler die Technik vom type: Majin darf nur ".KAMPF_MAJIN." mal benutzt werden.";
}
if($kampf_tausch2_n > KAMPF_TAUSCH2) {
return "Fehler die Technik vom type: Tausch darf nur ".KAMPF_TAUSCH2." mal benutzt werden.";
}
if($kampf_summon_n > KAMPF_SUMMON) {
return "Fehler die Technik vom type: Summon darf nur ".KAMPF_SUMMON." mal benutzt werden.";
}
if($kampf_gift_n > KAMPF_GIFT) {
return "Fehler die Technik vom type: Gift darf nur ".KAMPF_GIFT." mal benutzt werden.";
//hier passieren mehrere sachen, erst wird geschaut ob die anzahl die max. anzahl übersteigt
//danach wird die kategorie ausgewertet indem geschaut wird ob in dem kategorie array mehr als 1 eintrag sind
$kategorie = array();
foreach ($data as $row => $key) {
if($types[$row]['anzahl'] < $key) {
return 'Fehler die Technik vom type '.$row.' darf nur '.$types[$row]['anzahl'].' mal benutzt werden.';
} else {
if(is_string($types[$row]['kategorie'])) {
if($kategorie[$types[$row]['kategorie']] == null) {
$kategorie[$types[$row]['kategorie']] = array($row);
} else {
$kategorie[$types[$row]['kategorie']][] = $row;
}
if($kampf_schatten_n > KAMPF_SCHATTEN) {
return "Fehler die Technik vom type: Schatten darf nur ".KAMPF_SCHATTEN." mal benutzt werden.";
if(count($kategorie[$types[$row]['kategorie']])> 1) {
return 'Fehler sie d&uuml;rfen Techniken vom Type '.$kategorie[$types[$row]['kategorie']][0].' und '.$kategorie[$types[$row]['kategorie']][1].' nicht zusammen nutzen.';
}
if($kampf_ssj_n AND $kampf_kaioken_n) {
return "Fehler sie d&uuml;rfen Techniken vom Type SSJ und Kaioken nicht zusammen nutzen.";
}
if($kampf_tausch_n > KAMPF_TAUSCH) {
return "Fehler die Technik vom type: Kampf darf nur ".KAMPF_TAUSCH." mal benutzt werden.";
}
if($kampf_ssj_n > KAMPF_SSJ) {
return "Fehler die Technik vom type: SSJ darf nur ".KAMPF_SSJ." mal benutzt werden.";
}
if($kampf_hp_n > KAMPF_HP) {
return "Fehler die Technik vom type: HP darf nur ".KAMPF_HP." mal benutzt werden.";
}
if($kampf_hpmp_n > KAMPF_HPMP) {
return "Fehler die Technik vom type: HPMP darf nur ".KAMPF_HPMP." mal benutzt werden.";
}
if($kampf_sprit_n > KAMPF_SPIRIT) {
return "Fehler die Technik vom type:Sprit darf nur ".KAMPF_SPIRIT." mal benutzt werden.";
}
if($kampf_sprit2_n > $kampf_sprit2) {
return "Fehler die Technik vom type: Sprit2 darf nur ".$kampf_sprit2." mal benutzt werden.";
}
if($kampf_lose_n > KAMPF_LOSE) {
return "Fehler die Technik vom type: Lose darf nur ".KAMPF_LOSE." mal benutzt werden.";
}
if($kampf_kaioken_n > KAMPF_KAIOKEN) {
return "Fehler die Technik vom type: Kaiaoken darf nur ".KAMPF_KAIOKEN." mal benutzt werden.";
}
if($kampf_frucht_n > KAMPF_FRUCHT) {
return 'Fehler die Technik vom type: frucht darf nur '.KAMPF_FRUCHT.' mal benutzt werden!';
}
if($kampf_konterheal_n > KAMPF_KONTERHEAL) {
return 'Fehler die Technik vom type: Konterheal darf nur '.KAMPF_KONTERHEAL.' mal benutzt werden!';
}
if($kampf_hp_n >= 1 AND $kampf_hpmp_n >= 1) {
return 'Fehler die Technik vom type: HP darf nicht zusammen mit der Technik vom type: HPMP benutzt werden!';
}
}
return NULL;
}
?>

@ -942,8 +942,8 @@ function calculateSurvivalClanFight($clan_challenge_id, $event_id, array $clan_i
* @return the winners array
*/
function battle($event_id, array $char1, array $char2, $attack_set, $startTimestamp, $endTimestamp) {
$char1['attacken'] = implode(',', getCharAttackSet($char1['id'], $attack_set));
$char2['attacken'] = implode(',', getCharAttackSet($char2['id'], $attack_set));
$char1['attacken'] = implode(',', getAttackSet($char1['id'], $attack_set));
$char2['attacken'] = implode(',', getAttackSet($char2['id'], $attack_set));
$combinedArray = calculateFight($char1, $char2);

Loading…
Cancel
Save