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. :]