Ir para conteúdo

carlos2608

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    carlos2608 deu reputação a joadson em OpenPrivateChannel   
    Olá, estarei disponibilzando o código para abrir o ChannelPrivate, se você usa o CastSystem seja do OTX ou do TFS 0.4, será util se for usar o Cast System para abrir ao fazer login(Irei disponibilizar o script também).
    Eu fiz esse código com base em outro da própria sourcer, funciona perfeitamente.

    Explicando um pouco sobre o AutoCast, como irei usar o CastSystem, pude notar que em muitos OT's, mesmo com CastSystem, os players não ativavam a função, então coloquei para abrir automaticamente, sendo que o player terá que usar o comando para desativar, meu intuito é fazer com que os novos jogadores venham conhecer um pouco sobre o OT mesmo antes de jogar(essa função pode ser "inutil" para alguns, mas sei que servirá para outros assim como serviu para mim.
     
    Todos códigos foram feitos por mim, caso copie, coloque os créditos.
    PS: Script AutoCast para OTX, se usa outra versão é só mudar as funções que chamam o Cast ou me envie PM que irei modificar.
     
    Vamos lá.
     
    Procure static int32_t luaL_errors(lua_State* L); e abaixo coloque
    static int32_t luaOpenPrivateChannel(lua_State* L); depois procure por lua_register(m_luaState, "doPlayerSendCancel", LuaInterface::luaDoPlayerSendCancel); e acima coloque    
    //OpenPrivateChannel(cid) lua_register(m_luaState, "openPrivateChannel", LuaInterface::luaOpenPrivateChannel);  
    Depois procure por int32_t LuaInterface::luaGetTileInfo(lua_State* L) e coloque acima
     
    int32_t LuaInterface::luaOpenPrivateChannel(lua_State* L) { ScriptEnviroment* env = getEnv(); uint32_t cid = popNumber(L); Player* player = env->getPlayerByUID(cid); if (!player || player->isRemoved() || !player->isPremium()) return false; ChatChannel* channel = g_chat.createChannel(player, 0xFFFF); if (!channel || !channel->addUser(player)) return false; player->sendCreatePrivateChannel(channel->getId(), channel->getName()); return true; } Agora vamos ao script para abrir o Live/Cast ao fazer logon.
     
    Vá em data/Creatureevents e crie um arquivo chamado live.lua e coloque o código abaixo
     
    function onLogin(cid) local t, data = 1, getPlayerSpectators(cid) if getPlayerAccountManager(cid) == MANAGER_NONE and getPlayerAccess(cid) <= 4 then -- Account Manager não irá iniciar o Cast e GM também não, mude apenas o Acess caso seja diferente data.broadcast = true doPlayerSetSpectators(cid, data) db.executeQuery("UPDATE `players` SET `broadcasting` = 1 WHERE `id` = " .. getPlayerGUID(cid)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Seu Cast foi ativado automaticamente, para desativar digite /live off.") openPrivateChannel(cid) -- A função para abrir o PrivateChannel end return true end Depois abra o login.lua e coloque registerCreatureEvent(cid, "AutoCast")
     
    Feito isso, abra o creaturescript.xml e coloque
    <event type="login" name="AutoCast" event="script" value="live.lua"/>  
  2. Gostei
    carlos2608 deu reputação a Lyu em Cam System 10.98 (TFS 1.3)   
    Olá TK, hoje venho publicar um sistema bem interessante que venho mexendo há algumas semanas, estou falando do Cam System, um sistema de nível avançado que coleta packets durante a jogatina e forma uma gravação daquele momento, onde você poderá assistir à essa gravação quantas vezes quiser, como um replay, porém o sistema está limitado somente para fins de estudos e curiosidades. Não recomendo utilizar em seu servidor, pois como está limitado, também está rodando dentro do TFS e pode pesar, já que não tive tempo para otimizá-lo e criar um server próprio somente para assistir às gravações. Também não está serializando/deserializando em arquivos.cam, está salvando na memória. Mais uma vez, não utilize, só estude a principal funcionalidade do sistema.
     
    Bom, o gist já está publicado, você pode acessá-lo aqui ou então baixar a source já com o sistema incluso pronto pra rodar (Lembrando que utilizei a última versão do forgottenserver-master, confira aqui)
     
    Download da Source: src with cam.zip
    Scan: https://www.virustotal.com/gui/file/3392c1c31d8bbab5cdc2f7e3c0c766749f3238efd2c36c80575480283b15fc32/detection
     
    Para começar uma nova gravação, utilize /replay start
    Para parar uma gravação e salvá-la, utilize /replay stop
     
    feito isso, para assisti-la, deslogue sua conta e na janela de login, deixe o accountname vazio e no password informe replaylist
     
    Então é isso, se algum Programador estiver afim de aplicar otimizações/serialização ao sistema, fique à vontade para contribuir. Este sistema é incrível e pode muito bem dar certo.  ?
     
    Vídeo de demonstração: 
     
  3. Gostei
    carlos2608 deu reputação a Vodkart em [8.6] Task System 4.0! (Task system + Daily Task System)   
    Removido:
     
    *Boss Room
    *Rank Task
    *Prêmios para os 10 primeiros a terminar todas as tasks
     
    Adicionado:
     
    *Daily Task System (Sistema exclusivo de Task diario, podendo pegar 1x a cada 24 hrs, irei explicar mais depois.)
    *Task agora é por progresso, você não pode sair e voltar, terá que terminar a task 1 para avançar para a task  2, assim sucessivamente.
    *Task Points
    *Level para realizar a task
    *Nova talkaction que mostra uma janela de informações sobre o level da task, premios que irá receber, progresso, etc...
    *Items para entrega(Se o jogador deverá levar algum item junto com a quantidade de monstro morta) para finalizar a task
    *Sistema de look Task (Varia de acordo com a sua quantidade de Task Points, podendo ficar por exemplo como "Huntsman", "Ranger", etc...(alterável)
    *Mods e npc mais "clean", várias linhas removidas e o sistema está mais rápido
    *Vou Adicionar "scripts extras" Como:
    --> Tile que só passa quem tiver permissão depois de finalizar determinada quest
     --> Npc de Boss Room para entrar e enfrentar o monstro quem fez determinada quest
     
     
    [+] Resumo do Task system + Daily Task System [+]
     
    Task System: É o sistema de task "original", onde consiste em matar determinada quantidade de monstros(E entregar certo itens <- é configurável), para receber recompensas como Exp, Money e Items.
     
    Algumas mudanças do simple task 3.0 para o 4.0 foram:
     
    [+] O sistema agora é por progresso, isso quer dizer que você terá que ir terminando a quest para avançar para a seguinte.
    [+] O sistema Também recebeu uma alteração, fazendo com que as Tasks precisem que o jogador tenha um level determinado
    [+] A tabela para edição está mais fácil, fazendo com que você adicione ou remova monstros com mais tranquilidade, inclusive alterações das Rewards da Task.
     
    Daily Task System: É um sistema que desenvolvi para que os jogadores sempre estejam se comunicando com o npc de Task, no caso da Task Diaria, vária de acordo com o level do jogador, por exemplo:
     
    Jogadores entre level 6 ao 49 poderá cair em uma dessas 3 Task Diarias: Orcs, Tarantulas ou Wyverns
    Jogadores entre level 50 ao 79 poderá cair em uma dessas 3 Task Diarias: Dragons, Wailing Widows ou Ancient Scarabs
     
    E por ai vai, claro que você poderá aumentar as Task Diarias dependendo do level, eu fiz 3 para cada level que é pra postar, mas tudo isso você pode aumentar! Dependendo do seu servidor.
     
    E sim, você pode fazer a TASK "ORIGINAL" e a TASK "DIARIA" ao mesmo tempo! Ambas são distintas e possuem Rewards diferenciadas!
     
    No caso da Task diaria, levando em conta que você começou a fazer ela no dia 08/01 ás 20:00 Hrs, você tem até o dia 09/01 ás 20:00Hrs para termina-la e receber a recompensa, caso termine antes, a Task diaria só irá ficar disponível para repetição a partir desta mesma data 09/01 20:00 Hrs;
     
    [+] Caso você não termine a tempo, não tem problema, basta esperar este horário e começar uma nova Task.
    [+] Caso você começou a Daily Task e terminou antes desta data. mas por algum motivo esqueceu de entregar e a mesma passou do prazo, não tem importância, caso você tenha matado todos os monstros até 09/01 20:00 Hrs, você poderá entregar está Task em qualquer horário para receber suas Rewards e começar uma task a partir do momento em que você entregou! (INJUSTIÇA AQUI NÃO CARALHO).
     
    [+] Comandos Adicionais [+]
     
    /task -- Mostra as informações da sua Task Atual, como Nome da Task, Level, Rewards, Monstros que você poderá matar, Se tem que entregar algum Item junto, etc...
    /task daily -- É basicamente mostra a mesma informação da Task Principal, porém mostra também qual o prazo limite para entrega da task.
    /task counter -- É um comando que ATIVA ou DESATIVA o contador de monstros mortos na task no seu Channel.
     
    [+] Imagens [+]
     
    Cline neste link para ver algumas imagens da Task : http://imgur.com/a/eLIY3
     
     
     
    ------------------------------------------------ // --------------------------------------------------------------
     
    [+] Instalação do Sistema [+]
     
    Requisitos: Nível Médio de conhecimento em scripting LUA
     
    Pasta Mods
     
    Simple Task.xml
     
    https://pastebin.com/raw/P5hqMC3j
     
    NPC:
     
     
    Ludger.xml
     
    https://pastebin.com/raw/R56yLWHw
     
    simple_task.lua
     
    https://pastebin.com/raw/1mRzJ6aJ
     
    ---------------------------------------------- // ----------------------------------
     
    [+] configuração [+ ]
     
    Task System Principal
     
    task_sys = { [1] = {name = "Trolls", start = 176201, monsters_list = {"Troll","Troll champion"}, level = 8, count = 40, points = 0, items = {}, reward = {}, exp = 2000, money = 2000} }  
    [1]  --> O número entre os colchetes [] significa a ordem da Task, como a Task é por progresso sempre começará no 1 e irá pro [2], assim sucessivamente.
    name --> É o nome da task que o jogador irá fazer.
    start --> é a storage que indicará se o jogador começou a Task
    monster_list ={} --> É o nome dos monstros em que o jogador deverá caçar para completar a Task
    level --> É o level necessário para dar inicio á Task
    count --> É o número de monstros que o jogador tem que matar para completar a Task
    points --> Aqui determinada quantos Task points o jogador irá receber ao completar a Task
    items = {} --> Aqui determinada se além de matar os monstros, o jogador terá que entregar item também! Caso tenha só colocar o {ITEM_ID, QUANTIDADE} EX:
    items = {{2173,1},{2160,10},{2493,2}} rewad --> Aqui determinada se o jogador irá receber itens ao terminar a Task, mesma formula do items /\
    reward = {{2520,1},{2173,1}} exp --> Se o jogador irá receber Exp ao terminar a task. 0 ou quantidade de exp
    Money --> Se o jogador irá receber dinheiro ao terminar a task. 0 ou quantidade de dinheiro
     
     
    Daily Task System
     
    daily_task = { [1] = {name = "Orcs" ,monsters_list = {"Orc Berserker","Orc Rider","Orc Leader","Orc Warlord"}, count = 100, points = 0, reward = {}, exp = 5000, money = 10000} }  
    Segue o padrão da Task original, exceto que não precisa entregar items para o npc!
     
    Como funciona A randomização de level de acordo com a Daily task?
     
    Procure por está tabela em MODS
     
    local t = { [{6,49}] = {1,3}, [{50,79}] = {4,6}, [{80,129}] = {7,9}, [{130,math.huge}] = {10,12} }  
    entre as chaves e colchetes é o level do jogador para as Daily Task, Você pode adicionar quantas você quiser!
     
    Digamos que:
     
    [{6,49}] = {1,3}  --> Quer dizer que entre o level 6 ao 49 o jogador poderá cair na Daily Task número 1(Orcs), 2(Tarantulas) ou 3(Wyvern)!
    [{50,79}] = {4,6} --> Quer dizer que entre o level 50 ao 79 o jogador poderá cair na Daily Task número 4(Dragons), 5(Wailing Widows) ou 6(Ancient Scarabs)!
    ...
    [{130,math.huge}] = {10,12} --> Quer dizer que o jogador level 130 ou MAIS poderá cair na Daily Task número 10(Undead Dragons), 11(HydraS) ou 12(Ghastly Dragons)!
     
     
    Look Rank System
    Procure por está tabela em MODS
     
    local ranks = { [{1, 20}] = "Huntsman", [{21, 50}] = "Ranger", [{51, 100}] = "Big Game Hunter", [{101, 200}] = "Trophy Hunter", [{201, math.huge}] = "Elite Hunter" }  
    Entre 1-20 Task points o Rank será Huntsman
    Entre 21-50 Task posints o Rank será Ranger
    Entre 51-100 Task Points o rank será Big Game Hunter
    etc...
    Altere como quiser!
     
     
  4. Gostei
    carlos2608 deu reputação a Vodkart em Exclusive Cave System By Account! 8.6   
    Explicação:
     
    Este sistema proporciona ao jogador a compra de determinada cave por "X" tempo, cada conta poderá comprar somente 1 cave por vez... Lá o jogador poderá upar livremente.
     
    Também poderá chamar um amigo para upar na sua cave!!
     
    O sistema é o mais completo do mercado, vou estar falando do mesmo abaixo.
     
    OBS: Não esqueça de executar a query para funcionar!!
     
     
    Exclusive Cave System Features
     
     Dentro do pacote terá duas versões:  
    versão 1 : É para vendar as caves em money(Gold's)

    Versão 2: É para vender as caves por items, por exemplo por moedas especiais como scarab coins(ID 2159)
     
      O sistema é feito por banco de dados  
    O tempo da cave é mostrado em tempo real  
    Você poderá chamar um amigo para sua cave e também remove-lo quando quiser.  
    Existe um globalevents especifico para mostrar no default quando uma cave ficou disponível para venda! (Irá informar o nome da cave o preço dela!)  
    Você poderá configurar a cave para vender por exemplo:  
                     - Level minimo e máximo!
                     - Tempo de duração da cave
                     - Se precisa ser premium account para comprar a cave!
     
     
    Quando o tempo da cave expira tanto o dono da cave como o friend invitado são removidos da cave, mesmo estando offline ou online!  
    Comandos exclusivos:  
    Comando para dono da cave:
     
        /mycave - Mostra informações da sua cave, como:
     
          - Nome da cave
          - Nome do seu amigo de cave(caso tiver invitado)
          - Quando tempo falta para expirar o tempo da sua cave
     
    /addcavefriend - Adiciona um amigo seu para que ele possa entrar e sai da sua cave quando quiser... Obs: Tem um exhausted de 1 hora(configurável) para não ficar toda hora tirando e colocando amigo na cave.
     
    /removecavefriend - Remove o seu amigo da sua cave(caso ele esteja dentro da cave tanto offline quanto online, ele é removido)
     
    /cavetime - Mostra quando tempo falta para expirar a sua cave
     
     
    Comando para amigo invitado da cave:
     
    /cavefriendtime - Mostra quando tempo falta para expirar a cave que ele invitado.
     
    /caveleave - Comando para ele se kikar da cave que está invitado.
     
     
    Comandos adicionais importante para todos:
     

     /cavelist -- Mostra em uma janela todas as caves do servidor
     
     
    /cave ID -- Neste comando você terá que usar o ID da cave que deseja saber as infor,ações, por exemplo:
     
    /cave 1  -- Irá mostrar em uma janela todas as informações desta cave, como:
     
    -Nome da cave
    -Preço da cave
    -Level Minimo e Level Maximo para comprar a cave
    -Se nesta cave precisa ser Premium Account para comprar ou não.
     
    /cavepurchase -- Filtra em uma janela somente as caves que estão disponíveis para compra.
     
     
     
    ----------------------------------------------------------------------------------------------------------------------------------------------------
     
    Configurações:
     
    Vá na lib e irá se deparar com duas tabelas...
     
     
    Esta primeira tabela é onde você irá adicionar novas caves e atribuir as configurações, exemplo:
    exclusives_caves_areas = { -- adicionar as caves [1] = {name = "Demon Hunter", price = 1000, level = {min = 8, max =30}, time = 4, premium = false, enter = {x = 284, y = 223, z = 7}, from = {x = 275, y = 219, z = 5}, to = {x = 302, y = 240, z = 7}}, [2] = {name = "Hydras Thow", price = 2000, level = {min = 10, max = 1000}, time = 3, premium = true, enter = {x = 148, y = 218, z = 7}, from = {x = 137, y = 217, z = 7}, to = {x = 161, y = 234, z = 7}} }  
     
    [1] -- Entre os colchetes é o ID da cave, favor colocar e ordem.
     
    name = "Demon Hunter" -- Entre as aspas "" Você atribui o nome da cave
     
    price = 1000 -- Preço em gps da sua cave(caso use a versão que vende em gps)
     
    level = {min = 8, max =30} -- Aqui voce coloca o level min e max que o jogador tem que ser para comprar a cave
     
    time = 4 -- Tempo em horas que o jogador poderá ficar na cave
     
    premium = false -- Se para comprar a cave terá que ser premium (false ou true)
     
    enter = {x = 284, y = 223, z = 7} -- Pos de entrada da cave
     
    from = {x = 275, y = 219, z = 5}, -- Aqui você deverá pegar a pos do começa da cave
     
    to = {x = 302, y = 240, z = 7} - - -- Aqui você deverá pegar a pos final da cave!(como se fosse um quadrado.
     
    e como adicionar mais caves por exemplo? Assim:
     
    exclusives_caves_areas = { -- adicionar as caves [1] = {name = "Demon Hunter", price = 1000, level = {min = 8, max =30}, time = 4, premium = false, enter = {x = 284, y = 223, z = 7}, from = {x = 275, y = 219, z = 5}, to = {x = 302, y = 240, z = 7}}, [2] = {name = "Hydras Thow", price = 2000, level = {min = 10, max = 1000}, time = 3, premium = true, enter = {x = 148, y = 218, z = 7}, from = {x = 137, y = 217, z = 7}, to = {x = 161, y = 234, z = 7}}, [3] = {name = "Ciclops Cave", price = 5000, level = {min = 20, max = 50}, time = 2, premium = true, enter = {x = 198, y = 320, z = 7}, from = {x = 200, y = 340, z = 7}, to = {x = 250, y = 390, z = 7}} }  
     
    ----------------------------------------------------------------------------------------------------------------------------------------------------
     
    explicando a segunda tabela:
     
     
    exclusives_caves_config = { storage = 547575, check = 547576, comand_add_exaust = {hours = 1, storage = 547577}, -- tempo para nao ficar toda hora tirando e colocando amigo mensagem = "[Exclusive Cave System] Você foi removido ou o tempo da %s cave expirou!", serve_mensagem = "[Exclusive Cave System] A cave %s acabou de ficar liberada para venda por %d Gold's, aproveitem para compra-la no NPC!" }  
     
    storage -- nao mexer!
    check -- não mexer!!
     
    comand_add_exhausted -- é o tempo que jogador poderá voltar a invitar outro jogador, está configurado para 1 hora!!
     
    mensagem -- não mexa
     
    serve_mensagem -- não mexa tbm kkk
     
     
    Só baixar e executar as querys!!
     
     
    Cave System.rar
  5. Gostei
    carlos2608 deu reputação a warotserv em [CreatureEvent] Anti Fast-attack Elf Bot   
    Bom... decidi postar agora o script que eu fiz para barrar os botters de fast attack.

    Primeiro, crie um arquivo chamado "antiBot.lua" em "data\creaturescripts\scripts" e nele adicione o seguinte conteúdo:
    -- counts physicals, casts .... [player name : creature cid] playerAttacksMade = {} playerActivateTime = {} playerBlocked = {} function tablelength(T) local count = 0 for _ in pairs(T) do count = count + 1 end return count end function onLogin(cid) if isPlayer(cid) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'Loading Anti Bot... done.' ) playerAttacksMade[cid] = {} playerActivateTime[cid] = {} playerBlocked[cid] = false end return true end function onLogout(cid) if isPlayer(cid) then playerAttacksMade[cid] = nil playerActivateTime[cid] = nil playerBlocked[cid] = nil end return true end function onStatsChange(cid, attacker, type, combat, value) local maxAttacks = { 6, --pos 1 6, --pos 2 6, --pos 3 6, --pos 4 7, --pos 5 7, --pos 6 7, --pos 7 7, --pos 8 } if not type == STATSCHANGE_HEALTHLOSS or not isPlayer(attacker) then return true end if value <= 0 then return true end if playerAttacksMade[attacker][cid] == nil then playerAttacksMade[attacker][cid] = 0 playerActivateTime[attacker][cid] = os.time() end local currentTime = os.time() --TESTE --doPlayerSendTextMessage(attacker, MESSAGE_STATUS_CONSOLE_ORANGE, playerAttacksMade[attacker][cid] .. '________' .. attacker .. '_____' .. cid .. '______' .. currentTime .. '_______' .. playerActivateTime[attacker][cid] ) if currentTime >= playerActivateTime[attacker][cid] then playerActivateTime[attacker][cid] = currentTime + 1 playerAttacksMade[attacker][cid] = 0 else playerAttacksMade[attacker][cid] = playerAttacksMade[attacker][cid] + 1 end if playerAttacksMade[attacker][cid] > maxAttacks[getPlayerVocation(attacker)] then playerBlocked[attacker] = true doBroadcastMessage('O player ' .. getPlayerName(attacker) .. ' esta usando bot de fast attack. O seu ataque foi travado ate que ele relogue.', 21) doShowTextDialog(attacker,1952,"PARE DE USAR ELFBOT! Seu ataque foi bloqueado. Para destravar basta relogar. Obrigado. (Sistema exclusivo do ot)") return FALSE end return TRUE end function onCombat(cid, target) if isPlayer(cid) then if not playerBlocked[cid] then registerCreatureEvent(target, "AntiBot2") else return false end end return true end function onCast(cid, target) if isPlayer(cid) then if playerBlocked[cid] then return false end end return true end e em "creaturescripts.xml", encontrado em "data\creaturescripts" adicione:
    <event type="combat" name="AntiBot1" event="script" value="antiBot.lua"/> <event type="statschange" name="AntiBot2" event="script" value="antiBot.lua"/> <event type="login" name="AntiBot3" event="script" value="antiBot.lua"/> <event type="logout" name="AntiBot4" event="script" value="antiBot.lua"/> <event type="cast" name="AntiBot5" event="script" value="antiBot.lua"/> Agora vou explicar a parte configurável:

     
    local maxAttacks = { 6, --pos 1 6, --pos 2 6, --pos 3 6, --pos 4 7, --pos 5 7, --pos 6 7, --pos 7 7, --pos 8 } Aqui você vai modificar qual o número máximo de ações de combate (que dão dano) que certa vocação poderá dar. Posição 1 é Sorcerer, 2 é Druid, 3 é Paladin, 4 é Knight e assim por diante....
    Escolha bem esses números! Caso você erre, ele irá ficar detectando erradamente.
     
    Por exemplo,vamos supor que o knight tenha o fastAttack em 500ms (logo ele executará 2 ataques por segundo) e que sua magia de dano de menor exhaust tenha um exhaust de apenas 600ms, logo o numero maximo de ataques dele por segundo será 4 (cuidado quando spells de dano diferentes puderem ser usadas ao mesmo tempo, daí você terá de acrescentar mais 1 ao número de ataques por segundo.
     
    Por favor, testem e me falem o que acharam.
     
     
    Espero que ajude a tirar os botters de seu server.
     
    P.S.: Não me importo que roubem meus créditos e/ou postem em outros fórums. É bom espalhar esse script uma vez que botters nos servers 8.6 é muito comum.
     

Informação Importante

Confirmação de Termo