Merge branch 'master' of mojotrollz.eu:wow-server/mojo_zero_web into Test
@ -1,2 +1,9 @@
|
||||
<?php
|
||||
class api_mojotrollz extends \SYSTEM\API\api_system {}
|
||||
class api_mojotrollz extends \SYSTEM\API\api_system {
|
||||
|
||||
public static function call_stats(){
|
||||
$result = \DBD\ONLINE_STATS::QA(array('3600'));
|
||||
return \SYSTEM\LOG\JsonResult::toString($result);}
|
||||
public static function call_charcreation($json=NULL){
|
||||
return charcreation::data($json);}
|
||||
}
|
||||
|
||||
@ -1,3 +1,8 @@
|
||||
<?php
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__),'');
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/db','');
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/server','');
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/realm','');
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/world','');
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/database','');
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/charcreation','');
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/client','');
|
||||
53
mojotrollz/api/charcreation/charcreation.php
Normal file
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
class charcreation {
|
||||
const DEFAULT_CHAR_NAME = 'Charactername';
|
||||
const DEFAULT_CHAR_GENDER = 'default';
|
||||
const DEFAULT_CHAR_RACE = 'default';
|
||||
const DEFAULT_CHAR_CLASS = 'default';
|
||||
const MOJO_CC_SESSIONKEY = 'mojo_charcreation';
|
||||
const DEFAULT_CHAR_APPEARANCE = 0;
|
||||
public static function data($json = NULL){
|
||||
if(!\SYSTEM\SECURITY\Security::load(self::MOJO_CC_SESSIONKEY)){
|
||||
\SYSTEM\SECURITY\Security::save(self::MOJO_CC_SESSIONKEY, self::session_default());}
|
||||
//write
|
||||
if($json){
|
||||
$json = json_decode($json);
|
||||
foreach($json as $key=>$value){
|
||||
if(method_exists('charcreation_validator',$key)){
|
||||
call_user_func('charcreation_validator::'.$key,$value);}
|
||||
}
|
||||
}
|
||||
return JsonResult::toString(\SYSTEM\SECURITY\Security::load(self::MOJO_CC_SESSIONKEY));
|
||||
}
|
||||
|
||||
private static function session_default(){
|
||||
return array( 'char_name' => self::DEFAULT_CHAR_NAME,
|
||||
'char_gender' => self::DEFAULT_CHAR_GENDER,
|
||||
'char_race' => self::DEFAULT_CHAR_RACE,
|
||||
'char_class' => self::DEFAULT_CHAR_CLASS,
|
||||
'char_skin_color' => self::DEFAULT_CHAR_APPEARANCE,
|
||||
'char_hair' => self::DEFAULT_CHAR_APPEARANCE,
|
||||
'char_hair_color' => self::DEFAULT_CHAR_APPEARANCE,
|
||||
'char_face' => self::DEFAULT_CHAR_APPEARANCE,
|
||||
'char_facial_hair' => self::DEFAULT_CHAR_APPEARANCE,
|
||||
'char_facial_hair_color' => self::DEFAULT_CHAR_APPEARANCE,
|
||||
'char_skill_tree' => 0,
|
||||
'char_equip' => 0,
|
||||
'char_guild' => 0,
|
||||
'char_spawn' => 0);}
|
||||
|
||||
public static function checkClassRace($class,$race){
|
||||
switch($race){
|
||||
case 'human': return in_array($class, array('warrior', 'rogue', 'priest', 'mage', 'warlock', 'paladin'));
|
||||
case 'ork': return in_array($class, array('warrior', 'hunter', 'shaman', 'rogue', 'warlock'));
|
||||
case 'dwarf': return in_array($class, array('warrior', 'hunter', 'rogue', 'priest', 'paladin'));
|
||||
case 'undead': return in_array($class, array('warrior', 'rogue', 'priest', 'mage', 'warlock'));
|
||||
case 'nightelf': return in_array($class, array('warrior', 'hunter', 'rogue', 'priest', 'druid'));
|
||||
case 'tauren': return in_array($class, array('warrior', 'hunter', 'shaman', 'druid'));
|
||||
case 'gnome': return in_array($class, array('warrior', 'rogue', 'mage', 'warlock'));
|
||||
case 'troll': return in_array($class, array('warrior', 'hunter', 'shaman', 'rogue', 'priest', 'mage'));
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
68
mojotrollz/api/charcreation/charcreation_validator.php
Normal file
@ -0,0 +1,68 @@
|
||||
<?php
|
||||
class charcreation_validator {
|
||||
public static function char_name($value){
|
||||
$data = \SYSTEM\SECURITY\Security::load(charcreation::MOJO_CC_SESSIONKEY);
|
||||
if( strlen($value) > 12 || //strlen($value) < 2 ||
|
||||
preg_match('/[^A-Za-z]/',$value)){
|
||||
$data['char_name'] = charcreation::DEFAULT_CHAR_NAME;
|
||||
} else {
|
||||
$data['char_name'] = $value;}
|
||||
\SYSTEM\SECURITY\Security::save(charcreation::MOJO_CC_SESSIONKEY,$data);
|
||||
}
|
||||
|
||||
public static function char_gender($value){
|
||||
$data = \SYSTEM\SECURITY\Security::load(charcreation::MOJO_CC_SESSIONKEY);
|
||||
$data['char_gender'] = ($value == ('female' || 'male')) ? $value : charcreation::DEFAULT_CHAR_GENDER;
|
||||
\SYSTEM\SECURITY\Security::save(charcreation::MOJO_CC_SESSIONKEY,$data);
|
||||
}
|
||||
public static function char_race($value){
|
||||
$data = \SYSTEM\SECURITY\Security::load(charcreation::MOJO_CC_SESSIONKEY);
|
||||
$data['char_race'] = $value;
|
||||
if(!charcreation::checkClassRace($data['char_class'], $data['char_race'])){
|
||||
$data['char_class'] = charcreation::DEFAULT_CHAR_CLASS;}
|
||||
\SYSTEM\SECURITY\Security::save(charcreation::MOJO_CC_SESSIONKEY,$data);
|
||||
}
|
||||
public static function char_class($value){
|
||||
$data = \SYSTEM\SECURITY\Security::load(charcreation::MOJO_CC_SESSIONKEY);
|
||||
$data['char_class'] = $value;
|
||||
if(!charcreation::checkClassRace($data['char_class'], $data['char_race'])){
|
||||
$data['char_race'] = charcreation::DEFAULT_CHAR_RACE;}
|
||||
\SYSTEM\SECURITY\Security::save(charcreation::MOJO_CC_SESSIONKEY,$data);
|
||||
}
|
||||
|
||||
public static function char_skin_color($value){
|
||||
$data = \SYSTEM\SECURITY\Security::load(charcreation::MOJO_CC_SESSIONKEY);
|
||||
$data['char_skin_color'] = $value;
|
||||
\SYSTEM\SECURITY\Security::save(charcreation::MOJO_CC_SESSIONKEY,$data);
|
||||
}
|
||||
public static function char_hair($value){
|
||||
$data = \SYSTEM\SECURITY\Security::load(charcreation::MOJO_CC_SESSIONKEY);
|
||||
$data['char_hair'] = $value;
|
||||
\SYSTEM\SECURITY\Security::save(charcreation::MOJO_CC_SESSIONKEY,$data);
|
||||
}
|
||||
public static function char_hair_color($value){
|
||||
$data = \SYSTEM\SECURITY\Security::load(charcreation::MOJO_CC_SESSIONKEY);
|
||||
$data['char_hair_color'] = $value;
|
||||
\SYSTEM\SECURITY\Security::save(charcreation::MOJO_CC_SESSIONKEY,$data);
|
||||
}
|
||||
public static function char_face($value){
|
||||
$data = \SYSTEM\SECURITY\Security::load(charcreation::MOJO_CC_SESSIONKEY);
|
||||
$data['char_face'] = $value;
|
||||
\SYSTEM\SECURITY\Security::save(charcreation::MOJO_CC_SESSIONKEY,$data);
|
||||
}
|
||||
public static function char_facial_hair($value){
|
||||
$data = \SYSTEM\SECURITY\Security::load(charcreation::MOJO_CC_SESSIONKEY);
|
||||
$data['char_facial_hair'] = $value;
|
||||
\SYSTEM\SECURITY\Security::save(charcreation::MOJO_CC_SESSIONKEY,$data);
|
||||
}
|
||||
public static function char_facial_hair_color($value){
|
||||
$data = \SYSTEM\SECURITY\Security::load(charcreation::MOJO_CC_SESSIONKEY);
|
||||
$data['char_facial_hair_color'] = $value;
|
||||
\SYSTEM\SECURITY\Security::save(charcreation::MOJO_CC_SESSIONKEY,$data);
|
||||
}
|
||||
|
||||
public static function char_skill_tree($value){}
|
||||
public static function char_equip($value){}
|
||||
public static function char_guild($value){}
|
||||
public static function char_spawn($value){}
|
||||
}
|
||||
16
mojotrollz/api/client/AuthCmd.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
class AuthCmd
|
||||
{
|
||||
//AUTH_NO_CMD = 0xFF,
|
||||
const AUTH_LOGON_CHALLENGE = 0x00;
|
||||
const AUTH_LOGON_PROOF = 0x01;
|
||||
//AUTH_RECONNECT_CHALLENGE = 0x02,
|
||||
//AUTH_RECONNECT_PROOF = 0x03,
|
||||
//update srv =4
|
||||
const REALM_LIST = 0x10;
|
||||
const XFER_INITIATE = 0x30;
|
||||
const XFER_DATA = 0x31;
|
||||
const XFER_ACCEPT = 0x32;
|
||||
const XFER_RESUME = 0x33;
|
||||
const XFER_CANCEL = 0x34;
|
||||
};
|
||||
20
mojotrollz/api/client/AuthResults.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
class AuthResults
|
||||
{
|
||||
const REALM_AUTH_SUCCESS = 0;
|
||||
const REALM_AUTH_FAILURE=0x01; ///< Unable to connect
|
||||
const REALM_AUTH_UNKNOWN1=0x02; ///< Unable to connect
|
||||
const REALM_AUTH_ACCOUNT_BANNED=0x03; ///< This <game> account has been closed and is no longer available for use. Please go to <site>/banned.html for further information.
|
||||
const REALM_AUTH_NO_MATCH=0x04; ///< The information you have entered is not valid. Please check the spelling of the account name and password. If you need help in retrieving a lost or stolen password, see <site> for more information
|
||||
const REALM_AUTH_UNKNOWN2=0x05; ///< The information you have entered is not valid. Please check the spelling of the account name and password. If you need help in retrieving a lost or stolen password, see <site> for more information
|
||||
const REALM_AUTH_ACCOUNT_IN_USE=0x06; ///< This account is already logged into <game>. Please check the spelling and try again.
|
||||
const REALM_AUTH_PREPAID_TIME_LIMIT=0x07; ///< You have used up your prepaid time for this account. Please purchase more to continue playing
|
||||
const REALM_AUTH_SERVER_FULL=0x08; ///< Could not log in to <game> at this time. Please try again later.
|
||||
const REALM_AUTH_WRONG_BUILD_NUMBER=0x09; ///< Unable to validate game version. This may be caused by file corruption or interference of another program. Please visit <site> for more information and possible solutions to this issue.
|
||||
const REALM_AUTH_UPDATE_CLIENT=0x0a; ///< Downloading
|
||||
const REALM_AUTH_UNKNOWN3=0x0b; ///< Unable to connect
|
||||
const REALM_AUTH_ACCOUNT_FREEZED=0x0c; ///< This <game> account has been temporarily suspended. Please go to <site>/banned.html for further information
|
||||
const REALM_AUTH_UNKNOWN4=0x0d; ///< Unable to connect
|
||||
const REALM_AUTH_UNKNOWN5=0x0e; ///< Connected.
|
||||
const REALM_AUTH_PARENTAL_CONTROL=0x0f; ///< Access to this account has been blocked by parental controls. Your settings may be changed in your account preferences at <site>
|
||||
};
|
||||
348
mojotrollz/api/client/client.php
Normal file
@ -0,0 +1,348 @@
|
||||
<?php
|
||||
//http://arcemu.org/wiki/Logon_Process
|
||||
/*
|
||||
2014-08-02 23:44:18 Accepting connection from '37.24.148.225'
|
||||
2014-08-02 23:44:18 [Auth] got data for cmd 0 recv length 47
|
||||
2014-08-02 23:44:18 Entering _HandleLogonChallenge
|
||||
2014-08-02 23:44:18 [AuthChallenge] got header, body is 0x2b bytes
|
||||
2014-08-02 23:44:18 [AuthChallenge] got full packet, 0x2b bytes
|
||||
2014-08-02 23:44:18 [AuthChallenge] name(13): 'ADMINISTRATOR'
|
||||
2014-08-02 23:44:18 [AuthChallenge] Account 'ADMINISTRATOR' is not locked to ip
|
||||
2014-08-02 23:44:18 database authentication values: v='092F9FB72C46AD5847B6166E8D6C0C2B36F416CDE6D277BA896DA56950A734B7' s='8DD0BD0A1E0C894E7B24A4264E50F1AE4456DA8C25195B1895D6DF1EBAB840F9'
|
||||
2014-08-02 23:44:18 [AuthChallenge] account ADMINISTRATOR is using 'enGB' locale (0)
|
||||
2014-08-02 23:44:18 [Auth] got data for cmd 1 recv length 75
|
||||
2014-08-02 23:44:18 Entering _HandleLogonProof
|
||||
2014-08-02 23:44:18 User 'ADMINISTRATOR' successfully authenticated
|
||||
2014-08-02 23:44:18 [Auth] got data for cmd 16 recv length 5
|
||||
2014-08-02 23:44:18 Entering _HandleRealmList
|
||||
2014-08-02 23:44:18 Updating Realm List...
|
||||
|
||||
|
||||
2014-08-03 00:29:16 Accepting connection from '127.0.0.1'
|
||||
2014-08-03 00:29:16 [Auth] got data for cmd 0 recv length 47
|
||||
2014-08-03 00:29:16 Entering _HandleLogonChallenge
|
||||
2014-08-03 00:29:16 [AuthChallenge] got header, body is 0x2b bytes
|
||||
2014-08-03 00:29:16 [AuthChallenge] got full packet, 0x2b bytes
|
||||
2014-08-03 00:29:16 [AuthChallenge] name(13): 'ADMINISTRATOR'
|
||||
2014-08-03 00:29:16 [AuthChallenge] Account 'ADMINISTRATOR' is not locked to ip
|
||||
2014-08-03 00:29:16 database authentication values: v='092F9FB72C46AD5847B6166E8D6C0C2B36F416CDE6D277BA896DA56950A734B7' s='8DD0BD0A1E0C894E7B24A4264E50F1AE4456DA8C25195B1895D6DF1EBAB840F9'
|
||||
2014-08-03 00:29:16 [AuthChallenge] account ADMINISTRATOR is using 'enUS' locale (0)
|
||||
*/
|
||||
class client {
|
||||
|
||||
//http://arcemu.org/wiki/Client_Logon_Challenge
|
||||
/*
|
||||
uint8 cmd;
|
||||
uint8 error;
|
||||
uint16 size;
|
||||
uint8 gamename[4];
|
||||
uint8 version1;
|
||||
uint8 version2;
|
||||
uint8 version3;
|
||||
uint16 build;
|
||||
uint8 platform[4];
|
||||
uint8 os[4];
|
||||
uint8 country[4];
|
||||
uint32 timezone_bias;
|
||||
uint32 ip;
|
||||
uint8 I_len;
|
||||
uint8 I[50];
|
||||
*/
|
||||
private static function logon_challenge(){
|
||||
return pack('HHvHHHHHHHvHHHHHHHHCCCChhhhhhhhh', //'H21L4H9',
|
||||
AuthCmd::AUTH_LOGON_CHALLENGE,//'00',//.
|
||||
0x06,//error
|
||||
43,//size
|
||||
dechex(ord('W')),dechex(ord('o')),dechex(ord('W')),'00', //WoW\0
|
||||
0x02,0x0C,0x01, //V 1.12.1
|
||||
5875,// build 5875
|
||||
dechex(ord('6')),dechex(ord('8')),dechex(ord('x')),'00', //x86\0
|
||||
dechex(ord('n')),dechex(ord('i')),dechex(ord('W')),'00', //Win\0
|
||||
ord('S'),ord('U'),ord('n'),ord('e'), //enUS
|
||||
'3C','00','00','00', //60 timezone
|
||||
'01','00','00','7F', //ip
|
||||
dechex(13)).// '0D').//accname length
|
||||
'ADMINISTRATOR';
|
||||
}
|
||||
|
||||
//http://arcemu.org/wiki/Server_Logon_Challenge
|
||||
/*
|
||||
uint8 cmd;
|
||||
uint8 error;
|
||||
uint8 unk2;
|
||||
uint8 B[32];
|
||||
uint8 g_len;
|
||||
uint8 g;
|
||||
uint8 N_len;
|
||||
uint8 N[32];
|
||||
uint8 s[32];
|
||||
uint8 unk3[16];
|
||||
uint8 unk4;
|
||||
*/
|
||||
private static function server_logon_challenge($data){
|
||||
return unpack('hcmd/herror/hunk1/h32B/hglen/hg/hNlen/h32N/h32S/h16salt/hunk2', $data);}
|
||||
|
||||
/*
|
||||
uint8 cmd;
|
||||
uint8 A[32];
|
||||
uint8 M1[20];
|
||||
uint8 crc_hash[20];
|
||||
uint8 number_of_keys;
|
||||
uint8 unk;
|
||||
*/
|
||||
private static function logon_proof($N,$B,$salt,$unk2){
|
||||
/*
|
||||
* bekannt: B,g,N,S
|
||||
* gesucht: A, M1, crc
|
||||
*
|
||||
|
||||
// now lets start calculating
|
||||
BigNumber N,A,B,a,u,x,v,S,salt,unk1,g,k(3); // init BNs, default k to 3
|
||||
user=stringToUpper( _accname );
|
||||
_authstr=stringToUpper( user +":"+_accpass );
|
||||
|
||||
B.SetBinary(lc.B,32);
|
||||
g.SetBinary(lc.g,lc.g_len);
|
||||
N.SetBinary(lc.N,lc.N_len);
|
||||
salt.SetBinary(lc.salt,32);
|
||||
unk1.SetBinary(lc.unk3,16);
|
||||
|
||||
logdebug("== My Bignums ==");
|
||||
a.SetRand(19*8);
|
||||
ASSERT(a.AsDword() > 0);
|
||||
logdebug("--> a=%s",a.AsHexStr());
|
||||
Sha1Hash userhash,xhash,uhash;
|
||||
userhash.UpdateData(_authstr);
|
||||
userhash.Finalize();
|
||||
xhash.UpdateData(salt.AsByteArray(),salt.GetNumBytes());
|
||||
xhash.UpdateData(userhash.GetDigest(),userhash.GetLength());
|
||||
xhash.Finalize();
|
||||
x.SetBinary(xhash.GetDigest(),xhash.GetLength());
|
||||
logdebug("--> x=%s",x.AsHexStr());
|
||||
v=g.ModExp(x,N);
|
||||
logdebug("--> v=%s",v.AsHexStr());
|
||||
A=g.ModExp(a,N);
|
||||
logdebug("--> A=%s",A.AsHexStr());
|
||||
uhash.UpdateBigNumbers(&A, &B, NULL);
|
||||
uhash.Finalize();
|
||||
u.SetBinary(uhash.GetDigest(), 20);
|
||||
logdebug("--> u=%s",u.AsHexStr());
|
||||
S=(B - k*g.ModExp(x,N) ).ModExp((a + u * x),N);
|
||||
logdebug("--> S=%s",S.AsHexStr());
|
||||
ASSERT(S.AsDword() > 0);
|
||||
|
||||
|
||||
// calc M1 & M2
|
||||
unsigned int i=0;
|
||||
char S1[16+1],S2[16+1]; // 32/2=16 :) +1 for \0
|
||||
// split it into 2 seperate strings, interleaved
|
||||
for(i=0;i<16;i++){
|
||||
S1[i]=S.AsByteArray()[i*2];
|
||||
S2[i]=S.AsByteArray()[i*2+1];
|
||||
}
|
||||
|
||||
// hash each one:
|
||||
Sha1Hash S1hash,S2hash;
|
||||
S1hash.UpdateData((const uint8*)S1,16);
|
||||
S1hash.Finalize();
|
||||
S2hash.UpdateData((const uint8*)S2,16);
|
||||
S2hash.Finalize();
|
||||
// Re-combine them
|
||||
char S_hash[40];
|
||||
for(i=0;i<20;i++){
|
||||
S_hash[i*2]=S1hash.GetDigest()[i];
|
||||
S_hash[i*2+1]=S2hash.GetDigest()[i];
|
||||
}
|
||||
_key.SetBinary((uint8*)S_hash,40); // used later when authing to world
|
||||
logdebug("--> SessionKey=%s",_key.AsHexStr());
|
||||
|
||||
char Ng_hash[20];
|
||||
Sha1Hash userhash2,Nhash,ghash;
|
||||
userhash2.UpdateData((const uint8*)user.c_str(),user.length());
|
||||
userhash2.Finalize();
|
||||
//printchex((char*)userhash2.GetDigest(),userhash2.GetLength(),true);
|
||||
Nhash.UpdateBigNumbers(&N,NULL);
|
||||
Nhash.Finalize();
|
||||
ghash.UpdateBigNumbers(&g,NULL);
|
||||
ghash.Finalize();
|
||||
for(i=0;i<20;i++)Ng_hash[i] = Nhash.GetDigest()[i]^ghash.GetDigest()[i];
|
||||
//printchex(Ng_hash,20,true);
|
||||
|
||||
BigNumber t_acc,t_Ng_hash;
|
||||
t_acc.SetBinary((const uint8*)userhash2.GetDigest(),userhash2.GetLength());
|
||||
t_Ng_hash.SetBinary((const uint8*)Ng_hash,20);
|
||||
|
||||
|
||||
Sha1Hash M1hash,M2hash;
|
||||
|
||||
M1hash.UpdateBigNumbers(&t_Ng_hash,&t_acc,&salt,&A,&B,NULL);
|
||||
M1hash.UpdateData((const uint8*)S_hash,40);
|
||||
M1hash.Finalize();
|
||||
|
||||
M2hash.UpdateBigNumbers(&A,NULL);
|
||||
M2hash.UpdateData((const uint8*)M1hash.GetDigest(),M1hash.GetLength());
|
||||
M2hash.UpdateData((const uint8*)S_hash,40);
|
||||
M2hash.Finalize();
|
||||
|
||||
logdebug("== Common Hashes ==");
|
||||
logdebug("--> M1=%s",toHexDump(M1hash.GetDigest(),M1hash.GetLength(),false).c_str());
|
||||
logdebug("--> M2=%s",toHexDump(M2hash.GetDigest(),M2hash.GetLength(),false).c_str());
|
||||
|
||||
// Calc CRC & CRC_hash
|
||||
// i don't know yet how to calc it, so set it to zero
|
||||
char crc_hash[20];
|
||||
memset(crc_hash,0,20);
|
||||
|
||||
logdebug("--> CRC=%s",toHexDump((uint8*)crc_hash,20,false).c_str());
|
||||
|
||||
|
||||
// now lets prepare the packet
|
||||
ByteBuffer packet;
|
||||
packet << (uint8)AUTH_LOGON_PROOF;
|
||||
packet.append(A.AsByteArray(),A.GetNumBytes());
|
||||
packet.append(M1hash.GetDigest(),M1hash.GetLength());
|
||||
packet.append(crc_hash,20);
|
||||
packet << (uint8)0; // number of keys = 0
|
||||
packet << (uint8)0; // 1.11.x compatibility (needs one more 0)
|
||||
|
||||
A = g^a
|
||||
B = kv + g^b
|
||||
u = H(A, B)
|
||||
x = H(s, p)
|
||||
S = (B - kg^x) ^ (a + ux)
|
||||
K = H(S)
|
||||
M = H(H(N) xor H(g), H(I), s, A, B, K)
|
||||
*/
|
||||
|
||||
$N = self::bchexdec($N);
|
||||
$B = self::bchexdec($B);
|
||||
$a = rand(1,19*8);
|
||||
$x = 0;
|
||||
$v = 0;
|
||||
//$S = self::bchexdec($read['S']);
|
||||
$salt = self::bchexdec($salt);
|
||||
$unk2 = self::bchexdec($unk2);
|
||||
$g = self::bchexdec($g);
|
||||
$k = 3;// init BNs, default k to 3
|
||||
$user = 'ADMINISTRATOR'; // upper
|
||||
$user_pass = 'ADMINISTRATOR'; // upper
|
||||
$auth_str = $user.":".$user_pass;
|
||||
|
||||
$userhash = sha1($auth_str);
|
||||
$x = sha1($salt.$auth_str);
|
||||
$v= bcpow($g, $x, $N);
|
||||
$A = bcpow($g, $a, $N);
|
||||
$u = sha1($A.$B);
|
||||
$S= bcpow((bcsub($B, bcmul($k, bcpow($g, $x, $N)))),(bcadd($a, bcmul($u, $x))),$N); //(B - k*g.ModExp(x,N) ).ModExp((a + u * x),N);
|
||||
|
||||
// calc M1 & M2
|
||||
$i = 0;
|
||||
$S1 = '';
|
||||
$S2 = '';
|
||||
// split it into 2 seperate strings, interleaved
|
||||
for($i=0;$i<16;$i++){
|
||||
$S1 .= substr($S, ($i*2)*2,2);
|
||||
$S2 .= substr($S, ($i*2+1)*2,2);
|
||||
}
|
||||
// hash each one:
|
||||
$S1hash = sha1($S1);
|
||||
$S2hash = sha1($S2);
|
||||
// Re-combine them
|
||||
$S_hash = '';
|
||||
for($i=0;$i<20;$i++){
|
||||
$S_hash .= substr($S1hash, $i*2,2);
|
||||
$S_hash .= substr($S2hash, $i*2,2);
|
||||
}
|
||||
$key = $S_hash;// used later when authing to world(session key)
|
||||
|
||||
$userhash2 = sha1($user);
|
||||
$Nhash = sha1($N);
|
||||
$ghash = sha1($g);
|
||||
$Ng_hash = '';
|
||||
for($i=0;$i<20;$i++){
|
||||
$Ng_hash .= hexdec(substr($Nhash, $i*2,2))^hexdec(substr($ghash, $i*2,2));};
|
||||
|
||||
$t_acc = $userhash2;
|
||||
$t_Ng_hash = $Ng_hash;
|
||||
|
||||
$M1hash = sha1($t_Ng_hash.$t_acc.$salt.$A.$B);
|
||||
$M2hash = sha1($M1hash.$S_hash);
|
||||
|
||||
$A_hex = self::bcdechex($A);
|
||||
|
||||
// Calc CRC & CRC_hash
|
||||
// i don't know yet how to calc it, so set it to zero
|
||||
//...
|
||||
$res = array( 'N' => $N,
|
||||
'A' => $A,
|
||||
'B' => $B,
|
||||
'g' => $g,
|
||||
'a' => $a,
|
||||
'u' => $u,
|
||||
'x' => $x,
|
||||
'v' => $v,
|
||||
'S' => $S,
|
||||
'salt' => $salt,
|
||||
'unk2' => $unk2,
|
||||
'user' => $user,
|
||||
'user_pass' => $user_pass,
|
||||
'auth_str' => $auth_str,
|
||||
'A_hex' => $A_hex,
|
||||
'M1hash' => $M1hash,
|
||||
substr($A_hex,1,2), substr($A_hex,3,2),substr($A_hex,5,2),substr($A_hex,7,2),substr($A_hex,9,2),substr($A_hex,11,2),substr($A_hex,13,2),substr($A_hex,15,2),substr($A_hex,17,2),substr($A_hex,19,2),substr($A_hex,21,2),substr($A_hex,23,2),substr($A_hex,25,2),substr($A_hex,27,2),substr($A_hex,29,2),substr($A_hex,31,2),substr($A_hex,33,2),substr($A_hex,35,2),substr($A_hex,37,2),substr($A_hex,39,2),substr($A_hex,41,2),substr($A_hex,43,2),substr($A_hex,45,2),substr($A_hex,47,2),substr($A_hex,49,2),substr($A_hex,51,2),substr($A_hex,53,2),substr($A_hex,55,2),substr($A_hex,57,2),substr($A_hex,59,2),substr($A_hex,61,2),substr($A_hex,63,2));
|
||||
new WARNING(print_r($res,true));
|
||||
$out = pack('hh32h20hhhhhhhhhhhhhhhhhhhhhh', //'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh',//'hh32h20hhhhhhhhhhhhhhhhhhhhhh',
|
||||
AuthCmd::AUTH_LOGON_PROOF, //Command
|
||||
$A_hex,//substr($A_hex,1,2), substr($A_hex,3,2),substr($A_hex,5,2),substr($A_hex,7,2),substr($A_hex,9,2),substr($A_hex,11,2),substr($A_hex,13,2),substr($A_hex,15,2),substr($A_hex,17,2),substr($A_hex,19,2),substr($A_hex,21,2),substr($A_hex,23,2),substr($A_hex,25,2),substr($A_hex,27,2),substr($A_hex,29,2),substr($A_hex,31,2),substr($A_hex,33,2),substr($A_hex,35,2),substr($A_hex,37,2),substr($A_hex,39,2),substr($A_hex,41,2),substr($A_hex,43,2),substr($A_hex,45,2),substr($A_hex,47,2),substr($A_hex,49,2),substr($A_hex,51,2),substr($A_hex,53,2),substr($A_hex,55,2),substr($A_hex,57,2),substr($A_hex,59,2),substr($A_hex,61,2),substr($A_hex,63,2), //A self::bcdechex($A), substr($A_hex,1,64),// $A_hex,//
|
||||
$M1hash, //0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, //M1 $M1hash,//substr($M1hash,1,40),//$M1hash,//
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //CRC
|
||||
0x00, //Keys
|
||||
0x00 //unk
|
||||
);
|
||||
return $out;
|
||||
}
|
||||
|
||||
public static function import($ip){
|
||||
new INFO('Tryin to Connect to '.$ip);
|
||||
$errno = $errstr = '';
|
||||
$fp = fsockopen($ip , 3724, $errno, $errstr, 1000);
|
||||
//socket_set_blocking( $fp, false );
|
||||
if (!$fp) {
|
||||
new ERROR("ERROR: $errno - $errstr");
|
||||
} else {
|
||||
new INFO('Connection established');
|
||||
|
||||
$out = self::logon_challenge();
|
||||
new WARNING($out);
|
||||
//new WARNING(bin2hex($out));
|
||||
fwrite($fp, $out);
|
||||
$read = fread($fp, 119);//stream_get_contents($fp); //fread($fp, 1);
|
||||
$read = self::server_logon_challenge($read);
|
||||
new WARNING(print_r($read,true));
|
||||
$out = self::logon_proof($read['N'],$read['B'],$read['salt'],$read['unk2']);
|
||||
new WARNING($out);
|
||||
fwrite($fp, $out);
|
||||
fclose($fp);
|
||||
new WARNING("success");
|
||||
}
|
||||
}
|
||||
|
||||
private static function bchexdec($hex)
|
||||
{
|
||||
$dec = 0;
|
||||
$len = strlen($hex);
|
||||
for ($i = 1; $i <= $len; $i++) {
|
||||
$dec = bcadd($dec, bcmul(strval(hexdec($hex[$i - 1])), bcpow('16', strval($len - $i))));
|
||||
}
|
||||
return $dec;
|
||||
}
|
||||
private static function bcdechex($dec) {
|
||||
$last = bcmod($dec, 16);
|
||||
$remain = bcdiv(bcsub($dec, $last), 16);
|
||||
if($remain == 0) {
|
||||
return dechex($last);
|
||||
} else {
|
||||
return self::bcdechex($remain).dechex($last);
|
||||
}
|
||||
}
|
||||
}
|
||||
17
mojotrollz/api/database/database.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
class database {
|
||||
public static function player_online(){
|
||||
$count = \DBD\PLAYER_ONLINE::Q1()['count'];
|
||||
new WOW_STATS_PLAYER_ONLINE($count);
|
||||
return $count;}
|
||||
public static function backup(){
|
||||
return shell_exec('/home/mojotrolls/mojo_zero/backup_db 2>&1');}
|
||||
public static function pull(){
|
||||
return shell_exec('/home/mojotrolls/mojo_zero/src/database/mojo/pull 2>&1');}
|
||||
public static function push(){
|
||||
return shell_exec('/home/mojotrolls/mojo_zero/src/database/mojo/push 2>&1');}
|
||||
public static function push_dev(){
|
||||
return shell_exec('/home/mojotrolls/mojo_zero/src/database/mojo/push_dev 2>&1');}
|
||||
public static function commit($comment){
|
||||
return shell_exec('/home/mojotrolls/mojo_zero/src/database/mojo/commit '.$comment.' 2>&1');}
|
||||
}
|
||||
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
class wow_db {
|
||||
public static function version(){
|
||||
|
||||
}
|
||||
}
|
||||
12
mojotrollz/api/realm/realm.php
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
class realm {
|
||||
public static function status(){
|
||||
$res = shell_exec('/home/mojotrolls/mojo_zero/realm status 2>&1');
|
||||
($res == 1) ? new WOW_STATS_REALM_ONLINE() : new WOW_STATS_REALM_OFFLINE();
|
||||
return ($res == 1) ? '<status>on</status>' : '<status>off</status>';}
|
||||
|
||||
public static function start(){
|
||||
return shell_exec('/home/mojotrolls/mojo_zero/realm start 2>&1');}
|
||||
public static function stop(){
|
||||
return shell_exec('/home/mojotrolls/mojo_zero/realm stop 2>&1');}
|
||||
}
|
||||
14
mojotrollz/api/server/server.php
Normal file
@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class server {
|
||||
public static function compile(){
|
||||
return shell_exec('/home/mojotrolls/mojo_zero/compile 2>&1');}
|
||||
public static function deploy(){
|
||||
return shell_exec('/home/mojotrolls/mojo_zero/deploy 2>&1');}
|
||||
public static function revert(){
|
||||
return shell_exec('/home/mojotrolls/mojo_zero/revert 2>&1');}
|
||||
public static function rights(){
|
||||
return shell_exec('/home/mojotrolls/mojo_zero/rights 2>&1');}
|
||||
public static function update(){
|
||||
return shell_exec('/home/mojotrolls/mojo_zero/update 2>&1');}
|
||||
}
|
||||
|
||||
11
mojotrollz/api/world/world.php
Normal file
@ -0,0 +1,11 @@
|
||||
<?php
|
||||
class world {
|
||||
public static function status(){
|
||||
$res = shell_exec('/home/mojotrolls/mojo_zero/world status 2>&1');
|
||||
($res == 1) ? new WOW_STATS_WORLD_ONLINE() : new WOW_STATS_WORLD_OFFLINE();
|
||||
return ($res == 1) ? '<status>on</status>' : '<status>off</status>';}
|
||||
public static function start(){
|
||||
return shell_exec('/home/mojotrolls/mojo_zero/world start 2>&1');}
|
||||
public static function stop(){
|
||||
return shell_exec('/home/mojotrolls/mojo_zero/world stop 2>&1');}
|
||||
}
|
||||
@ -1,9 +1,8 @@
|
||||
<?php
|
||||
|
||||
//keep this
|
||||
require_once dirname(__FILE__).'/path/register_path_classes.php';
|
||||
require_once dirname(__FILE__).'/page/register_page_classes.php';
|
||||
require_once dirname(__FILE__).'/page/autoload.inc';
|
||||
require_once dirname(__FILE__).'/dbd/autoload.inc.php';
|
||||
require_once dirname(__FILE__).'/api/autoload.inc.php';
|
||||
require_once dirname(__FILE__).'/docu/autoload.inc.php';
|
||||
require_once dirname(__FILE__).'/files/autoload.inc.php';
|
||||
require_once dirname(__FILE__).'/log/autoload.inc.php';
|
||||
@ -1,6 +1,7 @@
|
||||
<?php
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/db/','DBD');
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/tbl/','DBD');
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/qq/','DBD');
|
||||
//$autoload->registerFolder(dirname(__FILE__).'/tbl/definitions/','DBD\DEFINITIONS');
|
||||
//$autoload->registerFolder(dirname(__FILE__).'/tbl/data/','DBD\DATA');
|
||||
//$autoload->registerFolder(dirname(__FILE__).'/tbl/data_processed/','DBD\DATA_PROCESSED');
|
||||
@ -4,5 +4,5 @@ namespace DBD;
|
||||
class mangos_chars extends \SYSTEM\DB\DBInfoMYS {
|
||||
|
||||
public function __construct() {
|
||||
parent::__construct('mangos_one_chars', 'mojotrolls_dev', 'dsjgfasudzfsvad', '127.0.0.1');}
|
||||
parent::__construct('mangos_zero_chars', 'mojotrolls_dev', 'dsjgfasudzfsvad', '127.0.0.1');}
|
||||
}
|
||||
|
||||
@ -4,5 +4,5 @@ namespace DBD;
|
||||
class mangos_world extends \SYSTEM\DB\DBInfoMYS {
|
||||
|
||||
public function __construct() {
|
||||
parent::__construct('mangos_one_world', 'mojotrolls_dev', 'dsjgfasudzfsvad', '127.0.0.1');}
|
||||
parent::__construct('mangos_zero_world', 'mojotrolls_dev', 'dsjgfasudzfsvad', '127.0.0.1');}
|
||||
}
|
||||
21
mojotrollz/dbd/qq/ONLINE_STATS.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
namespace DBD;
|
||||
|
||||
class ONLINE_STATS extends \SYSTEM\DB\QP {
|
||||
protected static function query(){
|
||||
return new \SYSTEM\DB\QQuery(get_class(),
|
||||
//pg
|
||||
'',
|
||||
//mys
|
||||
'SELECT DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP('.\SYSTEM\DBD\system_log::FIELD_TIME.') - MOD(UNIX_TIMESTAMP('.\SYSTEM\DBD\system_log::FIELD_TIME.'),?)),"%Y/%m/%d %H:%i:%s") as day,'
|
||||
.'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'WOW_STATS_REALM_ONLINE\' then 1 else 0 end) realm_on,'
|
||||
.'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'WOW_STATS_REALM_OFFLINE\' then 1 else 0 end) realm_off,'
|
||||
.'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'WOW_STATS_WORLD_OFFLINE\' then 1 else 0 end) world_off,'
|
||||
.'sum(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'WOW_STATS_WORLD_ONLINE\' then 1 else 0 end) world_on,'
|
||||
.'max(case when '.\SYSTEM\DBD\system_log::FIELD_CLASS.' = \'WOW_STATS_PLAYER_ONLINE\' then '.\SYSTEM\DBD\system_log::FIELD_CODE.' else 0 end) players'
|
||||
.' FROM '.\SYSTEM\DBD\system_log::NAME_MYS
|
||||
.' GROUP BY day'
|
||||
.' ORDER BY day DESC'
|
||||
.' LIMIT 30;'
|
||||
);}}
|
||||
|
||||
13
mojotrollz/dbd/qq/PLAYER_ONLINE.php
Normal file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
namespace DBD;
|
||||
|
||||
class PLAYER_ONLINE extends \SYSTEM\DB\QQ {
|
||||
protected static function query(){
|
||||
return new \SYSTEM\DB\QQuery(get_class(),
|
||||
//pg
|
||||
'',
|
||||
//mys
|
||||
'SELECT count(*) as count FROM characters WHERE online=1',
|
||||
new \DBD\mangos_chars()
|
||||
);}}
|
||||
|
||||
@ -4,8 +4,8 @@ namespace DBD;
|
||||
|
||||
class locale_string extends \SYSTEM\DBD\system_locale_string {
|
||||
|
||||
const VALUE_CATEGORY_MAINPAGE = 100;
|
||||
const VALUE_CATEGORY_WOW_INFOTEXT_RACES = 120;
|
||||
const VALUE_CATEGORY_WOW_INFOTEXT_HELP = 130;
|
||||
const VALUE_CATEGORY_MAINPAGE = 100;
|
||||
const VALUE_CATEGORY_WOW_INFOTEXT = 120;
|
||||
const VALUE_CATEGORY_WOW_SERVERINFO = 140;
|
||||
|
||||
}
|
||||
205
mojotrollz/docu/mojo_zero/website.md
Normal file
@ -0,0 +1,205 @@
|
||||
# Funktionality
|
||||
- Login/Register (openid)
|
||||
- Server Info
|
||||
- Vote -> gain Mojo
|
||||
(- Donate -> gain Mojo)
|
||||
- News
|
||||
- Server Status
|
||||
- Accounts count
|
||||
- Characters count
|
||||
- Uptime
|
||||
- Top 10
|
||||
-Account
|
||||
- Vote Stuff
|
||||
- Accepte Votereward quests (no payment on website)
|
||||
- Characters
|
||||
- Inventory/Bank/GBank/Aditional Bank
|
||||
- Model/Items/Stats...
|
||||
- Skilltree(ig) -> share options?!
|
||||
- Database (able 2 tag entrys for bugged/blizzlike/working...)
|
||||
- Quests
|
||||
- Creatures + Drop
|
||||
- Items
|
||||
- Skilltree(web)
|
||||
- Archievements
|
||||
- OnKill
|
||||
- First kill mob
|
||||
- Kill mob
|
||||
- Kill Player
|
||||
- OnQuestComplete
|
||||
- OnRoll (100/1) (in lootroll)
|
||||
- OnCraft
|
||||
- OnLearn
|
||||
- OnAHSell
|
||||
- OnAHBuy
|
||||
- OnAHCancel
|
||||
- OnExplore
|
||||
- OnDeath
|
||||
- OnLoot (recieve any type of item)
|
||||
- Minigames?!
|
||||
- Low lvl materials
|
||||
- lvling
|
||||
- Round base duel
|
||||
- Gm Tool
|
||||
- Edit Database
|
||||
- Deploy Database
|
||||
- Servercontroll
|
||||
- Shutdown
|
||||
- Update
|
||||
- Ticket Management
|
||||
- Ingame Mail
|
||||
- Character Management
|
||||
- Backup
|
||||
- Bugreports/Database error list/crashes
|
||||
|
||||
# Login
|
||||
- Required Data of the User
|
||||
- Nick
|
||||
- Password
|
||||
- Forgotten Password?
|
||||
- EMail + Link
|
||||
- if set ask Date of Birth, ICQ number, Name, Lastname, Charactername
|
||||
- Allow openid for login
|
||||
|
||||
# Register
|
||||
- Reuqired Data of the User
|
||||
- Nickname
|
||||
- Password x2
|
||||
- Captcha
|
||||
- EMail
|
||||
- Optional Data of the User(can be set later in profile, not while registering)
|
||||
- Name
|
||||
- Lastname
|
||||
- ICQ
|
||||
- Date of Birth
|
||||
- Allow openid for retriving informations/registering
|
||||
|
||||
# Server Info
|
||||
- Name
|
||||
- Game Version 2.4.3
|
||||
- Client Download
|
||||
- Realmlist (file or text)
|
||||
- Rates + Custom Content
|
||||
- Average Lvltime guessed
|
||||
|
||||
# Vote
|
||||
- Set Charactername whom 2 send to. (if logged in -> character list is provided, if not you can type random name, leave blank or randomize for random character)
|
||||
- Limitation of votes
|
||||
|
||||
# News
|
||||
- Server news, chronologically, requires one picture! (no more posts without pictures)
|
||||
|
||||
# Server Status
|
||||
- Accounts count
|
||||
- Characters count
|
||||
- Average Lvl time (only if its acceptable!)
|
||||
- Uptime
|
||||
- Top 10
|
||||
- TOP PVE
|
||||
- TOP PVP
|
||||
- TOP Quest
|
||||
- TOP Guild
|
||||
- TOP Playtime
|
||||
- TOP BossKills
|
||||
- TOP Firstkills
|
||||
- TOP Firstkills Boss
|
||||
- TOP Duels
|
||||
|
||||
# Skilltree(web) -> costs mojo(how 2 transfere?) (should mostly start a quest to unlock the feature)
|
||||
- Survival Tree - Character
|
||||
- [C] Mojo Postbox (unlocks quest)
|
||||
- [C] HS Cooldownreduction (unlocks quest)
|
||||
- 3x
|
||||
- [C/A] Dual Specc(changed on website/spell)
|
||||
- on 8 x 1 chars
|
||||
- [C/A] Dual Gear (changed on website/spell)
|
||||
- on 8 x 1 chars
|
||||
- [C] Tripple Gear
|
||||
- on 1 char
|
||||
- [C] Tripple Specc
|
||||
- [C] Click on Button Spell -> to make ur char look nice -> buy skill click on button on website 2 gain shit
|
||||
- [C] Tabarts(normal tabart quests)
|
||||
- [C] Mana/Hp Pot quest(daily 5x pot on choise + task)
|
||||
- [C] Scroll quests(daily 1x scroll of choise, insta completed)
|
||||
- [C] Summon Trainer of ur Class 1d cd (spell?) (not in instances) (not indoor?)
|
||||
- [C] Summon Trader
|
||||
- [C] Summon Repairer
|
||||
- [C] Multichar
|
||||
- lvl 19 pvp
|
||||
- lvl 39 pvp
|
||||
- lvl 60 pvp/pve
|
||||
+ normal 70.
|
||||
- [C] Craft cooldownreduction
|
||||
5% x 5
|
||||
- [C] MoreQuests in Questlog
|
||||
- 10x 1
|
||||
- Trader Tree(Web Tree) - account
|
||||
- [A] Database access
|
||||
- Quests
|
||||
- Items
|
||||
- Creatures
|
||||
- [A] AH Access (if Char is in City (CIIC))
|
||||
- Buy(only bid/also buyout)
|
||||
- Sell(only bid/also buyout)
|
||||
- [A] Bank Access (CIIC)
|
||||
- Put
|
||||
- Pop
|
||||
- [A] Guildbank Access (CIIC)
|
||||
- Put
|
||||
- Pop
|
||||
- [A] AH fee reduction
|
||||
- [A] AH item count+
|
||||
- [A] Aditional Website bank per account(items are charbound)
|
||||
- 5
|
||||
- 10
|
||||
- 15
|
||||
- 20
|
||||
- 25
|
||||
x3 pages +1 per alt max 6
|
||||
- [A] In between bank for characters on the same account (char in city can put/pop from that bank - not bop items ofc)
|
||||
- 2 Slots
|
||||
- 5 Slots
|
||||
- 10 Slots
|
||||
- [A] Permanent Auctions (1x bigger fee, keeps item in ah till all of that kind(or number) are sold)
|
||||
- 1x 10
|
||||
- [A] Permanent Auctions dont count as normal auctions
|
||||
- [A] Send Mail/Read Mail
|
||||
- normal
|
||||
- with gold
|
||||
- with item
|
||||
- with cod
|
||||
- [A] Mojo AH (items/chars) for mojo (chars for green)
|
||||
- [A] Trade AH (offer item/s, request item/s)
|
||||
- [A] Charbank (have more then 8 chars on 1 acc)
|
||||
- [A] Lend Chars -> chars can be logged by authorized pplz, but will be restored to the version before logging -> temporary transfere
|
||||
- [A] Log more chars from one account
|
||||
- GM Tree - account
|
||||
- Ability to mark a quest as working(giving mojo if confirmed)
|
||||
- Ability to mark a quest as bugged
|
||||
- Ability to mark a quest as blizzlike
|
||||
- .g i command available (all chars)
|
||||
- .s i command available (all chars)
|
||||
- .player reputation available (all chars)
|
||||
- Ability to mark a Item as working
|
||||
- Ability to mark a Item as bugged
|
||||
- Ability to mark a Item as blizzlike
|
||||
- Ability to mark a Mob as working
|
||||
- Ability to mark a Mob as bugged
|
||||
- Ability to mark a Mob as blizzlike
|
||||
- GM character (testserver)
|
||||
- GM character (liveserver)
|
||||
- Moderator Character (liveserver)
|
||||
- ingame commands for bugreport?!
|
||||
|
||||
- Skills may require
|
||||
- Approve
|
||||
- Mojo(web)
|
||||
- Bugreports / Accepted Bugreports
|
||||
- Fixes / Accepted Fixes
|
||||
- Playtime
|
||||
- Gold
|
||||
- Other Skills
|
||||
- Character lvl x
|
||||
- Achievement x
|
||||
- Character Spell x
|
||||
- Duel Win/loose
|
||||
@ -5,3 +5,4 @@
|
||||
\SYSTEM\FILES\files::registerFolder(dirname(__FILE__).'/backgrounds/','backgrounds','*.png');
|
||||
\SYSTEM\FILES\files::registerFolder(dirname(__FILE__).'/wow_city_icons/','wow_city_icons','*.png');
|
||||
\SYSTEM\FILES\files::registerFolder(dirname(__FILE__).'/default_page/','default_page','*.png');
|
||||
\SYSTEM\FILES\files::registerFolder(dirname(__FILE__).'/skilltree/','skilltree','*.*');
|
||||
BIN
mojotrollz/files/skilltree/left.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
mojotrollz/files/skilltree/left_yellow.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
mojotrollz/files/skilltree/leftdown.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
mojotrollz/files/skilltree/leftdown_yellow.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
mojotrollz/files/skilltree/mini-pal.gif
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
mojotrollz/files/skilltree/right.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
mojotrollz/files/skilltree/right_yellow.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
mojotrollz/files/skilltree/rightdown.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
mojotrollz/files/skilltree/rightdown_yellow.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
mojotrollz/files/skilltree/spacer.gif
Normal file
|
After Width: | Height: | Size: 43 B |
BIN
mojotrollz/files/skilltree/tooltip.gif
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
mojotrollz/files/wowicons/UI-EmptySlot.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-ammo.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-back.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-chest.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-empty.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-empty2.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-feet.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-finger.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-hands.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-head.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-legs.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-mainhand.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-neck.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-ranged.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-relic.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-secondaryhand.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-shirt.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-shoulder.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-tabard.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-trinket.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-waist.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
mojotrollz/files/wowicons/Ui-paperdoll-slot-wrists.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
mojotrollz/files/wowicons/default.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
mojotrollz/files/wowicons/default_default.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
mojotrollz/files/wowicons/default_female.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
mojotrollz/files/wowicons/default_male.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 4.9 KiB |
5
mojotrollz/log/WOW_STATS_PLAYER_ONLINE.php
Normal file
@ -0,0 +1,5 @@
|
||||
<?php
|
||||
class WOW_STATS_PLAYER_ONLINE extends \SYSTEM\LOG\INFO {
|
||||
public function __construct($player_count){
|
||||
parent::__construct('', $player_count, NULL);}
|
||||
}
|
||||
2
mojotrollz/log/WOW_STATS_REALM_OFFLINE.php
Normal file
@ -0,0 +1,2 @@
|
||||
<?php
|
||||
class WOW_STATS_REALM_OFFLINE extends \SYSTEM\LOG\INFO {}
|
||||
2
mojotrollz/log/WOW_STATS_REALM_ONLINE.php
Normal file
@ -0,0 +1,2 @@
|
||||
<?php
|
||||
class WOW_STATS_REALM_ONLINE extends \SYSTEM\LOG\INFO {}
|
||||
2
mojotrollz/log/WOW_STATS_WORLD_OFFLINE.php
Normal file
@ -0,0 +1,2 @@
|
||||
<?php
|
||||
class WOW_STATS_WORLD_OFFLINE extends \SYSTEM\LOG\INFO {}
|
||||
2
mojotrollz/log/WOW_STATS_WORLD_ONLINE.php
Normal file
@ -0,0 +1,2 @@
|
||||
<?php
|
||||
class WOW_STATS_WORLD_ONLINE extends \SYSTEM\LOG\INFO {}
|
||||
2
mojotrollz/log/autoload.inc.php
Normal file
@ -0,0 +1,2 @@
|
||||
<?php
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__),'');
|
||||
20
mojotrollz/page/autoload.inc
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__),'');
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/default_page','');
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/default_info','');
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/default_start','');
|
||||
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/wizard_details','');
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/wizard_visuals','');
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/wizard_friend','');
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/wizard_skills','');
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/wizard_spawn','');
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/wizard_summ','');
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/wizard_reg','');
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/wizard_toolbar','');
|
||||
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/user_default','');
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/user_start','');
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/user_character','');
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/user_menu','');
|
||||
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/user_database','');
|
||||
15
mojotrollz/page/default_info/default_info.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
class default_info extends \SYSTEM\PAGE\Page {
|
||||
public $id = NULL;
|
||||
public function __construct($id) {
|
||||
$this->id =$id;
|
||||
}
|
||||
public function html(){
|
||||
$data = \SYSTEM\locale::getStrings(\DBD\locale_string::VALUE_CATEGORY_WOW_INFOTEXT);
|
||||
if(!array_key_exists($this->id, $data)){
|
||||
return $data['default'];}
|
||||
return $data[$this->id];
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,3 +1,7 @@
|
||||
#mojopulse {
|
||||
padding-top: 15px;
|
||||
}
|
||||
|
||||
body {
|
||||
color: gold;
|
||||
}
|
||||
@ -45,7 +49,7 @@ body {
|
||||
#frame_main {
|
||||
//width: 1000px;
|
||||
position: absolute;
|
||||
width: 60%;
|
||||
width: 1000px;
|
||||
top: 20%;
|
||||
left: 20%;
|
||||
//-webkit-box-shadow: 3px 3px 4px 2px rgba(0, 0, 0, 1);
|
||||
@ -79,19 +83,20 @@ body {
|
||||
#frame_content_left {
|
||||
float: left;
|
||||
color: black;
|
||||
width: 30%;
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
#frame_content_center {
|
||||
width: 30%;
|
||||
width: 300px;
|
||||
margin: 1.5%;
|
||||
margin-left: 34.5%;
|
||||
margin-left: 320px;
|
||||
}
|
||||
|
||||
#frame_content_right {
|
||||
float: right;
|
||||
width: 30%;
|
||||
margin: 1.5%;
|
||||
width: 280px;
|
||||
margin-left: 1.5%;
|
||||
margin-right: 1.5%;
|
||||
}
|
||||
|
||||
#frame_footer{
|
||||
|
||||
@ -8,30 +8,34 @@ class default_page extends SYSTEM\PAGE\Page {
|
||||
'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PLIB(),'jqbootstrapvalidation/jqBootstrapValidation.js').'"></script>'.
|
||||
'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PLIB(),'hashmask/jquery.sha1.js').'"></script>'.
|
||||
'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PLIB(),'hashmask/jquery.md5.js').'"></script>'.
|
||||
'<script src="https://www.google.com/jsapi" type="text/javascript"></script>'.
|
||||
'<script type="text/javascript">google.load("visualization", "1", {packages:["corechart"]});</script>'.
|
||||
'<script type="text/javascript" language="JavaScript" src="./api.php?call=files&cat=sys_js&id=system.js"></script>'.
|
||||
'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PPAGE(),'default_page/js/wizard.js').'"></script>'.
|
||||
'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PPAGE(),'default_page/js/onlinegraphic.js').'"></script>'.
|
||||
'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PPAGE(),'wizard_details/js/wizard_details.js').'"></script>'.
|
||||
'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PPAGE(),'wizard_visuals/js/wizard_visuals.js').'"></script>'.
|
||||
'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PPAGE(),'wizard_skills/js/wizard_skills.js').'"></script>'.
|
||||
'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PPAGE(),'wizard_spawn/js/wizard_spawn.js').'"></script>';
|
||||
}
|
||||
|
||||
private function css (){
|
||||
return '<link href="'.SYSTEM\WEBPATH(new PLIB(),'bootstrap/css/bootstrap.css').'" rel="stylesheet">'.
|
||||
'<link href="'.SYSTEM\WEBPATH(new PPAGE(),'default_page/css/default_page.css').'" rel="stylesheet">'.
|
||||
'<link href="'.SYSTEM\WEBPATH(new PPAGE(),'default_page/css/font.css').'" rel="stylesheet">';
|
||||
'<link href="'.SYSTEM\WEBPATH(new PPAGE(),'default_page/css/font.css').'" rel="stylesheet">'.
|
||||
'<link href="'.SYSTEM\WEBPATH(new PPAGE(),'wizard_skills/css/wizard_skills.css').'" rel="stylesheet">';
|
||||
}
|
||||
|
||||
public function html(){
|
||||
$vars = array();
|
||||
$vars['js'] = $this->js();
|
||||
$vars['css'] = $this->css();
|
||||
$vars['default_page_welcome'] = \SYSTEM\PAGE\replace::replaceFile(SYSTEM\SERVERPATH(new PPAGE(),'default_page/default_page_welcome.tpl'), array());
|
||||
$vars['default_page_serverinfo'] = \SYSTEM\PAGE\replace::replaceFile(SYSTEM\SERVERPATH(new PPAGE(),'default_page/default_page_serverinfo.tpl'),
|
||||
array('database_version' => wow_db::version()));
|
||||
$vars['default_page_login'] = \SYSTEM\PAGE\replace::replaceFile(SYSTEM\SERVERPATH(new PPAGE(),'default_page/default_page_login.tpl'), array());
|
||||
$vars['default_page_toolbar'] = \SYSTEM\PAGE\replace::replaceFile(SYSTEM\SERVERPATH(new PPAGE(),'default_page/default_page_toolbar.tpl'), array());
|
||||
$vars['PICPATH'] = \SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_BASEURL).'api.php?call=files&cat=default_page&id=';
|
||||
$vars['copyright'] = '';
|
||||
$vars['inprint'] = '';
|
||||
$vars = array_merge($vars, \SYSTEM\locale::getStrings(DBD\locale_string::VALUE_CATEGORY_MAINPAGE));
|
||||
$vars = array_merge($vars, \SYSTEM\locale::getStrings(DBD\locale_string::VALUE_CATEGORY_MAINPAGE),
|
||||
\SYSTEM\locale::getStrings(DBD\locale_string::VALUE_CATEGORY_WOW_SERVERINFO),
|
||||
\SYSTEM\locale::getStrings(DBD\locale_string::VALUE_CATEGORY_BASIC));
|
||||
return \SYSTEM\PAGE\replace::replaceFile(SYSTEM\SERVERPATH(new PPAGE(),'default_page/default_page.tpl'), $vars);
|
||||
}
|
||||
}
|
||||
@ -15,51 +15,9 @@
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_top_m.png) repeat-x;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_top_r.png) no-repeat;"></div>
|
||||
</div>
|
||||
<div class="threecol_row" style="height: 450px;">
|
||||
<div class="threecol_row" style="">
|
||||
<div id="frame_left_border" class="threecol_col" style="background: url(${PICPATH}border_left.png) repeat-y;"></div>
|
||||
<div id="frame_content">
|
||||
<div id="frame_content_left">${default_page_welcome}</div>
|
||||
<div id="frame_content_center">
|
||||
<div class="threecol_parent" style="width: 30%;margin-top: 14px;">
|
||||
<div class="threecol_row" style="height: 12px;">
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_tops_l.png) no-repeat;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_tops_m.png) repeat-x;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_tops_r.png) no-repeat;"></div>
|
||||
</div>
|
||||
<div class="threecol_row">
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_lefts.png) repeat-y; width: 12px;"></div>
|
||||
<div class="threecol_col" style="background-color: darkslategrey; padding-left: 10px;">${default_page_login}</div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_rights.png) repeat-y; width: 12px;"></div>
|
||||
</div>
|
||||
<div class="threecol_row" style="height: 12px;">
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_bots_l.png) no-repeat;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_bots_m.png) repeat-x;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_bots_r.png) no-repeat;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="frame_content_right">
|
||||
<div class="threecol_parent" style="width: 30%;">
|
||||
<div class="threecol_row" style="height: 12px;">
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_tops_l.png) no-repeat;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_tops_m.png) repeat-x;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_tops_r.png) no-repeat;"></div>
|
||||
</div>
|
||||
<div class="threecol_row">
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_lefts.png) repeat-y; width: 12px;"></div>
|
||||
<div class="threecol_col" style="background-color: darkolivegreen; padding-left: 10px;">${default_page_serverinfo}</div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_rights.png) repeat-y; width: 12px;"></div>
|
||||
</div>
|
||||
<div class="threecol_row" style="height: 12px;">
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_bots_l.png) no-repeat;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_bots_m.png) repeat-x;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_bots_r.png) no-repeat;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
<div id="frame_content_toolbar">${default_page_toolbar}</div>
|
||||
</div>
|
||||
<div id="frame_content"></div>
|
||||
<div id="frame_right_border" class="threecol_col" style="background: url(${PICPATH}border_right.png) repeat-y;"></div>
|
||||
</div>
|
||||
<div id="frame_footer" class="threecol_row">
|
||||
|
||||
@ -1,11 +0,0 @@
|
||||
<h3 style="color: gold;">Welcome Traveler</h3>
|
||||
<h4>Welcome to WoW Hardmode.
|
||||
<br>
|
||||
This site is under construction.
|
||||
<br>
|
||||
Feel free to snoop around.
|
||||
</h4>
|
||||
<div style=""><img src="${PICPATH}help_gnome.png" width="200px;" /></div>
|
||||
<div id="start" style="float: left;padding-top: 25px;">
|
||||
<a href="#"><img src="${PICPATH}button.png"/></a>
|
||||
</div>
|
||||
25
mojotrollz/page/default_page/js/onlinegraphic.js
Normal file
@ -0,0 +1,25 @@
|
||||
var visual_id = null;
|
||||
function load_visualisation(id){
|
||||
visual_id = id;
|
||||
sys.call('call=stats',handle_visualisation_result,{},'json',true);
|
||||
}
|
||||
|
||||
function handle_visualisation_result(json){
|
||||
if(!json || json.status !== true || !json.result){
|
||||
return;}
|
||||
json = json.result;
|
||||
var data = new google.visualization.DataTable();
|
||||
first = true;
|
||||
$.each(json[0], function(key, value){
|
||||
if(first){
|
||||
data.addColumn('datetime',key);
|
||||
first = false;
|
||||
} else {
|
||||
data.addColumn('number',key);
|
||||
}
|
||||
});
|
||||
$.each(json, function(key, value){first = true; data.addRow($.map(value, function(v) { if(first){first=false;return [new Date(v)];}else{return [(v == null || parseFloat(v) <= 0) ? 0 : parseFloat(v)];}}));});
|
||||
|
||||
var options = {title: visual_id, backgroundColor: 'darkslategrey', aggregationTarget: 'category', selectionMode: 'multiple', curveType: 'function', /*focusTarget: 'category',*/ chartArea:{left:20,top:40}, interpolateNulls: false, height: "200"};
|
||||
new google.visualization.LineChart(document.getElementById(visual_id)).draw(data, options);
|
||||
}
|
||||
@ -1,4 +1,24 @@
|
||||
var sys = null;
|
||||
|
||||
$(document).ready(function() {
|
||||
sys = new SYSTEM('./api.php',1);
|
||||
sys.go_state('start');
|
||||
//sys.load();
|
||||
});
|
||||
|
||||
function sendInfo(json,toolbar){
|
||||
sys.call('call=charcreation&json='+json,
|
||||
function(){sys.load(toolbar)},
|
||||
{},'json',false);}
|
||||
|
||||
function init_start(){
|
||||
register_login();
|
||||
load_visualisation('mojopulse');
|
||||
$('#start a').click(function() {
|
||||
sys.load('wizard_details');});
|
||||
}
|
||||
|
||||
function register_login(){
|
||||
$("#login_form input").not("[type=submit]").jqBootstrapValidation({
|
||||
preventSubmit: true,
|
||||
submitError: function($form, event, errors) {},
|
||||
@ -6,11 +26,7 @@ $(document).ready(function() {
|
||||
$.get('./api.php?call=account&action=login&username='+$('#bt_login_user').val()+'&password_sha='+$.sha1($('#bt_login_password').val())+'&password_md5='+$.md5($('#bt_login_password').val()), function (data) {
|
||||
if(data == 1){
|
||||
$('.help-block').html("Login successfull.</br>");
|
||||
$('#nav').load('?action=default_navbar', function (){
|
||||
$('#nav').scrollLeft(2000);
|
||||
load_wizard_page ('user_news');
|
||||
register_menu ();
|
||||
});
|
||||
window.location.reload();
|
||||
} else {
|
||||
$('.help-block').html("Login not successfull.</br> User & Password combination wrong.")
|
||||
}
|
||||
@ -18,19 +34,4 @@ $(document).ready(function() {
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
$('#start a').click(function() {
|
||||
load_wizard_details();});
|
||||
|
||||
});
|
||||
|
||||
function load_wizard_details(){
|
||||
$('#frame_content').load('?action=wizard_details', function (){
|
||||
wizard_details();
|
||||
});
|
||||
};
|
||||
|
||||
function load_toolbar(){
|
||||
$('#frame_content_toolbar').load('?action=wizard_toolbar', function(){
|
||||
});
|
||||
}
|
||||
|
||||
@ -6,25 +6,26 @@
|
||||
size="30"
|
||||
style="margin-bottom: 15px;"
|
||||
id="bt_login_user"
|
||||
placeholder="${login_username}"
|
||||
minlength="3" data-validation-minlength-message="${login_username_too_short}"
|
||||
maxlength="16" data-validation-maxlength-message="${login_username_too_long}"
|
||||
required data-validation-required-message="${login_username_required}"/>
|
||||
placeholder="${basic_username}"
|
||||
minlength="3" data-validation-minlength-message="${basic_username_short}"
|
||||
maxlength="16" data-validation-maxlength-message="${basic_username_long}"
|
||||
required data-validation-required-message="${basic_username_miss}"/>
|
||||
</div>
|
||||
<div class="controls">
|
||||
<input type="password"
|
||||
size="30"
|
||||
style="margin-bottom: 15px;"
|
||||
id="bt_login_password"
|
||||
placeholder="${login_password}"
|
||||
minlength="5" data-validation-minlength-message="${login_password_too_short}"
|
||||
maxlength="16" data-validation-maxlength-message="${login_password_too_long}"
|
||||
required data-validation-required-message="${login_password_required}"/>
|
||||
placeholder="${basic_password}"
|
||||
minlength="5" data-validation-minlength-message="${basic_password_short}"
|
||||
maxlength="16" data-validation-maxlength-message="${basic_password_long}"
|
||||
required data-validation-required-message="${basic_password_miss}"/>
|
||||
</div>
|
||||
<div class="help-block"></div>
|
||||
<input type="hidden" />
|
||||
<button class="btn" style="clear: left; height: 32px; font-size: 13px;"
|
||||
type="submit"
|
||||
id="login_submit">${login_login}</button>
|
||||
id="login_submit">${basic_login}</button>
|
||||
</div>
|
||||
</form>
|
||||
<div id="mojopulse"></div>
|
||||
@ -5,9 +5,11 @@
|
||||
<p>Database Version: ${database_version}</p>
|
||||
|
||||
<H3>Server Status</H3>
|
||||
<font color="red" size="1">This Server is currently closed for the Public. Be gone.</font>
|
||||
<p>Realm Server: ${realm_status}</p>
|
||||
<p>World Server: ${world_status}</p>
|
||||
<p>Players Online: ${player_online}</p>
|
||||
|
||||
<H3>Server Help</H3>
|
||||
<p>Download realmlist.wtf</p>
|
||||
<p>Download WoW 1.12</p>
|
||||
<p><a href="${url_realmlistwtf}" target="_blank">Download realmlist.wtf</a></p>
|
||||
<p><a href="${url_wowclient}" target="_blank">Download WoW 1.12</a></p>
|
||||
11
mojotrollz/page/default_start/default_page_welcome.tpl
Normal file
@ -0,0 +1,11 @@
|
||||
<h3 style="color: gold;">Welcome Traveler</h3>
|
||||
<h4>Welcome to WoW Hardmode.
|
||||
<br>
|
||||
This site is under construction.
|
||||
<br>
|
||||
Feel free to snoop around.
|
||||
</h4>
|
||||
<div style="text-align: center; padding-top: 25px;"><img src="${PICPATH}help_gnome.png" width="200px;" /></div>
|
||||
<div id="start" style="float: left;padding-top: 55px;">
|
||||
<a href="#wizard_details"><img src="${PICPATH}button.png"/></a>
|
||||
</div>
|
||||
24
mojotrollz/page/default_start/default_start.php
Normal file
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
class default_start extends SYSTEM\PAGE\Page {
|
||||
public static function js(){}
|
||||
public static function css(){}
|
||||
|
||||
public function html(){
|
||||
$vars = array();
|
||||
$vars['default_page_welcome'] = \SYSTEM\PAGE\replace::replaceFile(SYSTEM\SERVERPATH(new PPAGE(),'default_start/default_page_welcome.tpl'), array());
|
||||
$vars['default_page_serverinfo'] = \SYSTEM\PAGE\replace::replaceFile(SYSTEM\SERVERPATH(new PPAGE(),'default_start/default_page_serverinfo.tpl'), array());
|
||||
$vars['default_page_login'] = \SYSTEM\PAGE\replace::replaceFile(SYSTEM\SERVERPATH(new PPAGE(),'default_start/default_page_login.tpl'), array());
|
||||
$vars['default_page_toolbar'] = \SYSTEM\PAGE\replace::replaceFile(SYSTEM\SERVERPATH(new PPAGE(),'default_start/default_page_toolbar.tpl'), array());
|
||||
$vars['PICPATH'] = \SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_BASEURL).'api.php?call=files&cat=default_page&id=';
|
||||
$vars['copyright'] = '';
|
||||
$vars['inprint'] = '';
|
||||
$vars['realm_status'] = realm::status();
|
||||
$vars['world_status'] = world::status();
|
||||
$vars['player_online'] = database::player_online();
|
||||
$vars = array_merge($vars, \SYSTEM\locale::getStrings(DBD\locale_string::VALUE_CATEGORY_MAINPAGE),
|
||||
\SYSTEM\locale::getStrings(DBD\locale_string::VALUE_CATEGORY_WOW_SERVERINFO),
|
||||
\SYSTEM\locale::getStrings(DBD\locale_string::VALUE_CATEGORY_BASIC));
|
||||
return \SYSTEM\PAGE\replace::replaceFile(SYSTEM\SERVERPATH(new PPAGE(),'default_start/default_start.tpl'), $vars);
|
||||
}
|
||||
}
|
||||
41
mojotrollz/page/default_start/default_start.tpl
Normal file
@ -0,0 +1,41 @@
|
||||
<div id="frame_content_left">${default_page_welcome}</div>
|
||||
<div id="frame_content_center">
|
||||
<div class="threecol_parent" style="width: 30%; height: 462px;">
|
||||
<div class="threecol_row" style="height: 12px;">
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_tops_l.png) no-repeat;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_tops_m.png) repeat-x;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_tops_r.png) no-repeat;"></div>
|
||||
</div>
|
||||
<div class="threecol_row">
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_lefts.png) repeat-y; width: 12px;"></div>
|
||||
<div class="threecol_col" style="background-color: darkslategrey; padding-left: 10px;">${default_page_login}</div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_rights.png) repeat-y; width: 12px;"></div>
|
||||
</div>
|
||||
<div class="threecol_row" style="height: 12px;">
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_bots_l.png) no-repeat;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_bots_m.png) repeat-x;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_bots_r.png) no-repeat;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="frame_content_right">
|
||||
<div class="threecol_parent" style="width: 30%; height: 462px;">
|
||||
<div class="threecol_row" style="height: 12px;">
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_tops_l.png) no-repeat;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_tops_m.png) repeat-x;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_tops_r.png) no-repeat;"></div>
|
||||
</div>
|
||||
<div class="threecol_row">
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_lefts.png) repeat-y; width: 12px;"></div>
|
||||
<div class="threecol_col" style="background-color: darkolivegreen; padding-left: 10px;">${default_page_serverinfo}</div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_rights.png) repeat-y; width: 12px;"></div>
|
||||
</div>
|
||||
<div class="threecol_row" style="height: 12px;">
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_bots_l.png) no-repeat;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_bots_m.png) repeat-x;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_bots_r.png) no-repeat;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
<div id="frame_content_toolbar">${default_page_toolbar}</div>
|
||||
@ -3,41 +3,66 @@
|
||||
class page_mojotrollz extends \SYSTEM\API\api_default {
|
||||
|
||||
public static function default_page(){
|
||||
if(\SYSTEM\SECURITY\Security::isLoggedIn()){
|
||||
return new user_default();}
|
||||
return new default_page();}
|
||||
|
||||
public static function action_wizard_details(){
|
||||
//Default Start
|
||||
public static function page_default_start(){
|
||||
return new default_start();}
|
||||
|
||||
//Wizard
|
||||
public static function page_wizard_details(){
|
||||
return new wizard_details();}
|
||||
|
||||
public static function action_wizard_visuals(){
|
||||
public static function page_wizard_visuals(){
|
||||
return new wizard_visuals();}
|
||||
|
||||
public static function action_wizard_friend(){
|
||||
public static function page_wizard_friend(){
|
||||
return new wizard_friend();}
|
||||
|
||||
public static function action_wizard_skills(){
|
||||
public static function page_wizard_skills(){
|
||||
return new wizard_skills();}
|
||||
|
||||
public static function action_wizard_spawn(){
|
||||
public static function page_wizard_spawn(){
|
||||
return new wizard_spawn();}
|
||||
|
||||
public static function action_wizard_summ(){
|
||||
public static function page_wizard_summ(){
|
||||
return new wizard_summ();}
|
||||
|
||||
public static function action_wizard_reg(){
|
||||
public static function page_wizard_reg(){
|
||||
return new wizard_reg();}
|
||||
|
||||
public static function action_wizard_toolbar(){
|
||||
return new wizard_toolbar();}
|
||||
public static function page_wizard_toolbar($last,$next){
|
||||
return new wizard_toolbar($last,$next);}
|
||||
|
||||
public static function action_user_news(){
|
||||
return new user_news();}
|
||||
//Get Info Data
|
||||
public static function page_default_info($id){
|
||||
return new default_info($id);}
|
||||
|
||||
public static function action_user_guild(){
|
||||
return new user_guild();}
|
||||
//User Area
|
||||
public static function page_user_start(){
|
||||
if(!\SYSTEM\SECURITY\Security::isLoggedIn()){
|
||||
throw new ERROR("You need to be logged in to view this ressource.");}
|
||||
return new user_start();}
|
||||
|
||||
public static function action_user_bank(){
|
||||
return new user_bank();}
|
||||
public static function page_user_character(){
|
||||
if(!\SYSTEM\SECURITY\Security::isLoggedIn()){
|
||||
throw new ERROR("You need to be logged in to view this ressource.");}
|
||||
return new user_character();}
|
||||
|
||||
public static function action_user_logout(){
|
||||
public static function page_user_menu(){
|
||||
if(!\SYSTEM\SECURITY\Security::isLoggedIn()){
|
||||
throw new ERROR("You need to be logged in to view this ressource.");}
|
||||
return new user_menu();}
|
||||
|
||||
public static function page_user_database(){
|
||||
if(!\SYSTEM\SECURITY\Security::isLoggedIn()){
|
||||
throw new ERROR("You need to be logged in to view this ressource.");}
|
||||
return new user_database();}
|
||||
|
||||
public static function page_user_logout(){
|
||||
if(!\SYSTEM\SECURITY\Security::isLoggedIn()){
|
||||
throw new ERROR("You need to be logged in to view this ressource.");}
|
||||
return new user_logout();}
|
||||
}
|
||||
|
||||
@ -1,15 +0,0 @@
|
||||
<?php
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__),'');
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/default_page','');
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/wizard_details','');
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/wizard_visuals','');
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/wizard_friend','');
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/wizard_skills','');
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/wizard_spawn','');
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/wizard_summ','');
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/wizard_reg','');
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/user_news','');
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/user_guild','');
|
||||
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/wizard_toolbar','');
|
||||
|
||||
|
||||
8
mojotrollz/page/user_character/user_character.php
Normal file
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
class user_character extends SYSTEM\PAGE\Page {
|
||||
public function html(){
|
||||
$vars = array();
|
||||
return SYSTEM\PAGE\replace::replaceFile(SYSTEM\SERVERPATH(new PPAGE(),'user_character/user_character.tpl'), $vars);
|
||||
}
|
||||
}
|
||||
1
mojotrollz/page/user_character/user_character.tpl
Normal file
@ -0,0 +1 @@
|
||||
Character
|
||||
8
mojotrollz/page/user_database/user_database.php
Normal file
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
class user_database extends SYSTEM\PAGE\Page {
|
||||
public function html(){
|
||||
$vars = array();
|
||||
return SYSTEM\PAGE\replace::replaceFile(SYSTEM\SERVERPATH(new PPAGE(),'user_database/user_database.tpl'), $vars);
|
||||
}
|
||||
}
|
||||
1
mojotrollz/page/user_database/user_database.tpl
Normal file
@ -0,0 +1 @@
|
||||
database
|
||||
94
mojotrollz/page/user_default/css/user_default.css
Normal file
@ -0,0 +1,94 @@
|
||||
|
||||
|
||||
html, body {
|
||||
color: gold;
|
||||
height: 100%;
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
.threecol_parent{
|
||||
//position: absolute;
|
||||
display: table;
|
||||
//width: 1000px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.threecol_row{
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
.threecol_col{
|
||||
display: table-cell;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.clear {
|
||||
clear:both;
|
||||
}
|
||||
|
||||
.link-color a{
|
||||
color: black;
|
||||
}
|
||||
|
||||
.fadeout {
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.fadein {
|
||||
opacity: 0.8;
|
||||
-webkit-filter: brightness(80%);
|
||||
}
|
||||
|
||||
.selected {
|
||||
opacity: 1.0;
|
||||
-webkit-filter: sepia(20%);
|
||||
-webkit-filter: brightness(160%);
|
||||
-webkit-filter: contrast(120%);
|
||||
}
|
||||
|
||||
#frame_main {
|
||||
//width: 1000px;
|
||||
//position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
//-webkit-box-shadow: 3px 3px 4px 2px rgba(0, 0, 0, 1);
|
||||
//box-shadow: 3px 3px 4px 2px rgba(0, 0, 0, 1);
|
||||
//border-radius: 5px;
|
||||
}
|
||||
|
||||
#frame_header {
|
||||
height: 26px;
|
||||
}
|
||||
|
||||
#frame_right_border {
|
||||
width: 26px;
|
||||
}
|
||||
|
||||
#frame_left_border {
|
||||
width: 26px;
|
||||
}
|
||||
|
||||
#frame_content {
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
#frame_footer{
|
||||
width: 100%;
|
||||
position: relative;
|
||||
height: 26px;
|
||||
}
|
||||
|
||||
#frame_character{
|
||||
width: 100%;
|
||||
height: 250px;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
#frame_menu{
|
||||
float: left;
|
||||
width: 200px;
|
||||
}
|
||||
28
mojotrollz/page/user_default/js/user_default.js
Normal file
@ -0,0 +1,28 @@
|
||||
var sys = null;
|
||||
|
||||
$(document).ready(function() {
|
||||
sys = new SYSTEM('./api.php',2);
|
||||
sys.go_state('user_start');
|
||||
//sys.load();
|
||||
});
|
||||
|
||||
function init_user_start(){}
|
||||
|
||||
function init_user_menu(){
|
||||
register_logout();
|
||||
$("#btn_news").click(function(){
|
||||
sys.load('user_news');
|
||||
});
|
||||
$("#btn_db").click(function(){
|
||||
sys.load('user_database');
|
||||
});
|
||||
}
|
||||
|
||||
function register_logout(){
|
||||
$("#btn_logout").click(function(){
|
||||
$.get('./api.php?call=account&action=logout', function (data) {
|
||||
if(data == 1){
|
||||
window.location.reload();}
|
||||
});
|
||||
});
|
||||
}
|
||||
36
mojotrollz/page/user_default/user_default.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
class user_default extends SYSTEM\PAGE\Page {
|
||||
|
||||
private function js(){
|
||||
return '<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PLIB(),'jquery/jquery-1.9.1.min.js').'"></script>'.
|
||||
'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PLIB(),'bootstrap/js/bootstrap.min.js').'"></script>'.
|
||||
'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PLIB(),'jqbootstrapvalidation/jqBootstrapValidation.js').'"></script>'.
|
||||
'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PLIB(),'hashmask/jquery.sha1.js').'"></script>'.
|
||||
'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PLIB(),'hashmask/jquery.md5.js').'"></script>'.
|
||||
'<script src="https://www.google.com/jsapi" type="text/javascript"></script>'.
|
||||
'<script type="text/javascript">google.load("visualization", "1", {packages:["corechart"]});</script>'.
|
||||
'<script type="text/javascript" language="JavaScript" src="./api.php?call=files&cat=sys_js&id=system.js"></script>'.
|
||||
'<script type="text/javascript" language="JavaScript" src="'.SYSTEM\WEBPATH(new PPAGE(),'user_default/js/user_default.js').'"></script>';
|
||||
}
|
||||
|
||||
private function css (){
|
||||
return '<link href="'.SYSTEM\WEBPATH(new PLIB(),'bootstrap/css/bootstrap.css').'" rel="stylesheet">'.
|
||||
'<link href="'.SYSTEM\WEBPATH(new PPAGE(),'user_default/css/user_default.css').'" rel="stylesheet">'.
|
||||
'<link href="'.SYSTEM\WEBPATH(new PPAGE(),'default_page/css/font.css').'" rel="stylesheet">';
|
||||
}
|
||||
|
||||
public function html(){
|
||||
$vars = array();
|
||||
$vars['js'] = $this->js();
|
||||
$vars['css'] = $this->css();
|
||||
$vars['PICPATH'] = \SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_BASEURL).'api.php?call=files&cat=default_page&id=';
|
||||
$vars['copyright'] = '';
|
||||
$vars['inprint'] = '';
|
||||
$vars = array_merge($vars, \SYSTEM\locale::getStrings(DBD\locale_string::VALUE_CATEGORY_MAINPAGE),
|
||||
\SYSTEM\locale::getStrings(DBD\locale_string::VALUE_CATEGORY_WOW_SERVERINFO),
|
||||
\SYSTEM\locale::getStrings(DBD\locale_string::VALUE_CATEGORY_BASIC));
|
||||
return SYSTEM\PAGE\replace::replaceFile(SYSTEM\SERVERPATH(new PPAGE(),'user_default/user_default.tpl'), $vars);
|
||||
|
||||
}
|
||||
}
|
||||
35
mojotrollz/page/user_default/user_default.tpl
Normal file
@ -0,0 +1,35 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>${mojotrollz_page_title}</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
${css}
|
||||
${js}
|
||||
</head>
|
||||
<body style="background: url(${PICPATH}wall.png);">
|
||||
<div id="frame_main">
|
||||
<div id="frame_content_wrapper" class="threecol_parent" style="background: black;">
|
||||
<div id="frame_header" class="threecol_row">
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_top_l.png) no-repeat;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_top_m.png) repeat-x;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_top_r.png) no-repeat;"></div>
|
||||
</div>
|
||||
<div class="threecol_row" style="">
|
||||
<div id="frame_left_border" class="threecol_col" style="background: url(${PICPATH}border_left.png) repeat-y;"></div>
|
||||
<div id="frame_content_user">
|
||||
<div id="frame_menu" style="">
|
||||
</div>
|
||||
<div id="frame_content" style=""></div>
|
||||
<div id="frame_character"></div>
|
||||
</div>
|
||||
<div id="frame_right_border" class="threecol_col" style="background: url(${PICPATH}border_right.png) repeat-y;"></div>
|
||||
</div>
|
||||
<div id="frame_footer" class="threecol_row">
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_bot_l.png) no-repeat;"></div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_bot_m.png) repeat-x;"> ${copyright} ${inprint}</div>
|
||||
<div class="threecol_col" style="background: url(${PICPATH}border_bot_r.png) no-repeat;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,55 +0,0 @@
|
||||
<div style="margin-left: 0; float: left; width: 25%;">
|
||||
<input type="text"
|
||||
size="30"
|
||||
style="margin-left: 2px; margin-bottom: 0;"
|
||||
id="bt_login_user"
|
||||
placeholder="${user_search_guild}"/>
|
||||
<div id="guild_nav_user_guild" style="align: center; background: url(${BUTTONS}nav_off.png); background-size: 100%; width: 200px; height: 35px;">
|
||||
<a href="#">My Guild</a>
|
||||
</div>
|
||||
<div id="guild_nav_raidplanner" style="align: center; background: url(${BUTTONS}nav_off.png); background-size: 100%; width: 200px; height: 35px;">
|
||||
<a href="#">Raidplanner</a>
|
||||
</div>
|
||||
<div id="guild_nav_wanted" style="align: center; background: url(${BUTTONS}nav_off.png); background-size: 100%; width: 200px; height: 35px;">
|
||||
<a href="#">Wanted</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="" id="guild_achievements" style="background: url(${BG}black_structure.png) no-repeat; background-size: 100%; float: left; padding: 25px; margin-top: 5px;">
|
||||
<h3>Guild Achievements</h3>
|
||||
<div style="">
|
||||
<a class="hakkar" href="#"> <img src="${WOWICONS}hakkar.png"/> </a>
|
||||
<a class="ossirian" href="#"> <img src="${WOWICONS}ossirian.png"/> </a>
|
||||
<a class="ragnaros" href="#"> <img src="${WOWICONS}ragnaros.png"/> </a>
|
||||
<a class="onyxia" href="#"> <img src="${WOWICONS}onyxia.png"/> </a>
|
||||
</div>
|
||||
<br>
|
||||
<div style="">
|
||||
<a class="nefarion" href="#"> <img src="${WOWICONS}nefarion.png"/> </a>
|
||||
<a class="cthun" href="#"> <img src="${WOWICONS}cthun.png"/> </a>
|
||||
<a class="kelthuzad" href="#"> <img src="${WOWICONS}kelthuzad.png"/> </a>
|
||||
<a class="thunderaan" href="#"> <img src="${WOWICONS}thunderaan.png"/> </a>
|
||||
</div>
|
||||
<br>
|
||||
<div style="">
|
||||
<a class="hundredbosses" href="#"> <img src="${WOWICONS}100bosses.png"/> </a>
|
||||
<a class="thousandbosses" href="#"> <img src="${WOWICONS}1000bosses.png"/> </a>
|
||||
<a class="allworldbosses" href="#"> <img src="${WOWICONS}allworldbosses.png"/> </a>
|
||||
<a class="oneyearexisting" href="#"> <img src="${WOWICONS}1yearexisting.png"/> </a>
|
||||
<a class="fiveguildbankupgrades" href="#"> <img src="${WOWICONS}5guildbankupgrades.png"/> </a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="" id="guild_skilltree" style="background: url(${BG}black_structure.png) no-repeat; background-size: 100%; float: left; padding: 25px; margin-top: 5px;">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div style="float: right; background: url(${BG}pergament_big.png) no-repeat; background-size: 200px; 100px; margin-top: 5px; display: none;">
|
||||
<img src="${BUTTONS}members.png" width="200px;"/>
|
||||
<div class="" style="outline: 2px white; height: 200px; margin-right: 20px;">
|
||||
<div style="float: left; margin-left: 20px;">
|
||||
<img src="${WOWICONS}warrior.png" width="28px;"/>
|
||||
<img src="${WOWICONS}ork_male.png" width="28px;"/>
|
||||
Molanor</div>
|
||||
<img src="${WOWICONS}help_questionmark.png" style="float: right;" width="20"/>
|
||||
</div>
|
||||
</div>
|
||||
@ -1,13 +0,0 @@
|
||||
function user_guild (){
|
||||
$('.hakkar').qtip({
|
||||
content: 'Downed Hakkar',
|
||||
position: {
|
||||
corner: {
|
||||
target: 'topRight',
|
||||
tooltip: 'bottomLeft'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
@ -1,25 +0,0 @@
|
||||
<?php
|
||||
|
||||
class user_guild extends SYSTEM\PAGE\Page {
|
||||
|
||||
private function js(){
|
||||
return '';}
|
||||
|
||||
private function css (){
|
||||
return '';
|
||||
}
|
||||
|
||||
public function html(){
|
||||
$vars = array();
|
||||
$vars['js'] = $this->js();
|
||||
$vars['css'] = $this->css();
|
||||
$vars['WOWICONS'] = \SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_BASEURL).'api.php?call=img&cat=wowicons&id=';
|
||||
$vars['BG'] = \SYSTEM\IMG\img::getURL('backgrounds');
|
||||
$vars['BUTTONS'] = \SYSTEM\IMG\img::getURL('buttons');
|
||||
$vars['WOW_BOSS_ICONS'] = \SYSTEM\IMG\img::getURL('wow_boss_icons');
|
||||
$vars = array_merge($vars, \SYSTEM\locale::getStrings(DBD\locale_string::VALUE_CATEGORY_MAINPAGE));
|
||||
$vars = array_merge($vars, \SYSTEM\locale::getStrings(DBD\locale_string::VALUE_CATEGORY_WOW_INFOTEXT_RACES));
|
||||
return SYSTEM\PAGE\replace::replaceFile(SYSTEM\SERVERPATH(new PPAGE(),'user_guild/guild.tpl'), $vars);
|
||||
|
||||
}
|
||||
}
|
||||
8
mojotrollz/page/user_menu/user_menu.php
Normal file
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
class user_menu extends SYSTEM\PAGE\Page {
|
||||
public function html(){
|
||||
$vars = array();
|
||||
return SYSTEM\PAGE\replace::replaceFile(SYSTEM\SERVERPATH(new PPAGE(),'user_menu/user_menu.tpl'), $vars);
|
||||
}
|
||||
}
|
||||
7
mojotrollz/page/user_menu/user_menu.tpl
Normal file
@ -0,0 +1,7 @@
|
||||
<div class="">
|
||||
<li><a id="btn_news" href="#">News</a></li>
|
||||
<li><a id="btn_db" href="#">Database</a></li>
|
||||
<li><a id="btn_logout" href="#">Logout</a></li>
|
||||
|
||||
|
||||
</div>
|
||||
@ -1 +0,0 @@
|
||||
abc
|
||||
@ -1,22 +0,0 @@
|
||||
<?php
|
||||
|
||||
class user_news extends SYSTEM\PAGE\Page {
|
||||
|
||||
private function js(){
|
||||
return '';}
|
||||
|
||||
private function css (){
|
||||
return '';
|
||||
}
|
||||
|
||||
public function html(){
|
||||
$vars = array();
|
||||
$vars['js'] = $this->js();
|
||||
$vars['css'] = $this->css();
|
||||
$vars['WOWICONS'] = \SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_BASEURL).'api.php?call=img&cat=wowicons&id=';
|
||||
$vars = array_merge($vars, \SYSTEM\locale::getStrings(DBD\locale_string::VALUE_CATEGORY_MAINPAGE));
|
||||
$vars = array_merge($vars, \SYSTEM\locale::getStrings(DBD\locale_string::VALUE_CATEGORY_WOW_INFOTEXT_RACES));
|
||||
return SYSTEM\PAGE\replace::replaceFile(SYSTEM\SERVERPATH(new PPAGE(),'user_news/news.tpl'), $vars);
|
||||
|
||||
}
|
||||
}
|
||||
15
mojotrollz/page/user_start/user_start.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
class user_start extends SYSTEM\PAGE\Page {
|
||||
public function html(){
|
||||
$vars = array();
|
||||
$vars['realm_status'] = realm::status();
|
||||
$vars['world_status'] = world::status();
|
||||
$vars['player_online'] = database::player_online();
|
||||
$vars['PICPATH'] = \SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_PATH_BASEURL).'api.php?call=files&cat=default_page&id=';
|
||||
$vars = array_merge($vars, \SYSTEM\locale::getStrings(DBD\locale_string::VALUE_CATEGORY_MAINPAGE),
|
||||
\SYSTEM\locale::getStrings(DBD\locale_string::VALUE_CATEGORY_WOW_SERVERINFO),
|
||||
\SYSTEM\locale::getStrings(DBD\locale_string::VALUE_CATEGORY_BASIC));
|
||||
return SYSTEM\PAGE\replace::replaceFile(SYSTEM\SERVERPATH(new PPAGE(),'user_start/user_start.tpl'), $vars);
|
||||
}
|
||||
}
|
||||
15
mojotrollz/page/user_start/user_start.tpl
Normal file
@ -0,0 +1,15 @@
|
||||
<div style="float: left;">
|
||||
<H3>Server Info</H3>
|
||||
<p>Realmlist: ${realmlist}</p>
|
||||
<p>Server Version: ${server_version}</p>
|
||||
<p>Client Version: ${client_version}</p>
|
||||
<br>
|
||||
|
||||
<p>Realm Server: ${realm_status}</p>
|
||||
<p>World Server: ${world_status}</p>
|
||||
<p>Players Online: ${player_online}</p>
|
||||
|
||||
<H3>Server Help</H3>
|
||||
<p><a href="${url_realmlistwtf}" target="_blank">Download realmlist.wtf</a></p>
|
||||
<p><a href="${url_wowclient}" target="_blank">Download WoW 1.12</a></p>
|
||||
</div>
|
||||
@ -1,47 +1,47 @@
|
||||
|
||||
<div id="details_gender" style="float: left; margin: 15px;">
|
||||
<input type="text" class="form-control input-lg" id="charname" placeholder="${character_name}"></br>
|
||||
<a class="male fadein" href="#"><img src="${WOWICONS}male.png" width="110px"/></a>
|
||||
<a class="female fadein" href="#"><img src="${WOWICONS}female.png" width="110px"/></a>
|
||||
<input type="text" class="form-control input-lg" id="charname" maxlength="12" value="${char_name}"></br>
|
||||
<a class="male fadein" gender="male" href="#"><img src="${WOWICONS}male.png" width="110px"/></a>
|
||||
<a class="female fadein" gender="female" href="#"><img src="${WOWICONS}female.png" width="110px"/></a>
|
||||
</div>
|
||||
<div id="details_race" style="float: left; margin: 15px;">
|
||||
<a class="male human fadein" href="#"><img src="${WOWICONS}human_male.png"/></a>
|
||||
<a class="female human fadein" href="#"><img src="${WOWICONS}human_female.png" /></a>
|
||||
<a class="male ork fadein" href="#"><img src="${WOWICONS}ork_male.png" /></a>
|
||||
<a class="female ork fadein" href="#"><img src="${WOWICONS}ork_female.png" /></a>
|
||||
<a class="male human fadein info" info="race_human" race="human" gender="male" href="#"><img src="${WOWICONS}human_male.png"/></a>
|
||||
<a class="female human fadein info" info="race_human" race="human" gender="female" href="#"><img src="${WOWICONS}human_female.png" /></a>
|
||||
<a class="male ork fadein info" info="race_ork" race="ork" gender="male" href="#"><img src="${WOWICONS}ork_male.png" /></a>
|
||||
<a class="female ork fadein info" info="race_ork" race="ork" gender="female" href="#"><img src="${WOWICONS}ork_female.png" /></a>
|
||||
<br>
|
||||
<a class="male dwarf fadein" href="#"><img src="${WOWICONS}dwarf_male.png" /></a>
|
||||
<a class="female dwarf fadein" href="#"><img src="${WOWICONS}dwarf_female.png" /></a>
|
||||
<a class="male undead fadein" href="#"><img src="${WOWICONS}undead_male.png" /></a>
|
||||
<a class="female undead fadein" href="#"><img class="select" src="${WOWICONS}undead_female.png" /></a>
|
||||
<a class="male dwarf fadein info" info="race_dwarf" race="dwarf" gender="male" href="#"><img src="${WOWICONS}dwarf_male.png" /></a>
|
||||
<a class="female dwarf fadein info" info="race_dwarf" race="dwarf" gender="female" href="#"><img src="${WOWICONS}dwarf_female.png" /></a>
|
||||
<a class="male undead fadein info" info="race_undead" race="undead" gender="male" href="#"><img src="${WOWICONS}undead_male.png" /></a>
|
||||
<a class="female undead fadein info" info="race_undead" race="undead" gender="female" href="#"><img class="select" src="${WOWICONS}undead_female.png" /></a>
|
||||
<br>
|
||||
<a class="male nightelf fadein" href="#"><img src="${WOWICONS}nightelf_male.png" /></a>
|
||||
<a class="female nightelf fadein" href="#"><img src="${WOWICONS}nightelf_female.png" /></a>
|
||||
<a class="male tauren fadein" href="#"><img src="${WOWICONS}tauren_male.png" /></a>
|
||||
<a class="female tauren fadein" href="#"><img src="${WOWICONS}tauren_female.png" /></a>
|
||||
<a class="male nightelf fadein info" info="race_nightelf" race="nightelf" gender="male" href="#"><img src="${WOWICONS}nightelf_male.png" /></a>
|
||||
<a class="female nightelf fadein info" info="race_nightelf" race="nightelf" gender="female" href="#"><img src="${WOWICONS}nightelf_female.png" /></a>
|
||||
<a class="male tauren fadein info" info="race_tauren" race="tauren" gender="male" href="#"><img src="${WOWICONS}tauren_male.png" /></a>
|
||||
<a class="female tauren fadein info" info="race_tauren" race="tauren" gender="female" href="#"><img src="${WOWICONS}tauren_female.png" /></a>
|
||||
<br>
|
||||
<a class="male gnome fadein" href="#"><img src="${WOWICONS}gnome_male.png" /></a>
|
||||
<a class="female gnome fadein" href="#"><img src="${WOWICONS}gnome_female.png" /></a>
|
||||
<a class="male troll fadein" href="#"><img src="${WOWICONS}troll_male.png" /></a>
|
||||
<a class="female troll fadein" href="#"><img src="${WOWICONS}troll_female.png" /></a>
|
||||
<a class="male gnome fadein info" info="race_gnome" race="gnome" gender="male" href="#"><img src="${WOWICONS}gnome_male.png" /></a>
|
||||
<a class="female gnome fadein info" info="race_gnome" race="gnome" gender="female" href="#"><img src="${WOWICONS}gnome_female.png" /></a>
|
||||
<a class="male troll fadein info" info="race_troll" race="troll" gender="male" href="#"><img src="${WOWICONS}troll_male.png" /></a>
|
||||
<a class="female troll fadein info" info="race_troll" race="troll" gender="female" href="#"><img src="${WOWICONS}troll_female.png" /></a>
|
||||
</div>
|
||||
<div id="details_class" style="float: left; margin: 15px;">
|
||||
<a class="human dwarf nightelf gnome ork undead tauren troll fadein" href="#"><img src="${WOWICONS}warrior.png" /></a>
|
||||
<a class="dwarf nightelf ork tauren troll fadein" href="#"><img src="${WOWICONS}hunter.png" /></a>
|
||||
<a class="human dwarf nightelf gnome ork undead tauren troll fadein info" info="class_warrior" cclass="warrior" href="#"><img src="${WOWICONS}warrior.png" /></a>
|
||||
<a class="dwarf nightelf ork tauren troll fadein info" info="class_hunter" cclass="hunter" href="#"><img src="${WOWICONS}hunter.png" /></a>
|
||||
<br>
|
||||
<a class="dwarf human fadein" href="#"><img src="${WOWICONS}paladin.png" /></a>
|
||||
<a class="dwarf human nightelf gnome ork undead troll fadein" href="#"><img src="${WOWICONS}rogue.png" /></a>
|
||||
<a class="fadein tauren troll ork info" info="class_shaman" cclass="shaman" href="#"><img src="${WOWICONS}shaman.png" /></a>
|
||||
<a class="dwarf human nightelf gnome ork undead troll fadein info" info="class_rogue" cclass="rogue" href="#"><img src="${WOWICONS}rogue.png" /></a>
|
||||
<br>
|
||||
<a class="dwarf human nightelf undead troll fadein" href="#"><img src="${WOWICONS}priest.png" /></a>
|
||||
<a class="human gnome undead troll fadein" href="#"><img src="${WOWICONS}mage.png" /></a>
|
||||
<a class="dwarf human nightelf undead troll fadein info" info="class_priest" cclass="priest" href="#"><img src="${WOWICONS}priest.png" /></a>
|
||||
<a class="human gnome undead troll fadein info" info="class_mage" cclass="mage" href="#"><img src="${WOWICONS}mage.png" /></a>
|
||||
<br>
|
||||
<a class="human gnome ork undead fadein" href="#"><img src="${WOWICONS}warlock.png" /></a>
|
||||
<a class="fadein nightelf tauren" href="#"><img src="${WOWICONS}druid.png" /></a>
|
||||
<a class="human gnome ork undead fadein info" info="class_warlock" cclass="warlock" href="#"><img src="${WOWICONS}warlock.png" /></a>
|
||||
<a class="fadein nightelf tauren info" info="class_druid" cclass="druid" href="#"><img src="${WOWICONS}druid.png" /></a>
|
||||
<br>
|
||||
<a class="dwarf human fadein info" info="class_paladin" cclass="paladin" href="#" style="padding-left:30px;"><img src="${WOWICONS}paladin.png" /></a>
|
||||
</div>
|
||||
|
||||
<div class="lifecraft link-color" id="details_info" style="float: left; margin-top: 15px; width: 190px; padding: 8px; padding-bottom: 110px; font-size: 14px; background: url(${PICPATH}infotext_background.png) no-repeat;">
|
||||
<h3 style="padding-left: 20px;"><img src="${WOWICONS}help_questionmark.png" width="25px"/> Info</h3>
|
||||
${infotext_human}
|
||||
<div class="lifecraft link-color" id="details_info" style="float: left; margin-top: 15px; width: 190px; height: 300px; overflow-y: hidden; padding: 8px; font-size: 14px;">
|
||||
<h3><img src="${WOWICONS}help_questionmark.png" width="25px"/> Info</h3>
|
||||
<div id="info_content">${infotext_default}</div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
<div id="frame_content_toolbar" style="margin-top: 50px;">${default_page_toolbar}</div>
|
||||
<div id="frame_content_toolbar" style="height: 75px;"></div>
|
||||
|
||||
@ -1,15 +1,36 @@
|
||||
function wizard_details (){
|
||||
function init_wizard_details_toolbar(){
|
||||
$('#last').click(function(){sys.load($(this).attr('sysload'));});
|
||||
$('#next').click(function(){sys.load($(this).attr('sysload'));});
|
||||
}
|
||||
|
||||
function init_wizard_details (){
|
||||
//sys.load('wizard_details_toolbar');
|
||||
|
||||
$('#charname').keyup(function(event){
|
||||
if(event.keyCode == 13){
|
||||
sendInfo('{"char_name" : "'+$(this).val()+'"}','wizard_details');}
|
||||
});
|
||||
$('.info').mouseover(function(){
|
||||
var info = $(this).attr('info');
|
||||
$('#info_content').load('./?page=default_info&id='+info);
|
||||
});
|
||||
|
||||
$('#details_gender a').click(function(){
|
||||
$('#details_gender a').removeClass('selected');
|
||||
$('#details_race a').removeClass('selected');
|
||||
$('#details_class a').removeClass('selected');
|
||||
$('#details_race a').removeClass('fadein');
|
||||
$('#details_race a').addClass('fadeout');
|
||||
$('#details_race .'+$(this).attr('gender')).addClass('fadein');
|
||||
$(this).addClass('selected');
|
||||
sendInfo('{"char_gender" : "'+$(this).attr('gender')+'"}','wizard_details');
|
||||
});
|
||||
|
||||
$('#details_race a').click(function(){
|
||||
$('#details_race a').removeClass('selected');
|
||||
$('#details_gender a').removeClass('selected');
|
||||
$('#details_gender .'+$(this).attr('gender')).addClass('selected');
|
||||
$(this).addClass('selected');
|
||||
sendInfo('{"char_race" : "'+$(this).attr('race')+'", "char_gender" : "'+$(this).attr('gender')+'"}','wizard_details');
|
||||
});
|
||||
|
||||
$('#details_class a').click(function(){
|
||||
@ -38,40 +59,13 @@ function wizard_details (){
|
||||
if(!$('#details_race .selected').hasClass('fadein')){
|
||||
$('#details_race .selected').removeClass('selected');
|
||||
}
|
||||
sendInfo('{"char_class" : "'+$(this).attr('cclass')+'"}','wizard_details');
|
||||
});
|
||||
|
||||
$('#content .male').click(function (){
|
||||
male ();
|
||||
});
|
||||
$('#content .female').click(function (){
|
||||
female ();
|
||||
});
|
||||
$('#details_race .human').click(function (){
|
||||
wowrace('human');
|
||||
});
|
||||
$('#details_race .ork').click(function (){
|
||||
wowrace('ork');
|
||||
});
|
||||
$('#details_race .dwarf').click(function (){
|
||||
wowrace('dwarf');
|
||||
});
|
||||
$('#details_race .undead').click(function (){
|
||||
wowrace('undead');
|
||||
});
|
||||
$('#details_race .nightelf').click(function (){
|
||||
wowrace('nightelf');
|
||||
});
|
||||
$('#details_race .tauren').click(function (){
|
||||
wowrace('tauren');
|
||||
});
|
||||
$('#details_race .gnome').click(function (){
|
||||
wowrace('gnome');
|
||||
});
|
||||
$('#details_race .troll').click(function (){
|
||||
wowrace('troll');
|
||||
});
|
||||
$('#content .male').click(function (){male();});
|
||||
$('#content .female').click(function (){female ();});
|
||||
|
||||
load_toolbar();
|
||||
$('#details_race .human, #details_race .ork, #details_race .dwarf, #details_race .undead, #details_race .nightelf, #details_race .tauren, #details_race .gnome, #details_race .troll').click(function (){wowrace($(this).attr('race'));});
|
||||
}
|
||||
|
||||
function male (){
|
||||
|
||||