Ir para conteúdo
  • Cadastre-se

8.5x - 8.7x [8.60] The Forgotten Server 0.4 (sqlite e mysql)


Posts Recomendados

  • Respostas 378
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Reporte qualquer bug encontrado.   - Mudanças: * opcode adicionado * Monstros andando em cima de corpos * War system arrumado * Anti-divulgação melhorado * Cast syst

Arrumei   Sim, comecei com esse projeto no começo do ano, eu tava usando o tfs 0.3.6 desde 2010, encontrei alguns problemas e acabei migrando pra rev 3777, e deu certo :D

talkactions/scripts/teleporttown.lua local pos = getTownTemplePosition(tmp, false) Troca por: local pos = getTownTemplePosition(tmp)   Foi o único arquivo que mudei. Adic

Posted Images

Em 02/02/2016 ás 10:27, Fir3element disse:

Reporte qualquer bug encontrado.

 

- Mudanças:

* Yellow skull arrumado

* 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_dev.rar

* Distro (x64 ~ não tem suporte para SQLite e precisa instalar o Microsoft Visual C++ 2010 Redistributable Package (x64)): https://github.com/Fir3element/binaries/raw/master/x64.rar

* Source + datapack: https://github.com/Fir3element/3777/archive/master.zip

 

- Scans:

* Distro (x32): https://www.virustotal.com/pt/file/2ae89cd10781e7dbacb8864a90812dd39ed32c29996ee65690ef8743d50d763c/analysis/1454415506/

* Distro (x64): https://www.virustotal.com/pt/file/bead1f297a599410446cd6109b6822e8d99ede098de4bef40a69bfd7b043960e/analysis/1454415803/

* Source + datapack: https://www.virustotal.com/pt/file/16b7ffe1dbe08ec1ae989a176715bf0a9317354c0647f2b4ffff89f47aab55fa/analysis/1454415920/

  • Tive que desativar o Cast System, pois quando um player fazia 2 logins simultâneos o server caia ou freezava, vários logins em vários Cast..
  • Sabe se pode ter algum erro no cast?
Link para o post
Compartilhar em outros sites
Em 02/02/2016 ás 10:27, Fir3element disse:

Reporte qualquer bug encontrado.

 

- Mudanças:

* Yellow skull arrumado

* 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_dev.rar

* Distro (x64 ~ não tem suporte para SQLite e precisa instalar o Microsoft Visual C++ 2010 Redistributable Package (x64)): https://github.com/Fir3element/binaries/raw/master/x64.rar

* Source + datapack: https://github.com/Fir3element/3777/archive/master.zip

 

- Scans:

* Distro (x32): https://www.virustotal.com/pt/file/2ae89cd10781e7dbacb8864a90812dd39ed32c29996ee65690ef8743d50d763c/analysis/1454415506/

* Distro (x64): https://www.virustotal.com/pt/file/bead1f297a599410446cd6109b6822e8d99ede098de4bef40a69bfd7b043960e/analysis/1454415803/

* Source + datapack: https://www.virustotal.com/pt/file/16b7ffe1dbe08ec1ae989a176715bf0a9317354c0647f2b4ffff89f47aab55fa/analysis/1454415920/

Parabéns pelo Trabalho fico ótimo Show REP +

Link para o post
Compartilhar em outros sites
Em 02/02/2016 ás 10:27, Fir3element disse:

Reporte qualquer bug encontrado.

 

- Mudanças:

* Yellow skull arrumado

* 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_dev.rar

* Distro (x64 ~ não tem suporte para SQLite e precisa instalar o Microsoft Visual C++ 2010 Redistributable Package (x64)): https://github.com/Fir3element/binaries/raw/master/x64.rar

* Source + datapack: https://github.com/Fir3element/3777/archive/master.zip

 

- Scans:

* Distro (x32): https://www.virustotal.com/pt/file/2ae89cd10781e7dbacb8864a90812dd39ed32c29996ee65690ef8743d50d763c/analysis/1454415506/

* Distro (x64): https://www.virustotal.com/pt/file/bead1f297a599410446cd6109b6822e8d99ede098de4bef40a69bfd7b043960e/analysis/1454415803/

* Source + datapack: https://www.virustotal.com/pt/file/16b7ffe1dbe08ec1ae989a176715bf0a9317354c0647f2b4ffff89f47aab55fa/analysis/1454415920/

Está tendo atualizações ainda?

Referente aos bugs reportados, foram arrumados alguns?

 

Fico no aguardo!

Link para o post
Compartilhar em outros sites
Em 08/05/2016 ás 13:23, janmix disse:

Alguém poderia me dar uma ajuda? eu editava meu server usando o ip 127.0.0.1, mas agora quando eu fui abrir pra uns colegas entrarem e mudei o IP pelo do NO-IP ( qualquer IP direfente de 127.0.0.1 ) está dando crash no server. e aparece um erro antes de dar crash, This application has requested the Runtime to terminate it in an unusual way.

mas se eu usar o 127.0.0.1 como IP não da crash o servidor funciona perfeitamente.

 

erro.png

 

@Sekk

@Fir3element

 

 

Ninguém sabe resolver isso não? 

Link para o post
Compartilhar em outros sites
Em 13/10/2016 ás 07:21, Weekend disse:

 

 

Ninguém sabe resolver isso não? 

eu fiz uma alteração na source para funcionar, mas não me recordo bem o que foi, pois já faz alguns meses que fiz isso. mas se não estiver enganado eu mudei algo em databasesqlite.cpp

Link para o post
Compartilhar em outros sites
Em 17/10/2016 ás 14:28, janmix disse:

eu fiz uma alteração na source para funcionar, mas não me recordo bem o que foi, pois já faz alguns meses que fiz isso. mas se não estiver enganado eu mudei algo em databasesqlite.cpp

 

vou dar uma olhada, valeu. 

Link para o post
Compartilhar em outros sites
  • 2 weeks later...
2 horas atrás, Sekk disse:

como vai funcionar esse acc maker?

 

Como assim? aushduashd
De inicio suporte a 8.6
php 5.6+

mvc

Só não sou muito bom com layout, então ta bootstrap básico, mas tá ficando mais ou menos assim:
 

Spoiler
Spoiler

098c7a87b55940b886cacf28330f4cd1.png

Spoiler


@extends('layouts.owl.app')

@section('title','Create Account')
@section('header','Create Account')

@section('content')

{!! Form::open(['action' => 'RegisterController@create', 'class'=>'form-horizontal', 'id' => 'teste']) !!}

<div class="form-group">
    {!! Form::label('username', 'Username', ['class' => 'col-md-4 control-label']) !!}
    <div class="col-md-6">
        {!! Form::text('username', null, ['class' => 'form-control','required','autofocus']) !!}
        @if ($errors->has('username'))
        <span class="help-block">
            <strong>{{ $errors->first('username') }}</strong>
        </span>
        @endif
    </div>
</div>

<div class="form-group">
    {!! Form::label('email', 'E-Mail Address', ['class' => 'col-md-4 control-label']) !!}
    <div class="col-md-6">
        {!! Form::email('email', null, ['class' => 'form-control','required']) !!}
        @if ($errors->has('email'))
        <span class="help-block">
            <strong>{{ $errors->first('email') }}</strong>
        </span>
        @endif
    </div>
</div>

<div class="form-group">
    {!! Form::label('pass', 'Password', ['class' => 'col-md-4 control-label']) !!}
    <div class="col-md-6">
        {!! Form::password('pass', ['class' => 'form-control','required']) !!}
        @if ($errors->has('pass'))
        <span class="help-block">
            <strong>{{ $errors->first('pass') }}</strong>
        </span>
        @endif
    </div>
</div>
<div class="form-group">
    {!! Form::label('pass_confirm', 'Confirm Password', ['class' => 'col-md-4 control-label']) !!}
    <div class="col-md-6">
        {!! Form::password('pass_confirmation', ['class' => 'form-control','required']) !!}
        @if ($errors->has('pass_confirmation'))
        <span class="help-block">
            <strong>{{ $errors->first('pass_confirmation') }}</strong>
        </span>
        @endif
    </div>
</div>
<div class="form-group">
    <div class="col-md-6 col-md-offset-4">
        {!! Form::submit('Create', ['class'=>'btn btn-primary']) !!}
    </div>
</div>

{!! Form::close() !!}

@endsection

 

Spoiler


//Controller

public function create(Request $request){
		
		$validator = Validator::make($request->all(), [
			'username' => 'required|min:6|max:20|alpha_num',
			'pass' => 'required|confirmed|min:7|max:30',
			'pass_confirmation' => 'required'
			]);

		if ($validator->fails()) {
			return redirect()->back()
			->withErrors($validator)
			->withInput();
		}

		$account = new account;
		$account->name = $request->username;
		$account->email = $request->email;
		$account->password = sha1($request->pass);
		$account->save();

		return redirect('/register');

}

 

 

 

Captura de tela de 2016-09-04 18:53:17.png

Em Desenvolvimento 

 

Tutoriais:

[PagSeguro] Novo Método de Retorno Automático

Link para o post
Compartilhar em outros sites
  • Erimyth unpinned this tópico

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