Hello. I need 3 working script:
Oracle, Quest Chest and Premium Door ( in files doors.xml )
Quest - don't show item name ... only You have found a chest.
Oracle - don't teleport, all time say: "What city do you wish to live in {xxx}?"
and doors - i want this function in doors.lua, no new script becouse is duplicate door ID.
Rep++ for help...
Oracle, Quest Chest and Premium Door ( in files doors.xml )
Quest - don't show item name ... only You have found a chest.
Code:
function copyItem(item)
if (isContainer(item.uid) == TRUE) then
uid = copyContainer(item.uid, item.itemid)
if item.actionid > 0 then
doSetItemActionId(uid, item.actionid)
end
return uid
else
return doCreateItemEx(item.itemid, item.type)
end
end
function copyContainer(uid, itemid)
local container = doCreateItemEx(itemid, 1)
local iterator = getContainerSize(uid)
while iterator > 0 do
iterator = iterator - 1
doAddContainerItemEx(container, copyItem(getContainerItem(uid, iterator)))
end
return container
end
function onUse(cid, item, fromPosition, itemEx, toPosition)
if item.uid < 65535 and item.uid ~= 0 then
if getPlayerStorageValue(cid, item.uid) ~= 1 then
local items = {}
local item_in = {}
local item_slot = 0
local item_to_give = 0
local item_desc = ''
while(true) do
item_in = getContainerItem(item.uid, item_slot)
if item_in.itemid > 0 then
table.insert(items, item_in)
else
break
end
item_slot = item_slot+1
end
if #items == 0 then
item_to_give = doCreateItemEx(item.uid)
item_desc = getItemNameById(item.itemid)
elseif #items == 1 then
item_to_give = copyItem(items[1])
item_desc = getItemNameById(items[1].itemid)
else
if #items <= 8 then
item_to_give = doCreateItemEx(1987, 1)
else
item_to_give = doCreateItemEx(1988, 1)
end
local n = 0
local uid = 0
for i=1, #items do
n = #items - i + 1
uid = doAddContainerItemEx(item_to_give, copyItem(items[n]))
if items[n].actionid > 0 then
doSetItemActionId(uid, items[n].actionid)
end
item_desc = getItemNameById(items[n].itemid) .. item_desc
if i ~= #items then
item_desc = ", " .. item_desc
end
end
end
if doPlayerAddItemEx(cid, item_to_give, 0) == RETURNVALUE_NOERROR then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a ' .. item_desc .. '.')
setPlayerStorageValue(cid, item.uid, 1)
if item.uid < 2000 then
setPlayerStorageValue(cid, 1000, getPlayerStorageValue(cid,1000)+1)
end
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You don\'t have enought capacity or free place in backpack for a ' .. item_desc .. '.')
end
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.")
end
end
return TRUE
end
Oracle - don't teleport, all time say: "What city do you wish to live in {xxx}?"
Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function oracle(cid, message, keywords, parameters, node)
if(cid ~= npcHandler.focus) then
return false
end
local cityNode = node:getParent():getParent()
local vocNode = node:getParent()
local destination = cityNode:getParameters().destination
local townid = cityNode:getParameters().townid
local voc = vocNode:getParameters().voc
if(destination ~= nil and vocation ~= nil and townid ~= nil) then
if(getPlayerLevel(cid) < parameters.level) then
npcHandler:say('You must first reach level ' .. parameters.level .. '!', cid)
npcHandler:resetNpc()
else
if(getPlayerVocation(cid) > 0) then
npcHandler:say('Sorry, You already have a vocation!')
npcHandler:resetNpc()
else
doPlayerSetVocation(cid, voc)
doPlayerSetTown(cid, townid)
npcHandler:resetNpc()
local tmp = getCreaturePosition(cid)
doTeleportThing(cid, destination)
doSendMagicEffect(tmp, CONST_ME_POFF)
doSendMagicEffect(destination, CONST_ME_TELEPORT)
end
end
end
return true
end
npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setMessage(MESSAGE_GREET, 'Hello |PLAYERNAME|. Are you prepared to face your destiny?')
local yesNode = KeywordNode:new({'yes'}, oracle, {level = 8})
local noNode = KeywordNode:new({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, moveup = 1, text = 'Then what vocation do you want to become?'})
local node1 = keywordHandler:addKeyword({'yes'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'What city do you wish to live in {xxx}?'})
local node2 = node1:addChildKeyword({'xxx'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, townid = 8, destination = {x=xxx, y=xxx, z=x}, text = 'The city of xxx, eh? So what vocation do you wish to become? Sorcerer, druid, paladin or knight?'})
local node3 = node2:addChildKeyword({'sorcerer'}, StdModule.say, {npcHandler = npcHandler, voc = 1, onlyFocus = true, text = 'So, you wish to be a powerful magician? Are you sure about that? This decision is irreversible!'})
node3:addChildKeywordNode(yesNode)
node3:addChildKeywordNode(noNode)
local node3 = node2:addChildKeyword({'druid'}, StdModule.say, {npcHandler = npcHandler, voc = 2, onlyFocus = true, text = 'Are you sure that a druid is what you wish to become? This decision is irreversible!'})
node3:addChildKeywordNode(yesNode)
node3:addChildKeywordNode(noNode)
local node3 = node2:addChildKeyword({'paladin'}, StdModule.say, {npcHandler = npcHandler, voc = 3, onlyFocus = true, text = 'A ranged marksman. Are you sure? This decision is irreversible!'})
node3:addChildKeywordNode(yesNode)
node3:addChildKeywordNode(noNode)
local node3 = node2:addChildKeyword({'knight'}, StdModule.say, {npcHandler = npcHandler, voc = 4, onlyFocus = true, text = 'A mighty warrior. Is that your final decision? This decision is irreversible!'})
node3:addChildKeywordNode(yesNode)
node3:addChildKeywordNode(noNode)
keywordHandler:addKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Then come back when you are ready.'})
npcHandler:addModule(FocusModule:new())
and doors - i want this function in doors.lua, no new script becouse is duplicate door ID.
Code:
function onUse(cid, item, frompos, item2, topos)
if item.actionid == 666 then
if isPremium(cid) == 1 then
pos = getPlayerPosition(cid)
if pos.x == topos.x then
if pos.y < topos.y then
pos.y = topos.y + 1
else
pos.y = topos.y - 1
end
elseif pos.y == topos.y then
if pos.x < topos.x then
pos.x = topos.x + 1
else
pos.x = topos.x - 1
end
else
doPlayerSendCancel(cid,"Please stand in front of the door.")
return TRUE
end
doTeleportThing(cid,pos)
doSendMagicEffect(topos,12)
end
return TRUE
else
return FALSE
end
end
Rep++ for help...