Slightly modified Inventory module?
Posted: Mon Oct 05, 2015 12:24 pm
I wasn't really crazy about the way the inventory module popped out a window to show the details of an item. With a little editing of the content.php file I've changed it so it now drops down another row in the table to display the stats. Does anyone else like it better this way? I had to drop the link from the equipped items. I'm using the item number as the ID of the table row so it can't exist in both places unless someone can come up with a way to assign an ID unique to equipped items?
Code: Select all
<?php
function sort_objects ($a, $b)
{
$v = strcmp($a->object_type, $b->object_type);
if ($v != 0)
return $v;
return strcmp($a->name, $b->name);
}
// We are dropping items
if (isset($_GET['drop']))
{
$obj = Item::GetInventoryObject($_GET['drop']);
// Somebody tried to play here!
if ($obj == null)
return;
// There is more than one item, thefore we need to ask how many to drop.
if ($obj->quantity + 0 > 1 && ! isset($_POST['confirm']))
{
echo "<form method='post' name='dropItems'>";
TableHeader("How many to drop");
echo "<input type='text' name='confirm' value='{$obj->quantity}'>";
TableFooter();
ButtonArea();
SubmitButton("Drop", "dropItems");
LinkButton("Cancel", "index.php?p=inventory");
EndButtonArea();
return;
}
// Only one or we know how many.
else
{
try
{
// User defined number
if (isset($_POST['confirm']))
{
Item::InventoryRemove($_GET['drop'], floatval($_POST['confirm']));
if (function_exists("StorePersonalLog"))
StorePersonalLog(Translate("Dropped %d %s", intval($_POST['confirm']), $obj->name));
}
// Drop them all
else
{
if (function_exists("StorePersonalLog"))
StorePersonalLog(Translate("Dropped %d %s", $obj->quantity, $obj->name));
Item::InventoryRemove($_GET['drop'], $obj->quantity);
}
ResultMessage("Item(s) dropped.");
}
catch (Exception $ex)
{
ErrorMessage($ex->getMessage());
}
}
}
// Equip an item
else if (isset($_GET['equip']))
{
try
{
$obj = Item::GetInventoryObject($_GET['equip']);
$oldObj = Item::Equip($_GET['equip'], $_GET['health']);
if (function_exists("StorePersonalLog") && $oldObj != null)
{
StorePersonalLog(Translate("Unequipped %s", $oldObj->name));
}
ResultMessage("Item equipped.");
if (function_exists("StorePersonalLog"))
StorePersonalLog(Translate("Equipped %s", $obj->name));
}
catch (Exception $ex)
{
ErrorMessage($ex->getMessage());
}
}
// Un-Equip an item
else if (isset($_GET['unequip']))
{
try
{
Item::GetInventoryObject($_GET['unequip']);
$obj = Item::UnEquip($_GET['unequip']);
ResultMessage("Item removed.");
if (function_exists("StorePersonalLog") && $obj != null)
{
StorePersonalLog(Translate("Unequipped %s", $obj->name));
}
}
catch (Exception $ex)
{
ErrorMessage($ex->getMessage());
}
}
// Use an item
else if (isset($_GET['use']))
{
global $object;
$object = Item::GetInventoryObject($_GET['use'], $_GET['health']);
if ($object == NULL)
{
ErrorMessage("You don't have this item.");
}
else if ($object->usage_label == NULL)
{
ErrorMessage("You cannot use this item.");
}
else
{
NWEval("global \$object;\r\n" . $object->usage_code);
if (function_exists("StorePersonalLog"))
StorePersonalLog(Translate("Used %s", $object->name));
}
}
echo "<table class='plainTable'>";
echo "<tr valign='top'><td width='50%'>";
// Shows the slots and current equipment on it
TableHeader("Equipped");
echo "<table class='plainTable'>";
echo "<tr class='titleLine'>";
echo "<td width='1%'> </td><td width='1%'> </td>";
echo "<td>Slot</td><td>Item</td><td>State</td>";
echo "</tr>";
$row = 0;
$objects = Item::AllEquiped();
foreach ($objects as $obj)
{
if ($row % 2 == 0)
echo "<tr class='evenLine'>";
else
echo "<tr class='oddLine'>";
// The slot is emtpy
if ($obj->name == "")
echo "<td> </td>";
// The slot contains something we should give the option to un-equip
else
{
echo "<td>";
LinkButton("Un-Equip", "index.php?p=inventory&unequip=" . urlencode($obj->slot));
echo "</td>";
}
echo "<td width='1%'>" . ($obj->image_file == NULL ? " " : "<img src='{$webBaseDir}modules/inventory/images/$obj->image_file'>") . "</td>";
echo "<td>{$obj->slot}</td>";
if ($obj->name == "")
echo "<td> </td>";
else
echo "<td><b>{$obj->name}</b></td>";
echo "<td>{$obj->object_health}</td>";
echo "</tr>";
$row ++;
}
echo "</table>";
TableFooter();
echo "</td><td>";
$typesToEquip = Item::ObjectTypesToEquip();
$objectType = "";
// Make the list of all the items in the inventory
$objects = Item::AllInventory();
usort($objects, "sort_objects");
TableHeader("Inventory");
echo "<table class='plainTable' cellpadding='0'>";
$row = 0;
$descLine = "<tr class='titleLine'>";
$descLine .= "<td width='1%'> </td>";
$descLine .= "<td width='1%'> </td>";
// Can items be dropped?
if (GetConfigValue("itemsCanBeDropped") == "true")
$descLine .= "<td width='1%'> </td>";
$descLine .= "<td width='1%'> </td>";
$descLine .= "<td>Name</td>";
$descLine .= "<td>Quantity</td>";
// Do items have an health?
if (GetConfigValue("itemsHealth") == "true")
$descLine .= "<td>Health</td>";
echo "</tr>";
$group_id = 0;
$toContract=(count($objects) > 10);
foreach ($objects as $obj)
{
if ($objectType != $obj->object_type)
{
if ($group_id != 0)
echo "</table></td></tr>";
$objectType = $obj->object_type;
echo "<tr class='titleLine'>";
echo "<td style='text-align: center; cursor: pointer;' onclick='InventoryGroupClick({$group_id});'>";
echo "<img id='iv_img_{$group_id}' src='$webBaseDir/images/plus.png' align='left'>";
echo Translate($objectType) . "</td></tr>";
echo "<tr><td id='iv_grp_{$group_id}'";
if($toContract)
echo " style='visibility: hidden; display: none;'";
echo "><table class='plainTable'>";
echo $descLine;
$group_id ++;
}
if ($row % 2 == 0)
echo "<tr class='evenLine'>";
else
echo "<tr class='oddLine'>";
// Is the object of any kind we can equip?
if (isset($typesToEquip[$obj->object_type_id]))
{
echo "<td>";
LinkButton("Equip", "index.php?p=inventory&equip={$obj->id}&health={$obj->object_health}");
echo "</td>";
}
// No then skip
else
echo "<td> </td>";
if ($obj->usage_label != NULL)
{
echo "<td>";
LinkButton($obj->usage_label, "index.php?p=inventory&use={$obj->id}&health={$obj->object_health}");
echo "</td>";
}
else
echo "<td> </td>";
// Is the game configured to allow dropping items?
if (GetConfigValue("itemsCanBeDropped") == "true")
{
// Is it a quest item (therefore we cannot drop)
if ($obj->quest_item == 'yes')
echo "<td> </td>";
// Show the drop item link
else
{
echo "<td>";
LinkButton("Drop", "index.php?p=inventory&drop={$obj->id}&health={$obj->object_health}", ($obj->quantity + 0 == 1 ? "return confirm(unescape('" . rawurlencode(Translate("Are you sure you want to drop this item?")) . "'));" : NULL));
echo "</td>";
}
}
echo "<td width='1%'>" . ($obj->image_file == NULL ? " " : "<img src='{$webBaseDir}modules/inventory/images/$obj->image_file'>") . "</td>";
echo "<td style='text-align: center; cursor: pointer;' onclick='FJdisplayStats({$obj->id});'><b>{$obj->name}</b></td>";
echo "<td>{$obj->quantity}</td>";
if (GetConfigValue("itemsHealth") == "true")
echo "<td>{$obj->object_health}</td>";
echo "</tr>";
//-----------------------------------------------------Details Panel Added--------------------
echo "<tr id='{$obj->id}' style='display:none;'><td colspan='7'>";
$attr = $obj->GetAttributes();
$ignoreAttr = array("id", "name", "description", "allow_fraction", "quest_item", "object_type_id", "usage_label", "usage_code", "image_file", "requirements");
foreach ($attr as $key => $val)
{
if (in_array($key, $ignoreAttr))continue;
if ($val == NULL)continue;
echo "<b>" . str_replace(array("_", " "), array(" ", " "), $key) . ": </b>$val<br>";
}
echo "</td></tr>";
//-----------------------------------------------------Details Panel Added--------------------
echo "</tr>";
$row ++;
}
if ($group_id != 0)
echo "</table></td></tr>";
echo "</table>";
TableFooter();
echo "</td></tr></table>";
echo "<script src='{$webBaseDir}js/ajax_helper.js'></script>";
echo "<script>var minusImage='{$webBaseDir}/images/minus.png';\nvar plusImage='{$webBaseDir}/images/minus.png';\n</script>";
?>
<script>
var oldIvGroup=-1;
function FJdisplayStats(itemstats)
{
var trstyle = new String();
trstyle = document.getElementById(itemstats).style.display;
if(trstyle.toLowerCase()=="table-row" || trstyle == "")
{
document.getElementById(itemstats).style.display = "none";
}
else
{
document.getElementById(itemstats).style.display = "table-row";
}
}
function InventoryGroupClick(grpId)
{
var c = getCookie("settings");
var data = new Object();
if (c != null)
data = jsDeserializer(c);
var ivGrp="";
if(data['iv_grp'] != undefined && data['iv_grp'] != null)
ivGrp=data['iv_grp'];
ivGrp=pad(""+ivGrp,grpId+1, '0');
var div=null;
div=document.getElementById('iv_grp_'+grpId);
if(div.style.visibility=='visible')
{
div.style.visibility='hidden';
div.style.display='none';
document.getElementById('iv_img_'+grpId).src=plusImage;
data['iv_grp'] = replaceAt(ivGrp,grpId,'0');
}
else
{
div.style.visibility='visible';
div.style.display='block';
document.getElementById('iv_img_'+grpId).src=minusImage;
data['iv_grp'] = replaceAt(ivGrp, grpId,'1');
}
setCookie("settings", jsSerializer(data), 30);
}
function InitIvGroup()
{
var c = getCookie("settings");
var data = new Object();
if (c == null)
return;
data = jsDeserializer(c);
if(data['iv_grp'] != undefined && data['iv_grp'] != null)
{
ivGrp=data['iv_grp'];
for(var i=0;i < ivGrp.length;i++)
{
if(ivGrp.charAt(i) == '1')
{
div=document.getElementById('iv_grp_'+i);
if(div != null)
{
div.style.visibility='visible';
div.style.display='block';
document.getElementById('iv_img_'+i).src=minusImage;
}
}
}
}
}
InitIvGroup();
</script>