
-
-
Under reagiu a uma resposta no tópico: [OTClient Showoff] Mostre seu Projeto/Módulo/Interface do seu OTClient
-
Heyron reagiu a uma resposta no tópico: Sistema de Auto-Facing: Vire Automaticamente para o Target ao Atacar (TFS 0.3.6)
-
xWhiteWolf reagiu a uma resposta no tópico: Sistema de Auto-Facing: Vire Automaticamente para o Target ao Atacar (TFS 0.3.6)
-
Sistema de Auto-Facing: Vire Automaticamente para o Target ao Atacar (TFS 0.3.6)
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.
-
-
-
(Resolvido)Ajuda na escolha de Base de OTS
Sim, inclusive encontra até tutoriais no Youtube, é só buscar termos como "Uniform Server Gesior", ou etc.
-
psyk0nix reagiu a uma resposta no tópico: Players ficam "imortal" nao toma dano de outro player ou monstro
-
Players ficam "imortal" nao toma dano de outro player ou monstro
É alguma coisa envolvendo scripts da pasta creaturescripts.
-
(Resolvido)Ajuda na escolha de Base de OTS
Xampp é opcional.. Tem também o Uniform Server, que é um ótimo programa e bem menos complexo.
-
-
Elysia OT (Global Full 8.60)
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
-
-
Arrumar attackspeed do paladin
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 -->
-
(Pago PIX) Compilar executável apenas com arquivos .h e .cpp
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)
-
(Pago PIX) Compilar executável apenas com arquivos .h e .cpp
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.
-
(Resolvido)Duvida ao fazer item
@Zedgast fica no items.xml e movements.xml apenas.
-
(Resolvido)Duvida ao fazer item
É simples descobrir isso, dentro do items.xml veja como está o Sword Ring por exemplo.
-
Bonus Vocation
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.
-
Bonus Vocation
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.
-
Bonus Vocation
Tem muito oque fazer não, chefe. Só alterando isso aqui mesmo: gainhp="5" gainmana="5"
-
Add exhausted
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.
-
Heyron reagiu a uma resposta no tópico: Adicionar "Summoned by..." na descrição do monstro ao dar Look
- Adicionar "Summoned by..." na descrição do monstro ao dar Look