SP

Npc Guarda! Que Mata Pk's Red E White Skull

Por Special_Forces, 20 de mar. de 2008 em NPCs, monsters e raids

script
41
12.7k
20 de março de 2008 às 10:29

Raizen Guard.xml (data\npc\Raizen Guard.xml)

<?xml version="1.0"?>

 

<npc name="Raizen Guard" script="data/npc/scripts/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>

 

Defender.lua(data\npc\script\defender.lua)

-------By Far Carder------

-----------------start of config-----------------------------------------------------------------------What the formula looks like---------------

local level = 100 ----- change this to make the npc hit more/less---------------------|damage_min = (level * 2 + maglevel * 3) * min_multiplier |

local maglevel = 30 ----- change this to make the npc hit more/less -----------------|damage_max = (level * 2 + maglevel * 3) * max_multiplier |

local min_multiplier = 12.1 ----- change this to make the npc hit more/less ----------|damage_formula = math.random(damage_min,damage_max) |

local max_multiplier = 19.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 = "One Invasor! DIE!!!" ----- change this to what the NPC says when he sees a monster(s)

local town_name = "Raizens OTS" ----- 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 -- NOTE: Set this to FALSE if you are using TFS as there is no way to tell if a player is skulled on TFS, you will only get errors

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 = "GO GO DEATH!!!" ----- change this to what you want the NPC to say when he attackes a swearer

local swear_words = {"######", "######", "######", "#####", "tnc", "pau no ######", "pnc"} ----- 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 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 = getPlayerHealth(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 ..' ')

doPlayerAddHealth(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 = {x = (pos.x - radiusx), y = (pos.y - radiusy), z = pos.z, stackpos = stack}

local ending = {x = (pos.x + radiusx), y = (pos.y + radiusy), z = pos.z, stackpos = stack}

local checking = {x = 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 getPlayerSkull(creature.uid) > 0 then

table.insert (monsters, creature.uid)

check_clock = os.clock()

end

end

end

end

end

if checking.x == pos.x-1 and checking.y == pos.y then

checking.x = checking.x+2

else

checking.x = checking.x+1

end

if checking.x > ending.x then

checking.x = starting.x

checking.y = checking.y+1

end

until checking.y > 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)

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)

doSendMagicEffect(getThingPos(monster_table),17)

doCreatureAddHealth(monster_table,-damage_formula) doSendMagicEffect(getThingPos(monster_table),hit_effect)

doSendAnimatedText(getThingPos(monster_table),damage_formula,damage_colour)

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

 

Quem Souber mexer pode mudar o nome, pois esse é do meu server e tem nome raizne guard.

E é necessário colocar ele pelo map editor, se vc não sabe coloca-lo no map editor procure um tutorial, é muito facilzinho

MarcolinoGODM
20 de março de 2008 às 11:19

Meu amigo creio que não seja você o criador

deste NPC porque faz tempo que tenho ele aqui em casa e

quem criou ele foi um tal de hombre de um antigo forum de

OtServ! (Estas informações consegui no script que não fala muita coisa)

Coloque os devidos creditos ao criador!

 

Sem mais...

20 de março de 2008 às 11:41

Não colokei créditos a mim

e eu axei que todos no forum tivessem olhos

 

-------By Far Carder------

-----------------start of config-----------------------------------------------------------------------What the formula looks like---------------

local level = 100 ----- change this to make the npc hit more/less---------------------|damage_min = (level * 2 + maglevel * 3) * min_multiplier |

local maglevel = 30 ----- change this to make the npc hit more/less -----------------|damage_max = (level * 2 + maglevel * 3) * max_multiplier |

local min_multiplier = 12.1 ----- change this to make the npc hit more/less ----------|damage_formula = math.random(damage_min,damage_max) |

local max_multiplier = 19.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 = "One Invasor! DIE!!!" ----- change this to what the NPC says when he sees a monster(s)

local town_name = "Raizens OTS" ----- 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 -- NOTE: Set this to FALSE if you are using TFS as there is no way to tell if a player is skulled on TFS, you will only get errors

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 = "GO GO DEATH!!!" ----- change this to what you want the NPC to say when he attackes a swearer

local swear_words = {"######", "######", "######", "#####", "tnc", "pau no ######", "pnc"} ----- 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 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 = getPlayerHealth(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 ..' ')

doPlayerAddHealth(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 = {x = (pos.x - radiusx), y = (pos.y - radiusy), z = pos.z, stackpos = stack}

local ending = {x = (pos.x + radiusx), y = (pos.y + radiusy), z = pos.z, stackpos = stack}

local checking = {x = 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 getPlayerSkull(creature.uid) > 0 then

table.insert (monsters, creature.uid)

check_clock = os.clock()

end

end

end

end

end

if checking.x == pos.x-1 and checking.y == pos.y then

checking.x = checking.x+2

else

checking.x = checking.x+1

end

if checking.x > ending.x then

checking.x = starting.x

checking.y = checking.y+1

end

until checking.y > 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)

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)

doSendMagicEffect(getThingPos(monster_table),17)

doCreatureAddHealth(monster_table,-damage_formula) doSendMagicEffect(getThingPos(monster_table),hit_effect)

doSendAnimatedText(getThingPos(monster_table),damage_formula,damage_colour)

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

decionD
20 de março de 2008 às 16:55

Kara eu testei ele aki mas ele fika dando ums erros no programa do ot ...

 

 

 

Luagethingfrompos

 

 

 

flow

21 de março de 2008 às 14:52

Para ele só atacar creaturas em

local Attack_monsters = TRUE ----- set to TRUE for the npc to attack monsters in his area or FALSE if he doesnt

coloque false e ele nao ataka os monstros

decionD
21 de março de 2008 às 23:29

Nah xP

N tem nada a v kom os bixos é: Luagethingfrompos () Tile Not Found

 

Algo assim

22 de março de 2008 às 00:03

seu ot não tem supórte a o NPC então

decionD
22 de março de 2008 às 00:32

aries 4.5 ... :/

blz :(

valew

nightshadeN
22 de março de 2008 às 03:19

poderia dizer em qual ot roda?

 

 

eh soh pegar o script como ta ali e ele vai funcinar jah? ou precisa fazer alteracao?

 

 

Cya

Editado Março 22 por nightshade

MisteriusM
22 de março de 2008 às 13:03

da hora , tou fazendo um test aki no meu ot se fumfa eu posto aki memo.

MarcolinoGODM
23 de março de 2008 às 17:45

Se você colocar "TRUE" aqui:

local Attack_monsters = TRUE ----- set to TRUE for the npc to attack monsters in his area or FALSE if he doesnt

O Npc fica atacando os npc! Oo

 

Sem mais...

henageH
23 de março de 2008 às 19:25

Esse npc não funciona..

Fica dando erros no OT defender num sei do que!....

Poxa explica melhor ai em qual versão funciona.

Darllan0D
25 de março de 2008 às 19:16

ele tbm ataca a pessoa quando ela xinga??

1 mês depois...
boladuuB
07 de abril de 2008 às 19:14

eaw gostei do npcm u unico lugar que vi dar erro foi qnd falo "time" pra ele mas retirei essa fala do npc e agora ta tudo certo

vlw

MisteriusM
07 de abril de 2008 às 23:51

cara eu colokei ess npc no meu ot ficou muito roxxxxxx vlws