Ir para conteúdo
  • Cadastre-se

[NPC Guard] Ataca Skulls e Monsters, Invasores


Posts Recomendados

Eu testei em um TFS 0.4 e notei algumas anomalias:

  • O NPC após derrotar um monstro, ele fica preso no mesmo SQM e não anda mais.
  • Ataca outros NPC's que estejam por perto.
  • Não é possível falar com ele, através do "hi".

Dark Souls Bonfire GIF - Dark Souls Bonfire Rest - Discover & Share GIFs

Link para o post
Compartilhar em outros sites
  • 3 months later...
  • 8 months later...

Na posição z=7 funciona legal.

Agora quando eu coloco o npc Guard no z=5 da esse erro:

[Error - Npc interface]

data/npc/scripts/defender.lua:onThink

Description:

<luaGetThingFromPos> Tile not found

Valeu!

Link para o post
Compartilhar em outros sites
  • 3 months later...
Em 13/07/2014 ás 01:07, ScreMMo disse:

Opa Galera, hoje vou trazer para vocês um NPC que ataca players pk é monstros invasores, analizem no forum e não achei nem um funcionando , testei em 8.54 é 8.60 e funcionou perfeitamente então vamos la.

 

Primeiramente vá em /data/npc/script/ é crie um arquivo chamado defender.lua é lá dentro adicione :


local level = 10  ----- change this to make the npc hit more/less---------------------|damage_min = (level * 2 + maglevel * 3) * min_multiplier | 
 local maglevel = 10  ----- change this to make the npc hit more/less -----------------|damage_max = (level * 2 + maglevel * 3) * max_multiplier | 
 local min_multiplier = 2.1  ----- change this to make the npc hit more/less ----------|damage_formula = math.random(damage_min,damage_max)      | 
 local max_multiplier = 4.2  ----- change this to make the npc hit more/less --------------------------------------------------------------------- 
 local check_interval = 5  ----- change this to the time between checks for a creature (the less time the more it will probably lag :S)   
 local radiusx = 7  ----- change this to the amount of squares left/right the NPC checks (default 7 so he checks 7 squares left of him and 7 squares right (the hole screen)   
 local radiusy = 5  ----- change this to the amount of squares left/right the NPC checks (default 5 so he checks 5 squares up of him and 5 squares down (the hole screen)   
 local Attack_message = "An Invader, ATTACK!!!"  ----- change this to what the NPC says when he sees a monster(s)   
 local town_name = "Archgard"  ----- the name of the town the NPC says when you say "hi"  
 local Attack_monsters = TRUE  ----- set to TRUE for the npc to attack monsters in his area or FALSE if he doesnt  
 local Attack_swearers = TRUE  ----- set to TRUE for the npc to attack players that swear near him or FALSE if he doesnt  
 local Attack_pkers = TRUE  ----- set to TRUE for the npc to attack players with white and red skulls or FALSE if he doesnt  
 local health_left = 10  ----- set to the amount of health the npc will leave a player with if they swear at him (ie at 10 he will hit the player to 10 health left)  
 local swear_message = "Take this!!!"  ----- change this to what you want the NPC to say when he attackes a swearer  
 local swear_words = {"shit", "fuck", "dick", "cunt"}  ----- if "Attack_swearers" is set to TRUE then the NPC will attack anyone who says a word in here. Remember to put "" around each word and seperate each word with a comma (,)  
 local hit_effect = CONST_ME_MORTAREA  ----- set this to the magic effect the creature will be hit with, see global.lua for more effects 
 local shoot_effect = CONST_ANI_SUDDENDEATH  ----- set this to the magic effect that will be shot at the creature, see global.lua for more effects 
 local damage_colour = TEXTCOLOR_RED  ----- set this to the colour of the text that shows the damage when the creature gets hit 
 ------------------end of config------------------  
 local check_clock = os.clock()  ----- leave this  
 local focus = 0  ----- leave this   
  
 function msgcontains(txt, str)   
  return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))   
 end   
  
 function onCreatureSay(cid, type, msg)   
 msg = string.lower(msg)  
 health = getCreatureHealth(cid) - health_left  
    if ((string.find(msg, '(%a*)hi(%a*)'))) and getDistanceToCreature(cid) < 4 then   
        selfSay('Hello ' .. creatureGetName(cid) .. '! I am a defender of '..town_name..'.')   
        doNpcSetCreatureFocus(cid)   
        focus = 0  
    end  
  
    if msgcontains(msg, 'time') then 
        selfSay('The time is ' .. getWorldTime() .. '.') 
    end 
  
    if messageIsInArray(swear_words, msg) then  
        if Attack_swearers == TRUE then  
            selfSay('' .. swear_message ..' ')   
            doCreatureAddHealth(cid,-health)  
            doSendMagicEffect(getThingPos(cid),17)   
            doSendAnimatedText(getThingPos(cid),health,180)  
            doNpcSetCreatureFocus(cid)   
            focus = 0   
        end  
    end  
 end   
  
 function getMonstersfromArea(pos, radiusx, radiusy, stack)  
 local monsters = { }   
 local starting = {= (pos.- radiusx), y = (pos.- radiusy), z = pos.z, stackpos = stack}   
 local ending = {= (pos.+ radiusx), y = (pos.+ radiusy), z = pos.z, stackpos = stack}   
 local checking = {= starting.x, y = starting.y, z = starting.z, stackpos = starting.stackpos}   
    repeat   
        creature = getThingfromPos(checking)   
            if creature.itemid > 0 then   
                if isCreature(creature.uid) == TRUE then  
                    if isPlayer(creature.uid) == FALSE then 
                        if Attack_monsters == TRUE then                             
                            table.insert (monsters, creature.uid)   
                            check_clock = os.clock()                          
                        end 
                    elseif isPlayer(creature.uid) == TRUE then   
                        if Attack_pkers == TRUE then  
                            if getPlayerSkullType(creature.uid) > 0 then  
                                table.insert (monsters, creature.uid)   
                                check_clock = os.clock()       
                            end  
                        end  
                    end   
                end   
            end   
        if checking.== pos.x-1 and checking.== pos.then   
            checking.= checking.x+2   
        else    
            checking.= checking.x+1   
        end   
        if checking.> ending.then   
            checking.= starting.x   
            checking.= checking.y+1   
        end   
    until checking.> ending.y   
        return monsters   
 end   
  
 function onThink()   
 if (Attack_monsters == TRUE and Attack_pkers == TRUE) or (Attack_monsters == TRUE and Attack_pkers == FALSE) or (Attack_monsters == FALSE and Attack_pkers == TRUE) then  
    if (os.clock() - check_clock) > check_interval then       
        monster_table = getMonstersfromArea(getCreaturePosition(getNpcCid(  )), radiusx, radiusy, 253)   
            if #monster_table >= 1 then  
                selfSay('' .. Attack_message ..' ')   
                    for i = 1, #monster_table do   
                        doNpcSetCreatureFocus(monster_table[i])   
                        local damage_min = (level * 2 + maglevel * 3) * min_multiplier   
                        local damage_max = (level * 2 + maglevel * 3) * max_multiplier   
                        local damage_formula = math.random(damage_min,damage_max) 
                        doSendDistanceShoot(getCreaturePosition(getNpcCid(  )), getThingPos(monster_table[i]), shoot_effect) 
                        doSendMagicEffect(getThingPos(monster_table[i]),hit_effect)   
                        doSendAnimatedText(getThingPos(monster_table[i]),damage_formula,damage_colour)   
                        doCreatureAddHealth(monster_table[i],-damage_formula)   
                        check_clock = os.clock()   
                        focus = 0   
                    end   
            elseif table.getn(monster_table) < 1 then   
                focus = 0   
                check_clock = os.clock()   
            end     
    end  
 end  
    focus = 0  
 end

