PDA

View Full Version : [Guide] Việt hoá server CQ



MrDnD
28-08-10, 01:05 PM
I. Chuẩn bị:

1. Server:
_ hiện tại mình đang dùng sv mới nhất bên TQ và có lẽ cũng dùng bản này cho đến khi VH xong toàn bộ.
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> (<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> Ff271829f49)
_ server converted: đây là các file đã convert sang encoding Unicode UTF-8. Dùng các file đã convert encoding sẽ thuận tiện hơn trong khi dịch & sửa lỗi.
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> (<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> 2F%3F61b5g36a6c63vu4)

2. Công cụ:
a) Soạn thảo: có khá nhiều loại công cụ soạn thảo có thể dùng, ở đây mình nêu ra vài loại.
_ Notepad++: <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>)
_ sciTe: <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> 2FSciTE.html)
_ VC++ Express 2010: <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> 2Fexpress%2FDownloads%2F)
b) Dịch: tương tự như trên, ta cũng có khá nhiều công cụ dịch.
_ Thiều Chửu: (cần cài JRE 1.5 trở lên)
<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> hannom%2Ftdtc_off.php)
_ HVDict:
<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> fr%2FHVDic%2F)
_ Neodict: (cần cài Python 2.5 trở lên)
<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> m%2Fforum%2Fshowthread.php%3Ft%3D14450)
_ Quick Translator: (cần cài .Net)
<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> m%2Fforum%2Fshowthread.php%3Ft%3D30151)
_ Google Translate:
<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> om)

Ngoài ra các bạn cũng nên tìm hiểu qua ngôn ngữ C một chút.

P/s : Mình làm guide này mong các bạn cùng chung tay VH để mau chóng có sv CQ full tiếng Việt :D

chi tiết xin liên hệ YM : mr_dnd

MrDnD
28-08-10, 01:06 PM
II. Việt hóa phần Skill

1. current/skill/Readme.txt
Đây là một file khá hữu dụng, nó cho ta biết tác dụng của các thư mục khác nằm trong thư mục skill.
vì bài hướng dẫn này chỉ nói về Việt hóa nên ta chỉ quan tâm đến phần sau:

00 chỉ lệnh, pháp bảo

01 cơ bản võ công ( công kích, cái khác )

02 đặc thù võ công ( công kích, phòng ngự )

03 đặc thù võ công ( cái khác )

04 pháp thuật kỹ năng ( mao sơn, Côn Lôn )

05 y học kỹ năng ( vân mộng trạch )

11 boss pháp thuật

74 sủng vật pháp thuật

Nhìn qua nội dung chắc các bạn cũng hiểu.

2. current/skill/02/
<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>
Đây là thư mục chứa các skill tấn công ngoại công.
Nhìn hình trên, ta thấy tên file chia làm 2 nhóm.
_ Nhóm 1: tên file có 4 chữ số -- Đây là các bộ skill.
_ Nhóm 2: tên file có 5 chữ số -- Đây là các skill nhỏ nằm trong bộ skill.

Lấy 1 ví dụ cho các bạn dễ hiểu:
_ file skill/02/0261.c


inherit SKILL;

// 函数:构造处理
void create() // Hàm tạo skill
{
set_number(0261); // số
set_name( "漫天花雨" ); // Tên skill, ta cần quan tâm phần này.
}

// 函数:能否特殊技
void can_perform( object me )
{
me->set_attack_move(1);
// __DIR__ "02611"->can_perform(me);
/* có "//" ở phía trước thì là chú thích, dòng đó sẽ không chạy khi ta chạy sv nên ko cần quan tâm. */
__DIR__ "02612"->can_perform(me); // đây là các skill con nằm trong bộ
__DIR__ "02614"->can_perform(me); // skill.
__DIR__ "02615"->can_perform(me); // các bạn có thể dựa vào phần trong ""
__DIR__ "02616"->can_perform(me); // để tìm các skill con trong bộ skill này.
__DIR__ "02617"->can_perform(me); // VD: "02616" -> ta tìm file
__DIR__ "02613"->can_perform(me); // skill/02/02616.c
__DIR__ "02618"->can_perform(me); //
}

// 函数:删除特殊技
void remove_perform( object me ) // phần này không cần quan tâm lúc này.
{
// send_user( me, "%c%w%w", 0x50, 0xffff, 02611 );
send_user( me, "%c%w%w", 0x50, 0xffff, 02612 );
send_user( me, "%c%w%w", 0x50, 0xffff, 02613 );
send_user( me, "%c%w%w", 0x50, 0xffff, 02614 );
send_user( me, "%c%w%w", 0x50, 0xffff, 02615 );
send_user( me, "%c%w%w", 0x50, 0xffff, 02616 );
send_user( me, "%c%w%w", 0x50, 0xffff, 02617 );
send_user( me, "%c%w%w", 0x50, 0xffff, 02618 );
}

// 函数:重计属性
void recount_char( object me ) { USER_ENERGY_D->count_ap(me); }

// 函数:获取描述
string get_desc() // đây là phần ta quan tâm, nó là phần diễn tả của bộ skill.
{
return "[漫天花雨]提升使用暗器的攻击力� �每级提升 1.4 点攻击力\n";
}

Phần việc của chúng ta ở đây khá đơn giản, chỉ cần copy phần 漫天花雨 ở trong "" của hàm set_name rồi dịch ra.
Ở đây ta đc "Mạn Thiên Hoa Vũ" - 1 bộ skill của Đường Môn.

void create()
{
set_number(0261);
set_name( "漫天花雨" ); // copy trong này
}Phần này các bạn có thể tự dịch nhưng mình khuyên nên vào website của CQ để xem skill, vừa đỡ mệt lại dịch được chuẩn.
<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> %2Findex.php%3Foption%3Dcom_content%26view%3Dartic le%26id%3D80%26Itemid%3D58)

Tiếp đó là đến phần miêu tả


string get_desc()
{
return "[漫天花雨]提升使用暗器的攻击力� �每级提升 1.4 点攻击力\n"; // thay thế ở đây.
// ký tư \n ám chỉ việc xuống dòng. Các bạn nhớ giữ lại ký tự này, không được bỏ.
}trong bảng skill ở web CQ đã ghi rõ miêu tả, ta chỉ cần copy vào là xong.

chú ý : _tên skill và phần miêu tả phải đặt trong cặp " ", nếu không sẽ bị lỗi.

Đến đây ta đã xong được 1 bộ skill.

3. current/skill/02/02612.c
Bây giờ, ta sẽ tìm hiểu về các skill nhỏ.

void can_perform( object me )
{
me->set_attack_move(1);
// __DIR__ "02611"->can_perform(me);
__DIR__ "02612"->can_perform(me);
__DIR__ "02614"->can_perform(me);
__DIR__ "02615"->can_perform(me);
__DIR__ "02616"->can_perform(me);
__DIR__ "02617"->can_perform(me);
__DIR__ "02618"->can_perform(me);
}

lấy 1 skill bất kỳ, ở đây mình chọn 02612.c
file này có nội dung như sau: (mình chỉ lấy những dòng cần thiết cho đỡ dài)

#define THIS_SKILL 0261
#define THIS_PERFORM 02612
#define PF_START "02612"
#define PF_NAME "梅花针" // Tên skill, quan tâm phần này

#define SKILL_LEVEL 1
#define TIME_INTERVAL 1
#define SUB_MP 2 + (me->get_skill(THIS_SKILL) - SKILL_LEVEL)/10
#define ADD_AP 10 + (me->get_skill(THIS_SKILL) - SKILL_LEVEL)/10*8


// 函数:获取描述
string get_desc( object me )
{
int level = me->get_skill(THIS_SKILL);
int cur_level;
string result;
if (level<SKILL_LEVEL)
return HIR + PF_NAME +"\n技能需求:1级\n 基本暗器攻击技,攻击的同时提升10点 攻击力。"; // diễn tả về skill (lúc đưa chuột vào nó hiện lên) (đây là phần hiển thị skill khi chưa học đc)
cur_level = (level - SKILL_LEVEL)/10 + 1;
result = sprintf(HIC"%s(%d级)\n" NOR "技能需求:%d级\n法力消耗:%d点\n冷却 时间:%d秒\n 基本暗器攻击技,攻击的同时提升%d点 攻击力。\n" HIC"下一级:\n"NOR"技能需求:"HIR"%d级\n" NOR " 基本暗器攻击技,攻击的同时提升%d点 攻击力。",
PF_NAME, cur_level, SKILL_LEVEL, SUB_MP, TIME_INTERVAL, ADD_AP, cur_level*10+SKILL_LEVEL, ADD_AP + 8);
// đây là phần hiển thị skill đã học đc
return result;
}

