Jump to content
  • 0

Question

Posted

It is very annoying usually in server with farming zones and mobs which they won't die easily when the player is about to kill it someone else comes up makes the last hit and takes the reward. Can somehow make a way to give the reward to the player which has the player on him which means if I keep hitting a mob it faces me and hits me if somebody else comes and starts hitting if his damage is more that mine he will take the mob toward him and the mob will start hitting him instead of me, what I want to do that the reward from the mob should take the person who has the mob on him which means that the reward should go to the player who has the mob on him and hits him.

 

confusing...

 

thanks in advance...

Recommended Posts

  • 0
Posted

idea isnt my, but code is good, just change last hit on best dmg on choise moobs, if code is "over exaggerated" i w8 for you offer, if i make some errors, that is normal becouse i am just a man

  • 0
Posted

Index: E:/L2j Development/workspace/L2_GameServer-clean/java/com/l2jserver/gameserver/model/actor/L2Character.java
===================================================================
--- E:/L2j Development/workspace/L2_GameServer-clean/java/com/l2jserver/gameserver/model/actor/L2Character.java	(revision 4014)
+++ E:/L2j Development/workspace/L2_GameServer-clean/java/com/l2jserver/gameserver/model/actor/L2Character.java	(working copy)
@@ -2087,7 +2087,20 @@
         
         if (this instanceof L2PcInstance && ((L2PcInstance)this).getAgathionId() != 0)
         	((L2PcInstance)this).setAgathionId(0);
-		calculateRewards(killer);
+        
+        DmgInfo dmger = null;
+        double dmg = 0;
+        
+        for(DmgInfo dmgs : _agroMap.values())
+        {
+        	if(dmgs.dmg > dmg)
+        	{
+        		dmg = dmgs.dmg;
+        		dmger = dmgs;
+        	}
+        }
+        
+		calculateRewards(dmger.attacker != null ? _agroMap.get(dmg).attacker : killer);
+		_agroMap.clear();
		// Send the Server->Client packet StatusUpdate with current HP and MP to all other L2PcInstance to inform
		broadcastStatusUpdate();
@@ -6777,8 +6790,8 @@
	public final int getWalkSpeed() { return getStat().getWalkSpeed(); }
	public int getWIT() { return getStat().getWIT(); }
	// =========================================================
-
-
+	class DmgInfo{ L2Character attacker; double dmg; public DmgInfo(L2Character att) { attacker = att; }}
+	private FastMap<L2Character, DmgInfo> _agroMap;
	// =========================================================
	// Status - NEED TO REMOVE ONCE L2CHARTATUS IS COMPLETE
	// Method - Public
@@ -6791,6 +6804,13 @@
			getStatus().reduceHp(i/Config.L2JMOD_CHAMPION_HP, attacker, awake, isDOT, false);
		else
			getStatus().reduceHp(i, attacker, awake, isDOT, false);
+		
+		if(this instanceof L2Attackable && attacker.getActingPlayer() != null) // simple check XD
+		{
+			DmgInfo lastDmg = _agroMap.containsKey(attacker) ? _agroMap.get(attacker) : new DmgInfo(attacker);
+			lastDmg.dmg += i;
+			_agroMap.put(attacker, lastDmg);
+		}
	}
	public void reduceCurrentMp(double i) { getStatus().reduceMp(i); }
	public void removeStatusListener(L2Character object) { getStatus().removeStatusListener(object); }

 

There u go simple, clean and precise.

  • 0
Posted

that is same like my just you add that in another place maby some better but i am still learning and that simple error isnt so bad, summarizing my code is good

  • 0
Posted

that is same like my just you add that in another place maby some better but i am still learning and that simple error isnt so bad, summarizing my code is good

code cleanliness and performance should be of importance :P

yours dose the same thing only that the code is every where :)

And im not arguing im teaching :P

  • 0
Posted

I tried to add it but it didn't worked.

It would be easier if it just gives the reward to the player who has the aggro on him, I think...

 

ex. calculateRewards(killer);

Somehow to change it and give the reward to the guy who has the aggro instead of the killer...

  • 0
Posted

Index: E:/L2j Development/workspace/L2_GameServer-clean/java/com/l2jserver/gameserver/model/actor/L2Character.java
===================================================================
--- E:/L2j Development/workspace/L2_GameServer-clean/java/com/l2jserver/gameserver/model/actor/L2Character.java	(revision 4014)
+++ E:/L2j Development/workspace/L2_GameServer-clean/java/com/l2jserver/gameserver/model/actor/L2Character.java	(working copy)
@@ -2087,7 +2087,20 @@
         
         if (this instanceof L2PcInstance && ((L2PcInstance)this).getAgathionId() != 0)
         	((L2PcInstance)this).setAgathionId(0);
-		calculateRewards(killer);
+        
+        DmgInfo dmger = null;
+        double dmg = 0;
+        
+        for(DmgInfo dmgs : _agroMap.values())
+        {
+        	if(dmgs.dmg > dmg)
+        	{
+        		dmg = dmgs.dmg;
+        		dmger = dmgs;
+        	}
+        }
+        
+		calculateRewards(dmger.attacker != null ? _agroMap.get(dmg).attacker : killer);
+		_agroMap.clear();
		// Send the Server->Client packet StatusUpdate with current HP and MP to all other L2PcInstance to inform
		broadcastStatusUpdate();
@@ -6777,8 +6790,8 @@
	public final int getWalkSpeed() { return getStat().getWalkSpeed(); }
	public int getWIT() { return getStat().getWIT(); }
	// =========================================================
-
-
+	class DmgInfo{ L2Character attacker; double dmg; public DmgInfo(L2Character att) { attacker = att; }}
+	private FastMap<L2Character, DmgInfo> _agroMap;
	// =========================================================
	// Status - NEED TO REMOVE ONCE L2CHARTATUS IS COMPLETE
	// Method - Public
@@ -6791,6 +6804,13 @@
			getStatus().reduceHp(i/Config.L2JMOD_CHAMPION_HP, attacker, awake, isDOT, false);
		else
			getStatus().reduceHp(i, attacker, awake, isDOT, false);
+		
+		if(this instanceof L2Attackable && attacker.getActingPlayer() != null) // simple check XD
+		{
+			DmgInfo lastDmg = _agroMap.containsKey(attacker) ? _agroMap.get(attacker) : new DmgInfo(attacker);
+			lastDmg.dmg += i;
+			_agroMap.put(attacker, lastDmg);
+		}
	}
	public void reduceCurrentMp(double i) { getStatus().reduceMp(i); }
	public void removeStatusListener(L2Character object) { getStatus().removeStatusListener(object); }

 

There u go simple, clean and precise.

 

Tried to adapt it to l2jfree but I get this error now (mob doesnt die anymore):

 

WARNING [24 Mar 21:56:26,928] com.l2jfree.util.concurrent.ExecuteWrapper.execute(): Exception in a Runnable execution:

java.lang.NullPointerException

at com.l2jfree.gameserver.model.actor.L2Character.doDie(L2Character.java:2030)

at com.l2jfree.gameserver.model.actor.L2Npc.doDie(L2Npc.java:2638)

at com.l2jfree.gameserver.model.actor.L2Attackable.doDie(L2Attackable.java:422)

at com.l2jfree.gameserver.model.actor.instance.L2MonsterInstance.doDie(L2MonsterInstance.java:214)

at com.l2jfree.gameserver.model.actor.status.CharStatus.reduceHp0(CharStatus.java:268)

at com.l2jfree.gameserver.model.actor.status.NpcStatus.reduceHp0(NpcStatus.java:32)

at com.l2jfree.gameserver.model.actor.status.AttackableStatus.reduceHp0(AttackableStatus.java:85)

at com.l2jfree.gameserver.model.actor.status.CharStatus.reduceHp(CharStatus.java:227)

at com.l2jfree.gameserver.model.actor.status.CharStatus.reduceHp(CharStatus.java:219)

at com.l2jfree.gameserver.model.actor.status.CharStatus.reduceHp(CharStatus.java:210)

at com.l2jfree.gameserver.model.actor.L2Character.reduceCurrentHp(L2Character.java:6707)

at com.l2jfree.gameserver.model.actor.L2Character.onHitTimer(L2Character.java:5237)

at com.l2jfree.gameserver.model.actor.L2Character$HitTask.run(L2Character.java:2785)

at com.l2jfree.util.concurrent.ExecuteWrapper.execute(ExecuteWrapper.java:59)

at com.l2jfree.util.concurrent.ExecuteWrapper.run(ExecuteWrapper.java:40)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)

at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

at java.util.concurrent.FutureTask.run(FutureTask.java:138)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:207)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)

at java.lang.Thread.run(Thread.java:619)

 

???

  • 0
Posted

I tried to add it but it didn't worked.

It would be easier if it just gives the reward to the player who has the aggro on him, I think...

 

ex. calculateRewards(killer);

Somehow to change it and give the reward to the guy who has the aggro instead of the killer...

that must work on gracja final l2j nightly files becouse i test it, if you use my script you need copy config from compiled files and write ther moobs who will be work with "best dmg reward"

  • 0