Depois vá em /data/npc/ é la crie um arquivo defender.xml é lá adicione:


<?xml version="1.0"?> 
  
 <npc name="Defender" script="defender.lua" access="5" lookdir="2" autowalk="25"> 
  <mana now="800" max="800"/> 
  <health now="200" max="200"/> 
  <look type="131" head="116" body="94" legs="78" feet="115" addons="3"/> 
 </npc>

local level = 10 -- Quanto o NPC irar tirar.
local maglevel = 10 -- Quanto o NPC Irar tirar.
local min_multiplier = 2.1 -- Quanto o NPC Irar tirar.
local max_multiplier = 4.2 -- Quanto o NPC Irar tirar.
local Attack_message = "An Invader, ATTACK!!!" -- A mensagem queo NPC irar falar quanto detectar um invasor.

Creditos:
Knekarn
Eu (Por Postar aki no forum)

 

 

Eae, Consegue alterar para atacar X - Vocation no lugar de PK ?

Tipo atacar Vocation= 2,4

Link para o post
Compartilhar em outros sites
  • 3 years later...
Em 13/07/2014 em 01:07, Hadggar disse:

ocal level = 10  ----- change this to make the npc hit more/less---------------------|damage_min = (level * 2 + maglevel * 3) * min_multiplier |   local maglevel = 10  ----- change this to make the npc hit more/less -----------------|damage_max = (level * 2 + maglevel * 3) * max_multiplier |   local min_multiplier = 2.1  ----- change this to make the npc hit more/less ----------|damage_formula = math.random(damage_min,damage_max)      |   local max_multiplier = 4.2  ----- change this to make the npc hit more/less ---------------------------------------------------------------------   local check_interval = 5  ----- change this to the time between checks for a creature (the less time the more it will probably lag :S)     local radiusx = 7  ----- change this to the amount of squares left/right the NPC checks (default 7 so he checks 7 squares left of him and 7 squares right (the hole screen)     local radiusy = 5  ----- change this to the amount of squares left/right the NPC checks (default 5 so he checks 5 squares up of him and 5 squares down (the hole screen)     local Attack_message = "An Invader, ATTACK!!!"  ----- change this to what the NPC says when he sees a monster(s)     local town_name = "Archgard"  ----- the name of the town the NPC says when you say "hi"    local Attack_monsters = TRUE  ----- set to TRUE for the npc to attack monsters in his area or FALSE if he doesnt    local Attack_swearers = TRUE  ----- set to TRUE for the npc to attack players that swear near him or FALSE if he doesnt    local Attack_pkers = TRUE  ----- set to TRUE for the npc to attack players 

Como seria para esse NPC atacar apenas determinadas vocations exemplo (2, 6) que seriam elder druid e futuras vocations.

 

Link para o post
Compartilhar em outros sites
  • 2 years later...

Esta pegando 100%! Só queria saber se tem como eles atacar todos os monstro, menos X monstro que eu definir, para eles não ficar se auto atacando, ai colocaria o próprio nome dele!

 

Quero manter essa linha como esta:

Spoiler

local Attack_monsters = TRUE

 

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo