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