Jump to content
  • 0

random spawn


erodz

Question

hey, i'm looking for a code with makes randon respawn on die, i mean when you die in farm zone or pvp zone usually small windows come out with button "to village" so i want to get code which makes new button with "random respawn" . so players can choose go to village or random respawn in the zone:) anyone have that code? thanks

Link to comment
Share on other sites

Recommended Posts

  • 0

He needs help about creating a button, client side.

But he changes the conversation who knows why, kinda boring.

 

nothing is client side, the only ONLY way to do it, is by moding Systring and changing Fixed to Random, and enable the Random writeD(0x01) from Die.java packet

Link to comment
Share on other sites

  • 0

moding Systring

Client sided, enough said :P. Server side only cares how/which sysmessage is / to use/d, and the behavior of the button. There isn't such sysmessageid anyway.

 

But as xdem said, you can simply use "Fixed" button. Even the term "Fixed" is "ok" to understand.

Link to comment
Share on other sites

  • 0

nothing is client side, the only ONLY way to do it, is by moding Systring and changing Fixed to Random, and enable the Random writeD(0x04) from Die.java packet

so i have to edit theses 2 lines ? writeD(_sweepable ? 0x01 : 0x00); // sweepable  (blue glow)

writeD(_access.allowFixedRes() ? 0x01 : 0x00); // 6d 04 00 00 00 - to FIXED

}

Link to comment
Share on other sites

  • 0

I would suggest you to use ConfirmDlg and DlgAnswer. But since you want the Die packet just:

 

writeD(_access.allowFixedRes() || isInsideZone(...)? 0x01 : 0x00)

 

and then at requestRestartPoint if the player uses the "fixed" if gm fixed res else random spawn

 

 

 

 

Link to comment
Share on other sites

  • 0

so where is my die.java could u tell me what needs to change?

 

/*
* 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 2, 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* http://www.gnu.org/copyleft/gpl.html
*/
package com.l2jfrozen.gameserver.network.serverpackets;

import com.l2jfrozen.gameserver.datatables.AccessLevel;
import com.l2jfrozen.gameserver.datatables.sql.AccessLevels;
import com.l2jfrozen.gameserver.managers.CastleManager;
import com.l2jfrozen.gameserver.managers.FortManager;
import com.l2jfrozen.gameserver.model.L2Attackable;
import com.l2jfrozen.gameserver.model.L2Character;
import com.l2jfrozen.gameserver.model.L2SiegeClan;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.model.entity.event.CTF;
import com.l2jfrozen.gameserver.model.entity.event.DM;
import com.l2jfrozen.gameserver.model.entity.event.TvT;
import com.l2jfrozen.gameserver.model.entity.siege.Castle;
import com.l2jfrozen.gameserver.model.entity.siege.Fort;

