movido
info
Grupo: Príncipe
Registrado: 19/08/10
Posts: 4k
Reputação: +1.1k
Gênero: Masculino

info
Grupo: Artesão
Registrado: 03/04/09
Posts: 149
Reputação: +6
Char no Tibia: Hiporion

Obrigado, não tinha visto a Pedidos e Duvidas, peço desculpas! ![]()
info
Grupo: Herói
Registrado: 14/12/10
Posts: 3.6k
Reputação: +846
Gênero: Masculino

Faça assim, vá em data/npc, crie um arquivo chamado defender.xml, abra-o e adicione isso dentro;
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Guard City" script="data/npc/scripts/defender.lua" walkinterval="2000" floorchange="0">
<health now="100" max="100"/>
<look type="130" head="114" body="114" legs="114" feet="114" addons="3"/>
<parameters>
<parameter key="message_greet" value="Hello |PLAYERNAME|. I'm defender of the city. I'm busy, don't waste my time!"/>
<parameter key="message_walkaway" value="Good bye."/>
<parameter key="HitInterval" value="1000" />
<parameter key="ShootEffect" value="31" /> <!-- CONST_ANI_SUDDENDEATH -->
<parameter key="HitEffect" value="17" /> <!-- CONST_ME_MORTAREAR -->
<parameter key="TypeDmg" value="1024" /> <!-- COMBAT_HOLYDAMAGE -->
<parameter key="minDamage" value="150" />
<parameter key="maxDamage" value="700" />
<parameter key="sayText" value="Exori Vis" />
<parameter key="multiAttack" value="1" />
<parameter key="hitSkulledPlayer" value="1" />
<parameter key="minHeal" value="50" />
<parameter key="maxHeal" value="150" />
<parameter key="dmgRadiusX" value="7" />
<parameter key="dmgRadiusY" value="5" />
<parameter key="healRadiusX" value="3" />
<parameter key="healRadiusY" value="3" />
</parameters>
</npc>
Agora em data/npc/scripts, crie um arquivo chamado defender.lua e adicione isso dentro:
NpcSystem.parseParameters(npcHandler)
local guard = defender:new()
guard:setHitInterval(getNpcParameter("HitInterval"))
guard:setShootEffect(getNpcParameter("ShootEffect"))
guard:setHitEffect(getNpcParameter("HitEffect"))
guard:setTypeDmg(getNpcParameter("TypeDmg"))
guard:setDamage(getNpcParameter("minDamage"),getNpcParameter("maxDamage"))
guard:setSayText(getNpcParameter("sayText"))
guard:setHeal(getNpcParameter("minHeal"),getNpcParameter("maxHeal"))
guard:setHitSkulledPlayer(getNpcParameter("hitSkulledPlayer"))
guard:setMultiAttack(getNpcParameter("multiAttack"))
guard:setDmgRadius(getNpcParameter("dmgRadiusX"),getNpcParameter("dmgRadiusY"))
guard:setHealRadius(getNpcParameter("healRadiusX"),getNpcParameter("healRadiusY"))
function onThink()
guard:onThink(getNpcCid())
npcHandler:onThink()
end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
npcHandler:addModule(FocusModule:new())
EE em /data/npc/lib/npc.lua adicione na primeira linha :
dofile('data/npc/lib/creature.lua')
OBS : QUANDO MATA MONSTRO NÃO DA LOOT!
Agora na mesmas pasta, crie um arquivo chamado creature.lua, adicione isso dentro:
-- @ Mehah and Gesior
function OTSYS_TIME()
return os.clock()*1000
end
defender = {
cid = 0,
targetList = {},
targetTime = OTSYS_TIME(),
hitInterval = 1000,
shootEffect = CONST_ANI_THROWINGSTAR,
hitEffect = CONST_ME_HITAREA,
typeDmg = COMBAT_PHYSICALDAMAGE,
minDmg = 300, maxDmg = 1200,
sayText = "",
minHeal = 1, maxHeal = 10,
hitSkulledPlayer = 1,
multiAttack = 1,
dmgRadiusX = 7,
dmgRadiusY = 5,
healRadiusX = 3,
healRadiusY = 3,
}
function defender:new()
local obj = {}
setmetatable(obj, self)
self.__index = self
return obj
end
function defender:onThink(_cid)
if self.cid == 0 then
self.cid = _cid
return
end
local _time = OTSYS_TIME()
if (_time - self.targetTime) > self.hitInterval then
self.targetTime = _time
local position = getCreaturePosition(self.cid)
local creature = {}
local pos = {x = 0, y = 0, z = 0, stackpos = 0}
if self.minDmg > 0 and self.maxDmg > 0 then
self:clearTargetList()
for x = -self.dmgRadiusX, self.dmgRadiusX do
for y = -self.dmgRadiusY, self.dmgRadiusY do
if not (x == 0 and y == 0) then
pos = {x = position.x+x, y = position.y+y, z = position.z, stackpos = STACKPOS_TOP_CREATURE}
creature = getTopCreature(pos)
if (creature.type == 2) or (creature.type == 1 and self.hitSkulledPlayer == 1 and getPlayerSkullType(creature.uid) > 0) then
if self.multiAttack ~= 1 and #self.targetList > 0 then
break
end
self:addTarget(creature.uid)
self:doSendDamage(creature.uid)
end
end
end
end
if #self.targetList > 0 then
if self.sayText ~= "" then
doCreatureSay(self.cid, self.sayText, TALKTYPE_ORANGE_1)
end
end
end
if self.minHeal > 0 and self.maxHeal > 0 then
self:clearTargetList()
for x = -self.healRadiusX, self.healRadiusX do
for y = -self.healRadiusY, self.healRadiusY do
if not (x == 0 and y == 0) then
pos = {x = position.x+x, y = position.y+y, z = position.z, stackpos = STACKPOS_TOP_CREATURE}
creature = getTopCreature(pos)
if (creature.type == 1) then
self:doHeal(creature.uid)
end
end
end
end
end
end
end
function defender:doSendDamage(target)
if isCreature(target) == TRUE then
local hitDmg = math.random(self.minDmg, self.maxDmg)
if getCreatureHealth(target) <= hitDmg then
doSetCreatureDropLoot(target, 0)
end
doSendDistanceShoot(getCreaturePosition(self.cid), getCreaturePosition(target), self.shootEffect)
doTargetCombatHealth(self.cid, target, self.typeDmg, -hitDmg, -hitDmg, self.hitEffect)
end
end
function defender:doHeal(target)
doTargetCombatHealth(self.cid, target, COMBAT_HEALING, self.maxHeal, self.minHeal, CONST_ME_MAGIC_BLUE)
end
function defender:addTarget(_target)
table.insert(self.targetList,_target)
end
function defender:clearTargetList()
self.targetList = {}
end
function defender:setHitInterval(hitInterval)
self.hitInterval = tonumber(hitInterval)
end
function defender:setShootEffect(shootEffect)
self.shootEffect = shootEffect
end
function defender:setHitEffect(hitEffect)
self.hitEffect = hitEffect
end
function defender:setTypeDmg(typeDmg)
self.typeDmg = typeDmg
end
function defender:setSayText(sayText)
self.sayText = tostring(sayText)
end
function defender:setDamage(minDmg,maxDmg)
self.minDmg = tonumber(minDmg)
self.maxDmg = tonumber(maxDmg)
end
function defender:setHeal(minHeal,maxHeal)
self.minHeal = tonumber(minHeal)
self.maxHeal = tonumber(maxHeal)
end
function defender:setHitSkulledPlayer(hitSkulledPlayer)
self.hitSkulledPlayer = tonumber(hitSkulledPlayer)
end
function defender:setMultiAttack(multiAttack)
self.multiAttack = tonumber(multiAttack)
end
function defender:setDmgRadius(dmgRadiusX,dmgRadiusY)
self.dmgRadiusX = tonumber(dmgRadiusX)
self.dmgRadiusY = tonumber(dmgRadiusY)
end
function defender:setHealRadius(healRadiusX,healRadiusY)
self.healRadiusX = tonumber(healRadiusX)
self.healRadiusY = tonumber(healRadiusY)
end
info
Grupo: Artesão
Registrado: 03/04/09
Posts: 149
Reputação: +6
Char no Tibia: Hiporion

Tu denovo kkk'
Vlw aê mas agora to sem REP
amanhã eu ti dou pode ser?
info
Grupo: Herói
Registrado: 14/12/10
Posts: 3.6k
Reputação: +846
Gênero: Masculino

Não precisa de rep, estou respondendo sua dúvida por vontade rsrs! Dúvida sanada?
info
Grupo: Artesão
Registrado: 03/04/09
Posts: 149
Reputação: +6
Char no Tibia: Hiporion

Sim sim! Obrigado ![]()
mas ainda to ti devendo! ![]()
info
Grupo: Herói
Registrado: 14/12/10
Posts: 3.6k
Reputação: +846
Gênero: Masculino

Disponha. reported!
info
Grupo: Campones
Registrado: 02/11/10
Posts: 23
Reputação: 0
Char no Tibia: Calango Pally

Deu esse seguinte erro aqui \/
[22/02/2013 04:11:54] [Error - Npc interface]
[22/02/2013 04:11:54] data/npc/scripts/defender.lua
[22/02/2013 04:11:54] Description:
[22/02/2013 04:11:54] data/npc/lib/npcsystem/npcsystem.lua:68: attempt to index local 'npcHandler' (a nil value)
[22/02/2013 04:11:54] [Warning - NpcScript::NpcScript] Cannot load script: data/npc/scripts/defender.lua
[22/02/2013 04:22:00] [Error - Npc interface]
[22/02/2013 04:22:00] data/npc/scripts/defender.lua
[22/02/2013 04:22:00] Description:
[22/02/2013 04:22:00] data/npc/scripts/defender.lua:1: attempt to index global 'NpcSystem' (a nil value)
[22/02/2013 04:22:00] [Warning - NpcScript::NpcScript] Cannot load script: data/npc/scripts/defender.lua
Me ajuda ae, aguardando á resposta... pfv ![]()
Editado Fevereiro 22 por uriel70
info
Grupo: Herói
Registrado: 14/12/10
Posts: 3.6k
Reputação: +846
Gênero: Masculino

Seu NPC System é diferente, só trocando para arrumar :S
Faça assim, pegue essa pasta compactada que está logo abaixo \/, extraia ela para data/npc. Seria assim para arrumar, mas no caso bugaria todos seus NPCS. Pois eles são de outro System ;s
vc é quem sabe...
Editado Fevereiro 22 por Roksas




info
Grupo: Artesão
Registrado: 03/04/09
Posts: 149
Reputação: +6
Char no Tibia: Hiporion
Eae galera do Ilustre XTIBIA!
Queria pedir um NPC GUARD
diferente de todos os outros,
que este npc pudesse atacar
além de jogadores fora da lei
mas também qualquer criatura
maligna que sejá lurada até os
portões da cidade e que também
o jogador PK tivesse a oportunidade
de atacá-lo para se defender.
Pensamento:
Queria por-lo no meu Servidor Derivado para precaver que dragões lurados não entrem nas cidades e que os jogadores fora da lei (
PK's) possam ter uma oportunidade de se defender ao invés de morrer instantaneamente sem poder atacar o guard
Si não for possível; tem como fazer um monster que ataque só PKS e outras Criaturas?
Dou REP +