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.
- 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
- Commands
- Loot drop mechanism
- Actions.xml itemid increase/decrease function removed
- Party experience share
- House management
- Levitate
- 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
- 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