/**
* sample 0b 952a1048 objectId 00000000 00000000 00000000 00000000 00000000 00000000 format dddddd rev 377 format
* ddddddd rev 417
* 
* @version $Revision: 1.3.3 $ $Date: 2009/04/29 00:46:18 $
*/
public class Die extends L2GameServerPacket
{
private static final String _S__0B_DIE = "[s] 06 Die";
private int _charObjId;
private boolean _fake;
private boolean _sweepable;
private boolean _canTeleport;
private AccessLevel _access = AccessLevels.getInstance()._userAccessLevel;
private com.l2jfrozen.gameserver.model.L2Clan _clan;
L2Character _activeChar;

/**
 * @param cha 
 */
public Die(L2Character cha)
{
	_activeChar = cha;
	if(cha instanceof L2PcInstance)
	{
		L2PcInstance player = (L2PcInstance) cha;
		_access = player.getAccessLevel();
		_clan = player.getClan();
		_canTeleport = !((TvT.is_started() && player._inEventTvT)
						|| (DM.is_started() && player._inEventDM)
						|| (CTF.is_started() && player._inEventCTF)
						|| player.isInFunEvent()
						|| player.isPendingRevive());
	}
	_charObjId = cha.getObjectId();
	_fake = !cha.isDead();
	if(cha instanceof L2Attackable)
	{
		_sweepable = ((L2Attackable) cha).isSweepActive();
	}

}

@Override
protected final void writeImpl()
{
	if(_fake)
		return;

	writeC(0x06);

	writeD(_charObjId);
	// NOTE:
	// 6d 00 00 00 00 - to nearest village	
	// 6d 01 00 00 00 - to hide away
	// 6d 02 00 00 00 - to castle
	// 6d 03 00 00 00 - to siege HQ
	// sweepable
	// 6d 04 00 00 00 - FIXED

	writeD(_canTeleport ? 0x01 : 0);   // 6d 00 00 00 00 - to nearest village

	if(_canTeleport && _clan != null)
	{
		L2SiegeClan siegeClan = null;
		Boolean isInDefense = false;
		Castle castle = CastleManager.getInstance().getCastle(_activeChar);
		Fort fort = FortManager.getInstance().getFort(_activeChar);

		if(castle != null && castle.getSiege().getIsInProgress())
		{
			//siege in progress
			siegeClan = castle.getSiege().getAttackerClan(_clan);
			if(siegeClan == null && castle.getSiege().checkIsDefender(_clan))
			{
				isInDefense = true;
			}
		}
		else if(fort != null && fort.getSiege().getIsInProgress())
		{
			//siege in progress
			siegeClan = fort.getSiege().getAttackerClan(_clan);
			if(siegeClan == null && fort.getSiege().checkIsDefender(_clan))
			{
				isInDefense = true;
			}
		}

		writeD(_clan.getHasHideout() > 0 ? 0x01 : 0x00); // 6d 01 00 00 00 - to hide away
		writeD(_clan.getHasCastle() > 0 || _clan.getHasFort() > 0 || isInDefense ? 0x01 : 0x00); // 6d 02 00 00 00 - to castle
		writeD(siegeClan != null && !isInDefense && siegeClan.getFlag().size() > 0 ? 0x01 : 0x00); // 6d 03 00 00 00 - to siege HQ
	}
	else
	{
		writeD(0x00); // 6d 01 00 00 00 - to hide away
		writeD(0x00); // 6d 02 00 00 00 - to castle
		writeD(0x00); // 6d 03 00 00 00 - to siege HQ
	}

	writeD(_sweepable ? 0x01 : 0x00); // sweepable  (blue glow)
	writeD(_access.allowFixedRes() ? 0x01 : 0x00); // 6d 04 00 00 00 - to FIXED
}

/* (non-Javadoc)
 * @see com.l2jfrozen.gameserver.serverpackets.ServerBasePacket#getType()
 */
@Override
public String getType()
{
	return _S__0B_DIE;
}
}

and requestrestartpoint.java

 

//*
* 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 2, 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* http://www.gnu.org/copyleft/gpl.html
*/
package com.l2jfrozen.gameserver.network.clientpackets;

import java.util.logging.Logger;

import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.datatables.csv.MapRegionTable;
import com.l2jfrozen.gameserver.managers.CastleManager;
import com.l2jfrozen.gameserver.managers.ClanHallManager;
import com.l2jfrozen.gameserver.managers.FortManager;
import com.l2jfrozen.gameserver.model.L2SiegeClan;
import com.l2jfrozen.gameserver.model.Location;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.model.entity.ClanHall;
import com.l2jfrozen.gameserver.model.entity.event.CTF;
import com.l2jfrozen.gameserver.model.entity.event.DM;
import com.l2jfrozen.gameserver.model.entity.event.TvT;
import com.l2jfrozen.gameserver.model.entity.siege.Castle;
import com.l2jfrozen.gameserver.model.entity.siege.Fort;
import com.l2jfrozen.gameserver.network.serverpackets.Revive;
import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
import com.l2jfrozen.gameserver.util.IllegalPlayerAction;
import com.l2jfrozen.gameserver.util.Util;

