Jump to content

Recommended Posts

Posted

When 2 or more cardinals or other healers in one party the heal gets nerfed

net.sf.l2j.gameserver.handler.skillhandlers.heal.java

public void useSkill(Creature activeChar, L2Skill skill, WorldObject[] targets)
    {
        
        +int healers = 0;
        +int minus = 2;
        +
    +    if (activeChar.getParty() != null)
        +{
        +    for (Player player : activeChar.getParty().getMembers())
        +    {
        +        if (player != null && player.getClassId().getId() == 97)
            +    {
            +        healers++;
            +        
            +        if (minus != 2 && (player.getPvpFlag() != 0 || player.getKarma() > 0))
            +            minus = 2;
        +        }
        +    }
        +}

//go here

        hp = power;
                    hp *= target.calcStat(Stats.HEAL_EFFECTIVNESS, 100, null, null) / 100;
                    
            }
//and paste this too

        +if (healers >= 2) // 2 or more healers in party
            +{
            +    int nerfValue = (2 + (healers - minus));
            +    hp /= nerfValue;
        +    }
            
            // If you have full HP and you get HP buff, u will receive 0HP restored message

Posted

Do you realize that your int minus is always 2 and so, your check under a loop is redundant? And null check under a loop is also kinda useless. 

Posted (edited)
32 minutes ago, camenomat0 said:

Well, but what's the point? With the same logic, make a 3 Archer Pt do less crt. damage,or have less range.

The point is the share ;) Btw not bad idea about archers :P

 

@OnTopic

As sweets said you have useless checks and variables, You can update your post. Something like that would be better

 

 

### Eclipse Workspace Patch 1.0
#P aCis_gameserver
Index: java/net/sf/l2j/gameserver/handler/skillhandlers/Heal.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/skillhandlers/Heal.java	(revision 3)
+++ java/net/sf/l2j/gameserver/handler/skillhandlers/Heal.java	(working copy)
@@ -1,5 +1,7 @@
 package net.sf.l2j.gameserver.handler.skillhandlers;
 
+import java.util.stream.Collectors;
+
 import net.sf.l2j.gameserver.handler.ISkillHandler;
 import net.sf.l2j.gameserver.handler.SkillHandler;
 import net.sf.l2j.gameserver.model.L2Skill;
@@ -111,6 +113,10 @@
 					hp *= target.calcStat(Stats.HEAL_EFFECTIVNESS, 100, null, null) / 100;
 			}
 			
+			final int healers = activeChar.getParty() == null ? 0 : activeChar.getParty().getMembers().stream().filter(mem -> mem.getClassId().getId() == 97).collect(Collectors.toList()).size();
+			if (healers >= 2)
+				hp /= healers;
+			
 			// If you have full HP and you get HP buff, u will receive 0HP restored message
 			if ((target.getCurrentHp() + hp) >= target.getMaxHp())
 				hp = target.getMaxHp() - target.getCurrentHp();

 

Edited by melron
  • Thanks 1
Posted (edited)

Where should i start and where should i end. 

I'll just write down that the whole thing you did can be done in 1 row more correctly. Cause basically no matter how many healers you have you always divine

by two since is static and does not increase in loop.

hp = hp / (activeChar.getParty() !=null ? activeChar.getParty().getPartyMembers().parallelStream().filter((player) -> player.getClassId().getId() == 97).count() : 1);

if (hp < 0){
 hp = 0;           
}

 

Edited by Evie Frye
Posted
29 minutes ago, SweeTs said:

@Evie Frye wanted to be a badass and used parallelStream, even if it has a much higher overhead compared to a sequential one. Don't be like Evie :(

 

@SweeTs I came, I saw, I conquered, thank you and goodnight.  

 

 

Posted
1 hour ago, Evie Frye said:

Where should i start and where should i end. 

I'll just write down that the whole thing you did can be done in 1 row more correctly. Cause basically no matter how many healers you have you always divine

by two since is static and does not increase in loop.


