Aeonz
Banned User
Hey i could use some help on making a quest, when i put the item in the chest then once i turn on the server it just gives it 1 time how do i fix that so i can make it like a quest<_<
Hey i could use some help on making a quest, when i put the item in the chest then once i turn on the server it just gives it 1 time how do i fix that so i can make it like a quest<_<
function onUse(cid, item, frompos, item2, topos)
local storages =
{
done = 36700,
}
if item.uid == 2466 then
if getPlayerStorageValue(cid,60057) == -1 then
doPlayerSendTextMessage(cid,25,"You have found a Guardian Halberd.")
doPlayerAddItem(cid,2427,1)
setPlayerStorageValue(cid,60057,1)
else
doPlayerSendTextMessage(cid,25,"The is empty.")
end
elseif item.uid == 2520 then
if getPlayerStorageValue(cid,60058) == -1 then
doPlayerSendTextMessage(cid,25,"You have found a Demon Shield.")
doPlayerAddItem(cid,2520,1)
setPlayerStorageValue(cid,60058,1)
else
doPlayerSendTextMessage(cid,25,"The is empty.")
end
elseif item.uid == 2171 then
if getPlayerStorageValue(cid,60059) == -1 then
doPlayerSendTextMessage(cid,25,"You have found a Golden Armor.")
doPlayerAddItem(cid,2466,1)
setPlayerStorageValue(cid,60059,1)
else
doPlayerSendTextMessage(cid,25,"The is empty.")
end
elseif item.uid == 2427 then
if getPlayerStorageValue(cid,60060) == -1 then
doPlayerSendTextMessage(cid,25,"You have found a bag.")
local bag = doPlayerAddItem(cid,1987,1)
doAddContainerItem(bag,2171,1)
doAddContainerItem(bag,2168,1)
doAddContainerItem(bag,2124,1)
doAddContainerItem(bag,2145,3)
doAddContainerItem(bag,2146,4)
setPlayerStorageValue(cid,60060,1)
else
doPlayerSendTextMessage(cid,25,"It is empty.")
end
end
return TRUE
end
YOu need to make a quest script for it so the reward always "respawns"...here is one script from my server...
Code:function onUse(cid, item, frompos, item2, topos) local storages = { done = 36700, } if item.uid == 2466 then if getPlayerStorageValue(cid,60057) == -1 then doPlayerSendTextMessage(cid,25,"You have found a Guardian Halberd.") doPlayerAddItem(cid,2427,1) setPlayerStorageValue(cid,60057,1) else doPlayerSendTextMessage(cid,25,"The is empty.") end elseif item.uid == 2520 then if getPlayerStorageValue(cid,60058) == -1 then doPlayerSendTextMessage(cid,25,"You have found a Demon Shield.") doPlayerAddItem(cid,2520,1) setPlayerStorageValue(cid,60058,1) else doPlayerSendTextMessage(cid,25,"The is empty.") end elseif item.uid == 2171 then if getPlayerStorageValue(cid,60059) == -1 then doPlayerSendTextMessage(cid,25,"You have found a Golden Armor.") doPlayerAddItem(cid,2466,1) setPlayerStorageValue(cid,60059,1) else doPlayerSendTextMessage(cid,25,"The is empty.") end elseif item.uid == 2427 then if getPlayerStorageValue(cid,60060) == -1 then doPlayerSendTextMessage(cid,25,"You have found a bag.") local bag = doPlayerAddItem(cid,1987,1) doAddContainerItem(bag,2171,1) doAddContainerItem(bag,2168,1) doAddContainerItem(bag,2124,1) doAddContainerItem(bag,2145,3) doAddContainerItem(bag,2146,4) setPlayerStorageValue(cid,60060,1) else doPlayerSendTextMessage(cid,25,"It is empty.") end end return TRUE end
function onUse(cid, item, frompos, item2, topos)
local storages =
{
done = xxxx,
}
if item.uid == xxxx then
if getPlayerStorageValue(cid,1990) == -1 then
doPlayerSendTextMessage(cid,25,"You have found a Blue Book.")
doPlayerAddItem(cid,1963,1)
setPlayerStorageValue(cid,1999,1)
else
doPlayerSendTextMessage(cid,25,"The is empty.")
end
elseif item.uid == xxxx then
if getPlayerStorageValue(cid,1991) == -1 then
doPlayerSendTextMessage(cid,25,"You have found a Brocade Backpack.")
doPlayerAddItem(cid,9774,1)
setPlayerStorageValue(cid,1991,1)
else
doPlayerSendTextMessage(cid,25,"The is empty.")
end
elseif item.uid == xxxx then
if getPlayerStorageValue(cid,1992) == -1 then
doPlayerSendTextMessage(cid,25,"You have found a Golden Armor.")
doPlayerAddItem(cid,2466,1)
setPlayerStorageValue(cid,1992,1)
else
doPlayerSendTextMessage(cid,25,"The is empty.")
end
elseif item.uid == xxxx then
if getPlayerStorageValue(cid,1993) == -1 then
doPlayerSendTextMessage(cid,25,"You have found a Plate Armor.")
doPlayerAddItem(cid,yyyy,1)
setPlayerStorageValue(cid,1993,1)
else
doPlayerSendTextMessage(cid,25,"It is empty.")
end
end
return TRUE
end
<!-- Quests -->
<action actionid="2000" event="script" value="quests/system.lua"/>
<action actionid="2001" event="script" value="quests/system.lua"/>
local specialQuests = {
[2001] = 30015 --Annihilator
}
local questsExperience = {
[30015] = 10000
}
function onUse(cid, item, fromPosition, itemEx, toPosition)
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 .. "."
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 true
end
No need to have scripts.
If you have TFS 0.3+ you can use TFS Quest System. Very easy.
Just have
actions.xml
Code:<!-- Quests --> <action actionid="2000" event="script" value="quests/system.lua"/> <action actionid="2001" event="script" value="quests/system.lua"/>
and script
system.lua
Code:local specialQuests = { [2001] = 30015 --Annihilator } local questsExperience = { [30015] = 10000 } function onUse(cid, item, fromPosition, itemEx, toPosition) 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 .. "." 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 true end
If you want to make a questyou can put
ACTIONID: 2000
UNIQUEID: XXXX (example: 65100)
ITEM: spike sword
If you want to make another chest
ACTIONID: 2000
UNIQUEID: XXXX (example: 65101)
ITEM: dragon shield
etc etc etc.
UNIQUEID = STORAGE = 1 TIME QUEST ONLY
So you can't just map quests annymore? ;s