summaryrefslogtreecommitdiffstats
path: root/example/scripts/npcs/merchant.lua
blob: 92eeea30c4fc950a8f12f3cb79a63e58b2093571 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
----------------------------------------------------------
-- Merchant Function Sample                                      --
----------------------------------------------------------------------------------
--  Copyright 2009-2010 The Mana World Development Team                              --
--                                                                              --
--  This file is part of The Mana World.                                        --
--                                                                              --
--  The Mana World  is free software; you can redistribute  it and/or modify it --
--  under the terms of the GNU General  Public License as published by the Free --
--  Software Foundation; either version 2 of the License, or any later version. --
----------------------------------------------------------------------------------

function Merchant(npc, ch, buy_sell_table)

    local function say(message)
        do_message(npc, ch, message)
    end

    -- Important note: You can add two tables made of trinoms here when calling the
    -- merchant function. E.g.: Merchant(npc, ch, buy_table, sell_table)
    -- Even though, the function here will see only one table:
    -- buy_sell_table[1] will corresponds to the first table (used to list
    -- boughtable items, and buy_sell_table[2] listing sellable items.

    local rights = mana.chr_get_rights(ch);

    if (rights >= 128) then
        mana.announce(mana.being_get_name(ch) .. " the big administrator was at my shop!",
                      mana.being_get_name(npc))
        say "Oh mighty server administrator, how can I avoid your wrath?"
    elseif (rights >= 8) then
        say "How can I be of assistance, sir gamemaster?"
    elseif (rights >= 4) then
        say "What feature would you like to debug, developer?"
    elseif (rights >= 2) then
        say "How can I assist you in your testing duties?"
    elseif (rights >= 1) then
        if mana.being_get_gender(ch) == GENDER_FEMALE then
            say "What do you want, Madam?"
        else
            say "What do you want, Sir?"
        end
    else
        say "...Aren't you supposed to be banned??"
    end

    -- Constructing the choice list
    local choice_table = {}
    table.insert (choice_table, "To Buy...")

    if (buy_sell_table[2] == nil) then
        table.insert (choice_table, "To sell stuff...")
    else
        table.insert (choice_table, "Can you make me a price for what I have?")
    end
    table.insert (choice_table, "Tell me about the objects on this map")
    table.insert (choice_table, "Nevermind...")

    local v = do_choice(npc, ch, choice_table)

    --Debug and learning purpose
    --for i,k in ipairs(choice_table) do print(i,k) end
    -- The buy table first line content
    --print (((buy_sell_table[1])[1])[1], ((buy_sell_table[1])[1])[2], ((buy_sell_table[1])[1])[3])
    -- The sell table first line content
    --print (((buy_sell_table[2])[1])[1], ((buy_sell_table[2])[1])[2], ((buy_sell_table[2])[1])[3])

    if v == 1 then
    -- "To buy."
    local buycase = mana.npc_trade(npc, ch, false, buy_sell_table[1])
    if buycase == 0 then
        say "What do you want to buy?"
    elseif buycase == 1 then
        say "I've got no items to sell."
    else
        say "Hmm, something went wrong... Ask a scripter to fix the buying mode!"
    end

    elseif v == 2 then

        if buy_sell_table[2] == nil then
            -- "To sell stuff..."
            local sellcase = mana.npc_trade(npc, ch, true)
            if sellcase == 0 then
                say "Ok, what do you want to sell?"
            elseif sellcase == 1 then
                say "I'm not interested by any of your items."
            else
                say "Hmm, something went wrong... Ask a scripter to fix this!"
            end
        else
            -- "Can you make me a price for what I have?"
            local sellcase = mana.npc_trade(npc, ch, true, buy_sell_table[2])
            if sellcase == 0 then
                say "Here we go:"
            elseif sellcase == 1 then
                say "I'm not that interested in any of your items."
            else
                say "Hmm, something went wrong... Ask a scripter to fix me!"
            end
        end

    elseif v == 3 then

        local objects = mana.map_get_objects()
        say("There are " .. #objects .. " objects on this map, their names are:")
        for i=1,#objects do
            say(tostring(i) .. ": " .. objects[i]:name())
        end

    end

    say "See you later!"
end