Ir para conteúdo

Nolangg

Membro
  • Registro em

  • Última visita

  1. Under reagiu a uma resposta no tópico: [TFS 0.4 / OTX 2] Teleport para preguiçosos
  2. Fellow, Guys. Hoje eu estava fazendo um mapa e colocando coisas que ja existiam ex: (Quests, Hunts e outras coisas de outros maps) Cheguei numa conclusão que identificar TP por TP era cansativo e as vezes, fazer algum tile específico e/ou quest específica demoraria mais tempo também... O que eu fiz? com a ajuda do nosso queridíssimo ChatGPT e a idéia mirabolante de organizar isso da forma mais rápida também, ele gerou este código... que para alguns pode chegar a ser inútil Mas, para mim vai otimizar muito tempo... tendo em vista que é abrangente também, caso for usar piso que teria por exemplo: "actionID & uniqueID, Reset & Reborn e outras features especificas", seria uma boa otimizar isso com uma rápida solução de "item no chão, localização e o que você precisar"... (eu não adaptei isso, mas... se precisar eu faço e testo aqui) para não bugar seria necessário: criar um novo ITEM no Item Editor com novo ID e colocar no mapa, configurando esse item especifico (possivelmente com SPRITE de TP) Então, espero que seja útil essa contribuição, pois pra mim irá ser... e quis trazer para cá. local TELEPORT_ITEMID = 10551 -- isso é o código do item que você vai usar local teleporterPairs = { { from = {x = 124, y = 74, z = 7}, to = {x = 136, y = 76, z = 7} }, -- localização a - b (teleportarão entre si) { from = {x = 131, y = 67, z = 7}, to = {x = 125, y = 81, z = 7} }, -- localização c - d (também teleportarão entre si) } local teleportMap = {} -- daqui pra baixo é para a solução funcionar local function posToKey(pos) return string.format("%d,%d,%d", pos.x, pos.y, pos.z) end local function isSamePos(a, b) return a.x b.x and a.y b.y and a.z == b.z end local function getSafeTile(fromPos, toPos) local dx = toPos.x - fromPos.x local dy = toPos.y - fromPos.y if dx ~= 0 then dx = dx / math.abs(dx) end if dy ~= 0 then dy = dy / math.abs(dy) end return { x = toPos.x + dx, y = toPos.y + dy, z = toPos.z } end local function buildTeleportMap() for _, pair in ipairs(teleporterPairs) do local fromKey = posToKey(pair.from) local toPos = pair.to teleportMap[fromKey] = toPos teleportMap[posToKey(toPos)] = pair.from end end buildTeleportMap() function onStepIn(cid, item, pos, _) if not isPlayer(cid) or item.itemid ~= TELEPORT_ITEMID then return true end local key = posToKey(pos) local targetPos = teleportMap[key] if not targetPos then doPlayerSendCancel(cid, "Esse teleport nao esta configurado.") -- aqui é a mensagem caso algum player pise e não esteja configurado a localização... return true end local safePos = getSafeTile(pos, targetPos) doTeleportThing(cid, safePos) doSendMagicEffect(safePos, CONST_ME_TELEPORT) return true end és isso guys.
  3. E aí, Gilson. É só compilar a source "king" que eu deixei em anexo no primeiro post, aí vai resolver isso e possivelmente alguns outros erros (faz muito tempo que não mexo mais com OT, então não sei se irá resolver todos os erros) E aí, Sboy. Estranho isso... a database está no primeiro post normalmente... é só clicar para baixar.... E aí, Igor. Não mexi nessa parte do servidor, então... provavelmente pode ser que tenha um limite sim. todavia, não sei te dizer por não ter mexido nessa parte.
  4. luizf421 começou a seguir Nolangg
  5. já está no tópico. Primeiro tire a marcação da opção "Check File Signatures" em "File/Preferences/Client Version" e coloque o client que está disponível no post na opção 8.60. Segundo, coloque o items.otb, items.xml da pasta "data/items" no seu RME em: "rme/data/860/" assim, possivelmente já estará resolvido. qual problema? Pelo que reparei que o pessoal anda falando está com alguns, todavia é bem fácil resolver.
  6. Arkanjo39 começou a seguir Nolangg
  7. como abrir o mapa usando o rme? tentei usando várias maneiras e nenhuma corresponde
  8. tenta assim agora: function onCastSpell(cid, var) local storage = 55512 local storage2 = 55513 -- Exhaust local waittimes = {30, 30, 40, 50, 60} local waittime3 = 310 if not isCreature(cid) or exhaustion.check(cid, storage2) then doPlayerSendCancel(cid, "Aguarde " .. (exhaustion.get(cid, storage2) or 0) .. " segundos para usar a spell novamente.") return false end if getPlayerStorageValue(cid, storage) > 0 then doPlayerSendCancel(cid, "Você já está sob o efeito da spell.") return false end setPlayerStorageValue(cid, storage, 1) exhaustion.set(cid, storage2, waittime3) OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1) local function advanceStage() if not isCreature(cid) then return false end local stage = getPlayerStorageValue(cid, storage) if stage and stage < #waittimes then stage = stage + 1 setPlayerStorageValue(cid, storage, stage) addEvent(advanceStage, waittimes[stage] * 1000) else setPlayerStorageValue(cid, storage, -1) -- Reseta a storage ao final dos estágios end end addEvent(advanceStage, waittimes[1] * 1000) addEvent(function() if isCreature(cid) then setPlayerStorageValue(cid, storage, -1) end end, (waittimes[#waittimes] + waittimes[1]) * 1000) return true end caso apareça algum erro retorne aqui.
  9. O que o rapaz acima falou pode ser usado também. mas, teste assim também: function onCastSpell(cid, var) local storage = 55512 local storage2 = 55513 -- Exhaust local waittimes = {30, 30, 40, 50, 60} local waittime3 = 310 if not isCreature(cid) or exhaustion.check(cid, storage2) then doPlayerSendCancel(cid, "Aguarde " .. (exhaustion.get(cid, storage2) or 0) .. " segundos para usar a spell novamente.") return false end if getPlayerStorageValue(cid, storage) > 0 then doPlayerSendCancel(cid, "Você já está sob o efeito da spell.") return false end setPlayerStorageValue(cid, storage, 1) exhaustion.set(cid, storage2, waittime3) OpenGate(cid, Select_Stages(getCreatureOutfit(cid).lookType), 1) local function advanceStage() if not isCreature(cid) then return false end local stage = getPlayerStorageValue(cid, storage) if stage < #waittimes then stage = stage + 1 setPlayerStorageValue(cid, storage, stage) addEvent(advanceStage, waittimes[stage] * 1000) else setPlayerStorageValue(cid, storage, -1) -- Reseta a storage ao final dos estágios end end addEvent(advanceStage, waittimes[1] * 1000) addEvent(function() if isCreature(cid) then setPlayerStorageValue(cid, storage, -1) end end, waittimes[1] * 1000) return true end
  10. Regards, Procure pela pasta do seu XAMPP e em HTDOCS procure por CONFIG... clique em config.php e abra com algum editor de texto. lá no arquivo procure por "$config['site']['serverPath'] = " e você muda para o local que o seu servidor está no seu disco local (mais precisamente onde o arquivo CONFIG.LUA estará)
  11. Nolangg alterou sua foto pessoal
  12. Uma dúvida, o que seria essas atualizações do github que foi feita "Wings & Auras", caso use client 8.6 default ele será ignorado ou dará debug? Seria necessário um client específico ou ele é ignorado pelo default e usado no OTC? (não tô atualizado nos ots atuais, mas... fiquei curioso sobre isso e os requisitos para ser usado)
  13. nova versão https://github.com/thetibiaking/ttk-otx2/tree/main/source
  14. neste caso é selecionado um monstro que é setado na lib... e aumenta uma característica (todos os dias ou toda vez que reiniciar a distro) apesar de ter feito na source também tem uma parte em lib que é configurável... dá pra usar em conjunto do monster boost creio que fique mais interessante com duas oportunidades diferentes de up *-*
  15. brabo! idéia: outro sistema que pode ser colocado... dmonster (daily monster) há o sistema todo feito aqui: porém se quiser otimizar etc, aí é com você kkk
  16. function getRespawnDivider() local multiplier = 1 local size = #getPlayersOnline() if size >= 100 and size < 199 then multiplier = 2 elseif size >= 200 and size < 299 then multiplier = 3 elseif size >= 300 then multiplier = 4 end return multiplier end tem o .lua tbm *(global.lua)
  17. dúvida: Spy Cast não é o sistema feito por @Lyu? o da roleta (ex: "SetCreatureSpeed" that's appear on first post ) *os dois aparecem no hyper, porém são feitos por ele hh e pelo Igor Souza; -- apenas uma observação!! pedido: SpawnDivider para você não precisar procurar game.cpp at the final uint32_t Game::spawnDivider(MonsterType* mType) { uint32_t multiplier = 1; if (mType && !mType->ignoreSpawnBoost) { uint32_t size = getPlayersOnline(); if (size >= 100 && size < 199) { multiplier = 2; } else if (size >= 200 && size < 299) { multiplier = 3; } else if (size >= 300) { multiplier = 4; } } return multiplier; } game.h under whatever public function uint32_t spawnDivider(MonsterType* mType = nullptr);
  18. Para todos que estão com problemas desse tipo há casos e casos pra isso acontecer, para conseguir identificar o que está acontecendo: vá até index.php no seu site e troque: error_reporting(0); por: error_reporting(E_ALL ^ E_STRICT ^ E_NOTICE); take care!
  19. e é por isso que eu disse pra pegar o VCXPROJ de algum outro projeto equivalente e adaptar...

Informação Importante

Confirmação de Termo