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

Potrzebny mi skrypt NPC[7.4]

inp2007

Member
Joined
Jan 27, 2009
Messages
77
Reaction score
10
Location
Poland
Witam potrzebuję, aby mi ktoś napisał skrypt, w którym sam będę mógł edytować jakie przedmioty i za ile sprzedaje bądź kupuje NPC pod Avesta 7.4.

dla ulatwienia daje jednego NPC
Code:
_state = 0
_count = 0
_index = 0
_delay = 1000

items = {}
items[0] = {name = 'blank', id = 2260, subtype = -1, sell = 10, buy = -1}
items[1] = {name = 'rune of magic', id = 2281, subtype = -1, sell = 100, buy = -1}
items[2] = {name = 'spellbook', id = 2175, subtype = -1, sell = 150, buy = -1}


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 (msgcontains(msg, 'name')) then
            _selfSay('I\'m Xodet the owner of this magic shop.')
       
        elseif (msgcontains(msg, 'job')) then
            _selfSay('I\'m sorcerer and trade with all kinds of magic items.')
           
        elseif (msgcontains(msg, 'manafluid')) then
            _selfSay('Sorry I do not sell manafluids anymore ask me about "Rune of Magic"!')   
           
        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 blank runes, runes of magic and spellbooks.')
           
           
        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
 
Last edited:
Dla ulatwienia, popatrz na pierwsze 10 linijek skryptu.
 
Zmieniam id, cenę i nazwę, ale nadal sprzedaje i reaguje na item z oryginału. Proszę o pomoc.
 
co to za system i jak go aktywować. Tyle godzin siedziałem nad tymi skryptami że w końcu zrozumiałem ich działanie i teraz sam pisze własne mam tylko problem bo Nie wiem jaką funkcję i zmienna wprowadzić aby maksymalna liczba sprzedawanych lub kupowanych itemów nie przekraczała 200 pomoże ktoś?
 
PROSTA FUNKCJA IF!!?!

Co do systemu jest tego pełno na forum. Co do twojego problemu reloadujesz npc przy zmianach? moze edytujesz nie tego co trzeba npc?;x
 
Back
Top