SlayingWorld
Active Member
Follow installation perfectly. I went ahead and used the newest TFS build and did everything manually one step at a time using the comparison tool from github. No issues on my end everything is working flawlesslyBump

Follow installation perfectly. I went ahead and used the newest TFS build and did everything manually one step at a time using the comparison tool from github. No issues on my end everything is working flawlesslyBump
Follow installation perfectly. I went ahead and used the newest TFS build and did everything manually one step at a time using the comparison tool from github. No issues on my end everything is working flawlessly![]()
data/creaturescripts/scripts/attributes.lua:onHealthChange
data/creaturescripts/scripts/attributes.lua:585: attempt to index a nil value stack traceback:
[c] in function '_index'
data/creaturescripts/scripts/attributes.lua:585: in function 'stat change'
data/creaturescripts/scripts/attributes.lua:683: in function <data/creaturescripts/scripts/attributes.lua:680>
[C]: at 0x013f93e040
if resistances[primaryType].Custom ~= 0 then
primaryDamage, primaryType, secondaryDamage, secondaryType, origin = statChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin) -- This is for feeding both onHealthChange and onManaChange through the same damage/buff formula
the script was working fine until, so recently i was checking pvp and i realized paladins are doing 0 damage to players on the oppsite they are healing them, so i thought it's a problem with spells, and i rechecked everything is fine, then i look at console everytime paladin attacks with normal weapon with spell on another player this error comes:
any help please, thank you! using TFS 1.3x downgraded by neeko 8.6LUA:data/creaturescripts/scripts/attributes.lua:onHealthChange data/creaturescripts/scripts/attributes.lua:585: attempt to index a nil value stack traceback: [c] in function '_index' data/creaturescripts/scripts/attributes.lua:585: in function 'stat change' data/creaturescripts/scripts/attributes.lua:683: in function <data/creaturescripts/scripts/attributes.lua:680> [C]: at 0x013f93e040
couldn't post attributes because of word limit
Line 585 :Line 683:LUA:if resistances[primaryType].Custom ~= 0 then
Code:primaryDamage, primaryType, secondaryDamage, secondaryType, origin = statChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin) -- This is for feeding both onHealthChange and onManaChange through the same damage/buff formula
--if primaryType ~= 0 then
if resistances[primaryType].Custom ~= 0 then
local resistancePercent = (100 - resistances[primaryType].Custom)
primaryDamage = (resistancePercent / 100) * primaryDamage
end
--end
if resistances[primaryType] then
if resistances[primaryType].Custom ~= 0 then
local resistancePercent = (100 - resistances[primaryType].Custom)
primaryDamage = (resistancePercent / 100) * primaryDamage
end
end
works perfectly now!,replace:
LUA:--if primaryType ~= 0 then if resistances[primaryType].Custom ~= 0 then local resistancePercent = (100 - resistances[primaryType].Custom) primaryDamage = (resistancePercent / 100) * primaryDamage end --end
with:
LUA:if resistances[primaryType] then if resistances[primaryType].Custom ~= 0 then local resistancePercent = (100 - resistances[primaryType].Custom) primaryDamage = (resistancePercent / 100) * primaryDamage end end
I'll fix this in main post.
Lua Script Error: [Event Interface]
data/events/scripts/creature.lua
data/lib/core/attributes.lua:894: attempt to index local 'it_u' (a nil value)
stack traceback:
[C]: in function '__index'
data/lib/core/attributes.lua:894: in function 'rollRarity'
data/events/scripts/creature.lua:48: in main chunk
[Warning - Events::load] Can not load script: creature.lua
>> Loading monsters
Lua Script Error: [TalkAction Interface]
data/talkactions/scripts/roll.lua:onSay
data/lib/core/tables.lua:17: bad argument #1 to 'pairs' (table expected, got number)
stack traceback:
[C]: at 0x7ff71f543700
[C]: in function 'pairs'
data/lib/core/tables.lua:17: in function 'contains'
data/lib/core/attributes.lua:987: in function 'rollRarity'
data/talkactions/scripts/roll.lua:30: in function <data/talkactions/scripts/roll.lua:1>
hello @Leo32 wanted to know why the status of mana, life, rextra and critical damage is not showing. i'm using otbr.
View attachment 47068
CONDITION_PARAM_SPECIALSKILL_CRITICALHITAMOUNT
CONDITION_PARAM_SPECIALSKILL_CRITICALHITCHANCE
CONDITION_PARAM_SPECIALSKILL_LIFELEECHCHANCE
CONDITION_PARAM_SPECIALSKILL_LIFELEECHAMOUNT
CONDITION_PARAM_SPECIALSKILL_MANALEECHCHANCE
CONDITION_PARAM_SPECIALSKILL_MANALEECHAMOUNT
CONDITION_PARAM_SKILL_CRITICAL_HIT_DAMAGE
CONDITION_PARAM_SKILL_CRITICAL_HIT_CHANCE
CONDITION_PARAM_SKILL_LIFE_LEECH_CHANCE
CONDITION_PARAM_SKILL_LIFE_LEECH_AMOUNT
CONDITION_PARAM_SKILL_MANA_LEECH_CHANCE
CONDITION_PARAM_SKILL_MANA_LEECH_AMOUNT
Lua Script Error: [Event Interface]
data/events/scripts/monster.lua
data/lib/core/attributes.lua:894: attempt to index local 'it_u' (a nil value)
stack traceback:
[C]: in function '__index'
data/lib/core/attributes.lua:894: in function 'rollRarity'
data/events/scripts/monster.lua:7: in main chunk
[Warning - Events::load] Can not load script: monster.lua
Multishot dont work with Quiver system do you can help?< 10.94
The first post is for versions earlier than 10.94, before crit and mana/life leech was added to the game.
Someone should try it on an 8.6 server
10.94+
If you are using the latest TFS release, refer to the post here.
What is this?A newer version of this:
A variant of this, this and this mod.![]()
Rare, Epic and Legendary Loot Rolls
Hey Guys, This is something I've been working on for a while, taking the time to get it right and get all rolls and damages to apply properly. Thought I'd give you a look, see what y'all think. When a monster drops loot, there is a chance that it rolls Rare, Epic or Legendary: Basic rolls...otland.net
It gives items a chance to roll rare, epic or legendary when it drops from a monster:
![]()
With the following possible attributes:
(For config and if you want to understand the code, start at the stats table in lib/core/attributes.lua)
LUA:[1] = { -- Attack [2] = { -- Defense [3] = { -- Extra Defense [4] = { -- Armor [5] = { -- Accuracy [6] = { -- Range [7] = { -- Equipment with < 50 charges [8] = { -- Equipment with >= 50 charges [9] = { -- Time [10] = { -- Crit Chance [11] = { -- Crit Amount (Currently Unused) [12] = { -- Fire Damage [13] = { -- Ice Damage [14] = { -- Energy Damage [15] = { -- Fire Resistance [16] = { -- Ice Resistance [17] = { -- Energy Resistance [18] = { -- Earth Resistance [19] = { -- Physical Resistance [20] = { -- Death Resistance [21] = { -- Spell Damage [22] = { -- Multi Shot [23] = { -- Stun Chance [24] = { -- Mana Shield [25] = { -- Sword Skill [26] = { -- Skill Axe [27] = { -- Skill Club [28] = { -- Skill Melee [29] = { -- Skill Distance [30] = { -- Skill Shielding [31] = { -- Magic Level [32] = { -- Max Health i.e +100 [33] = { -- Max Mana i.e +100 [34] = { -- Max Health % i.e +10% [35] = { -- Max Mana % i.e +10% [36] = { -- Life Leech Chance (Currently Unused) [37] = { -- Life Leech Amount [38] = { -- Mana Leech Chance (Currently Unused) [39] = { -- Mana Leech Amount
![]()
Some of these are completely custom attributes, like elemental damage:
![]()
This requires the following updates/features:
1) Loot drop handled via Lua
2) Add the new health/mana gain coloured text messages![]()
Moved drop loot mechanism to Lua by joseluis2g · Pull Request #2569 · otland/forgottenserver
Moved drop loot mechanist to Lua. Added a new class to events called Monster and a new method called onDropLoot. Added party to Lua core. Added a new function to party class called broadcastPartyLo...github.com
3) onInventoryUpdate()
4) onSpawn()![]()
Player:onInventoryUpdate(item, slot, equip) · infernumx/forgottenserver@960a3f5
A free and open-source MMORPG server emulator written in C++ - Player:onInventoryUpdate(item, slot, equip) · infernumx/forgottenserver@960a3f5github.com
![]()
Adding Monster:onSpawn(position, startup, artificial) by Leo32onGIT · Pull Request #2822 · otland/forgottenserver
This allows you to manipulate monsters as they spawn. Use example: to register onHealthChange and onManaChange events on all monsters. Thread from author @infernumx: https://otland.net/threads/tfs-...github.com
Installation:rollAttributes.zip
paste in /data
lib/core/core.lua
add below:
LUA:-- Rolls & Custom Item Attributes dofile('data/lib/core/attributes.lua')
talkactions.xml
add below:
XML:<talkaction words="/roll" separator=" " script="roll.lua" />
creaturescripts.xml
add below:
XML:<!-- Roll & Attribute Damage --> <event type="healthchange" name="rollHealth" script="attributes.lua"/> <event type="manachange" name="rollMana" script="attributes.lua"/>
creaturescripts/scripts/login.lua
add below:
LUA:-- Activate Custom Item Attributes for i = 1,10 do -- CONST_SLOT_FIRST,CONST_SLOT_LAST local item = player:getSlotItem(i) if item then itemAttributes(player, item, i, true) end end -- If player logged with more 'current health' than their db 'max health' due to an item attribute local query = db.storeQuery("SELECT `health`,`mana` FROM players where `id`="..player:getGuid()) if query then local health = tonumber(result.getDataString(query, 'health')) local mana = tonumber(result.getDataString(query, 'mana')) local playerHealth = player:getHealth() local playerMana = player:getMana() if playerHealth < health then player:addHealth(health - playerHealth) end if playerMana < mana then player:addMana(mana - playerMana) end result.free(query) end
add below:
LUA:player:registerEvent("rollHealth") player:registerEvent("rollMana")
events/scripts/player.lua
add to the bottom:
LUA:function Player:onInventoryUpdate(item, slot, equip) itemAttributes(self, item, slot, equip) end
events/scripts/monster.lua
add to the top of the file:
add between:LUA:-- Rarity Animations local rare_popup = true local rare_effect = true local rare_effect_id = CONST_ME_STUN
add at the end:LUA:-- Apply rarity chance to corpse contents and apply animation if rollRarity(corpse) > 0 then -- If a rare item was rolled, play animation if rare_popup then local spectators = Game.getSpectators(corpse:getPosition(), false, true, 7, 7, 5, 5) for i = 1, #spectators do spectators[i]:say(rare_text, TALKTYPE_MONSTER_SAY, false, spectators[i], corpse:getPosition()) end end if rare_effect then corpse:getPosition():sendMagicEffect(rare_effect_id) end end
LUA:function Monster:onSpawn(position, startup, artificial) self:registerEvent("rollHealth") self:registerEvent("rollMana") return true end
The core scripts are attached because they are to big to embed in post, so they're attached as rollAttributes.zip
Don't forget to paste the core scripts into your /data dir.
Extras
- 'Stun Target' is disabled by default, add the condition from here and uncomment the lines in creaturescripts/scripts/attributes.lua
- primaryDamage and primaryType are swapped with secondaryDamage and secondaryType on elemental damage (better, consistent visuals)
- Use the included /roll <rarity> talkaction for testing i.e /roll legendary
- Mana Leech and Life Leech apply 5ms after damage is done, this may feel different to vanilla Tibia.
- Multi shot ignores creature armor/shielding - its quite primitive.
- If you want to re-roll an item you should item:remove() it and re-create it (so it has stock base stats).
- Custom resistances apply after natural resistances and are additive.
- A unique weapon & shield using this systems on-hit mechanics can be found in extras.xml
Overwrite their information in items.xml and uncomment their code in attributes.lua for cool points.
Multishot dont work with Quiver system do you can help?
Dont shot more target and dont remove arrows. Read no arrows maybe something with scan quiver?
local ammoSlot = XXXXXXX
I'm trying to adapt to otbr 12.64The otbr 12.60 its more diferent, and need a lot of work....