Jump to content

Recommended Posts

Posted

Alloha one more time there, like most times, i would like to share one of my NPC's which is being created today. It is not something special, but some months ago some people were saying that to observe raidbosses is kinda impossible. So, i prooved to all, that this is kinda easy with this topic. People loved it so, i decided to make a small upgrade to it. Upgrade will give more & better choices to players.

 

With this NPC players can do (configurable by the code easily) 5 things:

• Check if Grand Boss is online (exists) or offline.

• Check how many players are in Grand Boss Zone & trying to kill the Grand Boss.

• Check how many parties are in Grand Boss Zone & trying to kill the Grand Boss.

• Select To Teleport in the Grand Boss Zone.

• Observe The GrandBoss Zone.

 

Preview (HTM Dialog):

 

initialp.pngvalakasd.png

 

How to install:

 

1. Create a new java file on data/scripts/custom/RaidObserver/RaidObserver.java

 

Paste this code:

package custom.RaidObserver;
import javolution.text.TextBuilder;
import com.l2jserver.gameserver.cache.HtmCache;
import com.l2jserver.gameserver.instancemanager.GrandBossManager;
import com.l2jserver.gameserver.instancemanager.ZoneManager;
import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.zone.L2ZoneType;
import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;

/**
* @author `Heroin
* Made For Maxcheaters.com
*/
public class RaidObserver extends Quest
{
private static final int _Baium = 29020;
private static final int _Antharas = 29068;
private static final int _Valakas = 29028;
private static final int _AntQueen = 29001;
private static final int npcid = 36650; // npc id
private static final boolean EnableObservation = true; // Set it true to allow players to observe raidbosses
private static final boolean EnableTeleport = true; // Set it true to allow players to teleport to raidbosses
private static final int ObservationAdena = 5000;  
private static String htm = "data/scripts/custom/RaidObserver/1.htm"; //html location
private int x = 0; //Dont Change
private int y = 0;//Dont Change
private int z = 0;//Dont Change

public RaidObserver(int questId, String name, String descr)
{
	super(questId, name, descr);
	addFirstTalkId(npcid);
	addTalkId(npcid);
	addStartNpc(npcid);
}

@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
	if (event.startsWith("Valakas"))
	{
		RaidInfo(event, npc, player, event);
	}
	if (event.startsWith("tp_Valakas"))//location of the teleport
	{
		player.teleToLocation(213447, -115136, -1636);
	}
	if (event.startsWith("Baium"))
	{
		RaidInfo(event, npc, player, event);
	}
	if (event.startsWith("tp_Baium"))
	{
		player.teleToLocation(115213, 16623, 10085);//location of the teleport
	}
	if (event.startsWith("Antharas"))
	{
		RaidInfo(event, npc, player, event);
	}
	if (event.startsWith("tp_Antharas"))   
	{
		player.teleToLocation(179864, 114819, -7711);//location of the teleport
	}
	if (event.startsWith("AntQueen"))
	{
		RaidInfo(event, npc, player, event);
	}
	if (event.startsWith("tp_AntQueen"))
	{
		player.teleToLocation(-21514, 181871, -5722); //location of the teleport
	}
	if (event.startsWith("Back"))//Back Button Dont Chant
	{
		Back(event, npc, player, event);
	}
	  
	return "";
}


private void checkxyz(String command) // Selecting Location for Observing each raidboss
{
	if (command.equals("Baium"))
	{
		x=115213;
		y=16623;
		z = 10085;
	}
	if (command.equals("Valakas"))
	{
		x=213447;
		y=-115136;
		z = -1636;
	}
	if (command.equals("AntQueen")) // , 181871, -5722
	{
		x=-21514;
		y= 181871;
		z = -5722;
	}
	if (command.equals("Antharas"))
	{
		x=179864;
		y=114819;
		z = -7711;
	}	
}  


private int checkppl(String command, L2PcInstance player)//Calculating players inside boss area
{
	if (command.equals("Baium"))
	{
		int ppl = getPlayerInside(12002);
		return ppl;
	}
	if (command.equals("Valakas"))
	{
		int ppl = getPlayerInside(12010);
		return ppl;
	}
	if (command.equals("AntQueen"))
	{
		int ppl = getPlayerInside(12012);
		return ppl;
	}
	if (command.equals("Antharas"))
	{
		int ppl = getPlayerInside(12001);
		return ppl;
	}
	return 0;

}
private int checkpts(String command, L2PcInstance player)//Calculating parties inside boss area
{
	if (command.equals("Baium"))
	{
		int pts = getPartiesInside(12002);
		return pts;
	}
	if (command.equals("Valakas"))
	{
		int pts = getPartiesInside(12010);
		return pts;
	}
	if (command.equals("AntQueen"))
	{
		int pts = getPartiesInside(12012);
		return pts;
	}
	if (command.equals("Antharas"))
	{
		int pts = getPartiesInside(12001);
		return pts;
	}
	return 0;
}
private boolean israidon(String name)//Checks if raid is online/offline
{
	int id = 0;
	if (name.equals("Baium"))
		id = _Baium;
	if (name.equals("Valakas"))
		id = _Valakas;
	if (name.equals("AntQueen"))
		id = _AntQueen;
	if (name.equals("Antharas"))
		id = _Antharas;
	int status = GrandBossManager.getInstance().getBossStatus(id);
	if (status == 2)
		return false;
	else if (status == 1)
		return true;
	else
		return false;
}

@Override
public String onFirstTalk(L2Npc npc, L2PcInstance player)
{
	final int npcId = npc.getNpcId();
	if (player.getQuestState(getName()) == null)
	{
		newQuestState(player);
	}
	if (npcId == npcid)
	{
		String html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htm);
		html = html.replaceAll("%player%", player.getName());		
		html = html.replaceAll("%teleport%", EnableTeleport ? "<font color=\"00FF00\">Enabled</font>" : "<font color=\"FF0000\">Disabled</font>");
		html = html.replaceAll("%observation%", EnableObservation ? "Observation: <font color=\"00FF00\">Enabled</font><br>Observation Adena Price: <font color=\"LEVEL\">"+ObservationAdena+"</font>" 
				: "<font color=\"FF0000\">Observation: Disabled</font>");

		NpcHtmlMessage npcHtml = new NpcHtmlMessage(0);
		npcHtml.setHtml(html);
		player.sendPacket(npcHtml);
	}
	return "";
}

public static void main(final String[] args)
{
	new RaidObserver(-1, RaidObserver.class.getSimpleName(), "custom");
	System.out.println("De Level Manager by `Heroin has been loaded successfully!");
}
private void Back(String event, L2Npc npc, L2PcInstance player, String command)
{

	try
	{

			String html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htm);
			html = html.replaceAll("%player%", player.getName());		
			html = html.replaceAll("%teleport%", EnableTeleport ? "<font color=\"00FF00\">Enabled</font>" : "<font color=\"FF0000\">Disabled</font>");
			html = html.replaceAll("%observation%", EnableObservation ? "Observation: <font color=\"00FF00\">Enabled</font><br>Observation Adena Price: <font color=\"LEVEL\">"+ObservationAdena+"</font>" 
					: "<font color=\"FF0000\">Observation: Disabled</font>");

			NpcHtmlMessage npcHtml = new NpcHtmlMessage(0);
			npcHtml.setHtml(html);
			player.sendPacket(npcHtml);

	}
	catch (Exception e)
	{
		player.sendMessage("Something went wrong try again.");
	}
}
@SuppressWarnings("deprecation")
public int getPlayerInside(int zoneId)//Calculating players inside party area.
    {
        int i = 0;
        for (L2ZoneType zone : ZoneManager.getInstance().getAllZones())
            if (zone.getId() == zoneId)
            {
                for (L2Character character : zone.getCharactersInside().values())
                    if (character instanceof L2PcInstance && (!((L2PcInstance) character).getClient().isDetached()))
                        i++;
            }
return i;
} 
private void RaidInfo(String event, L2Npc npc, L2PcInstance player, String command)
{

	try
	{
		int playersin = checkppl(command, player); 
		int partiesin = checkpts(command, player); 
		boolean status = israidon(command);
		checkxyz(command);
		String color = status ? "<font color=\"00FF00\">Online</font>" : "<font color=\"FF0000\">Offline</font>";
		NpcHtmlMessage nhm = new NpcHtmlMessage(5);
		TextBuilder tb = new TextBuilder("");
		tb.append("<html><head><title>"+player.getName()+"</title></head><body><center>");
		tb.append("<br><tr><td><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32></td></tr><br>");//image
		tb.append("<font color=\"FFA500\">"+command+" Information</font><br>");
		tb.append("<table bgcolor=444444 width= 280>");
		tb.append("<tr><td align=center><font color=\"C0C0C0\">Players Inside "+command+" Zone: "+playersin+"</font></td></tr>");
		tb.append("<tr><td align=center><img src=\"L2UI.SquareWhite\" width=90 height=1></td></tr>");
		tb.append("<tr><td align=center><img src=\"L2UI.SquareBlank\" width=90 height=1></td></tr>");
		tb.append("<tr><td align=center><img src=\"L2UI.SquareBlank\" width=90 height=1></td></tr>");
		tb.append("<tr><td align=center><font color=\"C0C0C0\">Parties Inside "+command+" Zone: "+partiesin+"</font></td></tr>");
		tb.append("</table><br>");
		tb.append("<table width= 280>");
		tb.append("<tr><td align=center>Raid Boss Status: "+color+"</td></tr></table><br><BR>");
		tb.append("<table bgcolor=444444 width=50>");
		tb.append("<tr><td><button value=\"Teleport To "+command+
				"\" action=\"bypass -h Quest RaidObserver tp_"+command+"\" width=150 height=22 back=\"L2UI_ct1.Button_DF_Calculator_Down\" fore=\"L2UI_ct1.Button_DF_Calculator\"></td></tr>");
		if (EnableObservation)
		{
		tb.append("<tr><td><button value=\"Observe "+command+
				"\" action=\"bypass -h npc_"+npc.getObjectId()+"_observe "+ObservationAdena+" "+x+" "+y+" "+z+"\" width=150 height=22 back=\"L2UI_ct1.Button_DF_Calculator_Down\" fore=\"L2UI_ct1.Button_DF_Calculator\"></td></tr>");
		}
		tb.append("<tr><td><button value=\"Back\" action=\"bypass -h Quest RaidObserver Back\" width=150 height=22 back=\"L2UI_ct1.Button_DF_Calculator_Down\" fore=\"L2UI_ct1.Button_DF_Calculator\"></td></tr>");

		tb.append("</table><br><br><br><br>");
		tb.append("<tr><td><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32></td></tr><br>");
		tb.append("</body></html>");
		nhm.setHtml(tb.toString());
		player.sendPacket(nhm);
	}
	catch (Exception e)
	{
		player.sendMessage("Something went wrong try again.");
	}
}
@SuppressWarnings("deprecation")
public int getPartiesInside(int zoneId)//Calculating parties inside party area.
    {
        int i = 0;
        for (L2ZoneType zone : ZoneManager.getInstance().getAllZones())
            if (zone.getId() == zoneId)
            {
                for (L2Character character : zone.getCharactersInside().values())
                    if (character instanceof L2PcInstance && (!((L2PcInstance) character).getClient().isDetached()) && 
                    		((L2PcInstance) character).getParty() != null && 
                    		((L2PcInstance) character).getParty().isLeader((L2PcInstance) character))
                        i++;
            }
        return i;
    }
}

 

2.Create a new htm file on data/scripts/custom/RaidObserver/1.htm

 

Paste this code ont it:

<title>%player%</title>
<center><br>
<tr><td><img src="L2UI_CH3.herotower_deco" width=256 height=32></td></tr><br>
<center><font color="CC9900">Grand Raid Boss Informaton</font></text></center>
<br>
<table>
<tr>
<td align=center><img src="icon.accessory_ring_of_baium_i00" width=32 height=32>
</td>
<td align=center><button value="Baium" action="bypass -h Quest RaidObserver Baium" width=90 height=32 back="L2UI_CT1.Button_DF_Calculator_Over" fore="L2UI_CT1.Button_DF_Calculator_Over">
</td>
<td align=center><button value="Valakas" action="bypass -h Quest RaidObserver Valakas" width=90 height=32 back="L2UI_CT1.Button_DF_Calculator_Over" fore="L2UI_CT1.Button_DF_Calculator_Over">
</td>
<td align=center><img src="icon.accessory_necklace_of_valakas_i00" width=32 height=32>
</td>
</table>
<br><img src="L2UI.SquareGray" width=155 height=1><br>
<table>
<tr>
<td align=center><img src="icon.accessory_earring_of_antaras_i00" width=32 height=32>
</td>
<td align=center><button value="Antharas" action="bypass -h Quest RaidObserver Antharas" width=90 height=32 back="L2UI_CT1.Button_DF_Calculator_Over" fore="L2UI_CT1.Button_DF_Calculator_Over">
</td>
<td align=center><button value="Queen Ant" action="bypass -h Quest RaidObserver AntQueen" width=90 height=32 back="L2UI_CT1.Button_DF_Calculator_Over" fore="L2UI_CT1.Button_DF_Calculator_Over">
</td>
<td align=center><img src="icon.accessory_ring_of_queen_ant_i00" width=32 height=32>
</td>
</table><br><img src="L2UI.SquareGray" width=155 height=1><br><BR><BR>
Teleport: %teleport%<br>
%observation%<br>
<tr><td><img src="L2UI_CH3.herotower_deco" width=256 height=32></td></tr><br>

 

3. Add script on scripts.cfg file:

custom/RaidObserver/RaidObserver.java

 

4. Run this query on your database or install the NPC by yourself.

INSERT INTO `npc` VALUES ('36650', '13173', 'RaidObserver', '1', 'MaxCheaters.com', '1', 'LineageNPC.clear_npc', '8.00', '19.00', '85', 'male', 'L2Npc', null, null, null, null, null, '40', '43', '30', '21', '20', '20', '0', '0', null, null, null, null, '230', '1', '0', '333', '0', '0', '0', '60.00000', '120.00000', '1', '1', '0', '0');

 

How to Modify:

 

Check Variables on code:

private static final int _Baium = 29020;
private static final int _Antharas = 29068;
private static final int _Valakas = 29028;
private static final int _AntQueen = 29001;
private static final int npcid = 36650; // npc id
private static final boolean EnableObservation = true; // Set it true to allow players to observe raidbosses
private static final boolean EnableTeleport = true; // Set it true to allow players to teleport to raidbosses
private static final int ObservationAdena = 5000;  //Adena required to observe a grand boss
private static String htm = "data/scripts/custom/RaidObserver/1.htm"; //html location

 

How to Add More Grand Bosses in list:

 

Index: L2J_DataPack/dist/game/data/scripts/custom/RaidObserver/
===================================================================
--- L2J_DataPack/dist/game/data/scripts/custom/RaidObserver/RaidObserver.java
+++ L2J_DataPack/dist/game/data/scripts/custom/RaidObserver/RaidObserver.java

@@ +142, 7 - 144 , 9 @@
private static final int _AntQueen = 29001;
+	private static final int _YourRaidBoss = 12345;
private static final int npcid = 36650; // npc id


