diff --git a/ag/gm/gm_seite.php b/ag/gm/gm_seite.php index cf87f6e..fe82de7 100644 --- a/ag/gm/gm_seite.php +++ b/ag/gm/gm_seite.php @@ -245,7 +245,7 @@ if(checkLoginData($_SESSION['user'],$_SESSION['password'])){ } else if($_REQUEST['choose'] == 'cheat'){ displayCheater($_REQUEST['action'], $_REQUEST['from'], $_REQUEST['until'], $_REQUEST['user1'], $_REQUEST['user2'], $_REQUEST['tradeid'], $_REQUEST['verify']); } else if($_REQUEST['choose'] == 'npc'){ - displayNPC($_REQUEST['action'], $_REQUEST['task'], $_REQUEST['charid'], $_REQUEST['table'], $_REQUEST['page'], $_REQUEST['data']); + displayNPC($_REQUEST['action'], $_REQUEST['task'], $_REQUEST['charid'], $_REQUEST['table'], $_REQUEST['page'], $_REQUEST['data'], $_REQUEST['att_ids']); } else if($_REQUEST['choose'] == 'shop'){ displayShop($_REQUEST['action'], $_REQUEST['s_id'],$_REQUEST['info'], $_REQUEST['s_name'] , $_REQUEST['s2_name'], $_REQUEST['s3_name'], $_REQUEST['s_typ'], $_REQUEST['preis'], $_REQUEST['frei'], $_REQUEST['anzahl']); } else if($_REQUEST['choose'] == 'usergroups'){ diff --git a/ag/gm/include/npc.inc.php b/ag/gm/include/npc.inc.php index 348cd52..dd47660 100644 --- a/ag/gm/include/npc.inc.php +++ b/ag/gm/include/npc.inc.php @@ -9,144 +9,272 @@ ?> '."\n"; - echo "\t".''."\n"; - echo "\t".''."\n"; - echo "\t".''."\n"; - if($action == 'edit'){ - echo "\t".''."\n"; - if($task == 'dochange') { - $d_array = array('name', 'type', 'hp', 'mp', 'starke', 'verteidigung', 'speed', - 'ausdauer', 'glueck', 'level', 'bild'); +include_once($_SERVER['DOCUMENT_ROOT'].'ag/include/attackenset.inc.php'); - $sql = 'UPDATE chars c INNER JOIN kampf_list kl ON c.id=kl.charakter SET c.'; - $sql .= $d_array[0].' = \''.encodeNoHTMLWithBB($data[$d_array[0]]).'\''; +function getNPCAttacks() { + $qry = mysql_query('SELECT name,id FROM attacken a WHERE info like "%NPC%";'); + $set = array(); - for($i=1;$i'; - $u = mysql_query($sql); - if(mysql_affected_rows() == 0 || $u2 === FALSE) { - echo "\t\t\t".''; - } else{ - logaction('Ein NPC wurde geändert (id = '.$charid.','.encodeNoHTMLWithBB(join($data,',')).')'); - echo "\t\t\t".''; - } - displayNPC($action, null, $charid, $table, $page, $data); +function learnNewAttacks($charid, $att_ids) { + //auslesen der gelernten Attacken + $sql = 'SELECT at_id, id FROM lernen WHERE besitzer = '.$charid.' AND at_id in ('.implode(',', $att_ids).');'; + $qry = mysql_query($sql); + + $learned_atts = array(); + 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 = mysql_query($sql); + + $att_names = array(); + while($result = mysql_fetch_assoc($qry)) { + $att_names[$result['id']] = $result['name']; + } + + foreach ($att_ids as $att) { + if($learned_atts[$att] == NULL) { + /* + * 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) + */ + mysql_query('INSERT INTO lernen(name,at_id,besitzer,aktiv) VALUES(\''.$att_names[$att].'\','.$att.','.$charid.',1);'); + } + } +} + +function getAttackSet($charid, $att_ids) { + $sql = 'SELECT at_id, id FROM lernen WHERE besitzer = '.$charid.' AND at_id in ('.implode(',', $att_ids).');'; + $qry = mysql_query($sql); + + $learned_atts = array(); + while($result = mysql_fetch_assoc($qry)) { + $learned_atts[$result['at_id']] = $result['id']; + } + + $attset = array(); + $i = 1; + foreach ($att_ids as $att) { + if($learned_atts[$att] != NULL) { + $attset[$i] = $learned_atts[$att]; } else { - echo "\t".''."\n"; - $d_select_array = array(array('Dragonball', 'Onepiece'), array(300, 1200, 3600)); - $d_array = array('charakter', 'name', 'type', 'hp', 'mp', 'starke', 'verteidigung', 'speed', + $attset[$i] = $att; + } + $i++; + } + return $attset; +} + +function buildAttackSet($charid, $att_ids) { + learnNewAttacks($charid, $att_ids); + return getAttackSet($charid, $att_ids); +} + +function displayEditNPC($charid) { + echo "\t".''."\n"; + echo "\t".''."\n"; + $d_select_array = array(array('Dragonball', 'Onepiece'), array(300, 1200, 3600)); + $d_array = array('charakter', 'name', 'type', 'hp', 'mp', 'starke', 'verteidigung', 'speed', 'ausdauer', 'glueck', 'zeit_rec', 'level', 'lvlmin', 'lvlmax', 'bild'); - $desc_select_array = array(array('Dragonball', 'Onepiece'), array('5min', '20min', '60min')); - $desc_array = array('ID', 'Name', 'Type', 'HP', 'MP', 'Stärke', 'Verteidigung', 'Geschwindigkeit', + $desc_select_array = array(array('Dragonball', 'Onepiece'), array('5min', '20min', '60min')); + $desc_array = array('ID', 'Name', 'Type', 'HP', 'MP', 'Stärke', 'Verteidigung', 'Geschwindigkeit', 'Ausdauer', 'Glück', 'Kampfdauer in Sekunden', 'Level', 'Min-Level', 'Max-Level', 'Bild'); + $attset = getCharAttackSet($charid, NORMALKAMPF); + $attset_names = getAttackNamesFromAttackSet($attset); + $attacks = getNPCAttacks(); + + $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; + $qry = mysql_query($sql); + $row = mysql_fetch_assoc($qry); + $colspan = 2; - $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; - $qry = mysql_query($sql); - $row = mysql_fetch_assoc($qry); - $colspan = 2; - - echo "\t".''."\n"; - echo "\t\t".''."\n"; - $j = 0; - for($i = 1;$i'."\n"; - $j++; - } else { - echo "\t\t".''."\n"; + echo "\t".''."\n"; + echo "\t\t".''."\n"; + $j = 0; + //allgemeine informationen + for($i = 1;$i'."\n"; - echo "\t".''."\n"; + echo ''."\n"; + $j++; + } else { + echo "\t\t".''."\n"; } - } else if($action == 'create'){ - $colspan = 1; - echo "\t".''."\n";; + } - echo "\t".''."\n"; - } else if($action == 'delete'){ - $colspan = 1; - - $sql = 'SELECT * FROM chars WHERE id = '.$charid; - $qry = mysql_query($sql); - $row = mysql_fetch_assoc($qry); - echo "\t".''."\n";; - if(is_null($task)){ - echo "\t".''."\n";; - echo "\t".''."\n"; - } else { - $sql = 'DELETE c,ni,kl,l FROM chars c inner join npc_item ni on ni.charakter = c.id inner join kampf_list kl on ni.charakter = kl.charakter inner join lernen l on l.besitzer = c.id where c.id = '.$charid; - // echo $sql.'
'; - $qry = mysql_query($sql); - if($qry === FALSE || mysql_affected_rows() <= 0){ - echo "\t".''."\n";; - } else { - echo "\t".''."\n";; - } - // SELECT * FROM chars c inner join npc_item ni on ni.charakter = c.id inner join kampf_list kl on ni.charakter = kl.charakter + //attacken informationen + echo "\t".''."\n"; + for($i = 1;$i<11;$i++){ + echo "\t\t".''."\n"; + echo ''."\n"; + } + echo "\t".''."\n"; + echo "\t".''."\n"; +} + +function editNPC($charid, $data, $att_ids) { + $attset = buildAttackSet($charid, $att_ids); + $error = validateAttackSetTypes($attset); + + $d_array = array('name', 'type', 'hp', 'mp', 'starke', 'verteidigung', 'speed', + 'ausdauer', 'glueck', 'level', 'bild'); + + $sql = 'UPDATE chars c INNER JOIN kampf_list kl ON c.id=kl.charakter SET c.'; + $sql .= $d_array[0].' = \''.encodeNoHTMLWithBB($data[$d_array[0]]).'\''; + + for($i=1;$i'; } else{ - $d_array = array('id', 'name', 'level'); - $desc_array = array('id', 'Name', 'Level'); - - $sql = 'SELECT '.join($d_array,',').' from chars where rasse = \'NPC\' ORDER BY level'; - $qry = mysql_query($sql.' LIMIT '.($page*20).', 20'); - $anzahlSeiten = ceil(mysql_num_rows(mysql_query($sql))/20); - $colspan = count($d_array); - echo "\t".''."\n";; + echo "\t\t\t".''; + $log++; + } + + if($error == NULL) { + updateCharAttackSet($charid, $attset, NORMALKAMPF); + //alter müll + $qry = 'UPDATE chars SET attacken=\''.implode(',', $attset).'\', '. + 'attacken2=\''.implode(',', $attset).'\' WHERE id='.$charid.' LIMIT 1'; + mysql_query($qry); + $log++; + echo "\t\t\t".''; + } else { + echo "\t\t\t".''; + } + + if($log >= 1) { + logaction('Ein NPC wurde geändert (id = '.$charid.','.encodeNoHTMLWithBB(join($data,',')).')'); + } +} + +function displayCreateNPC() { + $colspan = 1; + echo "\t".''."\n";; + echo "\t".''."\n"; +} + +function displayDeleteNPC($charid) { + $colspan = 1; + + $sql = 'SELECT * FROM chars WHERE id = '.$charid; + $qry = mysql_query($sql); + $row = mysql_fetch_assoc($qry); + echo "\t".''."\n"; + + echo "\t".''."\n"; + echo "\t".''."\n"; +} + +function deleteNPC($charid) { + $colspan = 1; + $sql = 'DELETE FROM chars WHERE id = '.$charid.';'; + $qry = mysql_query($sql); + if($qry === FALSE || mysql_affected_rows() <= 0){ + echo "\t".''."\n";; + } else { + echo "\t".''."\n";; + } + echo "\t".''."\n"; +} + +function displayNPCOverview() { + $d_array = array('id', 'name', 'level'); + $desc_array = array('id', 'Name', 'Level'); + + $sql = 'SELECT '.join($d_array,',').' from chars where rasse = \'NPC\' ORDER BY level'; + $qry = mysql_query($sql.' LIMIT '.($page*20).', 20'); + $anzahlSeiten = ceil(mysql_num_rows(mysql_query($sql))/20); + $colspan = count($d_array); + echo "\t".''."\n";; + echo "\t".''."\n"; + for($i=1;$i'.$desc_array[$i].''."\n"; + } + echo "\t\t".''."\n"; + echo "\t".''."\n"; + + echo "\t".''."\n"; + + while($row = mysql_fetch_assoc($qry)){ echo "\t".''."\n"; for($i=1;$i'.$desc_array[$i].''."\n"; + echo "\t\t".''."\n"; } - echo "\t\t".''."\n"; - echo "\t".''."\n"; - echo "\t".''."\n"; + echo "\t\t".''."\n"; - for($i=1;$i'.$row[$d_array[$i]].''."\n"; - } + // Echo the delete and the edit button :) + echo "\t\t\t".'Edit, '."\n"; + echo "\t\t\t".'Delete'."\n"; - echo "\t\t".''."\n"; + echo "\t".''."\n"; - // Echo the delete and the edit button :) - echo "\t\t\t".'Edit, '."\n"; - echo "\t\t\t".'Delete'."\n"; + } - echo "\t\t".''."\n"; - echo "\t".''."\n"; + echo "\t".''."\n"; + echo "\t".''."\n"; +} +function displayNPC($action, $task, $charid, $table, $page, $data, $att_ids){ + $colspan = 3; + echo ''."\n"; + echo "\t".''."\n"; + echo "\t".''."\n"; + echo "\t".'
Fehler! Änderungen konnten nicht übernommen werden!
Änderungen wurden übernommen!

NPC bearbeiten

'.$desc_array[0].''.$row[$d_array[0]].'
'.$desc_array[$i].'
'.$desc_array[$i].'

NPC bearbeiten

'.$desc_array[0].''.$row[$d_array[0]].'
'.$desc_array[$i].'
NPC Übersicht
'.$desc_array[$i].'

NPC erstellen

NPC Übersicht

NPC löschen

Soll der NPC '.$row['name'].' wirklich gelöscht werden
ja, nein, vielleicht
Der NPC '.$row['name'].' konnte nicht gelöscht werden!
Der NPC '.$row['name'].' wurde gelöscht!
Attacken bearbeiten
Runde '.$i.'
NPC Übersicht
NPC Übersicht
Stats wurden nicht geändert oder es gab Fehler!

Übersicht

Änderungen wurden übernommen!
Attacken übernommen!
'.$error.'

NPC erstellen

NPC Übersicht

NPC löschen

Soll der NPC '.$row['name'].' wirklich gelöscht werden
ja, nein
Der NPC '.$row['name'].' konnte nicht gelöscht werden!
Der NPC '.$row['name'].' wurde gelöscht!
NPC Übersicht

Übersicht

Bearbeiten

'.$row[$d_array[$i]].'Bearbeiten

'."\n"; - while($row = mysql_fetch_assoc($qry)){ - echo "\t".'
'."\n"; + echo "\t\t".'
Create a new NPC

'."\n"; + if($action == 'edit'){ + echo "\t".''."\n"; + if($task == 'dochange') { + editNPC($charid, $data, $att_ids); + displayEditNPC($charid); + } else { + displayEditNPC($charid); } - - echo "\t".''."\n"; - echo "\t".''."\n"; + } else if($action == 'create'){ + displayCreateNPC(); + } else if($action == 'delete'){ + if($task == 'dodelete') { + deleteNPC($charid); + } else { + displayDeleteNPC($charid); + } + } else{ + displayNPCOverview(); } - //TODO: ändern, dass man nicht 2x Zum Hauptmenü hat xD echo "\t".''."\n"; echo "\t".'
Create a new NPC

Zum Hauptmenu
'."\n"; echo ''."\n"; - } ?> \ No newline at end of file diff --git a/ag/include/attackenset.inc.php b/ag/include/attackenset.inc.php index 4f6f4f9..4355f89 100644 --- a/ag/include/attackenset.inc.php +++ b/ag/include/attackenset.inc.php @@ -85,8 +85,11 @@ function getAttackNamesFromAttackSet($attset) { } function getAttackTypesFromAttackSet($attset) { + if($attset == NULL || count($attset) == 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).');'); - while ($result = mysql_fetch_assoc($qry)) { $set[$result['id']] = $result['type']; } @@ -95,7 +98,15 @@ function getAttackTypesFromAttackSet($attset) { } function validateAttackSetTypes($attset) { - $types = getAttackTypesFromAttackSet($attset); + if($attset == NULL) { + return 'Es wurden garkeine Attacken ausgewählt!'; + } + + $types = getAttackTypesFromAttackSet($attset); + if(count($types)==0) { + return 'Es wurden garkeine Attacken ausgewählt!'; + } + foreach ($attset as $att_id) { if($types[$att_id] == "tausch") { $kampf_tausch_n++; }elseif($types[$att_id] == "SSJ") { $kampf_ssj_n++;