PDA

View Full Version : [MU] Hướng dẫn chức năng chuyển Server của WEB NETBANBE



luutrunhac
09-08-14, 03:58 PM
Như đã hứa mấy hôm trước, hôm nay mình mới có thời gian để làm bài hướng dẫn những bạn chưa biết cách sát nhập dùng chức năng chuyển Server của Web Betbanbe.

Thực sự sau khi đã làm xong thì thấy cũng khá đơn giản, nếu đụng chạm đến việc làm ăn của bạn nào mong các bạn thông cảm nhé.

Nguyên liệu cần khá khiêm tốn, cụ thể như sau:

+ 1 Máy tính có hơn 4GB RAM (nếu các bạn biết Setup máy áo thì chỉ cần 1 máy và chia thêm 1 máy ảo là đủ) hoặc 2 máy tính cùi cũng được.
+ 1 bộ Web Netbanbe (nên download tại nơi sản xuất cho yên tâm vì chức năng này không cần lic)
+ 2 data có chứa nhân vật (cái này có thể dùng DB cũ hoặc mình tự tạo làm nháp trước)
+ 1 bộ cài đặt webserver (nên xài xampp đăng ở mục download của netbanbe cho an toàn)
+ 1 chút kiên nhẫn nếu có trục trặc.

Công việc cần thực hiện:

1. Cài đặt SQL cho cả 2 máy tính
2. Cài đặt xampp cho cả 2 máy tính (chả biết có cần bật curl hay ko nhưng đó là thói quen của mình :P)
3. Attach DB cho cả 2 máy tính
4. Coppy phần Web Server vào trong thư mục htdocs
5. Config lại phần chuyển Server

Trong các bước trên thì bất kỳ ai đã từng làm MU đều có thể tự xử được nên mình nghĩ không cần hướng dẫn quá chi tiết.

Đau đầu nhất là phần table còn thiếu khi chuyển:

Đối với các bạn sử dụng SS6.3 mà dùng luôn DB của NBB là 1 điều hạnh phúc bởi DB đã có đầy đủ những gì cần thiết, tuy nhiên đối với các bạn sử dụng SS6.1 trở xuống tự tạo DB thì cần chạy thêm 1 số Query sau:


IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='MEMB_INFO' AND COLUMN_NAME='WCoin' )
BEGIN
Alter TABLE MEMB_INFO ADD WCoin int NOT NULL DEFAULT 0
PRINT 'ADDED Column MEMB_INFO.WCoin'
END
ELSE BEGIN PRINT 'Exist Column MEMB_INFO.WCoin' END


IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='MEMB_INFO' AND COLUMN_NAME='WCoinP' )
BEGIN
Alter TABLE MEMB_INFO ADD WCoinP int NOT NULL DEFAULT 0
PRINT 'ADDED Column MEMB_INFO.WCoinP'
END
ELSE BEGIN PRINT 'Exist Column MEMB_INFO.WCoinP' END


IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='MEMB_INFO' AND COLUMN_NAME='GoblinCoin' )
BEGIN
Alter TABLE MEMB_INFO ADD GoblinCoin int NOT NULL DEFAULT 0
PRINT 'ADDED Column MEMB_INFO.GoblinCoin'
END
ELSE BEGIN PRINT 'Exist Column MEMB_INFO.GoblinCoin' END


IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Character' AND COLUMN_NAME='MuItemShopList' )
BEGIN
Alter TABLE Character ADD MuItemShopList varbinary(720) null
PRINT 'ADDED Column Character.MuItemShopList'
END
ELSE BEGIN PRINT 'Exist Column Character.MuItemShopList' END


IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Character' AND COLUMN_NAME='SCFPCPoints' )
BEGIN
Alter TABLE Character ADD SCFPCPoints int NOT NULL DEFAULT 0
PRINT 'ADDED Column Character.SCFPCPoints'
END
ELSE BEGIN PRINT 'Exist Column Character.SCFPCPoints' END



IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Character' AND COLUMN_NAME='SCFMasterLevel' )
BEGIN
Alter TABLE Character ADD SCFMasterLevel int NOT NULL DEFAULT 0
PRINT 'ADDED Column Character.SCFMasterLevel'
END
ELSE BEGIN PRINT 'Exist Column Character.SCFMasterLevel' END



IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Character' AND COLUMN_NAME='SCFSealItem' )
BEGIN
Alter TABLE Character ADD SCFSealItem int NOT NULL DEFAULT 0
PRINT 'ADDED Column Character.SCFSealItem'
END
ELSE BEGIN PRINT 'Exist Column Character.SCFSealItem' END



IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Character' AND COLUMN_NAME='SCFScrollItem' )
BEGIN
Alter TABLE Character ADD SCFScrollItem int NOT NULL DEFAULT 0
PRINT 'ADDED Column Character.SCFScrollItem'
END
ELSE BEGIN PRINT 'Exist Column Character.SCFScrollItem' END



IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Character' AND COLUMN_NAME='SCFSealTime' )
BEGIN
Alter TABLE Character ADD SCFSealTime int NOT NULL DEFAULT 0
PRINT 'ADDED Column Character.SCFSealTime'
END
ELSE BEGIN PRINT 'Exist Column Character.SCFSealTime' END


IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Character' AND COLUMN_NAME='SCFScrollTime' )
BEGIN
Alter TABLE Character ADD SCFScrollTime int NOT NULL DEFAULT 0
PRINT 'ADDED Column Character.SCFScrollTime'
END
ELSE BEGIN PRINT 'Exist Column Character.SCFScrollTime' END


CREATE TABLE [Log_chuyensv] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[acc] [varchar] (10) NOT NULL,
[char] [varchar] (10) NOT NULL,
[accnew] [varchar] (10) NOT NULL,
[charnew] [varchar] (10) NOT NULL
) ON [PRIMARY]
GO


Sau khi đã hoàn thành các bước trên các bạn vào phần Webserver sửa lại file config.php có quyền truy cập đầy đủ của cả IP chuyển nhân vật đi và đến


Ví dụ:

//Danh sách IP của Hosting cho phép truy cập vào Web trên Server
$list_ip = array(
"127.0.0.1", // Local
"ip.chuyen.di", // ip chuyen di
"ip.chuyen.den", //ip chuyen den
"web.host.ing" // Hosting
);


Tiếp đến các bạn mở thư mục chuyển Server sửa lại 2 file config.php và index.php như sau:

file config.php

<?php
/**
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
* WebSite hoan toan duoc thiet ke boi NetBanBe.
* Vi vay, hay ton trong ban quyen tri tue cua NetBanBe
* Hay ton trong cong suc, tri oc NetBanBe da bo ra de thiet ke nen NWebMU
* Hay su dung ban quyen duoc cung cap boi NetBanBe de gop 1 phan nho chi phi phat trien NWebMU
* Khong nen su dung NWebMU ban crack hoac tu nguoi khac dua cho. Nhung hanh dong nhu vay se lam kim ham su phat trien cua NWebMU do khong co kinh phi phat trien cung nhu san pham tri tue bi danh cap.
* Cac ban hay su dung NWebMU duoc cung cap boi NetBanBe de NetBanBe co dieu kien phat trien them nhieu tinh nang hay hon, tot hon.
* Cam on nhieu!
*/

//Info Data
$type_connect = 'odbc'; //Dạng kết nối Database: 'odbc' hoac 'mssql'
$localhost = 'localhost';
$databaseuser = 'sa'; //User quản lý SQL MuOnline (Thường là 'sa')
$databsepassword = 'dat mat khau DB vao day'; //Mật khẩu quản lý SQL MuOnline
$database = 'MuOnline'; //Database MuOnline ('MuOnline' hoặc 'MeMuOnline')

include("../adodb/adodb.inc.php");

if($type_connect=='odbc'){
$db = &ADONewConnection('odbc');
$connect_mssql = $db->Connect($database,$databaseuser,$databsepassword);
if (!$connect_mssql) die("Ket noi voi SQL Server loi! Hay kiem tra lai ODBC ton tai hoac User & Pass SQL dung.");
}

elseif($type_connect=='mssql'){
if (extension_loaded('mssql'))
{echo("");}
else Die("Loi! Khong the load thu vien php_mssql.dll. Hay cho phep su dung php_mssql.dll trong php.ini");

$db = &ADONewConnection('mssql');
$connect_mssql = $db->Connect($localhost,$databaseuser,$databsepassword, $database);
if (!$connect_mssql) die("Loi! Khong the ket noi SQL Server");

}

//Danh sách IP của Hosting cho phép truy cập vào Web trên Server
$list_ip = array(
"127.0.0.1", // Local
"ip.chuyen.di", // ip server chuyen di
"ip.chuyen.den" // ip server chuyen den
);

if ( !in_array($_SERVER['REMOTE_ADDR'], $list_ip) ){
echo "Khong co quyen truy cap";
exit();
}

?>


file index.php

<?php
/**
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
* WebSite hoan toan duoc thiet ke boi NetBanBe.
* Vi vay, hay ton trong ban quyen tri tue cua NetBanBe
* Hay ton trong cong suc, tri oc NetBanBe da bo ra de thiet ke nen NWebMU
* Hay su dung ban quyen duoc cung cap boi NetBanBe de gop 1 phan nho chi phi phat trien NWebMU
* Khong nen su dung NWebMU ban crack hoac tu nguoi khac dua cho. Nhung hanh dong nhu vay se lam kim ham su phat trien cua NWebMU do khong co kinh phi phat trien cung nhu san pham tri tue bi danh cap.
* Cac ban hay su dung NWebMU duoc cung cap boi NetBanBe de NetBanBe co dieu kien phat trien them nhieu tinh nang hay hon, tot hon.
* Cam on nhieu!
*/

session_start();

$server_nguon = '<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>';
$server_dich = '<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>';

$server_nguon_name = "MU Chuyển Đi"; // Tên Server chuyển đi
$server_dich_name = "MU Chuyển Đến"; // Tên Server chuyển tới

$time_begin = "0h 01/08/2014"; // Thời gian bắt đầu chuyển Server
$time_end = "24h 31/08/2014"; // Thời gian kết thúc chuyển Server

//info MU chuyển đến
$website = "<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>"; // Địa chỉ WebSite MU chuyển tới
$register = "<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>"; // Địa chỉ trang đăng ký
$download = "<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>"; // Địa chỉ trang Download
$forum = "<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>"; // Địa chỉ trang diễn đàn


$debug = false;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>">
<html xmlns="<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>">
<head>
<meta <b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>"Content-Type" content="text/html; charset=UTF-8" />
<title>Chuyển Server <?php echo $server_nguon_name; ?> -> <?php echo $server_dich_name; ?></title>
</head>
<body>
<center>

<?php

/**
* read_TagName()
*
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
* $vitri = 0 : output All
* $vitri = x : output Element x, Element 0 : Count Total Element
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
*/
function read_TagName($content, $tagname, $vitri = 0)
{
$output = array();
$tag_begin = '<'. $tagname . '>';
$tag_end = '</'. $tagname . '>';
$content1 = explode($tag_begin, $content);
$slg_string = count($content1)-1;
$output[] = $slg_string; // Vị trí đầu tiên xuất ra số lượng phần tử
for($i=1; $i<count($content1); $i++) // Duyệt từ phần tử thứ 1 đến hết
{
$content2 = explode($tag_end, $content1[$i]);
$output[] = $content2[0];
}

if($vitri == 0) return $output;
else {
if(isset($output[$vitri])) return $output[$vitri];
else return "";
}
}

function _getContent( $url, $data = null, $method = "POST", $use_curl = true ) {
$content = '';

if(!is_array($data)) $data = null;
if( count($data) > 0 ) {
$postdata = urldecode(<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>($data, '', '&'));
}
else $postdata = "";
if($method != "POST") $method = "GET";

if ( $use_curl === true ) {
$ch = curl_init();
if($method == "POST") {
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
} else {
curl_setopt($ch, CURLOPT_URL,$url . "?" . $postdata);
}
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
$content = curl_exec($ch);
curl_close($ch);
} else {
$opts = array(
'http' => array(
'method' => $method,
'content' => $postdata
)
);
$context = stream_context_create($opts);

if($method == "GET" && $postdata) $url = $url . "?" . $postdata;
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
}

//echo $content;

return $content;
}

if(isset($_POST['step'])) $step = $_POST['step'];
else $step = 'begin';

if (!isset($_SESSION['chuyensv_step'])) {
$_SESSION['chuyensv_step'] = '1';
}

if($step == 'begin') {
$_SESSION['chuyensv_step'] = '1';
session_destroy();
}

if($step == '1') {
$_SESSION['chuyensv_step'] = '2';
}

//Xu ly buoc 2 : Kiem tra tai khoan nguon
if($step == '2') {
$acc_nguon = $_POST['acc_nguon'];
$passweb_nguon = $_POST['passweb_nguon'];
$pass2_nguon = $_POST['pass2_nguon'];

if ( empty($acc_nguon) || empty($passweb_nguon) || empty($pass2_nguon)) {
$notice = "Chưa điền đầy đủ thông tin";
}
elseif (preg_match("/[^a-zA-Z0-9_$]/", $acc_nguon))
{
$notice = "Dữ liệu lỗi : Tài khoản chỉ được sử dụng kí tự a-z, A-Z, số (1-9) và dấu _.";
}
elseif (preg_match("/[^a-zA-Z0-9_$]/", $passweb_nguon))
{
$notice = "Dữ liệu lỗi : Mật khẩu Web chỉ được sử dụng kí tự a-z, A-Z, số (1-9) và dấu _.";
}
elseif (preg_match("/[^a-zA-Z0-9_$]/", $pass2_nguon))
{
$notice = "Dữ liệu lỗi : Mật khẩu Cấp 2 chỉ được sử dụng kí tự a-z, A-Z, số (1-9) và dấu _.";
}
else {

$passweb_nguon = md5($passweb_nguon);

$getcontent_url = $server_nguon . "/svnguon_kt_acc.php";
$getcontent_data = array(
'acc_nguon' => $acc_nguon,
'passweb_nguon' => $passweb_nguon,
'pass2_nguon' => $pass2_nguon
);
$show_reponse = _getContent($getcontent_url, $getcontent_data);

if ( empty($show_reponse) ) { $notice = "<font size='3' color='red'>Server bảo trì.</font>"; }
else {
$info_nguon = read_TagName($show_reponse, 'info', 1);

if ( $info_nguon == 'OK' ) {
$slg_char_nguon = 0;

$list_nvnguon = read_TagName($show_reponse, 'char');
for ($i=1; $i< count($list_nvnguon); ++$i)
{
if ( !empty($list_nvnguon[$i]) )
{
$slg_char_nguon++;
$char_nguon[] = $list_nvnguon[$i];
}
}

$acc_nguon_info = array (
'acc_gcoin' => read_TagName($show_reponse, 'gcoin', 1),
'acc_gcoin_km' => read_TagName($show_reponse, 'gcoinkm', 1),
'acc_vpoint' => read_TagName($show_reponse, 'vpoint', 1),
'acc_zen' => read_TagName($show_reponse, 'zenbank', 1),
'acc_chao' => read_TagName($show_reponse, 'chao', 1),
'acc_cre' => read_TagName($show_reponse, 'cre', 1),
'acc_blue' => read_TagName($show_reponse, 'blue', 1),
'acc_thehe' => read_TagName($show_reponse, 'thehe', 1),
'acc_WCoin' => read_TagName($show_reponse, 'WCoin', 1),
'acc_WCoinP' => read_TagName($show_reponse, 'WCoinP', 1),
'acc_GoblinCoin' => read_TagName($show_reponse, 'GoblinCoin', 1),
'acc_MuItemShopList' => read_TagName($show_reponse, 'MuItemShopList', 1)
);

$_SESSION['chuyensv_acc_nguon'] = $acc_nguon;
$_SESSION['acc_nguon_info'] = $acc_nguon_info;
$_SESSION['char_nguon'] = $char_nguon;
$_SESSION['chuyensv_step'] = '3';
if($debug === true) {
echo '<pre>';
print_r($_SESSION['acc_nguon_info']);
echo '</pre>';
}
}
else $notice = $show_reponse;
}
}
}


