
bra
Membro
-
Registro em
-
Última visita
Histórico de Curtidas
-
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(); } -
bra deu reputação a TonyHalk em Pasta Data - Funções Em LuaParte 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.
-
bra deu reputação a Pokemon X Ice em [Link Quebrado]Base Bolz 2.0 Open SourceServido By Pokemon X Ice
informações:
versão 2.0:
Creditos:
Downloads:
-
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
-
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 .
-
bra deu reputação a L3K0T em Adicionando novos elementos no TFS 0.3.6ADICIONANDO 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
-
bra deu reputação a L3K0T em APRESENTANDO MEU PROJETO DE POKEMONPOKÉ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
-
bra recebeu reputação de KotZletY em (PEDIDO) Poke Dash v9 ou v8http://www.mediafire.com/file/7zuy27ymn7nhnj7/dash+v6+reupload.rar
-
bra deu reputação a Leohige em The Ruby Server - Base Pokémon TFS 1.2 - 9.80The 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
-
bra deu reputação a Gengo em [PEDIDO] Item que ativa OutfitOpa 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
-
bra deu reputação a luangop em [OPEN-SOURCE] PokeChampionsMelhor 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)
-
bra deu reputação a Matt Shadows em [OPEN-SOURCE] PokeChampionsOlá 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...
-
bra deu reputação a MatteusDeli em Mineração v1Ou você pode trocar a tag do actions.xml por esta :
No lugar do XXXX vc coloca o id da pick normal.
-
bra deu reputação a Bruno Carvalho em [TalkAction] Player Check SystemVersã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)
-
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
-
bra deu reputação a .HuRRiKaNe em [CREATURESCRIPT] God AutorizadosScript 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
-
bra deu reputação a MatteusDeli em Mineração v1Olá 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
-
bra deu reputação a L3K0T em SPR E DAT atualizado OTP 2017Bom 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
-
bra deu reputação a ViitinG em [talkactions] Adicionar item para todos players onlinePara 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 •
-
bra deu reputação a ViitinG em [talkaction] Adicionar X item para o playerPara 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 •
-
bra deu reputação a Dwarfer em (Resolvido)max door LevelPorta
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>
-
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 !