• 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!
  • 2026 staff recruitment is open! Check it out and consider applying!

Quest System Script

Erevius

It Was A Good Day
Joined
Feb 12, 2010
Messages
157
Reaction score
7
Location
Poland/Olsztyn
Witam, umie ktoś poprawić ten skrypt tak, żeby działał on pod aveste 7.6?
Może macie jakiś podobny skrypt?

Code:
local specialQuests = {
[2001] = 30015 --Annihilator
}

local questsExperience = {
[30015] = 10000
}
function onUse(cid, item, frompos, item2, topos)

local storage = specialQuests[item.actionid]
if(not storage) then
storage = item.uid
if(storage > 65535) then
return false
end
end

if(getPlayerStorageValue(cid, storage) > 0) then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.")
return true
end

local items = {}
local reward = 0

local size = isContainer(item.uid) and getContainerSize(item.uid) or 0
if(size == 0) then
reward = doCopyItem(item, false)
else
for i = 0, size do
local tmp = getContainerItem(item.uid, i)
if(tmp.itemid > 0) then
table.insert(items, tmp)
end
end
end

size = table.maxn(items)
if(size == 1) then
reward = doCopyItem(items[1], true)
end

local result = ""
if(reward ~= 0) then
local ret = getItemDescriptions(reward.uid)
if(reward.type > 0 and isItemRune(reward.itemid)) then
result = reward.type .. " charges " .. ret.name
elseif(reward.type > 0 and isItemStackable(reward.itemid)) then
result = reward.type .. " " .. ret.plural
else
result = ret.article .. " " .. ret.name
end
else
if(size > 20) then
reward = doCopyItem(item, false)
elseif(size > 8) then
reward = getThing(doCreateItemEx(1988, 1))
else
reward = getThing(doCreateItemEx(1987, 1))
end

for i = 1, size do
local tmp = doCopyItem(items[i], true)
if(doAddContainerItemEx(reward.uid, tmp.uid) ~= RETURNVALUE_NOERROR) then
print("[Warning] QuestSystem:", "Could not add quest reward")
else
local ret = ", "
if(i == 2) then
ret = " and "
elseif(i == 1) then
ret = ""
end

result = result .. ret
ret = getItemDescriptions(tmp.uid)
if(tmp.type > 0 and isItemRune(tmp.itemid)) then
result = result .. tmp.type .. " charges " .. ret.name
elseif(tmp.type > 0 and isItemStackable(tmp.itemid)) then
result = result .. tmp.type .. " " .. ret.plural
else
result = result .. ret.article .. " " .. ret.name
end
end
end
end

if(doPlayerAddItemEx(cid, reward.uid, false) ~= RETURNVALUE_NOERROR) then
result = "You have found a reward weighing " .. getItemWeight(reward.uid) .. " oz. It is too heavy or you have not enough space."
else
result = "You have found " .. result .."a quest"
setPlayerStorageValue(cid, storage, 1)
if(questsExperience[storage] ~= nil) then
doPlayerAddExp(cid, questsExperience[storage])
doSendAnimatedText(getCreaturePosition(cid), questsExperience[storage], TEXTCOLOR_WHITE)
end
end

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, result)
return false
end

A to pojawia mi się w konsoli gdy otworze skrzynię:
Code:
Lua Script Error: [Action Interface]
data/actions/scripts/quests/system.lua:onUse

luaGetContainerItem(). Container not found


Jeszcze jedno:
Skrypt działa niemal że poprawnie, lecz jednak dodatkowo otwiera skrzynkę, jak każdy inny normalny pojemnik.
REP++!
 
Last edited:
żeby nie otwierał skrzynki daj niewiem, np. return false czy coś takiego

co do błędu to poprostu chyba nie może znaleść containera w chescie, tzn masz skrzynkę i w niej Backpack to powinno działać bo znalazło container item, który jest backpackiem, ale gdy masz skrzynkę bez żadnych bp to wywala błąd bo nie znajduje go

zapewne brakuje warunku sprawdzającego czy dany item jest containerem, a jeśli jest to wtedy, żeby sprawdziło itemy w nim, a jeśli nie jest, to żeby skrypt jechał dalej


nie paczałem dokładnie w ten skrypt, tylko spojrzałem na błąd jaki masz w konsoli i na podstawie tego wysunąłem wnioski

wgl ten system jest taki chujowaty trochę, ja tam wolę dawać na skrzynki uid/aid i potem w jednym skrypcie mam tablice
 
Back
Top