728X90


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
Wando
Admin
Admin
Mensagens : 50
Reputação : 0
Data de inscrição : 18/01/2018
Idade : 31
Localização : Belo Horizonte

Talisman Felspire
Level do Pet Level do Pet:
25/950  (25/950)
Ver perfil do usuáriohttp://vidatalisman.directorioforuns.com

Tutorial criando npc tipo QL

em Sex Jan 19, 2018 4:49 pm
COPIE O CODIGO DO 1 AO 2, SEM COPIAR O NUMERO 1E2 SOMENTE O CODIGO ENTRE OS NUMERO 
ADD O CODIGO NO ARQUIVO QUE FICA EM
local\server\comon\table\npc.lua

1
-------------------------------------------------------------------------------
--巡逻任务测试 id= 254 的脚本ai实现
-------------------------------------------------------------------------------
CAIBaoHuTask156 = class(CAIObject)

function CAIBaoHuTask156:ctor(id, objid)
--OutputLog("ai脚本 CAIBaoHuTask156 构造完毕 by "..objid)
self.nBeginTime = 0;
end

function CAIBaoHuTask156:OnUpdate(dwNow)
    if self.nBeginTime == 0 then
        return
    end
    
    local nDiff = dwNow - self.nBeginTime;
    if nDiff > 900 then
        Disappear(self.ObjID)
    end
end

function CAIBaoHuTask156:OnInteractive(uid, event)
local content=""

if event=="defaulttalk" then
content = GetFileContent("talk/npc_talk_1000.xml")
content = ReplaceUserName(content, uid)
end

return content
end

function CAIBaoHuTask156:OnHpLower(rate)
if rate<=20 then
Say(self.ObjID, Lan("msg_script_254_onhplower_20"))
elseif rate>20 and rate<=40 then
Say(self.ObjID, Lan("msg_script_254_onhplower_40"))
elseif rate>40 and rate<=60 then
Say(self.ObjID, Lan("msg_script_254_onhplower_60"))
elseif rate>60 and rate<80 then
Say(self.ObjID, Lan("msg_script_254_onhplower_80"))
end
end

function CAIBaoHuTask156:OnTaskAccept(uid, taskid)
local name = GetUserNameByObjId(uid)
Say(self.ObjID, name..Lan("msg_script_254_ontaskaccept"))
LockInteractive(self.ObjID)
ActivePatrol(self.ObjID)
self.nBeginTime = GetServerTime();
end

function CAIBaoHuTask156:OnArrive(n, IsEndPoint)

if IsEndPoint==1 then
Say(self.ObjID, Lan("msg_script_254_onarrive"))
if CheckDoingTask(self.ObjID)~=0 then
FinishTask(self.ObjID)
UnLockInteractive(self.ObjID)
end
DisActivePatrol(self.ObjID)
Disappear(self.ObjID)
end

local rnd = math.random(2)

if n==11 then
Say(self.ObjID, Lan("msg_script_254_onarrive_5"))
CreateMyEnemy(self.ObjID, 250, 80, 3)
if rnd==1 then
CreateMyEnemy(self.ObjID, 0, 80, 1)
end
GotoState(self.ObjID, "Wait")
elseif n==20 then
Say(self.ObjID, Lan("msg_script_254_onarrive_14"))
CreateMyEnemy(self.ObjID, 250, 80, 3)
if rnd==1 then
CreateMyEnemy(self.ObjID, 434, 80, 1)
end
GotoState(self.ObjID, "Wait")
elseif n==25 then
Say(self.ObjID, Lan("msg_script_254_onarrive_19"))
CreateMyEnemy(self.ObjID, 250, 80, 3)
if rnd==1 then
CreateMyEnemy(self.ObjID, 0, 80, 1)
end
GotoState(self.ObjID, "Wait")
elseif n==29 then
Say(self.ObjID, Lan("msg_script_254_onarrive_23"))
CreateMyEnemy(self.ObjID, 250, 80, 3)
if rnd==1 then
CreateMyEnemy(self.ObjID, 0, 80, 1)
end
GotoState(self.ObjID, "Wait")

elseif n==26 then
Say(self.ObjID, Lan("msg_script_254_onarrive_26"))
CreateMyEnemy(self.ObjID, 250, 80, 3)
if rnd==1 then
CreateMyEnemy(self.ObjID,434, 80, 1)
end
GotoState(self.ObjID, "Wait")

end
end

function CAIBaoHuTask156:OnDead(killer)
if CheckDoingTask(self.ObjID)~=0 then
Say(self.ObjID, Lan("msg_script_254_ondead"))
TaskFailed(self.ObjID)
end
end
2
PARTE 2----------------------------------------------------------------------------------------

ONDE ESTAR 156 E O ID ONDE ESTA O ITEM QUE VAI SER ENTREGUE. 
QUE FICA EM. 
local\mars\table\task.csv
VOCE DEVERAR CRIAR OUTRA COLUNA COM O CODIGO ABAIXO, MAS VOCE DEVE TROCAR O 154 PARA UM ID QUE NAO EXISTA.

EXEMPLO DA COLUNA ABAIXO.
156,护送道友,15,25,1,0,20,,1,1,80,99,all,,,,GetItemSpace >= 1,,,,0,0,0,0,0,0,0,0,0,2,254,1,0,99,150,"AddCredit(12,500);AddMoney(15000000);AddNimbus(3000);AddExp(3000)","AddItemEx(5595,0,0,1)",,,,0,,

PARTE 3----------------------------------------------------------------------------------------

ONDE ESTA ("talk/npc_talk_1000.xml") VC VAI NA PASTA DO ARQUIVO QUE FICA EM.
\local\common\talk
E EDITA ELE 
OBS: ELE NAO EXISTE NA PASTA ENTAO EU NAO FIZ NADA NELE.

PARTE 4-----------------------------------------------------------------------------------------

ONDE ESTA ("msg_script_254_onhplower_20") E A MSG QUE O NPC VAI FALAR.
EXEMPLO:

AQUI E QUANDO O MOB TIRA O QUARTO HP DO NPC.
("msg_script_254_onhplower_20") =
msg_script_254_onhplower_20,"No need to take care of me, you just go...",

AQUI E QUANDO O MOB TIRA O TERCEIRO HP DO NPC.
("msg_script_254_onhplower_40") =
msg_script_254_onhplower_40,"I am wounded, please help me...",

AQUI E QUANDO O MOB TIRA O SEGUNDO HP DO NPC.
("msg_script_254_onhplower_60") =
msg_script_254_onhplower_60,They are in huge amount...,

AQUI E QUANDO O MOB TIRA O PRIMEIRO HP DO NPC
("msg_script_254_onhplower_80") =
msg_script_254_onhplower_80,"That's too bad! We were sneak attacked, come and protect me!",

AS MSG PODEM SER EDITADAS NO ARQUIVO QUE SE ENCONTRA NA PASTA.
\local\mars\language\message_script.csv
OBS: VOCE TEM QUE CRIAR UMA NOVA ID PARA CADA MSG, TROCAR O 254 E O 20,40,60,80 PARA UM QUE NAO EXISTA.
OBS: VOCE TAMBEM DEVE COLOCAR O NOVO ID DA TASK AQUI --巡逻任务测试 id= 254 的脚本ai实现


PRIMEIRA MSG QUANDO PEGA A QUEST.
("msg_script_254_ontaskaccept")
msg_script_254_ontaskaccept,", if those damn persons ambush me again, I will kick their ass.",

QUANDO ELE CHEGA NO FIM E COMPLETAR A QUEST.
("msg_script_254_onarrive")
msg_script_254_onarrive,"Finally, we are safe now.",

AQUI E QUANDO ELE CHAMA O 1 MOBS.
("msg_script_254_onarrive_5")
msg_script_254_onarrive_5,"Be careful, they will not let us pass so easily.",
 
AQUI E QUANDO ELE CHAMA O 2 MOBS.
("msg_script_254_onarrive_14")
msg_script_254_onarrive_14,"Take care, there seems are something around...",

AQUI E QUANDO ELE CHAMA O 3 MOB.
("msg_script_254_onarrive_19")
msg_script_254_onarrive_19,"Oh, how come here are some more!  Fight!",

AQUI E QUANDO ELE CHAMA O 5 MOB QUE E O ULTIMO.
("msg_script_254_onarrive_23")
msg_script_254_onarrive_23,"Ahhhh...this damn people, how dare you knock my head, I have to teach you a lesson!",

AQUI E QUANDO ELE CHAMA O 4 MOB.
("msg_script_254_onarrive_26")
msg_script_254_onarrive_26,"So pain, these damn people! ",

AQUI E A MSG SE O NPC FOR MORTO PELO MOB.
("msg_script_254_ondead")
msg_script_254_ondead,"It seems you can't protect me by your own, we need find some more person.",

AS MSG FICA NO ARQUIVO menssage_script.csv
local\mars\language\menssage_script.csv
PARTE 5-----------------------------------------------------------------------------------------

ONDE ESTA ESCRITO OS CODGOS ABAIXO, E A QUANTIDADEDE DE HP A MENOS QUE O MOB TIROU DO NPC
PARA QUE ELE FALE AS MSG ACIMA.
if n==11 then
Say(self.ObjID, Lan("msg_script_254_onarrive_5"))
elseif n==20 then
Say(self.ObjID, Lan("msg_script_254_onarrive_14"))
elseif n==25 then
Say(self.ObjID, Lan("msg_script_254_onarrive_19"))
elseif n==29 then
Say(self.ObjID, Lan("msg_script_254_onarrive_23"))
elseif n==26 then
Say(self.ObjID, Lan("msg_script_254_onarrive_26"))
ESTA PARTE ELE FOI MORTO
function CAIBaoHuTask156:OnDead(killer)
if CheckDoingTask(self.ObjID)~=0 then
Say(self.ObjID, Lan("msg_script_254_ondead"))
TaskFailed(self.ObjID)
end

ONDE ESTA ECRITO
CreateMyEnemy(self.ObjID, 250, 80, 3)
250 E O ID DO MOB TRACING BANDIT QUE, VAI SER CHAMADO PARA ATK O NPC.
ONDE ESTA ESCRITO 
CreateMyEnemy(self.ObjID, 434, 80, 1)
434 E O ID DO BOSS DELUDED ENCHANTER, QUE VAI SER CHAMADO PARA ATK O NPC.

O 80, 1 / 80, 3 NAO SEI PARA QUE SERVER.
O NUMERO 1 OU O 3 PROVAVELMENTE E A QUANTIDADE DE MOB E BOS QUE VAI APARECER NO MAP.
PARTE------------------------------------------------------------------------------------------

ESTE CODGO VC COLOCA NO ARQUIVO npc.lua
local\server\comon\table\npc.lua
E SO VC CRIAR UMA NOVA LINHA DEBAIXO DA EXISTENTE, E TROCAR O ID 254 PELO NOVO ID QUE VC CRIOU NA PARTE 4. 

_init("msg_script_254_ontaskaccept")
_init("msg_script_254_onhplower_20")
_init("msg_script_254_onhplower_40")
_init("msg_script_254_onhplower_60")
_init("msg_script_254_onhplower_80")
_init("msg_script_254_onarrive")
_init("msg_script_254_onarrive_5")
_init("msg_script_254_onarrive_14")
_init("msg_script_254_onarrive_19")
_init("msg_script_254_onarrive_23")
_init("msg_script_254_onarrive_26")
_init("msg_script_254_ondead")
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum