Jump to content
  • 0

Exit Flagzone


Rio

Question

Hi guys im using elfo's flagzone
 

### 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 <[url="http://www.gnu.org/licenses/>."]http://www.gnu.org/licenses/>.[/url]
+ */
+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)

 and i wonder how can i change the onexit option to keep pvpflag for some seconds because everytime i exit the zone pvpflag goes off immediately.

 

 @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();
+ }
Link to comment
Share on other sites

12 answers to this question

Recommended Posts

  • 0
 

Tried every possible way i could think still cant make it work!

Do you tried to remove the < + ((L2PcInstance) character).setPvpFlag(0); > onExit? 
Probably with this way, player will keep pvp flag for some time..

Link to comment
Share on other sites

  • 0

Would not, since most likely there is a return check onUpdate.

 

There is a line PvpTaskManager.blabla().add(

 

There is no such line in L2PcInstance,

Also i tried the following codes:

 @Override
 protected void onExit(L2Character character)
 {
 if (character instanceof L2PcInstance)
 {
 ((L2PcInstance) character).setPvpFlag(0);
((L2PcInstance) character).setPvpFlagLasts(System.currentTimeMillis() + Config.PVP_PVP_TIME);
 ((L2PcInstance) character).sendMessage("You left the Pvp Flag zone.BAAAAD!!");

also tried to remove setPvpFlag(0);

both options wont work.

 

Edited by Rio
Link to comment
Share on other sites

  • 0
@Override
       protected void onExit(L2Character character)
       {
               if (character instanceof L2PcInstance)
               {
                   ((L2PcInstance) character).setPvpFlag(0);
                   ((L2PcInstance) character).setPvpFlagLasts(System.currentTimeMillis() + Config.PVP_NORMAL_TIME);
                   ((L2PcInstance) character).startPvPFlag();
                   ((L2PcInstance) character).sendMessage("You left the Pvp Flag zone.BAAAAD!!");
                   ((L2PcInstance) character).broadcastUserInfo();
               }
       }

is from my zone and is work good

Link to comment
Share on other sites

  • 0
@Override
       protected void onExit(L2Character character)
       {
               if (character instanceof L2PcInstance)
               {
                   ((L2PcInstance) character).setPvpFlag(0);
                   ((L2PcInstance) character).setPvpFlagLasts(System.currentTimeMillis() + Config.PVP_NORMAL_TIME);
                   ((L2PcInstance) character).startPvPFlag();
                   ((L2PcInstance) character).sendMessage("You left the Pvp Flag zone.BAAAAD!!");
                   ((L2PcInstance) character).broadcastUserInfo();
               }
       }

is from my zone and is work good

 

thank you tazerman it worked! :D

Link to comment
Share on other sites

  • 0

 

There is no such line in L2PcInstance,

Also i tried the following codes:

 @Override
 protected void onExit(L2Character character)
 {
 if (character instanceof L2PcInstance)
 {
 ((L2PcInstance) character).setPvpFlag(0);
((L2PcInstance) character).setPvpFlagLasts(System.currentTimeMillis() + Config.PVP_PVP_TIME);
 ((L2PcInstance) character).sendMessage("You left the Pvp Flag zone.BAAAAD!!");

also tried to remove setPvpFlag(0);

both options wont work.

 

+   @Override
+   protected void onEnter(L2Character character)
+   {
+       if (character instanceof L2PcInstance)
+       {
+         // Set pvp flag
+          ((L2PcInstance) character).stopPvPFlag();
+          ((L2PcInstance) character).setPvpFlag(1);
+          ((L2PcInstance) character).sendPacket(new SystemMessage(SystemMessageId.ENTERED_COMBAT_ZONE));
+          ((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).updatePvPStatus();
+           ((L2PcInstance) character).sendPacket(new SystemMessage(SystemMessageId.LEFT_COMBAT_ZONE));
+           ((L2PcInstance) character).broadcastUserInfo();
+       }
+
+       if(_characterList.isEmpty() && _task != null)
+       {
+           _task.cancel(true);
+           _task = null;
+       }
+   }
Edited by xPeNaChO
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.


×
×
  • Create New...