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

Lua Task System - KillingInTheNameOF

Eldran

New Member
Joined
Jul 13, 2009
Messages
85
Reaction score
1
I have this error in console when i try to use this lib+scripts:
CreatureEvent - KillingInTheNameOF (task system) for OTHIRE 7.72

Using OTHire 0.0.3 / Legacy Server Data Folders

Please help me :eek:

5UD7by.png
 
You are missing the function getTasksByPlayer.
It should be added to data/libs/name_of_file.lua
Then you should add that file in global.lua
Lua:
dofile("data/libs/name_of_file.lua")
 
@WibbenZ

The NPC worked after I added the
dofile line ("data / libs / KillingInTheNameOf.lua")
in global.lua.

But I'm having this error on the client when I summon the NPC on the map and when I say "bye" to he.

The following is the client error log:

+---------------------------------------------------------------
Debug Assertion 7.72 Objects.cpp 241
Fri Jun 30 23:25:33 2017
Windows Version: 6.1 build 7601 on 2 with Service Pack 1
Graphic Engine: 2
Last Packet Types: 107 170 107 170 030 109 109 030 109 109
Last Packet: 041 000 170 005 000 000 000 009 000 071 077 032 083 097 109 112
Player Position: [1000,1007,7]
Player.cpp 383: exception occurred, reason:
Player.cpp 456: exception occurred, reason:
Control.cpp 1560: exception occurred (Type = 0), reason:
Control.cpp 366: exception occurred (Force?1:0 = 0), reason:
MainWindow.cpp 127: exception occurred (Surface = 1), reason:
GUI.cpp 1408: exception occurred (Surface = 1), reason:
MapWindow.cpp 834: exception occurred (Surface = 1), reason:
MapWindow.cpp 527: exception occurred (Obj = 4515), reason:
MapWindow.cpp 1062: exception occurred (posx = 256) (posy = 160), reason:
MapWindow.cpp 987: exception occurred (i = 0) (Creatures->OutfitType = 128), reason:
MapWindow.cpp 1129: exception occurred (posx = 256) (posy = 160), reason:
Objects.cpp 594: exception occurred (Number = 128), reason:
Objects.cpp 241: assertion failed (PatternX = 103) (Entry.PatternWidth = 4), reason:
In(PatternX,1,Entry.PatternWidth)
----------------------------------------------------------------
 
@WibbenZ

The NPC worked after I added the in global.lua.

But I'm having this error on the client when I summon the NPC on the map and when I say "bye" to he.

The following is the client error log:

+---------------------------------------------------------------
Debug Assertion 7.72 Objects.cpp 241
Fri Jun 30 23:25:33 2017
Windows Version: 6.1 build 7601 on 2 with Service Pack 1
Graphic Engine: 2
Last Packet Types: 107 170 107 170 030 109 109 030 109 109
Last Packet: 041 000 170 005 000 000 000 009 000 071 077 032 083 097 109 112
Player Position: [1000,1007,7]
Player.cpp 383: exception occurred, reason:
Player.cpp 456: exception occurred, reason:
Control.cpp 1560: exception occurred (Type = 0), reason:
Control.cpp 366: exception occurred (Force?1:0 = 0), reason:
MainWindow.cpp 127: exception occurred (Surface = 1), reason:
GUI.cpp 1408: exception occurred (Surface = 1), reason:
MapWindow.cpp 834: exception occurred (Surface = 1), reason:
MapWindow.cpp 527: exception occurred (Obj = 4515), reason:
MapWindow.cpp 1062: exception occurred (posx = 256) (posy = 160), reason:
MapWindow.cpp 987: exception occurred (i = 0) (Creatures->OutfitType = 128), reason:
MapWindow.cpp 1129: exception occurred (posx = 256) (posy = 160), reason:
Objects.cpp 594: exception occurred (Number = 128), reason:
Objects.cpp 241: assertion failed (PatternX = 103) (Entry.PatternWidth = 4), reason:
In(PatternX,1,Entry.PatternWidth)
----------------------------------------------------------------

