diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/db_installer/sql/game/buffer_schemes.sql b/L2J_Mobius_Classic_2.0_Saviors/dist/db_installer/sql/game/buffer_schemes.sql
new file mode 100644
index 0000000000..ecc7cb6ed7
--- /dev/null
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/db_installer/sql/game/buffer_schemes.sql
@@ -0,0 +1,5 @@
+CREATE TABLE IF NOT EXISTS `buffer_schemes` (
+ `object_id` INT UNSIGNED NOT NULL DEFAULT '0',
+ `scheme_name` VARCHAR(16) NOT NULL DEFAULT 'default',
+ `skills` VARCHAR(200) NOT NULL
+);
\ No newline at end of file
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/Custom/ShemeBuffer.ini b/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/Custom/ShemeBuffer.ini
new file mode 100644
index 0000000000..9087a3df17
--- /dev/null
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/Custom/ShemeBuffer.ini
@@ -0,0 +1,10 @@
+#=============================================================
+# Buffer
+#=============================================================
+# Also check data\SchemeBufferSkills.xml
+
+# Maximum number of available schemes per player.
+BufferMaxSchemesPerChar = 4
+
+# Static cost of buffs ; override skills price if different of -1.
+BufferStaticCostPerBuff = -1
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/SchemeBufferSkills.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/SchemeBufferSkills.xml
new file mode 100644
index 0000000000..dc54a77ef5
--- /dev/null
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/SchemeBufferSkills.xml
@@ -0,0 +1,69 @@
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/html/mods/SchemeBuffer/50008-1.htm b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/html/mods/SchemeBuffer/50008-1.htm
new file mode 100644
index 0000000000..780dc11dbd
--- /dev/null
+++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/html/mods/SchemeBuffer/50008-1.htm
@@ -0,0 +1,14 @@
+
+ |
" + SkillData.getInstance().getSkill(skillId, 1).getName() + " | "); + } + else + { + sb.append(" | " + SkillData.getInstance().getSkill(skillId, 1).getName() + " | "); + } + } + else if (skillId < 1000) + { + if (schemeSkills.contains(skillId)) + { + sb.append(" | " + SkillData.getInstance().getSkill(skillId, 1).getName() + " | "); + } + else + { + sb.append(" | " + SkillData.getInstance().getSkill(skillId, 1).getName() + " | "); + } + } + else + { + if (schemeSkills.contains(skillId)) + { + sb.append(" | " + SkillData.getInstance().getSkill(skillId, 1).getName() + " | "); + } + else + { + sb.append(" | " + SkillData.getInstance().getSkill(skillId, 1).getName() + " | "); + } + } + + sb.append(" |
Previous | "); + } + else + { + sb.append("Previous | "); + } + + sb.append("Page " + page + " | "); + + if (page < max) + { + sb.append("Next | "); + } + else + { + sb.append("Next | "); + } + + sb.append("
" + type + " | "); + } + else + { + sb.append("" + type + " | "); + } + + count++; + if (count == 4) + { + sb.append("
+ |
" + SkillData.getInstance().getSkill(skillId, 1).getName() + " | "); + } + else + { + sb.append(" | " + SkillData.getInstance().getSkill(skillId, 1).getName() + " | "); + } + } + else if (skillId < 1000) + { + if (schemeSkills.contains(skillId)) + { + sb.append(" | " + SkillData.getInstance().getSkill(skillId, 1).getName() + " | "); + } + else + { + sb.append(" | " + SkillData.getInstance().getSkill(skillId, 1).getName() + " | "); + } + } + else + { + if (schemeSkills.contains(skillId)) + { + sb.append(" | " + SkillData.getInstance().getSkill(skillId, 1).getName() + " | "); + } + else + { + sb.append(" | " + SkillData.getInstance().getSkill(skillId, 1).getName() + " | "); + } + } + + sb.append(" |
Previous | "); + } + else + { + sb.append("Previous | "); + } + + sb.append("Page " + page + " | "); + + if (page < max) + { + sb.append("Next | "); + } + else + { + sb.append("Next | "); + } + + sb.append("
" + type + " | "); + } + else + { + sb.append("" + type + " | "); + } + + count++; + if (count == 4) + { + sb.append("