/**
* @author programmos
*/
public final class RequestRestartPoint extends L2GameClientPacket
{
private static Logger _log = Logger.getLogger(RequestRestartPoint.class.getName());

protected int _requestedPointType;
protected boolean _continuation;

@Override
protected void readImpl()
{
	_requestedPointType = readD();
}

class DeathTask implements Runnable
{
	L2PcInstance activeChar;

	DeathTask(L2PcInstance _activeChar)
	{
		activeChar = _activeChar;
	}

	@Override
	public void run()
	{
		if ((activeChar._inEventTvT && TvT.is_started()) || (activeChar._inEventDM && DM.is_started()) || (activeChar._inEventCTF && CTF.is_started()))
		{
			activeChar.sendMessage("You can't restart in Event!");
			return;
		}
		try
		{
			Location loc = null;
			Castle castle = null;
			Fort fort = null;

			if (activeChar.isInJail())
			{
				_requestedPointType = 27;
			}
			else if (activeChar.isFestivalParticipant())
			{
				_requestedPointType = 4;
			}

			if (activeChar.isPhoenixBlessed())
				activeChar.stopPhoenixBlessing(null);

			switch (_requestedPointType)
			{
				case 1: // to clanhall

					if (activeChar.getClan() != null)
					{

						if (activeChar.getClan().getHasHideout() == 0)
						{
							// cheater
							activeChar.sendMessage("You may not use this respawn point!");
							Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " used respawn cheat.", IllegalPlayerAction.PUNISH_KICK);
							return;
						}
						loc = MapRegionTable.getInstance().getTeleToLocation(activeChar, MapRegionTable.TeleportWhereType.ClanHall);

						if (ClanHallManager.getInstance().getClanHallByOwner(activeChar.getClan()) != null && ClanHallManager.getInstance().getClanHallByOwner(activeChar.getClan()).getFunction(ClanHall.FUNC_RESTORE_EXP) != null)
						{
							activeChar.restoreExp(ClanHallManager.getInstance().getClanHallByOwner(activeChar.getClan()).getFunction(ClanHall.FUNC_RESTORE_EXP).getLvl());
						}

						break;				
					}

					loc = MapRegionTable.getInstance().getTeleToLocation(activeChar, MapRegionTable.TeleportWhereType.Town);
					break;
				case 2: // to castle
					Boolean isInDefense = false;
					castle = CastleManager.getInstance().getCastle(activeChar);
					fort = FortManager.getInstance().getFort(activeChar);
					MapRegionTable.TeleportWhereType teleportWhere = MapRegionTable.TeleportWhereType.Town;

					if (castle != null && castle.getSiege().getIsInProgress())
					{
						// siege in progress
						if (castle.getSiege().checkIsDefender(activeChar.getClan()))
						{
							isInDefense = true;
						}
					}

					if (fort != null && fort.getSiege().getIsInProgress())
					{
						// siege in progress
						if (fort.getSiege().checkIsDefender(activeChar.getClan()))
						{
							isInDefense = true;
						}
					}

					if (activeChar.getClan().getHasCastle() == 0 && activeChar.getClan().getHasFort() == 0 && !isInDefense)
					{
						// cheater
						activeChar.sendMessage("You may not use this respawn point!");
						Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " used respawn cheat.", IllegalPlayerAction.PUNISH_KICK);
						return;
					}

					if (CastleManager.getInstance().getCastleByOwner(activeChar.getClan()) != null)
						teleportWhere = MapRegionTable.TeleportWhereType.Castle;
					else if (FortManager.getInstance().getFortByOwner(activeChar.getClan()) != null)
						teleportWhere = MapRegionTable.TeleportWhereType.Fortress;

					loc = MapRegionTable.getInstance().getTeleToLocation(activeChar, teleportWhere);
					break;

				case 3: // to siege HQ
					L2SiegeClan siegeClan = null;
					castle = CastleManager.getInstance().getCastle(activeChar);
					fort = FortManager.getInstance().getFort(activeChar);

					if (castle != null && castle.getSiege().getIsInProgress())
					{
						siegeClan = castle.getSiege().getAttackerClan(activeChar.getClan());
					}
					else if (fort != null && fort.getSiege().getIsInProgress())
					{
						siegeClan = fort.getSiege().getAttackerClan(activeChar.getClan());
					}

					if (siegeClan == null || siegeClan.getFlag().size() == 0)
					{
						// cheater
						activeChar.sendMessage("You may not use this respawn point!");
						Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " used respawn cheat.", IllegalPlayerAction.PUNISH_KICK);
						return;
					}

