Jump to content

Recommended Posts

Posted (edited)
Hi, friends. I wonder how I can make a specific armor set to have hero aura as a set effect when the character equipped all 5 parts of the armor item.

But there are 2 points I want to make sure.

 

1. I don't want all armor set items but only 'specific' armor series to have this effect. (e.g. elegia armor set only)

2. I don't want the character gain neither the hero's abilities nor skill but just the aura effect.

 

I heard from somewhere else that I need to fix L2PcInstance, L2ArmorSet, and Inventory these 3 sources. But the problem is, I don't know

the source keywords.

So, I hope if anybody can show me the source keywords I have to put in and instructions if possible.

 

I found a youtube video that showing the best result I want.


Edited by flyfreedom87
Posted

@UserInfo.java

 

writeC(_activeChar.isHero() || (_activeChar.isGM() && Config.GM_HERO_AURA) ? 1 : 0); // 0x01: Hero Aura

 

There you can do your tricks.

Posted (edited)

Oh... I found the source keyword in userinfo.java and tried to do something with it , but just like I said, I want to add Hero Aura as set effect on specific amor sets. Are you sure that by fixing UserInfo.java, it can even handle the set conditions of armor items?

Edited by flyfreedom87
Posted (edited)

@UserInfo.java

 

writeC(_activeChar.isHero() || (_activeChar.isGM() && Config.GM_HERO_AURA) ? 1 : 0); // 0x01: Hero Aura

 

There you can do your tricks.

I didn't test it but I think should work:

in CharInfo.java and UserInfo.java replace line :

 

writeC((_activeChar.isHero() || (_activeChar.isGM() && Config.GM_HERO_AURA)) ? 1 : 0); // Hero Aura

 

 

with this:

 

if (_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD)==helmId &&
_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES) == glovesId &&
_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST) == chestId &&
_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS) == legsId &&
_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET) == feetId)
{
writeC(1);
}
else
{
writeC((_activeChar.isHero() || (_activeChar.isGM() && Config.GM_HERO_AURA)) ? 1 : 0); // Hero Aura
}
 
where: helmId = Id of helm in your set, glovesId = id of gloves in your set and so on...;P

Hero skills will not be given. Only aura

Edited by SSnakEE
Posted

I just tested it, but it doesn't work. After I applied it, character's name color changed to black and that's it, when equipped all 5 pieces of armor item, no hero aura appeared.

Hmm, i tested It now, and it works :P 

UserInfo.java: (you see hero aura on yourself)

 

if (_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HEAD)==helmId &&
_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES) ==glovesId &&
_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST) == chestId &&
activeChar.getInventory()..getPaperdollItemId(Inventory.PAPERDOLL_LEGS) == legsId &&
_activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_FEET) == bootsId)
{
writeC(1);
}
else
{
writeC((_activeChar.isHero() || (_activeChar.isGM() && Config.GM_HERO_AURA)) ? 1 : 0); // Hero Aura
}

 

CharInfo.java (other players see hero aura on you)

 

if (_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD)==helmId &&
_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES) ==glovesId &&
_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST) == chestId &&
_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS) == legsId &&
_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET) == bootsId)
{
writeC(1);
}
else
{
writeC((_activeChar.isHero() || (_activeChar.isGM() && Config.GM_HERO_AURA)) ? 1 : 0); // Hero Aura
}

 

Posted (edited)

YEAH~! I found that I should copy and paste the source keywords of UserInfo.java for both UserInfo and CharInfo java files. And it works perfect~!!

Here is my last question, if I want to set this option to more than 2 set armors (Elegia, Versper, Vopal...etc), what should I change?

Edited by flyfreedom87
Posted

YEAH~! I found that I should copy and paste the source keywords of UserInfo.java for both UserInfo and CharInfo java files. And it works perfect~!!

Here is my last question, if I want to set this option to more than 2 set armors (Elegia, Versper, Vopal...etc), what should I change?

You can do same like with one set just add "else if" for more sets eg:

if (_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD)==elegiaHelmId &&

