Kaip grax sako gali isidet multifunction zone koda arba tiesiog dar paprasteni koda. :D
### Eclipse Workspace Patch 1.0
#P trunk3
Index: gameserver/head-src/com/l2jfrozen/gameserver/model/zone/type/L2FlagZone.java
===================================================================
--- gameserver/head-src/com/l2jfrozen/gameserver/model/zone/type/L2FlagZone.java (revision 0)
+++ gameserver/head-src/com/l2jfrozen/gameserver/model/zone/type/L2FlagZone.java (revision 0)
@@ -0,0 +1,185 @@
+/*
+ * This program 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.
+ *
+ * This program 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 com.l2jfrozen.gameserver.model.zone.type;
+
+import java.util.concurrent.Future;
+
+import com.l2jfrozen.gameserver.datatables.SkillTable;
+import com.l2jfrozen.gameserver.model.L2Character;
+import com.l2jfrozen.gameserver.model.L2Skill;
+import com.l2jfrozen.gameserver.model.actor.instance.L2MonsterInstance;
+import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jfrozen.gameserver.model.actor.instance.L2PlayableInstance;
+import com.l2jfrozen.gameserver.model.zone.L2ZoneType;
+import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
+import com.l2jfrozen.util.random.Rnd;
+
+/**
+ * @author Strato
+ * @author Elfocrash (for the correction)
+ */
+public class L2FlagZone extends L2ZoneType
+{
+ private int _skillId;
+ private int _chance;
+ private int _initialDelay;
+ private int _skillLvl;
+ private int _reuse;
+ private boolean _enabled;
+ private String _target;
+ private Future<?> _task;
+ public L2FlagZone(int id)
+ {
+ super(id);
+ _skillId = 1323;
+ _skillLvl = 1;
+ _chance = 100;
+ _initialDelay = 0;
+ _reuse = 30000;
+ _enabled = true;
+ _target = "pc";
+ }
+
+ @Override
+ public void setParameter(String name, String value)
+ {
+ if(name.equals("skillId"))
+ {
+ _skillId = Integer.parseInt(value);
+ }
+ else if(name.equals("skillLvl"))
+ {
+ _skillLvl = Integer.parseInt(value);
+ }
+ else if(name.equals("chance"))
+ {
+ _chance = Integer.parseInt(value);
+ }
+ else if(name.equals("initialDelay"))
+ {
+ _initialDelay = Integer.parseInt(value);
+ }
+ else if(name.equals("default_enabled"))
+ {
+ _enabled = Boolean.parseBoolean(value);
+ }
+ else if(name.equals("target"))
+ {
+ _target = String.valueOf(value);
+ }
+ else if(name.equals("reuse"))
+ {
+ _reuse = Integer.parseInt(value);
+ }
+ else
+ {
+ super.setParameter(name, value);
+ }
+ }
+
+ @Override
+ protected void onEnter(L2Character character)
+ {
+ if (character instanceof L2PcInstance)
+ {
+ // Set pvp flag
+ ((L2PcInstance) character).setPvpFlag(1);
+ ((L2PcInstance) character).sendMessage("You entered a Pvp Flag zone.Have fun!!!");
+ ((L2PcInstance) character).broadcastUserInfo();
+ if((character instanceof L2PlayableInstance && _target.equalsIgnoreCase("pc") || character instanceof L2PcInstance && _target.equalsIgnoreCase("pc_only") || character instanceof L2MonsterInstance && _target.equalsIgnoreCase("npc")) && _task == null)
+ {
+ _task = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new ApplySkill(/*this*/), _initialDelay, _reuse);
+ }
+ }
+ }
+
+ @Override
+ protected void onExit(L2Character character)
+ {
+ if (character instanceof L2PcInstance)
+ {
+ ((L2PcInstance) character).setPvpFlag(0);
+ ((L2PcInstance) character).sendMessage("You left the Pvp Flag zone.BAAAAD!!");
+ ((L2PcInstance) character).broadcastUserInfo();
+ }
+ if(_characterList.isEmpty() && _task != null)
+ {
+ _task.cancel(true);
+ _task = null;
+ }
+ }
+
+ public L2Skill getSkill()
+ {
+ return SkillTable.getInstance().getInfo(_skillId, _skillLvl);
+ }
+
+ public String getTargetType()
+ {
+ return _target;
+ }
+
+ public boolean isEnabled()
+ {
+ return _enabled;
+ }
+
+ public int getChance()
+ {
+ return _chance;
+ }
+
+ public void setZoneEnabled(boolean val)
+ {
+ _enabled = val;
+ }
+ class ApplySkill implements Runnable
+ {
+ @Override
+ public void run()
+ {
+ if(isEnabled())
+ {
+ for(L2Character temp : _characterList.values())
+ {
+ if(temp != null && !temp.isDead())
+ {
+ if((temp instanceof L2PlayableInstance && getTargetType().equalsIgnoreCase("pc") || temp instanceof L2PcInstance && getTargetType().equalsIgnoreCase("pc_only") || temp instanceof L2MonsterInstance && getTargetType().equalsIgnoreCase("npc")) && Rnd.get(100) < getChance())
+ {
+ L2Skill skill = null;
+ if((skill=getSkill())==null){
+ System.out.println("ATTENTION: error on zone with id "+getId());
+ System.out.println("Skill "+_skillId+","+_skillLvl+" not present between skills");
+ }else
+ skill.getEffects(temp, temp);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onDieInside(L2Character character)
+ {
+
+ }
+
+ @Override
+ public void onReviveInside(L2Character character)
+ {
+ onEnter(character);
+ }
+}
\ No newline at end of file
Index: gameserver/head-src/com/l2jfrozen/gameserver/datatables/xml/ZoneData.java
===================================================================
--- gameserver/head-src/com/l2jfrozen/gameserver/datatables/xml/ZoneData.java (revision 909)
+++ gameserver/head-src/com/l2jfrozen/gameserver/datatables/xml/ZoneData.java (working copy)
@@ -63,6 +63,7 @@
import com.l2jfrozen.gameserver.model.zone.type.L2OlympiadStadiumZone;
import com.l2jfrozen.gameserver.model.zone.type.L2PeaceZone;
import com.l2jfrozen.gameserver.model.zone.type.L2PoisonZone;
+import com.l2jfrozen.gameserver.model.zone.type.L2FlagZone;
import com.l2jfrozen.gameserver.model.zone.type.L2SwampZone;
import com.l2jfrozen.gameserver.model.zone.type.L2TownZone;
import com.l2jfrozen.gameserver.model.zone.type.L2WaterZone;
@@ -278,6 +279,10 @@
{
temp = new L2SwampZone(zoneId);
}
+ else if(zoneType.equals("FlagZone"))
+ {
+ temp = new L2FlagZone(zoneId);
+ }
// Check for unknown type
if(temp == null)