diff --git a/ag/char_profil.php b/ag/char_profil.php index 24e8957..2de5507 100644 --- a/ag/char_profil.php +++ b/ag/char_profil.php @@ -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"); @@ -123,7 +135,7 @@ function stelledar($char_id,$user_ida,$name) { HP - +   @@ -351,9 +363,9 @@ 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']){ $fehler[2] = 'Die URL für das Bild ist ungültig!'; @@ -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ändert!!
'; echo '
weiter...
'; } else { - displayErrorMessage(NULL, $fehler[0].'
'.$fehler[1].'
'.$fehler[2], displayHistoryBackLink()); + //displayErrorMessage(NULL, $fehler[0].'
'.$fehler[1].'
'.$fehler[2], displayHistoryBackLink()); return; } } diff --git a/ag/gm/include/npc.inc.php b/ag/gm/include/npc.inc.php index 4fd066a..e64d346 100644 --- a/ag/gm/include/npc.inc.php +++ b/ag/gm/include/npc.inc.php @@ -80,7 +80,7 @@ function learnNewAttacks($charid, $att_ids) { while($result = mysql_fetch_assoc($qry)) { $learned_atts[$result['at_id']] = $result['id']; } - + //Namen der Attacken auslesen $sql = 'SELECT id,name FROM attacken WHERE id in ('.implode(',', $att_ids).');'; $qry = db_query($sql); @@ -89,9 +89,11 @@ function learnNewAttacks($charid, $att_ids) { while($result = mysql_fetch_assoc($qry)) { $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".'NPC '.$data['name'].' wurde erfolgreich erstellt!'."\n"; if($error != null) { echo "\t".'Es gab Probleme beim erstellen des Attacksets!'."\n"; echo "\t".''.$error.''."\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'; diff --git a/ag/include/attackenset.inc.php b/ag/include/attackenset.inc.php index 51107e3..5b3dba8 100644 --- a/ag/include/attackenset.inc.php +++ b/ag/include/attackenset.inc.php @@ -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; - } +//Anzahl der Runden pro Kampf +defineIfNotDefined('KAMPF_RUNDEN', 10); - if(is_numeric($char_id)) { - $qry = mysql_query('SELECT attack_id, round FROM attackenset WHERE char_id = '.$char_id.' AND type = '.$type); +function createAttackSet($char_id, $type) { + if(!is_numeric($char_id) || !is_numeric($type)) { + return false; + } - while ($result = mysql_fetch_assoc($qry)) { - $set[$result['round']] = $result['attack_id']; + 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)) { - $set[$result['id']] = $result['type']; + 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."; - } - if($kampf_schatten_n > KAMPF_SCHATTEN) { - return "Fehler die Technik vom type: Schatten darf nur ".KAMPF_SCHATTEN." mal benutzt werden."; - } - if($kampf_ssj_n AND $kampf_kaioken_n) { - return "Fehler sie dü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!'; + //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(count($kategorie[$types[$row]['kategorie']])> 1) { + return 'Fehler sie dürfen Techniken vom Type '.$kategorie[$types[$row]['kategorie']][0].' und '.$kategorie[$types[$row]['kategorie']][1].' nicht zusammen nutzen.'; + } + } } } + return NULL; } ?> \ No newline at end of file diff --git a/ag/include/clan_fights.inc.php b/ag/include/clan_fights.inc.php index 09885aa..1598fde 100644 --- a/ag/include/clan_fights.inc.php +++ b/ag/include/clan_fights.inc.php @@ -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);