kimi gone wild

This commit is contained in:
ra
2026-02-14 23:12:33 -07:00
parent bbd205ecbe
commit 0222be36c5
98 changed files with 39726 additions and 309 deletions

View File

@@ -225,4 +225,161 @@ defmodule Odinsea.Constants.Game do
_ -> "Unknown"
end
end
# =============================================================================
# Skill & Attack Constants (for Anti-Cheat)
# =============================================================================
@doc """
Returns the attack delay for a skill (in ticks).
Used for speed hack detection.
"""
def get_attack_delay(skill_id) do
if skill_id == 0 do
# Normal attack delay
300
else
# Get from skill data or use default
get_skill_delay(skill_id) || 300
end
end
@doc """
Returns the skill damage percentage.
"""
def get_skill_damage(skill_id) do
# Default skill damage, would be loaded from WZ in production
case skill_id do
0 -> 100
# Common skills
1000 -> 40
1009 -> 3000
1020 -> 1
# Warrior
1001004 -> 150
1001005 -> 200
1101006 -> 180
# Mage
2001008 -> 120
2101004 -> 130
2201004 -> 130
# Bowman
3101005 -> 150
3201005 -> 150
# Thief
4001334 -> 130
4101005 -> 140
4201005 -> 140
# Pirate
5001002 -> 160
5101004 -> 150
5201004 -> 150
# Aran
21000002 -> 180
21100001 -> 190
_ -> 100
end
end
@doc """
Returns the attack range for a skill.
"""
def get_attack_range(skill_id) do
case skill_id do
0 -> 100
# Ranged skills
3101005 -> 500
3201005 -> 500
4001334 -> 250
4101005 -> 250
4121007 -> 300
4201005 -> 150
4221007 -> 600
# Melee skills
_ -> 150
end
end
@doc """
Returns true if skill is a Mu Lung Dojo skill.
"""
def is_mulung_skill?(skill_id) do
skill_id >= 10001000 && skill_id < 10002000
end
@doc """
Returns true if skill is a Pyramid skill.
"""
def is_pyramid_skill?(skill_id) do
skill_id >= 1020 && skill_id <= 1022
end
@doc """
Returns true if skill has no delay.
"""
def is_no_delay_skill?(skill_id) do
# Skills that bypass attack delay checks
skill_id in [3101005, 1009, 1020]
end
@doc """
Returns true if skill is a magic charge skill.
"""
def is_magic_charge_skill?(skill_id) do
skill_id in [2121001, 2221001, 2321001]
end
@doc """
Returns true if skill is an event skill.
"""
def is_event_skill?(skill_id) do
# Skills only usable in specific event maps
skill_id >= 90001000 && skill_id < 90002000
end
@doc """
Returns the linked Aran skill (for skill linking).
"""
def get_linked_aran_skill(skill_id) do
# Handle Aran skill linking
if div(skill_id, 10000) == 21 do
# Convert Aran skills to regular warrior equivalents for linking
base = rem(skill_id, 10000)
cond do
base == 1005 -> 1101005
base == 1004 -> 1101006
true -> skill_id
end
else
skill_id
end
end
# =============================================================================
# Private Helpers
# =============================================================================
defp get_skill_delay(skill_id) do
case skill_id do
0 -> 300
1000 -> 600
1004 -> 600
1005 -> 900
1001004 -> 960
1001005 -> 1260
1101006 -> 1050
2001008 -> 810
2101004 -> 810
2201004 -> 810
3101005 -> 840
3201005 -> 840
4001334 -> 600
4101005 -> 720
4201005 -> 720
5001002 -> 600
5101004 -> 660
5201004 -> 660
_ -> nil
end
end
end