Ir para conteúdo

Featured Replies

Postado
  • Administrador

image

 

Este é o projeto TFS Downgrade (Nekiro), uma versão modificada do TFS Downgrade (Nekiro) baseado no TFS 1.5. Você pode ver o histórico do repositório releases.

Este projeto foi criado com o intuito de ser uma base o mais limpa possível, para funcionar como um mecanismo de MMORPG não necessariamente ligado ao Tibia Global, embora também funcione. O Tibia King - Downgrade foi adaptado para funcionar com o código TFS, sendo o primeiro repositório a utilizar esse mecanismo.

 

Para se conectar ao servidor e ter uma experiência estável, você pode usar o otclient do mehah ou o cliente do Tibia. E se quiser fazer alguma edição, confira nossas ferramentas personalizadas.

 

Se você quiser editar o mapa, use o próprio Remere's Map Editor.

 

Esteja ciente do nosso código de conduta, disponível neste link.

Problemas

Usamos o rastreador de problemas no GitHub. Tenha em mente que todos que estão observando o repositório recebem notificações por e-mail quando há atividade, então seja cuidadoso e evite escrever comentários que não sejam destinados a um problema (por exemplo, "+1"). Se você gostaria que um problema fosse resolvido mais rapidamente, você deve corrigi-lo você mesmo e enviar uma solicitação de pull request ou oferecer uma recompensa para o problema.

Recursos

  • Pvp System (Open, Retro, Enforced)
  • Old Classic Slot System
  • Old Classic Vocation System
  • Old Classic Attack Speed
  • Protocol 8.60

Referências

Outas Versões:

7.72

8.0
 


Download

Postado

Parece ser um projeto interessante para a comunidade, para que os novatos comecem a tomá-lo como base. Estou curioso sobre o Old Classic Slot System, como assim, os itens podem lhe dar atributos, vida, mana, dano?

Postado
  • Autor
  • Administrador
Em 06/07/2023 em 13:33, Fabi Marzan disse:

Parece ser um projeto interessante para a comunidade, para que os novatos comecem a tomá-lo como base. Estou curioso sobre o Old Classic Slot System, como assim, os itens podem lhe dar atributos, vida, mana, dano?

Exatamente é possível manipular os items via xml ou lua usando a interface de eventos.
Aqui está um exemplo do uso em lua.
Exemplo não testado!

Action Interface -> slot.lua

Spoiler

 


 




<action itemid="ID" script="slot.lua"/>




local conf = {
maxSlotCount=3,
ignoredIds={}
}

function choose(...)
  local arg = {...}
  return arg[math.random(1,#arg)]
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
  if item.uid == 0 or item.itemid == 0 then return false end
  toPosition.stackpos = 255
  if isInArray(conf.ignoredIds, itemEx.itemid) or
  isItemStackable(itemEx.uid) or
  itemEx.itemid == 0 or
  itemEx.type > 1 or
  not(isArmor(itemEx.uid) or isWeapon(itemEx.uid) or isShield(itemEx.uid)) then
  return false
  end
  if isCreature(itemEx.uid) then
  return false
  end
  local nam = Item(itemEx.uid):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION)
  function getper()
  local n = 1
  for i=1,10 do
  n = n+math.random(0,10)
  if n < 8*i then
  break
  end
  end
  return n
  end
  function getSlotCount(nam)
  local c = 0
  for _ in nam:gmatch('%[(.-)%]') do
  c = c+1
  end
  return c
  end
  if getSlotCount(nam) < conf.maxSlotCount then
  local l = choose('hp','mp','ml','melee','shield','dist')
  local p = getper()
  doSendMagicEffect(toPosition,30)
  nam = nam..' ['..l..'.+'..p..'%]'
  doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,l..'.+'..p..'%')
  doSetItemSpecialDescription(itemEx.uid, nam)
  doRemoveItem(item.uid,1)
  else
  doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,"Slot limit reached.")
  end
  return true
end

 

 

Note que podemos diferenciar e referenciar os slots e atribuir mana, life.

Para funcionar corretamente o action a cima é necessário registrar os eventos no creaturescript.

Creature Event Interface -> slot.lua
Essa lib a baixo poderia ser refatorada existem muitas linhas de códigos com alta complexidade, se você tem interesse em usar considere reescrever utilizando essa como base.

Spoiler

 


 





local conditionMP,conditionHP,conditionML,conditionCLUB,conditionSHI,conditionDIST,conditionAMP = {},{},{},{},{},{},{}
for i=1,300 do
  conditionHP[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionHP[i], CONDITION_PARAM_SUBID, 50)
  setConditionParam(conditionHP[i], CONDITION_PARAM_BUFF_SPELL, 1)
  setConditionParam(conditionHP[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionHP[i], CONDITION_PARAM_STAT_MAXHITPOINTSPERCENT, 100+i)

  conditionMP[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionMP[i], CONDITION_PARAM_SUBID, 51)
  setConditionParam(conditionMP[i], CONDITION_PARAM_BUFF_SPELL, 1)
  setConditionParam(conditionMP[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionMP[i], CONDITION_PARAM_STAT_MAXMANAPOINTSPERCENT, 100+i)

  conditionML[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionML[i], CONDITION_PARAM_SUBID, 52)
  setConditionParam(conditionML[i], CONDITION_PARAM_BUFF_SPELL, 1)
  setConditionParam(conditionML[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionML[i], CONDITION_PARAM_STAT_MAGICPOINTSPERCENT, 100+i)


  conditionCLUB[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionCLUB[i], CONDITION_PARAM_SUBID, 53)
  setConditionParam(conditionCLUB[i], CONDITION_PARAM_BUFF_SPELL, 1)
  setConditionParam(conditionCLUB[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionCLUB[i], CONDITION_PARAM_SKILL_MELEEPERCENT, 100+i)


  conditionSHI[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionSHI[i], CONDITION_PARAM_SUBID, 54)
  setConditionParam(conditionSHI[i], CONDITION_PARAM_BUFF_SPELL, 1)
  setConditionParam(conditionSHI[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionSHI[i], CONDITION_PARAM_SKILL_SHIELDPERCENT, 100+i)

  conditionDIST[i] = createConditionObject(CONDITION_ATTRIBUTES)
  setConditionParam(conditionDIST[i], CONDITION_PARAM_SUBID, 55)
  setConditionParam(conditionDIST[i], CONDITION_PARAM_BUFF_SPELL, 1)
  setConditionParam(conditionDIST[i], CONDITION_PARAM_TICKS, -1)
  setConditionParam(conditionDIST[i], CONDITION_PARAM_SKILL_DISTANCEPERCENT, 100+i)
end

function getSlotType(n)
  if not n then
  return false
  end
  if n:match('%[(.+)%]') then
  n = n:match('%[(.+)%]')
  if n == '?' then
  return 0,n
  else
  return n:match('(.-)%.([+-])(%d+)%%')
  end
  else
  return false
  end
end

local function loadSet(cid)
local player = Player(cid)
if not player then return false end
  local t = {}
  for slot=1,9 do
  t[slot] = ''
  local s = getPlayerSlotItem(player,slot).uid
  if s ~= 0 then
  t[slot] = Item(s):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION)
  end
  end
  return t
end

function chk(cid,f)
  if not Player(cid) then return false end
  local t = loadSet(cid)
  if not t then return false end

  for i=1,#f do
  if f[i] ~= t[i] then
  equip(player,nil,slot)
  break
  end
  end
  addEvent(chk,2000,cid,t)
end

function check_slot(aab, i)
  if i == 5 or i == 6 then
  if isWeapon(aab) or isShield(aab) or isBow(aab) then
  return true
  end
  else
  return true
  end
return false
end

function equip(player,item,slot)
  local t = {}
  if item then
  local mm,sinal,qto = getSlotType(Item(item.uid):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION))
  t[mm] = tonumber(qto)
  end
  for i=1,9 do
  if i ~= slot then
  if getPlayerSlotItem(player,i).itemid ~= 0 then
  local aab = getPlayerSlotItem(player,i).uid
  if aab and check_slot(aab,i) then
  for _ in Item(aab):getAttribute(ITEM_ATTRIBUTE_DESCRIPTION):gmatch('(%[.-%])') do
  local mm,sinal,qto2 = getSlotType(_)
  if mm then
  if not t[mm] then
  t[mm] = 0
  end
  t[mm] = t[mm]+tonumber(qto2)
  t[mm] = t[mm] > 300 and 300 or t[mm]
  end
  end
  end
  end
  end
  end
  local fu = 0
  local ca = {}
  local s = ''
  for sl,n in pairs(t) do
  fu = fu+1
  s = s..''..n..'% more of '..sl..'\n'
  if sl == 'hp' then
  player:addCondition(conditionHP[tonumber(n)])
  ca[50] = 1
  doSendTutorial(player,19)
  elseif sl == 'mp' then
  player:addCondition(conditionMP[tonumber(n)])
  ca[51] = 1
  doSendTutorial(player,19)
  elseif sl == 'ml' then
  player:addCondition(conditionML[tonumber(n)])
  ca[52] = 1
  elseif sl == 'melee' then
  player:addCondition(conditionCLUB[tonumber(n)])
  ca[53] = 1
  elseif sl == 'shield' then
  player:addCondition(conditionSHI[tonumber(n)])
  ca[54] = 1
  elseif sl == 'dist' then
  player:addCondition(conditionDIST[tonumber(n)])
  ca[55] = 1
  end
  end
  if fu > 0 then
  for i=50,55 do
  if not ca[i] then
  doRemoveCondition(player:getId(),CONDITION_ATTRIBUTES,i)
  end
  end
  else
  for i=50,55 do
  doRemoveCondition(player:getId(),CONDITION_ATTRIBUTES,i)
  end
  end
  return true
end

function onLogin(player)
  equip(player,nil,slot)
local cid = player:getId()
  addEvent(chk,2000,cid,loadSet(cid))
  return true
end

 

 

 

Se ainda houver duvidas você pode ver mais aqui
https://otland.net/threads/tfs-1-0-increasing-spell-with-items.209884/

  • 1 month later...
  • 1 month later...
Postado
  • Autor
  • Administrador
Em 06/09/2023 em 02:51, Raghi disse:

Qual seria o site recomendado para usar com essa base? obrigado desde já

GitHub - thetibiaking/ttk-my-aac: A free and open-source Automatic Account Creator (AAC) written in PHP

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo