-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Changelog 1.4
Evil Puncker edited this page May 28, 2023
·
1 revision
- added support for POSIX signals (new:
SIGINT
,SIGTERM
,SIGHUP
andSIGUSR1
) - better handling of configmanager class
- better handling of item attribute types
- improved dispatcher performance
- improved OTBM loader performance
- improved loading
items.xml
performance - improved getSpectators performance
- improved XTEA performance
- private RSA key is now being loaded from a PEM file
- scheduler ignores empty tasks now
- added
override
attribute wherever applicable - adjusted code formatting
- adjusted construction of messages for dealt/received damage
- anonymous namespaces are now being used wherever applicable
- chaseMode uses
bool
now instead of enumeration - corrected many typos in strings and variable names
- events (actions, talkactions, movements, etc.) use smart pointers now
- guild rank now uses
shared_ptr
- improved blessings
get
/set
code - improved
LightInfo
handling - map search for types and effects
- monster loot now accepts count higher than
100
-
ProtocolGame::login
now loads players by id instead of name - removed a lot of unused and unnecessary code
- removed
final
attribute fromfinal
class methods - removed unused parameter
mana
from monsters and NPCs - replaced
forward_list
withvector
in creature walking - replaced
protected
visibility withprivate
forfinal
classes -
sendInventoryItems
now uses afor
loop - singletons now use return by reference
- skill cache is no longer used as
pow
performance is fast enough - standardized class and variable names
- standardized client viewport
- STL algorithms are now being used for vocation search by id
- now compiling with C++17 by default
- added appveyor
- added docker
- improvements to cmake and visual studio project files
- moved from tfssdk to vcpkg
- fixed various compiling issues across all supported platforms
- new icon
- account storage key/value
- buy with backpacks
- classic attackspeed
- configurable depot and vip limits
- custom item attributes
- customizable world light
- event callbacks
- hotkey equip
- improved bank system
- lua item description (disabled by defeault)
- lua
Party
methods - monsters drop loot in lua
- monsters walkback to spawn
- more getters for
ItemType
class - NPC trade using bank account
- NPC voice module (npc saying random lines, see #2932 for details)
- player direction is now stored in the database
- reintroduced
/attr
talkaction known from0.4
- separated group flags in
groups.xml
(no longer a single number) - spawns can now be set to create random monsters (see #3605 for details)
- special skills (leech and crit)
- store inbox
- towns are now cached in the database
- vocation specific kick times in case of lost connection
allowWalkthrough
classicAttackSpeed
cleanProtectionZones
defaultWorldLight
depotFreeLimit
depotPremiumLimit
forceMonsterTypesOnLoad
houseDoorShowPrice
houseOwnedByAccount
luaItemDesc
onlyInvitedCanMoveHouseItems
removeChargesFromPotions
removeOnDespawn
removeWeaponAmmunition
removeWeaponCharges
serverSaveCleanMap
serverSaveClose
serverSaveNotifyDuration
serverSaveNotifyMessage
serverSaveShutdown
showPlayerLogInConsole
vipFreeLimit
vipPremiumLimit
yellMinimumLevel
yellAlwaysAllowPremium
AMMO_NONE
AMMO_BOLT
AMMO_ARROW
AMMO_SPEAR
AMMO_THROWINGSTAR
AMMO_THROWINGKNIFE
AMMO_STONE
AMMO_SNOWBALL
CONDITION_PARAM_DRUNKENNESS
CONDITION_PARAM_SPECIALSKILL_CRITICALHITCHANCE
CONDITION_PARAM_SPECIALSKILL_CRITICALHITAMOUNT
CONDITION_PARAM_SPECIALSKILL_LIFELEECHCHANCE
CONDITION_PARAM_SPECIALSKILL_LIFELEECHAMOUNT
CONDITION_PARAM_SPECIALSKILL_MANALEECHCHANCE
CONDITION_PARAM_SPECIALSKILL_MANALEECHAMOUNT
CONST_ME_EARLY_THUNDER
CONST_ME_RAGIAZ_BONECAPSULE
CONST_ME_CRITICAL_DAMAGE
CONST_ME_PLUNGING_FISH
FIGHTMODE_ATTACK
FIGHTMODE_BALANCED
FIGHTMODE_DEFENSE
ITEM_ATTRIBUTE_DECAYTO
ITEM_ATTRIBUTE_WRAPID
ITEM_ATTRIBUTE_STOREITEM
ITEM_ATTRIBUTE_ATTACK_SPEED
ITEM_ATTRIBUTE_CUSTOM
ITEM_GROUP_GROUND
ITEM_GROUP_CONTAINER
ITEM_GROUP_WEAPON
ITEM_GROUP_AMMUNITION
ITEM_GROUP_ARMOR
ITEM_GROUP_CHARGES
ITEM_GROUP_TELEPORT
ITEM_GROUP_MAGICFIELD
ITEM_GROUP_WRITEABLE
ITEM_GROUP_KEY
ITEM_GROUP_SPLASH
ITEM_GROUP_FLUID
ITEM_GROUP_DOOR
ITEM_GROUP_DEPRECATED
ITEM_SHOPPING_BAG
ITEM_MAGICWALL_NOPVP
ITEM_WILDGROWTH_NOPVP
-
MESSAGE_GUILD
- White message in channel (+ channelId) -
MESSAGE_PARTY_MANAGEMENT
- White message in channel (+ channelId) -
MESSAGE_PARTY
- White message in channel (+ channelId)
TEXTCOLOR_ELECTRICPURPLE
TEXTCOLOR_PASTELRED
WIELDINFO_NONE
WIELDINFO_LEVEL
WIELDINFO_MAGLV
WIELDINFO_VOCREQ
WIELDINFO_PREMIUM
ZONE_PROTECTION
ZONE_NOPVP
ZONE_PVP
ZONE_NOLOGOUT
ZONE_NORMAL
canwalkonenergy
canwalkonfire
canwalkonpoison
challengeable
ignoreSpawnBlock
isBoss
imbuements related:
criticalhitchance
criticalhitamount
lifeleechchance
lifeleechamount
manaleechchance
manaleechamount
other:
-
forceserialize
/forcesave
- saves unmoveable items like beds and carpets when put in house -
storeitem
- allows putting the item in store inbox -
initdamage
- damage dealt when stepping on field -
attackspeed
- attack speed -
elementholy
- holy resistance -
elementdeath
- death resistance
-
ignoreendvalue
- boolean for mission field. Enabling it will keep the mission displayed when mission storage is higher than endvalue.
-
allowPvp
- (boolean) some vocations can have pvp disabled now -
noPongKickTime
- (unsigned int) amount of seconds to kick the player in case he loses the connection
A new way to create scripts has been implemented. It allows the developers to create mods they can drag and drop to data/scripts
. Example mods can be found in the same folder. Every file from that folder will load automatically. To disable loading a certain file, add a #
symbol at the beginning of file.
Supported constructors:
Action
CreatureEvent
GlobalEvent
MonsterType
MoveEvent
Party
Spell
TalkAction
Weapon
- Added event callbacks. They're hooks for things located in
data/events
folder. Examples can be found indata/scripts/eventcallbacks
.
Creature:onHear(speaker, words, type)
Monster:onDropLoot(corpse)
Monster:onSpawn(position, startup, artificial)
Player:onItemMoved(item, count, fromPosition, toPosition, fromCylinder, toCylinder)
Player:onTradeCompleted(target, item, targetItem, isSuccess)
Player:onWrapItem(item, position)
-
isNumber(str)
- same astonumber(str)
but returnsfalse
instead ofnil
isValidMoney(money)
getLootRandom()
getMoneyCount(string)
getMoneyWeight(money)
getSubTypeName(subType)
-
logCommand(player, words, param)
- logs talkaction to a file setWorldLight(level, color)
combat:getPositions(creature, variant)
combat:getTargets(creature, variant)
combat:clearConditions()
combat:getParameter(key)
condition:getParameter(key)
container:createLootItem(item)
container:getItems(recursive)
creature:isImmune()
-
creature:move(direction)
- moves creature to selected direction -
creature:hasCondition(conditionType[, subId = 0])
- checks if creature has specified condition creature:isContainer()
creature:isTeleport()
creature:setHealth(health)
creature:canAccessPz()
creature:isMovementBlocked()
creature:setMovementBlocked(state)
-
Game.getClientVersion()
- returns a table with fieldsmin
,max
andstring
Game.getMonsterTypes()
Game.getItemAttributeByName(name)
Game.getAccountStorageValue(accountId, key)
Game.setAccountStorageValue(accountId, key, value)
Game.saveAccountStorageValues()
group:hasFlag(flag)
house:getItems()
house:save()
house:getDoorIdByPosition(position)
house:canEditAccessList(listId, player)
house:kickPlayer(player, targetPlayer)
item:isLoadedFromMap()
item:isMonster()
item:isNpc()
item:isStoreItem()
item:setStoreItem(bool storeItem)
itemType:isStoreItem()
item:getCustomAttribute(key)
item:setCustomAttribute(key, value)
item:removeCustomAttribute(key)
item:getSpecialDescription()
itemType:isBlocking()
itemType:isGroundTile()
itemType:isMagicField()
itemType:isUseable()
itemType:isPickupable()
itemType:getAmmoType()
itemType:getCorpseType()
itemType:getGroup()
itemType:getAbilities()
itemType:hasShowAttributes()
itemType:hasShowCount()
itemType:hasShowCharges()
itemType:hasShowDuration()
itemType:hasAllowDistRead()
itemType:getWieldInfo()
itemType:getDuration()
itemType:getLevelDoor()
itemType:getVocationString()
itemType:getMinReqLevel()
itemType:getMinReqMagicLevel()
monster:rename(name[, nameDescription])
networkMessage:seek(position)
networkMessage:tell()
networkMessage:len()
-
Outfit(looktype)
- meant to compareoutfit1 == outfit2
player:hasChaseMode()
player:hasSecureMode()
player:getFightMode()
player:hasFlag(flag)
player:canWearOutfit(looktype)
player:getZone()
player:getSpecialSkill(specialSkillType)
player:addSpecialSkill(specialSkillType, value)
player:transferMoneyTo(target, amount)
player:withdrawMoney(amount)
player:depositMoney(amount)
player:getPremiumEndsAt()
player:setPremiumEndsAt(timestamp)
player:setPremiumTime(seconds)
player:addPremiumTime(seconds)
player:removePremiumTime(seconds)
player:getPremiumTime()
player:addLevel(amount, round)
player:addMagicLevel(value)
player:addSkill(skillId, value, round)
player:getWeaponType()
player:sendHouseWindow(house, listId)
player:setEditHouse(house, listId)
player:removeSkillTries(skillType, tries[, notify = true])
player:removeManaSpent(amount[, notify = true])
position:isWalkable(condition)
position:isInRange(fromPos, toPos)
spell:runeLevel(level)
spell:runeMagicLevel(magLevel)
-
string.splitTrimmed(string, separator)
- works as a combination ofstring.split(str, sep)
andstring.trim(str)
, can also be called astext:splitTrimmed(sep)
-
table.contains(table, value)
- same asisInArray(t, v)
tile:isWalkable(condition)
tile:addItem(itemId, count)
tile:addItemEx(item[, flags = 0])
tile:remove()
vocation:allowsPvp()
- Added
allowDistRead
attribute to many signs and statues (items.xml
) - Added more groups. To get full access now you need account type
6
and group id6
- Added spell words to runes when looking at them
- Updated
forgotten.otbm
to version10.98
- Updated monsters and
items.xml
- added achievements system
- added enchanting system
- updated taming system
- new weapons and equipment statistics
- house carpets
- ferumbras items
- gold converter
- scroll of ascension
- costume bags
- premium scroll
- secret service tool gears
- blessing charms
- lootboxes (christmas bundles, surprise bags, gnomish package, etc)
- skinning (obsidian knife, blessed wooden stake)
- rust remover
- juice squeezer
- afflicted outfit related items
- large seashell
- wall mirror
- snow heap
- dolls
- sweetheart ring
- spider egg
- fire bug
- water pipe
- music instruments
- lottery ticket
- clay lump
- 8.1 april fools items
- sugar oat
- rum distilling
- goldfish bowl
- white deer death scripts
- missing food ids
- daily crate loot
- muck remover
- saw (for wooden ties)
- watering flower pots
- swamp digging
- hive gate teleporting
- gnomish vouchers
- items displaying blessings
- claw of the noxious spawn
- roasting meat on campfire
- ice flower harvesting
- insectoid cell
- banker npc
- juicy roots harvesting
- painted gourd rattle
- perppermoon bells
- ice fishing
- beds (added "this bed cannot be used message")
- added a message to citizen teleport
- added level and premium config for
!buyhouse
command - added missing astro clock, sundial and very noble looking watch to the watch script
- added missing rope spots (up to
10.98
) - added more swimmable tiles
- added new potions up to
10.98
- added
isPremium
check to ship captain NPC - code improvements for
/looktype
- fixed console warnings when the player is misusing rope
- fixed post startup rng by calling
math.randomseed(os.time())
as early as possible - fixed
promotion.lua
bug that made players with no vocation promoted - fixed wrong fluids behaviour when moving between fluid containers
- improved ip ban system
- improved the code behind curse condition
- improved
!online
and fixed ghost mode handling - moved windows and doors to revscripts
- NPC system now warns when a NPC sells something for lower price than he buys
- pick now works with shiny stone
- reworked
utori
spells - shortened and improved party spells code
- spellbooks now show params if spells have one
- updated door locking mechanism
- updated healing/mana color and messages
- updated message types for quests and doors
- changed
nil
checks tonot
checks - removed unnecessary
nil
checks - fixed typos and whitespaces
- replaced
isInArray
withtable.contains
- renamed
combat:setCondition
tocombat:addCondition
- adjusted scripts to avoid using compat functions
- All commands are talkactions now. As
commands.xml
is no longer needed, it got removed. /reload
/raid
!sellhouse
- find person (
exiva
) - house access management spells
- creature illusion (
utevo res ina
) - summon creature (
utevo res
) - levitate (
exani hur
) - chameleon rune (
adevo ina
) - convince creature rune (
adeta sio
) - runemaking
doSet...Outfit
-
table.contains
(formerly known asisInArray
) - bug reporting
- rule violation reporting
- transform
- decay
- party shared xp formula
- monster loot dropping
- experience stages
- item descriptions (needs enabling in
config.lua
)
- actions can now be grouped with
;
separator - added a few missing
lua_pop
instructions toluascript.cpp
- added a console warning when monster paralyze is trying to go above the limit
- added a console warning when
vocations.xml
file has unrecognized XML attributes - added backwards compatibility for
<inside>
tag in monster loot - added pushable flag to NPCs
-
config.lua
is now generated fromconfig.lua.dist
if the former can't be loaded -
creature:removeCondition
now supports userdata - direction checking methods now read
DIRECTION_NONE
instead ofDIRECTION_NORTHWEST
when both positions are equal - enforced
utf-8
encoding in the database - fixed a bug with items not being removed in
Game::internalRemoveItem
- fixed a crash caused by calling
addEvent(function() end)
- fixed a crash caused by closing the server on Windows
- fixed a crash caused by
creature:setMaster
- fixed a crash caused by inability to find map specified in
config.lua
- fixed a crash caused by registering same creaturescript twice on a single creature
- fixed a crash caused by relogging after putting an item on depot (Linux)
- fixed a crash caused by targeting already removed creature in rare situations (see #2582 for details)
- fixed a crash in token time parsing
- fixed a crash on Windows when using 2FA
- fixed a crash possible to happen during RSA decryption
- fixed a crash related to monsters with
onPrepareDeath
event dying from a condition - fixed a crash related to map cleaning
- fixed a crash when the spectator can't see the position in
removeTileCreature
- fixed a crash with
combat:execute(combat, variant)
- fixed a login error caused by enabling
freepremium
- fixed a loop in
player:getInstantSpells()
- fixed a missing call to
onTargetCombat
incombat.cpp
- fixed an issue with double
onEquip
execution. An extra parameterisCheck
was added. - fixed an issue with house doors not being unique in the database
- fixed an issue with
LuaJIT
being detected twice - fixed
combatBlockHit
not usingignoreResistances
flag - fixed bugs, freezes and crashes related to
/i
talkaction andGame.createItem
- fixed data race in scheduler
- fixed handling creatures that fall into interlocked teleports
- fixed memory leaks in talkactions and NPC system
- fixed monsters with conditions not becoming idle
- fixed multiple crashes, bugs and memory leaks caused by
/reload
- fixed multiple crashes caused by passing nil to some functions (see #3562 for details)
- fixed waitlist getting stuck
- fluids now use ids under
100
initems.xml
- improved
:getPluralName
- improved premium time handling
- monsters can no longer be set to have
healthNow
higher thanhealthMax
in their XML file - new limits to spawn time: min
10
seconds, max1
day - nonpvp walls and growths now disappear when stepped on
- NPCs are now in idle state when no players are nearby
- removed unnecessary shoplist update in NPC system
-
doPlayerAddManaSpent
anddoPlayerAddSkillTry
no longer multiply the amount by skill rates - fixed
player:getClosestFreePosition
behaviour - fixed incorrect gold stacks detection in
player:removeMoney
-
container:addItem
no longer limitssubType
to100
- fixed issues with
pushMovement
increature:teleportTo
- fixed
Player:onMoveItem
not being called when using items from the ground - fixed
Player:onMoveItem
not being called when switching items in the inventory - new implementation of
onManaChange
- new flags in target/tile combat:
blockedByArmor
,blockedByShield
,ignoreResistances
-
player:addMount
,player:hasMount
andplayer:removeMount
now support mount name string -
Player
constructor now allows GUID -
player:showTextDialog
now acceptsItem
userdata - premium time is now updated on character login
- promoted vocations are no longer needed in
weapons.xml
- fixed a client crash when
creature:say
has missingtype
- fixed a client crash when displaying more than
7
players on one tile - fixed a client crash when opening unnamed (item of type ...) containers
- fixed incorrect distance effect path when player gets teleported with
onPrepareDeath
script - fixed issues with disabled action bars in some clients
- fixed light sources not working in arrow slot
- fixed multiple client crashes on "set outfit" window requests
- premium status now displays correctly in character list
- fixed market not recognizing items from cancelled offers
- fixed mount issues with GM outfit (see #2028 for details)
- fixed trade window being stuck in some situations
- added black skull limitations
- added stairhop exhaustion for spells
- adjusted player corpse descriptions
- blood splashes caused by physical damage no longer spill in PZ tiles
- bonus magic level is no longer counted for % magic level buff condition
- browse field no longer shows items marked with special
uniqueId
- challenged creatures no longer run away on low health
- changed wrap/unwrap to be for house owners only
- corrected inaccurate sight lines for throwing items and attacks
- corrected intervals for bleeding and poison
- default cap for new characters is
400
now - default
townId
for new characters is1
now - fixed a bug that caused players to stay on trainers when they exit the client with targeted creature
- fixed a bug with wall runes not working diagonally
- fixed a bug with elemental damage reduction not working in some situations
- fixed a pick being able to make holes anywhere
- fixed
aleta grav
not working on closed doors - fixed
allowfaruse
not working - fixed an overflow in
skullTicks
- fixed blood rage spell behaviour
- fixed bypassing disabled browse field with arrow up icon
- fixed conditions not being applied when drinking fluids
- fixed count message for hotkey actions
- fixed decay not working in some scenarios
- fixed direction not updating when changing floor using parcels trick
- fixed disappearing depot items when player never opened his depot yet
- fixed disappearing items after trade bug
- fixed inability to cast spells in front of a wall
- fixed inability to cast spells when muted
- fixed inability to talk in NPC channel when muted
- fixed inability to switch floors with stacked parcels in some situations
- fixed inaccurate player defense formula
- fixed inaccurate viplist behaviour
- fixed incorrect behaviour of pyramid corners
- fixed invisibility interaction with ghost mode
- fixed issues related to buying fluids through NPC trade
- fixed missing attributes display on bows crossbows
- fixed monster
lookDirection
when facing the target diagonally - fixed monsters interaction with fields
- fixed pagination in sendAddContainerItem
- fixed potential yellow skull bug (see #2072)
- fixed problems with opening containers on a tile with many of them
- fixed problems with auto stacking system
- fixed reading player skill values when equipped with weapons with ammo
- fixed shared experience triggering and formula bugs
- fixed skills not going up when being exactly at zero tries of starting level
- fixed stacking items with modified attributes
- fixed stored vocation regeneration not updating
- fixed traps not dealing damage
- fixed unintentionally reduced PVP healing
- fixed "use" option not working in "browse field" after an item was moved
- fluid containers in loot are now empty by default instead of having water
- heal friend (
exura sio
) has proper range now - house access lists can now read guild ranks
- improved two handed weapons equipping mechanic
- improved experience formula - now allows
1034406
max level - improved
player:getDeathPenalty()
precision - keys now use four digits to display the number (eg
0021
instead of just21
) - magic fields are no longer impossible to replace
- monster aggro no longer gets triggered through ground floor
- monsters killed by other monsters now drop loot properly
- monsters no longer hit you instantly when you enter and leave pz fast
- monsters no longer paralyze themselves
- mute condition now saves on logout
- players can no longer invite themselves to a party
- players with low level pvp protection can now be walked through
- poison is no longer applied on missed hits
- removed the ability to message to yourself
- removed the ability to buy items from yourself at the market
- removed delay on monster death
- removed duplicate rent charge on
!buyhouse
- store outfits and mounts are no longer premium only
- summons inherit canPushItems flag (see #3462 for details)
- updated afk warning message
- updated cancel messages
- using items no longer cancels autowalk
- war players no longer have green skull
- added token validation when connecting to the gameworld
- dropped support for regular expressions in house access lists