-
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,SIGHUPandSIGUSR1) - better handling of configmanager class
- better handling of item attribute types
- improved dispatcher performance
- improved OTBM loader performance
- improved loading
items.xmlperformance - improved getSpectators performance
- improved XTEA performance
- private RSA key is now being loaded from a PEM file
- scheduler ignores empty tasks now
- added
overrideattribute wherever applicable - adjusted code formatting
- adjusted construction of messages for dealt/received damage
- anonymous namespaces are now being used wherever applicable
- chaseMode uses
boolnow 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/setcode - improved
LightInfohandling - map search for types and effects
- monster loot now accepts count higher than
100 -
ProtocolGame::loginnow loads players by id instead of name - removed a lot of unused and unnecessary code
- removed
finalattribute fromfinalclass methods - removed unused parameter
manafrom monsters and NPCs - replaced
forward_listwithvectorin creature walking - replaced
protectedvisibility withprivateforfinalclasses -
sendInventoryItemsnow uses aforloop - singletons now use return by reference
- skill cache is no longer used as
powperformance 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
Partymethods - monsters drop loot in lua
- monsters walkback to spawn
- more getters for
ItemTypeclass - 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
/attrtalkaction 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
allowWalkthroughclassicAttackSpeedcleanProtectionZonesdefaultWorldLightdepotFreeLimitdepotPremiumLimitforceMonsterTypesOnLoadhouseDoorShowPricehouseOwnedByAccountluaItemDesconlyInvitedCanMoveHouseItemsremoveChargesFromPotionsremoveOnDespawnremoveWeaponAmmunitionremoveWeaponChargesserverSaveCleanMapserverSaveCloseserverSaveNotifyDurationserverSaveNotifyMessageserverSaveShutdownshowPlayerLogInConsolevipFreeLimitvipPremiumLimityellMinimumLevelyellAlwaysAllowPremium
AMMO_NONEAMMO_BOLTAMMO_ARROWAMMO_SPEARAMMO_THROWINGSTARAMMO_THROWINGKNIFEAMMO_STONEAMMO_SNOWBALL
CONDITION_PARAM_DRUNKENNESSCONDITION_PARAM_SPECIALSKILL_CRITICALHITCHANCECONDITION_PARAM_SPECIALSKILL_CRITICALHITAMOUNTCONDITION_PARAM_SPECIALSKILL_LIFELEECHCHANCECONDITION_PARAM_SPECIALSKILL_LIFELEECHAMOUNTCONDITION_PARAM_SPECIALSKILL_MANALEECHCHANCECONDITION_PARAM_SPECIALSKILL_MANALEECHAMOUNT
CONST_ME_EARLY_THUNDERCONST_ME_RAGIAZ_BONECAPSULECONST_ME_CRITICAL_DAMAGECONST_ME_PLUNGING_FISH
FIGHTMODE_ATTACKFIGHTMODE_BALANCEDFIGHTMODE_DEFENSE
ITEM_ATTRIBUTE_DECAYTOITEM_ATTRIBUTE_WRAPIDITEM_ATTRIBUTE_STOREITEMITEM_ATTRIBUTE_ATTACK_SPEEDITEM_ATTRIBUTE_CUSTOM
ITEM_GROUP_GROUNDITEM_GROUP_CONTAINERITEM_GROUP_WEAPONITEM_GROUP_AMMUNITIONITEM_GROUP_ARMORITEM_GROUP_CHARGESITEM_GROUP_TELEPORTITEM_GROUP_MAGICFIELDITEM_GROUP_WRITEABLEITEM_GROUP_KEYITEM_GROUP_SPLASHITEM_GROUP_FLUIDITEM_GROUP_DOORITEM_GROUP_DEPRECATED
ITEM_SHOPPING_BAGITEM_MAGICWALL_NOPVPITEM_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_ELECTRICPURPLETEXTCOLOR_PASTELRED
WIELDINFO_NONEWIELDINFO_LEVELWIELDINFO_MAGLVWIELDINFO_VOCREQWIELDINFO_PREMIUM
ZONE_PROTECTIONZONE_NOPVPZONE_PVPZONE_NOLOGOUTZONE_NORMAL
canwalkonenergycanwalkonfirecanwalkonpoisonchallengeableignoreSpawnBlockisBoss
imbuements related:
criticalhitchancecriticalhitamountlifeleechchancelifeleechamountmanaleechchancemanaleechamount
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:
ActionCreatureEventGlobalEventMonsterTypeMoveEventPartySpellTalkActionWeapon
- Added event callbacks. They're hooks for things located in
data/eventsfolder. 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 returnsfalseinstead 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,maxandstring 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
allowDistReadattribute to many signs and statues (items.xml) - Added more groups. To get full access now you need account type
6and group id6 - Added spell words to runes when looking at them
- Updated
forgotten.otbmto 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
!buyhousecommand - 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
isPremiumcheck 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.luabug 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
!onlineand 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
utorispells - 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
nilchecks tonotchecks - removed unnecessary
nilchecks - fixed typos and whitespaces
- replaced
isInArraywithtable.contains - renamed
combat:setConditiontocombat:addCondition - adjusted scripts to avoid using compat functions
- All commands are talkactions now. As
commands.xmlis 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_popinstructions toluascript.cpp - added a console warning when monster paralyze is trying to go above the limit
- added a console warning when
vocations.xmlfile has unrecognized XML attributes - added backwards compatibility for
<inside>tag in monster loot - added pushable flag to NPCs
-
config.luais now generated fromconfig.lua.distif the former can't be loaded -
creature:removeConditionnow supports userdata - direction checking methods now read
DIRECTION_NONEinstead ofDIRECTION_NORTHWESTwhen both positions are equal - enforced
utf-8encoding 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
onPrepareDeathevent 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
onTargetCombatincombat.cpp - fixed an issue with double
onEquipexecution. An extra parameterisCheckwas added. - fixed an issue with house doors not being unique in the database
- fixed an issue with
LuaJITbeing detected twice - fixed
combatBlockHitnot usingignoreResistancesflag - fixed bugs, freezes and crashes related to
/italkaction 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
100initems.xml - improved
:getPluralName - improved premium time handling
- monsters can no longer be set to have
healthNowhigher thanhealthMaxin their XML file - new limits to spawn time: min
10seconds, max1day - 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
-
doPlayerAddManaSpentanddoPlayerAddSkillTryno longer multiply the amount by skill rates - fixed
player:getClosestFreePositionbehaviour - fixed incorrect gold stacks detection in
player:removeMoney -
container:addItemno longer limitssubTypeto100 - fixed issues with
pushMovementincreature:teleportTo - fixed
Player:onMoveItemnot being called when using items from the ground - fixed
Player:onMoveItemnot being called when switching items in the inventory - new implementation of
onManaChange - new flags in target/tile combat:
blockedByArmor,blockedByShield,ignoreResistances -
player:addMount,player:hasMountandplayer:removeMountnow support mount name string -
Playerconstructor now allows GUID -
player:showTextDialognow acceptsItemuserdata - premium time is now updated on character login
- promoted vocations are no longer needed in
weapons.xml
- fixed a client crash when
creature:sayhas missingtype - fixed a client crash when displaying more than
7players on one tile - fixed a client crash when opening unnamed (item of type ...) containers
- fixed incorrect distance effect path when player gets teleported with
onPrepareDeathscript - 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
400now - default
townIdfor new characters is1now - 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 gravnot working on closed doors - fixed
allowfarusenot 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
lookDirectionwhen 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
1034406max level - improved
player:getDeathPenalty()precision - keys now use four digits to display the number (eg
0021instead 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