Uia valeu ein, Oneshot! rep+
info
Grupo: Cavaleiro
Registrado: 13/06/11
Posts: 172
Reputação: +6

Editado Julho 19 por neero102
Muitos servers realmente tinham esse problema. Agora está resolvido. Você também poderia colocar uma opção para o Npc atacar players "Drunk", ou seja, bêbados, só pra tentar fazer algo diferente no próprio npc. Mesmo assim, bom código.
Editado Julho 19 por Leoxtibia
info
Grupo: Artesão
Registrado: 03/04/09
Posts: 149
Reputação: +6
Char no Tibia: Hiporion

Loading... man seria legal se os players PK tbm atacar o npc, (eu sei que Player não pode atacar NPC)//
Eu usava muito esses guards, fazia até war usando eles mas fikava tosco o npc não perder hp e vai ti atakando e seguindo até morrer '--'
existe algum script que destrave essa impossibilidade?
info
Grupo: Príncipe
Registrado: 19/08/10
Posts: 4k
Reputação: +1.1k
Gênero: Masculino

tb queria muito saber se tem algum jeito, alem das sources pra player poder atkar npc... ;x
info
Grupo: Artesão
Registrado: 03/04/09
Posts: 149
Reputação: +6
Char no Tibia: Hiporion

Dae eu acho q o guard ia ter que virar um monster :\ / os players aqui no Servidor sofrem com isso ![]()
info
Grupo: Campones
Registrado: 02/08/12
Posts: 31
Reputação: 0

to com uma duvida tipo fiz ele tudo certin como voçe feis no tutorial mais noa apareçe ! o NPC .!!
Me ajuda Repp++





info
Grupo: Marquês
Registrado: 05/07/09
Posts: 1.3k
Reputação: +732
Nome: Guard
Tipo: NPC
Autor: Oneshot
Muitos devem conhecer o NPC Guard, que possui inteligência artificial e ataca jogadores que possuem skulls de servidores que baixam.
Acontece que o script desse NPC foi programado apenas para um NPC só, então quando você tenta, por exemplo, ter dois Guards no servidor, se um está na cidade A e outro na cidade B e, por exemplo, o NPC da cidade A começa atacar um jogador, o NPC da cidade B se teleporta "magicamente" para a cidade A.
Pensando nisso, resolvi otimizar todo o código, orientando ele a objetos. Isso faz com que cada NPC (objeto) tenha suas próprias variáveis e não compartilhem mais elas entre si.
Em data/npc/lib, crie um arquivo chamado guard.lua e adicione o conteúdo abaixo:
Guard = { config = { attackspeed = 1000, }, combat = {type = COMBAT_PHYSICALDAMAGE, min = 100, max = 200} } function Guard:new() local ret = {} setmetatable({}, {__index = self.combat}) setmetatable(ret, {__index = self}) return ret end function Guard:reset() self.config = Guard.config self.target = 0 selfFollow(0) doTeleportThing(self.id, self.position) end function Guard:updateTarget() if self.target ~= 0 then return end local creatures = getSpectators(getThingPosition(self.id), self.range, self.range, false) for i = 1, #creatures do local target = creatures[i] if isCreature(target) and not isNpc(target) and getCreatureSkull(target) >= 3 then if not getTilePzInfo(getThingPosition(target)) then if selfFollow(target) then selfSay("I don't tolerate people like you, ".. getCreatureName(target)) self.target = target self:attack() break end end else self:reset() end end end function Guard:attack() if self.target == 0 then self:reset() return end self.time = self.time or os.clock() if self.time < os.clock() then if getDistanceBetween(getThingPosition(self.id), getThingPosition(self.target)) == 1 then doTargetCombatHealth(self.id, self.target, self.combat.type, -self.combat.min, -self.combat.max, CONST_ME_DRAWBLOOD) end self.time = self.time + (self.config.attackspeed/1000) end endAgora em data/npc/scripts, crie um arquivo chamado guard.lua e adicione o conteúdo abaixo:
local guard = Guard:new() function onCreatureAppear(cid) if cid == getNpcId() then guard.id = getNpcId() guard.target = 0 guard.position = getNpcPos() end end function onCreatureDisappear(cid) if cid == guard.target then guard:reset() end end function onCreatureSay(cid, type, msg) return false end function onThink() guard:updateTarget() if guard.target ~= 0 then if isCreature(guard.target) then guard:attack() else guard:reset() end else guard:reset() end endE em data/npc/ crie um arquivo chamado guard.xml e adicione o conteúdo abaixo:
Abraços \o