Ir para conteúdo
  • Cadastre-se

xWhiteWolf

Héroi
  • Total de itens

    3604
  • Registro em

  • Última visita

  • Dias Ganhos

    154

Histórico de Curtidas

  1. Gostei
    xWhiteWolf recebeu reputação de paulo thush em New Library v. 1.2   
    Fala galera, hoje vim trazer pra vocês uma nova biblioteca de funções que eu venho desenvolvendo, pretendo ir atualizando esse tópico constantemente sempre adicionando funções novas e explicando a utilização delas. Algumas funções que eu coloquei aqui estão presentes na OTAL também, porém algumas eu fiz pequenas correções de forma que essa lib poderia facilmente substituir a OTAL sem grandes problemas (pelo menos se você utilizava apenas as funções básicas da otal)
    Todas as funções que não tem -- nome do autor do lado dela foram feitas por mim, xWhiteWolf ou Night Wolf (NW). O restante delas são créditos dos devidos autores, apenas coloquei pois considero funções vitais no server de cada um. Crie um arquivo em data/lib chamado 075 - White Wolf Functions.lua e coloque o seguinte código dentro:



     
    Agora eu vou explicar oque cada função faz porque de nada adianta lançar uma lib e não explicar oque ela faz não é mesmo? hahaha
    Obs inicial: quando uma função tiver em seus parametros um [] significa que oque está dentro do colchetes não é um parâmetro obrigatório.



    Como usar: doShowTimeByPos(cid, getCreaturePosition(cid), 20, 20)
    Irá fazer uma contagem regressiva na posição que o player se encontra começando de 20 e mandando a mensagem na mesma cor da fala dos monstros.
    Essa função é bem útil em actions/spells para fazer contagem de tempo em runas como a magic wall e ver quanto tempo falta pra magic wall sumir)

     
    Obs: Espero que ajude bastante pessoas a entender sobre funções, eu utilizei cid como o principal uid das funções nos exemplos mas você pode muito bem utilizar outros uids, fica a critério seu.

    Qualquer dúvida comentem abaixo que eu vou tentar ajudar da melhor maneira.
    Ahhh, isso daí foi testado em 8.54 mas deve funcionar em quase todas as versões que tenham as funções básicas do TFS. 

    EDIT: Pessoal, agora é sério, essa lib tem fácil umas 600 linhas, das quais umas 500 eu devo ter codado sozinho (na mão, linha por linha). Eu tive todo o trabalho de testar cada uma delas e oque eu peço é o mínimo de gratidão e respeito. Se eu te ajudei clique em Gostei, se você tiver alguma dúvida eu to me colocando a disposição de responder qualquer coisa relacionada ao tópico, mesmo que você não saiba nem oque é uma lib apenas venha aqui e escreva sua dúvida.

    EDIT 2: Duas novas funções adicionas, espero que gostem!

    EDIT 3: Três novas funções adicionadas juntamente com suas respectivas explicações.
  2. Curtir
    xWhiteWolf recebeu reputação de Cat em Slot Cassino [0.36~0.4]   
    Olá pessoas, hoje vim trazer pra vocês um script que inicialmente fiz prum trabalho mas acabei gostando muito dele e decidi postar.
    To meio que indo dormir porque daqui a pouquinho tenho aula então vai ser tudo bem rapido e se vcs tiverem alguma dúvida comentem aqui.
     
    Primeiramente façam uma sala parecida com essa aqui:


    Não precisa ser necessariamente assim, mas ela deve ter as 3 bolas, uma alavanca e um local pra botar o dinheiro pras apostas.

    O sistema é baseado naqueles jogos de slot nos cassinos onde você aposta uma quantidade de dinheiro e se tirar 3 peças iguais você recebe o dobro do dinheiro apostado.

    em actions/scripts crie um arquivo chamado cassino.lua e adicione o seguinte dentro dele:
     

    Agora em data/actions/actions.xml adicione:
    <action actionid="16541" script="cassino.lua"/>
    Agora só botar a actionid na lever e configurar tudo de acordo com seu sv (as posições ali em pieces são as posições de cada peça, ou cada bola, se preferir.)
    se quiser fazer várias salas é só copiar o código pra um cassino2.lua e registrar outra tag
    <action actionid="16542" script="cassino2.lua"/>;

    Tá tudo comentado no código então acho que dispensa uma explicação formal de como editar, espero que vocês gostem
    Aqui tem um pequeno gif que o membro @eviltox nos forneceu:


    Abraços do Lobo!
  3. Obrigado
    xWhiteWolf recebeu reputação de Nother em (Resolvido)[PEDIDO] Spell que gira em sua volta   
    não testei mas vê aí 
    local config = { velocidade = 350, -- intervalo entre os giros (quanto menor, mais rapido) hits = 24, -- quantos hits vai dar msg = "Frozen Orb", -- msg ao soltar a spell key = 13871, -- storage que sera utilizado pro cooldown cooldown = 3, -- tempo em segundos de cooldown entre um uso da spell e outro. effect1 = 36, -- efeito de distancia que vai ficar rodando effect3 = 37, -- efeito ao castar a spell effect4 = 43 -- efeito ao acertar a roda no player } --[[Note que a velocidade multiplicada pelo numero de hits deve dar algo proximo de 8550 pra que a magia nao fique ruim ou um efeito acabe antes do outro. Nos valores que eu utilizei eles dao 8400, oque ja eh considerado perto pois temos 200 milisegundos iniciais, 8550 eh o tempo que o item sera removido e coincide com o tempo de duracao do efeito 56 (config.effect2)]] local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 255) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1) function onTargetCreature(cid, target) doSendMagicEffect(getCreaturePosition(target), config.effect4) end setCombatCallback(combat, 4, "onTargetCreature") local arr = { {1, 1, 1}, {1, 3, 1}, -- area que vai acertar a spell enquanto estiver rodando {1, 1, 1}, } local area = createCombatArea(arr) setCombatArea(combat, area) function initEffect(position) for i = 0, 3 do local pos = {x = position.x, y = position.y, z = position.z} local dir = getPosByDir(pos, i) doSendDistanceShoot(position, dir, config.effect1) end return true end function middleEffect(uid, param, lim, count) n = count or 0 if isCreature(uid) and n < lim then for i = 0, 3 do local pos = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z} local pos2 = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z} local dir = getPosByDir(pos, i) local dir2 = getPosByDir(pos2, i + 1 <= 3 and i + 1 or 0) doSendDistanceShoot(dir, dir2, config.effect1) end doCombat(uid, combat, param) addEvent(middleEffect, config.velocidade, uid, param, lim, n + 1) end return true end function endEffect(uid) for i = 0, 3 do local pos = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z} local dir = getPosByDir(pos, i) doSendDistanceShoot(dir, getCreaturePosition(uid), config.effect1) end return true end function onCastSpell(cid, var) if getPlayerStorageValue(cid, config.key) - os.time() <= 0 then setPlayerStorageValue(cid, config.key, os.time() + config.cooldown) local position = getCreaturePosition(cid) doCreatureSay(cid, config.msg, 20) addEvent(endEffect, 8.55 * 1000, uid) doSendMagicEffect(position, config.effect3) initEffect(position) addEvent(middleEffect, 200, cid, var, config.hits) else doPlayerSendCancel(cid, "You're exhausted.") end return true end
  4. Gostei
    xWhiteWolf recebeu reputação de Genadilson Nzinho em (Resolvido)[Spell] Exori Element   
    Se você gostou dá um rep pra eu saber, eu meço o quanto alguém gostou do meu script pelo nivel de rep que o pessoal dá pra ele e aí eu consigo comprar qual é o tipo de script favorito do pessoal (no geral)
  5. Curtir
    xWhiteWolf recebeu reputação de Doidodepeda em [Pedido] comando !status   
    <talkaction log="yes" words="!status" event="script" value="status.lua"/> function onSay(cid, words, param) local level = getPlayerLevel(cid) local vocation = getPlayerVocationName(cid) local health, maxhealth = getCreatureHealth(cid), getCreatureMaxHealth(cid) local mana, maxmana = getCreatureMana(cid), getCreatureMaxMana(cid) local fist, club, sword, axe = getPlayerSkillLevel(cid, 0), getPlayerSkillLevel(cid, 1), getPlayerSkillLevel(cid, 2), getPlayerSkillLevel(cid, 3) local distance, shield, fishing, magic =  getPlayerSkillLevel(cid, 4), getPlayerSkillLevel(cid, 5), getPlayerSkillLevel(cid, 6), getPlayerMagLevel(cid) function getCritical(cid) crit = getPlayerStorageValue(cid, 48913)   if crit < 0 then             crit = 0           end return crit * 0.3 end function getResets(cid) resets = getPlayerStorageValue(cid, 378378)   if resets < 0 then             resets = 0           end return resets end function getItemAbsorve(itemuid) return getItemAttribute(itemuid, "absorbPercentAll") end function getItemMagicIncrease(itemuid) return getItemAttribute(itemuid, "increaseMagic") end local max = 50 local dodgePercent = math.floor(0) local all, increasemagic = 0, 0 for i = 1, 9 do if getPlayerSlotItem(cid, i).uid > 1 then if getItemDodgePercent(getPlayerSlotItem(cid, i).uid) then dodgePercent = dodgePercent + getItemDodgePercent(getPlayerSlotItem(cid, i).uid) end if getItemAbsorve(getPlayerSlotItem(cid, i).uid) then all = all + getItemAbsorve(getPlayerSlotItem(cid, i).uid) end if getItemMagicIncrease(getPlayerSlotItem(cid, i).uid) then increasemagic = increasemagic + getItemMagicIncrease(getPlayerSlotItem(cid, i).uid) end end end if dodgePercent >= max then dodgePercent = max end dodgeTotal = math.floor(dodgePercent*10)/10 local cap = getPlayerFreeCap(cid) local text = "Vocation: "..vocation.."\nLevel: ".. level .."\nHP: ".. health .."/".. maxhealth .."\nMP: ".. mana .."/".. maxmana .."\nReset(s): "..getResets(cid).."\nCapacity: ".. cap .."\n\nDodge Percent: ".. (dodgeTotal) .."%\nCritical: ".. getCritical(cid) .."%\nProtection: ".. all .."%\nMagic Increase: ".. increasemagic .."%\nMagic Level: ".. magic .."\n\nFist: ".. fist .."\nClub: ".. club .."\nSword: ".. sword .."\nAxe: ".. axe .."\nDistance: ".. distance .."\nShield: ".. shield .."\nFishing: ".. fishing .."" doShowTextDialog(cid, 5808, text) return true end não ficou tão bom quanto eu queria (tentei adicionar algumas outras informações mas sem sucesso.. a absorvall e increaseMagic não pegam no meu servidor.. vc tem que pegar o nome delas certinho e adicionar aqui:
    Entretanto eu adicionei a opção de mostrar a porcentagem de critical (do meu sistema de critical), espero que vc goste e qualquer coisa é só remover essa parte aqui: 
    \nCritical: ".. getCritical(cid) .."% lembrando que \n significa pular uma linha.


    print de como fica no server:



  6. Curtir
    xWhiteWolf recebeu reputação de Lurk em Critical Skill System   
    @Hundra olá amigo, obrigado por reportar isso. Fico feliz que vc esteja usando meu sistema contudo não acredito que eu possa te ajudar no primeiro problema, esse sistema tem algumas limitações.. acompanhe comigo:

    a source do tibia funciona +- assim, toda vez que um player/monstro leva dano, esse dano é reduzido de acordo com as defesas dele e aí então que é aplicado o callback onStatsChange.
    Logo a vida que a gente captura ali no value é a vida que ele iria perder. Só que nosso sistema faz o seguinte: ele cancela essa vida que seria perdida e chama um outro ataque criado por script. Esse outro ataque será recebido pela source da mesma forma que o anterior, passará pelas defesas do player e será reduzido antes de ser aplicado.

    Se o player possui muito protect o sistema pode se tornar falho, sim, como você bem observou. Pra ficar perfeito seria necessário fazer alterações na source mas isso é uma coisa que eu evito fazer nos meus códigos pois nem todo mundo possui a source. O próprio tibia tem 1 sistema de critical que é perfeito já e que vem imbutido na maioria das sources > 0.3.6.

    Por conta disso, também não podemos colocar o critical sendo multiplicado pela % de critical que vc possui, aquilo é só a chance.. até daria pra fazer mas por conta dos problemas citados anteriormente o dano ficaria mais variável ainda.
  7. Curtir
    xWhiteWolf recebeu reputação de Lurk em (Resolvido)Spell que da muted no target   
    local condition = createConditionObject(CONDITION_MUTED) setConditionParam(condition, CONDITION_PARAM_TICKS, 2000) local chance = 60 function silence(tar, text)     if(isCreature(tar) == true) then         doSendAnimatedText(getCreaturePosition(tar), text, 215)         doAddCondition(tar, condition)     end     return true end function onCastSpell(cid, var)     local tar = getCreatureTarget(cid)     if hasCondition(tar, CONDITION_MUTED) == true then         return false     else         if isCreature(tar) == true then if math.random(1,100) <= chance then local text = "SILENCE"                     silence(tar, text)      else local text = "MISS" doSendAnimatedText(getCreaturePosition(tar), text, 215) end         else             if isPlayer(cid) == true then                 doPlayerSendCancel(cid, "Silence can be cast only on other creatures.")             end             return false         end     end     return true end <instant name="Narutinho" words="naruto silence" lvl="300" mana="200" prem="1" range="4" needtarget="1" exhaustion="1000" needlearn="0" event="script" value="especiais/silencenaruto.lua"> <vocation id="1"/> <vocation id="2"/> <vocation id="3"/> <vocation id="4"/> </instant> 
  8. Curtir
    xWhiteWolf recebeu reputação de Agaka em Callbacks de creaturescripts   
    Fala galera do TK, hoje eu vim trazer pra vocês uma coisa que se perdeu em todos esses anos de OT e que é uma das coisas mais importantes prum scripter intermediário/avançado. São as explicações dos respectivos callbacks de creaturescripts. Espero que ajude bastante gente

    Créditos: 90% Zonnebloem (um gringo ai que postou isso das sources) e 10% pra mim por completar oque ele não tinha escrito e arrumado umas coisas que ele escreveu errado.
     
        ____________________________     CREATURE EVENTS TIPOS:  _________________

    TFS 0.2
    type="login"     function onLogin(cid)   type="logout"     function onLogout(cid)   type="advance"     function onAdvance(cid, skill, oldLevel, newLevel)   type="think"     function onThink(cid, interval)   type="kill"     function onKill(cid, target)   type="death"     function onDeath(cid, corpse, lasthitkiller, mostdamagekiller, lasthitunjustified, mostdamageunjustified)   type="preparedeath"     function onPrepareDeath(cid, killer) TFS 0.3/0.4
    type="login"     function onLogin(cid)   type="logout"     function onLogout(cid)   type="advance"     function onAdvance(cid, skill, oldLevel, newLevel)   type="think"     function onThink(cid, interval)   type="kill"     function onKill(cid, target, lastHit)   type="death"     function onDeath(cid, corpse, deathList)   type="preparedeath"     function onPrepareDeath(cid, deathList)   type="statschange"     function onStatsChange(cid, attacker, type, combat, value)   type="combat"     function onCombat(cid, target)   type="target"     function onTarget(cid, target)   type="look"     function onLook(cid, thing, position, lookDistance)   type="textedit"     function onTextEdit(cid, item, newText)   type="outfit"     function onOutfit(cid, old, current)   type="push"     function onPush(cid, target)   type="follow"     function onFollow(cid, target)   type="attack"     function onAttack(cid, target)   type="areacombat"     function onAreaCombat(cid, tileItem, tilePosition, isAggressive)   type="cast"     function onCast(cid, target)   type="direction"     function onDirection(cid, old, current)   type="reportbug"     function onReportBug(cid, comment)   type="sendmail"     function onSendMail(cid, receiver, item, openBox)   type="receivemail"     function onReceiveMail(cid, sender, item, openBox)   type="traderequest"     function onTradeRequest(cid, target, item)   type="tradeaccept"     function onTradeAccept(cid, target, item, targetItem)   type="joinchannel"     function onJoinChannel(cid, channel, users)   type="leavechannel"     function onLeaveChannel(cid, channel, users) TFS 1.0
    type="login"     function onLogin(cid)   type="logout"     function onLogout(cid)   type="think"     function onThink(cid, interval)   type="preparedeath"     function onPrepareDeath(cid, killer)   type="death"     function onDeath(cid, corpse, lasthitkiller, mostdamagekiller, lasthitunjustified, mostdamageunjustified)   type="kill"     function onKill(cid, target)   type="advance"     function onAdvance(cid, skill, oldLevel, newLevel)   type="modalwindow"     function onModalWindow(cid, modalWindowId, buttonId, choiceId)   type="textedit"     function onTextEdit(cid, item, text)   type="changehealth"     function onChangeHealth(cid, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType)   type="changemana"     function onChangeMana(cid, attacker, manaChange)   type="extendedopcode"     function onExtendedOpcode(cid, opcode, buffer)     ____________________________     INFORMAÇÃO SOBRE OS TIPOS:  _________________
    antes de tudo tenha em mente que os tipos só serão executados no player ou monstro em que eles forem registrados; Registrar no login.lua vai fazer com que ele seja executado em todos os players assim q eles logarem. Se deve ser executado somente por alguns monstros, registre no monstro em questão no xml dele.

    login

    Quando é executada:
    - Quando um player loga

    Parametros:
    - cid = creatureid do player que logou

    quando está return false:
    - nada

    registra creature event:
    - não

    ~~~~

    logout

    Quando é executada:
    - quando um player desloga pelo logout do próprio cliente. Não acontece se o player morrer, for disconectado ou xlogs

    Parametros:
    - cid = creatureid do player que deslogou

    quando está return false:
    - Player não vai conseguir deslogar

    registra creature event:
    - não

    ~~~~

    advance

    Quando é executado:
    - Toda vez que um player avançar de level, magic level ou qualquer outra skill

    Parametros:
    - cid = creature id do player que avançou
    - skill = tipo da skill que o player avançou vide tabela abaixo (note que vc pode utilizar tanto o nome SKILL_FIST quanto o numero 0)
    SKILL_FIST = 0 SKILL_CLUB = 1 SKILL_SWORD = 2 SKILL_AXE = 3 SKILL_DISTANCE = 4 SKILL_SHIELD = 5 SKILL_FISHING = 6 SKILL__MAGLEVEL = 7 SKILL__LEVEL = 8 - oldlevel = level antes do player avançar
    - newlevel = o novo level após avançar

    quando está return false:
    - ele não vai avançar o nível

    Registra creature event:
    - sim (isso significa que vc pode colocar pra ele registrar um outro creatureevent dentro desse script após alcançar X level)

    ~~~~

    think

    Quando é executada:
    - Pelo tempo

    Parametros:
    - cid = creatureid do monstro ou player
    - interval = intervalo entre cada checagem OU em que intervalo deve ser executada, 500 é 0.5 segundo.

    quando está return false:
    - nada

    Registra creature event:
    - sim

    ~~~~

    kill

    Quando é executada:
    - Ao matar um player/monstro

    Parametros:
    - cid = creatureid do player ou do monstro que mata
    - target = creatureid do player ou monstro que é morto

    quando está return false:
    - O target não morrerá, ele ficará com 0 de vida e a barra sumirá para os inimigos.Ele precisará se curar para que sua barra de vida volte

    registra creature event:
    -sim

    ~~~~

    death

    Quando é executada:
    - Quando um player ou monstro morrem

    Parametros:
    - cid = creatureid do player monstro que morre
    - corpse = corpo do monstro ou player que morre

    exemplo de adicionando 3 crystal coins no corpo que morreu.
    doAddContainerItem(corpse.uid, 2160, 3) - deathlist = uma table com o nome de todos que mataram, sendo na ordem o deathlist[1] oque deu o ultimo hit e o deathlist[2] sendo oque deu mais dano.
    quando está return false:
    - O corpo não será criado

    Registra creature event:
    - Sim

    ~~~~

    preparedeath

    Quando é executada:
    - Quando um monstro ou player está prestes a morrer (pode ser usada em scripts que devem ser executados no segundo antes do player morrer)

    Parameters:
    - cid = creatureid do player ou monstro que está prestes a morrer
    - deathlist = uma tabela com o nome dos atacantes

    quando está return false:
    - o player ou monstro não irá morrer (mesma história do kill)

    Registra creature event:
    - Sim

    ~~~~

    statschange

    quando é executada:
    -Quando um player ou monstro ou ganha ou perde vida/mana de um combat ou uma função (combats não são só os das spells, mas também weapons/fist/melee... vale lembrar também que monstros não possuem mana)

    Parametros:
    - cid = creatureid do player ou monstro q ganha/perde vida/mana
    - attacker = creatureid do player ou monstro que causou a mudança na health/mana
    - type = tipo da mudança, sendo ela:Ganho de vida, perca de vida, ganho de mana e perca de mana vide tabela abaixo:
    STATSCHANGE_HEALTHGAIN = 0 STATSCHANGE_HEALTHLOSS = 1 STATSCHANGE_MANAGAIN = 2 STATSCHANGE_MANALOSS = 3 - combat = o tipo de combat que causou a alteração, sendo esses tipos:
    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 - value = valor da mudança
    quando está return false:
    - O player ou o monstro não ganharão/perderão vida/mana no combat. Pode ser usado pra fazer ele ficar imortal por um certo período ou não ser capaz de tomar dano de certos players/creaturas 

    Registra creature event:
    - Sim

    ~~~~

    combat

    Quando é executado:
    - Quando um player ou monstro starta um combat (qualquer tipo de ataque)

    Parametros:
    - cid = creatureid do player ou monstro que usa o combat
    - target = creatureid do player ou monstro que sofre o combat

    quando está return false:
    - O player ou monstro não será capaz de levar ataques, isso também inclui que ele não poderá dar target em alguém/algo . Isso pode ser usado para criar monstros que não possam levar ataques ou fazer players ficarem imunes a dano por um certo tempo.

    Registra creature event:
    - Sim


    _______________________________________________________________________________________________

    Agora começa a graça da coisa:


    ~~~~

    target

    Quando é executado:
    - Quando um player ou monstro dá target em um player/mostro (follow/attack)

    Parametros:
    - cid = creatureid do player ou monstro que dá o target
    - target = creatureid do player ou monstro que é targeted

    quando está return false:
    - O player/monstro não poderá dar target.. alguns testes com monstros revelaram que o monstro ainda consegue te atacar então acho que essa função só serve para player

    Registra creature event:
    - Sim
     

    ~~~~

    look

    Quando é executado:
    - Quando um player dá look em algo

    Parametros:
    - cid = creatureid do player que dá o look
    - thing = objeto/player/monstro que o player dá look
    - position = não tenho certeza se é a posição do objeto que é dado look ou se é a minha posição.
    - lookDistance = distancia entre esse objeto e eu.

    quando está return false:
    - Não aparece a mensagem de look na tela

    Registra creature event:
    - Sim
     
    ~~~~

    textedit

    Quando é executado:
    - Quando um player edita um texto em algum item writeable (livros por exemplos)

    Parametros:
    - cid = creatureid do player
    - item = item que está sendo modificiado
    - newText = texto novo que foi escrito 

    quando está return false:
    - O player não conseguirá editar o texto, quando ele tentar dar ok o item continuará com o mesmo texto.. Pode ser usado numa quest com muito RPG pra checar se a senha que o player escreveu no livro é a correta.

    Registra creature event:
    - sim
     
    ~~~~

    outfit

    Quando é executado:
    - Quando um player ou monstro muda de outfit

    Parametros:
    - cid = creatureid do player ou monstro que muda de outfit
    - old = outfit antiga
    - current = outfit atual (após ter trocado)

    quando está return false:
    - a troca de outfit será cancelada e o player/monstro voltará para a antiga outfit

    Registra creature event:
    - sim
     
    ~~~~

    push

    Quando é executado:
    - Quando um player tenta empurrar um monstro ou um player

    Parametros:
    - cid = creatureid do player que empurrar
    - target = creatureid do player ou monstro que é empurrado

    quando está return false:
    - O player não conseguirá empurrar (arrastar o oponente com o mouse). É bastante util em eventos para que eles não possam ficar se empurrando

    Registra creature event:
    - sim
     
    ~~~~

    follow

    Quando é executado:
    - Quando um player dá follow em algum monstro ou player ou até num NPC

    Parametros:
    - cid = creatureid do player que dá o follow
    - target = creatureid da criatura (monstro/npc/player) que é seguida

    quando está return false:
    - O follow não irá ocorrer

    Registra creature event:
    - Sim
     
    ~~~~

    attack

    Quando é executado:
    - Quando um player ou monstro ataca (melee, spells não contam)

    Parametros:
    - cid = creatureid do player ou monstro que ataca
    - target = creatureid do player ou monstrp que sofre o ataque

    quando está return false:
    - O player/monstro não irá atacar, é bastante útil em sistemas que vc queira deixar uma certa criatura imune a ataques mas que ela ainda possa morrer pra spells

    Registra creature event:
    - Sim
     
    ~~~~

    areacombat

    Quando é executado:
    - Quando um player ou monstro starta um combat em área (usa uma spell ou dano em área)

    Parametros:
    - cid = creatureid do player ou monstro que usa o combat
    - tileItem = player que está dentro da area
    - tilePosition = posição do player que está dentro da area
    - isAggressive = se esse combat em área é agressivo ou não, lembre-se que magias como exura gran mas res fazem combat em área mas esse combat não é agressivo porque ela cura em área

    quando está return false:
    - o combat é cancelado

    Registra creature event:
    - Sim
     

    ~~~~

    cast

    Quando é executado:
    - Quando um player ou monstro solta uma magia

    Parametros:
    - cid = creatureid do player ou monstro que usa a magia
    - target = creatureid do player ou monstro que sofre o dano da magia

    quando está return false:
    - a magia não é lançada

    Registra creature event:
    - sim
     
    ~~~~

    direction

    Quando é executado:
    - Quando uma criatura (NPC/Player/Monster) muda de direção 

    Parametros:
    - cid = creatureid do player ou monstro que mudará de direção
    - old =  direção antiga
    - current = direção atual, após ter mudado, vide tabela abaixo:
    NORTH = 0EAST = 1 SOUTH = 2 WEST = 3 SOUTHWEST = 4 SOUTHEAST = 5 NORTHWEST = 6 NORTHEAST = 7 atente-se no fato de que não é possível virar pras direções 4,5,6 e 7 mas você utilizá-las num script que cheque a direção entre dois players, daí sim seria possível (como é no caso do exiva)
    quando está return false:
    - A criatura não será capaz de mudar de direção

    Registra creature event:
    - Sim
     
    ~~~~

    reportbug

    Quando é executado:
    - Quando um player reporta um bug

    Parametros:
    - cid = creatureid do player que reportou o bug
    - comment = comentário que ele adicionou ao reportar

    quando está return false:
    - O report será cancelado e não será enviado. Pode ser usado num script avançado de reports onde se o player não tiver escrito nenhum comentário ou tiver escrito determinadas palavras o envio será cancelado (pra evitar spams)

    Registra creature event:
    - Sim
     
    ~~~~

    sendmail

    Quando é executado:
    - Quando um player manda uma carta/parcel para outro

    Parametros:
    - cid = creatureid do player que mandou a correspondencia
    - receiver = creatureid do player que irá receber essa correspondencia
    - item = item que foi enviado (id dele)
    - openBox = conteúdo (no caso de parcel)

    quando está return false:
    - Correspondência não será enviada. É util pra registrar um log de todas as trocas entre players e pegar hackers.

    Registra creature event:
    - Sim
     
    ~~~~

    receivemail

    Quando é executado:
    - Quando um player recebe uma carta/parcel de outro

    Parametros:
    - cid = creatureid do player que recebou a correspondência
    - sender = creatureid do player que enviou a correspondência
    - item =  item recebido
    - openBox =  conteúdo da correspondencia (no caso de ser uma parcel)

    quando está return false:
    - Ele não receberá a correspondência.

    Registra creature event:
    - Sim 

    ~~~~

    traderequest

    Quando é executado:
    - Quando um player dá trade

    Parametros:
    - cid = creatureid do player que deu o trade
    - target = creatureid do player que ele tentou iniciar uma troca
    - item = item que foi iniciada a troca (se for uma backpack cheia de coisas dentro esse item será uma table com todos os itens)

    quando está return false:
    - A troca não será executada. É útil para scripts de itens vip onde o player não possa trocar determinados itens

    Registra creature event:
    - Sim
     
    ~~~~

    tradeaccept

    Quando é executado:
    - Quando um player aceita a troca com outro)

    Parametros:
    - cid = creatureid do player que aceitou a troca (você)
    - target = creatureid do player que aceitou a troca (cara com quem você trocou)
    - item = items que você deu em troca, no caso de uma backpack cheia de itens esse parametro será uma table com todos os itens
    - targetItem =  items que você recebeu em troca, no caso de uma backpack cheia de itens esse parametro será uma table com todos os itens

    quando está return false:
    - a troca não será concluída.

    Registra creature event:
    - Sim
     
    ~~~~

    joinchannel

    Quando é executado:
    - Quando um player entra num channel (aqueles canais tipo trade/ help chat/ info/ guild/ etc...)

    Parametros:
    - cid = creatureid do player que entrou no chat
    - channel = canal que o player entrou.. vide lista abaixo:
    CHANNEL_GUILD = 0 CHANNEL_PARTY = 1 CHANNEL_RVR = 3 CHANNEL_HELP = 9 CHANNEL_DEFAULT = 0xFFFE CHANNEL_PRIVATE = 0xFFFF - users = outros usuários do canal.
    quando está return false:
    - O player não conseguirá entrar no channel

    Registra creature event:
    - Sim
     
    OBS: a mesma coisa vale pra função leavechannel, só que o return false o player não conseguirá sair do channel.


    Espero que isso ajude bastante gente, eu não expliquei os types da versão 1.0 porque é basicamente a mesma coisa e pelos parametros dá pra você ter uma ideia doque é oque. :]
  9. Obrigado
    xWhiteWolf deu reputação a LeoTK em [Sistema 0.3.6 - 8.54] Chuva Editado por LeoTK & NightWolf   
    Salve galera bom tinha uns membros do fórum atrás do sistema de chuva porém estava confuso e totalmente configuravel apenas por math.random então com ajuda do @xWhiteWolf agora o script esta totalmente sem math.random e eu detalhei tudo dentro do script como configurar etc...
     
    tópico original
     
    Aviso 1º: Mude a tag do globalevents.xml para interval=1
    Aviso 2º: Todas as explicações estão dentro do script basta ler
     
    Vídeo demonstrativo

    2019-10-04 01-44-37.mp4  
     
    Vamos as modificações basicamente substitua o arquivo que fica em data/globalevents/scripts/rain.lua abra ele e cole esse código dentro
     
     
    Aproveitando fiz uma modificação na direção que a chuva cai caso quiser a modificação vá em data/globalevents/scripts/lib e abra o arquivo rain.lua e substitua tudo que tiver lá por esse código
     
     
     
    Créditos:
    @Guilherme.
    @xWhiteWolf
    @LeoTK
    Elexonic (Otland)
  10. Gostei
    xWhiteWolf recebeu reputação de Rafals em (Resolvido)Regen Stamina Trainer 8.60   
    se o ataque é a cada 450 milisegundos então você vai precisar de 133 ataques pra completar um minuto.. é só substituir no tempo:
    function onAttack(cid, target) local storage = 19387 local tempo = 133 ----(numero de ataques em um minuto) local minutes = 5 if isMonster(target) and getCreatureName(target):lower() == 'trainer' then doPlayerSetStorageValue(cid, storage, getPlayerStorageValue(cid, storage)+1) if getPlayerStorageValue(cid, storage) >= tempo then doPlayerAddStamina(cid, minutes) doPlayerSetStorageValue(cid, storage, 0) end end return true end quanto a mensagem é só ir no creaturescripts/scripts/login.lua e colocar isso daqui:
    if getPlayerStorageValue(cid, 19488) <= 0 then setPlayerStorageValue(cid, 19488, 1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "A cada um minuto treinando você regenerá 5 minutos de stamina.") end
  11. Gostei
    xWhiteWolf recebeu reputação de Claudio Marcio em Volatile Spiderling   
    Fala galera do TK, hoje eu venho mais uma vez trazer uma das magias mais incríveis que eu já vi até hoje (sério). A magia original foi feita em outro fórum mas para a versão 10.1... como eu vi que ninguém conseguiu adaptar pra versões inferiores eu decidi criar a minha própria volatile spiderling.
    Confesso que no começo eu tive muita dificuldade em achar as funções certas mas depois de tentar ajudar o membro @234567890z no suporte eu tive uma epifania. Sem mais delongas eu vou explicar oque o script faz e em seguida ensinar a colocá-lo no seu server.

    • Explicação: A magia foi feita baseada na personagem Elise do jogo League of Legends: você faz uma cria que anda até os oponentes e se explodem causando dano em area e deixando eles envenenados. Aqui tem um gif da magia funcionando  
    obs: note que esse gif não fui eu que fiz mas ele demonstra exatamente como a magia funciona.
     
     
    • Instalação: Pra instalá-lo no seu servidor vai ser um pouco complicado pois ele requer diversas modificações... antes de mais nada, coloque essas linhas no seu spells.xml:
    <instant name="Volatile Spiderling" words="utevo res tera" lvl="40" mana="20" prem="1" selftarget="1" exhaustion="2000" groups="1,2000" icon="88" needlearn="0" event="script" value="especiais/spiderling.lua"> <vocation id="3"/> <vocation id="7"/> </instant> <instant name="poison explosion" words="poison explosion" lvl="0" mana="0" prem="0" aggressive="1" exhaustion="3000" needlearn="1" event="script" value="especiais/newspider.lua"> </instant> Agora você vai ter que criar os dois arquivos na pasta spells\scripts\especiais.
    Em newspider.lua coloque o seguinte:
    agora em spiderling.lua coloque o seguinte: Agora feito isso vc vai precisar criar o monstro que usará essa spell.. vá em monster\monsters.xml e adicione a seguinte linha: <monster name="Clone Spider" file="arachnids/newspider.xml"/> agora crie o arquivo data\monsters\arachnids\newspider.xml e adicione o seguinte nele:
    Agora eu vou ensinar vocês a editarem... não tem muito oque mudar, apenas se vc quiser alterar os danos da spell vá em newspider.lua e será possível editar os danos do poison e da explosão:
     
    local damageTable = {     {4, -3},     {9, -2},     {20, -1} }   aqui você muda quantos danos serão e quanto cada um tirará.. no caso serão 4 hits de -3, depois 9 hits de -2 e por fim 20 hits de -1 até o poison parar. Lembrando que esses danos saem de 4 em 4 segundos. Se você quiser que eles sejam mais rápidos é só editar aqui:
    addDamageCondition(poisonpowder, t[1], 4000, t[2]) (4000 significa 4 segundos).
    Feito isso será possível editar também a area e o dano da explosão respectivamente em: Area:    
    Dano:
    doAreaCombatHealth(cid, 1, getThingPos(cid), area, -1, -30, 20)
    Em vermelho temos o dano mínimo, analogamente, em azul, temos o dano máximo.
    Em verde é possível editar o efeito da explosão
    Só lembrando que as edições que forem feitas no newspider.lua devem ser feitas no spider.lua para que a magia tenha graça.. se não o dano da explosão/poison ao explodir será diferente caso ela morrer antes.  Em spiderling.lua vc pode editar a quantidade máxima de crias que um player pode ter... o normal está setado para 2 mas vc pode sentir-se livre pra colocar quantas queira.
    local maxsummon = 2   (Só lembre-se que ao explodir uma aranha pode acertar outra então não é muito bom deixar um numero maior que 3);
     
    Se você for daqueles bem chatinhos com a magia você ainda pode editar algumas coisas importantes tais como:
    O efeito que sai quando ela explode por morte ou pela spell:
     doSendMagicEffect(getThingPos(cid), 16) O tempo em que ela executa a spell, a chance da spell sair naquele tempo e quantos sqm de distancia a criatura alvo deve estar pra aranha se explodir: 
    <attack name="poison explosion" interval="1000" range="1" chance="50"/> interval = de quantos em quantos segundos ela executa a spell
    range = distancia em sqm que o alvo deve estar pra que ela execute a spell
    chance = chance de executar a spell a cada interval (nesse caso a cada 1 segundo tem 50% de chance dela soltar a magia)
     
    Você ainda pode editar aqui em vermelho:
    o tempo que leva pra criatura executar a magia.. Por padrão eu deixei 2 segundos, ou seja... eu sumono a aranha, ela vai até o alvo e a cada segundo q ela passa grudada no alvo (1 sqm de distancia) ela tem 50% de chance de ativar a spell e ficar parada no lugar durante 2 segundos até explodir. Se você quiser que ela leve menos tempo pra explodir é só baixar o 2000 (em milisegundos).. Se você quiser aumentar o dano e deixar ela parada por mais tempo até explodir pode editar a vontade aumentando os 2000.

    • Bom, isso é tudo que dava pra eu explicar... é óbvio que dá pra editar muito mais coisa mas se você não é scripter e não tem muita idéia de como editar eu dei uma ensinada básica doque você está autorizado a mexer. Espero que vocês curtam a spell e deem aquele REP+ pra fortalecer kkkk
    Eu não pretendia liberar essa spell visto que ela é extremamente complexa e nenhum servidor tem ela, mas, acho que seria muito babaca da minha parte ficar guardando um script tão bonito hahaha. Qualquer erro ou dúvida postem nos comentários que eu tento ajudar.
     
    ah, mais uma coisa: Os créditos são 90% meus visto que eu fiz praticamente tudo.. 9% é pro cara que fez a magia original (se vcs derem uma procurada vcs vão ver que não tem quase nada a ver com a minha mas os créditos dele são por ele ter me dado a idéia) e 1% pro cara no suporte que me pediu ajuda numa spell do mesmo gênero e me fez correr atrás de uma forma de fazer essa magia pra versões inferiores a TFS 1.0
  12. Curtir
    xWhiteWolf recebeu reputação de Jeff Delay em Anel de Sauron   
    Fala galera do TK, criei esse anelzinho pra servers que procuram inovar.. 
    bom, oque ele faz??
    Simples, ele torna o usuário invisível.
    aff, mas já existe o stealth ring que faz isso!
    Sim mas dessa vez eu digo invisível mesmo, nenhum monstro ou players conseguirá te ver.
    que lixo, assim qualquer player vai poder ficar invisível e passar no meio dos monstros e players.. vai estragar o server
    Aí é que vc se engana porque o anel vem uma maldição, quem usar ele vai perdendo 3% de vida por segundo (ajustável) e só vai estragar o server se vc sair distribuindo o anel pra todos os players haha

    O anel em si possui duas versões, na primeira ele retira 3% de vida por segundo, na segunda ele adiciona uma condição que te deixa perdendo uma quantidade fixa de vida, CONTUDO, na segunda versão aparece uma poça de sangue cada vez que toma o dano então dá pros players te pegarem caso vc coloque o anel e resolva fugir kkkkk
    Vou chamar aqui de versão 1 e 2 respectivamente.
    OBS: ISSO É EM MOVEMENTS!

     
     
    1ª versão (sem sangue mas que tira 3% de vida por segundo):
    local invisible = createConditionObject(CONDITION_GAMEMASTER, -1, false, GAMEMASTER_INVISIBLE) local outfit = createConditionObject(CONDITION_INVISIBLE, -1, false) local percent = 3 local tempo = 1 -- em segundos function onEquip(cid, item, slot) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "By using this ring you will become fully invisible and lose health over time because of it's curse.") function lifesteal(cid) steal = addEvent(lifesteal, 1000*tempo, cid) if isCreature(cid) then doSendAnimatedText(getCreaturePos(cid), "-"..math.floor((getCreatureMaxHealth(cid) * (percent/100))), 144, cid) doCreatureAddHealth(cid, -math.floor(getCreatureMaxHealth(cid) * (percent/100))) end end lifesteal(cid) doAddCondition(cid, invisible) doAddCondition(cid, outfit) doSendMagicEffect(getCreaturePos(cid), 12) return true end function onDeEquip(cid, item, slot) doTransformItem(item.uid, 2165) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You're no longer receiving the special bonus..") stopEvent(steal) doRemoveCondition(cid, CONDITION_INVISIBLE) doSendMagicEffect(getCreaturePos(cid), 12) doRemoveCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) return true end   2ª versão (a cada 1,5 segundos ele te tira um dano configurado e deixa uma poça de sangue embaixo de vc facilitando que te identifiquem mesmo estando invisivel):
    local invisible = createConditionObject(CONDITION_GAMEMASTER, -1, false, GAMEMASTER_INVISIBLE) local outfit = createConditionObject(CONDITION_INVISIBLE, -1, false) local condition = createConditionObject(CONDITION_PHYSICAL) setConditionParam(condition, CONDITION_PARAM_DELAYED, TRUE) addDamageCondition(condition, -1, 1500, -500) function onEquip(cid, item, slot) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "By using this ring you will become fully invisible and lose health over time because of it's curse.") doAddCondition(cid, condition) doAddCondition(cid, invisible) doAddCondition(cid, outfit) doSendMagicEffect(getCreaturePos(cid), 12) return true end function onDeEquip(cid, item, slot) doTransformItem(item.uid, 2165) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You're no longer receiving the special bonus..") doRemoveCondition(cid, CONDITION_PHYSICAL) doRemoveCondition(cid, CONDITION_INVISIBLE) doSendMagicEffect(getCreaturePos(cid), 12) doRemoveCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) return true end Agora edite no items.xml o stealth ring pra que ele seja infinito:
    <item id="2202" article="a" name="stealth ring"> <attribute key="weight" value="100" /> <attribute key="slotType" value="ring" /> <attribute key="transformDeEquipTo" value="2165" /> </item> e em movements.xml adicione essas linhas:
    <movevent type="Equip" itemid="2202" slot="ring" event="script" value="stealth.lua"/> <movevent type="DeEquip" itemid="2202" slot="ring" event="script" value="stealth.lua"/> Editando:
    Na primeira versão vc pode alterar as seguintes coisas que estão em colorido:
    local invisible = createConditionObject(CONDITION_GAMEMASTER, -1, false, GAMEMASTER_INVISIBLE)
    local outfit = createConditionObject(CONDITION_INVISIBLE, -1, false)
    local percent = 3
    local tempo = 1 -- em segundos
     
    em vermelho é o tempo que dura a invisibilidade... -1 é infinito
    em azul é a porcentagem de vida que perde por tempo
    em verde é o tempo em que se perde vida.. nesse caso a cada 1 segundo perde 3%
     
    Na segunda versão vc pode editar as mesmas coisas do primeiro só que o tempo e o dano pelo tempo estão na condition:
     
    local condition = createConditionObject(CONDITION_PHYSICAL)
    setConditionParam(condition, CONDITION_PARAM_DELAYED, TRUE)
    addDamageCondition(condition, -1, 1500, -500)
     
    em vermelho é o numero de vezes que vai tirar vida. Mais uma vez -1 significa infinito (infinito até remover o anel)
    em azul é o dano que vc toma a cada tempo (lembre-se de deixar sempre um - na frente se não ele vai adicionar vida)
    em verde é o tempo em que se perde vida.. nesse caso a cada 1 segundo e meio retira 500 de vida
     
     
    Bom, é isso.. um script simples mas que vai ajudar muita gente pelo fato de usar conditions não tão comuns e de uma forma diferente haha
  13. Obrigado
    xWhiteWolf recebeu reputação de Orientalz em Direção de Ataque   
    Bom galera, tem uma coisa bem simples que nem o tibia global fez e que eu to trazendo aqui pra vocês. Trata-se de um pequeno sistema que fará você sempre virar pra direção do seu target ao atacar.
    Testado em TFS 0.3.6 Cliente 8.54.

    Imagem auto explicativa:




    Chega de atacar de costas! 

    Agora pra instalar é bem tranquilo. Abra um arquivo .lua em data\creaturescripts\scripts chamado target e coloque o seguinte conteudo dentro dele:




    Feito isso adicione essa linha no creaturescripts.xml:
    <event type="attack" name="targetCreature" script="target.lua"/> E para finalizar adicione a seguinte tag em creaturescripts\scripts\login.lua:
    registerCreatureEvent(cid, "targetCreature") Espero que vcs tenham curtido, é algo bem simples mas ninguém havia pensado nisso antes (nem o próprio Tibia), é uma coisa bem básica e que torna o jogo bem mais importante e sério. 


    EDIT:: Usem essa versão que está mais completa, na anterior se o target estivesse na diagonal ele não virava.



  14. Gostei
    xWhiteWolf recebeu reputação de Gabrielx17 em (Resolvido)Spell para ficar intocavel   
    @skailord, você não pode dar up no tópico dos outros a não ser que tenha passado 24 hrs. Leia as regras
    spells\scripts\especiais\invencible.lua
    local config = {  storage = 3482101, cooldown = 30,  --- tempo entre um uso e outro duration = 5, --- duração effect1 = 29 -- efeito que sai ao falar a spell }  local outfit = createConditionObject(CONDITION_INVISIBLE, config.duration * 1000, false) function onCastSpell(cid, var)      if os.time() - getPlayerStorageValue(cid, 55695) >= config.cooldown then setPlayerStorageValue(cid, 55695, os.time()) doSendMagicEffect(getCreaturePosition(cid), config.effect1) setPlayerStorageValue(cid, config.storage, os.time() + config.duration) doCreatureSay(cid,"UNTOUCHABLE!!!", 19) doAddCondition(cid, outfit) doPlayerSendTextMessage(cid, 27, "You have now ".. config.duration .." seconds of invulnerability.") else doPlayerSendCancel(cid, "Your skill is in cooldown, you must wait "..(config.cooldown - (os.time() - getPlayerStorageValue(cid, 55695))).." seconds.") return false end       return true end spells.xml
    <instant name="testeTK" words="naruto3" lvl="16" mana="500" prem="1" aggressive="0" exhaustion="1000" needlearn="0" event="script" value="especiais/invencible.lua"> </instant> creaturescripts\scripts\login.lua:
    ---------- Invencible ---------------- registerCreatureEvent(cid, "invencible") if getPlayerStorageValue(cid, 3482101) ~= 0 then         setPlayerStorageValue(cid, 3482101, 0)  end creaturescripts.xml:
    <event type="statschange" name="invencible" event="script" value="invencible.lua"/> creaturescripts\scripts\invencible.lua
     
    local config = {  storage = 3482101, effect1 = 2 --- efeito ao ser atacado estando invulnerável }  function onStatsChange(cid, attacker, type, combat, value) if value >= 1 and (type == STATSCHANGE_HEALTHLOSS or (getCreatureCondition(cid, CONDITION_MANASHIELD) and type == STATSCHANGE_MANALOSS))  then if getPlayerStorageValue(cid,config.storage) - os.time() > 0 and isCreature(attacker) then doSendMagicEffect(getCreaturePosition(cid), config.effect1) doSendAnimatedText(getCreaturePosition(cid), "0", 180) return false end end return true end Usei o mesmo storage da outra spell que fiz pra vc uchihagaeshi, mude o storage em todos os scripts ;]
  15. Gostei
    xWhiteWolf recebeu reputação de ernaix69 em New Library v. 1.2   
    Fala galera, hoje vim trazer pra vocês uma nova biblioteca de funções que eu venho desenvolvendo, pretendo ir atualizando esse tópico constantemente sempre adicionando funções novas e explicando a utilização delas. Algumas funções que eu coloquei aqui estão presentes na OTAL também, porém algumas eu fiz pequenas correções de forma que essa lib poderia facilmente substituir a OTAL sem grandes problemas (pelo menos se você utilizava apenas as funções básicas da otal)
    Todas as funções que não tem -- nome do autor do lado dela foram feitas por mim, xWhiteWolf ou Night Wolf (NW). O restante delas são créditos dos devidos autores, apenas coloquei pois considero funções vitais no server de cada um. Crie um arquivo em data/lib chamado 075 - White Wolf Functions.lua e coloque o seguinte código dentro:



     
    Agora eu vou explicar oque cada função faz porque de nada adianta lançar uma lib e não explicar oque ela faz não é mesmo? hahaha
    Obs inicial: quando uma função tiver em seus parametros um [] significa que oque está dentro do colchetes não é um parâmetro obrigatório.



    Como usar: doShowTimeByPos(cid, getCreaturePosition(cid), 20, 20)
    Irá fazer uma contagem regressiva na posição que o player se encontra começando de 20 e mandando a mensagem na mesma cor da fala dos monstros.
    Essa função é bem útil em actions/spells para fazer contagem de tempo em runas como a magic wall e ver quanto tempo falta pra magic wall sumir)

     
    Obs: Espero que ajude bastante pessoas a entender sobre funções, eu utilizei cid como o principal uid das funções nos exemplos mas você pode muito bem utilizar outros uids, fica a critério seu.

    Qualquer dúvida comentem abaixo que eu vou tentar ajudar da melhor maneira.
    Ahhh, isso daí foi testado em 8.54 mas deve funcionar em quase todas as versões que tenham as funções básicas do TFS. 

    EDIT: Pessoal, agora é sério, essa lib tem fácil umas 600 linhas, das quais umas 500 eu devo ter codado sozinho (na mão, linha por linha). Eu tive todo o trabalho de testar cada uma delas e oque eu peço é o mínimo de gratidão e respeito. Se eu te ajudei clique em Gostei, se você tiver alguma dúvida eu to me colocando a disposição de responder qualquer coisa relacionada ao tópico, mesmo que você não saiba nem oque é uma lib apenas venha aqui e escreva sua dúvida.

    EDIT 2: Duas novas funções adicionas, espero que gostem!

    EDIT 3: Três novas funções adicionadas juntamente com suas respectivas explicações.
  16. Gostei
    xWhiteWolf recebeu reputação de Maniaco em (Resolvido)[PEDIDO] Editar Items.   
    Você coloca no items.xml oque vc quer que o item faça, experimenta usar comandos de itens parecidos: 
    Exemplo: Quero que o set de Knight dê skill de club/sword/axe.. daí vc procura algum item que faça isso e só copia a parte que aumenta a skill
    <attribute key="skillSword" value="3" /> <attribute key="skillAxe" value="3" /> <attribute key="skillClub" value="3" /> Se você quiser que aumente distance é só colocar
    <attribute key="skillDist" value="3" /> para absorver danos é bem simples
    <attribute key="absorbPercentPhysical" value="3" /> <attribute key="absorbPercentEarth" value="5" /> <attribute key="absorbPercentDeath" value="6" /> <attribute key="absorbPercentFire" value="-3" /> <attribute key="absorbPercentIce" value="2" /> Perceba que o PercentFire está negativo, é porque ele tem fraqueza contra fogo, positivo ele é bom contra o elemento, negativo ele é fraco contra o elemento.

    Pra aumentar ML é só usar:
    <attribute key="magiclevelpoints" value="1" /> Pra aumentar speed é só procurar a BOH e copiar:
    <attribute key="speed" value="20" /> E não esquece de colocar no final
    <attribute key="showattributes" value="1" /> para que apareçam os atributos quando o player der look no item.


    Em 
    <attribute key="slotType" value="necklace" /> Você escolhe que tipo de item aquilo é, os values são: body, two-handed, one-handed, ammo, ring, necklace, legs, feet, head, backpack




    E PARA FINALIZAR DECLARE TUDO NO MOVEMENTS.XML:
    <movevent type="Equip" itemid="IDDOITEM" slot="TIPO DE SLOT" event="function" value="onEquipItem"/> <movevent type="DeEquip" itemid="IDDOITEM" slot="TIPO DE SLOT" event="function" value="onDeEquipItem"/> itemid="IDDOITEM" troque IDDOITEM pelo ID DO ITEM (BEM ÓBVIO, NÉ?) 
    slot="TIPO DE SLOT" coloque um dos slots possíveis, os que são possiveis estão nessa lista aqui:
    armor feet legs head shield pickupable necklace ring OBSERVAÇÃO FINAL: O SLOT QUE VC DECLARAR NO MOVEMENTS TEM QUE SER DO MESMO TIPO QUE O ITEMS.XML
    -------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Agora as flechas/bows/armas: Essas não precisam declarar no movements.xml mas precisam de um script no weapon.xml 


    1) Flechas
    As flechas são bem simples:
    <attribute key="slotType" value="ammo" /> <attribute key="attack" value="25" /> <attribute key="maxHitChance" value="90" /> <attribute key="weaponType" value="ammunition" /> <attribute key="ammoType" value="arrow" /> <attribute key="shootType" value="arrow" /> slotype = ammo para ficar no lugar da munição (ammo)
    Attack vc muda a vontade pro que vc quiser
    MaxHitChance = chance de acertar o hit, qualquer numero menor que 100 apresenta uma chance do hit falhar
    WeaponType= Tipo de arma, flechas são munições então deixe sempre ammunition
    ammoTyoe = Tipo de munição, pode ser "arrow" ou "bolt" dependendo doque vc quiser usar, um bow ou um crossbow
    shootType é o efeito que vai sair, no caso dessa aí seria uma arrow normalzinha mas vc pode colocar qualquer flecha que exista ou até mesmo copiar efeitos de runas
    Dê ctrl+F no items.xml em shootType e copie diferentes tipos e vá vendo no servidor qual se encaixa melhor na sua opinião.

    2) Bows e Crossbows
    Eu te aconselho copiar de algum item que já exista o modificar oque você quiser
    <attribute key="slotType" value="two-handed" /> <attribute key="weaponType" value="distance" /> <attribute key="ammoType" value="bolt" /> <attribute key="range" value="5" /> <attribute key="hitChance" value="1" /> isso daqui é um crossbow duas mãos que ataca bolt (podia ser arrows tb) a uma distância de no máximo 5 SQM (modifique o range)
    a chance de hit padrão dele é 1  e essa hit chance soma com a da munição

    3) Wands e Rods
    <attribute key="weight" value="2900" /> <attribute key="weaponType" value="wand" /> <attribute key="shootType" value="ice" /> <attribute key="range" value="3" /> peso, tipo (mesmo que seja uma rod o tipo é "wand"), tipo de efeito que sai dela (no caso é o ice), distância que ataca (no caso, 3 sqm)
    Agora no weapons.xml:
    <wand id="2190" level="7" mana="2" min="8" max="18" type="energy" event="function" value="default"> <!-- Wand of Vortex --> <vocation id="1"/> </wand> id do item, level pra usar, custo de mana por hit, dano minimo e maximo, tipo de ataque, event (deixe function para ele fazer tudo que vc colocou no items.xml) value= não mexa a menos que vc seja um programador C++, vocation vc coloca as classes que podem usar.
    1= sorc, 2= druid, 3= pally, 4= kina, 5= master sorc, 6= elder druid, 7= royal pally, 8= elit kina
    OBS: Você pode colocar isso também para que quando o player dê look não apareça o nome da classe que pode usar aquele determinado item (isso é util quando vc declarar que ambos sorceres e master sorcerers podem usar o item, evitando as repetições quando o player der look no item
    <vocation id="5" showInDescription="0"/> <vocation id="1"/> 4) Outros tipos de arma
    É bem simples, só edite oque quiser seguindo o modelo:
    <attribute key="weight" value="6800" /> <attribute key="defense" value="65" /> <attribute key="attack" value="90" /> <attribute key="weaponType" value="sword" /> <attribute key="extradef" value="5" /> <attribute key="elementIce" value="30" /> <attribute key="slotType" value="two-handed" /> <attribute key="decayTo" value="2401" /> <attribute key="duration" value="60" /> weight = peso
    defense= defesa q ela dá
    attack = ataque
    weapontype = Tipo de arma (sword, axe, club)
    extradef = defesa extra (fica Defesa 65 +5 nesse caso)
    ElementIce = adiciona dano elemental à arma, pode usar também ElementFire, ElementEarth e ElementEnergy
    slotType = se a arma é duas mãos ou não (caso não seja apenas retire essa linha)
    decayTo = apos um tempo igual a duration (em segundos) ela vira o item de ID 2401 (se não quiser isso apenas remova essas duas ultimas linhas)


    OBSERVAÇÃO FINAL: Tudo que você não quiser utilizar é só remover a linha do items.xml, e todo tipo de edição em armas deve ser declarado no weapons.xml seguindo o exemplo. (COMO VOCÊ NÃO TÁ CRIANDO NENHUM ITEM E SIM EDITANDO OS QUE JÁ EXISTEM EU TE ACONSELHO A PROCURAR O ITEM LÁ DANDO CTRL F E PROCURANDO PELO ID DOQUE SAIR ADICIONANDO UM MONTE DE LINHA A MAIS QUE TALVEZ DÊ CONFLITO COM AS QUE JÁ EXISTAM).
    OS ITENS QUE VC COLOCAR PRA DAR SKILL, ML OU PORCENTAGEM ELEMENTAL VOCÊ DEVE DECLARAR NO MOVEMENTS.XML E SE ESSE ITEM FOR PARA UMA DETERMINADA VOCAÇÃO VOCÊ DEVE DECLARAR TAMBÉM SEGUINDO O EXEMPLO:
    <movevent type="Equip" itemid="7886" slot="feet" event="function" value="onEquipItem"> <vocation id="1"/> <vocation id="5" showInDescription="0"/> <vocation id="2"/> <vocation id="6" showInDescription="0"/> </movevent> <movevent type="DeEquip" itemid="7886" slot="feet" event="function" value="onDeEquipItem"/>
  17. Curtir
    xWhiteWolf recebeu reputação de Tinkyzin em Dodge System 8.54+   
    poderia elaborar melhor? o sistema só não funciona com o item duplicado? e o item em questão está fazendo o papel da pedra de adicionar level?
  18. Curtir
    xWhiteWolf recebeu reputação de Tinkyzin em Dodge System 8.54+   
    puts agr, esqueci totalmente de rever esse tópico aqui, me perdoa.. ainda precisa de ajuda?
    vc tem ctza q instalou certinho?
  19. Obrigado
    xWhiteWolf recebeu reputação de joaopedrodepaiva em Critical Skill System   
    Fala galera do TK, vejo que tem bastante gente procurando esse sisteminha que é praticamente igual ao dodge system, então eu decidi fazer visto que na realidade era só mudar 3 linhas kkkk em todo caso ta aí pra quem quiser:

    creaturescripts.xml:
     <!-- CRITICAL SYSTEM -->    <event type="statschange" name="critical" event="script" value="critical.lua"/> creaturescripts\scripts\login.lua:
    --- CRITICAL SYSTEM ---- registerCreatureEvent(cid, "critical") if getPlayerStorageValue(cid, 48913) == -1 then         setPlayerStorageValue(cid, 48913, 0)      end creaturescritps\scripts\critical.lua:
    --[[Critical System -------------------------  By Night Wolf]] local lvlcrit = 48913 local multiplier = 1.5 function onStatsChange(cid, attacker, type, combat, value) if isPlayer(attacker) and (not (attacker == cid)) and (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS)  then if (getPlayerStorageValue(attacker, lvlcrit)*3) >= math.random (0,1000) then dano = math.ceil(value*(multiplier)) doTargetCombatHealth(attacker, cid, combat, -dano, -dano, 255) doSendAnimatedText(getCreaturePos(attacker), "CRITICAL!!", 144) return false end end return true end lvlcrit é o storage que fica salvo o seu level de critical e multiplier é o multiplicador do dano para ataques críticos.. nesse caso um ataque critico vai ser 1,5 vezes maior doque um ataque normal (50% maior)

    Agora em actions.xml adicione:
    <action itemid="1294" script="criticalrock.lua"/> e em actions\scripts\criticalrock.lua adicione:
    --- CRITICAL System by Night Wolf       local config = {    effectonuse = 14, -- efeito que sai    levelscrit = 100,  --- leveis que terão    storagecrit = 48913 -- storage que será verificado    }     function onUse(cid, item, frompos, item2, topos)     if getPlayerStorageValue(cid, config.storagecrit) < config.levelscrit then    doRemoveItem(item.uid, 1) doSendMagicEffect(topos,config.effectonuse) doPlayerSendTextMessage(cid,22,"You've Leveled your Critical Skill to ["..(getPlayerStorageValue(cid, config.storagecrit)+1).."/"..config.levelscrit.."].") setPlayerStorageValue(cid, config.storagecrit, getPlayerStorageValue(cid, config.storagecrit)+1) elseif getPlayerStorageValue(cid, config.storagecrit) >= config.levelscrit then doPlayerSendTextMessage(cid,22,"You've already reached the MAX level of Critical Skill.\nCongratulations!!!!")     return 0     end return 1 end Feito isso tá pronto, pra editar o item que dá a skill de critical vc edita no actions.xml mesmo:
    <action itemid="1294"   << ID do item que será usado pra dar a skill.
    A config tá bem simples:
    effectonuse = 14, -- efeito que sai
       levelscrit = 100,  --- leveis que terão 
       storagecrit = 48913 -- storage que será verificado.

    Lembrando que cada pedra utilizada dará 0,3% a mais de chance.. 10 pedras dão 3% de chance de dar critico a cada ataque e 100 pedras (NIVEL MÁXIMO PADRÃO) dará 30% de chance de dar crítico em cada ataque.
    Espero que vcs gostem, qualquer coisa deixem os comentários aqui.

    Obs: aqui tá uma foto


    Note que esse script só funciona em players, se vc quiser que funcione em monstros você vai ter que abrir um por um todos os monstros do server e colocar essa tag aqui: 
    <script> <event name="critical"/> </script> coloque antes de  </monster>
    Minha dica: coloquem apenas no Trainer pra que o player consiga ver que ele tem o critical e quanto ele tira e deixem avisado que o sistema só vai funcionar em players. 
  20. Obrigado
    xWhiteWolf recebeu reputação de bielofwarr em (Resolvido)Efeito apenas para God   
    if getPlayerGroupId(cid) >= 3 and isPlayer(cid) then local tempo = 0.3 --- de quanto em quanto segundos ele solta o efeito function loop (cid) local pos = getCreaturePosition(cid) local effects = 19 ----- EFEITO QUE VC QUERIA doSendMagicEffect(pos, effects) addEvent(function()                if isCreature(cid) then                   loop(cid)                end           end, 1000 * tempo) return true end loop(cid) end
  21. Curtir
    xWhiteWolf recebeu reputação de tetheuscunha em (Resolvido)Spell para ficar intocavel   
    @skailord, você não pode dar up no tópico dos outros a não ser que tenha passado 24 hrs. Leia as regras
    spells\scripts\especiais\invencible.lua
    local config = {  storage = 3482101, cooldown = 30,  --- tempo entre um uso e outro duration = 5, --- duração effect1 = 29 -- efeito que sai ao falar a spell }  local outfit = createConditionObject(CONDITION_INVISIBLE, config.duration * 1000, false) function onCastSpell(cid, var)      if os.time() - getPlayerStorageValue(cid, 55695) >= config.cooldown then setPlayerStorageValue(cid, 55695, os.time()) doSendMagicEffect(getCreaturePosition(cid), config.effect1) setPlayerStorageValue(cid, config.storage, os.time() + config.duration) doCreatureSay(cid,"UNTOUCHABLE!!!", 19) doAddCondition(cid, outfit) doPlayerSendTextMessage(cid, 27, "You have now ".. config.duration .." seconds of invulnerability.") else doPlayerSendCancel(cid, "Your skill is in cooldown, you must wait "..(config.cooldown - (os.time() - getPlayerStorageValue(cid, 55695))).." seconds.") return false end       return true end spells.xml
    <instant name="testeTK" words="naruto3" lvl="16" mana="500" prem="1" aggressive="0" exhaustion="1000" needlearn="0" event="script" value="especiais/invencible.lua"> </instant> creaturescripts\scripts\login.lua:
    ---------- Invencible ---------------- registerCreatureEvent(cid, "invencible") if getPlayerStorageValue(cid, 3482101) ~= 0 then         setPlayerStorageValue(cid, 3482101, 0)  end creaturescripts.xml:
    <event type="statschange" name="invencible" event="script" value="invencible.lua"/> creaturescripts\scripts\invencible.lua
     
    local config = {  storage = 3482101, effect1 = 2 --- efeito ao ser atacado estando invulnerável }  function onStatsChange(cid, attacker, type, combat, value) if value >= 1 and (type == STATSCHANGE_HEALTHLOSS or (getCreatureCondition(cid, CONDITION_MANASHIELD) and type == STATSCHANGE_MANALOSS))  then if getPlayerStorageValue(cid,config.storage) - os.time() > 0 and isCreature(attacker) then doSendMagicEffect(getCreaturePosition(cid), config.effect1) doSendAnimatedText(getCreaturePosition(cid), "0", 180) return false end end return true end Usei o mesmo storage da outra spell que fiz pra vc uchihagaeshi, mude o storage em todos os scripts ;]
  22. Curtir
    xWhiteWolf recebeu reputação de Tinkyzin em (Resolvido)[PEDIDO] Item que da Vocation   
    function onUse(cid, item, frompos, item2, topos) local config = { [3222] = 500, [3223] = 600, [3224] = 700, [3225] = 800 } if config[item.itemid] ~= getPlayerVocation(cid)  then doRemoveItem(item.uid, 1) doPlayerSetVocation(cid, config[item.itemid]) doSendMagicEffect(config.pos,math.random(28,30)) --aqui é a parte do efeito, coloquei um random entre o efeito 28~30 que são os fogos de artificio doPlayerSendTextMessage(cid, 22, "You are now a "..getPlayerVocationName(cid).."!")   else doPlayerSendTextMessage(cid, 22, "You can't be promoted since you're already a "..getPlayerVocationName(cid).."!")  end return true end actions.xml
    <action itemid="3222" script="pedravoc.lua"/> <action itemid="3223" script="pedravoc.lua"/> <action itemid="3224" script="pedravoc.lua"/> <action itemid="3225" script="pedravoc.lua"/>
  23. Curtir
    xWhiteWolf recebeu reputação de Tinkyzin em (Resolvido)[PEDIDO] Item que da Vocation   
    vc tem que achar o itemid, aquilo que vc viu provavelmente era o id da sprite e não o id do item haha. Procura pelo items.xml e muda ali no script e no actions.xml
  24. Obrigado
    xWhiteWolf recebeu reputação de Calisto em Direção de Ataque   
    Bom galera, tem uma coisa bem simples que nem o tibia global fez e que eu to trazendo aqui pra vocês. Trata-se de um pequeno sistema que fará você sempre virar pra direção do seu target ao atacar.
    Testado em TFS 0.3.6 Cliente 8.54.

    Imagem auto explicativa:




    Chega de atacar de costas! 

    Agora pra instalar é bem tranquilo. Abra um arquivo .lua em data\creaturescripts\scripts chamado target e coloque o seguinte conteudo dentro dele:




    Feito isso adicione essa linha no creaturescripts.xml:
    <event type="attack" name="targetCreature" script="target.lua"/> E para finalizar adicione a seguinte tag em creaturescripts\scripts\login.lua:
    registerCreatureEvent(cid, "targetCreature") Espero que vcs tenham curtido, é algo bem simples mas ninguém havia pensado nisso antes (nem o próprio Tibia), é uma coisa bem básica e que torna o jogo bem mais importante e sério. 


    EDIT:: Usem essa versão que está mais completa, na anterior se o target estivesse na diagonal ele não virava.



  25. Gostei
    xWhiteWolf recebeu reputação de Yan Liima em Callbacks de creaturescripts   
    Fala galera do TK, hoje eu vim trazer pra vocês uma coisa que se perdeu em todos esses anos de OT e que é uma das coisas mais importantes prum scripter intermediário/avançado. São as explicações dos respectivos callbacks de creaturescripts. Espero que ajude bastante gente

    Créditos: 90% Zonnebloem (um gringo ai que postou isso das sources) e 10% pra mim por completar oque ele não tinha escrito e arrumado umas coisas que ele escreveu errado.
     
        ____________________________     CREATURE EVENTS TIPOS:  _________________

    TFS 0.2
    type="login"     function onLogin(cid)   type="logout"     function onLogout(cid)   type="advance"     function onAdvance(cid, skill, oldLevel, newLevel)   type="think"     function onThink(cid, interval)   type="kill"     function onKill(cid, target)   type="death"     function onDeath(cid, corpse, lasthitkiller, mostdamagekiller, lasthitunjustified, mostdamageunjustified)   type="preparedeath"     function onPrepareDeath(cid, killer) TFS 0.3/0.4
    type="login"     function onLogin(cid)   type="logout"     function onLogout(cid)   type="advance"     function onAdvance(cid, skill, oldLevel, newLevel)   type="think"     function onThink(cid, interval)   type="kill"     function onKill(cid, target, lastHit)   type="death"     function onDeath(cid, corpse, deathList)   type="preparedeath"     function onPrepareDeath(cid, deathList)   type="statschange"     function onStatsChange(cid, attacker, type, combat, value)   type="combat"     function onCombat(cid, target)   type="target"     function onTarget(cid, target)   type="look"     function onLook(cid, thing, position, lookDistance)   type="textedit"     function onTextEdit(cid, item, newText)   type="outfit"     function onOutfit(cid, old, current)   type="push"     function onPush(cid, target)   type="follow"     function onFollow(cid, target)   type="attack"     function onAttack(cid, target)   type="areacombat"     function onAreaCombat(cid, tileItem, tilePosition, isAggressive)   type="cast"     function onCast(cid, target)   type="direction"     function onDirection(cid, old, current)   type="reportbug"     function onReportBug(cid, comment)   type="sendmail"     function onSendMail(cid, receiver, item, openBox)   type="receivemail"     function onReceiveMail(cid, sender, item, openBox)   type="traderequest"     function onTradeRequest(cid, target, item)   type="tradeaccept"     function onTradeAccept(cid, target, item, targetItem)   type="joinchannel"     function onJoinChannel(cid, channel, users)   type="leavechannel"     function onLeaveChannel(cid, channel, users) TFS 1.0
    type="login"     function onLogin(cid)   type="logout"     function onLogout(cid)   type="think"     function onThink(cid, interval)   type="preparedeath"     function onPrepareDeath(cid, killer)   type="death"     function onDeath(cid, corpse, lasthitkiller, mostdamagekiller, lasthitunjustified, mostdamageunjustified)   type="kill"     function onKill(cid, target)   type="advance"     function onAdvance(cid, skill, oldLevel, newLevel)   type="modalwindow"     function onModalWindow(cid, modalWindowId, buttonId, choiceId)   type="textedit"     function onTextEdit(cid, item, text)   type="changehealth"     function onChangeHealth(cid, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType)   type="changemana"     function onChangeMana(cid, attacker, manaChange)   type="extendedopcode"     function onExtendedOpcode(cid, opcode, buffer)     ____________________________     INFORMAÇÃO SOBRE OS TIPOS:  _________________
    antes de tudo tenha em mente que os tipos só serão executados no player ou monstro em que eles forem registrados; Registrar no login.lua vai fazer com que ele seja executado em todos os players assim q eles logarem. Se deve ser executado somente por alguns monstros, registre no monstro em questão no xml dele.

    login

    Quando é executada:
    - Quando um player loga

    Parametros:
    - cid = creatureid do player que logou

    quando está return false:
    - nada

    registra creature event:
    - não

    ~~~~

    logout

    Quando é executada:
    - quando um player desloga pelo logout do próprio cliente. Não acontece se o player morrer, for disconectado ou xlogs

    Parametros:
    - cid = creatureid do player que deslogou

    quando está return false:
    - Player não vai conseguir deslogar

    registra creature event:
    - não

    ~~~~

    advance

    Quando é executado:
    - Toda vez que um player avançar de level, magic level ou qualquer outra skill

    Parametros:
    - cid = creature id do player que avançou
    - skill = tipo da skill que o player avançou vide tabela abaixo (note que vc pode utilizar tanto o nome SKILL_FIST quanto o numero 0)
    SKILL_FIST = 0 SKILL_CLUB = 1 SKILL_SWORD = 2 SKILL_AXE = 3 SKILL_DISTANCE = 4 SKILL_SHIELD = 5 SKILL_FISHING = 6 SKILL__MAGLEVEL = 7 SKILL__LEVEL = 8 - oldlevel = level antes do player avançar
    - newlevel = o novo level após avançar

    quando está return false:
    - ele não vai avançar o nível

    Registra creature event:
    - sim (isso significa que vc pode colocar pra ele registrar um outro creatureevent dentro desse script após alcançar X level)

    ~~~~

    think

    Quando é executada:
    - Pelo tempo

    Parametros:
    - cid = creatureid do monstro ou player
    - interval = intervalo entre cada checagem OU em que intervalo deve ser executada, 500 é 0.5 segundo.

    quando está return false:
    - nada

    Registra creature event:
    - sim

    ~~~~

    kill

    Quando é executada:
    - Ao matar um player/monstro

    Parametros:
    - cid = creatureid do player ou do monstro que mata
    - target = creatureid do player ou monstro que é morto

    quando está return false:
    - O target não morrerá, ele ficará com 0 de vida e a barra sumirá para os inimigos.Ele precisará se curar para que sua barra de vida volte

    registra creature event:
    -sim

    ~~~~

    death

    Quando é executada:
    - Quando um player ou monstro morrem

    Parametros:
    - cid = creatureid do player monstro que morre
    - corpse = corpo do monstro ou player que morre

    exemplo de adicionando 3 crystal coins no corpo que morreu.
    doAddContainerItem(corpse.uid, 2160, 3) - deathlist = uma table com o nome de todos que mataram, sendo na ordem o deathlist[1] oque deu o ultimo hit e o deathlist[2] sendo oque deu mais dano.
    quando está return false:
    - O corpo não será criado

    Registra creature event:
    - Sim

    ~~~~

    preparedeath

    Quando é executada:
    - Quando um monstro ou player está prestes a morrer (pode ser usada em scripts que devem ser executados no segundo antes do player morrer)

    Parameters:
    - cid = creatureid do player ou monstro que está prestes a morrer
    - deathlist = uma tabela com o nome dos atacantes

    quando está return false:
    - o player ou monstro não irá morrer (mesma história do kill)

    Registra creature event:
    - Sim

    ~~~~

    statschange

    quando é executada:
    -Quando um player ou monstro ou ganha ou perde vida/mana de um combat ou uma função (combats não são só os das spells, mas também weapons/fist/melee... vale lembrar também que monstros não possuem mana)

    Parametros:
    - cid = creatureid do player ou monstro q ganha/perde vida/mana
    - attacker = creatureid do player ou monstro que causou a mudança na health/mana
    - type = tipo da mudança, sendo ela:Ganho de vida, perca de vida, ganho de mana e perca de mana vide tabela abaixo:
    STATSCHANGE_HEALTHGAIN = 0 STATSCHANGE_HEALTHLOSS = 1 STATSCHANGE_MANAGAIN = 2 STATSCHANGE_MANALOSS = 3 - combat = o tipo de combat que causou a alteração, sendo esses tipos:
    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 - value = valor da mudança
    quando está return false:
    - O player ou o monstro não ganharão/perderão vida/mana no combat. Pode ser usado pra fazer ele ficar imortal por um certo período ou não ser capaz de tomar dano de certos players/creaturas 

    Registra creature event:
    - Sim

    ~~~~

    combat

    Quando é executado:
    - Quando um player ou monstro starta um combat (qualquer tipo de ataque)

    Parametros:
    - cid = creatureid do player ou monstro que usa o combat
    - target = creatureid do player ou monstro que sofre o combat

    quando está return false:
    - O player ou monstro não será capaz de levar ataques, isso também inclui que ele não poderá dar target em alguém/algo . Isso pode ser usado para criar monstros que não possam levar ataques ou fazer players ficarem imunes a dano por um certo tempo.

    Registra creature event:
    - Sim


    _______________________________________________________________________________________________

    Agora começa a graça da coisa:


    ~~~~

    target

    Quando é executado:
    - Quando um player ou monstro dá target em um player/mostro (follow/attack)

    Parametros:
    - cid = creatureid do player ou monstro que dá o target
    - target = creatureid do player ou monstro que é targeted

    quando está return false:
    - O player/monstro não poderá dar target.. alguns testes com monstros revelaram que o monstro ainda consegue te atacar então acho que essa função só serve para player

    Registra creature event:
    - Sim
     

    ~~~~

    look

    Quando é executado:
    - Quando um player dá look em algo

    Parametros:
    - cid = creatureid do player que dá o look
    - thing = objeto/player/monstro que o player dá look
    - position = não tenho certeza se é a posição do objeto que é dado look ou se é a minha posição.
    - lookDistance = distancia entre esse objeto e eu.

    quando está return false:
    - Não aparece a mensagem de look na tela

    Registra creature event:
    - Sim
     
    ~~~~

    textedit

    Quando é executado:
    - Quando um player edita um texto em algum item writeable (livros por exemplos)

    Parametros:
    - cid = creatureid do player
    - item = item que está sendo modificiado
    - newText = texto novo que foi escrito 

    quando está return false:
    - O player não conseguirá editar o texto, quando ele tentar dar ok o item continuará com o mesmo texto.. Pode ser usado numa quest com muito RPG pra checar se a senha que o player escreveu no livro é a correta.

    Registra creature event:
    - sim
     
    ~~~~

    outfit

    Quando é executado:
    - Quando um player ou monstro muda de outfit

    Parametros:
    - cid = creatureid do player ou monstro que muda de outfit
    - old = outfit antiga
    - current = outfit atual (após ter trocado)

    quando está return false:
    - a troca de outfit será cancelada e o player/monstro voltará para a antiga outfit

    Registra creature event:
    - sim
     
    ~~~~

    push

    Quando é executado:
    - Quando um player tenta empurrar um monstro ou um player

    Parametros:
    - cid = creatureid do player que empurrar
    - target = creatureid do player ou monstro que é empurrado

    quando está return false:
    - O player não conseguirá empurrar (arrastar o oponente com o mouse). É bastante util em eventos para que eles não possam ficar se empurrando

    Registra creature event:
    - sim
     
    ~~~~

    follow

    Quando é executado:
    - Quando um player dá follow em algum monstro ou player ou até num NPC

    Parametros:
    - cid = creatureid do player que dá o follow
    - target = creatureid da criatura (monstro/npc/player) que é seguida

    quando está return false:
    - O follow não irá ocorrer

    Registra creature event:
    - Sim
     
    ~~~~

    attack

    Quando é executado:
    - Quando um player ou monstro ataca (melee, spells não contam)

    Parametros:
    - cid = creatureid do player ou monstro que ataca
    - target = creatureid do player ou monstrp que sofre o ataque

    quando está return false:
    - O player/monstro não irá atacar, é bastante útil em sistemas que vc queira deixar uma certa criatura imune a ataques mas que ela ainda possa morrer pra spells

    Registra creature event:
    - Sim
     
    ~~~~

    areacombat

    Quando é executado:
    - Quando um player ou monstro starta um combat em área (usa uma spell ou dano em área)

    Parametros:
    - cid = creatureid do player ou monstro que usa o combat
    - tileItem = player que está dentro da area
    - tilePosition = posição do player que está dentro da area
    - isAggressive = se esse combat em área é agressivo ou não, lembre-se que magias como exura gran mas res fazem combat em área mas esse combat não é agressivo porque ela cura em área

    quando está return false:
    - o combat é cancelado

    Registra creature event:
    - Sim
     

    ~~~~

    cast

    Quando é executado:
    - Quando um player ou monstro solta uma magia

    Parametros:
    - cid = creatureid do player ou monstro que usa a magia
    - target = creatureid do player ou monstro que sofre o dano da magia

    quando está return false:
    - a magia não é lançada

    Registra creature event:
    - sim
     
    ~~~~

    direction

    Quando é executado:
    - Quando uma criatura (NPC/Player/Monster) muda de direção 

    Parametros:
    - cid = creatureid do player ou monstro que mudará de direção
    - old =  direção antiga
    - current = direção atual, após ter mudado, vide tabela abaixo:
    NORTH = 0EAST = 1 SOUTH = 2 WEST = 3 SOUTHWEST = 4 SOUTHEAST = 5 NORTHWEST = 6 NORTHEAST = 7 atente-se no fato de que não é possível virar pras direções 4,5,6 e 7 mas você utilizá-las num script que cheque a direção entre dois players, daí sim seria possível (como é no caso do exiva)
    quando está return false:
    - A criatura não será capaz de mudar de direção

    Registra creature event:
    - Sim
     
    ~~~~

    reportbug

    Quando é executado:
    - Quando um player reporta um bug

    Parametros:
    - cid = creatureid do player que reportou o bug
    - comment = comentário que ele adicionou ao reportar

    quando está return false:
    - O report será cancelado e não será enviado. Pode ser usado num script avançado de reports onde se o player não tiver escrito nenhum comentário ou tiver escrito determinadas palavras o envio será cancelado (pra evitar spams)

    Registra creature event:
    - Sim
     
    ~~~~

    sendmail

    Quando é executado:
    - Quando um player manda uma carta/parcel para outro

    Parametros:
    - cid = creatureid do player que mandou a correspondencia
    - receiver = creatureid do player que irá receber essa correspondencia
    - item = item que foi enviado (id dele)
    - openBox = conteúdo (no caso de parcel)

    quando está return false:
    - Correspondência não será enviada. É util pra registrar um log de todas as trocas entre players e pegar hackers.

    Registra creature event:
    - Sim
     
    ~~~~

    receivemail

    Quando é executado:
    - Quando um player recebe uma carta/parcel de outro

    Parametros:
    - cid = creatureid do player que recebou a correspondência
    - sender = creatureid do player que enviou a correspondência
    - item =  item recebido
    - openBox =  conteúdo da correspondencia (no caso de ser uma parcel)

    quando está return false:
    - Ele não receberá a correspondência.

    Registra creature event:
    - Sim 

    ~~~~

    traderequest

    Quando é executado:
    - Quando um player dá trade

    Parametros:
    - cid = creatureid do player que deu o trade
    - target = creatureid do player que ele tentou iniciar uma troca
    - item = item que foi iniciada a troca (se for uma backpack cheia de coisas dentro esse item será uma table com todos os itens)

    quando está return false:
    - A troca não será executada. É útil para scripts de itens vip onde o player não possa trocar determinados itens

    Registra creature event:
    - Sim
     
    ~~~~

    tradeaccept

    Quando é executado:
    - Quando um player aceita a troca com outro)

    Parametros:
    - cid = creatureid do player que aceitou a troca (você)
    - target = creatureid do player que aceitou a troca (cara com quem você trocou)
    - item = items que você deu em troca, no caso de uma backpack cheia de itens esse parametro será uma table com todos os itens
    - targetItem =  items que você recebeu em troca, no caso de uma backpack cheia de itens esse parametro será uma table com todos os itens

    quando está return false:
    - a troca não será concluída.

    Registra creature event:
    - Sim
     
    ~~~~

    joinchannel

    Quando é executado:
    - Quando um player entra num channel (aqueles canais tipo trade/ help chat/ info/ guild/ etc...)

    Parametros:
    - cid = creatureid do player que entrou no chat
    - channel = canal que o player entrou.. vide lista abaixo:
    CHANNEL_GUILD = 0 CHANNEL_PARTY = 1 CHANNEL_RVR = 3 CHANNEL_HELP = 9 CHANNEL_DEFAULT = 0xFFFE CHANNEL_PRIVATE = 0xFFFF - users = outros usuários do canal.
    quando está return false:
    - O player não conseguirá entrar no channel

    Registra creature event:
    - Sim
     
    OBS: a mesma coisa vale pra função leavechannel, só que o return false o player não conseguirá sair do channel.


    Espero que isso ajude bastante gente, eu não expliquei os types da versão 1.0 porque é basicamente a mesma coisa e pelos parametros dá pra você ter uma ideia doque é oque. :]
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo