
Tudo que xWhiteWolf postou
-
como retornar a descrição do item
utilidade pública getItemDescriptionsById(itemid)
-
(Resolvido)Monster falar uma mensagem e depois de 3 segundos dar HS
q erro q deu no console?
-
[Spell] Berserker Frenesi
gostei da idéia.. só tenho umas dúvidas, local exhaust = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhaust, CONDITION_PARAM_SUBID, 2) setConditionParam(exhaust, CONDITION_PARAM_TICKS, time) setCombatCondition(combat, exhaust) você saberia me explicar como essa condition funciona? Oque é subid, porque vc atribuiu o valor 2? o tempo de exhaust vai ser igual ao tempo da magia?? Isso significa q durante a magia eu não poderei usar nenhum tipo de spell ou é aquele tipo de exhaust que só vale pra spells do mesmo tipo (agressive/non-agressive)? Ou ainda, seria um exhaust só pra própria magia?
- (Resolvido)Sistema de Mineração
-
[pedido] Script balanceamento de Teams em WAR/Hardcore
se a função é a onLogin ele vai executar ao logar. Teria que ter um checador que se o player morrer ou deslogar ele seja retirado da table teamX e ao logar a checagem seria refeita, vendo que o timeX estaria com menos players doque o timeY e inserindo o player novamente no timeX. Eu pessoalmente não sei como fazer isso mas se a function é onLogin acho q dá pra fazer uma onDeath ou uma onThink pra ficar constantemente checando se #teamX > #teamY
-
Outfits
qnd vc mesmo resolver, posta a resolução e marca a sua resposta como "melhor resposta" pra ficar como resolvido.
-
Run Event
Muito obrigado pela contribuição.. significa muito pro Tibia King.
-
Outfits
desculpa a demora pra responder amigo: Se você quiser que a nobleman seja por quest, faça assim: <outfit id="5" premium="yes"> <list gender="0" lookType="140" name="Noblewoman"/> <list gender="1" lookType="132" name="Nobleman"/> </outfit> /\ nobleman normal (igual ao seu script) <outfit id="5" premium="yes" storageId="1415" storageValue="1"> <list gender="0" lookType="140" name="Noblewoman"/> <list gender="1" lookType="132" name="Nobleman"/> </outfit> nobleman editada.. somente players que tenham o storage 1415 com valor 1 conseguirão utilizar essa outfit
-
Magia que Empurra
remove isso do script setCombatParam(combat, COMBAT_PARAM_EFFECT, 2) agora procura essa parte: if getPlayerLookDir(cid) == 0 then signal = {-1,1,1,2} elseif getPlayerLookDir(cid) == 1 then signal = {1,-1,2,1} elseif getPlayerLookDir(cid) == 2 then signal = {1,-1,1,2} else signal = {-1,1,2,1} end else signal = {-1,1,1,2} end aqui ele tá pegando a direção do player... como vc quer que a magia solte um efeito na frente dele é só adicionar posições de acordo com a direção que ele tá olhando, sendo que NORTH = 0 EAST = 1 SOUTH = 2 WEST = 3 local pos = getThingPos(uid) então se a direção que ele ta olhando for 0, o SQM na frente dele vai ser effectpos = {x=pos.x+1,y=pos.y,z=pos.z} se for 1 a posição será effectpos = {x=pos.x,y=pos.y+1,z=pos.z} se for 2 a posição será effectpos = {x=pos.x-1,y=pos.y,z=pos.z} se for 3, a posição será effectpos = {x=pos.x,y=pos.y-1,z=pos.z} daí é só colocar pra mandar o magic effect que vc quiser na posição effectpos.
-
(Resolvido){Pedido} Modificações em Scripts
1) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não possui dardos.") return false end muda o return false pra return true. 2) -- CONFIGURAÇÕESporcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) tipoaura = math.random(30,33) -- número do efeito da aura (efeito normal, /z do jogo) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendMagicEffect(atual, tipoaura) else doSendMagicEffect(atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendMagicEffect(atual, tipoaura) elseif(i<8) then doSendMagicEffect(atual, tipoaura) end if(i<=8) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) else return efeitosAura(1,0,cid) end else return TRUE end end --Função principal function onLogin(cid) return efeitosAura(1,tempo/8,cid) end /\ cura a vida e solta os efeitos 30 a 33 -- CONFIGURAÇÕES porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantmana = 10 -- porcentagem da mana máxima que cada cura irá curar. (No caso, irá curar 10% da mana máxima cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) tipoaura = math.random(30,33) -- número do efeito da aura (efeito normal, /z do jogo) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureMana(cid)<getCreatureMaxMana(cid)) then doCreatureAddMana(cid, getCreatureMaxMana(cid)/quantmana) if(i<=8 and i>1) then doSendMagicEffect(atual, tipoaura) else doSendMagicEffect(atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendMagicEffect(atual, tipoaura) elseif(i<8) then doSendMagicEffect(atual, tipoaura) end if(i<=8) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) else return efeitosAura(1,0,cid) end else return TRUE end end --Função principal function onLogin(cid) return efeitosAura(1,tempo/8,cid) end /\ cura mana e solta os efeitos 30 a 33 (se quiser muda no math.random -- CONFIGURAÇÕES porcentagem = 40 -- chance de dar haste em cada volta da aura, em porcentagem tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) efeitocura = 49 -- número do efeito quando der haste (efeito de posição fixa, pode ser identificado com /z no jogo) duration = 10 -- segundos que vai durar o haste da aura. (coloque um tempo baixo porque ela vai ficar se repetindo. local condition = createConditionObject(CONDITION_HASTE) setConditionParam(condition, CONDITION_PARAM_TICKS, duration*1000) setConditionFormula(condition, 1.7, -36, 1.7, -36) -- Função que chama a aura function efeitosAura(i,tm,cid) tipoaura = math.random(12,14) -- número do efeito da aura (efeito normal, /z do jogo) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureCondition(cid, condition) == false) then doAddCondition(cid, condition) if(i<=8 and i>1) then doSendMagicEffect(atual, tipoaura) else doSendMagicEffect(atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendMagicEffect(atual, tipoaura) elseif(i<8) then doSendMagicEffect(atual, tipoaura) end if(i<=8) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) else return efeitosAura(1,0,cid) end else return TRUE end end --Função principal function onLogin(cid) return efeitosAura(1,tempo/8,cid) end /\ da velocidade a cada rodada de aura por 10 segundos.. os efeitos são um math.random de 12 até 14 (12, 13, 14)
-
[pedido] contador de frags
isso daqui tb dá pra colocar no server e acho q fica melhor doque esse sistema de broadcast aí http://www.tibiaking.com/forum/topic/33143-pedido-contagem-de-frags-no-look/
-
[pedido] Script balanceamento de Teams em WAR/Hardcore
dá uma olhada nisso daqui e vê se vc consegue extrair a parte que separa os times pra colocar numa function onLogin: http://www.tibiaking.com/forum/topic/16699-sistema-battlefield-event/
- (Resolvido)Sistema de Mineração
-
(Resolvido)[PEDIDO] Tile que Passa só se tiver GUILD
function onStepIn(cid, item, position, fromPosition) if getPlayerGuildId(cid) > 0 then doPlayerSendTextMessage(cid, 27, "Voce entrou, sua guild é a "..getPlayerGuildName(cid)..".") return true else doPlayerSendTextMessage(cid, 27, "Voce não possue guild, portanto não pode entrar nessa zona.") doTeleportThing(cid, fromPosition) return false end end
-
Magia sem Exausted
dei uma vizualiada rápida mas o script não me parece errado... tá escrito exhaustian> exhaustian="3000" o correto é "exhaustion"
- (Resolvido)Sistema de Mineração
-
[pedido] Script balanceamento de Teams em WAR/Hardcore
calma cara, isso é bem dificil de fazer e não é qualquer um que consegue. Dá uma olhada em scripts de Team Battle porque sua dúvida tá bem complexa e eu não acho q alguém vá ser capaz de fazer isso dai que vc quer sem nenhum bug
- [pedido]script reset diferente
- KNJ OTS, Custom
-
[Boss Skill] Aegis of Immortal
fico feliz que vcs tenham curtido... se tudo der certo meu próximo tópico vai ser sobre uma ideia que eu tive com base no WoE, onde o boss seria um item que conforme perde vida vai mudando o looktype dele ou então vai ser uma quest que eu pensei a muito tempo atrás mas ainda não consegui tirar do papel.
-
[Boss Skill] Aegis of Immortal
Fala galera do TK, hoje vim trazer pra vocês um script de um server bem famoso, trata-se de nada mais e nada menos doque a Aegis of Immortal do Fox World. Quase nenhum OTserver consegue me deixar com vontade de jogar, mas se tem um que chegou bem próximo foi o Fox e o motivo é a criatividade dos caras. É muito fácil aprender lua e ser um ótimo scripter mas ter criatividade pra criar esse tipo de script é bem mais raro. Sem mais delongas vou apresentar a idéia do script e logo em seguida ensinar a instalar no seu servidor. Aegis of the Immortal Descrição: É obtida 1 carga ao vencer o boss Aegis (aparece em invasões). Com esta técnica, o jogador ganha a aura do boss, e se morrer é teleportado para a Aegis Dimension, e após 3 segundos volta para o lugar que estava, com life e mana full como se não tivesse sido tocado. (limite de 1 carga) Tipo: (B.Skill) Vocações: All Vocations Elemento: n/a fonte: site do fox Well, o script é bem simpleszinho mas eu apanhei pra caramba pra fazer ele funcionar certinho (acredito que nem o script dos caras do Fox funcione da maneira correta, mas esse daqui vai funcionar) Antes de tudo você tem que criar uma área no seu map editor e colocar ela inteira como no-pvp e no-logout. Essa vai ser a área que você vai ser teleportado, será a sua "Aegis Dimension". Feito isso você vai precisar adicionar essa linha em creaturescripts.xml: <event type="statschange" name="reborn" script="reborn.lua"/> obs: eu levei muito tempo tentando fazer por onPrepareDeath mas aparentemente essa função não funciona tão bem quanto statschange e acabava chamando a si mesma repetidas vezes. agora crie um arquivo chamado reborn.lua na pasta creaturescripts\scripts e coloque isso dentro dele: Agora você só tem que adicionar essa linha no creaturescripts\scripts\login.lua (de preferencia antes do ultimo return true) --- BOSS SKILLS ---- registerCreatureEvent(cid, "reborn") if getPlayerStorageValue(cid, 19332) == -1 then setPlayerStorageValue(cid, 19332, 0) end Agora seu server possui a Aegis of Immortal e você pode configurar essa skill passiva de diferentes maneiras: 1) Pode ser uma quest que dá como prêmio X quantidades dessa skill 2) Um npc que vende X quantidades da skill 3) Um item que ao ser equipado ativa a skill 4) Um boss que vc mata e ganha quantidades dela 5) Um bonus em algum evento 6) Um item de shop etc. Tudo que vc precisa fazer é criar um script que dê o storage 19332, o valor do storage é o numero de vezes que vc vai utilizar a skill. aqui tem um exemplo de uma quest que ganha 5 charges da Aegis of Immortal: function onUse(cid, item) local storage = 19332 if getPlayerStorageValue(cid, storage) ~= 5 then doPlayerSetStorageValue(cid, storage, 5) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have habilited your [BOSS SKILL]") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your [BOSS SKILL] is already with "..getPlayerStorageValue(cid, storage).." charges.") end return true end e aqui tem algumas fotos de como fica no seu server: Espero que vcs tenham gostado.. Vou dar 20% de Crédito pro Kilua porque sem o tutorial dele de addEvent isso daqui não seria possível e 30% pro pessoal do Fox por terem me dado a idéia do script. EDIT: Fiz um monstro q dá essa skill ao morrer, só que eu inovei um pouquinho e fiz ele tendo a skill, ou seja, vc tem que matar ele um numero X de vezes pra valer de verdade kkk A graça é que esse numero de X é inerente ao player (fiz por storage), então se um grupo de 10 pessoas for fazer e cada hora uma matar, serão (X+1) vezes no mínimo auhauhauh Só que como ele não dá loot e o unico premio dele é a skill pra quem matar X vezes, então o pessoal dá KS mesmo. Enfim, aproveitem: creaturescripts\scripts\aegis.lua local config = { storagekill = 19500, --- storage q conta a quantidade de kills storageaegis = 19332, --- storage da skill tempo = 5, -- tempo até ele renascer times = 2, --- quantidade de vezes que tenho que matar charges = 1, --- cargas da skill q ganha ao matar definitivamente effect1 = 66, -- efeito ao morrer effect2 = 10 --- efeito ao renascer } function onKill(cid, target, lastHit) local killed = getPlayerStorageValue(cid,config.storagekill) local skill = getPlayerStorageValue(cid, config.storageaegis) if isMonster(target) and getCreatureName(target):lower() == 'aegis' then if killed < config.times then doCreatureSay(target, "I'll be back mortal...", 20) doSendMagicEffect(getThingPos(target), config.effect1) setPlayerStorageValue(cid, config.storagekill, killed+1) addEvent(doSendMagicEffect, 1000*config.tempo, getThingPos(target), config.effect2) addEvent(doCreateMonster, 1000*config.tempo, "Aegis", getCreaturePosition(target), true) end if killed >= config.times then setPlayerStorageValue(cid, config.storagekill, 0) if skill < config.charges then doPlayerSendTextMessage(cid,22,"Congratulations, you just killed "..getCreatureName(target).." and earned Aegis of Immortal skill!") setPlayerStorageValue(cid, config.storageaegis, config.charges) end end end return true end creaturescripts\scripts\login.lua registerCreatureEvent(cid, "aegis") if getPlayerStorageValue(cid, 19500) == -1 then setPlayerStorageValue(cid, 19500, 0) end creaturescripts.xml <event type="kill" name="aegis" script="aegis.lua"/> monster\aegis.xml <?xml version="1.0" encoding="UTF-8"?> <monster name="Aegis" nameDescription="Aegis, the immortal" race="blood" experience="0" speed="605" manacost="0"> <health now="100000" max="100000"/> <look type="287" head="0" body="0" legs="0" feet="0" corpse="0"/> <targetchange interval="2000" chance="15"/> <strategy attack="60" defense="5"/> <flags> <flag summonable="0"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag targetdistance="1"/> <flag runonhealth="0"/> </flags> <attacks> <attack name="melee" interval="2000" skill="210" attack="260"/> <attack name="lifedrain" interval="1000" chance="20" range="3" min="-550" max="-1050"/> <attack name="firecondition" interval="1000" chance="7" range="2" min="-800" max="-1200"> <attribute key="shootEffect" value="fire"/> <attribute key="areaEffect" value="yellowspark"/> </attack> <attack name="physical" interval="1000" chance="7" radius="6" target="0" min="-250" max="-750"> <attribute key="areaEffect" value="explosion"/> </attack> <attack name="death" interval="1000" chance="50" radius="5" target="0" min="-200" max="-500"> <attribute key="areaEffect" value="mortarea"/> <attribute key="shootEffect" value="suddendeath"/> </attack> <attack name="firefield" interval="1000" chance="4" radius="5" target="0"> <attribute key="areaEffect" value="explosion"/> </attack> <attack name="fire" interval="1000" chance="34" range="7" radius="7" target="1" min="-350" max="-850"> <attribute key="shootEffect" value="fire"/> <attribute key="areaEffect" value="firearea"/> </attack> <attack name="fire" interval="1000" chance="13" length="8" spread="0" min="-500" max="-1000"> <attribute key="areaEffect" value="explosion"/> </attack> <attack name="fire" interval="1000" chance="10" length="8" spread="3" min="-300" max="-1500"> <attribute key="areaEffect" value="firearea"/> </attack> </attacks> <defenses armor="165" defense="150"> <defense name="healing" interval="1000" chance="25" min="2000" max="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="speed" interval="1000" chance="10" speedchange="1800" duration="4000"> <attribute key="areaEffect" value="redshimmer"/> </defense> </defenses> <immunities> <immunity physical="0"/> <immunity energy="1"/> <immunity fire="1"/> <immunity poison="0"/> <immunity lifedrain="1"/> <immunity paralyze="1"/> <immunity outfit="1"/> <immunity drunk="1"/> <immunity invisible="1"/> </immunities> <voices interval="5000" chance="50"> <voice sentence="Poor innocent, I CAN'T DIE HAHAHAHAAHA"/> <voice sentence="Your soul will be mine!"/> <voice sentence="MUAHAHAHAAHAHA, I TOLD YOU" yell="1"/> </voices> </monster> OBS: edite ele porque eu coloquei ele muito forte, com muita vida e com muita recuperação de vida. monster\monsters.xml <monster name="Aegis" file="aegis.xml"/>
- (Resolvido)Erro no Script
-
(Resolvido)Erro no Script
local storage_quest = 90000 function onStepIn(cid, item, position, fromPosition) if getPlayerStorageValue(cid, storage_quest) < 1 then doTeleportThing(cid, fromPosition) doPlayerSendCancel(cid, "Você não completou a Cyber quest!") doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) end doPlayerSendTextMessage(cid, 27, "Você não completou a Cyber quest! .") return true end deleta esse arquivo que vc tem, cria um novo, adiciona esse daqui nele e salva como .lua
-
Spellbook e !spells
vc tá ligado q se vc for GM vai mostrar todas as spells né... se mesmo num char q nao seja GM esteja mostrando todas as spells então sugiro vc trocar seu script por esse daqui: function onUse(cid, item, fromPosition, itemEx, toPosition) local count = getPlayerInstantSpellCount(cid) local text = "" local t = {} for i = 0, count - 1 do local spell = getPlayerInstantSpellInfo(cid, i) if spell.level ~= 0 then if spell.manapercent > 0 then spell.mana = spell.manapercent .. "%" end table.insert(t, spell) end end table.sort(t, function(a, b) return a.level < b.level end) local prevLevel = -1 for i, spell in ipairs(t) do local line = "" if prevLevel ~= spell.level then if i ~= 1 then line = "\n" end line = line .. "Spells for Level " .. spell.level .. "\n" prevLevel = spell.level end text = text .. line .. " " .. spell.words .. " - " .. spell.name .. " : " .. spell.mana .. "\n" end doShowTextDialog(cid, item.itemid, text) return TRUE end
- (Resolvido)Erro no Script