PDA

View Full Version : Web Based PH Char Mover (Stuck)


core
05-21-2009, 02:18 AM
Hey all.

Hope this is the right spot for it. Been looking around for a PHP web based character mover. I saw one a long time ago with login, psw and charname and it moves the stuck char to Nexus or somewhere and you can have it on your webpage for users to access themselves.

If anyone knows of a code such as this or has a simple code to right I would be more than happy. :) Been looking for awhile but cant find any.

Lillu
08-08-2009, 04:30 PM
I would love to see this in the default web templates coming with the eqemu.. Thanks in advance if anyone takes his time to make it happen.

Shin Noir
08-10-2009, 08:26 AM
if nobody responds with code / solution I may be able to whip something up for ya. Just will wait a day or so to see.

Lillu
08-13-2009, 04:28 PM
This would be awesome mate. I would like to implement this code to our server portal too for players as a new feature. Really looking forward to it.

Shin Noir
08-17-2009, 08:10 AM
Ok, I'm hacking up the all purpose tool "Custom" (http://www.eqemulator.net/forums/showthread.php?t=23892) to be modular and was going to add this feature, but uh.. this code is also pretty bad at the moment.

Here's some questions to you:
By default, latest PEQ database has login sessions handled via the EQEMU login server unless you use a minilogin server. I'm assuming you're using the EQEMU server, and with that, how do you plan to authenticate legitimate users from non-legitimate?

I was going to do an IP-based authentication system (compare the user's IP with the lastlogin_ip field inside the database, however this is a custom addition to VZTZ code apparantly.) Structure of PEQ's DB SVN looks like so:

CREATE TABLE `account` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(30) NOT NULL default '',
`charname` varchar(64) NOT NULL default '',
`sharedplat` int(11) NOT NULL default '0',
`password` varchar(50) NOT NULL default '',
`status` int(5) NOT NULL default '0',
`lsaccount_id` int(11) unsigned default NULL,
`gmspeed` tinyint(3) unsigned NOT NULL default '0',
`revoked` tinyint(3) unsigned NOT NULL default '0',
`karma` INT(5) UNSIGNED NOT NULL DEFAULT '0',
`minilogin_ip` varchar(32) NOT NULL DEFAULT '0',
`hideme` tinyint(4) NOT NULL default '0',
`rulesflag` tinyint(1) unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
UNIQUE KEY `lsaccount_id` (`lsaccount_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

No "lastlogin_ip" in it. :/

Anyways, while you help me try to figure out an authentication system, i'll be working on the code. If nothing else, it can be an administrative-based system.

Maybe I'll inquire to cavemandude adding the lastlogin_ip field. It is pretty handy if you ask me.

Any other features you'd like on top of the "PH Stuck Char Mover"?

It may be easier to fix the "Return Home" button inside the source to just have a faster repop timer.. Then they only have to wait ~10 mins to get back home/unstuck. Not sure if this solution is a simple DB edit or if it's a recompile.

Lillu
08-17-2009, 05:14 PM
Good point about the authentication. Yes, we do use eqemu. I'm not an expert with php or sql tho, so sorry if I suggest or ask something dumb. Anyways, I saw that the account table in peq has a password frield. Could we just use that for authentication? It's the pw field that the default Templates admin tool uses too I think?

About the other features, it would be great to have a "Server Status" and a "Who is online" player list (name, guild, zone, magelo link). I was thinking some other useful admin tools too.. but not sure how much trouble it is to code something like that.. I don't want to ask for something time consuming, but once again, many thanks for your effort already done!

Lillu
08-17-2009, 05:22 PM
and yes, last ip would be awesome to have for some other reason too. hard to update the banned ip list from logs..

trevius
08-17-2009, 07:38 PM
PEQ used to have their character mover tool available for download somewhere, but I can't seem to find it anymore. That is the one I use as well, and all you do to authenticate is enter the account name and character name you want to move. Basically, account names are private enough that it shouldn't be much of an issue. Plus, it isn't the end of the world if someone moved your character to Nexus, as long as they aren't doing it non-stop just to harass you.

The last_ip field would be awesome to have in the accounts table. I have been wanting to get one added for a long time now. I just haven't had time to really look into it. It would just make getting rid of the bad eggs and tracking people down much easier.

Shin Noir
08-18-2009, 06:59 AM
I'll write the code for it and see if the devs want it, since it's essentially done in the VZTZ source.

Seems original maker of "Custom" php all in one tools contacted me, will try to commit my changes and throw this char ph mover tool in.

Char mover isn't really that tough code wise, it's just getting it hackproof and having an authentication method that can be a little tedious due to the PEQ/EQEMU SVN source structure right now. Working on it though. Will likely use the lastlogin_ip field for testing on IP authenticated char_move.

I've been thinking of a "Who's online" tool too. I actually have it partially coded on my source, but my method of counting players online is a bit hackjob. I have a feeling one of the veteran coders can direct me on a better route to get an accurate online count.

If you click my "Claws of Veeshan" picture below, you can see an in game spy tool I have been partially working on. The syncronization needs some work, but it's displaying PvP messages and OOC broadcasts from in game into an AJAX controlled (auto-refreshes) in game spy tool on the website.

:)

Shin Noir
08-18-2009, 07:05 AM
The 'password' columns is only used in minilogin based systems (Or maybe if you run your own EQEMULogin? not sure), you could populate a password in there but how do you authenticate who can set a password there? /ponder..

Lillu
08-18-2009, 01:29 PM
couldn't think of a way to populate the pw field automatically. maybe if we could populate it using the LS account names. then we would have the LSusername and Charname combo to authenticate.. like in the peq version of this tool what Trev mentioned. I saw that SH and Peq server uses the same authentication (LS username + charname) too.
but then again, it could be a security hole, since the default templates tool coming with emu uses the pw field to authenticate, and that is often public. I'm afraid I can't provide any good idea..

Trev, any luck finding the source? :)

Shin Noir
08-18-2009, 05:16 PM
The last_ip field would be awesome to have in the accounts table. I have been wanting to get one added for a long time now. I just haven't had time to really look into it. It would just make getting rid of the bad eggs and tracking people down much easier.

Maybe peek @ http://www.eqemulator.net/forums/showthread.php?t=29269

cavedude
08-21-2009, 01:47 PM
PEQ used to have their character mover tool available for download somewhere, but I can't seem to find it anymore. That is the one I use as well, and all you do to authenticate is enter the account name and character name you want to move. Basically, account names are private enough that it shouldn't be much of an issue. Plus, it isn't the end of the world if someone moved your character to Nexus, as long as they aren't doing it non-stop just to harass you.

The last_ip field would be awesome to have in the accounts table. I have been wanting to get one added for a long time now. I just haven't had time to really look into it. It would just make getting rid of the bad eggs and tracking people down much easier.

It's here: http://www.projecteq.net/phpBB2/viewtopic.php?t=3199

We lost it when we upgraded, so I restripped the file and reposted. Sorry about that!

Lillu
08-21-2009, 01:53 PM
Thank you Sir! :)

kaos00723
05-11-2010, 03:43 PM
I'm having trouble getting this to work correctly.

For some reason it works fine for the 1st admin account but will not work using any other accounts or character names.

I know I'm typing the loginserver name and character names correctly but I'm still getting "Character Name Incorrect! Aborting...".

I don't understand why it works for the admin account and not any others.

Can someone that uses this script please help me out? I'm using the latest PEQ database from the SVN.

Thanks!

Lillu
05-11-2010, 03:47 PM
It's case sensitive.

kaos00723
05-11-2010, 03:57 PM
Yes, I've tried using case sensitive names and the whole works but it's still a no go.

It only goes to step 3 with the admin account and won't get to step 2 for any other accounts without giving me the error.

Also, although it said successful for the admin account, it didn't move that character from his current zone into the Nexus.

So there's a couple things wrong.

Here's the file I'm using:



<?php
if (!ISSET($_POST['action'])) {
?>
<table align="center">
<tr>
<td><b><font size="4">Use this tool to move your character to the

Nexus if you are stuck in-game.</font></b></td>
</tr>
</table>
<FORM ACTION="PEQ-Char-Move.php?action=process" METHOD="post">
<table width='300' cellpadding='0' cellspacing='2' border='0'

align='center' >
<tr>
</tr>
<tr>
<td colspan=2>&nbsp </td>
</tr>
<tr>
<td colspan=2><INPUT TYPE="hidden" NAME="s_id"

value=<?php echo "\"".session_id()."\""; ?>></td>
</tr>
<tr>
<td colspan=2><INPUT TYPE="hidden" NAME="action"

value="process"></td>
</tr>
<tr>
<td><b><font size="-1">LoginServer Username:

</font></b></td>
<td><font color="#000080"><INPUT TYPE="text"

NAME="lsusername" ></font></td>
</tr>
<tr>
<td><b><font size="-1">Character Name:

</font></b></td>
<td><font color="#000080"><INPUT TYPE="text"

NAME="charname" ></font></td>
</tr>
<tr>
<td colspan=2>&nbsp </td>
</tr>
<tr>
<td colspan='2' align='center'><INPUT TYPE="submit"

NAME="SUBMIT" VALUE="Next..."></td>
</tr>
</table>
</form>
<?php
} else {
if ($_POST['action'] == 'process') {
if (session_id() != $_POST['s_id']) {
echo "Session IDs do not match! Aborting...";
echo "<a href=\"PEQ-Char-Move.php\">Go back</a>";
exit;
}
$lsusername = $_POST['lsusername'];
$charname = $_POST['charname'];
$zonename = "nexus";

$mhost = '127.0.0.1';
$muser = 'myusername';
$mpass = 'mypassword';
$mdb = 'peq';

// Connects to database
$link = mysql_connect($mhost, $muser, $mpass) or die

(mysql_error());
mysql_select_db($mdb, $link) or die (mysql_error());

###Character Query###
$query = "SELECT account_id,name FROM character_ WHERE

name='$charname'";
$cresult = mysql_query($query);
if (mysql_num_rows($cresult) != 1) {
echo "Character Name Incorrect! Aborting...";
echo "<a href=\"PEQ-Char-Move.php\">Go back</a>";
} else {
while ($char = mysql_fetch_array($cresult)) {
$account_id = $char['account_id'];
$ccharname = $char['name'];

###LoginServer Query###
$query2 = "SELECT id,name FROM account WHERE id='$account_id'";
$lsresult = mysql_query($query2);
if (mysql_num_rows($lsresult) != 1) {
echo "LoginServer Data Incorrect! Aborting...";
echo "<a href=\"PEQ-Char-Move.php\">Go back</a>";
} else {
while ($ls = mysql_fetch_array($lsresult)) {
$id = $ls['id'];
$lsname = $ls['name'];

###Zone Query###
$query3 = "SELECT * FROM zone WHERE short_name like

'$zonename'";
$zresult = mysql_query($query3);
if (mysql_num_rows($zresult) != 1) {
echo "Zone Data Incorrect! Aborting...";
echo "<a href=\"PEQ-Char-Move.php\">Go back</a>";
} else {
while ($zid = mysql_fetch_array($zresult)) {
$short_name = $zid['short_name'];
$long_name = $zid['long_name'];
$zoneidnumber = $zid['zoneidnumber'];

if ($lsusername != $lsname) {
echo "Incorrect, this has been logged! Aborting...";
echo "<a href=\"PEQ-Char-Move.php\">Go back</a>";




} else {
?>
<FORM ACTION="?action=postdata" METHOD="post">
<table width='300' cellpadding='0' cellspacing='2' border='0'

align='center'>
<tr bgcolor="#006600">
<td colspan=2 align="center">
<font size="+2" color='#ffffff'><b>STEP 2 OF

3</B></font>
</td>
</tr>
<tr>
<td colspan=2><INPUT TYPE="hidden" NAME="s_id" value=<?php

echo "\"".session_id()."\""; ?>></td>
</tr>
<tr>
<td colspan=2><INPUT TYPE="hidden" NAME="action"

value="postdata"></td>
</tr>
<tr>
<td colspan=2>&nbsp </td>
</tr>
<tr>
<td colspan=2>
<INPUT TYPE="hidden" NAME="lsusername" value=<?php

echo "\"".$lsusername."\""; ?>>
<INPUT TYPE="hidden" NAME="charname" value=<?php echo

"\"".$charname."\""; ?>>
<INPUT TYPE="hidden" NAME="zoneid" value=<?php echo

"\"".$zoneidnumber."\""; ?>>
</td>
</tr>
<tr>
<td><b>LoginServer Name: </b></td>
<td>Confirmed: <? echo $lsname; ?></td>
</tr>
<tr>
<td><b>Character Name: </b></td>
<td>Confirmed: <? echo $ccharname; ?></td>
</tr>
<tr>
<td><b>Zone Name: </b></td>
<td>Confirmed Zone: <? echo $zonename; ?>, <? echo

$long_name; ?></td>
</tr>
<tr>
<td colspan=2><input type=submit value="DO IT!"></td>
</tr>
</table>
</form>
</center>
<?php
}}}
}
}
}
} // end step 2
} else {
if (session_id() != $_POST['s_id']) {
echo "Session IDs do not match! Aborting...";
echo "<a href=\"upload.php\">Go back</a>";
exit;
}
$lsusername = $_POST['lsusername'];
$charname = $_POST['charname'];
$zoneid = 152;
$zone = "nexus";

$mhost = '127.0.0.1';
$muser = 'myusername';
$mpass = 'mypassword';
$mdb = 'peq';


// Connects to database
$link = mysql_connect($mhost, $muser, $mpass) or die

(mysql_error());
mysql_select_db($mdb, $link) or die (mysql_error());
$query = "UPDATE character_ SET zonename='$zone',zoneid=$zoneid,x=

-1,y=-1,z=-1 WHERE name='$charname'";
$result = mysql_query($query);
if (!$result) {
echo "Update Error";
echo "<a href=\"PEQ-Char-Move.php\">Go back</a>";
exit;
}


?>
<table width='300' cellpadding='0' cellspacing='2' border='0'

align='center'>
<tr>
<td colspan=2 bgcolor='#006600' align="center">
<font size="+2" color='ffffff'><b> STEP 3 OF

3</B></font>
</td>
</tr>
<tr>
<td> <?echo $charname; ?> has been moved to <? echo $zone; ?

></td>
</tr>
</table>
<a href="http://www.projecteq.net">Back</a> to Projecteq.net
<?php
}
}
?>



Does anything look wrong in there?

Thanks for the help!

Lillu
05-11-2010, 04:30 PM
this tool wont move your toon while you are ingame. it will set the toons actual location in the db, so if you log out and back on, you'll be in nexus.

besides that, if you use the default code provided by master CaveDude, it should work perfectly.

kaos00723
05-11-2010, 06:51 PM
Lmao, I think I know what happened.

I forgot that my website is hosted on a different IP than eqemu. I left 127.0.0.1 in the database connect fields thinking the database was on the same server.

I don't understand why I didn't get a db error instead but I think it's working now. :)

Longdarkhair
10-31-2010, 12:08 AM
It's here: http://www.projecteq.net/phpBB2/viewtopic.php?t=3199

We lost it when we upgraded, so I restripped the file and reposted. Sorry about that!


Is that board private? Can't access this link =/

bad_captain
10-31-2010, 12:19 AM
it is now

http://www.peqtgc.com/phpBB2/viewtopic.php?t=3199

Longdarkhair
10-31-2010, 12:51 AM
Thanks a ton!=)