Defender

Haate

User
Zarejestrowany
Dołączył
Styczeń 2, 2010
Posty
49
Liczba reakcji
2
Kod:
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 = {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 getPlayerSkullType(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[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

Nie wiem czemu ten NPC atakuje inne NPC i jak napisz? do niego "dick" itp. to nie atakuje mnie, pomo?e kto??
 
Odp: Defender

Podmie?, b?dzie dobrze:

--Edited By Szybol
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 --Edited By Szybol
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 getPlayerSkullType(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)
doSendDistanceShoot(getCreaturePosition(getNpcCid( )), getThingPos(monster_table), shoot_effect)
doSendMagicEffect(getThingPos(monster_table),hit_effect)
doSendAnimatedText(getThingPos(monster_table),damage_formula,damage_colour)
doCreatureAddHealth(monster_table,-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
 
Odp: Defender

Dalej atakuje npc i nie odpisuje na hi i nic nie robi, gdy m?wi? shit itp..
 
Odp: Defender

Kod:
[03/06/2010 23:15:20] [Notice - Npc::Npc] NPC Name: Defender - autowalk has been deprecated, use walkinterval.
[03/06/2010 23:15:20] [Notice - Npc::Npc] NPC Name: Defender - autowalk has been deprecated, use walkinterval.
[03/06/2010 23:15:20] [Notice - Npc::Npc] NPC Name: Defender - autowalk has been deprecated, use walkinterval.
[03/06/2010 23:15:20] [Notice - Npc::Npc] NPC Name: Defender - autowalk has been deprecated, use walkinterval.

Teraz znalaz?em po?r?d wszystkich b??d?w, ?e co? wyskakuje, nie pokazywa?o si? tam gdzie zawsze tylko w ?rodku mapy.. a mam du?o b??d?w z house i nie zauwa?y?em.
 
Odp: Defender

Poka? co masz w pliku XML z NPC.
 
Odp: Defender

My?la?em, ?e to zb?dne, wi?c nie pokazywa?em, ale ?ap:
Kod:
<?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>
 
Odp: Defender

<?xml version="1.0"?>
<npc name="Defender" script="defender.lua" access="5" lookdir="2" walkinterval="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>

Zmiana starej funkcji na nowsz?. Ale to nie za?atwia twojego problemu.


#Edit
Masz w silniku funckj? isNPC?
 
Ostatnia edycja:
Odp: Defender

Ta, w tym mam jeszcze jeden problem, co si? w po?owie do tego odnosi:
http://forum.otsoft.pl/showthread.php?t=25166
Chcia?em doda? funkcje / sprawdzi? jakie mam funkcj?, a nie mam ?adnego global.lua , data.lua i tym podobne..

P.S. Mam TFS 0.3.6 :)
 
Ostatnia edycja:
Odp: Defender

skrypt autorstwa Capaverde
wklej to do jakiego? pliku actions nawet do pick.lua a nast?pnie u?yj picka.
-- a Capaverde's production
local function sittable(k,v)
table.insert(tabela,{k,v})
end

local function sorttable(a,b) -- tried to put it into alphabetical order
return string.byte(a[1],1) < string.byte(b[1],1)
end

function onUse(cid, item, frompos, item2, topos)
tabela = {}
table.foreach(_G,sittable)
table.sort(tabela,sorttablezzz)
for k,v in ipairs(tabela) do
if type(v[2]) == "function" then
doPlayerSendTextMessage(cid,22,v[1])
end
end
return 1
end
Jakby? mia? isNPC to problem mo?na szybko rozwi?za?.
 
Odp: Defender

A ten pick to co to? Chodzi o kilof?
A ju? wiem jak zainstalowa? isNPC, wi?c jak to wtedy rozwi?za??
 
Odp: Defender

Jak masz is Npc mo?esz u?y? tego. Jednak gdyby? wysili? si? to na otlandzie jest skrypt kt?ry nie ma tego b??du (nie atakuje jednak on potwor?w). Ja niestety nie mog?em tego znale??.
Poj?cia nie mam jak zachowa si? skrypt dlatego jak mo?esz to napisz czy to zadzia?a?o czy nie.
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 --Edited By Szybol
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 and isNPC(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.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)
doSendDistanceShoot(getCreaturePosition(getNpcCid( )), getThingPos(monster_table), shoot_effect)
doSendMagicEffect(getThingPos(monster_table),hit_effect)
doSendAnimatedText(getThingPos(monster_table),damage_formula,damage_colour)
doCreatureAddHealth(monster_table,-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
 
Back
Do góry