Please read the rules; Rules for the Support board
#2

Is that the full log?
Post the NPC Lua script
 
I observed this happens when I say hi to npc and then do not say anything else or when you say bye to NPC

The NPC script:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}

function onCreatureAppear(cid) npcHandler:eek:nCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:eek:nCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:eek:nCreatureSay(cid, type, msg) end
function onThink() npcHandler:eek:nThink() end

local choose = {}
local cancel = {}
local available = {}
function creatureSayCallback(cid, type, msg)

if npcHandler.focus ~= cid then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_PRIVATE and 0 or cid

if isInArray({"tasks", "task", "mission"}, msg:lower()) then
local can = getTasksByPlayer(cid)
if #can > 0 then
local text = ""
local sep = ", "
table.sort(can, (function(a, b) return (a < b) end))
local t = 0
for _, id in ipairs(can) do
t = t + 1
if t == #can - 1 then
sep = " and "
elseif t == #can then
sep = "."
end
text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
end
selfSay("The current task" .. (#can > 1 and "s" or "") .. " that you can choose " .. (#can > 1 and "are" or "is") .. " " .. text)
talkState[talkUser] = 0
else
selfSay("I don't have any task for you right now.")
end
elseif msg ~= "" and canStartTask(cid, msg) then
if #getPlayerStartedTasks(cid) >= tasksByPlayer then
selfSay("Sorry, but you already started " .. tasksByPlayer .. " tasks.")
return true
end
local task = getTaskByName(msg)
if task and getPlayerStorageValue(cid, QUESTSTORAGE_BASE + task) > 0 then
return false
end
selfSay("In this task you must defeat " .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ". Are you sure that you want to start this task?")
choose[cid] = task
talkState[talkUser] = 1
elseif msg:lower() == "yes" and talkState[talkUser] == 1 then
setPlayerStorageValue(cid, QUESTSTORAGE_BASE + choose[cid], 1)
selfSay("Excellent! You can check the status of your task saying report to me.")
choose[cid] = nil
talkState[talkUser] = 0
elseif msg:lower() == "report" then
local started = getPlayerStartedTasks(cid)
local finishedAtLeastOne = false
local finished = 0
if started and #started > 0 then
for _, id in ipairs(started) do
if getPlayerStorageValue(cid, KILLSSTORAGE_BASE + id) >= tasks[id].killsRequired then
for _, reward in ipairs(tasks[id].rewards) do
print("Rewards loaded")
local deny = false
if reward.storage then
if getPlayerStorageValue(cid, reward.storage[1]) >= reward.storage[2] then
deny = true
end
end
if isInArray({REWARD_MONEY, "money"}, reward.type:lower()) and not deny then
doPlayerAddMoney(cid, reward.value[1])
elseif isInArray({REWARD_EXP, "exp", "experience"}, reward.type:lower()) and not deny then
doPlayerAddExp(cid, reward.value[1])
doPlayerSendDefaultCancel(cid, "You gained " .. reward.value[1] .. " experience points.")
elseif isInArray({REWARD_ACHIEVEMENT, "achievement", "ach"}, reward.type:lower()) and not deny then
if doPlayerAddAchievement then
doPlayerAddAchievement(cid, reward.value[1], true)
end
elseif isInArray({REWARD_STORAGE, "storage", "stor"}, reward.type:lower()) and not deny then
setPlayerStorageValue(cid, reward.value[1], reward.value[2])
elseif isInArray({REWARD_POINT, "points", "point"}, reward.type:lower()) and not deny then
setPlayerStorageValue(cid, POINTSSTORAGE, getPlayerStorageValue(cid, POINTSSTORAGE) + reward.value[1])
elseif isInArray({REWARD_ITEM, "item", "items", "object"}, reward.type:lower()) and not deny then
doPlayerAddItem(cid, reward.value[1], reward.value[2])
end

if reward.storage then
setPlayerStorageValue(cid, reward.storage[1], reward.storage[2])
end
end

if tasks[id].norepeatable then
setPlayerStorageValue(cid, QUESTSTORAGE_BASE + id, 2)
else
setPlayerStorageValue(cid, QUESTSTORAGE_BASE + id, 0)
end
setPlayerStorageValue(cid, KILLSSTORAGE_BASE + id, 0)
if getPlayerStorageValue(cid, REPEATSTORAGE_BASE + id) < 1 then
setPlayerStorageValue(cid, REPEATSTORAGE_BASE + id, 0)
end
setPlayerStorageValue(cid, REPEATSTORAGE_BASE + id, getPlayerStorageValue(cid, REPEATSTORAGE_BASE + id) + 1)
finishedAtLeastOne = true
finished = finished + 1
end
end

if not finishedAtLeastOne then
selfSay("You haven't finished any task yet.")
else
selfSay("Awesome! you finished " .. (finished > 1 and "various" or "a") .. " task" .. (finished > 1 and "s" or "") .. ". Talk to me again if you want to start a task.")
end
else
selfSay("You haven't started any task yet.")
end
elseif msg:lower() == "started" then
local started = getPlayerStartedTasks(cid)
if started and #started > 0 then
local text = ""
local sep = ", "
table.sort(started, (function(a, b) return (a < b) end))
local t = 0
for _, id in ipairs(started) do
t = t + 1
if t == #started - 1 then
sep = " and "
elseif t == #started then
sep = "."
end
text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
end

selfSay("The current task" .. (#started > 1 and "s" or "") .. " that you started " .. (#started > 1 and "are" or "is") .. " " .. text)
else
selfSay("You haven't started any task yet.")
end
elseif msg:lower() == "cancel" then
local started = getPlayerStartedTasks(cid)
if started and #started > 0 then
selfSay("Cancelling a task will make the count restart. Wich task you want to cancel?")
talkState[talkUser] = 2
else
selfSay("You haven't started any task yet.")
end
elseif getTaskByName(msg) and talkState[talkUser] == 2 and isInArray(getPlayerStartedTasks(cid), getTaskByName(msg)) then
local task = getTaskByName(msg)
if getPlayerStorageValue(cid, KILLSSTORAGE_BASE + task) > 0 then
selfSay("You currently killed " .. getPlayerStorageValue(cid, KILLSSTORAGE_BASE + task) .. "/" .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ". Cancelling this task will restart the count. Are you sure you want to cancel this task?")
else
selfSay("Are you sure you want to cancel this task?")
end
talkState[talkUser] = 3
cancel[cid] = task
elseif msg:lower() == "yes" and talkState[talkUser] == 3 then
setPlayerStorageValue(cid, QUESTSTORAGE_BASE + cancel[cid], -1)
setPlayerStorageValue(cid, KILLSSTORAGE_BASE + cancel[cid], -1)
selfSay("You have cancelled the task " .. (tasks[cancel[cid]].name or tasks[cancel[cid]].raceName) .. ".")
talkState[talkUser] = 0
elseif isInArray({"points", "rank"}, msg:lower()) then
selfSay("At this time, you have " .. getPlayerStorageValue(cid, POINTSSTORAGE) .. " Paw & Fur points. You " .. (getPlayerRank(cid) == 5 and "are an Elite Hunter" or getPlayerRank(cid) == 4 and "are a Trophy Hunter" or getPlayerRank(cid) == 3 and "are a Big Game Hunter" or getPlayerRank(cid) == 2 and "are a Ranger" or getPlayerRank(cid) == 1 and "are a Huntsman" or "haven't been ranked yet") .. ".")
talkState[talkUser] = 0
end
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
 
Last edited:
Back
Top