Ir para o conteúdo

Funções de Habilidade

Consultas de Informação de Habilidade

Todas recebem um index (number) de habilidade e retornam number.

Função Descrição
GetSkillDamage(index) Dano base da habilidade
GetSkillMana(index) Custo de mana
GetSkillBP(index) Custo de AG (BP)
GetSkillType(index) Tipo de habilidade (ataque, buff, etc.)
GetSkillEffect(index) ID do efeito que a habilidade aplica
GetSkillDelay(index) Tempo de recarga
GetSkillDamageType(index) Tipo de dano (físico, mágico, etc.)
GetElementImprintBonus(index) Valor de bônus de impressão elemental
GetAddDamageOption(index) Valor da opção de dano adicional
local manaCost = GetSkillMana(41) -- Mana cost of skill 41
local dmg = GetSkillDamage(41)
LogAdd(LOG_BLUE, "Skill 41: damage=" .. dmg .. " mana=" .. manaCost)

Informação de Habilidade (Dependente do Objeto)

Função Descrição
GetSkillRange(lpObj, index) Alcance efetivo para o jogador
GetSkillRadio(lpObj, index) Raio de AoE para o jogador
GetSkillSlot(lpObj, index) Índice do slot da habilidade na lista de habilidades do jogador
GetSkillMultiCount(lpObj, lpSkill) Número de alvos multi-hit
local range = GetSkillRange(player, 41)

GetSkillNumber(index, level)

Retorna o número de habilidade resolvido para uma habilidade base em um determinado nível.

local resolved = GetSkillNumber(41, 10)

GetSkillAngle(x, y, tx, ty)

Calcula o ângulo entre duas posições (para habilidades de frustrum).

  • Retorna: number — valor do ângulo
local angle = GetSkillAngle(player.X, player.Y, target.X, target.Y)

AttackDirection(aIndex, bIndex)

Retorna o byte de direção de ataque do atacante para o alvo.

local dir = AttackDirection(player.Index, target.Index)

GetDirectionAboutByte(dir)

Converte um byte de direção em um valor de direção normalizado.

local normalized = GetDirectionAboutByte(dir)

Verificações de Requisitos de Habilidade

Todas retornam boolean.

Função Descrição
CheckSkillMana(lpObj, index) Tem mana suficiente
CheckSkillBP(lpObj, index) Tem AG suficiente
CheckSkillRange(lpObj, index, x, y, tx, ty) Alvo está no alcance
CheckSkillRadio(lpObj, index, x, y, tx, ty) Alvo está no raio de AoE
CheckSkillDelay(lpObj, lpSkill, type) Habilidade não está em recarga
CheckSkillTarget(lpObj, aIndex, bIndex, type) Alvo é válido
CheckSkillRequireLevel(lpObj, index) Jogador atende requisito de nível
CheckSkillRequireEnergy(lpObj, index) Jogador atende requisito de energia
CheckSkillRequireLeadership(lpObj, index) Jogador atende requisito de liderança
CheckSkillRequireKillPoint(lpObj, index) Jogador atende requisito de pontos de kill
CheckSkillRequireGuildStatus(lpObj, index) Jogador atende requisito de status de guilda
CheckSkillRequireClass(lpObj, index) Habilidade está disponível para a classe do jogador
CheckSkillRequireWeapon(lpObj, index) Jogador tem a arma necessária equipada
CheckAttackRange(nIndex, nTargetIndex, nDistance, nAttackType, nSubAttackType) Verificação de alcance de ataque
if CheckSkillMana(player, 41) and CheckSkillBP(player, 41) then
    LogAdd(LOG_GREEN, "Player can cast skill 41.")
end

IsSkillItem(index)

Retorna true se o índice de habilidade fornecido pertence a uma habilidade de item.

if IsSkillItem(41) then
    LogAdd(LOG_BLUE, "Skill 41 is an item-based skill.")
end

Adicionar/Remover Habilidades

Função Descrição Retorna
AddSkill(lpObj, index, level, group) Adiciona ou atualiza uma habilidade number (slot)
DelSkill(lpObj, index) Remove uma habilidade number
GetSkill(lpObj, index) Obtém o objeto CSkill CSkill ou nil
AddSkillWeapon(lpObj, index, level) Adiciona uma habilidade de arma number
DelSkillWeapon(lpObj, index, level) Remove uma habilidade de arma number
AddMasterSkill(lpObj, index, level) Adiciona uma habilidade Master number
DelMasterSkill(lpObj, index) Remove uma habilidade Master number
GetMasterSkill(lpObj, index) Obtém um CSkill Master CSkill ou nil
AddEnhanceSkill(lpObj, index, level, group) Adiciona uma habilidade Enhance (4a) number
AddEnhancePassiveSkill(lpObj, index, level, group) Adiciona uma habilidade passiva Enhance number
GetEnhanceSkill(lpObj, index, group) Obtém um CSkill Enhance CSkill ou nil
GetEnhancePassiveSkill(lpObj, index, group) Obtém um CSkill passivo Enhance CSkill ou nil
AddSkill(player, 41, 1, 0) -- Add skill 41 at level 1
GCSkillListSend(player, 0)  -- Refresh client skill list

Consultas da Árvore de Habilidades

Função Descrição Retorna
CheckMasterLevel(lpObj) Pode ganhar experiência Master boolean
GetMasterSkillValue(lpObj, skillIndex) Valor calculado de uma habilidade Master number (float)
GetMasterSkillLevel(lpObj, skillIndex) Nível atual de uma habilidade Master number
CheckEnhanceLevel(lpObj) Pode usar árvore de habilidades 4a boolean
CheckAbilityLevel(lpObj) Pode usar Ability Enhancement (v1913+) boolean
GetEnhanceSkillValue(lpObj, skillIndex, group) Valor de uma habilidade Enhance number
if CheckMasterLevel(player) then
    local val = GetMasterSkillValue(player, 300)
    LogAdd(LOG_BLUE, "Master skill 300 value: " .. val)
end

Funções Especiais de Habilidade

SkillSpinStepExplosion(lpObj, lpTarget, skillIndex, damage)

Executa a habilidade Spin Step Explosion (Rage Fighter). Disponível a partir da versão S6.

  • Retorna: boolean
SkillSpinStepExplosion(player, target, 260, 500)

SkillMagicGladiatorExplosion(lpObj, skillIndex, damage)

Executa a habilidade AoE Explosion do MG.

SkillMagicGladiatorExplosion(player, 90, 1000)

gObjSkillUseProc(lpObj)

Processa ações de habilidades pendentes para o objeto. Usado na IA de monstros.

gObjSkillUseProc(monster)

Essas funções enviam pacotes relacionados a habilidades para clientes como feedback visual.

GCSkillAttackSend(lpObj, skillIndex, lpTarget, type)

Notifica os clientes sobre uma animação de ataque de habilidade.

GCSkillAttackSend(player, 41, target, 0)

GCSkillCancelSend(lpObj, skill)

Cancela um efeito de habilidade no cliente.

GCSkillCancelSend(player, 41)

GCDurationSkillAttackSend(lpObj, bIndex, skill, x, y, dir)

Envia um ataque de habilidade baseado em duração (ex.: efeitos de área).

GCDurationSkillAttackSend(player, target.Index, 41, player.X, player.Y, player.Dir)

GCSkillActionSend(lpObj, lpSkill, bIndex, skillsuccess, x, y)

Envia um pacote de ação de habilidade (usado para habilidades de buff/especiais).

local sk = GetSkill(player, 41)
if sk then
    GCSkillActionSend(player, sk, target.Index, 1, player.X, player.Y)
end

GCRuneWizzardSkillAttackSend(lpObj, lpSkill, tx, ty, dir, angle)

Envia um pacote de ataque de habilidade do Rune Wizard.

local sk = GetSkill(player, 700)
if sk then
    GCRuneWizzardSkillAttackSend(player, sk, target.X, target.Y, player.Dir, 0)
end

GCRageFighterSkillAttackSend(lpObj, skill, aIndex, type)

Envia um pacote de ataque de habilidade do Rage Fighter.

GCRageFighterSkillAttackSend(player, 260, target.Index, 0)

GCSkillAddSend(aIndex, slot, skill, level, type)

Notifica o cliente que uma habilidade foi adicionada.

GCSkillAddSend(player.Index, 5, 41, 1, 0)

GCSkillDelSend(aIndex, slot, skill, level, type)

Notifica o cliente que uma habilidade foi removida.

GCSkillDelSend(player.Index, 5, 41, 1, 0)

GCSkillListSend(lpObj, type)

Envia a lista completa de habilidades para o cliente do jogador.

GCSkillListSend(player, 0) -- Refresh after adding/removing skills