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

    • https://imgur.com/a/fKImwjQL2-Getwork server highly customized with high-stats https://l2server.eu/ https://discord.gg/SsVhm7R Rates: L2 High Five fully customized Getwork Style with High Stats and Enchant ExP/Sp: 75x (custom) Drop/Spoil: 1x (custom) Safe: 500 Max: 50 000   Enchant System: Normal Scrolls: 93% - fail - decrease enchant by 20 Blessed Scrolls: 96% - fail - decrease enchant by 10   Armor Max Enchant D-Grade: +1000 Max Enchant C-Grade: +2000 Max Enchant B-Grade: +3000 Max Enchant A-Grade: +4000 Max Enchant S-Grade: +5000   Weapons Max Enchant D-Grade: +5000 Max Enchant C-Grade: +10000 Max Enchant B-Grade: +15000 Max Enchant A-Grade: +20000 Max Enchant S-Grade: +25000 - 50000   Fir Tree Branch (Weapon): +100 into Weapons (max 50 000) Fir Tree Branch (Armor): +15 into Armor (max 5000) Road to Dvc Cloak Enchant: +1 into cloak (max +1000) Masks of Spirit/Demon Horns Enchants: +1 into Masks (max +10) Each accessories has different max enchant and chances Daily Missions (.missions) Collections (ALT + B) Gambling System(.gamble) - each pack cost different amount Gamble Points, different items How to get gambling points? - by killing Raid Bosses/Events or Completing Daily Missions. Clan Bonus VIP Bonuses (maximum level 10) Battlepass (maximum level 100) - by killing monsters Rebirth (starting in Parnassus) Everything in ALT+B Master's Buffs - 100 Small Glass Box (1 buff) Farm Zones: Custom Farm Zones: Ruin of Agony (Exp Zone) Underground Coliseum (Safe Exp Zone) DVC,Brigand,Frost are similiar farm zones with same monsters Dvc Brigand Stronghold Frost Lake Parnassus - TOP ZONE some of our features: .gamble,collections,battlepass,talent tree, rebirth   [img]https://i.imgur.com/YuXDD3G.png[/img]    
    • https://www.mediafire.com/file/l905r1sd84hnovf/FileEdit.rar/file
  • 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