Zielas92
Active User
- Joined
- Nov 20, 2012
- Messages
- 100
- Reaction score
- 3
Witam! od jakiego? czasu szuka?em NPC Broadcastera, kt?ry za pieni?dze wysy?a wiadomo?? na czerwono. Znalaz?em jeden ale niestety nie by? sprawny je?li chodzi o TFS 0.3.6, sporo b??d?w przez kt?re npc poprostu nie dzia?a?. Poprawi?em estetyke wiadomo?ci, pisze z prefixem w ten spos?b:
Tutaj m?j poprawiony i w 100% sprawny npc pod TFS 0.3.6 (nie testowa?em pod innymi wersjami)
data/npc/broadcaster.xml
data/npc/scripts/broadcaster.lua
Skrypt nie jest mojego autorstwa, znalaz?em go dla siebie ale z tego wzgl?du, ?e nie dzia?a? na TFS 0.3.6, poprawi?em go i udost?pniam tutaj dla tych, kt?rzy r?wnie? go potrzebuj? a nie potrafi? poprawi? b??d?w. Mo?e komu? si? przyda.
Pozdrawiam.
Temat z kt?rego wzio?em skrypt: http://tibia.net.pl/threads/69545-8-x-NPC-Broadcaster[BroadCaster] Nick: Wiadomo??
Tutaj m?j poprawiony i w 100% sprawny npc pod TFS 0.3.6 (nie testowa?em pod innymi wersjami)
data/npc/broadcaster.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Broadcaster" script="data/npc/scripts/broadcaster.lua" pushable="0" walkinterval="0" floorchange="0">
<health now="150" max="150"/>
<look type="348" head="114" body="0" legs="95" feet="114" corpse="2212"/>
</npc>
data/npc/scripts/broadcaster.lua
Code:
-- NPC Broadcaster by XemiX, v1.37, 2009-02-14 21:40 CET
-- Idea by souhlen (Anel)
focus = 0
next_focus = 0
talk_start = 0
msgHi = 'Heylo! Would you like to broadcast anything?'
msgBye = 'See you another time!'
price = 140000
inConvo = 0
broadcast = ''
cast = ''
target = 0
following = false
attacking = false
function onThingMove(creature, thing, oldpos, oldstackpos)
end
function onCreatureAppear(creature)
end
function onCreatureDisappear(cid, pos)
if (focus == cid) then
selfSay(msgBye)
focus = next_focus
next_focus = 0
distFocus = getDistanceTo(next_focus)
if (distFocus > 0 and distFocus < 4) then
selfSay(msgHi)
talk_start = os.clock()
focus = next_focus
next_focus = 0
inConvo = 1
else
focus = 0
talk_start = 0
inConvo = 0
end
end
end
function onCreatureTurn(creature)
end
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)
msg2 = msg
msg = string.lower(msg)
if (cast ~= '') then
selfSay('does nothing')
-- do nothing, wait until message has been broadcasted and npc has replied
elseif (getDistanceTo(cid) >= 4 and focus == cid) then
selfSay('Please come closer, '..getCreatureName(cid)..'. I can\'t hear what you are saying from over there.')
elseif (type == 1) then
if ((string.find(msg, '(%a*)hi(%a*)') or string.find(msg, '(%a*)hello(%a*)') or string.find(msg, '(%a*)heylo(%a*)') or string.find(msg, '(%a*)greetings(%a*)')) and (focus == 0) and getDistanceTo(cid) < 4) then
selfSay(msgHi)
focus = cid
talk_start = os.clock()
inConvo = 1
elseif ((string.find(msg, '(%a*)hi(%a*)') or string.find(msg, '(%a*)hello(%a*)') or string.find(msg, '(%a*)heylo(%a*)') or string.find(msg, '(%a*)greetings(%a*)')) and (focus ~= cid) and getDistanceTo(cid) < 4) then
if (next_focus > 0 and getDistanceTo(next_focus) < 4) then
selfSay('Take a nap while I help the ones before you, ' .. getCreatureName(cid) .. '.')
else
selfSay('I\'ll soon come to you, ' .. getCreatureName(cid) .. '.')
next_focus = cid
end
elseif (focus == cid) then
talk_start = os.clock()
if ((msgcontains(msg, 'broadcast') or msgcontains(msg, 'say')) and inConvo == 0) then
if (getPlayerLevel(getCreatureName(cid)) >= 30) then
selfSay('Do you want me to broadcast anything for you?')
inConvo = 1
else
selfSay('Come back when you\'re older!')
end
elseif (msgcontains(msg, 'yes') and inConvo == 1) then
selfSay('Tell me what you want me to broadcast.')
inConvo = 2
elseif (msgcontains(msg, 'no') and inConvo == 1) then
selfSay('Perhaps tomorrow then..')
if (next_focus > 0 and getDistanceTo(next_focus) < 4) then
selfSay(msgHi)
talk_start = os.clock()
focus = next_focus
next_focus = 0
inConvo = 1
else
focus = 0
talk_start = 0
inConvo = 0
end
broadcast = ''
elseif (inConvo == 2 and (msg ~= 'stop')) then
if (string.len(msg) > 90) then
selfSay('I am sorry, but your message can not be longer than 90 letters, including spaces and other characters. Say a new message or say STOP to end.')
else
broadcast = msg2
selfSay('Do you want to pay '..price..' gold for me to broadcast this message? "'..broadcast..'"')
inConvo = 3
end
elseif (msgcontains(msg, 'yes') and inConvo == 3) then
if (pay(cid, price)) then
broadcastMessage('[BroadCaster] '..getPlayerName(cid)..': '..broadcast)
saycast = os.clock()
inConvo = 1
io.output(io.open("broadcast.log", "a"))
io.write("["..os.date("%y.%m.%d %X").."] <"..getCreatureName(cid).."> "..broadcast.."\n")
io.close()
cast = broadcast
else
selfSay('You can not afford this service. Please come back another time when you have more money!')
if (next_focus > 0) then
distFocus = getDistanceTo(next_focus)
if (distFocus > 0 and distFocus < 4) then
selfSay(msgHi)
talk_start = os.clock()
focus = next_focus
next_focus = 0
inConvo = 1
else
focus = 0
talk_start = 0
inConvo = 0
end
broadcast = ''
end
end
elseif (msgcontains(msg, 'no') and inConvo == 3) then
selfSay('Ok then.')
inConvo = 0
broadcast = ''
elseif (string.find(msg, '(%a*)job(%a*)')) then
selfSay('Oh, I am just sitting around here and gamble now and then.')
inConvo = 0
elseif (string.find(msg, '(%a*)bye(%a*)')) then
selfSay(msgBye)
if (next_focus > 0) then
distFocus = getDistanceTo(next_focus)
if (distFocus > 0 and distFocus < 4) then
selfSay(msgHi)
talk_start = os.clock()
focus = next_focus
next_focus = 0
inConvo = 1
else
focus = 0
talk_start = 0
inConvo = 0
end
broadcast = ''
end
end
end
end
end
function onCreatureChangeOutfit(creature)
end
function onThink()
if (cast ~= '' and (os.clock() - saycast) > 1) then
selfSay('Do you want to broadcast anything else?')
cast = ''
elseif (os.clock() - talk_start) > 30 then
if (focus > 0) then
selfSay(msgBye)
if (next_focus > 0) then
distFocus = getDistanceTo(next_focus)
if (distFocus > 0 and distFocus < 4) then
selfSay(msgHi)
talk_start = os.clock()
focus = next_focus
next_focus = 0
inConvo = 1
else
focus = 0
talk_start = 0
inConvo = 0
end
else
focus = 0
talk_start = 0
inConvo = 0
end
broadcast = ''
end
elseif (focus ~= 0) then
distFocus = getDistanceTo(focus)
if (distFocus ~= nil and distFocus > 5) then
selfSay(msgBye)
if (next_focus > 0) then
distFocus = getDistanceTo(next_focus)
if (distFocus > 0 and distFocus < 4) then
selfSay(msgHi)
talk_start = os.clock()
focus = next_focus
next_focus = 0
inConvo = 1
else
focus = 0
talk_start = 0
inConvo = 0
end
end
broadcast = ''
end
end
end
Skrypt nie jest mojego autorstwa, znalaz?em go dla siebie ale z tego wzgl?du, ?e nie dzia?a? na TFS 0.3.6, poprawi?em go i udost?pniam tutaj dla tych, kt?rzy r?wnie? go potrzebuj? a nie potrafi? poprawi? b??d?w. Mo?e komu? si? przyda.
Pozdrawiam.