f-fantasy
26-06-19, 10:26 PM
- 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
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
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 : <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>
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
- 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
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
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 : <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>
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