Ir para conteúdo

FusionOT

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    FusionOT deu reputação a Ryzor em PVP Tool (Zone) não funciona corretamente   
    Não presisava você selecionar PvP Tool na area era so fazer a arena normal não deixando com area PZ ou No-PvP , deixando sem nada vai ficar como PvP
  2. Gostei
    FusionOT deu reputação a Ryzor em [8.6] War On Rookgaard Team   
    dlls está ai funcionando,scan está com erro + prometo atulizar,creditos achei em um outro forum vi que aki não tinha e coloquei aki.

  3. Gostei
    FusionOT deu reputação a Ryzor em [8.6] War On Rookgaard Team   
    Comentem ae no que achou
  4. Gostei
    FusionOT deu reputação a Ryzor em [8.6] War On Rookgaard Team   
    Rookwar - V.0.2 Based on TFS 0.3.6
    Client 8.60
    2 Teams
    Red Team
    Green Team

    Content:
    Creating your own accounts 1 / 1,
    You begin to level 100,
    Entering receives your skills,
    you do not lose items to die only in Red and black skull,
    By killing a player receives 500gps,
    Automatic broadcast,
    Map Rookgaard (edited),
    Red team temple,
    Green team temple,
    Global Temple,
    Trainers,
    Depot,
    Shops.
    Depot,
    Shops.

    Npcs:
    Npc Skuller sell Sacred skull for remove skulls and frags,
    Npc Varkhal sell first and secconds addons,
    Npc Amuletero sell amulets,
    Npc Donal sell food,
    Npc Pancho the seller of loot.

    Scripts:
    mods/remove_skulls.xml,
    creaturescripts/deathBroadcast.lua,
    creaturescripts/onkill.lua,
    creaturescripts/skills.lua,
    creaturescripts/onlogout.lua,
    creaturescripts/firstitems.lua,
    movements/Green.lua,
    movements/Red.lua.

    Screens Shots:










    Account god:
    Acc: god
    Pass: god

    Download: 4Shared
    Scan Rook: Virus Total
    Download Dlls: 4Shared
  5. Gostei
    FusionOT deu reputação a Ryzor em [Talkcations] Sistema-Guild-Fairy-Tail   
    WarW0lf , primeiramente ve as coisas para falar ok? e quizer fala a algum moderador pa olhar o IP pode fala , não sou fake so apenas falo pa ele comenta nos topicos que estou fazendo e eu comento no dele , então fika quetim ae ok ?
  6. Gostei
    FusionOT deu reputação a Ryzor em Fazendo Praia   
    Fazendo Praia


    Olá pessoal, tudo bom? Gostaria de ensinar a vocês como fazer uma praia simples e legal para seu servidor. É algo fácil de fazer mas poucos têm noção de como!

    Para começar, faça seu mapa base, com água e areia.




    Esse foi o começo, agora você irá colocar também grama e as bordas de praia. As bordas que você deve usar estão entre o id 4644 e o id 4663, tudo bem?

    Posicionem de acordo com o que você vai colocar de grama e tenha cuidado, deixe uma parte com areia, não tão grande e outra com grama. Você pode fazer algo grande, mas no tibia, é bom ir variando entre areia e grama!

    Você também pode colocar bordas grossas de grama em alguns lugares.




    Agora é a hora de detalhar!

    Primeiramente, coloque alguns arbustos e árvores na parte verde do mapa, assim como tufos de grama. Caso queira colocar tufos de grama na areia, você pode, mas sem exagerar.


    Coloque também alguns mangroves mortos (5392 e 5396) na areia e mangroves vivos (5393 e 5397) na parte de grama.


    Coloque palmeiras vivas e mortas, na grama ou na areia, procure não exagerar!


    Coloque algumas conchas (5680) na areia!


    Também na areia, coloque os sand gravel (id 8033 a 8045) em algumas partes!



    Acho que ficou bem legal seu mapa, não é? Como é um tutorial, não fiz algo tão bem detalhado, por isso vou colocar uma outra foto aqui de algo que pode ser também uma praia!



    Assim, é possível notar que você pode colocar alguns cactos, flores e também outros tipos de bordas, mas são coisas que não são essenciais!!


    Creditos :

    Anyur
  7. Gostei
    FusionOT deu reputação a Ryzor em Entendendo o Stackpos!   
    Faaaaala galerinha! A pedido de alguns usúarios estou aqui para postar este tutorial.

    Espero que seja útil para todos que tem alguma dúvida quanto ao Stackpos.

    Eu sinceramente não domino completamente a magia dos stackpos, mas espero poder tirar algumas dúvidas de quem sabe e ensinar quem ainda não sabe. Vamos logo ao tutorial:

    Stackpos


    • Introdução

    Stackpos é um dos index da tabela que guarda posições. Toda posição é uma tabela, exemplo: {x=160, y=50, z=7}, mas o que pouca gente sabe, é que o stackpos também faz parte desta tabela. Todos sabem que em uma unica posição podem haver vários itens, formando uma pilha de itens, portanto, para diferenciar a posição de um item da pilha para o outro foi criado o stackpos, que é o número que diz em qual lugar da pilha está o item.


    • Descobrindo o Stackpos

    O stackpos segue um padrão, ou seja, uma ordem. Vou mostrar primeiramente os stackpos especiais:



    0 - O stackpos 0 de uma posição é sempre o tile, ou seja, o chão. 253 - Este número refere-se ao stackpos das criaturas que estão na posição, sejam monstros, players ou npcs. 255 - O item mais alto de um pilha tem o stackpos 255, além do stackpos normal dela. Agora vou mostrar como descobrir o stackpos de um item apenas olhando para a pilha. Considere a seguinte pilha: Tile sempre terá o stackpos 0. Agora os outros recebem o stackpos contrário da ordem deles acima do chão. Coin receberá o stackpos 1 e 255. Chair receberá o stackpos 2. Table receberá o stackpos 3. Simples não? É sempre ao contrário da ordem deles acima do chão. Vamos a mais um exemplo para ficar bem claro, considere a seguinte pilha:







    Para pegar o stackpos pelo uid do item, usamos a função getThingPos(uid), a qual já retorna uma tabela com o stackpos do item.


    É isso galera, qualquer dúvida só perguntar. Até mais.










    Creditos :




    Shoeei

    Primeiro vamos contar quantos itens tem a pilha. Neste caso, em um total de 4 itens (tile, table, chair, coin). Tile receberá o stackpos 0. Ring receberá o stackpos 1 e 255. Hammer receberá o stackpos 2. Coin receberá o stackpos 3. Chair receberá o stackpos 4. Table receberá o stackpos 5. • Montando uma Tabela com Stackpos Eu havia tido anteriormente que toda posição é uma tabela. Para montarmos uma posição com o index stackpos, simplesmente adicionamos ele no final, exemplo: {x=160, y=50, z=7, stackpos=253} Simples, não é mesmo? • Funções Auxiliares Sempre que preciso descobrir o stackpos através de um script, uso as seguintes funções: Pegar o stackpos pela posição e id do item. function getItemStackpos(position, id) if getTileItemById(position, id).itemid == 0 then return nil end for i = 0, 255 do local pos = getThingFromPos({x=position.x, y=position.y, z=position.z, stackpos=i}) if pos.itemid == id then return i end end end end
  8. Gostei
    FusionOT deu reputação a Ryzor em Montanha+Cave   
    Ta bom mano que mane auto-border todos mapper usem , alguns falao que nao mais usam sim
  9. Gostei
    FusionOT deu reputação a Ryzor em ERROS NO DISTRO SERVIDOR MYSQL   
    Na sua config.lua coloque isso 
     
    sqlKeepAlive = 0 mysqlReadTimeout = 30 mysqlWriteTimeout = 30 encryptionType = "sha1"
  10. Gostei
    FusionOT deu reputação a Ryzor em ERROS NO DISTRO SERVIDOR MYSQL   
    Tire uma print do seu banco de dados e me manda para ve se ta faltando alguma coisa.
  11. Gostei
    FusionOT deu reputação a Ryzor em ERROS NO DISTRO SERVIDOR MYSQL   
    Servidor está sem site ? se for sem e sqlite , mysql e apenas com site .
     
    No caso se for sem site assim --
     
    sqlType = "sqlite"
    sqlHost = "localhost" sqlPort = 3306 sqlUser = "root" sqlPass = "Senha DataBase" sqlDatabase = "NomeDataBase" sqlFile = "NomeDataBase.s3db" sqlKeepAlive = 0 mysqlReadTimeout = 5000 mysqlWriteTimeout = 5000 encryptionType = "plain10"   --------------------   Se for com site --   sqlType = "mysql" sqlHost = "localhost" sqlPort = 3306 sqlUser = "root" sqlPass = "Senha DataBase" sqlDatabase = "NomeDataBase" sqlFile = "NomeDataBase.s3db" sqlKeepAlive = 0 mysqlReadTimeout = 30 mysqlWriteTimeout = 30 encryptionType = "sha1"  
     
    Continuar com poblemas me manda novas prints.
  12. Gostei
    FusionOT deu reputação a Ryzor em Matematica + 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:


    Codigo:
    + 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 bool, strings e numeros.


    Código:
    == significa dizer que é equivalente a tal string, number ou bool. Você está afirmando tal valor é igual a outro valor.
    ~= quer dizer que é diferente de tal string, number ou bool.

    Atenção, = não é igual a ==

    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:



    Código:
    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:


    Código:
    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”.


    Biblioteca 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:


    Código:
    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 bibliotecas 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:


    Código:
    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



    Código:
    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:


    Código:
    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:


    Código:
    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:



    Código:
    x
    e
    Exemplos:

    Código:
    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:


    Código:
    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.


    Código:
    2³ = 8
    8*5 = 40
    math.ldexp(5, 3) = 40
    Exemplos:

    Código:
    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:



    Código:
    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:



    Código:
    Log100 = x
    10

    x
    10 = 100

    x = 2
    Exemplos:

    Código:
    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:



    Código:
    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:



    Código:
    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:



    Código:
    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:


    Código:
    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:



    Código:
    20% - 1
    20% - 2
    20% - 3
    20% - 4
    20% - 5
    É importante ressaltar que lua é uma linguagem semi-randomica.

    Exemplos:


    Código:
    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

    Espero que este tutorial possa ajudar alguem.



    Creditos :
    Shoeei

  13. Gostei
    FusionOT deu reputação a Ryzor em Tutorial: Return   
    Ae galera, anônimo da OTbr mais uma vez aqui. Brinks :B

    Bom galera, hoje falarei sobre o RETURN, que todos acham que é um bicho de sete cabeças mas que na verdade não passa de algo simples e bem útil em alguns casos.



    Utilização:




    Exemplo 1:



    function getPlayerSet(cid) local items = {} for i = 1,10 do local item = getPlayerSlotItem(cid, i) if item.uid > 0 then table.insert(item, items) end end return items end Como podem ver nessa função, eu criei uma função que cria um loop e verifica todos os items do corpo do player e ela usa o return para retornar essa tabela com os items. Com isso se eu precisar pegar todos os items do player é só usar essa função que ela retornara uma com os items do player. (Função não testada) Exemplo 2: function isTroll (cid) if string.lower(getCreatureName(cid)) == "troll" then return true else return false end end Essa é uma função que irá verificar se o cid vai ter o nome de "Troll" e se for ela vai retornar true e se não for vai retornar false. Return true e false em callbacks Exemplo 3: local config = { daily = "no", -- allow only one enter per day? (like in global Tibia) level = 100, storage = 30015 entry = { {x = 247, y = 659, z = 13}, {x = 247, y = 660, z = 13}, {x = 247, y = 661, z = 13}, {x = 247, y = 662, z = 13} }, destination = { {x = 189, y = 650, z = 13}, {x = 189, y = 651, z = 13}, {x = 189, y = 652, z = 13}, {x = 189, y = 653, z = 13} } } config.daily = getBooleanFromString(config.daily) function onUse(cid, item, fromPosition, itemEx, toPosition) if(item.itemid == 1946) then if(config.daily) then doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) else doTransformItem(item.uid, item.itemid - 1) end return true end if(item.itemid ~= 1945) then return true end local players = {} for _, position in ipairs(config.entry) do local pid = getTopCreature(position).uid if(pid == 0 or not isPlayer(pid) or getCreatureStorage(pid, config.storage) > 0 or getPlayerLevel(pid) < config.level) then doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) return true end table.insert(players, pid) end for i, pid in ipairs(players) do doSendMagicEffect(config.entry[i], CONST_ME_POFF) doTeleportThing(pid, config.destination[i], false) doSendMagicEffect(config.destination[i], CONST_ME_ENERGYAREA) end doTransformItem(item.uid, item.itemid + 1) return true end



    Dá para ver claramente que existem umas verificações checam valores e se eles forem verdadeiros então vai dar um return true que vai parar o script ali, assim evitando que ele execute o resto do script.


    Curiosidade:



    Bom galera eu sempre vejo scripts de alavanca usando verificação para ver o id da alavanca e para transformar a alavanca. Porém se vocês não colocarem essa verificação, a função de transformar o item e colocar um return false no final a alavanca irá se transformar da maneira padrão :]



    Creditos :

    IuniX
  14. Gostei
    FusionOT deu reputação a Ryzor em Informações que vai/já precisar/precisou   
    Tenho em meu PC algumas listas copm informações para se colocar em algumas funções que não se acha tão facilmente...




    - = Slots = -




    Aposto que muitos já se perguntaram o que por em slot na função getPlayerSlotItem(cid, slot). Abaixo há a resposta:



    CONST_SLOT_HEAD (1) = helmet CONST_SLOT_NECKLACE (2) = necklace slot CONST_SLOT_BACKPACK (3) = backpack CONST_SLOT_ARMOR (4) = armor CONST_SLOT_LEFT (5) = left hand CONST_SLOT_RIGHT (6) = right hand CONST_SLOT_LEGS (7) = legs CONST_SLOT_FEET (8) = boots CONST_SLOT_RING (9) = ring slot CONST_SLOT_AMMO (10) = ammo slot Exemplo de uso: if getPlayerSlotItem(cid, 10).itemid == 2229 then doPlayerSendTextMessage(cid, 22, "Você tem uma caveirano lugar das munições.") end Que seria o mesmo que: if getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid == 2229 then doPlayerSendTextMessage(cid, 22, "Você tem uma caveirano lugar das munições.") end Nota: a função getPlayerSlotItem(cid, slot) retorna uma table de três valores: itemid, uid e actionid. description weight defense attack attackspeed weaponType extradef absorbPercentDeath absorbPercentHoly absorbPercentIce absorbPercentEnergy absorbPercentEarth absorbPercentFire absorbPercentPhysical skillShield magiclevelpoints defense weaponType armor slotType weight speed Um exemplo muito usado em scripts de refinamento: doItemSetAttribute(item2.uid,"extradefense",8) Nota: as keys devem sempre ser usadas como uma string, ou seja, entre aspas. Nota2: Aquelas keys listadas não são as únicas, mas são as menos conhecidas. há também aid que representa a action id entre outras(que também precisam ser usadas como string). SKILL_FIST (0) = Fist Fighting SKILL_CLUB (1) = Club Fighting SKILL_SWORD (2) = Sword Fighting SKILL_AXE (3) = Axe Fighting SKILL_DISTANCE (4) = Distance Fighting SKILL_SHIELD (5) = Shielding SKILL_FISHING (6) = Fishing Exemplo: doPlayerAddSkill(cid, 1, 8) Que seria o mesmo que: doPlayerAddSkill(cid, SKILL_CLUB, 8)



    Espero que tenha ajudado


    Creditos

    Antharaz
    - = Keys = - Outra coisa importante são as keys de itens, usadas nas funções doItemSetAttribute(uid, key, value), doItemEraseAttribute(uid, key) e getItemAttribute(uid, key). Abaixo há uma lista com as keys: - = Skills = - Por último mas não menos importante há os skills, onde são usados em funções como doPlayerAddSkillTry(cid, skillid, n[, useMultiplier]), doPlayerAddSkill(cid, skillid, amount) entre outras. Abaixo segue a lista:
  15. Gostei
    FusionOT deu reputação a Ryzor em Importando MAP com FOTOS!   
    Bem esta tutorial é bem simples e contém apenas 6 passos que deverão ser seguidos com bastante atenção!
    ANTENÇÃO A VERSÃO DO MAPA INPORTADO A SEGUIR É 8.60!


    1º Abra se remeres map editor e va em: FILE>IMPORT>IMPORT MAP.


    2º Após abrir o IMPORT MAP, CLIQUE EM BROWSER PARA SELECIONAR O DIRETORIO DO SEU MAPA.


    3º Após selecionado clique em ABRIR.



    4º AGORA É A CONFIGURAÇÃO!. Bem...

    MAP FILE É O DIRETORIO DO SEU MAPA

    X OFFSET - É A POSIÇÃO DE X ONDE VOCê QUER QUE SEU MAPA SEJA COLOCADO.

    Y OFFSET - É A POSIÃO DE Y ONDE VOCê QUER QUE SEU MAPA SEJA COLOCADO.

    HOUSE IMPORT- É A SELEÇÃO QUE INDICA SE VOCÊ QUER QUE AS HOUSES DE SEU MAPA TAMBEM SEJAM INSERIDAS JUNTO DELE.

    SPAWN IMPORT- É A SELEÇÃO QUE INDICA SE VOCÊ QUER QUE AS SPAWNS DE MONTROS TAMBEM VENHAM JUNTO DE SEU MAPA.


    5º Após ter importado o mapa o o seguinte erro procede:

    SAIRÁ DA ARÉA ONDE VOCê INPORTOU O MAPA!

    BEM MAIS PARA VOLTAR-MOS BASTA VOCÊ DAR "CTRL+T" E SABER A TOWN E PEGAR AS POSIÇÕES DE ONDE FICOU SUA CITY E DAR "CTRL+G" PARA IR ATÉ LÁ!






    6º BEM AGORA É SO IR EM FILE>>SAVE, OU DAR UM CTRL+S PARA SALVAR.



    ATENÇÃO: SE SEU MAPA NAO FOR DA MESMA VERSÃO DO QUAL VOCê IRA IMPORTAR VOCÊ OCASIONALMENTE NÃO CONSEGUIRÁ IMPORTAR O MAPA POR ISSO ATUALIZIO ANTES!
  16. Gostei
    FusionOT deu reputação a Ryzor em Lista de Tutoriais Recomendados   
    Lista dos melhores tutoriais, selecionados e classificados por nivel de conhecimento necessár io , a lista não precisa ser seguida necessariamente na ordem que se encontra, este tópico apenas contém um apoio ao estudo.
    Lembrando , não reviva os tópicos aqui listados com agradecimentos ou comentários desnecessários , salvo os casos onde alguma dúvida não foi sanada (pesquise antes para saber se sua pergunta já não foi respondida) e for relevante ao assunto tratado no tópico !
    As estrelas representam o nível de recomendação tendo como base o conteúdo tratado em cada tutorial e não o nível de qualidade.





    Matematica

    Afinal, quem deseja programar (independente da linguagem) precisa saber e gostar (pelo menos um pouco) de matematica.

    http://tibiaking.com/forum/topic/19534-caculos-com-porcentagem/
    http://tibiaking.com/forum/topic/19533-math-a-matematica-por-traz-do-script/


    Programação/Scripting Lua

    Programação Lua propriamente dita que pode ser aplicada fora ou em um OTServer.


    • Dicas e/ou Técnicas de Programação

    Algumas dicas que podem ou não ajudar sua produtividade e/ou economizar tempo.

    http://tibiaking.com/forum/topic/18735-automatizacao-e-simplificacao-de-scripts/


    http://tibiaking.com/forum/topic/18592-metodologia-de-scripting/


    http://tibiaking.com/forum/topic/19554-did-you-know/

    http://tibiaking.com/forum/topic/18584-matematica-lua/


    http://tibiaking.com/forum/topic/18606-dicas-essenciais-em-lua/


    http://tibiaking.com/forum/topic/19556-boas-praticas-de-programacao/



    http://tibiaking.com/forum/topic/19177-algumas-libs-uteis-em-otserv/


    http://tibiaking.com/forum/topic/19328-conceitos-de-aleatorio/



    http://tibiaking.com/forum/topic/19557-declarando-variaveis-de-forma-simples/



    http://tibiaking.com/forum/topic/19558-scripting-dictionary/




    • Iniciante


    http://tibiaking.com/forum/topic/19560-tutorial-return/


    http://tibiaking.com/forum/topic/19026-conhecendo-o-osdate/


    http://tibiaking.com/forum/topic/19562-nmedio-string-tutorial/


    http://tibiaking.com/forum/topic/19563-criando-funcoes/



    • Intermediario


    http://tibiaking.com/forum/topic/19248-manipulando-arquivos-atraves-de-lua/


    • Avançado


    http://tibiaking.com/forum/topic/18766-poo-em-lua/



    http://tibiaking.com/forum/topic/19565-patterns/


    http://tibiaking.com/forum/topic/19250-metametodos/


    http://tibiaking.com/forum/topic/18784-nvav-usando-luasql/




    ✔ Programação/Scripting Lua direcionado a OTServ

    Parte que visa a programação Lua para OTServ, suas particularidades e funções.



    http://tibiaking.com/forum/topic/19261-entendendo-o-stackpos/


    http://tibiaking.com/forum/topic/19051-informacoes-que-vaija-precisarprecisou/



    • Intermediário

    http://tibiaking.com/forum/topic/19056-talkaction-com-multiplos-parametros/
  17. Gostei
    FusionOT deu reputação a Ryzor em [Action] Surpresinha   
    Distro Usado: TFS 0.36
    Protocolo: 8.6

    Mas creio que funcione em outras versões.

    Entendendo como Funciona.

    exemplo: Voce pega uma pedra qualquer ou outro item vou usar uma pedra para exemplo:

    Eu dou Use witch nesta pedra e ela vira algum item a minha escolha:

    Exemplo eu edito o action para dar uma MPA ou golden legs.

    Ao usar esta pedra ela ira virar algum deste items aleatoriamente porem voce pode adicionar varios items deixando assim mas dificiu de conseguir items boms.

    vamos ao script para entender melhor o que estou falando =P.

    Instalaçao:

    Em actions.xml adicione esta Tag.




    <action itemid="8301" event=script" value="surpresinha.lua"/>Entendendo a Tag:

    -Vermelho: Id do Item que ao dar use ira virar a Surpresa ( 8301 e uma pedra que nao achei drop )
    -Verde: nome do arquivo

    Continuando a Intalaçao:

    Em data/actions/scrips crie um arquivo.lua, nomeio para surpresinha.lua e adicione:




    items = {
    [0] = {id = 7735, count = 1, chance = 2},
    [1] = {id = 7735, count = 1, chance = 5},
    [2] = {id = 7735, count = 1, chance = 10},
    [3] = {id = 7735, count = 1, chance = 15},
    [4] = {id = 7735, count = 1, chance = 30},
    [5] = {id = 7735, count = 1, chance = 100}
    }
    function onUse(cid, item, fromPos, itemEx, toPos)
    for i = 0, #items do
    if (items.chance > math.random(1, 100)) then
    doPlayerAddItem(cid, items.id, items.count)
    doRemoveItem(item.uid, 1)
    return doCreatureSay(cid, 'Wow Você Ganho! Seu Item e '..getItemNameById(items.id)..'!', TALKTYPE_MONSTER)
    end
    end
    doRemoveItem(item.uid, 1)
    return doCreatureSay(cid, 'Não ganhei nada!', TALKTYPE_MONSTER)
    endEntendendo como configurar:

    -Vermelho: Id do item que podemos Ganhar

    -Verde: Quantidade de item que vamos ganha
    -Laranja: Chance de ganhar cada item (de 0.1 a 100) quanto maior a chance mais saira aquele item
    -Roxo: Mensagem quando receber o item
    -Marrom: Mensagem quando não receber nada

    Obs: A chance pode ser 0.1, 0.2... (Apenas UM numero depois do ponto)

    Se quiser adicionar mais itens na lista faça o seguinte:




    items = {
    [0] = {id = 7735, count = 1, chance = 2},
    [1] = {id = 7735, count = 1, chance = 5},
    [2] = {id = 7735, count = 1, chance = 10},
    [3] = {id = 7735, count = 1, chance = 15},
    [4] = {id = 7735, count = 1, chance = 30},
    [4] = {id = 7735, count = 1, chance = 30},
    [5] = {id = 7735, count = 1, chance = 100}
    }Observe que dupliquei a parte laranja, depois faça:




    items = {
    [0] = {id = 7735, count = 1, chance = 2},
    [1] = {id = 7735, count = 1, chance = 5},
    [2] = {id = 7735, count = 1, chance = 10},
    [3] = {id = 7735, count = 1, chance = 15},
    [4] = {id = 7735, count = 1, chance = 30},
    [5] = {id = 7735, count = 1, chance = 30},
    [6] = {id = 7735, count = 1, chance = 100}
    }-Laranja: Parte adicionada
    -Vermelho: Numeros alterados

    Acho que deu pra interder ja ne galera =P.

    Em Uso uma SS o item caiu no chao porque estava sem BP se voce espaço na sua Bag ele ira para dentro dela mesmo voce dando use with no chao =P:




    Creditos:

    Script: Newtonnotwen
    Trazer o script pra voces? GodMarini

  18. Gostei
    FusionOT deu reputação a Ryzor em sistema de refinamento perfeito 2.0   
    Autor : Mock
    Servidor Testado : TFS 0.3.6


    Vamos instalar.
    Adcione essa tag no actions.xml:

    <action itemid="8306" event="script" value="upgrade.lua"/>
    <action itemid="8305" event="script" value="upgrade.lua"/>
    Bom a segunda é um segundo item que tem 100% a mais de chance de acertou, ou seja esse nunca falha, e o normal com nem uma chance adcional é o itemid 8305.
    Agora em upgrade.lua coloque isso:







    Veja ele funcionando:


    E agora com a possibilidade do slot ssystem conjunto com esse sistema vc pode fazer coisas assim:

    Código:
    12:02 You see a knife +1 [hp.+7%] (Atk:8, Def:6).

    Creditos
    Mock ( Por Fazer O Script )
    GodMarini ( Por Trazer Ao TK )
  19. Gostei
    FusionOT deu reputação a Ryzor em Algumas LIBs úteis em OTServ   
    Algumas LIBs úteis em OTServ





    Introdução: Não sou NENHUM expert em lua e estou LONGE de ser. Porém, ontem eu vim procurar algum tutorial que me evidenciasse facilmente o assunto em questão e não encontrei, então resolvi estudar um pouquinho e trazer para vocês

    Fonte: A fonte do meu estudo foi um site muito conhecido por scripters, que é: Lua-Users.org

    Explicações: Optei por incluir nesse tutorial explicações somente das libs que eu achei mais interessantes e que pude ver uma utilidade em OTServ, como Math, Os e Table. Se você acha que faltou algo de interessante ou que alguma explicação pode ser melhorada, por favor, poste construtivamente aqui, quem sabe até eu possa aprender mais


    Da Biblioteca Math...math.abs(v): retorna o valor absoluto de v -- o valor positivo
    math.floor(v): retorna o valor inteiro mais proximo e menor ou igual a v -- arredonda para baixo
    math.ceil(v): retorna o valor inteiro mais proximo e maior ou igual a v -- arredonda para cima
    math.min(a,b,c,d,...): retorna o menor valor do conjunto especificado entre parêntesis (a,b,c,d,....)
    math.max(a,b,c,d,...): retorna o maior valor do conjunto especificado entre parêntesis (a,b,c,d,....)
    math.random(a,b): retorna um valor aleatório entre a e b, incluindo ambos




    Da Biblioteca Os...

    os.date(): retorna uma string no formato MM/DD/YY HH:MM:SS.
    os.date('*t'): retorna uma tabela contendo {hour, min, wday, year, yday, month, sec, day, isdst(true)}
    os.date('!*t'): retorna uma tabela contendo {hour, min, wday, year, yday, month, sec, day, isdst(false)}
    os.time(): retorna o horário do sistema utilizando Unix Timestamp --(Conversor: http://www.unixtimestamp.com/index.php)
    os.difftime(t2, t1): retorna os segundos de diferença entre os tempos t2 e t1





    Da Biblioteca Table...

    table.insert(table, [pos,] v): insere um elemento de valor v na tabela table na posição pos. --NOTA: Se não for especificada a pos, o elemento será inserido no fim da tabela.
    table.remove(table [, pos]): remove o elemento da tabela table que está indicado pelo índice pos. NOTA: Se não for especificada a pos, removerá o último elemento da tabela.
    table.concat(table [, sep [, i [, j]]]): Concatena (une) os elementos da tabela table a fim de formar uma string. --NOTA: sep é o elemento separador e i e j são os índices de começo e fim, respectivamente, dos elementos que serão concatenados.
    table.sort(table [, comp]): reordena os elementos da tabela table segundo as especificações de comp. --NOTA: O padrão é: function(a,b) return a<b end, ou seja, reordernação ascendente.





    Da Biblioteca String...

    string.lower(s) ou s:lower(): Retorna a string s após fazer com que todos seus caracteres maiúsculos se tornem minúsculos. --Tudo minúsculo, oposto de string:upper
    string.upper(s) ou s:upper(): Retorna a string s após fazer com que todos seus caracteres minúsculos se tornem maiúsculos. --Tudo maiúsculo, oposto de string:lower
    string.gsub(s, pattern, replace [, n]) ou s:gsub(pattern, replace [,n]): Retorna o texto s após substituir os caracteres pattern do texto pelos caracteres definidos em replace, sendo n o limite de subtituições, que caso não seja definido, é ilimitado.
    string.len(s) ou s:len(): Retorna a quantidade de caracteres da string s.
    string.reverse(s) ou s:reverse(): Retorna a string s reordenada de forma contrária.
    string.rep(s, n) s:rep(n): Gera uma string que são n cópias da string s concatenadas.





    Outras bibliotecas...

    tonumber(a): Converte a string a para números.

    OBS: OBRIGATÓRIO DEFINIR // NÃO-OBRIGATÓRIO DEFINIR

    Considerações Finais: Esse tutorial foi feito para dar uma noção do quão úteis podem ser essas libs. Quem já tem essa noção e já sabe trabalhar acha um tutorial desse desnecessário, mas assim como eu, muitos não sabem que podem ter grande utilidade.

    Dica: Sempre que estiverem a fim, deem uma olhada no Lua-Users.org, site citado no início do tutorial, na parte Fonte. Há muitas coisas legais lá, e se cresce bastante estudando assim, apesar de o site estar em inglês.

    Até a próxima!



    Creditos : Guiminhah
  20. Gostei
    FusionOT deu reputação a Ryzor em [Básico] Formato De Montanhas   
    Olá pessoal do Tibia King , nosso tutorial de hoje será como formatar a montanha , ou seja deixá-la de uma formato agradável , não muito quadrado .

    Primeiramente começamos a fazer a base com os seguintes ids :


    Id's : 877--873--874






    Viram a diferença entre a 1° e a 2° imagem ?
    Agora temos que colocar as bordas.

    Oque séria bordas?
    Efeito de borda é uma alteração na estrutura, na composição e/ou na abundância relativa de espécies na parte marginal de um fragmento. Tal efeito seria mais intenso em fragmentos pequenos e isolados.

    Fonte : Wikipedia





    Id's : 4474~4468

    O legal , é deixar algumas partes sem bordas , para dar um clima de que a montanha ainda está em formação.

    Ou seja , dar um efeito de que ela está em crescimento , podendo aumentar bruscamente de tamanha ou desmoronar.


    Viram ? já ta ficando legal , agora para preencher o preto devemos usar o Id: (919)

    Ficando Assim:




    Caso você queira fazer nature , ou algo do gênero , faça a escada , olha na seção
    Ideias de Mapping
    , lá tem várias ideias que poderam ser usadas(Não se esqueça se você usar ideia do postador dê rep+)

    Hora de fazer a nossa nature

    Para se Fazer a nature , aconselho usar as bordas de montanha Fina
    Motivo : o Relevo fica mais agradável do que a borda de montanha Grossa

    O Legal da nature é que você pode ver alguns show off e ter uma inspiração

    Por Exemplo fazer uma cachoeira no meio da montanha
    Tipo Essa Aqui






    Começe Colocando small rocks , depois adicione grass tufts
    Cuidado para não por grass tufts em cima das small rocks.
    Coloque tufos de gramas , small rock , blueberry bush , tree etc.

    Small Rock : 3623--3608
    Tufos de Grama : 6219--6216
    Árvores : 2708--2700
    Blueberry Bush : 2785--2786--2768
    Depois de adicionar a nature , se quiser , use árvores grande , se não souber fazer , aconselho ler o tutorial de arvores grandes do Left4Dead.

    Adicione Flowery Wall
    Id's : 8014




  21. Gostei
    FusionOT deu reputação a Ryzor em Scripting Dictionary   
    Scripting Dictionary

    Antes de tudo
    Olá comunidade Tibia King. Venho através desse tutorial facilitar a vida de muitos scripters.
    Trago a vocês o Scripting Dictionary. Uma forma mais simples de entender aquelas siglas ou palavrinhas chatas encontradas em todos os scripts e que poucas pessoas sabem o significado ou o motivo de estar ali.
    Vocês também podem ajudar a aumentar o conteúdo desse dicionário enviando-me as palavras que vocês gostariam de serem adicionadas. Para isso, poste nesse mesmo tópico.
    Estou disposto a atualizar sempre que for preciso o tópico, mas, caso algum imprevisto aconteça, a moderação está liberada para editar, adicionando dicas e palavras, sempre seguindo o mesmo padrão de postagem, enfatizando as palavras. Assim teremos uma melhor organização.
    Por fim, gostaria que todos os scripters, experientes ou não, e principalmente os que estão iniciando sua possível carreira na área, dentro da comunidade TK, lessem e corrigissem, se necessário.





    Começando


    array
    Array é uma variável onde há dois ou mais valores. É conhecido como vetor ou lista. Dependendo do caso, também pode ser conhecida como matriz. Cada valor dentro da array tem sua posição que é dada por um índice e que, geralmente, segue uma sequência de números inteiros. Pode ser local ou global.
    Exemplo: local arr = {1, 2, "valor 3", 503, variavelTeste}

    cid
    Normalmente uma variável onde é atribuida a identificação da criatura que, em muitos casos, está executando o script. A sigla cid vem do inglês Creature Identification.
    Exemplo: if isPlayer(cid) == TRUE then

    concatenação
    Éo ato de juntar uma ou mais strings. Em Lua, a concatenação é feita com o simbolo Ponto-Ponto (..)
    Exemplo: print("Skyen".."_".."Hasus")
    A saída gerada por esse comando seria: Skyen_Hasus.

    do
    1. Normalmente usada no começo de funções que exercem alguma ação. Pode ser usada separada (sozinha) ou em alguma condição (ex. if). Tem sua tradução mais próxima da palavra fazer.
    2. É utilizado em conjunto com o FOR, tendo de estar, obrigatoriamente, no final da linha em que há o loop for.
    Exemplo: doSendMagicEffect(pos, effect)
    Exemplo: for i =1, 10 do

    else
    É utilizado em condições. Caso todas as outras não sejam verdadeiras, o else será executado. É sempre usado sozinho e pode ser entendido como "Se não:". É utilizado em conjunto do if.
    Exemplo:

    if 1 > 2 then
    else
    -- script
    end[/code] [b]elseif[/b]
    Assim como o else, é utilizado em conjunto do if e serve para verificar se há outra possível condição. Pode ser entendido como "Ou se:".
    Exemplo:

    [code=lua]
    if 1 > 2 then
    elseif 1 < 2 then
    --script
    end end
    End é utilizado para fechar todas as condições, inclusive o loop for. Significa FIM. Tudo o que abre (if e for) deve ser fechado com um end.
    Exemplo:

    if 1 > 2 then
    else
    -- script
    end[/code] [b]get[/b]
    É muito encontrada em funções, onde sempre é retornado um valor, nulo ou não. Get, em inglês, no nosso caso, tem a tradução mais próxima de obter. As funções que começam com get, nunca estarão sozinhas, e sim, dando valor a alguma variável ou comparado a algo.
    Exemplo: local level = getPlayerLevel(cid)

    [b]if[/b]
    Obrigatoriamente deve ter em um script. Claro, há excessões, sempre há excessões. Serve para impor uma condição. Essa condição pode ser verdadeira ou falsa. Caso seje verdadeira, a continuação do script continuará até encontrar um END, caso contrário, verificará os elseifs e se não for verdadeiro com nenhum, havendo um else, será executado o código a partir dele.
    A palavra if é proveniente do inglês e significa SE.
    Exemplo: if level >= 30 then -- (Se level maior ou igual a 30, então)

    [b]is[/b]
    Is, no começo de funções, é para fazer uma verificação. Sempre é usada em alguma condição e tem seu significado mais próximo da palavra é.
    Exemplo: if isPlayer(cid) == TRUE then

    [b]loop[/b]
    Loop é o nome dado a função que é executada várias vezes até que haja a condição para que ele pare. O mais utilizado é o for, mas também, na linguagem LUA temos o while e repeat.
    Exemplo: for i = 1, 10 do

    [b]parâmetros[/b]
    Parâmetros de uma função são todas as variáveis que se encontram entre os parênteses.
    Exemplo: doRemoveItem(uid) -- uid é o parâmetro da função doRemoveItem

    [b]syntax sugars[/b]
    São as facilidades que a linguagem de programação permite ao programador.
    Exemplo 1:
    [code=lua]
    var = "Skyen Hasus"
    print(string.upper(var)) -- Normal
    print(var:upper()) -- Syntax Sugar
    Ambas as saídas geradas seriam: SKYEN HASUS.

    Exemplo 2:

    teste = function(s) -- Normal
    end
    function teste(s) -- Syntax Sugar
    end[/code] Apesar de parecerem legais, evite usar Syntax Sugars quando desnecessário, pois podem causar problemas se usadas incorretamente.


    [b]set[/b]
    Palavra utilizada no começo de nomes de funções que estabelecem valor de algo. É muito utilizado por iniciantes apenas para quests, mas tem muito mais importância que isso. No português, tem o significado mais próximo de estabelecer. [color=DarkRed](conteúdo a ser ampliado)[/color]
    Exemplo: setPlayerStorageValue(cid, 3001, 1)

    [b]string[/b]
    Corresponde a um texto, as strings sempre são entre aspas.
    Exemplos: "string" ou 'string'
    Note que há dois tipos de aspas, as duas são válidas.

    [b]then[/b]
    Utilizado em conjunto do if ou do elseif. Pode ser entendido como ENTÃO. Sempre será encontrado no fim da linha em que haja as condições citadas.
    Exemplo: if getPlayerStorageValue(cid, 3001) > 0 then

    [b]variáveis[/b]
    Variáveis são valores reservados na memória ram do computador para serem utilizados durante o script. Pode-se entender por variável, quando é encontrado a palavra var ou variable (em inglês). Variáveis podem ser locais ou globais, nesse último caso, tendo uso em mais de uma função.
    Exemplo: local level = getPlayerLevel(cid)
    Exemplo: global estatistica = estatistica + 1


    [b]Você também pode ajudar[/b]
    Perguntando o que você não entendeu é uma forma de ajudar. Poste suas dúvidas aqui, não tenha vergonha.
    Outro modo de ajudar, é postando mensagem com as palavras que você não sabe o significado ou sabe e não está aqui.
    Quero deixar claro que eu não sou expert e não saberei tudo. Pesquisarei e tentarei deixar o mais claro possível todo o conteúdo aqui contido.
    Eu gostaria que esse dicionário funcionasse como a wikipedia, onde todos podem editar e corrigir. Mas como não há a possibilidade de todos editarem, postem.

    Se você editou algo, ponha seu nome.
    Se você postar conteúdo a ser adicionado, seu nome irá ser posto aqui.

    [b]Atualizações[/b]
    05.08.2009 - Adicionado as palavras array, loop e set.
    06.08.2009 - Adicionado as palavras if, else, elseif, end, string (Nord) e then.
    06.08.2009 - Atualizado a palavra do.
    09.08.2009 - Adicionado as palavras concatenação e syntax sugars. (Skyen Hasus)
    18.08.2009 - Atualizado a palavra end. (marcryzius)


    Creditos

    Pivizz
  22. Gostei
    FusionOT deu reputação a Ryzor em [Talkcations] Sistema-Guild-Fairy-Tail   
    [sistema] Guild Fairy Tail

    Sintaxe: minha_funcao(pos, item, itemtr)
    Descrição: Função que faz você pegar certo level ser mandado ao Rei, Escolher Sua Guilda.
    Requerimentos: MySQL / Lua 5.1+


    Primeiramente Vou me apresentar, GodMarini. Velho aqui, mais novo em postagens, vim trazer um script feito por min.

    Vai em data/creaturescripts e poe :


    Código:
     
    <event type="combat" name="attacknacao" script="attacknacao.lua"/> <event type="look" name="Look" event="script" value="look.lua"/> Vai em data/creaturescripts/scripts Crie uma .lua com nome attacknacao.lua e poe :


    Código:

    --script by Muliouch
    function onCombat(cid, target)
    local creatureSkull = getCreatureSkullType(cid)


     
    if isPlayer(target) and getPlayerReino(cid) ~= tostring("0") and getPlayerReino(target) ~= tostring("0") then if isPlayer(target) and getPlayerReino(cid) == getPlayerReino(target) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não pode atacar jogadores da mesma Guilda.") doCreatureSetSkullType(cid, creatureSkull) return false end end return true end

    Vai em data/creaturescripts/scripts Crie uma .lua com nome loguin.lua e poe :


    Código:
     
    registerCreatureEvent(cid, "Look") registerCreatureEvent(cid, "attacknacao") Vai em data/creaturescripts/scripts Crie uma .lua com nome look.lua e poe :


    Código:

    --Script feito por Muliouch
    function onLook(cid, thing)


    pid = thing.uid
    local access = {[1] = {[0] = 'has no vocation',
    [1] = 'a Sorcerer',
    [2] = 'a Druid',
    [3] = 'a Paladin',
    [4] = 'a Knight',
    [5] = 'a Magician',
    [6] = 'a Warlock',
    [7] = 'a Templar',
    [8] = 'a Healer',
    [9] = 'a Assassin',
    [10] = 'a Archer',
    [11] = 'a Lord Knight',
    [12] = 'a Defender',},
    [2] = {'a Tutor'},
    [3] = {'a Senior Tutor'},
    [4] = {'a Gamemaster'},
    [5] = {'a GOD'},}


    local art = {
    [0] = 'She',
    [1] = 'He',
    }

     
    if isPlayer(pid) then local nacao = getPlayerAccess(pid) > 2 and '' or ' Nação '.. getPlayerReino(pid) ..'' local guild = (getPlayerGuildName(pid)~='' and " ".. art[getPlayerSex(pid)] .." is ".. getPlayerGuildRank(pid) .." of the ".. getPlayerGuildName(pid) .."" .. (getPlayerGuildNick(pid)~='' and ' ('.. getPlayerGuildNick(pid) ..').' or '.') or '') local guild1 = (getPlayerGuildName(pid)~='' and " You are ".. getPlayerGuildRank(pid) .." of the ".. getPlayerGuildName(pid) .."" .. (getPlayerGuildNick(pid)~='' and ' ('.. getPlayerGuildNick(pid) ..').' or '.') or '') local voc = getPlayerAccess(pid) > 2 and access[getPlayerAccess(pid)][1] or access[1][getPlayerVocation(pid)] local level = getPlayerAccess(pid) > 2 and '.' or ' (Level '.. getPlayerLevel(pid) ..').' local msg = ('You see '.. getPlayerName(pid) ..''.. level .. ' '.. art[getPlayerSex(pid)] ..' is '.. voc ..'.'..nacao)..guild local msg1 = ('You see yourself. You are '.. voc ..'.'..nacao)..guild1 if getPlayerName(pid) == getPlayerName(cid) then if getPlayerAccess(cid) > 2 then if getPlayerStorageValue(cid, 1078) == 1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg1) else return true end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg1) end else if getPlayerAccess(cid) > 2 then if getPlayerStorageValue(cid, 1078) == 1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg) else return true end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, msg) end end elseif not isPlayer(pid) then return true end end Verde: As Vocations Vai De Acordo Com o Serv
    Vai em data/lib crie um .lua. nacao.lua :


    Código:
     
    --Script feito por Muliouch local nacao = { [1] = "Fairy Tail", [2] = "Phantom Lord", [3] = "Blue Pegasus", [4] = "Lamia Scale", [5] = "Cait Shelte" } function reinoSetTable() local i = db.executeQuery("ALTER TABLE `players` ADD `reino` VARCHAR(50) NOT NULL DEFAULT '0' AFTER `name`;") return i end function setPlayerReino(cid, new) dofile("config.lua") db.executeQuery("UPDATE `"..sqlDatabase.."`.`players` SET `reino` = '".. nacao[new].."' WHERE `name` = '".. getPlayerName(cid).."';") return true end function getPlayerReino(cid) local get = db.getResult("SELECT `reino` FROM `players` WHERE `name` = '".. getPlayerName(cid).."';") local j = get:getDataString('reino') return j end function haveReino(cid) if type(getPlayerReino(cid)) == 'string' then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Nação: ".. getPlayerReino(cid).."") end end Vai em data/talkactions/scripts e crie um .lua reino.lua :


    Código:
     
    --script feito por GustavoMassa e adaptado por Muliouch function onSay(cid, words, param) local c = { levelmin = 20, reipos = {x = 851, y = 1687, z = 7}, <----------------- x,y,z, as coordenadas do Castelo do NPC do Rei no MAP. reino1pos = {x = 99, y = 99, z = 7}, <----------------- x,y,z, as coordenadas do reino da "Fairy Tail", aonde so os players da Fairy Tail podem ir. reino2pos = {x = 99, y = 99, z = 7}, <-----------------x,y,z, as coordenadas do reino da "Phantom Lord", aonde so os players da Phantom Lord podem ir. reino3pos = {x = 99, y = 99, z = 7}, <-----------------x,y,z, as coordenadas do reino da "Blue Pegasus", aonde so os players da Blue Pegasus podem ir. reino4pos = {x = 99, y = 99, z = 7}, <-----------------x,y,z, as coordenadas do reino da "Lamia Scale", aonde so os players da Lamia Scale podem ir. reino5pos = {x = 99, y = 99, z = 7} <-----------------x,y,z, as coordenadas do reino da "Cait Shelte", aonde so os players da Cait Shelte podem ir. } if isPlayerPzLocked(cid) then doPlayerSendCancel(cid, "You cannot use this command during battle.") return true end if param == '' then if getPlayerLevel(cid) < c.levelmin then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Desculpe, você precisa alcançar o lvl 20 para poder ir ate o Rei.") return false elseif getPlayerLevel(cid) > c.levelmin and getPlayerReino(cid) == tostring("0") then doTeleportThing(cid,c.reipos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Agora vá falar com o Rei e escolher sua Nação!") return true elseif getPlayerLevel(cid) > c.levelmin and getPlayerReino(cid) == tostring("Fairy Tail") then doTeleportThing(cid,c.reino1pos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Bem-Vindo "..getPlayerName(cid).." a Guilda Fairy Tail.") return true elseif getPlayerLevel(cid) > c.levelmin and getPlayerReino(cid) == tostring("Phantom Lord") then doTeleportThing(cid,c.reino2pos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Bem-Vindo "..getPlayerName(cid).." a Guild Phantom Lord.") return true elseif getPlayerLevel(cid) > c.levelmin and getPlayerReino(cid) == tostring("Blue Pegasus") then doTeleportThing(cid,c.reino3pos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Bem-Vindo "..getPlayerName(cid).." a Guilda Blue Pegasus.") return true elseif getPlayerLevel(cid) > c.levelmin and getPlayerReino(cid) == tostring("Lamia Scale") then doTeleportThing(cid,c.reino4pos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Bem-Vindo "..getPlayerName(cid).." a Guilda Lamia Scale.") return true elseif getPlayerLevel(cid) > c.levelmin and getPlayerReino(cid) == tostring("Cait Shelte") then doTeleportThing(cid,c.reino5pos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Bem-Vindo "..getPlayerName(cid).." a Guilda Cait Shelte.") return true end end return true end

    Código:
    Vai em data/npc e crie um npc chamado rei :

     
    <?xml version="1.0" encoding="UTF-8"?> <npc name="Rei" script="rei.lua" walkinterval="0" floorchange="0"> <health now="9999" max="9999"/> <look type="325" head="95" body="94" legs="60" feet="113" addons="3"/> <parameters> <parameter key="message_greet" value="Bem-Vindo ao meu Castelo |PLAYERNAME|."/> </parameters> </npc>
    Vai em data/talkactions e poe :


    Código:

    <talkaction words="/reino" event="script" value="nacao/nacao.lua"/>



    Vai em data/npc e crie um .lua rei :


    Código:

     
    local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler)
     
    function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end  
    function oracle(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end  
    local reinoNode = node:getParent() local reino = reinoNode:getParameters().new if getPlayerReino(cid) == tostring("0") then setPlayerReino(cid, reino) selfSay('Agora você pertence ao Reino {'..getPlayerReino(cid)..'}.',cid) elseif getPlayerReino(cid) ~= tostring("0") then selfSay('Você já pertence ao Reino {'..getPlayerReino(cid)..'}.',cid) npcHandler:resetNpc() end return true end
     
    function greetCallback(cid) if(getPlayerLevel(cid) < 20) then selfSay('Volte quando alcançar o Nível 20.',cid) npcHandler:resetNpc() else return true end end npcHandler:setCallback(CALLBACK_GREET, greetCallback) npcHandler:setMessage(MESSAGE_GREET, '|PLAYERNAME| está preparado para escolher seu reino?')  
    local yesNode = KeywordNode:new({'sim' or 'sím'}, oracle) local noNode = KeywordNode:new({'nao' or 'não'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, moveup = 1, text = 'Então, que Reino ira escolher?'})
     
    local node1 = keywordHandler:addKeyword({'sim' or 'sím'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Você quer se juntar aa guilda {Fairy Tail}, a guilda {Phantom Lord}, a guilda {Blue Pegasus}, a guilda {Lamia Scale}, a guilda {Cait Shelt}?'}) local node2 = node1:addChildKeyword({'Fairy Tail'}, StdModule.say, {npcHandler = npcHandler, new = 1, onlyFocus = true, text = 'Então, vai se juntar a Guilda {Fairy Tail}? A decisão é irreversível!'}) node2:addChildKeywordNode(yesNode) node2:addChildKeywordNode(noNode) node2 = node1:addChildKeyword({'Phantom Lord'}, StdModule.say, {npcHandler = npcHandler, new = 2, onlyFocus = true, text = 'Então, vai se juntar a Guilda {Phantom Lord}? A decisão é irreversível!'}) node2:addChildKeywordNode(yesNode) node2:addChildKeywordNode(noNode) node2 = node1:addChildKeyword({'Blue Pegasus'}, StdModule.say, {npcHandler = npcHandler, new = 3, onlyFocus = true, text = 'Então, vai se juntar a Guilda {Blue Pegasus}? A decisão é irreversível!'}) node2:addChildKeywordNode(yesNode) node2:addChildKeywordNode(noNode) node2 = node1:addChildKeyword({'Lamia Scale'}, StdModule.say, {npcHandler = npcHandler, new = 4, onlyFocus = true, text = 'Então, vai se juntar a Guilda {Lamia Scale}? A decisão é irreversível!'}) node2:addChildKeywordNode(yesNode) node2:addChildKeywordNode(noNode) node2 = node1:addChildKeyword({'Cait Shelte'}, StdModule.say, {npcHandler = npcHandler, new = 5, onlyFocus = true, text = 'Então, vai se juntar a Guilda {Cait Shelte}? A decisão é irreversível!'}) node2:addChildKeywordNode(yesNode) node2:addChildKeywordNode(noNode) keywordHandler:addKeyword({'nao' or 'não'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Volte quando estiver pronto.'})
    npcHandler:addModule(FocusModule:new())

     
  23. Gostei
    FusionOT deu reputação a Ryzor em Global Event Boate(Otimizado)   
    Nome: Boite System(Mock)
    Autor: Mock - Remake #GodMarini
    Versão Testada: The forgotten server 0.3.5 PL1 - 8.50


    Em data/globalevents/globalevents.xml coloque esta tag:
    Código PHP:

    <globalevent name="boate" interval="1" script="boate.lua"/>


    Em data/globalevents/scripts crie um arquivo chamado boate.lua e coloque isto em seu conteúdo:





    E agora, como eu configuro?

    Simples, viu aquela parte lá, POSITIONS?


    POSITIONS = {
    [1] = {x=146, y=59, z=8},
    [2] = {x=138, y=61, z=8},
    [3] = {x=142, y=57, z=8},
    }



    Para adicionar mais é só aumentar um dos números entre colchetes, colocar a posição igual tá os outros, e no final colocar uma vírgula.
    Por exemplo:

    Código:
    [4] = {x=1044, y=1023, z=7},E assim vai.

    2 avisos:
    ºOs monstros devem estar PARADOS, ou seja, tranque-os em celas ou ponha pz ao seu redor.

    ºFaça somente se estiver de noite ou for em um sub-solo. Senão a luz será a luz do dia.
  24. Gostei
    FusionOT deu reputação a Ryzor em [Action] Destruir Paredes   
    Olá pessoal eu venho aqui contribuir com algo que creio eu que não á por aqui.
    é o meu primeiro Script (action) que fiz com a intenção de trazer mais RPG a
    servidores.

    Testado em: TFS 0.3.6 (8.60)
    Descrição: O Script funciona da seguinte maneira, o player da use em um Machado e clica na parede, logo
    depois a parede será destruida, a parede quebra em 3 Partes, ou seja tem que usar o machado 3
    vezes na parede.

    Bom vamos ao Script

    1° Primeiramente você tera que ir no RME e colar um UniqueID na parede que será destruída

    Em data/actions/scripts copie um arquivo qualquer e renomeie para destruction.lua






    2° Agora em data/actions/actions.xml adicione:


    Código:
    <action itemid="2391" event="script" value="destruction.lua"/>
    Legenda:
    Verde: ID do item que será usado para destruir a parede, eu uso este:
    Vermelho: São os id das paredes, Ex: parede normal, parede destruida, parede mais destruida.
    Azul: São os id das paredes depois de destruida, Ex: id 3361 vai virar 3399, depois 3399 vai virar 3387 assim por diante



    Vídeo mostrando o Sistema;

    http://youtu.be/-01nLh9L3Bg



    Créditos:
    Bloodwalker ( Por Fazer O Script )
    GodMarini ( Por trazer Ao TK )
  25. Gostei
    FusionOT deu reputação a Ryzor em Automatização e Simplificação de Scripts   
    Automatização e Simplificação de Scripts

    Bem, este é minha segunda "aula", a primeira foi sobre o comando addEvent, esta é um pouco mais complexa, vou demonstrar algumas possibilidades de automatização e simplificação de scripts, algo muito importante pra tornar um script mais simples e prático. Vamos a algumas definições:

    Automação: é um sistema automático de controle pelo qual os mecanismos verificam seu próprio funcionamento, efetuando medições e introduzindo correções, sem a necessidade da interferência do homem.


    Simplificar: tornar menos complicado (fiquei com preguiça de procurar mais).


    Situação 1: Fazendo um cardápio

    Temos um talkaction de fast food e queremos informar ao player quando ele disser !food cardápio todas as opções, elas estão disponiveis em uma tabela :


    local comidas = { ["Meat"] = {50, 1291}, ["Ham"] = {90, 1292}, ["Fish"] = {150, 1293}, ["Dragon Ham"] = {200, 1294} } Neste caso o valor literal é a comida, o primeiro valor numérico o preço e o segundo o id (não são reais). Bem, agora pense assim, cada comida que eu colocar eu vou ter que buscar o id dela ? Chato demais isso, e se eu utilizar uma função que já existe? OMG, SÉRIO? Isso mesmo , getItemIdByName(name), este é o primeiro exemplo de simplificação. print("Atendente: Aqui no Fast Food Delivery, vendemos: Meat por 50 golds, Ham por 90 golds, Fish por 150 golds, Dragom Ham por 200 golds.") OMG, tá pronto =D. Sim, mas e se você quiser mudar algo, vai ter que sempre lembrar de digitar isso? E se você tiver 200 scripts, vai lembrar dos detalhes de todos? Por que não utilizamos o comando for (note que agora, já que há apenas um valor não há a necessidade de uma tabela para os valores e ids separados, o que torna o script mais simples) local comidas = { ["Meat"] = 50, ["Ham"] = 90, ["Fish"] = 150, ["Dragon Ham"] = 200 } local cardapio = "Atendente: Aqui no Fast Food Delivery, vendemos:" for k,v in pairs(comidas) do cardapio = cardapio.." "..k.." ("..v..");" end print(cardapio) Bem, assim fica mais fácil não? Já foi então um exemplo de automatização e um de simplificação. Situação 2: Automatizando um NPC Bem, nós temos um NPC que executa três funções, as falas das três funções são as mesmas, vamos simular intao três funções (para utilizar em apenas lua, sendo assim, será apenas teoria, não tente colocar em seu servidor). Vamos supor que a fala é param e o estado da fala é estado, as três funções são comprar uma casa, um carro ou uma vaca (fiz pouco texto pra cada porque é cansativo): local param = "vaca" local estado = 0 local casa = "" local carro = "" local vaca = "" -- Simulação da casa if estado == 0 and param == "casa" then print("Qual casa deseja comprar?") estado = 1 elseif estado == 1 and param == "da esquina" then print("Tem certeza que deseja comprar a casa Da esquina?") estado = 2 casa = "da esquina" elseif estado == 1 and param == "do meio" then print("Tem certeza que deseja comprar a casa Do meio?") casa = "do meio" estado = 2 elseif estado == 2 and param == "sim" then print("Parabens pela aquisição da casa "..casa".") -- Note aqui uma pequena automação estado = 0 end -- Simulação do carro (copiei da casa e mudei o nome, já estava cansando disso) if estado == 0 and param == "carro" then print("Qual carro deseja comprar?") estado = 3 elseif estado == 3 and param == "ford" then print("Tem certeza que deseja comprar o carro Ford?") estado = 4 carro = "Chevrolet" elseif estado == 3 and param == "Chevrolet" then print("Tem certeza que deseja comprar o carro Chevrolet") -- Não sei escrever Chevrolet O.o carro = "Chevrolet" estado = 4 elseif estado == 4 and param == "sim" then print("Parabens pela aquisição da casa "..carro".") -- Note aqui uma pequena automação estado = 0 end -- Simulação da vaca (OMG, de novo, como é mais fácil automatizar :'() if estado == 0 and param == "vaca" then print("Qual vaca deseja comprar?") estado = 5 elseif estado == 5 and param == "Doida" then print("Tem certeza que deseja comprar a vaca Doida?") estado = 6 carro = "Doida" elseif estado == 5 and param == "Louca" then print("Tem certeza que deseja comprar a vaca Louca?") -- Não sei escrever Chevrolet O.o carro = "Louca" estado = 6 elseif estado == 6 and param == "sim" then print("Parabens pela aquisição da casa "..carro".") -- Note aqui uma pequena automação estado = 0 end Bem, agora faça você mesmo um de arroz, veja como é cansativo. Note que as falas são quase as mesmas, porque não fazer então um padrão e apenas uma tabela com alguns valores para cada um? Existe o Jiddo's NPC System para simplificar isto, mas é apenas um tutorial. function math.multiple(value, param) --> Verification of value and param and return TRUE or FALSE if type(value) == "number" and type(param) == "number" then if value % param == 0 then return TRUE else return FALSE end else return nil end end -- Inserir os objetos à venda seguidos pelos seus preços local venda = { {"Carro", "Chevrolet", 1000, "Ford", 1200}, {"Casa", "Da esquina", 3000, "Do meio", 2000}, {"Vaca", "Louca", 100, "Malhada", 200} } -- Valores padrões local param = "sim" local estado = 2 local objeto = 2 local desejo = 3 local custo = 1000 -- Padrão for all = 1, #venda do if estado == 0 and param == venda[all][1] then estado = 1 desejo = all print("Qual "..param.." deseja comprar?") break elseif estado == 1 and param == venda[desejo][all] and math.multiple(all, 2) == TRUE then estado = 2 objeto = all custo = venda[desejo][objeto + 1] print("Tem certeza que deseja comprar: "..venda[desejo][1].." "..param.." por "..custo.."?") break elseif estado == 2 and param == "sim" then estado = 0 print("Você perdeu "..custo.." de dinheiro.\nParabens pela aquisição de "..venda[desejo][1].." "..venda[desejo][objeto]..".") break end end Bem, ainda dá para implantar um "cardápio" hehe, tente, para praticar. Notem que o que fiz foi apenas avaliação de tabelas hehe, aconselho visitarem o setor de LIBs, sempre há funções legais criadas pos outros usuários. Situação 3: Melhor utilização de "ifs" Imaginem a seguinte situação, você precisa construir uma série de ifs, ond caso um não seja verificar o proximo. Vamos ver um modo: local param = "" if param == 1 then print("yes") end if param == 2 then print("no") end if param == 3 then print("faz") end Meio grande não? Por que não utilizamos o elseif? Podemos economizar end e com isso simplificar o script. Olhem: local param = "" if param == 1 then print("yes") elseif param == 2 then print("no") elseif param == 3 then print("faz") end Mais simples agora hehe. Agora vamos supor que temos uma função com dois parametros, param1 e param2, onde param2 é muito raro de ser diferente de nil. Podemos fazer assim: local param = "" local param2 = "" if param == 1 and param2 ~= nil then print("yes") elseif param == 2 and param2 == 2 then print("no") elseif param == 3 and param2 ~= 6 then print("faz") end Pronto UHUL. Pera aí, porque eu verifico primeiro o param1? Se eu verificar param2 primeiro, como é raro de ser diferente de nil, a opção será eliminada com apenas uma avaliação, logo, mais velocidade =D. Agora imagine a seguinte situação: local param = "" local param2 = "" if param2 ~= nil and param == 1 then print("yes") elseif param2 ~= nil and param == 2 then print("no") elseif param2 ~= nil and param == 3 then print("faz") elseif param2 ~= nil and param == 4 then print("faeez") elseif param2 ~= nil and param == 5 then print("faeeeeez") end Muito simples não é? Tente fazer de um jeito mais simples utilizando apenas if e elseif. Se você pensou como abaixo você acertou , se não, fica pra próxima . if param2 ~= nil then if param == 1 then print("yes") elseif param == 2 then print("no") elseif param == 3 then print("faz") elseif param == 4 then print("faeez") elseif param == 5 then print("faeeeeez") end end Bom, acho que assim é mais fácil escrever e mais fácil modificar . Agora temos a seguinte ocasião, param é uma variável local e caso ela seja 1 deve-se dar print em "yes", caso contrário em "no". Podemos escrever assim: local param = 2 if param == 1 then print("yes") else print("no") end Bacana né, já está bem curto, mas e se fizermos assim: local param = 2 print(param == 1 and "yes" or "no")

    OMG PeJuGe, 2 LINHAS o.O . Mais fácil né. Neste caso é possível economizar ifs e com isso simplificar.

    Bom pessoal, é isso, espero que tenham gostado, claro que há muitas outras formas de aproveitas os comandos, mas já vão algumas


    Creditos :
    Lwkass

Informação Importante

Confirmação de Termo