Ir para conteúdo
  • Cadastre-se

Posts Recomendados

  • Respostas 128
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

STYLLER OT - 2023 - TFS 1.5 (8.60)   Olá pessoal, hoje venho apresentar meu projeto open para vocês. Sou muito fã do mapa STYLLER, sempre em horas vagas procurava joga-lo, para quem não conh

Se tiver erros é só mandar aqui que resolvo! E se quiser contribuir com o projeto com novas áreas ou scripts é só mandar pra mim ou fazer um PULL REQUEST pelo github.

voce provavelmente criou um char com group id 6, porem a acc também deve ter o type 6 ... https://github.com/luanluciano93/styller/blob/master/schema.sql#L6

Posted Images

15 horas atrás, gabrielcostaaa disse:

luciano esse serve tem montaria ?

 

Serve sim, basta entrar no meu perfil e você verá que está escrito 'TFS 1.5 8.6'. Ao entrar, baixe apenas a source ou executável teste o servidor do Luciano. Depois, você deve baixar o arquivo 'mount.xml' e enviá-lo para o Luciano. No OTClient, ative via feature e teste. Pronto! :)

Link para o post
Compartilhar em outros sites
  • 3 weeks later...
  • Moderador
Em 11/11/2023 em 14:51, Eazy E Mapp disse:

El enlace  -  DESCARGAR LIBS Y APLICACIÓN EXE x64 - rev79  está fuera de línea, ¿pueden agregarlo nuevamente para descargar y probar este servidor?

@luanluciano93

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites

Projeto atualizado, mudança na engine (código fonte) e adicionado ao projeto as libs e exe para quem usa em windows.

Editado por luanluciano93 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • luanluciano93 mudou o título para [TFS 1.5 - 8.60] STYLLER OT - 2023
3 horas atrás, luanluciano93 disse:

Projeto atualizado, mudança na engine (código fonte) e adicionado ao projeto as libs e exe para quem usa em windows.

 

Link da Engine está indo pra do Nekiro e não da MillhioreBT.

Link para o post
Compartilhar em outros sites
  • 11 months later...

Olá luciano, estou usando seu servidor como base para o meu, fui colocar ele online agora para testar o mapa que estou trabalhando e encontrei alguns erros, consegue me ajudar?? Estou utilizando a nova base da Milhiore

 


Lua Script Error: [CreatureScript Interface]
data/creaturescripts/scripts/login.lua:onLogin
data/lib/core/player.lua:341: attempt to index a nil value (global 'ExperienceRateType')
stack traceback:
        [C]: in metamethod 'index'
        data/lib/core/player.lua:341: in method 'updateStamina'
        data/creaturescripts/scripts/login.lua:28: in function <data/creaturescripts/scripts/login.lua:1>


segue abaixo o player.lua

 

local foodCondition = Condition(CONDITION_REGENERATION, CONDITIONID_DEFAULT)

function Player.feed(self, food)
	local condition = self:getCondition(CONDITION_REGENERATION, CONDITIONID_DEFAULT)
	if condition then
		condition:setTicks(condition:getTicks() + (food * 1000))
	else
		local vocation = self:getVocation()
		if not vocation then return nil end

		foodCondition:setTicks(food * 1000)
		foodCondition:setParameter(CONDITION_PARAM_HEALTHGAIN, vocation:getHealthGainAmount())
		foodCondition:setParameter(CONDITION_PARAM_HEALTHTICKS, vocation:getHealthGainTicks() * 1000)
		foodCondition:setParameter(CONDITION_PARAM_MANAGAIN, vocation:getManaGainAmount())
		foodCondition:setParameter(CONDITION_PARAM_MANATICKS, vocation:getManaGainTicks() * 1000)

		self:addCondition(foodCondition)
	end
	return true
end

function Player.getClosestFreePosition(self, position, extended)
	if self:getGroup():getAccess() and self:getAccountType() >= ACCOUNT_TYPE_GOD then return position end
	return Creature.getClosestFreePosition(self, position, extended)
end

function Player.getDepotItems(self, depotId)
	return self:getDepotChest(depotId, true):getItemHoldingCount()
end

function Player.hasFlag(self, flag) return self:getGroup():hasFlag(flag) end

