You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(35) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(354) |
Feb
(363) |
Mar
(542) |
Apr
(494) |
May
(232) |
Jun
(349) |
Jul
(221) |
Aug
(154) |
Sep
(124) |
Oct
(89) |
Nov
(121) |
Dec
(133) |
2003 |
Jan
(279) |
Feb
(490) |
Mar
(448) |
Apr
(295) |
May
(151) |
Jun
(209) |
Jul
(367) |
Aug
(371) |
Sep
(284) |
Oct
(492) |
Nov
(540) |
Dec
(240) |
2004 |
Jan
(381) |
Feb
(497) |
Mar
(556) |
Apr
(394) |
May
(332) |
Jun
(263) |
Jul
(533) |
Aug
(348) |
Sep
(398) |
Oct
(520) |
Nov
(511) |
Dec
(703) |
2005 |
Jan
(700) |
Feb
(354) |
Mar
(456) |
Apr
(300) |
May
(444) |
Jun
(405) |
Jul
(312) |
Aug
(480) |
Sep
(302) |
Oct
(660) |
Nov
(448) |
Dec
(658) |
2006 |
Jan
(543) |
Feb
(313) |
Mar
(293) |
Apr
(293) |
May
(244) |
Jun
(256) |
Jul
(257) |
Aug
(194) |
Sep
(64) |
Oct
(174) |
Nov
(340) |
Dec
(250) |
2007 |
Jan
(281) |
Feb
(350) |
Mar
(245) |
Apr
(348) |
May
(262) |
Jun
(188) |
Jul
(233) |
Aug
(303) |
Sep
(426) |
Oct
(470) |
Nov
(181) |
Dec
(242) |
2008 |
Jan
(176) |
Feb
(268) |
Mar
(253) |
Apr
(136) |
May
(198) |
Jun
(207) |
Jul
(134) |
Aug
(166) |
Sep
(65) |
Oct
(113) |
Nov
(248) |
Dec
(222) |
2009 |
Jan
(170) |
Feb
(163) |
Mar
(247) |
Apr
(225) |
May
(202) |
Jun
(84) |
Jul
(281) |
Aug
(138) |
Sep
(292) |
Oct
(118) |
Nov
(140) |
Dec
(278) |
2010 |
Jan
(304) |
Feb
(219) |
Mar
(110) |
Apr
(88) |
May
(94) |
Jun
(53) |
Jul
(74) |
Aug
(98) |
Sep
(63) |
Oct
(90) |
Nov
(134) |
Dec
(216) |
2011 |
Jan
(166) |
Feb
(179) |
Mar
(94) |
Apr
(82) |
May
(140) |
Jun
(141) |
Jul
(92) |
Aug
(56) |
Sep
(35) |
Oct
(38) |
Nov
(75) |
Dec
(187) |
2012 |
Jan
(96) |
Feb
(49) |
Mar
(36) |
Apr
(111) |
May
(87) |
Jun
(28) |
Jul
(40) |
Aug
(15) |
Sep
(28) |
Oct
(23) |
Nov
(18) |
Dec
(32) |
2013 |
Jan
(44) |
Feb
(53) |
Mar
(32) |
Apr
(46) |
May
(16) |
Jun
(10) |
Jul
(19) |
Aug
(31) |
Sep
(55) |
Oct
(110) |
Nov
(105) |
Dec
(108) |
2014 |
Jan
(76) |
Feb
(70) |
Mar
(59) |
Apr
(125) |
May
(28) |
Jun
(9) |
Jul
(10) |
Aug
(20) |
Sep
(34) |
Oct
(52) |
Nov
(29) |
Dec
(17) |
2015 |
Jan
(18) |
Feb
(17) |
Mar
(17) |
Apr
|
May
(1) |
Jun
(8) |
Jul
(6) |
Aug
(3) |
Sep
|
Oct
|
Nov
(1) |
Dec
(2) |
2016 |
Jan
(10) |
Feb
(42) |
Mar
(65) |
Apr
(44) |
May
(23) |
Jun
(9) |
Jul
(4) |
Aug
(3) |
Sep
(1) |
Oct
|
Nov
(3) |
Dec
(24) |
2017 |
Jan
(5) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
(3) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
2018 |
Jan
|
Feb
(1) |
Mar
(1) |
Apr
(1) |
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
2020 |
Jan
(1) |
Feb
|
Mar
(1) |
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2021 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2022 |
Jan
(4) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2023 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2024 |
Jan
|
Feb
|
Mar
|
Apr
(3) |
May
(2) |
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
(2) |
Nov
|
Dec
|
From: <lpa...@us...> - 2024-10-01 20:42:55
|
Revision: 10024 http://sourceforge.net/p/planeshift/code/10024 Author: lpancallo Date: 2024-10-01 20:42:54 +0000 (Tue, 01 Oct 2024) Log Message: ----------- where books Added Paths: ----------- www/webconsole-new/items/wherebooks.php Added: www/webconsole-new/items/wherebooks.php =================================================================== --- www/webconsole-new/items/wherebooks.php (rev 0) +++ www/webconsole-new/items/wherebooks.php 2024-10-01 20:42:54 UTC (rev 10024) @@ -0,0 +1,104 @@ +<?php +function wherebooks() +{ + if (!checkaccess('items', 'read')) + { + echo '<p class="error">You are not authorized to use these functions</p>'; + return; + } + + // check if sort is specified + if (isset($_GET['sort'])) { + if ($_GET['sort'] == 'sector') { + $sortBy = ' ORDER BY secname'; + } else { + $sortBy = ' ORDER BY is2.name'; + } + } + + echo '<h1> Official books not yet present in game anywhere (no instances)</h1>'."\n"; + + $query = "select is2.id as statid, is2.name, iinst.id, iinst.char_id_owner, iinst.parent_item_id, iinst.flags from item_stats is2 LEFT JOIN item_instances iinst ON is2.id = iinst.item_stats_id_standard where is2.item_type='BOOK' and iinst.id is NULL order by is2.name"; + + $result = mysql_query2($query); + + echo "Found ".sqlNumRows($result)." results<br/>"; + if (sqlNumRows($result) > 0) + { + echo '<table border="1">'."\n"; + echo '<tr><th>ID</th><th>Name</th>'; + + while ($row = fetchSqlAssoc($result)) + { + echo '<tr>'; + echo '<td>'.$row['statid'].'</td>'; + echo '<td><a href="./index.php?do=listitems&item='.$row['statid'].'">'.$row['name'].'</a></td>'; + echo '</tr>'."\n"; + } + echo '</table>'; + } + + echo '<h1> Location of Official books in the world (ground)</h1>'."\n"; + + $query = "select is2.id as statid, iinst.id as instid, is2.name,s.name as secname, iinst.flags, iinst.loc_x, iinst.loc_y, iinst.loc_z from item_stats is2 , item_instances iinst , sectors s + where is2.id = iinst.item_stats_id_standard and s.id = iinst.loc_sector_id + and is2.id!='101' and is2.item_type='BOOK' and (iinst.char_id_owner is NULL or iinst.char_id_owner = 0) ".$sortBy; + + $result = mysql_query2($query); + + echo "Found ".sqlNumRows($result)." results<br/>"; + if (sqlNumRows($result) > 0) + { + echo '<table border="1">'."\n"; + echo '<tr><th>Stats ID</th><th>Instance ID</th><th><a href="./index.php?do='.$_GET['do'].'&sort=name">Name</a></th><th><a href="./index.php?do='.$_GET['do'].'&sort=sector">Sector</a></th><th>Flags</th><th>Location</th>'; + + while ($row = fetchSqlAssoc($result)) + { + echo '<tr>'; + echo '<td>'.$row['statid'].'</td>'; + echo '<td>'.$row['instid'].'</td>'; + echo '<td><a href="./index.php?do=listitems&item='.$row['statid'].'">'.$row['name'].'</a></td>'; + echo '<td>'.$row['secname'].'</td>'; + echo '<td>'.$row['flags'].'</td>'; + echo '<td>'.$row['loc_x'].' '.$row['loc_y'].' '.$row['loc_z'].'</td>'; + echo '</tr>'."\n"; + } + echo '</table>'; + } + + echo '<h1> Location of Official books in the world (in Containers)</h1>'."\n"; + + $query = "select is2.id as statid, iinst.id as instid, is2.name,iinst.flags, iinst.parent_item_id from item_stats is2 , item_instances iinst +where is2.id = iinst.item_stats_id_standard and iinst.parent_item_id IS NOT NULL + and is2.id!='101' and is2.item_type='BOOK' and (iinst.char_id_owner is NULL or iinst.char_id_owner = 0) order by is2.name"; + + $result = mysql_query2($query); + + echo "Found ".sqlNumRows($result)." results<br/>"; + if (sqlNumRows($result) > 0) + { + echo '<table border="1">'."\n"; + echo '<tr><th>Stats ID</th><th>Instance ID</th><th>Name</th><th>Flags</th><th>Parent Sector</th><th>Parent Location</th>'; + + while ($row = fetchSqlAssoc($result)) + { + // extract parent item (container) data + $queryContainer = "select iinst.item_name, s.name as secname, iinst.flags, iinst.loc_x, iinst.loc_y, iinst.loc_z from item_instances iinst , sectors s +where s.id = iinst.loc_sector_id and iinst.id=" . $row['parent_item_id']; + $resultContainer = mysql_query2($queryContainer); + $rowContainer = fetchSqlAssoc($resultContainer); + + echo '<tr>'; + echo '<td>'.$row['statid'].'</td>'; + echo '<td>'.$row['instid'].'</td>'; + echo '<td><a href="./index.php?do=listitems&item='.$row['statid'].'">'.$row['name'].'</a></td>'; + echo '<td>'.$row['flags'].'</td>'; + echo '<td>'.$rowContainer['secname'].'</td>'; + echo '<td>'.$rowContainer['loc_x'].' '.$rowContainer['loc_y'].' '.$rowContainer['loc_z'].'</td>'; + echo '</tr>'."\n"; + } + echo '</table>'; + } + +} +?> Property changes on: www/webconsole-new/items/wherebooks.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 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2024-10-01 20:40:58
|
Revision: 10023 http://sourceforge.net/p/planeshift/code/10023 Author: lpancallo Date: 2024-10-01 20:40:56 +0000 (Tue, 01 Oct 2024) Log Message: ----------- added spawn mesh for natural resources Added wherebooks page Modified Paths: -------------- www/webconsole-new/crafting/resources.php www/webconsole-new/index.php www/webconsole-new/items/itemmain.php www/webconsole-new/rules/draw_map.php Added Paths: ----------- www/webconsole-new/items/searchbooks.php Modified: www/webconsole-new/crafting/resources.php =================================================================== --- www/webconsole-new/crafting/resources.php 2024-08-30 21:53:16 UTC (rev 10022) +++ www/webconsole-new/crafting/resources.php 2024-10-01 20:40:56 UTC (rev 10023) @@ -1,7 +1,10 @@ <?php function listresources(){ if (checkaccess('natres', 'read')){ + if (isset($_POST['commit']) && (checkaccess('natres', 'edit'))){ + + // COMMIT EDIT NATURAL RESOURCE if ($_POST['commit'] == "Commit Edit"){ $id = escapeSqlString($_POST['id']); $loc_sector_id = escapeSqlString($_POST['loc_sector_id']); @@ -31,6 +34,8 @@ unset($_POST); listresources(); return; + + // COMMIT CREATE NATURAL RESOURCE }else if($_POST['commit'] == "Commit New" && checkaccess('natres', 'create')){ $loc_sector_id = escapeSqlString($_POST['loc_sector_id']); $loc_x = escapeSqlString($_POST['loc_x']); @@ -54,6 +59,8 @@ unset($_POST); listresources(); return; + + // DELETE COMMIT NATURAL RESOURCE }else if($_POST['commit'] == "Confirm Delete" && checkaccess('natres', 'delete')){ $id = escapeSqlString($_POST['id']); $query = "DELETE FROM natural_resources WHERE id='$id'"; @@ -63,6 +70,7 @@ listresources(); return; } + // EDIT NATURAL RESOURCE }else if (isset($_POST['action']) && (checkaccess('natres', 'edit'))){ if ($_POST['action'] == 'Edit'){ $id = escapeSqlString($_POST['id']); @@ -93,6 +101,8 @@ echo '<tr><td>Max Random:<br/>(if amount not null, <br/>maximum random interval modifier in msecs</td><td><input type="text" name="max_random" value="'.$row['max_random'].'" /></td></tr>'; echo '</table><div><input type="hidden" name="id" value="'.$row['id'].'" /><input type="submit" name="commit" value="Commit Edit" /></div>'; echo '</form>'; + + // CREATE NATURAL RESOURCE }else if ($_POST['action'] == 'Create New' && checkaccess('natres', 'create')){ $Sectors = PrepSelect('sectorid'); $Category = PrepSelect('category'); @@ -115,6 +125,8 @@ echo '<td>Reward Nickname:<br/>(Name used after action)</td><td><input type="text" name="reward_nickname" /></td></tr>'; echo '</table><div><input type="submit" name="commit" value="Commit New" /></div>'; echo '</form>'; + + // DELETE NATURAL RESOURCE }else if ($_POST['action'] == 'Delete' && checkaccess('natres', 'delete')){ $id = escapeSqlString($_POST['id']); $query = "SELECT r.reward_nickname, s.name FROM natural_resources AS r LEFT JOIN sectors AS s ON r.loc_sector_id=s.id WHERE r.id='$id'"; @@ -127,8 +139,10 @@ }else{ echo '<p class="error">Unknown Action - Returning to List</p>'; } + + // LIST NATURAL RESOURCES }else{ - $query = "SELECT r.id, r.loc_sector_id, s.name AS sector, r.loc_x, r.loc_y, r.loc_z, r.radius, r.visible_radius, r.probability, r.skill, sk.name AS skill_name, r.skill_level, r.item_cat_id, c.name AS category, r.item_quality, r.animation, r.anim_duration_seconds, r.item_id_reward, i.name AS item, r.reward_nickname, r.action, r.amount, r.interval, r.max_random FROM natural_resources AS r LEFT JOIN sectors AS s ON r.loc_sector_id=s.id LEFT JOIN item_stats AS i on i.id=r.item_id_reward LEFT JOIN item_categories AS c ON r.item_cat_id=c.category_id LEFT JOIN skills AS sk on sk.skill_id=r.skill"; + $query = "SELECT r.id, r.loc_sector_id, s.name AS sector, r.loc_x, r.loc_y, r.loc_z, r.radius, r.visible_radius, r.probability, r.skill, sk.name AS skill_name, r.skill_level, r.item_cat_id, c.name AS category, r.item_quality, r.animation, r.anim_duration_seconds, r.item_id_reward, i.name AS item, r.reward_nickname, r.action, r.amount, r.interval, r.max_random, r.trace_mesh, r.spawn_mesh FROM natural_resources AS r LEFT JOIN sectors AS s ON r.loc_sector_id=s.id LEFT JOIN item_stats AS i on i.id=r.item_id_reward LEFT JOIN item_categories AS c ON r.item_cat_id=c.category_id LEFT JOIN skills AS sk on sk.skill_id=r.skill"; if (isset($_GET['id'])) { $id = escapeSqlString($_GET['id']); @@ -148,15 +162,23 @@ } } $result = mysql_query2($query); - echo '<table border="1"><tr><th>ID</th><th><a href="./index.php?do=resource&sort=loc">Location</a></th><th>Radius</th><th>Visible Radius</th><th>Probability</th><th><a href="./index.php?do=resource&sort=skill">Skill</a></th><th>Skill Level</th><th><a href="./index.php?do=resource&sort=tool">Tool Category</a></th><th>Item Quality</th><th>Animation</th><th>Animation Duration</th><th><a href="./index.php?do=resource&sort=item">Item</a></th><th>Resource "Nickname"</th><th>Amount (1)</th><th>Interval (2)</th><th>Max Random (3)</th>'; + echo '<table border="1"><tr><th>ID</th><th><a href="./index.php?do=resource&sort=loc">Location</a></th><th>Radius</th><th>Visible Radius</th><th>Probability</th><th><a href="./index.php?do=resource&sort=skill">Skill</a></th><th>Skill Level</th><th><a href="./index.php?do=resource&sort=tool">Tool Category</a></th><th>Item Quality</th><th>Animation</th><th>Animation Duration</th><th><a href="./index.php?do=resource&sort=item">Item</a></th><th>Resource "Nickname"</th><th>Amount (1)</th><th>Interval (2)</th><th>Max Random (3)</th><th>Trace Mesh (4)</th><th>Spawn Mesh (5)</th>'; if (checkaccess('natres', 'edit')){ echo '<th>Actions</th>'; } echo '</tr>'; while ($row = fetchSqlAssoc($result)){ + // get a more readable name + $spawnMesh = $row['spawn_mesh']; + $lastDotPosition = strrpos($spawnMesh, '.'); + // Extract the part after the last dot + if ($lastDotPosition !== false) { + $spawnMesh = substr($spawnMesh, $lastDotPosition + 1); + } + echo '<tr>'; echo '<td>'.$row['id'].'</td>'; - echo '<td>'.$row['sector'].'/'.$row['loc_x'].'/'.$row['loc_y'].'/'.$row['loc_z'].'</td>'; + echo '<td>'.$row['sector'].' '.$row['loc_x'].' '.$row['loc_y'].' '.$row['loc_z'].'</td>'; echo '<td>'.$row['radius'].'</td>'; echo '<td>'.$row['visible_radius'].'</td>'; echo '<td>'.$row['probability'].'</td>'; @@ -171,6 +193,8 @@ echo '<td>'.$row['amount'].'</td>'; echo '<td>'.$row['interval'].'</td>'; echo '<td>'.$row['max_random'].'</td>'; + echo '<td>'.$row['trace_mesh'].'</td>'; + echo '<td>'.$spawnMesh.'</td>'; if (checkaccess('natres', 'edit')){ echo '<td><form action="./index.php?do=resource" method="post">'; echo '<div><input type="hidden" name="id" value="'.$row['id'].'" />'; Modified: www/webconsole-new/index.php =================================================================== --- www/webconsole-new/index.php 2024-08-30 21:53:16 UTC (rev 10022) +++ www/webconsole-new/index.php 2024-10-01 20:40:56 UTC (rev 10023) @@ -169,6 +169,12 @@ itemmain(); searchbooks(); break; + case 'wherebooks': + include('./items/itemmain.php'); + include('./items/wherebooks.php'); + itemmain(); + wherebooks(); + break; case 'editcategory': include('./items/itemmain.php'); include('./items/editcategory.php'); Modified: www/webconsole-new/items/itemmain.php =================================================================== --- www/webconsole-new/items/itemmain.php 2024-08-30 21:53:16 UTC (rev 10022) +++ www/webconsole-new/items/itemmain.php 2024-10-01 20:40:56 UTC (rev 10023) @@ -15,6 +15,7 @@ } echo "<hr/>"; echo '<a href="./index.php?do=searchbooks">Search Books</a> <br/>'."\n"; + echo '<a href="./index.php?do=wherebooks">Where are the Books?</a> <br/>'."\n"; echo "<hr/>"; echo '<a href="./index.php">Return to main page.</a>'."\n"; echo '</div><div class="main">'."\n"; Added: www/webconsole-new/items/searchbooks.php =================================================================== --- www/webconsole-new/items/searchbooks.php (rev 0) +++ www/webconsole-new/items/searchbooks.php 2024-10-01 20:40:56 UTC (rev 10023) @@ -0,0 +1,57 @@ +<?php +function searchbooks() +{ + if (!checkaccess('items', 'read')) + { + echo '<p class="error">You are not authorized to use these functions</p>'; + return; + } + + echo '<p class="bold">Search one word contained in official books<br/></p>'."\n"; + echo '<form action="./index.php?do=searchbooks" method="post"><table>'."\n"; + echo '<tr><td>Word: </td><td><input type="text" name="word1" value="'.$_POST['word1'].'"/></td></tr>'."\n"; + echo '<tr><td>AND</td></tr>'."\n"; + echo '<tr><td>Word: </td><td><input type="text" name="word2" value="'.$_POST['word2'].'"/></td></tr>'."\n"; + echo '<tr><td><input type="submit" name="commit" value="Search" /></td><td></td></tr>'; + echo '</table></form>'; + + if(isset($_POST['word1']) && $_POST['word1'] != "") + { + $escSearch1 = escapeSqlString($_POST['word1']); + $query = "SELECT i.id, i.name, i.creative_definition FROM item_stats as i WHERE creative_definition like '%". $escSearch1 . "%'"; + + $escSearch2 = escapeSqlString($_POST['word2']); + + if ($escSearch2 != "") + $query = $query . " AND creative_definition like '%". $escSearch2 . "%'"; + + $result = mysql_query2($query); + + echo "Found ".sqlNumRows($result)." results<br/>"; + if (sqlNumRows($result) > 0) + { + echo '<table border="1">'."\n"; + echo '<tr><th>ID</th><th>Name</th><th>Text</th>'; + + while ($row = fetchSqlAssoc($result)) + { + echo '<tr>'; + echo '<td>'.$row['id'].'</td>'; + echo '<td><a href="./index.php?do=listitems&item='.$row['id'].'">'.$row['name'].'</a></td>'; + + // highlight the words found. + $word1Replace = "<span style='color:white;font-weight: bold;'>".$escSearch1."</span>"; + $resultingText = str_ireplace($escSearch1, $word1Replace, $row['creative_definition']); + + $word2Replace = "<span style='color:orange;font-weight:bold;'>".$escSearch2."</span>"; + $resultingText = str_ireplace($escSearch2, $word2Replace, $resultingText); + + echo '<td>'.$resultingText.'</td>'; + echo '</tr>'."\n"; + } + echo '</table>'; + } + } + +} +?> Property changes on: www/webconsole-new/items/searchbooks.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/rules/draw_map.php =================================================================== --- www/webconsole-new/rules/draw_map.php 2024-08-30 21:53:16 UTC (rev 10022) +++ www/webconsole-new/rules/draw_map.php 2024-10-01 20:40:56 UTC (rev 10023) @@ -432,12 +432,14 @@ function draw_locations($im,$sectors,$centerx,$centery,$scalefactorx,$scalefactory,$fg_color){ $query = "select id,x,y,z,radius,id_prev_loc_in_region from sc_locations where " . $sectors; $res = mysql_query2($query); - + // exit if there is no data $num = sqlNumRows($res); if ($num==0) - return; - + { + return; + } + $i=0; while ($line = fetchSqlRow($res)){ $id = $line[0]; 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. |
From: <lpa...@us...> - 2024-05-05 22:05:22
|
Revision: 10021 http://sourceforge.net/p/planeshift/code/10021 Author: lpancallo Date: 2024-05-05 22:05:21 +0000 (Sun, 05 May 2024) Log Message: ----------- removed statue chars from checknpctriggers Modified Paths: -------------- www/webconsole-new/npcs/checknpctriggers.php Modified: www/webconsole-new/npcs/checknpctriggers.php =================================================================== --- www/webconsole-new/npcs/checknpctriggers.php 2024-05-02 21:35:22 UTC (rev 10020) +++ www/webconsole-new/npcs/checknpctriggers.php 2024-05-05 22:05:21 UTC (rev 10021) @@ -9,7 +9,7 @@ } // extract all invulnerable NPC names $sql = "SELECT c.id, c.name, c.lastname, s.name AS sector_name, c.loc_x, c.loc_y, c.loc_z, c.npc_spawn_rule FROM characters AS c LEFT JOIN sectors AS s "; - $sql .= " ON c.loc_sector_id = s.id WHERE c.npc_master_id !=0 AND c.npc_impervious_ind = 'Y' ORDER BY s.name, c.name"; + $sql .= " ON c.loc_sector_id = s.id WHERE c.npc_master_id !=0 AND c.npc_impervious_ind = 'Y' AND statue=0 ORDER BY s.name, c.name"; $result = mysql_query2($sql); 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-04-17 20:10:58
|
Revision: 10019 http://sourceforge.net/p/planeshift/code/10019 Author: lpancallo Date: 2024-04-17 20:10:54 +0000 (Wed, 17 Apr 2024) Log Message: ----------- Added pet information Modified Paths: -------------- www/gmconsole/chardetails.php www/gmconsole/config.php Added Paths: ----------- www/gmconsole/classes/PSPet.php Modified: www/gmconsole/chardetails.php =================================================================== --- www/gmconsole/chardetails.php 2024-04-17 20:09:38 UTC (rev 10018) +++ www/gmconsole/chardetails.php 2024-04-17 20:10:54 UTC (rev 10019) @@ -284,7 +284,7 @@ ?> <?php - if ($account->SecurityLevel >= 21) { +if ($_SESSION["__SECURITY_LEVEL"] >= 22) { ?> <hr/> <h2 class="yellowtitlebig">Pets owned by this player</h2> @@ -295,6 +295,7 @@ <th>Name</th> <th>Race</th> <th>Relationship</th> + <th>Character Type</th> <th>Active</th> </tr> <?php @@ -304,15 +305,17 @@ echo '<td>' . $pet->Name . '</td>'; echo '<td>' . $pet->Race . '</td>'; echo '<td>' . $pet->Relationship . '</td>'; + echo '<td>' . $pet->CharType . '</td>'; echo '<td>' . $pet->active . '</td>'; echo '</tr>'; } - } ?> </table> </div> <?php + } + if ($account->SecurityLevel >= 21) { $actions = $char->GetGMCommandLog(); ?> Added: www/gmconsole/classes/PSPet.php =================================================================== --- www/gmconsole/classes/PSPet.php (rev 0) +++ www/gmconsole/classes/PSPet.php 2024-04-17 20:10:54 UTC (rev 10019) @@ -0,0 +1,76 @@ +<?php + +require_once('PSBaseClass.php'); + +class PSPet extends PSBaseClass { + + // + // Member-Variables (incomplete, but sufficient for now) + // + var $ID; + var $OwnerID; + var $Name; + var $Race; + var $CharType; + var $Exp; + var $Relationship; + var $active; + + + // + // Constructor + // + function __construct($pID = -1, $inOwnerID = -1) { + if ($pID > -1) { + $this->ID = $pID; + $this->OwnerID = $inOwnerID; + $this->Load(); + } + } + + + // + // Functions + // + function Load() { + if ($this->ID == null || $this->ID < 0) { + die('Cannot load a race if the object trying to load it has an uninitialized property "ID"'); + } + + $conn = PSBaseClass::S_GetConnection(); + + // read relationship info + $sql = 'SELECT * FROM character_relationships where character_id=' . $this->OwnerID . ' and related_id='.$this->ID; + $res = mysqli_query($conn, $sql); + if (!$res) { + die($sql . mysqli_error($conn)); + } + else { + // since it's the ID, there's only one character + $row = mysqli_fetch_array($res); + + $this->Relationship = $row['relationship_type']; + $this->active = $row['add_info']; + } + + $sql = 'SELECT *, c.name as charname, r.name as racename FROM characters c, race_info r where c.racegender_id = r.id and c.id='.$this->ID; + + $res = mysqli_query($conn, $sql); + if (!$res) { + die($sql . mysqli_error($conn)); + } + else { + // since it's the ID, there's only one character + $row = mysqli_fetch_array($res); + + $this->Name = $row['charname'] . " " . $row['lastname']; + $this->CharType = $row['character_type']; + $this->Race = $row['racename']; + + $this->__IsLoaded = true; + } + } + +} + +?> \ No newline at end of file Property changes on: www/gmconsole/classes/PSPet.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/gmconsole/config.php =================================================================== --- www/gmconsole/config.php 2024-04-17 20:09:38 UTC (rev 10018) +++ www/gmconsole/config.php 2024-04-17 20:10:54 UTC (rev 10019) @@ -7,7 +7,7 @@ $__DB_PORT = 3308; $__DB_USER = "planeshift"; $__DB_PASS = "planeshift"; - $__DB_NAME = "planeshift"; + $__DB_NAME = "planeshift_prod2"; // // CSS related stuff 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-04-04 20:38:51
|
Revision: 10017 http://sourceforge.net/p/planeshift/code/10017 Author: lpancallo Date: 2024-04-04 20:38:48 +0000 (Thu, 04 Apr 2024) Log Message: ----------- Added pets list to character page Modified Paths: -------------- www/gmconsole/chardetails.php www/gmconsole/classes/PSCharacter.php Modified: www/gmconsole/chardetails.php =================================================================== --- www/gmconsole/chardetails.php 2024-03-09 19:06:23 UTC (rev 10016) +++ www/gmconsole/chardetails.php 2024-04-04 20:38:48 UTC (rev 10017) @@ -83,6 +83,8 @@ $hours = floor($char->TimeConnectedInSeconds / 3600); $minutes = floor($char->TimeConnectedInSeconds / 60) - ($hours * 60); $seconds = $char->TimeConnectedInSeconds - ($minutes * 60) - ($hours * 3600); + $Pets = $char->Pets; + echo "Pets number: ".count($Pets); ?> <h2 class="yellowtitlebig">General character information</h2> @@ -280,8 +282,38 @@ <?php } ?> + <?php if ($account->SecurityLevel >= 21) { +?> + <hr/> + <h2 class="yellowtitlebig">Pets owned by this player</h2> + <div style="height:200px; overflow:auto;clear:both;"> + <table class="table"> + <tr> + <th>ID</th> + <th>Name</th> + <th>Race</th> + <th>Relationship</th> + <th>Active</th> + </tr> +<?php + foreach ($Pets as $pet) { + echo '<tr>'; + echo '<td>' . $pet->ID . '</td>'; + echo '<td>' . $pet->Name . '</td>'; + echo '<td>' . $pet->Race . '</td>'; + echo '<td>' . $pet->Relationship . '</td>'; + echo '<td>' . $pet->active . '</td>'; + echo '</tr>'; + } + } +?> + </table> + </div> + +<?php + if ($account->SecurityLevel >= 21) { $actions = $char->GetGMCommandLog(); ?> <hr/> Modified: www/gmconsole/classes/PSCharacter.php =================================================================== --- www/gmconsole/classes/PSCharacter.php 2024-03-09 19:06:23 UTC (rev 10016) +++ www/gmconsole/classes/PSCharacter.php 2024-04-04 20:38:48 UTC (rev 10017) @@ -6,6 +6,7 @@ require_once('PSGMCommandLogEntry.php'); require_once('PSItem.php'); require_once('PSRace.php'); +require_once('PSPet.php'); require_once('PSQuests.php'); class PSCharacter extends PSBaseClass { @@ -43,6 +44,8 @@ var $Description; var $CreationTime; var $LastLoginIP; // used only for guild display + + var $Pets; // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -146,6 +149,23 @@ $this->WIL = $data['skill_Rank']; } } + + // load pets + $sql = 'SELECT * FROM character_relationships where character_id='.$this->ID . ' and relationship_type=\'familiar\' '; + + $res = mysqli_query($conn, $sql); + if (!$res) { + die($sql . $where . mysqli_error($conn)); + } + else { + $localPets = array(); + while($data = mysqli_fetch_array($res)) { + array_push($localPets, new PSPet($data['related_id'], $this->ID)); + //echo '--> '.$stat; + } + $this->Pets = $localPets; + echo "Pets found: ". $this->Pets[0]->Name; + } } 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...> - 2022-10-21 20:00:16
|
Revision: 10014 http://sourceforge.net/p/planeshift/code/10014 Author: lpancallo Date: 2022-10-21 20:00:14 +0000 (Fri, 21 Oct 2022) Log Message: ----------- Fixed edge switch when navigating path network and there is a teleport link next. Added some comments. Improve delete npc. Modified Paths: -------------- trunk/lang/english/stringtable.xml trunk/src/npcclient/npcoperations.cpp trunk/src/server/bulkobjects/pscharacterloader.cpp trunk/src/server/database/mysql/deletenpc.sql Modified: trunk/lang/english/stringtable.xml =================================================================== --- trunk/lang/english/stringtable.xml 2022-02-06 14:08:47 UTC (rev 10013) +++ trunk/lang/english/stringtable.xml 2022-10-21 20:00:14 UTC (rev 10014) @@ -2,6 +2,8 @@ <StringTable> <item orig=" Do you really wish to leave Yliakum?" trans="" /> + <item orig=" +Do you really wish to leave Yliakum?" trans="" /> <item orig=" " trans="" /> <item orig=" CP left." trans="" /> <item orig=" in front of you" trans="" /> @@ -59,6 +61,7 @@ <item orig="Add New" trans="" /> <item orig="Add a comment about this event if you wish" trans="" /> <item orig="Add/Edit Action" trans="" /> + <item orig="Adjective item modifier" trans="" /> <item orig="Admin" trans="" /> <item orig="Admin text color" trans="" /> <item orig="Administrative banking" trans="" /> @@ -91,6 +94,7 @@ <item orig="Assigned GM:" trans="" /> <item orig="Attack" trans="" /> <item orig="Attackable" trans="" /> + <item orig="Attacks" trans="" /> <item orig="Attributes" trans="" /> <item orig="Auction" trans="" /> <item orig="Auction Alignment" trans="" /> @@ -627,6 +631,7 @@ <item orig="Pop-ups" trans="" /> <item orig="Pos" trans="" /> <item orig="Position:" trans="" /> + <item orig="Prefix item modifier" trans="" /> <item orig="Prev" trans="" /> <item orig="Prev Page" trans="" /> <item orig="Previous Icon (PgUp)" trans="" /> @@ -758,6 +763,7 @@ <item orig="Study" trans="" /> <item orig="Study Item" trans="" /> <item orig="Study notes:" trans="" /> + <item orig="Suffix item modifier" trans="" /> <item orig="Suggest Name" trans="" /> <item orig="System" trans="" /> <item orig="System Base" trans="" /> @@ -886,6 +892,9 @@ <item orig="You are not in a guild. New guilds must have a minimum of 1 members, and the fee is 20000 trias. Beware that a guild will be automatically disbanded if it has less than 5 members for more than 5 minutes Do you wish to found a guild now?" trans="" /> + <item orig="You are not in a guild. +New guilds must have a minimum of 1 members, and the fee is 20000 trias. Beware that a guild will be automatically disbanded if it has less than 5 members for more than 5 minutes +Do you wish to found a guild now?" trans="" /> <item orig="You can not ignore yourself." trans="" /> <item orig="You cannot have a negative CP value." trans="" /> <item orig="You currently have no petitions." trans="" /> @@ -943,6 +952,7 @@ <item orig="npcinternal text colour" trans="" /> <item orig="o&clock" trans="" /> <item orig="o'clock" trans="" /> + <item orig="queue an attack" trans="" /> <item orig="says" trans="" /> <item orig="says:" trans="dice:" /> <item orig="server" trans="" /> Modified: trunk/src/npcclient/npcoperations.cpp =================================================================== --- trunk/src/npcclient/npcoperations.cpp 2022-02-06 14:08:47 UTC (rev 10013) +++ trunk/src/npcclient/npcoperations.cpp 2022-10-21 20:00:14 UTC (rev 10014) @@ -5636,7 +5636,14 @@ psPathPoint* WanderOperation::GetNextPathPoint(NPC* npc, bool &teleport) { - // We are at the end of the path, get next edge. + + // Check if we should teleport this edge + if(currentEdge->IsTeleport()) + { + teleport = true; + } + + // We are at the end of the path, get next edge. if(!currentPathPointIterator || !currentPathPointIterator->HasNext()) { NPCDebug(npc, 5, "No more path points, changing edge..."); @@ -5651,12 +5658,6 @@ } } - // Check if we should teleport this edge - if(currentEdge->IsTeleport()) - { - teleport = true; - } - if(currentPathPointIterator->HasNext()) { currentPathPoint = currentPathPointIterator->Next(); Modified: trunk/src/server/bulkobjects/pscharacterloader.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacterloader.cpp 2022-02-06 14:08:47 UTC (rev 10013) +++ trunk/src/server/bulkobjects/pscharacterloader.cpp 2022-10-21 20:00:14 UTC (rev 10014) @@ -598,6 +598,7 @@ Error2("Failed to remove %s from GM events database/cache", ShowID(pid)); } + /// remove the items spawned in the world and owned by this character csArray<gemObject*> list; psserver->entitymanager->GetGEM()->GetPlayerObjects(pid, list); for(size_t x = 0; x < list.GetSize(); x++) Modified: trunk/src/server/database/mysql/deletenpc.sql =================================================================== --- trunk/src/server/database/mysql/deletenpc.sql 2022-02-06 14:08:47 UTC (rev 10013) +++ trunk/src/server/database/mysql/deletenpc.sql 2022-10-21 20:00:14 UTC (rev 10014) @@ -5,30 +5,39 @@ # use this command to know which NPCs are currently loaded # select name from players where alive_ind='Y'; +SET collation_connection = 'latin1_swedish_ci'; + # set here the name of the NPC you want to delete -set @npc_name='Aleena Arlavin'; +set @npc_name='Naripel Denoole'; +SET @npc_firstname=substring_index(@npc_name, ' ', 1); # get ID of NPC -select @npc_id:=id from characters where name=@npc_name; +select @npc_id:=id from characters where name=@npc_firstname; -# get range of values of NPC (THIS ASSUME IT WAS LOADED SERIALIZED WITH OTHER NPCs) -select @min_resp:=min(response_id) from npc_triggers where area=@npc_name; -select @max_resp:=max(response_id) from npc_triggers where area=@npc_name; +# set @npc_id=9674167; # perform deletion delete from npc_bad_text where npc=@npc_name; delete from npc_knowledge_areas where player_id=@npc_id; -# replace min and max with values obtained above -delete from npc_responses where id>=@min_resp and id<=@max_resp; +# responses and triggers +delete from npc_responses where trigger_id IN (select id from npc_triggers where area=@npc_name); +delete from npc_triggers where area=@npc_name; -delete from npc_triggers where area=@npc_name; delete from item_instances where char_id_owner=@npc_id; delete from character_skills where character_id=@npc_id; delete from merchant_item_categories where player_id=@npc_id; delete from trainer_skills where player_id=@npc_id; +delete from character_factions where character_id=@npc_id; +delete from character_relationships where character_id=@npc_id; +delete from character_traits where character_id=@npc_id; +delete from character_variables where character_id=@npc_id; + +delete from characters where id=@player_id; + #delete npcclient entries delete from sc_npc_definitions WHERE char_id=@npc_id; +delete from sc_npctypes WHERE name=@npc_firstname; delete from characters where id=@npc_id; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2022-02-06 14:08:49
|
Revision: 10013 http://sourceforge.net/p/planeshift/code/10013 Author: lpancallo Date: 2022-02-06 14:08:47 +0000 (Sun, 06 Feb 2022) Log Message: ----------- Improvements to unusedchars.php Modified Paths: -------------- www/webconsole-new/admin/unusedchars.php Modified: www/webconsole-new/admin/unusedchars.php =================================================================== --- www/webconsole-new/admin/unusedchars.php 2022-01-01 20:41:01 UTC (rev 10012) +++ www/webconsole-new/admin/unusedchars.php 2022-02-06 14:08:47 UTC (rev 10013) @@ -33,7 +33,7 @@ echo '</div></div></form>'."\n"; // end tr echo '<br/><br/>'; - $query = 'SELECT id, name, last_login, time_connected_sec, money_circles + money_octas + money_hexas + money_trias as coins FROM characters WHERE character_type=0 AND last_login<\''.$startfrom.'\' AND time_connected_sec <='. $secondsconnected . ' ORDER BY last_login asc'; + $query = 'SELECT id, name, lastname, last_login, time_connected_sec, money_circles + money_octas + money_hexas + money_trias as coins 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); @@ -45,6 +45,8 @@ function printTable($result) { $idStr = ''; + $nameStr = ''; + $countDelete = 0; 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><div class="th">Coins</div><div class="th">Items</div>'; while ($row = fetchSqlAssoc($result)) { @@ -64,10 +66,17 @@ if ($row['coins'] == 0 && $items_row['count'] == 0) { $idStr = $idStr . $row['id'] . ','; + $nameStr = $nameStr . $row['name'] . ' ' . $row['lastname'] . ','; + $countDelete = $countDelete + 1; } } echo '</div>'."\n"; // end table + // generate list of names to publish + echo '</br><h3>Characters names to delete, excluding the ones with items or coins </h3>'; + echo 'to delete chars: ' . $countDelete. '<br/><br/>'; + echo 'names: ' . $nameStr . '<br/><br/>'; + // generate SQL to delete echo '</br><h3>SQL to delete the characters above, excluding the ones with items or coins </h3>'; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2022-01-01 20:41:03
|
Revision: 10012 http://sourceforge.net/p/planeshift/code/10012 Author: lpancallo Date: 2022-01-01 20:41:01 +0000 (Sat, 01 Jan 2022) Log Message: ----------- Fixed bug in npcoperations.cpp and adminmanager.cpp Added comments to clarify code Modified Paths: -------------- trunk/src/npcclient/npcbehave.cpp trunk/src/npcclient/npcoperations.cpp trunk/src/server/actionmanager.cpp trunk/src/server/actionmanager.h trunk/src/server/adminmanager.cpp trunk/src/server/gem.cpp trunk/src/server/usermanager.cpp trunk/src/server/usermanager.h Modified: trunk/src/npcclient/npcbehave.cpp =================================================================== --- trunk/src/npcclient/npcbehave.cpp 2022-01-01 20:38:22 UTC (rev 10011) +++ trunk/src/npcclient/npcbehave.cpp 2022-01-01 20:41:01 UTC (rev 10012) @@ -652,7 +652,7 @@ void BehaviorSet::Advance(csTicks delta, NPC* npc) { - float d = .001 * delta; + float d = .001 * delta; // transforms milliseconds in seconds UpdateNeeds(d, npc); Modified: trunk/src/npcclient/npcoperations.cpp =================================================================== --- trunk/src/npcclient/npcoperations.cpp 2022-01-01 20:38:22 UTC (rev 10011) +++ trunk/src/npcclient/npcoperations.cpp 2022-01-01 20:41:01 UTC (rev 10012) @@ -3372,6 +3372,7 @@ bool outsideRegion = psGameObject::ReplaceNPCVariablesBool(npc, attackOutsideRegion); bool tribe = psGameObject::ReplaceNPCVariablesBool(npc, attackMostHatedTribeTarget); + // search enemy in melee_range if(tribe && npc->GetTribe()) { ent = npc->GetTribe()->GetMostHated(npc, melee_range, outsideRegion, attackInvisible, attackInvincible); @@ -3381,6 +3382,7 @@ ent = npc->GetMostHated(melee_range, outsideRegion, attackInvisible, attackInvincible); } + // search enemy in seek_range if(!ent) { NPCDebug(npc, 8, "No Melee target in range (%2.2f), going to chase!", melee_range); @@ -3820,7 +3822,7 @@ Error2("Invalid argument passed to operation in xml file: %s", value); return false; } - memoryCheck == split[2]; + memoryCheck = split[2]; return true; } else Modified: trunk/src/server/actionmanager.cpp =================================================================== --- trunk/src/server/actionmanager.cpp 2022-01-01 20:38:22 UTC (rev 10011) +++ trunk/src/server/actionmanager.cpp 2022-01-01 20:41:01 UTC (rev 10012) @@ -181,6 +181,8 @@ handled = HandleSelectQuery(topNode, client); } + // If our query didnt find any action locations in database, send the info anyway to the client so + // it can create a new one (must be GM and have GM window open), see ActionHandler::HandleMessage() client side if(!handled) { // evk: Sending to clients with security level 30+ only. @@ -549,6 +551,7 @@ } } + // send back to the client the updated list of action locations for this sector csString xmlMsg; csString escpxml = EscpXML(sectorName); xmlMsg.Format("<location><sector>%s</sector></location>", escpxml.GetData()); @@ -569,7 +572,7 @@ return; } - // Search for matching locations + // Search for matching location by ID csRef<iDocument> doc; csRef<iDocumentNode> root, topNode, node; @@ -611,6 +614,7 @@ delete actionLocation; } + // send back to the client the updated list of action locations for this sector csString xmlMsg; csString escpxml = EscpXML(sectorName); xmlMsg.Format("<location><sector>%s</sector></location>", escpxml.GetData()); Modified: trunk/src/server/actionmanager.h =================================================================== --- trunk/src/server/actionmanager.h 2022-01-01 20:38:22 UTC (rev 10011) +++ trunk/src/server/actionmanager.h 2022-01-01 20:41:01 UTC (rev 10012) @@ -157,7 +157,7 @@ /** * Check if there is an active action location for this client/actionLocation pair. * - * @param actorEID The EID of the actor to remove from the given action location. + * @param actorEID The EID of the actor to check for active action location. * @param actionLocation The location that is triggered for the given actor. */ bool HasActiveTrigger(EID actorEID, const psActionLocation* actionLocation); @@ -165,7 +165,7 @@ /** * Add a new active actionLocation for this client. * - * @param actorEID The EID of the actor to remove from the given action location. + * @param actorEID The EID of the actor to add the given action location. * @param actionLocation The location that is triggered for the given actor. */ void AddActiveTrigger(EID actorEID, const psActionLocation* actionLocation); @@ -201,15 +201,22 @@ // Message Handlers /** - * Handles Query messages from client. + * Handles Query messages from client (QUERY). * * @param xml xml containing query parameters. + * Example: + * + * * @param client The client that sent the message. */ void HandleQueryMessage(csString xml, Client* client); void LoadXML(iDocumentNode* topNode); + + // Find the best action location matching the input parameters like: sector, mesh , poly , point w/in radius , instance bool HandleSelectQuery(iDocumentNode* topNode, Client* client); + + // Launch Examine UI client side or execute script for identified Action Locations bool ProcessMatches(csArray<psActionLocation*> matches, Client* client); /** @@ -216,14 +223,27 @@ * Handles Save messages from client. * * @param xml xml containing query parameters. + * Example: + * <location><id>167</id><masterid>0</masterid><name>torch2</name><sector>hydlaa_plaza</sector> + * <mesh>_s_laanx_fireplaces</mesh><polygon>0</polygon><position><x>-6.170000</x><y>1.150000</y><z>-54.880001</z></position> + * <pos_instance>4294967295</pos_instance><radius>1.000000</radius><triggertype>PROXIMITY</triggertype><responsetype>SCRIPT</responsetype> + * <response>flame_damage</response><active>Y</active></location> + * * @param client The client that sent the message. */ void HandleSaveMessage(csString xml, Client* client); /** - * Handles List messages from client. + * Handles List messages from client (LIST_QUERY) * - * @param xml xml containing query parameters. + * @param xml xml containing sector name for which we want the list of all action locations. + * Example: + * <location><sector>hydlaa_plaza</sector></location> + * + * As a response it will then send to the client an XML with the following format: + * <locations><location>...</location><location>...</location></locations> + * see HandleSaveMessage() desc for content of <location> + * * @param client The client that sent the message. */ void HandleListMessage(csString xml, Client* client); @@ -232,6 +252,9 @@ * Handles Delete messages from client. * * @param xml xml containing query parameters. + * Example: + * <location><id>5030</id></location> + * * @param client The client that sent the message. */ void HandleDeleteMessage(csString xml, Client* client); Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2022-01-01 20:38:22 UTC (rev 10011) +++ trunk/src/server/adminmanager.cpp 2022-01-01 20:41:01 UTC (rev 10012) @@ -3885,7 +3885,7 @@ // gets a list of quests of the target if(words.GetCount() == index) { - subCmd == "list"; + subCmd = "list"; } // check for other subcommands else if(subCommandList.IsSubCommand(words[index])) Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2022-01-01 20:38:22 UTC (rev 10011) +++ trunk/src/server/gem.cpp 2022-01-01 20:41:01 UTC (rev 10012) @@ -3893,7 +3893,7 @@ } else // Moving { - // unwork stuff + // If we are moving, we stop any crafting if(GetMode() == PSCHARACTER_MODE_WORK) { SetMode(PSCHARACTER_MODE_PEACE); Modified: trunk/src/server/usermanager.cpp =================================================================== --- trunk/src/server/usermanager.cpp 2022-01-01 20:38:22 UTC (rev 10011) +++ trunk/src/server/usermanager.cpp 2022-01-01 20:41:01 UTC (rev 10012) @@ -1241,9 +1241,11 @@ if(client->GetBuddyListHide() && buddy->GetSecurityLevel() < GM_LEVEL) // Don't tell none GM+ that a GM+ came online continue; + // send to the client UI the information of buddy status psBuddyStatus status(buddy->GetClientNum(), name , logged_in); status.SendMessage(); + // send also text message if(logged_in) { psserver->SendSystemInfo(buddy->GetClientNum(),"%s just joined PlaneShift",name.GetData()); @@ -1269,9 +1271,11 @@ if(buddy->GetSecurityLevel() >= GM_LEVEL) // Don't tell GM+ as they already know continue; + // send to the client UI the information of buddy status psBuddyStatus status(buddy->GetClientNum(), name , logged_in); status.SendMessage(); + // send also text message if(logged_in) { psserver->SendSystemInfo(buddy->GetClientNum(),"%s just joined PlaneShift",name.GetData()); @@ -2361,6 +2365,7 @@ return; } + // check if the second parameters is an EID csString eid_str = msg.target.Slice(4); EID targetEID = EID(strtoul(eid_str.GetDataSafe(), NULL, 10)); Modified: trunk/src/server/usermanager.h =================================================================== --- trunk/src/server/usermanager.h 2022-01-01 20:38:22 UTC (rev 10011) +++ trunk/src/server/usermanager.h 2022-01-01 20:41:01 UTC (rev 10012) @@ -599,7 +599,7 @@ void HandleTargetEvent(MsgEntry* me,Client* client); /** - * + * Called when the player clicks on "Enter" from an action location Interact Menu */ void HandleEntranceMessage(MsgEntry* me, Client* client); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2022-01-01 20:38:24
|
Revision: 10011 http://sourceforge.net/p/planeshift/code/10011 Author: lpancallo Date: 2022-01-01 20:38:22 +0000 (Sat, 01 Jan 2022) Log Message: ----------- output SQL to run the delete of unused characters. Modified Paths: -------------- www/webconsole-new/admin/unusedchars.php Modified: www/webconsole-new/admin/unusedchars.php =================================================================== --- www/webconsole-new/admin/unusedchars.php 2022-01-01 20:37:49 UTC (rev 10010) +++ www/webconsole-new/admin/unusedchars.php 2022-01-01 20:38:22 UTC (rev 10011) @@ -33,7 +33,7 @@ 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'; + $query = 'SELECT id, name, last_login, time_connected_sec, money_circles + money_octas + money_hexas + money_trias as coins 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); @@ -44,16 +44,45 @@ // 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>'; + $idStr = ''; + 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><div class="th">Coins</div><div class="th">Items</div>'; while ($row = fetchSqlAssoc($result)) { + $query = 'SELECT count(*) as count FROM item_instances WHERE char_id_owner='.$row['id']; + $items = mysql_query2($query); + $items_row = fetchSqlAssoc($items); + 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 $row['time_connected_sec'].'</div><div class="td">'; + echo $row['coins'].'</div><div class="td">'; + echo $items_row['count'].'</div>'; echo '</form>'."\n"; // end tr + + // IDs + if ($row['coins'] == 0 && $items_row['count'] == 0) + { + $idStr = $idStr . $row['id'] . ','; + } } echo '</div>'."\n"; // end table + + // generate SQL to delete + echo '</br><h3>SQL to delete the characters above, excluding the ones with items or coins </h3>'; + + echo 'delete from character_discoveries where character_id IN ('.$idStr.'); <br/>'; + echo 'delete from character_events where player_id IN ('.$idStr.'); <br/>'; + echo 'delete from character_factions where character_id IN ('.$idStr.'); <br/>'; + echo 'delete from character_glyphs where player_id IN ('.$idStr.'); <br/>'; + echo 'delete from character_quests where player_id IN ('.$idStr.'); <br/>'; + echo 'delete from character_relationships where character_id IN ('.$idStr.'); <br/>'; + echo 'delete from character_skills where character_id IN ('.$idStr.'); <br/>'; + echo 'delete from character_traits where character_id IN ('.$idStr.'); <br/>'; + echo 'delete from character_variables where character_id IN ('.$idStr.'); <br/>'; + echo 'delete from item_instances where char_id_owner IN ('.$idStr.'); <br/>'; + echo 'delete from player_spells where player_id IN ('.$idStr.'); <br/>'; + echo 'delete from characters where id IN ('.$idStr.'); <br/>'; } ?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2022-01-01 20:37:52
|
Revision: 10010 http://sourceforge.net/p/planeshift/code/10010 Author: lpancallo Date: 2022-01-01 20:37:49 +0000 (Sat, 01 Jan 2022) Log Message: ----------- new item for testing improved list of tables on delete character Modified Paths: -------------- trunk/src/server/database/mysql/deletechar.sql trunk/src/server/database/mysql/item_instances.sql Modified: trunk/src/server/database/mysql/deletechar.sql =================================================================== --- trunk/src/server/database/mysql/deletechar.sql 2022-01-01 19:05:23 UTC (rev 10009) +++ trunk/src/server/database/mysql/deletechar.sql 2022-01-01 20:37:49 UTC (rev 10010) @@ -4,10 +4,15 @@ # The tables populated by a char are: # # characters +# character_discoveries +# character_events +# character_factions # character_glyphs # character_quests +# character_relationships # character_skills # character_traits +# character_variables # item_instances # player_spells # @@ -35,10 +40,16 @@ # perform deletion for one char only set @player_id=9242522; +delete from character_discoveries where character_id=@player_id; +delete from character_events where player_id=@player_id; +delete from character_factions where character_id=@player_id; +delete from character_glyphs where player_id=@player_id; +delete from character_quests where player_id=@player_id; +delete from character_relationships where character_id=@player_id; +delete from character_skills where character_id=@player_id; +delete from character_traits where character_id=@player_id; +delete from character_variables where character_id=@player_id; +delete from item_instances where char_id_owner=@player_id; delete from player_spells where player_id=@player_id; -delete from item_instances where char_id_owner=@player_id; -delete from character_traits where character_id=@player_id; -delete from character_skills where character_id=@player_id; -delete from character_quests where player_id=@player_id; -delete from character_glyphs where player_id=@player_id; + delete from characters where id=@player_id; Modified: trunk/src/server/database/mysql/item_instances.sql =================================================================== --- trunk/src/server/database/mysql/item_instances.sql 2022-01-01 19:05:23 UTC (rev 10009) +++ trunk/src/server/database/mysql/item_instances.sql 2022-01-01 20:37:49 UTC (rev 10010) @@ -151,6 +151,7 @@ # Key and lock for entrance INSERT INTO `item_instances` VALUES (95,0,0,0,0,1,0,0,0,3,-56,-1,-148,0,0,0,0,50,50,420,0,'LOCKED,SECURITYLOCK,UNPICKABLE',0,-1,'','','',NULL,'0',0,0,0); INSERT INTO `item_instances` VALUES (96,0,0,0,0,1,0,0,0,3,-54,1,-148,0,0,0,0,50,50,413,0,'KEY',0,-1,'95','','',NULL,'0',0,0,0); +INSERT INTO `item_instances` VALUES (97,0,0,0,0,1,0,0,0,3,-56,-1,-148,0,0,0,0,50,50,420,0,'LOCKED,LOCKABLE',0,-1,'','','',NULL,'0',0,0,0); # Items on ground INSERT INTO `item_instances` VALUES (100,0,0,0,0,1,0,0,0,3,-2.72,0.37,-182.03,0,90,0,0,50,50,74,0,'NOPICKUP',0,-1,'','','',NULL,'0',0,0,0); 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...> - 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...> - 2021-02-27 20:32:28
|
Revision: 10007 http://sourceforge.net/p/planeshift/code/10007 Author: lpancallo Date: 2021-02-27 20:32:26 +0000 (Sat, 27 Feb 2021) Log Message: ----------- Tua updates on the console to have it compatible with PHP 7.x Modified Paths: -------------- www/gmconsole/accountdetails.php www/gmconsole/accountsearch.php www/gmconsole/chardetails.php www/gmconsole/check_keys.php www/gmconsole/classes/Navigation.php www/gmconsole/classes/PSAccount.php www/gmconsole/classes/PSBan.php www/gmconsole/classes/PSBaseClass.php www/gmconsole/classes/PSCharacter.php www/gmconsole/classes/PSGMCommandLogEntry.php www/gmconsole/classes/PSGmEvents.php www/gmconsole/classes/PSGuild.php www/gmconsole/classes/PSItem.php www/gmconsole/classes/PSNameChange.php www/gmconsole/classes/PSPetition.php www/gmconsole/classes/PSQuests.php www/gmconsole/classes/PSRace.php www/gmconsole/config.php www/gmconsole/guilddetails.php www/gmconsole/guildsearch.php www/gmconsole/namechanges.php www/gmconsole/petitions.php Modified: www/gmconsole/accountdetails.php =================================================================== --- www/gmconsole/accountdetails.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/accountdetails.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -118,13 +118,12 @@ <?php $i = 0; foreach ($altChars as $altChar) { - if ($altChar->ID != $char->ID) { - $i++; + $i++; echo '<tr>'; echo '<td style="text-align:right;">#' . $i . '</td>'; echo '<td><a href="javascript:setCharId(\'' . $altChar->ID . '\');">' . $altChar->FirstName . ' ' . $altChar->LastName . '</a></td>'; echo '</tr>'; - } + } ?> </table> Modified: www/gmconsole/accountsearch.php =================================================================== --- www/gmconsole/accountsearch.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/accountsearch.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -13,8 +13,17 @@ } // get variables - $email = $_POST['email']; - $lastIP = $_POST['lastIP']; + $email = '';; + $lastIP = ''; + + if(isset($_POST['email'])) + { + $email = $_POST['email']; + } + if(isset($_POST['lastIP'])) + { + $lastIP = $_POST['lastIP']; + } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> Modified: www/gmconsole/chardetails.php =================================================================== --- www/gmconsole/chardetails.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/chardetails.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -2,6 +2,7 @@ require_once('config.php'); require_once('classes/Navigation.php'); + require_once('classes/PSBaseClass.php'); require_once("classes/PSCharacter.php"); session_start(); @@ -14,6 +15,7 @@ // get variables $charId = $_POST["charId"]; + $conn = PSBaseClass::S_GetConnection(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> @@ -235,8 +237,8 @@ </tr> <?php $sel_var = 'SELECT name, value FROM character_variables WHERE character_id='.$charId.' ORDER BY name'; - $var_sel = mysql_query($sel_var) or die ($sel_var . '<br>' . mysql_error()); - while($var= mysql_fetch_array($var_sel)) + $var_sel = mysqli_query($conn, $sel_var) or die ($sel_var . '<br>' . mysqli_error($conn)); + while($var= mysqli_fetch_array($var_sel)) { echo('<tr><td>' . $var['name'] . '</td><td>' . $var['value'] . '</td></tr>'); } Modified: www/gmconsole/check_keys.php =================================================================== --- www/gmconsole/check_keys.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/check_keys.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -13,7 +13,11 @@ } // get variables - $keyField = $_POST['keyField']; + $keyField = null; + if(isset($_POST['keyField'])) + { + $keyField = $_POST['keyField']; + } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> Modified: www/gmconsole/classes/Navigation.php =================================================================== --- www/gmconsole/classes/Navigation.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/classes/Navigation.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -1,6 +1,6 @@ <?php class Navigation { - function S_GetNavigation() { + static function S_GetNavigation() { return <<<NAV <table class="table" style="margin-right:20px"> <tr> Modified: www/gmconsole/classes/PSAccount.php =================================================================== --- www/gmconsole/classes/PSAccount.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/classes/PSAccount.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -24,7 +24,7 @@ // // Constructor // - function PSAccount($pID = 0) { + function __construct($pID = 0) { if ($pID > 0) { $this->ID = $pID; $this->Load(); @@ -47,18 +47,18 @@ PSBaseClass::S_AppendWhereCondition($where, 'id', '=', $this->ID); - $res = mysql_query($sql . $where, $conn); + $res = mysqli_query($conn, $sql . $where); if (!$res) { - die($sql . $where . '<br>' . mysql_error()); + die($sql . $where . '<br>' . mysqli_error($conn)); } else { // since it's the ID, there's only one character - $row = mysql_fetch_array($res); + $row = mysqli_fetch_array($res); $this->UserName = $row['username']; $this->LastLogin = $row['last_login']; $this->CreatedDate = $row['created_date']; $this->LastLoginIP = $row['last_login_ip']; - $this->LastLoginHostName = $row['last_login_hostname']; + //$this->LastLoginHostName = $row['last_login_hostname']; $this->SecurityLevel = $row['security_level']; $this->Country = $row['country']; $this->SpamPoints = $row['spam_points']; @@ -111,7 +111,7 @@ // // Searches for an account by user name and password, used only at login from main page // - function S_FindOne($userName, $password) { + static function S_FindOne($userName, $password) { $conn = PSBaseClass::S_GetConnection(); $sql = 'SELECT * FROM accounts'; @@ -119,11 +119,11 @@ PSBaseClass::S_AppendWhereCondition($where, 'username', '=', $userName); PSBaseClass::S_AppendWhereCondition($where, 'password', '=', md5($password)); - $res = mysql_query($sql . $where, $conn); + $res = mysqli_query($conn, $sql . $where); if (!$res) { - die($sql . $where . "<br>" . mysql_error()); + die($sql . $where . "<br>" . mysqli_error($conn)); } else { - $row = mysql_fetch_array($res); + $row = mysqli_fetch_array($res); if (!$row) { // Authentication failed! return null; @@ -154,7 +154,7 @@ // // Searches for all accounts that match the given the criteria // - function S_Find($email, $lastIP) { + static function S_Find($email, $lastIP) { $conn = PSBaseClass::S_GetConnection(); $sql = 'SELECT * FROM accounts'; @@ -166,15 +166,15 @@ //echo "before query ".$sql . $where . ' ORDER BY username ASC LIMIT 100'; //echo time(); - $res = mysql_query($sql . $where . ' ORDER BY username ASC LIMIT 100', $conn); + $res = mysqli_query($conn, $sql . $where . ' ORDER BY username ASC LIMIT 100'); //echo "after query"; //echo time(); if (!$res) { - die($sql . $where . "<br>" . mysql_error()); + die($sql . $where . "<br>" . mysqli_error($conn)); } else { $accounts = array(); - while (($row = mysql_fetch_array($res)) != null) { + while (($row = mysqli_fetch_array($res)) != null) { $account = new PSAccount(); $account->ID = $row['id']; @@ -182,7 +182,7 @@ $account->LastLogin = $row['last_login']; $account->CreatedDate = $row['created_date']; $account->LastLoginIP = $row['last_login_ip']; - $account->LastLoginHostName = $row['last_login_hostname']; + //$account->LastLoginHostName = $row['last_login_hostname']; $account->SecurityLevel = $row['security_level']; $account->Country = $row['country']; $account->SpamPoints = $row['spam_points']; @@ -204,7 +204,7 @@ // Returns an array of character objects that are GMs, ordered by security leven and name in ascending order. // This function can be called statically. // - function S_GetGMs() { + static function S_GetGMs() { $conn = PSBaseClass::S_GetConnection(); $sql = 'SELECT * FROM accounts'; @@ -211,13 +211,13 @@ $where = ''; PSBaseClass::S_AppendWhereCondition($where, 'security_level', '>=', 10); - $res = mysql_query($sql . $where . ' ORDER BY security_level DESC, username ASC', $conn); + $res = mysqli_query($conn, $sql . $where . ' ORDER BY security_level DESC, username ASC'); if (!$res) { - die($sql . $where . '<br>' . mysql_error()); + die($sql . $where . '<br>' . mysqli_error($conn)); } else { $gmAccounts = array(); - while (($row = mysql_fetch_array($res)) != null) { + while (($row = mysqli_fetch_array($res)) != null) { $gmAccount = new PSAccount(); $gmAccount->ID = $row['id']; @@ -225,7 +225,7 @@ $gmAccount->LastLogin = $row['last_login']; $gmAccount->CreatedDate = $row['created_date']; $gmAccount->LastLoginIP = $row['last_login_ip']; - $gmAccount->LastLoginHostName = $row['last_login_hostname']; + //$gmAccount->LastLoginHostName = $row['last_login_hostname']; $gmAccount->SecurityLevel = $row['security_level']; $gmAccount->Country = $row['country']; $gmAccount->SpamPoints = $row['spam_points']; Modified: www/gmconsole/classes/PSBan.php =================================================================== --- www/gmconsole/classes/PSBan.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/classes/PSBan.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -19,7 +19,7 @@ // // Constructor // - function PSBan() { + function __construct() { } @@ -26,19 +26,19 @@ // // Functions // - function S_GetBans() { + static function S_GetBans() { $conn = PSBaseClass::S_GetConnection(); // base query $sql = 'SELECT a.id, a.username, a.security_level, b.* FROM accounts a, bans b WHERE a.id = b.account order by end desc'; - $res = mysql_query($sql, $conn); + $res = mysqli_query($conn, $sql); if (!$res) { - die($sql . $where . "<br>" . mysql_error()); + die($sql . $where . "<br>" . mysqli_error($conn)); } else { $bans = array(); - while (($row = mysql_fetch_array($res)) != null) { + while (($row = mysqli_fetch_array($res)) != null) { $ban = new PSBan(); $ban->AccountID = $row['account']; Modified: www/gmconsole/classes/PSBaseClass.php =================================================================== --- www/gmconsole/classes/PSBaseClass.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/classes/PSBaseClass.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -9,22 +9,35 @@ var $__IsLoaded; var $conn; - function PSBaseClass() { + function __construct() { } - function S_GetConnection() + static function S_GetConnection() { require('config.php'); + $mysqli; + $mysqli = new mysqli($__DB_HOST, $__DB_USER, $__DB_PASS, $__DB_NAME); + + /* check connection */ + if ($mysqli->connect_errno) //error code 0 means success, causing us to fail this if. + { + printf("Connect failed: %s\n", $mysqli->connect_error); + exit(); + } + return $mysqli; + + /*require('config.php'); + //if ($conn==null) { - $conn = mysql_connect($__DB_HOST, $__DB_USER, $__DB_PASS); - mysql_select_db($__DB_NAME); + $conn = mysqli_connect($__DB_HOST, $__DB_USER, $__DB_PASS); + mysqli_select_db($__DB_NAME); //echo "Opened a db connection."; //} - return $conn; + return $conn;*/ } - function S_AppendWhereCondition(&$where, $param, $op, $value) { + static function S_AppendWhereCondition(&$where, $param, $op, $value) { if (isset($value)) { if ($where == '') { $where .= ' WHERE '; Modified: www/gmconsole/classes/PSCharacter.php =================================================================== --- www/gmconsole/classes/PSCharacter.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/classes/PSCharacter.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -39,7 +39,7 @@ var $TimeConnectedInSeconds; var $ExperiencePoints; var $ProgressionPoints; - var $DuelPoints; + //var $DuelPoints; var $Description; var $CreationTime; var $LastLoginIP; // used only for guild display @@ -48,38 +48,48 @@ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Constructor // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - function PSCharacter($pID = 0) { + /* static function PSCharacter($pID = 0) { if ($pID > 0) { $this->ID = $pID; $this->Load(); } + }*/ + function __construct($pID = 0) + { + if ($pID > 0) + { + $this->ID = $pID; + $this->Load($pID); + } } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Functions +// functions // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - function Load() { - if (!$this->ID) { + function Load($pID) { + + if (!$pID) { die('Cannot load a character if the object trying to load it has an uninitialized property "ID"'); } + $conn = PSBaseClass::S_GetConnection(); $sql = 'SELECT * FROM characters'; $where = ''; - PSBaseClass::S_AppendWhereCondition($where, 'id', '=', $this->ID); + PSBaseClass::S_AppendWhereCondition($where, 'id', '=', $pID); - $res = mysql_query($sql . $where, $conn); + $res = mysqli_query($conn, $sql . $where); if (!$res) { - die($sql . $where . mysql_error()); - } if (!mysql_num_rows($res)) { + die($sql . $where . mysqli_error($conn)); + } if (!mysqli_num_rows($res)) { // the char ID does not exist aborting $this->FirstName = 'INVALID ID'; return; } else { // since it's the ID, there's only one character - $row = mysql_fetch_array($res); + $row = mysqli_fetch_array($res); $this->ID = $row['id']; $this->FirstName = $row['name']; @@ -101,7 +111,7 @@ $this->TimeConnectedInSeconds = $row['time_connected_sec']; $this->ExperiencePoints = $row['experience_points']; $this->ProgressionPoints = $row['progression_points']; - $this->DuelPoints = $row['duel_points']; + // $this->DuelPoints = $row['duel_points']; $this->Description = $row['description']; $this->CreationTime = $row['creation_time']; @@ -112,12 +122,12 @@ // extract stats/skills $sql = 'SELECT * FROM character_skills where character_id='.$this->ID; - $res = mysql_query($sql, $conn); + $res = mysqli_query($conn, $sql); if (!$res) { - die($sql . $where . mysql_error()); + die($sql . $where . mysqli_error($conn)); } else { - while($data = mysql_fetch_array($res)) { + while($data = mysqli_fetch_array($res)) { $stat = $data['skill_id']; //echo '--> '.$stat; @@ -192,7 +202,7 @@ // // Returns all GM actions that this character has done as an array of PSGMCommandLogEntry-objects. // The array is empty, if the character is no GM or has never issued any GM command. - // This function only makes sense if the character in question actually is a GM, or has ever been one. + // This static function only makes sense if the character in question actually is a GM, or has ever been one. // function GetGMCommandLog() { if (!$this->__IsLoaded) { @@ -249,7 +259,7 @@ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Static Functions +// Static static functions // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // @@ -256,9 +266,9 @@ // Searches for characters that fulfill the given search parameters. // Returns an array of character objects ordered by name in ascending order. For performance reasons, a maximum of // 100 characters is returned. If no character match the search parameters, an empty yet initialized array is returned. - // This function can be called statically. + // This static function can be called statically. // - function S_Find($firstName, $lastName, $charType = -1, $lastIP = '') { + static function S_Find($firstName, $lastName, $charType = -1, $lastIP = '') { require_once('PSBaseClass.php'); $conn = PSBaseClass::S_GetConnection(); @@ -281,14 +291,14 @@ PSBaseClass::S_AppendWhereCondition($where, 'a.last_login_ip', '=', $lastIP); } - $res = mysql_query($sql . $where . ' ORDER BY name LIMIT 100', $conn); + $res = mysqli_query($conn, $sql . $where . ' ORDER BY name LIMIT 100'); if (!$res) { - die($sql . $where . mysql_error()); + die($sql . $where . mysqli_error($conn)); } else { $characters = array(); - while (($row = mysql_fetch_array($res)) != null) { + while (($row = mysqli_fetch_array($res)) != null) { $char = new PSCharacter(); $char->ID = $row['id']; @@ -311,7 +321,7 @@ $char->TimeConnectedInSeconds = $row['time_connected_sec']; $char->ExperiencePoints = $row['experience_points']; $char->ProgressionPoints = $row['progression_points']; - $char->DuelPoints = $row['duel_points']; + //$char->DuelPoints = $row['duel_points']; $char->Description = $row['description']; $char->CreationTime = $row['creation_time']; @@ -324,7 +334,7 @@ } // Searches characters owning a specific key - function Key_Find($keyField) { + static function Key_Find($keyField) { require_once('PSBaseClass.php'); $conn = PSBaseClass::S_GetConnection(); @@ -331,14 +341,14 @@ // select name from item_instances s, characters c where c.id=s.char_id_owner and flags like '%key%' and openable_locks=35576198; $sql = 'SELECT c.* FROM item_instances s, characters c where c.id=s.char_id_owner and openable_locks='.$keyField; - $res = mysql_query($sql . ' ORDER BY name LIMIT 100', $conn); + $res = mysqli_query($conn, $sql . ' ORDER BY name LIMIT 100'); if (!$res) { - die($sql . $where . mysql_error()); + die($sql . $where . mysqli_error($conn)); } else { $characters = array(); - while (($row = mysql_fetch_array($res)) != null) { + while (($row = mysqli_fetch_array($res)) != null) { $char = new PSCharacter(); $char->ID = $row['id']; @@ -361,7 +371,7 @@ $char->TimeConnectedInSeconds = $row['time_connected_sec']; $char->ExperiencePoints = $row['experience_points']; $char->ProgressionPoints = $row['progression_points']; - $char->DuelPoints = $row['duel_points']; + // $char->DuelPoints = $row['duel_points']; $char->Description = $row['description']; $char->CreationTime = $row['creation_time']; @@ -377,9 +387,9 @@ // // Returns the leader of a guild. If there's more than one leader (database inconsistency?), the first one read from the // database will be returned. - // This function is intended to be called statically. + // This static function is intended to be called statically. // - function S_GetLeaderOfGuild($guildId) { + static function S_GetLeaderOfGuild($guildId) { $conn = PSBaseClass::S_GetConnection(); $sql = 'SELECT * FROM characters'; @@ -387,13 +397,13 @@ PSBaseClass::S_AppendWhereCondition($where, 'guild_member_of', '=', $guildId); PSBaseClass::S_AppendWhereCondition($where, 'guild_level', '=', 9); - $res = mysql_query($sql . $where, $conn); + $res = mysqli_query($conn, $sql . $where); if (!$res) { - die($sql . $where . "<br>" . mysql_error()); + die($sql . $where . "<br>" . mysqli_error($conn)); } else { // In theory each guild has only one leader. If this is not the case (because of erroneous/incosistent data in the database, // we will simply return the first leader that is returned. - $row = mysql_fetch_array($res); + $row = mysqli_fetch_array($res); $char = new PSCharacter(); @@ -415,7 +425,7 @@ $char->TimeConnectedInSeconds = $row['time_connected_sec']; $char->ExperiencePoints = $row['experience_points']; $char->ProgressionPoints = $row['progression_points']; - $char->DuelPoints = $row['duel_points']; + //$char->DuelPoints = $row['duel_points']; $char->Description = $row['description']; $char->__IsLoaded = true; @@ -428,7 +438,7 @@ // Returns all members of a guild as PSCharacter-objects. They are sorted by guild level (descending), then first name (ascending) // If the guild has no members, an empty array is returned. // - function S_GetMembersOfGuild($guildId,$order) { + static function S_GetMembersOfGuild($guildId,$order) { $conn = PSBaseClass::S_GetConnection(); $sql = 'SELECT * FROM characters c , accounts a '; @@ -435,15 +445,15 @@ $where = 'where c.account_id=a.id '; PSBaseClass::S_AppendWhereCondition($where, 'guild_member_of', '=', $guildId); if ($order) - $res = mysql_query($sql . $where . ' ORDER BY last_login_ip ASC, name ASC', $conn); + $res = mysqli_query($conn, $sql . $where . ' ORDER BY last_login_ip ASC, name ASC'); else - $res = mysql_query($sql . $where . ' ORDER BY guild_level DESC, name ASC', $conn); + $res = mysqli_query($conn, $sql . $where . ' ORDER BY guild_level DESC, name ASC'); if (!$res) { - die($sql . $where . "<br>" . mysql_error()); + die($sql . $where . "<br>" . mysqli_error($conn)); } else { $chars = array(); - while (($row = mysql_fetch_array($res)) != null) { + while (($row = mysqli_fetch_array($res)) != null) { $char = new PSCharacter(); $char->ID = $row['id']; @@ -465,7 +475,7 @@ $char->TimeConnectedInSeconds = $row['time_connected_sec']; $char->ExperiencePoints = $row['experience_points']; $char->ProgressionPoints = $row['progression_points']; - $char->DuelPoints = $row['duel_points']; + // $char->DuelPoints = $row['duel_points']; $char->Description = $row['description']; $char->__IsLoaded = true; @@ -477,7 +487,7 @@ } - function S_GetCharactersOfAccount($accountID) { + static function S_GetCharactersOfAccount($accountID) { $conn = PSBaseClass::S_GetConnection(); $sql = 'SELECT * FROM characters'; @@ -484,13 +494,13 @@ $where = ''; PSBaseClass::S_AppendWhereCondition($where, 'account_id', '=', $accountID); - $res = mysql_query($sql . $where . ' ORDER BY name ASC', $conn); + $res = mysqli_query($conn, $sql . $where . ' ORDER BY name ASC'); if (!$res) { - die($sql . $where . "<br>" . mysql_error()); + die($sql . $where . "<br>" . mysqli_error($conn)); } else { $chars = array(); - while (($row = mysql_fetch_array($res)) != null) { + while (($row = mysqli_fetch_array($res)) != null) { $char = new PSCharacter(); $char->ID = $row['id']; @@ -511,7 +521,7 @@ $char->TimeConnectedInSeconds = $row['time_connected_sec']; $char->ExperiencePoints = $row['experience_points']; $char->ProgressionPoints = $row['progression_points']; - $char->DuelPoints = $row['duel_points']; + //$char->DuelPoints = $row['duel_points']; $char->Description = $row['description']; $char->__IsLoaded = true; Modified: www/gmconsole/classes/PSGMCommandLogEntry.php =================================================================== --- www/gmconsole/classes/PSGMCommandLogEntry.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/classes/PSGMCommandLogEntry.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -18,7 +18,7 @@ // // Constructor // - function PSGMCommandLogEntry() { + function __construct() { } @@ -25,7 +25,7 @@ // // Functions // - function S_GetActionsOfGM($pGMID) { + static function S_GetActionsOfGM($pGMID) { $conn = PSBaseClass::S_GetConnection(); $sql = 'SELECT l.id, gm.id AS gm_id, gm.name AS gm_name, l.command, p.id AS player_id, p.name AS player_name, l.ex_time FROM gm_command_log l INNER JOIN characters gm ON gm.id = l.gm LEFT OUTER JOIN characters p ON p.id = l.player '; @@ -32,17 +32,17 @@ $where = ''; PSBaseClass::S_AppendWhereCondition($where, 'gm', '=', $pGMID); - $res = mysql_query($sql . $where . ' ORDER BY ex_time DESC', $conn); + $res = mysqli_query($conn, $sql . $where . ' ORDER BY ex_time DESC'); if (!$res) { - die($sql . $where . "<br>" . mysql_error()); + die($sql . $where . "<br>" . mysqli_error($conn)); } else { $actions = array(); - while (($row = mysql_fetch_array($res)) != null) { + while (($row = mysqli_fetch_array($res)) != null) { $action = new PSGMCommandLogEntry(); $action->ID = $row['id']; - $action->GMID = $row['gm']; + $action->GMID = $row['gm_id']; $action->GMFirstName = $row['gm_name']; $action->Command = $row['command']; $action->TargetPlayerID = $row['player_id']; Modified: www/gmconsole/classes/PSGmEvents.php =================================================================== --- www/gmconsole/classes/PSGmEvents.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/classes/PSGmEvents.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -26,7 +26,7 @@ $append = ''; } - $connection = PSBaseClass::S_GetConnection(); + $conn = PSBaseClass::S_GetConnection(); $finished = ($completed) ? " WHERE status = '2'" : " WHERE status != '2'"; @@ -34,11 +34,11 @@ .'LEFT JOIN characters c ON c.id = gme.gm_id'; $query .= $finished; $query .= $append; - $result = mysql_query($query); + $result = mysqli_query($conn, $query); //Build list as an array $events = array(); - while ($row = mysql_fetch_assoc($result)) + while ($row = mysqli_fetch_assoc($result)) { $average = $this->getVoteAverage($row['id']); @@ -75,12 +75,12 @@ public function getVoteAverage($event_id) { - $connection = PSBaseClass::S_GetConnection(); + $conn = PSBaseClass::S_GetConnection(); //Get vote total and number of votes from db - $query = sprintf("SELECT SUM(vote), COUNT(player_id) FROM character_events WHERE vote IS NOT NULL AND event_id = '%s'", mysql_real_escape_string($event_id)); - $result = mysql_query($query); - $row = mysql_fetch_assoc($result); + $query = sprintf("SELECT SUM(vote), COUNT(player_id) FROM character_events WHERE vote IS NOT NULL AND event_id = '%s'", mysqli_real_escape_string($conn, $event_id)); + $result = mysqli_query($conn, $query); + $row = mysqli_fetch_assoc($result); //to avoid division by zero if ($row['COUNT(player_id)'] < 1) @@ -100,25 +100,25 @@ public function getEventDetails($event_id) { - $connection = PSBaseClass::S_GetConnection(); + $conn = PSBaseClass::S_GetConnection(); $query = sprintf("SELECT gme.name, gme.description, c.name AS gm_name, c.lastname AS gm_lastname, gme.id AS id FROM gm_events gme - LEFT JOIN characters c ON c.id = gme.gm_id WHERE gme.id ='%s'", mysql_real_escape_string($event_id)); - $result = mysql_query($query); + LEFT JOIN characters c ON c.id = gme.gm_id WHERE gme.id ='%s'", mysqli_real_escape_string($conn, $event_id)); + $result = mysqli_query($conn, $query); - return mysql_fetch_assoc($result); + return mysqli_fetch_assoc($result); } public function getEventComments($event_id) { - $connection = PSBaseClass::S_GetConnection(); + $conn = PSBaseClass::S_GetConnection(); $query = sprintf("SELECT ce.comments, ce.vote, c.name, c.lastname FROM character_events ce - LEFT JOIN characters c ON ce.player_id = c.id WHERE ce.comments IS NOT NULL AND ce.event_id='%s'", mysql_real_escape_string($event_id)); - $result = mysql_query($query); + LEFT JOIN characters c ON ce.player_id = c.id WHERE ce.comments IS NOT NULL AND ce.event_id='%s'", mysqli_real_escape_string($conn, $event_id)); + $result = mysqli_query($conn, $query); $comments = array(); - while ($row = mysql_fetch_assoc($result)) + while ($row = mysqli_fetch_assoc($result)) { $comments[] = array('name'=>$row['name'] . ' ' . $row['lastname'], 'vote'=>$row['vote'], 'comment'=>$row['comments']); } @@ -128,13 +128,13 @@ public function getNonVoters($event_id) { - $connection = PSBaseClass::S_GetConnection(); + $conn = PSBaseClass::S_GetConnection(); - $query = sprintf("SELECT c.name, c.lastname FROM characters c JOIN character_events ce ON ce.player_id = c.id WHERE ce.vote IS NULL AND ce.event_id = '%s'", mysql_real_escape_string($event_id)); - $result = mysql_query($query); + $query = sprintf("SELECT c.name, c.lastname FROM characters c JOIN character_events ce ON ce.player_id = c.id WHERE ce.vote IS NULL AND ce.event_id = '%s'", mysqli_real_escape_string($conn, $event_id)); + $result = mysqli_query($conn, $query); $non_voters = array(); - while($row = mysql_fetch_assoc($result)) + while($row = mysqli_fetch_assoc($result)) { $non_voters[] = $row; } Modified: www/gmconsole/classes/PSGuild.php =================================================================== --- www/gmconsole/classes/PSGuild.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/classes/PSGuild.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -22,7 +22,7 @@ // // Constructor // - function PSGuild($pID = 0) { + function __construct($pID = 0) { if ($pID > 0) { $this->ID = $pID; $this->Load(); @@ -44,13 +44,13 @@ $where = ''; PSBaseClass::S_AppendWhereCondition($where, 'id', '=', $this->ID); - $res = mysql_query($sql . $where, $conn); + $res = mysqli_query($conn, $sql . $where); if (!$res) { - die($sql . $where . mysql_error()); + die($sql . $where . mysqli_error($conn)); } else { // since it's the ID, there's only one character - $row = mysql_fetch_array($res); + $row = mysqli_fetch_array($res); $this->Name = $row['name']; $this->FounderID = $row['char_id_founder']; @@ -104,7 +104,7 @@ } - function S_Find($guildName) { + static function S_Find($guildName) { $conn = PSBaseClass::S_GetConnection(); $sql = 'SELECT * FROM guilds'; @@ -111,13 +111,13 @@ $where = ''; PSBaseClass::S_AppendWhereCondition($where, 'name', 'LIKE', $guildName); - $res = mysql_query($sql . $where . " ORDER BY name LIMIT 100", $conn); + $res = mysqli_query($conn, $sql . $where . " ORDER BY name LIMIT 100"); if (!$res) { - die($sql . $where . mysql_error()); + die($sql . $where . mysqli_error($conn)); } else { $guilds = array(); - while (($row = mysql_fetch_array($res)) != null) { + while (($row = mysqli_fetch_array($res)) != null) { $guild = new PSGuild(); $guild->ID = $row['id']; Modified: www/gmconsole/classes/PSItem.php =================================================================== --- www/gmconsole/classes/PSItem.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/classes/PSItem.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -32,7 +32,7 @@ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Constructor // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - function PSItem($pID = 0) { + function __construct($pID = 0) { if ($pID > 0) { $this->ID = $pID; $this->Load(); @@ -59,13 +59,13 @@ $where = ''; PSBaseClass::S_AppendWhereCondition($where, 'inst.id', '=', $this->ID); - $res = mysql_query($sql . $where, $conn); + $res = mysqli_query($conn, $sql . $where); if (!$res) { - die($sql . $where . mysql_error()); + die($sql . $where . mysqli_error($conn)); } else { // Only one item will be returned - $row = mysql_fetch_array($res); + $row = mysqli_fetch_array($res); $this->ID = $row['inst_id']; $this->OwnerID = $row['inst_owner']; @@ -187,7 +187,7 @@ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Static Functions // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - function S_GetInventoryOfPlayer($playerID) { + static function S_GetInventoryOfPlayer($playerID) { if (!$playerID) { die('Cannot load the inventory of a player who does not exist.'); } @@ -202,14 +202,14 @@ $where = ''; PSBaseClass::S_AppendWhereCondition($where, 'char_id_owner', '=', $playerID); - $res = mysql_query($sql . $where . ' ORDER BY inst_location_in_parent ASC', $conn); + $res = mysqli_query($conn, $sql . $where . ' ORDER BY inst_location_in_parent ASC'); if (!$res) { - die($sql . $where . mysql_error()); + die($sql . $where . mysqli_error($conn)); } else { $items = array(); - while (($row = mysql_fetch_array($res)) != null) { + while (($row = mysqli_fetch_array($res)) != null) { $item = new PSItem(); $item->ID = $row['inst_id']; @@ -217,9 +217,11 @@ $item->ParentItem = $row['parent_item_id']; $item->LocationInParent = $row['inst_location_in_parent']; $item->StackCount = $row['inst_stack_count']; - $this->CreatorID = $row['inst_creator_mark_id']; + //$this->CreatorID = $row['inst_creator_mark_id']; + $item->CreatorID = $row['inst_creator_mark_id']; $item->ItemQuality = $row['inst_item_quality']; - $this->DecayResistance = $row['inst_decay_resistance']; + //$this->DecayResistance = $row['inst_decay_resistance']; + $item->DecayResistance = $row['inst_decay_resistance']; $item->Name = $row['stats_name']; $item->Weight = $row['stats_weight']; $item->ValidSlots = $row['stats_valid_slots']; Modified: www/gmconsole/classes/PSNameChange.php =================================================================== --- www/gmconsole/classes/PSNameChange.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/classes/PSNameChange.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -17,11 +17,11 @@ // // Constructor // - function PSNameChange() { + function __construct() { } - function S_GetLatest($page = 0) { + static function S_GetLatest($page = 0) { $conn = PSBaseClass::S_GetConnection(); $sql = 'SELECT l.command, l.ex_time, gm.name FROM gm_command_log l INNER JOIN characters gm ON l.gm = gm.id'; @@ -28,14 +28,14 @@ $where = ''; PSBaseClass::S_AppendWhereCondition($where, 'command', 'LIKE', '/changename %'); - $res = mysql_query($sql . $where . ' ORDER BY ex_time DESC LIMIT ' . ($page * 100) . ', 100', $conn); + $res = mysqli_query($conn, $sql . $where . ' ORDER BY ex_time DESC LIMIT ' . ($page * 100) . ', 100'); if (!$res) { - die($sql . $where . ' ORDER BY ex_time DESC LIMIT ' . ($page * 100) . ', 100<br/>' . mysql_error()); + die($sql . $where . ' ORDER BY ex_time DESC LIMIT ' . ($page * 100) . ', 100<br/>' . mysqli_error($conn)); } else { $namechanges = array(); - while (($row = mysql_fetch_array($res)) != null) { + while (($row = mysqli_fetch_array($res)) != null) { $namechange = new PSNameChange(); // First, remove multiple space characters because they will cause trouble when splitting Modified: www/gmconsole/classes/PSPetition.php =================================================================== --- www/gmconsole/classes/PSPetition.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/classes/PSPetition.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -22,7 +22,7 @@ // // Constructor // - function PSPetition() { + function __construct() { } @@ -29,7 +29,7 @@ // // Functions // - function S_GetPetitions($type = 1) { + static function S_GetPetitions($type = 1) { $conn = PSBaseClass::S_GetConnection(); // base query @@ -43,13 +43,13 @@ if ($type == 2) $sql .= 'IN (\'closed\')'; - $res = mysql_query($sql . " ORDER BY created_date DESC LIMIT 100", $conn); + $res = mysqli_query($conn, $sql . " ORDER BY created_date DESC LIMIT 100"); if (!$res) { - die($sql . $where . "<br>" . mysql_error()); + die($sql . $where . "<br>" . mysqli_error($conn)); } else { $petitions = array(); - while (($row = mysql_fetch_array($res)) != null) { + while (($row = mysqli_fetch_array($res)) != null) { $petition = new PSPetition(); $petition->ID = $row['id']; Modified: www/gmconsole/classes/PSQuests.php =================================================================== --- www/gmconsole/classes/PSQuests.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/classes/PSQuests.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -15,7 +15,7 @@ // // Constructor // - function PSQuests() { + function __construct() { } @@ -22,19 +22,19 @@ // // Functions // - function S_GetQuestEntries($pID) { + static function S_GetQuestEntries($pID) { $conn = PSBaseClass::S_GetConnection(); $sql = 'SELECT q.id, q.name,c.status, c.remaininglockout from quests q, character_quests c where q.id=c.quest_id and player_id='.$pID; - $res = mysql_query($sql , $conn); + $res = mysqli_query($conn, $sql); if (!$res) { - die($sql . $where . "<br>" . mysql_error()); + die($sql . $where . "<br>" . mysqli_error($conn)); } else { $actions = array(); - while (($row = mysql_fetch_array($res)) != null) { + while (($row = mysqli_fetch_array($res)) != null) { $action = new PSQuests(); $action->ID = $row['id']; @@ -50,7 +50,7 @@ } } - function S_GetQuestStepEntries($pID, $qID) { + static function S_GetQuestStepEntries($pID, $qID) { $conn = PSBaseClass::S_GetConnection(); $min = 10000+(100*$qID); @@ -58,13 +58,13 @@ $sql = 'SELECT quest_id, status, remaininglockout, last_response from character_quests where player_id='.$pID.' and quest_id>'.$min.' and quest_id<'.$max. ' order by quest_id'; - $res = mysql_query($sql , $conn); + $res = mysqli_query($conn, $sql); if (!$res) { - die($sql . $where . "<br>" . mysql_error()); + die($sql . $where . "<br>" . mysqli_error($conn)); } else { $actions = array(); - while (($row = mysql_fetch_array($res)) != null) { + while (($row = mysqli_fetch_array($res)) != null) { $action = new PSQuests(); $action->ID = $row['quest_id']; Modified: www/gmconsole/classes/PSRace.php =================================================================== --- www/gmconsole/classes/PSRace.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/classes/PSRace.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -15,7 +15,7 @@ // // Constructor // - function PSRace($pID = -1) { + function __construct($pID = -1) { if ($pID > -1) { $this->ID = $pID; $this->Load(); @@ -37,13 +37,13 @@ $where = ''; PSBaseClass::S_AppendWhereCondition($where, 'id', '=', $this->ID); - $res = mysql_query($sql . $where, $conn); + $res = mysqli_query($conn, $sql . $where); if (!$res) { - die($sql . $where . mysql_error()); + die($sql . $where . mysqli_error($conn)); } else { // since it's the ID, there's only one character - $row = mysql_fetch_array($res); + $row = mysqli_fetch_array($res); $this->Name = $row['name']; $this->Sex = $row['sex']; Modified: www/gmconsole/config.php =================================================================== --- www/gmconsole/config.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/config.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -1,5 +1,5 @@ <?php - + require_once('classes/PSBaseClass.php'); // // Settings to connect to the database // @@ -32,4 +32,5 @@ // set time/date date_default_timezone_set('UTC'); + ?> \ No newline at end of file Modified: www/gmconsole/guilddetails.php =================================================================== --- www/gmconsole/guilddetails.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/guilddetails.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -13,10 +13,21 @@ } // get variables - $guildId = $_POST['guildId']; - if (!isset($_POST['guildId'])) - $guildId = $_GET['guildId']; - $order = $_GET['order']; + $guildId = null; + if(isset($_POST['guildId'])) + { + $guildId = $_POST['guildId']; + } + else + { + $guildId = $_GET['guildId']; + } + + $order = null; + if(isset($_GET['order'])) + { + $order = $_GET['order']; + } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> @@ -53,7 +64,7 @@ $guild = new PSGuild($guildId); $founder = $guild->GetFounder(); $guildLeader = $guild->GetLeader(); - $orderbyIP = $_GET['order'] ? 1 : 0; + $orderbyIP = $order ? 1 : 0; $members = $guild->GetMembers($order); ?> Modified: www/gmconsole/guildsearch.php =================================================================== --- www/gmconsole/guildsearch.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/guildsearch.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -13,7 +13,11 @@ } // get variables - $guildName = $_POST['guildName']; + $guildName = ''; + if(isset($_POST['guildName'])) + { + $guildName = $_POST['guildName']; + } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> Modified: www/gmconsole/namechanges.php =================================================================== --- www/gmconsole/namechanges.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/namechanges.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -10,8 +10,11 @@ header("Location: index.php?origin=guildsearch"); exit; } - - $page = $_POST['pageId']; + $page = null; + if(isset($_POST['pageId'])) + { + $page = $_POST['pageId']; + } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> Modified: www/gmconsole/petitions.php =================================================================== --- www/gmconsole/petitions.php 2020-05-30 20:03:50 UTC (rev 10006) +++ www/gmconsole/petitions.php 2021-02-27 20:32:26 UTC (rev 10007) @@ -10,6 +10,11 @@ header("Location: index.php?origin=petitions"); exit; } + $type = null; + if(isset($_GET['type'])) + { + $type = $_GET['type']; + } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> @@ -46,12 +51,12 @@ <th>Assigned to</th> <th>Escalation</th> <?php - if ($_GET["type"]==2) { + if ($type==2) { echo "<th>Resolution</th>"; } echo "</tr>"; - if ($_GET["type"]==2) { + if ($type==2) { $petitions = PSPetition::S_GetPetitions(2); } else $petitions = PSPetition::S_GetPetitions(1); @@ -65,7 +70,7 @@ echo '<td><a href="javascript:setCharId(\'' . $petition->CaseworkerID . '\');">' . $petition->CaseworkerFirstName . '</a></td>'; echo '<td>' . $petition->EscalationLevel . '</td>'; - if ($_GET["type"]==2) { + if ($type==2) { echo '<td>' . $petition->Resolution . '</td>'; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rav...@us...> - 2020-05-30 20:03:52
|
Revision: 10006 http://sourceforge.net/p/planeshift/code/10006 Author: ravna-ps Date: 2020-05-30 20:03:50 +0000 (Sat, 30 May 2020) Log Message: ----------- Added ID to resource overview. Modified Paths: -------------- www/webconsole-new/crafting/resources.php Modified: www/webconsole-new/crafting/resources.php =================================================================== --- www/webconsole-new/crafting/resources.php 2020-03-07 15:40:17 UTC (rev 10005) +++ www/webconsole-new/crafting/resources.php 2020-05-30 20:03:50 UTC (rev 10006) @@ -148,7 +148,7 @@ } } $result = mysql_query2($query); - echo '<table border="1"><tr><th><a href="./index.php?do=resource&sort=loc">Location</a></th><th>Radius</th><th>Visible Radius</th><th>Probability</th><th><a href="./index.php?do=resource&sort=skill">Skill</a></th><th>Skill Level</th><th><a href="./index.php?do=resource&sort=tool">Tool Category</a></th><th>Item Quality</th><th>Animation</th><th>Animation Duration</th><th><a href="./index.php?do=resource&sort=item">Item</a></th><th>Resource "Nickname"</th><th>Amount (1)</th><th>Interval (2)</th><th>Max Random (3)</th>'; + echo '<table border="1"><tr><th>ID</th><th><a href="./index.php?do=resource&sort=loc">Location</a></th><th>Radius</th><th>Visible Radius</th><th>Probability</th><th><a href="./index.php?do=resource&sort=skill">Skill</a></th><th>Skill Level</th><th><a href="./index.php?do=resource&sort=tool">Tool Category</a></th><th>Item Quality</th><th>Animation</th><th>Animation Duration</th><th><a href="./index.php?do=resource&sort=item">Item</a></th><th>Resource "Nickname"</th><th>Amount (1)</th><th>Interval (2)</th><th>Max Random (3)</th>'; if (checkaccess('natres', 'edit')){ echo '<th>Actions</th>'; } @@ -155,6 +155,7 @@ echo '</tr>'; while ($row = fetchSqlAssoc($result)){ echo '<tr>'; + echo '<td>'.$row['id'].'</td>'; echo '<td>'.$row['sector'].'/'.$row['loc_x'].'/'.$row['loc_y'].'/'.$row['loc_z'].'</td>'; echo '<td>'.$row['radius'].'</td>'; echo '<td>'.$row['visible_radius'].'</td>'; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2020-03-07 15:40:19
|
Revision: 10005 http://sourceforge.net/p/planeshift/code/10005 Author: lpancallo Date: 2020-03-07 15:40:17 +0000 (Sat, 07 Mar 2020) Log Message: ----------- Update security list, added level 45 for full members Modified Paths: -------------- trunk/src/server/database/mysql/wc_accessrules.sql Modified: trunk/src/server/database/mysql/wc_accessrules.sql =================================================================== --- trunk/src/server/database/mysql/wc_accessrules.sql 2020-01-06 17:41:15 UTC (rev 10004) +++ trunk/src/server/database/mysql/wc_accessrules.sql 2020-03-07 15:40:17 UTC (rev 10005) @@ -22,6 +22,14 @@ -- 33=as above plus can see spells (rules profile III) -- 34=as *31* plus can see quests (setting profile II) +-- 35-39 as the ones from 30-34 but with EDIT access + +-- 40-44 as the ones from 30-34 but with CREATE access + +-- 45 (full member profile) all with CREATE access, including setting and rules. + +-- 50 (admin access) ALL access with DELETE + -- access: 1=read, 2=edit, 3=create, 4=delete LOCK TABLES `wc_accessrules` WRITE; @@ -44,6 +52,7 @@ INSERT INTO wc_accessrules values (340,42,'npcs',3),(341,42,'quests',0),(342,42,'items',3),(343,42,'als',3),(344,42,'natres',3),(345,42,'crafting',3),(346,42,'spells',0),(347,42,'other',3),(348,42,'statistics',3),(349,42,'assets',3),(350,42,'admin',3); INSERT INTO wc_accessrules values (360,43,'npcs',3),(361,43,'quests',0),(362,43,'items',3),(363,43,'als',3),(364,43,'natres',3),(365,43,'crafting',3),(366,43,'spells',3),(367,43,'other',3),(368,43,'statistics',3),(369,43,'assets',3),(370,43,'admin',3); INSERT INTO wc_accessrules values (380,44,'npcs',3),(381,44,'quests',3),(382,44,'items',3),(383,44,'als',3),(384,44,'natres',3),(385,44,'crafting',0),(386,44,'spells',0),(387,44,'other',3),(388,44,'statistics',3),(389,44,'assets',3),(390,44,'admin',3); +INSERT INTO wc_accessrules values (400,45,'npcs',3),(401,45,'quests',3),(402,45,'items',3),(403,45,'als',3),(404,45,'natres',3),(405,45,'crafting',3),(406,45,'spells',3),(407,45,'other',3),(408,45,'statistics',3),(409,45,'assets',3),(410,45,'admin',3); /*!40000 ALTER TABLE `wc_accessrules` ENABLE KEYS */; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2020-01-06 17:41:17
|
Revision: 10004 http://sourceforge.net/p/planeshift/code/10004 Author: lpancallo Date: 2020-01-06 17:41:15 +0000 (Mon, 06 Jan 2020) Log Message: ----------- Added some documentation Modified Paths: -------------- trunk/src/common/net/messages.h trunk/src/server/bulkobjects/psitem.cpp trunk/src/server/guildmanager.cpp trunk/src/server/guildmanager.h Modified: trunk/src/common/net/messages.h =================================================================== --- trunk/src/common/net/messages.h 2018-11-01 11:40:25 UTC (rev 10003) +++ trunk/src/common/net/messages.h 2020-01-06 17:41:15 UTC (rev 10004) @@ -4818,6 +4818,10 @@ csString newObjName; }; +/* + * Used to send the information to the clients that a player or multiple players have changed their guild + * The client will then update the second line of text (containing the guild's name) above the player's head. + */ class psUpdatePlayerGuildMessage : public psMessageCracker { public: Modified: trunk/src/server/bulkobjects/psitem.cpp =================================================================== --- trunk/src/server/bulkobjects/psitem.cpp 2018-11-01 11:40:25 UTC (rev 10003) +++ trunk/src/server/bulkobjects/psitem.cpp 2020-01-06 17:41:15 UTC (rev 10004) @@ -3277,6 +3277,7 @@ GetImageName(), 0); + // if the container is a physical object on the ground, then use the item ID, if not then the containerID = slotID passed in as parameter if(gItem != NULL) outgoing.containerID = gItem->GetEID().Unbox(); else Modified: trunk/src/server/guildmanager.cpp =================================================================== --- trunk/src/server/guildmanager.cpp 2018-11-01 11:40:25 UTC (rev 10003) +++ trunk/src/server/guildmanager.cpp 2020-01-06 17:41:15 UTC (rev 10004) @@ -470,6 +470,7 @@ { int clientnum = client->GetClientNum(); + // check if you are in a guild psGuildInfo* guild = client->GetCharacterData()->GetGuild(); if(guild == NULL) { @@ -487,6 +488,7 @@ new GuildNotifySubscription(guild->GetID(), client->GetClientNum(), RetrieveOnlineOnly(root)); notifySubscr.Push(subscr); + // sends all guild information to the client SendGuildData(client); SendLevelData(client); SendMemberData(client, subscr->onlineOnly); @@ -940,10 +942,12 @@ psSectorInfo* sector = NULL; csString open; + // check if player is in a guild psGuildInfo* guild = client->GetCharacterData()->GetGuild(); if(guild == NULL) return; + // check if levels are defined psGuildLevel* level = client->GetCharacterData()->GetGuildLevel(); if(level == NULL) return; Modified: trunk/src/server/guildmanager.h =================================================================== --- trunk/src/server/guildmanager.h 2018-11-01 11:40:25 UTC (rev 10003) +++ trunk/src/server/guildmanager.h 2020-01-06 17:41:15 UTC (rev 10004) @@ -102,6 +102,7 @@ void HandleSetGuildNotifications(Client* client,iDocumentNode* root); ///Sets the status of alliance notifications when an alliance member logins/logsout void HandleSetAllianceNotifications(Client* client,iDocumentNode* root); + ///Sets the permission of specific level and priviledge (example: Initiate, View Chat, yes) void HandleSetLevelRight(Client* client,iDocumentNode* root); void HandleRemoveMember(Client* client,iDocumentNode* root); void HandleSetMemberLevel(Client* client,iDocumentNode* root); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2018-11-01 11:40:28
|
Revision: 10003 http://sourceforge.net/p/planeshift/code/10003 Author: lpancallo Date: 2018-11-01 11:40:25 +0000 (Thu, 01 Nov 2018) Log Message: ----------- Added some comments. Modified Paths: -------------- trunk/src/common/net/messages.h trunk/src/npcclient/npcoperations.cpp trunk/src/server/bulkobjects/pscharacter.h trunk/src/server/combatmanager.cpp trunk/src/server/exchangemanager.cpp trunk/src/server/psserverchar.cpp trunk/src/server/scripting.cpp Modified: trunk/src/common/net/messages.h =================================================================== --- trunk/src/common/net/messages.h 2018-07-01 13:27:25 UTC (rev 10002) +++ trunk/src/common/net/messages.h 2018-11-01 11:40:25 UTC (rev 10003) @@ -2963,6 +2963,7 @@ VIEWBANK }; + // Used to display information in the bankwindow with psGUIBankingMessage::VIEWBANK psGUIBankingMessage(uint32_t clientNum, uint8_t command, bool guild, @@ -2981,6 +2982,7 @@ float exchangeFee, bool forceOpen); + // Used to withdraw or deposit with psGUIBankingMessage::WITHDRAWFUNDS or psGUIBankingMessage::DEPOSITFUNDS psGUIBankingMessage(uint8_t command, bool guild, int circles, @@ -2988,6 +2990,7 @@ int hexas, int trias); + // Used to exchange coins with psGUIBankingMessage::EXCHANGECOINS psGUIBankingMessage(uint8_t command, bool guild, int coins, Modified: trunk/src/npcclient/npcoperations.cpp =================================================================== --- trunk/src/npcclient/npcoperations.cpp 2018-07-01 13:27:25 UTC (rev 10002) +++ trunk/src/npcclient/npcoperations.cpp 2018-11-01 11:40:25 UTC (rev 10003) @@ -4593,7 +4593,7 @@ target_angle = psGameObject::CalculateIncidentAngle(pos,dest); - NPCDebug(npc, 5, "Rotate to located destinaion of %.2f deg",target_angle*180.0f/PI); + NPCDebug(npc, 5, "Rotate to located destination of %.2f deg",target_angle*180.0f/PI); if(pos == dest && sector == dest_sector && (fabs(rot-target_angle)<PI/30.0)) { Modified: trunk/src/server/bulkobjects/pscharacter.h =================================================================== --- trunk/src/server/bulkobjects/pscharacter.h 2018-07-01 13:27:25 UTC (rev 10002) +++ trunk/src/server/bulkobjects/pscharacter.h 2018-11-01 11:40:25 UTC (rev 10003) @@ -1811,6 +1811,8 @@ ///< should prevent normal HP calculations from taking place static const char* characterTypeName[]; + + // see enum PSCHARACTER_TYPE for list of types unsigned int characterType; /// Array of items waiting to be looted. Modified: trunk/src/server/combatmanager.cpp =================================================================== --- trunk/src/server/combatmanager.cpp 2018-07-01 13:27:25 UTC (rev 10002) +++ trunk/src/server/combatmanager.cpp 2018-11-01 11:40:25 UTC (rev 10003) @@ -203,6 +203,7 @@ bool startedAttacking=false; bool haveWeapon=false; + // Cycle through all the equipped slots to see if any can issue an attack for(int slot=0; slot<PSCHARACTER_SLOT_BULK1; slot++) { // See if this slot is able to attack Modified: trunk/src/server/exchangemanager.cpp =================================================================== --- trunk/src/server/exchangemanager.cpp 2018-07-01 13:27:25 UTC (rev 10002) +++ trunk/src/server/exchangemanager.cpp 2018-11-01 11:40:25 UTC (rev 10003) @@ -904,9 +904,11 @@ void PlayerToPlayerExchange::SendAddItemMessage(Client* fromClient, int slot, psCharacterInventory::psCharacterInventoryItem* invItem) { + // sends the message to the player Exchange::SendAddItemMessage(fromClient, slot, invItem); psItem* item = invItem->GetItem(); + // sends the message to the OTHER player part of the trade Client* toClient = GetOtherClient(fromClient); psExchangeAddItemMsg msg(toClient->GetClientNum(), item->GetName(), @@ -918,8 +920,10 @@ void PlayerToPlayerExchange::SendRemoveItemMessage(Client* fromClient, int slot) { + // sends the message to the player Exchange::SendRemoveItemMessage(fromClient, slot); + // sends the message to the OTHER player part of the trade Client* toClient = GetOtherClient(fromClient); psExchangeRemoveItemMsg msg(toClient->GetClientNum(), CONTAINER_EXCHANGE_RECEIVING, slot, 0); Modified: trunk/src/server/psserverchar.cpp =================================================================== --- trunk/src/server/psserverchar.cpp 2018-07-01 13:27:25 UTC (rev 10002) +++ trunk/src/server/psserverchar.cpp 2018-11-01 11:40:25 UTC (rev 10003) @@ -452,6 +452,7 @@ msgsize += strlen(item->GetName()) + 1 + sizeof(uint32_t) * 5 + sizeof(float) * 2 + strlen(item->GetImageName()) + 1 + sizeof(uint8_t); } + // Subtracts the money you are offering in an exchange from the update of your inventory view psMoney m = chardata->Money(); Exchange* exchange = exchanging ? psserver->exchangemanager->GetExchange(client->GetExchangeID()) : NULL; if(exchange) Modified: trunk/src/server/scripting.cpp =================================================================== --- trunk/src/server/scripting.cpp 2018-07-01 13:27:25 UTC (rev 10002) +++ trunk/src/server/scripting.cpp 2018-11-01 11:40:25 UTC (rev 10003) @@ -2069,7 +2069,7 @@ virtual void Run(MathEnvironment* env) { gemObject* target = GetObject(env, targetVar); - gemObject* source = target; + gemObject* source = target; // we consider the source = target in case source is not specified float scale = 0.0f; if(!sourceVar.IsEmpty()) source = GetObject(env, sourceVar); @@ -2081,6 +2081,7 @@ if(attached) { + // Send effect message to client psEffectMessage fx(0, name, csVector3(0,0,0), source->GetEID(), target->GetEID(), 0, scale); if(!fx.valid) { @@ -2099,7 +2100,7 @@ pos.x -= DROP_DISTANCE* sinf(yrot); pos.z -= DROP_DISTANCE* cosf(yrot); - // Send effect message + // Send effect message to client psEffectMessage fx(0, name, pos, 0, 0, 0, scale); if(!fx.valid) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2018-07-01 13:27:33
|
Revision: 10002 http://sourceforge.net/p/planeshift/code/10002 Author: lpancallo Date: 2018-07-01 13:27:25 +0000 (Sun, 01 Jul 2018) Log Message: ----------- Small documentation updates Modified Paths: -------------- trunk/src/client/globals.h trunk/src/common/util/location.cpp trunk/src/common/util/location.h trunk/src/common/util/psconst.h trunk/src/npcclient/globals.h trunk/src/npcclient/networkmgr.cpp trunk/src/npcclient/npcbehave.cpp trunk/src/npcclient/npcclient.cpp trunk/src/npcclient/npcoperations.cpp trunk/src/npcclient/perceptions.h trunk/src/server/adminmanager.cpp trunk/src/server/bulkobjects/servervitals.cpp trunk/src/server/gem.h trunk/src/server/npcmanager.cpp trunk/src/server/psserver.cpp trunk/src/server/weathermanager.cpp trunk/src/server/workmanager.cpp trunk/vfs.cfg Modified: trunk/src/client/globals.h =================================================================== --- trunk/src/client/globals.h 2018-04-30 11:45:31 UTC (rev 10001) +++ trunk/src/client/globals.h 2018-07-01 13:27:25 UTC (rev 10002) @@ -18,7 +18,7 @@ */ /* This file holds definitions for ALL global variables in the planeshift - * server, normally you should move global variables into the psServer class + * client, normally you should move global variables into the psServer class */ #ifndef __GLOBALS_H__ #define __GLOBALS_H__ Modified: trunk/src/common/util/location.cpp =================================================================== --- trunk/src/common/util/location.cpp 2018-04-30 11:45:31 UTC (rev 10001) +++ trunk/src/common/util/location.cpp 2018-07-01 13:27:25 UTC (rev 10002) @@ -620,7 +620,7 @@ } // Load region with same master location type - Result rs2(db->Select("select loc.*,s.name as sector from sc_locations loc, sectors s where loc.loc_sector_id = s.id and type_id = %d and id_prev_loc_in_region > 0",id)); // Only load regions, locations has been loaded allready + Result rs2(db->Select("select loc.*,s.name as sector from sc_locations loc, sectors s where loc.loc_sector_id = s.id and type_id = %d and id_prev_loc_in_region > 0",id)); // Only load regions, locations has been loaded already csArray<Location*> tmpLocs; Modified: trunk/src/common/util/location.h =================================================================== --- trunk/src/common/util/location.h 2018-04-30 11:45:31 UTC (rev 10001) +++ trunk/src/common/util/location.h 2018-07-01 13:27:25 UTC (rev 10002) @@ -373,15 +373,21 @@ */ Location* GetLocation(int index); - /** Find a region by name. + /** Find a region with a given name. + * This function handles the searching for the specified region name + * so that other functions can refer to the region directly. */ LocationType* FindRegion(const char* regname); - /** Find a location type by name + /** Find a location with a given name. + * This function handles the searching for the specified location type + * so that other functions can refer to the location type directly. */ LocationType* FindLocation(const char* typeName); - /** Find a location of a specfic location type by nam. + /** + * This function handles the searching for the specified object + * type and basically does the work for the \<locate\> script command. */ Location* FindLocation(const char* typeName, const char* name); Modified: trunk/src/common/util/psconst.h =================================================================== --- trunk/src/common/util/psconst.h 2018-04-30 11:45:31 UTC (rev 10001) +++ trunk/src/common/util/psconst.h 2018-07-01 13:27:25 UTC (rev 10002) @@ -97,8 +97,8 @@ #define IS_CONTAINER true -#define GAME_MINUTE_IN_SECONDS 10 ///< Number of seconds for each game minute, 10sec real time for 1 minute game time -#define GAME_MINUTE_IN_TICKS (GAME_MINUTE_IN_SECONDS*1000) ///< Number of ticks for each game minute, 10sec real time for 1 minute game time +#define GAME_MINUTE_IN_SECONDS 10 ///< Number of seconds for each game minute, 10sec real time advances 1 minute in game time +#define GAME_MINUTE_IN_TICKS (GAME_MINUTE_IN_SECONDS*1000) ///< Number of ticks for each game minute, 10sec real time advances 1 minute in game time /** @name Minimum guild requirements */ Modified: trunk/src/npcclient/globals.h =================================================================== --- trunk/src/npcclient/globals.h 2018-04-30 11:45:31 UTC (rev 10001) +++ trunk/src/npcclient/globals.h 2018-07-01 13:27:25 UTC (rev 10002) @@ -18,7 +18,7 @@ */ /* This file holds definitions for ALL global variables in the planeshift - * server, normally you should move global variables into the psServer class + * npcclient, normally you should move global variables into the psServer class */ #ifndef __GLOBALS_H__ #define __GLOBALS_H__ Modified: trunk/src/npcclient/networkmgr.cpp =================================================================== --- trunk/src/npcclient/networkmgr.cpp 2018-04-30 11:45:31 UTC (rev 10001) +++ trunk/src/npcclient/networkmgr.cpp 2018-07-01 13:27:25 UTC (rev 10002) @@ -1114,7 +1114,7 @@ gemNPCObject* target = npcclient->FindEntityID(targetEID); if(!target) { - NPCDebug(npc, 5, "Got access perception from unknown target(%s)!\n", ShowID(targetEID)); + NPCDebug(npc, 5, "Got assess perception from unknown target(%s)!\n", ShowID(targetEID)); break; } Modified: trunk/src/npcclient/npcbehave.cpp =================================================================== --- trunk/src/npcclient/npcbehave.cpp 2018-04-30 11:45:31 UTC (rev 10001) +++ trunk/src/npcclient/npcbehave.cpp 2018-07-01 13:27:25 UTC (rev 10002) @@ -1031,7 +1031,7 @@ } // TODO: Remove this check when all servers has been updated. - // This field of the behavior is now depricated. + // This field of the behavior is now deprecated. csString tmp = node->GetAttributeValue("auto_memorize"); if(tmp.Length()) { Modified: trunk/src/npcclient/npcclient.cpp =================================================================== --- trunk/src/npcclient/npcclient.cpp 2018-04-30 11:45:31 UTC (rev 10001) +++ trunk/src/npcclient/npcclient.cpp 2018-07-01 13:27:25 UTC (rev 10002) @@ -309,6 +309,7 @@ // Starts the logon process network->Authenticate(host,port,user,pass); + // periodically writes a log file with online/offline status of NPCClient to be read by websites NPCStatus::Initialize(objreg); return true; @@ -638,6 +639,7 @@ void psNPCClient::Remove(gemNPCObject* object) { + // checks if it's a gemNPCActor NPC* npc = object->GetNPC(); if(npc) { @@ -658,6 +660,7 @@ all_gem_objects_by_pid.DeleteAll(object->GetPID()); } + // check if the entity is an Item gemNPCItem* item = dynamic_cast<gemNPCItem*>(object); if(item) { @@ -695,6 +698,7 @@ } + // check if the entity is a Character gemNPCActor* actor = dynamic_cast<gemNPCActor*>(object); if(actor) { @@ -1169,7 +1173,7 @@ { bool foundUser = false; - // Only trigger NPCs that have this percpetion type registered as a reaction. + // Only trigger NPCs that have this perception type registered as a reaction. csHash<NPC*,csString>::Iterator iter(allReactions.GetIterator(pcpt->GetName())); while(iter.HasNext()) { @@ -1436,7 +1440,7 @@ } else { - // Mach by pattern + // Match by pattern for(size_t i=0; i<npcs.GetSize(); i++) { Modified: trunk/src/npcclient/npcoperations.cpp =================================================================== --- trunk/src/npcclient/npcoperations.cpp 2018-04-30 11:45:31 UTC (rev 10001) +++ trunk/src/npcclient/npcoperations.cpp 2018-07-01 13:27:25 UTC (rev 10002) @@ -701,6 +701,7 @@ return OPERATION_FAILED; // This operation is complete } + // did we reach the final destination? float distance = npcclient->GetWorld()->Distance2(myPos, mySector, endPos, endSector); if(distance < 0.5) { Modified: trunk/src/npcclient/perceptions.h =================================================================== --- trunk/src/npcclient/perceptions.h 2018-04-30 11:45:31 UTC (rev 10001) +++ trunk/src/npcclient/perceptions.h 2018-07-01 13:27:25 UTC (rev 10002) @@ -17,9 +17,6 @@ * */ -/* This file holds definitions for ALL global variables in the planeshift -* server, normally you should move global variables into the psServer class -*/ #ifndef __PERCEPTIONS_H__ #define __PERCEPTIONS_H__ Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2018-04-30 11:45:31 UTC (rev 10001) +++ trunk/src/server/adminmanager.cpp 2018-07-01 13:27:25 UTC (rev 10002) @@ -5165,7 +5165,8 @@ float loc_x = 0.0f, loc_y = 0.0f, loc_z = 0.0f, loc_yrot = 0.0f; int degrees = 0; - if(data->targetObject) //If the target is online or is an item or action location get some data about it like position and eid + //If the target is online or is an item or action location get some data about it like position and eid + if(data->targetObject) { entityId = data->targetObject->GetEID(); csVector3 pos; @@ -5184,7 +5185,8 @@ regionName = (sector) ? sector->QueryObject()->GetObjectParent()->GetName() : "(null)"; } - if(data->targetObject && data->targetObject->GetALPtr()) // Action location + // Action location + if(data->targetObject && data->targetObject->GetALPtr()) { gemActionLocation* item = dynamic_cast<gemActionLocation*>(data->targetObject); if(!item) @@ -5213,7 +5215,8 @@ return; } - if(data->targetObject && data->targetObject->GetItem() && data->targetObject->GetItem()->GetBaseStats()) // Item + // Item + if(data->targetObject && data->targetObject->GetItem() && data->targetObject->GetItem()->GetBaseStats()) { psItem* item = data->targetObject->GetItem(); Modified: trunk/src/server/bulkobjects/servervitals.cpp =================================================================== --- trunk/src/server/bulkobjects/servervitals.cpp 2018-04-30 11:45:31 UTC (rev 10001) +++ trunk/src/server/bulkobjects/servervitals.cpp 2018-07-01 13:27:25 UTC (rev 10002) @@ -123,6 +123,7 @@ else group->Broadcast(msg.msg); + // reset statsDirty flag to zero statsDirty = backup; return true; } Modified: trunk/src/server/gem.h =================================================================== --- trunk/src/server/gem.h 2018-04-30 11:45:31 UTC (rev 10001) +++ trunk/src/server/gem.h 2018-07-01 13:27:25 UTC (rev 10002) @@ -194,6 +194,10 @@ void RemovePlayerFromLootables(PID playerID); void UpdateAllDR(); + + /** + * Searches all actors in the game, and updates their vitals + */ void UpdateAllStats(); void GetAllEntityPos(csArray<psAllEntityPosMessage> &msgs); @@ -1556,7 +1560,10 @@ */ bool LogLine(const char* szLine); - + /** + * Checks the vitals (hp, mana, ...) for the specific gemActor + * If there are updates to publish, it then uses SendStatDRMessage to inform all actors client side + */ void UpdateStats(); void ProcessStamina(); void ProcessStamina(const csVector3 &velocity, bool force=false); @@ -1650,8 +1657,13 @@ virtual void GetLastSuperclientPos(csVector3 &pos, InstanceID &instance, csTicks &last) const; virtual void SetLastSuperclientPos(const csVector3 &pos, InstanceID instance, const csTicks &now); + // Sends statDR to all clients that have this client targeted virtual void BroadcastTargetStatDR(ClientConnectionSet* clients); + + // Sends this actor statDR to the client specified, who has this actor as a target virtual void SendTargetStatDR(Client* client); + + // Sends statDR to the client owning this actor, and to all clients that have this client targeted virtual void SendGroupStats(); void SetAction(const char* anim,csTicks &timeDelay); Modified: trunk/src/server/npcmanager.cpp =================================================================== --- trunk/src/server/npcmanager.cpp 2018-04-30 11:45:31 UTC (rev 10001) +++ trunk/src/server/npcmanager.cpp 2018-07-01 13:27:25 UTC (rev 10002) @@ -1062,6 +1062,7 @@ if(attacker && attacker->IsAlive()) { gemActor* target = dynamic_cast<gemActor*>(gemSupervisor->FindObject(target_id)); + // the target has been cleared, so stop the attack if(!target) { attacker->SetTarget(target); @@ -1201,7 +1202,7 @@ progScript = psserver->GetProgressionManager()->FindScript(scriptName.GetDataSafe()); if(!progScript) { - Error2("Faild to find script %s",scriptName.GetDataSafe()); + Error2("Failed to find script %s",scriptName.GetDataSafe()); break; } @@ -1845,7 +1846,7 @@ if(item.IsEmpty()) { - Debug1(LOG_SUPERCLIENT, entity_id.Unbox(), "Transfere with empty item not possible.\n"); + Debug1(LOG_SUPERCLIENT, entity_id.Unbox(), "Transfer with empty item not possible.\n"); break; } Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2018-04-30 11:45:31 UTC (rev 10001) +++ trunk/src/server/psserver.cpp 2018-07-01 13:27:25 UTC (rev 10002) @@ -621,6 +621,7 @@ Debug1(LOG_STARTUP,0,"Server status reporter initialized."); } + // Loads the date and time from database and publishes to all clients weathermanager->StartGameTime(); return true; } Modified: trunk/src/server/weathermanager.cpp =================================================================== --- trunk/src/server/weathermanager.cpp 2018-04-30 11:45:31 UTC (rev 10001) +++ trunk/src/server/weathermanager.cpp 2018-07-01 13:27:25 UTC (rev 10002) @@ -603,6 +603,7 @@ } case psWeatherMessage::DAYNIGHT: { + // Schedules a new event which will make the in-game time progress of 1 minute QueueNextEvent(GAME_MINUTE_IN_TICKS, psWeatherMessage::DAYNIGHT, 0, Modified: trunk/src/server/workmanager.cpp =================================================================== --- trunk/src/server/workmanager.cpp 2018-04-30 11:45:31 UTC (rev 10001) +++ trunk/src/server/workmanager.cpp 2018-07-01 13:27:25 UTC (rev 10002) @@ -2531,6 +2531,7 @@ if(target) { + // check if the target is an ActionLocation gemActionLocation* gemAction = target->GetALPtr(); if(gemAction) target = gemAction->GetAction()->GetRealItem(); Modified: trunk/vfs.cfg =================================================================== --- trunk/vfs.cfg 2018-04-30 11:45:31 UTC (rev 10001) +++ trunk/vfs.cfg 2018-07-01 13:27:25 UTC (rev 10002) @@ -12,6 +12,8 @@ VFS.Mount.cdrom = $(CDROM)$/ VFS.Mount.tmp = $(TMP)$/ +VFS.Mount.bins = d:$/Luca$/PS_distro$/PlaneShift 0.6.0dev$/ + VFS.Unix.CS_LOCALAPPDATA = $(HOME)$/.PlaneShift VFS.Win32.CS_LOCALAPPDATA = $(LOCALAPPDATA)$/PlaneShift This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2018-04-30 11:45:56
|
Revision: 10001 http://sourceforge.net/p/planeshift/code/10001 Author: lpancallo Date: 2018-04-30 11:45:31 +0000 (Mon, 30 Apr 2018) Log Message: ----------- Added some documentation Modified Paths: -------------- trunk/src/common/net/messages.h trunk/src/common/util/eventmanager.cpp trunk/src/server/bulkobjects/dictionary.cpp trunk/src/server/bulkobjects/pscharacter.cpp trunk/src/server/bulkobjects/pscharinventory.h trunk/src/server/exchangemanager.cpp trunk/src/server/gem.cpp trunk/src/server/psserver.cpp trunk/src/server/spawnmanager.cpp trunk/src/tools/ccheck/ccheck.h Modified: trunk/src/common/net/messages.h =================================================================== --- trunk/src/common/net/messages.h 2018-03-05 09:05:22 UTC (rev 10000) +++ trunk/src/common/net/messages.h 2018-04-30 11:45:31 UTC (rev 10001) @@ -3990,7 +3990,7 @@ csVector3 posWorld; csVector3 rot; bool guarded; - bool inplace; + bool inplace; // drop at the character's position. }; class psCmdDropMessage : public psMessageCracker Modified: trunk/src/common/util/eventmanager.cpp =================================================================== --- trunk/src/common/util/eventmanager.cpp 2018-03-05 09:05:22 UTC (rev 10000) +++ trunk/src/common/util/eventmanager.cpp 2018-04-30 11:45:31 UTC (rev 10001) @@ -211,11 +211,13 @@ csTicks now = csGetTicks(); int timeout = nextEvent - now; + // checks if we reached the time to execute the next event + // and consumes all the messages which are past due if (timeout > 0) { msg = queue->GetWait(timeout); } - + // if there is a message to process, then process it if (msg) { csTicks start = csGetTicks(); @@ -233,6 +235,7 @@ // don't forget to release the packet msg = NULL; } + // if there are no messages, process events else if (now >= nextEvent) { nextEvent = ProcessEventQueue(); Modified: trunk/src/server/bulkobjects/dictionary.cpp =================================================================== --- trunk/src/server/bulkobjects/dictionary.cpp 2018-03-05 09:05:22 UTC (rev 10000) +++ trunk/src/server/bulkobjects/dictionary.cpp 2018-04-30 11:45:31 UTC (rev 10001) @@ -2917,10 +2917,11 @@ for(size_t count=0; count < triggers.GetSize(); count++) { - // fetch the prerequisites + // Checks if quest is valid, check if quest is enabled server side (Active), check if we are not in testing mode if(triggers[count].quest && !triggers[count].quest->Active() && !IsTesting) continue; + // check if the player meets the prerequisites of the quest if(triggers[count].prerequisite && !IsTesting) { if(!triggers[count].prerequisite->Check(client->GetCharacterData())) Modified: trunk/src/server/bulkobjects/pscharacter.cpp =================================================================== --- trunk/src/server/bulkobjects/pscharacter.cpp 2018-03-05 09:05:22 UTC (rev 10000) +++ trunk/src/server/bulkobjects/pscharacter.cpp 2018-04-30 11:45:31 UTC (rev 10001) @@ -1429,6 +1429,7 @@ if(guarded) //if we want to guard the item assign the guarding pid item->SetGuardingCharacterID(pid); + // create the 3d object gemObject* obj = EntityManager::GetSingleton().MoveItemToWorld(item, location.worldInstance, location.loc_sector, suggestedPos.x, suggestedPos.y, suggestedPos.z, Modified: trunk/src/server/bulkobjects/pscharinventory.h =================================================================== --- trunk/src/server/bulkobjects/pscharinventory.h 2018-03-05 09:05:22 UTC (rev 10000) +++ trunk/src/server/bulkobjects/pscharinventory.h 2018-04-30 11:45:31 UTC (rev 10001) @@ -171,7 +171,20 @@ * @return true if the player has enough capacity for the requiredSpace. */ bool HasEnoughUnusedSpace(float desiredSpace); + + /** + * Sums up all the items in inventory with GetItemSize() + * to calculate the totale space currently used by your inventory items + * + * @return inventory size + */ int GetCurrentTotalSpace(); + + /** + * Returns the max space in units this character can carry + * calculated by mathscript + containers size + * @return max space + */ int GetCurrentMaxSpace(); /** Modified: trunk/src/server/exchangemanager.cpp =================================================================== --- trunk/src/server/exchangemanager.cpp 2018-03-05 09:05:22 UTC (rev 10000) +++ trunk/src/server/exchangemanager.cpp 2018-04-30 11:45:31 UTC (rev 10001) @@ -785,6 +785,7 @@ if(count == -1) count = invItem->exchangeStackCount; // stack count of offer, not of item + // if I selected the maximum amount if(invItem->exchangeStackCount <= count) { invItem->exchangeStackCount = 0; // take out of offering array @@ -791,6 +792,7 @@ invItem->exchangeOfferSlot = -1; SendRemoveItemMessage(fromClient, fromSlot); } + // if I selected less items than max else { invItem->exchangeStackCount -= count; @@ -1311,7 +1313,7 @@ { csString trigger; - // Check if NPC require the exact among of money + // Check if NPC require the exact amount of money starterChar.GetSimpleOffering(trigger,client->GetCharacterData(),true); if(!CheckXMLResponse(client,dlg,trigger)) { Modified: trunk/src/server/gem.cpp =================================================================== --- trunk/src/server/gem.cpp 2018-03-05 09:05:22 UTC (rev 10000) +++ trunk/src/server/gem.cpp 2018-04-30 11:45:31 UTC (rev 10001) @@ -1556,11 +1556,14 @@ evt.FireEvent(); } + // send pick up text message to all clients psSystemMessage newmsg(clientnum, MSG_INFO_BASE, "%s picked up %s", actor->GetName(), qname.GetData()); newmsg.Multicast(actor->GetMulticastClients(),0,RANGE_TO_SELECT); + // update inventory or other windows open psserver->GetCharManager()->UpdateItemViews(clientnum); + // remove the object from 3d world if(GetItemData()) { cel->RemoveItemEntity(this, origUID); Modified: trunk/src/server/psserver.cpp =================================================================== --- trunk/src/server/psserver.cpp 2018-03-05 09:05:22 UTC (rev 10000) +++ trunk/src/server/psserver.cpp 2018-04-30 11:45:31 UTC (rev 10001) @@ -364,6 +364,7 @@ // MathScript Engine mathscriptengine = new MathScriptEngine(db,"math_script"); + // Initialize Cache Manager cachemanager = new CacheManager(); //Loads the standard motd message from db @@ -455,6 +456,7 @@ // Init Bank Manager. bankmanager = new BankManager(); + // Init User Manager usermanager = new UserManager(GetConnections(), cachemanager, bankmanager, entitymanager); Debug1(LOG_STARTUP,0,"Started User Manager"); Modified: trunk/src/server/spawnmanager.cpp =================================================================== --- trunk/src/server/spawnmanager.cpp 2018-03-05 09:05:22 UTC (rev 10000) +++ trunk/src/server/spawnmanager.cpp 2018-04-30 11:45:31 UTC (rev 10001) @@ -473,7 +473,8 @@ break; } - for(int i = 0; i < (amount - (int) handledSpawnsCount); ++i) //Make desired amount of items that are not already existing + //Make desired amount of items that are not already existing + for(int i = 0; i < (amount - (int) handledSpawnsCount); ++i) { // This object won't get destroyed in a while (until something stops it or psItem is destroyed without moving) psScheduledItem* item = new psScheduledItem(id,itemid,pos,spawnsector,0,interval,max_rnd,range, lock_str, lock_skill, flags); Modified: trunk/src/tools/ccheck/ccheck.h =================================================================== --- trunk/src/tools/ccheck/ccheck.h 2018-03-05 09:05:22 UTC (rev 10000) +++ trunk/src/tools/ccheck/ccheck.h 2018-04-30 11:45:31 UTC (rev 10001) @@ -17,6 +17,10 @@ * */ +/** + * This application checks for duplicate meshfact and texture inclusions in art files. + * Used while packaging a new update + */ class CCheck { public: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2018-03-05 09:05:26
|
Revision: 10000 http://sourceforge.net/p/planeshift/code/10000 Author: lpancallo Date: 2018-03-05 09:05:22 +0000 (Mon, 05 Mar 2018) Log Message: ----------- Added comments to the code while analyzing it. Modified Paths: -------------- trunk/src/server/chatmanager.cpp trunk/src/server/chatmanager.h trunk/src/server/client.h trunk/src/server/gem.h trunk/src/server/msgmanager.cpp trunk/src/server/msgmanager.h Modified: trunk/src/server/chatmanager.cpp =================================================================== --- trunk/src/server/chatmanager.cpp 2018-02-16 21:26:24 UTC (rev 9999) +++ trunk/src/server/chatmanager.cpp 2018-03-05 09:05:22 UTC (rev 10000) @@ -265,6 +265,7 @@ } case CHAT_TELL: { + // the name of the target player should not be empty if(msg.sPerson.Length() == 0) { psserver->SendSystemError(client->GetClientNum(), "You must specify name of player."); @@ -271,6 +272,7 @@ break; } + // Search a player object from its name Client* target = FindPlayerClient(msg.sPerson); if(target && !target->IsSuperClient()) { Modified: trunk/src/server/chatmanager.h =================================================================== --- trunk/src/server/chatmanager.h 2018-02-16 21:26:24 UTC (rev 9999) +++ trunk/src/server/chatmanager.h 2018-03-05 09:05:22 UTC (rev 10000) @@ -80,6 +80,8 @@ void HandleChannelLeaveMessage(MsgEntry* me, Client* client); void SendNotice(psChatMessage &msg); + + // Used from server console to send messages to all players, example /say Server is getting updated, be patient. void SendServerChannelMessage(psChatMessage &msg, uint32_t channelID); NpcResponse* CheckNPCEvent(Client* client,csString &trigger,gemNPC* &target); @@ -117,7 +119,10 @@ // Chat channel state // uint32_t here to allow hashing // csHashReversible is not used because it does not allow a many to many mapping + // values are : clientNumber, channelID csHash<uint32_t, uint32_t> channelSubscriptions; + + // values are : channelID, clientNumber csHash<uint32_t, uint32_t> channelSubscribers; // case-insensitive Modified: trunk/src/server/client.h =================================================================== --- trunk/src/server/client.h 2018-02-16 21:26:24 UTC (rev 9999) +++ trunk/src/server/client.h 2018-03-05 09:05:22 UTC (rev 10000) @@ -254,6 +254,7 @@ /// the alliance id value if the player is member of a guild in an alliance int GetAllianceID(); + /// Sets the player state to ready. For example ready to receive chat messages. void SetReady(bool rdy) { ready = rdy; Modified: trunk/src/server/gem.h =================================================================== --- trunk/src/server/gem.h 2018-02-16 21:26:24 UTC (rev 9999) +++ trunk/src/server/gem.h 2018-03-05 09:05:22 UTC (rev 10000) @@ -491,7 +491,7 @@ }; /** - * + * Returns all the clients which are inside our proxy list. */ csArray<PublishDestination> &GetMulticastClients(); Modified: trunk/src/server/msgmanager.cpp =================================================================== --- trunk/src/server/msgmanager.cpp 2018-02-16 21:26:24 UTC (rev 9999) +++ trunk/src/server/msgmanager.cpp 2018-03-05 09:05:22 UTC (rev 10000) @@ -189,6 +189,7 @@ } } + // Gets the name filter parameters, which is always the last one if(sector != NULL) { if(splitSize > 4) @@ -201,10 +202,12 @@ nameFilter = splitTarget[3]; } + // Checks if the name filter is specified or "all is specified bool allNames = true; if(nameFilter.Length() && nameFilter != "all") allNames = false; + // Checks if the item to filter is a valid one, it has to be players|actors|items|npcs|entities int mode; if(itemName == "players") mode = 0; @@ -223,7 +226,8 @@ return result; } - + // Is sector is specified, take all entities in the sector + // If not take all nearby entities csArray<gemObject*> nearlist; if(sector) { @@ -236,12 +240,14 @@ nearlist = psserver->entitymanager->GetGEM()->FindNearbyEntities(sector, pos, self->GetInstance(), range); } - size_t count = nearlist.GetSize(); - csArray<csString*> results; + // Creates a regular expression based on the last paramter, example Tala* will find Talad. csRegExpMatcher nameMatcher(nameFilter); - for(size_t i=0; i<count; i++) + // For each of the entities found, get object name + size_t count = nearlist.GetSize(); + csArray<csString*> results; + for(size_t i=0; i<count; i++) { gemObject* nearobj = nearlist[i]; if(!nearobj) Modified: trunk/src/server/msgmanager.h =================================================================== --- trunk/src/server/msgmanager.h 2018-02-16 21:26:24 UTC (rev 9999) +++ trunk/src/server/msgmanager.h 2018-03-05 09:05:22 UTC (rev 10000) @@ -75,7 +75,9 @@ /** * Decodes an area: expression. - * + * Syntax can be: area:[players|actors|items|npcs|entities]:[range]:[filter] + * Example: area:players:10:Erel* (this will find all players in 10 meters area, which are named Erel*) + * Syntax can be map:mapname[:name] * @param client The client of the caller * @param target The area: expression */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lpa...@us...> - 2018-02-16 21:26:27
|
Revision: 9999 http://sourceforge.net/p/planeshift/code/9999 Author: lpancallo Date: 2018-02-16 21:26:24 +0000 (Fri, 16 Feb 2018) Log Message: ----------- Added few comments to clarify how RepopulateItems works Modified Paths: -------------- trunk/src/server/spawnmanager.cpp Modified: trunk/src/server/spawnmanager.cpp =================================================================== --- trunk/src/server/spawnmanager.cpp 2017-08-29 11:53:55 UTC (rev 9998) +++ trunk/src/server/spawnmanager.cpp 2018-02-16 21:26:24 UTC (rev 9999) @@ -569,6 +569,7 @@ psCharacter** chardatalist = NULL; int count; + // Loads all the data of NPCs without spawning them yet chardatalist = psServer::CharacterLoader.LoadAllNPCCharacterData(sectorinfo,count); if(chardatalist==NULL) { @@ -576,6 +577,7 @@ return; } + // for each of the NPCs found and "spawnable", it calls entityManager to create the new gemNPC and spawns it for(int i=0; i<count; i++) { if(chardatalist[i] != NULL) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |