PDA

View Full Version : [JX] Hỏi về hàm Say (New Version)



traminh83
06-05-17, 05:26 PM
Mình có đọc code source hàm Say có SPR hiện luôn - làm theo hướng dẫn - build source ok hết.
Trong script sourcejx49.lua thì có đoạn code định nghĩa hàm SayEx theo bên dưới



function SayEx(strSay)
local strMsg,strSel = "","";
local strNum = getn(strSay);
if strNum < 2 then
return
end;
if strNum > 2 then
for i=2,strNum - 1 do
strSel = strSel..format("%q", strSay[i])..",";
end;
strSel = strSel..format("%q", strSay[strNum]);
strMsg = "Say("..format("%q", strSay[1])..","..(strNum - 1)..","..strSel..");";
elseif strNum == 2 then
strSel = format("%q", strSay[strNum]);
strMsg = "Say("..format("%q", strSay[1])..",1"..","..strSel..");";
end;
dostring(strMsg);
end;


Nếu dùng SayEx cho NPC thì sẽ hiển thị không có SPR
<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>

Nếu mình muốn code thêm có thêm SPR hiển thị luôn thì phải phải định nghĩa hàm mới (ví dụ như Say2, SayNew...) như thế nào vậy mấy bạn? Giống như hình sau

<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> anazr8nj.png

wermanhme1990
06-05-17, 05:49 PM
của bạn đây:
<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>

traminh83
06-05-17, 06:25 PM
của bạn đây:
<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ình đã dựa vào hướng dẫn link mà bạn đưa để code hàm Say mới.
Ý mình muốn hỏi là bình thường trong source, file Scriptfuns.cpp có


{"Say", LuaSelectUI},
{"Say2", LuaSaySPR},


Mình đọc và làm theo hướng dẫ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>

Theo mình hiểu gọi trong script hàm Say thì theo nguyên tắc chỉ xuất hiện các bảng UI đơn giản (không có hình hay spr hiển thị thêm)
Và nếu gọi Say2 trong script .lua thì sẽ xuất hiện UI thêm spr .
Các file .ini liên quan thì cũng đã chỉnh theo hướng dẫn nhưng hình ở mình vẫn không hiện spr.

wermanhme1990
06-05-17, 06:39 PM
giờ phân tích thế này nhé: bạn đã làm được button và gọi được ui, tức là bạn đã dùng hàm load spr.
trong cái ui đó nó load string, bạn thử chèn thêm spr xem, chèn cố định vào đã, sau khi ok, tìm cách load từ file .ini.

traminh83
06-05-17, 07:32 PM
giờ phân tích thế này nhé: bạn đã làm được button và gọi được ui, tức là bạn đã dùng hàm load spr.
trong cái ui đó nó load string, bạn thử chèn thêm spr xem, chèn cố định vào đã, sau khi ok, tìm cách load từ file .ini.

Thanks! Giờ mình load được cái spr - nhưng là loại spr tĩnh thôi - mình đổi spr có nhiều frame thì nó không hiệ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>

Cái load spr từ source thì mình biết. Chỉ cần addchild rồi chỉ định biến cho file .ini là load được. Nhưng cái dạng load spr có nhiều frame và đúng với NPC thì chưa hiểu. Hi vọng sẽ tìm ra. Trên bài hướng dẫn trong cái link bạn đưa - chủ topic chỉ nói hướng dẫn các file .ini chưa rõ lắm, chỉ nói copy từ 1 Ui có sẵn.

wermanhme1990
06-05-17, 07:35 PM
Bạn tham khảo code của thienthanden2 (<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>) rồi áp vào code của bạn, không thì suy nghĩ cách khác, 1 vấn đề có nhiều cách giải quyết mà.
<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>

assaa
06-05-17, 07:54 PM
void KUiMsgSel2::Breathe()
{ if (m_NpcSpr.IsVisible())
m_NpcSpr.NextFrame(); //thêm
....

thiếu đoạn này nên mới thấy tĩnh thôi với lại code này cơ bản tham khảo là chính, khi hiểu r có thể code theo cách riêng

traminh83
06-05-17, 08:05 PM
Bạn tham khảo code của thienthanden2 (<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>) rồi áp vào code của bạn, không thì suy nghĩ cách khác, 1 vấn đề có nhiều cách giải quyết mà.
<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>

Link tạo spr động bạn đưa mình tham khảo thời gian trước rồi, tạo spr động thì OK, nhiều frame đều hiển thị được (mình đã thử đổi spr cho skill thì chạy OK).
Hồi nãy search trong source, thấy có một UiMsgNew, trong đó viết code gần giống với cách thienthanden2 hướng dẫn nhưng hình như là tạo ra một cái code mới hoàn toàn không dựa hoàn toàn vào các Ui có sẵn. Xem qua thì thấy có thêm một khai báo "\\settings\\ImageNpcList.ini"



[ImagePosition]
EnemyPosition=-85,-85
AnimalPosition=-85,-95
PasserbyPosition=60,40
CritterPosition=-85,-90
BossPosition=-85,-90

[ImageFrame]
EnemyFrame=15
AnimalFrame=15
PasserbyFrame=15
CritterFrame=14
BossFrame=8

[ImageEnemy]
1_Enemy=\spr\npcres\enemy\enemy001\enemy001_wlk.sp r
1_Frame=15
81_Enemy=\spr\npcres\enemy\enemy081\enemy081_wlk.s pr
81_Frame=14
199_Enemy=\spr\npcres\enemy\enemy199\enemy199_wlk. spr
199_Frame=15

[ImageAnimal]
1_Animal=\spr\npcres\animal\ani001\ani001_wlk.spr
1_Frame=15
2_Animal=\spr\npcres\animal\ani002\ani002_wlk.spr
2_Frame=15
3_Animal=\spr\npcres\animal\ani001\ani003_wlk.spr
2_Frame=15

[ImagePasserby]
181_Passerby=\spr\npcres\passerby\passerby181\pass erby181_st.spr
181_Frame=15
182_Passerby=\spr\npcres\passerby\passerby182\pass erby182_st.spr
182_Frame=15
183_Passerby=\spr\npcres\passerby\passerby183\pass erby183_st.spr
183_Frame=15

[ImageCritter]
8_Critter=\spr\npcres\critter\critter008\critter00 8_st.spr
8_Frame=14
9_Critter=\spr\npcres\critter\critter009\critter00 9_st.spr
9_Frame=14
10_Critter=\spr\npcres\critter\critter010\critter0 10_st.spr
10_Frame=14

[ImageBoss]
1_Boss=\spr\npcres\boss\boss001\boss001_wlk.spr
1_Frame=8
2_Boss=\spr\npcres\boss\boss002\boss002_wlk.spr
2_Frame=8
3_Boss=\spr\npcres\boss\boss003\boss003_wlk.spr
3_Frame=8



Nội dung file chỉ có nhiêu đó, nhưng trong source thì chỉ khai báo



#define NPC \\settings\\ImageNpcList.ini"


rồi thôi. Không có dòng code nào liên quan hoặc có thể mình chưa kiếm được dòng code liên quan đến cái define.
Thanks wermanhme1990 !

wermanhme1990
06-05-17, 08:14 PM
Thường code người khác share chủ yếu để tham khảo, chứ làm theo nhiều khi không hiểu hết được và mất thời gian hơn là tự viết.


Link tạo spr động bạn đưa mình tham khảo thời gian trước rồi, tạo spr động thì OK, nhiều frame đều hiển thị được (mình đã thử đổi spr cho skill thì chạy OK).

bạn thử lấy cái cho skill đó đưa vào cái ui của bạn thử, thực tế chuyển động của npc say nó giống với chuyển động của npc quái, thay vì chuyển động theo toạ độ thì ở đây chuyển động cố định.

traminh83
06-05-17, 08:18 PM
void KUiMsgSel2::Breathe()
{ if (m_NpcSpr.IsVisible())
m_NpcSpr.NextFrame(); //thêm
....

thiếu đoạn này nên mới thấy tĩnh thôi với lại code này cơ bản tham khảo là chính, khi hiểu r có thể code theo cách riêng

Thanks! Mình có đọc qua rồi, cũng có chỉnh sửa theo đó. Spr tĩnh thì ok, đang tìm hiểu với cách load đúng spr của npc có hiển thị hàm Say mới.

hu_go1224
06-05-17, 08:29 PM
anh tranminh83 có Skype không vậy a, e cũng đang tìm hiểu cái source mà còn non kém quá, cho e nick Skype học hỏi trao đổi với ạ

traminh83
07-05-17, 03:39 PM
Tình cờ đọc code rồi làm - kết quả khả quan.
Hàm Say New nội dung code 90% theo hướng dẫn của thienthanden2. Có chỉnh sửa chút ít.

<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>

Đã hiển thị được SPR của NPC khi click vào npc.
Nhưng có một cái hơi ngộ.

Bình thường dùng hàm Say mới mình code - bỏ vào NPC thì nó hiện, nhưng khi mình bỏ vào cái file .lua để chạy khi click button, ở đây là button Xaphu.
Trong hình, có NPC ông già Noel. Mình click vào NPC thì spr ông già noel hiển thị. Nhưng khi mình code cho button xaphu thì nó cũng hiện NPC là ông già noel. Rồi khi mình click NPC khác ví vụ như dã tẩu (trong file lua của dã tẩu thì mình code hàm say theo cách mới đã tạo trong source) rồi khi mình click vào button xaphu mình design riêng, nó vẫn hiện ra cái UI ok nhưng với NPC của dã tẩu. Giống như hễ mình click vào NPC thứ 1 thì bấm vào button Xaphu, SPR của NPC này sẽ hiện, nếu click vào NPC thứ 2 thì bấm vào button Xaphu, SPR của NPC thứ 2 sẽ hiện lên.

Lúc nhấn vào NPC ông già nô 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>

Sau đó nhấn vào button xaphu

<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>

assaa
07-05-17, 04:11 PM
Vấn đề đó là spr hiện trong khung đối thoại của bạn là spr của npc mà bạn đối thoại cuối cùng, để ý biến m_nImageNpcID là hiểu. Nên dùng hàm ở bất cứ đâu thì nó cũng sẽ hiển thị spr đó thôi. Đó là những hạn chế của code này, để có thể làm được hiển thị bất cứ spr nào tùy ý cần phải chỉnh sửa nhiều

traminh83
07-05-17, 04:17 PM
Vấn đề đó là spr hiện trong khung đối thoại của bạn là spr của npc mà bạn đối thoại cuối cùng, để ý biến m_nImageNpcID là hiểu. Nên dùng hàm ở bất cứ đâu thì nó cũng sẽ hiển thị spr đó thôi. Đó là những hạn chế của code này, để có thể làm được hiển thị bất cứ spr nào tùy ý cần phải chỉnh sửa nhiều

Thanks assaa! Giờ mình hiểu thêm một số kiến thức rồi. Trog 4rum giờ ít ai dev jx win, hình như chuyển qua linux hết rồi thì phải.

AlexKing
07-05-17, 04:35 PM
Vấn đề đó là spr hiện trong khung đối thoại của bạn là spr của npc mà bạn đối thoại cuối cùng, để ý biến m_nImageNpcID là hiểu. Nên dùng hàm ở bất cứ đâu thì nó cũng sẽ hiển thị spr đó thôi. Đó là những hạn chế của code này, để có thể làm được hiển thị bất cứ spr nào tùy ý cần phải chỉnh sửa nhiều
Hướng dẫn lun dc ko bạn. Hehe. Code này khó quá, hướng dẫn mình với :d

bil4i3n
07-05-17, 04:43 PM
Hướng dẫn lun dc ko bạn. Hehe. Code này khó quá, hướng dẫn mình với :d

Khó quá nhỉ :tire:
tiện thể đồng ý kết bạn dùm cái nick fb với ;))...............................

wermanhme1990
07-05-17, 05:02 PM
Theo như bạn mô tả thì hiểu như thế này: nó sẽ lấy idnpc cuối cùng để gán vào, vậy cái button xạ phu của bạn nó là gì, nếu bạn biến cái button đó thành npc thì sao?

bil4i3n
07-05-17, 05:17 PM
Theo như bạn mô tả thì hiểu như thế này: nó sẽ lấy idnpc cuối cùng để gán vào, vậy cái button xạ phu của bạn nó là gì, nếu bạn biến cái button đó thành npc thì sao?

Vấn đề chính ở chỗ Button đó không phải là NPC nên nó không hiển thị Spr Npc, cách đơn giản để test là khi nhấn vào Button đó thì gán lại Npc Index là được, mình nghĩ thế chứ chả đụng đến source làm gì :))