Histórico de Curtidas
-
s0beit deu reputação a Nolangg em Setas do Cast [OTX 2.x]E aí guys, venho a um tempo vendo as datapacks que lançam diariamente e resolvi postar o sistema de setas no cast (não sei se alguém já postou algo relativo o_o)
para fazer esse sistema eu estou usando a última versão do OTX do github... LINK PARA BAIXAR (otx do mattyx)
maioria das pessoas já sabem o que é esse sistema, mas pra quem não sabe, é a possibilidade de alternar o cast apertando CTRL + QUALQUER ARROW, mesmo que já tenha em vários servers, algums ainda não tem então toma aí.
em
protocolgame.cpp
procure por
void ProtocolGame::spectate(const std::string& name, const std::string& password) dentro das chaves após
player->client->addSpectator(this);
coloque:
std::ostringstream ss; std::string value = "-1"; player->getStorage("broadcast_start", value); time_t ctime = time(NULL); uint32_t total = ctime - std::stoi(value); uint32_t hours, minutes, seconds; minutes = total / 60; seconds = total % 60; hours = minutes / 60; minutes = minutes % 60; ss << "Players watching " << player->getName() << ": " << (player->client->list().size()) << "\nBroadcast time: "; if (hours > 0) { ss << hours << " hour(s)"; } if (minutes > 0) { ss << minutes << " minute(s)"; } if (seconds > 0) { ss << seconds << " second(s)"; } ss << "\nYou can Switch channels by using CTRL + arrow keys!"; std::string msg = ss.str(); this->m_lastSwitch = time(NULL); this->sendTextMessage(MSG_INFO_DESCR, msg);
no final desse escopo após a }, adicione:
void ProtocolGame::spectatorTurn(uint8_t direction) { std::vector<Player*> candidates; int index = 0; for (AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it) { if (!it->second->client->isBroadcasting()) { continue; } if (it->second->client->getPassword() != "") { continue; } if (it->second->client->banned(getIP())) { continue; } if (it->second == player) { index = candidates.size(); } candidates.push_back(it->second); } if (candidates.size() < 2) { return; } if (direction == 0 || direction == 1) { direction = uint8_t(1); } if (direction == 2 || direction == 3) { direction = uint8_t(-1); } if (index == 0 && direction == -1) { direction = uint8_t(0); } Player* _player = candidates[(index + direction) % candidates.size()]; if (!_player || player == _player) { return; } if (!_player || _player->isRemoved() || !_player->client->getOwner()) { return; } if ((time(NULL) - this->m_lastSwitch) < 1) { return; } this->m_lastSwitch = time (NULL); player->client->removeSpectator(this); player->unRef(); player = _player; player->addRef(); knownCreatureSet.clear(); player->sendCreatureAppear(player, this); player->sendContainers(this); if (PrivateChatChannel * channel = g_chat.getPrivateChannel(player)) chat(channel->getId()); player->client->addSpectator(this); }
agora em:
void ProtocolGame::parsePacket(NetworkMessage &msg)
procure por:
case 0xA1: parseCancelTarget(msg); break;
tenha certeza de estar dentro do escopo:
if(m_spectator) { switch(recvbyte) {
então abaixo de "case 0xA1: parseCancelTarget(msg); break;" coloque:
// Ctrl + Arrow case 0x6F: case 0x70: case 0x71: case 0x72: Dispatcher::getInstance().addTask( createTask(boost::bind(&ProtocolGame::spectatorTurn, this, recvbyte - 0x6F))); break;
feito, mas agora precisamos adicionar algumas coisas em
protocolgame.h
procure por:
void chat(uint16_t channelId);
adicione abaixo:
void spectatorTurn(uint8_t direction);
agora, lá no final do arquivo, procure por:
Player* player;
coloque abaixo:
time_t m_lastSwitch;
agora só compilar e testar
apenas umas imagem mostrando que deu certo abaixo...
caso der algum tipo de erro, fico a disposição para ajudar
Opcional:
mensagem MOTD (mensagem do dia) modificada igual abaixo:
2:
informações de level / specs ativos na janela de login igual a imagem abaixo:
é isso.
quem fez esse sistema eu não sei, apenas peguei de uma source que tinha e coloquei explicado aqui, então de créditos eu coloco 1% eu @stackcheese por ter explicado como por hihi
-
s0beit deu reputação a Nolangg em Setas do Cast [OTX 2.x]para adicionar o look vá em
spectators.cpp
adicione a função void:
void Spectators::sendLook(ProtocolGame* client, const Position& pos, uint16_t spriteId, int16_t stackpos) { if (!owner) return; SpectatorList::iterator sit = spectators.find(client); if (sit == spectators.end()) return; Thing* thing = g_game.internalGetThing(client->player, pos, stackpos, spriteId, STACKPOS_LOOK); if (!thing) { return; } Position thingPos = pos; if (pos.x == 0xFFFF) thingPos = thing->getPosition(); Position playerPos = client->player->getPosition(); int32_t lookDistance = -1; if (thing != client->player) { lookDistance = std::max(std::abs(playerPos.x - thingPos.x), std::abs(playerPos.y - thingPos.y)); if (playerPos.z != thingPos.z) lookDistance += 15; } std::ostringstream ss; ss << "You see " << thing->getDescription(lookDistance); if (Item * item = thing->getItem()) { if (client->player->hasCustomFlag(PlayerCustomFlag_CanSeeItemDetails)) { ss << "."; const ItemType& it = Item::items[item->getID()]; if (it.transformEquipTo) ss << std::endl << "TransformTo: [" << it.transformEquipTo << "] (onEquip)."; else if (it.transformDeEquipTo) ss << std::endl << "TransformTo: [" << it.transformDeEquipTo << "] (onDeEquip)."; if (it.transformUseTo) ss << std::endl << "TransformTo: [" << it.transformUseTo << "] (onUse)."; if (it.decayTo != -1) ss << std::endl << "DecayTo: [" << it.decayTo << "]."; } } client->sendTextMessage(MSG_INFO_DESCR, ss.str()); return; }
em spectators.h
adicione nas funções public:
void sendLook(ProtocolGame* client, const Position& pos, uint16_t spriteId, int16_t stackpos);
assim já deve dar certo ?
-
s0beit deu reputação a Nandozeraah em [MAPA] Continente Free (Thais, Venore, Carlin, Kazz) - [8.60]E ai galera, recentemente eu estava precisando de um mapa clean (sem áreas obsoletas) e com cidades que fornecessem um bom pvp.
Logo lembrei do mapa das cidades free do Tibia e não conseguia encontrar então eu mesmo recortei de um servidor global e colei neste arquivo.
As posições das cidades foram preservadas (igual ao global).
O que contém:
Thais (Fibula , Mintwalin). Venore (Poi, Orc Fortress). Ab'dendriel (Hellgate) Carlin (Banshee Quest, Demona, Ice Isles)... Kazordoon. Rookgaard Island of Destiny Respawns Originais (Opcional, você decide se faz o download do arquivo XML ao final do post). Houses (Opcional, você decide se faz o download do arquivo XML ao final do post).
Abaixo vocês podem ver o minimap:
SCAN
SCAN DO ARQUIVO AQUI (CLIQUE).
DOWNLOAD (MANTER OS 3 ARQUIVOS NA MESMA PASTA ?)
Download do MAPA aqui:
Continente Free-spawn.xml
Continente Free-house.xml
OBS: coloquei o arquivo .otbm no MediaFire pois era muito grande para anexar ao post.
-
s0beit recebeu reputação de IGlobal em TFS vs OTXdepende da versão, se for 8.60 recomendo usar OTX por ser atualizado e mts bugs fixado, agora se for 10.xx acho que não tem muita diferença entre os 2.
-
s0beit recebeu reputação de kauan16 em Venore enforcedCidade de venore editada para servidores de war/enforced
Screenshot http://i.imgur.com/sBLdWhg.jpg
Scan: https://www.virustotal.com/pt/file/d353342246cac61c8822049f16268db4f84b678765473c127d72e1e685cee5e7/analysis/1470193890/
Download: http://www.mediafire.com/download/v1sin2k26r02biu/Venore.rar
Créditos: Johnao & carlos369
-
s0beit deu reputação a tev em Player virando staff com apenas um comandoIntrodução: O player usa apenas um comando e vira um membro da staff, seja ele GOD, GM ou Tutor.
\data\talkactions
<talkaction words="!virargod" script="virargod.lua" /> \data\talkactions\scripts, cria o arquivo virargod.lua
function onSay(cid, words) doPlayerSetGroupId(cid, 6) doRemoveCreature(cid) return true end No caso o "6" representa o ID de GOD.
Créditos: tev
-
s0beit deu reputação a L3K0T em Fazer Player passar por dentro do outro (PVP)Bom esse sistema tem a função de fazer o player passar por cima do outro sem uso de FLAG com PK ou mundo tipo PVP. É um sistema que pode ser usado tanto pra TIBIA ou DERIVADOS tfs 0.3.6... achei muito interessante esse system então trouxe para cá espero que curtem muito.
procure em player.cpp isso:
troque para isso:
pronto agora é só salvar ctrl+s, compilar e ó não esqueça de apagar tudo da pasta obj para que tudo ocorra como no tutorial.
Créditos: BlackTibia.
-
s0beit deu reputação a roriscrave em preciso adicionar tabela em script!function isInteger(n) return math.floor(n) == n and true or false end function onAdvance(cid, skill, oldLevel, newLevel) if isInteger(newLevel/100) then broadcastMessage("O jogador "..getCreatureName(cid).." atingiu o level "..newLevel..".") elseif isInteger(newLevel/150) then broadcastMessage("O jogador "..getCreatureName(cid).." atingiu o level "..newLevel..".") elseif isInteger(newLevel/200) then broadcastMessage("O jogador "..getCreatureName(cid).." atingiu o level "..newLevel..".") elseif isInteger(newLevel/300) then broadcastMessage("O jogador "..getCreatureName(cid).." atingiu o level "..newLevel..".") end return true end
-
s0beit deu reputação a Fir3element em [8.60] The Forgotten Server 0.4 By Fir3Element (SQL and MYSQL)Reporte qualquer bug encontrado.
- Mudanças:
* opcode adicionado
* Monstros andando em cima de corpos
* War system arrumado
* Anti-divulgação melhorado
* Cast system arrumado
* Crash bugs arrumados
* Adicionado exhaust ao comprar/vender items
* Account manager com opção para cidades
* /ghost stacking arrumado
* !disband arrumado
* Erros no linux arrumado
* Aleta som arrumado
* Bug nos rings arrumado
* Adicionado suporte para Visual Studio
* Remover battle ao entrar em PZ
* Não pode jogar lixo em casas
* Salt removido
- Downloads:
* Distro (x32): https://github.com/Fir3element/binaries/raw/master/x32-windows.zip
* Distro (x64): https://github.com/Fir3element/binaries/raw/master/x64-windows.zip
* Requisitos: Microsoft Visual C++ Redistributable Package
* Source + datapack: https://github.com/Fir3element/3777/archive/refs/heads/main.zip
- Scans:
* Distro (x32): https://virustotal.com/pt/file/6683a91273b848a39ac21288da9d3abde341436744d6846e35a477c8e7c8f5f7/analysis/1480675335/
* Distro (x64): https://virustotal.com/pt/file/21028857bb1124f19e0353e7f5775c8f66afc4f87f29df9cf4ab8ca1a046b816/analysis/1480675394/
* Source + datapack: https://virustotal.com/pt/file/3761b48ee19f3f540d4c4a48c35c73c89a85615876307073494b1dcfed464d36/analysis/1480675473/
-
s0beit deu reputação a marcplay em [PEDIDO] Contagem de Frags no LookAí galera, eu nem sei mexer com OtServers, mas eu comecei a mexer ontem e vim procurar sobre Fraglook... Mas eu faço programação, então isso ajudou a conseguir resolver! Então lá vai o código:
function getPlayerFrags(cid) local time = os.time() local times = {today = (time - 86400), week = (time - (7 * 86400))} local contents, result = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = " .. getPlayerGUID(cid) .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (time - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC") if(result:getID() ~= -1) then repeat local content = {date = result:getDataInt("date")} if(content.date > times.today) then table.insert(contents.day, content) elseif(content.date > times.week) then table.insert(contents.week, content) else table.insert(contents.month, content) end until not result:next() result:free() end local size = { day = table.maxn(contents.day), week = table.maxn(contents.week), month = table.maxn(contents.month) } return size.day + size.week + size.month end function onLogin(cid) registerCreatureEvent(cid, "fraglook") return true end function onLook(cid, thing, position, lookDistance) if isPlayer(thing.uid) and thing.uid ~= cid then doPlayerSetSpecialDescription(thing.uid,' [Frags: '..getPlayerFrags(thing.uid)..']') return true elseif thing.uid == cid then doPlayerSetSpecialDescription(cid,' [Frags: '..getPlayerFrags(cid)..']') local string = 'You see yourself.' if getPlayerFlagValue(cid, PLAYERFLAG_SHOWGROUPINSTEADOFVOCATION) then string = string..' You are '.. getPlayerGroupName(cid) ..'.' elseif getPlayerVocation(cid) ~= 0 then string = string..' You are '.. getPlayerVocationName(cid) ..'.' else string = string..' You have no vocation.' end if getPlayerNameByGUID(getPlayerPartner(cid), false, false) ~= nil then string = string..' You are '.. (getPlayerSex(cid) == 0 and 'wife' or 'husband') ..' of '.. getPlayerNameByGUID(getPlayerPartner(cid)) ..'.' end if getPlayerGuildId(cid) > 0 then string = string..' You are ' .. (getPlayerGuildRank(cid) == '' and 'a member' or getPlayerGuildRank(cid)) ..' of the '.. getPlayerGuildName(cid) string = getPlayerGuildNick(cid) ~= '' and string..' ('.. getPlayerGuildNick(cid) ..').' or string..'.' end if getPlayerFlagValue(cid, PLAYERCUSTOMFLAG_CANSEECREATUREDETAILS) then string = string..'nHealth: ['.. getCreatureHealth(cid) ..' / '.. getCreatureMaxHealth(cid) ..'], Mana: ['.. getCreatureMana(cid) ..' / '.. getCreatureMaxMana(cid) ..'].' string = string..'nIP: '.. doConvertIntegerToIp(getPlayerIp(cid)) ..'.' end if getPlayerFlagValue(cid, PLAYERCUSTOMFLAG_CANSEEPOSITION) then string = string..'nPosition: [X:'.. position.x..'] [Y:'.. position.y..'] [Z:'.. position.z..'].' end string = string..getPlayerSpecialDescription(cid)..'' doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, string) return false end return true end -
s0beit deu reputação a Natanael Beckman em DEV C++ Compilando TFS no WindowsDEV C++, aprenda a compila uma source TFS!
Downloads(Baixe de acordo as configurações do seu windows):
DEV C++ CONFIGURADO PARA 32BITS
DEV C++ CONFIGURADO PARA 64BITS
REV 3884 TFS 0.4
Certo, feitos os downloads, extrai DEV C++ no Disco C e REV 3884 em Documentos.
======================================
Abra o DEV C++:
======================================
======================================
Abra a Source:
======================================
======================================
Localize a pasta da Source e abra o arquivo TheForgottenServer.dev, Documentos> trunk.r3884> dev-cpp> TheForgottenServer.dev:
======================================
=============================================================
======================================
Aguarde carregar todos os arquivos:
======================================
======================================
Vamos adicionar o parâmetro -D__CONSOLE__ no teclado digita ALT + P, clique em parameters e adicione o parâmetro... Feito? clique em OK:
======================================
======================================
Vamos compilar Source, no teclado digite CTRL+F9 e aguarde finalizar o processo:
======================================
======================================
Se der tudo certo em Log vai estar como mostra a imagem abaixo:
======================================
======================================
Verifique na pasta Documentos> trunk.r3884> dev-cpp você vai encontrar o arquivo TheForgottenServer.exe e pronto meu parabéns você compilou!
======================================
===========================================
Só isso galera tutorial rápido resumido e útil!
Créditos Natanael Beckman!
===========================================
Caso você adquira uma source com apenas os arquivos .cpp e .h e não sabe como compilar o projeto, abaixo vamos explicar:
Na pasta onde está localizado os arquivos .cpp e .h crie uma pasta chamada dev-cpp, e dentro dela adicione uma imagem icone.
Abra o DEV-C++, clique em File> New> Project:
Logo em seguida selecione Empty Project, em name terá o nome Project1 altere utilize o nome quer quiser, após isso clique em OK e em seguida selecione a pasta dev-cpp que criamos:
Agora selecione a opção Win32GUI caso use source OTX ou TFS selecione Win32Console ao lado << Browse selecione a imagem do icone que está na pasta Dev-Cpp.
No mesmo menu na aba Parameters em C++ compiler adicione os seguintes parâmetros:
-D__ENABLE_SERVER_DIAGNOSTIC__ -D__ROOT_PERMISSION__ -D__GROUND_CACHE__ -D__USE_SQLITE__ -D__USE_MYSQL__ -D__CONSOLE__ -D__WAR_SYSTEM__ E em Linker adicione as seguintes libs:
-lboost_filesystem -lboost_thread -lboost_system -lboost_regex -lsqlite3 -lwsock32 -llua5.1 -lws2_32 -leay32 -lmysql -lxml2 -lgmp -lz -s No mesmo Menu na aba Build Option escreva na segunda coluna horizontal escreva Obj e dê OK. Na lateral terá o nome do seu projeto o meu no caso é The Forgotten Server, clique com o botão direito do mouse em cima do nome e clique na opção Add Project: Selecione na pasta da sua source todos os arquivos .cpp e .h após isso salva o projeto e já pode compilar CTRL+F9: OpenSSL 0.9.8 1º baixe http://devpaks.org/details.php?devpak=73 2° abra Dev-Cpp > Tools > Packager Manager > Install > Seleciona o arquivo baixado e instala, fecha abre e testa!
Clica aqui \/ -
s0beit deu reputação a tev em Mostrar a quantidade que morreu e que matou ao dar look no playerTESTADO EM TFS 0.4 E 0.6, PEÇO PARA QUE TESTEM EM OUTRAS VERSÕES, POR FAVOR.
Prévia;
Crie um arquivo KillsandDeath.lua
function onLook(cid, thing, position, lookDistance) function getDeathsAndKills(cid, type) -- by vodka local query,d = db.getResult("SELECT `player_id` FROM "..(tostring(type) == "kill" and "`player_killers`" or "`player_deaths`").." WHERE `player_id` = "..getPlayerGUID(cid)),0 if (query:getID() ~= -1) then repeat d = d+1 until not query:next() query:free() end return d end if isPlayer(thing.uid) then doPlayerSetSpecialDescription(thing.uid, "\n"..(getPlayerSex(thing.uid) == 0 and "She" or "He").." has Killed: ["..getDeathsAndKills(thing.uid, "kill").."] Players.\n"..(getPlayerSex(thing.uid) == 0 and "She" or "He").." has Died: ["..getDeathsAndKills(thing.uid, "death").."] Times") end return true end No creaturescript.xml, coloque:
<event type="look" name="showKD" event="script" value="KillsandDeath.lua"/> Em creaturescript/script/login.lua, coloque:
registerCreatureEvent(cid, "showKD") Script disponibilizado por Critico.
Tópico organizado por mim.
Abraços!
-
s0beit deu reputação a tev em Mensagem no Broadcast quando player atinge Level xIntrodução: Aparecer uma mensagem no Broadcast quando player atingisse x level.
Créditos: LuckOake
Crie um arquivo chamado broadcastlevel.lua em creaturescripts\scripts
function isInteger(n) return math.floor(n) == n and true or false end function onAdvance(cid, skill, oldLevel, newLevel) if isInteger(newLevel/100) then broadcastMessage("O jogador "..getCreatureName(cid).." atingiu o level "..newLevel..".") end return true end login.lua (antes do último return true):
registerCreatureEvent(cid, "BroadcastLevel") creaturescripts.xml:
<event type="advance" name="BroadcastLevel" script="broadcastlevel.lua"/> Abraços!
-
s0beit recebeu reputação de gmdouglas em PROBLEMA NAS VOCAÇÕEScara druid tem o poder de cura melhor do que sorcerer, e sorcerer bate mais nas magias do que druid...
esta certo essa configuração, e isso deve ser mudado na source do ot
-
s0beit deu reputação a Bruno Carvalho em DelayNós migramos recentemente eu também notei um delay maior, tentarei averiguar o problema...
Hoje eu atualizei o fórum para a versão mais recente, houve alguma melhora no problema?
-
s0beit recebeu reputação de kadon em BAIAKNEW+SOURCE//BASE DO BAIAKNEW (8.60)OT BOM VLW VOU USAR OS SISTEMAS
e kadon é só vc criar mano ou pega de outro ot e coloca
-
s0beit deu reputação a Chriistian em Ebaiak - Retro ServerOlá galera do Tibia King, hoje venho apresentar meu projeto, venho trabalhando nele a pouco tempo então ainda falta algumas coisinhas para se fazer, mais podem ter certeza que sairá do papel e ficara online para todos jogarem ! Bom todo mundo que joga Otserver sempre jogou o mapa Yurots Baiak, então decidi fazer um remake no mapa do mesmo, deixando o mais bonito e jogável para todos com grandes sistemas, quests etc...
Veja algumas imagens e sistemas abaixo:
Contamos com sistemas como:
- War System (100%) - Task System (99%) - BattleField Event (100%) - War of Emperium. (100%) - Cast System (100%) - Quests (80%) - Castle 24Hrs (100%) Deixe sua sugestao para nosso servidor, o que você gostaria de ver nele, o que acha que deveria mudar e os pontos mais importantes de um Mapa Baiak Yurots que você acha e gostaria de ver em nosso servidor !
Att,
Equipe Etibia.