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

[10.95 + Cast] [TFS 1.2] Custom modifications V2

Can you please tell me how do you got all setup? Config.lua LINK to store (hide your domain) and gamestore.lua example.
Also, the way you have folders etc.
 
compilation erro

DepotChest::DepotChest(uint16_t type) :
Container(type), maxDepotItems(1500) {}

DepotChest::DepotChest(uint16_t type, bool pagination) :
Container(type)
{
maxDepotItems = 2000;
maxSize = 32;
pagination;
}
 
compilation erro

DepotChest::DepotChest(uint16_t type) :
Container(type), maxDepotItems(1500) {}

DepotChest::DepotChest(uint16_t type, bool pagination) :
Container(type)
{
maxDepotItems = 2000;
maxSize = 32;
pagination;
}
huh? where's the error...
 
compilation erro

DepotChest::DepotChest(uint16_t type) :
Container(type), maxDepotItems(1500) {}

DepotChest::DepotChest(uint16_t type, bool pagination) :
Container(type)
{
maxDepotItems = 2000;
maxSize = 32;
pagination;
}

Change the part where it says:
Code:
pagination;
to
Code:
pagination = true;
and should work fine.
 
@Lundrial , thanks for all the work that you put here!
i have a question, you know why i can put items inside of store inbox?
I add player.lua, and all necessary code..., idk why this allowed put items in storei nbox, please help me.
Thanks!
 
i have a question, you know why i can put items inside of store inbox?
I add player.lua, and all necessary code..., idk why this allowed put items in storei nbox, please help me.
Thanks!

If you have modificated the codes, then that's what it causes, if you show the code might be more helpful for everyone to look what you did wrong there.
However, the datapack itself does not allow you to put items in store inbox.
 
@Lundrial , thanks for all the work that you put here!
i have a question, you know why i can put items inside of store inbox?
I add player.lua, and all necessary code..., idk why this allowed put items in storei nbox, please help me.
Thanks!
If you used the purse code don't forget to change the item id to 26052 in player.lua
 
compilation error (UBUNTU 15.10):

[ 97%] Building CXX object CMakeFiles/tfs.dir/src/waitlist.cpp.o
[ 98%] Building CXX object CMakeFiles/tfs.dir/src/weapons.cpp.o
[100%] Building CXX object CMakeFiles/tfs.dir/src/wildcardtree.cpp.o
Linking CXX executable tfs
CMakeFiles/tfs.dir/src/item.cpp.o: In function `Item::CreateItem(unsigned short, unsigned short)':
item.cpp:(.text+0xce): undefined reference to `RewardChest::RewardChest(unsigned short)'
CMakeFiles/tfs.dir/src/player.cpp.o: In function `Player::getRewardChest()':
player.cpp:(.text+0x4aa2): undefined reference to `RewardChest::RewardChest(unsigned short)'
CMakeFiles/tfs.dir/src/player.cpp.o: In function `Player::getReward(unsigned int, bool)':
player.cpp:(.text+0x4b8a): undefined reference to `Reward::Reward()'
collect2: error: ld returned 1 exit status
CMakeFiles/tfs.dir/build.make:2109: recipe for target 'tfs' failed
make[2]: *** [tfs] Error 1
CMakeFiles/Makefile2:122: recipe for target 'CMakeFiles/tfs.dir/all' failed
make[1]: *** [CMakeFiles/tfs.dir/all] Error 2
Makefile:75: recipe for target 'all' failed
make: *** [all] Error 2
root@vps263763:~/Escritorio/sources/build#
 
@Lundrial ,@Dyabl0 Hello, this is my player.lua:

Code:
-- Players cannot throw items on teleports if set to true
local blockTeleportTrashing = false

function Player:onBrowseField(position)
    return true
end

