PDA

View Full Version : [JX] Xin chi giáo [Code] Tự Say cho NPC .Linux Thaks



xomnhalalop12
02-10-15, 06:59 AM
Mình thấy 1 số server có code này , anh em thông não cho mình phát được không thaks.
<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>)

Hoang.JX1Team
02-10-15, 08:39 AM
Tham khảo hàm NpcChat trong file này \script\missions\maze\task_final.lua

vuduymanh
02-10-15, 08:44 AM
Tham khảo hàm NpcChat trong file này \script\missions\maze\task_final.lua

bác có thể hướng dẫn 1 chút đc ko bác chẳng hạn gắn cái hàm NpcChat nó tự nói chuyện 1 mình theo thời gian dc ko bác

xomnhalalop12
02-10-15, 08:48 AM
Tham khảo hàm NpcChat trong file này \script\missions\maze\task_final.lua

thân cảm ơn bác để e nguyên cứu..

Hoang.JX1Team
02-10-15, 09:25 AM
bác có thể hướng dẫn 1 chút đc ko bác chẳng hạn gắn cái hàm NpcChat nó tự nói chuyện 1 mình theo thời gian dc ko bác

Cái này mình không dùng linux nhưng nhìn code thì hàm đó sử dụng như này

NpcChat(nNpcIndex, msg, delaysec)

nNpcIndex, msg là index và nội dung câu chat
delaysec là số giây chờ chạy hàm(nếu nil thì mặc đinh = 0)

Bằng cách sử dụng nhiều hàm vs số giây delay khác nhau thì sẽ nói các câu khác nhau. Còn dùng liên tục theo thời gian thì kết hợp AddTimer cho Npc đó

traugiautien
02-10-15, 08:25 PM
mấy làm được có thể hướng dẫn thêm chút nữa được không ạ.

heodat139
02-10-15, 10:07 PM
heheh !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!

keo_ngot1418
02-10-15, 10:08 PM
Step2 = Step:New()
function Step2:Start(task)
local mapid = task:GetMapId()
local pos = task:GetPosition()
local boss = FightNpcManager:AddNpc("Long Cöu Thiªn", NPCID_DIALOGBOSS, mapid, pos.boss.x, pos.boss.y, self, nil, 1, 1)
if (boss > 0) then
local nNpcIndex = FightNpcManager:GetNpcIndex(boss)
SyncNpc(nNpcIndex)
NpcChat(nNpcIndex, "<color=yellow>(nxw)<enter>NhËn th­ëng trang bÞ t¹i ®©y !<color>")
self.m_Boss = boss
self.m_Timer = TimerList:AddTimer(self, 9)
end
self.m_Task = task
self.m_MapId = mapid
end

vuduymanh
03-10-15, 08:01 AM
Step2 = Step:New()
function Step2:Start(task)
local mapid = task:GetMapId()
local pos = task:GetPosition()
local boss = FightNpcManager:AddNpc("Long Cöu Thiªn", NPCID_DIALOGBOSS, mapid, pos.boss.x, pos.boss.y, self, nil, 1, 1)
if (boss > 0) then
local nNpcIndex = FightNpcManager:GetNpcIndex(boss)
SyncNpc(nNpcIndex)
NpcChat(nNpcIndex, "<color=yellow>(nxw)<enter>NhËn th­ëng trang bÞ t¹i ®©y !<color>")
self.m_Boss = boss
self.m_Timer = TimerList:AddTimer(self, 9)
end
self.m_Task = task
self.m_MapId = mapid
end

Bác ơi em muốn tất cả lễ quan thành thị và thôn nó tự chạy hàm nagy theo giờ thì làm thế nào vậy bác

MrHarryPotter
03-10-15, 10:33 AM
.................................................. ..................................................

xomnhalalop12
03-10-15, 11:07 AM
anh chị nào teamview qua làm dùm e tí được ko ạ..
Yahoo: net_pro_dichvu

vuduymanh
03-10-15, 02:29 PM
file task_final.lua của em như vậy sao npc nó không nói chuyện nhỉ
-- 终极任务Include("\\script\\missions\\maze\\task.lua")
Include("\\script\\global\\dlgnpc_list.lua")
Include("\\script\\global\\fightnpc_list.lua")
Include("\\script\\lib\\timerlist.lua")