//Xu ly buoc 3 : Chon nhan vat Nguon
if($step == '3') {
$nv_nguon = $_POST['nv_nguon'];
if ( !empty($nv_nguon)) {
$_SESSION['chuyensv_nv_nguon'] = $nv_nguon;

$getcontent_url = $server_nguon . "/svnguon_kt_nv.php";
$getcontent_data = array(
'acc_nguon' => $_SESSION['chuyensv_acc_nguon'],
'nv_nguon' => $nv_nguon
);
$show_reponse = _getContent($getcontent_url, $getcontent_data);

if ( empty($show_reponse) ) { $notice = "<font size='3' color='red'>Server bảo trì.</font>"; }
else {
$info = read_TagName($show_reponse, 'info', 1);
if($info == 'OK') {
$nv_nguon_info = array(
'nv_Class' => read_TagName($show_reponse, 'class', 1),
'nv_Inventory' => read_TagName($show_reponse, 'inventory', 1),
'nv_Money' => read_TagName($show_reponse, 'money', 1),
'nv_Quest' => read_TagName($show_reponse, 'quest', 1),
'nv_Resets' => read_TagName($show_reponse, 'resets', 1),
'nv_NoResetInDay' => read_TagName($show_reponse, 'resetday', 1),
'nv_Relifes' => read_TagName($show_reponse, 'relife', 1),
'nv_SCFPCPoints' => read_TagName($show_reponse, 'scfpoint', 1),
'nv_point_event' => read_TagName($show_reponse, 'pointevent', 1),
'nv_PointUyThac' => read_TagName($show_reponse, 'pointuythac', 1),
'nv_SCFMasterLevel' => read_TagName($show_reponse, 'scfmasterlv', 1),

'nv_SCFSealItem' => read_TagName($show_reponse, 'SCFSealItem', 1),
'nv_SCFSealTime' => read_TagName($show_reponse, 'SCFSealTime', 1),
'nv_SCFScrollItem' => read_TagName($show_reponse, 'SCFScrollItem', 1),
'nv_SCFScrollTime' => read_TagName($show_reponse, 'SCFScrollTime', 1)

);

$_SESSION['nv_nguon_info'] = $nv_nguon_info;
$_SESSION['chuyensv_step'] = '4';

if($debug === true) {
echo '<pre>';
print_r($_SESSION['nv_nguon_info']);
echo '</pre>';
}
}
else $notice = $show_reponse;
}
} else $notice = "Chưa chọn nhân vật cần chuyển";

}

//Xu ly buoc 4 : Kiem tra Acc dich
if($step == '4') {
$acc_dich = $_POST['acc_dich'];
$passweb_dich = $_POST['passweb_dich'];
$pass2_dich = $_POST['pass2_dich'];

if ( empty($acc_dich) || empty($passweb_dich) || empty($pass2_dich)) {
$notice = "Chưa điền đầy đủ thông tin";
}
elseif (preg_match("/[^a-zA-Z0-9_$]/", $acc_dich))
{
$notice = "Dữ liệu lỗi : Tài khoản chỉ được sử dụng kí tự a-z, A-Z, số (1-9) và dấu _.";
}
elseif (preg_match("/[^a-zA-Z0-9_$]/", $passweb_dich))
{
$notice = "Dữ liệu lỗi : Mật khẩu Web chỉ được sử dụng kí tự a-z, A-Z, số (1-9) và dấu _.";
}
elseif (preg_match("/[^a-zA-Z0-9_$]/", $pass2_dich))
{
$notice = "Dữ liệu lỗi : Mật khẩu Cấp 2 chỉ được sử dụng kí tự a-z, A-Z, số (1-9) và dấu _.";
}
else {

$passweb_dich = md5($passweb_dich);

$getcontent_url = $server_dich . "/svdich_kt_acc.php";
$getcontent_data = array(
'acc_dich' => $acc_dich,
'passweb_dich' => $passweb_dich,
'pass2_dich' => $pass2_dich
);

$show_reponse = _getContent($getcontent_url, $getcontent_data);

if ( empty($show_reponse) ) { $notice = "<font size='3' color='red'>Server bảo trì.</font>"; }
else {
$info = read_TagName($show_reponse, 'info', 1);

if ( $info == 'OK' ) {
$char = null;
$char = read_TagName($show_reponse, 'char');
$slg_char_dich = 0;
for ($i=1; $i<count($char); ++$i)
{
if ( !empty($char[$i]) )
{
$slg_char_dich++;
$char_dich[] = $char[$i];
}
}
$_SESSION['chuyensv_acc_dich'] = $acc_dich;
$_SESSION['char_dich'] = $char_dich;
$_SESSION['chuyensv_step'] = '5';
}
else $notice = $show_reponse;
}
}
}

//Xu ly buoc 5 : Chon nhan vat dich
if($step == '5') {
$nv_dich = $_POST['nv_dich'];
if ( !empty($nv_dich)) {
$_SESSION['chuyensv_nv_dich'] = $nv_dich;
$step = 6;
} else $notice = "Chưa chọn nhân vật chuyển tới";

}

//Xu ly buoc 6 : Chuyen du lieu
if($step == '6') {

$getcontent_url = $server_nguon . "/svnguon_xulychuyen.php";
$getcontent_data = array(
'acc_nguon' => $_SESSION['chuyensv_acc_nguon'],
'nv_nguon' => $_SESSION['chuyensv_nv_nguon'],
'acc_dich' => $_SESSION['chuyensv_acc_dich'],
'nv_dich' => $_SESSION['chuyensv_nv_dich']
);

$show_reponse_nguon = _getContent($getcontent_url, $getcontent_data);

if ( read_TagName($show_reponse_nguon, 'info', 1) == 'OK' ) {

$getcontent_data1 = array(
'acc_nguon' => $_SESSION['chuyensv_acc_nguon'],
'nv_nguon' => $_SESSION['chuyensv_nv_nguon'],
'acc_dich' => $_SESSION['chuyensv_acc_dich'],
'nv_dich' => $_SESSION['chuyensv_nv_dich']
);

$getcontent_url = $server_dich . "/svdich_xulychuyen.php";
$getcontent_data = array_merge($getcontent_data1, $_SESSION['acc_nguon_info'], $_SESSION['nv_nguon_info']);
if($debug === true) {
echo '<pre>';
print_r($getcontent_data);
echo '</pre>';
}

$show_reponse_dich = _getContent($getcontent_url, $getcontent_data);

if ( read_TagName($show_reponse_dich, 'info', 1) == 'OK' ) {
$notice = "Chuyển dữ liệu từ $server_nguon_name ( Tài khoản : $_SESSION[chuyensv_acc_nguon] - Nhân vật : $_SESSION[chuyensv_nv_nguon] ) sang $server_dich_name (Tài khoản : $_SESSION[chuyensv_acc_dich] - Nhân vật : $_SESSION[chuyensv_nv_dich] ) thành công";
$_SESSION['chuyensv_step'] = '1';
session_destroy();
} else $notice = $show_reponse_dich;
} else $notice = $show_reponse_nguon;
}

if(!isset($_SESSION['chuyensv_acc_nguon'])) $_SESSION['chuyensv_acc_nguon'] = "";
if(!isset($_SESSION['chuyensv_nv_nguon'])) $_SESSION['chuyensv_nv_nguon'] = "";
if(!isset($_SESSION['chuyensv_acc_dich'])) $_SESSION['chuyensv_acc_dich'] = "";
if(!isset($_SESSION['chuyensv_nv_dich'])) $_SESSION['chuyensv_nv_dich'] = "";

echo "Chuyển dữ liệu từ ". $server_nguon_name ." ( Tài khoản : <font color='red'><b>". $_SESSION['chuyensv_acc_nguon'] ."</b></font> - Nhân vật : <font color='red'><b>". $_SESSION['chuyensv_nv_nguon'] ."</b></font> ) sang ". $server_dich_name ." (Tài khoản : <font color='red'><b>". $_SESSION['chuyensv_acc_dich'] ."</b></font> - Nhân vật : <font color='red'><b>". $_SESSION['chuyensv_nv_dich'] ."</b></font> )<br><br>";

