For the complete documentation index, see llms.txt. This page is also available as Markdown.

TFS 1.4 official release

In this section, we will cover the official release of The Forgotten Server, TFS 1.4 !

One of the major features from this release is Revscriptsys, which allows us to register scripts using Lua instead of XML. Another important feature is a custom RSA key loader, which will allow you to use the RSA private key from a PEM file you may generate, thereby granting more security to your server. Some of the other features are: a Docker image to easily set up TFS, storing town lists in database, POSIX signal handling...

Following these lines, you can find a changelog made of newly added features, issues that have been fixed, enhancements, and so on.

Changelog TFS 1.4

Features

  • Revscriptsys

  • Custom RSA key loader

  • Docker image

  • Storage of town lists in database

  • Improved POSIX signal handling (SIGINT, SIGTERM, SIGHUP and SIGUSR1 signals added)

  • Improved rule violation and bugs reporting system

Functionalities changed from sources to Lua

  • Commands

  • Loot drop mechanism

  • Actions.xml itemid increase/decrease function removed

  • Party experience share

  • House management

  • Levitate

Added

  • Container:

    • Container:getItems(recursive)

  • Creature:

    • Creature:setHealth(health)

    • Creature:setSkillLoss(skillLoss)

    • Creature:addSummon(monster)

    • Creature:removeSummon(monster)

    • Added Creature:getZone()

      • ZONE_PROTECTION

      • ZONE_NOPVP

      • ZONE_PVP

      • ZONE_NOLOGOUT

      • ZONE_NORMAL

    • Secondary functionality for Creature:move method:

      • Creature:move(tile[, flags = 0])

  • Enums:

    • CONST_ME_EARLY_THUNDER

    • CONST_ME_RAGIAZ_BONECAPSULE

    • CONST_ME_CRITICAL_DAMAGE

    • CONST_ME_PLUNGING_FISH

    • MESSAGE_GUILD

    • MESSAGE_PARTY_MANAGEMENT

    • MESSAGE_PARTY

  • Events:

    • Player:onReportRuleViolation(targetName, reportType, reportReason, comment, translation)

    • Player:onItemMoved(item, count, fromPosition, toPosition)

    • Party:onShareExperience(exp)

    • Monster:onDropLoot(corpse)

    • Creature:onHear(speaker, words, type)

  • Game:

    • Game.getClientVersion()

  • Group:

    • Group:hasFlag(flag)

  • House:

    • House:getItems()

    • House:getDoorIdByPosition(position)

    • House:canEditAccessList(listId, player)

    • House:kickPlayer(player, targetPlayer)

  • Item:

    • Item:getCustomAttribute(key)

    • Item:setCustomAttribute(key, value)

    • Item:removeCustomAttribute(key)

    • Item:isLoadedFromMap()

  • ItemType:

    • ItemType:isBlocking()

    • ItemType:isGroundTile()

    • ItemType:isMagicField()

    • ItemType:isUseable()

    • ItemType:isPickupable()

    • ItemType:getAmmoType()

    • ItemType:getCorpseType()

  • NPC system:

    • NPCs now deduct from bank account any money missing from inventory

    • Lua VoiceModule

    • Functions related to banker NPC:

      • getMoneyWeight(money)

      • getMoneyCount(string)

      • isValidMoney(money)

      • isNumber(str)

      • getPlayerDatabaseInfo(name_or_guid)

      • Player.depositMoney(self, amount)

      • Player.withdrawMoney(self, amount)

      • Player.canCarryMoney(self, amount)

      • Player.transferMoneyTo(self, target, amount)

  • Party:

    • Party(player)

  • Player:

    • Player:getSpecialSkill(specialSkillType)

    • Player:addSpecialSkill(specialSkillType, value)

      • SPECIALSKILL_CRITICALHITCHANCE

      • SPECIALSKILL_CRITICALHITAMOUNT

      • SPECIALSKILL_LIFELEECHCHANCE SPECIALSKILL_LIFELEECHAMOUNT

      • SPECIALSKILL_MANALEECHCHANCE

      • SPECIALSKILL_MANALEECHAMOUNT

    • Added special skill support for conditions:

      • CONDITION_PARAM_SPECIALSKILL_CRITICALHITCHANCE

      • CONDITION_PARAM_SPECIALSKILL_CRITICALHITAMOUNT

      • CONDITION_PARAM_SPECIALSKILL_LIFELEECHCHANCE

      • CONDITION_PARAM_SPECIALSKILL_LIFELEECHAMOUNT

      • CONDITION_PARAM_SPECIALSKILL_MANALEECHCHANCE

      • CONDITION_PARAM_SPECIALSKILL_MANALEECHAMOUNT

    • Player:hasChaseMode()

    • Player:hasSecureMode()

    • Player:getFightMode()

      • FIGHTMODE_ATTACK

      • FIGHTMODE_BALANCED

      • FIGHTMODE_DEFENSE

    • Player:sendHouseWindow(house, listId)

    • Player:setEditHouse(house, listId)

    • Additional optional parameter for Player:setGhostMode method:

      • Player:setGhostMode(enabled[, showEffect=true])

    • Secondary functionality for Player:sendTextMessage method:

      • Player:sendTextMessage(type, text, channelId)

  • Tile:

    • Tile:addItem(itemId[, count/subType = 1[, flags = 0]])

    • Tile:addItemEx(item[, flags = 0])

  • Weapons:

    • Added death and holy elemental damage

  • Other:

    • Action scripts like taming and skining

    • New monsters

    • Charges removal option in config.lua

    • Achievements system

    • isBoss flag

    • Store inbox

    • Shopping bag module

    • Server save configurations in config.lua

Fixed

  • MonsterType:getLoot() crash

  • MonsterType:isSummonable() returned wrong flag

  • Combat:execute() crash

  • Limited container:addItem subtype to 100

  • Waiting list bug

  • MoveEvent:slot(slot)

  • Crash related to map cleaning

  • Exception when map file does not exist is now handled

  • getMinMaxValues function returned a wrong attackValue when using weapons with ammunition

Changed

  • onManaChange's parameters match onHealthChange

  • Player constructor accepts GUID parameter

  • Player:getDepotChest sets last depotId for saving purposes

  • Player:showTextDialog(item, text) accepts item userdata

  • Changed Player:addMount to accept mount name along with id

  • Renamed Combat:setCondition to Combat:addCondition

  • Many updates/fixes/additions in items.xml

  • Cleaner and faster XTEA implementation

  • Rebase of NetworkMessage methods

  • Usage of STL algorithms instead of loop in vocations.cpp

  • Optimizations on getSpectators

Last updated