• 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!

Solved Wrong counts sum of money for item ID!

inp2007

Member
Joined
Jan 27, 2009
Messages
77
Reaction score
10
Location
Poland
BOH BUY PRICE-35k
BOH SELL PRICE-10k

Code:
13:07 Gax The Demonhunter: hi
13:07 Gejparty: Oh, please come in, Gax The Demonhunter. What do you need?
13:07 Gax The Demonhunter: buy boots of haste
13:07 Gejparty: Do you want to buy a boots of haste for 35000 gold?
13:07 Gax The Demonhunter: yes
13:07 Gejparty: Here you are.
13:08 Gax The Demonhunter: buy 2 boots of haste
13:08 Gejparty: Do you want to buy  2 boots of hastes for 35000 gold?
13:08 Gax The Demonhunter: yes
13:08 Gejparty: Here you are.
13:08 Gax The Demonhunter: sell boots of haste
13:08 Gejparty: Do you want to sell a boots of haste for 10000 gold?
13:08 Gax The Demonhunter: yes
13:08 Gejparty: Ok. Here is your money.
13:08 Gax The Demonhunter: sell boots of haste
13:08 Gejparty: Do you want to sell a boots of haste for 10000 gold?
13:08 Gax The Demonhunter: yes
13:08 Gejparty: Ok. Here is your money.
13:08 Gax The Demonhunter: sell 2 boots of haste
13:08 Gejparty: Do you want to sell  2 boots of hastes for 10000 gold?
13:09 Gejparty: Good bye and come again.


NPC CODE
Code:
_state = 0
_count = 0
_index = 0
_delay = 1000

items = {}
items[0] = {name = 'boots of haste', id = 2195, subtype = -1, sell = 35000, buy = 10000}


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('Oh, please come in, ' .. getCreatureName(cid) .. '. What do you need?', delay)
end

function onCreatureAppear(cid)
end

function onCreatureDisappear(cid)
    if (getNpcFocus() == cid) then
        selfSay('Good bye and come again.', _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 (_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('Good bye and come again.', _delay)
            getNext()
        end
    end
end

Please help me to fix it.
 
Problem solved:
Code:
selfSay('Do you want to ' .. action .. ' ' .. plural .. amount .. ' ' .. items[_index].name .. suffix .. ' for ' .. cost * amount .. ' gold?')
 
Back
Top