using BrewMonster.Assets.PerfectWorld.Scripts.Skills; using System.Collections.Generic; using System.Text; using UnityEngine; namespace BrewMonster.Scripts.Skills { public static class GNET { public static readonly Dictionary TeamState; public static readonly Dictionary VisibleState; // [中文] 首次访问 GNET 时由 CLR 调用,无需手动 Init // [English] Populated on first access to GNET; no manual Init() required. /// Same as C++ TeamStateImp::Query — returns null if id is not registered. public static TeamStateImp QueryTeamState(int id) => TeamState.TryGetValue(id, out var s) ? s : null; /// Same as C++ VisibleStateImp::Query(prof,id) — prof unused; null if id missing. public static VisibleStateImp QueryVisibleState(int prof, int id) => VisibleState.TryGetValue(id, out var v) ? v : null; public static VisibleStateImp QueryVisibleState(int id) => VisibleState.TryGetValue(id, out var v) ? v : null; static GNET() { var team = new Dictionary(); var visible = new Dictionary(); visible.Add(1, new VisibleStateImp(1, "强化","属性增强.gfx","")); visible.Add(2, new VisibleStateImp(2, "弱化","属性下降.gfx","")); visible.Add(3, new VisibleStateImp(3, "反震","物理反震.gfx","HH_Spine")); visible.Add(4, new VisibleStateImp(4, "迟滞","迟滞.gfx","")); visible.Add(5, new VisibleStateImp(5, "昏迷","震晕.gfx","HH_Head")); visible.Add(6, new VisibleStateImp(6, "睡眠","睡眠.gfx","")); visible.Add(7, new VisibleStateImp(7, "定身","定身.gfx","")); visible.Add(8, new VisibleStateImp(8, "麻痹","封印.gfx","")); visible.Add(9, new VisibleStateImp(9, "受诅","特殊不利状态.gfx","HH_Head")); visible.Add(10, new VisibleStateImp(10, "雷击","持续金系攻击.gfx","HH_Head")); visible.Add(11, new VisibleStateImp(11, "中毒","中毒.gfx","HH_Head")); visible.Add(12, new VisibleStateImp(12, "燃烧","持续火攻击.gfx","HH_Head")); visible.Add(13, new VisibleStateImp(13, "落石","持续土系伤害.gfx","")); visible.Add(14, new VisibleStateImp(14, "放血","放血.gfx","HH_Head")); visible.Add(15, new VisibleStateImp(15, "魔力燃烧","魔力燃烧.gfx","HH_Head")); visible.Add(16, new VisibleStateImp(16, "霜刃","霜刃状态.gfx","HH_RighthandWeapon")); visible.Add(17, new VisibleStateImp(17, "爆气","爆气效果状态.gfx","HH_RighthandWeapon")); visible.Add(18, new VisibleStateImp(18, "附火伤","烈焰之矢.gfx","HH_RighthandWeapon")); visible.Add(19, new VisibleStateImp(19, "鲜花1","康乃馨环绕.gfx","")); visible.Add(20, new VisibleStateImp(20, "鲜花2","百合环绕.gfx","")); visible.Add(21, new VisibleStateImp(21, "鲜花3","菊花环绕.gfx","")); visible.Add(22, new VisibleStateImp(22, "鲜花4","玫瑰环绕.gfx","")); visible.Add(23, new VisibleStateImp(23, "弱魂","弱魂咒状态.gfx","HH_Head")); // 法师特有 visible.Add(24, new VisibleStateImp(24, "烈焰护甲","烈焰护甲.gfx","HH_Spine")); visible.Add(25, new VisibleStateImp(25, "寒冰护甲","寒冰护甲.gfx","HH_Spine")); visible.Add(26, new VisibleStateImp(26, "磐石护甲","磐石护甲.gfx","HH_Spine")); visible.Add(27, new VisibleStateImp(27, "避水诀","避水诀.gfx","HH_Spine")); // 羽灵特有 visible.Add(28, new VisibleStateImp(28, "羽盾","羽盾.gfx","HH_Spine")); // 羽芒特有 visible.Add(29, new VisibleStateImp(29, "翼盾","翼盾.gfx","HH_Spine")); visible.Add(30, new VisibleStateImp(30, "烈焰之矢","烈焰之矢.gfx","HH_LefthandWeapon")); // 妖精特有 visible.Add(31, new VisibleStateImp(31, "荆棘阵","魔法反震.gfx","HH_Spine")); visible.Add(32, new VisibleStateImp(32, "妖狐变","妖狐附体状态.gfx","HH_Spine")); // 怪物特有 visible.Add(33, new VisibleStateImp(33, "目盲","主动变被动.gfx","")); visible.Add(34, new VisibleStateImp(34, "封印免疫","封印免疫.gfx","")); visible.Add(35, new VisibleStateImp(35, "睡眠免疫","睡眠免疫.gfx","")); visible.Add(36, new VisibleStateImp(36, "火系免疫","火系免疫.gfx","HH_Spine")); visible.Add(37, new VisibleStateImp(37, "水系免疫","水系免疫.gfx","HH_Spine")); visible.Add(38, new VisibleStateImp(38, "金系免疫","金系免疫.gfx","HH_Spine")); visible.Add(39, new VisibleStateImp(39, "木系免疫","木系免疫.gfx","HH_Spine")); visible.Add(40, new VisibleStateImp(40, "土系免疫","土系免疫.gfx","HH_Spine")); visible.Add(41, new VisibleStateImp(41, "风盾术","风盾术.gfx","HH_Spine")); visible.Add(42, new VisibleStateImp(42, "气流锁","气流锁.gfx","HH_Spine")); visible.Add(43, new VisibleStateImp(43, "元素虚弱","元素虚弱状态.gfx","")); visible.Add(44, new VisibleStateImp(44, "伤害加深免疫","伤害加深免疫.gfx","")); visible.Add(45, new VisibleStateImp(45, "冻结 ","冻结.gfx","HH_Spine")); visible.Add(46, new VisibleStateImp(46, "真空","真空.gfx","HH_Spine")); visible.Add(47, new VisibleStateImp(47, "水火护甲","水火护甲.gfx","HH_Spine")); visible.Add(48, new VisibleStateImp(48, "法师之星","法师之星.gfx","HH_Spine")); visible.Add(49, new VisibleStateImp(49, "无敌","无敌.gfx","HH_Spine")); visible.Add(50, new VisibleStateImp(50, "持续增加元气","持续增加元气.gfx","")); visible.Add(51, new VisibleStateImp(51, "持续降低元气","持续降低元气.gfx","")); visible.Add(52, new VisibleStateImp(52, "攻击等级增加","攻击等级增加.gfx","")); // visible.Add(53, new VisibleStateImp(53, "防御等级增加", "防御等级增加.gfx", "")); visible.Add(54, new VisibleStateImp(54, "吸收物理伤害","吸收物理伤害.gfx","HH_Spine")); visible.Add(55, new VisibleStateImp(55, "吸收法术伤害","吸收法术伤害.gfx","HH_Spine")); visible.Add(56, new VisibleStateImp(56, "免疫流血","流血免疫.gfx","")); visible.Add(57, new VisibleStateImp(57, "坚壁","坚壁.gfx","HH_Spine")); visible.Add(58, new VisibleStateImp(58, "遁隐","遁隐.gfx","HH_Spine")); visible.Add(59, new VisibleStateImp(59, "反弹","复仇惩戒.gfx","HH_Spine")); visible.Add(60, new VisibleStateImp(60, "封印","复仇封印.gfx","HH_Spine")); visible.Add(61, new VisibleStateImp(61, "反击","复仇镜像.gfx","HH_Spine")); visible.Add(62, new VisibleStateImp(62, "击晕","复仇雷霆.gfx","HH_Spine")); visible.Add(63, new VisibleStateImp(63, "反噬","复仇反噬.gfx","HH_Spine")); visible.Add(64, new VisibleStateImp(64, "三世明王咒","三世明王咒.gfx","HH_Spine")); visible.Add(65, new VisibleStateImp(65, "金刚轮印咒","金刚轮印咒.gfx","HH_Spine")); visible.Add(66, new VisibleStateImp(66, "黑巫咒","黑巫咒.gfx","HH_Spine")); visible.Add(67, new VisibleStateImp(67, "白巫咒","白巫咒.gfx","HH_Spine")); visible.Add(68, new VisibleStateImp(68, "深度冰刺","深度冰刺.gfx","HH_右大臂")); visible.Add(69, new VisibleStateImp(69, "玄武剑诀","玄武剑诀.gfx","HH_righthandweapon")); visible.Add(70, new VisibleStateImp(70, "饮血剑诀","饮血剑诀.gfx","HH_righthandweapon")); visible.Add(71, new VisibleStateImp(71, "磐龙剑诀","磐龙剑诀.gfx","HH_righthandweapon")); visible.Add(72, new VisibleStateImp(72, "八方剑影","八方剑影.gfx","HH_Spine")); visible.Add(73, new VisibleStateImp(73, "火神","火神.gfx","HH_righthandweapon")); visible.Add(74, new VisibleStateImp(74, "毒种","碧云术.gfx","HH_spine")); visible.Add(75, new VisibleStateImp(75, "回血种","回风拂柳.gfx","HH_spine")); visible.Add(76, new VisibleStateImp(76, "增加木水物防","铁木衫.gfx","HH_spine")); visible.Add(77, new VisibleStateImp(77, "特殊的减速","腐蔓咒.gfx","HH_spine")); visible.Add(78, new VisibleStateImp(78, "向自己的宠物传输mp","电弧同气连枝.gfx","")); visible.Add(79, new VisibleStateImp(79, "加快吟唱增加法攻","风竹秋韵.gfx","HH_spine")); visible.Add(80, new VisibleStateImp(80, "增加物防暴击","魔神蚩尤牺牲.gfx","HH_spine")); visible.Add(81, new VisibleStateImp(81, "增加法防法攻","金光电母牺牲.gfx","HH_spine")); visible.Add(82, new VisibleStateImp(82, "向施放者(宠物)传输伤害","分担伤害.gfx","HH_spine")); visible.Add(83, new VisibleStateImp(83, "吸伤害加物法防","护盾.gfx","HH_spine")); visible.Add(84, new VisibleStateImp(84, "枯木逢春","枯木逢春.gfx","HH_spine")); visible.Add(85, new VisibleStateImp(85, "提升暴击(限制生效次数)","魅灵_灵机.gfx","HH_Spine")); visible.Add(86, new VisibleStateImp(86, "九尊剑诀","九尊剑诀.gfx","HH_righthandweapon")); visible.Add(87, new VisibleStateImp(87, "修罗道用光效","修罗道_10.gfx","HH_head")); visible.Add(88, new VisibleStateImp(88, "修罗道用光效","修罗道_50.gfx","HH_head")); visible.Add(89, new VisibleStateImp(89, "修罗道用光效","修罗道_100.gfx","HH_head")); visible.Add(90, new VisibleStateImp(90, "修罗道用光效","修罗道_300.gfx","HH_head")); visible.Add(91, new VisibleStateImp(91, "位置回溯","法师_静谧之术_状态效果.gfx","HH_Spine")); visible.Add(92, new VisibleStateImp(92, "生命回溯","法师_静谧之术2_状态效果.gfx","HH_Spine")); visible.Add(93, new VisibleStateImp(93, "强制选择目标","白虎_奋战扫击_持续效果.gfx","HH_Spine")); visible.Add(94, new VisibleStateImp(94, "吸收治疗","羽灵_天瀑符持续效果.gfx","HH_Spine")); visible.Add(95, new VisibleStateImp(95, "受到普攻后退并清debuff","法师_法之奥义_持续效果.gfx","HH_Spine")); visible.Add(96, new VisibleStateImp(96, "降低暴击抗性","羽灵_五感符持续效果.gfx","HH_Spine")); visible.Add(97, new VisibleStateImp(97, "转移技能攻击诅咒","巫师_复仇之魂——涅槃_状态效果.gfx","HH_Spine")); visible.Add(98, new VisibleStateImp(98, "受到攻击时额外对选定玩家发起攻击","刺客_魂葬印记状态效果.gfx","HH_Spine")); visible.Add(99, new VisibleStateImp(99, "禁止被选中","巫师_冥王乐土持续效果.gfx","HH_Spine")); visible.Add(100, new VisibleStateImp(100, "延迟土系伤害","持续土系伤害.gfx","HH_Spine")); visible.Add(101, new VisibleStateImp(101, "昏迷,自身受到伤害加深","法师_冰晶世界持续效果.gfx","HH_Spine")); visible.Add(102, new VisibleStateImp(102, "反弹之魂2(比例)","妖精_灵火持续.gfx","")); visible.Add(103, new VisibleStateImp(103, "受伤害时定身","法师_灸焰_状态效果.gfx","HH_Spine")); visible.Add(104, new VisibleStateImp(104, "受伤害时提升攻击力","妖兽_无畏_状态效果.gfx","HH_Spine")); visible.Add(105, new VisibleStateImp(105, "死战到底","白虎_无冕之王持续效果.gfx","HH_Spine")); visible.Add(106, new VisibleStateImp(106, "治疗偷取","魅灵_繁星_持续效果.gfx","HH_Spine")); visible.Add(107, new VisibleStateImp(107, "死亡掉落金币","刺客_飘零持续效果.gfx","HH_Spine")); visible.Add(108, new VisibleStateImp(108, "增加攻击距离","羽芒_回旋之翼_效果状态.gfx","HH_Spine")); visible.Add(109, new VisibleStateImp(109, "无敌5(驱除debuf持续回血昏迷)","巫师_流殇_持续冰块.gfx","")); visible.Add(110, new VisibleStateImp(110, "雷神变","羽灵_雷火堕_持续.gfx","")); visible.Add(111, new VisibleStateImp(111, "武侠剑刃光环光效","武侠_霸气持续.gfx","")); visible.Add(112, new VisibleStateImp(112, "妖精共舞调用","妖精_火狐之术持续.gfx","HH_Spine")); visible.Add(113, new VisibleStateImp(113, "法师冰晶世界调用","法师_冰晶世界_冰雾持续.gfx","")); visible.Add(114, new VisibleStateImp(114, "战场旗帜光效","旗子.gfx","HH_Head")); visible.Add(115, new VisibleStateImp(115, "任务用光效","小狗状态.gfx","HH_feijian")); visible.Add(116, new VisibleStateImp(116, "任务用光效","小白蛇状态.gfx","HH_feijian")); visible.Add(117, new VisibleStateImp(117, "瘫痪光效","瘫痪.gfx","HH_Head")); visible.Add(118, new VisibleStateImp(118, "特定技能吟唱时间降低光效","特定技能吟唱时间降低.gfx","HH_feijian")); visible.Add(119, new VisibleStateImp(119, "特定技能伤害增加光效","特定技能伤害增加.gfx","HH_feijian")); visible.Add(120, new VisibleStateImp(120, "回血护盾光效","回血护盾.gfx","HH_bind")); visible.Add(121, new VisibleStateImp(121, "飞行速度提高(可叠加刷新持续时间)","疾云步击中.gfx","HH_Spine")); visible.Add(122, new VisibleStateImp(122, "移动掉血","移动掉血_光效01.gfx","HH_feijian")); visible.Add(123, new VisibleStateImp(123, "不移动就掉血","不移动就掉血01.gfx","HH_bind")); visible.Add(125, new VisibleStateImp(125, "免疫打断护盾","魔法盾.gfx","HH_Spine")); visible.Add(127, new VisibleStateImp(127, "猎命状态","猎命状态效果01.gfx","HH_feijian")); visible.Add(128, new VisibleStateImp(128, "1白","月仙_冰球1个.gfx","HH_Spine")); visible.Add(129, new VisibleStateImp(129, "2白","月仙_冰球2个.gfx","HH_Spine")); visible.Add(130, new VisibleStateImp(130, "3白","月仙_冰球3个.gfx","HH_Spine")); visible.Add(131, new VisibleStateImp(131, "1黑","月仙_雷球1个.gfx","HH_Spine")); visible.Add(132, new VisibleStateImp(132, "2黑","月仙_雷球2个.gfx","HH_Spine")); visible.Add(133, new VisibleStateImp(133, "3黑","月仙_雷球3个.gfx","HH_Spine")); visible.Add(134, new VisibleStateImp(134, "1黑1白","月仙_1冰1雷球.gfx","HH_Spine")); visible.Add(135, new VisibleStateImp(135, "2黑1白","月仙_1冰2雷.gfx","HH_Spine")); visible.Add(136, new VisibleStateImp(136, "2白1黑","月仙_2冰1雷.gfx","HH_Spine")); visible.Add(137, new VisibleStateImp(137, "内伤状态","内伤01.gfx","HH_bind")); visible.Add(138, new VisibleStateImp(138, "死亡重置施法者冷却","死亡重置施法者冷却时间01.gfx","HH_Spine")); visible.Add(139, new VisibleStateImp(139, "普攻附加伤害","普攻附加额外伤害01.gfx","HH_shou03")); visible.Add(140, new VisibleStateImp(140, "技能CD改变","夜影_影噬_状态效果01.gfx","HH_feijian")); visible.Add(141, new VisibleStateImp(141, "啸月","啸月_施放起01.gfx","HH_feijian")); team.Add(1, new TeamStateImp(1, "昏迷\r无法进行任何移动和操作", "致晕")); team.Add(2, new TeamStateImp(2, "睡眠\r沉睡状态,受攻击会恢复", "睡眠")); team.Add(3, new TeamStateImp(3, "迟滞\r降低移动速度", "迟滞")); team.Add(4, new TeamStateImp(4, "物理反震\r反弹所有近身物理伤害", "对物理攻击产生反震")); team.Add(5, new TeamStateImp(5, "羽盾\r用真气值吸收一部伤害", "羽盾")); team.Add(6, new TeamStateImp(6, "烈焰护甲\r增加火防并提高生命恢复速度", "烈焰护甲")); team.Add(7, new TeamStateImp(7, "寒冰护甲\r增加水防并增加法力恢复速度", "寒冰护甲")); team.Add(8, new TeamStateImp(8, "定身\r无法移动", "定身")); team.Add(9, new TeamStateImp(9, "封印\r无法使用任何普攻和技能", "不能攻击")); team.Add(10, new TeamStateImp(10, "魅惑\r目标怪物变成被动攻击", "主动变被动")); team.Add(11, new TeamStateImp(11, "磐石护甲\r增加土防和物防", "磐石护甲")); team.Add(12, new TeamStateImp(12, "雷击\r持续受到金系伤害", "持续金系攻击")); team.Add(13, new TeamStateImp(13, "中毒\r持续受到木系伤害", "中毒")); team.Add(14, new TeamStateImp(14, "燃烧\r持续受到火系伤害", "持续火攻击")); team.Add(15, new TeamStateImp(15, "沙漩\r持续受到土系伤害", "持续土系伤害")); team.Add(16, new TeamStateImp(16, "法力燃烧\r真气持续减少", "持续mp减少状态")); team.Add(17, new TeamStateImp(17, "流血\r持续受到物理伤害", "放血")); team.Add(18, new TeamStateImp(18, "破甲\r物理防御力下降", "物理防御力下降")); team.Add(19, new TeamStateImp(19, "虚弱\r法术防御力下降", "五行防御力下降")); team.Add(20, new TeamStateImp(20, "蚀刃\r物理攻击力下降", "物理攻击力下降")); team.Add(21, new TeamStateImp(21, "诅咒\r受到伤害提升", "自身受到的物理伤害加倍")); team.Add(22, new TeamStateImp(22, "迟缓\r攻击速度减慢", "普通攻击间隔加长")); team.Add(23, new TeamStateImp(23, "迟钝\r减慢吟唱", "技能吟唱时间加长")); team.Add(24, new TeamStateImp(24, "目盲\r降低准确度", "准确度下降")); team.Add(25, new TeamStateImp(25, "笨拙\r躲闪度下降", "躲闪度下降")); team.Add(26, new TeamStateImp(26, "生命恢复加快", "hp恢复加快")); team.Add(27, new TeamStateImp(27, "真气恢复加快", "mp恢复加快")); team.Add(28, new TeamStateImp(28, "提升生命上限", "提升hp上限")); team.Add(29, new TeamStateImp(29, "提升真气上限", "提高mp上限")); team.Add(30, new TeamStateImp(30, "坚甲\r物理防御力提高", "物理防御力提高")); team.Add(31, new TeamStateImp(31, "聚神\r法术防御力提高", "法术防御力提高")); team.Add(32, new TeamStateImp(32, "利刃\r物理攻击力提高", "物理攻击力提高")); team.Add(33, new TeamStateImp(33, "迅捷\r攻击速度加快", "攻击速度加快")); team.Add(34, new TeamStateImp(34, "灵敏\r提高躲闪率", "提高躲闪度")); team.Add(35, new TeamStateImp(35, "祝福\r受到伤害减少", "自身伤害减半")); team.Add(36, new TeamStateImp(36, "灵巧\r提高准确度", "穿透")); team.Add(37, new TeamStateImp(37, "专注\r加快吟唱速度", "加快吟唱")); team.Add(38, new TeamStateImp(38, "攻击附加水伤害", "使普通攻击附加水系伤害")); team.Add(39, new TeamStateImp(39, "攻击附加火伤害", "使普通攻击附加火系伤害")); team.Add(40, new TeamStateImp(40, "攻击附加木伤害", "使普通攻击附近木系伤害")); team.Add(41, new TeamStateImp(41, "持续恢复生命", "持续恢复hp")); team.Add(42, new TeamStateImp(42, "持续恢复真气", "持续恢复mp")); team.Add(43, new TeamStateImp(43, "散神\r法术攻击力降低", "定身且不能攻击")); team.Add(44, new TeamStateImp(44, "移动加速", "加速")); team.Add(45, new TeamStateImp(45, "生命上限降低", "hp上限下降")); team.Add(46, new TeamStateImp(46, "灵助\r法术攻击力提高", "法术攻击力提高")); team.Add(47, new TeamStateImp(47, "白虎变", "白虎变")); team.Add(48, new TeamStateImp(48, "金系防御上升", "金系防御上升")); team.Add(49, new TeamStateImp(49, "木系防御上升", "木系防御上升")); team.Add(50, new TeamStateImp(50, "水系防御上升", "水系防御上升")); team.Add(51, new TeamStateImp(51, "火系防御上升", "火系防御上升")); team.Add(52, new TeamStateImp(52, "土系防御上升", "土系防御上升")); team.Add(53, new TeamStateImp(53, "金系防御下降", "金系防御下降")); team.Add(54, new TeamStateImp(54, "木系防御下降", "木系防御下降")); team.Add(55, new TeamStateImp(55, "水系防御下降", "水系防御下降")); team.Add(56, new TeamStateImp(56, "火系防御下降", "火系防御下降")); team.Add(57, new TeamStateImp(57, "土系防御下降", "土系防御下降")); team.Add(58, new TeamStateImp(58, "避水诀\r水中不用呼吸,无法使用技能", "避水诀")); team.Add(59, new TeamStateImp(59, "般若心经\r所有法术忽略吟唱", "般若心经")); team.Add(60, new TeamStateImp(60, "真元爆发\r将全身元气爆发提升自身能力", "真元爆发")); team.Add(61, new TeamStateImp(61, "易髓经\r降低自身法防提升物防", "易髓经")); team.Add(62, new TeamStateImp(62, "易筋经\r降低自身物防提升法防", "易筋经")); team.Add(63, new TeamStateImp(63, "兽王之怒\r受到攻击时增加元气", "兽王之怒")); team.Add(64, new TeamStateImp(64, "坚甲\r物理防御力提高", "坚甲符")); team.Add(65, new TeamStateImp(65, "金钟罩\r提升物防", "金钟罩")); team.Add(66, new TeamStateImp(66, "巨灵神力\r提高物理攻击", "巨灵神力")); team.Add(67, new TeamStateImp(67, "化血成魔\r降低生命上限提升命中率", "化血成魔")); team.Add(68, new TeamStateImp(68, "灵助\r法术攻击力提高", "灵助符")); team.Add(69, new TeamStateImp(69, "翼盾\r吸收一定伤害并回复真气", "翼盾")); team.Add(70, new TeamStateImp(70, "烈焰之矢\r攻击附加一定火伤害", "烈焰之矢")); team.Add(71, new TeamStateImp(71, "狂雷天鹰\r持续受到金系伤害并减速", "狂雷天鹰")); team.Add(72, new TeamStateImp(72, "无视所有行动阻碍状态", "准无敌")); team.Add(73, new TeamStateImp(73, "持续冰伤害", "持续冰伤害")); team.Add(74, new TeamStateImp(74, "暴击率提升", "爆击率提升")); team.Add(75, new TeamStateImp(75, "妖狐变\r物防、命中提升,真气值下降", "灵狐变")); team.Add(76, new TeamStateImp(76, "无敌", "无敌")); team.Add(77, new TeamStateImp(77, "荆棘阵\r大量降低伤害,并且反弹物理伤害", "荆棘阵")); team.Add(78, new TeamStateImp(78, "弱魂咒\r生命和真气值停止回复", "弱魂咒")); team.Add(79, new TeamStateImp(79, "残体咒\r受到加深伤害", "残体咒")); team.Add(80, new TeamStateImp(80, "碎灵咒\r受到攻击失去元气", "碎灵咒")); team.Add(81, new TeamStateImp(81, "飞花遁影\r移动加速", "妖狐附体")); team.Add(82, new TeamStateImp(82, "骑乘加速", "骑乘加速")); team.Add(83, new TeamStateImp(83, "物理攻击提高", "物理攻击力提高")); team.Add(84, new TeamStateImp(84, "专注\r提升专注的精神可以使你的施法不被干扰。\r目标免疫封印", "专注")); team.Add(85, new TeamStateImp(85, "亢奋\r亢奋的人是不需要睡觉的\r免疫睡眠状态", "亢奋")); team.Add(86, new TeamStateImp(86, "自由\r只要你有一颗自由的心,\r你就不会被减速,或者定身。\r免疫移动减速和击晕", "自由")); team.Add(87, new TeamStateImp(87, "坚强\r免役按比例掉血。\r坚强的人总不会被打垮", "坚强")); team.Add(88, new TeamStateImp(88, "神圣\r免疫所有负面状态", "神圣")); team.Add(89, new TeamStateImp(89, "霸体\r免疫物理伤害", "霸体")); team.Add(90, new TeamStateImp(90, "火免\r免疫火系伤害", "火免")); team.Add(91, new TeamStateImp(91, "水免\r免役水系伤害", "水免")); team.Add(92, new TeamStateImp(92, "金免\r免疫金系伤害", "金免")); team.Add(93, new TeamStateImp(93, "木免\r免疫木系伤害", "木免")); team.Add(94, new TeamStateImp(94, "土免\r免疫土系伤害", "土免")); team.Add(95, new TeamStateImp(95, "虚无\r免疫五行伤害", "虚无")); team.Add(96, new TeamStateImp(96, "狂妄\r免疫所有状态", "狂妄")); team.Add(97, new TeamStateImp(97, "水中减速\r游泳减速", "水中减速")); team.Add(98, new TeamStateImp(98, "水中加速\r游泳加速", "水中加速")); team.Add(99, new TeamStateImp(99, "空中减速\r飞行减速", "空中减速")); team.Add(100, new TeamStateImp(100, "空中加速\r飞行加速", "空中加速")); team.Add(101, new TeamStateImp(101, "骑乘减速\r骑乘减速", "骑乘减速")); team.Add(102, new TeamStateImp(102, "爆发\r持续增加元气", "爆发")); team.Add(103, new TeamStateImp(103, "疲乏\r持续减少元气", "疲乏")); team.Add(104, new TeamStateImp(104, "精灵之力\r持续时间内增加小精灵力量", "精灵之力")); team.Add(105, new TeamStateImp(105, "精灵之敏\r持续时间内增加小精灵的敏捷", "精灵之敏")); team.Add(106, new TeamStateImp(106, "空刃\r你向敌人释放了空刃,\r自己也同时受到了风的保护。\r增加自身物理防御", "空刃")); team.Add(107, new TeamStateImp(107, "元素虚弱\r目标物理防御增加,法术防御降低.", "元素虚弱")); team.Add(108, new TeamStateImp(108, "深毒\r目标受伤害增加20%,\r这个效果可以和天火狂龙等技能叠加", "深毒")); team.Add(109, new TeamStateImp(109, "扎根\r自身定身同时伤害减少同时反弹伤害", "扎根")); team.Add(110, new TeamStateImp(110, "大地守护\r每3秒恢复hp,伤害减少.物理和法术攻击降低", "大地守护")); team.Add(111, new TeamStateImp(111, "狂暴\r目标防御和法术防御降低,同时攻击等级增加", "狂暴")); team.Add(112, new TeamStateImp(112, "沙暴\r命中降低,施法速度变慢", "沙暴")); team.Add(113, new TeamStateImp(113, "乡情\r生命和真气回复速度增加,移动速度增加", "乡情")); team.Add(114, new TeamStateImp(114, "湮灭\r水系防御降低", "湮灭")); team.Add(115, new TeamStateImp(115, "幸运\r暴击增加", "幸运")); team.Add(116, new TeamStateImp(116, "冲击\r物理防御降低", "冲击")); team.Add(117, new TeamStateImp(117, "火花\r火系防御降低", "火花")); team.Add(118, new TeamStateImp(118, "心火\r物理和法速攻击速度降低", "心火")); team.Add(119, new TeamStateImp(119, "火种\r持续火伤害", "火种")); team.Add(120, new TeamStateImp(120, "燃足\r火系防御降低,移动速度降低", "燃足")); team.Add(121, new TeamStateImp(121, "坚壁\r吸收物理和法术伤害,并且降低自身移动速度", "坚壁")); team.Add(122, new TeamStateImp(122, "刃切\r金系防御降低", "刃切")); team.Add(123, new TeamStateImp(123, "叶舞\r移动速度降低并且流血", "叶舞")); team.Add(124, new TeamStateImp(124, "烧焦\r防御等级下降.攻击等级下降,\r移动速度少量增加", "烧焦")); team.Add(125, new TeamStateImp(125, "真空\r释放速度变慢,移动速度变慢.受到伤害减少", "真空")); team.Add(126, new TeamStateImp(126, "止血\r免疫流血状态。", "止血")); team.Add(127, new TeamStateImp(127, "金刚不坏\r吸收受到的物理伤害", "金刚不坏")); team.Add(128, new TeamStateImp(128, "法力无边\r吸收受到法术伤害", "法力无边")); team.Add(129, new TeamStateImp(129, "以牙还牙\r反弹受到的法术伤害", "以牙还牙")); team.Add(130, new TeamStateImp(130, "风盾术\r受到伤害减少,物理攻击速度和闪避提升", "风盾术")); team.Add(131, new TeamStateImp(131, "气流锁\r目标定身且有几率被封印", "气流锁")); team.Add(132, new TeamStateImp(132, "封闭\r封印且物理伤害免疫", "封闭")); team.Add(133, new TeamStateImp(133, "无心\r免疫伤害加深状态。", "无心")); team.Add(134, new TeamStateImp(134, "冻结\r无法行动", "冻结")); team.Add(135, new TeamStateImp(135, "攻击等级增加", "攻击等级增加")); team.Add(136, new TeamStateImp(136, "攻击等级降低", "攻击等级降低")); team.Add(137, new TeamStateImp(137, "防御等级增加", "防御等级增加")); team.Add(138, new TeamStateImp(138, "防御等级降低", "防御等级降低")); team.Add(139, new TeamStateImp(139, "持续受到土系伤害", "持续土伤害2")); team.Add(140, new TeamStateImp(140, "封印\r无法使用任何普攻和技能", "不能攻击2")); team.Add(141, new TeamStateImp(141, "定身\r无法移动", "定身2")); team.Add(142, new TeamStateImp(142, "祝福\r受到伤害减少", "物理伤害减少2")); team.Add(143, new TeamStateImp(143, "诅咒\r受到伤害提升", "伤害加深2")); team.Add(144, new TeamStateImp(144, "提升生命上限", "生命上限增加2")); team.Add(145, new TeamStateImp(145, "利刃\r物理攻击力提高", "攻击力增加2")); team.Add(146, new TeamStateImp(146, "灵助\r法术攻击力提高", "法术攻击增加2")); team.Add(147, new TeamStateImp(147, "专注\r加快吟唱", "吟唱加速2")); team.Add(148, new TeamStateImp(148, "移动加速", "移动加速2")); team.Add(149, new TeamStateImp(149, "遁隐\r进入遁隐状态", "隐身")); team.Add(150, new TeamStateImp(150, "提升反隐等级\r提高反隐等级", "集中精神")); team.Add(151, new TeamStateImp(151, "嗜血咒\r每次攻击时,从自身造成的伤害中恢复一定生命。", "吸血光环")); team.Add(152, new TeamStateImp(152, "狂狼印\r提高暴击伤害值","暴击伤害")); team.Add(153, new TeamStateImp(153, "金刚轮印咒\r被攻击时,有几率闪避攻击技能的伤害。", "伤害闪避")); team.Add(154, new TeamStateImp(154, "三世明王咒\r被攻击时,有几率闪避攻击技能的效果。", "状态闪避")); team.Add(155, new TeamStateImp(155, "如来天心咒\r免除一次致死打击,并恢复生命", "回光返照")); team.Add(156, new TeamStateImp(156, "惩戒\r向攻击者反弹伤害", "反弹之魂")); team.Add(157, new TeamStateImp(157, "封印\r使攻击者陷入封印状态", "封印之魂")); team.Add(158, new TeamStateImp(158, "镜像\r攻击者同时承受其技能造成的伤害和状态", "反击之魂")); team.Add(159, new TeamStateImp(159, "震慑\r将攻击者击晕", "击晕之魂")); team.Add(160, new TeamStateImp(160, "生命绽放\r增加由技能和药品获得的生命恢复效果,并减少红符冷却时间", "祝福加深")); team.Add(161, new TeamStateImp(161, "生命禁锢\r降低由技能和药品获得的生命恢复效果,并延长红符冷却时间", "祝福削弱")); team.Add(162, new TeamStateImp(162, "反噬\r每次普通攻击或施放技能时,都会受到伤害", "使用技能时受伤害")); team.Add(163, new TeamStateImp(163, "使用技能时被中断\r使目标每次施放技能时,都会被打断", "爆发")); team.Add(164, new TeamStateImp(164, "人鱼变\r变身成人鱼", "魔法盾")); team.Add(165, new TeamStateImp(165, "深度冰刺\r降低攻速,提高攻击等级", "冰冻")); team.Add(166, new TeamStateImp(166, "巫师咒\r调整攻防等级", "热血")); team.Add(167, new TeamStateImp(167, "金刚剑印\r金系及物理系技能伤害产生加成效果", "金刚剑印")); team.Add(168, new TeamStateImp(168, "寒潮剑印\r木系及水系技能伤害产生加成效果", "寒潮剑印")); team.Add(169, new TeamStateImp(169, "焚心剑印\r土系及火系技能伤害产生加成效果", "焚心剑印")); team.Add(170, new TeamStateImp(170, "玄武剑诀\r有效伤害有几率触发“玄武剑眼”", "玄武剑诀")); team.Add(171, new TeamStateImp(171, "饮血剑诀\r有效伤害有几率触发“饮血剑眼”", "饮血剑诀")); team.Add(172, new TeamStateImp(172, "磐龙剑诀\r有效伤害有几率触发“磐龙剑眼”", "磐龙剑诀")); team.Add(173, new TeamStateImp(173, "玄武剑眼\r特定技能激活该剑眼", "玄武剑眼")); team.Add(174, new TeamStateImp(174, "饮血剑眼\r特定技能激活该剑眼", "饮血剑眼")); team.Add(175, new TeamStateImp(175, "磐龙剑眼\r特定技能激活该剑眼", "磐龙剑眼")); team.Add(176, new TeamStateImp(176, "八方剑影\r对周围目标造成伤害", "八方剑影")); team.Add(177, new TeamStateImp(177, "毒种\r血量低于50%时触发持续伤害", "碧云咒")); team.Add(178, new TeamStateImp(178, "回血种\r受到伤害触发持续回血效果", "回风拂柳")); team.Add(179, new TeamStateImp(179, "增加木水物防\r提高木防水防物防”", "铁木衫")); team.Add(180, new TeamStateImp(180, "特殊的减速\r减速且受到勾魂摄魄攻击时伤害加深", "腐蔓咒")); team.Add(181, new TeamStateImp(181, "增加物防暴击\r提高物理防御,暴击率", "魔神蚩尤牺牲")); team.Add(182, new TeamStateImp(182, "增加法防法攻\r提高五行防御,法术攻击力", "金光电母牺牲")); team.Add(183, new TeamStateImp(183, "向自己的宠物传输mp\r将本体真气传输给召唤物", "同气连枝")); team.Add(184, new TeamStateImp(184, "向施放者(宠物)传输伤害\r施法者将为状态所有者分担伤害", "分担伤害")); team.Add(185, new TeamStateImp(185, "吸伤害加物法防\r可吸收一定的伤害且护盾存在时提高防御抗", "护盾")); team.Add(186, new TeamStateImp(186, "加快吟唱增加法攻\r提高吟唱速度提高法攻", "风竹秋韵")); team.Add(187, new TeamStateImp(187, "渐增的回血\r数值渐增的持续回血", "生命之树")); team.Add(188, new TeamStateImp(188, "献祭\r献祭光环", "火神")); team.Add(189, new TeamStateImp(189, "枯木逢春\r死亡后立即复活", "枯木逢春")); team.Add(190, new TeamStateImp(190, "特殊物品伤害触发器\r受到摄魂咒攻击伤害加强", "勾魂摄魄")); team.Add(191, new TeamStateImp(191, "提升暴击(限制生效次数)", "暴击提升")); team.Add(192, new TeamStateImp(192, "九尊剑诀\r有几率触发九尊剑眼", "九尊剑诀")); team.Add(193, new TeamStateImp(193, "九尊剑眼\r被特殊攻击击中触发效果", "九尊剑眼")); team.Add(194, new TeamStateImp(194, "武器失效", "武器失效")); team.Add(195, new TeamStateImp(195, "增强技能对npc的伤害\r增加技能对NPC的伤害", "增强点技能对NPC的伤害")); team.Add(196, new TeamStateImp(196, "侦测周围隐身玩家\r将周围的隐身单位添加到界面上", "侦查周围隐身的玩家")); team.Add(197, new TeamStateImp(197, "侦测周围隐身玩家\r将周围的隐身单位添加到界面上", "侦查周围隐身的玩家")); team.Add(198, new TeamStateImp(198, "mp恢复加快2\r场景内mp恢复加快", "场景回蓝")); team.Add(199, new TeamStateImp(199, "位置回溯\r若干秒后被传回标记位置", "静谧之术")); team.Add(200, new TeamStateImp(200, "生命回溯\r若干秒后血量变回标记血量", "静谧之术2buff")); team.Add(201, new TeamStateImp(201, "禁止飞行\r使玩家在一段时间内无法飞行", "兽灵之力buff")); team.Add(202, new TeamStateImp(202, "强制选择目标\r使玩家在一段时间内只能选择施法者", "奋战扫击buff")); team.Add(203, new TeamStateImp(203, "吸收治疗\r吸收一定量的治疗", "吸收治疗buff")); team.Add(204, new TeamStateImp(204, "受到普攻后退并清debuff\r受攻击被弹开", "法之奥义")); team.Add(205, new TeamStateImp(205, "增加爆击抗性\r受到致命一击的几率降低", "沙暴buff")); team.Add(206, new TeamStateImp(206, "降低爆击抗性\r受到致命一击的几率提高", "羽斩buff")); team.Add(207, new TeamStateImp(207, "转移技能攻击诅咒\r将攻击转移给施法者", "复仇之魂buff")); team.Add(208, new TeamStateImp(208, "被治疗时额外给选定玩家治疗\r额外治疗", "额外治疗buff")); team.Add(209, new TeamStateImp(209, "受到攻击时额外对选定玩家发起攻击\r伤害链接", "葬魂印记buff")); team.Add(211, new TeamStateImp(211, "禁止被选中\r使敌人无法直视", "冥王乐土buff")); team.Add(212, new TeamStateImp(212, "增强技能对npc的伤害2\r可以和1叠加", "迷色万花buff")); team.Add(213, new TeamStateImp(213, "延迟土系伤害\r若干秒后造成土系伤害", "风岩葬buff")); team.Add(214, new TeamStateImp(214, "昏迷,自身受到伤害加深\r冰冻光环效果", "冰晶世界")); team.Add(215, new TeamStateImp(215, "反弹之魂2(比例)\r荆棘术", "灵火buff")); team.Add(216, new TeamStateImp(216, "受伤害时定身\r受到伤害时有一定几率定身", "炙焰")); team.Add(217, new TeamStateImp(217, "受伤害时获得元气\r获得元气", "获得元气buff")); team.Add(218, new TeamStateImp(218, "受伤害时提升攻击力\r触发实际效果图标", "无畏buff")); team.Add(219, new TeamStateImp(219, "受伤害时提升攻击力\r愈战愈勇", "无畏buff")); team.Add(220, new TeamStateImp(220, "死战到底\r濒死后无敌且血量上限减少99%", "虎啸buff")); team.Add(221, new TeamStateImp(221, "治疗偷取\r治疗被转移到施法者", "流星buff")); team.Add(222, new TeamStateImp(222, "死亡掉落金币\r在此状态下被杀死会掉落金币", "飘零buff")); team.Add(223, new TeamStateImp(223, "增加攻击距离\r攻击距离提高", "擎天雷鸣buff")); team.Add(224, new TeamStateImp(224, "无敌5(驱除debuf持续回血昏迷)\r放逐", "流殇buff")); team.Add(225, new TeamStateImp(225, "雷神变\r羽灵变身", "雷火坠buff")); team.Add(226, new TeamStateImp(226, "武侠剑刃光环\r剑刃光环图标", "霸气")); team.Add(227, new TeamStateImp(227, "妖精共舞\r妖精共舞光效图标", "火狐之术buff")); team.Add(229, new TeamStateImp(229, "减少近战普攻伤害\r防御优化 ", "桎梏诀")); team.Add(230, new TeamStateImp(230, "全属性提升\r等级奖励 ", "回旋之翼")); team.Add(231, new TeamStateImp(231, "非战斗恢复\r非战斗状态恢复hpmp", "玄武刻印buff")); team.Add(232, new TeamStateImp(232, "定值提升\r固定值加hpmp上限", "五感符")); team.Add(233, new TeamStateImp(233, "自身受到伤害加深(可叠加可刷新)", "旋风斩")); team.Add(234, new TeamStateImp(234, "PK无惩罚状态", "战场状态")); team.Add(235, new TeamStateImp(235, "法术防御力提高2", "法术防御力提高")); team.Add(236, new TeamStateImp(236, "战场旗帜BUFF", "旗帜BUFF")); team.Add(237, new TeamStateImp(237, "防御等级降低", "防御等级降低")); team.Add(238, new TeamStateImp(238, "增加物法攻防hp", "回旋之翼")); team.Add(239, new TeamStateImp(239, "暴击增加", "暴击提升")); team.Add(240, new TeamStateImp(240, "提升御魔猎魔等级\r百分比提高对怪物攻防", "暴击提升")); team.Add(241, new TeamStateImp(241, "生命值、攻击等级、防御等级提高", "北美国战")); team.Add(242, new TeamStateImp(242, "增加攻击等级、防御等级各3点", "GT高级")); team.Add(243, new TeamStateImp(243, "增加攻击等级、防御等级各1点", "GT低级")); team.Add(244, new TeamStateImp(244, "伤害减免3\r受到来自于玩家的伤害减少", "固若金汤")); team.Add(245, new TeamStateImp(245, "攻击时给自己添加状态包", "攻守兼备")); team.Add(246, new TeamStateImp(246, "攻击时给目标添加状态包", "乘胜追击")); team.Add(247, new TeamStateImp(247, "免疫物理伤害", "物免2")); team.Add(248, new TeamStateImp(248, "免疫金系伤害", "金免2")); team.Add(249, new TeamStateImp(249, "免疫木系伤害", "木免2")); team.Add(250, new TeamStateImp(250, "免疫水系伤害", "水免2")); team.Add(251, new TeamStateImp(251, "免疫火系伤害", "火免2")); team.Add(252, new TeamStateImp(252, "免疫土系伤害", "土免2")); team.Add(253, new TeamStateImp(253, "物理反震\r反弹所有近身物理伤害", "对物理攻击产生反震")); team.Add(254, new TeamStateImp(254, "增加攻击等级、防御等级", "热血")); team.Add(255, new TeamStateImp(255, "瘫痪", "瘫痪buff")); team.Add(256, new TeamStateImp(256, "受到的技能伤害提高", "受到的技能伤害提高buff")); team.Add(257, new TeamStateImp(257, "受到的技能暴击率提高", "受到的技能暴击率提高buff")); team.Add(258, new TeamStateImp(258, "特定技能吟唱时间降低", "特定技能吟唱时间降低buff")); team.Add(259, new TeamStateImp(259, "特定技能伤害增加", "特定技能伤害增加buff")); team.Add(260, new TeamStateImp(260, "寒冰护甲2", "寒冰护甲")); team.Add(261, new TeamStateImp(261, "烈焰护甲2", "烈焰护甲")); team.Add(262, new TeamStateImp(262, "回血护盾", "回血护盾buff")); team.Add(263, new TeamStateImp(263, "飞行速度提高(可叠加刷新持续时间)", "准无敌")); team.Add(264, new TeamStateImp(264, "气魄值提高", "气魄值提高")); team.Add(265, new TeamStateImp(265, "加气魄减暴伤", "暗炎")); team.Add(266, new TeamStateImp(266, "移动扣血", "寒宫蟾步")); team.Add(267, new TeamStateImp(267, "不移动就掉血", "移动扣血")); team.Add(268, new TeamStateImp(268, "不移动就获得技能", "不移动就掉")); team.Add(269, new TeamStateImp(269, "免疫打断护盾", "免疫打断护盾")); team.Add(270, new TeamStateImp(270, "持续瘫痪", "蚀骨月毒")); team.Add(271, new TeamStateImp(271, "内伤", "雷霆万钧")); team.Add(272, new TeamStateImp(272, "普攻减伤", "广寒之护")); team.Add(273, new TeamStateImp(273, "死亡后重置施法者技能冷却时间", "无情游")); team.Add(274, new TeamStateImp(274, "指定技能造成额外技能效果", "月食")); team.Add(275, new TeamStateImp(275, "普通攻击附加额外伤害", "狱龙牙")); team.Add(276, new TeamStateImp(276, "指定技能使用后不进入冷却", "邈云汉")); team.Add(277, new TeamStateImp(277, "猎命", "猎命")); team.Add(278, new TeamStateImp(278, "夜影变身", "胧夜影")); team.Add(279, new TeamStateImp(279, "月仙变身", "胧月仙")); team.Add(280, new TeamStateImp(280, "附加霜雷状态", "霜雷术")); team.Add(281, new TeamStateImp(281, "月神之体", "月神之体")); team.Add(282, new TeamStateImp(282, "增强技能对npc的伤害3", "月咏")); team.Add(283, new TeamStateImp(283, "减少受到的暴击伤害","减少受到的暴击伤害")); team.Add(284, new TeamStateImp(284, "物理伤害提高","造成物理伤害提高2")); team.Add(285, new TeamStateImp(285, "五行伤害提高","造成法术伤害提高2")); team.Add(286, new TeamStateImp(286, "受到的技能伤害提高2", "晓月银光")); team.Add(287, new TeamStateImp(287, "冰雷球占位状态包", "")); team.Add(288, new TeamStateImp(288, "技能CD改变","影噬")); team.Add(289, new TeamStateImp(289, "免疫驱逐","彩云障月")); team.Add(290, new TeamStateImp(290, "吟唱附加距离改变","神镰伐桂")); team.Add(291, new TeamStateImp(291, "双防提高","祭月礼")); team.Add(292, new TeamStateImp(292, "金防降低3","落月击金")); team.Add(293, new TeamStateImp(293, "水防降低3","落月击水")); team.Add(294, new TeamStateImp(294, "暴击回血回元","贪狼刃")); TeamState = team; VisibleState = visible; } } public class Range { /// 0=point 1=line 2=self sphere 3=target sphere 4=cone 5=self public byte type; // 0�� 1�� 2������ 3Ŀ���� 4Բ׶�� 5���� public bool IsPoint() { return type == 0; } public bool IsLine() { return type == 1; } public bool IsSelfBall() { return type == 2; } public bool IsTargetBall() { return type == 3; } public bool IsSector() { return type == 4; } public bool IsSelf() { return type == 5; } public bool NoTarget() { return type == 2 || type == 5; } } // ռλ������ // Placeholder Skill class public class Skill : ElementSkill { protected SkillStub stub; protected PlayerWrapper player; protected uint id; protected uint level; Skill(uint i, SkillStub s) { id = i; stub = s; player = new PlayerWrapper(); } public static Skill Create(uint id, int n) { SkillStub stub = SkillStub.GetStub(id); if (stub == null) return null; Skill skill = new Skill(id, stub); int max = skill.GetMaxLevel(); if (n > max) skill.SetLevel(max); else skill.SetLevel(n); return skill; } public override int GetMaxLevel() { return stub.GetMaxLevel(); } public override int SetLevel(int l) { uint tmp = level; level = (uint)l; return (int)tmp; } public override int GetItemCost() { return stub.itemcost; } public override bool ValidWeapon(int idWeapon) { return stub.ValidWeapon(idWeapon); } public override int GetMpCost() { return (int)stub.GetMpcost(this); } public override bool IsAllowLand() { return stub.allow_land; } public override bool IsAllowWater() { return stub.allow_water; } public override bool IsAllowAir() { return stub.allow_air; } public override int GetArrowCost() { return stub.arrowcost; } public override bool GetNotuseInCombat() { return stub.notuse_in_combat; } public override bool IsAutoAttack() { return stub.auto_attack; } public int GetLevel() { return (int)level; } public PlayerWrapper GetPlayer() { return player; } public override int GetRank() { return stub.rank; } public override bool IsInstant() { return stub.time_type == 1; } public override int GetCls() { return stub.GetCls(); } public override Dictionary GetJunior() { return stub.is_senior != 0 ? stub.pre_skills : new Dictionary(); } public override int GetRangeType() { return stub.GetRange().type; } public override int GetRequiredLevel() { return stub.GetRequiredLevel(this); } public override void GetIntroduction(StringBuilder buf, SkillStr table) { int n = stub.GetIntroduction(this, buf, table.Find((int)stub.id * 10 + 1)); } public override int GetTargetType() { if (stub.restrict_corpse == 1) return 2; if (stub.restrict_corpse == 2) return 3; if (stub.type == (int)skill_type.TYPE_ATTACK || stub.type == (int)skill_type.TYPE_CURSE) return 1; if (stub.type == (int)skill_type.TYPE_BLESSPET) return 4; if (stub.GetRange().NoTarget()) return 0; return 1; } public override int GetComboSkPreSkill() { return stub.combosk_preskill; } public override byte GetType() { return stub.type; } public override int GetCommonCoolDown() { return stub.commoncooldown; } public override string GetIcon() { return stub.GetIcon(); } public int GetAbility() { return SkillWrapper.Instance.GetAbility(id); } // 检查施放时hp条件 // Check hp condition when casting public override bool CheckHpCondition(int hp, int max_hp) { return stub.CheckHpCondition(hp, max_hp); } // TODO: CheckHpCondition is not a member of SkillStub public override bool CheckComboSkExtraCondition() { return stub.CheckComboSkExtraCondition(this); } public override byte GetAllowForms() { return stub.allow_forms; } public override int GetApCost() { return stub.apcost; } public override string GetName() { return stub.GetName(); } public override float GetPrayRange(float range, float prayplus) { player.SetRange(range); player.SetPrayrangeplus(prayplus); if (stub.type == (int)skill_type.TYPE_ATTACK || stub.type == (int)skill_type.TYPE_CURSE) { if (stub.auto_attack) { float r = 0.3f * stub.GetPraydistance(this); if (r >= 1.0) return stub.GetPraydistance(this) - 1.0f; else return (float)0.7 * stub.GetPraydistance(this); } else return stub.GetPraydistance(this); } if (stub.type == (int)skill_type.TYPE_JUMP) return stub.GetPraydistance(this); if (stub.GetRange().NoTarget()) return -1; else return stub.GetPraydistance(this); } public override int GetCoolingTime() { return stub.GetCoolingtime(this); } public int GetRequiredSp() { return stub.GetRequiredSp(this); } public int GetRequiredMoney() { return stub.GetRequiredMoney(this); } public override Dictionary GetRequiredSkill() { return stub.pre_skills; } public int GetRequiredRealmLevel() { return stub.GetRequiredRealmLevel(this); } public int GetMaxability() { return stub.GetMaxAbility(this); } public uint GetId() { return id; } public int GetComboSkInterval() { return stub.combosk_interval; } // ---- Converted from C++ Skill (missing in original C#) ---- /// Resets stub from registry by id. Returns true if stub is non-null. public bool ReSetStub() { stub = SkillStub.GetStub(id); return stub != null; } /// Gets the skill stub (static data). public SkillStub GetStub() => stub; /// Perform slot (C++: no-op setter). public void SetPerform(int p) { } /// Perform slot (C++: always 0). public int GetPerform() => 0; public override int GetShowOrder() => stub.showorder; /// Random/roll value (C++: always 100). public int GetRand() => 100; public override int GetRequiredBook() => stub.GetRequiredItem(this); /// Class restriction mask (C++ clslimit). public int GetClsLimit() => stub.clslimit; public override int GetCommonCoolDownTime() => stub.commoncooldowntime; public override bool IsWarmup() => stub.time_type == 3; public override bool IsDurative() => stub.time_type == 2; public override bool IsMovingSkill() => stub.IsMovingSkill(); /// Cast environment bitmask: 1=land, 2=air, 4=water. public override int GetCastEnv() { int iRet = 0; if (stub.allow_land) iRet += 1; if (stub.allow_air) iRet += 2; if (stub.allow_water) iRet += 4; return iRet; } /// Goblin (cls 258) genius requirements; returns 5-element array or null. Caller must not modify array. public int[] GetRequiredGeniusArray(int idSkill) { if (stub.cls != 258) return null; int[] iGenius = new int[5]; int iLevelReq = GetRequiredLevel() / 100; for (int i = 0; i < 5; i++) { iGenius[4 - i] = iLevelReq % 10; iLevelReq /= 10; } return iGenius; } public override int GetExecuteTime() => stub.GetExecutetime(this); /// Ability fill percent 0..100 for current level (C++ GetAbilityPercent). public int GetAbilityPercent() { int now = SkillWrapper.Instance.GetAbility(id); int max = 0; if (level > 0) max = GetMaxability(); int min = 0; if (level > 1) { SetLevel((int)level - 1); min = GetMaxability(); SetLevel((int)level); } if (max == min) return 100; return 100 * (now - min) / (max - min); } public override string GetEffect() => stub.effect; public override byte[] GetElseEffect() => stub.aerial_effect != null ? Encoding.UTF8.GetBytes(stub.aerial_effect) : null; public override byte[] GetNativeName() => stub.nativename != null ? Encoding.UTF8.GetBytes(stub.nativename) : null; /// Native name as string (C++ GetNativeName). public string GetNativeNameString() => stub.nativename; } public abstract class SkillStub { public const int MIN_LEVEL = 1; public const int MAX_LEVEL = 10; public uint id; // Ψһ���ֱ�ʶ // Unique identifier public int cls; // ְҵ // Class/Profession public string name; // �������� // Skill name public string nativename; // ������ // Native name public string icon; // ����ͼ�� // Skill icon public int max_level; // ������󼶱�? // Maximum level public byte type; // �������? 1�������� 2�������� 3�����ٻ� 4���� 5���� // Skill type: 1-Normal 2-Special 3-Partner 4-Mount 5-Other // Execute condition public bool allow_ride; // ������? // Allow while riding public short attr; // ����������, 1������2��3ľ��4ˮ��5��6�� ��ѡһ Ĭ�ϣ������� // Attribute: 1-Metal 2-Earth 3-Wood 4-Water 5-Fire 6-Special (Choose one, default none) public int rank; // ���漶�� // Rank public int eventflag; // Event flag public byte is_senior; // Senior flag public bool is_inherent; // �������ܣ�����ѧ������ // Inherent skill, cannot be learned public bool is_movingcast; // �ƶ�ʩ�� // Can cast while moving public int npcdelay; // NPC delay public int showorder; // Display order public byte allow_forms; // Allowed forms public int apcost; // AP cost public int apgain; // AP gain public byte doenchant; // Do enchant public byte dobless; // Do bless public int arrowcost; // Arrow cost public Dictionary pre_skills; // Execute condition public bool allow_land; // ½����Ч // Effective on land public bool allow_air; // ������Ч // Effective in air public bool allow_water; // ˮ����Ч // Effective in water public bool notuse_in_combat; // ս��״̬������ // Cannot use in combat state public int restrict_corpse; // ֻ��ʬ����Ч // Only effective on corpses public bool restrict_change; // �Ƿ���Ա��� // Whether can transform public bool restrict_attach; // �Ƿ���Ը��� // Whether can possess public bool auto_attack; // ʹ�ú��Ƿ��Զ����� // Whether to auto attack after use public byte time_type; // ˲������ // Instant cast type public byte long_range; public byte posdouble; // λ��ѡ�� // Position selection public int clslimit; // ְҵ���� // Class restriction public int commoncooldown; // ������ȴmask bit0-4 ������ȴ0-4 bit5-9 ��Ʒ��ȴ0-4 // Common cooldown mask bit0-4 skill cooldown 0-4 bit5-9 item cooldown 0-4 public int commoncooldowntime; // ��ȴʱ�䣬��λ���� // Cooldown time in milliseconds public int itemcost; // �ͷ�ʱ������Ʒ >0��Ч // Item cost when casting, effective if >0 public GfxMoveMode m_MoveMode = GfxMoveMode.enumLinearMove; public GfxTargetMode m_TargetMode = GfxTargetMode.enumHostToTarget; public GfxAttackMode m_AttFlyMode = GfxAttackMode.enumAttPoint; public GfxAttackMode m_AttHitMode = GfxAttackMode.enumAttPoint; public uint m_dwFlyTime = 0; public bool m_bTraceTarget = false; public uint m_FlyClusterCount = 1; public uint m_FlyClusterInterval = 0; public uint m_HitClusterCount = 1; public uint m_HitClusterInterval = 0; public bool m_bOneHit = true; public bool m_bFadeOut = false; public bool m_bRelScl = true; public float m_fDefTarScl = 1.8f; public bool m_bArea = false; public EmitShape m_Shape = EmitShape.enumBox; public Vector3 m_vGfxSize = Vector3.zero; public GfxSkillValType m_paramType = GfxSkillValType.enumGfxSkillInt; public float m_paramFloatVal = 0f; // ������� // Combo related public int combosk_preskill; public int combosk_interval; public int combosk_nobreak; public string effect; public string m_szFlyGfxPath = string.Empty; public string m_szHitGrndGfxPath = string.Empty; public string m_szHitGfxPath = string.Empty; /// Classic SFX logical path (from fly GFX Sound element), same convention as client Sfx\ + path. public string m_szFlySfxPath = string.Empty; public string m_szHitGrndSfxPath = string.Empty; public string m_szHitSfxPath = string.Empty; public string aerial_effect; public Range range; public bool has_stateattack; public List restrict_weapons = new List(); public static Dictionary map = new Dictionary(); public static Dictionary GetMap() => map; public static Dictionary> comboSkillMap = new Dictionary>(); public static Dictionary> GetComboSkMap() => comboSkillMap; public static Dictionary> inheritSkillMap = new Dictionary>(); /*#if UNITY_EDITOR [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] private static void OnPlay() { BMLogger.LogError("SkillStub OnPlay Reset"); map = new Dictionary(); comboSkillMap = new Dictionary>(); inheritSkillMap = new Dictionary>(); } #endif*/ public SkillStub(uint i) { id = i; is_inherent = (false); is_movingcast = (false); itemcost = (0); combosk_preskill = (0); combosk_interval = (0); combosk_nobreak = (0); if (GetStub(id) == null) { GetMap().Add(id, this); } } public static List GetInherentSkillList(uint cls) { if (!inheritSkillMap.TryGetValue(cls, out List list)) { list = new List(); inheritSkillMap[cls] = list; } return list; } public static SkillStub GetStub(uint i) { return GetMap().TryGetValue(i, out var stub) ? stub : null; } public int GetItemCost() { return itemcost; } public static void InitStaticData() { var map = GetMap(); var comboMap = GetComboSkMap(); foreach (var skill in map) { SkillStub sk = skill.Value; if (sk.is_inherent) GetInherentSkillList((uint)sk.cls).Add(sk.id); if (sk.combosk_preskill > 0) { if (!comboMap.TryGetValue((uint)sk.combosk_preskill, out List comboList)) { comboList = new List(); comboMap[(uint)sk.combosk_preskill] = comboList; } comboList.Add(sk.id); } } } public List GetPostComboSkill(uint id) { var m = GetComboSkMap(); if (m.TryGetValue(id, out var list)) return list; return null; } // ����Ϊ��C++ת���Ľӿ� // The following methods are converted from C++ public uint GetId() { return id; } public int GetCls() { return cls; } public string GetName() { return name; } public string GetIcon() { return icon; } public int GetMaxLevel() { return max_level; } public Range GetRange() { return range; } public bool IsMovingSkill() { return is_movingcast; } public byte GetType() { return type; } // ����System.Object.GetType // Hide System.Object.GetType // ����ʱ����麯�� // Runtime-related virtual functions public virtual int GetCoolingtime(Skill skill) { return 5000; } public virtual int GetRequiredSp(Skill skill) { return 0; } public virtual int GetRequiredLevel(Skill skill) { return 0; } public virtual int GetMaxAbility(Skill skill) { return 0; } public virtual int GetRequiredItem(Skill skill) { return 0; } public virtual int GetRequiredMoney(Skill skill) { return 0; } public virtual int GetRequiredRealmLevel(Skill skill) { return 0; } public virtual float GetPraydistance(Skill skill) { return 0f; } public virtual float GetMpcost(Skill skill) { return 0f; } public virtual int GetExecutetime(Skill skill) { return 1000; } public virtual string Getm_szFlyGfxPath() { return m_szFlyGfxPath; } public virtual string Getm_szHitGrndGfxPath() { return m_szHitGrndGfxPath; } public virtual string Getm_szHitGfxPath() { return m_szHitGfxPath; } // 检查hp条件 // Check hp condition // 默认返回true,子类可以重写以检查hp百分比范围 // Default returns true, subclasses can override to check hp percentage range // 例如:return hp >= max_hp / 100.0f * minPercent && hp <= max_hp / 100.0f * maxPercent; public virtual bool CheckHpCondition(int hp, int max_hp) { return true; } // 检查连击技能额外条件 // Check combo skill extra condition // 默认返回true,子类可以重写以检查连击参数等条件 // Default returns true, subclasses can override to check combo arguments etc. // 例如:return skill.GetPlayer().GetComboarg().GetValue(0) == 5; public virtual bool CheckComboSkExtraCondition(Skill skill) { return true; } public virtual int GetIntroduction(Skill skill, StringBuilder descBuffer, string titleBuffer) { return 0; } // ������Ч�Լ�� // Validate weapon restriction public bool ValidWeapon(int weapon) { if (restrict_weapons != null) { int i; for (i = 0; i < restrict_weapons.Count; i++) { if (weapon == restrict_weapons[i]) return true; } if (i > 0 && i >= restrict_weapons.Count) return false; } return true; } } public class VisibleStateImp : VisibleState { public int id; public string name; public string effect; public string hh; public VisibleStateImp(int i, string n, string e, string h) { id = i; name = n; effect = e; hh = h; } public override int GetID() { return id; } public override string GetName() { return name; } public override string GetHH() { return hh; } public override string GetEffect() { return effect; } } public class TeamStateImp : TeamState { public int id; public string name; public string icon; public TeamStateImp(int i, string n, string c) { id = i; name = n; icon = c; } public override int GetID() { return id; } public override string GetName() { return name; } public override string GetIcon() { return icon; } } }