|
|
 |
 |
 |
 |
|
 |
 |
|
 |
 |
|
 |
|
Development::Tools 3rd Party Tools for EQEMu (DB management tools, front ends, etc...) |

08-27-2008, 11:28 AM
|
Discordant
|
|
Join Date: Apr 2006
Posts: 374
|
|
Thanks for the reply, I am working on learning php, and currently have a basic understanding of it. I would not mind checking out the code and seeing if I can make sense of it.
To turn on the telnet function I just edit the server's xml file correct?
Thanks.
|

08-27-2008, 12:23 PM
|
Sarnak
|
|
Join Date: Aug 2008
Location: usa
Posts: 43
|
|
i would be interested in the php code also, if it's not too much trouble that is =).
|
 |
|
 |

08-27-2008, 04:58 PM
|
Sarnak
|
|
Join Date: Feb 2008
Posts: 87
|
|
This is a partial code from my new EQ Editor release fixing to come out. This is built in a class, have fun. Feel free to ask questions.
Also some of the telnet code I copied from someone else, I have changed most of it but the majority is still intact.
PHP Code:
class telnet {
// Variables
var $message = array();
var $connection;
// Connects to the World Telnet Server
function connect(){
global $cfg;
// Open Socket Connection
$this->connection = fsockopen($cfg['telnet']['address'], $cfg['telnet']['port']);
if(!$this->connection){
$this->message[] = "Error connecting to World Telnet Server";
return false;
}else{
fputs($this->connection, sprintf("%s\r", unserialize($_SESSION['EQ_EDT_USR'])));
usleep(125000);
fputs($this->connection, sprintf("%s\r", unserialize($_SESSION['EQ_EDT_PWD'])));
usleep(125000);
return true;
}
}
// Close the Telnet Connection
function close(){
fclose($this->connection);
}
// Server Uptime
function uptime(){
fputs ($this->connection, "uptime\r");
usleep(125000);
while (!feof($this->connection)){
$ret = fgets($this->connection);
if (ereg("Uptime", $ret)) {
$ret = str_replace("$user", "", $ret);
return str_replace(">", "", $ret);
break;
}
}
}
// Zone Status
function zonestatus($zone=''){
fputs ($this->connection, sprintf("zonestatus %s\r", $zone));
usleep(125000);
while(!feof($this->connection)){
$ret = fgets($this->connection);
if (ereg("$Server:", $ret)){
echo "$ret \n <br>";
}
if(ereg("avail", $ret)){
echo "$ret \n <br>";
break;
}
}
}
// Kick Character from World Server
function kick($character, $message='YOU ARE BEING KICKED FROM THE SERVER IN 4 SECONDS'){
fputs($this->connection, sprintf("tell %s %s\r", $character, $message));
sleep(4);
fputs($this->connection, sprintf("kick %s\r", $character));
$this->message[] = "Character has been kicked from server";
sleep(1);
}
// Send Character a Tell
function tell($character, $message){
fputs($this->connection, sprintf("tell %s %s\r", $character, $message));
sleep(1);
$this->message[] = sprintf("Message Sent to Character: %s", $character);
}
// Send Server a OOC Message
function ooc($message){
fputs($this->connection, sprintf("ooc %s\r", $message));
sleep(1);
$this->message[] = "Message sent to OOC";
}
// Broadcast Message Server Wide
function broadcast($message){
fputs($this->connection, sprintf("broadcast %s\r", $message));
sleep(1);
$this->message[] = "Broadcast Message Sent to World Server";
}
// Who/Who All
function whoall($who=''){
fputs ($this->connection, sprintf("who%s\r", $who));
usleep(125000);
while (!feof($this->connection)) {
$ret_tmp = fgets($this->connection);
if(ereg("zone", $ret_tmp)){
$ret[++$x] = $ret_tmp;
}
if(ereg("online", $ret_tmp)){
break;
}
}
// Process each line of the returned results
foreach ($ret as $key => $value) {
// Original Return
$players[$key]['original'] = $value;
// GM Status
if (preg_match("/\*.*\*/", $value, $matches)) {
$players[$key]['GM'] = trim($matches[0], "* ");
}
// Role/Anon, Level & Class
if (preg_match("/\[.*\]/", $value, $matches)) {
$tmp = explode(" ", trim($matches[0], "[] "));
if (!is_numeric($tmp[0])) {
$players[$key]['Visible'] = $tmp[0];
$players[$key]['Level'] = $tmp[1];
$players[$key]['Class'] = rtrim($tmp[2] . " " . $tmp[3], " ");
} else {
$players[$key]['Level'] = $tmp[0];
$players[$key]['Class'] = rtrim($tmp[1] . " " . $tmp[2], " ");
}
}
// Character's Name
if(preg_match("/\].*\(/", $value, $matches)){
$players[$key]['Name'] = trim($matches[0], "] (");
}
// Race
if(preg_match("/\(.*\)/", $value, $matches)){
$players[$key]['Race'] = trim($matches[0], "( )");
}
// Zone
if(preg_match("/zone:.*AccID:/", $value, $matches)){
$players[$key]['ZoneLong'] = substr($matches[0], 6, -7);
}
// Account ID
if(preg_match("/AccID:.*AccName:/", $value, $matches)){
$players[$key]['AcctID'] = substr($matches[0], 7, -9);
}
// Account Name
if(preg_match("/AccName:.*LSID:/", $value, $matches)){
$players[$key]['AcctName'] = substr($matches[0], 9, -6);
}
// Login Server ID
if(preg_match("/LSID:.*Status:/", $value, $matches)){
$players[$key]['LSID'] = substr($matches[0], 6, -8);
}
// Status
if(preg_match("/Status:.*/", $value, $matches)){
$players[$key]['Status'] = substr($matches[0], 8, 3);
}
}
// Return Player Array
return $players;
}
}
|
 |
|
 |

08-29-2008, 08:55 AM
|
Discordant
|
|
Join Date: Apr 2006
Posts: 374
|
|
Thanks for posting the code, seems I just get a blank page though when I load it. Currently the only things I changed were I added the php code tags, and I changed the 'address' to my eqemu server's local IP address and 'port' to '9000'. I enabled telnet in the eqemu xml config file and restarted the server. When I telnet to the server using a command prompt in windows I am able to connect and issue commands like status and who all.
I must be missing something... any ideas?
|
 |
|
 |

08-29-2008, 06:58 PM
|
Sarnak
|
|
Join Date: Feb 2008
Posts: 87
|
|
Yea, LOTS....
This is a php class that you must call and then call each function you want performed, also you need to input your username/password.
Replace
$this->connection = fsockopen($cfg['telnet']['address'], $cfg['telnet']['port']);
with
$this->connection = fsockopen('your server ip address', 9000);
9000 is the default port, change it to match what your server's is.
Also change
fputs($this->connection, sprintf("%s\r", unserialize($_SESSION['EQ_EDT_USR'])));
and
fputs($this->connection, sprintf("%s\r", unserialize($_SESSION['EQ_EDT_PWD'])));
and replace the
unserialize($_SESSION'EQ_EDT_USR']) and unserialize($_SESSION['EQ_EDT_PWD'])
with your EQ EMU Username and Password.. This checks the account table in the database. Make sure your username and password is like this:
fputs($this->connection, sprintf("%s\r", 'username'));
fputs($this->connection, sprintf("%s\r", 'password'));
After that you need to call the class and then the functions below the script.
Example:
PHP Code:
<?php
class telnet {
// Variables
var $message = array();
var $connection;
// Connects to the World Telnet Server
function connect(){
global $cfg;
// Open Socket Connection
$this->connection = fsockopen('127.0.0.1', 9000);
if(!$this->connection){
$this->message[] = "Error connecting to World Telnet Server";
return false;
}else{
fputs($this->connection, sprintf("%s\r", 'username'));
usleep(125000);
fputs($this->connection, sprintf("%s\r", 'password'));
usleep(125000);
return true;
}
}
// Close the Telnet Connection
function close(){
fclose($this->connection);
}
// Server Uptime
function uptime(){
fputs ($this->connection, "uptime\r");
usleep(125000);
while (!feof($this->connection)){
$ret = fgets($this->connection);
if (ereg("Uptime", $ret)) {
$ret = str_replace("$user", "", $ret);
return str_replace(">", "", $ret);
break;
}
}
}
// Zone Status
function zonestatus($zone=''){
fputs ($this->connection, sprintf("zonestatus %s\r", $zone));
usleep(125000);
while(!feof($this->connection)){
$ret = fgets($this->connection);
if (ereg("$Server:", $ret)){
echo "$ret \n <br>";
}
if(ereg("avail", $ret)){
echo "$ret \n <br>";
break;
}
}
}
// Kick Character from World Server
function kick($character, $message='YOU ARE BEING KICKED FROM THE SERVER IN 4 SECONDS'){
fputs($this->connection, sprintf("tell %s %s\r", $character, $message));
sleep(4);
fputs($this->connection, sprintf("kick %s\r", $character));
$this->message[] = "Character has been kicked from server";
sleep(1);
}
// Send Character a Tell
function tell($character, $message){
fputs($this->connection, sprintf("tell %s %s\r", $character, $message));
sleep(1);
$this->message[] = sprintf("Message Sent to Character: %s", $character);
}
// Send Server a OOC Message
function ooc($message){
fputs($this->connection, sprintf("ooc %s\r", $message));
sleep(1);
$this->message[] = "Message sent to OOC";
}
// Broadcast Message Server Wide
function broadcast($message){
fputs($this->connection, sprintf("broadcast %s\r", $message));
sleep(1);
$this->message[] = "Broadcast Message Sent to World Server";
}
// Who/Who All
function whoall($who=''){
fputs ($this->connection, sprintf("who%s\r", $who));
usleep(125000);
while (!feof($this->connection)) {
$ret_tmp = fgets($this->connection);
if(ereg("zone", $ret_tmp)){
$ret[++$x] = $ret_tmp;
}
if(ereg("online", $ret_tmp)){
break;
}
}
// Process each line of the returned results
foreach ($ret as $key => $value) {
// Original Return
$players[$key]['original'] = $value;
// GM Status
if (preg_match("/\*.*\*/", $value, $matches)) {
$players[$key]['GM'] = trim($matches[0], "* ");
}
// Role/Anon, Level & Class
if (preg_match("/\[.*\]/", $value, $matches)) {
$tmp = explode(" ", trim($matches[0], "[] "));
if (!is_numeric($tmp[0])) {
$players[$key]['Visible'] = $tmp[0];
$players[$key]['Level'] = $tmp[1];
$players[$key]['Class'] = rtrim($tmp[2] . " " . $tmp[3], " ");
} else {
$players[$key]['Level'] = $tmp[0];
$players[$key]['Class'] = rtrim($tmp[1] . " " . $tmp[2], " ");
}
}
// Character's Name
if(preg_match("/\].*\(/", $value, $matches)){
$players[$key]['Name'] = trim($matches[0], "] (");
}
// Race
if(preg_match("/\(.*\)/", $value, $matches)){
$players[$key]['Race'] = trim($matches[0], "( )");
}
// Zone
if(preg_match("/zone:.*AccID:/", $value, $matches)){
$players[$key]['ZoneLong'] = substr($matches[0], 6, -7);
}
// Account ID
if(preg_match("/AccID:.*AccName:/", $value, $matches)){
$players[$key]['AcctID'] = substr($matches[0], 7, -9);
}
// Account Name
if(preg_match("/AccName:.*LSID:/", $value, $matches)){
$players[$key]['AcctName'] = substr($matches[0], 9, -6);
}
// Login Server ID
if(preg_match("/LSID:.*Status:/", $value, $matches)){
$players[$key]['LSID'] = substr($matches[0], 6, -8);
}
// Status
if(preg_match("/Status:.*/", $value, $matches)){
$players[$key]['Status'] = substr($matches[0], 8, 3);
}
}
// Return Player Array
return $players;
}
}
$telnet = new telnet;
$telnet->connect();
$telnet->broadcast('This is a test message from your GM Please sign out NOW!');
$telnet->close();
?>
or you can call more than 1 function before the session is closed.
PHP Code:
$telnet = new telnet;
$telnet->connect();
$telnet->broadcast('This is a test message from your GM Please sign out NOW!');
$telnet->kick('icantplayeq', 'I DONT LIKE YOU SO IM KICKING YOU');
$telnet->close();
|
 |
|
 |
 |
|
 |

09-04-2008, 12:02 PM
|
Discordant
|
|
Join Date: Apr 2006
Posts: 374
|
|
I made all the edits that you suggested and still end up with a blank page.
Here is my page called index.php
PHP Code:
<?php class telnet {
// Variables var $message = array(); var $connection;
// Connects to the World Telnet Server function connect(){ global $cfg; // Open Socket Connection $this->connection = fsockopen('192.168.2.6', 9000);
if(!$this->connection){ $this->message[] = "Error connecting to World Telnet Server"; return false; }else{ fputs($this->connection, sprintf("%s\r", 'my-user-name')); usleep(125000); fputs($this->connection, sprintf("%s\r", 'my-password')); usleep(125000); return true; } } // Close the Telnet Connection function close(){ fclose($this->connection); } // Server Uptime function uptime(){ fputs ($this->connection, "uptime\r"); usleep(125000); while (!feof($this->connection)){ $ret = fgets($this->connection); if (ereg("Uptime", $ret)) { $ret = str_replace("$user", "", $ret); return str_replace(">", "", $ret); break; } } } // Zone Status function zonestatus($zone=''){ fputs ($this->connection, sprintf("zonestatus %s\r", $zone)); usleep(125000); while(!feof($this->connection)){ $ret = fgets($this->connection); if (ereg("$Server:", $ret)){ echo "$ret \n <br>"; } if(ereg("avail", $ret)){ echo "$ret \n <br>"; break; } } } // Kick Character from World Server function kick($character, $message='YOU ARE BEING KICKED FROM THE SERVER IN 4 SECONDS'){ fputs($this->connection, sprintf("tell %s %s\r", $character, $message)); sleep(4); fputs($this->connection, sprintf("kick %s\r", $character)); $this->message[] = "Character has been kicked from server"; sleep(1); } // Send Character a Tell function tell($character, $message){ fputs($this->connection, sprintf("tell %s %s\r", $character, $message)); sleep(1); $this->message[] = sprintf("Message Sent to Character: %s", $character); } // Send Server a OOC Message function ooc($message){ fputs($this->connection, sprintf("ooc %s\r", $message)); sleep(1); $this->message[] = "Message sent to OOC"; } // Broadcast Message Server Wide function broadcast($message){ fputs($this->connection, sprintf("broadcast %s\r", $message)); sleep(1); $this->message[] = "Broadcast Message Sent to World Server"; } // Who/Who All function whoall($who=''){ fputs ($this->connection, sprintf("who%s\r", $who)); usleep(125000);
while (!feof($this->connection)) { $ret_tmp = fgets($this->connection);
if(ereg("zone", $ret_tmp)){ $ret[++$x] = $ret_tmp; } if(ereg("online", $ret_tmp)){ break; } }
// Process each line of the returned results foreach ($ret as $key => $value) { // Original Return $players[$key]['original'] = $value;
// GM Status if (preg_match("/\*.*\*/", $value, $matches)) { $players[$key]['GM'] = trim($matches[0], "* "); } // Role/Anon, Level & Class if (preg_match("/\[.*\]/", $value, $matches)) { $tmp = explode(" ", trim($matches[0], "[] ")); if (!is_numeric($tmp[0])) { $players[$key]['Visible'] = $tmp[0]; $players[$key]['Level'] = $tmp[1]; $players[$key]['Class'] = rtrim($tmp[2] . " " . $tmp[3], " "); } else { $players[$key]['Level'] = $tmp[0]; $players[$key]['Class'] = rtrim($tmp[1] . " " . $tmp[2], " "); } } // Character's Name if(preg_match("/\].*\(/", $value, $matches)){ $players[$key]['Name'] = trim($matches[0], "] ("); } // Race if(preg_match("/\(.*\)/", $value, $matches)){ $players[$key]['Race'] = trim($matches[0], "( )"); } // Zone if(preg_match("/zone:.*AccID:/", $value, $matches)){ $players[$key]['ZoneLong'] = substr($matches[0], 6, -7); } // Account ID if(preg_match("/AccID:.*AccName:/", $value, $matches)){ $players[$key]['AcctID'] = substr($matches[0], 7, -9); } // Account Name if(preg_match("/AccName:.*LSID:/", $value, $matches)){ $players[$key]['AcctName'] = substr($matches[0], 9, -6); } // Login Server ID if(preg_match("/LSID:.*Status:/", $value, $matches)){ $players[$key]['LSID'] = substr($matches[0], 6, -8); } // Status if(preg_match("/Status:.*/", $value, $matches)){ $players[$key]['Status'] = substr($matches[0], 8, 3); } } // Return Player Array return $players; }
}
$telnet = new telnet; $telnet->connect(); $telnet->broadcast('This is a test message from the GM Please sign out NOW!'); $telnet->close(); ?>
|
 |
|
 |

09-04-2008, 06:01 PM
|
Sarnak
|
|
Join Date: Feb 2008
Posts: 87
|
|
You are supposed to end up with a blank page.... There is nothing that is supposed to print out on the screen. All that I gave you is basically the "back end" of a program/script.
The real question is did it work for you? It should have, next time log in to the server and then run this script once more and see if it shows up in EQ...
Also you might be missing something in PHP or apache or something..
Look in your error logs to see if this script had an error.
|
Thread Tools |
|
Display Modes |
Hybrid Mode
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -4. The time now is 08:24 AM.
|
|
 |
|
 |
|
|
|
 |
|
 |
|
 |