function Player:onLook(thing, position, distance)
    local description = 'You see '
    if thing:isItem() then
        if thing.actionid == 5640 then
            description = description .. 'a honeyflower patch.'
        elseif thing.actionid == 5641 then
            description = description .. 'a banana palm.'
        else
            description = description .. thing:getDescription(distance)
        end
    else
        description = description .. thing:getDescription(distance)
    end

    if self:getGroup():getAccess() then
        if thing:isItem() then
            description = string.format('%s\nItem ID: %d', description, thing.itemid)

            local actionId = thing.actionid
            if actionId ~= 0 then
                description = string.format('%s, Action ID: %d', description, actionId)
            end

            local uniqueId = thing:getAttribute(ITEM_ATTRIBUTE_UNIQUEID)
            if uniqueId > 0 and uniqueId < 65536 then
                description = string.format('%s, Unique ID: %d', description, uniqueId)
            end

            description = description .. '.'
            local itemType = thing:getType()

            local transformEquipId = itemType:getTransformEquipId()
            local transformDeEquipId = itemType:getTransformDeEquipId()
            if transformEquipId ~= 0 then
                description = string.format('%s\nTransforms to: %d (onEquip)', description, transformEquipId)
            elseif transformDeEquipId ~= 0 then
                description = string.format('%s\nTransforms to: %d (onDeEquip)', description, transformDeEquipId)
            end

            local decayId = itemType:getDecayId()
            if decayId ~= -1 then
                description = string.format('%s\nDecays to: %d', description, decayId)
            end
        elseif thing:isCreature() then
            local str = '%s\nHealth: %d / %d'
            if thing:getMaxMana() > 0 then
                str = string.format('%s, Mana: %d / %d', str, thing:getMana(), thing:getMaxMana())
            end
            description = string.format(str, description, thing:getHealth(), thing:getMaxHealth()) .. '.'
        end

        local position = thing:getPosition()
        description = string.format(
            '%s\nPosition: %d, %d, %d',
            description, position.x, position.y, position.z
        )

        if thing:isCreature() and thing:isPlayer() then
            description = string.format('%s\nIP: %s.', description, Game.convertIpToString(thing:getIp()))
        end
    end
    self:sendTextMessage(MESSAGE_INFO_DESCR, description)
end

function Player:onLookInBattleList(creature, distance)
    local description = 'You see ' .. creature:getDescription(distance)
    if self:getGroup():getAccess() then
        local str = '%s\nHealth: %d / %d'
        if creature:getMaxMana() > 0 then
            str = string.format('%s, Mana: %d / %d', str, creature:getMana(), creature:getMaxMana())
        end
        description = string.format(str, description, creature:getHealth(), creature:getMaxHealth()) .. '.'

        local position = creature:getPosition()
        description = string.format(
            '%s\nPosition: %d, %d, %d',
            description, position.x, position.y, position.z
        )

        if creature:isPlayer() then
            description = string.format('%s\nIP: %s.', description, Game.convertIpToString(creature:getIp()))
        end
    end
    self:sendTextMessage(MESSAGE_INFO_DESCR, description)
end

function Player:onLookInTrade(partner, item, distance)
    self:sendTextMessage(MESSAGE_INFO_DESCR, 'You see ' .. item:getDescription(distance))
end

function Player:onLookInShop(itemType, count)
    return true
end

function Player:onMoveItem(item, count, fromPosition, toPosition, fromCylinder, toCylinder)
   
    if item:getActionId() == NOT_MOVEABLE_ACTION then
        self:sendCancelMessage('Sorry, not possible.')
        return false
    end
   
    if toPosition.x == CONTAINER_POSITION and toCylinder and toCylinder:getId() == 26052 then
        self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
        return false
    end

    if toPosition.x ~= CONTAINER_POSITION then
        return true
    end

    if item:getTopParent() == self and bit.band(toPosition.y, 0x40) == 0 then   
        local itemType, moveItem = ItemType(item:getId())
        if bit.band(itemType:getSlotPosition(), SLOTP_TWO_HAND) ~= 0 and toPosition.y == CONST_SLOT_LEFT then
            moveItem = self:getSlotItem(CONST_SLOT_RIGHT)   
        elseif itemType:getWeaponType() == WEAPON_SHIELD and toPosition.y == CONST_SLOT_RIGHT then
            moveItem = self:getSlotItem(CONST_SLOT_LEFT)
            if moveItem and bit.band(ItemType(moveItem:getId()):getSlotPosition(), SLOTP_TWO_HAND) == 0 then
                return true
            end
        end

        if moveItem then
            local parent = item:getParent()
            if parent:getSize() == parent:getCapacity() then
                self:sendTextMessage(MESSAGE_STATUS_SMALL, Game.getReturnMessage(RETURNVALUE_CONTAINERNOTENOUGHROOM))
                return false
            else
                return moveItem:moveTo(parent)
            end
        end
    end
   
    if blockTeleportTrashing and toPosition.x ~= CONTAINER_POSITION then
        local thing = Tile(toPosition):getItemByType(ITEM_TYPE_TELEPORT)
        if thing then
            self:sendCancelMessage('Sorry, not possible.')
            self:getPosition():sendMagicEffect(CONST_ME_POFF)
            return false
        end
    end

    if isInArray({1714, 1715, 1716, 1717, 1738, 1740, 1741, 1747, 1748, 1749}, item.itemid) and item.actionid > 0 or item.actionid == 5640 then
        self:sendCancelMessage('You cannot move this object.')
        return false
    elseif item.itemid == 7466 then
        self:sendCancelMessage('You cannot move this object.')
        return false
    end

    if fromPosition.x == CONTAINER_POSITION and toPosition.x == CONTAINER_POSITION
            and item.itemid == 8710 and self:getItemCount(8710) == 2 and self:getStorageValue(Storage.RookgaardTutorialIsland.cockroachLegsMsgStorage) ~= 1 then
        self:sendTextMessage(MESSAGE_INFO_DESCR, 'Well done, you have enough cockroach legs! You should head back to Santiago with them. Climb the ladder to the north to exit.')
        self:setStorageValue(Storage.RookgaardTutorialIsland.cockroachLegsMsgStorage, 1)
        self:setStorageValue(Storage.RookgaardTutorialIsland.SantiagoNpcGreetStorage, 6)
    end
   
    -- REWARD CHEST BOSS 11 Marzo 2016
    if toPosition.x == CONTAINER_POSITION then
        local containerId = toPosition.y - 64
        local container = self:getContainerById(containerId)       
        if not container then
            return true
        end

        -- Do not let the player insert items into either the Reward Container or the Reward Chest
        local itemId = container:getId()       
        if itemId == ITEM_REWARD_CONTAINER or itemId == ITEM_REWARD_CHEST then
            self:sendCancelMessage('Sorry, not possible.')
            return false
        end

        -- The player also shouldn't be able to insert items into the boss corpse       
        local tile = Tile(container:getPosition())
        for _, item in ipairs(tile:getItems()) do
            if item:getAttribute(ITEM_ATTRIBUTE_CORPSEOWNER) == 2^31 - 1 and item:getName() == container:getName() then
                self:sendCancelMessage('Sorry, not possible.')
                return false
            end
        end
    end

    -- Do not let the player move the boss corpse.
    if item:getAttribute(ITEM_ATTRIBUTE_CORPSEOWNER) == 2^31 - 1 then
        self:sendCancelMessage('Sorry, not possible.')
        return false
    end
   
    return true
end

function Player:onMoveCreature(creature, fromPosition, toPosition)
    return true
end

function Player:onTurn(direction)
    return true
end

function Player:onTradeRequest(target, item)
    if isInArray({1738, 1740, 1747, 1748, 1749, 8766}, item.itemid) and item.actionid > 0 or item.actionid == 5640 then
        self:sendCancelMessage('Sorry, not possible.')
        return false
    end
    return true
end

function Player:onTradeAccept(target, item, targetItem)
    return true
end

local soulCondition = Condition(CONDITION_SOUL, CONDITIONID_DEFAULT)
soulCondition:setTicks(4 * 60 * 1000)
soulCondition:setParameter(CONDITION_PARAM_SOULGAIN, 1)

local function useStamina(player)
    local staminaMinutes = player:getStamina()
    if staminaMinutes == 0 then
        return
    end

    local playerId = player.uid
    local currentTime = os.time()
    local staminaTable = Game.getStorageValue("stamina")
    local timePassed = currentTime - staminaTable[playerId]
    if timePassed <= 0 then
        return
    end

    if timePassed > 60 then
        if staminaMinutes > 2 then
            staminaMinutes = staminaMinutes - 2
        else
            staminaMinutes = 0
        end
        staminaTable[playerId] = currentTime + 120
    else
        staminaMinutes = staminaMinutes - 1
        staminaTable[playerId] = currentTime + 60
    end
    player:setStamina(staminaMinutes)
end

