Alehap2010
30-09-09, 11:01 AM
Chào các bạn!!
Cái này mình đã nghiên cứu ra lâu. Dự tính để code cái web cho MUTB.
Nhưng adm MUTB ko cần chức năng này lắm(vì muốn rs mất đồ, skill, VIP ko mất:|) nên mình quyết định share hướng dẫn.(Vs lại clb chưa ai share hết!)
Mình ko bjk cái này để box guide hay sql,web nên để đại ở đêy!!
Nếu có sai box, mong mod move zùm mình nha!!
Lưu ý: Đây là hướng dẫn thực hiện, các bạn phải code thêm cho phù hợp nhé.
Ưu điểm:
1/ Chỉ mất nguyên liệu cần(chaos,blue,cre) mà ko mất đồ trên ng`.
2/ Ko để lại lỗi chỗ ô đặt nguyên liệu.
3/ Mất đúng số lượng yêu cầu, VD rs cần 5 chaos, gamer bỏ 7 chaos. Rs xong vẫn còn lại 2 chaos...
Nhược điểm:
-Như đã nói, cái này là hướng dẫn kèm code, nên chỉ dành cho các adm hỉu chút ít về web. Những ai ko hỉu code web sẽ ko làm đc!
bj h bắt đầu:
Sau đêy là code!
$warehouse_result_sql = $db->Execute("SELECT Inventory FROM character WHERE (character.[Name] = '$nvok')");
$warehouse_result = $warehouse_result_sql->fetchrow();
$warehouse = $warehouse.$warehouse_result[0];
$warehouse = bin2hex($warehouse);
$warehouse = strtoupper($warehouse);
$warehouse = substr($warehouse, 0, 3840);
$vpyc = 0;
for($x=0; $x<120; ++$x)
{
$item = substr($warehouse,$x*32,32);
$code = substr($item, 0, 32);
$code_item = substr($code,0,4);
$korong = substr($code,31,1);
if(($code_item =="0F00") and ($korong != "F")){
$xoavp[alehap001][$vpyc] = $code;
++$vpyc;
}
}
if($vpyc < $soluong){echo"Số lượng Vật phẩm yêu cầu không đủ!!";$thieuvpyc = 1;}else{
$new_warehouse = $warehouse;
for($xz=0; $xz<$soluong; ++$xz)
{
$new_warehouse = str_replace($xoavp[alehap001][$xz],"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", $new_warehouse);
}
$db->Execute("Update Character set [Inventory]=0x$new_warehouse where Name='$nvok'");
}
Phân tích:
$warehouse_result_sql = $db->Execute("SELECT Inventory FROM character WHERE (character.[Name] = '$nvok')");
$warehouse_result = $warehouse_result_sql->fetchrow();
$warehouse = $warehouse.$warehouse_result[0];
$warehouse = bin2hex($warehouse);
$warehouse = strtoupper($warehouse);
$warehouse = substr($warehouse, 0, 3840);Check hòm đồ Nhân vật.
$nvok là tên nhân vật
$vpyc = 0;Để xác định thành viên có bao nhiêu vật phẩm yêu cầu, cần gán giá trị 0 cho nó tr'c.
Đây là phần quan trọng...
for($x=0; $x<120; ++$x)
{
$item = substr($warehouse,$x*32,32);
$code = substr($item, 0, 32);
$code_item = substr($code,0,4);
$korong = substr($code,31,1);
if(($code_item =="0F00") and ($korong != "F")){
$xoavp[alehap001][$vpyc] = $code;
++$vpyc;
}
}
Nó sẽ kiểm tra trên ng` nhân vật.
$code_item sẽ lấy 4 ký tự hex đầu của item.
$korong cái này ko có cũng ko sao.
$code lấy đủ 32 ký tự hex của item
if(($code_item =="0F00") and ($korong != "F")){
$xoavp[alehap001][$vpyc] = $code;
++$vpyc;
}Nếu 4 ký tự đầu(code_item) là 0F00, đây là mã của chaos. Bạn chỉ cần thay mã khác vô là okay!
Nếu đk đúng, 4 ký tự đầu là 0f00, no sẽ gán
$xoavp[alehap001][$vpyc] = $code;
++$vpyc;Lúc đầu biến vpyc là 0==>var $xoavp[alehap001][$vpyc] là $xoavp[alehap001][0] chứa 32 ký tự hex của item.
Sau đó nâng var $vpyc lên 1 đơn vị, ==> lúc này vpyc sẽ là 2.
Và vòng lặp này sẽ thực hiện lại đến khi hết thùng đồ(120 lần)
if($vpyc < $soluong){echo"Số lượng Vật phẩm yêu cầu không đủ!!";$thieuvpyc = 1;}else{
$new_warehouse = $warehouse;
[...]Hệ thống sẽ kiểm tra số lượng $vpyc thực hiện ở trên vs var $soluong.
Var $soluong này đc các adm cấu hình tr'c, để giá trị số lượng vật phẩm yêu cầu cần.
Nếu $vpyc có đc của thành viên nhỏ hơn $soluong, hệ thống sẽ báo lỗi và ngừng lại.
Ngược lại...
else{
$new_warehouse = $warehouse;
for($xz=0; $xz<$soluong; ++$xz)
{
$new_warehouse = str_replace($xoavp[alehap001][$xz],"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", $new_warehouse);
}
$db->Execute("Update Character set [Inventory]=0x$new_warehouse where Name='$nvok'");
}Hệ thống sẽ gán $new_warehouse = $warehouse; và thực hiện vòng lặp để xóa số lượng items cần.
$xz<$soluong; ++$xz <~~ hệ thống sẽ dừng lại khi đã del đủ số lượng vpyc.
Và code chính nằm ở đêy:
$new_warehouse = str_replace($xoavp[alehap001][$xz],"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", $new_warehouse);Nó sẽ thay thế code 32hex ký tự của item đã đc gán ở trên thành 32kys tự F(rỗng).
Vòng lặp này thực hiện đến khi số lượng yêu cầu đủ. Nó sẽ dừng lại!
==> Del chính xác số lượng vật phẩm dùng cho việc rs,rl...Mà ko làm mất đồ, hay để lại những vật phẩm lỗi ngay chổ đặt.
Cuối cùng update lại thông tin thùng đồ mới cho nhân vật với các vpyc đã đc del đủ số lượng!
$db->Execute("Update Character set [Inventory]=0x$new_warehouse where Name='$nvok'");
Gợi ý sử dụng vs các adm MU: Các adm bỏ đoạn code trên vào 1 function vs các var $mã_hex_item,$số_lượng_items_cần,$tên _nhân_vật, khi check đk rs thành công, các adm thực hiện function này là xong!!
Chúc các adm thành công!!
Nếu có sai sót mong đc các bro chỉ giáo thêm!
Cái này mình đã nghiên cứu ra lâu. Dự tính để code cái web cho MUTB.
Nhưng adm MUTB ko cần chức năng này lắm(vì muốn rs mất đồ, skill, VIP ko mất:|) nên mình quyết định share hướng dẫn.(Vs lại clb chưa ai share hết!)
Mình ko bjk cái này để box guide hay sql,web nên để đại ở đêy!!
Nếu có sai box, mong mod move zùm mình nha!!
Lưu ý: Đây là hướng dẫn thực hiện, các bạn phải code thêm cho phù hợp nhé.
Ưu điểm:
1/ Chỉ mất nguyên liệu cần(chaos,blue,cre) mà ko mất đồ trên ng`.
2/ Ko để lại lỗi chỗ ô đặt nguyên liệu.
3/ Mất đúng số lượng yêu cầu, VD rs cần 5 chaos, gamer bỏ 7 chaos. Rs xong vẫn còn lại 2 chaos...
Nhược điểm:
-Như đã nói, cái này là hướng dẫn kèm code, nên chỉ dành cho các adm hỉu chút ít về web. Những ai ko hỉu code web sẽ ko làm đc!
bj h bắt đầu:
Sau đêy là code!
$warehouse_result_sql = $db->Execute("SELECT Inventory FROM character WHERE (character.[Name] = '$nvok')");
$warehouse_result = $warehouse_result_sql->fetchrow();
$warehouse = $warehouse.$warehouse_result[0];
$warehouse = bin2hex($warehouse);
$warehouse = strtoupper($warehouse);
$warehouse = substr($warehouse, 0, 3840);
$vpyc = 0;
for($x=0; $x<120; ++$x)
{
$item = substr($warehouse,$x*32,32);
$code = substr($item, 0, 32);
$code_item = substr($code,0,4);
$korong = substr($code,31,1);
if(($code_item =="0F00") and ($korong != "F")){
$xoavp[alehap001][$vpyc] = $code;
++$vpyc;
}
}
if($vpyc < $soluong){echo"Số lượng Vật phẩm yêu cầu không đủ!!";$thieuvpyc = 1;}else{
$new_warehouse = $warehouse;
for($xz=0; $xz<$soluong; ++$xz)
{
$new_warehouse = str_replace($xoavp[alehap001][$xz],"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", $new_warehouse);
}
$db->Execute("Update Character set [Inventory]=0x$new_warehouse where Name='$nvok'");
}
Phân tích:
$warehouse_result_sql = $db->Execute("SELECT Inventory FROM character WHERE (character.[Name] = '$nvok')");
$warehouse_result = $warehouse_result_sql->fetchrow();
$warehouse = $warehouse.$warehouse_result[0];
$warehouse = bin2hex($warehouse);
$warehouse = strtoupper($warehouse);
$warehouse = substr($warehouse, 0, 3840);Check hòm đồ Nhân vật.
$nvok là tên nhân vật
$vpyc = 0;Để xác định thành viên có bao nhiêu vật phẩm yêu cầu, cần gán giá trị 0 cho nó tr'c.
Đây là phần quan trọng...
for($x=0; $x<120; ++$x)
{
$item = substr($warehouse,$x*32,32);
$code = substr($item, 0, 32);
$code_item = substr($code,0,4);
$korong = substr($code,31,1);
if(($code_item =="0F00") and ($korong != "F")){
$xoavp[alehap001][$vpyc] = $code;
++$vpyc;
}
}
Nó sẽ kiểm tra trên ng` nhân vật.
$code_item sẽ lấy 4 ký tự hex đầu của item.
$korong cái này ko có cũng ko sao.
$code lấy đủ 32 ký tự hex của item
if(($code_item =="0F00") and ($korong != "F")){
$xoavp[alehap001][$vpyc] = $code;
++$vpyc;
}Nếu 4 ký tự đầu(code_item) là 0F00, đây là mã của chaos. Bạn chỉ cần thay mã khác vô là okay!
Nếu đk đúng, 4 ký tự đầu là 0f00, no sẽ gán
$xoavp[alehap001][$vpyc] = $code;
++$vpyc;Lúc đầu biến vpyc là 0==>var $xoavp[alehap001][$vpyc] là $xoavp[alehap001][0] chứa 32 ký tự hex của item.
Sau đó nâng var $vpyc lên 1 đơn vị, ==> lúc này vpyc sẽ là 2.
Và vòng lặp này sẽ thực hiện lại đến khi hết thùng đồ(120 lần)
if($vpyc < $soluong){echo"Số lượng Vật phẩm yêu cầu không đủ!!";$thieuvpyc = 1;}else{
$new_warehouse = $warehouse;
[...]Hệ thống sẽ kiểm tra số lượng $vpyc thực hiện ở trên vs var $soluong.
Var $soluong này đc các adm cấu hình tr'c, để giá trị số lượng vật phẩm yêu cầu cần.
Nếu $vpyc có đc của thành viên nhỏ hơn $soluong, hệ thống sẽ báo lỗi và ngừng lại.
Ngược lại...
else{
$new_warehouse = $warehouse;
for($xz=0; $xz<$soluong; ++$xz)
{
$new_warehouse = str_replace($xoavp[alehap001][$xz],"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", $new_warehouse);
}
$db->Execute("Update Character set [Inventory]=0x$new_warehouse where Name='$nvok'");
}Hệ thống sẽ gán $new_warehouse = $warehouse; và thực hiện vòng lặp để xóa số lượng items cần.
$xz<$soluong; ++$xz <~~ hệ thống sẽ dừng lại khi đã del đủ số lượng vpyc.
Và code chính nằm ở đêy:
$new_warehouse = str_replace($xoavp[alehap001][$xz],"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", $new_warehouse);Nó sẽ thay thế code 32hex ký tự của item đã đc gán ở trên thành 32kys tự F(rỗng).
Vòng lặp này thực hiện đến khi số lượng yêu cầu đủ. Nó sẽ dừng lại!
==> Del chính xác số lượng vật phẩm dùng cho việc rs,rl...Mà ko làm mất đồ, hay để lại những vật phẩm lỗi ngay chổ đặt.
Cuối cùng update lại thông tin thùng đồ mới cho nhân vật với các vpyc đã đc del đủ số lượng!
$db->Execute("Update Character set [Inventory]=0x$new_warehouse where Name='$nvok'");
Gợi ý sử dụng vs các adm MU: Các adm bỏ đoạn code trên vào 1 function vs các var $mã_hex_item,$số_lượng_items_cần,$tên _nhân_vật, khi check đk rs thành công, các adm thực hiện function này là xong!!
Chúc các adm thành công!!
Nếu có sai sót mong đc các bro chỉ giáo thêm!