đoạn này hơi lằng nhằng chút, rất dễ sai.
đầu tiên ta xem phần diễn tả skill chưa học đc.

return HIR + PF_NAME +"\n技能需求:1级\n 基本暗器攻击技,攻击的同时提升10点 攻击力。";
return : lệnh trả về của hàm, ta giữ nguyên.
HIR : màu chữ (ở đây là màu đỏ).
PF_NAME : tên skill (thay ở phía trên).
phần trong " " là phần ta cần dịch.

tiếp đến là phần skill đã học đc

result = sprintf(HIC"%s(%d级)\n" NOR "技能需求:%d级\n法力消耗:%d点\n冷却 时间:%d秒\n 基本暗器攻击技,攻击的同时提升%d点 攻击力。\n" HIC"下一级:\n"NOR"技能需求:"HIR"%d级\n" NOR " 基本暗器攻击技,攻击的同时提升%d点 攻击力。",
PF_NAME, cur_level, SKILL_LEVEL, SUB_MP, TIME_INTERVAL, ADD_AP, cur_level*10+SKILL_LEVEL, ADD_AP + 8);
cặp HIC ... NOR, HIR ... NOR ta ko cần quan tâm.
%s : tên skill,
%d : cấp độ của skill
技能需求:%d级 : Yêu cầu kỹ năng (tức bộ skill) : cấp %d
法力消耗:%d点 : Pháp lực tiêu hao : %d điểm
冷却时间:%d秒 : thời gian phục hồi (delay) : %d giây
基本暗器攻击技,攻击的同时提升%d点 攻击力。 : phần diễn tả skill, %d ở đây là điểm sát thương
下一级: tăng 1 cấp
技能需求: kỹ năng yêu cầu
%d级 : cấp %d
基本暗器攻击技,攻击的同时提升%d点 攻击力。 : tương tự như ở trên.

giải thích: %d là diễn tả 1 số nguyên, %s là 1 chuỗi ký tự. Khi vào game sẽ hiện lên các số cụ thể.

chú ý : các ký tự như %d, %s, %c, \n, HIR, NOR, các dấu " ", ';' ta đều phải giữ nguyên khi dịch.
phần diễn tả skill có thể xem tại website Chiến quốc.

đây là đoạn code đã đc dịch hoàn chỉnh

string get_desc( object me )
{
int level = me->get_skill(THIS_SKILL);
int cur_level;
string result;
if (level<SKILL_LEVEL)
return HIR + PF_NAME +"\nKỹ năng yêu cầu:Cấp 1\n Chiêu thức tấn công bằng ám khí cơ bản, tăng thêm 10 điểm Ngoại Công khi sát thương mục tiêu";
cur_level = (level - SKILL_LEVEL)/10 + 1;
result = sprintf(HIC"%s(Cấp %d)\n" NOR "Kỹ năng yêu cầu:Cấp %d\nPháp lực yêu cầu : %d điểm\nThời gian phục hồi: %d giây\n Chiêu thức tấn công bằng ám khí cơ bản, tăng thêm %d điểm Ngoại Công khi sát thương mục tiêu\n" HIC"Cấp tiếp theo:\n"NOR"Kỹ năng yêu cầu:"HIR"Cấp %d\n" NOR " Chiêu thức tấn công bằng ám khí cơ bản, tăng thêm %d điểm Ngoại Công khi sát thương mục tiêu",
PF_NAME, cur_level, SKILL_LEVEL, SUB_MP, TIME_INTERVAL, ADD_AP, cur_level*10+SKILL_LEVEL, ADD_AP + 8);
return result;
}

vậy là xong 1 skill.

quynhham0208
28-08-10, 04:22 PM
đặt gạch cả topic lun.hehe............haizzzzzz.bac MrDnd biet doc chu han' ko.day em voi'.chờ bản việt hoá lâu we'

MrDnD
28-08-10, 04:27 PM
chữ Hán mình đọc + viết đc từ 1->10 thôi bạn ạ :))

Minh Phụng
29-08-10, 08:52 AM
còn đỡ tui chỉ nhớ từ 1->3 thôi mấy cái kia quên hết

MrDnD
29-08-10, 10:50 AM
đã update phần II .

teopropro12
29-08-10, 12:42 PM
sever này k có áo choàng cánh hả anh

Minh Phụng
29-08-10, 02:28 PM
có,nhưng ko bít cách lấy thôi :D,tui phải mò 1 hồi mới ra 1 đống áo choàng +wing đấy

MrDnD
29-08-10, 03:01 PM
bài trên kia để làm gương.
còn bài post nào ko liên quan đến vấn đề Việt hoá sẽ bị chém nặng hơn.

hacdieu258
30-08-10, 10:15 AM
<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>

MrDnD
30-08-10, 11:23 AM
xem mấy cái có vietphrase đó
cũng gần gần tiếng Việt :|

MrDnD
01-09-10, 05:19 PM
chuẩn bị VH = công nghệ cao, không dùng công nghệ thấp thế này nữa :D
tạm dừng viết guide, tập trung vào việc VH, các bạn thông cảm :D

hacdieu258
06-09-10, 06:50 AM
chuẩn bị VH = công nghệ cao, không dùng công nghệ thấp thế này nữa :D
tạm dừng viết guide, tập trung vào việc VH, các bạn thông cảm :D

Công nghệ cao là công nghệ nào :-w Share qua đây tui VH coi >:P

MrDnD
06-09-10, 08:05 AM
tool viết cho 1 mình tớ dùng thôi. Share ra mất công hướng dẫn mệt lắm...
nói qua về cách xử lý thôi, ai biết lập trình thì tự code lấy ;))
down bản update 04/09/2010 về xem các file Read me.txt và translated.txt để biết thêm chi tiết ;))

hanzaky
06-09-10, 09:39 AM
tool viết cho 1 mình tớ dùng thôi. Share ra mất công hướng dẫn mệt lắm...
nói qua về cách xử lý thôi, ai biết lập trình thì tự code lấy ;))
down bản update 04/09/2010 về xem các file Read me.txt và translated.txt để biết thêm chi tiết ;))
Bác cứ share đi!
Em cũng học lập trình C được 1 thời gian rồi!=P~

MrDnD
06-09-10, 11:04 AM
source tool lấy dữ liệu...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace GetData
{
class Program
{
static void Main(string[] args)
{
string folderPath;

do
{
Console.Write("folder's path = ");
folderPath = Console.ReadLine();
Console.Write("enter type (skill = 1, map = 2, npcItem = 3) : ");
string choose = Console.ReadLine();
<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>
} while (true);

// lấy tên của 1 folder lớn.
/* DirectoryInfo dir = new DirectoryInfo(folderPath);
DirectoryInfo[] dirs = dir.GetDirectories();
foreach (DirectoryInfo dire in dirs)
WriteData(dire.FullName); */

}


static string GetName(FileInfo file, string[] type)
{
try
{
StreamReader sr = new StreamReader(file.FullName);
string str = sr.ReadToEnd();

int i1 = str.IndexOf(type[0]);
int i2 = i1;

while (str[i2] != Convert.ToChar(type[1]))
i2++;

string str2 = str.Remove(i2 - 1);
string str3 = str2.Remove(0, i1 + Convert.ToInt16(type[2]));
str2 = str3.Trim('\"');
return str2;
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
return "cannot read";
}
}

static void WriteData(string folderPath,string choose)
{
string[] skill = { "#define PF_NAME", "\n", "23" };
string[] map = { "get_name", ";", "20" };
string[] npcItem = { "set_name", ";", "10" };

DirectoryInfo dir = new DirectoryInfo(folderPath);
FileInfo[] files = dir.GetFiles();
string readme = folderPath.Insert(folderPath.Length, "\\Read me.txt");
string name,fileName;
string[] type;

TextWriter sw = new StreamWriter(readme);
foreach (FileInfo file in files)
{
if (choose == "1" && file.Name.Length == 7)
type = skill;
else if ((choose == "1" && file.Name.Length == 6) || choose == "3" )
type = npcItem;
else if (choose == "2")
type = map;
else
{
Console.WriteLine("chon sai");
sw.Close();
return;
}

fileName = file.Name.Insert(0, "\t");
name = GetName(file,type).Insert(GetName(file,type).Lengt h, fileName);
sw.WriteLine(name);
}

sw.Close();
}
}
}


ai hiểu đc thì hiểu, ko hiểu miễn hỏi nhé.
p/s : mấy pro coder đừng nhảy vào xoắn nhé, lười ko muốn trình bày gì hết :">

chiều sửa lại code tool VH rồi share nốt :))