Ir para conteúdo

Tony Araujo

Visconde
  • Total de itens

    436
  • Registro em

  • Última visita

  • Dias Ganhos

    17

Tony Araujo venceu a última vez em Março 22

Tony Araujo had the most liked content!

Sobre Tony Araujo

  • Rank
    OrochiElf

Perfil

  • Gênero
    Masculino

Informações

  • Forma que conheci o xTibia
    Sites de Busca
  • Sou
    Programador

Últimos Visitantes

3.580 visualizações
  1. Eai galera, tranquilo? Ontem aconteceu do meu servidor dar um crash, na hora do save, que eu não tinha visto ainda. Porém, não é em todo save, o servidor vai salvando normalmente, porém chega uma hora que ele crasha. Ele deu o local no gdb do linux, porém a linha do crash é apenas uma query como várias outras, sem nada de especial. Linha: query << "DELETE FROM `player_caughts` WHERE `player_id` = " << player->getGUID(); Função: // Save Caught query.str(""); query << "DELETE FROM `player_caughts` WHERE `player_id` = " << player->getGUID(); if(!db->executeQuery(query.str())) return false; query_insert.setQuery("INSERT INTO `player_caughts` (`player_id`, `pokename`, `catched`, `balltype`, `pokeball`, `greatball`, `superball`, `ultraball`, `saffariball`) VALUES "); for(PokeBallsMap::iterator it = player->pokeBallsMap.begin(); it != player->pokeBallsMap.end(); ++it) { sprintf(buffer, "%u, %s, %u, %u, %u, %u, %u, %u, %u", player->getGUID(), db->escapeString(it->first).c_str(), it->second.catched, it->second.ball, it->second.poke, it->second.great, it->second.super, it->second.ultra, it->second.saffari); if(!query_insert.addRow(buffer)) return false; } if(!query_insert.execute()) return false; Erro:
  2. E seguimos mais um dia no Beta Test. Vai ficar de fora dessa?
  3. Fala galera, tranquilão? Bom, hoje eu to aqui pra apresentar pra vocês o meu xodó. O projeto no qual já trabalho tem 4 anos, e de muita luta e sofrimento kkkkkkk, afinal, passamos por trancos e barrancos. Foi um servidor que eu pensei em fazer diferente, a forma que ele funcionava. Trabalhei em cima de uma source até eu criar a minha própria, voltada completamente para pokémon, para ter um melhor desempenho, tirando todas as funções do tibia e deixando o servidor bem mais leve. Bom, vamos falar exatamente o que é o oldPokemon. Eu criei esse servidor, junto com meu primo João, na ideia de trazer o oldschool do poketibia de volta a vida. Eu vejo muita gente comentando em vários forums / canais de poketibia / grupos do fb, que sentem saudades do antigo SvkE, e olha, eu também sentia, então foi de onde partimos nessa dura jornada de trazer um servidor que fosse fielmente o SvkE, porém com vários sistemas novos e funções inovadoras em nosso client e servidor. É com grande alegria que compartilho com vocês o Beta Test deste servidor, após uma longa caminhada. Algumas imagens do servidor: O servidor está contando com os seguintes sistemas: E MUITO MAIS! Para criar a conta, basta entrar no 1/1 e criar pelo Account Manager. Discord Link: https://discord.gg/uT2v4X Download Link: https://www.dropbox.com/s/r1mgoh052idvhkd/oldPokemon Player.rar?dl=0 https://www.mediafire.com/file/u3wsjv2mmo4fu0u/oldPokemon_Player.rar/file
  4. É aquela tag <flag hostile="0"/> do monster, se for 0, ele é passivo
  5. Obrigado por contribuir com o código brother ❤️
  6. De nada brother. Eu lembro, tinha um tutorial antigo, porém eu vi muita gente tendo muita dificuldade pra instalar, e o código também tava um pouco confuso. Daí resolvi postar esse aqui pra galera Temos sim brother kkkkk, www.facebook.com/oldPokemonOT inclusive to fazendo open test nele hoje. Se quiser aparecer por lá. Volta as 17h Obrigado mano ;D
  7. [C++] Monsters Passive System testado: TFS - 0.3.6 (porém acredito que funcione em outros) autor: Tony Araújo (OrochiElf) Eai galera, tranquilão? Estou eu aqui novamente, e hoje eu vou compartilhar com vocês um sistema que eu vejo muitas pessoas pedindo e buscando ajuda (principalmente no meu inbox kkkkk), seria ele o sistema de monstros passivos, que consiste naquela criatura que só ataca o jogador que o atacou, caso contrário ele fica andando normalmente. O sistema foi desenvolvido em cima do código do TFS 0.3.6, porém caso instale prestando bastante atenção em outras versões, funcione, talvez seja necessário mudar algum código, porém bem simples. Bom, vamos ao sistema. Em creature.cpp, procure pela função: bool Creature::setAttackedCreature(Creature* creature) E altere esta condição: if(attackedCreature) { onAttackedCreature(attackedCreature); attackedCreature->onAttacked(); } Por esta: if(attackedCreature) { onAttackedCreature(attackedCreature); attackedCreature->onAttacked(); attackedCreature->addDamagePoints(this, 0); } Procure pela função: void Creature::addDamagePoints(Creature* attacker, int32_t damagePoints) E troque por esta: Agora vá em monster.cpp e procure pela função: void Monster::onThink(uint32_t interval) E dentro dela, procure pela condição: else if(!targetList.empty()) E troque por esta: else if(!targetList.empty()) { if(!followCreature || !hasFollowPath) searchTarget(); } Procure pela função: bool Monster::selectTarget(Creature* creature) E troque por esta: Bom galera, espero que gostem e que façam bom uso. Qualquer bug ou problema, comenta aí pra eu resolver.
  8. Não dá pra colocar um item unique de dentro de uma bag pra outra
  9. Obrigado por contribuir brother, a outra parte eu fiz aqui e vou atualizar o tópico junto com sua contribuição. ;D @TOPICO - ATUALIZADO! Removido todos os bugs encontrados. O personagem não pode negociar bags que contenham unique items dentro. O personagem não pode por um unique tem dentro de uma bag que esteja no chão, só poderá guardar dentro do depot. O personagem não pode jogar fora uma bag que contenham unique items dentro. Adicionado imagens de todas as funções do sistema.
  10. Muito bem lembrado, vou adicionar a condição pertencente a isso. Muito obrigado brow! @Tópico Editado e adicionado a condição. Adicionado imagens do funcionamento.
  11. [C++] Unique Item System testado: TFS - 0.3.6 (porém acredito que funcione em outros) autor: Tony Araújo (OrochiElf) contribuição: gristony Olá galera, beleza? Então, tem tanto tempo que eu não faço minhas contribuições e hoje eu resolvi postar um sistema bastante simples, porém de extrema necessidade e importância nos servidores que dão items iniciais aos jogadores, especialmente os poketibias. Então com esse sistema o jogador fica impossibilitado de jogar o item fora e também de fazer trocas com outros jogadores, sendo literalmente únicos. Eu criei ele em cima do código do TFS 0.3.6, porém é um sistema com o código completamente simples, então acredito que se instalado atentamente em outras versões, funcione sem problemas. Bom, sem mais delongas vamos ao que interessa. Vá ao game.cpp e procure por esta função: bool Game::playerMoveItem(uint32_t playerId, const Position& fromPos, uint16_t spriteId, int16_t fromStackpos, const Position& toPos, uint8_t count) Então, dentro desta mesma função, você procura por esta condição aqui. if(!player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { if((std::abs(playerPos.x - mapToPos.x) > item->getThrowRange()) || (std::abs(playerPos.y - mapToPos.y) > item->getThrowRange()) || (std::abs(mapFromPos.z - mapToPos.z) * 4 > item->getThrowRange())) { player->sendCancelMessage(RET_DESTINATIONOUTOFREACH); return false; } } E logo abaixo adicione esta condição: Item* tmpItem = NULL; Container* tmpContainer = NULL; if(tmpContainer = item->getContainer()) { for(ContainerIterator it = tmpContainer->begin(); it != tmpContainer->end(); ++it) { if(tmpItem = (*it)->getItem()) { boost::any value = tmpItem->getAttribute("unique"); if(!value.empty() && getMap()->getTile(toPos)) { player->sendCancel("Has a unique item in this bag, you can't drop this item."); return false; } } } } boost::any value = item->getAttribute("unique"); if(!value.empty() && (!toCylinder->getItem() && toCylinder != player && toCylinder->getParent() != player || toCylinder->getItem() && toCylinder->getItem()->isGroundTile() || toCylinder->getItem() && toCylinder->getItem()->getContainer() && !toCylinder->getItem()->getContainer()->getDepot() && toCylinder->getItem()->getParent() != player)) { player->sendCancel("It is a unique item, you can't drop this item."); return false; } Certo. Continuando no game.cpp, você vai procurar pela função: ReturnValue Game::internalMoveItem(Creature* actor, Cylinder* fromCylinder, Cylinder* toCylinder, int32_t index, Item* item, uint32_t count, Item** _moveItem, uint32_t flags /*= 0*/) Dentro da função, você procura pela condição: //update item(s) if(item->isStackable()) E troque por esta: //update item(s) if(item->isStackable()) { if(toItem && toItem->getID() == item->getID()) { boost::any item_value = item->getAttribute("unique"); boost::any toItem_value = toItem->getAttribute("unique"); if(!item_value.empty() && !toItem_value.empty() || item_value.empty() && toItem_value.empty()) { n = std::min((uint32_t)100 - toItem->getItemCount(), m); toCylinder->__updateThing(toItem, toItem->getID(), toItem->getItemCount() + n); updateItem = toItem; } } if(m - n > 0) { moveItem = Item::CreateItem(item->getID(), m - n); boost::any value = item->getAttribute("unique"); if(!value.empty()) moveItem->setAttribute("unique", 1); } else moveItem = NULL; if(item->isRemoved()) freeThing(item); } Sem sair do game.cpp, você procura pela função: bool Game::playerRequestTrade(uint32_t playerId, const Position& pos, int16_t stackpos, uint32_t tradePlayerId, uint16_t spriteId) Dentro dela, você procura pela condição: if(!tradeItem || tradeItem->getClientID() != spriteId || !tradeItem->isPickupable() || (tradeItem->isLoadedFromMap() && (tradeItem->getUniqueId() != 0 || (tradeItem->getActionId() != 0 && tradeItem->getContainer())))) { player->sendCancelMessage(RET_NOTPOSSIBLE); return false; } E logo abaixo você adiciona a condição: boost::any value = tradeItem->getAttribute("unique"); if(!value.empty()) { player->sendTextMessage(MSG_INFO_DESCR, "It is a unique item, you can't trade this item."); return false; } Item* tmpItem = NULL; Container* tmpContainer = NULL; if(tmpContainer = tradeItem->getContainer()) { for(ContainerIterator it = tmpContainer->begin(); it != tmpContainer->end(); ++it) { if(tmpItem = (*it)->getItem()) { boost::any value = tmpItem->getAttribute("unique"); if(!value.empty()) { player->sendTextMessage(MSG_INFO_DESCR, "Has a unique item in this bag, you can't trade this item."); return false; } } } } Pronto, seu sistema de unique está instalado e pronto para ser utilizado. Para você setar o item unique, basta: doItemSetAttribute(item.uid, "unique", 1) Algumas imagens Bom, é isso galera, espero que gostem e façam bom proveito. ;D
  12. Ele tá dando esse erro aqui quando ele termina de compilar. O que pode ser?
  13. Eai galera do Eks, tudo bão? Quanto tempo que eu não venho por esses lados, saudades xD Bom, sem muita enrolação, eu vim postar pra vocês o sistema de auto loot que eu fiz aqui rapidinho (literalmente, 10 mins), porém que ficou bem bacana. É aquele esquema, você coleta o loot quando abre o corpo do bicho morto. Está bem simples, porém funcional. Eu pesquisei a respeito, pra ter uma ideia e não encontrei nenhum que tivesse com um código legal, todos estavam bem antigos. Eu não tive muito tempo testando, então caso encontrem qualquer bug, me avise pfv. function onUse(cid, item, fromPosition, itemEx, toPosition) if getItemAttribute(item.uid, "corpseowner") ~= cid then return doPlayerSendCancel(cid, "You're not the owner.") end local items = {} for i = 0, getContainerSize(item.uid) do local it = getContainerItem(item.uid, i) if it.uid > 0 then table.insert(items, {it.itemid, it.type}) doRemoveItem(it.uid) end end if #items > 0 then for k = 1, #items do local playerItem = getPlayerItemById(cid, true, items[k][1]) if playerItem.uid > 0 then if (playerItem.type + items[k][2]) > 100 then doPlayerAddItem(cid, items[k][1], (playerItem.type + items[k][2]) - 100) doTransformItem(playerItem.uid, items[k][1], 100) else doTransformItem(playerItem.uid, items[k][1], playerItem.type + items[k][2]) end else doPlayerAddItem(cid, items[k][1], items[k][2]) end end return true end return false end
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...