if (isset($notice)) { echo "<font color='red'><b>$notice</b></font><br>";}

//Giao dien
?>
<hr>
<?php
//Buoc 1 : Thong tin gioi thieu
if ( $_SESSION['chuyensv_step'] == '1' ) {
?>
<div align="justify">

<table border=0 cellpadding="5" cellspacing="5">
<tr>
<td valign='top'>
<blockquote>
<p>Sau một thời gian hoạt động và phát triển, đến nay <strong><?php echo $server_nguon_name; ?></strong> chính thức nói lời chia tay!<br />

BQT đã liên hệ với BQT <strong><?php echo $server_dich_name; ?></strong> để thỏa thuận sát nhập <strong><?php echo $server_dich_name; ?></strong> sang <strong><?php echo $server_dich_name; ?></strong>. Các bạn muốn chơi tiếp có thể sang <strong><?php echo $server_dich_name; ?></strong> tiếp tục chiến đấu.<br /><br />

Do <strong><?php echo $server_dich_name; ?></strong> có thời gian chơi lâu hơn, vì vậy các nhân vật <strong><?php echo $server_dich_name; ?></strong> sẽ bị <strong>giảm 2.2 lần Reset tổng</strong>.<br />
Các bạn chỉ việc làm theo các bước hướng dẫn tiếp theo sẽ chuyển được tài khoản, nhân vật từ <?php echo $server_nguon_name; ?> sang <?php echo $server_dich_name; ?>.</p>
<p>
<b>Thời gian chuyển Server : <font color="red"> <?php echo $time_begin; ?> - <?php echo $time_end; ?> </font></b><br />
Các bạn hãy vào Game, sắp xếp đồ vào nhân vật cần chuyển và thực hiện chuyển Server.
</p>
<p><strong><?php echo $server_dich_name; ?> </strong>: <a href="<?php echo $website; ?>" target="_blank">WebSite</a> - <a href="<?php echo $download; ?>" target="_blank">Download</a> - <a href="<?php echo $register; ?>" target="_blank">Đăng kí</a> - <a href="<?php echo $forum; ?>" target="_blank">Diễn đàn</a> <br />
Server tiếp nhận sát nhập : <strong>Huyền Thoại</strong>
</p>
<p><b>Lưu ý</b> : </p>
</blockquote>
<ul>
<li>Mỗi tài khoản chỉ chuyển được 1 nhân vật .</li>
<li>Tất cả thông tin về tài khoản, nhân vật đều được chuyển sang đầy đủ : gcoin, vpoint, reset, relife,...</li>
<li>Bạn phải tạo tài khoản và nhân vật trước ở <?php echo $server_dich_name; ?> trước khi chuyển sang .</li>
<li><font color="blue">Chỉ có thể chuyển đồ trên người, túi đồ chính của nhân vật chuyển đi. <strong><font color='red'>Rương chứa đồ, túi đồ mở rộng, cửa hàng cá nhân</strong> không được chuyển</font>. Vì vậy các bạn để hết đồ cần thiết chuyển lên nhân vật chuyển đi.</font></li>
<li>Tài khoản và Nhân vật mới tạo ở <?php echo $server_dich_name; ?> không nhất thiết trùng với <?php echo $server_nguon_name; ?> . Khi tiến hành chuyển, mọi thông tin về tài khoản, nhân vật tại <?php echo $server_nguon_name; ?> sẽ được thay thế sang <?php echo $server_dich_name; ?> . </li>
</ul>
</td>
<td valign='top'><img src="item.jpg" border=0 /></td>
</tr>
</table>

</div>

<form method="POST" Name='Buoc1' action="">
<input type="hidden" name="step" value="1">
<input type="submit" name="Submit" value="Bắt đầu chuyển Server">
</form>

<?php
}

//Buoc 2 : Nhap tai khoan Server nguon
if ( $_SESSION['chuyensv_step'] == '2' ) {
?>
<FORM Method='POST' Name='svnguon' action=''>
<input type="hidden" name="step" value="2">
<table align="center" width="100%" border="0" cellspacing="2" cellpadding="2">
<tr>
<td width="50%"><div align="right">Tài khoản Server nguồn <?php echo $server_nguon_name; ?></div></td>
<td ><div align="left">
<input name="acc_nguon" type="text" id="acc_nguon" size="14" maxlength="10" value="<?php if(isset($_POST['acc_nguon'])) echo $_POST['acc_nguon']; ?>">
</div></td>
</tr>
<tr>
<td width="50%"><div align="right">Mật khẩu Web</div></td>
<td ><div align="left">
<input name="passweb_nguon" type="password" id="passweb_nguon" size="14" maxlength="10">
</div></td>
</tr>
<tr>
<td width="50%"><div align="right">Mật khẩu Cấp 2</div></td>
<td ><div align="left">
<input name="pass2_nguon" type="password" id="pass2_nguon" size="14" maxlength="10">
</div></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="Submit" value="Sang bước 3"></td>
</tr>
</table>
</form>
<form method="POST" Name='XoaSS' action="">
<input type="hidden" name="step" value="begin">
<br /><br /><br /><input type="submit" name="Submit" value="Làm lại">
</form>
<?php
}

//Buoc 3 : Chon nhan vat Server nguon can chuyen
if ( $_SESSION['chuyensv_step'] == '3' ) {
?>
Chọn nhân vật cần chuyển đi ở <?php echo $server_nguon_name; ?> :
<form id="nvnguon" name="nvnguon" method="post" action="">
<input type="hidden" name="step" value="3" />
<select name="nv_nguon">
<?php
for ($i=0;$i<count($_SESSION['char_nguon']);$i++) {
?>
<option value="<?php echo $_SESSION['char_nguon'][$i]; ?>"><?php echo $_SESSION['char_nguon'][$i]; ?></option>
<?php
}
?>
</select><br>
<input type="submit" name="Submit" value="Sang bước 4" />
</form>
<form method="POST" Name='XoaSS' action="">
<input type="hidden" name="step" value="begin">
<br /><br /><br /><input type="submit" name="Submit" value="Làm lại">
</form>
<?php
}

//Buoc 4 : Nhap tai khoan Server dich
if ( $_SESSION['chuyensv_step'] == '4' ) {
?>
<FORM Method='POST' Name='svdich' action=''>
<input type="hidden" name="step" value="4">
<table align="center" width="100%" border="0" cellspacing="2" cellpadding="2">
<tr>
<td width="50%"><div align="right">Tài khoản Server đích <?php echo $server_dich_name; ?></div></td>
<td ><div align="left">
<input name="acc_dich" type="text" id="acc_dich" size="14" maxlength="10" value="<?php if(isset($_POST['acc_dich'])) echo $_POST['acc_dich']; ?>">
</div></td>
</tr>
<tr>
<td width="50%"><div align="right">Mật khẩu Web</div></td>
<td ><div align="left">
<input name="passweb_dich" type="password" id="passweb_dich" size="14" maxlength="10">
</div></td>
</tr>
<tr>
<td width="50%"><div align="right">Mật khẩu Cấp 2</div></td>
<td ><div align="left">
<input name="pass2_dich" type="password" id="pass2_dich" size="14" maxlength="10">
</div></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="Submit" value="Sang bước 5"></td>
</tr>
</table>
</form>
<form method="POST" Name='XoaSS' action="">
<input type="hidden" name="step" value="begin">
<br /><br /><br /><input type="submit" name="Submit" value="Làm lại">
</form>
<?php
}

//Buoc 5 : Chon nhan vat Server dich can chuyen
if ( $_SESSION['chuyensv_step'] == '5' ) {
?>
Chọn nhân vật thay thế ở <?php echo $server_dich_name; ?> :
<form id="nvdich" name="nvdich" method="post" action="">
<input type="hidden" name="step" value="5" />
<select name="nv_dich">
<?php
for ($i=0;$i<count($_SESSION['char_dich']);$i++) {
?>
<option value="<?php echo $_SESSION['char_dich'][$i]; ?>"><?php echo $_SESSION['char_dich'][$i]; ?></option>
<?php
}
?>
</select><br>
<input type="submit" name="Submit" value="Sang bước 6" />
</form>
<form method="POST" Name='XoaSS' action="">
<input type="hidden" name="step" value="begin">
<br /><br /><br /><input type="submit" name="Submit" value="Làm lại">
</form>
<?php
}

?>
</center>
</body>
</html>

Cuối cùng là thưởng thức thành quả.

Có thể trong các bước trên chỉ cần sơ xuất nhỏ cũng dẫn đến tình trạng không chuyển được, nếu có thắc mắc gì các bạn cứ post tại đây, mọi người cùng thảo luận những chỗ hay mắc phải để những người làm sau không cần hỏi lại nữa.

Chúc các bạn làm ăn phát đạt!!!

lequangvu
10-08-14, 01:11 PM
Rất bổ ích cho nhưng ai chưa biết và cần đến nó

emga01
10-08-14, 08:31 PM
cái này co chuyê luôn item qua k hả bạn

luutrunhac
10-08-14, 08:50 PM
cái này co chuyê luôn item qua k hả bạn

Chuyển đầy đủ Item trên người và túi đồ cá nhân, tiền tệ các loại, top các loại và điểm ủy thác...

Chỉ không chuyển guilds, đồ trong thùng đồ chung thôi bạn ạ.

kenpro7777
13-08-14, 12:17 PM
Úp top 1 hướng dẫn bổ ích
aaaaaaaaaaaaaaaaaa

chicken1
29-08-14, 07:58 AM
Query Error : SELECT * FROM MEMB_INFO WHERE memb__pwdmd5='4297f44b13955235245b2497399d7a93' and memb___id='hanoi123'


