leanhducxh
23-01-13, 10:27 PM
mình đang đọc bài viết bạn share file npc
<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ó bạn đã share 1 đoạn code
local self = tbtgNpc;
local tbtgNpc = Map.tbtgNpc or {};
Map.tbNpc = tbNpc;
local CountThat = 0;
local nState = 0;
local nTimerId1 = 0;
local pTimerClose = 0;
local tbGetParam = {};
local uiSayPanel = Ui(Ui.UI_SAYPANEL);
local szCmd = [=[
Map.tbtgNpc:tgNpcSwitch();
]=];
function tbtgNpc:tgNpcSwitch()
local nMyMapId, nMyPosX, nMyPosY = me.GetWorldPos();
me.Msg(nMyMapId..","..nMyPosX..","..nMyPosY);
for i=1, 7000 do
CountThat = CountThat +1;
local nId = self:GetAroundNpcId(CountThat);
if nId then
local tbFileData = Lib:LoadTabFile("\\setting\\npc\\npc.txt");
for nRowNum, tbRow in ipairs(tbFileData or {}) do
if (tbRow.Id == ""..CountThat.."") then
local bSuccess = me.Msg("<color=green>"..tbRow.Name.." <color=gold> "..CountThat);
break;
end
end
end
end
CountThat = 0;
self:Reload();
end
function tbtgNpc:GetAroundNpcId(nTempId)
local tbAroundNpc = KNpc.GetAroundNpcList(me, 10);
for _, pNpc in ipairs(tbAroundNpc) do
if (pNpc.nTemplateId == nTempId) then
return pNpc.nIndex
end
end
return
end
function tbtgNpc:Reload()
local function fnDoScript(szFilePath)
local szFileData = KFile.ReadTxtFile(szFilePath);
assert(loadstring(szFileData, szFilePath))();
end
fnDoScript("\\interface\\spr_tool\\script\\window\\GetIdNpc.lu a");
me.Msg("<color=yellow>------------");
end
local tCmd={"Map.tbGetIdNpc:GetIdNpcSwitch()", "tgNpc", "", "Alt+1+2", "Alt+1+2", "tgdNpc"};
AddCommand(tCmd[4], tCmd[3], tCmd[2], tCmd[7] or UiShortcutAlias.emKSTATE_INGAME);
UiShortcutAlias:AddAlias(tCmd[2], tCmd[1]);
nhưng k hiểu lắm .ai có thể giúp mình đc k ?
Mình muốn set 1 npc trong thành , khi thực hiện thao tác vào nó thành công
ví dụ , nhận đồ gì đó .
NPC đó sẽ biến mất
(chạy theo hàm của mình như sau :)
function tbbantiec:GetQuest(nPlayerId, nNpcId)
local pPlayer = KPlayer.GetPlayerObjById(nPlayerId)
if (not pPlayer) then
return;
end
local pNpc = KNpc.GetById(nNpcId);
if (not pNpc) then
return;
end
local i = 0;
local nAdd = 0;
local nRand = 0;
local nIndex = 0;
-- random
nRand = MathRandom(1, 10000);
-- fill 3 rate
local tbRate = {3000,1500,1000,1500,3000};
local tbAward =
{
[1] = {me.AddExp(1000000)};
[2] = {me.AddJbCoin(5000000)};
[3] = {me.AddBindCoin(5000000)};
[4] = {me.AddExp(5000000)};
[5] = {18,1,377,1};
}
for i = 1, 5 do
nAdd = nAdd + tbRate[i];
if nAdd >= nRand then
nIndex = i;
break;
end
end
local pItem = me.AddItem(unpack(tbAward[nIndex]));
if pItem then
pPlayer.SetItemTimeout(pItem, os.date("%Y/%m/%d/%H/%M/%S", GetTime() + 7*24*3600), 0);
end
pNpc.Delete();
return 0;
end
pNpc.Delete(); ~~> là đoạn xóa npc sau khi thực hiện thao tác xong .
làm sao để npc đó tự động hiện lên sau xxx giây ???
mình đã add thêm 1 phần code mới như sau :
pNpc.Delete();
local _, nMyMapX, nMyMapY = me.GetWorldPos();
for _, pPlayer in ipairs(KPlayer.GetAroundPlayerList(me.nId, 50)) do
if (pPlayer.szName ~= me.szName) then
local _, nMapX, nMapY = pPlayer.GetWorldPos();
local nDistance = (nMapX - nMyMapX) ^ 2 + (nMapY - nMyMapY) ^ 2;
tbPlayer[#tbPlayer+1] = {nDistance, pPlayer};
end
end
local nMapId, nPosX, nPosY = me.GetWorldPos();
KNpc.Add2(9623, 150, 150, nMapId, nPosX, nPosY);
return 0;
Sau khi đối thoai , nhận đc item , sau đó npc biến mất. đã tự động tạo thêm npc . nhưng lại không đối thoại đc với npc đó .
Cảm ơn nhiều !
<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ó bạn đã share 1 đoạn code
local self = tbtgNpc;
local tbtgNpc = Map.tbtgNpc or {};
Map.tbNpc = tbNpc;
local CountThat = 0;
local nState = 0;
local nTimerId1 = 0;
local pTimerClose = 0;
local tbGetParam = {};
local uiSayPanel = Ui(Ui.UI_SAYPANEL);
local szCmd = [=[
Map.tbtgNpc:tgNpcSwitch();
]=];
function tbtgNpc:tgNpcSwitch()
local nMyMapId, nMyPosX, nMyPosY = me.GetWorldPos();
me.Msg(nMyMapId..","..nMyPosX..","..nMyPosY);
for i=1, 7000 do
CountThat = CountThat +1;
local nId = self:GetAroundNpcId(CountThat);
if nId then
local tbFileData = Lib:LoadTabFile("\\setting\\npc\\npc.txt");
for nRowNum, tbRow in ipairs(tbFileData or {}) do
if (tbRow.Id == ""..CountThat.."") then
local bSuccess = me.Msg("<color=green>"..tbRow.Name.." <color=gold> "..CountThat);
break;
end
end
end
end
CountThat = 0;
self:Reload();
end
function tbtgNpc:GetAroundNpcId(nTempId)
local tbAroundNpc = KNpc.GetAroundNpcList(me, 10);
for _, pNpc in ipairs(tbAroundNpc) do
if (pNpc.nTemplateId == nTempId) then
return pNpc.nIndex
end
end
return
end
function tbtgNpc:Reload()
local function fnDoScript(szFilePath)
local szFileData = KFile.ReadTxtFile(szFilePath);
assert(loadstring(szFileData, szFilePath))();
end
fnDoScript("\\interface\\spr_tool\\script\\window\\GetIdNpc.lu a");
me.Msg("<color=yellow>------------");
end
local tCmd={"Map.tbGetIdNpc:GetIdNpcSwitch()", "tgNpc", "", "Alt+1+2", "Alt+1+2", "tgdNpc"};
AddCommand(tCmd[4], tCmd[3], tCmd[2], tCmd[7] or UiShortcutAlias.emKSTATE_INGAME);
UiShortcutAlias:AddAlias(tCmd[2], tCmd[1]);
nhưng k hiểu lắm .ai có thể giúp mình đc k ?
Mình muốn set 1 npc trong thành , khi thực hiện thao tác vào nó thành công
ví dụ , nhận đồ gì đó .
NPC đó sẽ biến mất
(chạy theo hàm của mình như sau :)
function tbbantiec:GetQuest(nPlayerId, nNpcId)
local pPlayer = KPlayer.GetPlayerObjById(nPlayerId)
if (not pPlayer) then
return;
end
local pNpc = KNpc.GetById(nNpcId);
if (not pNpc) then
return;
end
local i = 0;
local nAdd = 0;
local nRand = 0;
local nIndex = 0;
-- random
nRand = MathRandom(1, 10000);
-- fill 3 rate
local tbRate = {3000,1500,1000,1500,3000};
local tbAward =
{
[1] = {me.AddExp(1000000)};
[2] = {me.AddJbCoin(5000000)};
[3] = {me.AddBindCoin(5000000)};
[4] = {me.AddExp(5000000)};
[5] = {18,1,377,1};
}
for i = 1, 5 do
nAdd = nAdd + tbRate[i];
if nAdd >= nRand then
nIndex = i;
break;
end
end
local pItem = me.AddItem(unpack(tbAward[nIndex]));
if pItem then
pPlayer.SetItemTimeout(pItem, os.date("%Y/%m/%d/%H/%M/%S", GetTime() + 7*24*3600), 0);
end
pNpc.Delete();
return 0;
end
pNpc.Delete(); ~~> là đoạn xóa npc sau khi thực hiện thao tác xong .
làm sao để npc đó tự động hiện lên sau xxx giây ???
mình đã add thêm 1 phần code mới như sau :
pNpc.Delete();
local _, nMyMapX, nMyMapY = me.GetWorldPos();
for _, pPlayer in ipairs(KPlayer.GetAroundPlayerList(me.nId, 50)) do
if (pPlayer.szName ~= me.szName) then
local _, nMapX, nMapY = pPlayer.GetWorldPos();
local nDistance = (nMapX - nMyMapX) ^ 2 + (nMapY - nMyMapY) ^ 2;
tbPlayer[#tbPlayer+1] = {nDistance, pPlayer};
end
end
local nMapId, nPosX, nPosY = me.GetWorldPos();
KNpc.Add2(9623, 150, 150, nMapId, nPosX, nPosY);
return 0;
Sau khi đối thoai , nhận đc item , sau đó npc biến mất. đã tự động tạo thêm npc . nhưng lại không đối thoại đc với npc đó .
Cảm ơn nhiều !