_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES) ==elegiaGlovesId &&
_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST) == elegiaChestId &&
_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS) == elegiaLegsId &&
_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET) == elegiaBootsId)
{

writeC(1);

}

else if (_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD)==vorpalHelmId &&

_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES) ==vorpalGlovesId &&
_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST) == vorpalChestId &&
_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS) == vorpalLegsId &&
_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET) == vorpalBootsId)
{
writeC(1);
}
else
{
writeC((_activeChar.isHero() || (_activeChar.isGM() && Config.GM_HERO_AURA)) ? 1 : 0); // Hero Aura
}

 

or 2nd way, for less code use build in classes to check sets:

 

final ArmorSet elegiaSet = ArmorSetsTable.getInstance().getSet(elegiaChestId);
final ArmorSet vorpalSet = ArmorSetsTable.getInstance().getSet(vorpalChestId);
// more sets here
if (elegiaSet.containAll(_activeChar) && _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST)==elegiaChestId )
{
writeC(1);
}
else if  (vorpalSet.containAll(_activeChar) && _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_CHEST)==vorpalChestId )
{
writeC(1);
}
//else if for more sets ...
else
{
writeC(_activeChar.isHero() || (_activeChar.isGM() && Config.GM_HERO_AURA) ? 1 : 0); // 0x01: Hero Aura
}
Posted (edited)

I did as your e.g. but when I copy & paste _inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET) == vorpalBootsId)... these parts, an error message appeared say: '_inv cannot be resolved' with some suggested solutions, among them I tried 'Create field '_inv'' and 'Create constant '_inv'' but it didn't work. I wonder how did you handle this problem?

Edited by flyfreedom87
Posted (edited)

Notice that in "UserInfo.java" you use: _activeChar.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_GLOVES)
while in "CharInfo.java" it is: _inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES)

 

Edited by SSnakEE
Posted (edited)

Hmm, I got the _inv error exactly when I input the keywords into the "CharInfo.java". I don't know why but, fortunately I found that  _activeChar.getInventory() is work both "UserInfo.java" and "CharInfo.java" and the result is what I wanted.

 Anyway, without your help SSnakEE, I could never get it done. I really appreciate your kind answers. Thank you my friend~!! ;D

The post can be locked now.

Edited by flyfreedom87

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

    • And Discord: https://discord.gg/3aYqWNqb
    • Ofc: https://discord.gg/3aYqWNqb
    • You can find some H5 skins shared in old L2 modding Discords, but most of the higher‑quality ones are either paid or come bundled with full client edits. I usually mix in commissioned work and whatever I can patch myself. On a side note, I fund a lot of these commissions by selling off game items through instant sell cs2 skins, which has been a quick way for me to get some cash for projects.
    • There is no need for gRPC in this case, even tho originally it was gRPC based but since we don't need it to be bi-directional, we switched to simple http requests for the web calls and SSEs for the data streamed from the server. There are distributed locks in place to precent race conditions between actions that can happen between multiple web instances and the server.   Local models can also be slow depending on the model, and most external models can actually be faster than local ones if you use Flash 2.5 or something along those lines. I am running on 512GB of Unified Memory on my Mac Studio M3 Ultra so the speed of the local model for a small model is pretty good but I tested it with Gemini too and it works equally as fast and in some cases faster. The way it works is that I'm using pgvector (one of the benefits of moving to Postgres) to search the data and see what the player can see etc and there is some batching of the next few actions for 2-4 seconds for the user until the next LLM request fires. The batching also includes branching on logic so if they for example fall under some HP they will move to kiting instead of attacking or maybe they heal etc.   Everything is authed and permission-based. The server and the backend of the frontend have secure communication between them, either with a symmetric key (not recommended for production) or a certificate (the recommended way), so there is no worry. It's all tied to the account's access level, etc., so nobody can make an action that they normally wouldn't be allowed to do. Even the MCP is token-based, and there are prompt injection protections in place. The MCP is audited, and every mutation needs confirmation. The admin area is only accessible to the admin account anyway so normal users can't access it.  
  • 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..