[JX] LINUX - Hàm Say mở rộng
Follow us on
Follow us on Facebook Follow us on Twitter Linked In Flickr Watch us on YouTube My Space Blogger
 
Kết quả 1 đến 7 của 7
  1. #1
    Thành Viên
    Ngày tham gia
    Jun 2006
    Đang ở
    Funabashi, Chiba, Japan
    Bài viết
    544
    Thanks
    410
    Thanked 300 Times in 82 Posts

    LINUX - Hàm Say mở rộng

    - Thông thường các hàm Say có sẵn của server mình thấy không đáp ứng được vấn đề là có nhiều, rất nhiều, cực nhiều lựa chọn.
    - Khi có quá nhiều lựa chọn thì nó sẽ bị thiếu hoặc bị mất các lựa chọn đầu tiên chỉ có các lựa chọn về sau.
    - Cũng có thể có người đã dev cái vấn đề đó rồi nhưng mình không tìm thấy thì mình tạo ra và share các bạn.
    - Cách dùng hàm mới thì như sau
    Code:
    	local nSelectPerPage = 10 --Nếu không khai báo thì nó mặc định là 10
    	local nDesc = "123123123"
    	local tbOpt = {
    	{"Lua chon 1",SayExTest,{Value}},
    	{"Lua chon 2",SayExTest,{Value1,Value2}},
    	}
    	SayEx(nDesc,tbOpt,nSelectPerPage) --Nếu chỗ này ko điền nSelectPerPage thì cũng được, hàm SayEx sẽ mặc định nó là 10
    hoặc
    Code:
    	local nSelectPerPage = 10
    	local nDesc = "123123123"
    	local tbOpt = {	}
    	for i=1,20 do
    		tinsert(tbOpt,{"Dong lua chon "..i,SayExTest,{Value}})
    	end
    	SayExTest(nDesc,tbOpt,nSelectPerPage)
    - Trong đó
    • nSelectPerPage : Tổng số lựa chọn trên 1 trang (không tính 3 dòng "Trang trước", "Trang sau", "Kết thúc đối thoại"
    • nDesc : Chỉ là lời thoại thôi
    • tbOpt : Danh sách các lựa chọn
    • SayExTest : Hàm mà nó sẽ chạy khi chọn lựa chọn
    • Value, Value1, Value2 : Các biến được gửi cùng với hàm SayExTest

    - Với hàm mới này các bạn không cần thêm dòng "Kết thúc đối thoại" hàm SayEx sẽ tự động thêm cho các bạn
    - Việc các bạn là đánh bao nhiêu tùy chọn cũng được chỉ vậy thôi.
    Clip giải thích và nói về hàm mới : [Only registered and activated users can see links. ]

    Code:
    G_PlayerDailogData = {} --Dµnh cho hµm SayEX
    function SayEx(nDesc,tbOpt,nSelectPerPage,nPage)
    	if nDesc == "" or nDesc == nil then nDesc = " " end
    	local nTotalSelect = getn(tbOpt)
    	if nPage == nil then nPage = 1 end
    	if nSelectPerPage == nil then nSelectPerPage = 10 end
    	local nStart = (nPage - 1) * nSelectPerPage + 1
    	local nEnd = nStart + nSelectPerPage - 1
    	if nStart > nTotalSelect then
    		return
    	end
    	if nEnd > nTotalSelect then
    		nEnd = nTotalSelect
    	end
    	local tbSayOpt = {}
    	for i=nStart, nEnd do
    		tinsert(tbSayOpt,{tbOpt[i][1],tbOpt[i][2],tbOpt[i][3]})
    	end
    	if nStart > 1 then
    		tinsert(tbSayOpt, {"Trang Tr­íc", SayEx, {nDesc,tbOpt,nSelectPerPage, nPage - 1}})
    	end
    	if nEnd < nTotalSelect then
    		tinsert(tbSayOpt, {"Trang Sau ", SayEx, {nDesc,tbOpt,nSelectPerPage, nPage + 1}})
    	end
    	tinsert(tbSayOpt, {"KÕt thóc ®èi tho¹i"})
    	G_PlayerDailogData[PlayerIndex] = tbSayOpt
    	local tb = {}
    	for i= 1, getn(tbSayOpt) do
    		tinsert(tb, tbSayOpt[i][1].. format("/#g_DailogBack(%d)", i))
    	end
    	if type(nDesc) == "number" then
    		Describe(nDesc, getn(tb), tb)
    	else
    		TaskSay("<dec>"..nDesc, tb)
    	end
    end
    function g_DailogBack(nSelectId, nCount) --Hâ trî hµm SayEx
    	local tbSayOpt = G_PlayerDailogData[PlayerIndex]
    	G_PlayerDailogData[PlayerIndex] = nil
    	
    	if tbSayOpt and tbSayOpt[nSelectId] then
    		local nParamCount = getn(tbSayOpt[nSelectId])
    		if nParamCount == 1 then
    			return
    		elseif nParamCount == 2 then
    			local pFun = tbSayOpt[nSelectId][2]
    			pFun()
    		elseif nParamCount == 3 then
    			local pFun = tbSayOpt[nSelectId][2]
    			local tbParam = tbSayOpt[nSelectId][3]
    			
    			call(pFun, tbParam)	
    		end
    	end
    end
    Lần sửa cuối bởi f-fantasy, ngày 27-08-19 lúc 10:14 PM.
    Khách viếng thăm hãy cùng f-fantasy xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  2. The Following 3 Users Say Thank You to f-fantasy For This Useful Post:

    p13cks03 (27-06-19), traminh83 (27-06-19), vuduymanh (27-06-19)

  3. #2
    Thành Viên
    Ngày tham gia
    Jul 2007
    Bài viết
    137
    Thanks
    47
    Thanked 61 Times in 20 Posts

    Ðề: LINUX - Hàm Say mở rộng

    Trích dẫn Gửi bởi f-fantasy [Only registered and activated users can see links. ]
    - Thông thường các hàm Say có sẵn của server mình thấy không đáp ứng được vấn đề là có nhiều, rất nhiều, cực nhiều lựa chọn.
    - Khi có quá nhiều lựa chọn thì nó sẽ bị thiếu hoặc bị mất các lựa chọn đầu tiên chỉ có các lựa chọn về sau.
    - Cũng có thể có người đã dev cái vấn đề đó rồi nhưng mình không tìm thấy thì mình tạo ra và share các bạn.
    - Cách dùng hàm mới thì như sau
    Code:
    	local nSelectPerPage = 10
    	local nDesc = "123123123"
    	local tbOpt = {
    	{"Lua chon 1",SayExTest,{Value}},
    	{"Lua chon 2",SayExTest,{Value1,Value2}},
    	}
    	SayEx(nDesc,tbOpt,nSelectPerPage)
    hoặc
    Code:
    	local nSelectPerPage = 10
    	local nDesc = "123123123"
    	local tbOpt = {	}
    	for i=1,20 do
    		tinsert(tbOpt,{"Dong lua chon "..i,SayExTest,{Value}})
    	end
    	SayExTest(nDesc,tbOpt,nSelectPerPage)
    - Trong đó
    • nSelectPerPage : Tổng số lựa chọn trên 1 trang (không tính 3 dòng "Trang trước", "Trang sau", "Kết thúc đối thoại"
    • nDesc : Chỉ là lời thoại thôi
    • tbOpt : Danh sách các lựa chọn
    • SayExTest : Hàm mà nó sẽ chạy khi chọn lựa chọn
    • Value, Value1, Value2 : Các biến được gửi cùng với hàm SayExTest

    - Với hàm mới này các bạn không cần thêm dòng "Kết thúc đối thoại" hàm SayEx sẽ tự động thêm cho các bạn
    - Việc các bạn là đánh bao nhiêu tùy chọn cũng được chỉ vậy thôi.
    Clip giải thích và nói về hàm mới : [Only registered and activated users can see links. ]

    Code:
    function SayEx(nDesc,tbOpt,nSelectPerPage,nPage)
    	if nDesc == "" or nDesc == nil then nDesc = " " end
    	local nTotalSelect = getn(tbOpt)
    	if nPage == nil then nPage = 1 end
    	local nStart = (nPage - 1) * nSelectPerPage + 1
    	local nEnd = nStart + nSelectPerPage - 1
    	if nStart > nTotalSelect then
    		return
    	end
    	if nEnd > nTotalSelect then
    		nEnd = nTotalSelect
    	end
    	local tbSayOpt = {}
    	for i=nStart, nEnd do
    		tinsert(tbSayOpt,{tbOpt[i][1],tbOpt[i][2],tbOpt[i][3]})
    	end
    	if nStart > 1 then
    		tinsert(tbSayOpt, {"Trang Tr­íc", SayEx, {nDesc,tbOpt,nSelectPerPage, nPage - 1}})
    	end
    	if nEnd < nTotalSelect then
    		tinsert(tbSayOpt, {"Trang Sau ", SayEx, {nDesc,tbOpt,nSelectPerPage, nPage + 1}})
    	end
    	tinsert(tbSayOpt, {"KÕt thóc ®èi tho¹i"})
    	CreateNewSayEx(nDesc,tbSayOpt)
    end
    Mình áp dụng để không giới hạn số dòng trên 1 trang đúng không AD?
    Khách viếng thăm hãy cùng traminh83 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  4. #3
    Thành Viên
    Ngày tham gia
    Jun 2006
    Đang ở
    Funabashi, Chiba, Japan
    Bài viết
    544
    Thanks
    410
    Thanked 300 Times in 82 Posts

    Ðề: LINUX - Hàm Say mở rộng

    Trích dẫn Gửi bởi traminh83 [Only registered and activated users can see links. ]
    Mình áp dụng để không giới hạn số dòng trên 1 trang đúng không AD?
    Đúng rồi bạn, như clip mình làm ấy. 50 dòng cũng được nó sẽ tự chia ra
    Khách viếng thăm hãy cùng f-fantasy xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  5. #4
    Thành Viên
    Ngày tham gia
    Jul 2007
    Bài viết
    137
    Thanks
    47
    Thanked 61 Times in 20 Posts

    Ðề: LINUX - Hàm Say mở rộng

    Trích dẫn Gửi bởi f-fantasy [Only registered and activated users can see links. ]
    Đúng rồi bạn, như clip mình làm ấy. 50 dòng cũng được nó sẽ tự chia ra
    À, trong cái khung, thấy bạn có để thông tin bao gồm tên Map, id, tọa độ gì đó.
    Cái id tọa độ thì mình dò hàm hiển thị được, nhưng cái tên map thì code như thế nào bạn? Lên forum search các lệnh JX Linux thấy có hàm SettingsGetCity() mà search trong tấc cả cá file script thì không thấy định nghĩa ở đâu hết.
    Lần sửa cuối bởi traminh83, ngày 27-06-19 lúc 03:58 PM.
    Khách viếng thăm hãy cùng traminh83 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  6. #5
    Thành Viên
    Ngày tham gia
    Jun 2006
    Đang ở
    Funabashi, Chiba, Japan
    Bài viết
    544
    Thanks
    410
    Thanked 300 Times in 82 Posts

    Ðề: LINUX - Hàm Say mở rộng

    Trích dẫn Gửi bởi traminh83 [Only registered and activated users can see links. ]
    À, trong cái khung, thấy bạn có để thông tin bao gồm tên Map, id, tọa độ gì đó.
    Cái id tọa độ thì mình dò hàm hiển thị được, nhưng cái tên map thì code như thế nào bạn? Lên forum search các lệnh JX Linux thấy có hàm SettingsGetCity() mà search trong tấc cả cá file script thì không thấy định nghĩa ở đâu hết.
    Code:
    aaa = SubWorldName(SubWorldID2Idx(53))
    	Msg2Player(aaa)
    Sẽ trả về tên của Map có ID 53 là Ba Lăng Huyện
    Lần sửa cuối bởi f-fantasy, ngày 27-06-19 lúc 07:14 PM.
    Khách viếng thăm hãy cùng f-fantasy xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  7. Các thành viên gởi lời cảm ơn đến f-fantasy vì bài viết này !

    traminh83 (28-06-19)

  8. #6
    Thành Viên
    Ngày tham gia
    Jul 2007
    Bài viết
    137
    Thanks
    47
    Thanked 61 Times in 20 Posts

    Ðề: LINUX - Hàm Say mở rộng

    Trích dẫn Gửi bởi f-fantasy [Only registered and activated users can see links. ]
    Code:
    aaa = SubWorldName(SubWorldID2Idx(53))
    	Msg2Player(aaa)
    Sẽ trả về tên của Map có ID 53 là Ba Lăng Huyện
    OK. Thanks bạn, đã thực hiện được.
    Khách viếng thăm hãy cùng traminh83 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  9. #7
    Thành Viên
    Ngày tham gia
    Nov 2008
    Bài viết
    430
    Thanks
    30
    Thanked 54 Times in 41 Posts

    Ðề: LINUX - Hàm Say mở rộng

    Mình gán vào sv linux thì báo lỗi tasksay nill value, bạn nào chỉ cách định nghĩa hàm mới trong jx linux giúp mình với, xin cảm ơn!

    error: attempt to call global `TaskSay' (a nil value)
    stack traceback:
    1[154]: function `SayEx' at line 34
    Khách viếng thăm hãy cùng ngotiendat xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

 

 

Các Chủ đề tương tự

  1. [JX] Xin chi giáo [Code] Tự Say cho NPC .Linux Thaks
    Bởi xomnhalalop12 trong diễn đàn Hỏi Đáp/ Yêu Cầu
    Trả lời: 21
    Bài viết cuối: 11-09-16, 03:42 PM
  2. [JX] [linux] Hàm say vòng 3 phút.
    Bởi xomnhalalop12 trong diễn đàn Hỏi Đáp/ Yêu Cầu
    Trả lời: 0
    Bài viết cuối: 07-11-15, 12:12 AM
  3. [JX] Hỏi về khung say new
    Bởi nhoxmap_b7 trong diễn đàn Hỏi Đáp/ Yêu Cầu
    Trả lời: 1
    Bài viết cuối: 07-11-12, 09:23 AM
  4. [JX] Hỏi về Hàm Say
    Bởi Crawler trong diễn đàn Hỏi Đáp/ Yêu Cầu
    Trả lời: 4
    Bài viết cuối: 10-06-12, 12:28 AM
  5. Nhocquay4mat vao say gjup jum`
    Bởi biyubi trong diễn đàn Hỏi Đáp/ Yêu Cầu
    Trả lời: 4
    Bài viết cuối: 19-07-10, 04:16 PM

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •  
Múi giờ GMT +7. Bây giờ là 12:34 AM.
vBulletin®, Copyright ©2000-2011, Jelsoft Enterprises Ltd.
CLBGamesVN không chịu trách nhiệm về Luật Bản Quyền của các tài liệu, bài viết v.v...được đăng tải trên diễn đàn này.
Diễn đàn phát triển dưới sự đóng góp của tất cả thành viên. BQT chỉ là những người thành lập ra sân chơi, quản lý và duy trì về mặt kỹ thuật, nội dung khi hợp lệ.