Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Em 05/11/2015 16:24:11, Golf disse:

Cara nessa Distro tem o bug de clonar items por !disband, como faço pra arrumar ?

outra duvida sei eu copilar o tfs em um windos 64 bits, o tfs fica para 64 bits, ou tenho que alterar algo para ele copilar em 64 bits?

mais outra duvida as dll de 32 bits, pode ser usada em 64 bits ou deve ser outras dll ?

 

Tem que compilar com o visual studio pra fucionar 64bit

fix para o disband: https://github.com/fir3element/3884/commit/34a1746f64568471504ec0ee5e1adf566e578961

Link para o post
Compartilhar em outros sites
  • Respostas 176
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Olá pessoal, tive a iniciativa de criar esse tópico para atualizar e otimizar as sources do TFS 0.4 DEV que é uma das mais usadas no mundo do otserv. Conteúdo totalmente gratuito e pretendemos melhora

@Coul e @luanluciano93, como havia dito, consegui compilar a distro no Ubuntu Server 14.04. Agora que finalmente coloquei meu ot no ar e estou com um tempinho, vou dizer o que tiver que fazer:    Pr

Tem que compilar com o visual studio pra fucionar 64bit fix para o disband: https://github.com/fir3element/3884/commit/34a1746f64568471504ec0ee5e1adf566e578961

Posted Images

estou com ess eproblema alguem pode ajuda ?

 

 

player.cpp: In member function 'virtual void Player::doAttacking(uint32_t)':
player.cpp:3430:16: error: 'class Item' has no member named 'hasExhaustion'
player.cpp:3430:43: error: 'class Item' has no member named 'useWeapon'
player.cpp:3430:59: error: 'tool' was not declared in this scope
make[1]: *** [player.o] Error 1
make[1]: Leaving directory `/otserv/trunk'
make: *** [all] Error 2

 

Link para o post
Compartilhar em outros sites
Em 11/05/2014 05:20:57, luanluciano93 disse:

Olá pessoal, tive a iniciativa de criar esse tópico para atualizar e otimizar as sources do TFS 0.4 DEV que é uma das mais usadas no mundo do otserv. Conteúdo totalmente gratuito e pretendemos melhora-lo cada vez mais. 

 

Qualquer um pode colaborar, postando bugs, erros, otimizando códigos, comentar aqui no tópico, toda ajuda é bem vinda, vamos tornar essa a melhor source disponível. Conto com vocês.

 

Versão do Tibia: 8.60

 

Alguns sistema já implementados na source:

• TFS 0.4 DEV rev 3777 (by TFS Team)
• Anti-Divulgação (.servegame, .no-ip, .net, .com, .org, .pl, .biz, .br, .sytes, .info)
• War System
• Cast System (by Summ)
• Retirado bugs de anti-push ..
• Retirado bugs de elfbot ...

• Retirado erro de não aceitar outros items ...
• Retirado erro de Malformed File ...
• Add creatureevent onMoveItem()  ...
• Add função getCreaturePathTo () ...

• E vários outros!

 

Complementos:
• Add cast System (passo a passo): [AQUI]

• Pode add o comando na config.lua:


healthHealingColor = COLOR_GREEN -- [podendo alterar a cor].
manaHealingColor = COLOR_DARKPURPLE -- [podendo alterar a cor].

Downloads:
Distro Compilada 32x

• Distro Compilada 64x

• Sources

Datapack Limpo

 

 

TESTADO EM WINDOWS, DEBIAN 7.8, UBUNTU 12.04 E 14.05!

 

 

• Compilar em Linux: 

 

Conteúdo Oculto

 

 

• Erros para arrumar: 

 

Conteúdo Oculto



Obrigado ao runeraserver pelo incentivo em fixa-la para linux :D

E é isso pessoal, espero ter ajudado, abraços
 

 

 

 

Boa noite, Luan você pode arrumar essas mesma sources e distro para usar 255 effects e pelo menos 90 distance?
eu uso essa distro, é muito boa, mais só da para usar 69 effect e 41 distance. e eu tentei compila aqui C++ e deu um monte de erro.
Aguardo resposta!!!
Me ajude por favor.

Link para o post
Compartilhar em outros sites
  • 2 weeks later...

Estou com um probleminha, quando o player mata um bicho, outros bichos não conseguem passar por cima do corpo morto, ou seja o player mata os bichos em volta dele e fica ali trapado, atacando de longe sem ser atacado.. parece que algo impossibilita os bichos de passarem por cima do corpo morto..

Só eu que estou com esse problema ou mais alguem relatou?

Obrigado!

Link para o post
Compartilhar em outros sites
8 horas atrás, victorat disse:

Estou com um probleminha, quando o player mata um bicho, outros bichos não conseguem passar por cima do corpo morto, ou seja o player mata os bichos em volta dele e fica ali trapado, atacando de longe sem ser atacado.. parece que algo impossibilita os bichos de passarem por cima do corpo morto..

Só eu que estou com esse problema ou mais alguem relatou?

Obrigado!

 

Estou com o mesmo problema!

Link para o post
Compartilhar em outros sites
2 horas atrás, TryniX disse:

 

Estou com o mesmo problema!

 

Esse bug é clássico da rev 3777, use a rev 3884.

 

 

 

Nós somos aquilo que fazemos repetidamente. Excelência, não é um modo de agir, mas um hábito.

                                                                                                                                                                                                                                        Aristóteles 

Link para o post
Compartilhar em outros sites
3 horas atrás, Way20 disse:

 

Esse bug é clássico da rev 3777, use a rev 3884.

No caso eu troco só as LIBS e compilo novamente o servidor ou eu pego a distro e substituo? pois tenho uma pasta aqui que consegui REV 3884 e nela conta com 17 arquivos .dll e um executavel do TheForgottenServer.exe

Link para o post
Compartilhar em outros sites
20 horas atrás, victorat disse:

No caso eu troco só as LIBS e compilo novamente o servidor ou eu pego a distro e substituo? pois tenho uma pasta aqui que consegui REV 3884 e nela conta com 17 arquivos .dll e um executavel do TheForgottenServer.exe

 

Se você roda em Windows basta substituir o executável, caso seja linux vai ter que compilar.

 

 

 

Nós somos aquilo que fazemos repetidamente. Excelência, não é um modo de agir, mas um hábito.

                                                                                                                                                                                                                                        Aristóteles 

Link para o post
Compartilhar em outros sites
3 horas atrás, Way20 disse:

 

Se você roda em Windows basta substituir o executável, caso seja linux vai ter que compilar.

fui usar essa distro aqui http://www.tibiaking.com/forum/topic/46790-tfs-3884-86-war-system-anti-salt-muito-est%C3%A1vel/#comment-270877

baixei  SOMENTE EXECUTÁVEL COMPILADO COM WAR SYSTEM E ANTI SALT

substitui por cima do executavel atual que é da REV 3777 e na hora de abrir o server deu o seguinte erro:

[14:16:01.200] The Forgotten Server, version 0.4_DEV ()
[14:16:01.200] Compiled with GNU C++ version 4.4.0 at Jan 25 2015, 06:44:08.
[14:16:01.204] A server developed by Elf, Stian, Slawkens and KaczooH, .
[14:16:01.204] Visit our forum for updates, support and resources: http://vapus.net/forum.

[14:16:01.204] >> Loading config (config.lua)
[14:16:01.208] >> Opening logs
[14:16:01.448] > Using SHA1 encryption
I/O warning : failed to load external entity ""
[14:16:01.450] >> Checking software version...failed - could not parse remote file (are you connected to any network?)
[14:16:01.451] >> Loading RSA key
[14:16:01.452] >> Starting SQL connection
[14:16:01.462] >> Running Database Manager
[14:16:02.124] > Optimizing table: account_viplist... [success]
[14:16:02.426] > Optimizing table: accounts... [success]
[14:16:02.694] > Optimizing table: bans... [success]
[14:16:02.965] > Optimizing table: environment_killers... [success]
[14:16:03.211] > Optimizing table: global_storage... [success]
[14:16:03.531] > Optimizing table: guild_invites... [success]
[14:16:03.835] > Optimizing table: guild_kills... [success]
[14:16:04.031] > Optimizing table: guild_ranks... [success]
[14:16:04.248] > Optimizing table: guild_wars... [success]
[14:16:04.456] > Optimizing table: guilds... [success]
[14:16:04.654] > Optimizing table: house_auctions... [success]
[14:16:04.894] > Optimizing table: house_data... [success]
[14:16:05.150] > Optimizing table: house_lists... [success]
[14:16:05.571] > Optimizing table: houses... [success]
[14:16:05.929] > Optimizing table: killers... [success]
[14:16:06.269] > Optimizing table: player_deaths... [success]
[14:16:06.573] > Optimizing table: player_depotitems... [success]
[14:16:07.274] > Optimizing table: player_items... [success]
[14:16:07.544] > Optimizing table: player_killers... [success]
[14:16:07.893] > Optimizing table: player_namelocks... [success]
[14:16:08.257] > Optimizing table: player_skills... [success]
[14:16:08.526] > Optimizing table: player_spells... [success]
[14:16:08.804] > Optimizing table: player_statements... [success]
[14:16:09.082] > Optimizing table: player_storage... [success]
[14:16:09.339] > Optimizing table: player_viplist... [success]
[14:16:09.738] > Optimizing table: players... [success]
[14:16:09.959] > Optimizing table: server_config... [success]
[14:16:10.225] > Optimizing table: server_motd... [success]
[14:16:10.517] > Optimizing table: server_record... [success]
[14:16:10.850] > Optimizing table: server_reports... [success]
[14:16:11.167] > Optimizing table: tile_items... [success]
[14:16:11.392] > Optimizing table: tile_store... [success]
[14:16:12.211] > Optimizing table: tiles... [success]
[14:16:12.658] > Optimizing table: z_forum... [success]
[14:16:13.062] > Optimizing table: z_ots_comunication... [success]
[14:16:13.381] > Optimizing table: z_ots_guildcomunication... [success]
[14:16:13.634] > Optimizing table: z_shop_history_item... [success]
[14:16:13.879] > Optimizing table: z_shop_history_pacc... [success]
[14:16:14.086] > Optimizing table: z_shop_offer... [success]
[14:16:14.500] > Optimizing table: z_shopguild_history_item... [success]
[14:16:14.860] > Optimizing table: z_shopguild_history_pacc... [success]
[14:16:15.047] > Optimizing table: z_shopguild_offer... [success]
[14:16:15.047] >> Loading items (OTB)
[14:16:15.115] [Error - Items::loadFromOtb] Another (client) version of items.otb is required.

[14:16:15.115] > ERROR: Unable to load items (OTB)!

 

Editado por victorat (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
4 minutos atrás, Sekk disse:

@victorat

 

Tenta usar esse:

 

TFS.rar

Mesmo problema.. o maldito que os monstros não passam por cima de corpses mortos

O problema nesse mundo de ot serv é que o pessoal só disponibiliza online com a cara de pau "sem bugs" assim atraindo milhares de pessoas a fazerem o download..

Link para o post
Compartilhar em outros sites

exatamente, então oque eu fiz.. peguei a REV 3884 (libs + executavel) e substitui pela minha, colei por cima.. e deu certo, os montros estavam passando por cima dos corpses mortos, porém está um zaralho isso, npcs nao falam, apresentou aqueles erro na distro citados logo acima..

então no momento estou com esse problema que os monsters nao passam por cima de corpos recem mortos, muito facil de fazer uma quest, mage lvl 100 fazendo inquisition solo..

ai nao tem graça.. ;x

Link para o post
Compartilhar em outros sites
17 horas atrás, victorat disse:

exatamente, então oque eu fiz.. peguei a REV 3884 (libs + executavel) e substitui pela minha, colei por cima.. e deu certo, os montros estavam passando por cima dos corpses mortos, porém está um zaralho isso, npcs nao falam, apresentou aqueles erro na distro citados logo acima..

então no momento estou com esse problema que os monsters nao passam por cima de corpos recem mortos, muito facil de fazer uma quest, mage lvl 100 fazendo inquisition solo..

ai nao tem graça.. ;x

 

Este problema do OTB é fácil resolver, mas você vai ter que compilar a distro. Pegue a sources do executável que você baixou e siga esse tutorial http://www.tibiaking.com/forum/topic/8856-fazendo-que-o-servidor-aceite-qualquer-itemsotb/

Editado por Way20 (veja o histórico de edições)

 

 

 

Nós somos aquilo que fazemos repetidamente. Excelência, não é um modo de agir, mas um hábito.

                                                                                                                                                                                                                                        Aristóteles 

Link para o post
Compartilhar em outros sites
6 horas atrás, Way20 disse:

 

Este problema do OTB é fácil resolver, mas você vai ter que compilar a distro. Pegue a sources do executável que você baixou e siga esse tutorial http://www.tibiaking.com/forum/topic/8856-fazendo-que-o-servidor-aceite-qualquer-itemsotb/

 

 

 

Na verdade oque esta acontecendo é o seguinte: monstros nao passam por cima de corpos mortos na REV 3777, onde esta tudo minhas actions, talktions, creaturescripts, meu otserv completo na verdade, então testei o executavel tfs.exe da REV 3884 e funcionou! os monstro passavam.. porém apresentou muitos bugs, data/npc/scripts.. nenhum npc falava, até o  malformed file bug apareceu, então eu quero na real é arrumar esse bug na REV 3777, ou algo que solucione este problema, abri um topico já:

http://www.tibiaking.com/forum/topic/66832-bug-corpse/

Link para o post
Compartilhar em outros sites
4 horas atrás, victorat disse:

Na verdade oque esta acontecendo é o seguinte: monstros nao passam por cima de corpos mortos na REV 3777, onde esta tudo minhas actions, talktions, creaturescripts, meu otserv completo na verdade, então testei o executavel tfs.exe da REV 3884 e funcionou! os monstro passavam.. porém apresentou muitos bugs, data/npc/scripts.. nenhum npc falava, até o  malformed file bug apareceu, então eu quero na real é arrumar esse bug na REV 3777, ou algo que solucione este problema, abri um topico já:

http://www.tibiaking.com/forum/topic/66832-bug-corpse/

 

Rsrs, amigo como já disse antes esse é um bug clássico desta rev, existe milhares de tópicos iguais ao seu buscando ajuda para o mesmo problema, eu mesmo procurei por 2 meses uma solução pra isto. Então o que recomendo você fazer é resolver esses problemas que encontrou ao invés de buscar solução para o problema dos corpses, pois garanto que tão cedo você não vai encontrar.

 

 

 

Nós somos aquilo que fazemos repetidamente. Excelência, não é um modo de agir, mas um hábito.

                                                                                                                                                                                                                                        Aristóteles 

Link para o post
Compartilhar em outros sites
1 minuto atrás, Way20 disse:

 

Rsrs, amigo como já disse antes esse é um bug clássico desta rev, existe milhares de tópicos iguais ao seu buscando ajuda para o mesmo problema, eu mesmo procurei por 2 meses uma solução pra isto. Então o que recomendo você fazer é resolver esses problemas que encontrou ao invés de buscar solução para o problema dos corpses, pois garanto que tão cedo você não vai encontrar.

Verdade mano, concordo com voce, tomara que as pessoas pensam antes de começar um projeto e analisam os "detalhes" pois esse bug é gravíssimo se for pensar, oque eu fiz agora mano, peguei e baixei esse aqui: http://www.tibiaking.com/forum/topic/28482-860-tfs-04-rev-3777-sem-bugs/?page=1

INCRÍVE, mas não possui o DITO BUG, eu ainda nao estou acreditando nisso, porém existem outros.. MUITO mais simples mas existem alguns, oque voce me recomenda agora? continuar com a REV 3777 desse amigo que eu postei o link ou começo com a REV 3884? valeu!

Link para o post
Compartilhar em outros sites
2 minutos atrás, victorat disse:

Verdade mano, concordo com voce, tomara que as pessoas pensam antes de começar um projeto e analisam os "detalhes" pois esse bug é gravíssimo se for pensar, oque eu fiz agora mano, peguei e baixei esse aqui: http://www.tibiaking.com/forum/topic/28482-860-tfs-04-rev-3777-sem-bugs/?page=1

INCRÍVE, mas não possui o DITO BUG, eu ainda nao estou acreditando nisso, porém existem outros.. MUITO mais simples mas existem alguns, oque voce me recomenda agora? continuar com a REV 3777 desse amigo que eu postei o link ou começo com a REV 3884? valeu!

 

Bom, eu ainda uso a rev 3777 porem o servidor em que trabalho é de war, ou seja, player vs player, como não há monstros, este bug não me trás problema algum. No seu caso, eu recomendaria na verdade você usar OTX, entre em contato comigo por PM que vou lhe ajudar.

 

 

 

Nós somos aquilo que fazemos repetidamente. Excelência, não é um modo de agir, mas um hábito.

                                                                                                                                                                                                                                        Aristóteles 

Link para o post
Compartilhar em outros sites
19 minutos atrás, Way20 disse:

 

Bom, eu ainda uso a rev 3777 porem o servidor em que trabalho é de war, ou seja, player vs player, como não há monstros, este bug não me trás problema algum. No seu caso, eu recomendaria na verdade você usar OTX, entre em contato comigo por PM que vou lhe ajudar.

E voce consegue testar em seu servidor os monstros se eles nao passam por  cima também?

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por L3K0T
      Se você está enfrentando o problema de jogadores ganhando experiência ao matar outros jogadores em um servidor PVP, e já tentou várias soluções sem sucesso, este tutorial vai te ajudar a resolver isso. A modificação que vou mostrar foi eficaz para mim e pode ser a solução para o seu servidor também.
       
      Passo 1: Acesse o arquivo creature.cpp
      Primeiro, abra o arquivo creature.cpp, que está localizado na pasta src ou sources do seu servidor. Esse arquivo contém a lógica das criaturas, incluindo a parte de quando um jogador mata outra criatura.
       
      Passo 2: Localize o  onAttackedCreatureKilled
      Dentro do arquivo, procure pela função onAttackedCreatureKilled:
       
      void Creature::onAttackedCreatureKilled(Creature* target) { if(target == this) return; double gainExp = target->getGainedExperience(this); onGainExperience(gainExp, !target->getPlayer(), false); }  
      Altere para
       
      void Creature::onAttackedCreatureKilled(Creature* target) { if (target == this) return; // Verifica se o atacante e o alvo são jogadores Player* attackerPlayer = this->getPlayer(); Player* targetPlayer = target->getPlayer(); if (attackerPlayer && targetPlayer) return; if (!attackerPlayer && targetPlayer) { double gainExp = target->getGainedExperience(this); onGainExperience(gainExp, !target->getPlayer(), false); } else if (attackerPlayer) { double gainExp = target->getGainedExperience(this); onGainExperience(gainExp, true, false); } }  
      Agora Recompile modo Rebuilder (LIMPA) e pronto!!!
       
      Aqui está o que mudou:
      *A primeira modificação verifica se o atacante e o alvo são jogadores. Se ambos forem jogadores, não será concedida experiência.
      *Se o atacante for um monstro, a experiência será concedida normalmente ao jogador.
      *Se o atacante for um jogador, ele ganhará a experiência normalmente.
       
      Créditos @L3K0T
    • Por L3K0T
      Sistema de Drop Personalizado
       
      Esse sistema de loot foi projetado para adicionar um elemento de sorte e surpresa ao derrotar monstros. Sempre que um jogador derrota um monstro, há uma chance configurada para que ele solte entre 1 a 3 itens especiais, garantindo recompensas valiosas ao jogador.
       
      O sistema realiza as seguintes ações:
      Chance de Drop: A cada morte de um monstro, há uma chance configurada para dropar itens específicos. O sistema permite que sejam dropados entre 1 a 3 unidades do item, tornando o sistema mais dinâmico.
       
      Efeito Visual: Quando o loot é bem-sucedido, um efeito visual especial (ID 231) é exibido na posição exata onde o monstro foi derrotado, criando uma animação visual que destaca a recompensa.
       
      Notificação ao Jogador: Após o drop, o jogador recebe uma mensagem personalizada informando a quantidade de itens obtidos. Essa notificação aparece após 3 segundos, adicionando uma camada de imersão e evitando sobrecarregar o chat imediatamente após a morte do monstro.
       
      *Ótimo para fazer eventos de dropar certo itens para alguma missão ou resgates.
      *Uso no meu TIBIA HARRY POTTER ORIGIN
       
      VAi em creaturescripts/scripts.lua
      local function findCorpse(position) for i = 1, 255 do position.stackpos = i local corpse = getThingfromPos(position) if isCorpse(corpse.uid) then return corpse.uid end end return false end local function dropLoot(position, killer) local corpse = findCorpse(position) if not corpse then return false end local itemId = 2160 local chance = 23 if math.random(100) <= chance then local amountToDrop = math.random(1, 3) doAddContainerItem(corpse, itemId, amountToDrop) local corpsePosition = getThingPos(corpse) doSendMagicEffect(corpsePosition, 7) local function sendMessage() if isPlayer(killer) then local message = string.format("Você dropou %d Crystal Coin(s).", amountToDrop) doPlayerSendTextMessage(killer, MESSAGE_INFO_DESCR, message) end end addEvent(sendMessage, 2500) end return true end function onKill(cid, target) local position = getCreaturePosition(target) addEvent(dropLoot, 100, position, cid) return true end  
      creaturescripts.xml
      <event type="kill" name="GlobalDrops" registerTo ="GlobalDrops" event="script" value="globalDrops.lua"/> ou depende do tfs
      <event type="kill" name="GlobalDrops" event="script" value="globalDrops.lua"/>  
      Para ambos TFS registra o evento no login.lua
      registerTo ="GlobalDrops"
      feito isso.. agora todos os monstros do mapa vai cair os crystal coins de 1 há 3.
    • Por L3K0T
      TUTORIAL BY L3K0T PT~EN
       
      Olá pessoal, trago a vocês uma atualização que fiz no sistema, contendo 3 novas funcionalidades de movimentação de itens e uma proteção contra Elf Bot. Estas adições foram cuidadosamente implementadas para aperfeiçoar a experiência de jogo e manter a integridade do seu servidor.
      As novas funcionalidades têm a função vital de impedir que jogadores deixem itens indesejados em locais inapropriados, como na entrada de sua casa, em cima de seus depósitos ou em teleportes. Agora, apenas proprietários, subproprietários e convidados têm permissão para manipular itens nesses locais.
      Este pacote de atualização foi meticulosamente revisado para evitar abusos por parte de jogadores mal-intencionados e garantir um ambiente de jogo justo e equilibrado para todos os usuários.
       
       
       
      Iniciando o Tutorial
      1Abra o arquivo "creatureevents.cpp" com o editor de sua preferência. Eu pessoalmente recomendo o Notepad++. 
       
       
      Em creatureevents.cpp:
      return "onPrepareDeath"; Adicione abaixo:
      case CREATURE_EVENT_MOVEITEM: return "onMoveItem"; case CREATURE_EVENT_MOVEITEM2: return "onMoveItem2";  
      Em:
      return "cid, deathList"; Adicione abaixo:
      case CREATURE_EVENT_MOVEITEM: return "moveItem, frompos, topos, cid"; case CREATURE_EVENT_MOVEITEM2: return "cid, item, count, toContainer, fromContainer, fromPos, toPos";  
      Em:
      m_type = CREATURE_EVENT_PREPAREDEATH; Adicione abaixo:
      else if(tmpStr == "moveitem") m_type = CREATURE_EVENT_MOVEITEM; else if(tmpStr == "moveitem2") m_type = CREATURE_EVENT_MOVEITEM2;  
      Procure por:
      bool CreatureEvents::playerLogout(Player* player, bool forceLogout) { //fire global event if is registered bool result = true; for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it) { if((*it)->getEventType() == CREATURE_EVENT_LOGOUT && (*it)->isLoaded() && !(*it)->executeLogout(player, forceLogout) && result) result = false; } return result; } Adicione abaixo:
      uint32_t CreatureEvents::executeMoveItems(Creature* actor, Item* item, const Position& frompos, const Position& pos) { // fire global event if is registered for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it) { if((*it)->getEventType() == CREATURE_EVENT_MOVEITEM) { if(!(*it)->executeMoveItem(actor, item, frompos, pos)) return 0; } } return 1; }  
      Em:
      bool CreatureEvents::playerLogin(Player* player) { //fire global event if is registered bool result = true; for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it) { if((*it)->getEventType() == CREATURE_EVENT_LOGIN && (*it)->isLoaded() && !(*it)->executeLogin(player) && result) result = false; } if (result) { for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it) { CreatureEvent* event = *it; if(event->isLoaded() && ( event->getRegister() == "player" || event->getRegister() == "all") ) player->registerCreatureEvent(event->getName()); } } return result; } Adicione Abaixo:
      uint32_t CreatureEvent::executeMoveItem(Creature* actor, Item* item, const Position& frompos, const Position& pos) { //onMoveItem(moveItem, frompos, position, cid) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(pos); std::stringstream scriptstream; env->streamThing(scriptstream, "moveItem", item, env->addThing(item)); env->streamPosition(scriptstream, "position", frompos, 0); env->streamPosition(scriptstream, "position", pos, 0); scriptstream << "local cid = " << env->addThing(actor) << std::endl; scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[35]; sprintf(desc, "%s", player->getName().c_str()); env->setEventDesc(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(pos); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); LuaInterface::pushThing(L, item, env->addThing(item)); LuaInterface::pushPosition(L, frompos, 0); LuaInterface::pushPosition(L, pos, 0); lua_pushnumber(L, env->addThing(actor)); bool result = m_interface->callFunction(4); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeMoveItem] Call stack overflow." << std::endl; return 0; } } uint32_t CreatureEvent::executeMoveItem2(Player* player, Item* item, uint8_t count, const Position& fromPos, const Position& toPos, Item* toContainer, Item* fromContainer, int16_t fstack) { //onMoveItem2(cid, item, count, toContainer, fromContainer, fromPos, toPos) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(player->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(player) << std::endl; env->streamThing(scriptstream, "item", item, env->addThing(item)); scriptstream << "local count = " << count << std::endl; env->streamThing(scriptstream, "toContainer", toContainer, env->addThing(toContainer)); env->streamThing(scriptstream, "fromContainer", fromContainer, env->addThing(fromContainer)); env->streamPosition(scriptstream, "fromPos", fromPos, fstack); env->streamPosition(scriptstream, "toPos", toPos, 0); scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[30]; sprintf(desc, "%s", player->getName().c_str()); env->setEvent(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(player->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); LuaInterface::pushThing(L, item, env->addThing(item)); lua_pushnumber(L, count); LuaInterface::pushThing(L, toContainer, env->addThing(toContainer)); LuaInterface::pushThing(L, fromContainer, env->addThing(fromContainer)); LuaInterface::pushPosition(L, fromPos, fstack); LuaInterface::pushPosition(L, toPos, 0); //lua_pushnumber(L, env->addThing(actor)); bool result = m_interface->callFunction(7); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeMoveItem] Call stack overflow." << std::endl; return 0; } }  
       
       
      Agora em em creatureevents.h:
      CREATURE_EVENT_PREPAREDEATH, Adicione abaixo:
      CREATURE_EVENT_MOVEITEM, CREATURE_EVENT_MOVEITEM2  
      Em:
      uint32_t executePrepareDeath(Creature* creature, DeathList deathList); Adicione abaixo:
      uint32_t executeMoveItem(Creature* actor, Item* item, const Position& frompos, const Position& pos); uint32_t executeMoveItem2(Player* player, Item* item, uint8_t count, const Position& fromPos, const Position& toPos, Item* toContainer, Item* fromContainer, int16_t fstack);  
      Em:
      bool playerLogout(Player* player, bool forceLogout); Abaixo adicone também
      uint32_t executeMoveItems(Creature* actor, Item* item, const Position& frompos, const Position& pos); uint32_t executeMoveItem2(Player* player, Item* item, uint8_t count, const Position& fromPos, const Position& toPos, Item* toContainer, Item* fromContainer, int16_t fstack);  
       
      Agora em em game.cpp:
      if(!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { player->sendCancelMessage(RET_CANNOTTHROW); return false; } ReturnValue ret = internalMoveItem(player, fromCylinder, toCylinder, toIndex, item, count, NULL); if(ret == RET_NOERROR) return true; player->sendCancelMessage(ret); return false; } Altere para:
      if (!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { player->sendCancelMessage(RET_CANNOTTHROW); return false; } bool success = true; CreatureEventList moveitemEvents = player->getCreatureEvents(CREATURE_EVENT_MOVEITEM2); for (CreatureEventList::iterator it = moveitemEvents.begin(); it != moveitemEvents.end(); ++it) { Item* toContainer = toCylinder->getItem(); Item* fromContainer = fromCylinder->getItem(); if (!(*it)->executeMoveItem2(player, item, count, fromPos, toPos, (toContainer ? toContainer : 0), (fromContainer ? fromContainer : 0), fromStackpos) && success) success = false; } if (!success) return false; if (g_config.getBool(ConfigManager::ANTI_PUSH)) { std::string antiPushItems = g_config.getString(ConfigManager::ANTI_PUSH_ITEMS); IntegerVec tmpVec = vectorAtoi(explodeString(antiPushItems, ",")); if (tmpVec[0] != 0) { for (IntegerVec::iterator it = tmpVec.begin(); it != tmpVec.end(); ++it) { if (item->getID() == uint32_t(*it) && player->hasCondition(CONDITION_EXHAUST, 1)) { player->sendTextMessage(MSG_STATUS_SMALL, "Please wait a few seconds to move this item."); return false; } } } } int32_t delay = g_config.getNumber(ConfigManager::ANTI_PUSH_DELAY); if (Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_EXHAUST, delay, 0, false, 1)) player->addCondition(condition); if (!g_creatureEvents->executeMoveItems(player, item, mapFromPos, mapToPos)) return false; ReturnValue ret = internalMoveItem(player, fromCylinder, toCylinder, toIndex, item, count, NULL); if (ret != RET_NOERROR) { player->sendCancelMessage(ret); return false; } player->setNextAction(OTSYS_TIME() + g_config.getNumber(ConfigManager::ACTIONS_DELAY_INTERVAL) - 10); return true; }  
      Agora em configmanager.h
      ADMIN_ENCRYPTION_DATA Adicione abaixo:
      ANTI_PUSH_ITEMS,  
      em:
      STAMINA_DESTROY_LOOT, Adicione abaixo:
      ANTI_PUSH_DELAY,  
      em:
      ADDONS_PREMIUM, Adicione abaixo:
      ANTI_PUSH  
      Agora você pode compilar a Source.
       
       
      Configurando no servidor:
       
      Abra seu config.lua do servidor e adicione isso dentro qualquer lugar:
      -- Anti-Push useAntiPush = true antiPushItems = "2148,2152,2160,3976" antiPushDelay = 500  
       
      Navegue até o diretório 'creaturescripts' e localize o arquivo 'login.lua'.
      em resgistros de eventos adicione:
      login.lua
      registerCreatureEvent(cid, "MoveItem") registerCreatureEvent(cid, "MoveItem2")  
      Agora abra o aquivo creaturescript .xml
      <event type="moveitem" name="MoveItem" event="script" value="houseprotecao.lua"/> <event type="moveitem2" name="MoveItem2" event="script" value="moveitem2.lua"/>  
      Crie um novo arquivo lua em scripts com o nome houseprotecao.lua e adicione isso:
      function onMoveItem(moveItem, frompos, position, cid) if position.x == CONTAINER_POSITION then return true end local house = getHouseFromPos(frompos) or getHouseFromPos(position) --correção 100% if type(house) == "number" then local owner = getHouseOwner(house) if owner == 0 then return false, doPlayerSendCancel(cid, "Isso não é Possível.") end if owner ~= getPlayerGUID(cid) then local sub = getHouseAccessList(house, 0x101):explode("\n") local guest = getHouseAccessList(house, 0x100):explode("\n") local isInvited = false if (#sub > 0) and isInArray(sub, getCreatureName(cid)) then isInvited = true end if (#guest > 0) and isInArray(guest, getCreatureName(cid)) then isInvited = true end if not isInvited then return false, doPlayerSendCancel(cid, "Desculpe, você não está invitado.") end end end return true end  
      Crie um novo arquivo lua em scripts com o nome moveitem2.lua e adicione isso abaixo:
      local depottiles = {} --piso pra n jogar local depots = {2589} --id dos dps local group = 3 --id dos group 6 é todos. local function checkIfThrow(pos,topos) if topos.x == 0xffff then return false end local thing = getThingFromPos(pos) if isInArray(depottiles,thing.itemid) then if not isInArea(topos,{x=pos.x-1,y=pos.y-1,z=pos.z},{x=pos.x+1,y=pos.y+1, z=pos.z}) then return true end else for i = 1, #depots do if depots[i] == getTileItemById(topos,depots[i]).itemid or getTileInfo(topos).actionid == 7483 then return true end end end return false end function onMoveItem2(cid, item, count, toContainer, fromContainer, fromPos, toPos) if isPlayer(cid) then local pos = getThingPos(cid) if getPlayerGroupId(cid) > group then return true end if checkIfThrow({x=pos.x,y=pos.y,z=pos.z,stackpos=0},toPos) then doPlayerSendCancel(cid,"Não jogue item ai!!") doSendMagicEffect(getThingPos(cid),CONST_ME_POFF) return false end end return true end  
      ajudei?? REP+
      CRÉDITOS:
      @L3K0T
      Fir3element
      Summ
      Wise
      GOD Wille
      Yan Lima
       
       
       
       
    • Por L3K0T
      Não jogar itens pelo teleportes C++
       

       

       
       
      Bom.. o nome já diz, qualquer um que jogar itens nos teleportes do seu otserv, o mesmo será removido, como aquelas lixeiras, porem esse sistema é pela source, descartando scripts .LUA.
       
       
      Em teleporte.cpp ache:
       
      void Teleport::__addThing(Creature* actor, int32_t, Thing* thing) { if(!thing || thing->isRemoved()) return; Tile* destTile = g_game.getTile(destination); if(!destTile) return; if(Creature* creature = thing->getCreature()) { g_game.addMagicEffect(creature->getPosition(), MAGIC_EFFECT_TELEPORT, creature->isGhost()); creature->getTile()->moveCreature(actor, creature, destTile); g_game.addMagicEffect(destTile->getPosition(), MAGIC_EFFECT_TELEPORT, creature->isGhost()); } else if(Item* item = thing->getItem()) { g_game.addMagicEffect(item->getPosition(), MAGIC_EFFECT_TELEPORT); g_game.internalMoveItem(actor, item->getTile(), destTile, INDEX_WHEREEVER, item, item->getItemCount(), NULL); g_game.addMagicEffect(destTile->getPosition(), MAGIC_EFFECT_TELEPORT); } }  
      Altere ele todo para:
       
      void Teleport::__addThing(Creature* actor, int32_t, Thing* thing) { if (!thing || thing->isRemoved()) return; Tile* destTile = g_game.getTile(destination); if (!destTile) return; if (Creature* creature = thing->getCreature()) { g_game.addMagicEffect(creature->getPosition(), MAGIC_EFFECT_TELEPORT, creature->isGhost()); creature->getTile()->moveCreature(actor, creature, destTile); g_game.addMagicEffect(destTile->getPosition(), MAGIC_EFFECT_TELEPORT, creature->isGhost()); } else { Player* player = dynamic_cast<Player*>(actor); if (player) { player->sendTextMessage(MSG_STATUS_SMALL, "You cannot teleport items."); // Remover o item Item* item = dynamic_cast<Item*>(thing); if (item) { g_game.internalRemoveItem(actor, item); } } return; } } agora é só compilar no modo Rebuilder e ligar o servidor, créditos a mim L3K0T pela alterações.



×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo