Ir para conteúdo

Heyron

Membro
  • Registro em

  • Última visita

  1. YomeeLSP reagiu a uma resposta no tópico: Advanced Sound
  2. Agora em 2025 a CipSoft finalmente está planejando acrescentar esse sistema no Global, coisa que em 2014 o @xWhiteWolf já havia elaborado. Entretanto a Cip implementou uma melhoria no qual permite com que o jogador ative/desative o recurso de ataque direcional quando quiser através de uma opção no client. Em OT Server dá pra ativar/desativar o recurso através de talkaction.
  3. Sim, inclusive encontra até tutoriais no Youtube, é só buscar termos como "Uniform Server Gesior", ou etc.
  4. É alguma coisa envolvendo scripts da pasta creaturescripts.
  5. Xampp é opcional.. Tem também o Uniform Server, que é um ótimo programa e bem menos complexo.
  6. Heyron postou uma resposta no tópico em Anuncie seu OTServer
    Elysia OT (Global Full 8.60) IP: elysiaot-global.servegame.com ✔︎ Login pelo Account Manager 1/1, não temos site. ✔︎ Login zerado é Cast System. XP (Rates): Stages = Sim Experience = 50.0 Skill = 15.0 Magic = 5.0 Loot = 1.0 Spawn = 1.0 Protection Level: 30 ✔︎ Sem itens VIP. ✔︎ Premiação ao upar nível 20, 50 e 80. ✔︎ Itens iniciais por vocação. ✔︎ Free Bless até o level 50. ✔︎ Danos de spells balanceados. ✔︎ Sem fast attack ou ataque rápido (padrão 2seg). ✔︎ Sem itens infinitos, exceto munição de Paladin. Jogue agora! IP: elysiaot-global.servegame.com Versão: 8.60
  7. Danilift reagiu a uma resposta no tópico: Arrumar attackspeed do paladin
  8. Em data/weapons/weapons.xml você deve inserir o código abaixo cada munição. swing = "true" As munições ficam no final do arquivo weapons.xml, portanto você deve inserir o código acima em cada ID de munição diferente, como por exemplo na Spear normal, Royal Spear, Power Bolt e etc.. O parâmetro responsável pela Assassin Star ficaria assim, por exemplo: <distance id="7368" level="80" event="function" swing="true" value="default"/> <!-- Assassin Star -->
  9. Se eu estou me propondo a pagar é porque já tentei de diversas formas, mas perdi a linha. Compilar sources que já tem o arquivo vcxproj é moleza, agora quero ver quando as sources só tem os arquivos de cabeçalho (.h) e código fonte (.cpp)
  10. Uso o Microsoft Visual 2019. Se alguém se propor a fazer um vídeo ensinando como compilar uma source no qual contem apenas arquivos .cpp e .h, eu pago.
  11. @Zedgast fica no items.xml e movements.xml apenas.
  12. É simples descobrir isso, dentro do items.xml veja como está o Sword Ring por exemplo.
  13. Heyron postou uma resposta no tópico em Suporte Tibia OTServer
    Para não ficar desigual com quem decide ou não adquirir a promotion, seria interessante um script que limita o level máximo de cada vocação (a promotion). Pena que o ChatGPT está fora do ar, se não poderia tentar solicitar um exemplo de script LUA.
  14. Heyron postou uma resposta no tópico em Suporte Tibia OTServer
    Nesse caso, você pode fazer um aumento gradativo conforme a promotion da vocação. Um breve exemplo: Sorcerer: gainhp="5" gainmana="5" Master Sorcerer: gainhp="7" gainmana="10" Epic Sorcerer: gainhp="9" gainmana="15" E assim vai.. Vale ressaltar que você tem total liberdade para alterar outros atributos que mudam de classe para classe, com ou sem promotion.
  15. Heyron postou uma resposta no tópico em Suporte Tibia OTServer
    Tem muito oque fazer não, chefe. Só alterando isso aqui mesmo: gainhp="5" gainmana="5"
  16. Heyron postou uma resposta no tópico em Suporte Tibia OTServer
    Tenta esse código: FONTE: Chat-GPT -- Função para filtrar a string local function filtrateString(str) if type(str) ~= "string" then return false end local _, first = string.find(str, "a ") local _, last = string.find(str, " ", first + 1) local _, second = string.find(str, "b ") return {str:sub(first + 1, last - 1), str:sub(second + 1)} end -- Tabelas para armazenar as caves exclusivas local caveExclusiva = { {pos = {x = 2321, y = 482, z = 7}, storage = 822081}, {pos = {x = 2324, y = 482, z = 7}, storage = 822082}, -- Adicione as demais caves exclusivas aqui } -- Verifica se a posição é uma cave exclusiva local function isCaveExclusiva(position) for i = 1, #caveExclusiva do if caveExclusiva[i].pos.x == position.x and caveExclusiva[i].pos.y == position.y and caveExclusiva[i].pos.z == position.z then return caveExclusiva[i] end end return nil end -- Função para checar a disponibilidade da cave local function checkCaveAvailability(cid, fromPosition, numerodacave) local storageGlobal = numerodacave + 900000 -- Filtra a string para obter o tempo restante de exaustão local remainingTime = tonumber(filtrateString(getGlobalStorageValue(storageGlobal))[2]) if remainingTime and remainingTime > os.time() then local currentTime = os.time() local timeDiff = os.difftime(remainingTime, currentTime) if timeDiff > 0 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Desculpe, a Cave ["..numerodacave.."] não está disponível. Escolha outra CAVE ou aguarde até ela ser liberada.") return true end end local player = Player(cid) local isVIP = player:getPremiumDays() > 0 local exhaustionTime = 10800 -- Tempo de exaustão padrão para jogadores não VIP if isVIP then exhaustionTime = 12600 -- Tempo de exaustão para jogadores VIP end -- Restante do código para verificar a exaustão e permitir acesso à cave return false end -- Exemplo de uso local playerID = 123 -- ID do jogador local playerPosition = {x = 2321, y = 482, z = 7} -- Posição do jogador local caveNumber = 1 -- Número da cave checkCaveAvailability(playerID, playerPosition, caveNumber) Se der erro, tente esse outro: local function filtrateString(str) if type(str) ~= "string" then return false end local first, last = 0, 0 local second, final = 0, #str for i = 1, #str do if string.byte(str:sub(i,i)) == string.byte('a') then first = i + 2 for t = first, #str do if string.byte(str:sub(t,t)) == string.byte(' ') then last = t - 1 break end end end if string.byte(str:sub(i,i)) == string.byte('b') then second = i + 2 end end return {str:sub(first, last), str:sub(second, final)} end local function getPlayerHuntExhaustion(cid) local exhaustStorage = 13540 local exhaustionTime = 1800 -- Tempo de exaustão em segundos (padrão: 30 minutos) local lastTime = getPlayerStorageValue(cid, exhaustStorage) if lastTime and lastTime > os.time() then local remainingTime = lastTime - os.time() return remainingTime else setPlayerStorageValue(cid, exhaustStorage, os.time() + exhaustionTime) return 0 end end function onUse(cid, item, fromPosition, itemEx, toPosition) local playerLevel = getPlayerLevel(cid) local isVIP = false -- Defina como verdadeiro se o jogador for VIP local caveExclusiva = { {pos = {x = 2321, y = 482, z = 7}, storage = 822081}, {pos = {x = 2324, y = 482, z = 7}, storage = 822082}, -- Adicione as demais caves exclusivas aqui } local cave = nil for i = 1, #caveExclusiva do if caveExclusiva[i].pos.x == fromPosition.x and caveExclusiva[i].pos.y == fromPosition.y and caveExclusiva[i].pos.z == fromPosition.z then cave = caveExclusiva[i] break end end if not cave then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Para usar uma Cave Exclusiva, você precisa usar esse item na frente da porta da Cave Exclusiva.") return true end local storageGlobal = cave.storage local remainingTime = tonumber(filtrateString(getGlobalStorageValue(storageGlobal))[2]) if remainingTime and remainingTime > os.time() then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Desculpe, a Cave ["..numerodacave.."] não está disponível. Escolha outra CAVE ou aguarde até ela ser liberada.") return true end local tempohunt = 0 if playerLevel > 500 then tempohunt = 5400 else tempohunt = 10800 end if isVIP then tempohunt = tempohunt + 1800 -- Adiciona 30 minutos extras para.

Informação Importante

Confirmação de Termo