Um hier aussagen zu machen brauchen wir mehr Information (am besten source des systems / der quest)
Aber im Grunde geht es darum das du getn mit nil als Parameter aufrufst, dabei braucht getn als Parameter eine Tabelle (getn gibt die größe der Tabelle an)
quest bio_system begin
state start begin
function get_id()
return pc.getf("bio_system", "quest_id") + 1
end
function change_id()
pc.setf("bio_system", "quest_id", bio_system.get_id())
end
function get_state()
return pc.getf("bio_system", "quest_state")
end
function change_state()
local cur_state = bio_system.get_state()
local new_state = 0
if cur_state == 0 then new_state = 1 end
pc.setf("bio_system", "quest_state", new_state)
end
function quest_exists()
return bio_system.get_id() <= table.getn(locale.BIOSYSTEM_QUEST_LIST)
end
function OnTimerExecute(is_loop)
local given = pc.getqf("items_given")
local checking = pc.getqf("items_checking") - 1
pc.setqf("items_checking", checking)
local fail = pc.getqf("items_checking_fail")
local succ = pc.getqf("items_checking_succ")
local currentQuestID = bio_system.get_id()
local data = locale.BIOSYSTEM_QUEST_LIST[currentQuestID]
if data["fail_chance"] >= number(1, 100) then
fail = fail + 1
pc.setqf("items_checking_fail", fail)
else
succ = succ + 1
pc.setqf("items_checking_succ", succ)
if given + succ >= data["item_count_need"] then
pc.delqf("next_check_time")
pc.setqf("items_given", given + succ)
cmdchat("bio done,"..succ..","..data["item_count_need"]..","..checking)
if is_loop then
cleartimer("check_next_item_loop")
end
return
end
end
if checking == 0 then
pc.delqf("items_checking_fail")
pc.delqf("items_checking_succ")
pc.setqf("items_given", given + succ)
pc.delqf("next_check_time")
cmdchat("bio finish,"..fail..","..succ)
if is_loop then
cleartimer("check_next_item_loop")
end
else
pc.setqf("next_check_time", data["check_item_time"] + os.time())
if not is_loop then
loop_timer("check_next_item_loop", data["check_item_time"])
end
end
end
when login with bio_system.quest_exists() begin
local currentQuestID = bio_system.get_id()
local data = locale.BIOSYSTEM_QUEST_LIST[currentQuestID]
if data["min_level"] <= pc.get_level() then
local qstate = bio_system.get_state()
if qstate == 0 then
local v = find_npc_by_vnum(20084)
if v != 0 then
target.vid("__TARGET__", v)
end
elseif qstate == 1 then
cmdchat("bio init,"..currentQuestID)
local given = pc.getqf("items_given")
if given < data["item_count_need"] then
local checking_count = pc.getqf("items_checking")
if checking_count > 0 then
local next_check_time = pc.getqf("next_check_time")
if os.time() >= next_check_time then
local checked = math.floor((os.time() - next_check_time) / data["check_item_time"]) + 1
if checked > checking_count then checked = checking_count end
local fail = pc.getqf("items_checking_fail")
local succ = pc.getqf("items_checking_succ")
for i = 1, checked do
if data["fail_chance"] >= number(1, 100) then
fail = fail + 1
else
succ = succ + 1
if given + succ >= data["item_count_need"] then
pc.delqf("next_check_time")
pc.setqf("items_given", given + succ)
pc.setqf("items_checking", checking_count - i)
cmdchat("bio done,"..succ..","..data["item_count_need"]..","..(checking_count - i))
return
end
end
end
pc.setqf("items_checking", checking_count - checked)
if checked == checking_count then
pc.delqf("next_check_time")
pc.delqf("items_checking_fail")
pc.delqf("items_checking_succ")
pc.setqf("items_given", given + succ)
cmdchat("bio finish,"..fail..","..succ)
else
pc.setqf("next_check_time", next_check_time + checked * data["check_item_time"])
pc.setqf("items_checking_fail", fail)
pc.setqf("items_checking_succ", succ)
timer("check_next_item", (next_check_time + checked * data["check_item_time"]) - os.time())
end
else
timer("check_next_item", next_check_time - os.time())
end
end
end
end
end
end
-- levelup new quest check
when levelup with bio_system.quest_exists() and bio_system.get_state() == 0 begin
local currentQuestID = bio_system.get_id()
local data = locale.BIOSYSTEM_QUEST_LIST[currentQuestID]
if data["min_level"] == pc.get_level() then
local v = find_npc_by_vnum(20084)
if v != 0 then
target.vid("__TARGET__", v)
end
end
end
-- dialog with bio
when __TARGET__.target.click with bio_system.quest_exists() and bio_system.get_state() == 0 begin
target.delete("__TARGET__")
cmdchat("bio new,"..bio_system.get_id())
bio_system.change_state()
end
when 20084.chat."Die Forschung von Zephir" with bio_system.quest_exists() and bio_system.get_state() == 1 begin
setskin(NOWINDOW)
local currentQuestID = bio_system.get_id()
local data = locale.BIOSYSTEM_QUEST_LIST[currentQuestID]
local given = pc.getqf("items_given")
if given >= data["item_count_need"] then
local items_left = pc.getqf("items_checking")
if items_left > 0 then
pc.give_item2(data["item_vnum_need"], items_left)
end
local items = data["reward"]["item"]
for i = 1, table.getn(items) do
pc.give_item2(items[i][1], items[i][2])
end
local attrs = data["reward"]["attr"]
for i = 1, table.getn(attrs) do
affect.add_collect(attrs[i][1], attrs[i][2], 60*60*24*365*60)
end
if data["reward"]["gold"] > 0 then
pc.change_money(data["reward"]["gold"])
end
if data["reward"]["exp"] > 0 then
pc.give_exp2(data["reward"]["exp"])
end
bio_system.change_state()
bio_system.change_id()
pc.delqf("items_given")
pc.delqf("items_checking")
pc.delqf("items_checking_fail")
pc.delqf("items_checking_succ")
cmdchat("bio reward,"..items_left)
currentQuestID = bio_system.get_id()
data = locale.BIOSYSTEM_QUEST_LIST[currentQuestID]
if data["min_level"] <= pc.get_level() then
local v = find_npc_by_vnum(20084)
if v != 0 then
target.vid("__TARGET__", v)
end
end
else
local items_checking = pc.getqf("items_checking")
local timeLeft = 0
if items_checking > 0 then
timeLeft = pc.getqf("next_check_time") - os.time() + (items_checking - 1) * data["check_item_time"]
end
cmdchat("bio current,"..q.getcurrentquestindex()..","..data["item_vnum_need"]..","..data["item_count_need"]..","..pc.getqf("items_given")..","..pc.getqf("items_checking")..","..timeLeft)
end
end
-- client command to leave items
when button with bio_system.quest_exists() and bio_system.get_state() == 1 begin
setskin(NOWINDOW)
local slot = tonumber(input()) or -1
if slot < 0 or slot >= 90 then
return
end
if not item.select_cell(slot) then
return
end
local currentQuestID = bio_system.get_id()
local data = locale.BIOSYSTEM_QUEST_LIST[currentQuestID]
if item.get_vnum() != data["item_vnum_need"] then
return
end
if pc.getqf("items_given") >= data["item_count_need"] then
notice("Du hast bereits genügend Forschungsmaterial abgegeben.")
return
end
local cur = pc.getqf("items_checking")
pc.setqf("items_checking", cur + item.get_count())
if cur == 0 then
pc.setqf("next_check_time", data["check_item_time"] + os.time())
timer("check_next_item", data["check_item_time"])
end
item.remove_stack()
end
-- check an item [loop_timer]
when check_next_item.timer begin
bio_system.OnTimerExecute(false)
end
when check_next_item_loop.timer begin
bio_system.OnTimerExecute(true)
end
end
end
Flag-Sro l Cap110 l Coin System l Fight-Power System l New System l High Rate 07/06/2014 - SRO PServer Advertising - 1 Replies http://i.epvpimg.com/Q62Bb.png
if you Like Old School Join us
Web Site
Flag-Sro - Silkroad Online Private Server
Download
Flag-Sro - Silkroad Online Private Server
Register
Flag-Sro - Silkroad Online Private Server
FacBook
https://www.facebook.com/pages/Flag-Sro/423472161 101339