Ir para conteúdo
  • 0

[Pedido] NPC CITY GUARD!


Plfmoura

Pergunta

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 (ph34r.png PK's) possam ter uma oportunidade de se defender ao invés de morrer instantaneamente sem poder atacar o guard worriedsmiley.gif

 

Si não for possível; tem como fazer um monster que ataque só PKS e outras Criaturas?

 

Dou REP + mdr.gif

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

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

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

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 wacko.png

Editado por uriel70
Link para o comentário
Compartilhar em outros sites

  • 0

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...

http://www.4shared.com/rar/gOdLVSQz/lib.html

Editado por Roksas
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...