- Joined
- Aug 5, 2008
- Messages
- 1,581
- Reaction score
- 81
\data\actions\scripts\quests\system.lua
As you can see, the action is id 2000, every chest on the map has action id 2000. Unique id of the chests is the same as 3000~ etc also in the chest on the map there is the itemreward.
STILL, the quests don't work for the players. Can anyone see anything wrong?!
Code:
local specialQuests = {
[2001] = 30015, --Annihilator
[2000] = 30014, --Knight Armor
[2000] = 30013, --Rapier
[2000] = 30012, --Dragon Lance
[2000] = 30011, --War Hammer
[2000] = 30010, --Wand of Vortex
[2000] = 30009, --Snakebite Rod
[2000] = 30008, --Wand of inferno
[2000] = 30007, --Knight axe
[2000] = 30006, --Crown Shield
[2000] = 30005, --Crown Helmet
[2000] = 30004, --Dwarven Axe
[2000] = 30003, --Battle Hammer
[2000] = 30002, --Spike Sword
[2000] = 30001, --Crown Armor
[2000] = 30000, --Crown Legs
[2000] = 29999, --Tower Shield
[2000] = 29998, --Terra Legs
[2000] = 29997, --Terra Boots
[2000] = 29996, --Terra Mantle
[2000] = 29995, --Terra Hood
[2000] = 29994, --Yellow Gem
[2000] = 29993, --Green Gem
[2000] = 29992, --Blue Gem
[2000] = 29991, --Dwarven Helmet
[2000] = 29990 --Battle Axe
}
local questsExperience = {
}
function onUse(cid, item, fromPosition, itemEx, toPosition)
if(getPlayerCustomFlagValue(cid, PlayerCustomFlag_GamemasterPrivileges)) then
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF, cid)
return true
end
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
As you can see, the action is id 2000, every chest on the map has action id 2000. Unique id of the chests is the same as 3000~ etc also in the chest on the map there is the itemreward.
STILL, the quests don't work for the players. Can anyone see anything wrong?!