@@ +219,8 -222 , 6 @@
                 if (event.startsWith("tp_Valakas"))//location of the teleport
	{
		player.teleToLocation(213447, -115136, -1636);
	}
+		if (event.startsWith("YourRaidBoss"))
+		{
+			RaidInfo(event, npc, player, event);
+		}
+		if (event.startsWith("tp_YourRaidBoss"))//location of the teleport
+		{
+			player.teleToLocation(213447, -115136, -1636);
+		}
                if (event.startsWith("Baium"))
	{

@@ +172,12 - 176, 5 @@

		y=16623;
		z = 10085;
	}
+		if (command.equals("YourRaidBoss"))
+		{
+			x= YourLocationX;
+			y=-YourLocationY;
+			z = YourLocationZ;
+		}
	if (command.equals("Valakas"))
	{
		x=213447;

@@ +130, 1 - 157,9 @@
		return ppl;
	}
+		if (command.equals("YourRaidBoss"))
+		{
+			int ppl = getPlayerInside(Zone Id ); //check data/zones/custom_boss_zones.xml
+			return ppl;
+		}
	if (command.equals("AntQueen"))
	{

@@ +160, 2 - 177,4 @@
		return pts;
	}
+		if (command.equals("YourRaidBoss"))
+		{
+			int pts = getPartiesInside(Zone Id); //check data/zones/custom_boss_zones.xml
+			return pts;
+		}
	if (command.equals("AntQueen"))
	{
@@ +187, 3 - 191,5 @@
                if (name.equals("Valakas"))
		id = _Valakas;
+		if (name.equals("YourRaidBoss"))
+			id = _YourRaidBoss;
	if (name.equals("AntQueen"))
		id = _AntQueen;

Index: L2J_DataPack/dist/game/data/scripts/custom/RaidObserver/
===================================================================
--- L2J_DataPack/dist/game/data/scripts/custom/RaidObserver/1.htm
+++ L2J_DataPack/dist/game/data/scripts/custom/RaidObserver/1.htm

<td align=center><img src="icon.accessory_necklace_of_valakas_i00" width=32 height=32>
</td>
</table>
+<br><img src="L2UI.SquareGray" width=155 height=1><br>
+<table>
+<tr>
+<td align=center><img src="icon.accessory_earring_of_antaras_i00" width=32 height=32>
+</td>
+<td align=center><button value="Antharas" action="bypass -h Quest RaidObserver Antharas" width=90 height=32 back="L2UI_CT1.Button_DF_Calculator_Over" fore="L2UI_CT1.Button_DF_Calculator_Over">
+</td>
+<td align=center><button value="Queen Ant" action="bypass -h Quest RaidObserver AntQueen" width=90 height=32 back="L2UI_CT1.Button_DF_Calculator_Over" fore="L2UI_CT1.Button_DF_Calculator_Over">
+</td>
+<td align=center><img src="icon.accessory_ring_of_queen_ant_i00" width=32 height=32>
+</td>
+</table>
+<br><img src="L2UI.SquareGray" width=155 height=1><br>
<table>
<tr>
<td align=center><img src="icon.accessory_earring_of_antaras_i00" width=32 height=32>

 

After that all the texts will be ready, you have just to edit which functions must be excecuted for which command.

 

Credits & Idea: `Heroin

Posted

Observe system is kinda old and implemented in l2j since years ago. Also you can do the same thing w/ a simple html, bypass -h npc_%objectId%_observe X Y Z except your extra features.

Posted

You do great job in every single share good job mate. Rewarded

Thanks a lot marwan!  O0

 

Observe system is kinda old and implemented in l2j since years ago. Also you can do the same thing w/ a simple html, bypass -h npc_%objectId%_observe X Y Z except your extra features.

You can do with html...I already did it and posted before. You can see in my topic where i did it...Just read it carefully..However, this is not only an observer manager, it says how many people  parties are in raidboss, you can teleport there...etc etc

Posted

this is high five right?

just delete values() and press after ctrl+space and see available methods. I think it is like getValues on high five :P

Posted

game\data\scripts\custom\RaidObserver\RaidObserver.java

java.lang.NullPointerException

at custom.RaidObserver.RaidObserver.onFirstTalk(RaidObserver.java:207)

at com.l2jserver.gameserver.model.quest.Quest.notifyFirstTalk(Quest.java:792)

at handlers.actionhandlers.L2NpcAction.action(L2NpcAction.java:148)

at com.l2jserver.gameserver.model.L2Object.onAction(L2Object.java:277)

at com.l2jserver.gameserver.model.L2Object.onAction(L2Object.java:269)

at com.l2jserver.gameserver.network.clientpackets.Action.runImpl(Action.java:137)

at com.l2jserver.gameserver.network.clientpackets.L2GameClientPacket.run(L2GameClientPacket.java:70)

at com.l2jserver.gameserver.network.L2GameClient.run(L2GameClient.java:1100)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

 

I hate this problem...

Posted

game\data\scripts\custom\RaidObserver\RaidObserver.java

java.lang.NullPointerException

at custom.RaidObserver.RaidObserver.onFirstTalk(RaidObserver.java:207)

at com.l2jserver.gameserver.model.quest.Quest.notifyFirstTalk(Quest.java:792)

at handlers.actionhandlers.L2NpcAction.action(L2NpcAction.java:148)

at com.l2jserver.gameserver.model.L2Object.onAction(L2Object.java:277)

at com.l2jserver.gameserver.model.L2Object.onAction(L2Object.java:269)

at com.l2jserver.gameserver.network.clientpackets.Action.runImpl(Action.java:137)

at com.l2jserver.gameserver.network.clientpackets.L2GameClientPacket.run(L2GameClientPacket.java:70)

at com.l2jserver.gameserver.network.L2GameClient.run(L2GameClient.java:1100)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

 

I hate this problem...

 

Where it shows this message? I mean it does not speak the NPC at all, or when you press a button?

Posted

Where it shows this message? I mean it does not speak the NPC at all, or when you press a button?

 

the npc doesent speak at all, this error i get in GS Console

Posted

I modified only the problem from Hi5 server as u told there let me show u....

 

from this: for (L2Character character : zone.getCharactersInside().values())

 

to this: for (Object character : zone.getCharactersInside().toArray())

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

    • 🚀 Telonyx Contest Platform Telegram Native Giveaway & Contest System for Modern Communities 💎 White-Label • Self-Hosted • Telegram Mini App • Monetization Ready 🧠 Product Overview Telonyx Contest Platform is a production-ready Telegram Mini App system designed for running modern contests, giveaways and engagement campaigns directly inside Telegram. It replaces outdated bot-based mechanics with a fully interactive application experience — no commands, no chat spam, no external websites. Users interact with a clean, fast and mobile-first interface inside Telegram. ⚡ Core Experience Participants can: • 🚀 instantly join contests inside Telegram Mini App • 🎁 view prizes and participation rules • 📊 track real-time contest status • ✅ verify task completion automatically • 🏆 receive winner results and notifications • 💰 participate in free or paid campaigns Everything is fully native to Telegram. 🧩 Key Platform Capabilities 🎯 Contest Engine • advanced contest creation system • multiple winners and reward tiers • scheduled launches and auto-finish logic • contest duplication and templates • real-time participant tracking • flexible rule configuration 📱 Mini App Interface • modern Telegram Mini App UX • mobile-first optimized layout • fast loading and smooth transitions • participant counter & live status • prize showcase system • one-click participation flow 🔎 Task Verification System Automated validation of participation rules: • Telegram channel subscriptions • sponsor channel requirements • multi-channel verification logic • YouTube subscription checks • TikTok task validation ❌ Zero manual moderation required 🛡 Anti-Fraud & Security Layer • duplicate entry prevention • bot detection system • CAPTCHA integration • rule enforcement engine • participation integrity checks 🏆 Automated Winner Selection • fully automated draw system • transparent winner selection logic • instant result publishing • winner notification system • historical archive of all contests 💎 Telegram Stars Monetization • optional paid participation via Telegram Stars • native Telegram checkout integration • flexible entry pricing per campaign • direct monetization of engagement traffic 🌍 Multi-Language Architecture Built with localization in mind. Supported out of the box: • 🇬🇧 English • 🇷🇺 Russian • 🇺🇦 Ukrainian • 🇹🇷 Turkish • 🇪🇸 Spanish • 🇵🇹 Portuguese • ➕ extensible language system for custom localization All UI layers, notifications and admin panel can be fully translated per deployment. 🎯 Ideal Use Cases 🎮 Gaming Projects / Lineage II Servers • pre-launch hype campaigns • donation reward giveaways • VIP / premium account distribution • promo code campaigns • server opening events 🎥 Streamers & Creators • subscriber engagement campaigns • live stream giveaways • audience growth funnels • partnership promotions 🌐 Communities & Brands • automated engagement systems • viral marketing campaigns • audience retention mechanics 🏗 Architecture & Deployment • Telegram Mini App frontend • FastAPI backend architecture • PostgreSQL database layer • Redis caching system • Docker-based deployment • WebSocket real-time updates • REST API integration layer 📦 Self-hosted deployment — full control over infrastructure and data 🎨 White-Label & Customization Each installation can be fully customized: • complete UI/UX rebranding • project-specific visual identity • custom engagement mechanics • referral & viral systems • loyalty & progression systems • seasonal campaign modules • custom API integrations   💡 Why This Platform Traditional contest bots are limited, noisy and inefficient. Telonyx Contest Platform is a modern engagement layer for Telegram ecosystems — combining UX, automation and monetization in one system. ✔ Higher participation rate ✔ Lower friction ✔ Direct revenue via Telegram Stars ✔ Full control via self-hosted deployment 💼 Commercial Model • Single License (Self-Hosted Deployment) • White-Label Branding Rights • Optional Custom Development • Installation & Setup Service 📩 Contact For demo access, licensing details or custom implementation: @se1dhe @telonyx_dev  
    • https://discord.gg/acvqx9rbhy Added intelligent agent that reads scripts and config and provides infos to players regarding gameplay Like where to farm/max enchants etc etc   Added auto translate to En/ES/BR htmls without api
    • The core strength of Novproxy Perfectly unlock overseas AI large models: 100% pure residential IP, perfectly bypassing various strict risk controls such as ChatGPT, Claude, Midjourney, etc. This is an essential tool for parents to train AI on weekends and during work! Available in 195+ countries/regions worldwide: covering an extremely wide range. Whether it's setting up accounts for cross-border e-commerce, conducting overseas web crawling, or conducting network gray-scale tests, it can all be handled easily. Ultra-fast concurrency: Real residential network, stable and non-blocking, high-concurrency business can also run at full capacity.
    • Thanks for your comment. That's what I'm working on, but it takes a lot of planning and getting it to work. I hope I can pull it off. Right now, I'm working on the Party feature, and I'm also working on AI conversations focused solely on Lineage, meaning the AI will only talk about the game. We'll see how it goes. The idea is to develop the system so thoroughly that there are sieges and the Phantom Players are undetectable, making them seem as realistic as possible. I'm sorry, but I don't see it as a useful modification. I'm also doing modifications on request, so if you're interested, you can send me a PM.
    • Trader Feedback  0  0  0 Total Rating 0%  Status:Offline  Group:Members  Posts:29  Reputation:  Member No:245618  Days Won:0  Joined:04/06/2026    Gender:Not Telling    Country: Author Posted April 29 TG Support: https://t.me/buyingproxysup | Channel: https://t.me/buyingproxycom Discord support: #buyingproxy | Server: Join the BuyingProxy Discord Server!  Create your free account here
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..