From: <rav...@us...> - 2016-12-29 01:10:59
|
Revision: 9985 http://sourceforge.net/p/planeshift/code/9985 Author: ravna-ps Date: 2016-12-29 01:10:57 +0000 (Thu, 29 Dec 2016) Log Message: ----------- Changed how the prospectValidator finds the path to WC (now stored in /secure/db_config.php). It will find that folder without requiring any configuration if the prospectValidator is in a folder on the same level as /secure/ Added Paths: ----------- www/webconsole-new/prospectQuestValidator.php Removed Paths: ------------- www/webconsole-new/quests/prospectQuestValidator.php Copied: www/webconsole-new/prospectQuestValidator.php (from rev 9984, www/webconsole-new/quests/prospectQuestValidator.php) =================================================================== --- www/webconsole-new/prospectQuestValidator.php (rev 0) +++ www/webconsole-new/prospectQuestValidator.php 2016-12-29 01:10:57 UTC (rev 9985) @@ -0,0 +1,62 @@ +<?php +/* + * This script is designed to operate outside the regular context of the WC, the path mentioned below can be used to point it to its files. + */ + +include('./../secure/db_config.php'); +// $pathToWC is defined in db_config.php +include($pathToWC.'commonfunctions.php'); + +include($pathToWC.'quests/validatequest.php'); + +SetUpDB($db_hostname, $db_username, $db_password, $db_name); +date_default_timezone_set('UTC'); +session_save_path($pathToWC.'sessions'); +session_start(); +if (!isset($_SESSION['totalq'])) +{ + $_SESSION['totalq'] = "SQL Queries Performed:"; +} +$script = (isset($_POST['script']) ? $_POST['script'] : ''); +$quest_name = (isset($_POST['quest_name']) ? $_POST['quest_name'] : ''); +$showLinesCheck = (isset($_POST['showLines']) ? 'checked="checked"' : ''); +$warnCheck = (isset($_POST['noWarnings']) ? 'checked="checked"' : ''); +$warnQNCheck = (isset($_POST['noQNWarnings']) ? 'checked="checked"' : ''); + +echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US"> + <head> + <meta name="author" content="PlaneShift MMORPG" /> + <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> + <link rel="stylesheet" type="text/css" href="'.$pathToWC.'./global.css" /> + <title>PlaneShift - Administrator Console</title> + </head> + <body> + <div class="container">'; +echo ' <form method="post" action="'.$_SERVER['PHP_SELF'].'"><p> + Quest name: <input type="text" name="quest_name" value="'.$quest_name.'" /> <br /> + Quest Script:<br/><textarea name="script" rows="25" cols="80">'.htmlentities($script).'</textarea><br /> + <input type="checkbox" name="showLines" ' . $showLinesCheck . ' />Show script lines?<br /> + <input type="checkbox" name="noWarnings" ' . $warnCheck . ' />Hide Warnings?<br /> + <input type="checkbox" name="noQNWarnings" ' . $warnQNCheck . ' />Hide "No QuestNote" Warnings?<br /> + <input type="submit" name="submit" value="submit" /></p></form>'; + +if ($script != '') +{ + append_log('<p class="error">'); + append_log("parsing script"); + // using 0 as ID is a bit "hackish" to signify the script is not in the database (script 0 does not exist). + parseScript(0, $script, isset($_POST['showLines']), isset($_POST['noWarnings']), isset($_POST['noQNWarnings']), 0, $quest_name); + append_log("parsing script completed"); + append_log('</p>'); + echo $parse_log; +} + +echo '</div><hr/><p>This is Debugging Information Only: '.($_SESSION['totalq']).'</p>'; +unset($_SESSION['totalq']); +echo '<div class="footer"> +All material found here is (c) Atomic Blue.<br/> +</div> +</body> +</html>'; +?> Deleted: www/webconsole-new/quests/prospectQuestValidator.php =================================================================== --- www/webconsole-new/quests/prospectQuestValidator.php 2016-12-25 16:10:45 UTC (rev 9984) +++ www/webconsole-new/quests/prospectQuestValidator.php 2016-12-29 01:10:57 UTC (rev 9985) @@ -1,60 +0,0 @@ -<?php -/* - * This script is designed to operate outside the regular context of the WC, the path mentioned below can be used to point it to its files. - */ -$pathToWC = './../'; // this *must* end in a /, use ./ if the script is in the WC root, otherwise use an additional ../ for every directory it is below that. -include($pathToWC.'commonfunctions.php'); -include($pathToWC.'../secure/db_config.php'); -include($pathToWC.'quests/validatequest.php'); - -SetUpDB($db_hostname, $db_username, $db_password, $db_name); -date_default_timezone_set('UTC'); -session_save_path($pathToWC.'sessions'); -session_start(); -if (!isset($_SESSION['totalq'])) -{ - $_SESSION['totalq'] = "SQL Queries Performed:"; -} -$script = (isset($_POST['script']) ? $_POST['script'] : ''); -$quest_name = (isset($_POST['quest_name']) ? $_POST['quest_name'] : ''); -$showLinesCheck = (isset($_POST['showLines']) ? 'checked="checked"' : ''); -$warnCheck = (isset($_POST['noWarnings']) ? 'checked="checked"' : ''); -$warnQNCheck = (isset($_POST['noQNWarnings']) ? 'checked="checked"' : ''); - -echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US"> - <head> - <meta name="author" content="PlaneShift MMORPG" /> - <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> - <link rel="stylesheet" type="text/css" href="'.$pathToWC.'./global.css" /> - <title>PlaneShift - Administrator Console</title> - </head> - <body> - <div class="container">'; -echo ' <form method="post" action="'.$_SERVER['PHP_SELF'].'"><p> - Quest name: <input type="text" name="quest_name" value="'.$quest_name.'" /> <br /> - Quest Script:<br/><textarea name="script" rows="25" cols="80">'.htmlentities($script).'</textarea><br /> - <input type="checkbox" name="showLines" ' . $showLinesCheck . ' />Show script lines?<br /> - <input type="checkbox" name="noWarnings" ' . $warnCheck . ' />Hide Warnings?<br /> - <input type="checkbox" name="noQNWarnings" ' . $warnQNCheck . ' />Hide "No QuestNote" Warnings?<br /> - <input type="submit" name="submit" value="submit" /></p></form>'; - -if ($script != '') -{ - append_log('<p class="error">'); - append_log("parsing script"); - // using 0 as ID is a bit "hackish" to signify the script is not in the database (script 0 does not exist). - parseScript(0, $script, isset($_POST['showLines']), isset($_POST['noWarnings']), isset($_POST['noQNWarnings']), 0, $quest_name); - append_log("parsing script completed"); - append_log('</p>'); - echo $parse_log; -} - -echo '</div><hr/><p>This is Debugging Information Only: '.($_SESSION['totalq']).'</p>'; -unset($_SESSION['totalq']); -echo '<div class="footer"> -All material found here is (c) Atomic Blue.<br/> -</div> -</body> -</html>'; -?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2021-07-05 18:44:46
|
Revision: 10008 http://sourceforge.net/p/planeshift/code/10008 Author: lpancallo Date: 2021-07-05 18:44:44 +0000 (Mon, 05 Jul 2021) Log Message: ----------- Updated webconsole for PSUnreal, with new coordinates. not all maps yet. Modified Paths: -------------- www/webconsole-new/commonfunctions.php www/webconsole-new/crafting/resourcemap.php www/webconsole-new/graphfunctions.php www/webconsole-new/npcs/viewnpcmap.php www/webconsole-new/rules/draw_map.php www/webconsole-new/statistics/statshardware.php Modified: www/webconsole-new/commonfunctions.php =================================================================== --- www/webconsole-new/commonfunctions.php 2021-02-27 20:32:26 UTC (rev 10007) +++ www/webconsole-new/commonfunctions.php 2021-07-05 18:44:44 UTC (rev 10008) @@ -553,6 +553,7 @@ This method contains hardcoded coords and part of SQL statements. They are the sizes of each map, as well as which sectors they span in the database. This data "should" be put in a database someday(TM), since right now you will need to edit this code every time a map gets added to the world. (This gets used for drawing maps.) + Coordinates are TOP LEFT of the map. X going positive from left to right, Y going positive from top to bottom. */ function getDataFromArea($area) { @@ -560,10 +561,10 @@ $data; if ($area=='hydlaa_plaza') { $data[0] = '(loc_sector_id=15 or loc_sector_id=52 or loc_sector_id=41 or loc_sector_id=42)'; - $data[1] = 535; - $data[2] = 180; - $data[3] = 2.2; - $data[4] = 2.2; + $data[1] = 127000; + $data[2] = -381000; + $data[3] = 1; + $data[4] = 1; $data[5] = array('hydlaa_plaza', 'tavern_de_kadel', 'laanxentrance','laanxmain'); } else if ($area=='hydlaa_jayose') { $data[0] = '(loc_sector_id=49 or loc_sector_id=40)'; @@ -602,15 +603,15 @@ $data[5] = array('hall', 'trans1', 'dngn', 'cntr', 'trans2', 'merc', 'upper', 'entr', 'outer', 'hycorr1', 'hycorr2'); } else if ($area=='ojaroad1') { $data[0] = '(loc_sector_id=22)'; - $data[1] = 603; - $data[2] = 600; + $data[1] = 254000; + $data[2] = -381000; $data[3] = 0.9; $data[4] = 0.9; $data[5] = array('ojaroad1'); } else if ($area=="ojaroad2") { $data[0] = '(loc_sector_id=59)'; - $data[1] = 632; - $data[2] = 625; + $data[1] = 381000; + $data[2] = -381000; $data[3] = 1; $data[4] = 1; $data[5] = array('ojaroad2'); @@ -623,15 +624,15 @@ $data[5] = array('ojapath', 'Akk-Central', 'Akk-East'); } else if ($area=='bdroad1') { $data[0] = '(loc_sector_id=60)'; - $data[1] = 491; - $data[2] = 493; + $data[1] = 127000; + $data[2] = -508000; $data[3] = 0.76; $data[4] = 0.76; $data[5] = array('bdroad1'); } else if ($area=='bdroad2') { $data[0] = '(loc_sector_id=61)'; - $data[1] = 669; - $data[2] = 667; + $data[1] = 127000; + $data[2] = -635000; $data[3] = 1.07; $data[4] = 1.07; $data[5] = array('bdroad2'); @@ -919,4 +920,39 @@ return ($result[0] == 1); } -?> +function OutputPSVersionDropdown($psversion) +{ + return "<select name=psversion id=psversion><option value=ab>Atomic Blue</option><option value=mb>Molecular Blue</option><option value=cbe>Crystal Blue Early</option><option value=cbl>Crystal Blue Late</option><option value=sb>Steel Blue Late</option><option value=ac>Azure Chrysalis</option><option value=az>Azure Spirit</option><option value=psu selected>PSUnreal</option></select>"; +} + +function generateWhereClauseByPSVersion($psversion) +{ + // PlaneShift Atomic Blue 10 Feb 2002 - 06 March 2003 + // PlaneShift Molecular Blue 07 March 2003 - 23 Dec 2004 + // PlaneShift Early Crystal Blue! 24 Dec 2004 - 15 July 2006 + // PlaneShift called Late Crystal Blue! 16 July 2006 - 14 March 2008 + // PlaneShift called Steel Blue! 15 March 2008 - 14 December 2009 + // PlaneShift called Arcane Chrysalis 15 December 2009 - 14 November 2013 + // PlaneShift called Azure Spirit 15 November 2013 - 19 May 2020 + // PlaneShift PSUnreal Alpha 0.7.1 20 May 2020 - xx + + // express dates as YYYY-MM-DD + + if ($psversion == "ab") + return "last_login<= DATE(\"2003-03-06\")"; + else if ($psversion == "mb") + return "last_login >= DATE(\"2003-03-07\") AND last_login<= DATE(\"2004-12-23\")"; + else if ($psversion == "cbe") + return "last_login >= DATE(\"2004-12-24\") AND last_login<= DATE(\"2006-07-15\")"; + else if ($psversion == "cbl") + return "last_login >= DATE(\"2006-07-16\") AND last_login<= DATE(\"2008-03-14\")"; + else if ($psversion == "sb") + return "last_login >= DATE(\"2008-03-15\") AND last_login<= DATE(\"2009-12-14\")"; + else if ($psversion == "ac") + return "last_login >= DATE(\"2009-12-15\") AND last_login<= DATE(\"2013-11-14\")"; + else if ($psversion == "az") + return "last_login >= DATE(\"2013-11-15\") AND last_login<= DATE(\"2020-05-19\")"; + else if ($psversion == "psu") + return "last_login >= DATE(\"2020-05-20\")"; +} +?> \ No newline at end of file Modified: www/webconsole-new/crafting/resourcemap.php =================================================================== --- www/webconsole-new/crafting/resourcemap.php 2021-02-27 20:32:26 UTC (rev 10007) +++ www/webconsole-new/crafting/resourcemap.php 2021-07-05 18:44:44 UTC (rev 10008) @@ -152,6 +152,8 @@ $query = "SELECT id, loc_x, loc_y, loc_z, radius, visible_radius, probability, reward_nickname, amount from natural_resources where ".$sectors; //echo "query is $query"; $res = mysql_query2($query); + + echo "<br/>Natural Resources found: " . mysqli_num_rows($res) . "<br/>"; while ($line = fetchSqlRow($res)){ if ($line[8]!=0) @@ -158,7 +160,7 @@ $amount = 2; // indicates this is also an hunt location else $amount = 1; // indicates this is only a natural res - $elem = $line[0] . "|R:" . $line[5] . " P:".$line[6]." I:".$line[7]."|x|" . $line[1] . "|" . $line[3]."|".$line[6]."|".$amount; + $elem = $line[0] . "|R:" . $line[5] . " P:".$line[6]." I:".$line[7]."|x|" . $line[1] . "|" . $line[2]."|".$line[6]."|".$amount; $result .= ($elem . "\n"); } } @@ -168,9 +170,10 @@ $query = "SELECT h.id, h.x, h.y, h.z, h.`range`, h.`range`, 0, s.name from hunt_locations h, item_stats s where h.itemid=s.id and ".$hunt_sectors; //echo "query is $query"; $res = mysql_query2($query); + echo "<br/>Hunt Locations found: " . mysqli_num_rows($res) . "<br/>"; while ($line = fetchSqlRow($res)){ - $elem = $line[0] . "|R:" . $line[5] . " P:".$line[6]." I:".$line[7]."|x|" . $line[1] . "|" . $line[3]."|".$line[6]."|3|33"; + $elem = $line[0] . "|R:" . $line[5] . " P:".$line[6]." I:".$line[7]."|x|" . $line[1] . "|" . $line[2]."|".$line[6]."|3|33"; $result .= ($elem . "\n"); } } @@ -207,8 +210,8 @@ $scalefactorx = $data[3]; $scalefactory = $data[4]; - $x = $centerx+($infos[4]*$scalefactorx); - $y = $centery-($infos[5]*$scalefactory); + $x = (($infos[4]-$centerx)*$scalefactorx)/100; + $y = (($infos[5]-$centery)*$scalefactory)/100; // determine icon if ($infos[7] == 1) { Modified: www/webconsole-new/graphfunctions.php =================================================================== --- www/webconsole-new/graphfunctions.php 2021-02-27 20:32:26 UTC (rev 10007) +++ www/webconsole-new/graphfunctions.php 2021-07-05 18:44:44 UTC (rev 10008) @@ -3,7 +3,7 @@ $max = 0; $total = 0; - while ($line = fetchSqlAssoc($result)) + while ($line = mysqli_fetch_row($result)) { $num = $line[2]; $name = $line[1]; Modified: www/webconsole-new/npcs/viewnpcmap.php =================================================================== --- www/webconsole-new/npcs/viewnpcmap.php 2021-02-27 20:32:26 UTC (rev 10007) +++ www/webconsole-new/npcs/viewnpcmap.php 2021-07-05 18:44:44 UTC (rev 10008) @@ -140,10 +140,10 @@ //echo "<div id=Layer2 style=\"position:absolute; width:1968px; height:954px; z-index:1; left:0px; top:90px\">"; if(!isset($_GET['live'])) - echo "<img src=\"rules/draw_map.php?sector=$sector&type=waypoint,path,tribe,spawn\" >"; + echo "<img src=\"rules/draw_map.php?sector=$sector&type=waypoint,path,tribe,spawn\" />"; else - echo "<img src=\"rules/draw_map.php?sector=$sector&type=live\" >"; - + echo "<img src=\"rules/draw_map.php?sector=$sector&type=live\" />"; + $data = getDataFromArea($sector); $sectors = $data[0]; $centerx = $data[1]; @@ -155,10 +155,12 @@ $query = "SELECT id,name,loc_x,loc_y,loc_z,loc_sector_id, npc_impervious_ind FROM characters WHERE npc_master_id>0 AND " . $sectors . " and npc_spawn_rule>0"; $res = mysql_query2($query); + echo "<br/>NPC found: " . mysqli_num_rows($res) . "<br/>"; + $i=0; $result = ''; while ($line = fetchSqlRow($res)){ - $elem = $line[0] . "|" . $line[1] . "|x|" . $line[2] . "|" . $line[4]."|".$line[6]; + $elem = $line[0] . "|" . $line[1] . "|x|" . $line[2] . "|" . $line[3]."|".$line[6]; $result .= $elem . "\n"; } // get each line @@ -169,92 +171,94 @@ $tok = strtok("\n"); } - - // get all info for each line - foreach((array) $peoples as $people ) { - - // skips commented lines - $pos = strstr($people, '#'); - - if ($pos=="0") { - $tok2 = strtok($people, '|'); - $infos[] = ''; - $count = 1; - while ($tok2) { - $tok2 = str_replace("\n", '', $tok2); - $tok2 = str_replace("\r", '', $tok2); - $infos[$count]=$tok2; - $tok2 = strtok('|'); - $count++; - } - - - $x = $centerx+($infos[4]*$scalefactorx); - $y = $centery-($infos[5]*$scalefactory); - - if ($infos[6] == 'Y') { - $ball = 'img/ball01m.gif'; - echo "<div id=Layer1 onMouseover=\"ddrivetip('$infos[1] $infos[2]')\"; onMouseout=\"hideddrivetip()\" style=\"position:absolute; offsetTop:20px; width:10px; height:10px; z-index:2; left:".$x."px; top:".$y."px\">"; - echo "<A HREF=index.php?do=npc_details&sub=main&npc_id=$infos[1]><img border=0 src=$ball width=8 height=8></a></div>\n"; - - } else { - $ball = 'img/ball04m.gif'; - echo "<div id=Layer1 onMouseover=\"ddrivetip('$infos[1] $infos[2]')\"; onMouseout=\"hideddrivetip()\" style=\"position:absolute; offsetTop:20px; width:10px; height:10px; z-index:2; left:".$x."px; top:".$y."px\">"; - echo "<A HREF=index.php?do=npc_details&sub=main&npc_id=$infos[1]><img border=0 src=$ball width=10 height=10></a></div>\n"; - } - - } - } + + // get all info for each line + foreach((array) $peoples as $people ) { + + // skips commented lines + $pos = strstr($people, '#'); + + if ($pos=="0") + { + $tok2 = strtok($people, '|'); + $infos[] = ''; + $count = 1; + while ($tok2) { + $tok2 = str_replace("\n", '', $tok2); + $tok2 = str_replace("\r", '', $tok2); + $infos[$count]=$tok2; + $tok2 = strtok('|'); + $count++; + } + + + $x = (($infos[4]-$centerx)*$scalefactorx)/100; + $y = (($infos[5]-$centery)*$scalefactory)/100; + + //echo "x:".$x." y:".$y; + + if ($infos[6] == 'Y') { + $ball = 'img/ball01m.gif'; + echo "<div id=Layer1 onMouseover=\"ddrivetip('$infos[1] $infos[2]')\"; onMouseout=\"hideddrivetip()\" style=\"position:absolute; offsetTop:20px; width:10px; height:10px; z-index:2; left:".$x."px; top:".$y."px\">"; + echo "<A HREF=index.php?do=npc_details&sub=main&npc_id=$infos[1]><img border=0 src=$ball width=8 height=8></a></div>\n"; + + } else { + $ball = 'img/ball04m.gif'; + echo "<div id=Layer1 onMouseover=\"ddrivetip('$infos[1] $infos[2]')\"; onMouseout=\"hideddrivetip()\" style=\"position:absolute; offsetTop:20px; width:10px; height:10px; z-index:2; left:".$x."px; top:".$y."px\">"; + echo "<A HREF=index.php?do=npc_details&sub=main&npc_id=$infos[1]><img border=0 src=$ball width=10 height=10></a></div>\n"; + } + } + } } else { - // Get Live position data - $handle = @fopen($report,"r"); - if($handle) { - while ( !feof($handle) ) - { - $buffer = fgets($handle, 4096); - if(preg_match("/npc name=\"(?P<name>.*?)\".*pos_x=\"(?P<x>.*?)\".*pos_z=\"(?P<z>.*?)\" sector=\"(?P<sector>.*?)\"/", $buffer, $matches)) { - $found = FALSE; - foreach($data[5] as $sectorname) - { - if($matches['sector'] === $sectorname) - $found = TRUE; - } - if($found) - { - $ball = 'img/ball01m.gif'; - $x= $centerx+($matches['x']*$scalefactorx); - $y= $centery-($matches['z']*$scalefactory); - echo "<div id=Layer1 onMouseover=\"ddrivetip('".$matches['name']."')\"; onMouseout=\"hideddrivetip()\" style=\"position:absolute; offsetTop:20px; width:10px; height:10px; z-index:2; left:".$x."px; top:".$y."px\">"; - echo "<img border=0 src=$ball width=8 height=8></div>\n"; - } - } - elseif(preg_match("/player name=\"(?P<name>.*?)\".*pos_x=\"(?P<x>.*?)\".*pos_z=\"(?P<z>.*?)\" sector=\"(?P<sector>.*?)\"/", $buffer, $matches)) { - $found = FALSE; - foreach($data[5] as $sectorname) - { - if($matches['sector'] === $sectorname) - $found = TRUE; - } - if($found) - { - $ball = 'img/ball04m.gif'; - $x= $centerx+($matches['x']*$scalefactorx); - $y= $centery-($matches['z']*$scalefactory); - echo "<div id=Layer1 onMouseover=\"ddrivetip('".$matches['name']."')\"; onMouseout=\"hideddrivetip()\" style=\"position:absolute; offsetTop:20px; width:10px; height:10px; z-index:2; left:".$x."px; top:".$y."px\">"; - echo "<img border=0 src=$ball width=10 height=10></div>\n"; - } - } - - } - } + // Get Live position data + $handle = @fopen($report,"r"); + if($handle) { + while ( !feof($handle) ) + { + $buffer = fgets($handle, 4096); + if(preg_match("/npc name=\"(?P<name>.*?)\".*pos_x=\"(?P<x>.*?)\".*pos_z=\"(?P<z>.*?)\" sector=\"(?P<sector>.*?)\"/", $buffer, $matches)) { + $found = FALSE; + foreach($data[5] as $sectorname) + { + if($matches['sector'] === $sectorname) + $found = TRUE; + } + if($found) + { + $ball = 'img/ball01m.gif'; + $x= $centerx+($matches['x']*$scalefactorx); + $y= $centery-($matches['z']*$scalefactory); + echo "<div id=Layer1 onMouseover=\"ddrivetip('".$matches['name']."')\"; onMouseout=\"hideddrivetip()\" style=\"position:absolute; offsetTop:20px; width:10px; height:10px; z-index:2; left:".$x."px; top:".$y."px\">"; + echo "<img border=0 src=$ball width=8 height=8></div>\n"; + } + } + elseif(preg_match("/player name=\"(?P<name>.*?)\".*pos_x=\"(?P<x>.*?)\".*pos_z=\"(?P<z>.*?)\" sector=\"(?P<sector>.*?)\"/", $buffer, $matches)) { + $found = FALSE; + foreach($data[5] as $sectorname) + { + if($matches['sector'] === $sectorname) + $found = TRUE; + } + if($found) + { + $ball = 'img/ball04m.gif'; + $x= $centerx+($matches['x']*$scalefactorx); + $y= $centery-($matches['z']*$scalefactory); + echo "<div id=Layer1 onMouseover=\"ddrivetip('".$matches['name']."')\"; onMouseout=\"hideddrivetip()\" style=\"position:absolute; offsetTop:20px; width:10px; height:10px; z-index:2; left:".$x."px; top:".$y."px\">"; + echo "<img border=0 src=$ball width=10 height=10></div>\n"; + } + } + + } + } else { echo '<p class="error">Could not open report.xml file in '.$report.'</p>'; } - @fclose($handle); - + @fclose($handle); + } } $sectors_list = PrepSelect('sector'); Modified: www/webconsole-new/rules/draw_map.php =================================================================== --- www/webconsole-new/rules/draw_map.php 2021-02-27 20:32:26 UTC (rev 10007) +++ www/webconsole-new/rules/draw_map.php 2021-07-05 18:44:44 UTC (rev 10008) @@ -40,6 +40,7 @@ draw_map($sector, $type); } +// THIS FUNCTION WILL WORK ONLY IF THE INCLUDE ABOVE DO NOT ADD ANY EXTRA SPACES TO THE PAGE function draw_map($sector, $type) { $image_name = '../img/'.$sector.'.gif'; @@ -120,8 +121,8 @@ $radius = $line[4]; $vis_radius = $line[5]; - $ix = $centerx+($x*$scalefactorx); - $iy = $centery-($z*$scalefactory); + $ix = (($x-$centerx)*$scalefactorx)/100; + $iy = (($y-$centery)*$scalefactory)/100; $ir = $radius*$scalefactorx; imagearc($im,$ix,$iy,2*$ir,2*$ir,0,360,$fg_color); @@ -152,10 +153,10 @@ $radius = $line[7]; $range_type = $line[8]; - $ix1 = $centerx+($x1*$scalefactorx); - $iy1 = $centery-($z1*$scalefactory); - $ix2 = $centerx+($x2*$scalefactorx); - $iy2 = $centery-($z2*$scalefactory); + $ix1 = (($x1-$centerx)*$scalefactorx)/100; + $iy1 = (($y1-$centery)*$scalefactory)/100; + $ix2 = (($x2-$centerx)*$scalefactorx)/100; + $iy2 = (($y2-$centery)*$scalefactory)/100; $ir = $radius*$scalefactorx; if ($range_type == "C") // Circle { @@ -198,8 +199,8 @@ $z = $line[3]; $radius = $line[4]; - $ix = $centerx+($x*$scalefactorx); - $iy = $centery-($z*$scalefactory); + $ix = (($x-$centerx)*$scalefactorx)/100; + $iy = (($y-$centery)*$scalefactory)/100; $ir = $radius*$scalefactorx; imagearc($im,$ix,$iy,2*$ir,2*$ir,0,360,$fg_color); } @@ -224,8 +225,8 @@ $radius = $line[4]; $flags = $line[5]; - $ix = $centerx+($x*$scalefactorx); - $iy = $centery-($z*$scalefactory); + $ix = (($x-$centerx)*$scalefactorx)/100; + $iy = (($y-$centery)*$scalefactory)/100; $ir = $radius*$scalefactorx; $style = array($fg_color,$fg_color,$fg_color); @@ -292,10 +293,10 @@ $id1 = $line2[7]; $id2 = $line2[8]; - $ix1 = $centerx+($x1*$scalefactorx); - $iy1 = $centery-($z1*$scalefactory); - $ix2 = $centerx+($x2*$scalefactorx); - $iy2 = $centery-($z2*$scalefactory); + $ix1 = (($x1-$centerx)*$scalefactorx)/100; + $iy1 = (($y1-$centery)*$scalefactory)/100; + $ix2 = (($x2-$centerx)*$scalefactorx)/100; + $iy2 = (($y2-$centery)*$scalefactory)/100; if (stristr($flags, 'NO_WANDER') !== FALSE) { @@ -365,14 +366,14 @@ // Get start point, from waypoint { // Draw from start wp to first point - $query2 = "select w.x,w.z from sc_waypoints w, sc_waypoint_links wl where w.id = wl.wp1 and wl.id=".$path_id; + $query2 = "select w.x,w.y from sc_waypoints w, sc_waypoint_links wl where w.id = wl.wp1 and wl.id=".$path_id; $res2=mysql_query2($query2); while ($line2 = fetchSqlRow($res2)) { $x1 = $line2[0]; - $z1 = $line2[1]; - $ix2 = $centerx+($x1*$scalefactorx); - $iy2 = $centery-($z1*$scalefactory); + $y1 = $line2[1]; + $ix2 = (($x1-$centerx)*$scalefactorx)/100; + $iy2 = (($y1-$centery)*$scalefactory)/100; } } // Get path points and draw line from last point @@ -383,7 +384,7 @@ { $found = false; // Draw from start wp to first point - $query2 = "select id,x,z from sc_path_points where path_id=".$path_id." and prev_point=".$point_id; + $query2 = "select id,x,y from sc_path_points where path_id=".$path_id." and prev_point=".$point_id; $res2=mysql_query2($query2); while ($line2 = fetchSqlRow($res2)) { @@ -395,9 +396,9 @@ $point_id = $line2[0]; $x1 = $line2[1]; - $z1 = $line2[2]; - $ix2 = $centerx+($x1*$scalefactorx); - $iy2 = $centery-($z1*$scalefactory); + $y1 = $line2[2]; + $ix2 = (($x1-$centerx)*$scalefactorx)/100; + $iy2 = (($y1-$centery)*$scalefactory)/100; $ir = 3; imageline($im,$ix1,$iy1,$ix2,$iy2, IMG_COLOR_STYLED ); @@ -408,7 +409,7 @@ { // Draw from start wp to first point - $query2 = "select w.x,w.z from sc_waypoints w, sc_waypoint_links wl where w.id = wl.wp2 and wl.id=".$path_id; + $query2 = "select w.x,w.y from sc_waypoints w, sc_waypoint_links wl where w.id = wl.wp2 and wl.id=".$path_id; $res2=mysql_query2($query2); while ($line2 = fetchSqlRow($res2)) { @@ -417,9 +418,9 @@ $iy1 = $iy2; $x1 = $line2[0]; - $z1 = $line2[1]; - $ix2 = $centerx+($x1*$scalefactorx); - $iy2 = $centery-($z1*$scalefactory); + $y1 = $line2[1]; + $ix2 = (($x1-$centerx)*$scalefactorx)/100; + $iy2 = (($y1-$centery)*$scalefactory)/100; imageline($im, $ix1, $iy1, $ix2, $iy2, IMG_COLOR_STYLED ); } @@ -446,8 +447,8 @@ $radius = $line[4]; $id_prev = $line[5]; - $ix1 = $centerx+($x*$scalefactorx); - $iy1 = $centery-($z*$scalefactory); + $ix1 = (($x-$centerx)*$scalefactorx)/100; + $iy1 = (($y-$centery)*$scalefactory)/100; $ir = $radius*$scalefactorx; imagearc($im,$ix1,$iy1,2*$ir,2*$ir,0,360,$fg_color); @@ -461,8 +462,8 @@ $y2 = $line2[1]; $z2 = $line2[2]; - $ix2 = $centerx+($x2*$scalefactorx); - $iy2 = $centery-($z2*$scalefactory); + $ix2 = (($x2-$centerx)*$scalefactorx)/100; + $iy2 = (($y2-$centery)*$scalefactory)/100; imageline($im,$ix1,$iy1,$ix2,$iy2,$fg_color); } } @@ -495,8 +496,8 @@ if($found) { - $x = $centerx+($pieces[0]*$scalefactorx); - $y = $centery-($pieces[1]*$scalefactory); + $x = (($pieces[0]-$centerx)*$scalefactorx)/100; + $y = (($pieces[1]-$centery)*$scalefactory)/100; if(!($prevx == 999.0 && $prevy == 999.0)) { imageline($im,$prevx,$prevy,$x,$y,$colors[$colorindex]); Modified: www/webconsole-new/statistics/statshardware.php =================================================================== --- www/webconsole-new/statistics/statshardware.php 2021-02-27 20:32:26 UTC (rev 10007) +++ www/webconsole-new/statistics/statshardware.php 2021-07-05 18:44:44 UTC (rev 10008) @@ -5,17 +5,28 @@ include('./graphfunctions.php'); if(checkaccess('statistics', 'read')) { - ?> - <form action="./index.php?do=statshardware" method="post"><input type="text" value="10" name="filter" size="4"> Threshold for filtering results <input type="submit" name="Filter" value="Filter"/></form> - <?php - echo '<p class="header">Operating Systems</p>'; - $filter = 10; + $psversion = "psu"; if ( isset($_POST['filter']) ) { $filter = escapeSqlString($_POST['filter']); } + if ( isset($_POST['psversion']) ) { + $psversion = escapeSqlString($_POST['psversion']); + echo "<br/> PSVersion used for query: ".$psversion; + } + + ?> + <form action="./index.php?do=statshardware" method="post"> Minimum number of result count required <input type="text" value="<?=$filter?>" name="filter" size="4"><br/> + <?php + echo "Filter by release: " . OutputPSVersionDropdown($psversion); + echo "<br/><input type=\"submit\" name=\"Filter\" value=\"Filter\"/></form>"; + echo '<p class="header">Operating Systems</p>'; + - $sql = "SELECT id,operating_system,count(operating_system) as result FROM accounts where operating_system <>'' group by operating_system having result>=".$filter." order by result desc"; + + + + $sql = "SELECT id,operating_system,count(operating_system) as result FROM accounts where operating_system <>'' AND ".generateWhereClauseByPSVersion($psversion)." group by operating_system having result>=".$filter." order by result desc"; $query = mysql_query2($sql); if(sqlNumRows($query) < 1) @@ -26,7 +37,7 @@ echo '<p class="header">Graphics Cards</p>'; - $sql = "SELECT id,graphics_card,count(graphics_card) as result FROM accounts where graphics_card <>'' group by graphics_card having result>=".$filter." order by result desc"; + $sql = "SELECT id,graphics_card,count(graphics_card) as result FROM accounts where graphics_card <>'' AND ".generateWhereClauseByPSVersion($psversion)." group by graphics_card having result>=".$filter." order by result desc"; $query2 = mysql_query2($sql); if(sqlNumRows($query2) < 1) @@ -37,7 +48,7 @@ echo '<p class="header">Graphics Version</p>'; - $sql = "SELECT id,graphics_version,count(graphics_version) as result FROM accounts where graphics_version <>'' group by graphics_version having result>=".$filter." order by result desc"; + $sql = "SELECT id,graphics_version,count(graphics_version) as result FROM accounts where graphics_version <>'' AND ".generateWhereClauseByPSVersion($psversion)." group by graphics_version having result>=".$filter." order by result desc"; $query2 = mysql_query2($sql); if(sqlNumRows($query2) < 1) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2022-01-01 19:05:24
|
Revision: 10009 http://sourceforge.net/p/planeshift/code/10009 Author: lpancallo Date: 2022-01-01 19:05:23 +0000 (Sat, 01 Jan 2022) Log Message: ----------- Added admin function to search all unused accounts by last login date and time connected in seconds. Modified Paths: -------------- www/webconsole-new/admin/adminmain.php www/webconsole-new/index.php Added Paths: ----------- www/webconsole-new/admin/unusedchars.php Modified: www/webconsole-new/admin/adminmain.php =================================================================== --- www/webconsole-new/admin/adminmain.php 2021-07-05 18:44:44 UTC (rev 10008) +++ www/webconsole-new/admin/adminmain.php 2022-01-01 19:05:23 UTC (rev 10009) @@ -8,6 +8,7 @@ echo '<a href="./index.php?do=viewcommands">View Commands</a><br/>'."\n"; echo '<a href="./index.php?do=viewserveroptions">View Server Options</a><br/>'."\n"; echo '<a href="./index.php?do=listgms">List GMs</a><br/>'."\n"; + echo '<a href="./index.php?do=cleanupchars">Cleanup Unused Characters</a><br/>'."\n"; echo '<hr/><a href="./index.php">Return to main page.</a>'."\n"; echo '</div><div class="main">'; } Added: www/webconsole-new/admin/unusedchars.php =================================================================== --- www/webconsole-new/admin/unusedchars.php (rev 0) +++ www/webconsole-new/admin/unusedchars.php 2022-01-01 19:05:23 UTC (rev 10009) @@ -0,0 +1,59 @@ +<?PHP +function unusedchars() +{ + if (!checkaccess('admin', 'read')) + { + echo '<p class="error">You are not authorized to use these functions</p>'; + return; + } + + if(isset($_POST['startfrom'])) + { + $startfrom = $_POST['startfrom']; + } else + { + $startfrom = "2008-01-01"; + } + + if(isset($_POST['secondsconnected'])) + { + $secondsconnected = $_POST['secondsconnected']; + } else + { + $secondsconnected = 0; + } + + echo '<h3>Unused Characters Search</h3>'; + + echo '<div class="table"><div class="th">Date of last login</div><div class="th">Time connected in seconds</div>'; + echo '<form action="./index.php?do=cleanupchars" method="post" class="tr"><div class="td"><input type="text" name="startfrom" value="'.$startfrom.'"/></div><div class="td">'."\n"; + echo '<input type="text" name="secondsconnected" value="'.$secondsconnected.'"/></div><div class="td">'."\n"; + echo '</div><div class="td">'."\n"; + echo '<input type="submit" name="action" value="Search"/>'."\n"; + echo '</div></div></form>'."\n"; // end tr + echo '<br/><br/>'; + + $query = 'SELECT id, name, last_login, time_connected_sec FROM characters WHERE character_type=0 AND last_login<\''.$startfrom.'\' AND time_connected_sec <='. $secondsconnected . ' ORDER BY last_login asc'; + $result = mysql_query2($query); + echo 'Total chars: '.mysqli_num_rows($result); + + printTable($result); + +} + +// internal support function, expects 1 result set containing "ID" and "tip" fields. +function printTable($result) +{ + echo '<div class="table"><div class="th">Character ID</div><div class="th">Character Name</div><div class="th">Last Login Date</div><div class="th">Time connected in seconds</div>'; + while ($row = fetchSqlAssoc($result)) + { + echo '<form action="./index.php?do=unusedchars" method="post" class="tr"><div class="td">'.$row['id'].'</div><div class="td">'."\n"; + echo $row['name'].'</div><div class="td">'; + echo $row['last_login'].'</div><div class="td">'; + echo $row['time_connected_sec'].'</div>'; + echo '</form>'."\n"; // end tr + } + echo '</div>'."\n"; // end table +} + +?> Property changes on: www/webconsole-new/admin/unusedchars.php ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Modified: www/webconsole-new/index.php =================================================================== --- www/webconsole-new/index.php 2021-07-05 18:44:44 UTC (rev 10008) +++ www/webconsole-new/index.php 2022-01-01 19:05:23 UTC (rev 10009) @@ -1067,18 +1067,24 @@ adminmain(); editgm(); break; - case 'events'; + case 'events': include('./other/othermain.php'); include('./other/events.php'); othermain(); listevents(); break; - case 'viewevent'; + case 'viewevent': include('./other/othermain.php'); include('./other/events.php'); othermain(); viewevent(); break; + case 'cleanupchars': + include('./admin/adminmain.php'); + include('./admin/unusedchars.php'); + adminmain(); + unusedchars(); + break; default: echo '<p class="error">shouldn\'t reach this!</p>'; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2023-12-05 22:36:32
|
Revision: 10015 http://sourceforge.net/p/planeshift/code/10015 Author: lpancallo Date: 2023-12-05 22:36:31 +0000 (Tue, 05 Dec 2023) Log Message: ----------- Added min faction List NPC by Faction Added tribe recipe added achievements under stats Modified Paths: -------------- www/webconsole-new/global.css www/webconsole-new/index.php www/webconsole-new/npcs/createnpc.php www/webconsole-new/npcs/npc_details.php www/webconsole-new/npcs/npcmain.php www/webconsole-new/quests/listquests.php www/webconsole-new/statistics/statsmain.php www/webconsole-new/tribes/tribe_details.php Added Paths: ----------- www/webconsole-new/npcs/listnpcfactions.php www/webconsole-new/statistics/achievements_array.php www/webconsole-new/statistics/liststats_achievements.php Modified: www/webconsole-new/global.css =================================================================== --- www/webconsole-new/global.css 2022-10-21 20:00:14 UTC (rev 10014) +++ www/webconsole-new/global.css 2023-12-05 22:36:31 UTC (rev 10015) @@ -220,3 +220,23 @@ .red{ color:red; } + +/* Tooltip text */ +.tooltip .tooltiptext { + visibility: hidden; + width: 120px; + background-color: black; + color: #fff; + text-align: center; + padding: 5px 0; + border-radius: 6px; + + /* Position the tooltip text - see examples below! */ + position: absolute; + z-index: 1; +} + +/* Show the tooltip text when you mouse over the tooltip container */ +.tooltip:hover .tooltiptext { + visibility: visible; +} Modified: www/webconsole-new/index.php =================================================================== --- www/webconsole-new/index.php 2022-10-21 20:00:14 UTC (rev 10014) +++ www/webconsole-new/index.php 2023-12-05 22:36:31 UTC (rev 10015) @@ -347,6 +347,12 @@ npcmain(); editmerchant(); break; + case 'listnpcfactions': + include('./npcs/npcmain.php'); + include('./npcs/listnpcfactions.php'); + npcmain(); + listnpcfactions(); + break; case 'listtrainer': include('./npcs/npcmain.php'); include('./npcs/listtrainer.php'); @@ -859,6 +865,12 @@ statsmain(); liststats_charstats(); break; + case 'liststats_achievements': + include('./statistics/statsmain.php'); + include('./statistics/liststats_achievements.php'); + statsmain(); + liststats_achievements(); + break; case 'assets': include('./assets/assetsmain.php'); assetsmain(); Modified: www/webconsole-new/npcs/createnpc.php =================================================================== --- www/webconsole-new/npcs/createnpc.php 2022-10-21 20:00:14 UTC (rev 10014) +++ www/webconsole-new/npcs/createnpc.php 2023-12-05 22:36:31 UTC (rev 10015) @@ -13,11 +13,14 @@ $fields = array('NPC Master' => 'npc_master_id', 'Name' => 'npcname', 'Last Name' => 'lastname', 'Description' => 'description', 'Race' => 'race', 'Stats' => 'stats', 'HP' => 'hp', 'Sector' => 'sector', 'Position' => 'position', 'Spawn Rule' => 'spawn', 'Weapon' => 'weapon', 'Behavior' => 'behavior', 'Skill Rank' => 'skill_value', 'Exp' => 'exp'); foreach($fields as $name => $field) { - if(!isset($_POST[$field]) || $_POST[$field] === '') - { - echo '<p class="error">You have to fill the "'.$name.'" field, too.</p>'; - $doit = false; - break; + // allow empty weapon, behaviour and region + if ($name != 'Weapon' && $name != 'Behavior' && $name != 'Skill Rank') { + if(!isset($_POST[$field]) || $_POST[$field] === '') + { + echo '<p class="error">You have to fill the "'.$name.'" field, too.</p>'; + $doit = false; + break; + } } } @@ -84,7 +87,7 @@ $sql = "INSERT INTO character_skills VALUES ($newnpcid, $skill, 0, 0, $skill_value)"; mysql_query2($sql); } - if ($region != -1 || $behavior != 'None') + if ($region != -1 || $behavior != '') { $sql = "INSERT INTO sc_npc_definitions (char_id, name, npctype, region, console_debug) VALUES ($newnpcid, '".escapeSqlString($npcname)."','".escapeSqlString($behavior)."','".escapeSqlString($region)."','N')"; mysql_query2($sql); @@ -106,10 +109,10 @@ echo '<tr><td>Sector: </td><td>'.DrawSelectBox('sectorid', PrepSelect('sectorid'), 'sector', (isset($_POST['sector']) ? $_POST['sector'] : '')).'</td></tr>'; echo '<tr><td>X,Y,Z,Rot: </td><td><input type="text" name="position" value="'.(isset($_POST['position']) ? htmlentities($_POST['position']) : '0,0,0,0').'" /></td></tr>'; echo '<tr><td>Spawn Rule: </td><td>'.DrawSelectBox('spawn', PrepSelect('spawn'), 'spawn', (isset($_POST['spawn']) ? $_POST['spawn'] : '')).'</td></tr>'; - echo '<tr><td>Weapon: </td><td>'.DrawSelectBox('weapon', PrepSelect('weapon'), 'weapon', (isset($_POST['weapon']) ? $_POST['weapon'] : -1)).'</td></tr>'; + echo '<tr><td>Weapon: </td><td>'.DrawSelectBox('weapon', PrepSelect('weapon'), 'weapon', (isset($_POST['weapon']) ? $_POST['weapon'] : -1), true).'</td></tr>'; echo '<tr><td>Weapon Skill Rank: </td><td><input type="text" name="skill_value" size="8" value="'.(isset($_POST['skill_value']) ? htmlentities($_POST['skill_value']) : '').'" /></td></tr>'; - echo '<tr><td>Behavior: </td><td>'.DrawSelectBox('behaviour', PrepSelect('behaviour'), 'behavior', (isset($_POST['behavior']) ? $_POST['behavior'] : '')).'</td></tr>'; - echo '<tr><td>Region: </td><td>'.DrawSelectBox('b_region', PrepSelect('b_region'), 'region', (isset($_POST['region']) ? $_POST['region'] : '')).'</td></tr>'; + echo '<tr><td>Behavior: </td><td>'.DrawSelectBox('behaviour', PrepSelect('behaviour'), 'behavior', (isset($_POST['behavior']) ? $_POST['behavior'] : ''), true).'</td></tr>'; + echo '<tr><td>Region: </td><td>'.DrawSelectBox('b_region', PrepSelect('b_region'), 'region', (isset($_POST['region']) ? $_POST['region'] : ''), true).'</td></tr>'; echo '<tr><td>Exp: </td><td><input type="text" name="exp" size="5" value="'.(isset($_POST['exp']) ? htmlentities($_POST['exp']) : '').'" /></td></tr>'; echo '<tr><td><input type="submit" name="submit" value="Create NPC" /></td><td><input type="reset" value="Reset" /></td></tr>'; echo '</table></form>'; Added: www/webconsole-new/npcs/listnpcfactions.php =================================================================== --- www/webconsole-new/npcs/listnpcfactions.php (rev 0) +++ www/webconsole-new/npcs/listnpcfactions.php 2023-12-05 22:36:31 UTC (rev 10015) @@ -0,0 +1,93 @@ +<?php +function listnpcfactions() +{ + if (!checkaccess('npcs', 'read')) + { + echo '<p class="error">You are not authorized to use these functions</p>'; + return; + } + + echo '<h1>List of NPCs divided by faction and sector</h1>'; + $query = "select c.id, f.faction_name, sname, cname, c.lastname, cf.value from character_factions cf, factions f, ( +SELECT c.id, c.name as cname, c.lastname, s.name as sname from characters c, sectors s where s.id=c.loc_sector_id and c.character_type='1' and c.npc_impervious_ind = 'Y' order by s.name) as c where f.id = cf.faction_id and c.id = cf.character_id order by faction_name"; + $result = mysql_query2($query); + $list_ids1 = ""; + if (sqlNumRows($result) > 0) + { + echo '<table border="1">'; + echo '<th>Faction Name</th><th>Sector Name</th><th>Name</th><th>Faction value</th>'; + while ($row = fetchSqlAssoc($result)) + { + echo '<tr>'; + echo '<td>'.$row['faction_name'].'</td>'; + echo '<td>'.$row['sname'].'</td>'; + echo '<td><a href="./index.php?do=npc_details&sub=main&npc_id='.$row['id'].'">'.$row['cname'].' '.$row['lastname'].'</a></td>'; + echo '<td>'.$row['value'].'</td>'; + echo '</tr>'; + $list_ids1 = $list_ids1 . ", " . $row['id']; + } + echo '</table>'; + } + else + { + echo '</table>'; + echo '<p class="error">No NPCs Found</p>'; + } + echo "<br>IDs for export:".$list_ids1; + + echo '<h1>List of NPCs with a faction (but attackable, this is an exception)</h1>'; + + $query = "select c.id, f.faction_name, sname, cname, c.lastname, cf.value from character_factions cf, factions f, ( +SELECT c.id, c.name as cname, c.lastname, s.name as sname from characters c, sectors s where s.id=c.loc_sector_id and c.character_type='1' and c.npc_impervious_ind = 'N' order by s.name) as c where f.id = cf.faction_id and c.id = cf.character_id order by faction_name"; + $result = mysql_query2($query); + $list_ids1 = ""; + if (sqlNumRows($result) > 0) + { + echo '<table border="1">'; + echo '<th>Faction Name</th><th>Sector Name</th><th>Name</th><th>Faction value</th>'; + while ($row = fetchSqlAssoc($result)) + { + echo '<tr>'; + echo '<td>'.$row['faction_name'].'</td>'; + echo '<td>'.$row['sname'].'</td>'; + echo '<td><a href="./index.php?do=npc_details&sub=main&npc_id='.$row['id'].'">'.$row['cname'].' '.$row['lastname'].'</a></td>'; + echo '<td>'.$row['value'].'</td>'; + echo '</tr>'; + $list_ids1 = $list_ids1 . ", " . $row['id']; + } + echo '</table>'; + } + else + { + echo '</table>'; + echo '<p class="error">No NPCs Found</p>'; + } + + echo "<br>IDs for export:".$list_ids1; + + echo '<h1>List of NPCs without a faction</h1>'; + + $query = "select c.id, sname, cname, c.lastname, cf.value from (SELECT c.id, c.name as cname, c.lastname, s.name as sname from characters c, sectors s where s.id=c.loc_sector_id and c.character_type='1' and c.npc_impervious_ind = 'Y' order by s.name) as c +left join character_factions cf on c.id = cf.character_id where value is null order by sname"; + + $result = mysql_query2($query); + if (sqlNumRows($result) > 0) + { + echo '<table border="1">'; + echo '<th>Sector Name</th><th>Name</th>'; + while ($row = fetchSqlAssoc($result)) + { + echo '<tr>'; + echo '<td>'.$row['sname'].'</td>'; + echo '<td><a href="./index.php?do=npc_details&sub=main&npc_id='.$row['id'].'">'.$row['cname'].' '.$row['lastname'].'</a></td>'; + echo '</tr>'; + } + echo '</table>'; + } + else + { + echo '</table>'; + echo '<p class="error">No NPCs Found</p>'; + } +} +?> Property changes on: www/webconsole-new/npcs/listnpcfactions.php ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Modified: www/webconsole-new/npcs/npc_details.php =================================================================== --- www/webconsole-new/npcs/npc_details.php 2022-10-21 20:00:14 UTC (rev 10014) +++ www/webconsole-new/npcs/npc_details.php 2023-12-05 22:36:31 UTC (rev 10015) @@ -130,7 +130,7 @@ $query = "SELECT npctype, region FROM sc_npc_definitions WHERE char_id='$id'"; $r2 = mysql_query2($query); $row2 = fetchSqlAssoc($r2); - echo '<tr><td>Behaviour/Region</td><td>'.DrawSelectBox('behaviour', $Behaviours, 'sc_npctype', $row2['npctype']).'/'.DrawSelectBox('b_region', $B_Regions, 'sc_region', $row2['region'], true).'</td></tr>'; + echo '<tr><td>Behaviour/Region</td><td>'.DrawSelectBox('behaviour', $Behaviours, 'sc_npctype', $row2['npctype'], true).'/'.DrawSelectBox('b_region', $B_Regions, 'sc_region', $row2['region'], true).'</td></tr>'; } echo '<tr><td colspan="2"><input type="hidden" name="char_type" value="'.$row['character_type'].'" /><input type="submit" name="commit" value="update" /></td></tr>'; echo '</table></form>'; @@ -706,7 +706,12 @@ $item_quality = escapeSqlString($_POST['item_quality']); $inst_id = escapeSqlString($_POST['id']); $query = "UPDATE item_instances SET stack_count='$stack_count', item_quality='$item_quality', crafted_quality='$item_quality' WHERE id='$inst_id'"; + }else if ($_POST['commit'] == 'Faction'){ + $min_faction = escapeSqlString($_POST['min_faction']); + $inst_id = escapeSqlString($_POST['id']); + $query = "UPDATE item_instances SET min_faction='$min_faction' WHERE id='$inst_id'"; } + unset($_POST); $result = mysql_query2($query); echo '<p class="error">Update Successful</p>'; @@ -718,13 +723,13 @@ echo 'receives its inventory from that master.</p>'."\n"; return; } - $query = "SELECT i.id, i.location_in_parent, i.stack_count, i.item_name, i.item_quality, i.item_stats_id_standard, s.name, s.valid_slots FROM item_instances AS i LEFT JOIN item_stats as s ON s.id=i.item_stats_id_standard WHERE i.char_id_owner='$id' ORDER BY s.name"; + $query = "SELECT i.id, i.location_in_parent, i.stack_count, i.item_name, i.item_quality, i.item_stats_id_standard, i.min_faction, s.name, s.valid_slots FROM item_instances AS i LEFT JOIN item_stats as s ON s.id=i.item_stats_id_standard WHERE i.char_id_owner='$id' ORDER BY s.name"; $result = mysql_query2($query); if (sqlNumRows($result) > 0){ - echo '<table border="1"><tr><th>Item</th><th>Location</th><th>Count/Quality</th><th>Functions</th></tr>'."\n"; + echo '<table border="1"><tr><th>Item</th><th>Location</th><th>Count/Quality</th><th>Min Faction</th><th>Functions</th></tr>'."\n"; while ($row = fetchSqlAssoc($result)){ echo '<tr>'; - echo '<td>'.$row['name']; + echo '<td class="tooltip">'.$row['name'].'<span class="tooltiptext">Stats ID: '.$row['item_stats_id_standard'].' Instance ID: '.$row['id'].'</span>'; if ($row['item_name'] != null && trim($row['item_name']) != '') { echo ' (Renamed to "'.htmlentities($row['item_name']).'")'; @@ -731,12 +736,19 @@ } echo '</td>'."\n"; echo '<td>'.LocationToString($row['location_in_parent']).'</td>'."\n"; + // Count and quality echo '<td><form action="./index.php?do=npc_details&npc_id='.$id.'&sub=items" method="post"><div>'."\n"; echo '<input type="text" name="stack_count" value="'.$row['stack_count'].'" size="3"/>'."\n"; echo '<input type="text" name="item_quality" value="'.$row['item_quality'].'" size="3"/><input type="hidden" name="id" value="'.$row['id'].'"/>'."\n"; echo '<input type="submit" name="commit" value="Update"/></div></form></td>'."\n"; + // Min faction echo '<td><form action="./index.php?do=npc_details&npc_id='.$id.'&sub=items" method="post"><div>'."\n"; + echo '<input type="text" name="min_faction" value="'.$row['min_faction'].'" size="3"/>'."\n"; echo '<input type="hidden" name="id" value="'.$row['id'].'"/>'."\n"; + echo '<input type="submit" name="commit" value="Faction"/></div></form></td>'."\n"; + // functions like change location + echo '<td><form action="./index.php?do=npc_details&npc_id='.$id.'&sub=items" method="post"><div>'."\n"; + echo '<input type="hidden" name="id" value="'.$row['id'].'"/>'."\n"; echo '<input type="submit" name="commit" value="Remove" /><br/>'."\n"; echo '<input type="submit" name="commit" value="Change Location" />'."\n"; echo '<select name="slot">'; Modified: www/webconsole-new/npcs/npcmain.php =================================================================== --- www/webconsole-new/npcs/npcmain.php 2022-10-21 20:00:14 UTC (rev 10014) +++ www/webconsole-new/npcs/npcmain.php 2023-12-05 22:36:31 UTC (rev 10015) @@ -21,6 +21,7 @@ echo '<hr/>'."\n"; echo '<a href="./index.php?do=listtrainer">List Trainers</a> <br/>'."\n"; echo '<a href="./index.php?do=listmerchant">List Merchants</a> <br/>'."\n"; + echo '<a href="./index.php?do=listnpcfactions">List NPC by faction</a> <br/>'."\n"; echo '<a href="./index.php?do=listspawn">List Spawn Rules</a> <br/>'."\n"; echo '<a href="./index.php?do=listloot">List Loot Rules</a> <br/>'."\n"; echo '<hr/>'; Modified: www/webconsole-new/quests/listquests.php =================================================================== --- www/webconsole-new/quests/listquests.php 2022-10-21 20:00:14 UTC (rev 10014) +++ www/webconsole-new/quests/listquests.php 2023-12-05 22:36:31 UTC (rev 10015) @@ -348,7 +348,7 @@ } else { // we want to skip this check only if an ID is specified, otherwise, we check for this to avoid the script parsing 20000 clackers and the like. - $query .=' AND racegender_id<22'; + $query .=' AND npc_impervious_ind = "Y"'; } if (isset($_GET['sort'])) { Added: www/webconsole-new/statistics/achievements_array.php =================================================================== --- www/webconsole-new/statistics/achievements_array.php (rev 0) +++ www/webconsole-new/statistics/achievements_array.php 2023-12-05 22:36:31 UTC (rev 10015) @@ -0,0 +1,171 @@ +<?php +$achievements = array( +'1' => array('category' => 'PlaneShift Loyal Fan','name' => 'Played Atomic Blue Release!', 'description' => 'This character was part of the first ever release of PlaneShift called Atomic Blue (before March 2003)!', 'count' => '0'), +'2' => array('category' => 'PlaneShift Loyal Fan','name' => 'Played Molecular Blue Release!', 'description' => 'This character was part of the second release of PlaneShift called Molecular Blue (before December 2004)!', 'count' => '0'), +'5' => array('category' => 'PlaneShift Loyal Fan','name' => 'Played Steel Blue Release!', 'description' => 'This character was part of the fourth release of PlaneShift called Steel Blue!(before December 2009)', 'count' => '0'), +'4' => array('category' => 'PlaneShift Loyal Fan','name' => 'Played Crystal Blue Late Release!', 'description' => 'This character was part of the third release of PlaneShift called Crystal Blue! (before March 2008)', 'count' => '0'), +'3' => array('category' => 'PlaneShift Loyal Fan','name' => 'Played Crystal Blue Early Release!', 'description' => 'This character was part of the early days of PlaneShift\'s third release of called Crystal Blue! (before July 2006)', 'count' => '0'), +'6' => array('category' => 'PlaneShift Loyal Fan','name' => 'Played Arcane Chrysalis Release!', 'description' => 'This character was part of the fifth release of PlaneShift called Arcane Chrysalis!', 'count' => '0'), +'7' => array('category' => 'PlaneShift Loyal Fan','name' => 'Played Unreal Blue Release!', 'description' => 'This character was part of the sixth release of PlaneShift called Unreal Blue!', 'count' => '0'), +'20' => array('category' => 'PlaneShift Loyal Fan','name' => 'Visitor of Hydlaa', 'description' => 'Visited Yliakum for more than 100 hours.', 'count' => '0'), +'21' => array('category' => 'PlaneShift Loyal Fan','name' => 'Citizen of Hydlaa', 'description' => 'Visited Yliakum for more than 300 hours.', 'count' => '0'), +'22' => array('category' => 'PlaneShift Loyal Fan','name' => 'Journeyman of Yliakum', 'description' => 'Visited Yliakum for more than 600 hours.', 'count' => '0'), +'23' => array('category' => 'PlaneShift Loyal Fan','name' => 'Explorer of Yliakum', 'description' => 'Visited Yliakum for more than 1000 hours.', 'count' => '0'), +'24' => array('category' => 'PlaneShift Loyal Fan','name' => 'Yliakum is my home!', 'description' => 'Visited Yliakum for more than 2500 hours.', 'count' => '0'), +'10' => array('category' => 'Quests','name' => 'Quest Novice', 'description' => 'Successfully completed 20 quests.', 'count' => '0'), +'11' => array('category' => 'Quests','name' => 'Quest Initiate', 'description' => 'Successfully completed 50 quests.', 'count' => '0'), +'12' => array('category' => 'Quests','name' => 'Quest Addict', 'description' => 'Successfully completed 100 quests.', 'count' => '0'), +'13' => array('category' => 'Quests','name' => 'Quest Veteran', 'description' => 'Successfully completed 200 quests.', 'count' => '0'), +'14' => array('category' => 'Quests','name' => 'Quest Master', 'description' => 'Successfully completed 300 quests.', 'count' => '0'), +'15' => array('category' => 'Quests','name' => 'Quest Grandmaster', 'description' => 'Successfully completed 400 quests.', 'count' => '0'), +'40' => array('category' => 'Magic','name' => 'Crystal Way Master', 'description' => 'Unveiled the secrets of the Crystal Way achieving Master status.', 'count' => '0'), +'41' => array('category' => 'Magic','name' => 'Azure Way Master', 'description' => 'Unveiled the secrets of the Azure Way achieving Master status.', 'count' => '0'), +'42' => array('category' => 'Magic','name' => 'Blue Way Master', 'description' => 'Unveiled the secrets of the Blue Way achieving Master status.', 'count' => '0'), +'43' => array('category' => 'Magic','name' => 'Red Way Master', 'description' => 'Unveiled the secrets of the Red Way achieving Master status.', 'count' => '0'), +'44' => array('category' => 'Magic','name' => 'Brown Way Master', 'description' => 'Unveiled the secrets of the Brown Way achieving Master status.', 'count' => '0'), +'45' => array('category' => 'Magic','name' => 'Dark Way Master', 'description' => 'Unveiled the secrets of the Dark Way achieving Master status.', 'count' => '0'), +'46' => array('category' => 'Magic','name' => 'It\'s magic!', 'description' => 'Obtain 5 different glyphs', 'count' => '0'), +'47' => array('category' => 'Magic','name' => 'Glyph Researcher', 'description' => 'Obtain 15 different glyphs', 'count' => '0'), +'48' => array('category' => 'Magic','name' => 'Glyph Collector', 'description' => 'Obtain 30 different glyphs', 'count' => '0'), +'184' => array('category' => 'Magic','name' => 'Glyph Eclectic', 'description' => 'Obtain 40 different glyphs', 'count' => '0'), +'60' => array('category' => 'Events','name' => 'Event Novice', 'description' => 'Attended 5 roleplay events.', 'count' => '0'), +'61' => array('category' => 'Events','name' => 'Event Initiate', 'description' => 'Attended 10 roleplay events.', 'count' => '0'), +'62' => array('category' => 'Events','name' => 'Event Addict', 'description' => 'Attended 25 roleplay events.', 'count' => '0'), +'63' => array('category' => 'Events','name' => 'Event Veteran', 'description' => 'Attended 50 roleplay events.', 'count' => '0'), +'64' => array('category' => 'Events','name' => 'Event Master', 'description' => 'Attended 100 roleplay events.', 'count' => '0'), +'50' => array('category' => 'Exploration','name' => 'Visited all four cities', 'description' => 'Has visited hydlaa, amdeneir, gugrontid and ojaveda.', 'count' => '0'), +'51' => array('category' => 'Exploration','name' => 'Eagle Bronzedoors', 'description' => 'Find the bronzedoors', 'count' => '0'), +'52' => array('category' => 'Exploration','name' => 'Afterlife', 'description' => 'Visit the Death Realm', 'count' => '0'), +'53' => array('category' => 'Exploration','name' => 'The next level', 'description' => 'Visit the Winch', 'count' => '0'), +'54' => array('category' => 'Exploration','name' => 'Metal alliance', 'description' => 'Speak with three blacksmiths', 'count' => '0'), +'55' => array('category' => 'Exploration','name' => 'Trader of goods', 'description' => 'Speak with ten merchants', 'count' => '0'), +'189' => array('category' => 'Exploration','name' => 'I buy it all!', 'description' => 'Speak with fifteen merchants', 'count' => '0'), +'56' => array('category' => 'Exploration','name' => 'Expensive discussions', 'description' => 'Speak with five bankers', 'count' => '0'), +'190' => array('category' => 'Exploration','name' => 'Money talks', 'description' => 'Speak with ten bankers', 'count' => '0'), +'57' => array('category' => 'Exploration','name' => 'Learning adept', 'description' => 'Speak with ten trainers', 'count' => '0'), +'191' => array('category' => 'Exploration','name' => 'Majestic listener', 'description' => 'Speak with twenty trainers', 'count' => '0'), +'58' => array('category' => 'Exploration','name' => 'To the sky!', 'description' => 'Have your first ride on pterosaur', 'count' => '0'), +'59' => array('category' => 'Exploration','name' => 'Speed friend', 'description' => 'Own a mount', 'count' => '0'), +'70' => array('category' => 'Exploration','name' => 'A new family member', 'description' => 'Own a familiar', 'count' => '0'), +'71' => array('category' => 'Exploration','name' => 'Gathering forces', 'description' => 'Create a guild', 'count' => '0'), +'72' => array('category' => 'Exploration','name' => 'Strength in numbers', 'description' => 'Have your guild reach 20 members', 'count' => '0'), +'188' => array('category' => 'Exploration','name' => 'No one missing', 'description' => 'Have your guild reach 50 members', 'count' => '0'), +'73' => array('category' => 'Exploration','name' => 'We are one', 'description' => 'Establish an alliance between two guilds with at least 20 members', 'count' => '0'), +'74' => array('category' => 'Factions','name' => 'Hero', 'description' => 'Achieve Hero title in Order of the Keen Edge', 'count' => '0'), +'75' => array('category' => 'Factions','name' => 'Titan', 'description' => 'Achieve Titan title in War Smiters', 'count' => '0'), +'76' => array('category' => 'Factions','name' => 'Ballista', 'description' => 'Achieve the Ballista title in Rangers of the Dome', 'count' => '0'), +'77' => array('category' => 'Factions','name' => 'Axe Grandmaster', 'description' => 'Achieve Axe Grandmaster in The Indomitables', 'count' => '0'), +'78' => array('category' => 'Factions','name' => 'Divine Magister', 'description' => 'Achieve Divine Magister in Azure Order', 'count' => '0'), +'79' => array('category' => 'Factions','name' => 'Supreme Thaumathurgist ', 'description' => 'Achieve Supreme Thaumathurgist in Blue Order', 'count' => '0'), +'80' => array('category' => 'Factions','name' => 'Illustrious Earth Warden', 'description' => 'Achieve Illustrious Earth Warden in Brown Order', 'count' => '0'), +'81' => array('category' => 'Factions','name' => 'Grand Master Theurgist', 'description' => 'Achieve Grand Master Theurgist in Crystal Order', 'count' => '0'), +'82' => array('category' => 'Factions','name' => 'Imperator', 'description' => 'Achieve Imperator in Dark Order', 'count' => '0'), +'83' => array('category' => 'Factions','name' => 'Mercurial Pyromancer', 'description' => 'Achieve Mercurial Pyromancer in Red Order', 'count' => '0'), +'84' => array('category' => 'Factions','name' => 'The Chosen', 'description' => 'Achieve The Chosen in Cabal of Whispers', 'count' => '0'), +'85' => array('category' => 'Factions','name' => 'Talad\'s Light', 'description' => 'Achieve Talad\'s Light in Conclave of the Glyphs', 'count' => '0'), +'86' => array('category' => 'Factions','name' => 'Laanx\'s Iron Hand', 'description' => 'Achieve Laanx\'s Iron Hand in Iron Hand', 'count' => '0'), +'87' => array('category' => 'Factions','name' => 'Supreme Void', 'description' => 'Achieve Supreme Void in Keepers of the Veil', 'count' => '0'), +'88' => array('category' => 'Factions','name' => 'Prophet', 'description' => 'Achieve Prophet in Seeds of Wildwood', 'count' => '0'), +'89' => array('category' => 'Factions','name' => 'Venerable Muse ', 'description' => 'Achieve Venerable Muse in Fine Arts and Craft', 'count' => '0'), +'90' => array('category' => 'Factions','name' => 'Civilization Forger', 'description' => 'Achieve Civilization Forger in Essential Trail', 'count' => '0'), +'91' => array('category' => 'Factions','name' => 'Finest Spoon', 'description' => 'Achieve Finest Spoon in Culinary Disciplines', 'count' => '0'), +'92' => array('category' => 'Factions','name' => 'Velvet Glove', 'description' => 'Achieve Velvet Glove in Weavers Tree', 'count' => '0'), +'93' => array('category' => 'Factions','name' => 'Savant', 'description' => 'Achieve Savant in Applied Knowledge', 'count' => '0'), +'94' => array('category' => 'Factions','name' => 'Prodigious Creator', 'description' => 'Achieve Prodigious Creator in The Eternal Forge', 'count' => '0'), +'95' => array('category' => 'Factions','name' => 'Nature\'s Chosen', 'description' => 'Achieve Nature\'s Chosen in The Caretakers', 'count' => '0'), +'96' => array('category' => 'Factions','name' => 'Octarchial Counsellor', 'description' => 'Achieve Octarchial Counsellor in Octarchy', 'count' => '0'), +'97' => array('category' => 'Factions','name' => 'Mastermind', 'description' => 'Achieve Mastermind in The 13 Wards', 'count' => '0'), +'98' => array('category' => 'Combat','name' => 'A special weapon', 'description' => 'Find a weapon with a modifier', 'count' => '0'), +'99' => array('category' => 'Combat','name' => 'A very special weapon', 'description' => 'Find a weapon with two modifiers', 'count' => '0'), +'100' => array('category' => 'Combat','name' => 'It has it all', 'description' => 'Find a weapon with three modifiers', 'count' => '0'), +'101' => array('category' => 'Combat','name' => 'Tigrain-Steel', 'description' => 'Find a weapon with Tigrain-Steel modifier', 'count' => '0'), +'102' => array('category' => 'Combat','name' => 'Masterwork', 'description' => 'Find a weapon with Masterwork modifier', 'count' => '0'), +'103' => array('category' => 'Combat','name' => 'Laanx\'s Wrath', 'description' => 'Find a weapon with of Laanx\'s Wrath modifier', 'count' => '0'), +'104' => array('category' => 'Combat','name' => 'All covered', 'description' => 'Equip 1 of each piece of armor', 'count' => '0'), +'105' => array('category' => 'Combat','name' => 'A nice set', 'description' => 'Equip three pieces of enchanted armor', 'count' => '0'), +'106' => array('category' => 'Combat','name' => 'A luxury set', 'description' => 'Equip six pieces of enchanted armor', 'count' => '0'), +'107' => array('category' => 'Combat','name' => 'Xalpalock Vanquisher', 'description' => 'Defeat the grand atrocity Xalpalock in the Stone Labyrinth', 'count' => '0'), +'108' => array('category' => 'Combat','name' => 'Stalg\'s Demise', 'description' => 'Defeat Stalg', 'count' => '0'), +'109' => array('category' => 'Combat','name' => 'Blackroot Deforester', 'description' => 'Defeat Blackroot', 'count' => '0'), +'192' => array('category' => 'Combat','name' => 'One less claw', 'description' => 'Defeat the last-one standing maulberlord One-Claw on his territory', 'count' => '0'), +'193' => array('category' => 'Combat','name' => 'Zlatac\'s Doom', 'description' => 'Defeat the crowed riverling Zlatac in his realm', 'count' => '0'), +'194' => array('category' => 'Combat','name' => 'Nefas Dur\'s Downfall', 'description' => 'Defeat Nefas Dur the necromancer in his refuge', 'count' => '0'), +'195' => array('category' => 'Combat','name' => 'Marangma\'s Bane', 'description' => 'Defeat the great spider Marangma in her lair', 'count' => '0'), +'196' => array('category' => 'Combat','name' => 'Toxic Clacker Chaser', 'description' => 'Track and defeat the Toxic Clacker in his domain', 'count' => '0'), +'110' => array('category' => 'Combat','name' => 'Melee', 'description' => 'TDB', 'count' => '0'), +'112' => array('category' => 'Sword','name' => 'Rare Sword', 'description' => 'Find a Sword with 0.1% rarity', 'count' => '0'), +'113' => array('category' => 'Sword','name' => 'Unique Sword', 'description' => 'Find a Sword with 0.01% rarity', 'count' => '0'), +'115' => array('category' => 'Knives','name' => 'Rare Knife', 'description' => 'Find a Knife or Dagger with 0.1% rarity', 'count' => '0'), +'116' => array('category' => 'Knives','name' => 'Unique Knife', 'description' => 'Find a Knife or Dagger with 0.01% rarity', 'count' => '0'), +'118' => array('category' => 'Axe','name' => 'Rare Axe', 'description' => 'Find an Axe with 0.1% rarity', 'count' => '0'), +'119' => array('category' => 'Axe','name' => 'Unique Axe', 'description' => 'Find an Axe with 0.01% rarity', 'count' => '0'), +'121' => array('category' => 'Mace','name' => 'Rare Mace', 'description' => 'Find a Mace or Hammer with 0.1% rarity', 'count' => '0'), +'122' => array('category' => 'Mace','name' => 'Unique Mace', 'description' => 'Find a Mace or Hammer with 0.01% rarity', 'count' => '0'), +'124' => array('category' => 'Polearm','name' => 'Rare Polearm', 'description' => 'Find a Polearm or Spear with 0.1% rarity', 'count' => '0'), +'125' => array('category' => 'Polearm','name' => 'Unique Polearm', 'description' => 'Find a Polearm or Spear with 0.01% rarity', 'count' => '0'), +'127' => array('category' => 'Ranged','name' => 'Rare Ranged', 'description' => 'Find a Bow or Crossbow with 0.1% rarity', 'count' => '0'), +'128' => array('category' => 'Ranged','name' => 'Unique Ranged', 'description' => 'Find a Bow or Crossbow with 0.01% rarity', 'count' => '0'), +'129' => array('category' => 'Armor','name' => 'Shield Handling', 'description' => 'TDB', 'count' => '0'), +'130' => array('category' => 'Armor','name' => 'Light Armor', 'description' => 'TDB', 'count' => '0'), +'131' => array('category' => 'Armor','name' => 'Medium Armor', 'description' => 'TDB', 'count' => '0'), +'132' => array('category' => 'Armor','name' => 'Heavy Armor', 'description' => 'TDB', 'count' => '0'), +'133' => array('category' => 'Crafting','name' => 'Trusted blacksmith', 'description' => 'Repair an armor with value of 50000 or more', 'count' => '0'), +'134' => array('category' => 'Crafting','name' => 'Trusted weaponsmith', 'description' => 'Repair a weapon with value of 50000 or more', 'count' => '0'), +'135' => array('category' => 'Crafting','name' => 'Starting your business', 'description' => 'Craft your first item', 'count' => '0'), +'136' => array('category' => 'Crafting','name' => 'Getting known', 'description' => 'Craft an item with 100 quality or more', 'count' => '0'), +'137' => array('category' => 'Crafting','name' => 'Precious items', 'description' => 'Craft an item with 200 quality or more', 'count' => '0'), +'138' => array('category' => 'Crafting','name' => 'Masterpiece', 'description' => 'Craft an item with 300 quality', 'count' => '0'), +'139' => array('category' => 'Mining','name' => 'Miner expertise', 'description' => 'Mine 3 different base ore', 'count' => '0'), +'197' => array('category' => 'Mining','name' => 'Land cartographer', 'description' => 'Mine 10 different ore', 'count' => '0'), +'141' => array('category' => 'Mining','name' => 'Here it is!', 'description' => 'Mine any ore of 150 quality', 'count' => '0'), +'142' => array('category' => 'Mining','name' => 'For the experts', 'description' => 'Mine any ore of 250 quality', 'count' => '0'), +'143' => array('category' => 'Mining','name' => 'The great coal finding', 'description' => 'Mine coal of 300 quality', 'count' => '0'), +'144' => array('category' => 'Mining','name' => 'Nature explorer', 'description' => 'Harvest 10 different plant types', 'count' => '0'), +'198' => array('category' => 'Mining','name' => 'A beautiful bouquet', 'description' => 'Harvest 20 different plant types', 'count' => '0'), +'145' => array('category' => 'Mining','name' => 'Quality matters', 'description' => 'Harvest any plant with 150 quality', 'count' => '0'), +'146' => array('category' => 'Mining','name' => 'Only the finest', 'description' => 'Harvest any plant with 250 quality', 'count' => '0'), +'147' => array('category' => 'Fishing','name' => 'It\'s a catch!', 'description' => 'Catch your first fish', 'count' => '0'), +'148' => array('category' => 'Fishing','name' => 'A new finding', 'description' => 'Catch 6 different types of fishes', 'count' => '0'), +'149' => array('category' => 'Fishing','name' => 'A happy belly', 'description' => 'Catch 12 different types of fishes', 'count' => '0'), +'199' => array('category' => 'Fishing','name' => 'Above average', 'description' => 'Catch any fish with 150 quality', 'count' => '0'), +'200' => array('category' => 'Fishing','name' => 'Exquisite taste', 'description' => 'Catch any fish with 250 quality', 'count' => '0'), +'150' => array('category' => 'Cooking','name' => 'Honey delicacy', 'description' => 'Cook a Fried Honey Nut Dough', 'count' => '0'), +'151' => array('category' => 'Cooking','name' => 'Sweet, sweet pie', 'description' => 'Cook a Fried Apple Hand Pie', 'count' => '0'), +'152' => array('category' => 'Cooking','name' => 'Succulent Stew', 'description' => 'Cook a Cheesy Succulent Stew', 'count' => '0'), +'153' => array('category' => 'Cooking','name' => 'Delicious fish soup', 'description' => 'Cook a Crayfish And Kartoffel Soup', 'count' => '0'), +'154' => array('category' => 'Alchemy','name' => 'Like a rock', 'description' => 'Create a Major Potion of Ynnwn\'s Toughness', 'count' => '0'), +'155' => array('category' => 'Alchemy','name' => 'Its raining crystals', 'description' => 'Create a Major Potion of Water Crystal and Air Affinity', 'count' => '0'), +'156' => array('category' => 'Alchemy','name' => 'Grounded and on fire!', 'description' => 'Create a Major Potion of Fire Dark and Earth Affinity', 'count' => '0'), +'157' => array('category' => 'Alchemy','name' => 'Spellcasting continuum', 'description' => 'Create a Greater Potion of Mana', 'count' => '0'), +'158' => array('category' => 'Alchemy','name' => 'Universal Panacea', 'description' => 'Create a Universal Panacea', 'count' => '0'), +'159' => array('category' => 'Alchemy','name' => 'Tasty minerals', 'description' => 'Craft a Big Blue Gold Steak', 'count' => '0'), +'160' => array('category' => 'Alchemy','name' => 'Gems delight', 'description' => 'Craft a Brassed Delightful Sauce', 'count' => '0'), +'161' => array('category' => 'Herbal','name' => 'Unexpected drink', 'description' => 'Brew a Nicinela Tea', 'count' => '0'), +'162' => array('category' => 'Herbal','name' => 'Benevolent mix', 'description' => 'Create a Red Mangrove Poultice', 'count' => '0'), +'163' => array('category' => 'Herbal','name' => 'Lavender solution', 'description' => 'Create a Glaboria Salve', 'count' => '0'), +'164' => array('category' => 'Brewing','name' => 'Cheers!', 'description' => 'Brew a Stout Beer Keg', 'count' => '0'), +'165' => array('category' => 'Brewing','name' => 'This one is on me!', 'description' => 'Brew a Terevan Cider Keg', 'count' => '0'), +'166' => array('category' => 'Brewing','name' => 'Party time', 'description' => 'Craft a Terevan Wine Barrel', 'count' => '0'), +'167' => array('category' => 'Blacksmith','name' => 'Magical gems', 'description' => 'Enchant a Diamond Crystal', 'count' => '0'), +'168' => array('category' => 'Blacksmith','name' => 'Enchanted Armor', 'description' => 'Enchant a Plate Mail Torso Armor', 'count' => '0'), +'169' => array('category' => 'Blacksmith','name' => 'Enchanted Weapon', 'description' => 'Enchant a Platinum Steel Claymore', 'count' => '0'), +'170' => array('category' => 'Blacksmith','name' => 'Protective magic', 'description' => 'Enchant a Radiant Shield', 'count' => '0'), +'171' => array('category' => 'Blacksmith','name' => 'Defending our cities', 'description' => 'Craft a Chain Mail Torso Armor', 'count' => '0'), +'172' => array('category' => 'Blacksmith','name' => 'For the glory!', 'description' => 'Craft a Steel Plate Helm', 'count' => '0'), +'173' => array('category' => 'Blacksmith','name' => 'Try to hit me now', 'description' => 'Craft a Wheel Shield', 'count' => '0'), +'174' => array('category' => 'Blacksmith','name' => 'Two handed perfection', 'description' => 'Craft a Claymore', 'count' => '0'), +'175' => array('category' => 'Blacksmith','name' => 'Double cut', 'description' => 'Craft a Reinforced Battle Axe', 'count' => '0'), +'176' => array('category' => 'Blacksmith','name' => 'To war!', 'description' => 'Craft a Platinum Steel Warhammer', 'count' => '0'), +'177' => array('category' => 'Blacksmith','name' => 'Slice and dice', 'description' => 'Craft a Platinum Steel Broadsword', 'count' => '0'), +'178' => array('category' => 'Blacksmith','name' => 'Shiny metals', 'description' => 'Craft a Gold Stock', 'count' => '0'), +'179' => array('category' => 'Blacksmith','name' => 'Lumium expert', 'description' => 'Craft a Lumium Stock', 'count' => '0'), +'180' => array('category' => 'Leatherworking','name' => 'Military fashion', 'description' => 'Craft a pair of Leather Gloves', 'count' => '0'), +'181' => array('category' => 'Leatherworking','name' => 'Confortable armor', 'description' => 'Craft a Leather Torso Armor', 'count' => '0'), +'182' => array('category' => 'BowMaking','name' => 'Grace and precision', 'description' => 'Craft a Dermorian Composite Bow', 'count' => '0'), +'183' => array('category' => 'BowMaking','name' => 'Power and strength', 'description' => 'Craft a Stonehammer Compound Bow', 'count' => '0'), +'185' => array('category' => 'Jewelry','name' => 'It\'s love!', 'description' => 'Craft a Golden Ring', 'count' => '0'), +'186' => array('category' => 'Jewelry','name' => 'A golden pair', 'description' => 'Craft Gold Ruby Bracers', 'count' => '0'), +'187' => array('category' => 'Jewelry','name' => 'A diamond is forever', 'description' => 'Craft a Platinum Diamond Necklace', 'count' => '0') + +); +?> \ No newline at end of file Property changes on: www/webconsole-new/statistics/achievements_array.php ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: www/webconsole-new/statistics/liststats_achievements.php =================================================================== --- www/webconsole-new/statistics/liststats_achievements.php (rev 0) +++ www/webconsole-new/statistics/liststats_achievements.php 2023-12-05 22:36:31 UTC (rev 10015) @@ -0,0 +1,70 @@ +<?php + +function liststats_achievements() +{ + include('./graphfunctions.php'); + include('achievements_array.php'); + if(checkaccess('statistics', 'read')) + { + $filter = 10; + $psversion = "psu"; + $filterSQL = ""; + if ( isset($_POST['filter']) && $_POST['filter']!="") { + $filter = escapeSqlString($_POST['filter']); + $filterSQL = " and DATE(c.creation_time) > '".$filter."'"; + } + + ?> + <form action="./index.php?do=liststats_achievements" method="post"><br/> + <input name="filter" value=""> + <?php + echo "Filter by character creation date (YYYY-MM-DD): <br/>"; + echo "<br/><input type=\"submit\" name=\"Filter\" value=\"Filter\"/></form>"; + if ($filterSQL != "") + echo '<p class="header">Achievements with filter: '.$filter.'</p>'; + else + echo '<p class="header">Achievements</p>'; + + $sql = "select achievement_id,count(achievement_id) c from character_achievements ca, characters c where ca.character_id = c.id ".$filterSQL." group by achievement_id order by achievement_id asc"; + $query = mysql_query2($sql); + + $localAchieve = $achievements; + + if(sqlNumRows($query) < 1) + { + echo '<p class="error">No data found! Try changing the filter</p>'; + } else + + // fill up the local achievemement array with the counts extracted from the db + while($result = fetchSqlAssoc($query)) + { + $id = $result['achievement_id']; + $count = $result['c']; + // set the count + $localAchieve[$id]['count'] = $count; + } + + echo "<table>"; + echo "<th>ID</th><th>Category</th><th>Name</th><th>Description</th><th>Count</th>"; + + foreach ($localAchieve as $id => $entry) + { + //$id = $entry['id']; + $category = $entry['category']; + $name = $entry['name']; + $description = $entry['description']; + $count = $entry['count']; + + echo "<tr><td>".$id."</td><td>".$category."</td><td>".$name."</td><td>".$description."</td><td>".$count."</td></tr>"; + } + echo "</table>"; + + + } + else + { + echo '<p class="error">You are not authorized to use these functions</p>'; + } +} + +?> Property changes on: www/webconsole-new/statistics/liststats_achievements.php ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Modified: www/webconsole-new/statistics/statsmain.php =================================================================== --- www/webconsole-new/statistics/statsmain.php 2022-10-21 20:00:14 UTC (rev 10014) +++ www/webconsole-new/statistics/statsmain.php 2023-12-05 22:36:31 UTC (rev 10015) @@ -23,6 +23,7 @@ echo '<a href="./index.php?do=liststats_charstats&groupid=14">Skill: Crystal Way</a> <br/>'; echo '<a href="./index.php?do=liststats_charstats&groupid=15">Skill: Melee</a> <br/>'; echo '<a href="./index.php?do=liststats_charstats&groupid=16">Char Money</a> <br/>'; + echo '<a href="./index.php?do=liststats_achievements">Achievements</a> <br/>'; echo '<a href="./index.php?do=listquests&mode=hiercount&countstatus=C">Completed Quests (* !!)</a> <br/>'; echo '<a href="./index.php?do=listquests&mode=hiercount&countstatus=A">Pending Quests(* !!)</a> <br/>'; Modified: www/webconsole-new/tribes/tribe_details.php =================================================================== --- www/webconsole-new/tribes/tribe_details.php 2022-10-21 20:00:14 UTC (rev 10014) +++ www/webconsole-new/tribes/tribe_details.php 2023-12-05 22:36:31 UTC (rev 10015) @@ -36,6 +36,7 @@ echo '<a href="'.$uri_string.'&sub=knowledge">Knowledge</a><br/>'."\n"; echo '<a href="'.$uri_string.'&sub=memories">Memories</a><br/>'."\n"; echo '<a href="'.$uri_string.'&sub=resources">Resources</a><br/>'."\n"; + echo '<a href="'.$uri_string.'&sub=recipes">Recipes</a><br/>'."\n"; echo '</div><div class="main_npc">'."\n"; if (isset($_GET['sub'])) { @@ -59,6 +60,9 @@ case 'resources': tribeResources(); break; + case 'recipes': + tribeRecipes(); + break; default: echo '<p class="error">Please Select an Action</p>'; } @@ -732,4 +736,191 @@ } } +$buildingList = array(); +$reservedSpots = array(); + +function tribeRecipes() +{ + // find main recipe + $id = escapeSqlString($_GET['tribe_id']); + $query = "SELECT * FROM tribes WHERE id='$id'"; + $result = mysql_query2($query); + $row = fetchSqlAssoc($result); + + $mainRecipe = $row['tribal_recipe']; + $query = "SELECT * FROM tribe_recipes WHERE id='$mainRecipe'"; + $result = mysql_query2($query); + $row2 = fetchSqlAssoc($result); + + echo '<form action="./index.php?do=tribe_details&sub=recipes&tribe_id='.$id.'" method="post">'; + $showall = false; + if (isset($_POST['showall'])) + { + $showall = true; + echo '<input type="checkbox" id="showall" name="showall" value="showall" checked><label for="vehicle1"> Show Verbose Info</label> '; + } + else + echo '<input type="checkbox" id="showall" name="showall" value="showall"><label for="vehicle1"> Show Verbose Info</label> '; + + echo '<input type="submit" name="commit" value="Refresh" /></form>'; + + echo "<h2>Main recipe:</h2> ".$row2['name']." (" .$row['tribal_recipe']. ") <br> "; + $algorithm = $row2['algorithm']; + echo $algorithm; + + echo "<h2>Recipes:</h2>"; + // we parse only algorithm as main tribe recipe cannot have any requirements + recurseParseRecipe($row2['name'],1, array(), $showall); + //recurseParseRecipe("Peaceful Gobble Evolve Tribe",1, array(), $showall); + + global $buildingList, $reservedSpots; + + // list reserved spots + echo "<br><br><h2>Reserved Spots:</h2>"; + foreach($reservedSpots as $spot) + { + echo $spot."<br>"; + } + + // list buildings + echo "<h2>Buildings:</h2>"; + foreach( $buildingList as $building) + { + if (in_array($building, $reservedSpots)) + echo $building."<br>"; + else + echo $building." <span style='color:red;'> -> ERROR NOT FOUND IN RESERVE SPOTS!</span><br>"; + } + echo "<br><br>"; + +} + +function recurseParseRecipe($recipe, $level, $alreadyVisited, $showall) +{ + global $buildingList, $reservedSpots; + + $prefix = str_repeat("...",$level); + + // stop recursion if we already visited + if (in_array($recipe, $alreadyVisited)) + { + if ($showall) + echo $prefix.$recipe." ALREADY VISITED, STOPPING. <br>"; + return; + } + // store all the recipe we already visited in this chain, so we can detect a recursion and stop. + $localArrayVisited = $alreadyVisited; + array_push($localArrayVisited,$recipe); + + echo $prefix."<b>".$recipe."</b><br>"; + $query = "SELECT * FROM tribe_recipes WHERE name='$recipe'"; + $result = mysql_query2($query); + + while ($row = fetchSqlAssoc($result)) + { + $algorithm = $row['algorithm']; + + // check all loadRecipe + $recipes = array(); + while (strlen($algorithm)) + { + $pos = stripos($algorithm,"loadRecipe"); + if ($pos == 0) + $algorithm=""; + else + { + // extract all loadRecipe + $newrecipe = containedText($algorithm, $pos); + $end = stripos($algorithm,")",$pos); + //echo $newrecipe. "<br>"; + // if recipe contains a comma, split it + $comma = stripos($newrecipe,","); + if ($comma) + { + $newrecipe = substr($newrecipe,0,$comma); + //echo "cleaned:". $newrecipe. "<br>"; + } + array_push($recipes, $newrecipe); + $algorithm = substr($algorithm, $end); + } + } + foreach ($recipes as $subrecipe) + { + //echo "SUB: ".$subrecipe; + recurseParseRecipe($subrecipe, $level+1, $localArrayVisited, $showall); + echo "<hr>"; + } + + //echo "...Requirements: ".$row['requirements']."<br>"; + $requirements = $row['requirements']; + $tokArray = explode(";", $requirements); + foreach ( $tokArray as $tokReq ) + { + // analyze if this requirement has children: tribesman, resource, building + $pos1 = stripos($tokReq,"tribesman("); + $pos2 = stripos($tokReq,"resource("); + $pos3 = stripos($tokReq,"building("); + if ($pos1 !== false || $pos2 !== false || $pos3 !== false) + { + echo $prefix."Requirement=$tokReq<br />"; + $validStr = containedText($tokReq, $pos); + $pieces = explode(",",$validStr); + if (count($pieces)>1) + { + // store building for later use + if ($pos3 !== false && !in_array($pieces[0],$buildingList)) + array_push($buildingList,$pieces[0]); + + //echo $prefix.$pieces[2]."<br>"; + recurseParseRecipe($pieces[2], $level+1, $localArrayVisited, $showall); + } + } else + { + if ($showall) + echo $prefix."Requirement=$tokReq<br />"; + } + } + + //echo "...Algorithm: ".$row['algorithm']."<br><br>"; + $tokArray = explode(";", $row['algorithm']); + foreach ( $tokArray as $tokAlg ) + { + // analyze if this algorithm has children: locateResource + $pos4 = stripos($tokAlg,"locateResource("); + if ($pos4 !== false) + { + echo $prefix."Algorithm=$tokAlg<br />"; + $validStr = containedText($tokAlg, $pos); + $pieces = explode(",",$validStr); + if (count($pieces)>1) + { + //echo $prefix.$pieces[2]."<br>"; + recurseParseRecipe($pieces[1], $level+1, $localArrayVisited, $showall); + } + } else + { + if ($showall) + echo $prefix."Algorithm=$tokAlg<br />"; + } + // analyze if this algorithm has children: reserveSpot + $pos4 = stripos($tokAlg,"reserveSpot("); + if ($pos4 !== false) + { + $spots = containedText($tokAlg, 0); + $tokArray = explode(",", $spots); + array_push($reservedSpots,$tokArray[3]); + } + } + } +} + +function containedText ($text, $offset) +{ + $start = stripos($text,"(",$offset); + $end = stripos($text,")",$offset); + $newrecipe = substr($text,$start+1,$end-$start-1); + return $newrecipe; +} + + ?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2024-04-17 20:09:40
|
Revision: 10018 http://sourceforge.net/p/planeshift/code/10018 Author: lpancallo Date: 2024-04-17 20:09:38 +0000 (Wed, 17 Apr 2024) Log Message: ----------- Added "present in book" info for crafting Added new merchant check page Added items sold under NPC -> merchant Modified Paths: -------------- www/webconsole-new/commonfunctions.php www/webconsole-new/crafting/patterns.php www/webconsole-new/index.php www/webconsole-new/npcs/npc_details.php www/webconsole-new/npcs/npcmain.php Added Paths: ----------- www/webconsole-new/npcs/checkmerchants.php Modified: www/webconsole-new/commonfunctions.php =================================================================== --- www/webconsole-new/commonfunctions.php 2024-04-04 20:38:48 UTC (rev 10017) +++ www/webconsole-new/commonfunctions.php 2024-04-17 20:09:38 UTC (rev 10018) @@ -516,6 +516,43 @@ printf("</SELECT>"); } +function SelectMultiSector($current_value,$select_name){ + + // this array needs to be in synch with SelectMultiSectorIDs() below + $areas = array("Amdeneir", "Bronze Doors (In and Out)", "Hydlaa (hydlaa, arena, jayose, winch, magicshop)","Ojaveda (Akk Central and East)","Gugrontid"); + + printf("<SELECT name=%s>", $select_name); + + for ($i=0; $i<sizeof($areas);$i++) { + if ($areas[$i] == $current_value) { + printf("<OPTION selected value=\"%s\">%s</OPTION>", $i, $areas[$i]); + } else { + printf("<OPTION value=\"%s\">%s</OPTION>", $i, $areas[$i]); + } + } + printf("</SELECT>"); +} + +function SelectMultiSectorIDs($selected_id) { + + // Amdeneir + if ($selected_id == 0) + return "83"; + // Bronze Doors + else if ($selected_id == 1) + return "66,67"; + // hydlaa area (hydlaa 15, laanx 41, 42,43,44, hyjayose01-02 50,51, hydlaa_jayose 49, magicshop in/out 38,39, hydlaa_winch 72 + else if ($selected_id == 2) + return "15, 41, 42, 43, 44, 50, 51, 49, 38, 39, 72"; + // Ojaveda + else if ($selected_id == 3) + return "18,19"; + // Gugrontid + else if ($selected_id == 4) + return "77"; +} + + function LocationToString($id) { switch ($id) @@ -561,10 +598,10 @@ $data; if ($area=='hydlaa_plaza') { $data[0] = '(loc_sector_id=15 or loc_sector_id=52 or loc_sector_id=41 or loc_sector_id=42)'; - $data[1] = 127000; - $data[2] = -381000; - $data[3] = 1; - $data[4] = 1; + $data[1] = 176255; + $data[2] = -340294; + $data[3] = 2; + $data[4] = 2; $data[5] = array('hydlaa_plaza', 'tavern_de_kadel', 'laanxentrance','laanxmain'); } else if ($area=='hydlaa_jayose') { $data[0] = '(loc_sector_id=49 or loc_sector_id=40)'; Modified: www/webconsole-new/crafting/patterns.php =================================================================== --- www/webconsole-new/crafting/patterns.php 2024-04-04 20:38:48 UTC (rev 10017) +++ www/webconsole-new/crafting/patterns.php 2024-04-17 20:09:38 UTC (rev 10018) @@ -101,9 +101,9 @@ echo '<p>Showing transformation and combinations without ID, to show them, click <a href="./index.php?do=editpattern&id='.$pattern_id.'&showids">here</a></p>'."\n"; } echo '<p class="bold">Available Transforms</p>'."\n"; - $query = "SELECT t.id, t.process_id, p.name, t.result_id, i.name AS result_name, c.name AS result_cat, c.category_id AS result_cat_id, t.result_qty, t.item_id, ii.name AS item_name, cc.name AS item_cat, cc.category_id AS item_cat_id, t.item_qty, t.trans_points, t.penalty_pct, t.description FROM trade_transformations AS t LEFT JOIN item_stats AS i ON i.id=t.result_id LEFT JOIN item_stats AS ii ON ii.id=t.item_id LEFT JOIN trade_processes AS p ON t.process_id=p.process_id LEFT JOIN item_categories AS c ON i.category_id=c.category_id LEFT JOIN item_categories AS cc ON ii.category_id=cc.category_id WHERE pattern_id='$pattern_id' GROUP BY id ORDER BY p.name, ii.name, i.name"; + $query = "SELECT t.id, t.process_id, p.name, t.result_id, i.name AS result_name, c.name AS result_cat, c.category_id AS result_cat_id, t.result_qty, t.item_id, ii.name AS item_name, cc.name AS item_cat, cc.category_id AS item_cat_id, t.item_qty, t.trans_points, t.penalty_pct, t.description, t.present_in_book FROM trade_transformations AS t LEFT JOIN item_stats AS i ON i.id=t.result_id LEFT JOIN item_stats AS ii ON ii.id=t.item_id LEFT JOIN trade_processes AS p ON t.process_id=p.process_id LEFT JOIN item_categories AS c ON i.category_id=c.category_id LEFT JOIN item_categories AS cc ON ii.category_id=cc.category_id WHERE pattern_id='$pattern_id' GROUP BY id ORDER BY p.name, ii.name, i.name"; $result = mysql_query2($query); - echo '<table><tr>'.(isset($_GET['showids']) ? '<th>ID</th>' : '').'<th colspan="2">Source Item</th><th>Category</th><th>Process</th><th colspan="2">Result Item</th><th>Category</th><th>Time</th><th>Result Q</th>'; + echo '<table><tr>'.(isset($_GET['showids']) ? '<th>ID</th>' : '').'<th>Qty</th><th>Source Item</th><th>Category</th><th>Process</th><th>Qty</th><th>Result Item</th><th>Category</th><th>Time</th><th>Result Q</th><th>Shows In Book</th>'; if (checkaccess('crafting', 'edit')) { echo '<th>Actions</th>'; @@ -137,6 +137,7 @@ echo '<td>'.htmlentities($row['result_cat']).'</td>'; echo '<td>'.htmlentities($row['trans_points']).'</td>'; echo '<td>'.htmlentities($row['penalty_pct']).'</td>'; + echo '<td>'.htmlentities($row['present_in_book']).'</td>'; if (checkaccess('crafting', 'edit')) { echo '<td><a href="./index.php?do=transform&id='.$row['id'].'">Edit</a></td>'; @@ -145,6 +146,10 @@ } echo '</table>'."\n"; echo '<a href="./index.php?do=createtransform&id='.$pattern_id.'">Create new transform for this pattern </a><br />'."\n"; + + + // >>>>>>>>>>>>>> COMBINATIONS <<<<<<<<<<<<<<<<<<<< + echo '<p class="bold">Available Combinations</p>'."\n"; $alt = false; $item = -1; Modified: www/webconsole-new/index.php =================================================================== --- www/webconsole-new/index.php 2024-04-04 20:38:48 UTC (rev 10017) +++ www/webconsole-new/index.php 2024-04-17 20:09:38 UTC (rev 10018) @@ -425,6 +425,12 @@ npcmain(); checktrainers(); break; + case 'checkmerchants': + include('./npcs/npcmain.php'); + include('./npcs/checkmerchants.php'); + npcmain(); + checkmerchants(); + break; case 'checknpcchar': include('./npcs/npcmain.php'); include('./npcs/checknpcchar.php'); Added: www/webconsole-new/npcs/checkmerchants.php =================================================================== --- www/webconsole-new/npcs/checkmerchants.php (rev 0) +++ www/webconsole-new/npcs/checkmerchants.php 2024-04-17 20:09:38 UTC (rev 10018) @@ -0,0 +1,86 @@ +<?php + +/** +* Notice that on any SVN database, this page will likely not find any merchants, since all NPCrooms are explicitly excluded from the query. +*/ + +function checkmerchants() +{ + if(checkaccess('npcs', 'read')) + { + echo '<br/>Choose one : <br/>'; + echo '<table border = 1><tr><td>'; + echo 'Check Merchants by Category (All) <form action="./index.php?do=checkmerchants&sub=merchants" method="post">'; + echo '<input type="submit" value="Search" /></form></td>'; + //echo "<br/> OR <br/><br/>"; + echo '<td>Check Merchant Categories by Sectors<br/><form action="./index.php?do=checkmerchants&sub=sectors" method="post">'; + SelectMultiSector("","multisector"); + echo '<input type="submit" value="Search" />'; + echo '</form></td></tr></table>'; + //echo '<a href="index.php?do=checkmerchants&sub=sectors">Check Categories by Sectors</a><br/>'; + + // need to know what to do + if (!isset($_GET['sub']) || $_GET['sub'] == "") + return; + + $mode = $_GET['sub']; + + // Check Merchants by Category (All) + if ($mode=="merchants") + { + echo '<p class="header">Check Merchants by Category (All)</p>'; + + // For each category it tells you where it's bought + $sql = 'select cname.name as catname, cat.player_id, ch.name as charname, ch.lastname, sec.name as sector from item_categories cname left join merchant_item_categories cat on cat.category_id=cname.category_id left join characters ch on cat.player_id=ch.id left join sectors sec on sec.id=ch.loc_sector_id order by cname.name, sec.name'; + $query = mysql_query2($sql); + + echo '<table><tr><th>Item Category Name</th><th>Sector</th><th>NPC</th></tr>'; + $color = 'b'; + while($row = fetchSqlAssoc($query)) + { + // skip NPCRoom + if ($row['sector'] == "NPCroom") + continue; + $color = ($color == 'a' ? 'b' : 'a'); + $status = (empty($status) ? 'OK' : $status); + echo '<tr class="color_'.$color.'"><td>'.$row['catname'].'</td><td>'.$row['sector'].'</td><td><a href="./index.php?do=npc_details&sub=main&npc_id='.$row['player_id'].'">'.$row['charname'].' '.$row['lastname'].'</a></td></tr>'; + } + echo '</table>'; + } + + // Check Merchant Categories by Sectors + if ($mode=="sectors") + { + echo '<p class="header">Check Merchant Categories by Sectors </p>'; + + $multisector = $_POST['multisector']; + $sql = 'select ic.name as catname,t.name as charname, t.lastname, t.player_id, t.sname from item_categories ic left join ('; + $sql = $sql. 'select cat.category_id,ch.name, ch.lastname, ch.id as player_id, s.name as sname from merchant_item_categories cat, characters ch, sectors s where cat.player_id=ch.id '; + $sql = $sql. 'and s.id = ch.loc_sector_id and ch.loc_sector_id IN ('.SelectMultiSectorIDs($multisector).')'; + $sql = $sql. ') as t on ic.category_id = t.category_id order by ic.name, sname'; + $query = mysql_query2($sql); + + echo '<table><tr><th>Item Category Name</th><th>NPC</th><th>Sector</th></tr>'; + $color = 'b'; + while($row = fetchSqlAssoc($query)) + { + // skip NPCRoom + if ($row['sname'] == "NPCroom") + continue; + $color = ($color == 'a' ? 'b' : 'a'); + $status = (empty($status) ? 'OK' : $status); + if ($row['sname'] == "") + echo '<tr class="color_'.$color.'"><td>'.$row['catname'].'</td><td>MISSING</td><td>'.$row['sname'].'</td></tr>'; + else + echo '<tr class="color_'.$color.'"><td>'.$row['catname'].'</td><td><a href="./index.php?do=npc_details&sub=main&npc_id='.$row['player_id'].'">'.$row['charname'].' '.$row['lastname'].'</a></td><td>'.$row['sname'].'</td></tr>'; + } + echo '</table>'; + + } + } + else + { + echo '<p class="error">You are not authorized to use these functions</p>'; + } +} +?> \ No newline at end of file Property changes on: www/webconsole-new/npcs/checkmerchants.php ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Modified: www/webconsole-new/npcs/npc_details.php =================================================================== --- www/webconsole-new/npcs/npc_details.php 2024-04-04 20:38:48 UTC (rev 10017) +++ www/webconsole-new/npcs/npc_details.php 2024-04-17 20:09:38 UTC (rev 10018) @@ -1060,7 +1060,17 @@ echo 'receives its merchant status from that master.</p>'; return; } - $query = "SELECT m.category_id, c.name FROM merchant_item_categories AS m LEFT JOIN item_categories AS c ON m.category_id = c.category_id WHERE m.player_id = '$id'"; + + // OLD QUERY with only categories + //$query = "SELECT m.category_id, c.name FROM merchant_item_categories AS m LEFT JOIN item_categories AS c ON m.category_id = c.category_id WHERE m.player_id = '$id'"; + + // NEW QUERY with categories and sold items + $query = "SELECT t1.category_id, t1.name as catname, t2.name itemname from "; + $query = $query . "(SELECT m.category_id, c.name FROM merchant_item_categories AS m, item_categories AS c WHERE m.category_id = c.category_id and m.player_id = '".$id ."') as t1"; + $query = $query . " LEFT JOIN ("; + $query = $query . " select istats.name, istats.category_id from item_instances as ii , item_stats as istats where ii.item_stats_id_standard = istats.id and ii.location_in_parent>15 and ii.char_id_owner = '".$id ."')"; + $query = $query . " as t2 ON t1.category_id = t2.category_id order by t1.category_id"; + $result = mysql_query2($query); if (sqlNumRows($result) == 0) { @@ -1068,16 +1078,37 @@ } else { - echo '<table border="1"><tr><th>Category</th><th>Actions</th></tr>'; + echo '<table border="1"><tr><th>Category</th><th>Actions</th><th>Sold Items</th></tr>'; + $currCat = ""; + $isTROpen = false; while ($row = fetchSqlAssoc($result)) { - echo '<tr>'; - echo '<td>'.$row['name'].'</td>'; - echo '<td><form action="./index.php?do=npc_details&npc_id='.$id.'&sub=merchant" method="post">'; - echo '<input type="hidden" name="category_id" value="'.$row['category_id'].'" />'; - echo '<input type="submit" name="commit" value="Remove" />'; - echo '</form></td>'; - echo '</tr>'; + + if ($currCat != $row['catname']) + { + // close previous TR + if ($isTROpen) + echo '</td></tr>'; + + // print category + echo '<tr>'; + echo '<td>'.$row['catname'].'</td>'; + echo '<td><form action="./index.php?do=npc_details&npc_id='.$id.'&sub=merchant" method="post">'; + echo '<input type="hidden" name="category_id" value="'.$row['category_id'].'" />'; + echo '<input type="submit" name="commit" value="Remove" />'; + echo '</form></td><td>'; + $isTROpen = true; + } + else + { + // print item if not null + if ($row['itemname'] != "") + { + echo $row['itemname']. "<br/>"; + } + } + $currCat = $row['catname']; + //echo '</tr>'; } echo '</table>'; } @@ -1106,13 +1137,74 @@ ka_detail(); } +function npc_badtext() +{ + if (checkaccess('npcs', 'read')) { + // we need an area to list our details. + if (!isset($_GET['area'])) + { + echo '<p class="error">No Area selected.</p>'; + return; + } + $area = escapeSqlString($_GET['area']); + + $datefilter = $_POST['datefilter']; + + echo '<form action="./index.php?do=npc_details&npc_id='.$_GET['npc_id'].'&sub=badtext&area='.$_GET['area'].'" method="post"><p>Date filter (YYYY-MM-DD): '; + echo "<input name='datefilter' value='".$datefilter."'>"; + echo '<input type="submit" name="commit" value="Search"/>'; + echo '</p></form>'; + + if (!isset($_POST['datefilter']) || $_POST['datefilter']=='') + { + echo '<p class="error">Please add a date filter.</p>'; + return; + } + + echo "<H2>Recognized text that NPC cound't answer to</H2>"; + + $query = "select triggertext,count(triggertext) as c from npc_bad_text where npc='".$area."' and occurred>'".$datefilter."' group by triggertext HAVING COUNT(triggertext) > 1 order by c desc"; + $badtext_result = mysql_query2($query); + echo '<table border="1"><tr><th>Trigger Text</th><th>Count</th></tr>'; + if (sqlNumRows($badtext_result) > 0) + { + while ($row = fetchSqlAssoc($badtext_result)) + { + echo '<tr><td>'.$row['c'].'</td>'; + echo '<td>'.$row['triggertext'].'</td></tr>'; + } + echo '</table>'; + } + + echo "<H2>Text with unknown words in it</H2>"; + + $query = "select badtext,count(badtext) as c from npc_bad_text where npc='".$area."' and occurred>'".$datefilter."' and triggertext='(no known words)' group by badtext HAVING COUNT(badtext) > 1 order by c desc"; + $badtext_result = mysql_query2($query); + echo '<table border="1"><tr><th>Trigger Text</th><th>Count</th></tr>'; + if (sqlNumRows($badtext_result) > 0) + { + while ($row = fetchSqlAssoc($badtext_result)) + { + echo '<tr><td>'.$row['c'].'</td>'; + echo '<td>'.$row['badtext'].'</td></tr>'; + } + echo '</table>'; + } + + } else { + echo '<p class="error">You are not authorized to view NPC details</p>'; + } + +} + function npcdetails(){ - if (checkaccess('npcs', 'read')){ + if (checkaccess('npcs', 'read')) { $uri_string = './index.php?do=npc_details'; // we will use this to tell the display functions if the NPC is using a master or not. $masterId = -1; + $datefilter = ""; if (isset($_GET['npc_id'])){ - if (is_numeric($_GET['npc_id'])){ + if (is_numeric($_GET['npc_id'])) { $id = escapeSqlString($_GET['npc_id']); $query = "SELECT name, lastname, npc_master_id, character_type FROM characters WHERE id='$id'"; $result = mysql_query2($query); @@ -1135,6 +1227,10 @@ { $masterId = $row['npc_master_id']; } + + if (isset($_GET['datefilter'])){ + $datefilter = $_GET['datefilter']; + } } } echo '<div class="menu_npc">'; @@ -1155,6 +1251,7 @@ echo '<a href="'.$uri_string.'&sub=merchant">merchant</a><br/>'; // set area so the function called can use ka_trigger.php->ka_detail(). echo '<a href="'.$uri_string.'&sub=specific&area='.$fullname.'">Specific KA\'s</a><br/>'; + echo '<a href="'.$uri_string.'&sub=badtext&area='.$fullname.'&datefilter='.$datefilter.'">MissedAnswers</a><br/>'; } echo '</div><div class="main_npc">'; if (isset($_GET['sub'])){ @@ -1189,6 +1286,9 @@ case 'specific': npc_specific(); break; + case 'badtext': + npc_badtext(); + break; default: echo '<p class="error">Please Select an Action</p>'; } Modified: www/webconsole-new/npcs/npcmain.php =================================================================== --- www/webconsole-new/npcs/npcmain.php 2024-04-04 20:38:48 UTC (rev 10017) +++ www/webconsole-new/npcs/npcmain.php 2024-04-17 20:09:38 UTC (rev 10018) @@ -34,6 +34,7 @@ echo '<a href="./index.php?do=checknpcchar">List NPCs and Base Dialog</a> <br/>'."\n"; echo '<a href="./index.php?do=checknpcloaded">Check NPC Loaded</a> <br/>'."\n"; echo '<a href="./index.php?do=checktrainers">Check NPC Trainers</a> <br/>'."\n"; + echo '<a href="./index.php?do=checkmerchants">Check NPC Merchants</a> <br/>'."\n"; echo '<hr/><a href="./index.php">Return to main page.</a>'."\n"; echo '</div><div class="main">'."\n"; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2024-05-02 21:35:24
|
Revision: 10020 http://sourceforge.net/p/planeshift/code/10020 Author: lpancallo Date: 2024-05-02 21:35:22 +0000 (Thu, 02 May 2024) Log Message: ----------- KA triggers are now separated between NPC specific and not added search in book page under items listed access rules in the first page Modified Paths: -------------- www/webconsole-new/commonfunctions.php www/webconsole-new/index.php www/webconsole-new/items/itemmain.php www/webconsole-new/npcs/ka_trigger.php Modified: www/webconsole-new/commonfunctions.php =================================================================== --- www/webconsole-new/commonfunctions.php 2024-04-17 20:10:54 UTC (rev 10019) +++ www/webconsole-new/commonfunctions.php 2024-05-02 21:35:22 UTC (rev 10020) @@ -176,7 +176,7 @@ /*CacheAccess() reads the database, and caches the appropriate rights*/ function CacheAccess(){ - if (!isset($_SESSION['access']) && ($_SESSION['security_level'] != 50)){ + if (!isset($_SESSION['access'])){ $query = 'SELECT objecttype, access FROM wc_accessrules WHERE security_level='.$_SESSION['security_level']; $result = mysql_query2($query); while($row = fetchSqlAssoc($result)){ @@ -220,7 +220,40 @@ return 0; } +function PrintAccessRules() +{ + $security = $_SESSION['security_level']; + // admin access anything + if ($_SESSION['security_level'] == 50) + { + echo "You have admin rights. You can access anything."; + return; + } + + if (!isset($_SESSION['access']) || count($_SESSION['access']) < 1) + echo "You do not have access to anything here. Please logout."; + else + { + echo "These are your access priviledges: <br/>"; + foreach ($_SESSION['access'] as $access => $value) + { + $readValue = "unknown"; + if ($value == 1) + $readValue = 'read'; + else if ($value == 2) + $readValue = 'edit'; + else if ($value == 3) + $readValue = 'create'; + else if ($value == 4) + $readValue = 'delete'; + + echo $access . " : ". $readValue . "<br/>"; + } + } +} + + /*PrepSelect() Returns the result link appropriate for the table requested*/ function PrepSelect($a){ $type = strtolower($a); @@ -332,7 +365,7 @@ $sub++; $jsarray = $sub >= 0 ? $varname . '{' : '{'; - while (list($key, $value) = each($array)) + foreach ($array as $key => $value) { $jskey = '"' . $key . '":'; Modified: www/webconsole-new/index.php =================================================================== --- www/webconsole-new/index.php 2024-04-17 20:10:54 UTC (rev 10019) +++ www/webconsole-new/index.php 2024-05-02 21:35:22 UTC (rev 10020) @@ -163,6 +163,12 @@ itemmain(); createitem(); break; + case 'searchbooks': + include('./items/itemmain.php'); + include('./items/searchbooks.php'); + itemmain(); + searchbooks(); + break; case 'editcategory': include('./items/itemmain.php'); include('./items/editcategory.php'); @@ -1116,7 +1122,7 @@ } else { - exec("ps -eo user,etime,%mem,comm|grep psserver", $info); + exec("ps -eo user,etime,%mem,comm|grep PSUnreal", $info); if (count($info) == 0) { echo '<p class="error">ERROR: psserver does not appear to be running</p>'."\n"; @@ -1128,19 +1134,7 @@ echo $i."<br/>\n"; } } - echo "NPC Client Information:<br/>\n"; - unset($info); - exec("ps -eo user,etime,%mem,comm|grep psnpcclient", $info); - if (count($info) == 0) - { - echo '<p class="error">ERROR: npcclient does not appear to be running</p>'."\n"; - } - else - { - foreach ($info as $i){ - echo $i."<br/>\n"; - } - } + echo "Server Load:<br/>\n"; echo exec("uptime")."<br/>\n"; echo "Mysql Status:<br/>\n"; @@ -1147,6 +1141,10 @@ //Attempts to get mysql status using the current db data echo exec("mysqladmin status -u ".$db_username." -p".$db_password." --host ".$db_hostname)."<br/>\n"; } + + // display current access level + echo "<br/><br/>You current access level is : ".$_SESSION['security_level']. "<br/>"; + PrintAccessRules(); } echo "</div><hr/>This is Debugging Information Only: ".($_SESSION['totalq']); unset($_SESSION['totalq']); Modified: www/webconsole-new/items/itemmain.php =================================================================== --- www/webconsole-new/items/itemmain.php 2024-04-17 20:10:54 UTC (rev 10019) +++ www/webconsole-new/items/itemmain.php 2024-05-02 21:35:22 UTC (rev 10020) @@ -13,6 +13,9 @@ echo '<a href="./index.php?do=createitem">Create Item</a> <br/>'."\n"; echo '<a href="./index.php?do=editcategory">Edit Categories</a> <br/>'."\n"; } + echo "<hr/>"; + echo '<a href="./index.php?do=searchbooks">Search Books</a> <br/>'."\n"; + echo "<hr/>"; echo '<a href="./index.php">Return to main page.</a>'."\n"; echo '</div><div class="main">'."\n"; } @@ -20,5 +23,6 @@ { echo '<p class="error">You are not authorized to use these functions</p>'; } + } ?> Modified: www/webconsole-new/npcs/ka_trigger.php =================================================================== --- www/webconsole-new/npcs/ka_trigger.php 2024-04-17 20:10:54 UTC (rev 10019) +++ www/webconsole-new/npcs/ka_trigger.php 2024-05-02 21:35:22 UTC (rev 10020) @@ -43,34 +43,79 @@ } // notice that union only merges distinct entities, so if both selects have "general" as a result, only 1 is returned. - $query = "(SELECT DISTINCT area FROM npc_triggers) UNION (SELECT DISTINCT area FROM npc_knowledge_areas) ORDER BY area"; + $query = "select DISTINCT (ka.area), c.name from "; + $query = $query . "((SELECT DISTINCT area FROM npc_triggers) UNION (SELECT DISTINCT area FROM npc_knowledge_areas)) as ka left join characters c on area=CONCAT(c.name,' ',c.lastname) order by area"; $result = mysql_query2($query); + + // separate NPC specific and not NPC specific ones + $npcKA = array(); + $genericKA = array(); + while ($row = fetchSqlAssoc($result)) + { + if ($row['name'] != '') + array_push($npcKA,$row['area']); + else + array_push($genericKA,$row['area']); + } + + echo "NPC KA found: ".count($npcKA).", Generic KA found: ". count($genericKA) . "<br/><br/>"; + // table to have two columns + echo '<table><tr><td style="vertical-align:top">'; + // first left table echo '<table border="1">'; - echo '<tr><th>KA</th>'; + echo '<tr><th>NPC KA</th>'; if (checkaccess('npcs', 'edit')) { echo '<th>Action</th>'; } echo '</tr>'."\n"; - while ($row = fetchSqlAssoc($result)) + foreach ($npcKA as $oneKA) { - if ($row['area'] != '') + if ($oneKA != '') { echo '<tr><td>'; - echo '<a href="./index.php?do=ka_detail&area='.htmlentities($row['area']).'">'.$row['area'].'</a>'; + echo '<a href="./index.php?do=ka_detail&area='.htmlentities($oneKA).'">'.$oneKA.'</a>'; echo '</td>'; if (checkaccess('npcs', 'edit')) { echo '<td><form action="./index.php?do=ka_trigg" method="post"><div>'; - echo '<input type="hidden" name="area" value="'.htmlentities($row['area']).'" />'; + echo '<input type="hidden" name="area" value="'.htmlentities($oneKA).'" />'; echo '<input type="submit" name="commit" value="Delete KA" /></div></form></td>'; } echo '</tr>'."\n"; } } - echo '</table>'."\n"; + echo '</table></td>'."\n"; + + // second right table + echo '<td style="vertical-align:top"><table border="1">'; + echo '<tr><th>Generic KA</th>'; if (checkaccess('npcs', 'edit')) { + echo '<th>Action</th>'; + } + echo '</tr>'."\n"; + foreach ($genericKA as $oneKA) + { + if ($oneKA != '') + { + echo '<tr><td>'; + echo '<a href="./index.php?do=ka_detail&area='.htmlentities($oneKA).'">'.$oneKA.'</a>'; + echo '</td>'; + if (checkaccess('npcs', 'edit')) + { + echo '<td><form action="./index.php?do=ka_trigg" method="post"><div>'; + echo '<input type="hidden" name="area" value="'.htmlentities($oneKA).'" />'; + echo '<input type="submit" name="commit" value="Delete KA" /></div></form></td>'; + } + echo '</tr>'."\n"; + } + } + echo '</table></td></tr></table>'."\n"; + + + if (checkaccess('npcs', 'edit')) + { echo '<p>Create New Trigger:</p>'."\n"; echo '<form action="./index.php?do=ka_trigg" method="post">'."\n"; echo '<table border="1">'."\n"; @@ -141,7 +186,7 @@ mysql_query2($query); echo '<p class="error">Trigger created.</p>'; } - + // make a url for all the forms and self-links to use, remove "trigger" if it is in there, the only links that want that set it themselves. // This also facilitates the use of this page by NPC->List personal KAs $urlParts = array(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2024-08-30 21:53:18
|
Revision: 10022 http://sourceforge.net/p/planeshift/code/10022 Author: lpancallo Date: 2024-08-30 21:53:16 +0000 (Fri, 30 Aug 2024) Log Message: ----------- Added listRandomizedItems to see all loot skin variations fix to npc detail Modified Paths: -------------- www/webconsole-new/index.php www/webconsole-new/npcs/npc_details.php www/webconsole-new/rules/lootmodifiers.php www/webconsole-new/rules/rulesmain.php Modified: www/webconsole-new/index.php =================================================================== --- www/webconsole-new/index.php 2024-05-05 22:05:21 UTC (rev 10021) +++ www/webconsole-new/index.php 2024-08-30 21:53:16 UTC (rev 10022) @@ -715,6 +715,12 @@ rulesmain(); editLootModifiers(); break; + case 'listrandomizeditems': + include('./rules/rulesmain.php'); + include('./rules/lootmodifiers.php'); + rulesmain(); + listRandomizedItems(); + break; case 'xmlscriptvalidator': include('./rules/rulesmain.php'); include('./rules/XMLScriptValidator.php'); Modified: www/webconsole-new/npcs/npc_details.php =================================================================== --- www/webconsole-new/npcs/npc_details.php 2024-05-05 22:05:21 UTC (rev 10021) +++ www/webconsole-new/npcs/npc_details.php 2024-08-30 21:53:16 UTC (rev 10022) @@ -452,7 +452,7 @@ $result = mysql_query2($query); $row = fetchSqlAssoc($result); $race = $row['racegender_id']; - $query = "SELECT id, location, name, cstr_mesh, cstr_material, cstr_texture, shader FROM traits WHERE race_id='$race'"; + $query = "SELECT id, location, next_trait, name, cstr_mesh, cstr_material, cstr_texture, shader FROM traits WHERE race_id='$race'"; $Traits_Result = mysql_query2($query); while ($row = fetchSqlAssoc($Traits_Result)){ $t_id = $row['id']; @@ -486,7 +486,11 @@ sqlSeek($Traits_Result, 0); echo '<form action="./index.php?do=npc_details&npc_id='.$id.'&sub=traits" method="post"><select name="trait_id">'; while ($row = fetchSqlAssoc($Traits_Result)){ - echo '<option value="'.$row['id'].'">Name='.$row['name'].' Location='.$row['location']; + // hardcoded HEAD mesh to find the top of the chain == 14 + if ($row['cstr_mesh'] == 14) + echo '<option value="'.$row['id'].'">Name='.$row['name'].' Location='.$row['location'].' (MAIN)'; + else + echo '<option value="'.$row['id'].'">Name='.$row['name'].' Location='.$row['location']; echo '</option>'; } echo '</select><input type="submit" name="commit" value="Add" /></form>'; @@ -1148,9 +1152,13 @@ } $area = escapeSqlString($_GET['area']); + // we only use first name + $nameonly = explode(" ",$area); + $nameonly = $nameonly[0]; + $datefilter = $_POST['datefilter']; - echo '<form action="./index.php?do=npc_details&npc_id='.$_GET['npc_id'].'&sub=badtext&area='.$_GET['area'].'" method="post"><p>Date filter (YYYY-MM-DD): '; + echo '<form action="./index.php?do=npc_details&npc_id='.$_GET['npc_id'].'&sub=badtext&area='.$nameonly.'" method="post"><p>Date filter (YYYY-MM-DD): '; echo "<input name='datefilter' value='".$datefilter."'>"; echo '<input type="submit" name="commit" value="Search"/>'; echo '</p></form>'; @@ -1163,7 +1171,7 @@ echo "<H2>Recognized text that NPC cound't answer to</H2>"; - $query = "select triggertext,count(triggertext) as c from npc_bad_text where npc='".$area."' and occurred>'".$datefilter."' group by triggertext HAVING COUNT(triggertext) > 1 order by c desc"; + $query = "select triggertext,count(triggertext) as c from npc_bad_text where npc='".$nameonly."' and occurred>'".$datefilter."' group by triggertext HAVING COUNT(triggertext) > 1 order by c desc"; $badtext_result = mysql_query2($query); echo '<table border="1"><tr><th>Trigger Text</th><th>Count</th></tr>'; if (sqlNumRows($badtext_result) > 0) @@ -1178,7 +1186,7 @@ echo "<H2>Text with unknown words in it</H2>"; - $query = "select badtext,count(badtext) as c from npc_bad_text where npc='".$area."' and occurred>'".$datefilter."' and triggertext='(no known words)' group by badtext HAVING COUNT(badtext) > 1 order by c desc"; + $query = "select badtext,count(badtext) as c from npc_bad_text where npc='".$nameonly."' and occurred>'".$datefilter."' and triggertext='(no known words)' group by badtext HAVING COUNT(badtext) > 1 order by c desc"; $badtext_result = mysql_query2($query); echo '<table border="1"><tr><th>Trigger Text</th><th>Count</th></tr>'; if (sqlNumRows($badtext_result) > 0) Modified: www/webconsole-new/rules/lootmodifiers.php =================================================================== --- www/webconsole-new/rules/lootmodifiers.php 2024-05-05 22:05:21 UTC (rev 10021) +++ www/webconsole-new/rules/lootmodifiers.php 2024-08-30 21:53:16 UTC (rev 10022) @@ -197,4 +197,51 @@ } } +function listRandomizedItems() +{ + if (!checkaccess('crafting', 'read')) + { + echo '<p class="error">You are not authorized to use these functions</p>'; + return; + } + + $query = 'select icat.name as catName, ist.name as itemName, ist.cstr_gfx_mesh, lr.name as lootName, lrd.* from loot_rules lr , loot_rule_details lrd, item_stats ist, item_categories icat where lr.id = lrd.loot_rule_id and lrd.item_stat_id=ist.id and ist.category_id = icat.category_id and lrd.randomize > 0 order by catName, ist.name'; + $result = mysql_query2($query); + $prevName = ""; + $prevCatName = ""; + while ($row = fetchSqlAssoc($result)){ + // new category + if ($row['catName'] != $prevCatName) { + echo '<h2>'.$row['catName'] . ' </h2>'; + } + // new item + if ($row['itemName'] != $prevName) { + echo '<br/>'.$row['item_stat_id'].' - <b>'.$row['itemName'] . ' </b> ('.$row['cstr_gfx_mesh'].') has '; + $prevName = $row['itemName']; + $prevCatName = $row['catName']; + + // extract the number of skin variations + $query2 = 'select count(*) as c from item_stats_skins where item_stats_id = '.$row['item_stat_id']; + $result2 = mysql_query2($query2); + while ($row2 = fetchSqlAssoc($result2)) + { + $varNumber = $row2['c']; + // zero variations , we display a red text + if ($varNumber == 0) { + echo '<span style="color:red">'. $varNumber. ' variations </span> in these loot rules: ' . $row['lootName'] . ' , '; + } + // more than zero variations, all ok + else + echo $varNumber. ' variations in these loot rules: ' . $row['lootName'] . ' , '; + } + } + // print the loot rules + else + { + echo $row['lootName'] . ' , '; + } + } +} + + ?> Modified: www/webconsole-new/rules/rulesmain.php =================================================================== --- www/webconsole-new/rules/rulesmain.php 2024-05-05 22:05:21 UTC (rev 10021) +++ www/webconsole-new/rules/rulesmain.php 2024-08-30 21:53:16 UTC (rev 10022) @@ -40,6 +40,7 @@ echo '<hr/>'."\n"; echo '<a href="./index.php?do=listlootmodifiers">List Loot Modifiers</a><br/>'."\n"; echo '<a href="./index.php?do=lootmodifierrestraints">List Loot Modifier Restraints</a><br/>'."\n"; + echo '<a href="./index.php?do=listrandomizeditems">List Randomized Items</a><br/>'."\n"; echo '<hr/>'."\n"; echo '<a href="./index.php">Return to main page.</a>'."\n"; echo '</div><div class="main">'."\n"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |