movido
info
Group: Príncipe
Joined: 19/08/10
Posts: 4k
Reputation: +1.1k
Gender: Masculino

info
Group: Artesão
Joined: 03/04/09
Posts: 149
Reputation: +6
Tibia Character: Hiporion

Obrigado, não tinha visto a Pedidos e Duvidas, peço desculpas! ![]()
info
Group: Herói
Joined: 14/12/10
Posts: 3.6k
Reputation: +846
Gender: 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
Group: Artesão
Joined: 03/04/09
Posts: 149
Reputation: +6
Tibia Character: Hiporion

Tu denovo kkk'
Vlw aê mas agora to sem REP
amanhã eu ti dou pode ser?
info
Group: Herói
Joined: 14/12/10
Posts: 3.6k
Reputation: +846
Gender: Masculino

Não precisa de rep, estou respondendo sua dúvida por vontade rsrs! Dúvida sanada?
info
Group: Artesão
Joined: 03/04/09
Posts: 149
Reputation: +6
Tibia Character: Hiporion

Sim sim! Obrigado ![]()
mas ainda to ti devendo! ![]()
info
Group: Herói
Joined: 14/12/10
Posts: 3.6k
Reputation: +846
Gender: Masculino

Disponha. reported!
info
Group: Campones
Joined: 02/11/10
Posts: 23
Reputation: 0
Tibia Character: 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 ![]()
Edited Fevereiro 22 by uriel70
info
Group: Herói
Joined: 14/12/10
Posts: 3.6k
Reputation: +846
Gender: 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...
Edited Fevereiro 22 by Roksas




info
Group: Artesão
Joined: 03/04/09
Posts: 149
Reputation: +6
Tibia Character: 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 +