function Player.getLossPercent(self)
	local blessings = 0
	local lossPercent = {[0] = 100, [1] = 70, [2] = 45, [3] = 25, [4] = 10, [5] = 0}

	for i = 1, 5 do if self:hasBlessing(i) then blessings = blessings + 1 end end
	return lossPercent[blessings]
end

function Player.getPremiumTime(self) return math.max(0, self:getPremiumEndsAt() - os.time()) end

function Player.setPremiumTime(self, seconds)
	self:setPremiumEndsAt(os.time() + seconds)
	return true
end

function Player.addPremiumTime(self, seconds)
	self:setPremiumTime(self:getPremiumTime() + seconds)
	return true
end

function Player.removePremiumTime(self, seconds)
	local currentTime = self:getPremiumTime()
	if currentTime < seconds then return false end

	self:setPremiumTime(currentTime - seconds)
	return true
end

function Player.getPremiumDays(self) return math.floor(self:getPremiumTime() / 86400) end

function Player.addPremiumDays(self, days) return self:addPremiumTime(days * 86400) end

function Player.removePremiumDays(self, days) return self:removePremiumTime(days * 86400) end

function Player.isPremium(self)
	return self:getPremiumTime() > 0 or configManager.getBoolean(configKeys.FREE_PREMIUM) or
		       self:hasFlag(PlayerFlag_IsAlwaysPremium)
end

---@param message string|number
function Player.sendCancelMessage(self, message)
	if type(message) == "number" then message = Game.getReturnMessage(message) end
	return self:sendTextMessage(MESSAGE_STATUS_SMALL, message)
end

function Player.isUsingOtClient(self) return self:getClient().os >= CLIENTOS_OTCLIENT_LINUX end

function Player.sendExtendedOpcode(self, opcode, buffer)
	if not self:isUsingOtcV8() then return false end

	local networkMessage<close> = NetworkMessage()
	networkMessage:addByte(0x32)
	networkMessage:addByte(opcode)
	networkMessage:addString(buffer)
	networkMessage:sendToPlayer(self)
	return true
end

-- Always pass the number through the isValidMoney function first before using the transferMoneyTo
function Player.transferMoneyTo(self, target, amount)
	if not target then return false end

	-- See if you can afford this transfer
	local balance = self:getBankBalance()
	if amount > balance then return false end

	-- See if player is online
	local targetPlayer = Player(target.guid)
	if targetPlayer then
		targetPlayer:setBankBalance(targetPlayer:getBankBalance() + amount)
	else
		db.query("UPDATE `players` SET `balance` = `balance` + " .. amount .. " WHERE `id` = '" ..
			         target.guid .. "'")
	end

	self:setBankBalance(self:getBankBalance() - amount)
	return true
end

function Player.canCarryMoney(self, amount)
	-- Anyone can carry as much imaginary money as they desire
	if amount == 0 then return true end

	-- The 3 below loops will populate these local variables
	local totalWeight = 0
	local inventorySlots = 0

	local currencyItems = Game.getCurrencyItems()
	for index = #currencyItems, 1, -1 do
		local currency = currencyItems[index]
		-- Add currency coins to totalWeight and inventorySlots
		local worth = currency:getWorth()
		local currencyCoins = math.floor(amount / worth)
		if currencyCoins > 0 then
			amount = amount - (currencyCoins * worth)
			while currencyCoins > 0 do
				local count = math.min(100, currencyCoins)
				totalWeight = totalWeight + currency:getWeight(count)
				currencyCoins = currencyCoins - count
				inventorySlots = inventorySlots + 1
			end
		end
	end

	-- If player don't have enough capacity to carry this money
	if self:getFreeCapacity() < totalWeight then return false end

	-- If player don't have enough available inventory slots to carry this money
	local backpack = self:getSlotItem(CONST_SLOT_BACKPACK) --[[@as Container]]
	if not backpack or backpack:getEmptySlots(true) < inventorySlots then return false end
	return true
end

function Player.withdrawMoney(self, amount)
	local balance = self:getBankBalance()
	if amount > balance or not self:addMoney(amount) then return false end

	self:setBankBalance(balance - amount)
	return true
end

function Player.depositMoney(self, amount)
	if not self:removeMoney(amount) then return false end

	self:setBankBalance(self:getBankBalance() + amount)
	return true