Posted

The problem with this code is that a clever player could do adequate damage, move to next mob and let others finish it.

Especially if ur server uses custom raids or something that gives huge drop.

 

Could u tell me if u are using auto loot, or drops are on the ground?

 

hint: get.mostHated()

  • 0
Posted

Index: E:/L2j Development/workspace/L2_GameServer-clean/java/com/l2jserver/gameserver/model/actor/L2Character.java
===================================================================
--- E:/L2j Development/workspace/L2_GameServer-clean/java/com/l2jserver/gameserver/model/actor/L2Character.java	(revision 4014)
+++ E:/L2j Development/workspace/L2_GameServer-clean/java/com/l2jserver/gameserver/model/actor/L2Character.java	(working copy)
@@ -2087,7 +2087,20 @@
         
         if (this instanceof L2PcInstance && ((L2PcInstance)this).getAgathionId() != 0)
         	((L2PcInstance)this).setAgathionId(0);
-		calculateRewards(killer);
+        
+        DmgInfo dmger = null;
+        double dmg = 0;
+        
+        for(DmgInfo dmgs : _agroMap.values())
+        {
+        	if(dmgs.dmg > dmg)
+        	{
+        		dmg = dmgs.dmg;
+        		dmger = dmgs;
+        	}
+        }
+        
+		calculateRewards(dmger.attacker != null ? _agroMap.get(dmg).attacker : killer);
+		_agroMap.clear();
		// Send the Server->Client packet StatusUpdate with current HP and MP to all other L2PcInstance to inform
		broadcastStatusUpdate();
@@ -6777,8 +6790,8 @@
	public final int getWalkSpeed() { return getStat().getWalkSpeed(); }
	public int getWIT() { return getStat().getWIT(); }
	// =========================================================
-
-
+	class DmgInfo{ L2Character attacker; double dmg; public DmgInfo(L2Character att) { attacker = att; }}
+	private FastMap<L2Character, DmgInfo> _agroMap;
	// =========================================================
	// Status - NEED TO REMOVE ONCE L2CHARTATUS IS COMPLETE
	// Method - Public
@@ -6791,6 +6804,13 @@
			getStatus().reduceHp(i/Config.L2JMOD_CHAMPION_HP, attacker, awake, isDOT, false);
		else
			getStatus().reduceHp(i, attacker, awake, isDOT, false);
+		
+		if(this instanceof L2Attackable && attacker.getActingPlayer() != null) // simple check XD
+		{
+			DmgInfo lastDmg = _agroMap.containsKey(attacker) ? _agroMap.get(attacker) : new DmgInfo(attacker);
+			lastDmg.dmg += i;
+			_agroMap.put(attacker, lastDmg);
+		}
	}
	public void reduceCurrentMp(double i) { getStatus().reduceMp(i); }
	public void removeStatusListener(L2Character object) { getStatus().removeStatusListener(object); }

 

There u go simple, clean and precise.

 

What changes can i do ? Cuz doesn't work on interlude.

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

    • Hi I would like to buy your panel, please reach me out from discord: doncarlo thanks in advance 🙂
    • Hi,   I am looking for experienced L2J developer who can handle Java work – systems, shops, buffer, custom features and client-side edits. Paid work. If you are interested, contact me: Discord: doncarlo
    • Hi all, I am looking for very experienced L2J developer to join and help with my Lineage 2 Interlude project (server launching soon). What I need: Build and manage shop system (manager shops) Buffer service, GM shop, custom services Good understanding of server-side (L2J) and also client-side edits Clean, stable and professional work (no random fixes) Important: Must have real experience with L2J / Interlude Must understand how to properly structure systems, not just copy-paste This is paid work, I respect your time and effort. If you are serious and experienced, contact me on Discord: doncarlo Thanks.    
    • Hey, I went through your NimeraCP and honestly, it looks really solid. Instantly bought for my server! Compared to most L2 panels, this is on a completely different level — the UI is clean, modern, and doesn’t feel like some 15-year-old system. I really like how everything is in one place — shop, referrals, rewards, roll & lucky wheel. The automation and real-time features (If you ask Splicho nicely, hahaha) are a big win too, since most panels are missing that. Overall though, great job. It feels like a next-gen panel, not just another copy. Definitely has the potential to be one of the top solutions in the L2 scene.
    • Helloo i was wonder if in interlude there is a way to increase font ui size ?  becouse sometimes when i put the game in full screen all the bars buff inventory etc are very  small  and i dont see very good .. , some one know if i can edit something in system?
  • 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..