v0.0.2
108
irpg-web/ChangeLog.txt
Normal file
@@ -0,0 +1,108 @@
|
||||
This is the ChangeLog for the old Idle RPG Website Code.
|
||||
I'm not as religious about making sure my updates make it here as I am about
|
||||
changes to the IRPG code making it into that ChangeLog, so there may be changes
|
||||
between versions that you don't see listed here.
|
||||
|
||||
Also, please note that any use of "incowrect" or other cow-related "typos" are
|
||||
NOT typos. I like cattle. A lot. Please stop fixing them :^)
|
||||
|
||||
2004-07-17 Jon Honeycutt <jotun@idlerpg.net>
|
||||
* huge modification of the entire source by the original coder, res0
|
||||
<bk@slashnet.org>. res0 has really helped this project through his many
|
||||
contributions; it wouldn't be where it is today without him. thanks, res0!
|
||||
* New site layout (valid XHTML 1.1 strict) using CSS
|
||||
* Cleaned up PHP
|
||||
* User maps do not display unless visitor clicks 'display' link
|
||||
* changed fgets() calls to add the optional second parameter (for old PHPs)
|
||||
* removed incorrect header() in makequestmap() (mikegrb)
|
||||
* checked to make sure key $_SESSION['time'] was set before attempting to
|
||||
reference it (HarK0nNeN)
|
||||
* db.php's table tag now specifies the number of rows and columns to make
|
||||
drawing faster in browsers that pay attention to it (res0)
|
||||
* header("Location: ") directives now give full URIs
|
||||
* made better use of htmlentities() and urlencode()s as relates to display
|
||||
of usernames and classes
|
||||
* users on quest and world maps are now clickable, leading to their player
|
||||
info page (John Nielsen)
|
||||
|
||||
2004-05-31 Jon Honeycutt <jotun@idlerpg.net>
|
||||
* changed players.php to show offline users as gray, this style is in
|
||||
header.php, patch from Chewie <chewie@f2o.org>
|
||||
* changed map-drawing PHP scripts to draw a transparent image which is then
|
||||
overlayed (using CSS) over the static newmap.png image. changed the map
|
||||
drawing frequency to 1/user/20s as I think this greatly decreases CPU
|
||||
usage. changed the maperror.png to something more appropriate. $mapx
|
||||
and $mapy in config.php describe the dimensions of your map file (Rick)
|
||||
* fixed quest.php to show proper coordinates; another evil c/p error (Rick)
|
||||
|
||||
2004-05-23 Jon Honeycutt <jotun@idlerpg.net>
|
||||
* changed most everything to make sense with the new database
|
||||
* edited dump.php to display data in the same format, despite the new
|
||||
database format.
|
||||
* added an xml.php page that takes a 'player' argument and displays
|
||||
information on that user in xml 1.0 format. should allow a better API
|
||||
as far as compatibility with newer dbs goes
|
||||
* changed playerview.php to use fgets() to read from modifiers.txt.
|
||||
hopefully this is much faster
|
||||
* edited playerview.php to show map and XML data link
|
||||
* changed the counter in footer.php to strip the leading path information
|
||||
from $_SERVER['PHP_SELF'] before using it to identify the page
|
||||
* removed some unused $i variable from players.php
|
||||
* created quest.php which shows active quest info
|
||||
* created makequestmap.php which draws a quest map if quest type is 2,
|
||||
redirects otherwise
|
||||
* created worldmap.php which shows the active state of the irpg world
|
||||
* created makeworldmap.php which draws the world map
|
||||
* created makemap.php which takes a 'player' argument and draws them on the
|
||||
map
|
||||
* commonfunctions.php now has functions to sort by isadmin flag and player
|
||||
alignment
|
||||
* index.php updated with information on the new game features
|
||||
* changed titles on several pages to use $irpg_chan instead of hard-coded
|
||||
#G7
|
||||
* updated header.php to link to new pages and idlerpg.net forum
|
||||
* changed 'time modifiers' to 'character modifiers' as item modifiers are
|
||||
now stored, also
|
||||
|
||||
2004-05-23 Alexander Hirzel <chewie@f2o.org>
|
||||
* submitted a series of patches to correct, among other things, the horrible
|
||||
use of <td> where <th> was more appropriate
|
||||
|
||||
2004-04-22 Jon Honeycutt <jotun@idlerpg.net>
|
||||
* if $_GET['alltime'] wasn't set, < and > in time modifiers were not
|
||||
translated to < and > (thanks DinTx)
|
||||
* attempted to fix playerview.php from showing others' stats, traded
|
||||
stristr() for strstr() matching either "^name ", " name ", or "^name's "
|
||||
|
||||
2004-04-23 Jonathan Attwell <caffeen@caffeen.org>
|
||||
* created README, detailing how users are to install and what to edit.
|
||||
* created config.php, which holds all the setup variables.
|
||||
* cleaned up some of the php coding.
|
||||
|
||||
2004-04-15 Jon Honeycutt <jotun@ultrazone.org>
|
||||
* we now stripslashes() on $_GET['player'] for players.php,
|
||||
playerview.php, dump.php (thanks Diab)
|
||||
|
||||
2004-04-05 Jon Honeycutt <jotun@ultrazone.org>
|
||||
* removed some of parallax's tabs :^)
|
||||
* edited players.php to forward requests for specific players to the proper
|
||||
playerview.php
|
||||
* changed links in sitesource.php to be fully-qualified
|
||||
* removed preg_grep in playerview.php, which insecurely used tainted
|
||||
data. switched to stristr. (thanks mike@ethernal.org)
|
||||
* stripped < and > from modifiers.txt output (thanks mike@ethernal.org)
|
||||
* changed link to idlerpg-adv.txt in players.php to be fully-qualified.
|
||||
(thanks daxxar)
|
||||
* may've made other changes, not sure.
|
||||
|
||||
2004-02-15 Jon Honeycutt <jotun@ultrazone.org>
|
||||
* edited source.php to provide fully-qualified URLs to source files;
|
||||
easier for users to follow license.
|
||||
* playerview.php's 'View all Time Modifiers' link now displays the
|
||||
number of time modifiers.
|
||||
* contact.php now sends a From: field in its headers parameter.
|
||||
|
||||
2004-01-31 Titus Barik <titus@barik.net>
|
||||
* created ChangeLog, following Debian ChangeLog format.
|
||||
* modified header.php to be location independent via $BASE_URL var.
|
||||
* players.php and playerview.php are now separate files.
|
||||
48
irpg-web/INSTALL.txt
Normal file
@@ -0,0 +1,48 @@
|
||||
-------------------------------------------------------------------------------
|
||||
First-time Installation:
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
1. Make sure you have the irpg-bot functional and running.
|
||||
2. Copy all of the irpg-web files to your public_html/irpg web folder.
|
||||
3. Edit config.php with your favorite editor. This file must be in the same
|
||||
public directory where the irpg web resides.
|
||||
4. chmod 644 * && chmod 666 hits.db
|
||||
5. If you change the default settings in the IRPG bot (for example, if you turn
|
||||
off the option to write quest info to file, you'll have to manually edit
|
||||
some scripts to take this into account. If you disable the INFO command,
|
||||
you might want to remove it from the index.php page.
|
||||
6. Some code in this package requires that your system have GD 2.0+ (or have it
|
||||
enabled in your php.ini, on Win32). If you don't want this functionality to
|
||||
be available, edit the script playerview.php to remove the use of the map
|
||||
and header.php to remove the links to the world map and the quest info page.
|
||||
You can also delete the worldmap.php, makeworldmap.php, makemap.php,
|
||||
quest.php, and makequestmap.php scripts.
|
||||
7. Edit the website ANY WAY you see fit. You don't have to keep all of the
|
||||
links to me, I just thought they might be useful or interesting to users :^)
|
||||
8. All milestones, issues, bugs and features are tracked using GitEmAll.
|
||||
Thanks for your interest in IdleRPG! :^)
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Upgrading:
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
1. Remove your old web source, ie, rm -rfv that old buggy crap and start over.
|
||||
2. Make sure you have the irpg-bot functional and running.
|
||||
3. Copy all of the irpg-web files to your public_html/irpg web folder.
|
||||
4. Edit config.php with your favorite editor. This file must be in the same
|
||||
public directory where the irpg web resides.
|
||||
5. chmod 644 * && chmod 666 hits.db
|
||||
6. If you change the default settings in the IRPG bot (for example, if you turn
|
||||
off the option to write quest info to file, you'll have to manually edit
|
||||
some scripts to take this into account. If you disable the INFO command,
|
||||
you might want to remove it from the index.php page.
|
||||
7. Some code in this package requires that your system have GD 2.0+ (or have it
|
||||
enabled in your php.ini, on Win32). If you don't want this functionality to
|
||||
be available, edit the script playerview.php to remove the use of the map
|
||||
and header.php to remove the links to the world map and the quest info page.
|
||||
You can also delete the worldmap.php, makeworldmap.php, makemap.php,
|
||||
quest.php, and makequestmap.php scripts.
|
||||
8. Edit the website ANY WAY you see fit. You don't have to keep all of the
|
||||
links to me, I just thought they might be useful or interesting to users :^)
|
||||
9. All milestones, issues, bugs and features are tracked using GitEmAll.
|
||||
Thanks for your interest in IdleRPG! :^)
|
||||
64
irpg-web/admincomms.txt
Normal file
@@ -0,0 +1,64 @@
|
||||
This is not the full list of commands for the Idle RPG bot, but only the list
|
||||
of admin commands.
|
||||
|
||||
INFO, retrieve some fairly useless stats about the bot.
|
||||
|
||||
DIE, kills the bot.
|
||||
|
||||
HOG, summon the Hand of God spell. See the main help file.
|
||||
|
||||
RESTART, restarts the bot.
|
||||
|
||||
CHPASS <char name> <new password>, change a character's pass in the IRPG.
|
||||
|
||||
CHCLASS <char name> <new class name>, change a character's class in the IRPG.
|
||||
|
||||
CHUSER <char name> <new char name>, change a character's username in the IRPG.
|
||||
Please only use in very special circumstances; otherwise, have them form
|
||||
a new player and DEL the old one. This should not let you overwrite an
|
||||
existing account, but is untested.
|
||||
|
||||
PUSH <char name> <seconds>, push a player toward his goal by subtracting time
|
||||
from his next time to level. Please use this only if bot has mistakenly
|
||||
penalized someone. You could also use this to punish a user by setting
|
||||
the number of seconds to a negative number. Don't do that.
|
||||
|
||||
DEL <char name>, remove a user's account.
|
||||
|
||||
JUMP <server[:port]>, move the bot to another server.
|
||||
|
||||
SILENT <mode>, switch bot between 4 modes of silence.
|
||||
- mode 0, bot sends all privmsgs.
|
||||
- mode 1, only chanmsg() is disabled.
|
||||
- mode 2, only privmsg()/notice() to non-channels is disabled.
|
||||
- mode 3, privmsgs/notices to users and channels are disabled.
|
||||
|
||||
BACKUP, tell bot to copy $opts{'dbfile'} to .dbbackup/$opts{'dbfile'}TIMESTAMP
|
||||
|
||||
RELOADDB, force bot to reload player database file, rewriting all memory.
|
||||
RELOADDB can only be used while in pause mode.
|
||||
|
||||
PAUSE, toggle pause mode.
|
||||
|
||||
PEVAL <code>, execute arbitrary argument as Perl code. Queues output > 3 lines
|
||||
or >1k of text. Some useful PEVAL commands:
|
||||
- Delete all accounts not logged in in 4 weeks (See also: DELOLD):
|
||||
/msg bot PEVAL delete $rps{$_} for grep { time()-$rps{$_}{lastlogin} > 3600*24*7*4 && !$rps{$_}{online} } keys %rps;
|
||||
- Remove one hour from everyone's clocks:
|
||||
/msg bot PEVAL $rps{$_}{next} -= 3600 for keys %rps;
|
||||
- List all online users, separated by commas:
|
||||
/msg bot PEVAL join(', ',grep { $rps{$_}{online} } keys %rps);
|
||||
- View contents of a file on remote host:
|
||||
/msg bot peval `cat file`
|
||||
- Turn on debug mode:
|
||||
/msg bot peval $opts{debug}=1;
|
||||
- Force write-out of database:
|
||||
/msg bot peval writedb();
|
||||
|
||||
DELOLD <days>, remove all non-logged-in accounts inactive in the last <days>
|
||||
days.
|
||||
|
||||
CLEARQ, clear the outgoing message queue. Useful to use if someone floods the
|
||||
bot with a lot of text that it plans to respond to.
|
||||
|
||||
MKADMIN <username>, set the isadmin flag for a given username.
|
||||
94
irpg-web/commonfunctions.php
Normal file
@@ -0,0 +1,94 @@
|
||||
<?php
|
||||
function duration($s) {
|
||||
$s = abs(intval($s));
|
||||
if ($s == 0) return "None";
|
||||
return sprintf("%d day%s, %02d:%02d:%02d",
|
||||
$s/86400,intval($s/86400)==1?"":"s",
|
||||
($s%86400)/3600,($s%3600)/60,$s%60);
|
||||
}
|
||||
function cmp_level_asc($a,$b) { return cmp_level_desc($b,$a); }
|
||||
function cmp_level_desc($a,$b) {
|
||||
list(,,,$level1,,$time1)=explode("\t",trim($a));
|
||||
list(,,,$level2,,$time2)=explode("\t",trim($b));
|
||||
if ($level1 == $level2) return ($time1 <= $time2) ? -1 : 1;
|
||||
return ($level1 > $level2) ? -1 : 1;
|
||||
}
|
||||
function cmp_alignment_asc($a,$b) { return cmp_alignment_desc($b,$a); }
|
||||
function cmp_alignment_desc($a,$b) {
|
||||
list(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,$a1)=explode("\t",trim($a));
|
||||
list(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,$a2)=explode("\t",trim($b));
|
||||
if ($a1 == "g" || $a2 == "e") return -1;
|
||||
if ($a1 == "e" || $a2 == "g") return 1;
|
||||
return 0;
|
||||
}
|
||||
function cmp_isadmin_asc($a,$b) { return cmp_isadmin_desc($b,$a); }
|
||||
function cmp_isadmin_desc($a,$b) {
|
||||
list(,,$o1)=explode("\t",trim($a));
|
||||
list(,,$o2)=explode("\t",trim($b));
|
||||
return ($o1 > $o2) ? -1 : 1;
|
||||
}
|
||||
function cmp_ttl_asc($a,$b) { return cmp_ttl_desc($b,$a); }
|
||||
function cmp_ttl_desc($a,$b) {
|
||||
list(,,,,,$time1)=explode("\t",trim($a));
|
||||
list(,,,,,$time2)=explode("\t",trim($b));
|
||||
return ($time2 < $time1) ? -1 : 1;
|
||||
}
|
||||
function cmp_user_asc($a,$b) { return cmp_user_desc($b,$a); }
|
||||
function cmp_user_desc($a,$b) {
|
||||
list($u1)=explode("\t",trim($a));
|
||||
list($u2)=explode("\t",trim($b));
|
||||
return (strtolower($u1) > strtolower($u2)) ? -1 : 1;
|
||||
}
|
||||
function cmp_online_asc($a,$b) { return cmp_online_desc($b,$a); }
|
||||
function cmp_online_desc($a,$b) {
|
||||
list(,,,,,,,,$o1)=explode("\t",trim($a));
|
||||
list(,,,,,,,,$o2)=explode("\t",trim($b));
|
||||
return ($o1 > $o2) ? -1 : 1;
|
||||
}
|
||||
function cmp_idled_asc($a,$b) { return cmp_idled_desc($b,$a); }
|
||||
function cmp_idled_desc($a,$b) {
|
||||
list(,,,,,,,,,$i1)=explode("\t",trim($a));
|
||||
list(,,,,,,,,,$i2)=explode("\t",trim($b));
|
||||
return ($i1 > $i2) ? -1 : 1;
|
||||
}
|
||||
function cmp_created_asc($a,$b) { return cmp_created_desc($b,$a); }
|
||||
function cmp_created_desc($a,$b) {
|
||||
list(,,,,,,,,,,,,,,,,,,,$i1)=explode("\t",trim($a));
|
||||
list(,,,,,,,,,,,,,,,,,,,$i2)=explode("\t",trim($b));
|
||||
return ($i1 > $i2) ? -1 : 1;
|
||||
}
|
||||
function cmp_lastlogin_asc($a,$b) { return cmp_lastlogin_desc($b,$a); }
|
||||
function cmp_lastlogin_desc($a,$b) {
|
||||
list(,,,,,,,,,,,,,,,,,,,,$i1)=explode("\t",trim($a));
|
||||
list(,,,,,,,,,,,,,,,,,,,,$i2)=explode("\t",trim($b));
|
||||
return ($i1 > $i2) ? -1 : 1;
|
||||
}
|
||||
function cmp_uhost_asc($a,$b) { return cmp_uhost_desc($b,$a); }
|
||||
function cmp_uhost_desc($a,$b) {
|
||||
list(,,,,,,,$u1)=explode("\t",trim($a));
|
||||
list(,,,,,,,$u2)=explode("\t",trim($b));
|
||||
return (strtolower($u1) > strtolower($u2)) ? -1 : 1;
|
||||
}
|
||||
function cmp_pen_asc($a,$b) { return cmp_pen_desc($b,$a); }
|
||||
function cmp_pen_desc($a,$b) {
|
||||
list(,,,,,,,,,,,,$p1[0],$p1[1],$p1[2],$p1[3],$p1[4],$p1[5],
|
||||
$p1[6])=explode("\t",trim($a));
|
||||
list(,,,,,,,,,,,,$p2[0],$p2[1],$p2[2],$p2[3],$p2[4],$p2[5],
|
||||
$p2[6])=explode("\t",trim($b));
|
||||
$s1 = $s2 = 0;
|
||||
foreach ($p1 as $pen) $s1 += $pen;
|
||||
foreach ($p2 as $pen) $s2 += $pen;
|
||||
return ($s1 > $s2) ? -1 : 1;
|
||||
}
|
||||
function cmp_sum_asc($a,$b) { return cmp_sum_desc($b,$a); }
|
||||
function cmp_sum_desc($a,$b) {
|
||||
list(,,,,,,,,,,,,,,,,,,,,,$i1[0],$i1[1],$i1[2],$i1[3],$i1[4],$i1[5],
|
||||
$i1[6],$i1[7],$i1[8],$i1[9])=explode("\t",trim($a));
|
||||
list(,,,,,,,,,,,,,,,,,,,,,$i2[0],$i2[1],$i2[2],$i2[3],$i2[4],$i2[5],
|
||||
$i2[6],$i2[7],$i2[8],$i2[9])=explode("\t",trim($b));
|
||||
$s1 = $s2 = 0;
|
||||
foreach ($i1 as $item) { $s1 += $item; }
|
||||
foreach ($i2 as $item) $s2 += $item;
|
||||
return ($s1 > $s2) ? -1 : 1;
|
||||
}
|
||||
?>
|
||||
61
irpg-web/config.php
Normal file
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
// admin nick
|
||||
$admin_nick="admin";
|
||||
|
||||
// admin email
|
||||
$admin_email="admin@mynet.org";
|
||||
|
||||
// your game's bot nickname
|
||||
$irpg_bot="IdleBot";
|
||||
|
||||
// your game's server to connect to
|
||||
$irpg_network="irc.mynet.org:7000";
|
||||
|
||||
// your game's channel
|
||||
$irpg_chan="#IdleRPG";
|
||||
|
||||
// your server's network name advertisement
|
||||
$irpg_irc_network_name="MyNet IRC Network";
|
||||
|
||||
// your server's network address advertisement
|
||||
$irpg_irc_network_address="ircs://irc.mynet.org:7000";
|
||||
|
||||
// base directory of your game's url
|
||||
// my site is https://www.mynet.org/irpg/, so it's "/irpg/"
|
||||
$irpg_base_dir="/irpg/";
|
||||
|
||||
// url of your forum site
|
||||
$irpg_forum_url="https://www.mynet.org/";
|
||||
|
||||
// type of site email disabled/smtp/php
|
||||
$irpg_site_email="disabled";
|
||||
|
||||
// full or relative pathname to the DBs:
|
||||
|
||||
// character database
|
||||
$irpg_db="/home/user/private/idlerpg/irpg.db";
|
||||
|
||||
// time modifiers file
|
||||
$irpg_mod="/home/user/private/idlerpg/modifiers.txt";
|
||||
|
||||
// active quest info file
|
||||
$irpg_qfile="/home/user/private/idlerpg/questinfo.txt";
|
||||
|
||||
// image to use for the top logo
|
||||
$irpg_logo="idlerpg_ff0000.png";
|
||||
|
||||
// stylesheet to use g7/rw
|
||||
$irpg_stylesheet = "rw.css";
|
||||
|
||||
// width-wise dimension of your map file
|
||||
// this does not appear to be used anywhere in the web
|
||||
// it appears that all PHP map files use 500,500 images,
|
||||
// regardless of what you set here
|
||||
$irpg_mapx=500;
|
||||
|
||||
// length-wise dimension of your map file
|
||||
// this does not appear to be used anywhere in the web
|
||||
// it appears that all PHP map files use 500,500 images,
|
||||
// regardless of what you set here
|
||||
$irpg_mapy=500;
|
||||
?>
|
||||
55
irpg-web/contact.php
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
include("config.php");
|
||||
$irpg_page_title = "Contact";
|
||||
$irpg_page_desc = "IdleRPG Contact";
|
||||
include("header.php");
|
||||
|
||||
echo "<h1>Contact</h1>";
|
||||
if (!$irpg_site_email) {
|
||||
echo " <blockquote>Config error. The config file was not loaded correctly.</blockquote>\n";
|
||||
}
|
||||
else if ($irpg_site_email == "disabled") {
|
||||
echo " <blockquote>Email is disabled.</blockquote>\n";
|
||||
}
|
||||
else if ($irpg_site_email == "php" && $_POST['from'] && $_POST['text']) {
|
||||
$to = $admin_email;
|
||||
$subject = "IdleRPG: ".$_POST['from'];
|
||||
$message = "Name: ".$_POST['name']."\nE-mail: ".$_POST['from']."\n\n".$_POST['text'];
|
||||
$additional_headers = "From: ".$_POST['from']."\r\n";
|
||||
mail($to, $subject, $message, $additional_headers);
|
||||
echo " <blockquote>Thanks for your submission.</blockquote>\n";
|
||||
}
|
||||
else if ($irpg_site_email == "smtp" && $_POST['from'] && $_POST['text']) {
|
||||
echo " <blockquote>SMTP Email is under construction. Your submission was not submitted.</blockquote>\n";
|
||||
}
|
||||
else {
|
||||
echo " <form method=\"post\" action=\"contact.php\">\n".
|
||||
" <table border=\"0\">\n".
|
||||
" <tr>\n".
|
||||
" <th align=\"left\"><label for=\"from\">Your e-mail address</label>:</th>\n".
|
||||
" <td align=\"right\">\n".
|
||||
" <input type=\"text\" size=\"20\" maxlength=\"50\" name=\"from\" id=\"from\" />\n".
|
||||
" </td>\n".
|
||||
" </tr>\n".
|
||||
" <tr>\n".
|
||||
" <th align=\"left\"><label for=\"name\">Your name</label>:</th>\n".
|
||||
" <td align=\"right\">\n".
|
||||
" <input type=\"text\" size=\"20\" maxlength=\"50\" name=\"name\" id=\"name\" />\n".
|
||||
" </td>\n".
|
||||
" </tr>\n".
|
||||
" <tr>\n".
|
||||
" <td colspan=\"2\">\n".
|
||||
" <textarea name=\"text\" rows=\"6\" cols=\"44\"></textarea><br />\n".
|
||||
" </td>\n".
|
||||
" </tr>\n".
|
||||
" <tr>\n".
|
||||
" <td colspan=\"2\" align=\"right\">\n".
|
||||
" <input type=\"submit\" value=\"Send\" />\n".
|
||||
" </td>\n".
|
||||
" </tr>\n".
|
||||
" </table>\n".
|
||||
" </form>\n";
|
||||
}
|
||||
|
||||
include("footer.php");
|
||||
?>
|
||||
253
irpg-web/db.php
Normal file
@@ -0,0 +1,253 @@
|
||||
<?php
|
||||
include("config.php");
|
||||
include("commonfunctions.php");
|
||||
$irpg_page_title = "DB-style Player Listing";
|
||||
$irpg_page_desc = "IdleRPG DB-style Player Listing";
|
||||
include("header.php");
|
||||
|
||||
$file = file($irpg_db);
|
||||
unset($file[0]);
|
||||
if (!$_GET['sort'] ||
|
||||
(($_GET['sort'] != "cmp_level_asc") &&
|
||||
($_GET['sort'] != "cmp_level_desc") &&
|
||||
($_GET['sort'] != "cmp_isadmin_asc") &&
|
||||
($_GET['sort'] != "cmp_isadmin_desc") &&
|
||||
($_GET['sort'] != "cmp_alignment_asc") &&
|
||||
($_GET['sort'] != "cmp_alignment_desc") &&
|
||||
($_GET['sort'] != "cmp_ttl_asc") &&
|
||||
($_GET['sort'] != "cmp_ttl_desc") &&
|
||||
($_GET['sort'] != "cmp_pen_asc") &&
|
||||
($_GET['sort'] != "cmp_pen_desc") &&
|
||||
($_GET['sort'] != "cmp_lastlogin_asc") &&
|
||||
($_GET['sort'] != "cmp_lastlogin_desc") &&
|
||||
($_GET['sort'] != "cmp_created_asc") &&
|
||||
($_GET['sort'] != "cmp_created_desc") &&
|
||||
($_GET['sort'] != "cmp_idled_asc") &&
|
||||
($_GET['sort'] != "cmp_idled_desc") &&
|
||||
($_GET['sort'] != "cmp_user_asc") &&
|
||||
($_GET['sort'] != "cmp_user_desc") &&
|
||||
($_GET['sort'] != "cmp_online_asc") &&
|
||||
($_GET['sort'] != "cmp_online_desc") &&
|
||||
($_GET['sort'] != "cmp_uhost_asc") &&
|
||||
($_GET['sort'] != "cmp_uhost_desc") &&
|
||||
($_GET['sort'] != "cmp_sum_asc") &&
|
||||
($_GET['sort'] != "cmp_sum_desc"))) $_GET['sort'] = "cmp_level_desc";
|
||||
usort($file,$_GET['sort']);
|
||||
?>
|
||||
<table border=1 cellpadding=2 cellspacing=2 cols="32" rows="<?php echo count($file); ?>">
|
||||
<tr>
|
||||
<th NOWRAP>
|
||||
User
|
||||
(<a href="db.php?sort=cmp_user_asc">
|
||||
<img src="up.png" border="0">
|
||||
</a>
|
||||
/
|
||||
<a href="db.php?sort=cmp_user_desc">
|
||||
<img src="down.png" border="0">
|
||||
</a>)
|
||||
</th>
|
||||
<th NOWRAP>
|
||||
Level
|
||||
(<a href="db.php?sort=cmp_level_asc">
|
||||
<img src="up.png" border="0">
|
||||
</a>
|
||||
/
|
||||
<a href="db.php?sort=cmp_level_desc">
|
||||
<img src="down.png" border="0">
|
||||
</a>)
|
||||
</th>
|
||||
<th NOWRAP>
|
||||
Admin
|
||||
(<a href="db.php?sort=cmp_isadmin_asc">
|
||||
<img src="up.png" border="0">
|
||||
</a>
|
||||
/
|
||||
<a href="db.php?sort=cmp_isadmin_desc">
|
||||
<img src="down.png" border="0">
|
||||
</a>)
|
||||
</th>
|
||||
<th NOWRAP>Class</th>
|
||||
<th NOWRAP>
|
||||
TTL
|
||||
(<a href="db.php?sort=cmp_ttl_asc">
|
||||
<img src="up.png" border="0">
|
||||
</a>
|
||||
/
|
||||
<a href="db.php?sort=cmp_ttl_desc">
|
||||
<img src="down.png" border="0">
|
||||
</a>)
|
||||
</th>
|
||||
<th NOWRAP>
|
||||
Nick!User@Host
|
||||
(<a href="db.php?sort=cmp_uhost_asc">
|
||||
<img src="up.png" border="0">
|
||||
</a>
|
||||
/
|
||||
<a href="db.php?sort=cmp_uhost_desc">
|
||||
<img src="down.png" border="0">
|
||||
</a>)
|
||||
</th>
|
||||
<th NOWRAP>
|
||||
Online
|
||||
(<a href="db.php?sort=cmp_online_asc">
|
||||
<img src="up.png" border="0">
|
||||
</a>
|
||||
/
|
||||
<a href="db.php?sort=cmp_online_desc">
|
||||
<img src="down.png" border="0">
|
||||
</a>)
|
||||
</th>
|
||||
<th NOWRAP>
|
||||
Total Time Idled
|
||||
(<a href="db.php?sort=cmp_idled_asc">
|
||||
<img src="up.png" border="0">
|
||||
</a>
|
||||
/
|
||||
<a href="db.php?sort=cmp_idled_desc">
|
||||
<img src="down.png" border="0">
|
||||
</a>)
|
||||
</th>
|
||||
<th NOWRAP>X Pos</th>
|
||||
<th NOWRAP>Y Pos</th>
|
||||
<th NOWRAP>Mesg Pen.</th>
|
||||
<th NOWRAP>Nick Pen.</th>
|
||||
<th NOWRAP>Part Pen.</th>
|
||||
<th NOWRAP>Kick Pen.</th>
|
||||
<th NOWRAP>Quit Pen.</th>
|
||||
<th NOWRAP>Quest Pen.</th>
|
||||
<th NOWRAP>LOGOUT Pen.</th>
|
||||
<th NOWRAP>
|
||||
Total Pen.
|
||||
(<a href="db.php?sort=cmp_pen_asc">
|
||||
<img src="up.png" border="0">
|
||||
</a>
|
||||
/
|
||||
<a href="db.php?sort=cmp_pen_desc">
|
||||
<img src="down.png" border="0">
|
||||
</a>)
|
||||
</th>
|
||||
<th NOWRAP>
|
||||
Acct. Created
|
||||
(<a href="db.php?sort=cmp_created_asc">
|
||||
<img src="up.png" border="0">
|
||||
</a>
|
||||
/
|
||||
<a href="db.php?sort=cmp_created_desc">
|
||||
<img src="down.png" border="0">
|
||||
</a>)
|
||||
</th>
|
||||
<th NOWRAP>
|
||||
Last Login
|
||||
(<a href="db.php?sort=cmp_lastlogin_asc">
|
||||
<img src="up.png" border="0">
|
||||
</a>
|
||||
/
|
||||
<a href="db.php?sort=cmp_lastlogin_desc">
|
||||
<img src="down.png" border="0">
|
||||
</a>)
|
||||
</th>
|
||||
<th NOWRAP>Amulet</th>
|
||||
<th NOWRAP>Charm</th>
|
||||
<th NOWRAP>Helm</th>
|
||||
<th NOWRAP>Boots</th>
|
||||
<th NOWRAP>Gloves</th>
|
||||
<th NOWRAP>Ring</th>
|
||||
<th NOWRAP>Leggings</th>
|
||||
<th NOWRAP>Shield</th>
|
||||
<th NOWRAP>Tunic</th>
|
||||
<th NOWRAP>Weapon</th>
|
||||
<th NOWRAP>
|
||||
Sum
|
||||
(<a href="db.php?sort=cmp_sum_asc">
|
||||
<img src="up.png" border="0">
|
||||
</a>
|
||||
/
|
||||
<a href="db.php?sort=cmp_sum_desc">
|
||||
<img src="down.png" border="0">
|
||||
</a>)
|
||||
</th>
|
||||
<th NOWRAP>
|
||||
Alignment
|
||||
(<a href="db.php?sort=cmp_alignment_asc">
|
||||
<img src="up.png" border="0">
|
||||
</a>
|
||||
/
|
||||
<a href="db.php?sort=cmp_alignment_desc">
|
||||
<img src="down.png" border="0">
|
||||
</a>)
|
||||
</th>
|
||||
</tr>
|
||||
<?php
|
||||
foreach ($file as $line) {
|
||||
list($user,,$isadmin,$level,$class,$secs,,$uhost,$online,$idled,$x,$y,
|
||||
$pen['mesg'],
|
||||
$pen['nick'],
|
||||
$pen['part'],
|
||||
$pen['kick'],
|
||||
$pen['quit'],
|
||||
$pen['quest'],
|
||||
$pen['logout'],
|
||||
$created,
|
||||
$lastlogin,
|
||||
$item['amulet'],
|
||||
$item['charm'],
|
||||
$item['helm'],
|
||||
$item['boots'],
|
||||
$item['gloves'],
|
||||
$item['ring'],
|
||||
$item['leggings'],
|
||||
$item['shield'],
|
||||
$item['tunic'],
|
||||
$item['weapon'],
|
||||
$alignment,
|
||||
) = explode("\t",trim($line));
|
||||
$class = str_replace("<","<",$class);
|
||||
$user = str_replace("<","<",$user);
|
||||
$class = str_replace(">",">",$class);
|
||||
$user = str_replace(">",">",$user);
|
||||
$sum = 0;
|
||||
foreach ($item as $k => $v) $sum += $v;
|
||||
$pentot = 0;
|
||||
foreach ($pen as $k => $v) $pentot += $v;
|
||||
echo " <tr>\n".
|
||||
" <td nowrap>$user</td>\n".
|
||||
" <td>$level</td>\n".
|
||||
" <td>".($isadmin?"Yes":"No")."</td>\n".
|
||||
" <td nowrap>$class</td>\n".
|
||||
" <td nowrap>".duration($secs)."</td>\n".
|
||||
" <td nowrap>$uhost</td>\n".
|
||||
" <td>".(($online == 1) ? "Yes" : "No")."</td>\n".
|
||||
" <td nowrap>".duration($idled)."</td>\n".
|
||||
" <td nowrap>$x</td>\n".
|
||||
" <td nowrap>$y</td>\n".
|
||||
" <td nowrap>".duration($pen['mesg'])."</td>\n".
|
||||
" <td nowrap>".duration($pen['nick'])."</td>\n".
|
||||
" <td nowrap>".duration($pen['part'])."</td>\n".
|
||||
" <td nowrap>".duration($pen['kick'])."</td>\n".
|
||||
" <td nowrap>".duration($pen['quit'])."</td>\n".
|
||||
" <td nowrap>".duration($pen['quest'])."</td>\n".
|
||||
" <td nowrap>".duration($pen['logout'])."</td>\n".
|
||||
" <td nowrap>".duration($pentot)."</td>\n".
|
||||
" <td nowrap>".date("D M j H:i:s Y",$created)."</td>\n".
|
||||
" <td nowrap>".date("D M j H:i:s Y",$lastlogin)."</td>\n".
|
||||
" <td>".$item['amulet']."</td>\n".
|
||||
" <td>".$item['charm']."</td>\n".
|
||||
" <td>".$item['helm']."</td>\n".
|
||||
" <td>".$item['boots']."</td>\n".
|
||||
" <td>".$item['gloves']."</td>\n".
|
||||
" <td>".$item['ring']."</td>\n".
|
||||
" <td>".$item['leggings']."</td>\n".
|
||||
" <td>".$item['shield']."</td>\n".
|
||||
" <td>".$item['tunic']."</td>\n".
|
||||
" <td>".$item['weapon']."</td>\n".
|
||||
" <td>$sum</td>\n".
|
||||
" <td>".($alignment=='e'?"Evil":($alignment=='n'?"Neutral":"Good"))."</td>\n".
|
||||
" </tr>\n";
|
||||
}
|
||||
|
||||
echo " </table>\n".
|
||||
" <br><br>\n".
|
||||
" * Accounts created before Aug 29, 2003 may have incorrect data fields.\n";
|
||||
|
||||
include("footer.php");
|
||||
?>
|
||||
BIN
irpg-web/down.png
Normal file
|
After Width: | Height: | Size: 86 B |
118
irpg-web/dump.php
Normal file
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
// this file has been edited to produce its output in the same format as
|
||||
// it has with previous versions, despite the new database format. coders
|
||||
// should use the new xml.php to glean player info, which is much more
|
||||
// suited to db changes.
|
||||
header('Content-Type: text/plain');
|
||||
include("config.php");
|
||||
include("commonfunctions.php");
|
||||
$file = file($irpg_db);
|
||||
$header = explode("\t",$file[0]);
|
||||
unset($header[1]); // password
|
||||
unset($header[2]); // isadmin
|
||||
unset($header[6]); // nickname
|
||||
unset($header[10]); // x pos
|
||||
unset($header[11]); // y pos
|
||||
unset($header[31]); // alignment
|
||||
echo join("\t",$header)."\n";
|
||||
unset($file[0]);
|
||||
/* specific character requested */
|
||||
if ($_GET['player']) {
|
||||
foreach ($file as $line) {
|
||||
list($user) = explode("\t",trim($line));
|
||||
if ($user == $_GET['player']) {
|
||||
list($user,,,
|
||||
$level,$class,$secs,,$uhost,$online,$idled,,,
|
||||
$pen['mesg'],
|
||||
$pen['nick'],
|
||||
$pen['part'],
|
||||
$pen['kick'],
|
||||
$pen['quit'],
|
||||
$pen['quest'],
|
||||
$pen['logout'],
|
||||
$created,
|
||||
$lastlogin,
|
||||
$item['amulet'],
|
||||
$item['charm'],
|
||||
$item['helm'],
|
||||
$item['boots'],
|
||||
$item['gloves'],
|
||||
$item['ring'],
|
||||
$item['leggings'],
|
||||
$item['shield'],
|
||||
$item['tunic'],
|
||||
$item['weapon'],
|
||||
) = explode("\t",trim($line));
|
||||
echo join("\t",
|
||||
array($user,$level,$class,$secs,$uhost,$online,$idled,
|
||||
$pen['mesg'],
|
||||
$pen['nick'],
|
||||
$pen['part'],
|
||||
$pen['kick'],
|
||||
$pen['quit'],
|
||||
$pen['quest'],
|
||||
$pen['logout'],
|
||||
$created,
|
||||
$lastlogin,
|
||||
$item['amulet'],
|
||||
$item['charm'],
|
||||
$item['helm'],
|
||||
$item['boots'],
|
||||
$item['gloves'],
|
||||
$item['ring'],
|
||||
$item['leggings'],
|
||||
$item['shield'],
|
||||
$item['tunic'],
|
||||
$item['weapon']))."\n";
|
||||
}
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
/* no specific character requested; list all */
|
||||
usort($file,"cmp_level_desc");
|
||||
foreach ($file as $line) {
|
||||
list($user,,,
|
||||
$level,$class,$secs,,$uhost,$online,$idled,,,
|
||||
$pen['mesg'],
|
||||
$pen['nick'],
|
||||
$pen['part'],
|
||||
$pen['kick'],
|
||||
$pen['quit'],
|
||||
$pen['quest'],
|
||||
$pen['logout'],
|
||||
$created,
|
||||
$lastlogin,
|
||||
$item['amulet'],
|
||||
$item['charm'],
|
||||
$item['helm'],
|
||||
$item['boots'],
|
||||
$item['gloves'],
|
||||
$item['ring'],
|
||||
$item['leggings'],
|
||||
$item['shield'],
|
||||
$item['tunic'],
|
||||
$item['weapon'],
|
||||
) = explode("\t",trim($line));
|
||||
echo join("\t",
|
||||
array($user,$level,$class,$secs,$uhost,$online,$idled,
|
||||
$pen['mesg'],
|
||||
$pen['nick'],
|
||||
$pen['part'],
|
||||
$pen['kick'],
|
||||
$pen['quit'],
|
||||
$pen['quest'],
|
||||
$pen['logout'],
|
||||
$created,
|
||||
$lastlogin,
|
||||
$item['amulet'],
|
||||
$item['charm'],
|
||||
$item['helm'],
|
||||
$item['boots'],
|
||||
$item['gloves'],
|
||||
$item['ring'],
|
||||
$item['leggings'],
|
||||
$item['shield'],
|
||||
$item['tunic'],
|
||||
$item['weapon']))."\n";
|
||||
}
|
||||
?>
|
||||
39
irpg-web/footer.php
Normal file
@@ -0,0 +1,39 @@
|
||||
</div>
|
||||
<div class="footer">
|
||||
<p class="small">
|
||||
Questions? Comments? Suggestions? Bugs? Naked pics?
|
||||
<?php
|
||||
if ($irpg_site_email != null && $irpg_site_email != "disabled") {
|
||||
echo " <a href=\"contact.php\">$admin_email</a> or\n";
|
||||
}
|
||||
echo " ".$admin_nick."@IRC.\n";
|
||||
?>
|
||||
<?php
|
||||
$hits = file("hits.db");
|
||||
$fp = fopen("hits.db", "w");
|
||||
$thispage = explode("/",$_SERVER['PHP_SELF']);
|
||||
$thispage = array_pop($thispage);
|
||||
if ($fp == false) {
|
||||
echo " Error: could not open file hits.db.";
|
||||
}
|
||||
foreach ($hits as $line) {
|
||||
list($page,$numhits,$date) = explode("\t",trim($line));
|
||||
if ($page == $thispage) {
|
||||
++$numhits;
|
||||
echo " $numhits hits since $date\n";
|
||||
$found = 1;
|
||||
}
|
||||
if ($fp) {
|
||||
fwrite($fp,"$page\t$numhits\t$date\n");
|
||||
}
|
||||
}
|
||||
if (!$found && $fp) {
|
||||
echo " 1 hit since ".date("M j, Y",time())."\n";
|
||||
fwrite($fp,$thispage."\t1\t".date("M j, Y",time())."\n");
|
||||
}
|
||||
fclose($fp);
|
||||
?>
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
111
irpg-web/g7.css
Normal file
@@ -0,0 +1,111 @@
|
||||
body {
|
||||
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
|
||||
background-color: #FFFFF0;
|
||||
color: black;
|
||||
margin: 10px;
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
h1 { margin-bottom: 0px; margin-top: 0px; }
|
||||
h2 { margin-bottom: 0px; }
|
||||
|
||||
p.small { margin: 0px; font-size: smaller; }
|
||||
|
||||
a { text-decoration: none; color: #C69500; }
|
||||
a:hover { text-decoration: underline; color: black; }
|
||||
|
||||
div.head {
|
||||
border: 1px solid #c0c0c0;
|
||||
text-align: left;
|
||||
width: 100%;
|
||||
margin-bottom: 10px;
|
||||
background: #FFFFFF;
|
||||
}
|
||||
|
||||
div.menu {
|
||||
width: 120px;
|
||||
position: relative;
|
||||
float: left;
|
||||
border: 1px solid #c0c0c0;
|
||||
background: #FFFFFF;
|
||||
}
|
||||
div#menu a.home { color: #000000; background: #c0c0c0; border: 1px solid #000000; }
|
||||
div#menu a.home:hover { background: #c0c0c0; border: 1px solid #000000; }
|
||||
div#menu a {
|
||||
text-align: center;
|
||||
width: 118px;
|
||||
margin: 0px;
|
||||
display: block;
|
||||
border: 1px solid #FFFFFF
|
||||
}
|
||||
|
||||
div#menu a:hover { border: 1px solid #000000; background: #c0c0c0; text-decoration: none; }
|
||||
|
||||
div.content {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin-left: 130px;
|
||||
margin-top: 0px;
|
||||
padding: 10px;
|
||||
background: #FFFFFF;
|
||||
}
|
||||
|
||||
div.footer {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin-left: 130px;
|
||||
margin-top: 10px;
|
||||
padding: 10px;
|
||||
background: #FFFFFF;
|
||||
}
|
||||
|
||||
|
||||
table.uniques {
|
||||
border: 1px solid #c0c0c0;
|
||||
padding: 5px;
|
||||
text-align: left;
|
||||
}
|
||||
table.uniques td {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
table.penalty {
|
||||
border: 1px solid #c0c0c0;
|
||||
padding: 5px;
|
||||
text-align: left;
|
||||
}
|
||||
table.penalty th {
|
||||
text-align: right;
|
||||
}
|
||||
table.penalty td {
|
||||
|
||||
}
|
||||
|
||||
/* Styles for the userlist */
|
||||
li.online { font-weight: bold; }
|
||||
li.offline { color: #c0c0c0; }
|
||||
a.offline { color: #707070; }
|
||||
#map {
|
||||
width: 500px;
|
||||
height: 500px;
|
||||
background-image: url(newmap.png);
|
||||
}
|
||||
|
||||
|
||||
table.forum {
|
||||
border: 1px solid #c0c0c0;
|
||||
table-layout: fixed;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
table.forum td,tr,caption,thead,tfoot,th {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
.tdblue { background-color: #ffffdf; }
|
||||
.tdgray { background-color: #eeeee0; }
|
||||
.tdred {
|
||||
border: 1px solid red;
|
||||
background-color: #FFCCCC;
|
||||
}
|
||||
.smallest {
|
||||
font-size: 11px;
|
||||
}
|
||||
BIN
irpg-web/head.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
44
irpg-web/header.php
Normal file
@@ -0,0 +1,44 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title><?php echo $irpg_page_title; ?> :: <?php echo $irpg_chan; ?></title>
|
||||
<meta name="description" content="<?php echo $irpg_page_desc; ?>" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<link rel="stylesheet" type="text/css" href="<?php echo $irpg_stylesheet; ?>" />
|
||||
</head>
|
||||
<body>
|
||||
<div class="head">
|
||||
<?php
|
||||
echo " <img src=\"$irpg_logo\" alt=\"$irpg_chan\" title=\"$irpg_chan\" width=\"400\" height=\"56\" />\n";
|
||||
?>
|
||||
</div>
|
||||
<div id="menu" class="menu">
|
||||
<?php
|
||||
$topbarurl = array(
|
||||
'Game Info' => $irpg_base_dir . 'index.php',
|
||||
'Player Info' => $irpg_base_dir . 'players.php',
|
||||
'World Map' => $irpg_base_dir . 'worldmap.php',
|
||||
'Quest Info' => $irpg_base_dir . 'quest.php',
|
||||
);
|
||||
|
||||
if ($irpg_site_email && $irpg_site_email != "disabled") {
|
||||
$topbarurl['Contact'] = $irpg_base_dir . 'contact.php';
|
||||
}
|
||||
|
||||
if ($irpg_forum_url) {
|
||||
$topbarurl['Forum'] = $irpg_forum_url;
|
||||
}
|
||||
|
||||
foreach ($topbarurl as $key => $value) {
|
||||
if ($value == $_SERVER['PHP_SELF']) {
|
||||
echo " <a class=\"home\" href=\"$value\">$key</a>\n";
|
||||
}
|
||||
else {
|
||||
echo " <a href=\"$value\">$key</a>\n";
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<div class="content">
|
||||
10
irpg-web/hits.db
Normal file
@@ -0,0 +1,10 @@
|
||||
contact.php 420 Jul 4, 2016
|
||||
db.php 420 Jul 4, 2016
|
||||
forum.php 420 Jul 4, 2016
|
||||
index.php 420 Jul 4, 2016
|
||||
playerview.php 420 Jul 4, 2016
|
||||
players.php 420 Jul 4, 2016
|
||||
quest.php 420 Jul 4, 2016
|
||||
worldmap.php 420 Jul 4, 2016
|
||||
g7.css 420 Jul 4, 2016
|
||||
idlerpg.png 420 Jul 4, 2016
|
||||
142
irpg-web/idlerpg-adv.txt
Normal file
@@ -0,0 +1,142 @@
|
||||
#!/usr/bin/perl -w
|
||||
# idlerpg-adv (11-22-2003) by daxxar (http://mental.mine.nu)
|
||||
# Usage: ./idlerpg-adv.pl [playernames]
|
||||
#
|
||||
# Call this script from the command line, or your login profile.
|
||||
use strict;
|
||||
use LWP::Simple;
|
||||
|
||||
# Use cookies:
|
||||
# %user - username, %class - class, %level - level,
|
||||
# %next - time to next level, %status - online status,
|
||||
# %uhost - nick!ident@host, %ca - created at,
|
||||
# %llo - last logged on, %ti - total idletime,
|
||||
# %items - list of items, %penalties - list of penalties (special; multiline)
|
||||
#
|
||||
# Each comma-separated element is printed with a newline at the end :)
|
||||
|
||||
my @string = (
|
||||
'[User] %user', '[Class] %class', '[Level] %level', '[Next level] %next',
|
||||
'[Status] %status', '[User@host] %uhost', '[Created at] %ca',
|
||||
'[Last logged on] %llo', '[Total idle] %ti', '[Items] %items',
|
||||
'[Penalties] %penalties'
|
||||
);
|
||||
|
||||
### No need to change below ###
|
||||
# For printing things in a columnized view
|
||||
# print_col(\@list_of_entries, \@value_of_entries, $number_per_line)
|
||||
sub make_col {
|
||||
my $entryname = shift;
|
||||
my $entryvalue = shift;
|
||||
my $count = shift;
|
||||
my @len;
|
||||
my $ret;
|
||||
# Find maximum length for each of the $count columns
|
||||
for my $x (0 .. $#{$entryvalue}) {
|
||||
my $col = $x % $count;
|
||||
if (!defined($len[$col]) || $len[$col] < length($entryvalue->[$x] . $entryname->[$x])) {
|
||||
$len[$col] = length("$entryvalue->[$x]"."$entryname->[$x]");
|
||||
}
|
||||
}
|
||||
for my $t (0 .. $#$entryvalue) {
|
||||
if (!($t % $count)) { $ret .= "\n "; }
|
||||
$ret .= "$entryname->[$t]\($entryvalue->[$t]\)";
|
||||
$ret .= ' ' x ($len[$t % $count] - length($entryname->[$t] . $entryvalue->[$t]) + 1);
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
sub time_to {
|
||||
my @timeunits = ('yr', 'month', 'week', 'day', 'hr', 'min', 'sec');
|
||||
my @timecalc = (31104000, 2592000, 604800, 86400, 3600, 60, 1);
|
||||
my $seconds = shift; my $output;
|
||||
if ($seconds == 0) { return "0 seconds"; }
|
||||
for my $x (0 .. $#timecalc) {
|
||||
my $y = int($seconds / $timecalc[$x]);
|
||||
if ($y != 0 && $seconds != 0 && $seconds >= $timecalc[$x]) {
|
||||
$seconds = ($seconds % $timecalc[$x]);
|
||||
$output .= "$y $timeunits[$x]";
|
||||
$output .= 's' unless $y == 1;
|
||||
if ($seconds == 0) { last; }
|
||||
$output .= ', ' if $x < $#timecalc - 1 && ($seconds % $timecalc[$x+1]) && $seconds != 0;
|
||||
$output .= ' and ' if !($seconds % $timecalc[$x+1]);
|
||||
}
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
sub time_from {
|
||||
my $seconds = shift;
|
||||
my ($sec, $min, $hr, $day, $mo, $yr, $wday) = localtime($seconds);
|
||||
$mo = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Oct', 'Sep', 'Nov', 'Dec')[$mo];
|
||||
$wday = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat')[$wday];
|
||||
$yr += 1900;
|
||||
if ($hr < 10) { $hr = "0$hr"; }
|
||||
if ($min < 10) { $min = "0$min"; }
|
||||
if ($sec < 10) { $sec = "0$sec"; }
|
||||
if ($day < 10) { $day .= ' '; }
|
||||
return "$wday $mo $day $hr:$min:$sec $yr";
|
||||
}
|
||||
die "Usage: $0 <playernames>\n" .
|
||||
"Example: $0 daxxar cyb\n" if @ARGV == 0;
|
||||
|
||||
start:
|
||||
my $username = shift(@ARGV);
|
||||
my $page = get "http://jotun.ultrazone.org/g7/dump.php?player=$username";
|
||||
|
||||
# Only line is commented if there is no such user
|
||||
if ($page =~ /^#[^\n]+$/) { print "$username: no such user\n"; exit 1; }
|
||||
($page) = ($page =~ /\n([^#].*)/); # Remove the comment
|
||||
|
||||
# @ent = entries on page, \t separated.
|
||||
my @ent = split(/\t/, $page);
|
||||
|
||||
# Assign each tab-separated entry to its hash-key
|
||||
my %values = (
|
||||
'user' => $ent[0], 'level' => $ent[1],
|
||||
'class' => $ent[2], 'next' => $ent[3],
|
||||
'host' => $ent[4], 'status' => $ent[5],
|
||||
'totalidle'=> $ent[6], 'created'=> $ent[14],
|
||||
'lastlog' => $ent[15],
|
||||
'penaltynames' => [ qw(msg nick part kick quit quest logout) ],
|
||||
'penaltytimes' => [ @ent[7 .. 13] ],
|
||||
'itemnames' => [ qw(amulet charm helm boots gloves ring leggings shield tunic weapon sum) ],
|
||||
'itemlvls' => [ @ent[16 .. 25] ]
|
||||
);
|
||||
$values{'next'} = time_to ($values{'next'});
|
||||
$values{'totalidle'} = time_to ($values{'totalidle'});
|
||||
$values{'lastlog'} = time_from($values{'lastlog'});
|
||||
$values{'created'} = time_from($values{'created'});
|
||||
if ($values{'status'}) {$values{'status'} = 'Online'}
|
||||
else {$values{'status'} = 'Offline'}
|
||||
|
||||
foreach my $str (@{[ @string ]}) {
|
||||
$str =~ s/%user/$values{'user'}/g;
|
||||
$str =~ s/%class/$values{'class'}/g;
|
||||
$str =~ s/%level/$values{'level'}/g;
|
||||
$str =~ s/%next/$values{'next'}/g;
|
||||
$str =~ s/%status/$values{'status'}/g;
|
||||
$str =~ s/%uhost/$values{'host'}/g;
|
||||
$str =~ s/%ca/$values{'created'}/g;
|
||||
$str =~ s/%llo/$values{'lastlog'}/g;
|
||||
$str =~ s/%ti/$values{'totalidle'}/g;
|
||||
if ($str =~ /%penalties/) {
|
||||
my @penaltyname = qw(msg nick part kick quit quest logout);
|
||||
my @penaltytime = @ent[7 .. 13];
|
||||
for my $t (0 .. $#penaltytime) { $penaltytime[$t] = time_to($penaltytime[$t]); }
|
||||
my $cols = make_col(\@penaltyname, \@penaltytime, 3);
|
||||
$str =~ s/%penalties/$cols/g;
|
||||
}
|
||||
if ($str =~ /%items/) {
|
||||
my @itemname = qw(amulet charm helm boots gloves ring leggings shield tunic weapon sum);
|
||||
my @itemlvls = @ent[16 .. 25];
|
||||
# Yay, lets get a nice sum(sum) in output! :D
|
||||
my $sum; map($sum += $_, @itemlvls);
|
||||
my $cols = make_col(\@itemname, [ @itemlvls, $sum ], 3);
|
||||
$str =~ s/%items/$cols/g;
|
||||
}
|
||||
$str =~ s///g;
|
||||
$str =~ s///g;
|
||||
print "$str\n";
|
||||
}
|
||||
|
||||
print "\n" if @ARGV != 0;
|
||||
goto start if @ARGV != 0;
|
||||
BIN
irpg-web/idlerpg.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
irpg-web/idlerpg_000000.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
irpg-web/idlerpg_025D30.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
irpg-web/idlerpg_ff0000.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
401
irpg-web/index.php
Normal file
@@ -0,0 +1,401 @@
|
||||
<?php
|
||||
include("config.php");
|
||||
$irpg_page_title = "Game Info";
|
||||
$irpg_page_desc = "IdleRPG Game Info";
|
||||
include("header.php");
|
||||
?>
|
||||
|
||||
<h1>Idle RPG</h1>
|
||||
|
||||
<h2>Game Info</h2>
|
||||
<p>The Idle RPG is just what it sounds like: an RPG in which the players
|
||||
idle. In addition to merely gaining levels, players can find items and
|
||||
battle other players. However, this is all done for you; you just idle.
|
||||
There are no set classes; you can name your character anything you like,
|
||||
and have its class be anything you like, as well.</p>
|
||||
|
||||
<h2>Location</h2>
|
||||
<p>The Idle RPG can be played on the
|
||||
<a href="<?php echo $irpg_irc_network_address; ?>"><?php echo $irpg_irc_network_name; ?></a>
|
||||
in the channel
|
||||
<a href="<?php echo $irpg_irc_network_address; ?>/<?php echo $irpg_chan; ?>"><?php echo $irpg_chan; ?></a>.
|
||||
</p>
|
||||
|
||||
<h2>Registering</h2>
|
||||
<p>To register, simply:</p>
|
||||
<code>
|
||||
/msg <?php echo $irpg_bot; ?> REGISTER <char name> <password>
|
||||
<char class>
|
||||
</code>
|
||||
<p>Where 'char name' can be up to 16 chars long, 'password' can be up
|
||||
to 8 characters, and 'char class' can be up to 30 chars.</p>
|
||||
|
||||
<h2>Logging In</h2>
|
||||
<p>To login, simply:</p>
|
||||
<code>
|
||||
/msg <?php echo $irpg_bot; ?> LOGIN <char name> <password>
|
||||
</code>
|
||||
<p>This is a p0 (see <a href="#penalties">Penalties</a>) command.</p>
|
||||
|
||||
<h2>Logging Out</h2>
|
||||
<p>To logout, simply:</p>
|
||||
<code>
|
||||
/msg <?php echo $irpg_bot; ?> LOGOUT
|
||||
</code>
|
||||
<p>This is a p20 (see <a href="#penalties">Penalties</a>) command.</p>
|
||||
|
||||
<h2>Changing Your Password</h2>
|
||||
<p>To change your password, simply:</p>
|
||||
<code>
|
||||
/msg <?php echo $irpg_bot; ?> NEWPASS <new password>
|
||||
</code>
|
||||
<p>This is a p0 (see <a href="#penalties">Penalties</a>) command.</p>
|
||||
<p>If you have forgotten your password, please use the <a href="#info">
|
||||
INFO</a> command to find an online admin to help you. If your
|
||||
administrator does not have the INFO command enabled, then just message
|
||||
an op in the channel. They can probably help you.</p>
|
||||
|
||||
<h2>Removing Your Account</h2>
|
||||
<p>To remove your account, simply:</p>
|
||||
<code>
|
||||
/msg <?php echo $irpg_bot; ?> REMOVEME
|
||||
</code>
|
||||
<p>This is a p0 (see <a href="#penalties">Penalties</a>) command :^)</p>
|
||||
|
||||
<h2>Changing Your Alignment</h2>
|
||||
<p>To change your alignment, simply:</p>
|
||||
<code>
|
||||
/msg <?php echo $irpg_bot; ?> ALIGN <good|neutral|evil>
|
||||
</code>
|
||||
<p>This is a p0 (see <a href="#penalties">Penalties</a>) command.</p>
|
||||
<p>Your alignment can affect certain aspects of the game. You may align
|
||||
with good, neutral, or evil. 'Good' users have a 10% boost to their item
|
||||
sum for battles, and a 1/12 chance each day that they, along with a
|
||||
'good' friend, will have the light of their god shine upon them,
|
||||
accelerating them 5-12% toward their next level. 'Evil' users have a 10%
|
||||
detriment to their item sum for battles (ever forsaken in their time of
|
||||
most need...), but have a 1/8 chance each day that they will either a)
|
||||
attempt to steal an item from a 'good' user (whom they cannot help but
|
||||
hate) or b) be forsaken (for 1-5% of their TTL) by their evil god. After
|
||||
all, we all know that crime doesn't pay. Also, 'good' users have only a
|
||||
1/50 chance of landing a <a href="#critstrike">Critical Strike</a> when
|
||||
battling, while 'evil' users (who always fight dirty) have a 1/20
|
||||
chance. Neutral users haven't had anything changed, and all users start
|
||||
off as neutral.</p>
|
||||
<p>I haven't run the numbers to see which alignment it is better to
|
||||
follow, so the stats for this feature may change in the future.</p>
|
||||
|
||||
<a name="info"></a>
|
||||
|
||||
<h2>Obtaining Bot Info</h2>
|
||||
<p>To see some simple information on the bot, simply:</p>
|
||||
<code>
|
||||
/msg <?php echo $irpg_bot; ?> INFO
|
||||
</code>
|
||||
<p>This is a p0 (see <a href="#penalties">Penalties</a>) command.</p>
|
||||
<p>This command gives info such as to which server the bot is connected
|
||||
and the nicknames of online bot admins.</p>
|
||||
<p>This command is optional, and may be disabled by your bot admin.</p>
|
||||
|
||||
<h2>Levelling</h2>
|
||||
<p>To gain levels, you must only be logged in and idle. The time
|
||||
between levels is based on your character level, and is calculated
|
||||
by the formula:</p>
|
||||
<p>600*(1.16^YOUR_LEVEL)</p>
|
||||
<p>Where ^ represents the exponentiation operator.</p>
|
||||
<p>Very high levels are calculated differently as of version 3.0. Levels
|
||||
after level 60 have a next time to level of:</p>
|
||||
<p>(time to level @ 60) + ((1 day) * (level - 60))</p>
|
||||
<p>The exponent method code had simply gotten to that point that levels
|
||||
were taking too long to complete.</p>
|
||||
|
||||
<h2>Checking the Active Quest</h2>
|
||||
<p>To see the active quest, its users, and its time left to
|
||||
completion:</p>
|
||||
<code>
|
||||
/msg <?php echo $irpg_bot; ?> QUEST
|
||||
</code>
|
||||
<p>This is a p0 (see <a href="#penalties">Penalties</a>) command.</p>
|
||||
|
||||
<h2>Checking Your Online Status</h2>
|
||||
<p>To see whether you are logged on, simply:</p>
|
||||
<code>
|
||||
/msg <?php echo $irpg_bot; ?> WHOAMI
|
||||
</code>
|
||||
<p>This is a p0 (see <a href="#penalties">Penalties</a>) command.</p>
|
||||
|
||||
<a name="penalties"></a>
|
||||
|
||||
<h2>Penalties</h2>
|
||||
<p>If you do something other than idle, like part, quit, talk in the
|
||||
channel, change your nick, or notice the channel, you are
|
||||
penalized. The penalties are time, in seconds, added to your next
|
||||
time to level and are based on your character level. The formulae
|
||||
are as follows:</p>
|
||||
<table id="penalty" class="penalty">
|
||||
<tr>
|
||||
<th>Nick change</th>
|
||||
<td>30*(1.14^(YOUR_LEVEL))</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Part</th>
|
||||
<td>200*(1.14^(YOUR_LEVEL))</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Quit</th>
|
||||
<td>20*(1.14^(YOUR_LEVEL))</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>LOGOUT command</th>
|
||||
<td>20*(1.14^(YOUR_LEVEL))</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Being Kicked</th>
|
||||
<td>250*(1.14^(YOUR_LEVEL))</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Channel privmsg</th>
|
||||
<td>[message_length]*(1.14^(YOUR_LEVEL))</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Channel notice</th>
|
||||
<td>[message_length]*(1.14^(YOUR_LEVEL))</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br />
|
||||
<p>So, a level 25 character changing their nick would be penalized
|
||||
20*(1.14^25)=793 seconds towards their next level.</p>
|
||||
<p>Penalty shorthand is p[num]. So, a nick change is a p30 event,
|
||||
parting the channel is a p200 event, and quitting IRC is a p20 event.
|
||||
Messages and notices are p[length of message in characters].</p>
|
||||
|
||||
<h2>Items</h2>
|
||||
<p>Each time you level, you find an item. You can find an item as
|
||||
high as 1.5*YOUR_LEVEL (unless you find a <a href="#uniqueitems">
|
||||
unique item</a>). There are 10 types of items: rings,
|
||||
amulets, charms, weapons, helms, tunics, gloves, leggings,
|
||||
shields, and boots. You can find one of each type. When you find
|
||||
an item with a level higher than the level of the item you already
|
||||
have, you toss the old item and start using the new one. As of version
|
||||
3.0, there is an optional, p0 STATUS command that your admin may have
|
||||
enabled, but you cannot see which items you have over IRC (only your
|
||||
total item sum). You can, however, see which items you have on the web
|
||||
<a href="players.php">here</a>.</p>
|
||||
<p>As you may guess, you have a higher chance of rolling an item of a
|
||||
lower value than you do of rolling one of a higher value level. The exact
|
||||
formula is as follows:</p>
|
||||
<p>for each 'number' from 1 to YOUR_LEVEL*1.5<br />
|
||||
you have a 1 / ((1.4)^number) chance to find an
|
||||
item at this level<br />
|
||||
end for<p>
|
||||
<p>As for item type, you have an equal chance to roll any type.</p>
|
||||
|
||||
<h2>Battle</h2>
|
||||
<p>Each time you level, if your level is less than 25, you have a 25%
|
||||
chance to challenge someone to combat. If your level is greater than or
|
||||
equal to 25, you have a 100% chance to challenge someone. A pool of
|
||||
opponents is chosen of all online players, and one is chosen randomly. If
|
||||
there are no other online players, you fight no one. However, if you do
|
||||
challenge someone, this is how the victor is decided:</p>
|
||||
<ul>
|
||||
<li>Your item levels are summed.</li>
|
||||
<li>Their item levels are summed.</li>
|
||||
<li>A random number between zero and your sum is taken.</li>
|
||||
<li>A random number between zero and their sum is taken.</li>
|
||||
<li>If your roll is larger than theirs, you win.</li>
|
||||
</ul>
|
||||
<p>If you win, your time towards your next level is lowered. The amount
|
||||
that it is lowered is based on your opponent's level. The formula is:</p>
|
||||
<p>((the larger number of (OPPONENT_LEVEL/4) and 7) / 100) *
|
||||
YOUR_NEXT_TIME_TO_LEVEL</p>
|
||||
<p>This means that you lose no less than 7% from your next time to level.
|
||||
If you win, your opponent is not penalized any time, unless you land a
|
||||
<a href="#critstrike">Critical Strike</a>.</p>
|
||||
<p>If you lose, you will be penalized time. The penalty is calculated
|
||||
using the formula:</p>
|
||||
<p>((the larger number of (OPPONENT_LEVEL/7) and 7) / 100) *
|
||||
YOUR_NEXT_TIME_TO_LEVEL</p>
|
||||
<p>This means that you gain no less than 7% of your next time to level.
|
||||
If you lose, your opponent is not awarded any time.</p>
|
||||
<p>Battling the IRPG bot is a special case. The bot has an item sum of
|
||||
1+[highest item sum of all players]. The percent awarded if you win is a
|
||||
constant 20%, and the percent penalized if you lose is a constant 10%.</p>
|
||||
<p>As of version 3.0, if more than 15% of online players are level 45 or
|
||||
higher, then a random level 45+ user will battle another random player
|
||||
every hour. This is to speed up levelling among higher level players.</p>
|
||||
<p>Also as of version 3.0, there is a grid system. The grid is a 500 x 500
|
||||
area in which players may walk. If you encounter another player on the
|
||||
grid, you have a 1 / (NUMBER_OF_ONLINE_PLAYERS) chance to battle them.
|
||||
Battle awards are calculated using the above formulae. More information
|
||||
on the grid system is available <a href="#grid">here</a>.</p>
|
||||
<p>Also as of version 3.0, a successful battle may result an item being
|
||||
<a href="#stealing">stolen</a>.</p>
|
||||
|
||||
<a name="uniqueitems"></a>
|
||||
|
||||
<h2>Unique Items</h2>
|
||||
<p>As of v2.1.2, after level 25, you have a chance to roll items
|
||||
significantly higher than items you would normally find at that level.
|
||||
These are unique items, and have the following stats:</p>
|
||||
<table id="uniques" class="uniques">
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Item Level Range</th>
|
||||
<th>Required User Level</th>
|
||||
<th>Chance to Roll</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Mattt's Omniscience Grand Crown</th>
|
||||
<td>50-74</td>
|
||||
<td>25 or greater</td>
|
||||
<td>1 / 40</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Juliet's Glorious Ring of Sparkliness</th>
|
||||
<td>50-74</td>
|
||||
<td>25 or greater</td>
|
||||
<td>1 / 40</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Res0's Protectorate Plate Mail</th>
|
||||
<td>75-99</td>
|
||||
<td>30 or greater</td>
|
||||
<td>1 / 40</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Dwyn's Storm Magic Amulet</th>
|
||||
<td>100-124</td>
|
||||
<td>35 or greater</td>
|
||||
<td>1 / 40</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Jotun's Fury Colossal Sword</th>
|
||||
<td>150-174</td>
|
||||
<td>40 or greater</td>
|
||||
<td>1 / 40</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Drdink's Cane of Blind Rage</th>
|
||||
<td>175-200</td>
|
||||
<td>45 or greater</td>
|
||||
<td>1 / 40</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Mrquick's Magical Boots of Swiftness</th>
|
||||
<td>250-300</td>
|
||||
<td>48 or greater</td>
|
||||
<td>1 / 40</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Jeff's Cluehammer of Doom</th>
|
||||
<td>300-350</td>
|
||||
<td>52 or greater</td>
|
||||
<td>1 / 40</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2>The Hand of God</h2>
|
||||
<p>As of v3.0, every online user has a (roughly) 1/20 chance per day
|
||||
of a "Hand of God" affecting them. A HoG can help or hurt your character
|
||||
by carrying it between 5 and 75 percent towards or away from its next time
|
||||
to level. The odds are in your favor, however, with an 80% chance to help
|
||||
your character, and only a 20% chance of your character being smitten.</p>
|
||||
<p>In addition to occurring randomly, admins may summon the HoG at their
|
||||
whim.</p>
|
||||
|
||||
<a name="critstrike"></a>
|
||||
|
||||
<h2>Critical Strike</h2>
|
||||
<p>As of v2.0.4, if a challenger beats his opponent in battle, he has a
|
||||
1/35 chance of landing a Critical Strike. If this occurs, his opponent
|
||||
is penalized time towards his next time to level. This amount is
|
||||
calculated by the formula:</p>
|
||||
<p>((random number from 5 to 25) / 100) * OPPONENT'S_NEXT_TIME_TO_LEVEL</p>
|
||||
<p>Meaning he gains no less than 5% and no more than 25% of his next time
|
||||
to level.</p>
|
||||
|
||||
<h2>Team Battles</h2>
|
||||
<p>As of v3.0, every online user has (roughly) 1/4 chance per day of
|
||||
being involved in a 'team battle.' Team battles pit three online
|
||||
players against three other online players. Each side's items are summed,
|
||||
and a winner is chosen as in regular battling. If the first group bests
|
||||
the second group in combat, 20% of the lowest of the three's TTL is
|
||||
removed from their clocks. If the first group loses, 20% of their lowest
|
||||
member's TTL is added to their TTL.</p>
|
||||
|
||||
<h2>Calamities</h2>
|
||||
<p>As of v3.0, every online user has a (roughly) 1/8 chance per day of a
|
||||
calamity occurring to them. A calamity is a bit of extremely bad luck that
|
||||
either:<br />
|
||||
a) slows a player 5-12% of their next time to level<br />
|
||||
b) lowers one of their item's value by 10%
|
||||
</p>
|
||||
|
||||
<h2>Godsends</h2>
|
||||
<p>As of v3.0, every online user has a (roughly) 1/8 chance per day of a
|
||||
godsend occurring to them. A godsend is a bit of extremely good luck that
|
||||
either:<br />
|
||||
a) accelerates a player 5-12% of their next time to level<br />
|
||||
b) increases one of their item's value by 10%
|
||||
</p>
|
||||
|
||||
<h2>Quests</h2>
|
||||
<p>As of v2.3, there are Quests. Four level 40+ users that have been
|
||||
online for more than ten hours are chosen to represent and assist the
|
||||
Realm by going on a quest. If all four users make it to the quest's end,
|
||||
all questers are awarded by removing 25% of their TTL (ie, their TTL at
|
||||
quest's end). To complete a quest, no user can be penalized until the
|
||||
quest's end. As of v3.0, there are two kinds of quests: grid-based quests
|
||||
and time-based quests. Time-based quests last a random time between 12 and
|
||||
24 hours. Grid-based quests are based on the <a href="#grid">grid
|
||||
system</a> and do not have a set time to completion. Rather, the questers
|
||||
must reach certain points on the map for their quest to be complete. If
|
||||
the quest is not completed, ALL online users are penalized a p15 as
|
||||
punishment.</p>
|
||||
|
||||
<a name="grid"></a>
|
||||
|
||||
<h2>Grid System</h2>
|
||||
<p>As of v3.0, the IRPG has a grid system. The grid can be considered
|
||||
a 500 x 500 point map on which the players may walk. Every second, each
|
||||
player has an equal chance to step up, down, or neither, and an equal
|
||||
chance to step left, right, or neither. If a user encounters another
|
||||
player, there is a 1/(NUMBER_OF_ONLINE_PLAYERS) chance that they will
|
||||
battle one another. Normal battling rules apply.</p>
|
||||
<p>Some quests require that users walk to certain points on the map. In
|
||||
the spirit of IRPG, of course, the trek is made for you. Your character
|
||||
will automatically walk in the direction that it is supposed to, although
|
||||
at a much slower than normal pace (to avoid accidents, of course. you
|
||||
don't want to fall down and risk a Realm-wide p15!).</p>
|
||||
|
||||
<a name="stealing"></a>
|
||||
|
||||
<h2>Item Stealing</h2>
|
||||
<p>As of v3.0, the IRPG has item stealing. After each battle, if the
|
||||
challenger wins, he has a slightly less than 2% chance of stealing an
|
||||
item from the challengee. Only items of a higher value are stolen, and
|
||||
the challenger's old item is given to the challengee in a moment of pity.
|
||||
</p>
|
||||
|
||||
<h2>Credits</h2>
|
||||
<p>Many thanks to version 3.0's map creators, res0 and Jeb! The game
|
||||
wouldn't be the same without you.</p>
|
||||
<p>The IRPG would not be possible without help from a lot of people.
|
||||
To jwbozzy, yawnwraith, Tosirap, res0, dwyn, Parallax, protomek,
|
||||
Bert, clavicle, drdink, jeff, rasher, Sticks, Nerje, Asterax,
|
||||
emad, inkblot(!), schmolli, mikegrb, mumkin, sean, Minhiriath,
|
||||
and Dan, I give many thanks. Unfortunately, this list has grown too
|
||||
large to maintain. More user contributions can be seen in the
|
||||
ChangeLog.
|
||||
</p>
|
||||
|
||||
<h2>Source</h2>
|
||||
<p><a href="https://gitemall.devemall.int.eu.org/TommySalami/IdleRPG">The new source code</a>,
|
||||
modified, released and maintained by TommySalami</p>
|
||||
<p>based on</p>
|
||||
<p><a href="http://idlerpg.net/">The old source code</a>,
|
||||
originally written and released in 2004 by jotun, jotun@idlerpg.net, et al.</p>
|
||||
|
||||
<?php
|
||||
include("footer.php");
|
||||
?>
|
||||
59
irpg-web/makemap.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
include("config.php");
|
||||
|
||||
// use sessions to generate only one map / person / 20s
|
||||
session_start();
|
||||
if (isset($_SESSION['time']) && time()-$_SESSION['time'] < 20) {
|
||||
header("Location: maperror.png");
|
||||
exit(0);
|
||||
}
|
||||
$_SESSION['time']=time();
|
||||
|
||||
$map = imageCreate(500,500);
|
||||
$user = substr($_GET['player'],0,30);
|
||||
$stringx=$stringy=-1;
|
||||
$file = file($irpg_db);
|
||||
unset($file[0]);
|
||||
foreach ($file as $line) {
|
||||
list($username,,,,,,,,,,$x,$y) = explode("\t",trim($line));
|
||||
if ($username == $user) {
|
||||
$stringx = $x;
|
||||
$stringy = $y;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($stringx == $stringy && $stringx == -1) {
|
||||
imageString($map,5,200,245,"NO SUCH USER",imagecolorallocate($map,255,0,0));
|
||||
}
|
||||
else {
|
||||
$width = imageFontWidth(5);
|
||||
$height = imageFontHeight(5);
|
||||
if ($x+((strlen($user)+1)*$width) > 500) {
|
||||
$stringx = $x - ((strlen($user)+1)*$width)-12;
|
||||
}
|
||||
if ($y+$height > 500) {
|
||||
$stringy = $y - ($height/2)-2;
|
||||
}
|
||||
$magenta = imageColorAllocate($map,255,0,255);
|
||||
imageColorTransparent($map,$magenta);
|
||||
$brown = imagecolorallocate($map, 102, 51, 0);
|
||||
$parchment = imagecolorallocate($map, 255, 255, 204);
|
||||
// Avoid drawing a brown dot on a brown area
|
||||
$rgb = imageColorAt($map, $x, $y);
|
||||
if ($rgb > 0) { // $rgb is 0 on our parchment-colored areas
|
||||
$temp = $brown;
|
||||
$brown = $parchment;
|
||||
$parchment = $temp;
|
||||
}
|
||||
// YOU ARE HERE
|
||||
imageFilledEllipse($map, $x, $y, 6, 6, $brown);
|
||||
// background for text
|
||||
imageFilledRectangle($map,$stringx+6,$stringy-($height/2),$stringx+6+$width*(strlen($user)+1),$stringy+($height/2),$brown);
|
||||
// text itself
|
||||
imageString($map,5,$stringx+7+($width/2),$stringy-($height/2)-1,$user,$parchment);
|
||||
}
|
||||
|
||||
header("Content-type: image/png");
|
||||
imagePNG($map);
|
||||
imageDestroy($map);
|
||||
?>
|
||||
79
irpg-web/makequestmap.php
Normal file
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
include("config.php");
|
||||
|
||||
// use sessions to generate only one map / person / 20s
|
||||
session_start();
|
||||
if (isset($_SESSION['time']) && time()-$_SESSION['time'] < 20) {
|
||||
header("Location: maperror.png");
|
||||
exit(0);
|
||||
}
|
||||
$_SESSION['time']=time();
|
||||
|
||||
$file = fopen($irpg_qfile,"r");
|
||||
$type=0;
|
||||
while ($line=fgets($file,1024)) {
|
||||
$arg = explode(" ",trim($line));
|
||||
if ($arg[0] == "Y") {
|
||||
$type = $arg[1];
|
||||
}
|
||||
elseif ($arg[0] == "P") {
|
||||
$p1[0] = $arg[1];
|
||||
$p1[1] = $arg[2];
|
||||
$p2[0] = $arg[3];
|
||||
$p2[1] = $arg[4];
|
||||
}
|
||||
elseif ($arg[0] == "S") {
|
||||
if ($type == 1) $time = $arg[1];
|
||||
elseif ($type == 2) $stage = $arg[1];
|
||||
}
|
||||
elseif ($arg[0] == "P1") {
|
||||
$player[1]['name'] = $arg[1];
|
||||
if ($type == 2) {
|
||||
$player[1]['x'] = $arg[2];
|
||||
$player[1]['y'] = $arg[3];
|
||||
}
|
||||
}
|
||||
elseif ($arg[0] == "P2") {
|
||||
$player[2]['name'] = $arg[1];
|
||||
if ($type == 2) {
|
||||
$player[2]['x'] = $arg[2];
|
||||
$player[2]['y'] = $arg[3];
|
||||
}
|
||||
}
|
||||
elseif ($arg[0] == "P3") {
|
||||
$player[3]['name'] = $arg[1];
|
||||
if ($type == 2) {
|
||||
$player[3]['x'] = $arg[2];
|
||||
$player[3]['y'] = $arg[3];
|
||||
}
|
||||
}
|
||||
elseif ($arg[0] == "P4") {
|
||||
$player[4]['name'] = $arg[1];
|
||||
if ($type == 2) {
|
||||
$player[4]['x'] = $arg[2];
|
||||
$player[4]['y'] = $arg[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($type != 2) {
|
||||
header("Location: maperror.png");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
$map = imageCreate(500,500);
|
||||
$magenta = imageColorAllocate($map, 255, 0, 255);
|
||||
imageColorTransparent($map,$magenta);
|
||||
$blue = imageColorAllocate($map, 0, 128, 255);
|
||||
$red = imageColorAllocate($map, 255, 0, 0);
|
||||
|
||||
imageFilledEllipse($map, $player[1]['x'], $player[1]['y'], 6, 6, $blue);
|
||||
imageFilledEllipse($map, $player[2]['x'], $player[2]['y'], 6, 6, $blue);
|
||||
imageFilledEllipse($map, $player[3]['x'], $player[3]['y'], 6, 6, $blue);
|
||||
imageFilledEllipse($map, $player[4]['x'], $player[4]['y'], 6, 6, $blue);
|
||||
if ($stage == 1) imageFilledEllipse($map, $p1[0], $p1[1], 8, 8, $red);
|
||||
else imageFilledEllipse($map, $p2[0], $p2[1], 9, 9, $red);
|
||||
|
||||
header("Content-type: image/png");
|
||||
imagePNG($map);
|
||||
imageDestroy($map);
|
||||
?>
|
||||
28
irpg-web/makeworldmap.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
include("config.php");
|
||||
|
||||
// use sessions to generate only one map / person / 20s
|
||||
session_start();
|
||||
if (isset($_SESSION['time']) && time()-$_SESSION['time'] < 20) {
|
||||
header("Location: maperror.png");
|
||||
exit(0);
|
||||
}
|
||||
$_SESSION['time']=time();
|
||||
|
||||
$file = fopen($irpg_db,"r");
|
||||
fgets($file);
|
||||
$map = imageCreate(500,500);
|
||||
$magenta = ImageColorAllocate($map, 255, 0, 255);
|
||||
$blue = imageColorAllocate($map, 0, 128, 255);
|
||||
$red = imageColorAllocate($map, 211, 0, 0);
|
||||
ImageColorTransparent($map, $magenta);
|
||||
while ($line=fgets($file)) {
|
||||
list(,,,,,,,,$online,,$x,$y) = explode("\t",trim($line));
|
||||
if ($online == 1) imageFilledEllipse($map, $x, $y, 3, 3, $blue);
|
||||
else imageFilledEllipse($map, $x, $y, 3, 3, $red);
|
||||
}
|
||||
|
||||
header("Content-type: image/png");
|
||||
imagePNG($map);
|
||||
imageDestroy($map);
|
||||
?>
|
||||
BIN
irpg-web/maperror.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
irpg-web/newmap.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
34
irpg-web/players.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
include("config.php");
|
||||
include("commonfunctions.php");
|
||||
$irpg_page_title = "Players";
|
||||
$irpg_page_desc = "IdleRPG Players";
|
||||
include("header.php");
|
||||
?>
|
||||
<h1>Players</h1>
|
||||
<h2>Pick a player to view</h2>
|
||||
<p class="small">[gray=offline]</p>
|
||||
<ol>
|
||||
<?php
|
||||
$file = file($irpg_db);
|
||||
unset($file[0]);
|
||||
usort($file, 'cmp_level_desc');
|
||||
foreach ($file as $line) {
|
||||
list($user,,,$level,$class,$secs,,,$online) = explode("\t",trim($line));
|
||||
$class = htmlentities($class);
|
||||
$next_level = duration($secs);
|
||||
echo " <li".(!$online?" class=\"offline\"":"")."><a".
|
||||
(!$online?" class=\"offline\"":"").
|
||||
" href=\"playerview.php?player=".urlencode($user).
|
||||
"\">".htmlentities($user).
|
||||
"</a>, the level $level $class. Next level in $next_level.</li>\n";
|
||||
}
|
||||
?>
|
||||
</ol>
|
||||
<p>For a script to view player stats from a terminal, try
|
||||
<a href="idlerpg-adv.txt">this</a> perl script by
|
||||
<a href="mailto:daxxar@mental.mine.nu">daxxar</a>.</p>
|
||||
<p>See player stats in <a href="db.php">table format</a>.</p>
|
||||
<?php
|
||||
include("footer.php");
|
||||
?>
|
||||
148
irpg-web/playerview.php
Normal file
@@ -0,0 +1,148 @@
|
||||
<?php
|
||||
include("config.php");
|
||||
|
||||
/* Determine if a Player was entered. If not, redirect. */
|
||||
$_GET['player'] = substr($_GET['player'],0,30);
|
||||
if ($_GET['player']=="") header('Location: '.$irpg_base_dir.'players.php');
|
||||
|
||||
include("commonfunctions.php");
|
||||
$irpg_page_title = "Player Info: " . htmlentities($_GET['player']);
|
||||
$irpg_page_desc = "IdleRPG Player Info";
|
||||
$showmap = $_GET['showmap'];
|
||||
include("header.php");
|
||||
echo "<h1>Player Info</h1>";
|
||||
$file = fopen($irpg_db,"r");
|
||||
fgets($file,1024); // skip top comment
|
||||
$found=0;
|
||||
while ($line=fgets($file,1024)) {
|
||||
if (substr($line,0,strlen($_GET['player'])+1) == $_GET['player']."\t") {
|
||||
list($user,,$isadmin,$level,$class,$secs,,$uhost,$online,$idled,
|
||||
$x,$y,
|
||||
$pen['mesg'],
|
||||
$pen['nick'],
|
||||
$pen['part'],
|
||||
$pen['kick'],
|
||||
$pen['quit'],
|
||||
$pen['quest'],
|
||||
$pen['logout'],
|
||||
$created,
|
||||
$lastlogin,
|
||||
$item['amulet'],
|
||||
$item['charm'],
|
||||
$item['helm'],
|
||||
$item['boots'],
|
||||
$item['gloves'],
|
||||
$item['ring'],
|
||||
$item['leggings'],
|
||||
$item['shield'],
|
||||
$item['tunic'],
|
||||
$item['weapon'],
|
||||
$alignment,
|
||||
) = explode("\t",trim($line));
|
||||
$found=1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$found) echo "<h1>Error</h1><p><b>No such user.</b></p>\n";
|
||||
else {
|
||||
$class=htmlentities($class);
|
||||
/* if we htmlentities($user), then we cannot use links with it. */
|
||||
echo " <p><b>User:</b> ".htmlentities($user)."<br />\n".
|
||||
" <b>Class:</b> $class<br />\n".
|
||||
" <b>Admin?:</b> ".($isadmin?"Yes":"No")."<br />\n".
|
||||
" <b>Level:</b> $level<br />\n".
|
||||
" <b>Next level:</b> ".duration($secs)."<br />\n".
|
||||
" <b>Status:</b> O".($online?"n":"ff")."line<br />\n".
|
||||
" <b>Host:</b> ".($uhost?$uhost:"Unknown")."<br />\n".
|
||||
" <b>Account Created:</b> ".date("D M j H:i:s Y",$created)."<br />\n".
|
||||
" <b>Last login:</b> ".date("D M j H:i:s Y",$lastlogin)."<br />\n".
|
||||
" <b>Total time idled:</b> ".duration($idled)."<br />\n".
|
||||
" <b>Current position:</b> [$x,$y]<br />\n".
|
||||
" <b>Alignment:</b> ".($alignment=='e'?"Evil":($alignment=='n'?"Neutral":"Good"))."<br />\n".
|
||||
" <b>XML:</b> [<a href=\"xml.php?player=".urlencode($user)."\">link</a>]</p>\n".
|
||||
" <h2>Map</h2>\n".
|
||||
" ".($showmap?"<div id=\"map\"><img src=\"makemap.php?player=".urlencode($user)."\"></div>\n\n":"<p><a href=\"?player=".urlencode($user)."&showmap=1\">Show map</a></p>\n\n")."".
|
||||
" <h2>Items</h2>\n<p>";
|
||||
ksort($item);
|
||||
$sum = 0;
|
||||
foreach ($item as $key => $val) {
|
||||
$uniquecolor="#be9256";
|
||||
if ($key == "helm" && substr($val,-1,1) == "a") {
|
||||
$val = intval($val)." [<font color=\"$uniquecolor\">Mattt's Omniscience Grand Crown</font>]";
|
||||
}
|
||||
if ($key == "tunic" && substr($val,-1,1) == "b") {
|
||||
$val = intval($val)." [<font color=\"$uniquecolor\">Res0's Protectorate Plate Mail</font>]";
|
||||
}
|
||||
if ($key == "amulet" && substr($val,-1,1) == "c") {
|
||||
$val = intval($val)." [<font color=\"$uniquecolor\">Dwyn's Storm Magic Amulet</font>]";
|
||||
}
|
||||
if ($key == "weapon" && substr($val,-1,1) == "d") {
|
||||
$val = intval($val)." [<font color=\"$uniquecolor\">Jotun's Fury Colossal Sword</font>]";
|
||||
}
|
||||
if ($key == "weapon" && substr($val,-1,1) == "e") {
|
||||
$val = intval($val)." [<font color=\"$uniquecolor\">Drdink's Cane of Blind Rage</font>]";
|
||||
}
|
||||
if ($key == "boots" && substr($val,-1,1) == "f") {
|
||||
$val = intval($val)." [<font color=\"$uniquecolor\">Mrquick's Magical Boots of Swiftness</font>]";
|
||||
}
|
||||
if ($key == "weapon" && substr($val,-1,1) == "g") {
|
||||
$val = intval($val)." [<font color=\"$uniquecolor\">Jeff's Cluehammer of Doom</font>]";
|
||||
}
|
||||
if ($key == "ring" && substr($val,-1,1) == "h") {
|
||||
$val = intval($val)." [<font color=\"$uniquecolor\">Juliet's Glorious Ring of Sparkliness</font>]";
|
||||
}
|
||||
echo " $key: $val<br />\n";
|
||||
$sum += $val;
|
||||
}
|
||||
echo " <br />\n sum: $sum<br />\n".
|
||||
" </p>".
|
||||
" <h2>Penalties</h2>\n".
|
||||
" <p>\n";
|
||||
ksort($pen);
|
||||
$sum = 0;
|
||||
foreach ($pen as $key => $val) {
|
||||
echo " $key: ".duration($val)."<br />\n";
|
||||
$sum += $val;
|
||||
}
|
||||
echo " <br />\n total: ".duration($sum)."</p>\n";
|
||||
$file = fopen($irpg_mod,"r");
|
||||
$temp = array();
|
||||
while ($line=fgets($file,1024)) {
|
||||
if (strstr($line," ".$_GET['player']." ") ||
|
||||
strstr($line," ".$_GET['player'].", ") ||
|
||||
substr($line,0,strlen($_GET['player'])+1) ==
|
||||
$_GET['player']." " ||
|
||||
substr($line,0,strlen($_GET['player'])+3) ==
|
||||
$_GET['player']."'s ") {
|
||||
array_push($temp,$line);
|
||||
}
|
||||
}
|
||||
fclose($file);
|
||||
if (!is_null($temp) && count($temp)) {
|
||||
echo "<h2>";
|
||||
echo $_GET['allmods']!=1?"Recent ":"";
|
||||
echo "Character Modifiers</h2><p>";
|
||||
if ($_GET['allmods'] == 1 || count($temp) < 6) {
|
||||
foreach ($temp as $line) {
|
||||
$line=htmlentities(trim($line));
|
||||
echo " $line<br />\n";
|
||||
}
|
||||
echo " <br />\n";
|
||||
}
|
||||
else {
|
||||
end($temp);
|
||||
for ($i=0;$i<4;++$i) prev($temp);
|
||||
for ($line=trim(current($temp));$line;$line=trim(next($temp))) {
|
||||
$line=htmlentities(trim($line));
|
||||
echo " $line<br />\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($_GET['allmods'] != 1 && count($temp) > 5) {
|
||||
echo " <br />\n".
|
||||
" [<a href=\"".$_SERVER['PHP_SELF']."?player=".urlencode($user)."&allmods=1\">View all Character Modifiers</a> (".count($temp).")]\n".
|
||||
" </p>\n";
|
||||
}
|
||||
}
|
||||
include("footer.php");
|
||||
?>
|
||||
119
irpg-web/quest.php
Normal file
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
include("config.php");
|
||||
include("commonfunctions.php");
|
||||
$irpg_page_title = "Quest Info";
|
||||
$irpg_page_desc = "IdleRPG Quest Info";
|
||||
include("header.php");
|
||||
echo " <h1>Current Quest</h1>\n";
|
||||
$file = fopen($irpg_qfile,"r");
|
||||
$type=0;
|
||||
while ($line=fgets($file,1024)) {
|
||||
$arg = explode(" ",trim($line));
|
||||
if ($arg[0] == "T") {
|
||||
unset($arg[0]);
|
||||
$text = implode(" ",$arg);
|
||||
}
|
||||
elseif ($arg[0] == "Y") {
|
||||
$type = $arg[1];
|
||||
}
|
||||
elseif ($arg[0] == "P") {
|
||||
$p1[0] = $arg[1];
|
||||
$p1[1] = $arg[2];
|
||||
$p2[0] = $arg[3];
|
||||
$p2[1] = $arg[4];
|
||||
}
|
||||
elseif ($arg[0] == "S") {
|
||||
if ($type == 1) $time = $arg[1];
|
||||
elseif ($type == 2) $stage = $arg[1];
|
||||
}
|
||||
elseif ($arg[0] == "P1") {
|
||||
$player[1]['name'] = $arg[1];
|
||||
if ($type == 2) {
|
||||
$player[1]['x'] = $arg[2];
|
||||
$player[1]['y'] = $arg[3];
|
||||
}
|
||||
}
|
||||
elseif ($arg[0] == "P2") {
|
||||
$player[2]['name'] = $arg[1];
|
||||
if ($type == 2) {
|
||||
$player[2]['x'] = $arg[2];
|
||||
$player[2]['y'] = $arg[3];
|
||||
}
|
||||
}
|
||||
elseif ($arg[0] == "P3") {
|
||||
$player[3]['name'] = $arg[1];
|
||||
if ($type == 2) {
|
||||
$player[3]['x'] = $arg[2];
|
||||
$player[3]['y'] = $arg[3];
|
||||
}
|
||||
}
|
||||
elseif ($arg[0] == "P4") {
|
||||
$player[4]['name'] = $arg[1];
|
||||
if ($type == 2) {
|
||||
$player[4]['x'] = $arg[2];
|
||||
$player[4]['y'] = $arg[3];
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!$type) {
|
||||
echo " <p>Sorry, there is no active quest.</p>\n";
|
||||
}
|
||||
else {
|
||||
echo " <p><b>Quest:</b> To $text.</p>\n";
|
||||
if ($type == 1) {
|
||||
echo " <p><b>Time to completion:</b> ".duration($time-time()).
|
||||
"</p>\n";
|
||||
}
|
||||
elseif ($type == 2) {
|
||||
if ($stage == 1) {
|
||||
echo " <p><b>Current goal:</b> [$p1[0],$p1[1]]</p>\n";
|
||||
}
|
||||
else {
|
||||
echo " <p><b>Current goal:</b> [$p2[0],$p2[1]]</p>>\n";
|
||||
}
|
||||
}
|
||||
echo " <p><b>Participant 1:</b> <a href=\"playerview.php?player=".
|
||||
urlencode($player[1]['name'])."\">".htmlentities($player[1]['name']).
|
||||
"</a><br />\n";
|
||||
if ($type == 2) {
|
||||
echo " <b>Position:</b> [".$player[1]['x'].",".$player[1]['y']."]</p>\n";
|
||||
}
|
||||
else echo "<br />\n";
|
||||
echo " <p><b>Participant 2:</b> <a href=\"playerview.php?player=".
|
||||
urlencode($player[2]['name'])."\">".htmlentities($player[2]['name']).
|
||||
"</a><br />\n";
|
||||
if ($type == 2) {
|
||||
echo " <b>Position:</b> [".$player[2]['x'].",".$player[2]['y']."]</p>\n";
|
||||
}
|
||||
else echo "<br />\n";
|
||||
echo " <p><b>Participant 3:</b> <a href=\"playerview.php?player=".
|
||||
urlencode($player[3]['name'])."\">".htmlentities($player[3]['name']).
|
||||
"</a><br />\n";
|
||||
if ($type == 2) {
|
||||
echo " <b>Position:</b> [".$player[3]['x'].",".$player[3]['y']."]</p>\n";
|
||||
}
|
||||
else echo "<br />\n";
|
||||
echo " <p><b>Participant 4:</b> <a href=\"playerview.php?player=".
|
||||
urlencode($player[4]['name'])."\">".htmlentities($player[4]['name']).
|
||||
"</a><br />\n";
|
||||
if ($type == 2) {
|
||||
echo " <b>Position:</b> [".$player[4]['x'].",".$player[4]['y']."]</p>\n".
|
||||
" <h2>Quest Map:</h2>\n".
|
||||
" <p>[Questers are shown in blue, current goal in red]</p>\n".
|
||||
" <div id=\"map\"><img src=\"makequestmap.php\" alt=\"Idle RPG Quest Map\" usemap=\"#quest\" border=\"0\" /></div>\n".
|
||||
" <map id=\"quest\" name=\"quest\">\n".
|
||||
" <area shape=\"circle\" coords=\"".$player[1]['x'].",".$player[1]['y'].",6\" alt=\"".htmlentities($player[1]['name']).
|
||||
"\" href=\"playerview.php?player=".urlencode($player[1]['name'])."\" title=\"".htmlentities($player[1]['name'])."\" />\n".
|
||||
" <area shape=\"circle\" coords=\"".$player[2]['x'].",".$player[2]['y'].",6\" alt=\"".htmlentities($player[2]['name']).
|
||||
"\" href=\"playerview.php?player=".urlencode($player[2]['name'])."\" title=\"".htmlentities($player[2]['name'])."\" />\n".
|
||||
" <area shape=\"circle\" coords=\"".$player[3]['x'].",".$player[3]['y'].",6\" alt=\"".htmlentities($player[3]['name']).
|
||||
"\" href=\"playerview.php?player=".urlencode($player[3]['name'])."\" title=\"".htmlentities($player[3]['name'])."\" />\n".
|
||||
" <area shape=\"circle\" coords=\"".$player[4]['x'].",".$player[4]['y'].",6\" alt=\"".htmlentities($player[4]['name']).
|
||||
"\" href=\"playerview.php?player=".urlencode($player[4]['name'])."\" title=\"".htmlentities($player[4]['name'])."\" />\n".
|
||||
" </map>\n";
|
||||
}
|
||||
else echo "<br />\n";
|
||||
}
|
||||
echo " <br />\n";
|
||||
include("footer.php");
|
||||
?>
|
||||
117
irpg-web/rw.css
Normal file
@@ -0,0 +1,117 @@
|
||||
body {
|
||||
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
|
||||
background-color: #202020;
|
||||
background-image: url(wall.gif);
|
||||
color: #c0c0c0;
|
||||
margin: 10px;
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
h1 { margin-bottom: 0px; margin-top: 0px; }
|
||||
h2 { margin-bottom: 0px; }
|
||||
|
||||
p.small { margin: 0px; font-size: smaller; }
|
||||
|
||||
a { text-decoration: none; color: #FF4040; }
|
||||
a:hover { text-decoration: underline; color: #FF8080; }
|
||||
|
||||
div.head {
|
||||
border: 1px solid #c0c0c0;
|
||||
text-align: left;
|
||||
width: 100%;
|
||||
margin-bottom: 10px;
|
||||
background: #151515;
|
||||
}
|
||||
|
||||
div.menu {
|
||||
width: 120px;
|
||||
position: relative;
|
||||
float: left;
|
||||
border: 1px solid #c0c0c0;
|
||||
background: #151515;
|
||||
}
|
||||
div#menu a.home { color: #c0c0c0; background: #202020; border: 1px solid #c0c0c0; }
|
||||
div#menu a.home:hover { background: #202020; border: 1px solid #c0c0c0; }
|
||||
div#menu a {
|
||||
text-align: center;
|
||||
width: 118px;
|
||||
margin: 0px;
|
||||
display: block;
|
||||
border: 1px solid #c0c0c0
|
||||
}
|
||||
|
||||
div#menu a:hover { border: 1px solid #c0c0c0; background: #202020; text-decoration: none; }
|
||||
|
||||
div.content {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin-left: 130px;
|
||||
margin-top: 0px;
|
||||
padding: 10px;
|
||||
background: #202020;
|
||||
}
|
||||
|
||||
div.footer {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin-left: 130px;
|
||||
margin-top: 10px;
|
||||
padding: 10px;
|
||||
background: #202020;
|
||||
text-align: center
|
||||
}
|
||||
|
||||
|
||||
table.uniques {
|
||||
border: 1px solid #c0c0c0;
|
||||
padding: 5px;
|
||||
text-align: left;
|
||||
}
|
||||
table.uniques td {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
table.penalty {
|
||||
border: 1px solid #c0c0c0;
|
||||
padding: 5px;
|
||||
text-align: left;
|
||||
}
|
||||
table.penalty th {
|
||||
text-align: right;
|
||||
}
|
||||
table.penalty td {
|
||||
|
||||
}
|
||||
|
||||
/* Styles for the userlist */
|
||||
li.online { font-weight: bold; }
|
||||
li.offline { color: #c0c0c0; }
|
||||
a.offline { color: #707070; }
|
||||
#map {
|
||||
width: 500px;
|
||||
height: 500px;
|
||||
background-image: url(newmap.png);
|
||||
}
|
||||
|
||||
|
||||
table.forum {
|
||||
border: 1px solid #c0c0c0;
|
||||
table-layout: fixed;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
table.forum td,tr,caption,thead,tfoot,th {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
.tdblue { background-color: #ffffdf; }
|
||||
.tdgray { background-color: #eeeee0; }
|
||||
.tdred {
|
||||
border: 1px solid red;
|
||||
background-color: #202020;
|
||||
}
|
||||
.smallest {
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
table th {
|
||||
white-space: nowrap;
|
||||
}
|
||||
BIN
irpg-web/tablegrad.gif
Normal file
|
After Width: | Height: | Size: 829 B |
BIN
irpg-web/up.png
Normal file
|
After Width: | Height: | Size: 88 B |
BIN
irpg-web/wall.gif
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
30
irpg-web/worldmap.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
include("config.php");
|
||||
$irpg_page_title = "World Map";
|
||||
$irpg_page_desc = "IdleRPG World Map";
|
||||
include("header.php");
|
||||
?>
|
||||
|
||||
<h1>World Map</h1>
|
||||
<p>[offline users are red, online users are blue]</p>
|
||||
|
||||
|
||||
<div id="map">
|
||||
<img src="makeworldmap.php" alt="IdleRPG World Map" title="IdleRPG World Map" usemap="#world" border="0" />
|
||||
<map id="world" name="world">
|
||||
<?php
|
||||
$file = fopen($irpg_db,"r");
|
||||
fgets($file);
|
||||
while($location=fgets($file)) {
|
||||
list($who,,,,,,,,,,$x,$y) = explode("\t",trim($location));
|
||||
echo " <area shape=\"circle\" coords=\"".$x.",".$y.",4\" alt=\"".htmlentities($who).
|
||||
"\" href=\"playerview.php?player=".urlencode($who)."\" title=\"".htmlentities($who)."\" />\n";
|
||||
}
|
||||
fclose($file);
|
||||
?>
|
||||
</map>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
include("footer.php");
|
||||
?>
|
||||
76
irpg-web/xml.php
Normal file
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
header("Content-Type: text/xml");
|
||||
header("Pragma: no-cache");
|
||||
include("config.php");
|
||||
|
||||
/* Determine if a Player was entered. If not, redirect. */
|
||||
$_GET['player'] = substr($_GET['player'],0,30);
|
||||
if ($_GET['player']=="") header('Location: '.$irpg_base_dir.'players.php');
|
||||
|
||||
$file = fopen($irpg_db,"r");
|
||||
fgets($file,1024); // skip top comment
|
||||
while ($line=fgets($file,1024)) {
|
||||
if (substr($line,0,strlen($_GET['player'])+1) == $_GET['player']."\t") {
|
||||
list($user,,$isadmin,$level,$class,$secs,,$uhost,$online,$idled,
|
||||
$x,$y,
|
||||
$pen['mesg'],
|
||||
$pen['nick'],
|
||||
$pen['part'],
|
||||
$pen['kick'],
|
||||
$pen['quit'],
|
||||
$pen['quest'],
|
||||
$pen['logout'],
|
||||
$created,
|
||||
$lastlogin,
|
||||
$item['amulet'],
|
||||
$item['charm'],
|
||||
$item['helm'],
|
||||
$item['boots'],
|
||||
$item['gloves'],
|
||||
$item['ring'],
|
||||
$item['leggings'],
|
||||
$item['shield'],
|
||||
$item['tunic'],
|
||||
$item['weapon'],
|
||||
$alignment,
|
||||
) = explode("\t",trim($line));
|
||||
break;
|
||||
}
|
||||
}
|
||||
fclose($file);
|
||||
echo "<?xml version=\"1.0\"?>";
|
||||
?>
|
||||
|
||||
<player>
|
||||
<username><?php echo $user; ?></username>
|
||||
<isadmin><?php echo $isadmin; ?></isadmin>
|
||||
<level><?php echo $level; ?></level>
|
||||
<class><?php echo $class; ?></class>
|
||||
<ttl><?php echo $secs; ?></ttl>
|
||||
<userhost><?php echo $uhost; ?></userhost>
|
||||
<online><?php echo $online; ?></online>
|
||||
<totalidled><?php echo $idled; ?></totalidled>
|
||||
<xpos><?php echo $x; ?></xpos>
|
||||
<ypos><?php echo $y; ?></ypos>
|
||||
<alignment><?php echo $alignment; ?></alignment>
|
||||
<penalties>
|
||||
<?php
|
||||
$sum=0;
|
||||
foreach ($pen as $key => $val) {
|
||||
echo " <$key>$val</$key>\n";
|
||||
$sum += $val;
|
||||
}
|
||||
echo " <total>$sum</total>\n";
|
||||
?>
|
||||
</penalties>
|
||||
<items>
|
||||
<?php
|
||||
$sum=0;
|
||||
foreach ($item as $key => $val) {
|
||||
echo " <$key>$val</$key>\n";
|
||||
$sum += $val;
|
||||
}
|
||||
echo " <total>$sum</total>\n";
|
||||
?>
|
||||
</items>
|
||||
</player>
|
||||