Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 06/14/15 em %

  1. Administrador

    NPC Guard v0.1 (1.0)

    Este é o Guard NPC para TFS1.0 (10.31). Descrição Ataca monstros Ataca players com skull (Red ou White) Persegue o alvo Usa ataque corpo-a-corpo ou à distância Instalação Crie um arquivo chamado new npc.xml e adicione: <?xml version="1.0" encoding="UTF-8"?> <npc name="Townguard Steve" script="townsteve.lua" walkinterval="0" floorchange="0" speed="400"> <health now="100" max="100"/> <look type="268" head="0" body="0" legs="79" feet="76" addons="3"/> </npc> Agora em npc/scripts crie townsteve.lua e adicione: -- config local npcname = "Townguard Steve" --Name of your guard NPC local maxdmg = 500 -- maximum dmg dealt local mindmg = 200 -- minimum dmg dealt local speed = 200 -- NPC will follow target every 0.2 seconds (that's "ok" fast) local atkspeed = 1 -- 1= 1 attack per second (!lowest value!) 2= 1 attack per 2 seconds, 3= 1 attack per 3 seconds,... local maxchase = 12 -- 12 tiles chase length (depends on PZs, spawnpoint from NPC, surroundings,... local area = 4 -- 4x4 area will be checked for monsters/players (6 is too much in my oppinion) -- texts local lost = {"I'll get you next time!","I'm to old for this..","Run, coward, RUN!"} -- text if NPC lost target local ktext = {"One for me!","...unworthy!","Bad luck!"} -- text if NPC kills the target local ctext = {"I'm here to help!","Let me handle this!","Die!"} -- text while NPC is in battle (talktype orange!) local ttext = {"Come out ","You coward ","I'll be waiting for you "} -- taunt if player walks into PZ -- Do not edit if you have no clue what you're doing! local hit = 0 local target = 0 local opos = 0 local nid = 0 local spec = {} local kill = 0 local pz = 0 local tpos = 0 local npos = 0 local function goback(nid, opos) if (kill == 0) and (pz == 0) then selfSay(lost[math.random(1,#lost)]) end doSendMagicEffect(getCreaturePosition(nid), 2) doTeleportThing(nid, opos, false) doSendMagicEffect(getCreaturePosition(nid), 101) target = 0 spec = {} pz = 0 kill = 0 end local function closedis(nid, target, opos) if target ~= 0 then tpos = getCreaturePosition(target) npos = getCreaturePosition(nid) if isMonster(target) or isPlayer(target) then if getDistanceBetween(opos, tpos) <= maxchase then if getDistanceBetween(npos, tpos) <= area then if not getTilePzInfo(tpos) then if ((tpos.y - npos.y) >= 2) and ((tpos.y - npos.y)<= area) then if queryTileAddThing(nid, {x=npos.x,y=npos.y+1,z=npos.z}) == 1 then doMoveCreature(nid, SOUTH) elseif queryTileAddThing(nid, {x=npos.x,y=npos.y+1,z=npos.z}) ~= 1 then doTeleportThing(nid, tpos, true) else target = 0 goback(nid,opos) end end if ((npos.y - tpos.y) >= 2) and ((npos.y - tpos.y) <= area) then if queryTileAddThing(nid, {x=npos.x,y=npos.y-1,z=npos.z}) == 1 then doMoveCreature(nid, NORTH) elseif queryTileAddThing(nid, {x=npos.x,y=npos.y-1,z=npos.z}) ~= 1 then doTeleportThing(nid, tpos, true) else target = 0 goback(nid,opos) end end if((tpos.x - npos.x) >= 2) and ((tpos.x - npos.x) <= area) then if queryTileAddThing(nid, {x=npos.x+1,y=npos.y,z=npos.z}) == 1 then doMoveCreature(nid, EAST) elseif queryTileAddThing(nid, {x=npos.x+1,y=npos.y,z=npos.z}) ~= 1 then doTeleportThing(nid, tpos, true) else target = 0 goback(nid,opos) end end if((npos.x - tpos.x) >= 2) and ((npos.x - tpos.x) <= area) then if queryTileAddThing(nid, {x=npos.x-1,y=npos.y,z=npos.z}) == 1 then doMoveCreature(nid, WEST) elseif queryTileAddThing(nid, {x=npos.x-1,y=npos.y,z=npos.z}) ~= 1 then doTeleportThing(nid, tpos, true) else target = 0 goback(nid,opos) end end elseif pz == 0 then selfSay(ttext[math.random(1,#ttext)]..""..getCreatureName(target).."!") pz = 1 target = 0 goback(nid,opos) end end else target = 0 goback(nid,opos) end addEvent(closedis, speed, nid, target, opos) else goback(nid, opos) end end end local function check_target(nid, opos) local position = getThingPos(nid) spec = getSpectators(position, area, area,false,false) if spec then for i = 1, #spec do if isMonster(spec[i]) then target = spec[i] closedis(nid, target, opos) break elseif isPlayer(spec[i]) then if getPlayerSkullType(spec[i]) == (SKULL_WHITE or SKULL_RED) then target = spec[i] closedis(nid, target, opos) break end else target = 0 end end end end function onCreatureAppear(cid) if isNpc(cid) then nid = cid opos = getThingPos(nid) end end function onThink(cid) if target == 0 then check_target(nid, opos) end if target == 0 and kill == 1 then goback(nid,opos) end if (os.clock() - hit) >= atkspeed then if target ~= 0 then if not getTilePzInfo(getCreaturePosition(target)) then if math.random(1,10) < 3 then doSendDistanceShoot(getCreaturePosition(nid), getCreaturePosition(target), 30) doTargetCombatHealth(nid, target, COMBAT_HOLYDAMAGE, -mindmg, -maxdmg, 39) else doTargetCombatHealth(nid, target, COMBAT_PHYSICALDAMAGE, -mindmg, -maxdmg, 0) end if getCreatureHealth(target) <= 0 then kill = 1 selfSay(ktext[math.random(1,#ktext)]) target = 0 else kill = 0 end hit = os.clock() if math.random(1,10) < 3 then doCreatureSay(nid, ctext[math.random(1,#ctext)],34) end end end end end Créditos: Zyntax
    2 pontos
  2. gabrielbsales

    Smeargle System[PXG]

    Bom, como um individuo(Vudi) não sabe cumprir o que fala, vou postar o sistema aqui.(não cabe ao post explicar aqui) Bom, aqui está o smeargle system, igual o da PxG. Vamos lá. 1 - Vá na pasta Lib, substitua seu cooldown bar.lua por isso: 2 - Ainda no Lib, no fim(depois do ultimo end) do Some Functions.lua, adicione isso: 3 - Agora no order.lua, do Actions, em baixo de: Adicione: 4 - Se seu servidor ja tiver os spells, sketch 1, sketch 2... Substitua por esses(data/lib/pokemon moves.lua): Se não, use os mesmos acima, não esqueça de adicionar no spells.xml. 5 - Agora, vá em talkactions/scripst, abra o move1.lua e substitua: Por Depois: Por: Pronto, se tiver feito tudo certo, funcionará. Como ficará: Como usar: Créditos: Eu(Todo o script)
    1 ponto
  3. Krono

    Spell Creator

    Ola pessoal do XTIBIA. Todos bem? espero que sim. Estou trazendo um programa já bem rodado, mais que talvez seja novidade para alguns. Vejam ai!! SpellCreator Aplicativo que auxilia na criação de spells. Programa Graffico super intuitivo, o que permite aos mais leigos a criar Spells de maneira rapida e pratica. O programa além de criar a o script, ele também lhe fornece a tag XML para instalar a spells. tem mais++ O programa também tem a opção de exportar uma imagem Gif animada de sua spell podendo assim utiliza-la em seu site/blog/forum. Há também suporte para novas sprites. Gostou? baixe agora e começe já desenvolver suas spells e compartilhar conosco suas melhores criações!! Requerimentos .NET Framework 3.5 is required Download Direto Clique aqui para iniciar o download
    1 ponto
  4. OTCliente Informação: Versão OTC: 0.6.7 Versões suportadas pelo client: 7.4 há 10.71 Compilada por: Avuenja Compilada em 16/01/2015 Imagem: Download: For Windows
    1 ponto
  5. Mophus

    Novas medalhas disponíveis!

    Melhor que muitas versões anteriores.
    1 ponto
  6. zipter98

    Arena System Inovador

    Tirando a parte da movimentação e do alvo dos monstros, o sistema em si não seria algo complexo. No entanto, sem modificações nas sources, ficaria muito sujeito a bugs. Se eu pensar em uma maneira mais leve e viável de fazer estas duas complicações, avisarei.
    1 ponto
  7. larissaots

    Sistema de Twitter no próprio jogo

    Créditos à Demonbholder. Objetivo É tipo um twitter. Você fala !tweet blablabla e é adicionada ao seu Twitter no servidor, ai para ver os tweets dos outros, basta usar !follow player e ver seus tweets. É um Twitter no servidor, não tem nada a ver com o site. Testado em: 8.60. Tutorial talkactions.xml: <talkaction words="!tweet;!follow" script="twittersystem.lua" /> talkactions/scripts, crie arquivo com nome twittersystem.lua e bote isso dentro: function onSay(cid, words, param) if words == "!tweet" then if getGlobalStorageValue(30070) == -1 then db.executeQuery("ALTER TABLE `players` ADD tweets TEXT NOT NULL DEFAULT twitter;") setGlobalStorageValue(30070, 1) end if param == "" then doPlayerSendCancel(cid, "Param required.") doSendMagicEffect(getCreaturePosition(cid), 2) else local datas = db.getResult("SELECT `tweets` FROM `players` WHERE `id` = ".. getPlayerGUID(cid) .. ";") local sentense = datas:getDataString("tweets") .. "\n" .. tostring(param) .. " " .. os.date("%c") db.executeQuery("UPDATE `players` SET `tweets` = '".. sentense .. "' WHERE `id` = ".. getPlayerGUID(cid) .. ";") return TRUE end end if words == "!follow" then if param == "" then doPlayerSendCancel(cid, "Param required.") doSendMagicEffect(getCreaturePosition(cid), 2) else local id = playerExists(tostring(param)) and getPlayerGUIDByName(tostring(param)) or getPlayerGUID(cid) local datas = db.getResult("SELECT `tweets` FROM `players` WHERE `id` = ".. id .. ";") local name = id == getPlayerGUID(cid) and getCreatureName(cid) or param doShowTextDialog(cid, 2160, name .. " " .. datas:getDataString("tweets")) end end return TRUE end
    1 ponto
  8. Créditos à Jamison Collins. Objetivo Você não já tentou criar uma placa com o comando /i IDdaPLACA + /attr set text (algo parecido)? Esse script vai ajudar muito! Usando /addsing textoquevocêquernaplaca você vai estar criando uma placa com o texto que você botou, e o ID da placa muda quanto a direção em que o seu personagem GM estiver virado. Tutorial talkactions.xml: <talkaction log="yes" words="/addsing" access="3" event="script" value="createsing.lua"/> talkactions/scripts, crie arquivo com nome createsing.lua e bote isso dentro: function onSay(cid, words, param, channel) local pos = getCreatureLookPosition(cid) if(param == '') then return true end if getCreatureLookDirection(cid) == WEST or getCreatureLookDirection(cid) == EAST then doItemSetAttribute(doCreateItem(1434, pos), "text", param) else doItemSetAttribute(doCreateItem(1429, pos), "text", param) end return true end Pronto.
    1 ponto
  9. Demonbholder

    Matemática + Lua

    Matemática + LUA Faaaala galera! Tudo bem? Espero que sim, pois precisarão de muita atenção para entender algumas partes deste tutorial. A matemática é algo que nos acompanha no dia-a-dia, realmente muito importante, principalmente na programação. É indiscutível e concordável entre todos os programadores que um dos fatores de um bom profissional da área é o domínio da matemática! Bom, este tutorial vai ser para mostrar um pouco apenas da importância desta na linguagem LUA, ainda que se você tem experiência, provavelmente já percebeu isto. Sinais matemáticos simples Começando com os sinais matemáticos, o básico de lua e da matemática, são eles: + Soma - Subtração * Multiplicação / Divisão ^ Exponenciação % Módulo Onde o módulo é definido como: x % y = x – math.floor(x/y)*y A raiz quadrada pode ser definida como: x^(1/2). Pode-se chegar ao valor da raiz cúbica deste jeito: x^(1/3) . E assim por diante. Os sinais de comparação também são básicos em lua, ainda sim, são bem importantes e são usados para comparar dois valores numéricos (exceto == e ~= que podem comparar qualquer valor). Porcentagem Porcentagem é bastante usada em lua, pois é um artifício a ser usado em várias funções que envolvem valores numéricos. A porcentagem não é nada mais que regra de três, exemplo: 100% - 200 25% - x Neste caso, temos o valor de cem por cento e queremos o valor de vinte cinco por cento. Para isso, cruzamos os valores. Então a seguinte conta é feita: 100x = 5000 x = 5000/100 x = 50 Logo, 25% de 200 é 50. tonumber Existe uma função em lua, que tenta fazer a conversão de alguma string para valor numérico, esta função é chamada de tonumber. É uma função clássica de lua, onde ela faz a conversão, de uma string, para um valor numérico, por exemplo: tonumber(“2”), ela converte para 2. Simples, no entanto útil. Vamos usar dando um exemplo de Ot Server. Em um comando de talkaction, os parâmetros são strings, mesmo se forem números, assim, para compará-los com outros números, é necessário esta conversão. Para curiosidade, a função tostring faz o inverso, exemplo: tostring(2), retorna “2”. Funções math Para mostrar a importância da matemática em lua e em outras programações, existem as funções math que são funções matemáticas ou diretamente relacionadas a ela. Sinceramente eu não domino todas, então vou explicar as mais importantes por agora, são elas: Math.ceil Math.deg Math.exp Math.floor Math.ldexp Math.log Math.log10 Math.modf Math.pi Math.pow Math.rad Math.random Bom, estas serão as funções explicadas neste tutorial, onde eu não explicarei as funções de seno, cosseno e tangente para não deixar o tutorial uma apostila. Primeiro, antes de começar a explicar estas funções, vou explicar o que seria um logaritmo, explicando como resolver-lo por definição, explicar o Número de Euler e explicar o que é um radiano. Logaritmo: Logaritmo é um conteúdo do ensino médio considerado um tanto complicado. Portanto, ensinarei apenas o método da resolução pela definição, vamos lá: Um logaritmo contém três partes, são elas a base, o expoente e o próprio logaritmo. Dado o logaritmo abaixo: Log100 = x 10 A base é 10, x é o expoente e o logaritmo é log100. A conta deve ser feita deste jeito: Base elevada ao expoente é igual a logaritmo. Ou seja x 10 = 100 x = 2 Pronto, o logaritmo de 100 na base 10 é 2. Esse é o método da definição do logaritmo. Número de Euler: O número de Euler é um número dado em homenagem a um matemático chamado Leonard Euler, suíço, nascido no século XIII. É um número irracional, aproximadamente é 2,718281828459045, ou, às vezes apenas 2,718281828459. O número de Euler é comum ser chamado de e. Também é à base do logaritmo natural. Radiano: Um radiano é a unidade de medida no Sistema Internacional de Unidades de um ângulo plano. Usando um circulo como exemplo, nós teríamos o eixo da circunferência, sendo a circunferência a linha traçada em volta do circulo. A distancia desde o eixo deste circulo até a circunferência é o raio. Quando a distancia entre duas linhas traçadas a partir do eixo até a circunferência for igual ao raio, o ângulo entre estas duas linhas vai ser 1 radiano. É importante saber que 1 radiano é, aproximadamente, 57.295779513082º. Math.ceil Explicado como funcionam os logaritmos, um radiano e o número de Euler, vamos começar explicando as funções matemáticas. O math.ceil faz uma abreviação de qualquer número decimal, arredondando este para o próximo numero inteiro maior que ele. Usamos assim: math.ceil(1.5), ele retornará 2. Portanto, o math.ceil retorna o inteiro maior que o número decimal em seu parâmetro. Exemplos: Math.ceil(7/2) - 4 Math.ceil(16/3) – 6 Math.deg O math.deg faz a conversão de um ângulo dado em radianos para grau. Por exemplo, 1 radiano é, aproximadamente, 57.295779513082º. Exemplos: Math.deg(2) - 114.59155902616º Math.deg(4) - 229.18311805233º Math.exp Considerando que o número de Euler é chamado de e, esta função faz o número de Euler elevado a um expoente x. Usando o math.exp(x), ele eleva o e na potencia de x. Por exemplo, math.exp(x) faz a seguinte operação: x e Exemplos: Math.exp(2) - 7.3890560989307 Math.exp(10) - 22026.465794807 Math.floor O math.floor é semelhante ao math.ceil, ele ignora os valores fracionários de números decimais e considera apenas o valor integral. No entanto, esta função arredonda o número para um valor menor, inteiro, que este. Por exemplo: math.floor(1.5), retorna 1. Exemplos: Math.floor(20/3) – 6 Math.floor(9/2) – 4 Math.ldexp Esta função é originada de uma fórmula, contendo dois parâmetros. A função eleva o número 2 a potencia do segundo parâmetro, feito isso, o multiplica pelo primeiro parâmetro. Por exemplo, math.ldexp(5, 3), primeiro é elevado 2 na potencia 3 e depois multiplicado por 5. 2³ = 8 8*5 = 40 Math.ldexp(5, 3) = 40 Exemplos: Math.ldexp(10, 7) = 1280 Math.ldexp(40, 2) = 160 Math.log Ao contrário do que o senso comum diz, esta função não lhe permite escolher um logaritmo e retornar o expoente a qual sua base deve ser elevado para ser igual e ele, no entanto, retorna a quanto o número de Euler deve ser elevado para que resulte no seu logaritmo. Por exemplo, math.log(148.41315910258), retornará 5, pois 2,718281828459045 elevado na 5º potencia é igual a 148.41315910258. Definição do logaritmo acima: Log148.41315910258 = x 2,718281828459045 x 2,718281828459045 = 148.41315910258 x = 5 Math.log10 Esta função é uma função relativamente simples comparada com a de cima. Pois ao invés de assumir o número de Euler como base do logaritmo, ela assume 10 como esta. Por exemplo: math.log10(100), seria processado assim: Log100 = x 10 x 10 = 100 x = 2 Exemplos: Math.log10(1000) – 3 Math.log10(0.1) – (-1) Math.modf Esta é outra função simples de se compreender, ela retorna dois valores, o primeiro é a parte intregal do parâmetro e o segundo é a parte fracionária. Dado o exemplo: math.modf(1.5), ele retorna primeiro 1 e depois 0,5 pois 1 é a parte integral do número e 0,5 é a parte fracionária. Exemplos: Math.modf(7.5) - 7 & 0,5 Math.modf(92.8) – 92 & 0,8 Math.pi A função retorna o valor de PI é um número como o número de Euler, ou seja, um número importante e único na matemática. É usado para medir várias figuras geométricas. É referente a letra p no alfabeto grego, e tem o valor aproximado de: 3,14159265 Math.pow A função representa a seguinte conta: y x Ou seja, x elevado na potencia y, onde x é o primeiro parâmetro e y o segundo. Por exemplo, math.pow(2, 3) resulta 8. Exemplos: Math.pow(3, 2) - 9 Math.pow(5, 3) – 125 Math.rad É a função contrária de math.deg, faz a conversão de um ângulo dado em graus para radianos. Por exemplo, 1º é aproximadamente, 0.01745329 radianos. Exemplos: Math.rad(30) - 0.5235987755983 Math.rad(360) - 6.2831853071796 Math.random Para finalizar, a função math.random escolhe um número inteiro entre o arredondamento do primeiro parâmetro e o arredondamento do segundo. Sendo este arredondamento semelhante ao math.floor. Por exemplo, math.random(1, 5), processaria o seguinte: 20% - 1 20% - 2 20% - 3 20% - 4 20% - 5 É importante ressaltar que lua é uma linguagem semi-randomica. Exemplos: Math.random(1, 100) Math.random(5, 18) Fontes: Vou colocar aqui as fontes de onde eu recorri para escrever tudo isso acima: Manual Lua Wikipédia Logaritmo Wikipédia Radiano Wikipédia Número de Euler Tutorial exclusivo XTIBIA Bom, é isso, o tutorial foi feito inteiramente por mim, espero que gostem e aproveitem, até mais. Este tópico recebeu destaque em nosso portal!
    1 ponto
  10. Mock

    Mock Fly System 1.0

    Autor: Mock the bear Servidor testado: TFS 0.3.6 Depois de muita espera eu dei a chance de liberar o script, disse que iria postar assim que descobrissem como criar um tile onde não tem. Pois bem um cara desse forum chamado kydrai descobriu e coube ao lucas123 mostrar. Parabens kydrai ;D Script dedicado a vc. A minnha funçao é essa: function doCreateTile(id,pos) -- By mock doAreaCombatHealth(0,0,pos,0,0,0,255) doCreateItem(id,1,pos) end E a dele é essa: function doCreateTile(cid, tileid, pos) -- by Kydrai doCombatAreaHealth(cid, 0, pos, 0, 0, 0, CONST_ME_NONE) doCreateItem(tileid, 1, pos) end O principio é o mesmo. Abusar de um bug do distro que cria um tile quando executa uma spell. E com o tile pode criar o SQM. Bom vamos começar. Primeiro crie um arquivo chamado flylib.lua na pasta data/lib do seu server e coloque isso: CONST_FLYVOID = 460 CONT_FLYOUTFIT = 239 IGNORED = {6495,7096,7099,5167,5162,5163,405,7100, 5315,5521,5316,5193,5192,5191,945,5048,923,950,951, 952,953,3623,954,955,949,9101,3352,9106,9103,1524, 1111,437,433,443,434,442,436,445,941,444,435,943, 1027,925,930,926,928,922,921,1112,406,904,931,934, 932,933,5319} --- Config here up = {} down = {} fly = {} fly.win = function(cid)-- Script by mock setPlayerStorageValue(cid, 102015,1) doPlayerSendTextMessage(cid,27,'Now you can fly.') end fly.add = function(cid)-- Script by mock if getPlayerStorageValue(cid, 102015) == -1 or getPlayerStorageValue(cid,13241) == 1 then return false end if getPlayerStorageValue(cid, 102059) <= 0 then local outfit = getCreatureOutfit(cid) outfit.lookType = CONT_FLYOUTFIT doSetCreatureOutfit(cid, outfit, -1) setPlayerStorageValue(cid, 102059,1) doChangeSpeed(cid, 390) doPlayerSendTextMessage(cid,27,'Fale \'up\' e \'down\'.' ) return true else doPlayerSendTextMessage(cid,27, "Você ja esta voando.") return false end end function isWalkable(pos, creature, proj, pz)-- 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 if getTileInfo(pos).protection and pz then return false, true 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 fly.using=function(cid)-- Script by mock return getPlayerStorageValue(cid, 102059) > 0 end fly.logout = function(cid)-- Script by mock if fly.using(cid) then local p = getCreaturePosition(cid) setPlayerStorageValue(cid, 102010,1) setPlayerStorageValue(cid, 102011,p.x) setPlayerStorageValue(cid, 102012,p.y) setPlayerStorageValue(cid, 102013,p.z) deletarEmVolta(p) fly.del(cid) end return true end fly.login = function(cid)-- Script by mock if getPlayerStorageValue(cid, 102010) ~= -1 then setPlayerStorageValue(cid, 102010,-1) local p = {} p.x = getPlayerStorageValue(cid, 102011) p.y = getPlayerStorageValue(cid, 102012) p.z = getPlayerStorageValue(cid, 102013) if not checkAround(p) then fly.add(cid) down.gerarEmVolta(p) doTeleportThing(cid,p) end end return true end fly.die = function(cid)-- Script by mock if fly.using(cid) then local p = getCreaturePosition(cid) setPlayerStorageValue(cid, 102011,-1) setPlayerStorageValue(cid, 102012,-1) setPlayerStorageValue(cid, 102013,-1) deletarEmVolta(p) fly.del(cid) end return true end fly.del = function(cid)-- Script by mock if getPlayerStorageValue(cid, 102059) > 0 then if getSqmId(getCreaturePosition(cid)).itemid == CONST_FLYVOID then return false end doRemoveCondition(cid, CONDITION_OUTFIT) setPlayerStorageValue(cid, 102059,-1) doChangeSpeed(cid, -390) return true end end function hasSqm2(pos)-- Script by mock local f = getTileThingByPos(pos) if f.itemid ~= 0 and f.itemid ~= 1 and (not isWalkable(pos) and not isInArray(IGNORED,f.itemid)) then return true end return false end function hasSqm3(pos)-- Script by mock local f = getTileThingByPos(pos) if f.itemid ~= 0 and f.itemid ~= 1 and f.itemid ~= CONST_FLYVOID and not isInArray(IGNORED,f.itemid) then return true end return false end function deletar(pos)-- Script by mock if hasSqm(pos) then local sqm = getSqmId(pos) if sqm.itemid == CONST_FLYVOID then doRemoveItem(sqm.uid,1) end end end function deletarEmVolta(pos) for x=-1,1 do for y=-1,1 do deletar({x=pos.x+x,y=pos.y+y,z=pos.z}) end end end function checkAround(pos)-- Script by mock for x=-1,1 do for y=-1,1 do if hasSqm2({x=pos.x+x,y=pos.y+y,z=pos.z}) then return true end end end return false end function fly.checkAround(pos)-- Script by mock local n = 0 for x=-1,1 do for y=-1,1 do local g = getTileThingByPos({x=pos.x+x,y=pos.y+y,z=pos.z}) if g.itemid == CONST_FLYVOID then n = n+1 end if isCreature(getTopCreature({x=pos.x+x,y=pos.y+y,z=pos.z}).uid) then return false end end end if n == 9 then return true end return false end function up.checkAround(pos)-- Script by mock for x=-1,1 do for y=-1,1 do local g = getTileThingByPos({x=pos.x+x,y=pos.y+y,z=pos.z}) if hasSqm3({x=pos.x+x,y=pos.y+y,z=pos.z}) or g.itemid == CONST_FLYVOID then return true end end end return false end function down.checkAround(pos,f)-- Script by mock for x=-1,1 do for y=-1,1 do local g = getTileThingByPos({x=pos.x+x,y=pos.y+y,z=pos.z}) if (not f and hasSqm2({x=pos.x+x,y=pos.y+y,z=pos.z})) or g.itemid == CONST_FLYVOID then return true end end end return false end function gerarEmVolta(pos)-- Script by mock local n = 30000 for x=-1,1 do for y=-1,1 do n =n+1 doItem({x=pos.x+x,y=pos.y+y,z=pos.z},n) end end end function doItem(pos,a,d)-- Script by mock if not hasSqm2(pos) then doCreateTile(CONST_FLYVOID,pos) pos.stackpos = 0 local c = getTileThingByPos(pos) doSetItemActionId(c.uid, a) end end function getSqmId(pos,t)-- Script by mock if hasSqm(pos) or t then pos.stackpos = 0 local i = getTileThingByPos(pos) return i end return nil end function down.doItem(pos,a)-- Script by mock if not hasSqm(pos) then doCreateTile(CONST_FLYVOID,pos) pos.stackpos = 0 local c = getTileThingByPos(pos) doSetItemActionId(c.uid, a) end end function down.gerarEmVolta(pos)-- Script by mock local n = 30000 for x=-1,1 do for y=-1,1 do n =n+1 down.doItem({x=pos.x+x,y=pos.y+y,z=pos.z},n) end end end function doCreateTile(id,pos) -- Script by mock doAreaCombatHealth(0,0,pos,0,0,0,255) doCreateItem(id,1,pos) end Agora é 1 scritp em creaturescripts, 3 em talkactions e 1 em movements. Creaturescripts Em seu login.lua coloque isso: fly.login(cid) no seu logout.lua coloque isso: fly.logout(cid) e no script que o player morre coloque isso: fly.die(cid) Isso é para quando o player entrar e sair do server pra voltar onde ele estava :coolface: Movements Em movements.xml: <movevent type="StepIn" actionid="30001" event="script" value="fly.lua"/> <movevent type="StepIn" actionid="30002" event="script" value="fly.lua"/> <movevent type="StepIn" actionid="30003" event="script" value="fly.lua"/> <movevent type="StepIn" actionid="30004" event="script" value="fly.lua"/> <movevent type="StepOut" actionid="30005" event="script" value="fly.lua"/> <movevent type="StepIn" actionid="30006" event="script" value="fly.lua"/> <movevent type="StepIn" actionid="30007" event="script" value="fly.lua"/> <movevent type="StepIn" actionid="30008" event="script" value="fly.lua"/> <movevent type="StepIn" actionid="30009" event="script" value="fly.lua"/> <movevent type="AddItem" tileitem="1" itemid="460" event="script" value="fly.lua"/> E no script fly.lua ---Script by mock the bear function doCopyItem(item,pos) ---Script by mock the bear for i=1,6 do pos.z = pos.z+1 if hasSqm(pos) and getSqmId(pos).itemid ~= 10217 then local i = doCreateItem(item.itemid,item.type,pos) if item.actionid ~= 0 then doSetItemActionid(i,item.actionid) end doSendMagicEffect(pos,9) return i else local p2 = {x=pos.x+1,y=pos.y+1,z=pos.z} doSendDistanceShoot(pos,p2,40) doSendMagicEffect(pos,2) end end end function onAddItem(item,pos,k) ---Script by mock the bear doCopyItem(item,k) doRemoveItem(item.uid,item.type == 0 and 1 or item.type) end function onStepIn(cid, item, position, fromPosition) ---Script by mock the bear local dir = { [30004] = {0,6,7}, [30007] = {7,0,6,1,5}, [30008] = {1,5,7}, [30009] = {5,4,2,1,7}, [30006] = {2,5,4}, [30003] = {4,3,6,2,5}, [30002] = {3,4,6}, [30001] = {6,0,7,3,4}, } if isPlayer(cid) then local chkps = {x=position.x,y=position.y,z=position.z} local ig = false for i,b in pairs(dir[item.actionid]) do local nw = getPosByDir(chkps,b) local g = getTileThingByPos(nw) if hasSqm3(nw) or g.itemid == CONST_FLYVOID or nw.x < 35 or nw.y < 35 then ig = true break end end if not ig then deletarEmVolta(fromPosition) gerarEmVolta(getCreaturePosition(cid)) else doTeleportThing(cid,fromPosition,false) doPlayerSendTextMessage(cid,27, "Sorry, you cannot fly here.") end end end function onStepOut(cid, item, position, fromPosition,q) addEvent(function(pos) if fly.checkAround(pos) then deletarEmVolta(pos) end end,10000,position) end Talkactions Em talkactions.xml <talkaction words="up" case-sensitive="no" event="script" value="flyup.lua"/> <talkaction words="down" case-sensitive="no" event="script" value="flydown.lua"/> <talkaction words="!fly" case-sensitive="no" event="script" value="fly.lua"/> Em fly.lua function onSay(cid, words, param) --- By moc kthe bear (MTB) if param ~= '' and getPlayerGroupId(cid) > 3 then local cida = getPlayerByName(param) if cida and isPlayer(cida) then fly.win(cida) end return true end if fly.using(cid) then local p = getCreaturePosition(cid) p.stackpos = 0 local f = getTileThingByPos(p) if fly.del(cid) then if f.itemid ~= 0 and f.itemid ~= 1 and f.itemid ~= CONST_FLYVOID then return true else setPlayerStorageValue(cid,10941,1) local p = getCreaturePosition(cid) setPlayerStorageValue(cid, 102011,p.x) setPlayerStorageValue(cid, 102012,p.y) setPlayerStorageValue(cid, 102013,p.z) return true end else doPlayerSendTextMessage(cid,27,'You cannot turn off the fly here.') end else if fly.add(cid) then local pos = getCreaturePosition(cid) if getSqmId(pos).itemid == 10217 then down.gerarEmVolta(pos) end return true else doPlayerSendTextMessage(cid,27,'You cannot fly.') return true end end return true end Flyup.lua function onSay(cid)--- By moc kthe bear (MTB) local time = os.time() if time < getPlayerStorageValue(cid, 102054) then doPlayerSendCancel(cid, "You are exhausted.") return true end if not fly.using(cid) then return false end local pos = getCreaturePosition(cid) pos.z = pos.z-1 if hasSqm(pos) or pos.z < 0 or up.checkAround(pos) then doPlayerSendTextMessage(cid,27,'You cannot fly higger.') return true else gerarEmVolta(pos) doTeleportThing(cid,pos) pos.z = pos.z+1 deletarEmVolta(pos) end return true end Flydown.lua function onSay(cid)--- By moc kthe bear (MTB) local time = os.time() if time < getPlayerStorageValue(cid, 102054) then doPlayerSendCancel(cid, "You are exhausted.") return true end if not fly.using(cid) then return false end local pos = getCreaturePosition(cid) pos.stackpos = 0 local g = getTileThingByPos(pos) pos.z = pos.z+1 local f = getTileThingByPos(pos) if getSqmId(getCreaturePosition(cid)).itemid ~= CONST_FLYVOID or down.checkAround(pos) or (g.itemid ~= CONST_FLYVOID and f.itemid ~= CONST_FLYVOID and f.itemid ~= 0 and f.itemid ~= 1) or (not isWalkable(pos,true,false,false) and hasSqm(pos)) or (hasSqm(pos) and not getTileHouseInfo(pos)) == 0 then doPlayerSendTextMessage(cid,27,'You cannot go to down here.') return true else down.gerarEmVolta(pos) doTeleportThing(cid,pos) pos.z = pos.z-1 deletarEmVolta(pos) end return true end E pronto. Esse não tem o recurso de cair que tem no video por que aquilo é do K.A junto do flysystem 2.0. Esse ja foi do K.A porem agora ele tem um melhor. Esse ai é bom sim porem não serve mais pro k.a entao ta liberado. Façam bom uso modifiquem da forma que quiserem corrijam os bugs e repostem melhorado contanto que nao tire meus creditos. Lembrando que nao precisa mudança na source. Eu sei ta um pog do baralho nao tive paciencia pra faze um remake. Se gostaram clica no meu ovinho da assinatura
    1 ponto
  11. Lukeskywalker

    Animando Um Heart Pillow

    Fassa seu heart pillow fica mais anidado Va em Actions.xml e coloque <action itemid="1685" script="Heart Pillow.lua"/> Crie o arquivo "Heart Pillow.lua" e coloque na pasta Scripts Para TFS Para outras versões Espero que gostem
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...