function Player:onGainExperience(source, exp, rawExp)
    if not source or source:isPlayer() then
        return exp
    end
   
    local thing = self:getStorageValue(80000)
    if thing > os.time() then
        exp = exp * 1.5
    end

    -- Soul regeneration
    local vocation = self:getVocation()
    if self:getSoul() < vocation:getMaxSoul() and exp >= self:getLevel() then
        soulCondition:setParameter(CONDITION_PARAM_SOULTICKS, vocation:getSoulGainTicks() * 1000)
        self:addCondition(soulCondition)
    end

    -- Apply experience stage multiplier
    exp = exp * Game.getExperienceStage(self:getLevel())

    -- Stamina modifier
    if configManager.getBoolean(configKeys.STAMINA_SYSTEM) then
        useStamina(self)

        local staminaMinutes = self:getStamina()
        if staminaMinutes > 2400 and self:isPremium() then
            exp = exp * 1.5
        elseif staminaMinutes <= 840 then
            exp = exp * 0.5
        end
    end

    return exp
end

function Player:onLoseExperience(exp)
    return exp
end

function Player:onGainSkillTries(skill, tries)
    if skill == SKILL_MAGLEVEL then
        return tries * configManager.getNumber(configKeys.RATE_MAGIC)
    end
    return tries * configManager.getNumber(configKeys.RATE_SKILL)
end

And my events.xml:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<events>

    <!-- Creature methods -->
    <event class="Creature" method="onChangeOutfit" enabled="0" />
    <event class="Creature" method="onAreaCombat" enabled="0" />
    <event class="Creature" method="onTargetCombat" enabled="1" />

    <!-- Party methods -->
    <event class="Party" method="onJoin" enabled="0" />
    <event class="Party" method="onLeave" enabled="0" />
    <event class="Party" method="onDisband" enabled="0" />

    <!-- Player methods -->
    <event class="Player" method="onBrowseField" enabled="0" />
    <event class="Player" method="onLook" enabled="1" />
    <event class="Player" method="onLookInBattleList" enabled="1" />
    <event class="Player" method="onLookInTrade" enabled="1" />
    <event class="Player" method="onLookInShop" enabled="0" />
    <event class="Player" method="onMoveItem" enabled="1" />
    <event class="Player" method="onMoveCreature" enabled="0" />
    <event class="Player" method="onTurn" enabled="0" />
    <event class="Player" method="onTradeRequest" enabled="1" />
    <event class="Player" method="onTradeAccept" enabled="0" />
    <event class="Player" method="onGainExperience" enabled="1" />
    <event class="Player" method="onLoseExperience" enabled="0" />
    <event class="Player" method="onGainSkillTries" enabled="1" />
</events>

Maybe i forget something in global.lua or compat.lua?
Thanks for help me!
 
Message: Unknown column 'secret' in 'field list'. This field is not on your schema.sql. Should I just add it? What's it used for? Thanks.
 
Message: Unknown column 'secret' in 'field list'. This field is not on your schema.sql. Should I just add it? What's it used for? Thanks.
it's for the token authentication, you can find the query you need to execute on migrations folder, 18.lua should contain it
 
This is the first time I try to compile because I really like the features you're adding to TFS but I'm quite noobish and I keep getting this error *probably something dumb but cant figure out*
Code:
Severity    Code    Description    Project    File    Line    Suppression State
Error    C1083    Cannot open include file: 'boost/asio.hpp': No such file or directory    theforgottenserver    c:\users\droessi\desktop\compile\tfs custom modifications v2\src\otpch.h    42
I installed Boost C++ libraries and ran both bat files as admin (I did move register_boost_env.bat and then ran it as admin)
I also included the additional directories
Please help :(
 
This is the first time I try to compile because I really like the features you're adding to TFS but I'm quite noobish and I keep getting this error *probably something dumb but cant figure out*
Code:
Severity    Code    Description    Project    File    Line    Suppression State
Error    C1083    Cannot open include file: 'boost/asio.hpp': No such file or directory    theforgottenserver    c:\users\droessi\desktop\compile\tfs custom modifications v2\src\otpch.h    42
I installed Boost C++ libraries and ran both bat files as admin (I did move register_boost_env.bat and then ran it as admin)
I also included the additional directories
Please help :(
did you move the register boost bat to the boost folder before executing it?
 
@Lundrial, i can post monster in here ?
98% off the monsters are done, but is missing loot and attack, if someone want to help
 
Back
Top