-
Total de itens
912 -
Registro em
-
Última visita
-
Dias Ganhos
1
Tudo que tibiaa4e postou
-
Pasta Enciclopedia com todos os links de outros tutoriais ! http://www.xtibia.com/forum/Pasta-Data-Enc...r-E-t99746.html Parte IV– Spells Olá depois de um tempinho (5 meses) sem tutoriais , que por varios fatores não consegui terminar no meu primeiro prazo... Essa aqui eu acredito ser um dos mais essenciais, pois algumas pessoas não compreendem bem isso, e sempre era uma dúvida constante no msn que eu não consegui sanar , por falta de material... Começaremos pelo spells.xml <spells> <!-- Attack Runes --> <rune name="Poison Field" id="2285" allowfaruse="1" charges="3" lvl="14" maglv="0" exhaustion="2000" blocktype="solid" script="attack/poison field.lua"/> <!-- Attack Spells --> <instant name="Death Strike" words="exori mort" lvl="16" mana="20" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" script="attack/death strike.lua"> <vocation name="Sorcerer"/> <vocation name="Master Sorcerer"/> <vocation name="Druid"/> <vocation name="Elder Druid"/> </instant> <!-- Summon Spells --> <instant name="Summon Creature" words="utevo res" lvl="25" params="1" exhaustion="2000" needlearn="0" function="summonMonster"> <vocation name="Sorcerer"/> <vocation name="Druid"/> <vocation name="Master Sorcerer"/> <vocation name="Elder Druid"/> </instant> <!--Conjure Runes --> <conjure name="Conjure Arrow" words="exevo con" lvl="13" mana="100" soul="1" conjureId="2544" conjureCount="10" exhaustion="1000" needlearn="0" function="conjureItem"> <vocation name="Paladin"/> <vocation name="Royal Paladin"/> </conjure> <conjure name="Enchant Spear" words="exeta con" lvl="45" mana="350" soul="3" prem="1" conjureId="7367" reagentId="2389" exhaustion="1000" needlearn="0" function="conjureItem"> <vocation name="Paladin"/> <vocation name="Royal Paladin"/> </conjure> <conjure name="Energybomb" words="adevo mas vis" lvl="37" mana="880" soul="5" prem="1" reagentId="2260" conjureId="2262" conjureCount="2" exhaustion="1000" needlearn="0" function="conjureRune"> <vocation name="Sorcerer"/> <vocation name="Master Sorcerer"/> </conjure> </spells> Ai está a base de cada spell para esse arquivo. As runas são divididas em duas partes, o script da runa e de transformação da pedra em runa. Começaremos pela runa : <rune name="Poison Field" id="2285" allowfaruse="1" charges="3" lvl="14" maglv="0" exhaustion="2000" blocktype="solid" script="attack/poison field.lua"/> Essa linha acima indica o que a runa fará ao ser usada em algo, sendo os parametros : name: Isso indica o nome da runa. Esse nome é o que aparece na runa ao se dar use nela. id: Isso indica o id da runa. allowfaruse : Se a runa pode ser usada em objetos a distancia. charges: A quantidade de cargas iniciais dela lvl: Nivel minimo para ela ser usada. maglv: Nivel magico minimo para usar ela exhaustion: Tempo de exaustão para poder usar a proxima runa. blocktype: Tipo do item que será jogado. script: Arquivo que terá o script. A criação da pedra é mais simples : <conjure name="Energybomb" words="adevo mas vis" lvl="37" mana="880" soul="5" prem="1" reagentId="2260" conjureId="2262" conjureCount="2" exhaustion="1000" needlearn="0" function="conjureRune"> <vocation name="Sorcerer"/> <vocation name="Master Sorcerer"/> </conjure> name: O nome dela, para ser sincero não se prescisa ser o mesmo do arquivo acima. words: A palavra (macumba) que você diz para fazer a transformação. lvl: Nivel para poder cria-la. mana: mana usada para conjura-la. c reagentId: Id da runa base, no caso 2260 é a blank rune. conjureId: Id da runa "magica". conjureCOunt: Quantidade de cargas da runa. exausthion: O tempo de exaustão que ela dará em milessegundos (1000 = 1 segundo) (nem sei se tem isso hj em dia ainda). needlearn: Se o player prescisará aprender ela, no caso comprar de um npc. function: No caso deixe assim, essa função que transforma agua em vinho . Lembrando que pode se usar esse tipo para transformar outros itens, como enchatted staff e depois para fazer volta-lo ao normal é só fazer ele decair. Para faze-lo mude a function para conjureItem Bem a parte de script LUA , explicarei mais abaixo, vamos continuar com as tags, porque o script LUA é mais facil Magias Espontaneas <instant name="Death Strike" words="exori mort" lvl="16" mana="20" prem="1" range="3" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" script="attack/death strike.lua"> <vocation name="Sorcerer"/> <vocation name="Master Sorcerer"/> <vocation name="Druid"/> <vocation name="Elder Druid"/> </instant> name: Nome dela. words: A palavra (macumba) que você diz para fazer o trabalho. lvl: Nivel para poder solta-la. mana: mana usada para solta-la. prem: Se o conjurador prescisará ser premmium ou não. range: Quantos sqm ela poderia ir de distancia. Se ativado elá irá acertar o alvo que está em ataque. blockwalls: Se ativado ela não passará por obstaculos. exhaustion: tempo de exaustão em milessgundos. selftarget: Se irá atingir ele mesmo, no caso magias de cura. needtarget: Se ativado, prescisará o player está atacando alguem. direction: Se ativado, a magia sempre sairá pela frente do player. casterTargetOrDirection: Se ativado, a magia irá em quem o player está atacando senão elas sairá pela frente do player agressive: Se elá tirará danos ou não. needlearn: Se ele prescisará aprender ou não. event: O evento delá, vocês só usarão script (ao não ser que sejam muito criativos). script: Local do arquivo de configuração. vocation name : Nome da vocação que poderá usar a magia (coloque suas promoções tbm) Ai explicamos como fazer a tag dessas magias, existem outras funções que para ser sincero são inuteis, ou necessarias apenas para 1 magia Scripts LUA Se você é uma pessoa normal, sem problemas mentais ou hiperatividade concerteza o que tiver aqui vai suprir suas necessidades, mas se você for igual eu, vai querer aprender mais. Eu costumo dizer que spells você tem ter um calculadora e paciencia para achar aquela forma e efeito. O resto é só copiar uma ja existente. O pessoal do TFS, adora fazer uns atalhos, variaveis e coisas para facilitarem a vida deles (e complicar a nossa). Se você olhar o arquivo lib da pasta spells/lib verá que tem varias formas lá... Para ser mais exato todas que eles usam nas spells do ot. Portanto memorize todas (ou como uma pessoa normal, verifique quando for fazer elas). Depois de muito bla bla bla, vamos ao que interessa. Vamos começar com nossa maravilhosa death strike local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.5, 0, -0.6, 0) local distanceCombat = createCombatObject() setCombatParam(distanceCombat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(distanceCombat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) setCombatParam(distanceCombat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH) setCombatFormula(distanceCombat, COMBAT_FORMULA_LEVELMAGIC, -0.5, 0, -0.6, 0) function onCastSpell(cid, var) if(variantToNumber(var) ~= 0) then return doCombat(cid, distanceCombat, var) end return doCombat(cid, combat, var) end Eu sinceramente não entendo 100% das funções vou explicar as necessarias. Nesse momento abra seu global.lua e se não tiver vá em lib/constants.lua e sempre verifique quando tiver a palavra arquivo abaixo : setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) : O tipo dela, se é dano fisico, fogo ou sei lá o que. São eles : COMBAT_NONE = 0 COMBAT_PHYSICALDAMAGE = 1 COMBAT_ENERGYDAMAGE = 2 COMBAT_EARTHDAMAGE = 4 COMBAT_POISONDAMAGE = 4 COMBAT_FIREDAMAGE = 8 COMBAT_UNDEFINEDDAMAGE = 16 COMBAT_LIFEDRAIN = 32 COMBAT_MANADRAIN = 64 COMBAT_HEALING = 128 COMBAT_DROWNDAMAGE = 256 COMBAT_ICEDAMAGE = 512 COMBAT_HOLYDAMAGE = 1024 COMBAT_DEATHDAMAGE = 2048 setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) : O tipo de efeito que sairão delá, pelo amor de deus olhem no arquivo porque tem 68. (Procurem CONST_ME_MORTAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH) : Esse é o efeito que faz ao ser disparada, ela. Ou seja, o efeito do trajeto dela. Proure no arquivo tem 37. setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -0.5, 0, -0.6, 0) : Esse é a grande sacada. Calculo certo !? + - A sintaxe disto é : COMBAT_FORMULA_LEVELMAGIC, -minA,Min , MaxB, mAx Sendo : MinA : Minimo calculado, ou seja valor minimo que sera calculado. Min : Minimo que a magia tirará ou dará. MaxB : Maximo de dano ao ser calculado. Max : Dano maximo fixo que dará a magia. O calculo é assim: (lvl * 2 + ml *3) * MinA ou MaxB´ Ai da um valor magico que será seu dano, oscilando entre o Min e o Max. Porém desde o tibia 7.8 o tibia mudou sua formula, e eu fazendo uns calculos criei uma nova com a função do Pedro B. function getCombatFormulas(cid, lv, maglv) local formula_min = -((lv*0.25 + maglv*3) * 0.52) local formula_max = -((lv*0.25 + maglv*3) * 0.68) if(formula_max < formula_min) then local tmp = formula_max formula_max = formula_min formula_min = tmp end return formula_min, formula_max end Agora você pensa que filho de uma mãe é o Ta4e, ferrou meu cerebro... Use a que bem entender... Em tese a death strike ta feita. Se você é observador percebeu que ela tem 2 funções porém são iguais. Isso porque para o servidor ela sendo jogada no inimigo ou ela sendo falada em frente são diferentes... (Sim da para fazer ela tirar + dano de perto). Bem para quem gostou do meu metodo, a diferença fica apenas no calculo de dano. --Calculed by ta4e-- --For tibia 8.31-- --Made in 07/11/08-- local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) function getCombatFormulas(cid, lv, maglv) local formula_min = -((lv*0.25 + maglv*3) * 0.52) local formula_max = -((lv*0.25 + maglv*3) * 0.68) if(formula_max < formula_min) then local tmp = formula_max formula_max = formula_min formula_min = tmp end return formula_min, formula_max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "getCombatFormulas") local distanceCombat = createCombatObject() setCombatParam(distanceCombat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(distanceCombat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) setCombatParam(distanceCombat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_DEATH) function getCombatFormulas(cid, lv, maglv) local formula_min = -((lv*0.25 + maglv*3) * 0.52) local formula_max = -((lv*0.25 + maglv*3) * 0.68) if(formula_max < formula_min) then local tmp = formula_max formula_max = formula_min formula_min = tmp end return formula_min, formula_max end setCombatCallback(distanceCombat, CALLBACK_PARAM_LEVELMAGICVALUE, "getCombatFormulas") function onCastSpell(cid, var) if(variantToNumber(var) ~= 0) then return doCombat(cid, distanceCombat, var) end return doCombat(cid, combat, var) end Em formula_min seria o MinA e o formula Max o maxB O resto é igual... setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "getCombatFormulas") Ao invés de indicarmos os valores, falamos que o resultado estará na função getCombatFormulas. Bem essa é a magia em tese + simples, vou mostrar uma magia de healing local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, FALSE) setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) function getCombatFormulas(cid, lv, maglv) local formula_min = ((lv*0.25 + maglv*3) * 0.7) local formula_max = ((lv*0.25 + maglv*3) * 0.92) if(formula_max < formula_min) then local tmp = formula_max formula_max = formula_min formula_min = tmp end return formula_min, formula_max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "getCombatFormulas") function onCastSpell(cid, var) return doCombat(cid, combat, var) end Perceba que na formula ela não tem o sinal de - antes do calculo, pois ela heala e não ferra o player. Dois novos parametros apareceram setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, FALSE) : Sendo false, a magia não é de ataque portanto pode ser usada em protection zones (e não tirará dano). setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) Nesse caso ela cura a condição paralyze, se você olhar no arquivo verá as condition que as magias poderão retirar (até umas versoes atrás, não era possivel remover + de 1 condição por magia. Agora uma spell que cria algo, que tal poison field ? local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON) setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1496) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Simples não ? setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1496) Id do item a ser criado no local de saida. Até agora só vimos magia que atigem 1 local certo, vamos evoluir e ver a com areas. Magias com aréas A mesma poison field pode ser mudada para poison bomb facilmente : local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_GREEN_RINGS) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISON) setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1496) local area = createCombatArea(AREA_SQUARE1X1) setCombatArea(combat, area) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Apenas adicionado a linha do createcombatArea ja faz ela criar em varios locais. Lembra do lib ? Abra ele e veja o fomrato do AREA_SQUARE1X1, AREA_SQUARE1X1 = { {1, 1, 1}, {1, 3, 1}, {1, 1, 1} } 0 - Nada 1 - Area que criará 3 - Local "base" Lembra da magia de healing ? vejamos uma mass healing --Calculed by ta4e-- --For tibia 8.22-- --Made in 12/09/08-- local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, FALSE) setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) function getCombatFormulas(cid, lv, maglv) local formula_min = ((lv*0.25 + maglv*3) * 3.7) local formula_max = ((lv*0.25 + maglv*3) * 4.1) if(formula_max < formula_min) then local tmp = formula_max formula_max = formula_min formula_min = tmp end return formula_min, formula_max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "getCombatFormulas") local area = createCombatArea(AREA_CIRCLE3X3) setCombatArea(combat, area) function onCastSpell(cid, var) return doCombat(cid, combat, var) end local area = createCombatArea(AREA_CIRCLE3X3) setCombatArea(combat, area) Mesma coisa... Só se adiciona isso. Que tal uma magia do tipo beam --Calculed by ta4e-- --For tibia 8.31-- --Made in 07/11/08-- local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA) function getCombatFormulas(cid, lv, maglv) local formula_min = -((lv*0.25 + maglv*3) * 0.5) local formula_max = -((lv*0.25 + maglv*3) * 0.8) if(formula_max < formula_min) then local tmp = formula_max formula_max = formula_min formula_min = tmp end return formula_min, formula_max end local area = createCombatArea(AREA_BEAM5, AREADIAGONAL_BEAM5) setCombatArea(combat, area) setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "getCombatFormulas") function onCastSpell(cid, var) return doCombat(cid, combat, var) end Se você comparar ela com uma ULTIMATE EXPLOSION VERÁ que só muda o efeitos. Mais aonde faz ela em frente ao player e a outra não ? No spells.xml, veja por que aprendemos ele primeiro... Em tese vocês com um pouco de pratica já serão grande spells makers. Para quem tem mais dificuldade (Quem acha que eu sou bom..., se você soubessem o que eu demoro para aprender) As magias de runas, são iguais a essas na criação, o que muda é no spells.xml, 80% dos erros de spells acontecem lá. Magia com danos fisicos Eu dou a cara limpa, para dizer que não abro um otserver a 4 meses, devido ao meu pc reiniciar devido ao uso de muita memoria . Então até a ultima vez a função padrão do TFS estava falha em relação aos danos. Ai novamente o Pedro B. fez uma... --Calculed by ta4e-- --For tibia 8.31-- --Made in 07/11/08-- local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) local area = createCombatArea(AREA_SQUARE1X1) setCombatArea(combat, area) function getSpellDamage(cid, weaponSkill, weaponAttack) damage_min = (weaponSkill * weaponAttack / 30) * 2.5 damage_max = (weaponSkill * weaponAttack / 30) * 3.7 if(damage_max < damage_min) then local tmp = damage_max damage_max = damage_min damage_min = tmp end return -damage_min, -damage_max end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "getSpellDamage") function onCastSpell(cid, var) return doCombat(cid, combat, var) end Em tese ela é a mesma coisa que a do ot. Se preferirem testem ela, e vejam... Essa parte da formula é igual a outra, ela calcular o skill e o ataque da arma. Igual no tibia global. Portanto se o individuo ta sem arma, ela nem funciona... A base dela é a mesma só muda a função : setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "getSpellDamage") Bem eu acho que fico por aqui, esse tutorial não é grande coisa, mas espero que ajude muita gente com duvidas simples, e se quiser evoluir, estude as spells que vocês conhecerão mais (As de party são legais, apesar de terem coisas para mim desnecessarias. Deem sugestões, dúvidas, criticas e o que desejaram. Falem mal, mas falem de mim!!!
-
Arena Quest V4.0 (Arena De Svaground)
tópico respondeu ao tibiaa4e de tibiaa4e em Actions e Talkactions
@up velho -- eh comentario em lua se ta lá nao da erro vc esqueceu alguma virgula Eu vou ver se consigo modificar meus codigos... só vem problema para mim esses dias e meus tutos aqui estão comprometidos -
[Arquivado]Script de Sistema De Montaria
tópico respondeu ao Diogo de tibiaa4e em Noticias - Arquivo
@up eh verdade um fica + facil... usar um script só pode usar funções diferentes + acho que terá que criar algo em c++ ainda Agora que acabo as provas vou ver se consigo acelerar o que tenho de pendente aqui e dar uma mãozinha... O dificil é que tenho que programar em 4 linguagens de uma vez e ainda fazer umas coisas em lua... -
Hehe milagre uma coisa q saiu... FOi feito em c++ ? Agora ela vai bombar + pelo amor não façam a merda que o tibiabr fez de cobrar....
-
eu ate ja fiz um aqui e fico mais completo Mais se você arrumar ele fica bom... Assim é osso
-
[Arquivado]Script de Sistema De Montaria
tópico respondeu ao Diogo de tibiaa4e em Noticias - Arquivo
eh da pra fazer sem... Eu to muito por fora dessas novas creature scripts No caso ai fariamos uma talk action O problema é saber quando ele tomar dano =~ acho que creature events não tem esse comando e do mesmo jeito acho que teria que usar um loop o0 Uma coisa que pode funcionar é olhar as novas spells... pode ser q haja alguma função lá -
tipo perdão pela grosseria + o script tava totalmente errado =x -- By Schiavinato function onUse(cid, item, frompos, item2, topos) if item.uid == 29000 then if doPlayerRemoveItem(cid,2160,100) == TRUE then setPlayerStorageValue(cid,29000,1) doPlayerSendTextMessage(cid,"Agora você é um player vip! Aproveite!",22) else doPlayerSendTextMessage(cid,"Voce não tem dinheiro suficiente",22) end end end eh isso ai
-
fico legal + tem uns return ai a mais e inutil e poderia tirar uma variavel function onUse(cid, item, frompos, item2, topos) local queststatus = getPlayerStorageValue(cid,11554) local container = doPlayerAddItem(cid, ID_DA_BAG_ou_BP, 1) if getPlayerVocation(cid) == 1 then if queststatus == -1 then doAddContainerItem(container, ID_DO_ITEM, 1) doAddContainerItem(container, ID_DO_ITEM, 1) doAddContainerItem(container, ID_DO_ITEM, 1) doAddContainerItem(container, ID_DO_ITEM, 1) setPlayerStorageValue(cid,11554,1) else doPlayerSendTextMessage(cid,22,"It is empty.") end elseif getPlayerVocation(cid) == 2 then if queststatus == -1 then doAddContainerItem(container, ID_DO_ITEM, 1) doAddContainerItem(container, ID_DO_ITEM, 1) doAddContainerItem(container, ID_DO_ITEM, 1) doAddContainerItem(container, ID_DO_ITEM, 1) setPlayerStorageValue(cid,11554,1) else doPlayerSendTextMessage(cid,22,"It is empty.") end elseif getPlayerVocation(cid) == 3 then if queststatus == -1 then doAddContainerItem(container, ID_DO_ITEM, 1) doAddContainerItem(container, ID_DO_ITEM, 1) doAddContainerItem(container, ID_DO_ITEM, 1) doAddContainerItem(container, ID_DO_ITEM, 1) setPlayerStorageValue(cid,11554,1) else doPlayerSendTextMessage(cid,22,"It is empty.") end elseif getPlayerVocation(cid) == 4 then if queststatus == -1 then doAddContainerItem(container, ID_DO_ITEM, 1) doAddContainerItem(container, ID_DO_ITEM, 1) doAddContainerItem(container, ID_DO_ITEM, 1) doAddContainerItem(container, ID_DO_ITEM, 1) setPlayerStorageValue(cid,11554,1) else doPlayerSendTextMessage(cid,22,"It is empty.") end end end caso queria pode fazer a quest checar se o player tem cap
-
lol <movevent type="AddItem" tileitem="1" itemid="id do lixo" event="script" value="dustbin.lua" /> function onAddItem(moveitem, tileitem, position) if isMovable(uid) == true then doRemoveItem(moveitem.uid, 1) end end Em tese não tem erro... qualquer item q for movel e ir para lá ele some... apesar q adicionar item lá ele some tem algum erro de sintaxe no console do ot ?
-
Confudi as linguagens auhuaha function onAddItem(moveitem, tileitem, position) if isMovable(uid) == true then doRemoveItem(moveitem.uid, 1) end end
-
Action Que Bloqueia A Entrada De Mais De 5 Acc Manager
tópico respondeu ao Mimow de tibiaa4e em Lixeira Pública
Existe mais isso é em c++ POis o acc manager é considerado GM Então ele não funciona com o allowclones... -
[pedido] Talkaction Que Teletransporta O Palyer
tópico respondeu ao yasha de tibiaa4e em Lixeira Pública
em talkactions/scripts tele.lua function onSay(cid, words, param) gopos ={x=111, y=222, z=7} doTeleportThing(cid, gopos, TRUE) doSendMagicEffect(gopos, CONST_ME_TELEPORT) doSendMagicEffect(cid, CONST_ME_TELEPORT) end gopos é a coordenada pra onde ele vai em talkactions.xml <talkaction words="palavra" event="script" value="telelua" /> Espero que goste -
Olha ja tem funções assim setItemAttack(uid, attack) setItemExtraAttack(uid, extraattack) setItemDefense(uid, defense) setItemArmor(uid, armor) setItemExtraDefense(uid, extradefense) setItemAttackSpeed(uid, attackspeed) setItemHitChance(uid, hitChance) setItemShootRange(uid, shootRange) e seus respectivos sets getItemAttack(uid) getItemExtraAttack(uid) getItemDefense(uid) getItemExtraDefense(uid) getItemArmor(uid) getItemAttackSpeed(uid) getItemHitChance(uid) getItemShootRange(uid) agora para ele mudar o item para o + 1 poderia ser assim + - setItemArmor(itemEx, getItemArmor(itemEx)+1) No caso o itemEx é o segundo item usado... Veja se funciona
-
olha um q pode funcionar em movements/scripts dustbin.lua function onAddItem(moveitem, tileitem, position) if isMovable(uid) = true then doRemoveItem(moveitem.uid, 1) end end e em movements.xml <movevent type="AddItem" tileitem="1" itemid="id do lixo" event="script" value="dustbin.lua" /> se não funcionar manda uma pm pra mim ou espere Estou sem internet
-
[Arquivado]Script de Sistema De Montaria
tópico respondeu ao Diogo de tibiaa4e em Noticias - Arquivo
hm achei bom do jeito que você fez Eu sei muito pouco de c++ + não ficaria melhor em c++ do que em lua ? A ultima vez que entendia uma source era na 7.92 e na epoca era + facil codificar lá do que em lua (até porque o zorzin sabia + c++ do q eu sabia de lua) Agora vou explicar pq em c++ Tipo antigamente quando se metia um while de grande tempo no caso dele apanhar O ot travava e dava uns lag lgl... Só prescisamos checar isso agora... Essa quarta é a ultima prova do trimestre ai eu vejo se dou uma mão -
simples Na porta que irá abrir coloque no map editor em actionid o numero da chave... E quando a chave for adicionada por quest ou npc mande ela ter o action id da chave... Por exemplo chave 8370 ActionId da porta 8370 ActionId da chave 8370 Lembrando que só a chave que o npc adiciona que terá essa capacidade
-
action [action] Sistema Vip Por Sql Para Tfs V1.0
tópico respondeu ao Lukeskywalker de tibiaa4e em Actions e Talkactions
Uia boa ideia... Porém o povo brasileiro é meio preguiçoso e acho que não irá rolar =/ Porém e um sistema mais seguro e pode ser adquirido pelo site por um codigo php simples -
@up Hehe depois eu vejo se faço mais... Tipo to sem net ainda e essa semana ainda tem 2 provas e minha viagem Sobre o helmet ainda deve tar com uns bug ou eles mudaram a sintaxe
-
Bem depois de muita demora minha =/ Aqui estão as respostas... <Eu minha ideia inicial era se basear nos scripts aqui postados, como so o tozão participo da criação vou me basear no dele na maioria dos scripts e esses serão postados os devidos creditos. Criação de Scripts 1- Bem o Tozão fez até mais do que eu pedi, se fosse uma empresa ele seria um otimo funcionario... O dele está perfeito, aqui está um mais simples para iniciantes function onUse(cid, item, frompos, item2, topos) local bridgepos = {x=926, y=958, z=8, stackpos=0} local bridgepos2 = {x=926, y=958, z=8, stackpos=0} local bridgepos3 = {x=926, y=958, z=8, stackpos=0} local bridgepos4 = {x=926, y=958, z=8, stackpos=0} local getbridge = getThingfromPos(bridgepos) local getbridge2 = getThingfromPos(bridgepos2) local getbridge3 = getThingfromPos(bridgepos3) local getbridge4 = getThingfromPos(bridgepos4) if item.uid == 8551 and item.itemid == 1945 then doCreateItem(493,1,bridgepos) doCreateItem(493,1,bridgepos2) doCreateItem(493,1,bridgepos3) doCreateItem(493,1,bridgepos4) doTransformItem(item.uid,item.itemid+1) elseif item.uid == 8551 and item.itemid == 1946 then doCreateItem(1284,1,bridgepos) doCreateItem(1284,1,bridgepos2) doCreateItem(1284,1,bridgepos3) doCreateItem(1284,1,bridgepos4) doTransformItem(item.uid,item.itemid-1) else doPlayerSendCancel(cid,"Sorry, not possible.") end return 1 Ai eu faço o script simples, porém funcional... Esse ai não expulsa as pessoas da ponte, e sinceramente não sei o que acontece se tiver um infeliz na ponte 2- Bem esse até era simples, só quem não tem experiencia copiar ou no minimo se basear em um script "descente" de quest... O do Tozão teve as exigencias então está aqui o correto -------------Script made by Tozao(for ta4e competition)------------ ----------------Created for version 8.4------------------- function onUse(cid, item, frompos, item2, topos) -----------------chest1--------------- if item.uid == 20005 then if getPlayerStorageValue(cid,5555) == -1 then if getPlayerFreeCap(cid) >= 80 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have found a Demon Armor.") doPlayerAddItem(cid,2494,1) setPlayerStorageValue(cid,5555,1) else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"You have found a demon armor. Weighing 80.00 oz it is too heavy.") end else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"It is empty.") end -----------------chest2--------------- elseif item.uid == 20006 then if getPlayerStorageValue(cid,5555) == -1 then if getPlayerFreeCap(cid) >= 42 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have found a Magic Sword.") doPlayerAddItem(cid,2400,1) setPlayerStorageValue(cid,5555,1) else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"You have found a magic sword. Weighing 42.00 oz it is too heavy.") end else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"It is empty.") end -----------------chest3--------------- elseif item.uid == 20007 then if getPlayerStorageValue(cid,5555) == -1 then if getPlayerFreeCap(cid) >= 99 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have found a Stonecutter's Axe.") doPlayerAddItem(cid,2431,1) setPlayerStorageValue(cid,5555,1) else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"You have found a stonecutter axe. Weighing 99.00 oz it is too heavy.") end else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"It is empty.") end -----------------chest4--------------- elseif item.uid == 20008 then if getPlayerStorageValue(cid,5555) == -1 then if getPlayerFreeCap(cid) >= 43 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have found a Annihilator Bear.") doPlayerAddItem(cid,2326,1) setPlayerStorageValue(cid,5555,1) else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"You have found a annihilator bear. Weighing 43.00 oz it is too heavy.") end else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"It is empty.") end -----------------porta da sala pequena--------------- elseif item.uid == 20009 and item.itemid == 5114 then if getPlayerStorageValue(cid, 5555) == 1 then if getPlayerVocation(cid) > 4 then doTransformItem(item.uid, item.itemid+1) doTeleportThing(cid,frompos) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Only promoted players may enter here.") end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don\'t complete the quest.") end -----------------chest da sala pequena--------------- elseif item.uid == 20010 then if getPlayerStorageValue(cid,5556) == -1 then if getPlayerFreeCap(cid) >= 18.40 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have found a bag.") container = doPlayerAddItem(cid,1991,1) doAddContainerItem(container,2160,100) doAddContainerItem(container,2123,1) setPlayerStorageValue(cid,5556,1) else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"You have found a bag. Weighing 18.40 oz it is too heavy.") end else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"It is empty.") end return TRUE end end 3- Bem o primeiro postado aqui está quase correto, eu acredito que o isinArray não funcione com essa função... A ultima vez que usei essa função funcionava perfeitamente nessa sintaxe aqui -- Baseado no do Tozão-- -- Fixado por Ta4e-- function onUse(cid, item, frompos, item2, topos) if item.uid == 20015 and item.itemid == 5114 then if getPlayerSex(cid) == 0 then if getPlayerSlotItem(cid,2) == 2130 then doTransformItem(item.uid, item.itemid+1) doTeleportThing(cid,frompos) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don\'t have the golden amulet.") end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Aqui não entra homen.") return TRUE end elseif item.uid == 20016 and item.itemid == 5114 then if getPlayerSex(cid) == 1 then if getPlayerSlotItem(cid,2) == 2142 then doTransformItem(item.uid, item.itemid+1) doTeleportThing(cid,frompos) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don\'t have the ancient amulet.") end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Desculpe, aqui é uma boate gay, não aceitamos mulheres.") end end end 4- Mais uma vez o dele está correto. ------------Script made by Tozao(for ta4e competition)------------ ----------------Created for version 8.4------------------- function onUse(cid, item, fromPosition, itemEx, toPosition) coalbasin1 = {x=1027, y=1021, z=7, stackpos=STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE} coalbasin2 = {x=1026, y=1022, z=7, stackpos=STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE} coalbasin3 = {x=1027, y=1023, z=7, stackpos=STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE} coalbasin4 = {x=1028, y=1022, z=7, stackpos=STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE} food1 = getThingFromPos(coalbasin1) food2 = getThingFromPos(coalbasin2) food3 = getThingFromPos(coalbasin3) food4 = getThingFromPos(coalbasin4) if item.actionid == 20020 and item.itemid == 1945 then if getPlayerLevel(cid) >= 50 then if food1.itemid == 2787 and food2.itemid == 2789 and food3.itemid == 2792 and food4.itemid == 2796 then doRemoveItem(food1.uid) doRemoveItem(food2.uid) doRemoveItem(food3.uid) doRemoveItem(food4.uid) setPlayerStorageValue(cid,2479,1) doPlayerSendTextMessage(cid,25, "Congratulations, now you may pass on the magic door.") doTransformItem(item.uid,item.itemid+1) else doPlayerSendTextMessage(cid,26, "Sorry, you don\'t have all foods, you need a white, brown, dark and green mushrooms.") end else doPlayerSendTextMessage(cid,26, "Sorry, you need get level 50.") end elseif item.actionid == 20020 and item.itemid == 1946 then doTransformItem(item.uid,item.itemid-1) end return TRUE end 5- Bem esse eu ja imaginava ser o mais "dificil" O seu tozão eu vi apenas 1 erro de sintaxe que era apenas para level 9 fazer e uma pessoa com vocation e não promotion (isso esqueci de falar) Porém são erros simples e normais. Sobre ele abrir normalmente isso acontece porque você chamou algo fora da função da principal (os vetores e matrizes) Isso é um bug desde a 8.4, que infelizmente os developers ainda não arrumaram... Pode ser corrigido fazendo uma função simples em c++ (que não possuo aqui =/). Ou seja ainda pode ser seu script mais perfeito que você fez xD Eu por exemplo criei uma função maravilhosa para quests e esse erro não possibilita o uso dela. -------------Script made by Tozao(for ta4e competition)------------ ----------------Created for version 8.4-------------------- local VOC_DRUID = {2,6} local VOC_SORC = {1,5} local VOC_KINA = {4,8} local VOC_PALLY = {3,7} local prizes = {[VOC_DRUID] = 2182, [VOC_PALLY] = 2456, [VOC_SORC] = 2190, [VOC_KINA] = 2409} function onUse(cid, item, frompos, item2, topos) local vocation = getPlayerVocation(cid) local itemweight = getItemWeightById(prizes[vocation],1) local itemname = getItemNameById(prizes[vocation],1) pos = getCreaturePosition(cid) health = getCreatureHealth(cid) if item.uniqueid == 20025 then if getPlayerLevel(cid) == 9 then if vocation >= 1 and vocation <= 4 then if getPlayerStorageValue(cid,7777) == -1 then if getPlayerFreeCap(cid) >= itemweigth then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have found a " .. itemname .. ".") doPlayerAddItem(cid,prizes[vocation],1) setPlayerStorageValue(cid,7777,1) else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"You have found a demon helmet. Weighing " .. itemweight .. " oz it is too heavy.") end else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"You already made this quest.") doPlayerAddHealth(cid, health -1) doSendMagicEffect(pos,12) end else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Sorry, you need a vocation.") end else doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Sorry, you need get level 9.") end return TRUE end end Bem, Obrigado ao Tozão por ter participado dessa "prova" e pelo jeito você está até mais a frente desse nivel de script COrreção de Erros Aqui tivemos dois "alunos", eram erros simples que só pediam atenção 1- No caso dependendo da versão existiam dois erros... Primeiro a função doPlayerSay não existe mais sendo agora doCreatureSay e a outra é por causa dos numeros das falas. O TFS constantemente muda isso, e devemos acostumar a usar as variaveis do Const.lua function onUse(cid, item, frompos, item2, topos) sorte = math.random(1,6) pos = getPlayerPosition(cid) if item.itemid == 6567 then doSendMagicEffect(pos,22) if sorte == 1 then doCreatureSay(cid,'Ho ho ho!',TALKTYPE_ORANGE_1) elseif sorte == 2 then doCreatureSay(cid,'Jingle bells, jingle bells..',TALKTYPE_ORANGE_1) elseif sorte == 3 then doCreatureSay(cid,'Have you been naughty?',TALKTYPE_ORANGE_1) elseif sorte == 4 then doCreatureSay(cid,'Have you been nice?',TALKTYPE_ORANGE_1) elseif sorte == 5 then doCreatureSay(cid,'Merry Christmas!',TALKTYPE_ORANGE_1) elseif sorte == 6 then doCreatureSay(cid,'Can you stop squeezing me now... I m starting to feel a little sick.',TALKTYPE_ORANGE_1) end end end 2- Essa era facil... function onUse(cid, item, fromPosition, itemEx, toPosition) if itemEx.itemid == 2782 then doTransformItem(itemEx.uid, 2781) doDecayItem(itemEx.uid) return TRUE end return destroyItem(cid, itemEx, toPosition) end 3- Essa foi meio uma sacanagem minha Não tinha erros de sintaxe e sim que o autor imbecil (eu msm) falo o maximo de caracteres para o animated text... A string em LUA é usada por ' e " então se você usar aspas duplas não afetará a simples... Eu cai nessa a uns dias atrás e não podia deixar escapar xD O usuario Radamanthis conseguiu essa 4 - O usuario Tozão encontrou uma maneira de burlar o erro que era o case sensitivy (essa parte não fui q inventei foi um amigo do msn que pediu para eu colocar essa ai esqueci o erro o0) function onUse(cid, item, fromPosition, itemEx, toPosition) newnPosition = {x=1904, y=1006, z=8} if item.uid == 32194 then doTeleportThing(cid,newnPosition) doSendMagicEffect(newnPosition,10) else return 0 end return 1 end 5 e 6 - Esse como falei não tem certo e errado. O erro de sintaxe era um end faltando ao final para fechar o function Esse script ja tinah ele no Xtibia postado por mim com ele diminuido... O do Tozão eu bati o olho e não vi erros também... Espero que tenha sido proveitoso ou no minimo legal isso... Claro que pensei q teria mais usuarios participando Agradeço aos que participaram e esperem os proximos tutoriais, quando eu acabar a segunda semana de prova (essa) Voltarei a fazer os ultimos tutoriais
-
semana q vem mal mesmo essa semana foi prova na ETEC e se eu estudasse mais eu ficaria cego Pelo menos as notas foram boas (8,5 a menor!!) Eu vou arrumar elas hoje e quando tiver acesso posto Mais pelo que vi a suas estão certas...
-
As Musicas Mais Odiadas Da De Hje Em Dia
tópico respondeu ao noobdoxtibia de tibiaa4e em Lixeira Pública
Sinceramente eu curto só algumas musicas como uns Pop, rock Mais não suporto FUNK, pois é musica apelativa so tem bunda, palavrão e temas toscos... O resto eu aceito + funk eh MARA!! -
Provavelmente é algum monstro novo não ? O itemid dele não está como moveable... você deve fixar isso em um item editor... Se sanou sua Dúvida reporte como o topico como Dúvida Sanada
-
OLha isso está vindo direto da svn E sinceramente os programadores c++ do forum dificilmente dão suporte a isso (até por que são pouquissimos) Então tente achar um codigo na internet ou procurar um programador c++ por PM
-
@up Eu uso notepad ++ rlz... Eu vou postar as respostas... Até esqueci disso hehe
-
Tente pegar uma arma feita e se baseie no script da exori em spells Ela contem a formula onSkilllevel ou algo parecido se você conseguir postar as duas aqui eu tentarei te ajudar... Poderá demorar um tempo pois estou sem conexão
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.