crusadel 0 Report post Posted December 23, 2016 i made all steps as is in guide and i get this error anyway Quote Share this post Link to post Share on other sites
Abdelrahman Hajjaj 3 Report post Posted March 11, 2017 hi @Rinor i get this error err.lua [03-11 16:29:10]resource/script/MisSdk/scriptsdk.lua:1315: attempt to index field `?' (a nil value) [03-11 16:29:11]...esource/script/addon/BossKnowledge/BossKnowledge.lua:165: attempt to index field `?' (a nil value) not sure whats wrong with scriptsdk too. Quote Share this post Link to post Share on other sites
Riddler01 0 Report post Posted October 2, 2018 (edited) . Edited October 31, 2018 by Riddler01 Quote Share this post Link to post Share on other sites
Tassadar 8 Report post Posted January 23, 2020 BossFolder = "script/extension/Boss Knowledge/BossLogs/" print( "* Loading Boss Knowledge" ) Characterinfo_path = "resource\\characterinfo.txt" -- scanned characterinfo path -- ---------------- -- Table Index's -- ---------------- MonsterKnowledge = {} RespawnBoss = {} BossToRecord = {} MonstersToRecord = {} -- ---------------- -- Bosses IDS -- ---------------- MonstersToRecord[1] = 805 MonstersToRecord[2] = 789 MonstersToRecord[3] = 1302 MonstersToRecord[4] = 757 MonstersToRecord[5] = 1265 MonstersToRecord[6] = 1204 MonstersToRecord[7] = 1267 MonstersToRecord[8] = 1244 -- -------------------- -- Bosses Respawn Time -- -------------------- -- MonsterID / Time in seconds RespawnBoss[805] = 10800 RespawnBoss[789] = 86400 RespawnBoss[1302] = 604800 RespawnBoss[757] = 7200 RespawnBoss[1265] = 14400 RespawnBoss[1204] = 14400 RespawnBoss[1267] = 30000 RespawnBoss[1244] = 39600 -- ---------------------------- -- Record tables for monsters -- ---------------------------- for i,v in pairs (MonstersToRecord) do BossToRecord[v] = true end function file_exists(name) local f=io.open(name,"r") if f~=nil then io.close(f ) return true else return false end end -- ------------------------- -- NPC SDK -- ----------------- -- elseif item.func == CheckMonsterSat then -- return CheckMonsterSat( character,item.p1) -- --------------------------- -- CUSTOM SPLIT FUNCTION -- --------------------------- function split(str, delim, maxNb) -- Eliminate bad cases... if string.find(str, delim) == nil then return { str } end if maxNb == nil or maxNb < 1 then maxNb = 0 -- No limit end local result = {} local pat = "(.-)" .. delim .. "()" local nb = 0 local lastPos for part, pos in string.gfind(str, pat) do nb = nb + 1 result[nb] = part lastPos = pos if nb == maxNb then break end end -- Handle the last field if nb ~= maxNb then result[nb + 1] = string.sub(str, lastPos) end return result end -- --------------------------- -- SCAN CHARACTERINFO -- --------------------------- function ScanMonsterKnowledge(file) local fp = assert(io.open (file)) for line in fp:lines() do local position = string.find(line, "[ \t]*//") if (position ~= 1) then local data = split(line,"\t") local c1 = tonumber(data[1]) if c1 ~= nil then MonsterKnowledge[c1] = {Name = {tostring(data[2])},Skills = {data[45]},Drops = {data[47]},Lv = data[61],MaxHP=data[62],MaxSP=data[64],MinAtk=data[66],MaxAtk=data[67],Pr=data[68],Def=data[69],Hr=data[70],Dodge=data[71],Exp=data[91] } end end end end -- ---------------------------- -- Run characterinfo.txt scan -- ---------------------------- ScanMonsterKnowledge(Characterinfo_path) -- --------------------------- -- CHECK STATUS -- --------------------------- function CheckBossRespawn(id) if file_exists(GetResPath(BossFolder..""..id..".txt")) == false then table.save({LastKilled = 0 , RecordRespawn = 0 },GetResPath(BossFolder..""..id..".txt"),"a") end local Boss = table.load(GetResPath(BossFolder..""..id..".txt"),"r") if Boss.RecordRespawn ~= 0 then local RemainingTime = Boss.RecordRespawn - os.time() if RemainingTime <= 1 then Boss.LastKilled = 0 Boss.RecordRespawn = 0 table.save(Boss,GetResPath(BossFolder..""..id..".txt"),"w") end local notice = "Dead" local notice1 = "Remaining Respawn time: "..GetTime(RemainingTime).."!" return notice,notice1 end if Boss.RecordRespawn == 0 then local noticey = "Alive" local noticex = "Boss: "..MonsterKnowledge[id].Name[1].." is still alive!" return noticey,noticex end end -- --------------------------- -- CHECK LAST KILLER -- --------------------------- function LastKillBossName(id) if file_exists(GetResPath(BossFolder..""..id..".txt")) == false then table.save({LastKilled = 0 , RecordRespawn = 0 },GetResPath(BossFolder..""..id..".txt"),"a") end local Boss = table.load(GetResPath(BossFolder..""..id..".txt"),"r") if Boss.LastKilled == 0 then killer = "Nobody" else killer = Boss.LastKilled end return killer end -- ---------------------------- -- NPC Function -- ---------------------------- function bossknowl() Talk(1,"Graves: Hello, I can show you some information about bosses! Pick a boss already and check the information about it.") for i,v in pairs(MonstersToRecord) do Text(1,""..MonsterKnowledge[v].Name[1].."",CheckMonsterSat,v) end end -- --------------------------- -- LOADING STATS -- --------------------------- function CheckMonsterSat(cha,id) local MonsterName = MonsterKnowledge[id].Name[1] local Lv = MonsterKnowledge[id].Lv local Hp = MonsterKnowledge[id].MaxHP local Sp = MonsterKnowledge[id].MaxSP local mAtk = MonsterKnowledge[id].MinAtk local mxAtk = MonsterKnowledge[id].MaxAtk local Pr = MonsterKnowledge[id].Pr local Def = MonsterKnowledge[id].Def local Hr = MonsterKnowledge[id].Hr local Dodge = MonsterKnowledge[id].Dodge local Exp = MonsterKnowledge[id].Exp local Drops = MonsterKnowledge[id].Drops for i,v in pairs(Drops)do end local Stat,Notice = CheckBossRespawn(id) local LastKill = LastKillBossName(id) HelpInfo(cha,0,"Boss: "..MonsterName.." Information_ Lv:"..Lv.." Hp: "..Hp.." Sp: "..Sp.."_ Min Attack: "..mAtk.." Max Attack: "..mxAtk.."_ Physical Resistance: "..Pr.." Defense: "..Def.."_ Hit Rate: "..Hr.." Dodge: "..Dodge.." Exp: "..Exp.."_ Status: "..Stat.." Last Killer: "..LastKill.." _ "..Notice.."")-- _ Drops : "..Dropsx.."") end -- --------------------------- -- GET TIME IN SECOND -- --------------------------- function GetTime(Seconds) if tonumber(Seconds) == 0 then return "00:00:00"; else Hours = string.format("%02.f", math.floor(tonumber(Seconds)/3600)); Mins = string.format("%02.f", math.floor(tonumber(Seconds)/60 - (Hours*60))); Secs = string.format("%02.f", math.floor(tonumber(Seconds) - Hours*3600 - Mins *60)); return Hours..":"..Mins..":"..Secs end end -- --------------------------- -- PLAYER KILL BOSS HOOK -- --------------------------- function RecordKilledBosses(z,dead,atk) local GetKillerName = GetChaDefaultName(atk) local GetBossName = GetChaDefaultName(dead) local GetBossID = GetChaID(dead) local DisplayCurrentTime = ""..os.date("%H")..":"..os.date("%M")..":"..os.date("%S").."" if BossToRecord[GetBossID] == true then local Boss = table.load(GetResPath(BossFolder..""..GetBossID..".txt"),"r") Boss.RecordRespawn = os.time() + RespawnBoss[GetBossID] Boss.LastKilled = GetKillerName table.save(Boss,GetResPath(BossFolder..""..GetBossID..".txt"),"w") Notice("<BOSS>: "..GetBossName.." has been defeated by ["..GetKillerName.."] at ["..DisplayCurrentTime.."]!") end end Hook:AddPostHook("GetExp_PKM",RecordKilledBosses) In regards to this, I was wondering If there needs to be a txt inside the folder for it to save to, nothing is saving or being created, and where/how does this handle the spawn location of the boss? Quote Share this post Link to post Share on other sites
Mario 12 Report post Posted June 6, 2022 This one has HP ,SP , DROPS etc.. about bosses Add this script into a .lua file and create a folder " Boss Knowledge " like this: script/extension/Boss Knowledge/ Dont forget to make a folder name " Boss Logs " like this: script/extension/Boss Knowledge/BossLogs/ i don`t understand which lua file , there is many lua files XD and there is no extention file on my files o.o any help ? Quote Share this post Link to post Share on other sites
V3ct0r 2,116 Report post Posted June 10, 2022 @Mario, you can create a separate .lua file, put the script there and include it in the SkillEffect.lua file. Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
eatsangels 2 Report post Posted September 9, 2022 On 6/10/2022 at 7:32 AM, V3ct0r said: @Mario, you can create a separate .lua file, put the script there and include it in the SkillEffect.lua file. hi Broth I have an error with the NPC that shows me the information of the bosses. I added 3 new bosses and they give me the following error. Add start.lua and bossinfo.lua. but they don't work for me Quote Share this post Link to post Share on other sites