Ir para conteúdo
Banner com Efeitos

roach95

Membro
  • Registro em

  • Última visita

Tudo que roach95 postou

  1. Preciso de ajuda nesse script: ali onde está config.pos, eu queria configurar desse jeito: eu coloco a pos da alavanca, igual está ali, e la nos doSummon as position assim pos X + 1, pos Y + 1 // pos X - 1 , pos Y - 1 pra não ter que fazer tudo manual, alguém me ajuda? local config = { pos = {x=608, y=602, z=10}, reset = 120 } local function reset(pos) local thing = getTileItemById(pos, 1946).uid return thing > 0 and doTransformItem(thing, 1945) end function onUse(cid, item, fromPosition, itemEx, toPosition) if(item.itemid == 1945) then doSummonCreature(Dawnfire Asura, config.pos) -- doSummonCreature(Dawnfire Asura, config.pos) -- doSummonCreature(Dawnfire asura, config.pos) -- doSummonCreature(Dawnfire asura, config.pos) -- doSummonCreature(Midnight Asura, config.pos) -- doSummonCreature(Midnight Asura, config.pos) -- doSummonCreature(Midnight Asura, config.pos) -- doSummonCreature(Midnight Asura, config.pos) -- addEvent(reset, config.reset * 1000, fromPosition) return TRUE end return FALSE end Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui.
  2. roach95 postou uma resposta no tópico em Suporte Tibia OTServer
    Bom dia, gostaria que alguém me ajudasse com um boss, eu quero que ele a cada 2 minutos, mude o outfit dele pra um morgaroth e não receba dano nenhum enquanto estiver com o outfit de morgaroth durante 15 segundos, após os 15 segundos ele volta ao outfit normal e pode levar danos novamente. tfs 0.4
  3. Boa noite pessoal, andei procurando sobre scripts de extra exp pra party e li algo sobre creaturescript, que pode ser feito etc Gostaria que fosse assim: Ex: 1 monstro da 1000 de exp, quando é morto por 1 player sozinho (todos os monstros, não um monstro específico) Se estiver na party com 2 players, não quero vocação quero quantidade de players, esse mesmo monstro está dando atualmente 500 de exp para ambos. Eu quero que seje diferente, porém configurável. 2 players: +40% de exp 3 players: +80% de exp 4 players ou mais: +100% de exp No exemplo do monstro que dá 1000 de exp ficaria assim: 2 players: 1000 xp / 2 players = 500 de exp + 40% bonus = 700 de xp 3 players: 1000 xp / 3 players = 333 de exp + 80% bonus = 599 de xp 4 players ou mais: 1000 xp / 4 players = 250 de exp + 100% bonus = 500 de xp TFS 0.4
  4. roach95 postou uma resposta no tópico em Suporte Tibia OTServer
    Opa, to tentando criar uma nova bp a partir de alguns itens que ja existem no servidor, mas o seguinte, quando eu coloco no ot item editor container, ele aparece no cliente look, open, open in new windows etc, porém quando manda abrir fala q nao posso usar o objeto, unica maneira de eu fazer o item é clonar uma bp existente por exemplo, e aumentar os slots dela no items.xml alguem sabe solução?
  5. @Luis360 muito obrigado Luis, resolveu meu problema
  6. Boa tarde, galera preciso de ajuda. Possuo um boss no meu ot e ele dropa 1 item que funciona (na minha cabeça por enquanto) da seguinte forma: o player mata o boss, pega o item, coloca num altar (x, y, z) e do lado do altar possui uma alavanca, ao usar a alavanca o item do altar é sacrificado e o teleport é criado com uma duração de 5 minutos (configurável), depois dos 5 minutos o tp some, sendo necessário matar o boss novamente. edit: não precisa necessariamente criar o teleport, pode ser também com o teleport ali pronto via map editor, porém inacessível, uma parede, um obstáculo, enfim, dai por 5 minutos o script remove o obstáculo e depois coloca no lugar de volta. tfs 0.4 , ot 8.6
  7. to com o mesmo problema, tem algum tutorial aqui no fórum de como fazer isso? já procurei várias e várias vezes e até agora nada
  8. roach95 postou uma resposta no tópico em Suporte OTServer Derivados
    Opa, baixei o object builder 0.4.5 na github oficial, instalei normalmente, consigo abrir o cliente e modificar, porém na hora de compilar o novo tibia.exe ele faz a compilação porém não compila, simplesmente não aparece o novo tibia na pasta. Alguém tem alguma informação?
  9. o título do tópico é bem auto explicativo, toda vez que faço algumas modificações no meu client o obj builder compila o novo cliente com MUITO virus, o que fazer pra resolver? até formatei o computador e deixei no seco pra ver se era o pc e deu na mesma situação.
  10. tu não tem um system desse que o player pode escolher a task que quer? por exemplo o grizzly do global?
  11. Galera boa noite, olha só a maluquice do meu map editor.. primeiramente quero dizer que peguei os items.xml e items.otbm do meu ot e colei no diretório 8.60 do map editor pra poder colocar os itens novos a mostra no map, já pra nao haver divergências, porém estou tendo alguns problemas com as portas: olhem só: no map editor: Sinceramente não entendi o que acontece, pois o map editor está com o mesmo items.xml e items.otbm do meu ot, por que faz essa troca eu não sei, alguém pode dar uma ajuda? No terceiro print a porta que fiz na frente do Admin, fiz pelo /i, respeitando o mesmo id que coloquei na porta do map editor, 5101 como vcs podem ver...
  12. Galera procuro um sistema de task, "igual do global", podendo repetir as tasks com reward item, fazer 3~5 tasks ao mesmo tempo (configurável), para tfs 0.4 e com !task para fazer a contagem, ou então quando matar o monstro escolhido da task aparecer mensagem "Voce matou 1/1000 dragon lords" e assim por diante, por exemplo... procurei procurei e procurei aqui no fórum e não encontrei do jeito que procuro. Se alguém puder ajudar agradeço. Ot 8.6
  13. roach95 postou uma resposta no tópico em Suporte Tibia OTServer
    agradecido, Wakon, resolveu meu problema, ficou perfeito!
  14. roach95 postou uma resposta no tópico em Suporte Tibia OTServer
    consegue me fazer a gentileza de ajeitar o script pros ids que postei ali em cima hahaha? preciso que a alavanca 12664 se transforme na 12665 após os 30 minutos, tentei ajeitar aqui mas sem sucesso..
  15. roach95 postou uma resposta no tópico em Suporte Tibia OTServer
    Opa, alguém pode dar uma maozinha? eu clonei dois ids de alavancas pra fazer 1 summon especial, funciona assim: 12665: sumona o monstro e transforma essa alavanca (12665) em outra alavanca sem action (12664), pra não poder sumonar mais, até aí tudo bem, ela sumona o bicho, transforma a alavanca sumonável na outra não sumonável. Porém... Coloquei nos items.xml 12664 (sem action) duration de 30 minutos e então ela se transformaria na alavanca 12665 (sumonável), porém a alavanca fica ali eternamente, até reduzi o tempo pra 1 minuto pra poder testar certinho, ela fica lá. A duration dela não está contando, como se fosse um time ring por exemplo, dentro da bp. Minha dúvida é o seguinte, como eu faço essa alavanca virar a outra? Tentei fazer o mesmo sistema dos firebomb runes, com decayto, duration, sem sucesso também.
  16. roach95 postou uma resposta no tópico em Suporte Tibia OTServer
    consegue me dar uma luz nisso? entendo nada de source, lua até vai, mas essas sources sao um terror rsrs
  17. roach95 postou uma resposta no tópico em Suporte Tibia OTServer
    infelizmente nao resolveu, quando tenho uma party com apenas 4 chars, 1 de cada voc até resolve, fica os 50% da exp que eu gostaria que ficasse, porem, fiz uma party com 10 players e eles estão ganhando apenas 25% da exp total do bicho, tambem tinha as 4 vocações, sozinho o bicho dava 3000 de exp, matava de shared, ganhava apenas 750.
  18. roach95 postou uma resposta no tópico em Suporte Tibia OTServer
    pessoal to querendo mexer na party.cpp, quero implementar no ot um sistema de exp diferenciado, meio que induzindo os players a caçarem de party ( em grande numero pois tenho uns bichos tenebrosos no servidor ), queria que ao matar um bicho em 4 vocações, independente de quantos chars estejam na party, a exp do bicho chegaria ficaria em 50% pra todos os players, exemplo: 1 ek sozinho mata um dragon, ganha 1000 de exp 4 vocs matam um dragon de shared exp, ganhando 500 de exp e o que eu quero é o seguinte, se tiver 15 ou 20 chars na party, os ganharão os 500 de exp do dragon aqui no ot quanto mais players vai tendo, menos xp vao ganhando, até os 4 chars ta beleza, passou disso ta ganhando muito pouco alguem pode ajudar? aqui está meu party.cpp /** * The Forgotten Server - a free and open-source MMORPG server emulator * Copyright (C) 2016 Mark Samman <mark.samman@gmail.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "otpch.h" #include "party.h" #include "game.h" #include "configmanager.h" #include "events.h" extern Game g_game; extern ConfigManager g_config; extern Events* g_events; Party::Party(Player* leader) { this->leader = leader; leader->setParty(this); } void Party::disband() { if (!g_events->eventPartyOnDisband(this)) { return; } Player* currentLeader = leader; leader = nullptr; currentLeader->setParty(nullptr); currentLeader->sendClosePrivate(CHANNEL_PARTY); g_game.updatePlayerShield(currentLeader); g_game.updatePlayerHelpers(*currentLeader); currentLeader->sendCreatureSkull(currentLeader); currentLeader->sendTextMessage(MESSAGE_INFO_DESCR, "Your party has been disbanded."); for (Player* invitee : inviteList) { invitee->removePartyInvitation(this); currentLeader->sendCreatureShield(invitee); } inviteList.clear(); for (Player* member : memberList) { member->setParty(nullptr); member->sendClosePrivate(CHANNEL_PARTY); member->sendTextMessage(MESSAGE_INFO_DESCR, "Your party has been disbanded."); } for (Player* member : memberList) { g_game.updatePlayerShield(member); for (Player* otherMember : memberList) { otherMember->sendCreatureSkull(member); } member->sendCreatureSkull(currentLeader); currentLeader->sendCreatureSkull(member); g_game.updatePlayerHelpers(*member); } memberList.clear(); delete this; } bool Party::leaveParty(Player* player) { if (!player) { return false; } if (player->getParty() != this && leader != player) { return false; } if (!g_events->eventPartyOnLeave(this, player)) { return false; } bool missingLeader = false; if (leader == player) { if (!memberList.empty()) { if (memberList.size() == 1 && inviteList.empty()) { missingLeader = true; } else { passPartyLeadership(memberList.front()); } } else { missingLeader = true; } } //since we already passed the leadership, we remove the player from the list auto it = std::find(memberList.begin(), memberList.end(), player); if (it != memberList.end()) { memberList.erase(it); } player->setParty(nullptr); player->sendClosePrivate(CHANNEL_PARTY); g_game.updatePlayerShield(player); g_game.updatePlayerHelpers(*player); for (Player* member : memberList) { member->sendCreatureSkull(player); player->sendPlayerPartyIcons(member); g_game.updatePlayerHelpers(*member); } leader->sendCreatureSkull(player); player->sendCreatureSkull(player); player->sendPlayerPartyIcons(leader); player->sendTextMessage(MESSAGE_INFO_DESCR, "You have left the party."); updateSharedExperience(); updateVocationsList(); clearPlayerPoints(player); std::ostringstream ss; ss << player->getName() << " has left the party."; broadcastPartyMessage(MESSAGE_INFO_DESCR, ss.str()); if (missingLeader || empty()) { disband(); } return true; } bool Party::passPartyLeadership(Player* player) { if (!player || leader == player || player->getParty() != this) { return false; } //Remove it before to broadcast the message correctly auto it = std::find(memberList.begin(), memberList.end(), player); if (it != memberList.end()) { memberList.erase(it); } std::ostringstream ss; ss << player->getName() << " is now the leader of the party."; broadcastPartyMessage(MESSAGE_INFO_DESCR, ss.str(), true); Player* oldLeader = leader; leader = player; memberList.insert(memberList.begin(), oldLeader); updateSharedExperience(); for (Player* member : memberList) { member->sendCreatureShield(oldLeader); member->sendCreatureShield(leader); } for (Player* invitee : inviteList) { invitee->sendCreatureShield(oldLeader); invitee->sendCreatureShield(leader); } leader->sendCreatureShield(oldLeader); leader->sendCreatureShield(leader); player->sendTextMessage(MESSAGE_INFO_DESCR, "You are now the leader of the party."); return true; } bool Party::joinParty(Player& player) { if (!g_events->eventPartyOnJoin(this, &player)) { return false; } auto it = std::find(inviteList.begin(), inviteList.end(), &player); if (it == inviteList.end()) { return false; } inviteList.erase(it); std::ostringstream ss; ss << player.getName() << " has joined the party."; broadcastPartyMessage(MESSAGE_INFO_DESCR, ss.str()); player.setParty(this); g_game.updatePlayerShield(&player); for (Player* member : memberList) { member->sendCreatureSkull(&player); player.sendPlayerPartyIcons(member); } player.sendCreatureSkull(&player); leader->sendCreatureSkull(&player); player.sendPlayerPartyIcons(leader); memberList.push_back(&player); g_game.updatePlayerHelpers(player); player.removePartyInvitation(this); updateSharedExperience(); updateVocationsList(); const std::string& leaderName = leader->getName(); ss.str(std::string()); ss << "You have joined " << leaderName << "'" << (leaderName.back() == 's' ? "" : "s") << " party. Open the party channel to communicate with your companions."; player.sendTextMessage(MESSAGE_INFO_DESCR, ss.str()); return true; } bool Party::removeInvite(Player& player, bool removeFromPlayer/* = true*/) { auto it = std::find(inviteList.begin(), inviteList.end(), &player); if (it == inviteList.end()) { return false; } inviteList.erase(it); leader->sendCreatureShield(&player); player.sendCreatureShield(leader); if (removeFromPlayer) { player.removePartyInvitation(this); } if (empty()) { disband(); } else { for (Player* member : memberList) { g_game.updatePlayerHelpers(*member); } g_game.updatePlayerHelpers(*leader); } return true; } void Party::revokeInvitation(Player& player) { std::ostringstream ss; ss << leader->getName() << " has revoked " << (leader->getSex() == PLAYERSEX_FEMALE ? "her" : "his") << " invitation."; player.sendTextMessage(MESSAGE_INFO_DESCR, ss.str()); ss.str(std::string()); ss << "Invitation for " << player.getName() << " has been revoked."; leader->sendTextMessage(MESSAGE_INFO_DESCR, ss.str()); removeInvite(player); } bool Party::invitePlayer(Player& player) { if (isPlayerInvited(&player)) { return false; } std::ostringstream ss; ss << player.getName() << " has been invited."; if (memberList.empty() && inviteList.empty()) { ss << " Open the party channel to communicate with your members."; g_game.updatePlayerShield(leader); leader->sendCreatureSkull(leader); } leader->sendTextMessage(MESSAGE_INFO_DESCR, ss.str()); inviteList.push_back(&player); for (Player* member : memberList) { g_game.updatePlayerHelpers(*member); } g_game.updatePlayerHelpers(*leader); leader->sendCreatureShield(&player); player.sendCreatureShield(leader); player.addPartyInvitation(this); ss.str(std::string()); ss << leader->getName() << " has invited you to " << (leader->getSex() == PLAYERSEX_FEMALE ? "her" : "his") << " party."; player.sendTextMessage(MESSAGE_INFO_DESCR, ss.str()); return true; } bool Party::isPlayerInvited(const Player* player) const { return std::find(inviteList.begin(), inviteList.end(), player) != inviteList.end(); } void Party::updateAllPartyIcons() { for (Player* member : memberList) { for (Player* otherMember : memberList) { member->sendCreatureShield(otherMember); } member->sendCreatureShield(leader); leader->sendCreatureShield(member); } leader->sendCreatureShield(leader); } void Party::broadcastPartyMessage(MessageClasses msgClass, const std::string& msg, bool sendToInvitations /*= false*/) { for (Player* member : memberList) { member->sendTextMessage(msgClass, msg); } leader->sendTextMessage(msgClass, msg); if (sendToInvitations) { for (Player* invitee : inviteList) { invitee->sendTextMessage(msgClass, msg); } } } void Party::broadcastPartyLoot(const std::string& loot) { leader->sendTextMessage(MESSAGE_INFO_DESCR, loot); for (Player* member : memberList) { member->sendTextMessage(MESSAGE_INFO_DESCR, loot); } } void Party::updateSharedExperience() { if (sharedExpActive) { bool result = canEnableSharedExperience(); if (result != sharedExpEnabled) { sharedExpEnabled = result; updateAllPartyIcons(); } } } void Party::updateVocationsList() { std::set<uint32_t> vocationIds; uint32_t vocationId = leader->getVocation()->getFromVocation(); if (vocationId != VOCATION_NONE) { vocationIds.insert(vocationId); } for (const Player* member : memberList) { vocationId = member->getVocation()->getFromVocation(); if (vocationId != VOCATION_NONE) { vocationIds.insert(vocationId); } } size_t size = vocationIds.size(); if (size > 1) { extraExpRate = static_cast<float>(size * (10 + (size - 1) * 5)) / 100.f; } else { extraExpRate = 0.20f; } } bool Party::setSharedExperience(Player* player, bool sharedExpActive) { if (!player || leader != player) { return false; } if (this->sharedExpActive == sharedExpActive) { return true; } this->sharedExpActive = sharedExpActive; if (sharedExpActive) { this->sharedExpEnabled = canEnableSharedExperience(); if (this->sharedExpEnabled) { leader->sendTextMessage(MESSAGE_INFO_DESCR, "Shared Experience is now active."); } else { leader->sendTextMessage(MESSAGE_INFO_DESCR, "Shared Experience has been activated, but some members of your party are inactive."); } } else { leader->sendTextMessage(MESSAGE_INFO_DESCR, "Shared Experience has been deactivated."); } updateAllPartyIcons(); return true; } void Party::shareExperience(uint64_t experience, Creature* source/* = nullptr*/) { uint32_t shareExperience = static_cast<uint64_t>(std::ceil(((static_cast<double>(experience) / (memberList.size() + 1)) + (static_cast<double>(experience) * extraExpRate)))); for (Player* member : memberList) { member->onGainSharedExperience(shareExperience, source); } leader->onGainSharedExperience(shareExperience, source); } bool Party::canUseSharedExperience(const Player* player) const { if (memberList.empty()) { return false; } uint32_t highestLevel = leader->getLevel(); for (Player* member : memberList) { if (member->getLevel() > highestLevel) { highestLevel = member->getLevel(); } } uint32_t minLevel = static_cast<int32_t>(std::ceil((static_cast<float>(highestLevel) * 2) / 3)); if (player->getLevel() < minLevel) { return false; } if (!Position::areInRange<30, 30, 1>(leader->getPosition(), player->getPosition())) { return false; } if (!player->hasFlag(PlayerFlag_NotGainInFight)) { //check if the player has healed/attacked anything recently auto it = ticksMap.find(player->getID()); if (it == ticksMap.end()) { return false; } uint64_t timeDiff = OTSYS_TIME() - it->second; if (timeDiff > static_cast<uint64_t>(g_config.getNumber(ConfigManager::PZ_LOCKED))) { return false; } } return true; } bool Party::canEnableSharedExperience() { if (!canUseSharedExperience(leader)) { return false; } for (Player* member : memberList) { if (!canUseSharedExperience(member)) { return false; } } return true; } void Party::updatePlayerTicks(Player* player, uint32_t points) { if (points != 0 && !player->hasFlag(PlayerFlag_NotGainInFight)) { ticksMap[player->getID()] = OTSYS_TIME(); updateSharedExperience(); } } void Party::clearPlayerPoints(Player* player) { auto it = ticksMap.find(player->getID()); if (it != ticksMap.end()) { ticksMap.erase(it); updateSharedExperience(); } } bool Party::canOpenCorpse(uint32_t ownerId) const { if (Player* player = g_game.getPlayerByID(ownerId)) { return leader->getID() == ownerId || player->getParty() == this; } return false; }
  19. ah sim, esqueci de falar isso rsrs, obrigado por lembrar
  20. uma duvida, no meu site eu coloco os valores? por exemplo, quero doar 50 reais, preciso de um link especifico para 50,00 ou deixo em aberto no pagseguro? no pagseguro tem uma opçao de doaçao, que o cliente doa a quantia que quiser, como funciona essa parte?
  21. Olá, os players no meu ot estão pegando pk ao atacar os summons de outro, aonde removo isso? procurei em creaturescript mas não tem nada sobre isso la. alguém poderia ajudar?
  22. sim, os antigos ficaram com o regen antigo, todo mundo com as mesmas vocs tudo, resolvido via sql. solução: feche o ot, remova todas as conditions dos players no seu phpmyadmin e seja feliz
  23. isso eu ja fiz, ele altera somente pros proximos players criados, nao pros antigos

Informação Importante

Confirmação de Termo