hp = hp % (activeChar.getParty() !=null ? activeChar.getParty().getPartyMembers().parallelStream().filter((player) -> player.getClassId().getId() == 99).count() : 1);

if (hp < 0){
 hp = 0;           
}

 

 

Great Job as always,such unique way fixing things.

49 minutes ago, SweeTs said:

@Evie Frye wanted to be a badass and used parallelStream, even if it has a much higher overhead compared to a sequential one. Don't be like Evie :(

 

No one can be like that.

  • Like 1
Posted
4 minutes ago, melron said:

my eyes are bleeding and stop spamming

 

yo budd, he did a good job fixing it and just mentioned it as the code looks nice,is not spam or anything,always on topic replies, never went off topic so please stop repeat yourselfe.Stop try to create drama for no reason, peace.

 

 

Posted
1 minute ago, camenomat0 said:

 

yo budd, he did a good job fixing it and just mentioned it as the code looks nice,is not spam or anything,always on topic replies, never went off topic so please stop repeat yourselfe.Stop try to create drama for no reason, peace.

 

He speaks for the topic owner.. The way he wrote the code is bleh. 

Posted (edited)
16 minutes ago, camenomat0 said:

 

yo budd, he did a good job fixing it and just mentioned it as the code looks nice,is not spam or anything,always on topic replies, never went off topic so please stop repeat yourselfe.Stop try to create drama for no reason, peace.

 

 

My answer was not only for this topic. peace

 

p.s the bleeding eyes thing wasn't for u

 

p.s2 how do you know if his code is good or not? With a small glance his code will give 0 heal if 2 or more healers found int the party

 

Proof:

858 heal % 3 (healers) ? 

 

result is 0...

 

Evie probably made a mistake and wanted to divide (/=)  instead of modulo...

Edited by melron
Posted (edited)
16 minutes ago, melron said:

My answer was not only for this topic. peace

 

p.s the bleeding eyes thing wasn't for u

 

p.s2 how do you know if his code is good or not? With a small glance his code will give 0 heal if 2 or more healers found int he game

 

Proof:

858 heal % 3 (healers) ? 

 

result is 0...

 

Evie probably made a mistake and wanted to divide (/=)  instead of ...

 

I wrote % instead of / (fixed also in my main post). 

About @SweeTs true Steam is slower and generally function forEach is slower than a normal loop but for such a small code won't affect much. We all know

VM is slow as fuck but let's no exaggerate.

Edited by Evie Frye
Posted (edited)
59 minutes ago, Evie Frye said:

 

We all know

VM is slow as fuck but let's no exaggerate.

Idk where you read this, we're not in 2006 btw.

Edited by An4rchy
Posted

1.4 mass heal if healer is 2 bad code.. i know heal give 2.1k heal if pt have 3 healers? give 800 hp ?

all party match is die. and dont forget l2 no have only heal's you can fix debuff. stun, silence, fear

all this.

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

    • New implementations   Autofarm complete system with time limit fully configurable   Tournament 1vs1 ( not instanced ) With queue fully configurable ( possibility to run all day or 2 different hours for example Latin/Europe   Fortress vs Fortress event automated with top killer reward , protections and fully configurable with seperated .ini   And more
    • Anybody has these monsters ripped from the latest chronicle lineagemonsters14.volcanic_archer_m00 lineagemonsters14.volcanic_ice_m00 lineagemonsters14.volcanic_magic_m00 lineagemonsters14.volcanic_warrior_m00 lineagemonsters14.volcanic_boss_m00  
    • this is literally like such bad advice? i dont thikn you understand the question..   node_begin name=[Ability] type=5 sub_node_begin paramType=100 unk=0 nodeName=[Type] int_params={1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;2;2;2;2;2;2;2;2;2;2;2;2;2;2;2;2;2;2;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3;3} sub_node_end sub_node_begin paramType=100 unk=0 nodeName=[SkillID] int_params={19233;19234;19235;19236;19237;19238;19239;19240;19241;19242;19243;19244;19245;19246;19247;19248;19249;19250;19251;19252;19253;19254;19255;19256;19257;19258;19259;19260;19261;19262;19263;19264;19265;19266;19267;19268;19269;19270;19271;19272;19273;19274;19275;19276;19277;19278;19279;19280;19281;19282;19283;19284;19285;19286;19287;19288;19289} sub_node_end sub_node_begin paramType=100 unk=0 nodeName=[SkillLev] int_params={3;3;3;3;2;2;2;2;4;1;4;1;2;2;2;2;2;1;1;2;1;2;4;4;3;2;3;1;3;2;3;1;2;2;1;2;2;2;2;1;2;3;3;3;3;1;3;2;1;2;2;2;2;2;2;2;1} sub_node_end sub_node_begin paramType=100 unk=0 nodeName=[Depth] int_params={1;1;1;1;2;2;2;2;3;3;3;3;4;4;4;4;5;5;5;5;6;1;1;1;2;2;2;2;3;3;3;3;4;4;4;4;5;5;5;6;1;1;1;2;2;2;3;3;3;4;4;4;4;5;5;5;6} sub_node_end sub_node_begin paramType=100 unk=0 nodeName=[Column] int_params={1;2;3;4;1;2;3;4;1;2;3;4;1;2;3;4;1;2;3;4;2;1;2;4;1;2;3;4;1;2;3;4;1;2;3;4;1;2;4;2;1;2;4;1;3;4;1;2;4;1;2;3;4;1;2;4;2} sub_node_end sub_node_begin paramType=100 unk=0 nodeName=[RequireLev] int_params={85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85;85} sub_node_end sub_node_begin paramType=100 unk=0 nodeName=[RequireSkillID] int_params={0;0;0;0;0;0;0;19236;19237;0;19239;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;19257;0;19259;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;19276;0;0;0;0;0;0;0;0;0;0} sub_node_end sub_node_begin paramType=100 unk=0 nodeName=[RequireSkillLev] int_params={0;0;0;0;0;0;0;3;2;0;2;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;3;0;3;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;3;0;0;0;0;0;0;0;0;0;0} sub_node_end sub_node_begin paramType=100 unk=0 nodeName=[RequireCount] int_params={0;0;0;0;5;5;5;5;10;10;10;10;15;15;15;15;20;20;20;20;25;0;0;0;5;5;5;5;10;10;10;10;15;15;15;15;20;20;20;25;0;0;0;5;5;5;10;10;10;15;15;15;15;20;20;20;25} sub_node_end sub_node_begin paramType=115 unk=0 nodeName=[Name] string_params={[Guardian's Shield];[Guardian's Magic Barrier];[Guardian's Body];[Guardian's Elemental Cover];[Guardian's Armor Defense];[Guardian's Leather Defense];[Guardian's Tunic Defense];[Guardian's Resistance];[Guardian's Life];[Guardian's Block];[Guardian's Armor];[Guardian's Guidance];[Guardian's Death Shield];[Guardian's Focus Shield];[Guardian's Mind Control];[Guardian's Blessing];[Guardian's Binding Cover];[Guardian's Spirit];[Guardian's Potential];[Guardian's Expert Potion];[Guardian's Defense Master];[Berserker's Haste];[Berserker's Might];[Berserker's Elemental Attack];[Berserker's Craft Focus];[Berserker's Backfire];[Berserker's Focus];[Berserker's Cost];[Berserker's Craft Death];[Berserker's Mortal];[Berserker's Death Whisper];[Berserker's Eagle];[Berserker's Battle];[Berserker's Fire];[Berserker's Skill Reduction];[Berserker's Blessing];[Berserker's Binding Attack];[Berserker's Divine Attack];[Berserker's Expert Potion];[Berserker's Combat Master];[Magician's Acumen];[Magician's Empower];[Magician's Elemental Shot];[Magician's Wild Magic];[Magician's Condition];[Magician's Eva];[Magician's Mystic];[Magician's Prominence];[Magician's Sight];[Magician's Protection];[Magician's Water];[Magician's Magic Reduction];[Magician's Blessing];[Magician's Binding Shot];[Magician's Divine Shot];[Magician's Expert Potion];[Magician's Spell Master]} sub_node_end sub_node_begin paramType=115 unk=0 nodeName=[Icon] string_params={[icon.skill19120];[icon.skill19121];[icon.skill1045];[icon.skill1352];[icon.skill0231];[icon.skill0233];[icon.skill0234];[icon.skill1354];[icon.skill1229];[icon.skill1304];[icon.skill19165];[icon.skill19127];[icon.skill1542];[icon.skill0986];[icon.skill19132];[icon.skill_exp_sp_up];[icon.skill0335];[icon.skill10044];[icon.skill1532];[icon.skill_potion_up];[icon.skill0528];[icon.skill1086];[icon.skill19139];[icon.skill19130];[icon.skill0193];[icon.skill0030];[icon.skill1077];[icon.skill19140];[icon.skill10655];[icon.skill0330];[icon.skill4278];[icon.skill19127];[icon.skill1388];[icon.skill1356];[icon.skill0758];[icon.skill_exp_sp_up];[icon.skill0983];[icon.skill11011];[icon.skill_potion_up];[icon.skill1499];[icon.skill1085];[icon.skill1059];[icon.skill19130];[icon.skill1303];[icon.skill1501];[icon.skill0214];[icon.skill19160];[icon.skill0330];[icon.skill19127];[icon.skill0046];[icon.skill1355];[icon.skill0945];[icon.skill_exp_sp_up];[icon.skill0983];[icon.skill11011];[icon.skill_potion_up];[icon.skill1500]} sub_node_end sub_node_begin paramType=115 unk=0 nodeName=[IconPanel] string_params={[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_blessed];[icon.pannel_pupple];[icon.pannel_pupple];[icon.pannel_pupple];[icon.pannel_pupple];[icon.pannel_pupple];[icon.pannel_pupple];[icon.pannel_pupple];[icon.pannel_pupple];[icon.pannel_pupple];[icon.pannel_pupple];[icon.pannel_pupple];[icon.pannel_pupple];[icon.pannel_pupple];[icon.pannel_pupple];[icon.pannel_pupple];[icon.pannel_pupple];[icon.pannel_pupple];[icon.pannel_pupple];[icon.pannel_pupple];[icon.panel_2];[icon.panel_2];[icon.panel_2];[icon.panel_2];[icon.panel_2];[icon.panel_2];[icon.panel_2];[icon.panel_2];[icon.panel_2];[icon.panel_2];[icon.panel_2];[icon.panel_2];[icon.panel_2];[icon.panel_2];[icon.panel_2];[icon.panel_2];[icon.panel_2]} sub_node_end sub_node_begin paramType=109 unk=0 nodeName=[LevelDesc] array_params={{[P. Def. + 2%];[P. Def. + 4%];[P. Def. + 7%]};{[M. Def. + 2%];[M. Def. + 4%];[M. Def. + 7%]};{[Max HP + 3%];[Max HP + 6%];[Max HP + 9%]};{[All Attribute Defense + 15];[All Attribute Defense + 25];[All Attribute Defense + 40]};{[When equipping Heavy Armor <br>P./M. Def. + 3%];[When equipping Heavy Armor <br>P./M. Def. + 6%]};{[When equipping Light Armor <br>P./M. Def. + 3%];[When equipping Light Armor <br>P./M. Def. + 6%]};{[When equipping Robe <br>P./M. Def. + 3%];[When equipping Robe <br>P./M. Def. + 6%]};{[Debuff Resistance + 5%];[Debuff Resistance + 10%]};{[Max HP + 3%];[Max HP + 6%];[Max HP + 10%];[Max HP + 15%]};{[Shield Defense + 100%]};{[P. Def. + 2%];[P. Def. + 4%];[P. Def. + 8%];[P. Def. + 12%]};{[P. Accuracy, M. Accuracy,<br>servitor's P. Accuracy + 12.<br>Enchants Revelation skill]};{[Received P. Critical Damage - 10%];[Received P. Critical Damage - 20%]};{[Chance of receiving P. Critical Damage - 15%];[Chance of receiving P. Critical Damage - 30%]};{[Skill Cooldown - 3%];[Skill Cooldown - 5%]};{[EXP, SP + 5%];[EXP, SP + 10%]};{[Received damage when immobilized - 7%];[Received damage when immobilized - 15%]};{[All Attribute Defense + 50]};{[Skill Critical Rate + 10%]};{[Recovery Potion, Elixir Effect + 500];[Recovery Potion, Elixir Effect + 1000]};{[Received Damage - 10%]};{[Atk. Spd. + 1%];[Atk. Spd. + 3%]};{[P. Atk. + 1%];[P. Atk. + 2%];[P. Atk. + 3%];[P. Atk. + 4%]};{[Attack Attribute + 10];[Attack Attribute + 20];[Attack Attribute + 30];[Attack Attribute + 40]};{[P. Skill Critical Rate + 3%];[P. Skill Critical Rate + 6%];[P. Skill Critical Rate + 10%]};{[Rear Damage + 2%];[Rear Damage + 5%]};{[P. Critical Rate + 10];[P. Critical Rate + 20];[P. Critical Rate + 40]};{[Skill MP Consumption - 5%]};{[P. Skill Critical Damage + 2%];[P. Skill Critical Damage + 4%];[P. Skill Critical Damage + 7%]};{[Skill Mastery Rate + 30%];[Skill Mastery Rate + 60%]};{[P. Critical Damage + 2%];[P. Critical Damage + 4%];[P. Critical Damage + 7%]};{[P. Accuracy, M. Accuracy,<br>servitor's P. Accuracy + 12.<br>Enchants Revelation skill]};{[P. Atk. + 3%];[P. Atk. + 6%]};{[P. Skill Power + 2%];[P. Skill Power + 5%]};{[Skill Cooldown - 3%]};{[EXP, SP + 5%];[EXP, SP + 10%]};{[Damage to immobilized<br>targets + 5%];[Damage to immobilized<br>targets + 10%]};{[Attack Attribute + 25];[Attack Attribute + 50]};{[Recovery Potion, Elixir Effect + 500];[Recovery Potion, Elixir Effect + 1000]};{[Damage + 10%]};{[Casting Spd. + 2%];[Casting Spd. + 4%]};{[M. Atk. + 2%];[M. Atk. + 5%];[M. Atk. + 8%]};{[Attack Attribute + 10];[Attack Attribute + 20];[Attack Attribute + 40]};{[M. Critical Rate + 10];[M. Critical Rate + 20];[M. Critical Rate + 40]};{[Max HP, MP + 3%];[Max HP, MP + 6%];[Max HP, MP + 9%]};{[Skill MP Consumption - 5%]};{[M. Critical Damage + 3%];[M. Critical Damage + 6%];[M. Critical Damage + 10%]};{[Skill Mastery Rate + 30%];[Skill Mastery Rate + 60%]};{[P. Accuracy, M. Accuracy,<br>servitor's P. Accuracy + 12.<br>Enchants Revelation skill]};{[Mental, Stun, Aerial Yoke<br>Success Rate + 5%];[Mental, Stun, Aerial Yoke<br>Success Rate + 10%]};{[M. Skill Power + 2%];[M. Skill Power + 5%]};{[Skill Cooldown - 3%];[Skill Cooldown - 5%]};{[EXP, SP + 5%];[EXP, SP + 10%]};{[Damage to Immobile<br>Opponents + 5%];[Damage to Immobile<br>Opponents + 10%]};{[Attack Attribute + 25];[Attack Attribute + 50]};{[Recovery Potion, Elixir Effect + 500];[Recovery Potion, Elixir Effect + 1000]};{[Damage + 10%]}} sub_node_end node_end @babyjason in regards to your post ><
  • 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..