eddy
07-01-10, 08:48 AM
Nhân ngày sinh nhật lần thứ 18 của tớ (7-1-1992 <=> 7/1/2010)....xjn release tutorial này để giúp các bạn thỏa mãn thêm trí tò mò của chính mình ^^....
Và happy new year
EDMT MuOnline Develop Team Present
Tutorial “How to add support Exl + Ancient Item + JOH” ?
Author : Eddy
Code : Eddy
GameServer sử dụng : 1.00.18 (Original – Not SCFMT)
Nhân dịp sinh nhật của mình và mình vừa tròn 18 tuổi vào ngày hôm nay (7/1/1992 – 7/1/2010) , mình post guide này mong giúp các bạn có them hiểu biết về MuServer . Và chúc các bạn một năm mới hạnh phúc ! :D
Lời nói đầu :
- Chắc hẳn trong chúng ta , ai cũng đã từng một lần được chơi phiên bản MU 1.0L (nếu ai chưa chơi thì ... BÍ) :D...... Và cũng đã tận hưởng được những tính năng khá hay và điển hình là : Exl + Ancient Item (Full Exl + Thần). – thong tin này nghe 1 người nào nói chứ khi xưa chơi MU Net Pro của tao4cs mình cũng k thấy item exl+ancient :D.
Và theo tôi biết thì ở VN có một người làm được...đó là LOP (LandOfPhi) . Tôi cũng đã quan tâm đến vấn đề này và có hỏi qua LOP nhưng chưa nhận được câu trả lời :p.
Vậy thì...tự lực cánh sinh thui =))...Và cũng không khó lắm
Còn bây giờ , tôi sẽ chỉ cho các bạn cách làm nó . Khá đơn giản !
1. Cách sửa làm cho GameServer hiểu Item Exl + Ancient
Mặc định : GameServer chỉ hỗ trợ 1 loại item với 1 loại tính năng , nếu bạn cho Exl + Ancient thì nó sẽ “chỉ” hiểu là đó là Ancient và bỏ Option Exl đi ^^. Bây giờ ta sẽ bypass nó
Hàm cần thao tác : Citem::Conver
Offsets : 0x0050E556
0050E556 |. 74 1D JE SHORT GameServ.0050E575
Thay đổi thành
0050E556 EB 1D JMP SHORT GameServ.0050E575
2. Cách sửa làm cho GameServer hiểu Item Exl + Ancient + JOH (JewelOfHarmony)
Mặc định GS sẽ không hiểu item Ancient được add Gia Cường nên nó sẽ không cho Set Item được add gia cường...
Ta sẽ tiến hành bypass nó
Hàm cần thao tác : CjewelOfHamonySystem::StrengthenItemByJewelOfHarmo ny
Offsets : 0x005735DB
005735DB |. 75 44 JNZ SHORT GameServ.00573621
Thay đổi thành
005735DB EB 44 JMP SHORT GameServ.00573621
Khá đơn giản !
OK ! Save all và tested...Work 100%
Tiện đây ! Bổ túc cho các bạn ít thông tin về MU CODE:
1. Tìm hiểu tổng quan về gObj
Giá trị gObj của User sẽ được trả về qua công thức
gObjX = ObjectBase +(gObjSize*aIndex)+gObjId
VD Nếu bạn muốn lấy giá trị zen của 1 User nào đó , bạn cần có các điều kiện sau
gObjBase
gObjZen
gObjSize
aIndex
Tôi sẽ giải thích từng cái
gObjBase = tạm hiểu cơ bản nó là “Đối tượng cơ bản”
gObjZen = nt “Đối tượng Zen”
gObjSize = nt “Kích Thước Đối Tượng”
aIndex = Giá trị của user (cái này cứ khai báo mặc định là aIndex , trong 1.00.18 nó sẽ giao động từ 6400 – 7400 -> nghĩa là server chịu tối đa 1000 user kết nối :”>)) – Người đầu tiên vào server sẽ được aIndex là 6400 , người thứ 2 là 6401...cứ thế!)
Bây giờ tôi xin chia sẻ 1 số gObj của GS 1.00.18
#define gObjBase 0x660F078
#define gObjSize 0x1968
#define gObjPlayer 0x1900
#define gObjMaxUsr 0x1CE7
#define gObj_isonline 0x4
#define gObjMapID 0x10D
#define gObjPosX 0x108
#define gObjPosY 0x10A
#define gObjPk 0x101
#define gObjClass 0x9E
#define gObjLupp 0xA4
#define gObjStr 0xB8
#define gObjDex 0xBA
#define gObjVit 0xBC
#define gObjEne 0xBE
#define gObjLead 0xDC
#define gObjLogin 0x68
#define gObjNick 0x73
#define gObjDir 0x10C
#define gObjExp 0xAC
#define gObjZen 0xB4
#define gObjLvl 0xA0
#define gObjCtl 0x1C4
OK ! Ở đây bạn đã có tất cả ! Bi giờ nếu muốn lấy zen của chính user bạn ta dùng CT sau
Ta sẽ đặt một biến INT để nhận giá trị từ công thức:
Int Zen = gObjBase+(gObjSize*aIndex)+gObjZen
Biến Zen lúc này sẽ chứa số zen bạn đang có
Cách thức hoạt động của các lệnh
/post => Chúng ta đã biết nó là chat tòan server , nhưng tại sao nó lại hiển thị với tất cả và không hiển thị như chat bình thường
Đơn giản ! Nó được coder code cho 1 vòng lặp từ gObjPlayer ->gObjMaxUser để được hiển thị với all người chơi đang connect
(nghĩa là lặp từ 6400 tới 7400 nếu ai đó thỏa thì gửi mes)
/addx => Lệnh cộng điểm trực tuyến dựa vô Packet {0xC1,0x05,0xF3,0x06, CMD_STATS_TYPE};
Với CMD_STATS_TYPE có các giá trị
0 – cho str
1 – cho agi
2 – cho vit
3 – cho ene
4 – cho com
Và hàm CGLevelUpPointAdd để add point vào CSDL (thao tác với DataServer)
Đó là mã nguồn lệnh cộng điểm cơ bản của Source MU
/skin x : Lệnh này khá khó nếu bạn không rõ về gObj nhưng khá dễ nếu bạn rành ^^...
Nó tác động nhờ gObj_ChangeSkin (Cái này mình tạm gọi là thế ) với id là : 0x2F0 (ở 1.00.18)
Và nhờ hàm gObjViewportListProtocolCreate để hóa Player ra id quái
/pkclear : Lệnh này hoạt động cũng đơn giản , chỉ cần dùng hàm GCPKLevelSend gửi pk level tới aIndex là ok ! (Nếu thích cứ đặt điều kiện tùy ý)
/drop : Lệnh này cũng đơn giản ! Chỉ scan từ “msg” giá trị item và gián cho các biến của hàm ItemSerialCreateSend
Nếu các bạn hiểu những cái này thì từ từ sẽ có thể code riêng command theo ý mình
Hãy nhớ phương châm của anh Cườnglee “ Không có việc gì khó – Chỉ sợ không chịu mò”
Nếu các bạn rành rẽ rùi , thì có thể tự code riêng các command cho GM như EDMT chúng mình hay làm
Tutorial tới đây là hết .
Tác giả :
Eddy – [EDMT] Main Coder
gObj – thanks f1x
Source Command – thanks DSTeam
Chú ý : Tất cả những cái này mình hướng dẫn trên GameServer 1.00.18 . Còn nếu bạn nào đòi hỏi trên 1.00.90 thì hãy tự tìm hiểu...mình đã chỉ rõ hàm cần sửa. Mình không thể public thông tin của 1.00.90 cuz nó là <PRIVATE>.
Bật mí : Ở 1.00.90 có thể them được 1 item mới là Exl + Socket item + JOH ^^.[/CENTER]
<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>
And Bonus : Custom item + Socket add
<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>
[CENTER]EDMT 2010 - We BACK
Và happy new year
EDMT MuOnline Develop Team Present
Tutorial “How to add support Exl + Ancient Item + JOH” ?
Author : Eddy
Code : Eddy
GameServer sử dụng : 1.00.18 (Original – Not SCFMT)
Nhân dịp sinh nhật của mình và mình vừa tròn 18 tuổi vào ngày hôm nay (7/1/1992 – 7/1/2010) , mình post guide này mong giúp các bạn có them hiểu biết về MuServer . Và chúc các bạn một năm mới hạnh phúc ! :D
Lời nói đầu :
- Chắc hẳn trong chúng ta , ai cũng đã từng một lần được chơi phiên bản MU 1.0L (nếu ai chưa chơi thì ... BÍ) :D...... Và cũng đã tận hưởng được những tính năng khá hay và điển hình là : Exl + Ancient Item (Full Exl + Thần). – thong tin này nghe 1 người nào nói chứ khi xưa chơi MU Net Pro của tao4cs mình cũng k thấy item exl+ancient :D.
Và theo tôi biết thì ở VN có một người làm được...đó là LOP (LandOfPhi) . Tôi cũng đã quan tâm đến vấn đề này và có hỏi qua LOP nhưng chưa nhận được câu trả lời :p.
Vậy thì...tự lực cánh sinh thui =))...Và cũng không khó lắm
Còn bây giờ , tôi sẽ chỉ cho các bạn cách làm nó . Khá đơn giản !
1. Cách sửa làm cho GameServer hiểu Item Exl + Ancient
Mặc định : GameServer chỉ hỗ trợ 1 loại item với 1 loại tính năng , nếu bạn cho Exl + Ancient thì nó sẽ “chỉ” hiểu là đó là Ancient và bỏ Option Exl đi ^^. Bây giờ ta sẽ bypass nó
Hàm cần thao tác : Citem::Conver
Offsets : 0x0050E556
0050E556 |. 74 1D JE SHORT GameServ.0050E575
Thay đổi thành
0050E556 EB 1D JMP SHORT GameServ.0050E575
2. Cách sửa làm cho GameServer hiểu Item Exl + Ancient + JOH (JewelOfHarmony)
Mặc định GS sẽ không hiểu item Ancient được add Gia Cường nên nó sẽ không cho Set Item được add gia cường...
Ta sẽ tiến hành bypass nó
Hàm cần thao tác : CjewelOfHamonySystem::StrengthenItemByJewelOfHarmo ny
Offsets : 0x005735DB
005735DB |. 75 44 JNZ SHORT GameServ.00573621
Thay đổi thành
005735DB EB 44 JMP SHORT GameServ.00573621
Khá đơn giản !
OK ! Save all và tested...Work 100%
Tiện đây ! Bổ túc cho các bạn ít thông tin về MU CODE:
1. Tìm hiểu tổng quan về gObj
Giá trị gObj của User sẽ được trả về qua công thức
gObjX = ObjectBase +(gObjSize*aIndex)+gObjId
VD Nếu bạn muốn lấy giá trị zen của 1 User nào đó , bạn cần có các điều kiện sau
gObjBase
gObjZen
gObjSize
aIndex
Tôi sẽ giải thích từng cái
gObjBase = tạm hiểu cơ bản nó là “Đối tượng cơ bản”
gObjZen = nt “Đối tượng Zen”
gObjSize = nt “Kích Thước Đối Tượng”
aIndex = Giá trị của user (cái này cứ khai báo mặc định là aIndex , trong 1.00.18 nó sẽ giao động từ 6400 – 7400 -> nghĩa là server chịu tối đa 1000 user kết nối :”>)) – Người đầu tiên vào server sẽ được aIndex là 6400 , người thứ 2 là 6401...cứ thế!)
Bây giờ tôi xin chia sẻ 1 số gObj của GS 1.00.18
#define gObjBase 0x660F078
#define gObjSize 0x1968
#define gObjPlayer 0x1900
#define gObjMaxUsr 0x1CE7
#define gObj_isonline 0x4
#define gObjMapID 0x10D
#define gObjPosX 0x108
#define gObjPosY 0x10A
#define gObjPk 0x101
#define gObjClass 0x9E
#define gObjLupp 0xA4
#define gObjStr 0xB8
#define gObjDex 0xBA
#define gObjVit 0xBC
#define gObjEne 0xBE
#define gObjLead 0xDC
#define gObjLogin 0x68
#define gObjNick 0x73
#define gObjDir 0x10C
#define gObjExp 0xAC
#define gObjZen 0xB4
#define gObjLvl 0xA0
#define gObjCtl 0x1C4
OK ! Ở đây bạn đã có tất cả ! Bi giờ nếu muốn lấy zen của chính user bạn ta dùng CT sau
Ta sẽ đặt một biến INT để nhận giá trị từ công thức:
Int Zen = gObjBase+(gObjSize*aIndex)+gObjZen
Biến Zen lúc này sẽ chứa số zen bạn đang có
Cách thức hoạt động của các lệnh
/post => Chúng ta đã biết nó là chat tòan server , nhưng tại sao nó lại hiển thị với tất cả và không hiển thị như chat bình thường
Đơn giản ! Nó được coder code cho 1 vòng lặp từ gObjPlayer ->gObjMaxUser để được hiển thị với all người chơi đang connect
(nghĩa là lặp từ 6400 tới 7400 nếu ai đó thỏa thì gửi mes)
/addx => Lệnh cộng điểm trực tuyến dựa vô Packet {0xC1,0x05,0xF3,0x06, CMD_STATS_TYPE};
Với CMD_STATS_TYPE có các giá trị
0 – cho str
1 – cho agi
2 – cho vit
3 – cho ene
4 – cho com
Và hàm CGLevelUpPointAdd để add point vào CSDL (thao tác với DataServer)
Đó là mã nguồn lệnh cộng điểm cơ bản của Source MU
/skin x : Lệnh này khá khó nếu bạn không rõ về gObj nhưng khá dễ nếu bạn rành ^^...
Nó tác động nhờ gObj_ChangeSkin (Cái này mình tạm gọi là thế ) với id là : 0x2F0 (ở 1.00.18)
Và nhờ hàm gObjViewportListProtocolCreate để hóa Player ra id quái
/pkclear : Lệnh này hoạt động cũng đơn giản , chỉ cần dùng hàm GCPKLevelSend gửi pk level tới aIndex là ok ! (Nếu thích cứ đặt điều kiện tùy ý)
/drop : Lệnh này cũng đơn giản ! Chỉ scan từ “msg” giá trị item và gián cho các biến của hàm ItemSerialCreateSend
Nếu các bạn hiểu những cái này thì từ từ sẽ có thể code riêng command theo ý mình
Hãy nhớ phương châm của anh Cườnglee “ Không có việc gì khó – Chỉ sợ không chịu mò”
Nếu các bạn rành rẽ rùi , thì có thể tự code riêng các command cho GM như EDMT chúng mình hay làm
Tutorial tới đây là hết .
Tác giả :
Eddy – [EDMT] Main Coder
gObj – thanks f1x
Source Command – thanks DSTeam
Chú ý : Tất cả những cái này mình hướng dẫn trên GameServer 1.00.18 . Còn nếu bạn nào đòi hỏi trên 1.00.90 thì hãy tự tìm hiểu...mình đã chỉ rõ hàm cần sửa. Mình không thể public thông tin của 1.00.90 cuz nó là <PRIVATE>.
Bật mí : Ở 1.00.90 có thể them được 1 item mới là Exl + Socket item + JOH ^^.[/CENTER]
<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>
And Bonus : Custom item + Socket add
<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>
[CENTER]EDMT 2010 - We BACK