Jump to content
  • 0

How to set Announce Raidboss spawn to all player by Boss ID


Question

Posted (edited)

in RaidBossSpawnManager

 

this code. when the raidboss spawn got show announce to all player but.

**The problem is raidboss got spawn  2 raisboss in same location. (spawn double raidboss)**

how to fix it? Thank you some 1 can help me please.😌

 -----------------------------------------------------------

 

if ((respawnTime == 0L) || (time > respawnTime))
        {
            L2RaidBossInstance raidboss = null;
            // custom
            if (bossId == 40019)
            {
                raidboss = (L2RaidBossInstance) _spawns.get(bossId).doSpawn();
                Announcements _an = Announcements.getInstance();
                _an.announceToAll("RaidBoss : " + raidboss.getName() + " เกิดแล้ว!!!");
            }
            raidboss = (L2RaidBossInstance) spawnDat.doSpawn();
            
            if (raidboss != null)
            {
                raidboss.setCurrentHp(currentHP);
                raidboss.setCurrentMp(currentMP);
                raidboss.setRaidStatus(StatusEnum.ALIVE);
                
                _bosses.put(bossId, raidboss);
                
                final StatsSet info = new StatsSet();
                info.set("currentHP", currentHP);
                info.set("currentMP", currentMP);
                info.set("respawnTime", 0L);
                
                _storedInfo.put(bossId, info);
            }
        }
        else
        {
            final long spawnTime = respawnTime - Calendar.getInstance().getTimeInMillis();
            _schedules.put(bossId, ThreadPoolManager.getInstance().scheduleGeneral(new SpawnSchedule(bossId), spawnTime));
        }
        
        _spawns.put(bossId, spawnDat);
        
        if (storeInDb)
        {
            try (Connection con = L2DatabaseFactory.getInstance().getConnection();
                PreparedStatement statement = con.prepareStatement("INSERT INTO raidboss_spawnlist (boss_id,amount,loc_x,loc_y,loc_z,heading,respawn_time,currentHp,currentMp) VALUES(?,?,?,?,?,?,?,?,?)"))
            {
                statement.setInt(1, spawnDat.getId());
                statement.setInt(2, spawnDat.getAmount());
                statement.setInt(3, spawnDat.getX());
                statement.setInt(4, spawnDat.getY());
                statement.setInt(5, spawnDat.getZ());
                statement.setInt(6, spawnDat.getHeading());
                statement.setLong(7, respawnTime);
                statement.setDouble(8, currentHP);
                statement.setDouble(9, currentMP);
                statement.execute();
            }
            catch (Exception e)
            {
                // problem with storing spawn
                _log.log(Level.WARNING, getClass().getSimpleName() + ": Could not store raidboss #" + bossId + " in the DB:" + e.getMessage(), e);
            }
        }
        // end custom

Edited by aonniemnoi

12 answers to this question

Recommended Posts

  • 0
Posted (edited)
  On 9/27/2021 at 12:50 AM, aonniemnoi said:

in RaidBossSpawnManager

 

this code. when the raidboss spawn got show announce to all player but.

**The problem is raidboss got spawn  2 raisboss in same location. (spawn double raidboss)**

how to fix it? Thank you some 1 can help me please.😌

 -----------------------------------------------------------

 

if ((respawnTime == 0L) || (time > respawnTime))
        {
            L2RaidBossInstance raidboss = null;
            // custom
            if (bossId == 40019)
            {
                raidboss = (L2RaidBossInstance) _spawns.get(bossId).doSpawn();
                Announcements _an = Announcements.getInstance();
                _an.announceToAll("RaidBoss : " + raidboss.getName() + " เกิดแล้ว!!!");
            }
            raidboss = (L2RaidBossInstance) spawnDat.doSpawn();
            
            if (raidboss != null)
            {
                raidboss.setCurrentHp(currentHP);
                raidboss.setCurrentMp(currentMP);
                raidboss.setRaidStatus(StatusEnum.ALIVE);
                
                _bosses.put(bossId, raidboss);
                
                final StatsSet info = new StatsSet();
                info.set("currentHP", currentHP);
                info.set("currentMP", currentMP);
                info.set("respawnTime", 0L);
                
                _storedInfo.put(bossId, info);
            }
        }
        else
        {
            final long spawnTime = respawnTime - Calendar.getInstance().getTimeInMillis();
            _schedules.put(bossId, ThreadPoolManager.getInstance().scheduleGeneral(new SpawnSchedule(bossId), spawnTime));
        }
        
        _spawns.put(bossId, spawnDat);
        
        if (storeInDb)
        {
            try (Connection con = L2DatabaseFactory.getInstance().getConnection();
                PreparedStatement statement = con.prepareStatement("INSERT INTO raidboss_spawnlist (boss_id,amount,loc_x,loc_y,loc_z,heading,respawn_time,currentHp,currentMp) VALUES(?,?,?,?,?,?,?,?,?)"))
            {
                statement.setInt(1, spawnDat.getId());
                statement.setInt(2, spawnDat.getAmount());
                statement.setInt(3, spawnDat.getX());
                statement.setInt(4, spawnDat.getY());
                statement.setInt(5, spawnDat.getZ());
                statement.setInt(6, spawnDat.getHeading());
                statement.setLong(7, respawnTime);
                statement.setDouble(8, currentHP);
                statement.setDouble(9, currentMP);
                statement.execute();
            }
            catch (Exception e)
            {
                // problem with storing spawn
                _log.log(Level.WARNING, getClass().getSimpleName() + ": Could not store raidboss #" + bossId + " in the DB:" + e.getMessage(), e);
            }
        }
        // end custom

