PDA

View Full Version : [JX] Hỏi cái đoạn C++ này



invalidpw
03-02-12, 04:35 PM
Hôm nay sau một hồi mò mẫm trong source thì tui đã đạt được thành tựu là : Hiểu được cấu trúc file map (*_Region_S.dat), cách thêm Npc, Obj, Trap vào trong map.
Rào cản cuối cùng là 1 hàm dùng để chuyển đổi từ script filename sang scriptId như sau :

DWORD g_FileName2Id(LPSTR lpFileName)
{
DWORD Id = 0;
char c = 0;
for (int i = 0; lpFileName[i]; i++)
{
c = lpFileName[i];
Id = (Id + (i + 1) * c) % 0x8000000b * 0xffffffef;
}
return (Id ^ 0x12345678);
}

Hàm này tui đã lấy 1 số script trap để test nhưng nó cho ra trapId khác với trong file map (Tui không rành về C++ và Visual Studio nên đã chuyển hàm này sang ngôn ngữ khác để dùng)
Ai rành C++ cho hỏi chỗ vòng lặp for thì biến i chạy từ 0 đến mấy vậy ?

DarkFoxIT
03-02-12, 04:37 PM
Chạy bằng dữ liệu được nạp vào var này lpFileName

thachlong78
03-02-12, 05:01 PM
for (int i = 0; lpFileName[I]; i++) <=> for (int i = 0; lpFileName[I] != 0; i++)

invalidpw
03-02-12, 08:10 PM
Cám ơn mọi người nhé tui đã giải quyết xong rồi. Bằng cách cài VC6 rồi build 1 cái dll chứa hàm này copy nguyên bản qua luôn. Sau đó gọi dll này ra xài.

thaihoa91
03-02-12, 09:34 PM
Ghê :D Chúc ông sớm hoàn thành :D Hết tết rùi chuẩn bị dev JX lại :))

LeHuyetVoHon
03-02-12, 10:59 PM
định chơi c# hay vb,mà phải call dll.làm trap để làm cái gì vậy nhỉ qua cửa chăng

invalidpw
03-02-12, 11:55 PM
định chơi c# hay vb,mà phải call dll.làm trap để làm cái gì vậy nhỉ qua cửa chăng
Tui không biết xài VC (IDE), còn C++ thì khả năng tui chỉ biết đọc chứ không viết được vì tui là Delphi programmer (đã 10 năm) :)
Đoạn code C đó chuyển mã qua Delphi mãi không chạy được đúng nên tui phải nhảy qua VC6 viết DLL cho nó chạy nguyên văn hàm đó, rồi qua Delphi gọi xài. KQ đã chạy đúng roài. Vậy cho nó nhanh vì đã mất hết 2 tiếng đồng hồ cái hàm này.

Khi khởi động gameserver sẽ load tất cả script nằm dưới \\script, mỗi script_filename sẽ được hàm này chuyển thành script_id.
Trong file map sẽ chỉ khai báo trap và script_id chứ không khai script_filename, bởi vậy không thể add trap mới hay chỉnh file script bằng edit file text hay hex lại được.


định chơi c# hay vb
Ghét nhất .Net, đi đâu cũng phải đem netframework theo, 1.1, 2.0, 3.5, rồi 4.0 tùm lum. Làm Delphi không dùng tới netframework.

LeHuyetVoHon
04-02-12, 01:15 PM
ôi lạy hồn,trình 10 năm depc mà không chuyển sang dùng vc đi,2 cái có hơn nhau máy đâu mà không viết code được
vơi lại cái hàm kia toàn thành phân cơ bản của c,công cụ nào mà chả build được.
mà sao bạn không làm cái obj map.hiện nay các map cũ bị thiếu hay lỗi cái này mà dẫn đến lag map

thachlong78
04-02-12, 05:28 PM
Delphi thất thế lâu rồi, nếu không vì công việc yêu cầu thì không nên đeo đuổi mãi, mấy ngôn ngừ đều tương tự nhau, học được 1 sẽ học được mấy ngôn ngữ khác không mấy khó khăn. Source game không đơn giản đâu, rất nhiều phần là hợp ngữ và những thư viện mở lẫn đóng, việc sử dụng tương thích là điều hết sức quan trọng, nên việc thay đổi phiên bản VS đã là điều tối kỵ rồi.

invalidpw
04-02-12, 08:27 PM
Tại không có thời gian học VC nên biết gì xài nấy thui.
Với lại nếu cái nào cũng như nhau thì thôi xài cái nào cũng được.