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

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.

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.




  • Posts

    • you can use my share Dress me item  
    • I haven't played L2 in many years but was recently talking to some old friends from back in the day (supreme / azure, paradise) and we thought we would try playing together again. Checked out official and it has went full on P2W and bot infested, not interested. Private servers seem to be pretty volatile and the community fragmented, we have not been able to find a server or community that has the right vibe.   So us old farts decided why the hell not build our own server and see if we can pull in some of those old day vibes and magic, maybe get a good community built. Maybe that magic is gone forever, that comraderie that we shared in the old days. But I think it is likely there is a lot of players out there just like our little group from the old days that made lifelong friendships in all those 100s and 1000s of hours we spent together in the game together.   I have reached out to some developer friends from back in the day and have one that has come on board, probably one of the most OG OFF devs out there, pretty stoked about that, he never stopped L2 developing for all these years, wild. I can't think of too many other games that evoke such loyalty and love of the game.   So, the choice has been made, and the journey begins. We have really solid and battle tested H5 files so we will roll with those. We are not using any pack with locked down extender, we have all the flexibility we need to make changes, fixes, add features, etc. Also have a great antibot and box limiting system as well as active GMs so bots impact should be pretty min imal. Do have some features that we will be adding but I'll keep those under my hat.      What do you guys think, you think there is enough of that old-school magic left out there to have a server and community of the old days?
    • We create legends in the dark, leading the light into the worlds Base - l2jmobius Chronicles HIGH-FIVE     https://gitea.com/Debug/ShadowCraftCore
    • We create legends in the dark, leading the light into the worlds Base - l2jmobius Chronicles HIGH-FIVE     https://gitea.com/Debug/ShadowCraftCore
    • ➡ Discount for your purchase: MAY2025 (10% discount) ➡ Our Online Shop: https://socnet.store  ➡ Our SMM-Boosting Panel: https://socnet.pro  ➡ Telegram Shop Bot: https://socnet.shop  ➡ Telegram Support: https://t.me/solomon_bog  ➡ Telegram Channel: https://t.me/accsforyou_shop  ➡ Discord Support: @AllSocialNetworksShop  ➡ Discord Server: https://discord.gg/y9AStFFsrh  ➡ WhatsApp Support: https://wa.me/79051904467 ➡ WhatsApp Channel: https://whatsapp.com/channel/0029Vau0CMX002TGkD4uHa2n  ➡ Email Support: 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