Expand  

Fix written in red:

 

image.png.77d24c97ee0c7be536edbde6cdda3f76.png

Edited by Pleyne
  • 0
Posted

i should delete that?

  On 9/27/2021 at 7:09 AM, zemaitis said:

.doSpawn() mentioned 2 times. Maybe thats the problem?

Expand  

i should delete that?

 

  On 9/27/2021 at 8:53 AM, Pleyne said:

Fix written in red:

 

image.png.77d24c97ee0c7be536edbde6cdda3f76.png

Expand  

oh thank you !

  • 0
Posted
  On 9/27/2021 at 3:23 PM, aonniemnoi said:

i should delete that?

i should delete that?

 

oh thank you !

Expand  

 

Try deleting and try test what your changes do. We can tell you where to look, but you have to try things for yourself bro.

  • 0
Posted
  On 9/27/2021 at 3:27 PM, zemaitis said:

 

Try deleting and try test what your changes do. We can tell you where to look, but you have to try things for yourself bro.

Expand  

i am new of java i will learning bro thank you very much!

  • 0
Posted
  On 9/27/2021 at 3:35 PM, zemaitis said:

 

yes no problem mate just keep trying and dont be afraid of breaking stuff.

Expand  

i try it already got show this error...

 

com.l2jserver.gameserver.instancemanager.RaidBossSpawnManager addNewSpawn
WARNING: RaidBossSpawnManager: Could not store raidboss #40019 in the DB:Duplicate entry '40019' for key 'PRIMARY'
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '40019' for key 'PRIMARY'
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:408)
    at com.mysql.jdbc.Util.getInstance(Util.java:383)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1049)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4226)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4158)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2615)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2776)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2840)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2082)
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1302)
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.execute(NewProxyPreparedStatement.java:404)
    at com.l2jserver.gameserver.instancemanager.RaidBossSpawnManager.addNewSpawn(RaidBossSpawnManager.java:352)
    at handlers.admincommandhandlers.AdminSpawn.spawnMonster(AdminSpawn.java:448)
    at handlers.admincommandhandlers.AdminSpawn.useAdminCommand(AdminSpawn.java:271)
    at com.l2jserver.gameserver.network.clientpackets.SendBypassBuildCmd.runImpl(SendBypassBuildCmd.java:87)
    at com.l2jserver.gameserver.network.clientpackets.L2GameClientPacket.run(L2GameClientPacket.java:70)
    at com.l2jserver.gameserver.network.L2GameClient.run(L2GameClient.java:1148)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

  • 0
Posted (edited)
  On 9/27/2021 at 5:40 PM, splicho said:

The Raidboss ID is already existing in your database. Try deleting it, as it tries to duplicate it.

Expand  

i try to spawn id 40019 i got this error. and the boss  come 2

 

RaidBossSpawnManager: Could not store raidboss #40019 in the DB:Duplicate entry '40019' for key 'PRIMARY'
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '40019' for key 'PRIMARY'
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:408)
        at com.mysql.jdbc.Util.getInstance(Util.java:383)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1049)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4226)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4158)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2615)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2776)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2840)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2082)
        at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1302)
        at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.execute(NewProxyPreparedStatement.java:404)
        at com.l2jserver.gameserver.instancemanager.RaidBossSpawnManager.addNewSpawn(RaidBossSpawnManager.java:352)
        at handlers.admincommandhandlers.AdminSpawn.spawnMonster(AdminSpawn.java:448)
        at handlers.admincommandhandlers.AdminSpawn.useAdminCommand(AdminSpawn.java:271)
        at com.l2jserver.gameserver.network.clientpackets.SendBypassBuildCmd.runImpl(SendBypassBuildCmd.java:87)
        at com.l2jserver.gameserver.network.clientpackets.L2GameClientPacket.run(L2GameClientPacket.java:70)
        at com.l2jserver.gameserver.network.L2GameClient.run(L2GameClient.java:1148)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

Edited by aonniemnoi
  • 0
Posted (edited)

Did you check in your database if raidboss 40019 was already spawned ? just clear raidboss_spawnlist table and restart server and try again  maybe it is already in db and when you try to spawn it again you get duplicate id error from mysql and then shit happens and 2 bosses are spawned ? 

Edited by arm4729

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...