OpenTibiaBR - Canary is a free and open-source MMORPG server emulator written in C++.
It is a fork of the OTServBR-Global project. You can see the
repository history in the releases.
This project was created with the intention of being a base as clean as possible, to work as an MMORPG engine and not
necessarily linked to Tibia Global, although it will also work. The OpenTibiaBR - Global was adapted to work with the
source of the Canary, so that it will be the first repository to use this engine.
We use the issue tracker on GitHub. Keep in mind that everyone who is
watching the repository gets notified by e-mail when there is an activity, so be thoughtful and avoid writing comments
that aren't meant for an issue (e.g. "+1"). If you'd like for an issue to be fixed faster, you should either fix it
yourself and submit a pull request, or place a bounty on the issue.
Do not send Pull Request changing the map, as we can't review the changes it's better to use
our Discord to talk about or send the map changes to the responsible for updating it.
Focus on fixing only one thing, mixing too much things on the same Pull Request make it harder to review, harder to
test and if we need to revert the change it will remove other things together.
Follow the project indentation, if your editor support you can use the editorconfig to
automatic configure the indentation.
There are people that doesn't play the game on the official server, so explain your changes to help understand what
are you changing and why.
Avoid opening a Pull Request to just update one line of an xml file.
Video 1 - standard situation when monster kill weaker one on his way Video 2 - bugged one - monster will stack on the one in his way when only diagonal access is possible
Those are main functions responsible for monster pushing.
Critical damage should have minimum damage on like 50-60% of max normal damage as it is on normal tibia.
@edit
I might not described the problem correctly. When you land a critical hit, the critical hit damage should be a critical hit from over 50% of your minimum damage.
For example If you can hit 2 - 1000 normal damage. The critical (with 50% critical damage) should be around 500 - 1500 damage (not 3 - 1500). The value differs on paladin and knight. I mean the values from melee and distance hit.
Imagine that I have an OTServer up and running with this project on version 12.00 and want to update it to the most recent version (like 12.60) on branch develop. My database contains lot of accounts, players, houses, etc.
If I pull the new version from this repo, build and compile it, I'll need to update the database schema also.
The problem is that a lot of columns and tables have changed from my version to the current one, and I won't be able to update my OTServer unless I manually compare all what have changed in schema, generate an SQL script and run it on my own.
Describe the solution you'd like
You could setup database schema versioning using softwares like Evolve, Flyway or Liquibase to create migrations scripts when necessary to update the schema.
Everytime it makes necessary to add a column, create a new table, remove a column, etc, while development phase, a migration script will be created containing all the SQL of the operation.
This way will be easier for OTServer owners to update their servers, they will just need to pull the project from repo and run the software, so the migration scripts will run in order on their old databases, updating the schema with the new OTServer version and still contain all old data from the server.
The advantage of using a software like this is that the version of the database will be controlled inside it. A version table will be created inside the database and at the time I run the program to update my database, the program will know exactly what migration script it will have to run.
Links
Evolve is open source and available with .NET library. You can find its documentation on GitHub
Flyway and Liquibase are integrated with Java (I've used Flyway on my Java projects), but they can be used with command line also. Here is a link to explain how it works
On Global Tibia, when you get a Paralyze condition, your speed is fixed in a value, and independent such u have a equipped item, or not, your speed will be that!
This video show that happens when i equip a boh, when i'm paralyzed, my speed not change. https://imgur.com/XH6qDE2
first look in the windows for the name of the monster after that just select in all windows so the prey will be active for the same monster
note: this will bring the server down
Hay un bug en los monsters lo cual permite que se stackeen por ejemplo, si hay 8 monsters a tu alrededor y lureas otros, esos otros se puede poner sobre alguno de esos monsters y ya no te estarían pegando solo 8 si no, mas monsters (9, 10 etc) y por lo mismo mueres, sucede en varios monsters por ejemplo drakens
There is a bug in the monsters which allows them to stack for example, if there are 8 monsters around you and you lure others, those others can be put on one of those monsters and they would no longer be hitting you only 8 if not, more monsters ( 9, 10 etc) and for the same you die
` opentibiabr/otservbr-global-archived#1 0x00005555557789d8 in ProtocolGame::sendMarketEnter(unsigned int) ()
No symbol table info available. opentibiabr/otservbr-global-archived#2 0x0000555555766e53 in ProtocolGame::parseMarketBrowse(NetworkMessage&) ()
No symbol table info available. opentibiabr/otservbr-global-archived#3 0x000055555577e52b in ProtocolGame::parsePacket(NetworkMessage&) ()
No symbol table info available. opentibiabr/otservbr-global-archived#4 0x0000555555824e07 in Connection::parsePacket(boost::system::error_code const&) ()
No symbol table info available. opentibiabr/otservbr-global-archived#5 0x00005555558269ce in boost::asio::detail::read_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_serviceboost::asio::ip::tcp >, boost::asio::mutable_buffers_1, boost::asio::detail::transfer_all_t, std::_Bind<std::_Mem_fn<void (Connection::)(boost::system::error_code const&)> (std::shared_ptr, std::_Placeholder<1>)> >::operator()(boost::system::error_code const&, unsigned long, int) ()
No symbol table info available. opentibiabr/otservbr-global-archived#6 0x0000555555826e23 in boost::asio::detail::reactive_socket_recv_op<boost::asio::mutable_buffers_1, boost::asio::detail::read_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_serviceboost::asio::ip::tcp >, boost::asio::mutable_buffers_1, boost::asio::detail::transfer_all_t, std::_Bind<std::_Mem_fn<void (Connection::)(boost::system::error_code const&)> (std::shared_ptr, std::_Placeholder<1>)> > >::do_complete(boost::asio::detail::task_io_service*, boost::asio::detail::task_io_service_operation*, boost::system::error_code const&, unsigned long) ()
No symbol table info available. opentibiabr/otservbr-global-archived#7 0x00005555557a7f11 in ServiceManager::run() ()
I still don't understand how this bug is occurring.
using updated version of git without edits
Player ao entrar dentro do pz/ou fora do pz, sem battle <--- ao exitar, deveria cair instantaneamente, mas não, ele só desloga dps de 1 min.
Sistema dos monstros saírem (pararem de atacar o player), ao player exitar/perder conexão
( não funcionando de maneira correta ):
Depois de fazer a saída, como deve funcionar:
nos 3 casos:
se é paladino X tempo
se for mago X time
se é cavaleiro X tempo
Depois que ele sai, o sistema só deve funcionar após esse horário X ser ativado.
Se as criaturas tentarem voltar à sua "posição convocada", o monstro continuará seguindo o alvo.
It seems that all the cults of tibia bosses don't register their creatureevents on spawn. This makes it impossible to kill any of the bosses because none of the events are registering. Saw that the names of some of the creatureevents didn't match but even when you fix that it still doesn't register it.
How to Reproduce?
Put a print or anything to test if a creatureevent is being used.
Give us all details to reproduce the behavior:
Put a print line or anything to see if a creatureevent is running.
Go face the boss where you've added the line.
Expected behavior
The creatureevents should register when facing the bosses.
The bug:
The bug happens when I use the / reload command. For some reason, when using the command /reload monster and later /reload spells, some monsters change the spells registered in their files.
The way I found to reproduce the bug:
Set a monster to use sd {name ="sudden death", interval = 2000, chance = 100, minDamage = -2000, maxDamage = -2300, range = 5, target = true}
Let him use the spell on some player
use /reload monsters and right after use /reload spells
The monster will start using another spell instead of sd, this can cause some crash
Screenshots
The monster is using sd as it should:
After using /reload monsters and /reload spells 2x:
I modified the store's init.lua to be reading the tournament coin, the functions were also added but I didn't find out how to remove it when buying something in the store even though it was incomplete I thought it would be cool to share with you and someone to find out how to fix this problem
Search to:
msg:addU32(0) -- Tournament Coins
Change to:
msg:addU32(player:getTournamentCoinsBalance())
Search to:
function Player.getCoinsBalance(self)
Below that function add:
function Player.getTournamentCoinsBalance(self)
resultId = db.storeQuery("SELECT `tournamentBalance` FROM `accounts` WHERE `id` = " .. self:getAccountId())
if not resultId then return 0 end
return result.getDataInt(resultId, "tournamentBalance")
end
Search to:
setCoinsBalance
Below that function add:
function Player.setTournamentCoinsBalance(self, tournamentBalance)
db.query("UPDATE `accounts` SET `tournamentBalance` = " .. tournamentBalance .. " WHERE `id` = " .. self:getAccountId())
return true
end
Search to:
canRemoveCoins
Below that function add:
function Player.canRemoveTournamentCoins(self, tournamentBalance)
if self:getTournamentCoinsBalance() < tournamentBalance then
return false
end
return true
end
Search to:
removeCoinsBalance
Below that function add:
function Player.removeTournamentCoinsBalance(self, tournamentBalance)
if self:canRemoveTournamentCoins(tournamentBalance) then
return self:setTournamentCoinsBalance(self:getTournamentCoinsBalance() - tournamentBalance)
end
return false
end
Search to:
addCoinsBalance
Below that function add:
function Player.addTournamentCoinsBalance(self, tournamentBalance, update)
self:setTournamentCoinsBalance(self:getTournamentCoinsBalance() + tournamentBalance)
if update then sendCoinBalanceUpdating(self, true) end
return true
end
This may work like this, I don't play RL so I don't know. But someone could confirm.
I want to know if there is any way or if the reward chest is cleaned from time to time? Since when it is full, the new bags are placed inside the others, making it uncomfortable to find your loot.
Desktop (please complete the following information):
alguem poderia ajudar a resolver os 2 bugs que estão acontecendo por favor:
1 - hireling ao dar leavehouse permanece dentro da house.
2 - casks, qualquer cask com carga por exemplo 1000, ao ser usado 100 flasks ele vai para 900 cargas restantes, ao dar wrap e unwrap ele segue contando as cargas normalmente porém se vc usar as 999 cargas sem dar wrap no item e der leavehouse, ao pegar o item no mailbox e colocar na house novamente ele volta com a carga do ultimo wrap, ou seja, se o cara pega o cask com 1000 cargas e usa 999 e da leavehouse, ao colocar novamente na house ele volta com 1000 cargas. Basicamente a função que transforma ele parcel da store ta pegando a carga do último wrap e não a carga atual.
READ BEFORE PROCEEDING: OUR SERVER IS UPDATED DAILY. IF POSSIBLE MAKE SURE TO UPDATE TO THE LATEST VERSION BEFORE REPORTING.
Describe the bug
File: data/scripts/creaturescripts/others/login.lua line 221
local doubleExp = false --Can change to true if you have double exp on the server
when active it works until first kill or gain experience
How to Reproduce?
Go to file data/scripts/creaturescripts/others/login.lua line 221, change doubleExp = true
Give us all details to reproduce the behavior:
Enter game
Check XP Gain Rate, double working
Gain xp killing monster
double turn off
Expected behavior
Double experience active after kill
Screenshots
Environment
OS (e.g. Windows): Windows 10 / Linux Ubuntu 20
OTServ Version (e.g. commit): head (2021-03-05)
Tibia Version 12.61
Additional context
File: data/events/scripts/player.lua line 747 -> self:setBaseXpGain(displayRate * 100)
function Player:onGainExperience(source, exp, rawExp)
this function ignore previous changes made with setBaseXpGain.
Some items would need to be added to items.xml to update the NPC's that sell furniture for houses.
I tried to perform this task but I had a lot of difficulty because I didn't have knowledge. Updates 12.20.9263 Updates 12.30.9367
Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
Expected behavior
Firstly It should work, the raid would spawn after clear whole cellar not only few slimes.
Secondly Slimes should not create another raids.
Environment:
OS: Linux (debian 10)
OTServ Version: otservbr-global (update from 21.02.2021)
READ BEFORE PROCEEDING: OUR SERVER IS UPDATED DAILY. IF POSSIBLE MAKE SURE TO UPDATE TO THE LATEST VERSION BEFORE REPORTING.
Describe the wrong or missing content
A clear and concise description of what content is wrong or missing
If you die you logg out, leave party etc.
Describe the correct content
A clear and concise description of what would be the correct content in place
You shouldn't log out on death, Like real tibia, You are still in party, you see how much exp you lost, you have ur analyzers after death
Links
If applicable, add links to help references of how the content
Screenshots
If applicable, add screenshots to help explain the content
this item is not being possible to imbue ml
in this case only paladin players can imbue with ml
Notes
This is the only helmet that can be worn by Knights which can be imbued with up to Tier 2 Epiphany (Magic Level boost) imbuements. It's also one of the few helmets available for Paladins with this property.
When we create a monster with Game.createMonster("monsterName", position) the monster doesn't register events with "onSpawn"
function Monster:onSpawn(position)
self:registerEvent("someRandomCreaturescripts") --reduction of damage received
end
my way to solve this problem is:
in luascripts.cpp add #include "events.h"
and extern Events* g_events;
and in function LuaScriptInterface::luaGameCreateMonster(lua_State* L)
after Creature* master = getCreature(L, 5);
add this g_events->eventMonsterOnSpawn(monster, position);
Describe the bug
Placed a hireling in a house, tried to sell stuff to him (Trade > Equipment) and when I hit the button to sell stuff, nothing happens.
To Reproduce
Steps to reproduce the behavior:
Buy the Hireling and the Trader Skill
Place it inside your house.
Start the dialogs and say: "trade" and then "equipment"
The trade window will open, go to the sell tab and try to sell any of the things he buys. nothing will happen, not even a console bug report. The Item appears in the list as an option, it recognizes that I have the amount in my backpack but it doesnt work.
Expected behavior
I'd like to be able to sell stuff.
Additional context @jlcvp, @dudantas asked me to create this issue and let you know that this isn't working.
Describe the bug
If I start the dialog with a hireling and select one of his trade options, whenever I try to use one of his other functions, like bank, switch his outfit or make him go back into his lamp, he opens the last trading option that I used.
To Reproduce
Steps to reproduce the behavior:
Start the dialog
Say Trade
Say Tools
Close the trading window.
Say Outfit.
The Tools trading option will open instead of his outfit selector.
Expected behavior
I should be able to select between his various skills no matter when.
I was testing the party system and I noticed that the party system is not calculating the bonuses correctly
wikia:
20% bonus, if the players are of the same vocation;
30% bonus if two different vocations are sharing experience;
60% bonus if three different vocations are sharing experience;
100% bonus if the four different vocations are sharing experience.
Segue lista de todos os boss que não precisam de quests, não consegui analisar se já estão incluidos no projeto ou não, caso esteja, qualquer pessoa poderá reportar e vamos ticando.
Lista feita hoje, dia 11/06/2020.
OBS: cada position representa 1 monstro; quando me refiro a respawn, é um monstro naquele local.
https://www.tibiawiki.com.br/wiki/Bullwark
Para enfrentá-lo é necessário ter o 2º rank de cidadão em Rathleton e um voto em seu quest log. Fale hi - fight - yes com o NPC que estiver no local marcado para ser teleportado e use a alavanca para chegar até a sala do boss. Aparentemente não há intervalo de espera para enfrentar novamente o boss, mas, caso você tente enfrentá-lo logo em seguida à qualquer player que o tenha matado, você ficará preso na sala anterior cerca de 20 minutos antes de poder enfrentá-lo.
Position da alavanca (criar script e add mapa): 33699, 31849, 7, esta alavanca joga na position 33701, 31840, 7 e sumona o boss.
Nessa sala, position: 33695, 31820, 7 tem este teleport (nao sei pra onde volta) mas jogando na position 33682, 31825, 7 ta de bom tamanho.
https://www.tibiawiki.com.br/wiki/Chikhaton
teleport, position 33326, 31741, 7 (igual foto), vai para position: 33340, 31731, 8, e teleport 33339, 31728, 8 volta para 33323, 31740, 7
OBS: colocar apenas raids.
Falta o TP no mapa do OTBR, igual exemplo abaixo.
https://www.tibiawiki.com.br/wiki/Fernfang
raid,
Position: 32851, 32339, 6
obs: esta ilha apenas pode, no tibia, ser acessada por druids. Tem os dois tps, talvez colocar a script neste tp 32831, 32294, 7 ficaria bacana.
https://www.tibiawiki.com.br/wiki/Ghulosh
falta script, action, unique...
use nesse item, position: 32746, 32773, 10, em 5 pessoas, a script cria o boss e manda pra sala do boss Position: 32756, 32715, 10
boss nasce Position: 32756, 32722, 10
consertar os tps de exit da sala do boss e da mecanica, vai para Position: 32665, 32712, 13
https://www.tibiawiki.com.br/wiki/Horadron
script, action ou uniqueid, veja o local onde o char tem que fixado para ser jogado na sala do boss.
dando use na position: 33603, 32395, 11, você pode enfrentar esta criatura usando um Copper Prison Key em um Copper Lock Pedestal.
Você tem 15 minutos para derrotar esta criatura.
sala do boss position: 33607, 32424, 12
https://www.tibiawiki.com.br/wiki/Lionet_(Creature)
Ele aparece durante eventos do Aniversário do Tibia. Durante o aniversário de 15 anos, ao clicar no bolo os jogadores eram transportados para a escada ao oeste de seu respawn e recebiam alguns itens, entre eles: 10 Platinum Coins, 3 Ectoplasmic Sushis, 1 Broken Ring of Ending, 2 Surprise Bags (Red) e a chance de conseguir um Seashell Book (Blue).
raid,
Position: 33453, 31307, 14
https://www.tibiawiki.com.br/wiki/Lokathmor
este tp Position: 32464, 32654, 12 vai para Position: 32719, 32746, 10
criar script, actions, uniquiid
dando use na Position: 32720, 32749, 10, em 5 pessoas, a script cria o boss e manda pra sala Position: 32751, 32682, 10
Boss nasce na position 32751, 32689, 10
arrumar tp Position: 32750, 32696, 10 e mandar para Position: 32718, 32744, 10
https://www.tibiawiki.com.br/wiki/Mazzinor
corrigir tp Position: 32480, 32601, 15, vai para Position: 32719, 32770, 10
criar script, actions, uniquiid
dando use na Position: 32720, 32773, 10, em 5 pessoas, a script cria o boss e manda pra sala Position: 32724, 32714, 10
Boss nasce na Position: 32724, 32722, 10
arrumar tp Position: 32724, 32728, 10 e mandar para Position: 32480, 32599, 15
https://www.tibiawiki.com.br/wiki/Mirade
Aparece 20 minutos após a mensagegm: A troll is happily trolling the Orc Fortress - somebody call the CMs!
raid,
Position: 32899, 31772, 7
https://www.tibiawiki.com.br/wiki/Raging_Mage
Surge após a morte do Energized Raging Mage.
Quando ele é morto aparece a seguinte mensagem:
The remains of the Raging Mage are scattered on the floor of his Tower. The dimensional portal quakes, mere minutes are left.
5 minutos após ele ser morto, o portal para a outra dimensão se fecha e aparece a seguinte mensagem:
With a great bang the dimensional portal in Zao collapsed and with it the connection to the other dimension shattered.
Position: 33143, 31530, 2
https://www.tibiawiki.com.br/wiki/Terofar
script, action ou uniqueid, veja o local onde o char tem que fixado para ser jogado na sala do boss.
dando use na Position: 33614, 32395, 11, você pode enfrentar esta criatura usando um Silver Prison Key em um Silver Lock Pedestal.
Você tem 15 minutos para derrotar esta criatura.
vai para Position: 33567, 32427, 12
position boss 33567, 32421, 12
https://www.tibiawiki.com.br/wiki/The_Mutated_Pumpkin
Aparece aleatoriamente à oeste de Darashia em três lugares:
Position: 33126, 32378, 7
Position: 33078, 32407, 7
Position: 33116, 32397, 7
Aparece em invasões durante um evento que se inicia no server save do dia 31 de outubro e se estende até o server save do dia 03 de novembro, geralmente ocorrendo a cada 4 horas após o Server Save com a mensagem "Oh noes! It's a mutated pumpkin!".
https://www.tibiawiki.com.br/wiki/Yakchal
Para acorda-lá você precisa ir até sua cripta e usar uma Frozen Starlight em seu sarcófago, há uma pequena chance da Frozen Starlight quebrar
Position do sarcófago: 32205, 31002, 14
https://www.tibiawiki.com.br/wiki/Zavarash
script, action ou uniqueid, veja o local onde o char tem que fixado para ser jogado na sala do boss.
dando use na Position: 33608, 32395, 11, Você pode lutar sozinho contra essa criatura utilizando uma Bronze Prison Key em um Bronze Lock Pedestal.
Você tem 15 minutos para derrotar esta criatura.
vai para Position: 33530, 32423, 12
position boss 33525, 32422, 12
O Achievements não estão funcionando todos, exemplos de alguns:
a) Após entrar pela primeira vez no covil dos Deathlings, você ganhará o Achievement "Spectulation".
b) "Do Not Disturb" Obtido fechando janelas 100 vezes.
c) "Number of the beast" Obtido se você conseguir tirar o número "6" três vezes seguidas jogando um Dado.
Spoiler: https://www.tibiawiki.com.br/wiki/Achievements
No caso, para ver se todos funcionam, é muitosss mesmo para testar, esses citados são apenas alguns exemplos, mas caso tenha que testar um a um ai teremos que ver com mais tempo com a finalidade de mapear um a um que tem e não.
We are able to enchant our gear with Elemental Protection Imbuiment, like Dragon Hide (Fire resist), but the elemental % damage reduction is not applied to our character.
Auto-open system was introduced in opentibiabr/otservbr-global-archived#904, but it does not assign certain container to its action-bar, and does not open container to its previous size.
Example, before relog:
after relog:
On ciptibia it would open containers exactly how it was before relog.
All I have found is that its getting saved in characterdata sidebars.json file: