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 3 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 3 Report post Posted June 6 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 1,821 Report post Posted June 10 @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