| admin_login.php | index.php | plugins_footer.php | plugins_header.php | qt_viewquests.php | qt_viewtimers.php | quest_timer.php | quest_timer/loadquests.php | quest_timer/newquests.php | quest_timer/savequests.php | quest_timer/submitquests.php | scroll_manager.php | show_create.php | sql_config_example.php | viewsource.php |

quest_timer.php

  [Go to page]


<?php
    $plugin_name 
"Quest Timer";
    
$requirements['xml4'] = true;
    if (isset(
$_POST['mode']) || isset($_GET['mode']))
    {
        
$mode = isset($_POST['mode']) ? $_POST['mode'] : $_GET['mode'];
        require_once(
'sql_config.php');
        switch (
$mode)
        {
            case 
'plugininfo'
                
header("Content-type: text/xml");
?>
    <PluginInfo>
        <ver>2.4.0.2</ver>
        <whatsnew>Updated to work with Decal 3.0 Alpha 5b</whatsnew>
<?php if(time() < strtotime("11 January 2010")): ?>
        <motd>And we're back! Saving and loading quests from the website should work again.</motd>
<?php endif; ?>
    </PluginInfo>
<?php
                
exit;
            case 
'savequests':   require_once('quest_timer/savequests.php'); exit;
            case 
'loadquests':   require_once('quest_timer/loadquests.php'); exit;
            case 
'newquests':    require_once('quest_timer/newquests.php');  exit;
            case 
'submitquests': require_once('quest_timer/submitquests.php');  exit;
            case 
'viewquests':   require_once('qt_viewquests.php'); exit;
            case 
'viewusers':    require_once('qt_viewusers.php'); exit;
            case 
'viewtimers':   require_once('qt_viewtimers.php'); exit;
            case 
'devinfo':      require_once('qt_devinfo.php'); exit;
            default: 
                if(isset(
$_POST['mode']))  //Likely from the plugin
                    
die("Error: Invalid mode specified ($mode)");
        }
    }
    require_once(
'plugins_header.php');
?>
<table width="100%" cellpadding="8" cellspacing="2">
    <tr>
        <td class="catHead"><table cellpadding="2" cellspacing="0">
                <tr>
                    <td><?=icon('quest_timer32','gif',32)?></td>
                    <td><span class="subtitle">Quest Timer</span></td>
            </table>
        </td>
    </tr>
    <tr>
        <td height="5"></td>
    </tr>
    <tr>
        <td class="catHead"><a name="description"></a><b>Description</b></td>
    </tr>
    <tr>
        <td class="row1">Quest Timer keeps track of quests you've completed.  It will 
        automatically start quest timers based on triggers you can download or define 
        yourself.<br>
        <br>
You can store your quests online and access them from any computer you play AC 
on, or see your timers out-of-game. Quest Timer will also download new quests 
as they are submitted to my site, to keep you up to date with the latest quest 
timers!</td>
    </tr>
    <tr>
        <td height="5"></td>
    </tr>
    <tr>
        <td class="catHead"><a name="download"></a><b>Download</b></td>
    </tr>
    <tr>
        <td class="row1">
            <b>Current Version</b><br>
            <?=download('Quest Timer''2.4.2 Alpha')?> <br>
            <br>
            <a href="quest_timer.php?mode=viewtimers">See your quest timers online</a><br>
            <?php /*
            <span id="prev_link" onclick="showhide_prev_ver()" style="cursor:pointer"><b><img src="plus.gif">&nbsp;Previous Versions</b></span><br>
            <span id="prev_ver"></span>
            <br>
            <a class="gensmall" href="#history">Jump to version history</a></td>
            <script language="javascript">
                var prev_ver_text = "\
                    <?=download('Quest Timer','2.4.1 Alpha','',false)?> <b>For Decal 3, Alpha 4</b><br>\
                    <?=download('Quest Timer','2.4.0 Alpha','',false)?> <b>For Decal 3, Alpha 3</b><br>\
                    <br>\
                    <b><i>Pre Throne of Destiny</i></b><br>\
                    <?=download('Quest Timer','2.3.3','',false)?>\
                    <?=download('Quest Timer','2.3.2','',false)?>\
                    <?=download('Quest Timer','2.3.1','',false)?>\
                    <?=download('Quest Timer','2.3.0','',false)?>\
                    <?=download('Quest Timer','2.2.2','',false)?>\
                    <?=download('Quest Timer','2.2.1','',false)?>\
                    <?=download('Quest Timer','2.2.0','',false)?>\
                    <?=download('Quest Timer','2.1.0','',false)?>\
                    <?=download('Quest Timer','2.0.1','',false)?>\
                    <?=download('Quest Timer','2.0.0 Beta','',false)?><br>\
                    <br>\
                    <b><i>Jer's original versions</i></b><br>\
                    <?=download('Quest Timer','1.4.1','',false)?>\
                    <?=download('Quest Timer','1.4.1 Euro','',false)?><br>";
                // = document.getElementById('prev_ver').innerHTML;
                // document.getElementById('prev_ver').innerHTML = '';
                function showhide_prev_ver()
                {
                    if (document.getElementById('prev_ver').innerHTML != '')
                    {
                        document.getElementById('prev_link').innerHTML = '<b><img src="plus.gif">&nbsp;Previous Versions</b>';
                        document.getElementById('prev_ver').innerHTML = '';
                    }
                    else
                    {
                        document.getElementById('prev_link').innerHTML = '<b><img src="minus.gif">&nbsp;Previous Versions</b>';
                        document.getElementById('prev_ver').innerHTML = prev_ver_text;
                    }
                }
            </script>
            */ 
?>
        </td>
    </tr>
    <?php /*
    <tr>
        <td height="5"></td>
    </tr>
    <tr>
        <td class="catHead" style="color: black; background-color: #F4CF8A;" valign="middle">
            <table border="0" cellpadding="0" cellspacing="0">
                <tr>
                    <td valign="middle"><?= png_img('icons/exclamation.png') ?>&nbsp;</td>
                    <td valign="middle" width="100%" style="color: black;"><b>New server for Quest Timer</b></td>
                </tr>
            </table>
        </td>
    </tr>
    <tr>
        <td class="row1" style="color: black; background-color: #F8E3BE;">
            As of September 16, 2014, the Quest Timer URL has changed to <span class="cod">http://acasylum.azurewebsites.net/quest_timer.php</span><br />
            <br />
            You will need to update the URLs on Quest Timer's <b>Internet &gt; Settings</b> tab in order to continue saving and loading your quests online.<br />
            <br />
            And although the quest database is no longer maintained, you can update the URL used to connect to the quest database:
            <ol>
                <li>Open the file settings.xml in the Quest Timer folder using notepad or your favorite text editor.</li>
                <li>Modify the <span class="cod">QuestDatabaseURL</span> field to be <span class="cod">http://acasylum.azurewebsites.net/quest_timer.php</span></li>
            </ol>
        </td>
    </tr>
    */ 
?>
    <tr>
        <td height="5"></td>
    </tr>
    <tr>
        <td class="catHead"><a name="screenshots"></a><b>Screenshots</b></td>
    </tr>
    <tr>
        <td class="row1"><table cellpadding="5" cellspacing="0">
                <tr>
                    <td valign="top">
                        <img name="quest_timerimgs" id="quest_timerimgs" src="screenshots/quest_timer-1.gif" width="400" height="273" border="0" usemap="#m_quest_timerimgs">
                        <script language="javascript">var itab_num = 5; var img = document.getElementById('quest_timerimgs'); var itab=false, stab=false;</script>
                        <map name="m_quest_timerimgs">
                            <area shape="rect" coords="0,29,40,45" alt="Quests"onclick="MM_swapImage('quest_timerimgs','','screenshots/quest_timer-1.gif',1); itab=false; stab=false; swap_desc(0);" onmouseover="img.style.cursor='pointer';" onmouseout="img.style.cursor='default';" >
                            <area shape="rect" coords="40,29,77,45" alt="Notes" onclick="MM_swapImage('quest_timerimgs','','screenshots/quest_timer-2.gif',1); itab=false; stab=false; swap_desc(1);" onmouseover="img.style.cursor='pointer';" onmouseout="img.style.cursor='default';" >
                            <area shape="rect" coords="77,29,156,45" alt="Add/Edit Quest" onclick="MM_swapImage('quest_timerimgs','','screenshots/quest_timer-3.gif',1); itab=false; stab=false; swap_desc(2);" onmouseover="img.style.cursor='pointer';" onmouseout="img.style.cursor='default';" >
                            <area shape="rect" coords="156,29,222,45" alt="Other Characters" onclick="MM_swapImage('quest_timerimgs','','screenshots/quest_timer-4.gif',1); itab=false; stab=false; swap_desc(3);" onmouseover="img.style.cursor='pointer';" onmouseout="img.style.cursor='default';" >
                            <area shape="rect" coords="222,29,270,45" alt="Internet" onclick="if (!itab) { MM_swapImage('quest_timerimgs','','screenshots/quest_timer-'+itab_num+'.gif',1); itab=true; stab=false; swap_desc(itab_num-1); }" onmouseover="img.style.cursor='pointer';" onmouseout="img.style.cursor='default';" >
                            <area shape="rect" coords="0,45,86,61" alt="" onclick="if (itab) { MM_swapImage('quest_timerimgs','','screenshots/quest_timer-5.gif',1); itab_num = 5; swap_desc(4); }" onmouseover="if (itab) img.style.cursor='pointer';" onmouseout="if (itab) img.style.cursor='default';" >
                            <area shape="rect" coords="86,45,160,61" alt="" onclick="if (itab) { MM_swapImage('quest_timerimgs','','screenshots/quest_timer-6.gif',1); itab_num = 6; swap_desc(5); }" onmouseover="if (itab) img.style.cursor='pointer';" onmouseout="if (itab) img.style.cursor='default';" >
                            <area shape="rect" coords="160,45,206,61" alt="" onclick="if (itab) { MM_swapImage('quest_timerimgs','','screenshots/quest_timer-8.gif',1); itab_num = 8; swap_desc(7); }" onmouseover="if (itab) img.style.cursor='pointer';" onmouseout="if (itab) img.style.cursor='default';" >
                            <area shape="rect" coords="270,29,316,45" alt="Settings" onclick="MM_swapImage('quest_timerimgs','','screenshots/quest_timer-7.gif',1); itab=false; stab=true; swap_desc(6);" onmouseover="img.style.cursor='pointer';" onmouseout="img.style.cursor='default';" >
                            <area shape="rect" coords="84,173,212,189" alt="" onclick="if (stab) { MM_swapImage('quest_timerimgs','','screenshots/quest_timer-8.gif',1); itab=true; stab=false; itab_num=8; swap_desc(7); }" >
                        </map>
                    </td>
                    <td valign="top"><br><br>
                        <i>&lt; Click on a tab for more information about that tab</i><br><br><br>
                        <span id="img_desc"></span>
                    </td>
                </tr>
            </table>
            <script language="JavaScript">
            function MM_findObj(n, d) { //v4.01
              var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
                d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
              if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
              for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
              if(!x && d.getElementById) x=d.getElementById(n); return x;
            }
            function MM_swapImage() { //v3.0
              var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
               if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
            }
            function MM_preloadImages() { //v3.0
             var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
               var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
               if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
            }
            desc = new Array(8);
            desc[0] = "<b>Quests</b><br>\
                This tab is pretty straightforward.  Click on any of the quest names to sort by \
                name, or the time left to sort by that.  Click Edit to bring up the Add/Edit tab \
                with that quest's info for editing.  Hold down CTRL and click the red X to delete \
                the quest.";
            desc[1] = "<b>Notes</b><br>\
                On this tab, you can view/add notes for quests.  Click Copy to copy the note to the \
                clipboard, /say to say the note outloud, and /f to say the note to your fellowship. \
                You'll need to hold CTRL when clicking the X to delete the note.<br>\
                You can also get to this tab by typing <span class='emote'>/qtimer notes [quest name]</span> \
                (quest name is optional).  If you don't specify a quest name, it'll just show notes \
                for the currently selected quest.";
            desc[2] = "<b>Add/Edit Quests</b><br>\
                Use this tab to add a new quest or edit an existing one.  If you enter the name of \
                an existing quest and haven't started adding any triggers or length info, Quest Timer \
                will automatically fill in the existing information so you can edit it.  When typing \
                the dates and times, simply enter them in your local format.  To verify that you typed \
                the correct format, Quest Timer will convert the date to the <span class='emote'>Month \
                Day, Year</span> format in the edit box.";
            desc[3] = "<b>Other Characters</b><br>\
                On this tab you can view the quest timers for the other characters in your quest file.<br>\
                Characters will only show up in this list if they have completed a quest.";
            desc[4] = "<b>Internet &gt; Available Quests</b><br>\
                If you specify on the options tab to download new quests, this will show the quests \
                that have been downloaded.  Any quests that are new since you last checked for new \
                quests will be green. Click the blue + to add a quest to your list, or View to review/edit \
                the quest information before adding it. Click any of the first three columns to sort by \
                that column (i.e., click on a quest's name to sort by name, etc)<br>\
                If you want to reset the list and download all of the available quests again, type \
                <span class='emote'>/qtimer checknew reset</span> ";
            desc[5] = "<b>Internet &gt; Submit Quests</b><br>\
                Here you can select quests from your quest file to submit to the server.  Quests in your \
                file are checked against the list of downloaded quests.  If they don't exist, they will appear \
                green; if they do exist, but with different trigger/duration data, they will appear yellow; \
                and if the exist with the same info, they will appear red.  See the Notes section for more info.";
            desc[7] = "<b>Internet &gt; Settings</b><br>\
                You can turn on/off the various internet functions of Quest Timer. If you have a custom site \
                to handle uploading or downloading, enter the URL here. (See the Notes section for info \
                on how to upload to multiple sites)<br>\
                Since all characters share one quest file, the only good way for the server to keep \
                track of which file to save/get when uploading/downloading is a username and password. \
                <span class='emote'><b>Do not use a sensitive password!</b></span> The password is \
                sent and stored <i>unencrypted</i>.";
            desc[6] = "<b>Settings</b><br>\
                You can turn on/off the various functions of Quest Timer.";
            function swap_desc(index) { document.getElementById('img_desc').innerHTML = desc[index]; }
            
            itab = false;
            swap_desc(0);
            MM_preloadImages('screenshots/quest_timer-1.gif','screenshots/quest_timer-2.gif','screenshots/quest_timer-3.gif','screenshots/quest_timer-4.gif','screenshots/quest_timer-5.gif','screenshots/quest_timer-6.gif','screenshots/quest_timer-7.gif','screenshots/quest_timer-8.gif');
            
            
            var file_importer = '\
            <table cellpadding="5" cellspacing="0">\
                <tr>\
                    <td align="right"><a href="screenshots/quest_timer_cnvt-full.gif"><img border="0" src="screenshots/quest_timer_cnvt-small.gif"></a></td>\
                    <td><b>File Importer</b> (click image for full size screenshot)<br>\
                        <ol><li>Choose the folder where Quest Timer v1.4 is installed (not necessarily the same \
                        folder as v2.0)</li>\
                        <li>If you\'d like to include the current v2.0 quests.xml file, click Import.</li>\
                        <li>In 1., select each of the world\'s folders that you want to import, and then select \
                        the XMLs for the characters that you want to import and hit Add, or hit Add All, to \
                        add all characters for a given world.</li>\
                        <li>This shows the quests for the currently selected character.  You can import one \
                        quest at a time if you\'d like.</li>\
                        <li>This is a list of the all the quests that will be included in the v2 quest file. \
                        You can remove quests that you don\'t want to include.</li>\
                        <li>When you select a quest in 5., this will list the characters who have completed \
                        the quest.  You can use Cut/Copy/Paste to move timers from one quest to another if \
                        you have multiple copies of the same quest but different names.</li></ol></td>\
                </tr>\
            </table>';
            
            function swap_file_importer()
            {
                if (document.getElementById('file_importer_span').innerHTML != '')
                {
                    document.getElementById('file_importer_click').innerHTML = '<img src="plus.gif">&nbsp;Show info about the File Importer for version 2.0';
                    document.getElementById('file_importer_span').innerHTML = '';
                }
                else
                {
                    document.getElementById('file_importer_click').innerHTML = '<img src="minus.gif">&nbsp;Hide info about the File Importer for version 2.0';
                    document.getElementById('file_importer_span').innerHTML = file_importer;
                }
            }
            </script>
            <br>
            <span name="file_importer_click" id="file_importer_click" onclick="swap_file_importer();" style="font-style:italic; cursor:pointer;"><img src="plus.gif">&nbsp;Show info about the File Importer for version 2.0</span><br>
            <span name="file_importer_span" id="file_importer_span"></span>
        </td>
    </tr>
    <tr>
        <td height="5"></td>
    </tr>
    <tr>
        <td class="catHead"><a name="notes"></a><b>Notes</b></td>
    </tr>
    <tr>
        <td class="row1">
            <ul>
                <li>Since all characters share the same quest file, when you delete a quest with one character, 
                    it will be deleted for all other characters, and <i>any timer info and notes will be lost</i><br>&nbsp;</li>
                <li>You can use the wildcards <span class="emote">* ? #</span> to match arbitrary letters/numbers, and the pipe 
                     <span class="emote">|</span> as an "OR" for matching multiple different names.<br>
                    <table border="0" cellpadding="0" cellspacing="0">
                        <tr><td valign="top"><span class="emote">*</span></td><td>&nbsp;&nbsp;matches zero or more of any letter or number</td></tr>
                        <tr><td valign="top"><span class="emote">?</span></td><td>&nbsp;&nbsp;matches exactly one letter or number</td></tr>
                        <tr><td valign="top"><span class="emote">#</span></td><td>&nbsp;&nbsp;matches any single digit (0-9)</td></tr>
                        <tr><td valign="top"><span class="emote">|</span></td><td>&nbsp;&nbsp;is used to separate different complete names 
                                and match any one of them (don’t put spaces between the name and the pipe)</td></tr>
                    </table>
                    For example, <span class="emote">*Gem of Enlightenment|*Gem of Forgetfulness</span> will match any of the 
                    gems in the Skill Change Quest; however, <span class="emote">*Gem of Enlightenment|Forgetfulness</span> 
                    will <i>not</i>.<br>&nbsp;</li>
                <a name="merge_quests"></a>
                <li>Quest Timer supports the ability to merge quest definitions from other people 
                    with yours.  For example, you can download all of the quests in this site's quest 
                    database as a <a href="quest_timer.php?mode=viewquests#merge_quests">merge file</a>.  
                    When you get a merge file, save it in the Quest Timer folder and name it 
                    <span class="emote">merge_quests.xml</span>.  Next time you log in, Quest Timer will 
                    instruct you how to merge it.<br>
                    If when merging quests, you have multiple copies of the same quest with different names, 
                    you can either delete the new ones or use the Converter program (outside AC) to move your 
                    timers under the new quest name and delete the old one.<br>&nbsp;</li>
                <li>In order to improve performance, I recommend that you don't simply add all of the quests 
                    that are available on the Internet tab. There are over 300 quests available for download, 
                    but I recommend you look through the list and choose the ones you plan to use.  If you 
                    ever decide you want a quest later, it'll still be there on the Internet tab.  When you 
                    delete a quest that you had added from the Internet tab, it'll reappear there so you can 
                    add it back later if you choose.<br>&nbsp;</li>
                <li>If you want a quest timer to only be triggered if you pick up an item from a specific corpse 
                    or chest, enter the item's name for 'Pickup' and the corpse or chest name (including 'Corpse 
                    of' for corpses) for 'Chest/Corpse.'  The timer will only be started if you pick up that item 
                    while the corpse or chest is open. This is useful for a quest where the item you loot is droppable 
                    (instead of setting the "droppable" flag, which doesn't work very well).<br>&nbsp;</li>
                <li>You may want to upload your quests to additional sites -- for instance, you use my site to 
                    store your file, but your clan's site to see the timer info.  To do this, open the settings.xml 
                    file and follow the instructions in the comment under 
                    <span class="cod">&lt;AdditionalUploadURLs&gt;</span><br>&nbsp;</li>
                <li>To specify a different site to handle downloading or submitting new quests, change the 
                    <span class="cod">QuestDatabaseURL</span> field in settings.xml<br>&nbsp;</li>
                <li>See the <a href="quest_timer.php?mode=devinfo">Dev Info</a> for information about how to upload 
                    quests to your own site.</li>
            </ul>
        </td>
    </tr>
    <tr>
        <td height="5"></td>
    </tr>
    <tr>
        <td class="catHead"><a name="history"></a><b>Version History</b></td>
    </tr>
    <tr>
        <td class="row1"><table cellpadding="0" cellspacing="2">
                <tr>
                    <td><b>Quest Timer v2.4.2 Alpha</b> <i>December 15, 2005</i></td>
                </tr>
                <tr>
                    <td><ul><li>Updated to work with Decal 3 Alpha 5b (v2.9.3.2).</li></ul></td>
                </tr>
                <tr>
                    <td><b>Quest Timer v2.4.1 Alpha</b> <i>November 9, 2005</i></td>
                </tr>
                <tr>
                    <td><ul><li>Updated to work with Decal 3 Alpha 4 (v2.9.2.0).</li>
                            <li>Made many backend changes to quest triggering.  Please report any 
                                quests that don’t trigger properly.</li>
                            <li>Made a slight change to how quests are triggered for quests that 
                                require picking up an item from a specific chest corpse.  Previously, 
                                the quest was triggered if you picked up the item within 10 seconds 
                                of opening the chest/corpse.  Now, Quest Timer does a more direct check 
                                that the chest/corpse is currently opened when you pick up the item.  
                                Most users should not notice a difference.</li>
                            <li>Fixed a bug in the /say command for notes, where the text would go to 
                                the active chat channel rather than local chat.</li>
                        </ul>
                    </td>
                </tr>
                <tr>
                    <td><b>Quest Timer v2.4.0 Alpha</b> <i>October 19, 2005</i></td>
                </tr>
                <tr>
                    <td><ul><li>Updated to work with Decal3 and Throne of Destiny.</li></ul>
                    </td>
                </tr>
                <tr>
                    <td><b>Quest Timer v2.3.3</b> <i>April 18, 2005</i></td>
                </tr>
                <tr>
                    <td><ul><li>Quest Timer can now upload your timer info to Treestats, and display your quest timers on your character's Treestats page.</li>
                            <li>Fixed timer expiration messages -- if a timer expires more than once without you logging out, it now shows the expiration message each time.</li>
                            <li>If your computer changes DST or Timezone settings, Quest Timer will compensate, rather than having the timers expire early or late.</li></ul>
                    </td>
                </tr>
                <tr>
                    <td><b>Quest Timer v2.3.2</b> <i>January 8, 2005</i></td>
                </tr>
                <tr>
                    <td><ul><li>You can now view all of your characters' timers at once on the Other Characters tab.</li>
                            <li>Fixed a bug where it wouldn't upload when you add/remove a note, if you had auto 
                                uploading enabled.</li>
                            <li>Fixed a bug with the "Only upload if your file is newer" setting.</li></ul>
                    </td>
                </tr>
                <tr>
                    <td><b>Quest Timer v2.3.1</b> <i>January 6, 2005</i></td>
                </tr>
                <tr>
                    <td><ul><li>When uploading quests, Quest Timer can alert you if the quest data for 
                                characters other than the current one doesn't match what's currently on the 
                                server.  If the data doesn't match, the server can also merge its data for the 
                                other characters with the data you just uploaded for the current character.</li>
                            <li>Quest Timer can make sure that a newer file hasn't been uploaded to the server 
                                (from another computer) when uploading quests.</li>
                            <li>Quest Timer can save backups of your quests file when you download one from 
                                the server.</li>
                            <li>Made it easier to find quests on the Internet &gt; Available Quests tab.</li>
                            <li>Moved internet settings to a tab under the Internet tab.</li>
                            <li>Fixed checking of "Watch for other clients modifying the Quest file" setting 
                                while saving quests file.</li>
                            <li>The submitquests server script has changed significantly.  If you run a server
                                that accepts quests file uploads, check out the 
                                <a href="<?=$_SERVER['SCRIPT_NAME']?>?mode=devinfo">Dev Info</a>.</li></ul>
                    </td>
                </tr>
                <tr>
                    <td><b>Quest Timer v2.3.0</b> <i>November 29, 2004</i></td>
                </tr>
                <tr>
                    <td><ul><li>/tell's can now be used as triggers</li>
                            <li>Option to automatically set quests that were completed more than X days ago 
                                to 'Not Completed'</li>
                            <li>You can Ctrl+Click on 'Time Up' on the Quests list to clear the timer for 
                                that quest (set it to 'Not Completed')</li>
                            <li>Changed the 30 second delay in uploading quests to 5 seconds.</li></ul>
                    </td>
                </tr>
                <tr>
                    <td><b>Quest Timer v2.2.2</b> <i>August 15, 2004</i></td>
                </tr>
                <tr>
                    <td><ul><li>Fixed a bug that could cause a trigger not to be started if you already had 
                                another copy of the item in your inventory (the Skill Sellback quest timer 
                                now works properly).</li>
                            <li>New quests on the Internet tab are green again.</li>
                            <li>Quest timers should start if an item is placed directly into a side pack.</li>
                            <li>Fixed a few more minor bugs with downloading quests.</li></ul>
                    </td>
                </tr>
                <tr>
                    <td><b>Quest Timer v2.2.1</b> <i>June 21, 2004</i></td>
                </tr>
                <tr>
                    <td><ul><li>Fixes the <i>Type mismatch</i> errors for people using Imp Filter 
                                v2.8.0.14, or the unpatched v2.9.0.2</li></ul>
                    </td>
                </tr>
                <tr>
                    <td><b>Quest Timer v2.2.0</b> <i>June 19, 2004</i></td>
                </tr>
                <tr>
                    <td><ul><li>New type of trigger - item picked up within 60 seconds of opening a certain 
                                corpse.  To use it, specify both the item name and corpse or chest name</li>
                            <li>Submit quests to the site directly from the plugin</li>
                            <li>View the quest timer information for other characters while ingame</li>
                            <li>Can now see "Updated" quests in yellow on the Internet / Available Quests tab (they 
                                were previously hidden completely on that tab)</li>
                            <li>Option to not display "Time Up" messages when quests expire or at login</li>
                            <li>Option to disable Quest Timer from checking if the Quests XML was modified 
                                by dual logging</li>
                            <li>You can upload quests to more than one site (see Notes for more info)</li>
                            <li>The plugin no longer requires a password for uploading/downloading -- it's 
                                handled by the server.</li>
                            <li>Character GUIDs are stored in the Quests XML (for servers that need it)</li>
                            <li>Dates saved in the ISO 8601 (universal) format in the Quests XML 
                                (year-month-day hour:minute:second)</li>
                            <li>New fields sent with web requests: comma-delimited list of characters, current 
                                character's GUID, time zone offset (e.g. -0500)</li>
                            <li>Quests can now have more than one trigger method</li>
                            <li>Removed the Download Quests URL edit box from the settings tab -- if you want 
                                to change this URL, change the QuestDatabaseURL field in settings.xml</li></ul>
                    </td>
                </tr>
                <tr>
                    <td><b>Quest Timer v2.1.0</b> <i>April 27, 2004</i></td>
                </tr>
                <tr>
                    <td><ul><li>Download new quest definitions as they are added to my site (or any site you choose).</li>
                            <li>Upload/Download your quests to my site (or any site you choose).</li>
                            <li>Online Version checking -- get alerted when there's a new version available.</li>
                            <li>Quest Notes! Keep track of coords, tips, directions, and more.</li>
                            <li>You now need to hold down CTRL while deleting quests/notes to prevent accidental deletion.</li>
                            <li>The ingame UI is slightly wider to accomidate longer quest names.</li>
                            <li>Deleting a quest no longer brings you back to the top of the quest list (for easier deleting multiple quests).</li>
                            <li>Fixed a bug where quest timers might get started by just moving items in your pack after merging a file.</li>
                            <li>Items on hooks should no longer trigger quest timers.</li></ul>
                    </td>
                </tr>
                <tr>
                    <td><b>Quest Timer v2.0.1</b> <i>April 19, 2004</i></td>
                </tr>
                <tr>
                    <td><ul><li>Dates should now save/load correctly for those using Euro formats.</li>
                            <li>Fixed a bug that could cause quest timers for quests that used wildcards
                                to reset when moving items around in your pack.</li>
                            <li>Chat commands now actually work.</li></ul>
                    </td>
                </tr>
                <tr>
                    <td><b>Quest Timer v2.0.0 Beta</b> <i>April 13, 2004</i></td>
                </tr>
                <tr>
                    <td><ul><li>All characters now share the same quest file and quest definitions.</li>
                            <li>You can now use wildcards <span class="emote">* ? #</span> to match arbitrary letters, and
                            the pipe <span class="emote">|</span> as an "OR" for matching multiple different names.</li>
                            <li>Switched from hand-written date handling to Visual Basic's built in date handling.  This 
                            is more robust, and should be locale-aware (i.e. no more Euro version necessary).  The timers 
                            should also no longer be one hour off during DST.</li>
                            <li>Changed the quest file format. Using the included file converter is required if you want to 
                            keep your old quest list.</li>
                            <li>Some more stuff</li></ul>
                    </td>
                </tr> 
                <!--
                <tr>
                    <td><b><i>The following are from Jer's original Quest Timer website</i></b><br><br>
                        <b>Quest Timer v1.4.1</b> <i></i></td>
                </tr>
                <tr>
                    <td><ul><li>Version history coming soon.</li></ul>
                    </td>
                </tr>
                -->
            </table>
        </td>
    </tr>
    <tr>
        <td height="5"></td>
    </tr>
    <tr>
        <td class="catHead"><a name="source"></a><b>Source Code</b></td>
    </tr>
    <tr>
        <td class="row1">
            <a href="http://code.google.com/p/digero-ac/"><b>Project Page on GoogleCode</b></a><br />
            I've moved the source code to a Subversion repository on GoogleCode, and put the 
            source under the <a href="http://en.wikipedia.org/wiki/MIT_License">MIT License</a>.  
            See the project page for info on how to get the source code.
            <?php /*
            <?=download("Quest Timer Source","2.4.2 Alpha")?><br />
            <?=download("Quest Timer Source","2.4.1 Alpha")?><br />
            <br />
            <b><i>Pre-ToD</i></b><br />
            <?=download("Quest Timer Source","2.3.3",'',false)?>,
            <?=download("Quest Timer Source","2.3.2",'',false)?>,
            <?=download("Quest Timer Source","2.3.1",'',false)?>,
            <?=download("Quest Timer Source","2.3.0",'',false)?>,
            <?=download("Quest Timer Source","2.2.2",'',false)?>,
            <?=download("Quest Timer Source","2.2.0",'',false)?>,
            <?=download("Quest Timer Source","2.1.0",'',false)?>,
            <?=download("Quest Timer Source","2.0.1",'',false)?>,
            <?=download("Quest Timer Source","2.0.0 Beta",'',false)?><br />
            <span class="gensmall">Source code is available to aid aspiring plugin writers 
            in getting started. If  you plan to use large portions of my source in your own 
            plugin, please contact me first.</span><br>
            <br>
            <b><i>Jer's original version</i></b><br>
            <?=download("Quest Timer Source","1.4.1",'',false)?>
            */ 
?>
        </td>
    </tr>
</table>
<?php
    
require_once('plugins_footer.php');
?>