IL("NPCINFO")


NPCID_YULONGHUFA = 1628 -- 钰龙护法
NPCID_YULONGBOY = 1629 -- 钰龙男弟子
NPCID_YULONGGIRL = 1630 -- 钰龙女弟子
NPCID_DIALOGBOSS = 1625 -- 龙九天(对话)
NPCID_CUP = 1627 -- 酒杯
NPCID_FIGHTBOSS = 1657 -- 龙九天(战斗)
NPCID_FENGLINGLONG = 1626 -- 凤玲珑
DEATH_YULONGDIZI = 1


STR_YULONGHUFA = "Mu鑞 g苝 頲 Trang Ch?b総 bu閏 ph秈 bc qua c鯽 c馻 ta trc, xin h穣 ra tay 甶!"


pTask = Task:New(49)


function pTask:InitStep()
end




-- 第一步
-- 开始:出现钰龙护法和男女钰龙弟子
-- 完成:击败所有男女钰龙弟子
Step1 = Step:New()
Step1.m_Yulongdizi = {}
Step1.m_DiziCount = 0
function Step1:Start(task)
local pos = task:GetPosition()
local index = DlgNpcManager:AddNpc("Ng鋍 Long H?Ph竝",
NPCID_YULONGHUFA,
task:GetMapId(),
pos.yulonghufa.x,
pos.yulonghufa.y,
self)
if (index > 0) then
local nNpcIndex = DlgNpcManager:GetNpcIndex(index)
SetNpcKind(nNpcIndex, 3)
self.m_NpcIndex = index
end
self.m_Task = task
self.m_SayOnce = 0
end


function Step1:Close(task)
self:ClearNpc()
end


function Step1:Destroy()
self:ClearNpc()
end


function Step1:ClearNpc()
if (self.m_NpcIndex > 0) then
DlgNpcManager:DelNpc(self.m_NpcIndex)
self.m_NpcIndex = 0
end
if (self.m_Yulongdizi ~= nil) then
for i = 1, getn(self.m_Yulongdizi) do
local nIndex = self.m_Yulongdizi[i]
if (nIndex > 0) then
FightNpcManager:DelNpc(nIndex)
end
end
self.m_Yulongdizi = nil
self.m_DiziCount = 0
end
end


function Step1:AddYulongdizi(pts, name, npcid)
local mapid = self.m_Task:GetMapId()
for i = 1, 10 do
local pt = pts[i]
local nParam = getn(self.m_Yulongdizi) + 1
local nIndex = FightNpcManager:AddNpc(name, npcid, mapid, pt.x, pt.y, self, nParam, 1, 1)
tinsert(self.m_Yulongdizi, nIndex)
if (nIndex > 0) then
self.m_DiziCount = self.m_DiziCount + 1
end
end
end


function Step1:Say(player)
player:Say("Mu鑞 g苝 頲 Trang Ch?b総 bu閏 ph秈 bc qua c鯽 c馻 ta trc, xin h穣 ra tay 甶!")
if (self.m_SayOnce == 0) then
local pos = self.m_Task:GetPosition()
self:AddYulongdizi(pos.yulongboys, "Ng鋍 Long Nam е T?, NPCID_YULONGBOY)
self:AddYulongdizi(pos.yulonggirls, "Ng鋍 Long N?е T?, NPCID_YULONGGIRL)
self.m_SayOnce = 1
end
end


function Step1:OnDeath(nKilled, pPlayer, nParam)
self.m_Yulongdizi[nParam] = 0
self.m_DiziCount = self.m_DiziCount - 1
if (self.m_DiziCount <= 0) then
self.m_Task:Proceed()
end
end


-- 第二步
-- 开始:龙九天变为战斗NPC(龙老虎技� �)
-- 完成:打到低于50%生命


Step2 = Step:New()
function Step2:Start(task)
local mapid = task:GetMapId()
local pos = task:GetPosition()
local boss = FightNpcManager:AddNpc("Long C鰑 Thi猲", NPCID_DIALOGBOSS, mapid, pos.boss.x, pos.boss.y, self, nil, 1, 1)
if (boss > 0) then
local nNpcIndex = FightNpcManager:GetNpcIndex(boss)
SyncNpc(nNpcIndex)
NpcChat(nNpcIndex, "<color=yellow>C竎 v?qu?l?nh﹏ trung long phng, qu?nhi猲 c?th?vt qua 頲 tr飊g tr飊g nguy hi觤  n y g苝 ta. Hi謓 t筰 c竎 v?產ng ph禝 i m苩 v韎 th?luy謓 cu鑙 c飊g, ch?c莕 nh b筰 ta v?Th?T?c馻 ta, th?c?th?nh薾 頲 trang b?c鵦 ph萴 nh蕋 v?c?uy danh cao qu?nh蕋. <color>")
self.m_Boss = boss
self.m_Timer = TimerList:AddTimer(self, 9)
end
self.m_Task = task
self.m_MapId = mapid
end


function Step2:Close(task)
self:Clear()
self.m_Task = nil
end


function Step2:Destroy()
self:Clear()
end


function Step2:OnDeath()
self.m_Boss = nil
self:Clear()
if (self.m_Task ~= nil) then
self.m_Task:Proceed()
end
end


function Step2:OnTime()
if (self.m_Boss ~= nil and self.m_Task ~= nil) then
local nNpcIndex = FightNpcManager:GetNpcIndex(self.m_Boss)
local cur_life = NPCINFO_GetNpcCurrentLife(nNpcIndex)
local max_life = NPCINFO_GetNpcCurrentMaxLife(nNpcIndex)
if (cur_life < max_life * 0.5) then
self.m_Timer = nil
self.m_Task:Proceed()
return 0
end
end
return 1
end


function Step2:Clear()
if (self.m_Timer ~= nil) then
TimerList:DelTimer(self.m_Timer)
self.m_Timer = nil
end
if (self.m_Boss ~= nil) then
FightNpcManager:DelNpc(self.m_Boss)
self.m_Boss = nil
end
end


-- 第三步
-- 开始:出现3个一模一样的龙九天(龙� ��虎技能),其中随机一个是真的
-- 完成:把真的打到40%的血时才会进入� �一步
Step3 = Step:New()


function Step3:Start(task)
local mapid = task:GetMapId()
local pos = task:GetPosition()
local tb = {}
self.m_BossIndex = random(1, 3)
for i = 1, 3 do
local idx = self:AddBoss("Long C鰑 Thi猲", mapid, pos.bosses[i], i)
tinsert(tb, idx)
end
self.m_Bosses = tb
self.m_Timer = TimerList:AddTimer(self, 9)
self.m_Task = task
self.m_MapId = mapid
end


function Step3:Close(task)
self:Clear()
end


function Step3:Destroy()
self:Clear()
end


function Step3:Clear()
if (self.m_Bosses ~= nil) then
for i = 1, getn(self.m_Bosses) do
local nIndex = self.m_Bosses[i]
if (nIndex > 0) then
FightNpcManager:DelNpc(nIndex)
end
end
self.m_Bosses = nil
end
if (self.m_Timer ~= nil) then
TimerList:DelTimer(self.m_Timer)
self.m_Timer = nil
end
self.m_BossIndex = nil
end


function Step3:OnTime()
if (self.m_BossIndex ~= nil) then
local npc = self.m_Bosses[self.m_BossIndex]
local nNpcIndex = FightNpcManager:GetNpcIndex(npc)
local cur_life = NPCINFO_GetNpcCurrentLife(nNpcIndex)
local max_life = NPCINFO_GetNpcCurrentMaxLife(nNpcIndex)
if (cur_life < max_life * 0.4) then
self.m_Timer = nil
self.m_Task:Proceed()
return 0
end
end
return 1
end


function Step3:OnDeath(killed, player, index)
self.m_Bosses[index] = 0
if (index == self.m_BossIndex) then
if (self.m_Timer ~= nil) then
TimerList:DelTimer(self.m_Timer)
self.m_Timer = nil
end
self.m_BossIndex = nil
self.m_Task:Proceed()
end
end


function Step3:AddBoss(name, mapid, pt, param)
local boss = FightNpcManager:AddNpc(name, NPCID_DIALOGBOSS, mapid, pt.x, pt.y, self, param, 1, 1)
if (boss > 0) then
local nNpcIndex = FightNpcManager:GetNpcIndex(boss)
SyncNpc(nNpcIndex)
NpcChat(nNpcIndex, "<color=yellow>Xem ra ta b筰 di tay c馻 c竎 ngi r錳, h穣 xem ' B竎h Bi課 Ma Th﹏' c馻 ta y ! <color>")
return boss
else
return 0
end
end


-- 第四步
-- 开始:龙九天(对话NPC)说话,凤玲� �出现
-- 完成:显示完对话N秒后
Step4 = Step:New()
function Step4:Start(task)
local pos = task:GetPosition()
local mapid = task:GetMapId()
local boss = FightNpcManager:AddNpc("Long C鰑 Thi猲", NPCID_DIALOGBOSS, mapid, pos.boss.x, pos.boss.y, self, nil, 1, 1)
if (boss > 0) then
local nNpcIndex = FightNpcManager:GetNpcIndex(boss)
SetNpcKind(nNpcIndex, 3)
SyncNpc(nNpcIndex)
local delay = 4
local seconds = 0
NpcChat(nNpcIndex, "<color=yellow>C竎 v?qu?l?nh鱪g cao th?m?tr╩ n╩ ta m韎 頲 g苝 m閠 l莕, qu?nhi猲  nh b筰 頲 B竎h Bi課 Ma Th﹏ c馻 ta. Kh玭g gi蕌 g?c竎 v? Ch?nh﹏ ch th鵦 c馻 Ng鋍 Long S琻 Trang ch輓h l?Qu鑓 Vng c馻 Чi Kim, Tri襲 T鑞gs韒 mu閚 c騨g b?di謙 vong ch?l?chuy謓 c馻 th阨 gian m?th玦, c竎 v?h?t蕋 ph秈 hy sinh m閠 c竎h v?輈h nh?v藋 chi b籲g gia nh藀 v祇 B鎛 S琻 Trang m?gi髉 s鴆 ph?tr?Чi Kim, sau n祔 th祅h i nghi謕 th?ti襫 t礽 ph?qu?s?thu閏 v?c竎 v? Kh玭g bi誸 ?c馻 c竎 v?th?n祇? <color>")
seconds = seconds + delay
NpcChat(nNpcIndex, "<color=yellow>N誹 nh?c竎 v?v蒼 c鴑g u c?ch蕄 nh?v藋, th?ng c?tr竎h ta h?th?kh玭g l璾 t譶h, c竎 ngi  b?ta h?m閠 c c?g鋓 l?Kim T祄 Tuy謙 M謓h C? ch?c莕 Th?T?c馻 ta v蓎 tay m閠 c竔 th?C?чc s?ph竧 ra, n l骳  c竎 ngi s鑞g kh玭g b籲g s鑞g ch誸 kh玭g b籲g ch誸, ha ha ha! <color>", seconds)
seconds = seconds + delay
NpcChat(nNpcIndex, "<color=yellow>Linh Lung, ra tay 甶, h穣 cho c竔 b鋘 ngi ngoan c?n祔 n誱 m飅 l頸 h筰 c馻 ta! <color>", seconds)
seconds = seconds + delay
NpcChat(nNpcIndex, "<color=yellow>Lung Linh, Lung Linh, ngi u r錳 c遪 kh玭g ra tay 甶? nhanh ph竧 ng C?чc c馻 ngi 甶, ta ch辵 kh玭g n鏸 b鋘 ngi n祔 n鱝 r錳! <color>", seconds)
self.m_Timer = TimerList:AddTimer(self, (seconds + 1) * 18, 1)
self.m_Boss = boss
self.m_Task = task
self.m_MapId = mapid
self.m_Pos = pos
end
end


function Step4:Close(task)
self:Clear()
end


function Step4:Destroy()
self:Clear()
end


function Step4:Clear()
if (self.m_Timer ~= nil) then
TimerList:DelTimer(self.m_Timer)
self.m_Timer = nil
end
if (self.m_Boss ~= nil) then
FightNpcManager:DelNpc(self.m_Boss)
self.m_Boss = nil
end
if (self.m_Girl ~= nil) then
DlgNpcManager:DelNpc(self.m_Girl)
self.m_Girl = nil
end
end


function Step4:OnTime(id)
if (id == 1) then
local girl = DlgNpcManager:AddNpc("Phng Lung Linh", NPCID_FENGLINGLONG, self.m_MapId, self.m_Pos.fenglinglong.x, self.m_Pos.fenglinglong.y)
if (girl > 0) then
self.m_Girl = girl
local nGirlIndex = DlgNpcManager:GetNpcIndex(girl)
SetNpcKind(nGirlIndex, 3)
SyncNpc(nGirlIndex)
NpcChat(nGirlIndex, "<color=yellow>Thi猲 Ca, t筰 sao huynh c遪 ch璦 t豱h ng?l筰, bao n╩ nay huynh lu玭 l蕐 nh鱪g trang b?t鑤  d?d?c竎 h穙 h竛 giang h? l蕐 Ki誱 Gia  l祄 vang danh thi猲 h? gi誸 h筰 kh玭g bi誸 bao nhi猽 v?l﹎ cao th? v?sao huynh v蒼 c?su鑤 i l祄 ch?d蒼 阯g cho b鋘 ngi Kim nh?v藋? H玬 nay mu閕 kh玭g th?ti誴 t鬰  cho huynh ph秈 t閕 l筰 ch錸g l猲 t閕 頲 n鱝<color>")
local nBoyIndex = FightNpcManager:GetNpcIndex(self.m_Boss)
NpcChat(nBoyIndex, "<color=yellow>Linh Lung, ngi, ngi ! 厖<color>")
end
self.m_Timer = TimerList:AddTimer(self, 2 * 18, 2)
return 0
elseif (id == 2) then
FightNpcManager:DelNpc(self.m_Boss)
self.m_Boss = FightNpcManager:AddNpc("Long C鰑 Thi猲", NPCID_FIGHTBOSS, self.m_MapId, self.m_Pos.boss.x, self.m_Pos.boss.y, self, nil, 1, 1)
self.m_Timer = TimerList:AddTimer(self, 18 * 5, 3)
return 0
elseif (id == 3) then
-- 给玩家加血
self.m_Task:IterPlayers(self, self.AddBlood)
return 1
else
return 0
end
end


function Step4:AddBlood(player)
-- 慈航普渡
player:CastSkill(93, 20)
end


function Step4:OnDeath()
if (self.m_Timer ~= nil) then
TimerList:DelTimer(self.m_Timer)
self.m_Timer = nil
end
self.m_Boss = nil
self.m_Task:Proceed()
end


pTask:AddStep(clone(Step1))
pTask:AddStep(clone(Step2))
pTask:AddStep(clone(Step3))
pTask:AddStep(clone(Step4))



con file head.lua này như
TASK_MAZEINVITATION = 2860 -- 迷宫剧情任务
MAZE_PLAYERTMPCAMP = 1 -- 玩家临时阵营

xomnhalalop12
04-10-15, 11:50 AM
Cao nhân nào giúp em với...............:-s:-s:-s:-s:-s

DuongDaiCaJX
04-11-15, 04:55 PM
Cài này cũng hay đấy, có ai làm được chưa nhỉ.

xomnhalalop12
04-11-15, 11:42 PM
Cài này cũng hay đấy, có ai làm được chưa nhỉ.

Chưa làm được nhờ cao nhân thông mà chưa thấy.

nhaodzo
13-11-15, 11:38 PM
local tbList,nCount = GetAroundNpcList(15, 8)
for i = 1,nCount do
local nNpcIndex = tbList
local nNpcId = GetNpcSettingIdx(nNpcIndex)
if nNpcId == 377 then
[I] SyncNpc(nNpcIndex)
NpcChat(nNpcIndex, "<color=yellow>(nxw)<enter>A lo testcai xem sao !<color>")
end
end

thử hàm này xem. gán vào cái j cũng được xong đứng cạnh con lễ quan rồi cho chạy hàm này. chưa thử nhưng hàm này là để tìm những npc có id là 377 ( lễ quan ) để gán câu thoại.

vuduymanh
25-11-15, 08:35 PM
local tbList,nCount = GetAroundNpcList(15, 8)
for i = 1,nCount do
local nNpcIndex = tbList
local nNpcId = GetNpcSettingIdx(nNpcIndex)
if nNpcId == 377 then
[I]SyncNpc(nNpcIndex)
NpcChat(nNpcIndex, "<color=yellow>(nxw)<enter>A lo testcai xem sao !<color>")
end
end

thử hàm này xem. gán vào cái j cũng được xong đứng cạnh con lễ quan rồi cho chạy hàm này. chưa thử nhưng hàm này là để tìm những npc có id là 377 ( lễ quan ) để gán câu thoại.
bác chạy được chưa bác em làm ko đc bác à

nhaodzo
25-11-15, 10:29 PM
bác chạy được chưa bác em làm ko đc bác à
ko khoái cái hàm này lắm. đại khái cái hàm này nó cần npcindex. c lấy được npcindex rồi gán cho hàm talk là nó nói được thôi

traugiautien
11-09-16, 12:40 PM
Đào mộ tý, các bác thông cảm.
Có ai sử dụng được hàm NpcChat() chưa ạ, có thể thông não giúp em một tý không.
và khó nhất là NpcIdex thì làm sao mình biết Npc có Index là bao nhiêu.
thanl all

vuduymanh
11-09-16, 01:34 PM
Đào mộ tý, các bác thông cảm.
Có ai sử dụng được hàm NpcChat() chưa ạ, có thể thông não giúp em một tý không.
và khó nhất là NpcIdex thì làm sao mình biết Npc có Index là bao nhiêu.
thanl all

Hàm này add dc cho các npc mặc định ,
Nhưng phải kích chuột vào npc nó mới chát
Còn hàm npc tự play chát ko cần kich
Thì chỉ add dc npc do mình add thôi npc mặc định ko add đc
Hiện tại mình dùng 2 loại hàm
1 .add cho npc mặc định

function main()
hotro_maindlg()
end

function hotro_maindlg()
local nNpcIndex = GetLastDiagNpc();
NpcChat(nNpcIndex,"<color=green>ta lµ <color><color=cyan>LÔ Quan<color> <color=green>phô tr¸ch gëi lÔ vËt server .",10)
local tb = { "<dec><npc> LÔ Quan ,b¹n cÇn j?"}
tinsert(tb,"test 1/danhmuc1");
tinsert(tb,"test 2/danhmuc2");
tinsert(tb,"test 3/danhmuc3");
tinsert(tb,"KÕt thóc/Cancel");
CreateTaskSay(tb);
end
2 .Còn add npc tự play chát ko cần kich chuột
Add cho npc do mình tự add
Code 2 mấy hôm nữa mình share cho
Vì máy tính hỏng

HungDevJX
11-09-16, 01:52 PM
KLQ úp tấm hình cho đẹp trai =))
<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>

traugiautien
11-09-16, 03:42 PM
Hàm này add dc cho các npc mặc định ,
Nhưng phải kích chuột vào npc nó mới chát
Còn hàm npc tự play chát ko cần kich
Thì chỉ add dc npc do mình add thôi npc mặc định ko add đc
Hiện tại mình dùng 2 loại hàm
1 .add cho npc mặc định

function main()
hotro_maindlg()
end

function hotro_maindlg()
local nNpcIndex = GetLastDiagNpc();
NpcChat(nNpcIndex,"<color=green>ta lµ <color><color=cyan>LÔ Quan<color> <color=green>phô tr¸ch gëi lÔ vËt server .",10)
local tb = { "<dec><npc> LÔ Quan ,b¹n cÇn j?"}
tinsert(tb,"test 1/danhmuc1");
tinsert(tb,"test 2/danhmuc2");
tinsert(tb,"test 3/danhmuc3");
tinsert(tb,"KÕt thóc/Cancel");
CreateTaskSay(tb);
end
2 .Còn add npc tự play chát ko cần kich chuột
Add cho npc do mình tự add
Code 2 mấy hôm nữa mình share cho
Vì máy tính hỏng
-=================================
Cảm ơn bạn.