Hello guys, I have a custom zone and whenever you die in that zone it shows you the timer when you will respawn and after timer reaches 0 it respawns you.This was my first try:
public void onDieInside(L2Character character)
{
if(character instanceof L2PcInstance){
final L2PcInstance player = (L2PcInstance) character;
countdown = 5;
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Runnable(){
@Override
public void run(){
if(player.isDead()){
if(countdown >0){
SystemMessage smg = SystemMessage.getSystemMessage(SystemMessageId.RESPAWN_AFTER_S1_SECONDS);
smg.addString(String.valueOf(countdown));
player.sendPacket(SystemMessageId.RESPAWN_AFTER_S1_SECONDS);
countdown--;
}else if(countdown == 0){
player.doRevive();
int x = 174132 + (int)(Math.random() * ((179862 - 174132) + 1));
int y = 112225 + (int)(Math.random() * ((117715 - 112225) + 1));
int z = -7708;
Location loc = new Location(x, y, z);
player.teleToLocation(loc,0);
}
}
}
}
,0,1000);
}
}
It works fine for first time,but then it just get shorter and shorter.I believe it's because thread doesn't stop working after respawning player,so whenever a player dies again the countdown is set to 5,but there is 2threads running and subtracting 1from countdown and then threads just keep increasing. My second try was this method:
public void onDieInside(L2Character character)
{
if(character instanceof L2PcInstance){
final L2PcInstance player = (L2PcInstance) character;
countdown = 5;
while(countdown > 0 && player.isDead()){
ThreadPoolManager.getInstance().scheduleGeneral(new showCountdown(countdown,player), 6000-countdown*1000);
countdown--;
}
ThreadPoolManager.getInstance().scheduleGeneral(new Runnable(){
@Override
public void run(){
if(player.isDead()){
player.doRevive();
int x = 174132 + (int)(Math.random() * ((179862 - 174132) + 1));
int y = 112225 + (int)(Math.random() * ((117715 - 112225) + 1));
int z = -7708;
Location loc = new Location(x, y, z);
player.teleToLocation(loc,0);
}
}
}, 6000);
}
}
This is showCountdown class:
class showCountdown implements Runnable{
int timer = 0;
L2PcInstance player;
public showCountdown(int countdown,L2PcInstance p){
timer = countdown;
player = p;
}
@Override
public void run(){
SystemMessage smg = SystemMessage.getSystemMessage(SystemMessageId.RESPAWN_AFTER_S1_SECONDS);
smg.addNumber(timer);
player.sendPacket(smg);
}
}
It works just fine,but it seems dumb just to create so many Threads for a simple countdown.
DISCORD :
utchiha_market
telegram :
https://t.me/utchiha_market
SELLIX STORE :
https://utchihamkt.mysellix.io/
Join our server for more products :
https://discord.gg/hood-services
https://campsite.bio/utchihaamkt
Server Rates:
» Xp 500x.
» Sp 500x.
» Aden 500x.
» Drop 1x.
» PartyXp 2x.
» PartySp 2x.
» Starting character level -61.
Enchant rates:
» Safe enchant +4.
» Blessed and simple scrolls max enchant (+16).
» Crystal scrolls max enchant (+20).
» Simple enchant scrolls chance – 65%.
» Blessed enchant scrolls chance – 100%.
» Crystal enchant scrolls chance – 50%
Augmentations:
» Mid life stone skill chance – 5%.
» High life stone skill chance – 10%.
» Top life stone skill chance – 20%.
» Augments 1+1
Unique features:
» Main town – Giran
» Automatic-Manual Potions.
» Working 2 castle sieges. (Giran-Aden)
» SPS cancel lasts 10 seconds and than buffs come back.
» Stackable scrolls, lifestones, book of giants.
» Unique pvp zone
» More then 11 active raid bosses.
» Wedding system.
» Unique farming areas.
» Npc skill enchanter.
» Full npc buffer with auto buff.
» Max count of buffs – 55.
» Max subclasses – 4.
» Free and no quest class change.
» Free and no quest sub class.
» Raid boss drop nobless item.
» No weight limit.
» Unique protection anti-hwy armor for archers/daggers etc.
» Ingame password change.
» Top pvp/pk/online ranks NPC.
» Unique monsters & NPC.
» Interlude retail skills.
» Server up-time [24/7] [99]%.
» Perfect class balance (all class can kill all class depending on players skill and setup knowledge,gear,augmentations).
» Announcements on double kills triple kills etc.
» Announcements on Grand Boss death , with the name of the killer as well as clan name of the player.
» Information Npc in game with all servers infromations.
Custom server gear :
1). Titanium Armor Lv.1
2). Epic Armor Lv.2
3). Epic Weapons-Kamikaze-Black S grade (Same Stats)
4). Demonic-Angelic Wings-Baium Hair-Custom Accessories (SameStats)
5). Custom Fighter/Mage tattoo Lv1-Lv2-Lv3
6). Shirt (STR,CON,INT +1)
7). Custom Shields
Server Commands:
.tvtjoin .tvtleave – Join or leave tvt event.
.ctfjoin .ctfleave – Join or leave ctf event.
.dmjoin .dmleave – Join of leave dm event.
.online – current online players count.
.repair – repairs stuck character in world.
.menu – opens online menu panel.
.exit – PVP zone exit in case you are bullied.
.changepassword - Opens online menu then u can change ur password in game.
.farm - Enable/disable autofarm
Event system:
» TVT event
» CTF event
» DM event
» Tournament Event
» Party Zone
» Unique event shop.
Olympiad game:
» Retail olympiad game.
» Competition period [1] week.
» Olympiad start time [18:00] end [00:00] GMT+2.
» New Heroes every Sunday.
Question
StealthyS4m
Hello guys,
I have a custom zone and whenever you die in that zone it shows you the timer when you will respawn and after timer reaches 0 it respawns you.This was my first try:
It works fine for first time,but then it just get shorter and shorter.I believe it's because thread doesn't stop working after respawning player,so whenever a player dies again the countdown is set to 5,but there is 2threads running and subtracting 1from countdown and then threads just keep increasing.
My second try was this method:
This is showCountdown class:
It works just fine,but it seems dumb just to create so many Threads for a simple countdown.
Edited by StealthyS4mLink to comment
Share on other sites
15 answers to this question
Recommended Posts