mình gặp phải lỗi như vậy
xin giúp đỡ!

Hào Hoa Công Tử
29-08-14, 08:36 AM
Nghe nói chuyển sv dupe đc vp...

luutrunhac
29-08-14, 06:19 PM
Query Error : SELECT * FROM MEMB_INFO WHERE memb__pwdmd5='4297f44b13955235245b2497399d7a93' and memb___id='hanoi123'


mình gặp phải lỗi như vậy
xin giúp đỡ!

Mình chưa nghiên cứu về vấn đề DB MD5. Bạn chuyển DB sang Pass thường là chuyển được thôi.


Nghe nói chuyển sv dupe đc vp...

Khi chuyển phải tắt Server bạn ạ. Vẫn mở Server thì bị lợi dụng Vpoint trong tài khoản lại chuyển sang tài khoản khác bằng Item Vpoint, vì vpoint và gcoin đc chuyển đi mà.

CanCaiTen
29-08-14, 06:42 PM
Nghe nói chuyển sv dupe đc vp...

Khi chuyển tắt hết chức năng web như : chợ trời,đấu giá,tạp hóa......nói chung tắt hết những cái liên quan tới tiền tệ. chỉ mở server game cho memb vào dọn dẹp chuyển đồ thì dupe sao được ?

chicken1
29-08-14, 07:30 PM
mình chót dùng md5 rồi giờ làm sao bạn nhỉ ??

luutrunhac
29-08-14, 07:33 PM
mình chót dùng md5 rồi giờ làm sao bạn nhỉ ??

Bạn mở SQL => MuOnline => Memb_Info => Design Table => Memb_pwd bạn đổi sang varchar 34 là được.

chicken1
29-08-14, 07:45 PM
Bạn mở SQL => MuOnline => Memb_Info => Design Table => Memb_pwd bạn đổi sang varchar 34 là được.


hiên tại là varchar 50 giờ đổi sang từ 50 về 34 hả bạn??

luutrunhac
29-08-14, 09:56 PM
hiên tại là varchar 50 giờ đổi sang từ 50 về 34 hả bạn??

varchar là pass thường chứ đâu phải MD5 đâu bạn?

Mình nghĩ table memb__pwdmd5 khác với table memb__pwd của code chuyển server. Cái này bạn phải chỉnh lại code ở nhưng chỗ có table memb__pwd thành memb__pwdmd5

chicken1
29-08-14, 10:59 PM
mình đã ntin cho bạn db mình đang dùng db và muốn chuyển nhân vật từ khác sang db đó
bạn giúp mình vói nha
tks bạn !

luutrunhac
31-08-14, 11:39 AM
mình đã ntin cho bạn db mình đang dùng db và muốn chuyển nhân vật từ khác sang db đó
bạn giúp mình vói nha
tks bạn !
Cả DB của Server chuyển và nhận đều phải chạy đủ query.
Web server nhận và chuyển đều phải config giống nhau bạn nhé.
Hiện máy mình đang bận nên chưa xem đc DB của bạn, nếu chờ đc bạn chờ vài ngày nữa mình giải phóng công việc rồi sẽ xem giúp bạn hoặc teamvier trên máy bạn mình xem cho.

chicken1
31-08-14, 12:09 PM
tks bạn nhiều
co tg xem hộ mình cái db mình gửi bạn inbox rồi nha !

lequangvu
31-08-14, 01:20 PM
Nếu dùng sql 2000 thì send DB mình xem cho, nếu bạn cần

Jackieldm
01-09-14, 10:29 AM
Cảm ơn bạn chia sẽ, mình chưa test bản này của bạn nhưng mà mình thấy rất hữu ích. Nhưng code này cũng tương tự với code của Sweb share đúng không bạn? Mình từng dùng nhưng lại gặp lỗi cái phần TOP khi chuyển qua. Nên mình thường xóa đi querry của TOP chuyển cho an lành :D

Thanks sự chia sẽ của bạn rất ý nghĩa

The Gamer
06-09-14, 08:22 PM
Cảm ơn bạn chia sẽ, mình chưa test bản này của bạn nhưng mà mình thấy rất hữu ích. Nhưng code này cũng tương tự với code của Sweb share đúng không bạn? Mình từng dùng nhưng lại gặp lỗi cái phần TOP khi chuyển qua. Nên mình thường xóa đi querry của TOP chuyển cho an lành :D

Thanks sự chia sẽ của bạn rất ý nghĩa

chuyển sv thì làm sao mà giữ dc top :D

lequangvu
06-09-14, 10:20 PM
Cái chức năng chuyển server này mà dùng 2 DB cấu trúc khác nhau thì khoai vãi ra, dễ sảy ra lỗi, nhất là nbb sang fw và ngược lại :P
Chủ thớt HD chỉ dùng tốt cho DB nào dùng cùng loại web giống nbb thôi