[Help] doRevive

Support for the latest build of L2J Server, get help here with installations, upgrades, problems.
Do not post bugs reports here, use viewforum.php?f=77 instead.
There is no support for other server builds than the official provided by l2jserver.com
Forum rules
READ NOW: L2j Forums Rules of Conduct
Post Reply
Mage
Posts: 277
Joined: Fri Apr 17, 2009 2:29 pm

[Help] doRevive

Post by Mage »

version=5729
version=2796


I am using an Event (Death MAtch) Shared in other forum. All works fine but the players when die don't respawn. (with to village nothing appear, only at the end of the event, they are teleported on the city)

This is all the code DM:

Code: Select all

package net.sf.l2j.gameserver.events; import javolution.util.FastSet;import net.sf.l2j.Config;import net.sf.l2j.gameserver.Announcements;import net.sf.l2j.gameserver.ThreadPoolManager;import net.sf.l2j.gameserver.datatables.MapRegionTable.TeleportWhereType;import net.sf.l2j.gameserver.model.L2World;import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;import net.sf.l2j.gameserver.model.entity.TvTEvent;import net.sf.l2j.gameserver.network.serverpackets.CreatureSay; /** * * @author  DrHouse */public class DeathMatch extends Thread{	private static boolean _scheduled = false;	private static volatile Status _status = Status.SLEEPING; 	private static final FastSet<L2PcInstance> _players = new FastSet<L2PcInstance>();	private static final DeathMatch _instance = new DeathMatch(); 	// config values	private static final int MAX_PLAYERS = 100;	private static final int X = 153568; // HERE ok	private static final int Y = 142077;	private static final int Z = -12738;	private static final int EVENT_DURATION = 6; // minutes	private static final int INITIAL_DELAY = 200000; // minutes	private static final int PERIOD_BETWEEN_EVENTS = 200000; // minutes	private static final int[] ON_KILL_REWARD = {57,1000};	private static final int[] WINNER_REWARD = {57,10000}; // REWARDS 	public static enum Status	{		SLEEPING,		REGISTERING,		TELEPORTING,		RUNNING,		REWARDING	} 	public static void pulse()	{		_instance.notifyAll();	} 	public void run()	{		synchronized (this)		{			if (_status != Status.SLEEPING)				return; 			if (TvTEvent.isStarting() || TvTEvent.isStarted())			{				try				{					wait(Config.TVT_EVENT_RUNNING_TIME*60*1000);				}				catch (InterruptedException e)				{}			}			_status = Status.REGISTERING;		}  		CreatureSay cs2 = new CreatureSay(0, 18, "", "Automatic Event initiaded."); 		for (L2PcInstance onlinePlayer : L2World.getInstance().getAllPlayers().values()) 		    if (onlinePlayer.isOnline() == 1) 		        onlinePlayer.sendPacket(cs2); 		CreatureSay cs4 = new CreatureSay(0, 18, "", "Event [Death Match] started!!"); 		for (L2PcInstance onlinePlayer : L2World.getInstance().getAllPlayers().values()) 		    if (onlinePlayer.isOnline() == 1) 		        onlinePlayer.sendPacket(cs4);   		CreatureSay cs = new CreatureSay(0, 18, "", "DM Event: 3 minute(s) until registration is closed!"); 		for (L2PcInstance onlinePlayer : L2World.getInstance().getAllPlayers().values()) 		    if (onlinePlayer.isOnline() == 1) 		        onlinePlayer.sendPacket(cs); 		CreatureSay cs3 = new CreatureSay(0, 18, "", "Use .dmjoin to set your request !"); 		for (L2PcInstance onlinePlayer : L2World.getInstance().getAllPlayers().values()) 		    if (onlinePlayer.isOnline() == 1) 		        onlinePlayer.sendPacket(cs3);    		try{			Thread.sleep(120*1000);		}		catch (Exception e){			e.printStackTrace();		}   		CreatureSay cs5 = new CreatureSay(0, 18, "", "DM Event: 60 secs until registration is closed!"); 		for (L2PcInstance onlinePlayer : L2World.getInstance().getAllPlayers().values()) 		    if (onlinePlayer.isOnline() == 1) 		        onlinePlayer.sendPacket(cs5); 		try{			Thread.sleep(45*1000);		}		catch (Exception e){			e.printStackTrace();		}   		CreatureSay cs6 = new CreatureSay(0, 18, "", "DM Event: 15 secs until registration is closed!"); 		for (L2PcInstance onlinePlayer : L2World.getInstance().getAllPlayers().values()) 		    if (onlinePlayer.isOnline() == 1) 		        onlinePlayer.sendPacket(cs6); 		try{			Thread.sleep(15*1000);		}		catch (Exception e){			e.printStackTrace();		}    		CreatureSay cs7 = new CreatureSay(0, 18, "", "DM: Registration period is over. Get ready for the event!"); 		for (L2PcInstance onlinePlayer : L2World.getInstance().getAllPlayers().values()) 		    if (onlinePlayer.isOnline() == 1) 		        onlinePlayer.sendPacket(cs7); 		_status = Status.TELEPORTING; 		try{			Thread.sleep(5*1000);		}		catch (Exception e){			e.printStackTrace();		} 		synchronized (_players) // against removing onlogout players etc		{			for (L2PcInstance player : _players)			{				//add reset to deaths flag				//set status flag to true				player.DeathMatchCount = 0;				player.OnDeathMatch = true;				player.teleToLocation(153568, 142077, -12738, true);				player.setPvpFlag(1);				player.sendMessage("Teleporting, event will start in 10 seconds");			}		} 		try{			Thread.sleep(5*1000);		}		catch (Exception e){			e.printStackTrace();		}   		CreatureSay cs8 = new CreatureSay(0, 18, "", "DM: 5 seconds!"); 		for (L2PcInstance onlinePlayer : L2World.getInstance().getAllPlayers().values()) 		    if (onlinePlayer.isOnline() == 1) 		        onlinePlayer.sendPacket(cs8);  		for (int i = 5; i > 0; i--)		{   			CreatureSay cs9 = new CreatureSay(0, 18, "", "DM: "+i+" seconds"); 			for (L2PcInstance onlinePlayer : L2World.getInstance().getAllPlayers().values()) 			    if (onlinePlayer.isOnline() == 1) 			        onlinePlayer.sendPacket(cs9);  			try{				Thread.sleep(1*1000);			}			catch (Exception e){				e.printStackTrace();			}		}   		CreatureSay cs10 = new CreatureSay(0, 18, "", "DM: GOOOOO!"); 		for (L2PcInstance onlinePlayer : L2World.getInstance().getAllPlayers().values()) 		    if (onlinePlayer.isOnline() == 1) 		        onlinePlayer.sendPacket(cs10); 		_status = Status.RUNNING; 		try{			Thread.sleep(EVENT_DURATION*60*950);		}		catch (Exception e){			e.printStackTrace();		}    		CreatureSay cs11 = new CreatureSay(0, 18, "", "DM Event: Event is about to finalize"); 		for (L2PcInstance onlinePlayer : L2World.getInstance().getAllPlayers().values()) 		    if (onlinePlayer.isOnline() == 1) 		        onlinePlayer.sendPacket(cs11); 		try{			Thread.sleep(EVENT_DURATION*60*50);		}		catch (Exception e){			e.printStackTrace();		} 		_status = Status.REWARDING;  		CreatureSay cs12 = new CreatureSay(0, 18, "", "DM Event: Event Finalized"); 		for (L2PcInstance onlinePlayer : L2World.getInstance().getAllPlayers().values()) 		    if (onlinePlayer.isOnline() == 1) 		        onlinePlayer.sendPacket(cs12); 		L2PcInstance winner = null; 		synchronized (_players) // against removing onlogout players etc		{			for (L2PcInstance player : _players)			{				player.teleToLocation(TeleportWhereType.Town);				player.OnDeathMatch = false;				player.sendMessage("Event is done"); 				//calculate winner				if (winner == null)					winner = player;				else if (winner.DeathMatchCount < player.DeathMatchCount)					winner = player;			}		} 		if (winner != null && winner.isOnline() == 1)		{  			CreatureSay cs13 = new CreatureSay(0, 18, "", winner.getName()+" won event killing you "+winner.DeathMatchCount+" times;"); 			for (L2PcInstance onlinePlayer : L2World.getInstance().getAllPlayers().values()) 			    if (onlinePlayer.isOnline() == 1) 			        onlinePlayer.sendPacket(cs13);  			winner.addItem("DEATHMATCHWINNER", WINNER_REWARD[0], WINNER_REWARD[1], null, true);		}		else			Announcements.getInstance().announceToAll("Event ended with no winner :(");   		_status = Status.SLEEPING;	} 	public static boolean registerPlayer(L2PcInstance player)	{		if (player == null)			return false; 		if (_status != Status.REGISTERING)			return false; 		synchronized (_players)		{			if (_players.size() >= DeathMatch.MAX_PLAYERS)				return false; 			return _players.add(player);		}	} 	public static boolean onLogout(L2PcInstance player)	{		if (player == null)			return false; 		player.DeathMatchCount = 0;		player.OnDeathMatch = false; 		synchronized (_players)		{			return _players.remove(player);		}	} 	public static void onKill(L2PcInstance player)	{		if (isRunning())			player.addItem("DEATH MATCH", ON_KILL_REWARD[0], ON_KILL_REWARD[1], null, true);	} 	public static boolean isRunning()	{		return (_status == Status.RUNNING);	} 	public static void startEvent()	{		new Thread(_instance).start();	} 	public static boolean stopEvent()	{		if (_status == Status.SLEEPING)			return false; 		try		{			_instance.interrupt();			return true;		}		catch(Exception e)		{			return true;		}		finally		{ 			synchronized(_players){ 				for (L2PcInstance player : _players)				{					player.DeathMatchCount = 0;					player.OnDeathMatch = false; 					player.teleToLocation(TeleportWhereType.Town);					player.sendMessage("Event ended abnormally");				}				_players.clear();				_status = Status.SLEEPING;			}		}	} 	public synchronized static void scheduleEventAtFixedRate()	{		if (_scheduled)			return; 		ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Runnable()		{			public void run()			{				startEvent();		}		}, INITIAL_DELAY*60*1000, PERIOD_BETWEEN_EVENTS*60*1000);	}  	public static boolean onPotionUse(int playerObjectId, final L2PcInstance player)	{		if (_status != Status.RUNNING)			return true; 		if (!player.OnDeathMatch)			return true; 		return false;	}  	public static boolean onEscapeUse(int id)	{		if (_status != Status.RUNNING)			return true;   		synchronized(_players)		{			if (_players.contains(L2World.getInstance().findObject(id)))				return false;		} 		return true;	}  	public static boolean doRevive(final L2PcInstance player)	{		if (_status != Status.RUNNING)			return false; 		if (!player.OnDeathMatch)			return false; 		player.sendMessage("You will be revived within next 5 seconds"); 		ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()		{			public void run()			{				player.doRevive();				player.setCurrentCp(player.getMaxCp());				player.setCurrentHpMp(player.getMaxHp(),player.getMaxMp());				player.teleToLocation(153568, 142077, -12738, true);				player.setPvpFlag(1);			}		}, 3000); 		return true;	} 	public void run(final L2PcInstance player) 	{		if (_status != Status.RUNNING)			return; 		if (!player.OnDeathMatch)			return; 		player.doRevive();		player.setCurrentCp(player.getMaxCp());		player.setCurrentHpMp(player.getMaxHp(),player.getMaxMp());		player.teleToLocation(153568, 142077, -12738, true);		player.setPvpFlag(1);	}    }
This is the part that i think not works correctly (ps: the message"You will be revived within next 5 seconds" not appear, maybe the error is in "doRevive")

Code: Select all

public static boolean doRevive(final L2PcInstance player)	{		if (_status != Status.RUNNING)			return false; 		if (!player.OnDeathMatch)			return false; 		player.sendMessage("You will be revived within next 5 seconds"); 		ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()		{			public void run()			{				player.doRevive();				player.setCurrentCp(player.getMaxCp());				player.setCurrentHpMp(player.getMaxHp(),player.getMaxMp());				player.teleToLocation(153568, 142077, -12738, true);				player.setPvpFlag(1);			}		}, 3000); 		return true;	}
Thx for the answers :)

