[REQUEST]pwAdmin knockoff

Results 1 to 10 of 10
  1. #1
    はじめまして Henmoro is offline
    DeveloperRank
    Aug 2010 Join Date
    ♏ḁԻṧLocation
    1,134Posts

    [REQUEST]pwAdmin knockoff

    Well okay first off I know about the search button and all.
    However what I am looking for I couldn't find..
    I'm looking for something similiar to pwAdmin, Or iwebs, but also works like a GM panel, I'm working on a side PWE project, and I'd like to find a *.php setup instead of a ":8080" setup, Would any of you guys know anything released like this, or something similiar to this effect?
    Thanks!


  2. #2
    Enthusiast Expedition is offline
    MemberRank
    Jan 2014 Join Date
    41Posts

    Re: [REQUEST]pwAdmin knockoff

    Very few people know how to do an admin panel completely via PHP. Unfortunately, I'm not one of them.
    Your best bet is to make PHP sort of a front end that uses wget to communicate with the tomcat backend. Highly inefficient but, that's probably the best you got for now to the best of my knowledge, sorry.

  3. #3
    The One And Only DaMadBoy is offline
    MemberRank
    Jun 2009 Join Date
    Behind You!Location
    545Posts

    Re: [REQUEST]pwAdmin knockoff

    As far as I know it would be highly unlikely to be able to do this in PHP as the server needs java class files to do almost everything except basic MySQL tasks like granting GM permissions or adding new accounts, changing passwords and such. Think there is a basic admin panel that does basic tasks like the ones I mentioned but for thing like XML edit, viewing character data, changing exp rates and other things you would need pwAdmin, iweb or a custom panel written in java.

  4. #4
    はじめまして Henmoro is offline
    DeveloperRank
    Aug 2010 Join Date
    ♏ḁԻṧLocation
    1,134Posts

    Re: [REQUEST]pwAdmin knockoff

    Alright. Thank you very much! I figured as much, but you never know what you could find! I'm doing a JD project at the moment, which I know is off topic with this section, However the JD section isn't exactly as active as it is here. pwAdmin doesn't exactly function right with JD, I dont do well with JQuery and Java so I can't exactly work around it. I would like to base a system for someone I'm dev'ing for. If anyone has any offers or suggests you're welcome to message me in a PM about it, as it's not allowed to speak about$ related or staff hirings here, etc.. And this way it'll be more proper,
    I'm just trying to do my best for these people I'm doing the project for as they are really great friends!
    Even though I'm a mod, I'm still a dev! I just have a few more responsibilties to take care of! :P

  5. #5
    Nerd-IO Romulan is offline
    MemberRank
    Feb 2009 Join Date
    BelgiumLocation
    3,333Posts

    Re: [REQUEST]pwAdmin knockoff

    Well it's better for you to learn Java and use the existing things in iweb than rewrite everything from scratch in php. Unless you exactly know how works the PW games protocols and packets, you will go nowhere with php.

  6. #6
    uint is best int. Swoosh91 is offline
    MemberRank
    Feb 2010 Join Date
    BerlinLocation
    712Posts

    Re: [REQUEST]pwAdmin knockoff

    Quote Originally Posted by DaMadBoy View Post
    As far as I know it would be highly unlikely to be able to do this in PHP as the server needs java class files to do almost everything except basic MySQL tasks like granting GM permissions or adding new accounts, changing passwords and such. Think there is a basic admin panel that does basic tasks like the ones I mentioned but for thing like XML edit, viewing character data, changing exp rates and other things you would need pwAdmin, iweb or a custom panel written in java.
    Wrong, everything iweb does is call server functions via RPC. Knowing the protocol will allow you to use basic php sockets to do the same thing, without needing crappy JSP solutions such as pwadmin or iweb (no offence to ronny, I just don't like jsp).

    Example :

    Some class we want to fill...

    PHP Code:
    class pwCharInfo {
        
        public 
    $level;
        public 
    $cultivation;
        public 
    $exp;
        public 
    $sp;
        public 
    $skillPoints;
        public 
    $HP;
        public 
    $MP;
        public 
    $PosX;
        public 
    $PosY;
        public 
    $PosZ;
        public 
    $worldTag;
        public 
    $invaderState;
        public 
    $invaderTime;
        public 
    $pariahTime;
        public 
    $reputation;
        public 
    $customStatusOctetLength;
        public 
    $customStatus;
        public 
    $filterDataOctetLength;
        public 
    $filterDataOctets;
        public 
    $characterModeOctetLength;
        public 
    $characterModeOctets;
        public 
    $instanceKeyListOctetLength;
        public 
    $instanceKeyList;
        public 
    $dblTimeExpire;
        public 
    $dblTimeMode;
        public 
    $dblTimeBegin;
        public 
    $dblTimeUsed;
        public 
    $dblTimeMax;
        public 
    $timeUsed;
        public 
    $dblTimeDataOctetLength;
        public 
    $dblTimeDataOctets;
        public 
    $storesize;
        public 
    $petBagOctetLength;
        public 
    $petBagOctets;
        public 
    $propertyOctetLength;
        public 
    $propertyOctets;
        public 
    $property;
        public 
    $varDataOctetLength;
        public 
    $varDataOctets;
        public 
    $skillsOctetLength;
        public 
    $skillsOctets;
        public 
    $skills;
        public 
    $bankPasswordOctetLength;
        public 
    $bankPasswordOctets
        public 
    $wayPointListOctetLength;
        public 
    $wayPointListOctets;   
        public 
    $coolingTimeOctetLength;
        public 
    $coolingTimeOctets;  
        public 
    $npcRelationOctetLength;
        public 
    $npcRelationOctets
        public 
    $multiExpControlOctetLength;
        public 
    $multiExpControlOctets
        public 
    $storageTaskOctetLength;
        public 
    $storageTaskOctets
        public 
    $factionContributionOctetLength;
        public 
    $factionContributionOctets
        
    //NEW IN 1.4.5
        
    public $forceDataOctetLength;
        public 
    $forceDataOctets
        public 
    $onlineRewardOctetLength;
        public 
    $onlineRewardOctets
        public 
    $profitTimeDataOctetLength;
        public 
    $profitTimeDataOctets;      
        
    //NEW END
        
        
    public $reserved32//NOW 1 BYTE IN 145
        
    public $reserved4;
        public 
    $reserved5;
          

    PHP Code:
    $GRoleData->pwCharInfo $this->parseCharacterInfoPacket($packetResult); 
    Now for reading a packet we recieved...

    PHP Code:
       private function parseCharacterInfoPacket($packetResult){
            
            
            
    //format : All Big_Endian, see pwCharInfo
            
            
    $charinfo = new pwCharInfo;
            
            
            
    $packetResult->data->readData(1); //version
            
    $charinfo->level $packetResult->data->readInt_Big_Endian();
            
    $charinfo->cultivation $packetResult->data->readInt_Big_Endian();
            
    $charinfo->exp $packetResult->data->readInt_Big_Endian();
            
    $charinfo->sp $packetResult->data->readInt_Big_Endian();
            
    $charinfo->skillPoints $packetResult->data->readInt_Big_Endian();
            
    $charinfo->HP $packetResult->data->readInt_Big_Endian();
            
    $charinfo->MP $packetResult->data->readInt_Big_Endian();
            
    $charinfo->PosX $packetResult->data->readFloat_Big_Endian();
            
    $charinfo->PosY $packetResult->data->readFloat_Big_Endian();
            
    $charinfo->PosZ $packetResult->data->readFloat_Big_Endian();
            
    $charinfo->worldTag $packetResult->data->readInt_Big_Endian();
            
    $charinfo->invaderState $packetResult->data->readInt_Big_Endian();
            
    $charinfo->invaderTime $packetResult->data->readInt_Big_Endian();
            
    $charinfo->pariahTime $packetResult->data->readInt_Big_Endian();
            
    $charinfo->reputation $packetResult->data->readInt_Big_Endian();
            
    $charinfo->customStatusOctetLength $packetResult->data->readCUInt();
            
    $charinfo->customStatus $packetResult->data->readOctets($charinfo->customStatusOctetLength);
            
    $charinfo->filterDataOctetLength $packetResult->data->readCUInt();
            
    $charinfo->filterDataOctets $packetResult->data->readOctets($charinfo->filterDataOctetLength);
            
    $charinfo->characterModeOctetLength $packetResult->data->readCUInt();
            
    $charinfo->characterModeOctets $packetResult->data->readOctets($charinfo->characterModeOctetLength);
            
    $charinfo->instanceKeyListOctetLength $packetResult->data->readCUInt();                
            
    $charinfo->instanceKeyList $packetResult->data->readOctets($charinfo->instanceKeyListOctetLength);
            
    $charinfo->dblTimeExpire  $packetResult->data->readInt_Big_Endian();
            
    $charinfo->dblTimeMode  $packetResult->data->readInt_Big_Endian();
            
    $charinfo->dblTimeBegin  $packetResult->data->readInt_Big_Endian();
            
    $charinfo->dblTimeUsed  $packetResult->data->readInt_Big_Endian();
            
    $charinfo->dblTimeMax  $packetResult->data->readInt_Big_Endian();
            
    $charinfo->timeUsed  $packetResult->data->readInt_Big_Endian();
            
    $charinfo->dblTimeDataOctetLength $packetResult->data->readCUInt();   
            
    $charinfo->dblTimeDataOctets $packetResult->data->readOctets($charinfo->dblTimeDataOctetLength);
            
    $charinfo->storesize $packetResult->data->readData(2); //unimportant
            
    $charinfo->petBagOctetLength $packetResult->data->readCUInt();                
            
    $charinfo->petBagOctets $packetResult->data->readOctets($charinfo->petBagOctetLength); 
            
               
            
    $charinfo->propertyOctetLength $packetResult->data->readCUInt();                
            
            
            
    $cProperty = new pwCharacterProperty;
            
            
    $cProperty->vit $packetResult->data->readInt_Big_Endian(); //little endian
            
    $cProperty->mag $packetResult->data->readInt_Big_Endian(); //little endian
            
    $cProperty->str $packetResult->data->readData(4); //little endian
            
    $cProperty->dex $packetResult->data->readData(4); //little endian
            
            
    $charinfo->property $cProperty;
            
            
    $packetResult->data->readData($charinfo->propertyOctetLength 16); // 4 * int, rest is junk...
            
            
            
                 
            
    $charinfo->varDataOctetLength $packetResult->data->readCUInt();                
            
    $charinfo->varDataOctets $packetResult->data->readOctets($charinfo->varDataOctetLength);
              
            
    $charinfo->skillsOctetLength $packetResult->data->readCUInt();                
            
    $charinfo->skillsOctets $packetResult->data->readOctets($charinfo->skillsOctetLength);  
            
            
    $sbuf = new SwooshBuffer();
            
    $sbuf->writeData($charinfo->skillsOctetLength,$charinfo->skillsOctets);
            
    $sbuf->resetPosition();
            
    $charinfo->skills = new pwSkills;
            
    $charinfo->skills->nSkills $sbuf->readData(1); //1 byte
            
            
    for ($i=0;$i<$charinfo->skills->nSkills;$i++)
            {
             
    $charinfo->skills->skills[$i] = new pwSkill;
             
    $charinfo->skills->skills[$i]->id $sbuf->readInt_Big_Endian();
             
    $sbuf->skipBytes(4);
             
    $charinfo->skills->skills[$i]->level $sbuf->readInt_Big_Endian();   
            }
                  
             
            
    $charinfo->bankPasswordOctetLength $packetResult->data->readCUInt();                
            
    $charinfo->bankPasswordOctets $packetResult->data->readOctets($charinfo->bankPasswordOctetLength);          
            
    $charinfo->wayPointListOctetLength $packetResult->data->readCUInt();                
            
    $charinfo->wayPointListOctets $packetResult->data->readOctets($charinfo->wayPointListOctetLength);  
            
    $charinfo->coolingTimeOctetLength $packetResult->data->readCUInt();                
            
    $charinfo->coolingTimeOctets $packetResult->data->readOctets($charinfo->coolingTimeOctetLength);  
            
    $charinfo->npcRelationOctetLength $packetResult->data->readCUInt();                
            
    $charinfo->npcRelationOctets $packetResult->data->readOctets($charinfo->npcRelationOctetLength);          
            
    $charinfo->multiExpControlOctetLength $packetResult->data->readCUInt();                
            
    $charinfo->multiExpControlOctets $packetResult->data->readOctets($charinfo->multiExpControlOctetLength);          
            
    $charinfo->storageTaskOctetLength $packetResult->data->readCUInt();                
            
    $charinfo->storageTaskOctets $packetResult->data->readOctets($charinfo->storageTaskOctetLength);          
            
    $charinfo->factionContributionOctetLength $packetResult->data->readCUInt();                
            
    $charinfo->factionContributionOctets $packetResult->data->readOctets($charinfo->factionContributionOctetLength);    
                
            
    //NEW IN 1.4.5
            
    $charinfo->forceDataOctetLength $packetResult->data->readCUInt();                
            
    $charinfo->forceDataOctetOctets $packetResult->data->readOctets($charinfo->forceDataOctetLength);
            
    $charinfo->onlineRewardOctetLength $packetResult->data->readCUInt();                
            
    $charinfo->onlineRewardOctets $packetResult->data->readOctets($charinfo->onlineRewardOctetLength);     
            
    $charinfo->profitTimeDataOctetLength $packetResult->data->readCUInt();                
            
    $charinfo->profitTimeDataOctets $packetResult->data->readOctets($charinfo->profitTimeDataOctetLength);  
            
    // END NEW
                 
            
    $charinfo->reserved32 $packetResult->data->readData(1);   //NOW ONE BYTE IN 145 
            
    $charinfo->reserved4 $packetResult->data->readInt_Big_Endian();    
            
    $charinfo->reserved5 $packetResult->data->readInt_Big_Endian();                        
            return 
    $charinfo;     
            
        } 
    I hope that helps.

    Quote Originally Posted by Henmoro View Post
    and I'd like to find a *.php setup instead of a ":8080" setup,
    You sound like you're kind of new to non-wanmei related server stuff? In that case it would help if you read up on them, boosts your understanding.
    Last edited by Swoosh91; 12-03-14 at 04:58 PM.

  7. #7
    The One And Only DaMadBoy is offline
    MemberRank
    Jun 2009 Join Date
    Behind You!Location
    545Posts

    Re: [REQUEST]pwAdmin knockoff

    Well, I did say as far as I know. :P Thanks for the info though, I didn't realise it could be done in PHP. Might even give it a go myself.

  8. #8
    Apprentice ricimal is offline
    MemberRank
    Apr 2010 Join Date
    8Posts

    Re: [REQUEST]pwAdmin knockoff

    im not sure if this will help any but this is how i view role names via php

    PHP Code:
    <?php
    $GameServer 
    "localhost";    
    $GamedbPort "29400";
    $userid "1024"//Change User ID to what ever user id you want :)

    function grin($data)
    {
        if(
    $data 64)
                return 
    strrev(pack("C"$data));
        else if(
    $data 16384)
                return 
    strrev(pack("S", ($data 0x8000)));
        else if(
    $data 536870912)
                return 
    strrev(pack("I", ($data 0xC0000000)));
        return 
    strrev(pack("c", -32) . pack("I"$data));
    }
    $sock socket_create(AF_INETSOCK_STREAMSOL_TCP);
            if(!
    $sock)
            {
                die(
    socket_strerror(socket_last_error()));
            }
            if(
    socket_connect($sock$GameServer$GamedbPort))
            {
                
    socket_set_block($sock);
                
    $data grin(3401)."\x08\x80\x00\x00\x01".pack("N"$userid);
                    
                
    $sbytes socket_send($sock$data81920);
                
    $rbytes socket_recv($sock$buf81920);
                
                
    $strlarge unpack"H"substr$buf2) );
                if(
    substr($strlarge[1], 01) == "8")
                {
                    
    $start 12;
                }
                else
                {
                    
    $start 11;
                }
                
    $rolescount unpack"c"substr$buf$start) );
                
    $start $start+1;
                
    $top ="<center><font color=Red><b> Your Role's</b></center></font>
                <center><table border cellpadding=1 overflow=auto height=50px width=450px>
                <td width='200' align='center'><font color=#6599FF>Role_id</td>
                <td width='200' align='center'><font color=#6599FF>Name</td>
                </font></tr>"
    ;
                echo 
    $top;
                for(
    $nothing=0$i<$rolescount[1]; $i++)
                {
                    
    $roleid unpack"N"substr$buf$start) );
                    
    $start $start+4;
                    
    $namelarge unpack"c*"substr$buf$start) );
                    
    $start $start+1;
                    
    $rolename iconv"UTF-16""UTF-8"substr$buf$start$namelarge[1] ) );
                    
    $start $start+$namelarge[1];

        
    $roles_acc .=    "<tr> 
                <td><center><b><font color=Red> 
    {$roleid[1]} </font></b></center></td> 
                <td><center><b><font color=Red> 
    {$rolename} </font></b></center></td>";                        
        }
        echo 
    $roles_acc;
    $bot "</table><br /><br />";
    echo 
    $bot;
    }

    ?>
    Last edited by ricimal; 13-03-14 at 09:34 PM.

  9. #9
    はじめまして Henmoro is offline
    DeveloperRank
    Aug 2010 Join Date
    ♏ḁԻṧLocation
    1,134Posts

    Re: [REQUEST]pwAdmin knockoff

    Quote Originally Posted by Swoosh91 View Post
    You sound like you're kind of new to non-wanmei related server stuff? In that case it would help if you read up on them, boosts your understanding.
    I'm not new to Wanmei servers, Php sycing/java etc, I'm not good at. So that's about correct there, I can code php, but only to an extent. I don't mess with perfect world often, JD has other methods for iwebs, I know :8080 is a tomcat port used for.jsp pages. I don't mess with protocals often, and I wanted to base something from a panel for the GM's,. It's true I still have things to learn, however when it comes to auth/Gamedeliveryd protocals/commands, I do not know how to work with them, I know the standerd setup for it, but with JD is completely different than PW so I was hoping too study how a *.php coding for PW would be, and work around to see what I could do with JD.
    PW section is more advance in things like this than the other wanmei sections, so it does take a bit to learn things like this, but unlike this section, you dont have people in the other sections that work on the game like you guys here do. So it can become a bit confusing if you don't know where to start and such.
    --
    And alright ricimal I will look at it, I have a mysql table that normally syncs up the characters standred data, but I could possibly work with this to make a feww things.
    Last edited by Henmoro; 12-03-14 at 11:54 PM.

  10. #10
    Account Upgraded | Title Enabled! elche27 is offline
    MemberRank
    Dec 2004 Join Date
    TucumanLocation
    302Posts

    Re: [REQUEST]pwAdmin knockoff

    Quote Originally Posted by ricimal View Post
    im not sure if this will help any but this is how i view role names via php

    PHP Code:
    <?php
    $GameServer 
    "localhost";    
    $GamedbPort "29400";
    $userid "1024"//Change User ID to what ever user id you want :)

    function grin($data)
    {
        if(
    $data 64)
                return 
    strrev(pack("C"$data));
        else if(
    $data 16384)
                return 
    strrev(pack("S", ($data 0x8000)));
        else if(
    $data 536870912)
                return 
    strrev(pack("I", ($data 0xC0000000)));
        return 
    strrev(pack("c", -32) . pack("I"$data));
    }
    $sock socket_create(AF_INETSOCK_STREAMSOL_TCP);
            if(!
    $sock)
            {
                die(
    socket_strerror(socket_last_error()));
            }
            if(
    socket_connect($sock$GameServer$GamedbPort))
            {
                
    socket_set_block($sock);
                
    $data grin(3401)."\x08\x80\x00\x00\x01".pack("N"$userid);
                    
                
    $sbytes socket_send($sock$data81920);
                
    $rbytes socket_recv($sock$buf81920);
                
                
    $strlarge unpack"H"substr$buf2) );
                if(
    substr($strlarge[1], 01) == "8")
                {
                    
    $start 12;
                }
                else
                {
                    
    $start 11;
                }
                
    $rolescount unpack"c"substr$buf$start) );
                
    $start $start+1;
                
    $top ="<center><font color=Red><b> Your Role's</b></center></font>
                <center><table border cellpadding=1 overflow=auto height=50px width=450px>
                <td width='200' align='center'><font color=#6599FF>Role_id</td>
                <td width='200' align='center'><font color=#6599FF>Name</td>
                </font></tr>"
    ;
                echo 
    $top;
                for(
    $nothing=0$i<$rolescount[1]; $i++)
                {
                    
    $roleid unpack"N"substr$buf$start) );
                    
    $start $start+4;
                    
    $namelarge unpack"c*"substr$buf$start) );
                    
    $start $start+1;
                    
    $rolename iconv"UTF-16""UTF-8"substr$buf$start$namelarge[1] ) );
                    
    $start $start+$namelarge[1];

        
    $roles_acc .=    "<tr> 
                <td><center><b><font color=Red> 
    {$roleid[1]} </font></b></center></td> 
                <td><center><b><font color=Red> 
    {$rolename} </font></b></center></td>";                        
        }
        echo 
    $roles_acc;
    $bot "</table><br /><br />";
    echo 
    $bot;
    }

    ?>
    Hello Mr ricimal, thank for share your code but could you explain a little more this section

    Code:
     socket_set_block($sock);
                $data = grin(3401)."\x08\x80\x00\x00\x01".pack("N", $userid);
                    
                $sbytes = socket_send($sock, $data, 8192, 0);
                $rbytes = socket_recv($sock, $buf, 8192, 0);
                
                $strlarge = unpack( "H", substr( $buf, 2, 1 ) );
                if(substr($strlarge[1], 0, 1) == "8")
                {
                    $start = 12;
                }
                else
                {
                    $start = 11;
                }
                $rolescount = unpack( "c", substr( $buf, $start, 1 ) );
    and the meaning of the foreign words in the pics as role's name or share a link to read it and undertand.


    Thank you in advance!!
    Last edited by elche27; 16-03-14 at 06:45 PM.



Advertisement