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 modified 4mo ago