ps: Sry if i must post in section "Custom", but in this section there are the problem of install, upgrade ecc ecc
Forum rules: Please do not use or alter the official L2J Avatars/Signatures/Names for your personal use.
User avatar
janiii
L2j Veteran
L2j Veteran
Posts: 4269
Joined: Wed May 28, 2008 3:15 pm
Location: Slovakia

Re: [Help] doRevive

Post by janiii »

best to post in the thread of the custom mod.
DO NOT EVEN TRY TO MESS WITH ME!
forum flOOder dancing dEVILoper
I don't give private support - PM will be ignored!
Mage
Posts: 277
Joined: Fri Apr 17, 2009 2:29 pm

Re: [Help] doRevive

Post by Mage »

Yes, sry if a moderator can move the topic...

How ever I tried to Fix, Can this work?

In MapRegionTable.java

Code: Select all

        private final int[][] _pointsWithKarmas; +	private static volatile Status _status = Status.SLEEPING; 	public static enum TeleportWhereType

Code: Select all

public Location getTeleToLocation(L2Character activeChar, TeleportWhereType teleportWhere)	{		int[] coord; 		if (activeChar instanceof L2PcInstance)		{			L2PcInstance player = ((L2PcInstance) activeChar);  +			if (player.OnDeathMatch && _status == Status.RUNNING)+			{+			player.sendMessage("You will be revived in the DM Zone");+			player.doRevive();+			player.setCurrentCp(player.getMaxCp());+			player.setCurrentHpMp(player.getMaxHp(),player.getMaxMp());+			player.setPvpFlag(1);+			return new Location(153568, 142077, -12738);+			} 			// If in Monster Derby Track			if (player.isInsideZone(L2Character.ZONE_MONSTERTRACK))				return new Location(12661, 181687, -3560); 			Castle castle = null;			Fort fort = null;			ClanHall clanhall = null;

Code: Select all

// If teleport to clan hall				if (teleportWhere == TeleportWhereType.ClanHall)				{+					if (player.OnDeathMatch && _status == Status.RUNNING)+					{+					player.sendMessage("You will be revived within next 5 seconds");+					player.doRevive();+					player.setCurrentCp(player.getMaxCp());+					player.setCurrentHpMp(player.getMaxHp(),player.getMaxMp());+					player.setPvpFlag(1);+					return new Location(153568, 142077, -12738);+					}

Code: Select all

// If teleport to castle				if (teleportWhere == TeleportWhereType.Castle)				{ +					if (player.OnDeathMatch && _status == Status.RUNNING)+					{+					player.sendMessage("You will be revived within next 5 seconds");+					player.doRevive();+					player.setCurrentCp(player.getMaxCp());+					player.setCurrentHpMp(player.getMaxHp(),player.getMaxMp());+					player.setPvpFlag(1);+					return new Location(153568, 142077, -12738);+					}


Thank for Answers :)
Forum rules: Please do not use or alter the official L2J Avatars/Signatures/Names for your personal use.
Mage
Posts: 277
Joined: Fri Apr 17, 2009 2:29 pm

Re: [Help] doRevive

Post by Mage »

Tested on Live and didn't work. :?

Any Ideas?
Forum rules: Please do not use or alter the official L2J Avatars/Signatures/Names for your personal use.
Mage
Posts: 277
Joined: Fri Apr 17, 2009 2:29 pm

Re: [Help] doRevive

Post by Mage »

I tried also to change the Zone but nothing.

The problem persist.
Forum rules: Please do not use or alter the official L2J Avatars/Signatures/Names for your personal use.
Post Reply