From 46f73e13a8d16eef9d8072413ad701ee25c4238f Mon Sep 17 00:00:00 2001
From: BiggBoss <BiggBoss@users.noreply.github.com>
Date: Mon, 9 Sep 2013 16:11:38 +0000
Subject: [PATCH] BETA: DP-Part for [L6208]

---
 .../scripts/handlers/EffectMasterHandler.java |   4 +
 .../handlers/effecthandlers/BlockAction.java  | 108 ++++++++++++++++++
 .../handlers/effecthandlers/BlockChat.java    |  69 +++++++++++
 .../handlers/effecthandlers/BlockParty.java   |  67 +++++++++++
 .../scripts/handlers/effecthandlers/Flag.java |  72 ++++++++++++
 .../game/data/stats/skills/06000-06099.xml    |  66 ++++++++---
 .../dist/sql/game/bot_reported_char_data.sql  |   6 +
 7 files changed, 377 insertions(+), 15 deletions(-)
 create mode 100644 L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/BlockAction.java
 create mode 100644 L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/BlockChat.java
 create mode 100644 L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/BlockParty.java
 create mode 100644 L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Flag.java
 create mode 100644 L2J_DataPack_BETA/dist/sql/game/bot_reported_char_data.sql

diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java
index 8f6fce39c9..615d35484c 100644
--- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/EffectMasterHandler.java
@@ -44,6 +44,9 @@ public final class EffectMasterHandler
 		Betray.class,
 		BigHead.class,
 		Blink.class,
+		BlockAction.class,
+		BlockChat.class,
+		BlockParty.class,
 		BlockBuffSlot.class,
 		BlockResurrection.class,
 		Bluff.class,
@@ -88,6 +91,7 @@ public final class EffectMasterHandler
 		FatalBlow.class,
 		Fear.class,
 		FocusEnergy.class,
+		Flag.class,
 		FocusMaxEnergy.class,
 		FocusSouls.class,
 		Fusion.class,
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/BlockAction.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/BlockAction.java
new file mode 100644
index 0000000000..cba96c49cc
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/BlockAction.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2004-2013 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * L2J DataPack is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package handlers.effecthandlers;
+
+import java.util.ArrayList;
+
+import com.l2jserver.gameserver.datatables.BotReportTable;
+import com.l2jserver.gameserver.instancemanager.PunishmentManager;
+import com.l2jserver.gameserver.model.effects.EffectTemplate;
+import com.l2jserver.gameserver.model.effects.L2Effect;
+import com.l2jserver.gameserver.model.effects.L2EffectType;
+import com.l2jserver.gameserver.model.punishment.PunishmentAffect;
+import com.l2jserver.gameserver.model.punishment.PunishmentTask;
+import com.l2jserver.gameserver.model.punishment.PunishmentType;
+import com.l2jserver.gameserver.model.stats.Env;
+
+/**
+ * @author BiggBoss
+ */
+public final class BlockAction extends L2Effect
+{
+	private final ArrayList<Integer> _blockedActions;
+	
+	/**
+	 * @param env
+	 * @param template
+	 */
+	public BlockAction(Env env, EffectTemplate template)
+	{
+		super(env, template);
+		String[] rawActions = template.getParameters().getString("blockedActions").split(",");
+		_blockedActions = new ArrayList<>(rawActions.length);
+		for (String act : rawActions)
+		{
+			int id = -1;
+			try
+			{
+				id = Integer.parseInt(act);
+				_blockedActions.add(id);
+			}
+			catch (Exception e)
+			{
+			}
+		}
+	}
+	
+	@Override
+	public boolean onStart()
+	{
+		if ((getEffected() == null) || !getEffected().isPlayer())
+		{
+			return false;
+		}
+		
+		if (_blockedActions.contains(BotReportTable.PARTY_ACTION_BLOCK_ID))
+		{
+			PunishmentManager.getInstance().startPunishment(new PunishmentTask(getEffected().getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.PARTY_BAN, 0, "block action debuff", "system"));
+		}
+		
+		if (_blockedActions.contains(BotReportTable.CHAT_BLOCK_ID))
+		{
+			PunishmentManager.getInstance().startPunishment(new PunishmentTask(getEffected().getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN, 0, "block action debuff", "system"));
+		}
+		
+		return true;
+	}
+	
+	@Override
+	public void onExit()
+	{
+		if (_blockedActions.contains(BotReportTable.PARTY_ACTION_BLOCK_ID))
+		{
+			PunishmentManager.getInstance().stopPunishment(getEffected().getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.PARTY_BAN);
+		}
+		if (_blockedActions.contains(BotReportTable.CHAT_BLOCK_ID))
+		{
+			PunishmentManager.getInstance().stopPunishment(getEffected().getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN);
+		}
+	}
+	
+	@Override
+	public boolean checkCondition(Object id)
+	{
+		return !_blockedActions.contains(id);
+	}
+	
+	@Override
+	public L2EffectType getEffectType()
+	{
+		return L2EffectType.ACTION_BLOCK;
+	}
+}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/BlockChat.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/BlockChat.java
new file mode 100644
index 0000000000..fdde92286e
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/BlockChat.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2004-2013 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * L2J DataPack is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package handlers.effecthandlers;
+
+import com.l2jserver.gameserver.instancemanager.PunishmentManager;
+import com.l2jserver.gameserver.model.effects.EffectTemplate;
+import com.l2jserver.gameserver.model.effects.L2Effect;
+import com.l2jserver.gameserver.model.effects.L2EffectType;
+import com.l2jserver.gameserver.model.punishment.PunishmentAffect;
+import com.l2jserver.gameserver.model.punishment.PunishmentTask;
+import com.l2jserver.gameserver.model.punishment.PunishmentType;
+import com.l2jserver.gameserver.model.stats.Env;
+
+/**
+ * @author BiggBoss
+ */
+public final class BlockChat extends L2Effect
+{
+	public BlockChat(Env env, EffectTemplate template)
+	{
+		super(env, template);
+	}
+	
+	@Override
+	public L2EffectType getEffectType()
+	{
+		return L2EffectType.CHAT_BLOCK;
+	}
+	
+	@Override
+	public boolean onStart()
+	{
+		if ((getEffected() == null) || !getEffected().isPlayer())
+		{
+			return false;
+		}
+		
+		PunishmentManager.getInstance().startPunishment(new PunishmentTask(getEffected().getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN, 0, "Chat banned bot report", "system"));
+		return true;
+	}
+	
+	@Override
+	public void onExit()
+	{
+		PunishmentManager.getInstance().stopPunishment(getEffected().getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN);
+	}
+	
+	@Override
+	public boolean isInstant()
+	{
+		return true;
+	}
+}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/BlockParty.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/BlockParty.java
new file mode 100644
index 0000000000..f6fb328396
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/BlockParty.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2004-2013 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * L2J DataPack is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package handlers.effecthandlers;
+
+import com.l2jserver.gameserver.instancemanager.PunishmentManager;
+import com.l2jserver.gameserver.model.effects.EffectTemplate;
+import com.l2jserver.gameserver.model.effects.L2Effect;
+import com.l2jserver.gameserver.model.effects.L2EffectType;
+import com.l2jserver.gameserver.model.punishment.PunishmentAffect;
+import com.l2jserver.gameserver.model.punishment.PunishmentTask;
+import com.l2jserver.gameserver.model.punishment.PunishmentType;
+import com.l2jserver.gameserver.model.stats.Env;
+
+/**
+ * @author BiggBoss
+ */
+public final class BlockParty extends L2Effect
+{
+	/**
+	 * @param env
+	 * @param template
+	 */
+	public BlockParty(Env env, EffectTemplate template)
+	{
+		super(env, template);
+	}
+	
+	@Override
+	public L2EffectType getEffectType()
+	{
+		return L2EffectType.NONE;
+	}
+	
+	@Override
+	public boolean onStart()
+	{
+		if ((getEffected() == null) || !getEffected().isPlayer())
+		{
+			return false;
+		}
+		
+		PunishmentManager.getInstance().startPunishment(new PunishmentTask(getEffected().getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.PARTY_BAN, 0, "Party banned by bot report", "system"));
+		return true;
+	}
+	
+	@Override
+	public void onExit()
+	{
+		PunishmentManager.getInstance().stopPunishment(getEffected().getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.PARTY_BAN);
+	}
+}
diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Flag.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Flag.java
new file mode 100644
index 0000000000..97012f0ab2
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/Flag.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2004-2013 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * L2J DataPack is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package handlers.effecthandlers;
+
+import com.l2jserver.gameserver.model.effects.EffectTemplate;
+import com.l2jserver.gameserver.model.effects.L2Effect;
+import com.l2jserver.gameserver.model.effects.L2EffectType;
+import com.l2jserver.gameserver.model.stats.Env;
+
+/**
+ * @author BiggBoss
+ */
+public final class Flag extends L2Effect
+{
+	/**
+	 * @param env
+	 * @param template
+	 */
+	public Flag(Env env, EffectTemplate template)
+	{
+		super(env, template);
+	}
+	
+	@Override
+	public L2EffectType getEffectType()
+	{
+		return L2EffectType.NONE;
+	}
+	
+	@Override
+	public boolean onStart()
+	{
+		if ((getEffected() == null) || !getEffected().isPlayer())
+		{
+			return false;
+		}
+		
+		getEffected().updatePvPFlag(1);
+		
+		return true;
+	}
+	
+	@Override
+	public boolean onActionTime()
+	{
+		getEffected().updatePvPFlag(1);
+		
+		return super.onActionTime();
+	}
+	
+	@Override
+	public void onExit()
+	{
+		getEffected().getActingPlayer().updatePvPFlag(0);
+	}
+}
diff --git a/L2J_DataPack_BETA/dist/game/data/stats/skills/06000-06099.xml b/L2J_DataPack_BETA/dist/game/data/stats/skills/06000-06099.xml
index 4d33e04df6..3009051208 100644
--- a/L2J_DataPack_BETA/dist/game/data/stats/skills/06000-06099.xml
+++ b/L2J_DataPack_BETA/dist/game/data/stats/skills/06000-06099.xml
@@ -314,13 +314,17 @@
 	<skill id="6038" levels="1" name="Report Status">
 		<set name="abnormalLvl" val="1" />
 		<set name="abnormalTime" val="600" />
-		<set name="abnormalType" val="BOT_PENALTY" />
+		<set name="abnormalType" val="NONE" />
 		<set name="icon" val="icon.skill6038" />
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="-1" />
 		<set name="operateType" val="A2" />
-		<set name="skillType" val="NOTDONE" />
-		<set name="targetType" val="NONE" />
+		<set name="skillType" val="DEBUFF" />
+		<set name="targetType" val="ONE" />
+		<set name="stayAfterDeath" val="True" />
+		<for>
+			<effect name="BlockChat" val="0" />
+		</for>
 	</skill>
 	<skill id="6039" levels="1" name="Report Status">
 		<set name="abnormalLvl" val="1" />
@@ -330,8 +334,12 @@
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="-1" />
 		<set name="operateType" val="A2" />
-		<set name="skillType" val="NOTDONE" />
-		<set name="targetType" val="NONE" />
+		<set name="skillType" val="DEBUFF" />
+		<set name="targetType" val="ONE" />
+		<set name="stayAfterDeath" val="True" />
+		<for>
+			<effect name="BlockParty" val="0" />
+		</for>
 	</skill>
 	<skill id="6040" levels="1" name="Report Status">
 		<set name="abnormalLvl" val="1" />
@@ -341,8 +349,12 @@
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="-1" />
 		<set name="operateType" val="A2" />
-		<set name="skillType" val="NOTDONE" />
-		<set name="targetType" val="NONE" />
+		<set name="skillType" val="DEBUFF" />
+		<set name="targetType" val="ONE" />
+		<set name="stayAfterDeath" val="True" />
+		<for>
+			<effect name="Flag" val="0" />
+		</for>
 	</skill>
 	<skill id="6041" levels="1" name="Phoenix Rush">
 		<!-- Confirmed CT2.5 -->
@@ -626,8 +638,14 @@
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="-1" />
 		<set name="operateType" val="A2" />
-		<set name="skillType" val="NOTDONE" />
-		<set name="targetType" val="NONE" />
+		<set name="skillType" val="DEBUFF" />
+		<set name="targetType" val="ONE" />
+		<set name="stayAfterDeath" val="True" />
+		<for>
+			<effect name="BlockAction" val="0">
+				<param blockedActions="-2" />
+			</effect>
+		</for>
 	</skill>
 	<skill id="6056" levels="1" name="Report Status">
 		<set name="abnormalLvl" val="1" />
@@ -637,8 +655,14 @@
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="-1" />
 		<set name="operateType" val="A2" />
-		<set name="skillType" val="NOTDONE" />
-		<set name="targetType" val="NONE" />
+		<set name="skillType" val="DEBUFF" />
+		<set name="targetType" val="ONE" />
+		<set name="stayAfterDeath" val="True" />
+		<for>
+			<effect name="BlockAction" val="0">
+				<param blockedActions="-2" />
+			</effect>
+		</for>
 	</skill>
 	<skill id="6057" levels="1" name="Report Status">
 		<set name="abnormalLvl" val="1" />
@@ -648,8 +672,14 @@
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="-1" />
 		<set name="operateType" val="A2" />
-		<set name="skillType" val="NOTDONE" />
-		<set name="targetType" val="NONE" />
+		<set name="skillType" val="DEBUFF" />
+		<set name="targetType" val="ONE" />
+		<set name="stayAfterDeath" val="True" />
+		<for>
+			<effect name="Debuff" val="0">
+				<mul order="0x30" stat="runSpd" val="0.0" />
+			</effect>
+		</for>
 	</skill>
 	<skill id="6058" levels="1" name="Report Status">
 		<set name="abnormalLvl" val="1" />
@@ -659,8 +689,14 @@
 		<set name="isMagic" val="2" /> <!-- Static Skill -->
 		<set name="magicLvl" val="-1" />
 		<set name="operateType" val="A2" />
-		<set name="skillType" val="NOTDONE" />
-		<set name="targetType" val="NONE" />
+		<set name="skillType" val="DEBUFF" />
+		<set name="targetType" val="ONE" />
+		<set name="stayAfterDeath" val="True" />
+		<for>
+			<effect name="Debuff" val="0">
+				<mul order="0x30" stat="runSpd" val="0.0" />
+			</effect>
+		</for>
 	</skill>
 	<skill id="6059" levels="1" name="Counter Critical">
 		<!-- Confirmed CT2.5 -->
diff --git a/L2J_DataPack_BETA/dist/sql/game/bot_reported_char_data.sql b/L2J_DataPack_BETA/dist/sql/game/bot_reported_char_data.sql
new file mode 100644
index 0000000000..f6db4d65cc
--- /dev/null
+++ b/L2J_DataPack_BETA/dist/sql/game/bot_reported_char_data.sql
@@ -0,0 +1,6 @@
+CREATE TABLE IF NOT EXISTS `bot_reported_char_data` (
+	`botId` INT UNSIGNED NOT NULL DEFAULT 0,
+	`reporterId` INT UNSIGNED NOT NULL DEFAULT 0,
+	`reportDate` BIGINT(13) unsigned NOT NULL DEFAULT '0',
+	PRIMARY KEY (`botId`, `reporterId`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
\ No newline at end of file
-- 
GitLab