end

function Player.removeTotalMoney(self, amount)
	local moneyCount = self:getMoney()
	local bankCount = self:getBankBalance()
	if amount <= moneyCount then
		self:removeMoney(amount)
		return true
	elseif amount <= (moneyCount + bankCount) then
		if moneyCount ~= 0 then
			self:removeMoney(moneyCount)
			local remains = amount - moneyCount
			self:setBankBalance(bankCount - remains)
			self:sendTextMessage(MESSAGE_INFO_DESCR,
			                     ("Paid %d from inventory and %d gold from bank account. Your account balance is now %d gold."):format(
				                     moneyCount, amount - moneyCount, self:getBankBalance()))
			return true
		else
			self:setBankBalance(bankCount - amount)
			self:sendTextMessage(MESSAGE_INFO_DESCR,
			                     ("Paid %d gold from bank account. Your account balance is now %d gold."):format(
				                     amount, self:getBankBalance()))
			return true
		end
	end
	return false
end

function Player.addLevel(self, amount, round)
	round = round or false
	local level, amount = self:getLevel(), amount or 1
	if amount > 0 then
		return self:addExperience(Game.getExperienceForLevel(level + amount) -
			                          (round and self:getExperience() or Game.getExperienceForLevel(level)))
	else
		return self:removeExperience(
			       ((round and self:getExperience() or Game.getExperienceForLevel(level)) -
				       Game.getExperienceForLevel(level + amount)))
	end
end

function Player.addMagicLevel(self, value)
	local currentMagLevel = self:getBaseMagicLevel()
	local sum = 0

	if value > 0 then
		while value > 0 do
			sum = sum + self:getVocation():getRequiredManaSpent(currentMagLevel + value)
			value = value - 1
		end

		return self:addManaSpent(sum - self:getManaSpent())
	else
		value = math.min(currentMagLevel, math.abs(value))
		while value > 0 do
			sum = sum + self:getVocation():getRequiredManaSpent(currentMagLevel - value + 1)
			value = value - 1
		end

		return self:removeManaSpent(sum + self:getManaSpent())
	end
end

function Player.addSkillLevel(self, skillId, value)
	local currentSkillLevel = self:getSkillLevel(skillId)
	local sum = 0

	if value > 0 then
		while value > 0 do
			sum = sum + self:getVocation():getRequiredSkillTries(skillId, currentSkillLevel + value)
			value = value - 1
		end

		return self:addSkillTries(skillId, sum - self:getSkillTries(skillId))
	else
		value = math.min(currentSkillLevel, math.abs(value))
		while value > 0 do
			sum = sum + self:getVocation():getRequiredSkillTries(skillId, currentSkillLevel - value + 1)
			value = value - 1
		end

		return self:removeSkillTries(skillId, sum + self:getSkillTries(skillId), true)
	end
end

function Player.addSkill(self, skillId, value, round)
	if skillId == SKILL_LEVEL then
		return self:addLevel(value, round or false)
	elseif skillId == SKILL_MAGLEVEL then
		return self:addMagicLevel(value)
	end
	return self:addSkillLevel(skillId, value)
end

function Player.getWeaponType(self)
	local weapon = self:getSlotItem(CONST_SLOT_LEFT)
	if weapon then return weapon:getType():getWeaponType() end
	return WEAPON_NONE
end

function Player.addTibiaCoins(self, tibiaCoins)
	return self:setTibiaCoins(self:getTibiaCoins() + tibiaCoins)
end

function Player.removeTibiaCoins(self, removeCoins)
	local tibiaCoins = self:getTibiaCoins()
	if tibiaCoins < removeCoins then return false end
	return self:setTibiaCoins(tibiaCoins - removeCoins)
end

function Player.sendWorldLight(self, color, level)
	local msg<close> = NetworkMessage()
	msg:addByte(0x82)
	msg:addByte(self:getGroup():getAccess() and 0xFF or level)
	msg:addByte(color)
	msg:sendToPlayer(self)
	return true
end

function Player.sendWorldTime(self, time)
	if self:getClient().version < 1272 then return false end
	local msg<close> = NetworkMessage()
	msg:addByte(0xEF)
	msg:addByte(time / 60) -- hour
	msg:addByte(time % 60) -- min
	msg:sendToPlayer(self)
	return true
end

function Player.setExhaustion(self, key, milliseconds)
	return self:setStorageValue(key, os.mtime() + milliseconds)
end

function Player.getExhaustion(self, key)
	local milliseconds = self:getStorageValue(key)
	if not milliseconds then return 0 end
	return math.max(0, os.mtime() - milliseconds)
end

function Player.hasExhaustion(self, key) return self:getExhaustion(key) > 0 end

---@param type ExperienceRateType
---@param value integer
function Player:addExperienceRate(type, value)
	return self:setExperienceRate(type, self:getExperienceRate(type) + value)
end

do
	if not nextUseStaminaTime then nextUseStaminaTime = {} end

	local function useStamina(player)
		local staminaMinutes = player:getStamina()
		if staminaMinutes == 0 then return end

		local playerId = player:getId()
		if not nextUseStaminaTime[playerId] then nextUseStaminaTime[playerId] = 0 end

		local currentTime = os.time()
		local timePassed = currentTime - nextUseStaminaTime[playerId]
		if timePassed <= 0 then return end

		if timePassed > 60 then
			if staminaMinutes > 2 then
				staminaMinutes = staminaMinutes - 2
			else
				staminaMinutes = 0
			end
			nextUseStaminaTime[playerId] = currentTime + 120
		else
			staminaMinutes = staminaMinutes - 1
			nextUseStaminaTime[playerId] = currentTime + 60
		end
		player:setStamina(math.floor(staminaMinutes))
	end

	function Player:updateStamina()
		if not configManager.getBoolean(configKeys.STAMINA_SYSTEM) then return false end

		useStamina(self)

		local staminaMinutes = self:getStamina()
		if staminaMinutes > 2400 and self:isPremium() then
			self:setExperienceRate(ExperienceRateType.STAMINA, 150)
		elseif staminaMinutes <= 840 then
			self:setExperienceRate(ExperienceRateType.STAMINA, 100)
		end
		return true
	end
end


e o login.lua

 

function onLogin(player)
	local serverName = configManager.getString(configKeys.SERVER_NAME)
	local loginStr = "Welcome to " .. serverName .. "!"
	if player:getLastLoginSaved() <= 0 then
		loginStr = loginStr .. " Please choose your outfit."
		player:sendOutfitWindow()
	else
		loginStr = string.format("Your last visit in %s: %s.", serverName,
		                         os.date("%d %b %Y %X", player:getLastLoginSaved()))
	end
	player:sendTextMessage(MESSAGE_STATUS_DEFAULT, loginStr)

	-- Promotion
	local vocation = player:getVocation()
	local promotion = vocation:getPromotion()
	if player:isPremium() then
		local value = player:getStorageValue(PlayerStorageKeys.promotion)
		if value and value == 1 then player:setVocation(promotion) end
	elseif not promotion then
		player:setVocation(vocation:getDemotion())
	end

	-- Events
	player:registerEvent("PlayerDeath")
	player:registerEvent("DropLoot")

	-- Update Experience Rate Stamina
	player:updateStamina()
	return true
end

 

Editado por denysmenetix (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

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 Mateus Robeerto
      Vi que muitas pessoas estão reclamando e que não funciona, bugs, erros no console, etc. Então, resolvi baixar a base do Thunder feita por MovieBr, atualizei do TFS 1.3 para o TFS 1.5 e corrigi cerca de 80% dos problemas. No entanto, ainda não consigo encontrar alguns bugs. Quem encontrar os bugs pode me relatar pelo Discord: 82mateusroberto. Dependendo do meu dia, pode levar alguns dias para eu responder e corrigir ou não. Acredito que vocês conseguem corrigir os erros, apenas precisam aprender a consertá-los. Não é difícil. Aproveitem para usar como base do seu mapa ou mesmo do projeto Thunder futuramente! Seguem as imagens que mostram a implementação de montaria e modal widow.
       
      Obs: Alguns mapas/cavernas podem estar vazios por falta de adição. Eu não tinha boas ideias para adicionar, mas vocês podem adicionar ao seu gosto. Tenham uma boa utilização e sucesso com o projeto no futuro!
       
      https://www.mediafire.com/file/0jtn2slt2j67666/baiakthunder-master.rar/file
      https://www.mediafire.com/file/bougg0q6dlpu2fq/tfs+1.5+source.rar/file
      https://www.mediafire.com/file/yq1s63xo6np9v53/860.rar/file
       
      Este servidor só usa o OtClient. Abra o arquivo otclient/modules/game_feature/feature.lua e procure por esta linha.
      if (versão >= 860) then adicione abaixo e salve.. pronto
      g_game.enableFeature(GamePlayerMounts)  
       
      Aqui estão os GIFs
      https://imgur.com/UGdQoSS
      https://imgur.com/OwJ4hpp
      https://imgur.com/7sN1MaJ
       
       
       
      Para quem deseja usar uma gamestore personalizada, há uma disponível para TFS 1.5 e 8.6. Já a compartilhei há alguns dias. Dê uma olhada aqui.
       
       
    • Por GM Antica
      Olá galera tudo bem?
      Achei esse mapa aqui no fórum, porém ele nao estava funcional. Foi retirado alguns bugs visuais, e certificado que não ocorra PVP dentro dos Treiners:
      Modificações:
      ● Capacidade total = 76 players
      ● Treiners divididos com "Wall" para o bom funcionamento e evitar que ocorra mortes dentro dos Treiners...
      ● Paisagens refeitas, um andar "Lobby" foi adicionado para interação e comércio
      ● Teleport adicionado no final de cada corredor para uma possível extensão
      CRÉDITOS: Alissow + GM Antica
       
      Segue alguns Prints:







       
       
      Scan Vírus Total: https://www.virustotal.com/gui/file/456c5959bd38bd7bd61f8c46af1117e0425963da0f8e5afce0bf411bdd366171?nocache=1
       
      Download:
       
      Training Room 8.60 - by Alissow & GM Antica.rar
    • Por Underewar
      https://www.eternalglobal.online/
      Server Features
      Protocol 8.60 and 12.30 Features (working 100%) Bestiary -> Janela  Em Contrução para Client 8.60 ja funcional no servidor. Charm -> Janela Em Contrução para Client 8.60 ja funcional no servidor. Store -> Janela  Em construção para CLIENT 8.60 Quickloot -> Janela  Em Contrução para Client 8.60 ja funcional no servidor. Cast system Wrap system  Custom spawns loading syste WarSystem RaidSystem Offline Trainers Sala de Trainers Stamina Refil Itens Donate Boosted Boss Boosted Creature 5 Eventos Automaticos.
      12x Updates

      NEW ITEMS
      Umbral Items ,Cobra Items,Falcon Items,Warzone Items,Gnome Item

       
      NEW AREAS

      Issavi


       
      Roshamuul

      Oramond

      Cobras

       
       
      Falcons



       
      Warzone 1,2,3


      Warzones 4,5,6


       
       

       

       
       
       
       
       
       
    • Por Mateus Robeerto
      Para aqueles que estão interessados em adotar a base do Nekiro, gostaria de anunciar que as montarias e a modal widow agora estão disponíveis. Se você deseja implementar sistemas como o de crafting com modal e outros recursos, sinta-se à vontade para fazer o download e testar.
      É importante observar que o Nekiro não incluiu mapas nesta versão. Portanto, será necessário migrar seus próprios mapas para o TFS 1.5 8.6. Alternativamente, você pode considerar utilizar a base do Luciano, conhecida como STYLLER OT. Após realizar testes, posso confirmar que essa é uma opção bastante interessante. Esta versão já está completa, permitindo que você utilize seus próprios mapas sem dificuldades significativas.
      Além disso, estou disponibilizando os sprites no formato 13x para a versão 8.6, juntamente com os arquivos items.otb e XML. Quanto à correção de eventuais erros, isso fica a seu critério, mas gostaria de ressaltar que não é uma tarefa difícil de realizar.
       
      É com satisfação que compartilho que a source está agora disponível para acesso público. Caso você deseje, pode realizar atualizações através dos commits. Estou preparando uma lista abrangente de atualizações necessárias, pois há muitas modificações a serem feitas.
      Para acessar a source, por favor, clique no link abaixo:
      https://www.mediafire.com/file/0680a4b624163pd/TFS-1.5-Downgrades-8.60.rar/file
       
      Dentro da SRC que implementei, você encontrará os seguintes recursos:
      Sistema de Montaria: Agora você pode adicionar essa funcionalidade ao seu servidor.
      Modal Window: Esta é uma janela modal, proporcionando uma experiência mais interativa para os jogadores.
       
      Custom Attributes(Boost e Relfect:: https://github.com/otland/forgottenserver/pull/2807/commits/18f5afa52a36a02ea56dae97b29e683233d15c25.
       
      Além disso, gostaria de compartilhar três repositórios no GitHub que podem ser valiosos para você. Três deles são mantidos pelos usuários @Movie e @ralke23 e a Sarah (MillhioreBT). Esses repositórios contêm recursos e scripts úteis que podem aprimorar a experiência do seu servidor. Sinta-se à vontade para explorar e utilizar esses recursos conforme necessário.
      https://github.com/moviebr/TFS-1.5-Downgrades
      https://github.com/ralke23/Greed-TFS-1.5-Downgrades
      https://github.com/MillhioreBT/forgottenserver-downgrade
       
      Para os interessados nos sprites 13x para a versão 8.6, estou disponibilizando o link para download abaixo:
      https://mega.nz/folder/5FQEnT4R#pAbmAAhpBhmcP1jaVkXm8Q
       
      Recomendo também o uso do ObjectBuilder_0_5_5-dev para facilitar o processo:
      https://github.com/punkice3407/ObjectBuilder/releases/tag/v0.5.5
       
      Para aqueles que enfrentam dificuldades na compilação do executável, estou disponibilizando um arquivo para download que pode ajudar:
      https://www.mediafire.com/file/cxirgq7n1cm2p3i/dlls+e+exe.rar/file
       
       
      Quanto à ativação do sistema de montarias via OTClient, basta acessar o arquivo game_features/features.lua e localizar a linha: 'if(version >= 860) then!' e adicionar abaixo 'g_game.enableFeature(GamePlayerMounts)'.
       
      É necessário baixar ambos os arquivos, mounts.xml e outfits.xml, para que o OtClient funcione corretamente. Sem esses arquivos, o cliente pode apresentar bugs ou até mesmo crashar sozinho. É obrigatório o uso desses arquivos. Basta fazer o download e colocá-los na base do Luciano. Basta ir até a pasta data/xml e inserir os arquivos lá. Se você estiver usando seu próprio mapa, os arquivos são igualmente necessários, independentemente de suas preferências.
      outfits.xml
      mounts.xml
       

      ATENÇÃO: Sobre a base do Luciano ou do Nekiro downgrade que você baixou (schemas.sql), ela está totalmente limpa, sem implementações adicionais. Cabe a você implementar por conta própria. Por exemplo, se você for usar o Znote, ele solicitará o esquema e as colunas necessárias. Isso não são erros, são apenas avisos. Você deve procurar pelas colunas necessárias e inseri-las para que funcione corretamente. Isso não é difícil de fazer.
      https://github.com/slawkens/myaac
      https://github.com/gesior/Gesior2012
      https://github.com/Znote/ZnoteAAC/tree/v2
       
       
      Antes de prosseguir com o download, sugiro que realize uma verificação de vírus nos arquivos. Seguem os links para o scan:
       
      Scan da SRC
      https://www.virustotal.com/gui/file/1364b14cab10a34ca7102d3581e427396f8224cc5156d6bc3859b4ebcb155de6?nocache=1
      Scan das DLLs e Executável
      https://www.virustotal.com/gui/file/603c853dbd5b40ff21b0b0004c129e5039c9954277da22722b2980fcbfcbe0ce?nocache=1
       
      IMPORTANTE: Por favor, note que a funcionalidade de montaria e janela modal não está disponível para versão old do client (CipSoft). Infelizmente, não estou oferecendo suporte para essas versões no momento. No entanto, é possível adquirir uma DLL especial que pode ser injetada no client old (CipSoft) para habilitar essas funcionalidades. Caso esteja interessado, conheço um vendedor confiável que oferece essa DLL. Para mais informações, por favor, entre em contato através do Discord: Sharingan.



×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo