first commit
This commit is contained in:
commit
21e4690338
|
@ -0,0 +1,8 @@
|
|||
|
||||
|
||||
# php -- BEGIN cPanel-generated handler, do not edit
|
||||
# Set the “ea-php81” package as the default “PHP” programming language.
|
||||
<IfModule mime_module>
|
||||
#AddHandler application/x-httpd-ea-php81 .php .php8 .phtml
|
||||
</IfModule>
|
||||
# php -- END cPanel-generated handler, do not edit
|
|
@ -0,0 +1,108 @@
|
|||
This is the ChangeLog for the 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.
|
|
@ -0,0 +1,42 @@
|
|||
------------------------------------------
|
||||
IRPG Website Code README v1.1 (2004-06-27)
|
||||
------------------------------------------
|
||||
|
||||
-----------
|
||||
Notes
|
||||
-----------
|
||||
|
||||
Homepage: http://idlerpg.net
|
||||
License : Public Domain
|
||||
|
||||
-----------
|
||||
Versions
|
||||
-----------
|
||||
|
||||
Site: v0.5 [current/changes courtesy of res0], Released July 17th, 2004.
|
||||
Bot : v3.1.2 [current], Released June 6th, 2004.
|
||||
|
||||
------------
|
||||
Installation
|
||||
------------
|
||||
|
||||
1. Make sure you have the bot functional and running.
|
||||
2. Copy all the files here to your public_html or some folder.
|
||||
3. Edit config.php with your favorite editor.
|
||||
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. The best way to receive support for these scripts is to post to the Help
|
||||
section of the forum, http://idlerpg.net/forum.php, not via e-mail or IRC.
|
||||
If you notice a bug, however, you may use any method to contact me.
|
||||
Thanks :^)
|
|
@ -0,0 +1,65 @@
|
|||
This is not the full list of commands for the Idle RPG bot, but only the list
|
||||
of admin commands. For more information on the Idle RPG bot, visit
|
||||
http://idlerpg.net/
|
||||
|
||||
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.
|
|
@ -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;
|
||||
}
|
||||
?>
|
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
|
||||
$admin_email="deepend@tilde.club";
|
||||
$admin_nick="deepend";
|
||||
|
||||
// nickname of your bot
|
||||
$irpg_bot="idlerpg";
|
||||
|
||||
// your game's server
|
||||
$irpg_network="club.newnet.net";
|
||||
|
||||
// your game's channel
|
||||
$irpg_chan="#idleland";
|
||||
|
||||
// full or relative pathname to the DBs:
|
||||
|
||||
// character database
|
||||
$irpg_db="/home/newnet/idlerpgbot/irpg.db";
|
||||
|
||||
// time modifiers file
|
||||
$irpg_mod="/home/newnet/idlerpgbot/modifiers.txt";
|
||||
|
||||
// active quest info file
|
||||
$irpg_qfile="/home/newnet/idlerpgbot/questinfo.txt";
|
||||
|
||||
// image to use for the top logo
|
||||
$irpg_logo="idlerpg.png";
|
||||
|
||||
// directory in which your site is located from the root directory. my site
|
||||
// is http://jotun.ultrazone.org/g7/, so it's "/g7/"
|
||||
$BASEURL="/";
|
||||
|
||||
// width-wise dimension of your map file
|
||||
$mapx = 500;
|
||||
|
||||
// length-wise dimension of your map file
|
||||
$mapy = 500;
|
||||
|
||||
?>
|
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
include("config.php");
|
||||
|
||||
$irpg_page_title = "Contact";
|
||||
|
||||
include("header.php");
|
||||
|
||||
echo "<h1>Contact</h1>";
|
||||
if ($_POST['from'] && $_POST['text']) {
|
||||
mail($admin_email,"IRPG: ".$_POST['from'],
|
||||
"Name: ".$_POST['name']."\nE-mail: ".$_POST['from']."\n\n".
|
||||
$_POST['text'],"From: ".$_POST['from']."\r\n");
|
||||
echo(' <blockquote>Thanks for your submission.</blockquote>');
|
||||
}
|
||||
else {
|
||||
echo('
|
||||
<form method="post" action="contact.php">
|
||||
<table border="0">
|
||||
<tr>
|
||||
<th align="left"><label for="from">Your e-mail address</label>:</th>
|
||||
<td align="right">
|
||||
<input type="text" size="20" maxlength="50" name="from" id="from" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="left"><label for="name">Your name</label>:</th>
|
||||
<td align="right">
|
||||
<input type="text" size="20" maxlength="50" name="name" id="name" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<textarea name="text" rows="6" cols="44"></textarea><br />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" align="right">
|
||||
<input type="submit" value="Send" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
');
|
||||
}
|
||||
include("footer.php");
|
||||
?>
|
|
@ -0,0 +1,257 @@
|
|||
<?php
|
||||
|
||||
include("config.php");
|
||||
|
||||
$irpg_page_title = "DB-style Player Listing";
|
||||
|
||||
include("header.php");
|
||||
|
||||
include("commonfunctions.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 print 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>
|
||||
<br><br>
|
||||
* Accounts created before Aug 29, 2003 may have incowrect data fields.
|
||||
');
|
||||
include("footer.php");
|
||||
?>
|
|
@ -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("commonfunctions.php");
|
||||
include("config.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";
|
||||
}
|
||||
?>
|
|
@ -0,0 +1,35 @@
|
|||
</div>
|
||||
<div class="footer">
|
||||
<p class="small">
|
||||
Questions? Comments? Suggestions? Bugs?
|
||||
<a href="contact.php"><?php print $admin_email?></a> or <?php print $admin_nick?>@IRC.
|
||||
<?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";
|
||||
$found = 1;
|
||||
}
|
||||
if ($fp) {
|
||||
fwrite($fp,"$page\t$numhits\t$date\n");
|
||||
}
|
||||
}
|
||||
if (!$found && $fp) {
|
||||
echo " 1 hit since ".date("M j, Y",time());
|
||||
fwrite($fp,$thispage."\t1\t".date("M j, Y",time())."\n");
|
||||
}
|
||||
fclose($fp);
|
||||
?>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -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;
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title><?php echo $irpg_chan; ?> Idle RPG: <?php echo $irpg_page_title; ?></title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="styles.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="head">
|
||||
<img src="<?php echo $irpg_logo; ?>" alt="<?php echo $irpg_chan; ?> Idle RPG" title="<?php echo $irpg_chan; ?> Idle RPG">
|
||||
</div>
|
||||
<nav id="menu">
|
||||
<ul>
|
||||
<li><a href="index.php">Home</a></li>
|
||||
<li><a href="https://newnet.net/forums/" target="_blank">Forums</a></li>
|
||||
<li><a href="quest.php">Quest Info</a></li>
|
||||
<li><a href="help.php">Help</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<div class="content">
|
|
@ -0,0 +1,476 @@
|
|||
<?php
|
||||
include("config.php");
|
||||
include("commonfunctions.php");
|
||||
$irpg_page_title = "World Map";
|
||||
include("header.php");
|
||||
?>
|
||||
|
||||
<div id="content">
|
||||
<h2>Location</h2>
|
||||
<p>
|
||||
The Idle RPG can be played on the
|
||||
<a href="http://www.newnet.net/">Newnet IRC Network</a> in the
|
||||
channel #idleland. See <a href="http://www.newnet.net/servers/">this</a>
|
||||
link for a list of servers.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>Registering</h2>
|
||||
|
||||
<p>To register, simply:</p>
|
||||
|
||||
<code>
|
||||
/msg <?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 <?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 <?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 <?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 <?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 <?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 <?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>
|
||||
|
||||
600*(1.16^YOUR_LEVEL)
|
||||
|
||||
<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>
|
||||
|
||||
(time to level @ 60) + ((1 day) * (level - 60))
|
||||
|
||||
<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 <?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 <?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>
|
||||
|
||||
|
||||
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>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>
|
||||
|
||||
|
||||
((the larger number of (OPPONENT_LEVEL/4) and 7) / 100) *
|
||||
YOUR_NEXT_TIME_TO_LEVEL
|
||||
|
||||
|
||||
<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>
|
||||
|
||||
|
||||
((the larger number of (OPPONENT_LEVEL/7) and 7) / 100) *
|
||||
YOUR_NEXT_TIME_TO_LEVEL
|
||||
|
||||
|
||||
<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>
|
||||
|
||||
((random number from 5 to 25) / 100) * OPPONENT'S_NEXT_TIME_TO_LEVEL
|
||||
|
||||
<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
|
||||
<a href="http://idlerpg.newnet.net/ChangeLog.txt">ChangeLog</a>.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<?php include("footer.php"); ?>
|
|
@ -0,0 +1,10 @@
|
|||
index.php 928 Sep 3, 2023
|
||||
2023
|
||||
worldmap.php 145 Mar 20, 2023
|
||||
quest.php 128 Mar 24, 2023
|
||||
players.php 146 Mar 24, 2023
|
||||
playerview.php 1440 Apr 15, 2023
|
||||
index.php 4435 Apr 17, 2023
|
||||
contact.php 1421 Apr 17, 2023
|
||||
db.php 1135 Apr 18, 2023
|
||||
help.php 33 Sep 30, 2023
|
|
@ -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;
|
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
|
@ -0,0 +1,63 @@
|
|||
<?php
|
||||
include("config.php");
|
||||
include("commonfunctions.php");
|
||||
$irpg_page_title = "World Map";
|
||||
include("header.php");
|
||||
?>
|
||||
<h1>Welcome</h1>
|
||||
<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>
|
||||
<div id="main-content">
|
||||
|
||||
<div id="map-container">
|
||||
<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));
|
||||
print " <area shape=\"circle\" coords=\"".$x.",".$y.",4\" alt=\"".htmlentities($who).
|
||||
"\" href=\"playerview.php?player=".urlencode($who)."\" title=\"".htmlentities($who)."\" />\n";
|
||||
}
|
||||
fclose($file);
|
||||
?>
|
||||
</map>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="player-list">
|
||||
<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);
|
||||
|
||||
print " <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>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php include("footer.php"); ?>
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
<?
|
||||
include("config.php");
|
||||
session_start(); // sessions to generate only one map / person / 20s
|
||||
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);
|
||||
?>
|
|
@ -0,0 +1,79 @@
|
|||
<?
|
||||
include("config.php");
|
||||
$file = fopen($irpg_db,"r");
|
||||
fgets($file,1024);
|
||||
|
||||
session_start(); // sessions to generate only one map / person / 20s
|
||||
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);
|
||||
?>
|
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
include("config.php");
|
||||
$file = fopen($irpg_db,"r");
|
||||
fgets($file);
|
||||
|
||||
session_start(); // sessions to generate only one map / person / 20s
|
||||
if (isset($_SESSION['time']) && time()-$_SESSION['time'] < 20) {
|
||||
header("Location: maperror.png");
|
||||
exit(0);
|
||||
}
|
||||
$_SESSION['time']=time();
|
||||
|
||||
$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, 6, 6, $blue); // Increased size to 6x6
|
||||
else imageFilledEllipse($map, $x, $y, 6, 6, $red); // Increased size to 6x6
|
||||
}
|
||||
header("Content-type: image/png");
|
||||
imagePNG($map);
|
||||
imageDestroy($map);
|
||||
?>
|
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
|
@ -0,0 +1,187 @@
|
|||
<?php
|
||||
include("config.php");
|
||||
include("commonfunctions.php");
|
||||
|
||||
$_GET['player'] = substr($_GET['player'], 0, 30);
|
||||
|
||||
if ($_GET['player'] == "") {
|
||||
header('Location: http://' . $_SERVER['SERVER_NAME'] . ($_SERVER['SERVER_PORT'] != 80 ? ':' . $_SERVER['SERVER_PORT'] : '') . $BASEURL . 'players.php');
|
||||
}
|
||||
|
||||
$irpg_page_title = "Player Info: " . htmlentities($_GET['player']);
|
||||
$showmap = $_GET['showmap'];
|
||||
|
||||
include("header.php");
|
||||
?>
|
||||
|
||||
<style>
|
||||
.card {
|
||||
border: 1px solid #ccc;
|
||||
padding: 16px;
|
||||
margin-bottom: 20px;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.status-online {
|
||||
color: green;
|
||||
}
|
||||
.status-offline {
|
||||
color: red;
|
||||
}
|
||||
.alignment-good {
|
||||
color: blue;
|
||||
}
|
||||
.alignment-evil {
|
||||
color: red;
|
||||
}
|
||||
.alignment-neutral {
|
||||
color: grey;
|
||||
}
|
||||
</style>
|
||||
|
||||
<?php
|
||||
$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;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<?php if (!$found): ?>
|
||||
<h1>Error</h1><p><b>No such user.</b></p>
|
||||
<?php else: ?>
|
||||
|
||||
<div class="card">
|
||||
<h1>Player Info</h1>
|
||||
<p><b>User:</b> <?= htmlentities($user) ?></p>
|
||||
<p><b>Class:</b> <?= htmlentities($class) ?></p>
|
||||
<p><b>Admin?:</b> <?= $isadmin ? "Yes" : "No" ?></p>
|
||||
<p><b>Level:</b> <?= $level ?></p>
|
||||
<p><b>Next level:</b> <?= duration($secs) ?></p>
|
||||
<p><b>Status:</b> <?= $online ? "Online" : "Offline" ?></p>
|
||||
<p><b>Host:</b> <?= $uhost ? $uhost : "Unknown" ?></p>
|
||||
<p><b>Account Created:</b> <?= date("D M j H:i:s Y", $created) ?></p>
|
||||
<p><b>Last login:</b> <?= date("D M j H:i:s Y", $lastlogin) ?></p>
|
||||
<p><b>Total time idled:</b> <?= duration($idled) ?></p>
|
||||
<p><b>Current position:</b> [<?= $x ?>,<?= $y ?>]</p>
|
||||
<p><b>Alignment:</b> <?= $alignment == 'e' ? "Evil" : ($alignment == 'n' ? "Neutral" : "Good") ?></p>
|
||||
<p><b>XML:</b> [<a href="xml.php?player=<?= urlencode($user) ?>">link</a>]</p>
|
||||
<p><?= $showmap ? "<div id=\"map\"><img src=\"makemap.php?player=" . urlencode($user) . "\"></div>" : "<a href=\"?player=" . urlencode($user) . "&showmap=1\">Show map</a>" ?></p>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Items</h2>
|
||||
<?php
|
||||
ksort($item);
|
||||
$sum = 0;
|
||||
foreach ($item as $key => $val) {
|
||||
$valInt = intval($val); // Extract integer value
|
||||
$sum += $valInt; // Add to sum
|
||||
$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 "<p><b>$key:</b> $val</p>";
|
||||
}
|
||||
echo "<p><b>Sum:</b> $sum</p>";
|
||||
?>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Penalties</h2>
|
||||
<?php
|
||||
ksort($pen);
|
||||
$sum = 0;
|
||||
foreach ($pen as $key => $val) {
|
||||
$sum += $val; // Add to sum
|
||||
echo "<p><b>$key:</b> " . duration($val) . "</p>";
|
||||
}
|
||||
echo "<p><b>Total:</b> " . duration($sum) . "</p>";
|
||||
?>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Character Modifiers</h2>
|
||||
<?php
|
||||
$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)) {
|
||||
if ($_GET['allmods'] == 1 || count($temp) < 6) {
|
||||
foreach ($temp as $line) {
|
||||
echo "<p>" . htmlentities(trim($line)) . "</p>";
|
||||
}
|
||||
} else {
|
||||
end($temp);
|
||||
for ($i = 0; $i < 4; ++$i) prev($temp);
|
||||
for ($line = trim(current($temp)); $line; $line = trim(next($temp))) {
|
||||
echo "<p>" . htmlentities(trim($line)) . "</p>";
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($_GET['allmods'] != 1 && count($temp) > 5) {
|
||||
echo "<p>[<a href=\"" . $_SERVER['PHP_SELF'] . "?player=" . urlencode($user) . "&allmods=1\">View all Character Modifiers</a> (" . count($temp) . ")</p>";
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<?php endif; ?>
|
||||
|
||||
<?php
|
||||
include("footer.php");
|
||||
?>
|
|
@ -0,0 +1,118 @@
|
|||
<?php
|
||||
include("config.php");
|
||||
$irpg_page_title = "Quest Info";
|
||||
include("header.php");
|
||||
echo " <h1>Current Quest</h1>\n";
|
||||
include("commonfunctions.php");
|
||||
$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");
|
||||
?>
|
|
@ -0,0 +1,134 @@
|
|||
/* Existing Styles */
|
||||
body {
|
||||
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
|
||||
background-color: #FFFFF0;
|
||||
color: black;
|
||||
margin: 10px;
|
||||
text-align: justify;
|
||||
}
|
||||
|
||||
h1, h2 { margin-bottom: 0px; margin-top: 0px; }
|
||||
|
||||
p.small { margin: 0px; font-size: smaller; }
|
||||
|
||||
a { text-decoration: none; color: #C69500; }
|
||||
a:hover { text-decoration: underline; color: black; }
|
||||
|
||||
/* New Styles */
|
||||
.head {
|
||||
background-color: #333;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
#menu {
|
||||
background-color: #444;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
padding: 10px;
|
||||
}
|
||||
/* Elegant File Menu-like Navigation */
|
||||
nav#menu {
|
||||
background-color: #FFFFFF;
|
||||
border: none;
|
||||
padding: 0;
|
||||
font-family: "Courier New", monospace;
|
||||
}
|
||||
|
||||
nav#menu ul {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
nav#menu ul li {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
nav#menu ul li a {
|
||||
text-decoration: none;
|
||||
color: #000;
|
||||
padding: 10px 20px;
|
||||
display: block;
|
||||
border-right: 1px solid #c0c0c0;
|
||||
}
|
||||
|
||||
nav#menu ul li a:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
nav#menu ul li a:hover {
|
||||
background-color: #c0c0c0;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.content {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.footer {
|
||||
background-color: #333;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
/* Map Styles */
|
||||
#map {
|
||||
width: 500px; /* Original size */
|
||||
height: 500px;
|
||||
background-image: url(newmap.png);
|
||||
background-size: cover;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* Additional styles to ensure map functionality */
|
||||
area {
|
||||
cursor: pointer;
|
||||
}
|
||||
/* Responsive layout */
|
||||
@media (max-width: 768px) {
|
||||
#main-content {
|
||||
flex-direction: column;
|
||||
}
|
||||
#map-container, #player-list {
|
||||
width: 100%;
|
||||
}
|
||||
#map img { /* Add this selector */
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
|
||||
/* Regular layout */
|
||||
#main-content {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
#content {
|
||||
display: relative;
|
||||
}
|
||||
#map-container {
|
||||
width: 500px; /* Set to the original size of the map */
|
||||
}
|
||||
#player-list {
|
||||
flex: 1;
|
||||
padding-left: 20px;
|
||||
}
|
||||
/* New styles for offline players */
|
||||
li.offline, a.offline {
|
||||
color: grey;
|
||||
}
|
||||
/* Code Styling */
|
||||
code {
|
||||
background-color: #f4f4f4;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
font-family: "Courier New", monospace;
|
||||
padding: 5px 10px;
|
||||
display: inline-block;
|
||||
margin: 5px 0;
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 829 B |
|
@ -0,0 +1,27 @@
|
|||
<?
|
||||
include("config.php");
|
||||
$irpg_page_title = "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">
|
||||
<?
|
||||
$file = fopen($irpg_db,"r");
|
||||
fgets($file);
|
||||
while($location=fgets($file)) {
|
||||
list($who,,,,,,,,,,$x,$y) = explode("\t",trim($location));
|
||||
print " <area shape=\"circle\" coords=\"".$x.",".$y.",4\" alt=\"".htmlentities($who).
|
||||
"\" href=\"playerview.php?player=".urlencode($who)."\" title=\"".htmlentities($who)."\" />\n";
|
||||
}
|
||||
fclose($file);
|
||||
?>
|
||||
</map>
|
||||
</div>
|
||||
|
||||
<?include("footer.php");?>
|
|
@ -0,0 +1,82 @@
|
|||
<?php
|
||||
|
||||
header("Content-Type: text/xml");
|
||||
header("Pragma: no-cache");
|
||||
|
||||
include("config.php");
|
||||
|
||||
$_GET['player'] = substr($_GET['player'],0,30);
|
||||
|
||||
/* Determine if a Player was entered. If not, redirect. */
|
||||
if ($_GET['player']=="") header('Location: http://'.$_SERVER['SERVER_NAME'].
|
||||
($_SERVER['SERVER_PORT']!=80?':'.$_SERVER['SERVER_PORT']:'').$BASEURL.
|
||||
'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 print $user?></username>
|
||||
<isadmin><?php print $isadmin?></isadmin>
|
||||
<level><?php print $level?></level>
|
||||
<class><?php print $class?></class>
|
||||
<ttl><?php print $secs?></ttl>
|
||||
<userhost><?php print $uhost?></userhost>
|
||||
<online><?php print $online?></online>
|
||||
<totalidled><?php print $idled?></totalidled>
|
||||
<xpos><?php print $x?></xpos>
|
||||
<ypos><?php print $y?></ypos>
|
||||
<alignment><?php print $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>
|
Loading…
Reference in New Issue