Ir para conteúdo
  • Cadastre-se

Spooky Ghost

Membro
  • Total de itens

    111
  • Registro em

  • Última visita

  • Dias Ganhos

    1

Histórico de Curtidas

  1. Obrigado
    Spooky Ghost recebeu reputação de DATA Vinny em [AJUDA] Criação/Edição de otserver anime   
    @PresleyKing 
    Você é bem curioso em kkk, como estou fazendo absolutamente nada (preguiça) vou te ajudar já que quando eu comecei também recebi ajudas ?
     
    1. OtcV8 é bem complicado de mexer nele, tem que ter um certo nível de experiencia com OTC, começa com os OTC simples que é sucesso! xD
     
    2. O motivo das pessoas utilizarem as versões 8.54-8.60 é pela facilidade de encontrar scripts disponíveis hoje em dia para esta versão, as outras versões superiores 1.x tem uma estrutura de codificação bem diferente porém é o mesmo resultado, só que nem todos tem a disposição para entender a estrutura nova da codificação. (sim não muda nada kkj o resultado é o mesmo)
     
    3. Se a base que você quer começar for NTO recomendo a que o Storm limpou alguns bugs, quando eu comecei uns 3-4 meses atrás eu peguei ela porque na época eu sabia absolutamente nada sobre Tibia,  ou seja era impossível pra mim pegar uma base famosa porém cheia de bugs, fui pesquisando sobre bugs de scripts etc, e até hoje eu utilizo ela em meu projeto. Se você quiser ela aqui o link:
    Ele corrigiu alguns bugs deixou a distro linda, mas na source ainda tem alguns bugs porém nada que pode afetar o jogo.
     
    Sobre essas ferramentas existem tutoriais aqui no Tibiaking sobre elas da uma pesquisada caso precise
     
    4. O remeres serve para editar/criar o mapa de seu servidor como a versão vai ser 8.54 se você utilizar a base NTO B&W baixe o Tibia 8.54 normal para o remeres, eu não lembro onde consegui o Tibia 8.54 que funciona no remeres mas é só dar uma pesquisada xD
     
    4-1. O item editor foi o que mais me deu dor de cabeça de aprender a mexer nele (realmente foi muito estressante aprender), mas ele serve para criação de novos items para o servidor, e na hora da edição do item.otb lembre-se sempre se o tibia.spr é extendido ou não 
     
    5. (Sobre a diferença entre os dois vou ficar devendo essa, ainda não sei kkk, mas relaxe alguém pode te ajudar também)
     
    6. Com a utilização de OTClient os elfbot e mage bot creio que não irá funcionar se o OTC tiver proteção contra bot, eu tentei com o elfbot e funcionou a proteção, mas o mage bot não testei.
     
    7. Se você estiver falando da interface do Client você vai precisar usar o Pic Editor, tem alguns tutoriais ai no TK para launcher e edição do client, boa sorte! kk
     
    8. E por último, todas as ferramentas citadas acima você vai precisar e depois dela vem o Dev C++ que faz a edição da source se for a base B&W (ou versões suportadas)
     
    Isso me fez lembrar bastante coisa kkk, espero ter ajudado você em suas dúvidas, tenha uma ótima jornada com Open Tibia, vou deixar um script para você de presente, se quiser né, é obvio kk.
     
     
     
     
     
  2. Curtir
    Spooky Ghost deu reputação a Cat em Desafio de Mapping #001   
    ? RECOMPENSAS
    ⭐ Tag de vencedor do evento em todos os grupos da Academia no Discord.
    ⭐ Grupo especial destacado na lista de membros até a próxima edição, na Academia de Mapping.
     ⭐ Pontos de Reputação para primeiro, segundo e terceiro lugar (5, 3, 2).
    ⭐ Medalhão Evento de Mapping no TK (primeiro, segundo e terceiro lugar)
      
     
    • Os jurados que avaliarão os mapas serão:
    @Nolis
    @Nothorius
    @xWhiteWolf
     
    • O mapa vencedor do desafio será aquele que conseguir o máximo de pontos em cada categoria de avaliação.  
    Coerência & Jogabilidade (0-33 pontos).  
    Temática & Detalhamento (0-33 pontos).  
    Votação do Público (0-33 pontos).
     
     
     
    ? TEMA: Praça de Cidade.
    Prazo para envio: Até 19/06/2020 - 23:59
    Início das votações: 20/06 - 22/06
     


     
     
     
    REGRAS!
    1 - O uso de gráficos e versões é livre. (Deve enviar o items.otb e client para podermos abrir o mapa e avaliar. Se for sprites custom também, mas se não puder compartilhar as sprites então não use-as para participar do evento).
    2 - O mapa não pode ser mostrado/compartilhado antes ou durante a votação, o criador do mapa será anunciado no final da votação.
    3 - Não é permitido usar mapas antigos (já feitos).
    4 - Os participantes devem enviar uma imagem e o mapa .otb para mim por mensagem privada ou pelo Discord (Nolis #5106).
    5 - A imagem do mapa precisa estar com a resolução original dos gráficos (ctrl + 0). O tamanho do mapa vai de acordo com o tipo/dimensão da imagem. Não aceitamos .Gif. Desativar o 'Q' do remeres ao printar.
    6 - A imagem também pode ser tirada in-game e conter elementos como Mobs e iluminação.
     
    Exemplos de Imagens válidas:
     
     
     
     
  3. Curtir
    Spooky Ghost recebeu reputação de KawoBR em [AJUDA] Criar Vocation   
    Evite usar Caps Lock execivamente e tenha calma pasero
     
    Você citou o transformar provavelmente é derivado, para alterar a roupa quando criar a conta ou personagem a maioria dos servidores disponíveis hoje em dia já  tem instalado o sistema na base, é aí só fazer a adaptação para seu gosto.
     
    Verifica em: data/creatirescript/scripts/Outfit.lua
     
    É aí que você faz as alterações da newtype quando efetuar o login, se o seu servidor não possuir esse sistema, da uma procurada no tk que tem tutorial.
  4. Haha
    Spooky Ghost recebeu reputação de ArielZeRah em Recomendações VPS'Hospdagem.   
    Uma empresa falando para trocar de fornecedor kkkkkkk só pode ser piada, agradecemos pela alerta @roriscrave
     
    Com toda certeza não irei fazer um contrato rs, e tenho certeza que vários também não vão.
  5. Obrigado
    Spooky Ghost deu reputação a roriscrave em Recomendações VPS'Hospdagem.   
    Mais como saber qual usar é também saber qual NÃO USAR.
     
    Sou cliente da ServerCore desde 2013, e assim eles me trataram hoje, não recomendo a empresa e vou migrar dela, como eles mesmos pediram para que eu fizesse.
    3 dias para verificar o pagamento e extremamente arrogante.
    edit: meu pagamento foi aprovado no dia 10, e dia 29 ainda não tinha sido resolvido.
     
    Não estou mostrando meu nome nem IP para preservação da privacidade.
     

  6. Curtir
    Spooky Ghost recebeu reputação de Storm em Nova equipe & Dark Mode!   
    Sobre os  eventos  do tibiaking, o que seria legal é cada mês ser de  um tema   diferente para não deixar ficar muito repetitivo e que todos possam participar, porque cada um tem uma área que é seu ponto forte, então a variedades de temas do mês possibilitaria todos terem sua chance, sobre minha participação dos eventos, ainda não estou preparado, existem pessoas muito habilidosas aqui que até me surpreende, é isso.
     
    É apenas minha humilde opinião, e parabéns para os novos integrantes boa sorte a todos! xD
  7. Curtir
    Spooky Ghost recebeu reputação de Cat em Nova equipe & Dark Mode!   
    Sobre os  eventos  do tibiaking, o que seria legal é cada mês ser de  um tema   diferente para não deixar ficar muito repetitivo e que todos possam participar, porque cada um tem uma área que é seu ponto forte, então a variedades de temas do mês possibilitaria todos terem sua chance, sobre minha participação dos eventos, ainda não estou preparado, existem pessoas muito habilidosas aqui que até me surpreende, é isso.
     
    É apenas minha humilde opinião, e parabéns para os novos integrantes boa sorte a todos! xD
  8. Curtir
    Spooky Ghost deu reputação a Cat em Nova equipe & Dark Mode!   
    NOVOS INTEGRANTES NA EQUIPE
       Os membros que se inscreveram no tópico divulgado semana passada sobre vagas na equipe foram selecionados. Agora contamos com 8 assistentes e 2 moderadores, que estarão auxiliando na administração da comunidade. Agradecemos a inscrição e participação voluntária de todos, e sejam bem vindos @Storm @LeoTK @L3K0T @Diego Rulez @ITALOx @Rutserzim @Aksz @.HuRRiKaNe @Underewar@Belmont .
     
     
     
     
    EVENTOS NO TIBIAKING

    Queremos reativar os eventos que aconteciam no Tk e queremos saber se você participaria, vote em nossa enquete qual seria o melhor evento, scripting, mapping, spriting ou design? Ou talvez mais deles? Comente! ?
     
     

     
    DARK MODE
       Já está disponível o layout dark mode para os corujões do Tibia King! Para usar vá até o final da página em Tema > Dimension - Dark Space Edition. Ainda estamos aperfeiçoando e estaremos corrigindo eventuais erros no layout novo, se encontrar algum reporte aqui no tópico. Você pode trocar o layout quando quiser e inclusive usar o modo escuro no seu mobile.
    Amostra:
     
     
     
     
     
     
     
     
     
  9. Curtir
    Spooky Ghost recebeu reputação de elitehox em rings e boots equipados nao funcionao ao relogar   
    @elitehox Eu estou pelo celular e fica um pouco difícil de ver, mas pelo o que eu olhei não consegui ver se tinha algo relacionado a equipar um item.
     
     
    Mas como é um evento deve ser as storage que está setando no login e um arquivo em algum lugar verificando a storage e desativando os itens,  eu não sei quando que meu PC vai chegar, mas deixa ai, pode ser que alguém te ajude também, ou deixa excluído se for um evento que você não irá utilizar em seu servidor.
     Espero ter ajudado maninho! xD
  10. Curtir
    Spooky Ghost recebeu reputação de Lurk em rings e boots equipados nao funcionao ao relogar   
    @elitehox veja na parte das functions da lib, deve ser algo relacionado a onEquip, estou pelo celular e sem computador no momento, mas deve ser ali que está uma condição para fazer isso com os item.
     
    Como você disse que fez substituição dos mods, você provavelmente tem uma base secundária, então compara as duas funções onEquip ou então posta aqui a que está com o erro.
  11. Curtir
    Spooky Ghost recebeu reputação de elitehox em rings e boots equipados nao funcionao ao relogar   
    @elitehox bom, se você diz que é os mods, não tem problema em arrastar eles na área de trabalho e ligar o servidor para ver se o problema vai ser resolvido, depois de arrastados tente colocar um por um e reiniciando o servidor, sei que é bem chato mas sem o código fica difícil, e desse jeito fica fácil descobrir, então tenta isso.
  12. Curtir
    Spooky Ghost recebeu reputação de elitehox em rings e boots equipados nao funcionao ao relogar   
    @elitehox Sempre informe a versão de sua TFS ou OTX, isso ajuda bastante na hora de ver onde está o problema, nesse caso o problema pode ser que está na pasta movements de seu servidor ou até mesmo um arquivo em creatirescript, verifica esses arquivos/pastas faz o backup e vai apagando algumas coisas que não foram criados por você e sim pelo cara que era dono da base. (Tome cuidado para não apagar coisas importantes, por isso o motivo do backup)
     
    E se precisar de ajuda, deixa o código no tópico para outras pessoas também te ajudar nesse problema.
  13. Curtir
    Spooky Ghost deu reputação a L3K0T em UPDATE 2 Moveitem para seu servidor - Bugs Fix - tfs 0.4 e tfs 0.3.6   
    pra por em cima é o itemmove2
     
    local depottiles = {} --piso pra n jogar local depots = {2589} --id dos dps local group = 6 --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 isInteste(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 lixo no depot!!") doSendMagicEffect(getThingPos(cid),CONST_ME_POFF) return false end end return true end <event type="moveitem2" name="MoveItem2" event="script" value="moveitem2.lua"/>
     
    registerCreatureEvent(cid, "MoveItem2")
     
    se vc tá em adm no moveitem2 ele passa então esse bloqueia até adm
     
     
  14. Haha
  15. Curtir
    Spooky Ghost recebeu reputação de L3K0T em UPDATE 2 Moveitem para seu servidor - Bugs Fix - tfs 0.4 e tfs 0.3.6   
    @L3K0T  Um else ainda está persistindo, ele fica nessa parte:
     
     
  16. Curtir
    Spooky Ghost deu reputação a L3K0T em UPDATE 2 Moveitem para seu servidor - Bugs Fix - tfs 0.4 e tfs 0.3.6   
    else if(tmpStr == "moveitem") m_type = CREATURE_EVENT_MOVEITEM; else if(tmpStr == "moveitem2") m_type = CREATURE_EVENT_MOVEITEM2; else if(tmpStr == "extendedopcode") m_type = CREATURE_EVENT_EXTENDED_OPCODE; else { std::cout << "[Error - CreatureEvent::configureEvent] No valid type for creature event." << str << std::endl; return false; }
  17. Curtir
  18. Curtir
    Spooky Ghost deu reputação a L3K0T em UPDATE 2 Moveitem para seu servidor - Bugs Fix - tfs 0.4 e tfs 0.3.6   
    baixa ai e testa da rebuild na source se der eerro na compilação posta o erro
    creatureevent.cpp game.cpp creatureevent.h @Spooky Ghost
  19. Curtir
    Spooky Ghost deu reputação a L3K0T em UPDATE 2 Moveitem para seu servidor - Bugs Fix - tfs 0.4 e tfs 0.3.6   
    achei vários erros vou arrumar rsrs
  20. Curtir
    Spooky Ghost deu reputação a L3K0T em UPDATE 2 Moveitem para seu servidor - Bugs Fix - tfs 0.4 e tfs 0.3.6   
    Galera vo fazer o novo UPDATE moveitem2 - FEITO!
  21. Obrigado
    Spooky Ghost recebeu reputação de L3K0T em UPDATE 2 Moveitem para seu servidor - Bugs Fix - tfs 0.4 e tfs 0.3.6   
    Opa, já vou deixando meu rep porque parece bem interessante, hehe.
  22. Curtir
    Spooky Ghost deu reputação a L3K0T em UPDATE 2 Moveitem para seu servidor - Bugs Fix - tfs 0.4 e tfs 0.3.6   
    TUTORIAL BY L3K0T
     
    EXPLICAÇÃO/RESUMO:
    Bom galera esse sistema foi fixado por mim e resolvi trazer pra vocês o UPDATE contendo 2 moveitem pra funcionar perfeitamente ao seu jogo, esses sistemas tem a obrigação de parar players que jogam lixo na porta da sua casa, em cima do seu depot, em teleportes, e aonde você não queira. "somente dono, sub, e convidados podem jogar lixo ou mover items da sua casa" é um pacotão completo e revisado que vai evitar engraçadinhos bugar seu server.
     
    lixo no dp vídeo spoiler;;
     
    lixo house vídeo  spoiler;;
     
     
    Tutorial:
    1° abra seu creatureevents.cpp com o editor de sua preferencia. "eu uso notepad++"
     
    Ache o TERCEIRO CREATURE_EVENT_PREPAREDEATH; 
    case CREATURE_EVENT_PREPAREDEATH: return "cid, deathList"; em baixo coloca:
    case CREATURE_EVENT_MOVEITEM: return "moveItem, frompos, topos, cid"; case CREATURE_EVENT_MOVEITEM2: return "cid, item, count, toContainer, fromContainer, fromPos, toPos"; ache o SEGUNDO CREATURE_EVENT_PREPAREDEATH:
    case CREATURE_EVENT_PREPAREDEATH: return "onPrepareDeath"; em baixo coloca:
    case CREATURE_EVENT_MOVEITEM: return "onMoveItem"; case CREATURE_EVENT_MOVEITEM2: return "onMoveItem2"; ache o PRIMEIRO CREATURE_EVENT_PREPAREDEATH:
    else if(tmpStr == "preparedeath") m_type = CREATURE_EVENT_PREPAREDEATH; em baixo coloca:
    else if(tmpStr == "moveitem") m_type = CREATURE_EVENT_MOVEITEM; else if(tmpStr == "moveitem2") m_type = CREATURE_EVENT_MOVEITEM2; ache:
    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; } em baixo coloca: ATENÇÃO PRA TFS 0.4 USE ESSE ABAIXO
    uint32_t CreatureEvent::executeMoveItem2(Player* player, Item* item, uint8_t count, const Position& fromPos, const Position& toPos, Item* toContainer, Item* fromContainer, int16_t fstack) { //onMoveItem(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); bool result = m_interface->callFunction(7); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeMoveItem] Call stack overflow." << std::endl; return 0; } } uint32_t CreatureEvents::executeMoveItems(Creature* actor, Item* item, const Position& frompos, const Position& pos) { 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; } uint32_t CreatureEvent::executeMoveItem(Creature* actor, Item* item, const Position& frompos, const Position& pos) { 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; } }  
     
    ATENÇÃO PRA TFS 0.3.6 USE ESSE ABAIXO
    uint32_t CreatureEvent::executeMoveItem2(Player* player, Item* item, uint8_t count, const Position& fromPos, const Position& toPos, Item* toContainer, Item* fromContainer, int16_t fstack) { //onMoveItem(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)); LuaScriptInterface::pushThing(L, item, env->addThing(item)); lua_pushnumber(L, count); LuaScriptInterface::pushThing(L, toContainer, env->addThing(toContainer)); LuaScriptInterface::pushThing(L, fromContainer, env->addThing(fromContainer)); LuaScriptInterface::pushPosition(L, fromPos, fstack); LuaScriptInterface::pushPosition(L, toPos, 0); bool result = m_interface->callFunction(7); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeMoveItem] Call stack overflow." << std::endl; return 0; } } 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->second->getEventType() == CREATURE_EVENT_MOVEITEM){ if(!it->second->executeMoveItem(actor,item,frompos,pos)) return 0; } } return 1; } uint32_t CreatureEvent::executeMoveItem(Creature* actor, Item* item, const Position& frompos, const Position& pos) { 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); LuaScriptInterface::pushThing(L, item, env->addThing(item)); LuaScriptInterface::pushPosition(L, frompos, 0); LuaScriptInterface::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; } } 2°  agora em creatureevetns.h
     
    Ache:
    CREATURE_EVENT_PREPAREDEATH, em baixo coloca:
    CREATURE_EVENT_MOVEITEM, CREATURE_EVENT_MOVEITEM2, ache:
    uint32_t executePrepareDeath(Creature* creature, DeathList deathList); em baixo coloca:
    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); ache:
    bool playerLogout(Player* player, bool forceLogout); em baixo coloca:
    uint32_t executeMoveItems(Creature* actor, Item* item, const Position& frompos, const Position& pos);  
    3° agora em game.cpp
     
    ache:
    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; } troque por:
    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_creatureEvents->executeMoveItems(player, item, mapFromPos, mapToPos)) return false; ReturnValue ret = internalMoveItem(player, fromCylinder, toCylinder, toIndex, item, count, NULL); if(ret == RET_NOERROR) return true; player->sendCancelMessage(ret); return false; } Feito isso é só compilar sua source no modo REDUILD pra que as funções funcione.
     
     
    NO SERVIDOR:
     
    Agora no seu otserv vai em creturescripts, vai no arquivo login.lua e registra e event:
    registerCreatureEvent(cid, "MoveItem") registerCreatureEvent(cid, "MoveItem2") em creaturescript .xml
    <event type="moveitem" name="MoveItem" event="script" value="houseprotecao.lua"/> <event type="moveitem2" name="MoveItem2" event="script" value="moveitem2.lua"/> script do houseprotecao.lua "move item1
     
    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 script do moveitem2.lua "moveitem2
    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  
    OUTROS:
    bloquear item usando moveitem2
    if moveItem.itemid == IDDOITEM then doPlayerSendTextMessage(cid,25,'você bloqueou um item para não move no jogo!') return false end  
    ajudei?? REP+
     
    CRÉDITOS:
    @L3K0T
    Fir3element
    Summ
    Wise
    GOD Wille
     
     
    BUGs mesmo adicionado está jogando item em cima do depot, solta o puff de efeito mais não barra, bom isso pode ocorrer por questão de ter coisas adicionadas no game.cpp como o "push delay item" por exemplo e para resolver isso, tive que deixar assim.
     
     
    if(!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { player->sendCancelMessage(RET_CANNOTTHROW); return false; } // Anti-Push feature Prevention System by Xampy // /* Corrigido ElfBot Anti-Push (Anti-Crash) */ if(g_config.getBool(ConfigManager::ANTI_PUSH)){ //included by Yan Liima 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); //by Yan Liima if(Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_EXHAUST, delay, 0, false, 1)) player->addCondition(condition); /* end */ 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_creatureEvents->executeMoveItems(player, item, mapFromPos, mapToPos)) return false; ReturnValue ret = internalMoveItem(player, fromCylinder, toCylinder, toIndex, item, count, NULL); if(ret == RET_NOERROR) return true; player->setNextAction(OTSYS_TIME() + g_config.getNumber(ConfigManager::ACTIONS_DELAY_INTERVAL) - 10); return true; player->sendCancelMessage(ret); return false; } // Anti-Push feature Prevention System by Xampy //  
  23. Curtir
    Spooky Ghost deu reputação a M ustang em [BASE] NARUTO ATOM ONLINE - LINUX   
    Bom, esses últimos dias ai vou fazer um agrado pra comunidade de tibia derivado.
    Hoje vou postar a base do Naruto Atom Online.
    ( baixe por conta e risco )
     
    [+] Bom contem tudo do atom. [+]
    [+] Mesmas vocs. [+]
    [+] Mesmos sistemas. [+]
    [+] Mesmo mapa. [+]
    [+] Mesmo tudo. [+]
    OBS: CONTEÚDO PRÓPRIO PARA ESTE FÓRUM COMO FOI COMPRADO QUERO O CONTEÚDO SÓ AQUI NÃO ESTÁ LIBERADO A POSTAGEM EM OUTROS FÓRUNS 
    Download
    Client ( use algum molebox unpacker)
    Source
     
    Créditos: Naruto Atom Online.
     
    ( o servidor foi comprado caso precise de provas eu mando )
     
     
     
     
  24. Curtir
    Spooky Ghost deu reputação a LeoTK em Servidor NTOUnLiMiTeD e NTOStorm   
    Tópico editado por mim com scan \o
  25. Curtir
    Spooky Ghost deu reputação a M ustang em Servidor NTOUnLiMiTeD e NTOStorm   
    Olá vim aqui postar o servidor do NARUTO STORM e NARUTO UNLIMITED pois o servidor foi vendido e mesmo assim colocaram o servidor online depois de prometer que não iriam abrir.
    Com mesmo mapa etc.
    https://www.youtube.com/channel/UCpqGkQxffeaqRdxf8UvAyUg Aqui possui alguns videos do que contem no servidor.
     
    Link do server: 
    https://mega.nz/file/q6YQhKLa#-QJ8sK-wwaL-9d4My2LdLYABjcgrVaw73mWEewTCdTI
    Scan
    obs: Scan por @LeoTK
     
    Informações do Servidor:
    System de FLY
    Portões do GUY
    Imortal
    Mapa proprio
    Radar Bijuu
    OBS: CONTEÚDO PRÓPRIO PARA ESTE FÓRUM COMO FOI COMPRADO QUERO O CONTEÚDO SÓ AQUI NÃO ESTÁ LIBERADO A POSTAGEM EM OUTROS FÓRUNS 
    ( não recomendo baixar e colocar online e sim estudar oque foi tentado criar pois contem muitos bugs )
     
    Servidor criado por: Daniel e Bruno.
    Tenho o total direito de postar pois o mesmo foi vendido para varias outras pessoas.
    Caso precisem de provas que o servidor foi comprado mande uma mensagem na DM.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo