Ir para conteúdo

bra

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    bra deu reputação a Guilherme em [C++] Color Name [DigiWo]   
    Por: BananaFight > DragonElement
     

    Depois de ver muitos pedidos, Resolvi doar em nome da equipe DigiWo o código que muda a cor do nome dos monstros.

    Este é uma versão 1.0 que não serve mais para o DigiWo por ja termos um sistema mais avançado.
    Instalação
    Creature.cpp procure por
    if(healthPercent > 92) Embaixo você muda para
    if (m_name == "Banana Fight"){             m_informationColor = Color(0xB2, 0x22, 0x22);         }else{             m_informationColor = Color(0x00, 0xBC, 0x00);         } Acho que deu de entender o que tem que fazer,
    Adicionando Nomes
    Isto representa o nome do monstro/player que terá a cor do nome alterada. (Sim, vai ter que cadastrar nome por nome nesse sistema.)
    if (m_name == "Banana Fight") Para adicionar mais nomes é só seguindo a logica
    if (m_name == "Banana Fight"){             m_informationColor = Color(0xB2, 0x22, 0x22);         }else if (m_name == "Demon"){             m_informationColor = Color(0xFF, 0xFF, 0xFF);         }else{             m_informationColor = Color(0x00, 0xBC, 0x00);         } E para colorir o resto das porcentagens a mesma coisa
    else if(healthPercent > 60)     if (m_name == "Banana Fight"){             m_informationColor = Color(0xB2, 0x22, 0x22);         }else{         m_informationColor = Color(0x50, 0xA1, 0x50); } Só recomendo que não mecha no ultimo, pois se não souber mexer pode dar erro.
    else         m_informationColor = Color(0x85, 0x0C, 0x0C); Adicionando Cores
    Isto representa a porcentagem de hp que o player ou monstro vai estar
    m_informationColor = Color(0x00, 0xBC, 0x00); Para mudar a cor você edita aqui :
    Color(0x00, 0xBC, 0x00) As corer funcionam da seguinte maneira (RGB)
    00 BC 00 < Está é uma cor RGB Hexadecimal
    Aqui um link com uma tabela: http://shibolete.tripod.com/RGB.html
    Você tem que pegar a cor hexadecimal e dividir em 3 partes
    #FFFF00 > FF FF 00
    Ai é só você preencher, Color(0xFF, 0xFF, 0x00) com cada letra/numero.
    Exemplo Final
    void Creature::setHealthPercent(uint8 healthPercent)[/center] {     if(healthPercent > 92)         if (m_name == "Banana Fight"){             m_informationColor = Color(0xB2, 0x22, 0x22);         }else{             m_informationColor = Color(0x00, 0xBC, 0x00);         }     else if(healthPercent > 60)         if (m_name == "Banana Fight"){             m_informationColor = Color(0xB2, 0x22, 0x22);         }else{         m_informationColor = Color(0x50, 0xA1, 0x50);         }     else if(healthPercent > 30)         if (m_name == "Banana Fight"){             m_informationColor = Color(0xB2, 0x22, 0x22);         }else{         m_informationColor = Color(0xA1, 0xA1, 0x00);         }     else if(healthPercent > 8)         if (m_name == "Banana Fight"){             m_informationColor = Color(0xB2, 0x22, 0x22);         }else{         m_informationColor = Color(0xBF, 0x0A, 0x0A);         }     else if(healthPercent > 3)         if (m_name == "Banana Fight"){             m_informationColor = Color(0xB2, 0x22, 0x22);         }else{         m_informationColor = Color(0x91, 0x0F, 0x0F);         }     else         m_informationColor = Color(0x85, 0x0C, 0x0C);     m_healthPercent = healthPercent;     callLuaField("onHealthPercentChange", healthPercent);     if(healthPercent <= 0)         onDeath(); }
  2. Gostei
    bra deu reputação a TonyHalk em Pasta Data - Funções Em Lua   
    Parte I – Funções Lua


    irei mostrar como usar e quase todas as funções em lua existentes no otserver, lembrando que esse tutorial foi baseado no The Forgotten Server 0.3.0 Alpha 3. Portanto poderá haver funções aqui que não terá em outros otservers ou será diferente o nome.
    Lembrando que todas as funções existentes aqui poderão ser usadas tanto em actions,npcs,movements,talk actions e spells.
    Dividi as funções em três grandes grupos e subgrupos, os três grandes são funções get(receba), set (insira) e do (faça).

    Use Forgotten Server 3.0 pelo amor de deus, se você não saber usar sql aprende a usar SqlLite nesse link... Se você Aries você não tem honra para mexer aqui

    Funções Get
    São as funções que retornam valores, ou seja, elas fazem checagens. São muitos usadas e uteis. Ela é usada em condicionais (If, while, for) ou inseridas em variaveis. O modo de usa-la depende do tipo de script ou do jeito que você preferir.
    Dividi elas em dois grupos, a get simples e a get com parametros.

    Funções get simples
    São funções simples mesmo basta coloca-las e elas retornarão um valor, pode coloca-las em condicionais ou em variaveis. E todas elas buscam valores em players.
    Os que há creature pode ser usados em monstros (a maioria).
    São elas :

    getPlayerFood(cid) – Verifica quanto de tempo de comida o player possui.
    getCreatureHealth(cid) – Verifica a health atual do player.
    getCreatureMaxHealth(cid) – Verifica a health maxima do player.
    getCreatureMana(cid) – Verifica a mana atual do player.
    getCreatureMaxMana(cid) – Verifica a mana maxima do player.
    getPlayerLevel(cid) – Verifica o level do player.
    getPlayerExperience(cid) – Verifica a experiencia.
    getPlayerMagLevel(cid) – Verifica o magic level.
    getPlayerAccess(cid) – Verifica o nivel de acesso (player,gm,tutor...)
    getPlayerTown(cid) - Verifica o id da cidade natal do player.
    getPlayerVocation(cid) – Verifica a vocação dele.
    getPlayerSoul(cid) – Verifica o soul points.
    getPlayerFreeCap(cid) – Verifica quanto de capacidade atual existe.
    getPlayerLight(cid) - Verifica o tamanho da luz do player.
    getPlayerGuildId(cid) – Verifica o id atual da guild do player.
    getPlayerGuildName(cid) – Verifica o nome da guild.
    getPlayerGuildRank(cid) - Verifica o posto dele na guild.
    getPlayerGuildNick(cid) – Verifica o nick dele na guild. (aquilo escrito no final entre parenteeses).
    getPlayerGuildLevel(cid) – Verifica o nivel da guild.
    getPlayerSex(cid) – Verifica o sexo do player(0-mulher, 1 – homem).
    getPlayerLookDir(cid) – Verifica a direção na qual ele está olhando. (0-norte, 1-leste, 2-sul, 3 -oeste).
    getPlayerGUID(cid) – Verifica o id dele na database.
    getPlayerPromotionLevel(cid) – Verifica o nivel da promoção do player.
    getPlayerGroupId(cid) – Verifica o nivel dele. (igual acesso).
    getPlayerInstantSpellCount(cid) - Verifica quantas spells o player sabe.
    getMonsterTargetList(cid) – Verifica os montros na qual você está atacando.
    getMonsterFriendList(cid) – Verifica os monstros amigo (provavelmente summons).
    getCreatureOutfit(cid) – Verifica o id da roupa do player.
    getCreaturePosition(cid) – Verifica a posição x,y,z do player.
    getCreatureSpeed(cid) – Verifica a velocidade atual do player.
    getCreatureBaseSpeed(cid) – Verifica a velocidade base do player.
    getCreatureName(cid) – Verifica o nome do player.
    getCreatureTarget(cid) – Verifica quem o player está atacando.
    getPlayerPremiumDays(cid) – Verifica quantos dias de premmium account o player possui.
    getPlayerSkullType(cid) – Verifica qual skull o player possui.
    getPlayerBalance(cid) – Verifica o saldo bancario do player.
    getPlayerStamina(cid) – Verifica o tempo de stamina.
    getPlayerNoMove(cid) – Verifica se ele pode se mover.
    getPlayerExtraExpRate(cid) – Verifica a taxa de experiencia extra (a confirmar).
    getPlayerPartner(cid) – Se o player está em parte ou não.
    getPlayerParty(cid) – Verifica informações da party do player.
    getPartyMembers(lid) – Verifica os membros da party segundo o id da função acima.
    getCreatureMaster(cid) – Verifica a criatura mestre (a que sumona).
    getCreatureSummons(cid) – Verifica os summons da criatura.


    A sintaxe dessas funções é essa :
    Exemplo :

    if getCreatureMana(cid) == 20 then

    Ou

    mana = getCreatureMana(cid)
    if mana == 20 then


    Funções get com parametros.

    Essas funções fazem o mesmo papel da outra get simples, porém elas tem certos parametros pois normalmente elas checam coisas a mais, e algumas checam objetos e não só valores do player.
    Lembrando que se for comparar itens que são com nomes (exemplo : getItemNameById(2195) == 'boots of haste' then) deve se colocar entre aspas pois é uma função string. Numeros não prescisam estar dentro de aspas.
    São elas :


    getPlayerSkill(cid, skillid) - checa o skill especificado do player (0- fist,1-club, 2-sword, 3-axe, 4-distance, 5 -shield, 6 – fishing).
    getPlayerItemCount(cid,itemid) - checa a quantidade de item agrupaveis.
    getPlayerSlotItem(cid, slot) - Checa que item tem no slot do player (1-cabeca, 2- amuleto, 3- backpack, 4-armadura, 5-mao direita, 6-mao esquerda, 7-pernas, 8- botas, 9-anel, 10 slot da torcha).
    getPlayerWeapon(cid, <optional> ignoreAmmo) - Checa que arma o player esta usando. (o outro paramentro ainda n usei).
    getPlayerItemById(cid, deepSearch, itemId, <optional> subType) - Procura o item especifica no item, pode colocar o subtipo (viais por exemplo).
    getPlayerDepotItems(cid, depotid) - Ve quantos itens tem no depot da cidade (Por id de cidade).
    getPlayerFlagValue(cid, flag) - Ve as flag dos players (Apenas em TFS e nunca usei).
    getPlayerCustomFlagValue(cid, flag) - Verifica o valor da flag.
    getPlayerLearnedInstantSpell(cid, name) - Verifica se o player sabe a magia.
    getPlayerInstantSpellInfo(cid, index) - Desconheço
    getInstantSpellInfoByName(cid, name) - Verifica valores da magia
    getInstantSpellWords(name) - Retorna a palavra magica da magia.
    getPlayerStorageValue(uid, valueid) - Verifica o valor do storage do player
    getCreatureByName(name) - Retorna o nome da criatura.
    getPlayerGUIDByName(name) - Verifica o numero da tabela sql do player.
    getPlayerNameByGUID(guid) - Verifica o nome do jogador pelo numero da tabela sql
    getContainerSize(uid) - Verifica quantos slots tem o container.
    getContainerCap(uid) - Verifica quanto pesa o container.
    getContainerItem(uid, slot) - Verifica se há um container no slot especificado.
    getDepotId(uid) - - Verifica o id da cidade do depot.
    getItemDescriptionsById(itemid) - Pega a descrição do item pelo id.
    getItemNameById(itemid) - - Pega o nome do item pelo id.
    getItemPluralNameById(itemid) - Pega o nome em plural do item pelo id.(apenas itens agrupaveis).
    getItemIdArticleById(itemid) - Retorna um valor pelo id. Desconheço essa função
    getItemWeightById(itemid, count, <optional: default: 1> precise) - -Pega o peso do item por id.
    getItemDescriptions(uid) - - Pega a descrição do item por uid. (por exemplo se ele é item ou item2 em actions).
    getItemName(uid) - - Pega a descrição do item por uid.
    getItemAttack(uid) - Pega o ataque do item por uid.
    getItemPluralName(uid) - Pega o nome em plural por uid.
    getItemExtraAttack(uid) - Modifica o ataque extra da arma (Acho que deve ser ataque elemental ou defesa de armor).
    getItemIdArticle(uid) - - Desconheço.
    getItemDefense(uid) - - Pega a defesa do item por uid.
    getItemExtraDefense(uid) - - Pega a defesa extra (armor) por uid.
    getItemArmor(uid) - - Pega o valor de armour por uid.
    getItemAttackSpeed(uid) - - Pega a velocidade de ataque por uid.
    getItemHitChance(uid) - - Pega a chanche de dano do item por uid.
    getItemIdByName(name) - - Retorna o id do item pelo nome.
    getPromotedVocation(vocation) - - Verifica qual o nome da vocação promocional da vocação(Sorcerer = Master Sorcerer).
    getPlayerBlessing(cid, blessing) - - Verifica qual nivel de benção o player tem (1 = 1, 2 =2...).
    getTemplePositionByName(townName) - - Verifica as coordenadas do templo pelo nome da cidade.
    getTemplePositionById(townId) - - Verifica as coordenadas do templo pelo id da cidade.





    Funções Set
    São poucas funções. Elas inserem valores ou seja inserem novos valores, inutilizando os antigos. Deve se usa-las dentro de condicionais.
    Exemplo :

    Quote

    if getItemNameById(item.uid) == 'boots of haste' then
    setItemArmor(item.uid, 5)
    end

    No caso se o item se chamar boots of haste, o script coloca arm 5 nela.

    São elas :

    setItemAttack(uid, attack) - Modifica o ataque da arma
    setPlayerStamina(cid, minutes) - Adicione tempo em stamina.
    setPlayerExtraExpRate(cid, value) - Modifica mais taxa de experiencia
    setPlayerPartner(cid, guid) - Desconheço
    setItemPluralName(uid) - Modifica ou adiciona o nome do item no plural.
    setItemName(uid) - Muda o nome do item.
    setItemIdArticle(uid) - Modifica o article no item (sei la q merda é essa)
    setItemExtraAttack(uid, extraattack) - Adiciona ataque extra na arma.
    setItemDefense(uid, defense) - Modifica defesa no item
    setItemExtraDefense(uid, extradefense) - Modifica aquela defesa extra na arma
    setItemArmor(uid, armor) - Modifica a armor do item
    setItemAttackSpeed(uid, attackspeed) - Muda a velocidade de ataque do item
    setItemHitChance(uid, hitChance) - Modifica a taxa de dano do item
    setGlobalStorageValue(valueid, newvalue) - Adiciona um valor global (Muito util para scripts avançados)
    setHouseOwner(houseid, ownerGUID) - Muda o dono da casa
    setWorldType(type) - Muda o estilo do mundo para PvP, Non Pvp e Pvp Enforced




    Funções do
    Funções que fazer algo, normalmente modificam , porem ao contrario do set algumas apenas adiciona valores. São usadas dentro de condicionais.
    A sintaxe dela é :
    if item.itemid == 2195 then
    doCreatureAddHealth(cid, -1000)
    end

    No caso se o item usado no script for 2195, ele remove 1000 de hp.

    São elas :
    doPlayerLearnInstantSpell(cid, name) - Faz o player aprende a magia pelo nome dela.
    doRemoveItem(uid, quantidade) - Remove o item do player.
    doPlayerFeed(cid, food) - Adiciona "comida" ao player.
    doPlayerSendCancel(cid, text) - Manda aquela mensagem branca no rodape da tela.
    doPlayerSendDefaultCancel(cid, ReturnValue) - Inutil pelo que saiba , pq nunca vi um script com isso e por isso n sei pra q serve.
    doTeleportThing(cid, newpos, <optional> pushmove) - Teleporta o player para uma nova posição.
    doTransformItem(uid, toitemid, <optional> count/subtype) - Transforma o item em outro.
    doCreatureSay(cid, text, type) - - Faz o player falar algo.
    doSendMagicEffect(pos, type[, player]) - Faz algum efeito magico
    doSendDistanceShoot(frompos, topos, type) - Faz algum efeito de distancia
    doChangeTypeItem(uid, newtype) - Muda o tipo dele ou a quantidade de itens agrupaveis.
    doSetItemActionId(uid, actionid) - Adiciona uma nova actionid por uid.
    doSetItemText(uid, text) - - Adiciona um texto ao item.
    doSetItemSpecialDescription(uid, desc) - Coloca a descrição especial no item. (Esse item foi feito especialmente para sei la kem).
    doSendAnimatedText(pos, text, color) - Manda um texto animado (Se vc joga servidor Pvp Enforced sabe qual é).
    doPlayerAddSkillTry(cid, skillid, n) - Adiciona uma tentativa em um skill (Se vc colocar 9999999 ele aumenta apenas 1 skill).
    doCreatureAddHealth(cid, health) - Adiciona life ao player.
    doCreatureAddMana(cid, mana) - Adiciona mana ao player.
    doPlayerSetTown(cid, townid) - Muda a cidade do player.
    doPlayerSetVocation(cid,voc) - Muda a vocação do player ( Não coloque vocação promocional em TFS pq dará erros).
    doPlayerRemoveItem(cid, itemid, count, <optional> subtype) - Remove um item do player.
    doPlayerAddExp(cid, exp) - Adiciona experiencia ao player.
    doPlayerAddOutfit(cid,looktype,addons) - Adiciona addons do outfit ao player.
    doPlayerRemoveOutfit(cid,looktype,addons) - Remove addons do outfit do player.
    doAddContainerItem(uid, itemid, <optional> count/subtype) - Adiciona um container por uid.
    doBroadcastMessage(message, type) - Manda uma mensagem global ao servidor.
    doPlayerBroadcastMessage(cid, message, <optional> type) -
    doPlayerSetSex(cid, newSex) - - Muda o sexo do Player (0- mulher, 1 homem)
    doCreatureChangeOutfit(cid, outfit) - Muda a roupa do player.
    doSetMonsterOutfit(cid, name, time) - Muda a roupa para de um monstro.
    doSetItemOutfit(cid, item, time) - Muda a roupa do player para de um item.
    doSetCreatureOutfit(cid, outfit, time) - Adiciona uma roupa por tempo.
    doPlayerAddMapMark(cid, pos, type, <optional> description) - Adiciona aquelas marcações no mapa do jogador.
    doPlayerAddPremiumDays(cid, days) - Adiciona dias de premmium no jogador
    doPlayerAddManaSpent(cid, mana) - Adiciona % de magic level (Se vc colcoar 99999999 ele aumentará muitos mls...)
    doPlayerAddSoul(cid, soul) - Adiciona soul points ao jogador
    doPlayerAddItem(uid, itemid, <optional> count/subtype, <optional: default: 1> canDropOnMap) - Adiciona itens no player.
    doPlayerAddItemEx(cid, uid, <optional: default: 0> canDropOnMap) - Adiciona um item2 no player (Estranho).
    doPlayerSendTextMessage(cid, MessageClasses, message) - Manda um texto pro player.
    doPlayerAddMoney(cid, money) - Adiciona dinheiro ao player
    doPlayerRemoveMoney(cid, money) - Remove dinheiro do player.
    doPlayerWithdrawMoney(cid, money) - Remove dinheiro do banco
    doPlayerDepositMoney(cid, money) - Adiciona dinheiro ao banco.
    doPlayerTransferMoneyTo(cid, target, money) - Transfere dinheiro do banco.
    doShowTextDialog(cid, itemid, text) - Mostra o texto do item
    doDecayItem(uid) - Decai o item (aprodecer)
    doCreateItem(itemid, type/count, pos) -
    doCreateItemEx(itemid, <optional> count/subtype) - Cria um item2.
    doTileAddItemEx(pos, uid) - Cria um item2 em um tile
    doAddContainerItemEx(uid, virtuid) - Adiciona um item2 no container
    doCreateTeleport(itemid, topos, createpos) - Cria um teleport
    doSummonCreature(name, pos) - Sumona um monstro

    Existem mais comandos porém são rarissimos de ser usados. Por que os cara do TFS criam comandos em Luas para o Gesior e Jiddo se lascarem criando tranqueiras em Lua.


    Stackpos
    Sem duvidas, umas das partes mais chatas de explicar, porém ao aprender é dificil esquecer.
    O stackpos é usado para se mexer em itens empilhados, infelizmente ele se modifica muito então essa tabela mostra os stackpos que não mudam.


    Quote

    0 – ground (chão)
    1- Qualquer objeto acima do chão (se houver chão)
    253 – player ou monstro
    255 – item mais alto de qualquer pilha
    65535 – dentro de um player

    Agora tirando isso os de 2 a 252 sempre mudam (Eu acho que não esqueci os outros que mudam), então vou tentar explicar do jeito que entendi antigamente...
    Se você tem empilhado o chão, uma mesa, e um bag. Os stackpos ficam assim


    Quote

    0 – chão
    1 – mesa
    2 – bag
    Agora se você tem os mesmo itens e em cima da bag uma backpack e um scarab coin.

    Quote

    0-chão
    1-mesa
    2-scarab coin
    3-backpack
    4-bag

    Confundiu ? Sim é normal, se houver três ou mais itens acima do chão, o chão e o objeto acima dele continuam com o mesmo stackpos. Porém depois é contado de cima para baixo.
    Veja esse exemplo :
    stackpos:

    Quote

    0-areia
    1-mesa
    2-backpack
    3-bag
    4-gold coin
    5-rope
    6-shovel
    7-machete
    8-dead human

    Nesse caso a ordem dos itens de baixo para cima é :
    Areia, mesa, dead human, machete, shovel, rope, gold coin.bag e backpack. Entenderam agora ?
    Se não tente fazer uns testes que com certeza entenderá. E depois pelo seu bem, tente não esquecer isso. Pois em movements é importantissimo.



    Bem esse tutorial foi leve e servirá de base para os proximos, pois esses comandos podem ser usados em tudo que há lua.
    Peço desculpas se ele fico confuso
    Pois não estou vagal quanto antes e tenho pouco tempo...
    Esperem que virão mais tutoriais.

    Comentarios é o combustivel. Então deem sugestões, reclamações ou me ofendam sei la.
  3. Curtir
    bra deu reputação a Pokemon X Ice em [Link Quebrado]Base Bolz 2.0 Open Source   
    Servido By Pokemon X Ice
     
    informações:
    versão 2.0:
    Creditos:
     
    Downloads:
     
     
     


  4. Curtir
    bra deu reputação a MaXwEllDeN em Como funcionam os Scripts?   
    Como funcionam os Scripts?




    Você já deve ter se perguntado como os scripts funcionam ou não. Por exemplo: Como o servidor sabe que quando eu apertar com o botão direito em um Health Potion ele terá que healar o player alvo?

    Em primeiro lugar devemos entender o que são callbacks. Do modo mais simples callback é algo que acontece devido a uma reação, é como a Terceira Lei de Newton que diz que toda ação gera uma reação, esse callback é a nossa reção, é uma função que vai ser executada assim que algo acontecer, no caso do Health Potion assim que ele for usado.


    Quando um item é usado ele provoca a chamada de um callback dessa função:


    function onUse(cid, item, fromPosition, itemEx, toPosition) end – Max, que parâmetros são esses? – É simples. O Script do Health Potion ficaria +/- assim: local config = { min_heal = 100, -- Minimo que vai healar max_heal = 200, -- Máximo que vai healar empty = 7636, -- Id do Potion vazio } function onUse(cid, item, fromPosition, itemEx, toPosition) if isCreature(itemEx.uid) then doCreatureSay(cid, "Aaaah...", 19) doSendMagicEffect(toPosition, 12) doCreatureAddHealth(itemEx.uid, math.random(config.min_heal, config.max_heal)) doTransformItem(item.uid, config.empty) else doPlayerSendCancel(cid, "You cannot use this object.") end return true end Bem, esse aí é o script, agora só é você salvar, colocar na sua pasta actions/scripts e pronto! – Max, se existem vários scripts na pasta actions/scripts, como meu OT sabe qual usar? – Por causa das chamadas TAGs. – TAGs? – Sim, é uma linha que é colocada no .xml para dizer ao seu servido que o Callback para um item x será a função daquele script. As Tags das actions seguem esse modelo: <action itemid = "7618" event = "script" value = "HealthPotion.lua" /> Exercício: Crie uma Action que quando eu usar uma Warlord Sword em alguém essa pessoa diga "Aí, isso doi". Poste a TAG também! Resposta SÓ ABRA DEPOIS DE RESOLVER:
    É isso aí pessoal, essa foi a primeira aula de Scriptwriting que eu escreví, espero que gostem :3
  5. Curtir
    bra deu reputação a VictorFT em [Básico] Aprendendo Script   
    ---Tutorial by Leo ---



    Bom galera, venho através desse tutorial tentar ajudar aqueles que querem aprender um pouco mais sobre a área de scripting. Vai ser bem básico, como muita gente tinha me pedido por pm (então resolvi fazer para acabar com o enjoo =P). Acredito que existam muitos tutoriais, alguns bons, outros não, e como vinham me pedindo, ou os tutoriais eram ruins, ou queriam uma visão de outra pessoa (quem sabe com outra pessoa falando, entenda melhor). Diante mão, vou logo dizendo que não me considero um bom scripter ou coisa perto disso até porque estou nisso há menos de 1 mês, mas vou tentar ajudar as pessoas com o pouco que sei.




    Nessa primeira parte, vamos ver os seguintes pontos:




    1. [LÓGICA DE PROGRAMAÇÃO]



    1.1 O que é um algoritmo?



    1.2 Um exemplo de algoritmo.



    1.3 Exercício: Faça seu próprio algoritmo.




    1. Desde que existe o ser humano, existe programação. Quando os homens da pré-história iam caçar, ele se programavam, decidiam quais passos tinham que seguir a fim de alcançar a caça. (hehe) Com o computador não é diferente, você deve dar os passos para que ele possa executar as ações e alcançar o objetivo, que no nosso caso, é o sucesso do script. Isso é a linguagem de programação, é uma linguagem criada para instruir o computador a realizar suas tarefas, e o programador deve seguir uma lógica para colocar cada parte do script no seu devido local, essa é a lógica de programação.




    1.1 Algoritmo é nada mais que uma "receita" que deve ter os passos seguidos pelo computador para realizar uma tarefa. Esses passos não devem deixar o computador com dúvidas, e portanto, devem ser bem definidos e claros.




    1.2 Vamos a um exemplo de um algoritmo. Algoritmo: Preparar um cafezinho




    Geralmente, tomamos um cafezinho logo quando acordamos então a primeira coisa que devemos fazer é:




    Acordar




    Se não tiver água quente então




    Colocar água na panela




    Colocar a panela no fogão




    Ligar o fogão




    Esperar água ferver




    Vejam que se esses passos acima forem seguidos rigorosamente, você vai conseguir por a água para ferver. Continuando...




    Mas se já tiver água quente então




    Botar água na xícara




    Botar duas colheres de açúcar




    Botar uma colher de café em pó




    Mexer




    Tomar




    Dizer: Delíiiciaa =P




    Vejam, que aí estão os passos exatos para preparar um cafezinho. Aliás, mais do que preparar, até tomar o café.




    Como ficou o algoritmo:









    1.3 Faça um algoritmo para: Ir à escola/faculdade (não precisa postar, é só para treinar).




    2. [sCRIPTEANDO]



    2.1 Arquivos de Base



    2.2 Controladores Lógicos



    - Condicionais



    - Operadores de relação



    - Operadores-controladores



    2.3 Variáveis



    2.4 Storage




    Nessa parte, vamos começar a parte de script realmente. Lembrando que existem muitos tutoriais e só esse aqui não é o bastante, até por estar bem básico.




    2.1 Os arquivos que podem dar auxílio na hora de fazer os seus scripts são:




    -- Em data/lib (alguns, global.lua) encontre o arquivo: 000-constant.lua que dá muitas informações sobre o server, como por exemplo, id dos channels, id das skulls, tipos de mensagens, etc.. é bastante útil na construção dos scripts.




    -- Ot script Live by Colex: Programa que facilita bastante pros iniciantes. Ele marca algumas funções em uma cor diferente além de executar o script para ver se há algum erro de escrita. Em alguns fórums tem, é só usar o sistema de busca.




    -- Notepad++: Um editor de texto que também pode ser útil.




    2.2 Os controladores lógicos são aqueles que colocarão em prática a sua lógica de programação. São eles que guiarão os passos que o computador deve seguir.




    --- Condicionais




    Acho que todos sabem o que é um condicional. Como o nome já diz, ele abre uma condição para que algo possa ser feito.




    Exemplo: Caso não chova, irei jogar bola.




    Então, isso é uma condição, a condição de que não esteja chuvendo. Se não chover eu jogo, se chover não jogo.




    Na programação, os principais condicionais são:






    if -- equivale ao se em português. Está presente em todas linguagens de programação. Provavelmente, você já o viu nas aulas de português. Ele abre uma condição. Regra: Todo if tem seu end.






    else -- equivale ao senão. Vai ser executado caso a primeira condição aberta pelo if seja falsa.




    elseif -- equivale a "senão se" ou "mas se". Ele evita a repetição de vários se. Não precisa de end, "utiliza" o end do if.




    Construindo um algoritmo só para exemplificar:









    Pegando o exemplo acima, vamos usar o elseif.









    ---- Operadores de relação




    Os operadores de relação são aqueles que vocês estudam em matemática: igual, maior igual, menor igual...Em lua, é um pouco diferente:




    igual: = menor igual: <=




    maior igual: >= verificação: ==




    Esse de verificação serve para checkar se algo é realmente igual. A diferença dele para o de igual "=" é que o igual serve para atribuir valores.




    Exemplo: se o level do player == 100 então -- verifica se o level do player é realmente 100




    --- Operadores controladores




    Esses operadores são o and e o or que significa basicamente "e" e "ou", respectivamente. O and verifica se todas as condições são verdadeiras para executar algo.




    Exemplo: se o player tem level 100 e o nome dele é Leoking então




    execute script




    fim




    Perceba que só será executado caso a condição de ser lvl 100 e o nome ser Leo sejam respeitadas. No caso do or, é necessário que apenas uma delas seja respeitadas.




    Exemplo: se o player tem level 100 ou o nome dele é Leo então




    execute script




    fim




    Nesse caso, com somente uma condição sendo respeitada, já é o bastante para que o script seja executado.




    2.3 Variáveis: Servem basicamente para guardarem valores.




    Exemplo:










    O script retornará: king -- king é exatamente o valor da variável var.




    2.4 Storage: É simplesmente uma função que vai guardar um valor ou letra, palavra, etc.




    Para dar um storage usamos a função: setPlayerStorageValue(cid, valor, novo valor)




    Exemplo: setPlayerStorageValue(cid, 1234, 1)




    Para verificar se um player tem um storage usamos a função: getPlayerStorageValue(cid, valor)




    Exemplo: getPlayerStorageValue(cid, 1234)




    Essas funções você pode ver naquele arquivo de base: lista de funções em lua




    Agora a última parte desse mini tutorial:




    3. [ACTIONS]



    3.1 Sintaxe das actions



    3.2 Exemplo de actions





    3.1 A sintaxe das actions é: function onUse(cid, item, fromPosition, itemEx, toPosition) mas também podem ser encontradas como fromPos, toPos, isso vai depender de como o scripter queira e como vai usar no script. Usei essa que está em negrito, pois, já é a padrão. Agora a explicação:




    function onUse(cid, item, fromPosition, itemEx, toPosition)




    Primeramente, é bom lembrar que assim como o if, toda função (function) tem seu end.




    Exemplo:









    Explicação da sintaxe:




    onUse = ao Usar (assim que o player use um item)




    cid = creature id -- quem vai usar o item




    item = item que será usado ou item "principal"




    fromPosition = da Posição




    itemEx = item "secundário"




    toPosition = para a Posição




    3.2 Vamos colocar em prática tudo que lemos até agora.




    Nossa action fará:





    [/center] [center]Ao dar use em um item --- para inserir comentários que não alterarão o script, é só colocar -- e escrever[/center] [center]Se o player for level maior ou igual a 100 então[/center] [center]Sumona um monstro em uma posição[/center] [center]Manda uma mensagem para o player[/center] [center]Manda um efeito no player[/center] [center]se não for level 100[/center] [center]Manda uma mensagem para o player[/center] [center]fim do script[/center] [center] [/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx) --- sintaxe das actions[/center] [center]if getPlayerLevel(cid) >= 100 then -- se o level do player é maior igual a 100 então[/center] [center]doSummonCreature("Demon", {x=1, y=1, z=1}) --- sumona um demon na posição determinada. Todo valor que seja uma letra, palavra deve estar entre aspas. A posição, entre chaves.[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.") -- manda uma mensagem do tipo 22 (veja no constant.lua)[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10) -- manda um efeito de id 10 (veja constant.lua) na posição do player[/center] [center]else -- se não[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end -- end do if[/center] [center]end -- end da função[/center] [center] Toda script deve ser registrado em um arquivo.xml, no caso da nossa action,será registrado no actions.xml e como é o item que será usado, usaremos itemid: <action itemid="IDDOITEM" event="script" value="NOMEDOARQUIVO.lua"/> Esse foi nosso script usando quase tudo que explicamos anteriormente. Vamos usar agora storage e variáveis nesse script. Vimos que variáveis podem guardar valores, seja númerico ou não. Então, podemos fazer com que não precisemos editar o monstro, a posição e o level dentro do script. (não vou explicar o que é uma variável local e global, pois é intuitivo -- se tiverem dúvidas procurem em outros tutoriais). Podemos colocar: --- Guardando os valores com variáveis --- local monster = "Demon" -- entre aspas, lembre-se! local pos = {x=1,y=1,z=1} -- entre chaves! local minlevel = 100 -- minimo de level Ok até aqui, então nosso script ficaria: [/center] [center]local monster = "Demon"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Mas, digamos que vou passar esse script para um amigo e ele não sabe nada de editar scripts. Aí você fala, é só colocar o nome do monstro no lugar do Demon. Ele vai e faz: [/center] [center]local monster = "Rotworm" --- olha aqui[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Ou seja, vai sumonar um rotworm mas vai mandar a mensagem: Você sumonou um Demon. Como resolver isso? Existe os strings, (não vou me aprofundar) vou dar um exemplo e mostrar como ficaria. Exemplo: local var = king imprima("Você quis dizer ".. var .."?) Retornaria: Você quis dizer king? Percebam que é só colocar ".. variavel .." . Além de resolver o problema do monster, também poderíamos fazer isso com o level, no nosso script ficaria: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end[/center] [center]end[/center] [center] Sendo assim, seu amigo noob só vai precisar editar na parte de cima do script. Adicionando storage ao script. Nesse caso, faremos com que o item só possa ser usado uma única vez. Para isso, daremos um storage a ele quando o item for usado e verificaremos se o player já tem esse storage para ver se poderá ser usado o item novamente ou não. (Leia a parte de storage) A função que verifica se o player tem storage é : getPlayerStorageValue(cid, value), então: [/center] [center]se o player tiver esse storage menor ou igual a 0 então[/center] [center]execute o script[/center] [center]dê a storage -- para que o player n possa usar novamente[/center] [center]se não --- se ele já não tiver storage menor ou igual a 0, ou seja, ja tiver usado o item[/center] [center]mande msg negando[/center] [center] No script ficaria assim: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerStorageValue(cid, 1234) <= 0 then -- se o storage 1234 for menor ou igual a zero entao[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]setPlayerStorageValue(cid, 1234,1) --- dar storage 1234 pra q n possa usar novamente[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end --- end do if do getPlayerLevel[/center] [center]else -- se já tiver storage igual a 1[/center] [center]doPlayerSendTextMessage(cid, 22, "Você já usou esse item.") -- manda a mensagem[/center] [center]end -- end do if getPlayerStorage...[/center] [center]end -- end da função[/center] [center]




    Então é isso galera, tentei englobar o maior número de informações necessárias para vocês começarem a fazer seus scripts e espero que esse tutorial ajude alguém. É bom lembrar que só isso não basta e que é sempre bom olhar os scripts dos outros e pelo menos tentar entender como que foram feitos. Vlw aí, abraços.





    Créditos: 100% Leo




    PS: Não quero ninguém pegando o Tutorial e colocando em outro fórum se for colocar em outro fórum deixa que eu ou o Leo .

  6. Curtir
    bra deu reputação a L3K0T em Adicionando novos elementos no TFS 0.3.6   
    ADICIONANDO O ELEMENTO
    muitas das vezes a gente precisa adicionar um novo elemento em nosso servidor, assim para criar novas magias, esse tutorial é para quem precisa disso.
     
     
     
    combat.cpp 
    Abaixo de:
    case CONDITION_FIRE: return COMBAT_FIREDAMAGE; Adicione em baixo:
    case CONDITION_PLANTA: return COMBAT_PLANTADAMAGE;  
    combat.cpp 
    Abaixo de:
    case COMBAT_FIREDAMAGE: return CONDITION_FIRE; Adicone em baixo:
    case COMBAT_PLANTADAMAGE: return CONDITION_PLANTA;  
    Condition.cpp
     
    Abaixo de:
    case CONDITION_FIRE: Adicione: 
    case CONDITION_PLANTA: Abaixo de:
    case CONDITION_FIRE: return ICON_BURN; Adicione em baixo:
    case CONDITION_PLANTA: return ICON_NONE;  
     
    Condition.h 
    Abaixo de: 
    CONDITION_HUNTING = 1 << 23, Adicione em Baixo:
    CONDITION_PLANTA = 1 << 24  
     
    const.h 
    Abaixo de:
    TEXTCOLOR_WHITE = 215, Adicione: 
    TEXTCOLOR_PLANTA = 18,  
     
    enums.h 
    Abaixo de:
    COMBAT_DEATHDAMAGE = 1 << 11, Adicione: 
     
    COMBAT_PLANTADAMAGE = 1 << 12,  
    Em
    COMBAT_LAST = COMBAT_DEATHDAMAGE para
    COMBAT_LAST = COMBAT_PLANTADAMAGE  
    game.cpp 
    Abaixo de: 
    case COMBAT_ENERGYDAMAGE: Adicione:
    case COMBAT_PLANTADAMAGE: Abaixo de: 
    case COMBAT_ENERGYDAMAGE: { textColor = TEXTCOLOR_PSYCHIC; magicEffect = MAGIC_EFFECT_DRAW_BLOOD; break; }  
    Adicione: 
    case COMBAT_PLANTADAMAGE: { textColor = TEXTCOLOR_PLANTA; magicEffect = MAGIC_EFFECT_DRAW_BLOOD; break; }  
     
    monsters.cpp 
    Abaixo de:
    else if(tmpName == "drown") combat->setParam(COMBATPARAM_COMBATTYPE, COMBAT_DROWNDAMAGE); Adicione:
    else if(tmpName == "planta") combat->setParam(COMBATPARAM_COMBATTYPE, COMBAT_PLANTADAMAGE); Abaixo de:
    else if(tmpStrValue == "energy") { mType->damageImmunities |= COMBAT_ENERGYDAMAGE; mType->conditionImmunities |= CONDITION_ENERGY; } Adicione:
    else if(tmpStrValue == "planta") { mType->damageImmunities |= COMBAT_PLANTADAMAGE; mType->conditionImmunities |= CONDITION_PLANTA; } Abaixo de:
    else if(readXMLString(tmpNode, "fire", strValue) && booleanString(strValue)) { mType->damageImmunities |= COMBAT_FIREDAMAGE; mType->conditionImmunities |= CONDITION_FIRE; } Adicione:
    else if(readXMLString(tmpNode, "planta", strValue) && booleanString(strValue)) { mType->damageImmunities |= COMBAT_PLANTADAMAGE; mType->conditionImmunities |= CONDITION_PLANTA; } Abaixo de:
    else if(readXMLInteger(tmpNode, "energyPercent", intValue)) mType->elementMap[COMBAT_ENERGYDAMAGE] = intValue; Adicione:
    else if(readXMLInteger(tmpNode, "plantaPercent", intValue)) mType->elementMap[COMBAT_PLANTADAMAGE] = intValue;  
     
    player.cpp
    Abaixo de:
    case CONDITION_FIRE: tmp = "burning"; break; Adicione:
    case CONDITION_PLANTA: tmp = "dashing"; break; tools.cpp
    Abaixo de:
    {"fire", COMBAT_FIREDAMAGE}, Adicione:
    {"planta", COMBAT_PLANTADAMAGE}, Abaixo de:
    case COMBAT_ENERGYDAMAGE: return "energy"; Adicione:
    case COMBAT_PLANTADAMAGE: return "planta";  
    Pronto só recompilar, se caso não pegar apague tudo da pasta OBJ
     
     
     
    ATENÇÃO: Depois de compilar você precisa registrar na LIB também.
     
    000-constant
     
    veja o ultimo numero 
     
    GHOSTDAMAGE = 2048  
     
    Multiplique o 2048 por 2 vezes Ficando:
    COMBAT_PLANTADAMAGE = 4096  
    agora você pode adicionar na suas magias o novo elemento e nos monstro tbm se preferir:

     
    monstro.xml
        <elements>         <element plantaPercent="50"/>     </elements>  

     spells
    COMBAT_PLANTADAMAGE local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PLANTADAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) setCombatParam(combat, COMBAT_PARAM_USECHARGES, true) local area = createCombatArea(AREA_SQUARE1X1) setCombatArea(combat, area) function onGetFormulaValues(cid, level, skill, attack, factor) local skillTotal, levelTotal = skill + attack, level / 5 return -(skillTotal * 1 + levelTotal), -(skillTotal * 1.7 + levelTotal) end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") function onCastSpell(cid, var) return doCombat(cid, combat, var) end  
  7. Curtir
    bra deu reputação a L3K0T em APRESENTANDO MEU PROJETO DE POKEMON   
    POKÉMON PROJECT - NO NOME HAVE SOURCE LINUX
     
    O nome já diz tudo! Pokémon Project, pois ainda não tem um nome certo e definido. Esse projeto está em andamento modo anonimo, só agora resolvi mostrar um pouco do meu "servidor novo". O projeto vem sendo desenvolvido há praticamente 8 meses, com o fechamento do meu ex server chamado "OTPOKEMON AMV ONLINE" ou "OTPOKEMON WORLD ONLINE", pois faltava muita coisa pra ser feito neles, então resolvi fecha-los  para refazer seus sistemas, assim deixando como os jogadores querem, tendo mais jogabilidade e diversão. Algumas informações do servidor abaixo.
     
    SISTEMAS: - nossos sistemas foram desenvolvido pela nossa equipe e amigos.
     
    Fly System 100%
    Surf System 100%
    Ride System 100%
    Auto Loot system 100%
    Taxi System - vai pro pvp e volta 100%
    Sistema de Balão você viaja de balão pagando.
    GENDER SYSTEM 100% - NÃO TROCA E NEM BUGA
    Multi Addon System ilimitado addon no mesmo pokemon 100%
    Boost Sytem 100%
    Catch 100%
    Habilidades de pokemon 100% - cut- blink etc..
    Sistema de Fragmentos de Pontos, a cada 3 horas você coleta fragmentos pra converter para PONTOS (shop) você também ganha fragmentos logando a cada 24 horas, sendo vip você tem bônus de fragmentos, a cada 1000 fragmentos você troca por 1 ponto de shop em um NPC. 100%
    Nick System 100%
    Gym System - 50%
    Pokedex 80%
    PVP 100% sem duelos
    Mapa 60% tá bonito em ele é feito por mim.
    se eu esqueci algo comentem ai em baixo. Que tal colaborar com a gente também ? você pode! mande suas ideias quem sabe a gente não implementa e aqui vai algumas imagens.
     
     
     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     
     
     
    ESPERO QUE TENHA GOSTADO,  SÓ TENHO DISCORD PARA QUEM QUISER ACOMPANHAR O PROJETO.
    link: https://discord.gg/MZk8vCq
     
     
     
  8. Obrigado
    bra recebeu reputação de KotZletY em (PEDIDO) Poke Dash v9 ou v8   
    http://www.mediafire.com/file/7zuy27ymn7nhnj7/dash+v6+reupload.rar
  9. Curtir
    bra deu reputação a Leohige em The Ruby Server - Base Pokémon TFS 1.2 - 9.80   
    The Ruby Server - Base Pokémon
    Ao olhar as diversas bases que podem ser encontradas aqui no fórum e em outros locais da internet, pude ver que todas elas carecem de qualidade. Todas estas bases são feitas utilizando gambiarras para diversos sistemas funcionarem, e com isso vários problemas surgem, como de sistemas que não funcionam direito, e o mais importante, com um desempenho extremamente baixo, gerando apenas servidores instáveis. Com isso eu decidi que iria começar a desenvolver uma base para servidores relacionados a Pokémon, com dois objetivos. Um dos objetivos é ganhar mais conhecimento em cima da linguagem de programação C++, o outro objetivo é disponibilizar uma base completamente estável, funcional e de fácil configuração e desenvolvimento para servidores de Pokémon, para que mais ótimos trabalhos possam surgir. Este projeto também irá incluir um cliente próprio e estável, junto com um website.
     
    Também planejo criar uma espécie de Wiki para o servidor, cliente e website, com o objetivo de auxiliar quem for desenvolver em cima deste servidor, e também aqueles que pouco entendem do assunto relacionando a criação de escripts, Pokémon, spells e etc.
     
    Alguns poucos sistemas foram implementados no servidor por ora. Sistemas como o de catch e de goback serão implementados mais para frente, quando outros sistemas forem completamente implementados, como o sistema de configuração de Pokeballs, criação de Pokémons e sistema de shinys. Estou visando a qualidade do servidor como um todo, por isso algumas coisas irão demorar para aparecer.

    O sistema de Pokeballs e de criação de Pokémon já está bem encaminhado, e um sistema de gêneros também já está pronto com fácil configuração, onde o spawn destes Pokémon com sexo será por % igual aos jogos da franquia. Um sistema de surgimento de Ditto aleatório já está praticamente implementado, onde um Pokémon aleatório pode ser um Ditto disfarçado.
     
    [+] Informações do Servidor
    Baseado em: TFS 1.3
    Protocolo: 10.98
     
    [+] Informações do Client
    Baseado em: otclient 0.6.6

    [+] Informações do Website
    Baseado em: nenhum
    Desenvolvido em: PHP (por ser o mais comum na comunidade)
     
    Como contribuir?
    Eu gostaria muito que a comunidade ajudasse no desenvolvimento deste projeto, pois o mesmo será disponibilizado para todos, e para contribuir não necessariamente é preciso entender de programação. Você pode também ajudar testando e reportando os bugs encontrados no repositório do projeto no GitHub, assim como com sugestões e ideias de mudança/implementação no servidor através do próprio repositório ou através do Discord, ou ajudar na criação de guias para o website do projeto.
     
    Links
     
    [+] RubyServer - GitHub
    https://github.com/rubyserver/rubyserver
     
    [+] RubyClient - GitHub
    https://github.com/rubyserver/rubyclient
     
    [+] RubyServer - Website
    https://rubyserver.github.io/rubyserver/
     
    [+] RubyServer - Discord
    https://discord.gg/XTrZGpy
     
    Algumas Imagens
     
     
     
     
     
  10. Curtir
    bra deu reputação a Gengo em [PEDIDO] Item que ativa Outfit   
    Opa blz, segue o script que você deseja, primeiro vamos a instalação:
     
    Vá na sua pasta do seu servidor data/actions/scripts/ crie um arquivo.lua e coloque o seguinte script:
    local outfitMale = 152 -- Outfit Assassin function onUse(cid, item, frompos, item2, topos) if item.uid == 22052 then if ( getPlayerStorageValue(cid,1235) == -1 ) then doPlayerSendTextMessage(cid,21,"Voce ganhou uma Outfit") doPlayerAddOutfit(cid, outfitMale, 1) setPlayerStorageValue(cid,1235,1) doSendMagicEffect(getCreaturePosition(cid), math.random(1, 67)) else doPlayerSendTextMessage(cid,25,"Voce ja tem essa Outfit.") end end return TRUE end Depois abre o arquivo data/actions/actions.xml e coloque a seguinte tag:
    <action itemid="22052" script="arquivo.lua"/> É só isso mesmo o script, espero que seja o que você esteja procurando.
    OBS: para saber o numero da Outift abre o arquivo outfits.xml  vai estar na pasta do seu servidor data/XML/outfits.xml na parte onde vai estar looktype é o numero da Outfit
  11. Curtir
    bra deu reputação a luangop em [OPEN-SOURCE] PokeChampions   
    Melhor ensinar a pescar, da próxima você mesmo pode pegar o peixe!
    1º:
    Baixe o programa Demoleition (serve para descompilar molebox) ~> https://www.mediafire.com/file/t3xw46s554it5fp/demoleition-v0.50.zip
    2º: Abra o programa e selecione o .exe do client e pronto!
    Simples assim! =)
    (pra quem tem preguiça de fazer, o link do .dat e .spr: https://mega.nz/#!ecgDSSqY!PpixmcLbGiui4pjJVpIWV8zta_CyEXvQYW82sydxk1A)
  12. Curtir
    bra deu reputação a Matt Shadows em [OPEN-SOURCE] PokeChampions   
    Olá Caros membros, hoje estou trazendo um servidor para vocês no qual eu fui contratado para adaptar uma source, me "calotaram" e eu achei justo postar a base adaptada. Desfrutem...
     
     

     
     

     
     
     
     

     
     

     
     

     
  13. Curtir
    bra deu reputação a MatteusDeli em Mineração v1   
    Ou você pode trocar a tag do actions.xml por esta :
     
     
    No lugar do XXXX vc coloca o id da pick normal.
  14. Curtir
    bra deu reputação a Bruno Carvalho em [TalkAction] Player Check System   
    Versão: 3.2
    Versão de tibia: 9.4+ (Funciona em anteriores)
    Descrição: Existem muitos scripts que ajudam o administrador do servidor a cuidar dele, um deles é saber coisas sobre quem está jogando e se está sendo honesta. Eu peguei alguns scripts e estou juntando em um para diminuir o tamanho e ter uma fácil verificação.

    TAG:
    <talkaction log="yes" words="!p;/p" access="5" event="script" value="playercheck.lua"/> Script:
    Talkactions/scripts/playercheck.lua

    local config = { check = {"check", "viwer", "verificar", "ver"}, delete = {"del", "delete", "deletar"}, search = {"search", "procurar"} } function getItemsInContainer(cont, sep) local text = "" local tsep = "" local count = "" for i=1, sep do tsep = tsep.."-" end tsep = tsep..">" for i=0, getContainerSize(cont.uid)-1 do local item = getContainerItem(cont.uid, i) if isContainer(item.uid) == FALSE then if item.type > 0 then count = "("..item.type.."x)" end text = text.."\n"..tsep..getItemNameById(item.itemid).." "..count.." ("..item.itemid..")" else if getContainerSize(item.uid) > 0 then text = text.."\n"..tsep..getItemNameById(item.itemid).." ("..item.itemid..")" text = text..getItemsInContainer(item, sep+2).." ("..item.itemid..")" else text = text.."\n"..tsep..getItemNameById(item.itemid).." ("..item.itemid..")" end end end return text end function onSay(cid, words, param, channel) local slotName = {"Cabeça", "Amuleto", "Backpack", "Armor", "Mao Direita", "Mao Esquerda", "Legs", "Pés", "Ring", "Ammo Slot"} local t = string.explode(param, ",") if(table.isStrIn(param, config.check)) then if getPlayerGroupId (cid) >= 5 then local player = getPlayerByNameWildcard(t[2]) if isPlayer(player) == TRUE then local text = getPlayerName(player).."'s Equipment: " for i=1, 10 do text = text.."\n\n" local item = getPlayerSlotItem(player, i) if item.itemid > 0 then if isContainer(item.uid) == TRUE then text = text..slotName[i]..": "..getItemNameById(item.itemid).." ("..item.itemid..") "..getItemsInContainer(item, 1) else text = text..slotName[i]..": "..getItemNameById(item.itemid).." ("..item.itemid..")" end else text = text..slotName[i]..": Empty" end end doShowTextDialog(cid, 6579, text) else doPlayerSendCancel(cid, "This player is not online.") end end elseif(table.isStrIn(param, config.delete)) then if getPlayerGroupId(cid) >= 5 then local player = getPlayerByNameWildcard(t[3]) if isPlayer(player) == TRUE then count = t[4] if(not t[4]) then count = 1 end if getPlayerItemCount(player, t[2]) > 0 then if doPlayerRemoveItem(player, t[2], count) then doPlayerSendCancel(cid, "Item Deletado.") else doPlayerSendCancel(cid, "Este player não esta quantidade.") end else doPlayerSendCancel(cid, "Este player não tem o item.") end end end elseif(table.isStrIn(param, config.search)) then if getPlayerGroupId (cid) >= 5 then local player = getPlayerByNameWildcard(t[3]) local result = db.getResult("SELECT name, online FROM players WHERE id IN (SELECT player_id FROM player_items WHERE itemtype = ".. t[2] ..");") local msg = "Resultados da busca pelo item ".. t[2] .." em seu banco de dados:\n\n" if result:getID() ~= -1 then while true do local name = result:getDataString("name") local online = result:getDataInt("online") msg = msg .. name .." [".. (online == 1 and "Online" or "Offline") .."]\n" if not result:next() then break end end else msg = msg .. "O item não foi encontrado em nenhum jogador." end doShowTextDialog(cid, t[2], msg) end end return true end Explicação:
    Quando o god digita:
    /p check, (PNAME) - Ele verifica os items que o player tem.
    /p del, (ID), (PNAME), (COUNT) - Ele deleta o item de determinado player (Se não colocar o count ele irá remover somente 1).
    /p search, (ID) - Ele verifica quantos players tem tal item e se está online.

    Créditos:
    Oneshot
    CaioODemais
    Comedinha (Bruno Carvalho)
     
  15. Curtir
    bra deu reputação a gabrielzika em Script Porta   
    -- Do not remove the credits -- -- [MOVEMENT] Porta que abre automáticamente -- -- Developed by Rigby (João Vitor) -- -- Xtibia.com -- local porta = {7777, 8888, 9999} -- porta fechada, porta meio aberta, porta aberta local pos = {x = 1063, y = 1033, z = 7} -- local onde vai fica a porta local delay = 100 -- ela vai demorar 0.1 segundos para fica totalmente aberta ou totalmente fechada local action = 5555 -- action que ta no .xml, se muda la vai ter que muda aqui também function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) if getTileItemById(pos, porta[1]).uid > 0 then for i = 1, 2 do addEvent(function() doTransformItem(getTileItemById(pos, i == 1 and porta[1] or porta[2]).uid, porta[i + 1]) end, i * delay) end end return true end function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor) local tab = {} for _, pid in ipairs(getPlayersOnline()) do if getTileInfo(getCreaturePosition(pid)).actionid == action then table.insert(tab, pid) end end if #tab == 0 then if getTileItemById(pos, porta[3]).uid > 0 then for i = 1, 2 do addEvent(function() doTransformItem(getTileItemById(pos, i == 1 and porta[3] or porta[2]).uid, porta[i == 1 and 2 or 1]) end, i * delay) end end end return true end  
     
    <movevent type="StepIn" actionid="5555" event="script" value="Nomedoscript.lua"/> <movevent type="StepOut" actionid="5555" event="script" value="Nomedoscript.lua"/>  
     
    Créditos: RigBy
  16. Obrigado
    bra deu reputação a .HuRRiKaNe em [CREATURESCRIPT] God Autorizados   
    Script que checa por nome se um god está autorizado a entrar no jogo ou não, caso não esteja ele volta a ser um player normal ao entrar.
     
    Em data/creaturescripts/scripts crie um arquivo com o nome godcheck.lua e dentro coloque:
    function onLogin(cid) local names = {"Admin1", "Admin2"} if getPlayerGroupId(cid) == 6 and not isInArray(names, getPlayerName(cid)) then setPlayerGroupId(cid, 1) end return true end  
    Em data/creaturescripts/scripts/login.lua adicione:
    registerCreatureEvent(cid, "Check Gods")  
    Em data/creaturescripts/creaturescripts.xml adicione:
    <event type="login" name="Check Gods" event="script" value="godcheck.lua"/>  
    Créditos:
    DavidR
  17. Obrigado
    bra deu reputação a MatteusDeli em Mineração v1   
    Olá TK Fans.
     
    Vá na pasta data/actions/script, copie e cole um arquivo e renomeie para mineracao.lua em seguida apague tudo o que está dentre e cole isso :
     
    Explicações :
     
    Em AZUL são as chances para cair os itens na mineração. EX : quanto menor você colocar mais dificil vai ser.
    Em VERMELHO é o intervalo em (SEGUNDOS) que vai ser criada a pedra no local minerado! EX : se você coloca 10 então será 10 segundos.. Se você coloca 30 serão 30 segundos e assim vai.
    Em VERDE é as recompensa da mineração. Só alterar o ID para o item que você quer que drope.
     
    Agora vá em data/actions/actions.xml e cole isso lá :
     
     
    IMPORTATE :
     
    Em ROXO é a ActionID do item para rodar a script. EX : Se você usar um pick normal o script não vai pegar por isso altere a pick para a actionid 6969.
     
    Ai você me pergunta para que isso?
    R: Para que o player que for minerar use uma pick "especial" ou seja uma pick normal não irá funcionar.
     
    ---Créditos---
    Steeven
     
     
     
     
     
     
     
     
     
     
  18. Curtir
    bra deu reputação a L3K0T em SPR E DAT atualizado OTP 2017   
    Bom galera aqui está o  spr e dat do otpokemon. com  mês de novembro com toda as Sprites incluindo, corpse, parede, itens, addons, etc..., façam bom aproveito!
     
    UPDATE - NOVEMBRO -2017

     
     1 Download client: cliente otp.zip
    2 Download obj: Object Builder 0.4.3.zip
     
    scan 1: https://www.virustotal.com/#/file/ec4c3f2ee12d3b56beb8887a40870c31a926df897a47494d83932c8daa3e58b2/detection
    scan 2: https://www.virustotal.com/#/file/6db1c7abfe7acc64adb2be04d1f0589cc51fc8f59d3faf309bd660c99fad6ee2/detection
     
    abra em modo estendido e usem acima que está pra download também. espero que tenha ajudado alguém.... pois nem todo mundo consegue sprites do otp e muita gente fica ai guardando segredos.
     
     
     
    UPDATE - DEZEMBRO  - NATAL 2017

     
     

     
     1 Download client: otp dezembro.zip
    2 Download obj: Object Builder 0.4.3.zip
     
     
    scan 1: https://www.virustotal.com/#/file/c34eeb2167a30f6eee04b43575f62455a07e0f6006a0ffe57730c4ac301a553d/detection
    scan 2: https://www.virustotal.com/#/file/6db1c7abfe7acc64adb2be04d1f0589cc51fc8f59d3faf309bd660c99fad6ee2/detection
  19. Curtir
    bra deu reputação a ViitinG em [talkactions] Adicionar item para todos players online   
    Para quem não sabe como funciona o script é o seguinte o ADM pode usar o comando para adicionar um item para todos os players online no servidor.
     
    • Adicionando o script •
     
    Em "data/talkactions/talkactions.xml" adicione está tag :
    <talkaction log="yes" words="/additem" access="5" event="script" value="additem.lua"/> Em "data/talkactions/scripts" crie um arquivo lua com o nome "additem" e adicione este script nele :
    function onSay(cid, words, param, channel) local t = string.explode(param, ",") if t[1] ~= nil and t[2] ~= nil then local list = {} for i, tid in ipairs(getPlayersOnline()) do list[i] = tid end for i = 1, #list do doPlayerAddItem(list[i],t[1],t[2]) doBroadcastMessage(getPlayerName(cid) .. " Acabou de dar: " .. t[2] .." ".. getItemNameById(t[1]) .. " para todos os players online!") end else doPlayerPopupFYI(cid, "No parm...\nSend:\n /itemadd itemid,how_much_items\nexample:\n /itemadd 2160,10") end return true end • Configurando •
     
     
  20. Curtir
    bra deu reputação a ViitinG em [talkaction] Adicionar X item para o player   
    Para quem não sabe como funciona o script : O ADM do servidor digita um comando para dar X quantidade de item para X player.Útil para quando terminar um evento o ADM dar X item para tal player pelo comando e não jogando o item no chao.
     
    • Adicionando o script •
     
    "data/talkactions/giveitem.lua" :
    function onSay(cid, words, param) local param = param.explode(param, ',') if param then if isPlayer(getCreatureByName(param[1])) == TRUE then doPlayerSendTextMessage(getCreatureByName(param[1]), 22, "Você acabou de receber um item do ADM!") doPlayerAddItem(getCreatureByName(param[1]), param[2], param[3]) end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") end return TRUE end "data/talkactions/talkactions.xml" :
    <talkaction log="yes" access="5" words="/giveitem" event="script" value="giveitem.lua"/> • Configurando •
  21. Curtir
    bra deu reputação a Dwarfer em (Resolvido)max door Level   
    Porta
    Em actions/scripts, crie um arquivo.lua:
     
    No actions.xml:  <action actionid="ACTION_ID_DA_PORTA" script="NOMEDOARQUIVO.lua" />
     
    Tp
    Em movements/scripts, crie um arquivo.lua:
     
    No movements.xml: <movevent type="StepIn" actionid="ACTION_ID_DO_TELEPORT" event="script" value="NOMEDOARQUIVO.lua"/>
     
    Npc
     
    Um arquivo xml como base:
    <?xml version="1.0" encoding="UTF-8"?> <npc name="Dwarfer" script="NOMEDOARQUIVO.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="66"/> </npc>  
  22. Curtir
    bra deu reputação a Hadggar em [TalkAction] Sistema de Jail !   
    Opa galera blz? hoje vou trazer um sistema para vocês de jail, então vamos la !
     
    Algumas Funções !
     
    Funções:
     
    *Exemplo, GM quer prender um player que ta fazeno algu de errado, ai ele fala !jail ,4(no exemplo ele ficara 4 minutos preso), éo nome do fulano, !jail 4,fulano ,!jail 15,fulano ou !jail 30,fulano.
     
    * Verificação jogador o tempo de prisão (mostra data unjail) 
    * auto unjail jogadores 
    * Kick todos os jogadores da prisão depois de acidente / restart [teletransporte para jogador templo] 
     
    Primeiramente vá em \data\talkactions e abra o talkactions.xml é lá adicione:
    <talkaction words="!jail" script="jailsystem.lua"/> <talkaction words="!unjail" script="jailsystem.lua"/> <talkaction words="/jail" script="jailsystem.lua"/> <talkaction words="/unjail" script="jailsystem.lua"/> Agora vá em \data\talkactions\scripts é crie um arquivo chamado jailsystem.lua é la adicione :
    -- Default jail time in seconds -- default_jail = 30 -- The permission you need to jail someone -- grouprequired = 4 -- StorageValue that the player gets -- jailedstoragevalue_time = 1338 jailedstoragevalue_bool = 1339 -- Set the position of the jail: -- jailpos = { x = 1037, y = 1004, z =7 } -- Set the position once unjailed: -- unjailpos = { x = 1029, y = 1005, z =7 } -- auto kicker, dont edit jail_list = {} jail_list_work = 0 function checkJailList(param) addEvent(checkJailList, 1000, {}) for targetID,player in ipairs(jail_list) do if isPlayer(player) == TRUE then if getPlayerStorageValue(player, jailedstoragevalue_time) < os.time() then doTeleportThing(player, unjailpos, TRUE) setPlayerStorageValue(player, jailedstoragevalue_time, 0) setPlayerStorageValue(player, jailedstoragevalue_bool, 0) table.remove(jail_list,targetID) doPlayerSendTextMessage(player,MESSAGE_STATUS_CONSOLE_ORANGE,'You were kicked from jail! See you later :)') end else table.remove(jail_list,targetID) end end end function onSay(cid, words, param) if jail_list_work == 0 then jail_list_work = addEvent(checkJailList, 1000, {}) end if param == '' and (words == '!unjail' or words == '/unjail') then if getPlayerStorageValue(cid, jailedstoragevalue_time) > os.time() then doPlayerSendTextMessage ( cid, MESSAGE_INFO_DESCR, 'You are jailed until ' .. os.date("%H:%M:%S", getPlayerStorageValue(cid, jailedstoragevalue_time)) .. ' (now is: ' .. os.date("%H:%M:%S", os.time()) .. ').') else if getPlayerStorageValue(cid, jailedstoragevalue_bool) == 1 then table.insert(jail_list,cid) doPlayerSendTextMessage ( cid, MESSAGE_INFO_DESCR, 'You will be kicked from jail in one second.') else doPlayerSendTextMessage ( cid, MESSAGE_INFO_DESCR, 'You are not jailed.') end end return TRUE end local jail_time = -1 for word in string.gmatch(tostring(param), "(%w+)") do if tostring(tonumber(word)) == word then jail_time = tonumber(word) end end local isplayer = getPlayerByName(param) if isPlayer(isplayer) ~= TRUE then isplayer = getPlayerByName(string.sub(param, string.len(jail_time)+1)) if isPlayer(isplayer) ~= TRUE then isplayer = getPlayerByName(string.sub(param, string.len(jail_time)+2)) if isPlayer(isplayer) ~= TRUE then isplayer = getPlayerByName(string.sub(param, string.len(jail_time)+3)) end end end if jail_time ~= -1 then jail_time = jail_time * 60 else jail_time = default_jail end if words == '!jail' or words == '/jail' then if getPlayerGroupId ( cid ) >= grouprequired then if isPlayer(isplayer) == TRUE then doTeleportThing(isplayer, jailpos, TRUE) setPlayerStorageValue(isplayer, jailedstoragevalue_time, os.time()+jail_time) setPlayerStorageValue(isplayer, jailedstoragevalue_bool, 1) table.insert(jail_list,isplayer) doPlayerSendTextMessage ( cid, MESSAGE_INFO_DESCR, 'You jailed '.. getCreatureName(isplayer) ..' until ' .. os.date("%H:%M:%S", getPlayerStorageValue(isplayer, jailedstoragevalue_time)) .. ' (now is: ' .. os.date("%H:%M:%S", os.time()) .. ').') doPlayerSendTextMessage ( isplayer, MESSAGE_INFO_DESCR, 'You have been jailed by '.. getCreatureName(cid) ..' until ' .. os.date("%H:%M:%S", getPlayerStorageValue(isplayer, jailedstoragevalue_time)) .. ' (now is: ' .. os.date("%H:%M:%S", os.time()) .. ').') return TRUE else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Player with this name doesn\'t exist or is offline.") return FALSE end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don't have access to unjail other players.") return FALSE end elseif words == '!unjail' or words == '/unjail' then if getPlayerGroupId ( cid ) >= grouprequired then if isPlayer(isplayer) == TRUE then doTeleportThing(isplayer, unjailpos, TRUE) setPlayerStorageValue(isplayer, jailedstoragevalue_time, 0) setPlayerStorageValue(isplayer, jailedstoragevalue_bool, 0) table.remove(jail_list,targetID) doPlayerSendTextMessage(isplayer,MESSAGE_STATUS_CONSOLE_ORANGE,getCreatureName(cid) .. ' let you go out from jail! See you later :)') doPlayerSendTextMessage ( cid, MESSAGE_INFO_DESCR, 'You unjailed '.. getCreatureName(isplayer) ..'.') else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Player with this name doesn\'t exist or is offline.") return FALSE end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don't have access to unjail other players.") return FALSE end end return FALSE end Algumas configurações
     
    grouprequired = 4 -- aki séra até o grupo que poderar usar no caso group 4 pra baixo.
    jailpos = { x = 1037, y = 1004, z =7 } -- aki séra a posição para aonde o player irar quando for preso.
    unjailpos = { x = 1029, y = 1005, z =7 }- -aki séra para aonde ele for quando ele n tiver mais preso, no caso unjail.
    Creditos: Gesior.pl EU.   Lembre-se eu testei em tibia 8.54 é 8.60 é funcionou perfeitamente !
     
     
     
     
     
     
     

Informação Importante

Confirmação de Termo