• 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!

Need working script

darex11

Own Big Server
Joined
Aug 21, 2007
Messages
219
Reaction score
0
Location
Poland
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.
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...
 
@doors
Code:
local function checkStackpos(item, position)
	position.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
	local thing = getThingfromPos(position)
	position.stackpos = STACKPOS_TOP_FIELD
	local field = getThingfromPos(position)
	if(item.uid ~= thing.uid and thing.itemid >= 100 or field.itemid ~= 0) then
		return FALSE
	end

	return TRUE
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if(getItemLevelDoor(item.itemid) > 0) then
		if(item.actionid > 0 and getPlayerLevel(cid) >= (item.actionid - getItemLevelDoor(item.itemid))) then
			doTransformItem(item.uid, item.itemid + 1)
			doTeleportThing(cid, toPosition, TRUE)
		else
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
		end

		return TRUE
	end
	
	if(getItemLevelDoor(item.itemid) > 0) then
		if(item.actionid == 666 and isPremium(cid) == TRUE) then
			doTransformItem(item.uid, item.itemid + 1)
			doTeleportThing(cid, toPosition, TRUE)
		else
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only the worthy may pass.")
		end

		return TRUE
	end

	if(isInArray(specialDoors, item.itemid) == TRUE) then
		if(item.actionid ~= 0 and getPlayerStorageValue(cid, item.actionid) ~= -1) then
			doTransformItem(item.uid, item.itemid + 1)
			doTeleportThing(cid, toPosition, TRUE)
		else
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "The door seems to be sealed against unwanted intruders.")
		end

		return TRUE
	end

	if(isInArray(keys, item.itemid) == TRUE) then
		if(itemEx.actionid > 0) then
			if(item.actionid == itemEx.actionid) then
				if doors[itemEx.itemid] ~= nil then
					doTransformItem(itemEx.uid, doors[itemEx.itemid])
					return TRUE
				end
			end

			doPlayerSendCancel(cid, "The key does not match.")
			return TRUE
		end

		return FALSE
	end

	if(isInArray(horizontalOpenDoors, item.itemid) == TRUE and checkStackpos(item, fromPosition) == TRUE) then
		local newPosition = toPosition
		newPosition.y = newPosition.y + 1
		local doorPosition = fromPosition
		doorPosition.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
		local doorCreature = getThingfromPos(doorPosition)
		if(doorCreature.itemid ~= 0) then
			if(getTilePzInfo(doorPosition) == TRUE and getTilePzInfo(newPosition) == FALSE and doorCreature.uid ~= cid) then
				doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
			else
				doTeleportThing(doorCreature.uid, newPosition, TRUE)
				if(isInArray(closingDoors, item.itemid) ~= TRUE) then
					doTransformItem(item.uid, item.itemid - 1)
				end
			end

			return TRUE
		end

		doTransformItem(item.uid, item.itemid - 1)
		return TRUE
	end

	if(isInArray(verticalOpenDoors, item.itemid) == TRUE and checkStackpos(item, fromPosition) == TRUE) then
		local newPosition = toPosition
		newPosition.x = newPosition.x + 1
		local doorPosition = fromPosition
		doorPosition.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
		local doorCreature = getThingfromPos(doorPosition)
		if(doorCreature.itemid ~= 0) then
			if(getTilePzInfo(doorPosition) == TRUE and getTilePzInfo(newPosition) == FALSE and doorCreature.uid ~= cid) then
				doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
			else
				doTeleportThing(doorCreature.uid, newPosition, TRUE)
				if(isInArray(closingDoors, item.itemid) ~= TRUE) then
					doTransformItem(item.uid, item.itemid - 1)
				end
			end

			return TRUE
		end

		doTransformItem(item.uid, item.itemid - 1)
		return TRUE
	end

	if(doors[item.itemid] ~= nil and checkStackpos(item, fromPosition) == TRUE) then
		if(item.actionid == 0) then
			doTransformItem(item.uid, doors[item.itemid])
		else
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is locked.")
		end

		return TRUE
	end

	return FALSE
end
try this (AID 666 as you had, but you can modify AID in line 26)
 
Back
Top