diff --git a/conf/map/battle/skill.conf b/conf/map/battle/skill.conf index 0ffa6da2360..0f9de8f63f9 100644 --- a/conf/map/battle/skill.conf +++ b/conf/map/battle/skill.conf @@ -239,13 +239,6 @@ backstab_bow_penalty: true // Use 0 to disable (Max allowed value is 255) skill_steal_max_tries: 0 -// Can Rogues plagiarize advanced job skills -// 0 = No restriction -// 1 = Only stalker may plagiarize advanced skills -// 2 = Advanced skills cannot be plagiarized by anyone -// Official servers setting: 2 -copyskill_restrict: 2 - // Does Berserk/Frenzy cancel other self-buffs when used? (Note 1) berserk_cancels_buffs: false diff --git a/db/pre-re/skill_db.conf b/db/pre-re/skill_db.conf index e85f6101ad7..66f191a37e7 100644 --- a/db/pre-re/skill_db.conf +++ b/db/pre-re/skill_db.conf @@ -86,6 +86,7 @@ RangeModByShadowJump: true/false (boolean, defaults to false) RangeModByRadius: true/false (boolean, defaults to false) RangeModByResearchTrap: true/false (boolean, defaults to false) + AllowPlagiarism: true/false (boolean, defaults to false) } AttackType: "Attack Type" (string, defaults to "None") (can be grouped by Levels) Types: "None", "Weapon", "Magic" or "Misc" @@ -321,6 +322,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -406,6 +408,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Fire" @@ -515,6 +518,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Ghost" @@ -638,6 +642,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Ghost" @@ -696,6 +701,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Water" @@ -766,6 +772,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Water" @@ -855,6 +862,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Fire" @@ -905,6 +913,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Fire" @@ -962,6 +971,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Fire" @@ -1031,6 +1041,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Wind" @@ -1100,6 +1111,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Wind" @@ -1185,6 +1197,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Holy" @@ -1344,6 +1357,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Holy" @@ -1706,6 +1720,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -1796,6 +1811,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true RangeModByVulture: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -1942,6 +1958,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Poison" @@ -1994,6 +2011,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Holy" @@ -2259,6 +2277,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -2396,6 +2415,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Holy" @@ -2490,6 +2510,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Holy" @@ -2782,6 +2803,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Holy" @@ -2837,6 +2859,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Holy" @@ -3004,6 +3027,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Fire" @@ -3044,6 +3068,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Fire" @@ -3125,6 +3150,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Wind" @@ -3195,6 +3221,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Wind" @@ -3276,6 +3303,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Water" @@ -3366,6 +3394,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Water" @@ -3429,6 +3458,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Water" @@ -3478,6 +3508,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Earth" @@ -3536,6 +3567,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Earth" @@ -5024,6 +5056,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -6469,6 +6502,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -6865,6 +6899,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Fire" @@ -6917,6 +6952,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" DamageType: { @@ -7326,6 +7362,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" KnockBackTiles: { @@ -7370,6 +7407,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" AfterCastActDelay: 700 @@ -7421,6 +7459,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Holy" @@ -7722,6 +7761,7 @@ skill_db: ( Hit: "BDT_MULTIHIT" SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -7770,6 +7810,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" DamageType: { @@ -7806,6 +7847,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -10256,6 +10298,7 @@ skill_db: ( SkillInfo: { NPC: true AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -12853,6 +12896,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true IsCombo: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -16345,6 +16389,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Misc" DamageType: { @@ -16381,6 +16426,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -16415,6 +16461,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -16471,6 +16518,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true RangeModByShadowJump: true + AllowPlagiarism: true } DamageType: { NoDamage: true @@ -16534,6 +16582,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } DamageType: { NoDamage: true @@ -16649,6 +16698,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Fire" @@ -16748,6 +16798,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Fire" @@ -16790,6 +16841,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Water" @@ -16927,6 +16979,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Water" @@ -16991,6 +17044,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Wind" @@ -17048,6 +17102,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Wind" @@ -17099,6 +17154,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Wind" @@ -18403,6 +18459,7 @@ skill_db: ( SkillInfo: { Quest: true AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -18463,6 +18520,7 @@ skill_db: ( SkillInfo: { Quest: true AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" DamageType: { @@ -18527,6 +18585,7 @@ skill_db: ( Quest: true AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Fire" @@ -18604,6 +18663,7 @@ skill_db: ( SkillInfo: { Quest: true AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" KnockBackTiles: 3 @@ -18749,6 +18809,7 @@ skill_db: ( Quest: true PartyOnly: true AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" DamageType: { diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index 9c0573ffe73..46e08e001eb 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -86,6 +86,7 @@ RangeModByShadowJump: true/false (boolean, defaults to false) RangeModByRadius: true/false (boolean, defaults to false) RangeModByResearchTrap: true/false (boolean, defaults to false) + AllowPlagiarism: true/false (boolean, defaults to false) } AttackType: "Attack Type" (string, defaults to "None") (can be grouped by Levels) Types: "None", "Weapon", "Magic" or "Misc" @@ -328,6 +329,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -413,6 +415,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Fire" @@ -524,6 +527,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Ghost" @@ -659,6 +663,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Ghost" @@ -717,6 +722,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Water" @@ -798,6 +804,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Water" @@ -887,6 +894,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Fire" @@ -948,6 +956,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Fire" @@ -1016,6 +1025,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Fire" @@ -1096,6 +1106,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Wind" @@ -1176,6 +1187,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Wind" @@ -1283,6 +1295,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Holy" @@ -1442,6 +1455,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Holy" @@ -1804,6 +1818,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -1894,6 +1909,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true RangeModByVulture: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -2064,6 +2080,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Poison" @@ -2116,6 +2133,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Holy" @@ -2392,6 +2410,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -2529,6 +2548,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Holy" @@ -2622,7 +2642,9 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Holy" @@ -2915,6 +2937,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Holy" @@ -2970,6 +2993,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Holy" @@ -3042,6 +3066,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Fire" @@ -3139,6 +3164,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Fire" @@ -3178,6 +3204,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Fire" @@ -3259,6 +3286,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Wind" @@ -3340,6 +3368,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Wind" @@ -3432,6 +3461,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Water" @@ -3533,6 +3563,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Water" @@ -3607,6 +3638,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Water" @@ -3667,6 +3699,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Earth" @@ -3747,6 +3780,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true BlockedByStasis: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Earth" @@ -5256,6 +5290,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -6711,6 +6746,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -7196,6 +7232,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Fire" @@ -7249,6 +7286,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" DamageType: { @@ -7659,6 +7697,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" KnockBackTiles: { @@ -7703,6 +7742,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" AfterCastActDelay: 700 @@ -7754,6 +7794,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Holy" @@ -8056,6 +8097,7 @@ skill_db: ( Hit: "BDT_MULTIHIT" SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -8103,6 +8145,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" DamageType: { @@ -8139,6 +8182,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -16742,6 +16786,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Misc" DamageType: { @@ -16778,6 +16823,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -16812,6 +16858,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Weapon" Element: "Ele_Weapon" @@ -16857,6 +16904,7 @@ skill_db: ( SkillInfo: { AllowReproduce: true RangeModByShadowJump: true + AllowPlagiarism: true } DamageType: { NoDamage: true @@ -16908,6 +16956,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } DamageType: { NoDamage: true @@ -17034,6 +17083,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Fire" @@ -17155,6 +17205,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Fire" @@ -17197,6 +17248,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Water" @@ -17346,6 +17398,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Water" @@ -17421,6 +17474,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Wind" @@ -17489,6 +17543,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Wind" @@ -17562,6 +17617,7 @@ skill_db: ( } SkillInfo: { AllowReproduce: true + AllowPlagiarism: true } AttackType: "Magic" Element: "Ele_Wind" @@ -34331,6 +34387,10 @@ skill_db: ( SkillType: { Place: true } + SkillInfo: { + AllowPlagiarism: true + AllowReproduce: true + } AttackType: "Misc" DamageType: { SplashArea: true @@ -35337,6 +35397,9 @@ skill_db: ( SkillType: { Enemy: true } + SkillInfo: { + AllowReproduce: true + } AttackType: "Weapon" Element: "Ele_Weapon" NumberOfHits: 3 @@ -35402,6 +35465,9 @@ skill_db: ( SkillType: { Enemy: true } + SkillInfo: { + AllowReproduce: true + } AttackType: "Weapon" Element: "Ele_Weapon" DamageType: { @@ -35529,6 +35595,9 @@ skill_db: ( SkillType: { Place: true } + SkillInfo: { + AllowReproduce: true + } AttackType: "Misc" Element: "Ele_Fire" SkillInstances: 3 diff --git a/src/map/battle.c b/src/map/battle.c index 0e75263c699..61a84ad6f45 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -7660,7 +7660,6 @@ static const struct battle_data { { "display_hallucination", &battle_config.display_hallucination, 1, 0, 1, }, { "use_statpoint_table", &battle_config.use_statpoint_table, 1, 0, 1, }, { "ignore_items_gender", &battle_config.ignore_items_gender, 1, 0, 1, }, - { "copyskill_restrict", &battle_config.copyskill_restrict, 2, 0, 2, }, { "berserk_cancels_buffs", &battle_config.berserk_cancels_buffs, 0, 0, 1, }, { "monster_ai", &battle_config.mob_ai, 0x000, 0x000, 0x77F, }, { "hom_setting", &battle_config.hom_setting, 0xFFFF, 0x0000, 0xFFFF, }, diff --git a/src/map/battle.h b/src/map/battle.h index 99015356cd0..2b8fadb9590 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -396,7 +396,6 @@ struct Battle_Config { int ignore_items_gender; //[Lupus] - int copyskill_restrict; // [Aru] int berserk_cancels_buffs; // [Aru] int mob_ai; //Configures various mob_ai settings to make them smarter or dumber(official). [Skotlex] int hom_setting; //Configures various homunc settings which make them behave unlike normal characters.. [Skotlex] diff --git a/src/map/skill.c b/src/map/skill.c index 6c1a18783e5..aef6d03add6 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1220,41 +1220,36 @@ static int skill_calc_heal(struct block_list *src, struct block_list *target, ui return hp; } -// Making plagiarize check its own function [Aru] -static int can_copy(struct map_session_data *sd, uint16 skill_id, struct block_list *bl) +/** + * Making plagiarize check its own function [Aru] + * Note: If a particular skill can be copied by both skills, + * Skill will be copied by the first condition which is Plagiarism[KeiKun] + * + * @param sd The character who cast the skill. + * @return 1 Skill can be copied via Plagiarism + * 2 Skill can be copied via Reproduce + **/ +static int can_copy(struct map_session_data *sd, uint16 skill_id) { + int cidx = skill->get_index(skill_id); nullpo_ret(sd); - // Never copy NPC/Wedding Skills - if (skill->get_inf2(skill_id)&(INF2_NPC_SKILL|INF2_WEDDING_SKILL)) - return 0; - - // Transcendent-class skills - if((skill_id >= LK_AURABLADE && skill_id <= ASC_CDP) || (skill_id >= ST_PRESERVE && skill_id <= CR_CULTIVATION)) { - if (battle_config.copyskill_restrict == 2) { - return 0; - } else if (battle_config.copyskill_restrict == 1) { - if ((sd->job & (MAPID_UPPERMASK | JOBL_UPPER)) != MAPID_STALKER) - return 0; - } - } - //Added so plagarize can't copy agi/bless if you're undead since it damages you - if ((skill_id == AL_INCAGI || skill_id == AL_BLESSING || - skill_id == CASH_BLESSING || skill_id == CASH_INCAGI || - skill_id == MER_INCAGI || skill_id == MER_BLESSING)) + /// Checks if preserve is active and if skill can be copied by Plagiarism + if (!cidx) return 0; - // Couldn't preserve 3rd Class/Summoner skills except only when using Reproduce skill. [Jobbie] - if (!(sd->sc.data[SC__REPRODUCE]) && - ((skill_id >= RK_ENCHANTBLADE && skill_id <= LG_OVERBRAND_PLUSATK) || - (skill_id >= RL_GLITTERING_GREED && skill_id <= OB_AKAITSUKI) || - (skill_id >= GC_DARKCROW && skill_id <= SU_FRESHSHRIMP))) - return 0; - // Reproduce will only copy skills according on the list. [Jobbie] - else if (sd->sc.data[SC__REPRODUCE] && (skill->get_inf2(skill_id) & INF2_ALLOW_REPRODUCE) == 0) + if (sd->status.skill[cidx].id && sd->status.skill[cidx].flag == SKILL_FLAG_PLAGIARIZED) return 0; - return 1; + // Checks if preserve is active and if skill can be copied by Plagiarism + if (!sd->sc.data[SC_PRESERVE] && (skill->get_inf2(skill_id) & INF2_ALLOW_PLAGIARIZE)) + return 1; + + /// Reproduce will only copy skills according on the list. [Jobbie] + if (sd->sc.data[SC__REPRODUCE] && sd->sc.data[SC__REPRODUCE]->val1 && (skill->get_inf2(skill_id) & INF2_ALLOW_REPRODUCE)) + return 2; + + return 0; } // [MouseJstr] - skill ok to cast? and when? @@ -3611,17 +3606,17 @@ static int skill_attack(int attack_type, struct block_list *src, struct block_li map->freeblock_lock(); - if (damage > 0 && dmg.flag&BF_SKILL && tsd - && pc->checkskill(tsd,RG_PLAGIARISM) - && (!sc || !sc->data[SC_PRESERVE]) - && damage < tsd->battle_status.hp - ) { - //Updated to not be able to copy skills if the blow will kill you. [Skotlex] - int copy_skill = skill_id, cidx = 0; + // Plagiarism and Reproduce Code Block [KeiKun] + if (bl->type == BL_PC && damage > 0 && dmg.flag&BF_SKILL && tsd + && (pc->checkskill(tsd, RG_PLAGIARISM) || pc->checkskill(tsd, SC_REPRODUCE)) + && (!tsd->sc.data[SC_PRESERVE] || tsd->sc.data[SC__REPRODUCE]) + && damage < tsd->battle_status.hp // Updated to not be able to copy skills if the blow will kill you. [Skotlex] + ) { + int copy_skill = 0; /** * Copy Referral: dummy skills should point to their source upon copying **/ - switch( skill_id ) { + switch(skill_id) { case AB_DUPLELIGHT_MELEE: case AB_DUPLELIGHT_MAGIC: copy_skill = AB_DUPLELIGHT; @@ -3653,58 +3648,60 @@ static int skill_attack(int attack_type, struct block_list *src, struct block_li copy_skill = skill->attack_copy_unknown(&attack_type, src, dsrc, bl, &skill_id, &skill_lv, &tick, &flag); break; } + + int cidx, idx, lv = 0; cidx = skill->get_index(copy_skill); - if ((tsd->status.skill[cidx].id == 0 || tsd->status.skill[cidx].flag == SKILL_FLAG_PLAGIARIZED) && - can_copy(tsd,copy_skill,bl)) // Split all the check into their own function [Aru] + switch(can_copy(tsd, copy_skill)) { + case 1: // Plagiarism { - int lv, idx = 0; - if (sc && sc->data[SC__REPRODUCE] && (lv = sc->data[SC__REPRODUCE]->val1) > 0) { - //Level dependent and limitation. - lv = min(lv,skill->get_max(copy_skill)); - - if( tsd->reproduceskill_id ) { - idx = skill->get_index(tsd->reproduceskill_id); - if(tsd->status.skill[idx].flag == SKILL_FLAG_PLAGIARIZED ) { - tsd->status.skill[idx].id = 0; - tsd->status.skill[idx].lv = 0; - tsd->status.skill[idx].flag = 0; - clif->deleteskill(tsd,tsd->reproduceskill_id); - } + if (tsd->cloneskill_id) { + idx = skill->get_index(tsd->cloneskill_id); + if (tsd->status.skill[idx].flag == SKILL_FLAG_PLAGIARIZED) { + tsd->status.skill[idx].id = 0; + tsd->status.skill[idx].lv = 0; + tsd->status.skill[idx].flag = 0; + clif->deleteskill(tsd, tsd->cloneskill_id); } + } - tsd->reproduceskill_id = copy_skill; - pc_setglobalreg(tsd, script->add_variable("REPRODUCE_SKILL"), copy_skill); - pc_setglobalreg(tsd, script->add_variable("REPRODUCE_SKILL_LV"), lv); + lv = min(skill_lv, pc->checkskill(tsd, RG_PLAGIARISM)); - tsd->status.skill[cidx].id = copy_skill; - tsd->status.skill[cidx].lv = lv; - tsd->status.skill[cidx].flag = SKILL_FLAG_PLAGIARIZED; - clif->addskill(tsd,copy_skill); - } else { - int plagiarismlvl; - lv = skill_lv; - if ( tsd->cloneskill_id ) { - idx = skill->get_index(tsd->cloneskill_id); - if ( tsd->status.skill[idx].flag == SKILL_FLAG_PLAGIARIZED){ - tsd->status.skill[idx].id = 0; - tsd->status.skill[idx].lv = 0; - tsd->status.skill[idx].flag = 0; - clif->deleteskill(tsd,tsd->cloneskill_id); - } - } + tsd->cloneskill_id = copy_skill; + pc_setglobalreg(tsd, script->add_variable("CLONE_SKILL"), copy_skill); + pc_setglobalreg(tsd, script->add_variable("CLONE_SKILL_LV"), lv); - if ((plagiarismlvl = pc->checkskill(tsd,RG_PLAGIARISM)) < lv) - lv = plagiarismlvl; + tsd->status.skill[cidx].id = copy_skill; + tsd->status.skill[cidx].lv = lv; + tsd->status.skill[cidx].flag = SKILL_FLAG_PLAGIARIZED; + clif->addskill(tsd, copy_skill); + } + break; + case 2: // Reproduce + { + lv = sc ? sc->data[SC__REPRODUCE]->val1 : 1; + if (tsd->reproduceskill_id) { + idx = skill->get_index(tsd->reproduceskill_id); + if (tsd->status.skill[idx].flag == SKILL_FLAG_PLAGIARIZED) { + tsd->status.skill[idx].id = 0; + tsd->status.skill[idx].lv = 0; + tsd->status.skill[idx].flag = 0; + clif->deleteskill(tsd, tsd->reproduceskill_id); + } + } + lv = min(lv, skill->get_max(copy_skill)); - tsd->cloneskill_id = copy_skill; - pc_setglobalreg(tsd, script->add_variable("CLONE_SKILL"), copy_skill); - pc_setglobalreg(tsd, script->add_variable("CLONE_SKILL_LV"), lv); + tsd->reproduceskill_id = copy_skill; + pc_setglobalreg(tsd, script->add_variable("REPRODUCE_SKILL"), copy_skill); + pc_setglobalreg(tsd, script->add_variable("REPRODUCE_SKILL_LV"), lv); - tsd->status.skill[cidx].id = copy_skill; - tsd->status.skill[cidx].lv = lv; - tsd->status.skill[cidx].flag = SKILL_FLAG_PLAGIARIZED; - clif->addskill(tsd,copy_skill); - } + tsd->status.skill[cidx].id = copy_skill; + tsd->status.skill[cidx].lv = lv; + tsd->status.skill[cidx].flag = SKILL_FLAG_PLAGIARIZED; + clif->addskill(tsd, copy_skill); + } + break; + default: + break; } } @@ -21999,6 +21996,11 @@ static void skill_validate_skillinfo(struct config_setting_t *conf, struct s_ski sk->inf2 |= INF2_RANGE_RESEARCHTRAP; else sk->inf2 &= ~INF2_RANGE_RESEARCHTRAP; + } else if (strcmpi(skill_info, "AllowPlagiarism") == 0) { + if (on) + sk->inf2 |= INF2_ALLOW_PLAGIARIZE; + else + sk->inf2 &= ~INF2_ALLOW_PLAGIARIZE; } else if (strcmpi(skill_info, "None") != 0) { ShowWarning("%s: Invalid sub-type %s specified for skill ID %d in %s! Skipping sub-type...\n", __func__, skill_info, sk->nameid, conf->file); diff --git a/src/map/skill.h b/src/map/skill.h index e6660e87d98..884d34846dc 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -116,38 +116,39 @@ enum e_skill_nk { NK_NO_CARDFIX_DEF = 0x80, }; -//A skill with 3 would be no damage + splash: area of effect. -//Constants to identify a skill's inf2 value. +/// A skill with 3 would be no damage + splash: area of effect. +/// Constants to identify a skill's inf2 value. enum e_skill_inf2 { - INF2_NONE = 0x0000000, - INF2_QUEST_SKILL = 0x0000001, - INF2_NPC_SKILL = 0x0000002, // NPC skills are those that players can't have in their skill tree. - INF2_WEDDING_SKILL = 0x0000004, - INF2_SPIRIT_SKILL = 0x0000008, - INF2_GUILD_SKILL = 0x0000010, - INF2_SONG_DANCE = 0x0000020, - INF2_ENSEMBLE_SKILL = 0x0000040, - INF2_TRAP = 0x0000080, - INF2_TARGET_SELF = 0x0000100, // Refers to ground placed skills that will target the caster as well (like Grandcross) - INF2_NO_TARGET_SELF = 0x0000200, - INF2_PARTY_ONLY = 0x0000400, - INF2_GUILD_ONLY = 0x0000800, - INF2_NO_ENEMY = 0x0001000, - INF2_NOLP = 0x0002000, // Spells that can ignore Land Protector - INF2_CHORUS_SKILL = 0x0004000, // Chorus skill - INF2_FREE_CAST_NORMAL = 0x0008000, - INF2_FREE_CAST_REDUCED = 0x0010000, - INF2_SHOW_SKILL_SCALE = 0x0020000, - INF2_ALLOW_REPRODUCE = 0x0040000, - INF2_HIDDEN_TRAP = 0x0080000, // Traps that are hidden (based on trap_visiblity battle conf) - INF2_IS_COMBO_SKILL = 0x0100000, // Sets whether a skill can be used in combos or not - INF2_NO_STASIS = 0x0200000, - INF2_NO_KAGEHUMI = 0x0400000, - INF2_RANGE_VULTURE = 0x0800000, // Range is modified by AC_VULTURE - INF2_RANGE_SNAKEEYE = 0x1000000, // Range is modified by GS_SNAKEEYE - INF2_RANGE_SHADOWJUMP = 0x2000000, // Range is modified by NJ_SHADOWJUMP - INF2_RANGE_RADIUS = 0x4000000, // Range is modified by WL_RADIUS - INF2_RANGE_RESEARCHTRAP = 0x8000000, // Range is modified by RA_RESEARCHTRAP + INF2_NONE = 0x00000000, + INF2_QUEST_SKILL = 0x00000001, + INF2_NPC_SKILL = 0x00000002, ///< NPC skills are those that players can't have in their skill tree. + INF2_WEDDING_SKILL = 0x00000004, + INF2_SPIRIT_SKILL = 0x00000008, + INF2_GUILD_SKILL = 0x00000010, + INF2_SONG_DANCE = 0x00000020, + INF2_ENSEMBLE_SKILL = 0x00000040, + INF2_TRAP = 0x00000080, + INF2_TARGET_SELF = 0x00000100, ///< Refers to ground placed skills that will target the caster as well (like Grandcross) + INF2_NO_TARGET_SELF = 0x00000200, + INF2_PARTY_ONLY = 0x00000400, + INF2_GUILD_ONLY = 0x00000800, + INF2_NO_ENEMY = 0x00001000, + INF2_NOLP = 0x00002000, ///< Spells that can ignore Land Protector + INF2_CHORUS_SKILL = 0x00004000, ///< Chorus skill + INF2_FREE_CAST_NORMAL = 0x00008000, + INF2_FREE_CAST_REDUCED = 0x00010000, + INF2_SHOW_SKILL_SCALE = 0x00020000, + INF2_ALLOW_REPRODUCE = 0x00040000, ///< Allow skill to be copied via SC_REPRODUCE + INF2_HIDDEN_TRAP = 0x00080000, ///< Traps that are hidden (based on trap_visiblity battle conf) + INF2_IS_COMBO_SKILL = 0x00100000, ///< Sets whether a skill can be used in combos or not + INF2_NO_STASIS = 0x00200000, + INF2_NO_KAGEHUMI = 0x00400000, + INF2_RANGE_VULTURE = 0x00800000, ///< Range is modified by AC_VULTURE + INF2_RANGE_SNAKEEYE = 0x01000000, ///< Range is modified by GS_SNAKEEYE + INF2_RANGE_SHADOWJUMP = 0x02000000, ///< Range is modified by NJ_SHADOWJUMP + INF2_RANGE_RADIUS = 0x04000000, ///< Range is modified by WL_RADIUS + INF2_RANGE_RESEARCHTRAP = 0x08000000, ///< Range is modified by RA_RESEARCHTRAP + INF2_ALLOW_PLAGIARIZE = 0x10000000, ///< Allow skill to be copied via RG_PLAGIARISM[KeiKun] };