function iitems_mountaccessories_get_compatible_accessories($mountid)
{
    $ret = array();
    if (!$mountid) {
        return $ret;
    }
    global $session;
    require_once "modules/iitems/lib/lib.php";
    $allitems = iitems_get_all_item_details();
    $mountaccessories = array();
    //select all iitems that are Mount Accessories
    foreach ($allitems as $item => $details) {
        if ($details['mountaccessory']) {
            $mountaccessories[$item] = $details;
        }
    }
    //check to see if there are no available mount accessories before we go further
    if (!count($mountaccessories)) {
        return $ret;
    }
    //select all Mount Accessories that are appropriate for this Mount
    foreach ($mountaccessories as $item => $details) {
        if ($details['formount'] == "all") {
            $ret[$item] = $details;
        } else {
            $compatibilitylist = explode(",", $details['formount']);
            foreach ($compatibilitylist as $cmount) {
                if ($cmount == $mountid) {
                    $ret[$item] = $details;
                }
            }
        }
    }
    return $ret;
}
function iitems_mountaccessories_strip_player_accessories($payback = 0.6, $returngold = false)
{
    global $session;
    require_once "modules/iitems/lib/lib.php";
    $ret = array();
    $inv = iitems_get_player_inventory();
    $allitems = iitems_get_all_item_details();
    if (!count($inv)) {
        return $ret;
    }
    foreach ($inv as $item => $details) {
        $master = $allitems[$details['itemid']];
        if ($master['mountaccessory']) {
            $safe = 0;
            $compatibilitylist = explode(",", $master['formount']);
            foreach ($compatibilitylist as $cmount) {
                if ($cmount == $session['user']['hashorse']) {
                    $safe = 1;
                }
            }
            if (!$safe) {
                //remove the item, pay back the money
                $gold = ceil($master['goldcost'] * $payback);
                $gems = ceil($master['gemcost'] * $payback);
                $session['user']['gems'] += $gems;
                $ret['gems'] += $gems;
                if ($returngold) {
                    $session['user']['gold'] += $gold;
                    $ret['gold'] += $gold;
                }
                iitems_discard_item($item);
            }
        }
    }
    return $ret;
}
function iitemcrates_dohook($hookname, $args)
{
    global $session;
    switch ($hookname) {
        case "donation":
            $amt = $args['amt'];
            $donationbonus = floor($args['amt'] / get_module_setting("donationaddition"));
            require_once "modules/iitems/lib/lib.php";
            $allitems = iitems_get_all_item_details();
            $items = array();
            $cratefind = array();
            foreach ($allitems as $localid => $data) {
                if ($data['cratefind']) {
                    $items[$localid] = $data;
                    for ($i = 0; $i < $data['cratefind']; $i++) {
                        $cratefind[] = $localid;
                    }
                }
            }
            $crates = unserialize(get_module_setting("crates"));
            for ($i = 0; $i < $donationbonus; $i++) {
                $crate = array();
                //set a random location
                $x = e_rand(1, get_module_setting("worldmapsizeX", "worldmapen"));
                $y = e_rand(1, get_module_setting("worldmapsizeY", "worldmapen"));
                $loc = array();
                $loc['x'] = $x;
                $loc['y'] = $y;
                $crate['loc'] = $loc;
                //set crate contents
                $numitems = e_rand(get_module_setting("minitems"), get_module_setting("maxitems"));
                for ($a = 0; $a < $numitems; $a++) {
                    $add = e_rand(1, count($cratefind));
                    $crate['contents'][] = $cratefind[$add - 1];
                }
                $crates[] = $crate;
            }
            set_module_setting("crates", serialize($crates));
            break;
        case "worldnav":
            $crates = unserialize(get_module_setting("crates"));
            //debug($crates);
            $ploc = get_module_pref("worldXYZ", "worldmapen");
            if (!is_array($crates)) {
                $crates = array();
            }
            foreach ($crates as $key => $vals) {
                if ($ploc == $vals['loc']['x'] . "," . $vals['loc']['y'] . ",1") {
                    require_once "modules/iitems/lib/lib.php";
                    output("`bYou found something!`b`nYou come across a wooden crate, with a small parachute attached.  You spend a few minutes prying it open.`n`n");
                    foreach ($vals['contents'] as $ckey => $content) {
                        $itemdetails = iitems_get_item_details($content);
                        output("You found a %s!`n", $itemdetails['verbosename']);
                        iitems_give_item($content);
                    }
                    increment_module_pref("cratesfound");
                    $found = get_module_pref("cratesfound");
                    if (is_module_active("medals")) {
                        if ($found > 250) {
                            require_once "modules/medals.php";
                            medals_award_medal("crate1000", "Supreme Crate Finder", "This player has found more than 1000 Supply Crates!", "medal_crategold.png");
                        }
                        if ($found > 50) {
                            require_once "modules/medals.php";
                            medals_award_medal("crate500", "Expert Crate Finder", "This player has found more than 500 Supply Crates!", "medal_cratesilver.png");
                        }
                        if ($found > 10) {
                            require_once "modules/medals.php";
                            medals_award_medal("crate100", "Supreme Crate Finder", "This player has found more than 100 Supply Crates!", "medal_cratebronze.png");
                        }
                    }
                    unset($crates[$key]);
                    set_module_setting("crates", serialize($crates));
                    modulehook("iitems_findcrate");
                    //Break operation - players cannot find more than one item crate in a single move.
                    break;
                }
            }
            break;
        case "newday-runonce":
            require_once "modules/iitems/lib/lib.php";
            $allitems = iitems_get_all_item_details();
            $items = array();
            $cratefind = array();
            foreach ($allitems as $localid => $data) {
                if ($data['cratefind']) {
                    $items[$localid] = $data;
                    for ($i = 0; $i < $data['cratefind']; $i++) {
                        $cratefind[] = $localid;
                    }
                }
            }
            $crates = unserialize(get_module_setting("crates"));
            for ($i = 0; $i < get_module_setting("dailyadditions"); $i++) {
                $crate = array();
                //set a random location
                $x = e_rand(1, get_module_setting("worldmapsizeX", "worldmapen"));
                $y = e_rand(1, get_module_setting("worldmapsizeY", "worldmapen"));
                $loc = array();
                $loc['x'] = $x;
                $loc['y'] = $y;
                $crate['loc'] = $loc;
                //set crate contents
                $numitems = e_rand(get_module_setting("minitems"), get_module_setting("maxitems"));
                for ($a = 0; $a < $numitems; $a++) {
                    $add = e_rand(1, count($cratefind));
                    $crate['contents'][] = $cratefind[$add - 1];
                }
                $crates[] = $crate;
            }
            set_module_setting("crates", serialize($crates));
            break;
    }
    return $args;
}