• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

7.4 NPC easy script HELP NEEDED!

inp2007

Member
Joined
Jan 27, 2009
Messages
77
Reaction score
10
Location
Poland
Hello all. I have no scripting skills. I just need 1 NPC who gonna buy or sell items what I will set.
Could any master write me the Code? (7.4 AVESTA) I will be glad. The script must looks like:
Code:
Player: Hi
NPC: Hi <playername>
Player:Sell <item>
NPC: Do you want to sell <item> for X gold coins?
Player:Yes.
NPC: Here you go.
Player: Buy <item>
NPC: Do you want to buy <item> for X gold coins?
Player: Yes.
NPC: Here you go.
Player: Bye.
NPC: Please come back any time!


Thanks.
 
I can help you with that, i just need the link for any server based on 7.4 AVESTA to try it on since i have no idea how they are scripted before and catch little bit of the past.
 
Alexander:
Code:
_state = 0
_count = 0
_index = 0
_delay = 1000

items = {}
items[0] = {name = 'blank rune', id = 2260, subtype = -1, sell = 10, buy = -1}
items[1] = {name = 'life ring', id = 2168, subtype = -1, sell = 900, buy = -1}
items[2] = {name = 'crystal ball', id = 2192, subtype = -1, sell = 530, buy = 190}
items[3] = {name = 'life crystal', id = 2177, subtype = -1, sell = 900, buy = 85}
items[4] = {name = 'mind stone', id = 2178, subtype = -1, sell = 900, buy = 170}

function getNext()
    nextPlayer = getQueuedPlayer()
    if (nextPlayer ~= nil) then
        if (getDistanceToCreature(nextPlayer) <= 4) then
            updateNpcIdle()
            setNpcFocus(nextPlayer)
            greet(nextPlayer, _delay * 3)
            return
        else
            getNext()
        end
    end
   
    setNpcFocus(0)
    resetNpcIdle()
end

local function onActionItem(action)
    if ((action == 'buy' and items[_index].sell == -1) or
        (action == 'sell' and items[_index].buy == -1)) then
        return
    end
   
    amount = ''
    suffix = ''
    plural = 'a'
   
    if (_count > 1) then
        amount = ' ' .. tostring(_count)
        suffix = 's'
        plural = ''
    end
   
    cost = items[_index].buy
    if (action == 'buy') then
        cost = items[_index].sell
    end
   
    selfSay('Do you want to ' .. action .. ' ' .. plural .. amount .. ' ' .. items[_index].name .. suffix .. ' for ' .. cost .. ' gold?')
end

function _selfSay(message)
    selfSay(message, _delay)
    updateNpcIdle()
end

local function greet(cid, delay)
    selfSay('Hi there ' .. getCreatureName(cid) .. '.', delay)
end

function onCreatureAppear(cid)
end

function onCreatureDisappear(cid)
    if (getNpcFocus() == cid) then
        selfSay('See you.', _delay)
        getNext()
    else
        unqueuePlayer(cid)
    end
end

function onCreatureMove(cid, oldPos, newPos)
    if (getNpcFocus() == cid) then
        faceCreature(cid)
    end
end

function onCreatureSay(cid, type, msg)
    if (getNpcFocus() == 0) then
        if ((msgcontains(msg, 'hi') or msgcontains(msg, 'hello')) and getDistanceToCreature(cid) <= 4) then
            updateNpcIdle()
            setNpcFocus(cid)
            greet(cid, _delay)
        end
       
    elseif (getNpcFocus() ~= cid) then
        if ((msgcontains(msg, 'hi') or msgcontains(msg, 'hello')) and getDistanceToCreature(cid) <= 4) then
            selfSay('Just wait, ' .. getCreatureName(cid) .. '.', _delay)
            queuePlayer(cid)
        end
       
    else
        if (msgcontains(msg, 'bye')) then
            selfSay('See you.', _delay)
            getNext()
       
        elseif (msgcontains(msg, 'name')) then
            _selfSay('I am Alexander.')
       
        elseif (msgcontains(msg, 'job')) then
            _selfSay('I trade with runes and other magic items.')
       
        elseif (msgcontains(msg, 'time')) then
            _selfSay('It\'s ' .. getTibiaTime() .. ' right now.')
       
        elseif (msgcontains(msg, 'king') or msgcontains(msg, 'tibianus')) then
            _selfSay('The king has not much interest in magic items as far as I know.')
       
        elseif (msgcontains(msg, 'army')) then
            _selfSay('The army uses weapons and armor rather then items of magic.')
       
        elseif (msgcontains(msg, 'ferumbras')) then
            _selfSay('A hero has to be well prepared to face this threat.')
       
        elseif (msgcontains(msg, 'excalibug')) then
            _selfSay('Ah, I would trade a fortune for this fabulous item.')
       
        elseif (msgcontains(msg, 'thais')) then
            _selfSay('I am glad the king founded this academy far away from the mundane troubles of Thais')
       
        elseif (msgcontains(msg, 'tibia')) then
            _selfSay('The world is filled with wonderous places and items.')
       
        elseif (msgcontains(msg, 'carlin')) then
            _selfSay('I heard it\'s a city of druids.')
       
        elseif (msgcontains(msg, 'edron')) then
            _selfSay('In our town, science and arts are thriving.')
       
        elseif (msgcontains(msg, 'news') or msgcontains(msg, 'rumors')) then
            _selfSay('Ask for news and rumors in the tavern.')
       
        elseif (msgcontains(msg, 'offer') or msgcontains(msg, 'goods')) then
            _selfSay('I\'m selling runes, life rings, wands, rods and crystal balls.')
           
        elseif (msgcontains(msg, 'rune') and not(msgcontains(msg, 'blank'))) then
            _selfSay('I sell blank runes and spell runes.')
           
        elseif (_state == 1) then
            if (msgcontains(msg, 'yes')) then
                if (doPlayerRemoveMoney(cid, items[_index].sell * _count) == 1) then
                    for i = 1, _count do
                        doPlayerAddItem(cid, items[_index].id, items[_index].subtype)
                    end
               
                    selfSay('Here you are.', _delay)
                else
                    selfSay('Come back, when you have enough money.', _delay)
                end
               
                updateNpcIdle()
            else
                selfSay('Hmm, but next time.', _delay)
            end
           
            _state = 0
           
        elseif (_state == 2) then
            if (msgcontains(msg, 'yes')) then
                if (doPlayerRemoveItem(cid, items[_index].id, _count, items[_index].subtype) == 1) then
                    doPlayerAddMoney(cid, items[_index].buy * _count)
                    selfSay('Ok. Here is your money.')
                else
                    if (count > 1) then
                        selfSay('Sorry, you do not have so many.', _delay)
                    else
                        selfSay('Sorry, you do not have one.', _delay)
                    end
                end
               
                updateNpcIdle()
            else
                selfSay('Maybe next time.', _delay)
            end
       
            _state = 0
           
        else
            for n = 0, table.getn(items) do
                if (msgcontains(msg, items[n].name) or msgcontains(msg, items[n].name .. "s")) then
                    _count = getCount(msg)
                    _index = n
                   
                    if (msgcontains(msg, 'sell')) then
                        onActionItem('sell')
                        _state = 2
                    else
                        onActionItem('buy')
                        _state = 1
                    end
                   
                    updateNpcIdle()
                    break
                end
            end
        end
    end
end

function onThink()
    if (getNpcFocus() ~= 0) then
        if (isNpcIdle() or getDistanceToCreature(getNpcFocus()) > 4) then
            selfSay('See you.', _delay)
            getNext()
        end
    end
end
 
Back
Top