					loc = MapRegionTable.getInstance().getTeleToLocation(activeChar, MapRegionTable.TeleportWhereType.SiegeFlag);
					break;

				case 4: // Fixed or Player is a festival participant
					if (!activeChar.isGM() && !activeChar.isFestivalParticipant())
					{
						// cheater
						activeChar.sendMessage("You may not use this respawn point!");
						Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " used respawn cheat.", IllegalPlayerAction.PUNISH_KICK);
						return;
					}

					loc = new Location(activeChar.getX(), activeChar.getY(), activeChar.getZ()); // spawn them where they died
					break;

				case 27: // to jail
					if (!activeChar.isInJail())
						return;
					loc = new Location(-114356, -249645, -2984);
					break;

				default:
					if (activeChar.getKarma() > 0 && Config.ALT_KARMA_TELEPORT_TO_FLORAN)
					{
						loc = new Location(17836, 170178, -3507);// Floran Village
						break;
					}
					loc = MapRegionTable.getInstance().getTeleToLocation(activeChar, MapRegionTable.TeleportWhereType.Town);
					break;				
			}

			// Stand up and teleport, proof dvp video.
			activeChar.setIsIn7sDungeon(false);
			activeChar.setIsPendingRevive(true);
			activeChar.teleToLocation(loc, true);
		}
		catch (Throwable e)
		{
			e.printStackTrace();				
			// _log.log(Level.SEVERE, "", e);
		}
	}
}

@Override
protected void runImpl()
{
	L2PcInstance activeChar = getClient().getActiveChar();

	if (activeChar == null)
		return;

	if (activeChar.isFakeDeath())
	{
		activeChar.stopFakeDeath(null);
		activeChar.broadcastPacket(new Revive(activeChar));
		return;
	}
	else if (!activeChar.isAlikeDead())
	{
		_log.warning("Living player [" + activeChar.getName() + "] called RestartPointPacket! Ban this player!");
		return;
	}

	Castle castle = CastleManager.getInstance().getCastle(activeChar.getX(), activeChar.getY(), activeChar.getZ());
	if (castle != null && castle.getSiege().getIsInProgress())
	{
		if (activeChar.getClan() != null && castle.getSiege().checkIsAttacker(activeChar.getClan()))
		{
			// Schedule respawn delay for attacker
			ThreadPoolManager.getInstance().scheduleGeneral(new DeathTask(activeChar), castle.getSiege().getAttackerRespawnDelay());
			activeChar.sendMessage("You will be re-spawned in " + castle.getSiege().getAttackerRespawnDelay() / 1000 + " seconds");
			return;
		}
	}
	// run immediately (no need to schedule)
	new DeathTask(activeChar).run();
}

@Override
public String getType()
{
	return "[C] 6d RequestRestartPoint";
}
}

 

if u could help me with that, it will be my last stupid question...thanks

Link to comment
Share on other sites

  • 0

xdem's answer is enough to understand what you have to edit, and finally you c/ped the wrong packet. RequestRestart is for restart request (log off), not for teleport.

 

ctrl+F is your friend.

Link to comment
Share on other sites

  • 0

helppp mee ... thats all i need ...

 

Help you ? Thats what I already did, none will ever help you more than I did, trust me. However if you lack the java skills and you want the code ready, well thats a different story, gl finding a guy coding this for you

Link to comment
Share on other sites

  • 0

i get error on writeD(_access.allowFixedRes() || isInsideZone(...)? 0x01 : 0x00) ...

 

but whaterver... forrget it.... delete topic no help here

Locked then.

But keep in mind, this is a help section, not a section where u can have people coding for you by the face.

Tryskell and xdem gave u more than clues to do it.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.


×
×
  • Create New...