Postado Maio 17, 2017 8 anos Bom dia Wolf, gostaria de saber se existe a possibilidade de fazer as seguintes edições nesta spell: 1º fazer com que ele tenha uma espécie de "fly" como o próprio fly system tem de criar um piso void em baixo do player para que ele flutue. Veja bem, como estamos falando de uma espécie de impulso para o player e o mesmo está indo em direção de uma montanha, tecnicamente ele seria jogado para fora da mesma. Então eu pensei que ao usar o spell perto de uma montanha ou penhasco, ou qualquer area alta, ele fosse "arremessado" seguindo as leis da física(não faz sentido) e com isso aos poucos fosse caindo, porém o spell não precisa ser cortado afinal é um impulso "magico" (já que é uma spell USHDAUSDHU) então ele vai continuar caindo porém ainda vai estar sendo impulsionado para frente. Acho que no fim das contas eu só queria dizer que eu gostaria de simular a gravidade '-' 2º Fazer com que o spell pare quando o player bata em algo, ao invés de tomar dano eu gostaria de cortar o spell, assim o player tem que ser mais cuidadoso ao usar ela e vai testar suas habilidades desviando de tudo e.e Vou deixar aqui o flysystem caso queria dar uma olhada, pode ajudar também a ver se há possibilidade u.u CreatureScript: Mostrar conteúdo oculto local storage = 73732 function doCreateTile(tileid, pos) doCombatAreaHealth(0, 0, pos, 0, 0, 0, CONST_ME_NONE) doCreateItem(tileid, 1, pos) return true end function getCreaturesInPos(pos) local ret = {} for a = 0, 255 do local pos_check = {x = pos.x, y = pos.y, z = pos.z, stackpos = a} local crea = getThingFromPos(pos_check).uid if (isCreature(crea)) and not(isInArray(ret, crea)) then table.insert(ret, crea) end end return ret end function onThrow(cid, fromPosition, toPosition) if (getPlayerStorageValue(cid, storage) < 1) then return true else local fpTile = getTileThingByPos(fromPosition) if (fpTile.itemid == 460) then local pos_check = {x = fromPosition.x, y = fromPosition.y, z = fromPosition.z, stackpos = 255} if (#getCreaturesInPos(fromPosition) < 2) then doRemoveItem(fpTile.uid, 1) end end local tpTile = getTileThingByPos(toPosition) if (tpTile.itemid == 0) then doCreateTile(460, toPosition) end end return true end function onAttack(cid, target) if getPlayerStorageValue(cid, storage) == 1 then doPlayerSendCancel(cid, "Você não pode atacar usando o fly.") return false end return true end function onLogout(cid) if (getCreatureStorage(cid, storage) == 1) then doPlayerSendCancel(cid, "Você não pode deslogar usando o fly.") return false end return true end Talkaction: Mostrar conteúdo oculto function isWalkable(pos, creature, proj)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if getTopCreature(pos).uid > 0 and creature then return false end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function getCreaturesInPos(pos) local ret = {} for a = 0, 255 do local pos_check = {x = pos.x, y = pos.y, z = pos.z, stackpos = a} local crea = getThingFromPos(pos_check).uid if (isCreature(crea)) and not(isInArray(ret, crea)) then table.insert(ret, crea) end end return ret end function doFindItemInPos(ids,pos) -- By Undead Slayer local results = {} for _ = 0, 255 do local findPos = {x = pos.x, y = pos.y, z = pos.z, stackpos = _} if isInArray(ids, getThingFromPos(findPos).itemid) then table.insert(results, getThingFromPos(findPos)) end end return results end local function onMove(cid, fromPosition, toPosition, go) local fpTile = getTileThingByPos(fromPosition) local tpos_check = {x = toPosition.x, y = toPosition.y, z = toPosition.z, stackpos = 0} local tpTile = getTileThingByPos(toPosition) if (go == "up") then if (tpTile.itemid ~= 0) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You can not climb!") end if (fpTile.itemid == 460) and (#getCreaturesInPos(fromPosition) < 2) then doRemoveItem(fpTile.uid, 1) end if (tpTile.itemid == 0) then doCreateTile(460, toPosition) end doTeleportThing(cid, toPosition) elseif (go == "down") then local fpTile = doFindItemInPos({460}, getThingPos(cid))[1] if (tpTile.itemid ~= 0 and not isWalkable(toPosition,true,false) or fpTile.itemid ~= 460) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You can not go down!") end if (fpTile.itemid == 460) and (#getCreaturesInPos(fromPosition) < 2) then doRemoveItem(fpTile.uid, 1) end if (tpTile.itemid == 0) then doCreateTile(460, toPosition) end doTeleportThing(cid, toPosition) end end function onSay(cid, words, param) if (words:lower() == "!fly") then if (getPlayerStorageValue(cid, 73732) > 0) then local tile = doFindItemInPos({460}, getThingPos(cid)) if (#tile > 0) then return doPlayerSendCancel(cid, "Você deve descer para sair do fly!") end setPlayerStorageValue(cid, 73732, -1) doRemoveCondition(cid, CONDITION_OUTFIT) doChangeSpeed(cid, -800) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have stop the fly mode!") doCreatureSay(cid, "Stop fly!") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have start the fly mode!") doCreatureSay(cid, "Fly!") setPlayerStorageValue(cid, 73732, 1) registerCreatureEvent(cid, "FLYMOVE") doChangeSpeed(cid, 800) end elseif (words:lower() == "h1") then if (getPlayerStorageValue(cid, 73732) < 1) then return false end local cp = getThingPos(cid) local topos = {x = cp.x, y = cp.y, z = cp.z - 1} onMove(cid, cp, topos, "up") elseif (words:lower() == "h2") then if (getPlayerStorageValue(cid, 73732) < 1) then return false end local cp = getThingPos(cid) local topos = {x = cp.x, y = cp.y, z = cp.z + 1} onMove(cid, cp, topos, "down") end return true end Desde já, obrigado Editado Maio 17, 2017 8 anos por eviltox (veja o histórico de edições)
Postado Maio 17, 2017 8 anos Autor Em 17/05/2017 em 19:00, eviltox disse: Bom dia Wolf, gostaria de saber se existe a possibilidade de fazer as seguintes edições nesta spell: 1º fazer com que ele tenha uma espécie de "fly" como o próprio fly system tem de criar um piso void em baixo do player para que ele flutue. Veja bem, como estamos falando de uma espécie de impulso para o player e o mesmo está indo em direção de uma montanha, tecnicamente ele seria jogado para fora da mesma. Então eu pensei que ao usar o spell perto de uma montanha ou penhasco, ou qualquer area alta, ele fosse "arremessado" seguindo as leis da física(não faz sentido) e com isso aos poucos fosse caindo, porém o spell não precisa ser cortado afinal é um impulso "magico" (já que é uma spell USHDAUSDHU) então ele vai continuar caindo porém ainda vai estar sendo impulsionado para frente. Acho que no fim das contas eu só queria dizer que eu gostaria de simular a gravidade '-' 2º Fazer com que o spell pare quando o player bata em algo, ao invés de tomar dano eu gostaria de cortar o spell, assim o player tem que ser mais cuidadoso ao usar ela e vai testar suas habilidades desviando de tudo e.e Vou deixar aqui o flysystem caso queria dar uma olhada, pode ajudar também a ver se há possibilidade u.u CreatureScript: Mostrar conteúdo oculto Mostrar conteúdo oculto local storage = 73732 function doCreateTile(tileid, pos) doCombatAreaHealth(0, 0, pos, 0, 0, 0, CONST_ME_NONE) doCreateItem(tileid, 1, pos) return true end function getCreaturesInPos(pos) local ret = {} for a = 0, 255 do local pos_check = {x = pos.x, y = pos.y, z = pos.z, stackpos = a} local crea = getThingFromPos(pos_check).uid if (isCreature(crea)) and not(isInArray(ret, crea)) then table.insert(ret, crea) end end return ret end function onThrow(cid, fromPosition, toPosition) if (getPlayerStorageValue(cid, storage) < 1) then return true else local fpTile = getTileThingByPos(fromPosition) if (fpTile.itemid == 460) then local pos_check = {x = fromPosition.x, y = fromPosition.y, z = fromPosition.z, stackpos = 255} if (#getCreaturesInPos(fromPosition) < 2) then doRemoveItem(fpTile.uid, 1) end end local tpTile = getTileThingByPos(toPosition) if (tpTile.itemid == 0) then doCreateTile(460, toPosition) end end return true end function onAttack(cid, target) if getPlayerStorageValue(cid, storage) == 1 then doPlayerSendCancel(cid, "Você não pode atacar usando o fly.") return false end return true end function onLogout(cid) if (getCreatureStorage(cid, storage) == 1) then doPlayerSendCancel(cid, "Você não pode deslogar usando o fly.") return false end return true end Talkaction: Mostrar conteúdo oculto Mostrar conteúdo oculto function isWalkable(pos, creature, proj)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if getTopCreature(pos).uid > 0 and creature then return false end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function getCreaturesInPos(pos) local ret = {} for a = 0, 255 do local pos_check = {x = pos.x, y = pos.y, z = pos.z, stackpos = a} local crea = getThingFromPos(pos_check).uid if (isCreature(crea)) and not(isInArray(ret, crea)) then table.insert(ret, crea) end end return ret end function doFindItemInPos(ids,pos) -- By Undead Slayer local results = {} for _ = 0, 255 do local findPos = {x = pos.x, y = pos.y, z = pos.z, stackpos = _} if isInArray(ids, getThingFromPos(findPos).itemid) then table.insert(results, getThingFromPos(findPos)) end end return results end local function onMove(cid, fromPosition, toPosition, go) local fpTile = getTileThingByPos(fromPosition) local tpos_check = {x = toPosition.x, y = toPosition.y, z = toPosition.z, stackpos = 0} local tpTile = getTileThingByPos(toPosition) if (go == "up") then if (tpTile.itemid ~= 0) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You can not climb!") end if (fpTile.itemid == 460) and (#getCreaturesInPos(fromPosition) < 2) then doRemoveItem(fpTile.uid, 1) end if (tpTile.itemid == 0) then doCreateTile(460, toPosition) end doTeleportThing(cid, toPosition) elseif (go == "down") then local fpTile = doFindItemInPos({460}, getThingPos(cid))[1] if (tpTile.itemid ~= 0 and not isWalkable(toPosition,true,false) or fpTile.itemid ~= 460) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You can not go down!") end if (fpTile.itemid == 460) and (#getCreaturesInPos(fromPosition) < 2) then doRemoveItem(fpTile.uid, 1) end if (tpTile.itemid == 0) then doCreateTile(460, toPosition) end doTeleportThing(cid, toPosition) end end function onSay(cid, words, param) if (words:lower() == "!fly") then if (getPlayerStorageValue(cid, 73732) > 0) then local tile = doFindItemInPos({460}, getThingPos(cid)) if (#tile > 0) then return doPlayerSendCancel(cid, "Você deve descer para sair do fly!") end setPlayerStorageValue(cid, 73732, -1) doRemoveCondition(cid, CONDITION_OUTFIT) doChangeSpeed(cid, -800) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have stop the fly mode!") doCreatureSay(cid, "Stop fly!") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have start the fly mode!") doCreatureSay(cid, "Fly!") setPlayerStorageValue(cid, 73732, 1) registerCreatureEvent(cid, "FLYMOVE") doChangeSpeed(cid, 800) end elseif (words:lower() == "h1") then if (getPlayerStorageValue(cid, 73732) < 1) then return false end local cp = getThingPos(cid) local topos = {x = cp.x, y = cp.y, z = cp.z - 1} onMove(cid, cp, topos, "up") elseif (words:lower() == "h2") then if (getPlayerStorageValue(cid, 73732) < 1) then return false end local cp = getThingPos(cid) local topos = {x = cp.x, y = cp.y, z = cp.z + 1} onMove(cid, cp, topos, "down") end return true end Desde já, obrigado não entendi direito a primeira parte.. basicamente vc quer q eu veja se caso nao haja tile ele crie o tile do fly e permita o player sobrevoar o nada? e se a spell acabar e ele continuar no nada?
Postado Maio 17, 2017 8 anos Não, ele vai "caminhar" no nada por um tempo apenas, é como se eu estivesse correndo a 20km e fosse em direção a uma ribanceira, eu voaria por alguns milésimos até que começasse a cair Em 17/05/2017 em 22:44, xWhiteWolf disse: não entendi direito a primeira parte.. basicamente vc quer q eu veja se caso nao haja tile ele crie o tile do fly e permita o player sobrevoar o nada? e se a spell acabar e ele continuar no nada? Seria quase isso, oq confundiu tudo foi eu dizer que não cancelaria a spell, na verdade eu quero que ele continue com o Dash apenas. A parte do void seria temporária para simular que ele realmente estava correndo.. Um print para tentar explicar melhor. Por exemplo, se o player usar a spell na borda verde ele vai "voar" com o void por 3 segundos por exemplo e cair para o solo (sem perder o dash), porém se ele usar onde tem as cetas roxas ele vai conseguir chegar até a seta amarela, e se não virar consequentemente irá cair na água la trás (no meu server os players podem nadar em todos os locais então isso não vai ser problema.
Postado Maio 19, 2017 8 anos Autor 3 segundos ou 3 sqms? e como eu faria pra checar se tem sqm em baixo pra ele cair ou se ele ia cair no void?
Postado Maio 19, 2017 8 anos Em 19/05/2017 em 01:32, xWhiteWolf disse: 3 segundos ou 3 sqms? e como eu faria pra checar se tem sqm em baixo pra ele cair ou se ele ia cair no void? Existe a possibilidade de checar se há solo usando a função isWalkable como o nord usou no fly system? Se sim, haveria também a possibilidade de ele checar mais de uma vez? Por exemplo, sempre que o player usar a spell e então chegar nos lugares onde não seria possível andar e consequentemente ele bateria o script criasse voids por 3 segundos. #Edit Acha que seria mais facil fazer por ids? Como uma função StepIn e StepOut, por bordas ("4458", "4459", etc). Se achar necessário eu crio um tópico .-. Editado Maio 19, 2017 8 anos por eviltox (veja o histórico de edições)
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.