[ create a new paste ] login | about

Link: http://codepad.org/gPWcrRYH    [ raw code | fork ]

Lua, pasted on Mar 22:
local missions = {
        [1] = {
                items = {
                        {id = 5890, count = 12},
                        {id = 5878, count = 20},
                        {id = 5894, count = 8}
                },
                message = "Great, for your first mission you need to collect some items, I need",
                level = 15, -- minimum level voor this mission
                rewarditems = {
                        {id = 2160, count = 1},
                        {id = 2152, count = 1}
                },
                rewardexp = 15000
        },
        [2] = {
                monsters = {
                        {name = "Rat", count = 5, storage = 31200},
                        {name = "Rotworm", count = 5, storage = 31202}
                },
                message = "Thanks, for your next mission kill",
                level = 30,
                rewarditems = {
                        {id = 2160, count = 5}
                },
                rewardexp = 40000
        },
        [3] = {
                items = {
                        {id = 5920, count = 45},
                        {id = 5877, count = 22}
                },
                message = "Awesome, now get",
                level = 50,
                rewarditems = {
                        {id = 2160, count = 15}
                },
                rewardexp = 100000
        },
        [4] = {
                monsters = {
                        {name = "Dragon Lord", count = 5, storage = 31204}
                },
                message = "Good job, now kill",
                level = 70,
                rewarditems = {
                        {id = 2160, count = 25}
                },
                rewardexp = 200000
        },
        [5] = {
                items = {
                        {id = 5906, count = 35},
                        {id = 5882, count = 42},
                        {id = 4850, count = 1}
                },
                message = "Good, now your final mission, there are a few more items you need to get,",
                level = 100,
                rewarditems = {
                        {id = 2160, count = 50}
                },
                rewardexp = 450000
        }
}
 
local storage = 45555
 
local function getItemsMonstersFromTable(imtable)
                local text = ""
                for v = 1, #imtable do
                                local ret = ", "
                                if v == 1 then
                                                ret = ""
                                elseif v == #imtable then
                                                ret = " and "
                                end
                                text = text .. ret
                                count = imtable[v].count
                                if imtable[v].id then
                                                info = getItemInfo(imtable[v].id)
                                                text = text .. (count > 1 and count or info.article).." "..(count > 1 and info.plural or info.name)
                                else
                                                text = text .. count .." "..imtable[v].name
                                end
                end
                return text
end
 
function creatureSayCallback(cid, type, msg)
 
                local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
 
                if not npcHandler:isFocused(cid) then
                                return false
                end
               
                local x = missions[getPlayerStorageValue(cid, storage)]
 
                if msgcontains(msg, 'mission') or msgcontains(msg, 'quest') then
				    if not exhaustion.check(cid, 45690) and getPlayerStorageValue(cid, storage) > 0 then
					setPlayerStorageValue(cid, storage, -1)
					xstorage = getPlayerStorageValue(cid, storage)
					end
					if xstorage == -1 then
                                                selfSay("I have several missions for you, do you accept the challenge?", cid)
                                                talkState[talkUser] = 1
                                elseif x then
                                                if getPlayerLevel(cid) >= x.level then
                                                                local mess = x.items and "get "..getItemsMonstersFromTable(x.items) or "kill "..getItemsMonstersFromTable(x.monsters)
                                                                selfSay("Did you "..mess.."?", cid)
                                                                talkState[talkUser] = 1
                                                else
                                                                selfSay("The mission I gave you is for level "..x.level..", come back later.", cid)
                                                end
                                else
                                                selfSay("You already did all the missions, great job though.", cid)
                                                npcHandler:releaseFocus(cid)
                                end
                elseif msgcontains(msg, 'yes') and talkState[talkUser] == 1 then
                                if getPlayerStorageValue(cid, storage) == -1 then
                                                setPlayerStorageValue(cid, storage, 1)
                                                local x = missions[getPlayerStorageValue(cid, storage)]
                                                local imtable = x.items or x.monsters
                                                selfSay(x.message.." "..getItemsMonstersFromTable(imtable)..".", cid)
												exhaustion.set(cid, 45690, 86400)
                                elseif x then
                                                local imtable = x.items or x.monsters
                                                local amount = 0
                                                for it = 1, #imtable do
                                                                local check = x.items and getPlayerItemCount(cid, imtable[it].id) or getPlayerStorageValue(cid, imtable[it].storage)
                                                                if check >= imtable[it].count then
                                                                                amount = amount + 1
                                                                end
                                                end
                                                if amount == #imtable then
                                                                if x.items then
                                                                                for it = 1, #x.items do
                                                                                                doPlayerRemoveItem(cid, x.items[it].id, x.items[it].count)
                                                                                end
                                                                end
                                                                if x.rewarditems then
                                                                                for r = 1, #x.rewarditems do
                                                                                                doPlayerAddItem(cid, x.rewarditems[r].id, x.rewarditems[r].count)
                                                                                end
                                                                                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You received "..getItemsMonstersFromTable(x.rewarditems)..".")
                                                                end
                                                                if x.rewardexp then
                                                                                doPlayerAddExp(cid, x.rewardexp)
                                                                                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You received "..x.rewardexp.." experience.")
                                                                end
                                                                setPlayerStorageValue(cid, storage, getPlayerStorageValue(cid, storage) + 1)
                                                                local x = missions[getPlayerStorageValue(cid, storage)]
                                                                if x then
                                                                                selfSay(x.message.." "..getItemsMonstersFromTable(x.items or x.monsters)..".", cid)
                                                                else
                                                                                selfSay("Well done! You did a great job on all your missions.", cid)
																				exhaustion.set(cid, 45690, 86400)
                                                                end
                                                else
                                                                local n = 0
                                                                for i = 1, #imtable do
                                                                                local check = x.items and getPlayerItemCount(cid, imtable[i].id) or getPlayerStorageValue(cid, imtable[i].storage)
                                                                                if check < imtable[i].count then
                                                                                                n = n + 1
                                                                                end
                                                                end
                                                                local text = ""
                                                                local c = 0
                                                                for v = 1, #imtable do
                                                                                local check = x.items and getPlayerItemCount(cid, imtable[v].id) or getPlayerStorageValue(cid, imtable[v].storage)
                                                                                if check < imtable[v].count then
                                                                                                c = c + 1
                                                                                                local ret = ", "
                                                                                                if c == 1 then
                                                                                                                ret = ""
                                                                                                elseif c == n then
                                                                                                                ret = " and "
                                                                                                end
                                                                                                text = text .. ret
                                                                                                if x.items then
                                                                                                                local count, info = imtable[v].count - getPlayerItemCount(cid, imtable[v].id), getItemInfo(imtable[v].id)
                                                                                                                text = text .. (count > 1 and count or info.article).." "..(count > 1 and info.plural or info.name)
                                                                                                else
                                                                                                                local count = imtable[v].count - (getPlayerStorageValue(cid, imtable[v].storage) + 1)
                                                                                                                text = text .. count.." "..imtable[v].name
                                                                                                end
                                                                                end
                                                                end
                                                                selfSay(x.items and "You don't have all items, you still need to get "..text.."." or "You didn't kill all monsters, you still need to kill "..text..".", cid)
                                                end
                                end
                                talkState[talkUser] = 0
                elseif msgcontains(msg, 'no') and talkState[talkUser] == 1 then
                                selfSay("Oh well, I guess not then.", cid)
                end
                return true
end


Output:
No errors or program output.


Create a new paste based on this one


Comments: