Jump to content

Recommended Posts

Posted

That one.

 

I created this for my server, but i guess it won't be opened(no money).

 

Here:

 

/*
* 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 net.sf.l2j.gameserver.model.entity.events;

import java.util.Vector;

import net.sf.l2j.gameserver.ThreadPoolManager;
import net.sf.l2j.gameserver.datatables.NpcTable;
import net.sf.l2j.gameserver.datatables.SpawnTable;
import net.sf.l2j.gameserver.datatables.MapRegionTable.TeleportWhereType;
import net.sf.l2j.gameserver.model.L2Spawn;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.skills.AbnormalEffect;
import net.sf.l2j.gameserver.templates.chars.L2NpcTemplate;
/**
* @author Anarchy
*
*/
public class SoloEvent
{
public static boolean full = false,
start = false;
public static int highLs = 0,
topLs = 0;
private static String playerName = null;
public static L2PcInstance player = null;
public static long enterTime = 0;
private static Vector<L2Spawn> _monsters = new Vector<L2Spawn>();
public static Vector<String> _savedPlayers = new Vector<String>();

public static void getInstance()
{
	ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Runnable()
	{
		@Override
		public void run()
		{
			if (start)
			{
				start = false;
				startEvent();
				return;
			}
		}
	}, 5000, 5000);
}

private static void startEvent()
{
	enterTime = System.currentTimeMillis();
	playerName = player.getName();
	player.teleToLocation(184133, 114298, -8221);
	player.startAbnormalEffect(AbnormalEffect.ROOT);
	player.setIsParalyzed(true);
	player.sendMessage("10 seconds till the monsters get spawned.");
	wait(10);
	player.stopAbnormalEffect(AbnormalEffect.ROOT);
	player.setIsParalyzed(false);
	spawnMonsters();
	player.sendMessage("The monsters were spawned. You have 2 minutes and 50 seconds to kill as many as possible.");
	wait(50);
	if (!checkPlayer())
	{
		return;
	}
	wait(30);
	if (!checkPlayer())
	{
		return;
	}
	wait(30);
	if (!checkPlayer())
	{
		return;
	}
	wait(30);
	if (!checkPlayer())
	{
		return;
	}
	wait(30);
	if (!checkPlayer())
	{
		return;
	}
	player.sendMessage("The event is over. You were rewarded and teleported back to Giran.");
	reward();
}

private static boolean checkPlayer()
{
	if (player == null || !player.isOnline())
	{
		_savedPlayers.add(playerName);
		playerName = null;
		highLs = 0;
		topLs = 0;
		full = false;
		enterTime = 0;
		for (L2Spawn s : _monsters)
		{
			s.getLastSpawn().deleteMe();
			s.stopRespawn();
			SpawnTable.getInstance().deleteSpawn(s, false);
		}
		_monsters.clear();
		return false;
	}

	return true;
}

private static void reward()
{
	player.addItem("Solo Event.", 8762, topLs, player, true);
	player.addItem("Solo Event.", 8752, highLs, player, true);
	player.teleToLocation(TeleportWhereType.Town);
	player = null;
	playerName = null;
	highLs = 0;
	topLs = 0;
	full = false;
	enterTime = 0;
	for (L2Spawn s : _monsters)
	{
		s.getLastSpawn().deleteMe();
		s.stopRespawn();
		SpawnTable.getInstance().deleteSpawn(s, false);
	}
	_monsters.clear();
}

private static void spawnMonsters()
{
	spawnAMonster(184868, 114281, -8219);
	spawnAMonster(185044, 114442, -8219);
	spawnAMonster(184880, 114720, -8219);
	spawnAMonster(185206, 115010, -8219);
	spawnAMonster(185474, 114886, -8219);
	spawnAMonster(185789, 115153, -8219);
	spawnAMonster(186002, 115058, -8219);
	spawnAMonster(186077, 114780, -8219);
	spawnAMonster(186018, 114594, -8219);
	spawnAMonster(186503, 114608, -8219);
	spawnAMonster(186717, 115616, -8219);
	spawnAMonster(186285, 115503, -8219);
	spawnAMonster(185990, 115797, -8219);
	spawnAMonster(185698, 115763, -8219);
	spawnAMonster(185571, 115514, -8219);
	spawnAMonster(185269, 115602, -8219);
	spawnAMonster(184880, 115599, -8219);
	spawnAMonster(185027, 115063, -8219);
	spawnAMonster(185220, 114434, -8219);
	spawnAMonster(185616, 113609, -8219);
}

private static void spawnAMonster(int x, int y, int z)
{
	L2Spawn _monster = null;
	L2NpcTemplate monster = NpcTable.getInstance().getTemplate(65527);

	try
	{
		_monster = new L2Spawn(monster);
		_monster.setLocx(x);
		_monster.setLocy(y);
		_monster.setLocz(z);
		_monster.setHeading(1);
		_monster.setRespawnDelay(15);
		_monster.init();
		_monster.getLastSpawn().decayMe();
		_monster.getLastSpawn().spawnMe(_monster.getLastSpawn().getX(), _monster.getLastSpawn().getY(), _monster.getLastSpawn().getZ());
		SpawnTable.getInstance().addNewSpawn(_monster, false);
		_monsters.add(_monster);
	}
	catch (Exception e)
	{ }
}

private static void wait(int seconds)
{
	try
	{
		Thread.sleep(seconds*1000);
	}
	catch (Exception e)
	{ }
}
}

 

/*
* 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 net.sf.l2j.gameserver.handler.itemhandlers;

import javolution.text.TextBuilder;

import net.sf.l2j.gameserver.handler.IItemHandler;
import net.sf.l2j.gameserver.model.L2ItemInstance;
import net.sf.l2j.gameserver.model.actor.L2Playable;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.entity.events.SoloEvent;
import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
/**
* @author Anarchy
*
*/
public class SoloEventTeleportationCube implements IItemHandler
{
public void useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
{
	if (!(playable instanceof L2PcInstance))
	{
		return;
	}

	L2PcInstance player = (L2PcInstance)playable;

	if (player.isInOlympiadMode())
	{
		player.sendMessage("You may not enter Solo Event while being in olympiad mode.");
		return;
	}
	if (player.getPvpFlag() > 0 || player.getKarma() > 0)
	{
		player.sendMessage("You may not enter Solo Event while fighting.");
		return;
	}
	if (player.getActiveTradeList() != null)
	{
		player.sendMessage("You may not enter Solo Event while trading.");
		return;
	}
	if (player.getActiveWarehouse() != null)
	{
		player.sendMessage("You may not enter Solo Event while using the warehouse.");
		return;
	}
	if (SoloEvent.player == player)
	{
		player.sendMessage("You can't use this while being in a Solo Event.");
		return;
	}

	NpcHtmlMessage htm = new NpcHtmlMessage(0);
	TextBuilder tb = new TextBuilder("<html><body>");
	tb.append("<center>Solo Event room is "+(SoloEvent.full ? "full." : "empty."));
	if (SoloEvent.full)
	{
		tb.append("<br1>Player inside: "+SoloEvent.player.getName());
		tb.append("<br1>Time left: "+(180-((System.currentTimeMillis()-SoloEvent.enterTime)/1000) < 60 ? 180-((System.currentTimeMillis()-SoloEvent.enterTime)/1000)+" seconds." : 3-((System.currentTimeMillis()-SoloEvent.enterTime)/1000/60)+" minutes."));
	}
	else
	{
		tb.append("<br><a action=\"bypass -h bp_enterSoloEvent\">Enter Solo Event.</a>");
	}
	tb.append("</center></body></html>");
	htm.setHtml(tb.toString());

	player.sendPacket(htm);
}
}

 

 

You should make a bypass bp_enterSoloEvent, with these:

		if (_activeChar.getInventory().getItemByItemId(3481) == null)
		{
			_activeChar.sendMessage("You don't have a Solo-Event Teleportation Cube in your inventory.");
			return false;
		}
		if (SoloEvent.full)
		{
			_activeChar.sendMessage("Solo Event room is full.");
			return false;
		}

		SoloEvent.full = true;
		SoloEvent.player = _activeChar;
		SoloEvent.start = true;
		_activeChar.sendMessage("You will be teleported to Solo Event room in some seconds.");
		_activeChar.destroyItemByItemId("Solo Event teleportation cube.", 3481, 1, _activeChar, true); 

 

I used BypassHandlers for this(sth i had created), but you can just put it in RequestBypassToServer clientpacket.

 

I don't remember if there's something else(created before 6 months), if anything is missing tell me.

 

HF.

 

P.S. If someone could lock the topic i sell it i would be greatfull.

Guest Elfocrash
Posted

we register the item id here?

 

public class SoloEventTeleportationCube implements IItemHandler

{
private static final int[] ITEM_IDS =
{
id here
};

It is acis. You don't register item id. You register handler on xml of the item you wanna turn into this.

Posted

It is acis. You don't register item id. You register handler on xml of the item you wanna turn into this.

Yes, forgot to say it was coded on aCis.

 

Configuration is easy.

 

Thanks guys.

Posted

Thanks Romeo.

 

 

Sorry, i forgot the bypass of the teleportation cube. You should make a bypass bp_enterSoloEvent, with these:

		if (_activeChar.getInventory().getItemByItemId(3481) == null)
		{
			_activeChar.sendMessage("You don't have a Solo-Event Teleportation Cube in your inventory.");
			return false;
		}
		if (SoloEvent.full)
		{
			_activeChar.sendMessage("Solo Event room is full.");
			return false;
		}

		SoloEvent.full = true;
		SoloEvent.player = _activeChar;
		SoloEvent.start = true;
		_activeChar.sendMessage("You will be teleported to Solo Event room in some seconds.");
		_activeChar.destroyItemByItemId("Solo Event teleportation cube.", 3481, 1, _activeChar, true);

 

I used BypassHandlers for this(sth i had created), but you can just put it in RequestBypassToServer clientpacket.

  • 4 weeks later...
Posted

Im going to add it right away... if i meet some problems i will come back for feedback  :dat:

Ok :)

 

Good job.

Thanks.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Posts

    • Tell a Škoda 1.4 driver that a Škoda 1.8 is faster — and suddenly, you’re riding a mini race car. On the way, they might share random stories — gas prices, the perfect BBQ recipe, or how passengers once called them “just for a minute.” Maybe even how someone left a suitcase full of money in their car once.     The important part? You’ll get there on time, no delays.     Vibe SMS works just as fast — messages fly like that driver who just heard their 1.8 isn’t the fastest.     🌐 https://vibe-sms.net/ 📲 https://t.me/vibe_sms  
    • ⚔️ The Grand Opening Has Arrived! ⚔️ In just a few hours the gate to the eternal battlefield will be open and the war between Order and Chaos will be set once again ! Its time to claim your destiny 🔥 👉 Register now and join the fight today! 🌐 https://l2ovc.com register now : https://l2ovc.com The gates are open the war between Order and Chaos has officially started! 🔥 Join the battlefield NOW and claim your destiny in Order vs Chaos! 💥 Don’t fall behind your faction needs you. ➡️ https://l2ovc.com  
    • Don’t miss the new Telegram gifts with our Telegram Stars purchasing bot! A great opportunity to invest in a stable digital asset at an early stage while the market is still forming. Buy other existing gifts in the official store using Telegram Stars, pay for subscriptions, donate to games and projects, pay for Premium subscriptions, and react to messages in channels! Low prices, multiple payment options, and other cool unique features! ⚡ Try it today — SOCNET STARS BOT ⚡ Active links to SOCNET stores: Digital Goods Store (Website): Go Store Telegram Bot: Go – convenient access to the store via Telegram messenger. ⭐ Telegram Stars Purchase Bot: Go – fast and profitable way to buy stars in Telegram. SMM Panel: Go – promote your social media accounts. We present to you the current list of promotions and special offers for purchasing our products and services: 1️⃣ Promo code OCTOBER2025 (8% discount) for purchases in our store (Website, bot) in October! You can also use the promo code SOCNET (15% discount) for your first purchase. 2️⃣ Get $1 on your store balance or a 10–20% discount — just write your username after registration on our website using the template: "SEND ME BONUS, MY USERNAME IS..." — post it in our forum thread! 3️⃣ Get $1 for your first SMM Panel trial — simply open a ticket titled “Get Trial Bonus” on our website (Support). 4️⃣ Weekly ⭐ Telegram Stars giveaways in our Telegram channel and in our Telegram Stars bot! News: ➡ Telegram Channel: https://t.me/accsforyou_shop ➡ WhatsApp Channel: https://chat.whatsapp.com/K8rBy500nA73z27PxgaJUw?mode=ems_copy_t ➡ Discord Server: https://discord.gg/y9AStFFsrh Contacts and Support: ➡ Telegram: https://t.me/socnet_support ➡ WhatsApp: https://wa.me/79051904467 ➡ Discord: socnet_support ➡ ✉ Email: solomonbog@socnet.store
    • Don’t miss the new Telegram gifts with our Telegram Stars purchasing bot! A great opportunity to invest in a stable digital asset at an early stage while the market is still forming. Buy other existing gifts in the official store using Telegram Stars, pay for subscriptions, donate to games and projects, pay for Premium subscriptions, and react to messages in channels! Low prices, multiple payment options, and other cool unique features! ⚡ Try it today — SOCNET STARS BOT ⚡ Active links to SOCNET stores: Digital Goods Store (Website): Go Store Telegram Bot: Go – convenient access to the store via Telegram messenger. ⭐ Telegram Stars Purchase Bot: Go – fast and profitable way to buy stars in Telegram. SMM Panel: Go – promote your social media accounts. We present to you the current list of promotions and special offers for purchasing our products and services: 1️⃣ Promo code OCTOBER2025 (8% discount) for purchases in our store (Website, bot) in October! You can also use the promo code SOCNET (15% discount) for your first purchase. 2️⃣ Get $1 on your store balance or a 10–20% discount — just write your username after registration on our website using the template: "SEND ME BONUS, MY USERNAME IS..." — post it in our forum thread! 3️⃣ Get $1 for your first SMM Panel trial — simply open a ticket titled “Get Trial Bonus” on our website (Support). 4️⃣ Weekly ⭐ Telegram Stars giveaways in our Telegram channel and in our Telegram Stars bot! News: ➡ Telegram Channel: https://t.me/accsforyou_shop ➡ WhatsApp Channel: https://chat.whatsapp.com/K8rBy500nA73z27PxgaJUw?mode=ems_copy_t ➡ Discord Server: https://discord.gg/y9AStFFsrh Contacts and Support: ➡ Telegram: https://t.me/socnet_support ➡ WhatsApp: https://wa.me/79051904467 ➡ Discord: socnet_support ➡ ✉ Email: solomonbog@socnet.store
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock