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

Boat NPC

Alaa Adel

Basic Mapper
Joined
Mar 2, 2014
Messages
231
Reaction score
8
I've been looking for a tutorial that shows the boat npc script but i never found a script that works!
So, if anyone knows a working script please post it here!
 
Add uniqueid to the door, don't add an actionid to the door.
Then add it with that uniqueid in actions.xml and remove the actions.xml line with the actionid.
 
What is the itemid of the door?
If you get this when you click use on the door while standing in the door, you can check for itemid.

Code:
if item.itemid ~= 1229 then
    return true
end
Instead of 1229 the itemid of the closed door.
 
Last edited:
This will check if the door is not itemid 9181, if not (so the open door, which is itemid 9192), it will do nothing.

item.itemid is itemid of the item you click use on
~= means "is not".
return true stops the script, so it will ignore the rest of the script.
 
[01/09/2014 04:26:58] [Error - CreatureScript Interface]


[01/09/2014 04:26:58] data/creaturescripts/scripts/removepstime.lua
[01/09/2014 04:26:58] Description:
[01/09/2014 04:26:58] (luaGetThingPosition) Thing not found

[01/09/2014 04:26:58] [Error - CreatureScript Interface]
[01/09/2014 04:26:58] data/creaturescripts/scripts/removepstime.lua
[01/09/2014 04:26:58] Description:
[01/09/2014 04:26:58] data/lib/032-position.lua:2: attempt to index local 'position' (a boolean value)
[01/09/2014 04:26:58] [Warning - Event::loadScript] Cannot load script (data/creaturescripts/scripts/removepstime.lua)

error is from the script for when the players get kicked out
 
Make sure the function isInRange in data/lib/032-position.lua is like this.
Code:
function isInRange(position, fromPosition, toPosition)
     return (position.x >= fromPosition.x and position.y >= fromPosition.y and position.z >= fromPosition.z and position.x <= toPosition.x and position.y <= toPosition.y and position.z <= toPosition.z)
end

If it is, post the login script where you added it.
 
Code:
local config = {
    loginMessage = getConfigValue('loginMessage')
}

function onLogin(cid)
    local loss = getConfigValue('deathLostPercent')
    if(loss ~= nil) then
        doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, loss * 10)
    end

    local accountManager = getPlayerAccountManager(cid)
    if(accountManager == MANAGER_NONE) then
        local lastLogin, str = getPlayerLastLoginSaved(cid), config.loginMessage
        if(lastLogin > 0) then
        local welcomeText = "Welcome " .. getCreatureName(cid) .. ".\n\nOur community would like to welcome you to " .. getConfigValue('serverName') .. ". If you need help with anything, please refer to the help channel.\n\nEnjoy your time!"
local text = "- Welcome to Death-Pulse Ot, here's a list of commands:\n!aol -> Buy an amulet of loss\n!bless -> Will Bless You By All the 5 gods\n!frags -> Check your amount of kills\n !promote - You will be promoted \n !commands for full list of all commands!\n- Visit our webpage for a complete list of commands.\n//Death Pulse Staff"
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, ""..text.."")

if(getPlayerStorageValue(cid, 19622)) == -1 then
doBroadcastMessage(""..welcomeText.."")
setPlayerStorageValue(cid, 19622, 1)
return true
end
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str)
            str = "Your last visit was on " .. os.date("%a %b %d %X %Y", lastLogin) .. "."
        else
            str = str .. " Please choose your outfit."
            doPlayerSendOutfitWindow(cid)
        end

        doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str)
    elseif(accountManager == MANAGER_NAMELOCK) then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, it appears that your character has been namelocked, what would you like as your new name?")
    elseif(accountManager == MANAGER_ACCOUNT) then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, type 'account' to manage your account and if you want to start over then type 'cancel'.")
    else
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, type 'account' to create an account or type 'recover' to recover an account.")
    end

    if(not isPlayerGhost(cid)) then
        doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT)
    end

    registerCreatureEvent(cid, "PlayerDeath")
    registerCreatureEvent(cid, "Blessloss")
    registerCreatureEvent(cid, "expRate")
    registerCreatureEvent(cid, "pointsforlvl")
    registerCreatureEvent(cid, "RebirthDescription")
    registerCreatureEvent(cid, "KdrLook")
    registerCreatureEvent(cid, "killpoint")
    registerCreatureEvent(cid, "deathpoint")
    registerCreatureEvent(cid, "Mail")
    registerCreatureEvent(cid, "GuildMotd")
    registerCreatureEvent(cid, "Bounty")
    registerCreatureEvent(cid, "Idle")
    registerCreatureEvent(cid, "SkullCheck")
    registerCreatureEvent(cid, "ReportBug")
    registerCreatureEvent(cid, "AdvanceSave")
    registerCreatureEvent(cid, "removepstime")       
    registerCreatureEvent(cid, "advance")
    registerCreatureEvent(cid, "FimVip")
    registerCreatureEvent(cid, "SkullCheck")
    registerCreatureEvent(cid, "demonOakLogout")
    registerCreatureEvent(cid, "demonOakDeath")
    registerCreatureEvent(cid, "ReportBug")
    registerCreatureEvent(cid, "FirstItems")
    registerCreatureEvent(cid, "PartyDamage")
    registerCreatureEvent(cid, "VipReceive")
    registerCreatureEvent(cid, "PlayerKill")
    registerCreatureEvent(cid, "KillingInTheNameOf")
    registerCreatureEvent(cid, "PythiusDead")

    if (InitArenaScript ~= 0) then
    InitArenaScript = 1

        for i = 42300, 42309 do
            setGlobalStorageValue(i, 0)
            setGlobalStorageValue(i+100, 0)
        end
    end

    if getPlayerStorageValue(cid, 42309) < 1 then
        for i = 42300, 42309 do
            setPlayerStorageValue(cid, i, 0)
        end
    end

    if getPlayerStorageValue(cid, 42319) < 1 then
        for i = 42310, 42319 do
            setPlayerStorageValue(cid, i, 0)
        end
    end

    if getPlayerStorageValue(cid, 42329) < 1 then
        for i = 42320, 42329 do
            setPlayerStorageValue(cid, i, 0)
        end
    end
    if getPlayerStorageValue(cid, 42355) == -1 then
        setPlayerStorageValue(cid, 42355, 0)
    end
    setPlayerStorageValue(cid, 42350, 0)
    setPlayerStorageValue(cid, 42352, 0)
return TRUE
end

local config = {
   storage = 8034,
   time = 3600,
   fromPos = {x=32172, y=32306, z=7},
   toPos = {x=32170, y=32339, z=7},
   backPos = {x=32172, y=32305, z=7}
}

local function doKickPlayer(cid)
   if not isPlayer(cid) then
     return true
   end
   if isInRange(getPlayerPosition(cid), config.fromPos, config.toPos) then
     doTeleportThing(cid, config.backPos)
     doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING,"Time is up!")
   end
   return true
end

if isInRange(getPlayerPosition(cid), config.fromPos, config.toPos) then
   if getPlayerStorageValue(cid, config.storage) < os.time() then
     doTeleportThing(cid, config.backPos)
     doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING,"Time is up!")
   else
     local m = math.floor((getPlayerStorageValue(cid, config.storage) - os.time()) / 60) > 0 and math.floor((getPlayerStorageValue(cid, config.storage) - os.time()) / 60) or 1
     doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"You have "..m.." "..(m == 1 and "minute" or "minutes").." left to hunt in the spawn.")
     addEvent(doKickPlayer, m * 60 * 1000, cid)
   end
end
 
action door
Code:
local config = {
   storage = 8034,
   time = 3600,
   fromPos = {x=92, y=114, z=7},
   toPos = {x=98, y=120, z=7},
   backPos = {x=94, y=122, z=7}
}

local function doKickPlayer(cid)
   if not isPlayer(cid) then
     return true
   end
   if isInRange(getPlayerPosition(cid), config.fromPos, config.toPos) then
     doTeleportThing(cid, config.backPos)
     doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING,"Time is up!")
   end
   return true
end


function onUse(cid, item, fromPosition, itemEx, toPosition)
 
   if getPlayerStorageValue(cid, config.storage) >= os.time() then
     doTransformItem(item.uid, item.itemid + 1)
     doTeleportThing(cid, toPosition)
     local m = math.floor((getPlayerStorageValue(cid, config.storage) - os.time()) / 60) > 0 and math.floor((getPlayerStorageValue(cid, config.storage) - os.time()) / 60) or 1
     doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"You have "..m.." "..(m == 1 and "minute" or "minutes").." left to hunt in the spawn.")
     addEvent(doKickPlayer, m * 60 * 1000, cid)
   elseif doPlayerRemoveItem (cid, 2160, 1) then
     doTransformItem(item.uid, item.itemid + 1)
     doTeleportThing(cid, toPosition)
     doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"You have now entered some spawn, you can hunt here for 1 hour.")
     addEvent(doKickPlayer, config.time * 1000, cid)
     setPlayerStorageValue(cid, config.storage, os.time() + config.time)
   else
     doPlayerSendCancel(cid, "You need 1 cc to enter.")
   end
   return true
end

Add to login.lua or other login script.
Code:
local config = {
   storage = 8034,
   time = 3600,
   fromPos = {x=92, y=114, z=7},
   toPos = {x=98, y=120, z=7},
   backPos = {x=94, y=122, z=7}
}

local function doKickPlayer(cid)
   if not isPlayer(cid) then
     return true
   end
   if isInRange(getPlayerPosition(cid), config.fromPos, config.toPos) then
     doTeleportThing(cid, config.backPos)
     doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING,"Time is up!")
   end
   return true
end

if isInRange(getPlayerPosition(cid), config.fromPos, config.toPos) then
   if getPlayerStorageValue(cid, config.storage) < os.time() then
     doTeleportThing(cid, config.backPos)
     doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING,"Time is up!")
   else
     local m = math.floor((getPlayerStorageValue(cid, config.storage) - os.time()) / 60) > 0 and math.floor((getPlayerStorageValue(cid, config.storage) - os.time()) / 60) or 1
     doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,"You have "..m.." "..(m == 1 and "minute" or "minutes").." left to hunt in the spawn.")
     addEvent(doKickPlayer, m * 60 * 1000, cid)
   end
end

This post was absolutely incredible.
 
limos awesome script, thanks! I think that should fix for block new players who try to join the spawn while someone already is with the storage active.. so only 1 person can join the spawn each time
 
Last edited:
Back
Top