Jump to content
  • 0

[Request] NPC Crests


Question

Posted

Hello ....i saw this but is for gracia ....someone to make it for interlude ? can?

 

Index: java/config/NPC.properties

===================================================================

--- java/config/NPC.properties (revision 4129)

+++ java/config/NPC.properties (working copy)

@@ -46,6 +46,10 @@

# Default: False

ShowNpcLevel = False

 

+# Show clan, alliance crests for territory NPCs without quests

+# Default: False

+ShowCrestWithoutQuest = False

+

# Do you want mobs to drop Vitality resplenishing herbs?

# Notes:

# Works only if EnableVitality = True

Index: java/net/sf/l2j/gameserver/network/serverpackets/AbstractNpcInfo.java

===================================================================

--- java/net/sf/l2j/gameserver/network/serverpackets/AbstractNpcInfo.java (revision 4129)

+++ java/net/sf/l2j/gameserver/network/serverpackets/AbstractNpcInfo.java (working copy)

@@ -15,7 +15,10 @@

package net.sf.l2j.gameserver.network.serverpackets;

 

import net.sf.l2j.Config;

+import net.sf.l2j.gameserver.datatables.ClanTable;

import net.sf.l2j.gameserver.instancemanager.CursedWeaponsManager;

+import net.sf.l2j.gameserver.instancemanager.TownManager;

+import net.sf.l2j.gameserver.model.L2Clan;

import net.sf.l2j.gameserver.model.L2Transformation;

import net.sf.l2j.gameserver.model.actor.L2Character;

import net.sf.l2j.gameserver.model.actor.L2Decoy;

@@ -86,6 +89,10 @@

    public static class NpcInfo extends AbstractNpcInfo

    {

    private L2Npc _npc;

+    private int _clanCrest = 0;

+ private int _allyCrest = 0;

+ private int _allyId = 0;

+ private int _clanId = 0;

   

    public NpcInfo(L2Npc cha, L2Character attacker)

    {

@@ -108,15 +115,29 @@

        _title = cha.getTitle(); // On every subclass

 

            if (Config.SHOW_NPC_LVL && _npc instanceof L2MonsterInstance)

-        {

-    String t = "Lv " + cha.getLevel() + (cha.getAggroRange() > 0 ? "*" : "");

-    if (_title != null)

-    t += " " + _title;

-

-    _title = t;

-        }

-    }

+ {

+ String t = "Lv " + cha.getLevel() + (cha.getAggroRange() > 0 ? "*" : "");

+ if (_title != null)

+ t += " " + _title;

+

+ _title = t;

+ }

   

+    // npc crest of owning clan/ally of castle

+ if (cha instanceof L2Npc && cha.isInsideZone(L2Character.ZONE_TOWN) && (Config.SHOW_CREST_WITHOUT_QUEST || cha.getCastle().getShowNpcCrest()) && cha.getCastle().getOwnerId() != 0)

+ {

+ int townId = TownManager.getTown(_x, _y, _z).getTownId();

+ if (townId != 33 && townId != 22)

+ {

+ L2Clan clan = ClanTable.getInstance().getClan(cha.getCastle().getOwnerId());

+ _clanCrest = clan.getCrestId();

+ _clanId = clan.getClanId();

+ _allyCrest = clan.getAllyCrestId();

+ _allyId = clan.getAllyId();

+ }

+ }

+ }

+   

    @Override

protected void writeImpl()

{

Index: java/net/sf/l2j/Config.java

===================================================================

--- java/net/sf/l2j/Config.java (revision 4129)

+++ java/net/sf/l2j/Config.java (working copy)

@@ -629,6 +629,7 @@

public static boolean DEEPBLUE_DROP_RULES;

public static boolean DEEPBLUE_DROP_RULES_RAID;

public static boolean SHOW_NPC_LVL;

+ public static boolean SHOW_CREST_WITHOUT_QUEST;

public static boolean GUARD_ATTACK_AGGRO_MOB;

public static boolean ALLOW_WYVERN_UPGRADER;

public static String PET_RENT_NPC;

@@ -1669,6 +1670,7 @@

DEEPBLUE_DROP_RULES = Boolean.parseBoolean(NPC.getProperty("UseDeepBlueDropRules", "True"));

DEEPBLUE_DROP_RULES_RAID = Boolean.parseBoolean(NPC.getProperty("UseDeepBlueDropRulesRaid", "True"));

SHOW_NPC_LVL = Boolean.parseBoolean(NPC.getProperty("ShowNpcLevel", "False"));

+ SHOW_CREST_WITHOUT_QUEST = Boolean.parseBoolean(NPC.getProperty("ShowCrestWithoutQuest", "False"));

ENABLE_DROP_VITALITY_HERBS = Boolean.parseBoolean(NPC.getProperty("EnableVitalityHerbs", "True"));

GUARD_ATTACK_AGGRO_MOB = Boolean.parseBoolean(NPC.getProperty("GuardAttackAggroMob", "False"));

ALLOW_WYVERN_UPGRADER = Boolean.parseBoolean(NPC.getProperty("AllowWyvernUpgrader", "False"));

@@ -2270,6 +2272,7 @@

 

else if (pName.equalsIgnoreCase("ShowServerNews")) SERVER_NEWS = Boolean.parseBoolean(pValue);

else if (pName.equalsIgnoreCase("ShowNpcLevel")) SHOW_NPC_LVL = Boolean.parseBoolean(pValue);

+ else if (pName.equalsIgnoreCase("ShowCrestWithoutQuest")) SHOW_CREST_WITHOUT_QUEST = Boolean.parseBoolean(pValue);

 

else if (pName.equalsIgnoreCase("ForceInventoryUpdate")) FORCE_INVENTORY_UPDATE = Boolean.parseBoolean(pValue);

 

Index: java/net/sf/l2j/gameserver/model/entity/Castle.java

===================================================================

--- java/net/sf/l2j/gameserver/model/entity/Castle.java (revision 4129)

+++ java/net/sf/l2j/gameserver/model/entity/Castle.java (working copy)

@@ -85,6 +85,7 @@

private int _taxPercent = 0;

private double _taxRate = 0;

private long _treasury = 0;

+ private boolean _showNpcCrest = false;

private L2CastleZone _zone = null;

private L2CastleTeleportZone _teleZone;

private L2Clan _formerOwner = null;

@@ -531,6 +532,7 @@

}

 

updateOwnerInDB(clan); // Update in database

+ setShowNpcCrest(false);

 

// if clan have fortress, remove it

if (clan.getHasFort() > 0)

@@ -707,6 +709,8 @@

 

_taxPercent = rs.getInt("taxPercent");

_treasury = rs.getLong("treasury");

+

+ _showNpcCrest = rs.getBoolean("showNpcCrest");

}

rs.close();

statement.close();

@@ -1129,6 +1133,20 @@

return _treasury;

}

 

+ public final boolean getShowNpcCrest()

+ {

+ return _showNpcCrest;

+ }

+

+ public final void setShowNpcCrest(boolean showNpcCrest)

+ {

+ if (_showNpcCrest != showNpcCrest)

+ {

+ _showNpcCrest = showNpcCrest;

+ updateShowNpcCrest();

+ }

+ }

+

public List<SeedProduction> getSeedProduction(int period)

{

return (period == CastleManorManager.PERIOD_CURRENT ? _production : _productionNext);

@@ -1579,6 +1597,36 @@

}

}

 

+ public void updateShowNpcCrest()

+ {

+ Connection con = null;

+ PreparedStatement statement;

+ try

+ {

+ con = L2DatabaseFactory.getInstance().getConnection();

+

+ statement = con.prepareStatement("UPDATE castle SET showNpcCrest = ? WHERE id = ?");

+ statement.setString(1, String.valueOf(getShowNpcCrest()));

+ statement.setInt(2, getCastleId());

+ statement.execute();

+ statement.close();

+ }

+ catch (Exception e)

+ {

+ _log.info("Error saving showNpcCrest for castle " + getName() + ": " + e.getMessage());

+ }

+ finally

+ {

+ try

+ {

+ con.close();

+ }

+ catch (Exception e)

+ {

+ }

+ }

+ }

+

public FastList<L2Skill> getResidentialSkills()

{

return _residentialSkills;

7 answers to this question

Recommended Posts

  • 0
Posted

On IL, the packet is named NpcInfo, and even if there is the right slots (4 missings infos), I don't think you can activate it, as this packet update came from C2 (from what I rem of remarks).

 

Still you can try.

 

1 - Create a clan with clan crest, note the clanID and crestID.

2 - Edit packet NpcInfo and put fixed infos where they supposed to be, writing in core directly the values.

3 - Then compile and test ingame if you focked it or no.

 

I can't really say it won't work if no one tested it before :).

  • 0
Posted

So you know the answer :P.

 

AbstractNpcInfo > NpcInfo, all other is fine.

 

In your diff patch, it misses the principal information in NpcInfo. Anyway on IL your patch can't work like that.

  • 0
Posted

so u can`t make it ....to help me ? :-? ....

 

Don't expect ready code :)

 

Put some own effort, and with our help, u will manage it.

  • 0
Posted

I got it in my interlude server. I had the same problem, but i fixed it. Well the code is 'fine' but its not completed. If you take a look at the code, there is no code that 'puts' the crest at NPC's name. That was my problem and i solved it.

  • 0
Posted

I got it in my interlude server. I had the same problem, but i fixed it. Well the code is 'fine' but its not completed. If you take a look at the code, there is no code that 'puts' the crest at NPC's name. That was my problem and i solved it.

 

Could you share how you did that?

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

    • Hello everyone, I am selling the complete AdvExt64 FULL Extender for L2OFF PTS Interlude servers, including the complete source code.   Note: This is NOT the Vanganth extender. This is the complete, fully featured Interlude advext64 extender its full source code. Here is a breakdown of the key features included in this extender:   💻 Source Code Included   Full Extender Source: Modify, compile, and add your own custom features with zero limitations   ⚔️[NEW] Boss Spawns & Global Announcements   Boss Management (BossSpawn.txt): Full control over the exact spawn coordinates and respawn times for any Raid or Epic Boss. Auto-Announce: The server will automatically send a global announcement whenever a normal Raid Boss or Epic Boss spawns (supports custom chat colors). 🏪 Exclusive Systems (OtherSettings) [SearchStore] Costume system; Skins Clan Crest on NPCs:   🌟 Core Systems & Quality of Life AIO (All-In-One) System Premium & VIP System Offline Trade & Market Custom NPC Buffer Extended Teleports Buff Store System: Buff Item Fast Load L2Npc Multi-language System   ⚔️ [NEW] Event Engine (Fully Automated) Good vs Evil (GVE) & All vs All (AVA): Team vs Team (TvT) Capture the Flag (CTF): Last Hero (DeathMatch) Party Death "Server First" Promos: Custom Drop Events Vip System Newbie Rates: ⚙️ Custom Gameplay Mechanics Daily/Weekly/Monthly Missions: Advanced Enchant System: Attribute System Special Map Areas: Olympiad Extras: PvP/PK Systems: In-Game Mail Clan Search Seach Store Bot Report   🛡️ Security & Administration Anti-Bot Integrations:  Patch & HWID Protection: Builder System Jail & Chat Filter System   Price: 500 USD Contact Telegram: @TrakinasXP      
    • [SIZE=4][B]🇨🇦 NEWCANADA40 — 40% OFF VPS in Canada (Toronto)[/B][/SIZE] We are excited to announce the launch of our new location — Toronto, Canada. [B]Promo code:[/B] NEWCANADA40 [B]Discount:[/B] 40% on VPS orders [B]Valid until:[/B] June 7 ✔ New Canadian location ✔ Excellent North American connectivity ✔ Fast server deployment ✔ Suitable for any project [B]How to activate:[/B] — Visit our website — Select Canada (Toronto) as your location — Enter the promo code during checkout 👉 [url=https://bit.hosting]https://bit.hosting[/url] [I]The offer is valid for new Toronto VPS orders until June 7, 2026.</I>
    • Thanks for the collection and the free advertising! These files have been in the public domain for a long time — you just saved people the trouble of searching. A true fan. 😄 Just to clarify for everyone reading: these files have nothing to do with this topic. They are 10+ year old builds, and since various third-party modifications exist in the wild, we cannot guarantee what may have been added or changed in those versions. Use them at your own risk. We have absolutely no judgment toward those who are on a tight budget and can't afford our current builds — these old shared files might genuinely help you get started. Just use them carefully and at your own risk. And please don't judge developers for the mistakes they made early in their careers — every developer goes through stages of growth, and what you see in those old builds is simply a snapshot of where we were back then. We've come a long way since. If you're interested in our older builds, we have a dedicated thread for that with significantly reduced prices — very accessible for any budget. We have also recently resumed full technical support for legacy builds, handled by a separate team that doesn't interfere with our private development direction for larger projects. You can find our legacy builds here: Our OLd L2-scripts Packs Actual revisions Our current private sources are a completely different story — which is exactly what this thread is about. Too bad all your time goes into collecting other people's old code instead of developing your own project. Though judging by "L2MID is currently offline, we will come back soon in 2026" — you clearly have plenty of time on your hands. 😉
    • SHARED alreaxy! Are these files yours? https://fex.net/ru/s/kdop2z4
  • 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..