Skip to content

Champion Aura

Featured Replies

4 minutes ago, InFocus said:

CHAMPION_AURA_TYPE = NPC.getInt("ChampionAuraType", 0);

Champions is implemented in pack

 

_npc.isChampion() ? 1 : 0

is like saying

if (_npc.isChampion())
{
  writeC(1);
}
else
{ 
 writeC(0);
}

So since all mob seem with blue aura which i guess is 1 its like all are considered champions. 

The 0x00 you mention has nothing to do. 0x00 is equal to 0. it has no difference. Check your isChampion() method

and the variable it carries and check if by default has set to true.

 

A default boolean has value false always. Yours might be _isChampion = true and make all monsters champions at least from the code's pov as i see. 

  • Author

Well, Normal and CHampion have same aura with 

writeD(-1); // High Five NPCString ID
			writeS(_title);
			writeD(0x00);
			if (_npc.isChampion())
			{
				writeC(1);
			}
			else
			{
				writeC(0);
			}
			writeD(0x00); // pvp flag
			writeD(0x00); // karma
			

http://5SCSyI6.jpg

Forget about the packet thing. The problem is with the 'Champion' system. Probably is broken or you just added the method by Ur self

  • Author

I don, broke something, i simply add 2 lines in Config.java and 

if (_npc.isChampion())
			{
				writeC(1);
			}
			else
			{
				writeC(0);
			}

and this in AbstractNpcInfo.java

  • Author

And doesn't work this aura

 

Or you simply edited wrong writeC, the comment says it's title color. Try editing this line writeC(_npc.getTeam().getId());

If you have it. Not sure what stands for getTeam for npc but you can try. 

  • Author

Ok SweeTs, i post now, all my code,

 

/*
 * Copyright (C) 2004-2015 L2J Server
 * 
 * This file is part of L2J Server.
 * 
 * L2J Server is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * L2J Server is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package com.l2jserver.gameserver.network.serverpackets;

import com.l2jserver.Config;
import com.l2jserver.gameserver.data.sql.impl.ClanTable;
import com.l2jserver.gameserver.instancemanager.TownManager;
import com.l2jserver.gameserver.model.L2Clan;
import com.l2jserver.gameserver.model.PcCondOverride;
import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.L2Summon;
import com.l2jserver.gameserver.model.actor.instance.L2MonsterInstance;
import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.actor.instance.L2TrapInstance;
import com.l2jserver.gameserver.model.skills.AbnormalVisualEffect;
import com.l2jserver.gameserver.model.zone.ZoneId;

public abstract class AbstractNpcInfo extends L2GameServerPacket
{
    protected int _x, _y, _z, _heading;
    protected int _idTemplate;
    protected boolean _isAttackable, _isSummoned;
    protected int _mAtkSpd, _pAtkSpd;
    protected final int _runSpd, _walkSpd;
    protected final int _swimRunSpd, _swimWalkSpd;
    protected final int _flyRunSpd, _flyWalkSpd;
    protected double _moveMultiplier;
    
    protected int _rhand, _lhand, _chest, _enchantEffect;
    protected double _collisionHeight, _collisionRadius;
    protected String _name = "";
    protected String _title = "";
    
    public AbstractNpcInfo(L2Character cha)
    {
        _isSummoned = cha.isShowSummonAnimation();
        _x = cha.getX();
        _y = cha.getY();
        _z = cha.getZ();
        _heading = cha.getHeading();
        _mAtkSpd = cha.getMAtkSpd();
        _pAtkSpd = cha.getPAtkSpd();
        _moveMultiplier = cha.getMovementSpeedMultiplier();
        _runSpd = (int) Math.round(cha.getRunSpeed() / _moveMultiplier);
        _walkSpd = (int) Math.round(cha.getWalkSpeed() / _moveMultiplier);
        _swimRunSpd = (int) Math.round(cha.getSwimRunSpeed() / _moveMultiplier);
        _swimWalkSpd = (int) Math.round(cha.getSwimWalkSpeed() / _moveMultiplier);
        _flyRunSpd = cha.isFlying() ? _runSpd : 0;
        _flyWalkSpd = cha.isFlying() ? _walkSpd : 0;
    }
    
    /**
     * Packet for Npcs
     */
    public static class NpcInfo extends AbstractNpcInfo
    {
        private final L2Npc _npc;
        private int _clanCrest = 0;
        private int _allyCrest = 0;
        private int _allyId = 0;
        private int _clanId = 0;
        private int _displayEffect = 0;
        
        public NpcInfo(L2Npc cha, L2Character attacker)
        {
            super(cha);
            _npc = cha;
            _idTemplate = cha.getTemplate().getDisplayId(); // On every subclass
            _rhand = cha.getRightHandItem(); // On every subclass
            _lhand = cha.getLeftHandItem(); // On every subclass
            _enchantEffect = cha.getEnchantEffect();
            _collisionHeight = cha.getCollisionHeight();// On every subclass
            _collisionRadius = cha.getCollisionRadius();// On every subclass
            _isAttackable = cha.isAutoAttackable(attacker);
            if (cha.getTemplate().isUsingServerSideName())
            {
                _name = cha.getName();// On every subclass
            }
            
            if (_npc.isInvisible())
            {
                _title = "Invisible";
            }
            else if (Config.L2JMOD_CHAMPION_ENABLE && cha.isChampion())
            {
                _title = (Config.L2JMOD_CHAMP_TITLE); // On every subclass
            }
            else if (cha.getTemplate().isUsingServerSideTitle())
            {
                _title = cha.getTemplate().getTitle(); // On every subclass
            }
            else
            {
                _title = cha.getTitle(); // On every subclass
            }
            
            if (Config.SHOW_NPC_LVL && (_npc instanceof L2MonsterInstance))
            {
                String t = "Lv " + cha.getLevel() + (cha.isAggressive() ? "*" : "");
                if (_title != null)
                {
                    t += " " + _title;
                }
                
                _title = t;
            }
            
            // npc crest of owning clan/ally of castle
            if ((cha instanceof L2NpcInstance) && cha.isInsideZone(ZoneId.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.getId();
                    _allyCrest = clan.getAllyCrestId();
                    _allyId = clan.getAllyId();
                }
            }
            
            _displayEffect = cha.getDisplayEffect();
        }
        
        @Override
        protected void writeImpl()
        {
            writeC(0x0c);
            writeD(_npc.getObjectId());
            writeD(_idTemplate + 1000000); // npctype id
            writeD(_isAttackable ? 1 : 0);
            writeD(_x);
            writeD(_y);
            writeD(_z);
            writeD(_heading);
            writeD(0x00);
            writeD(_mAtkSpd);
            writeD(_pAtkSpd);
            writeD(_runSpd);
            writeD(_walkSpd);
            writeD(_swimRunSpd);
            writeD(_swimWalkSpd);
            writeD(_flyRunSpd);
            writeD(_flyWalkSpd);
            writeD(_flyRunSpd);
            writeD(_flyWalkSpd);
            writeF(_moveMultiplier);
            writeF(_npc.getAttackSpeedMultiplier());
            writeF(_collisionRadius);
            writeF(_collisionHeight);
            writeD(_rhand); // right hand weapon
            writeD(_chest);
            writeD(_lhand); // left hand weapon
            writeC(1); // name above char 1=true ... ??
            writeC(_npc.isRunning() ? 1 : 0);
            writeC(_npc.isInCombat() ? 1 : 0);
            writeC(_npc.isAlikeDead() ? 1 : 0);
            writeC(_isSummoned ? 2 : 0); // invisible ?? 0=false 1=true 2=summoned (only works if model has a summon animation)
            writeD(-1); // High Five NPCString ID
            writeS(_name);
            writeD(-1); // High Five NPCString ID
            writeS(_title);
            writeD(0x00);
            writeD(0x00); // pvp flag
            writeD(0x00); // karma
            
            writeD(_npc.isInvisible() ? _npc.getAbnormalVisualEffects() | AbnormalVisualEffect.STEALTH.getMask() : _npc.getAbnormalVisualEffects());
            writeD(_clanId); // clan id
            writeD(_clanCrest); // crest id
            writeD(_allyId); // ally id
            writeD(_allyCrest); // all crest
            
            writeC(_npc.isInsideZone(ZoneId.WATER) ? 1 : _npc.isFlying() ? 2 : 0); // C2
            
            writeC(_npc.getTeam().getId());
            writeF(_collisionRadius);
            writeF(_collisionHeight);
            writeD(_enchantEffect); // C4
            writeD(_npc.isFlying() ? 1 : 0); // C6
            
            
            writeD(_npc.getColorEffect()); // CT1.5 Pet form and skills, Color effect
            writeC(_npc.isTargetable() ? 0x01 : 0x00);
            writeC(_npc.isShowName() ? 0x01 : 0x00);
            writeD(_npc.getAbnormalVisualEffectSpecial());
            writeD(_displayEffect);
        }
        
        /**
         * @param object
         */
    }
    
    public static class TrapInfo extends AbstractNpcInfo
    {
        private final L2TrapInstance _trap;
        
        public TrapInfo(L2TrapInstance cha, L2Character attacker)
        {
            super(cha);
            
            _trap = cha;
            _idTemplate = cha.getTemplate().getDisplayId();
            _isAttackable = cha.isAutoAttackable(attacker);
            _rhand = 0;
            _lhand = 0;
            _collisionHeight = _trap.getTemplate().getfCollisionHeight();
            _collisionRadius = _trap.getTemplate().getfCollisionRadius();
            if (cha.getTemplate().isUsingServerSideName())
            {
                _name = cha.getName();
            }
            _title = cha.getOwner() != null ? cha.getOwner().getName() : "";
        }
        
        @Override
        protected void writeImpl()
        {
            writeC(0x0c);
            writeD(_trap.getObjectId());
            writeD(_idTemplate + 1000000); // npctype id
            writeD(_isAttackable ? 1 : 0);
            writeD(_x);
            writeD(_y);
            writeD(_z);
            writeD(_heading);
            writeD(0x00);
            writeD(_mAtkSpd);
            writeD(_pAtkSpd);
            writeD(_runSpd);
            writeD(_walkSpd);
            writeD(_swimRunSpd);
            writeD(_swimWalkSpd);
            writeD(_flyRunSpd);
            writeD(_flyWalkSpd);
            writeD(_flyRunSpd);
            writeD(_flyWalkSpd);
            writeF(_moveMultiplier);
            writeF(_trap.getAttackSpeedMultiplier());
            writeF(_collisionRadius);
            writeF(_collisionHeight);
            writeD(_rhand); // right hand weapon
            writeD(_chest);
            writeD(_lhand); // left hand weapon
            writeC(1); // name above char 1=true ... ??
            writeC(1);
            writeC(_trap.isInCombat() ? 1 : 0);
            writeC(_trap.isAlikeDead() ? 1 : 0);
            writeC(_isSummoned ? 2 : 0); // invisible ?? 0=false 1=true 2=summoned (only works if model has a summon animation)
            writeD(-1); // High Five NPCString ID
            writeS(_name);
            writeD(-1); // High Five NPCString ID
            writeS(_title);
            writeD(0x01); // title color 0 = client default
            
            writeD(_trap.getPvpFlag());
            writeD(_trap.getKarma());
            
            writeD(_trap.isInvisible() ? _trap.getAbnormalVisualEffects() | AbnormalVisualEffect.STEALTH.getMask() : _trap.getAbnormalVisualEffects());
            writeD(0x00); // clan id
            writeD(0x00); // crest id
            writeD(0000); // C2
            writeD(0000); // C2
            writeC(0000); // C2
            
            writeC(_trap.getTeam().getId());
            
            writeF(_collisionRadius);
            writeF(_collisionHeight);
            writeD(0x00); // C4
            writeD(0x00); // C6
            writeD(0x00);
            writeD(0);// CT1.5 Pet form and skills
            writeC(0x01);
            writeC(0x01);
            writeD(0x00);
        }
    }
    
    /**
     * Packet for summons.
     */
    public static class SummonInfo extends AbstractNpcInfo
    {
        private final L2Summon _summon;
        private final int _form;
        private final int _val;
        
        public SummonInfo(L2Summon cha, L2Character attacker, int val)
        {
            super(cha);
            _summon = cha;
            _val = val;
            _form = cha.getFormId();
            
            _isAttackable = cha.isAutoAttackable(attacker);
            _rhand = cha.getWeapon();
            _lhand = 0;
            _chest = cha.getArmor();
            _enchantEffect = cha.getTemplate().getWeaponEnchant();
            _name = cha.getName();
            _title = (cha.getOwner() != null) && cha.getOwner().isOnline() ? cha.getOwner().getName() : "";
            _idTemplate = cha.getTemplate().getDisplayId();
            _collisionHeight = cha.getTemplate().getfCollisionHeight();
            _collisionRadius = cha.getTemplate().getfCollisionRadius();
            setInvisible(cha.isInvisible());
        }
        
        @Override
        protected void writeImpl()
        {
            boolean gmSeeInvis = false;
            if (isInvisible())
            {
                final L2PcInstance activeChar = getClient().getActiveChar();
                if ((activeChar != null) && activeChar.canOverrideCond(PcCondOverride.SEE_ALL_PLAYERS))
                {
                    gmSeeInvis = true;
                }
            }
            
            writeC(0x0c);
            writeD(_summon.getObjectId());
            writeD(_idTemplate + 1000000); // npctype id
            writeD(_isAttackable ? 1 : 0);
            writeD(_x);
            writeD(_y);
            writeD(_z);
            writeD(_heading);
            writeD(0x00);
            writeD(_mAtkSpd);
            writeD(_pAtkSpd);
            writeD(_runSpd);
            writeD(_walkSpd);
            writeD(_swimRunSpd);
            writeD(_swimWalkSpd);
            writeD(_flyRunSpd);
            writeD(_flyWalkSpd);
            writeD(_flyRunSpd);
            writeD(_flyWalkSpd);
            writeF(_moveMultiplier);
            writeF(_summon.getAttackSpeedMultiplier());
            writeF(_collisionRadius);
            writeF(_collisionHeight);
            writeD(_rhand); // right hand weapon
            writeD(_chest);
            writeD(_lhand); // left hand weapon
            writeC(0x01); // name above char 1=true ... ??
            writeC(0x01); // always running 1=running 0=walking
            writeC(_summon.isInCombat() ? 1 : 0);
            writeC(_summon.isAlikeDead() ? 1 : 0);
            writeC(_val); // invisible ?? 0=false 1=true 2=summoned (only works if model has a summon animation)
            writeD(-1); // High Five NPCString ID
            writeS(_name);
            writeD(-1); // High Five NPCString ID
            writeS(_title);
            
            writeD(_summon.getPvpFlag());
            writeD(_summon.getKarma());
            
            writeD(gmSeeInvis ? _summon.getAbnormalVisualEffects() | AbnormalVisualEffect.STEALTH.getMask() : _summon.getAbnormalVisualEffects());
            
            writeD(0x00); // clan id
            writeD(0x00); // crest id
            writeD(0x00); // C2
            writeD(0x00); // C2
            writeC(_summon.isInsideZone(ZoneId.WATER) ? 1 : _summon.isFlying() ? 2 : 0); // C2
            
            writeC(_summon.getTeam().getId());
            
            writeF(_collisionRadius);
            writeF(_collisionHeight);
            writeD(_enchantEffect); // C4
            writeD(0x00); // C6
            writeD(0x00);
            writeD(_form); // CT1.5 Pet form and skills
            writeC(0x01);
            writeC(0x01);
            writeD(_summon.getAbnormalVisualEffectSpecial());
        }
    }
}
 

 

 

 

And tell me exactly where i put 

 

 

if (_npc.isChampion())
			{
				writeC(0);
			}
			else
			{
				writeC(1);
			}

Help me this time, or give me a suggestion, I want to close this topic. And i want to solve it :((

Edited by InFocus

try this

 

-			writeC(_npc.getTeam().getId());
+			writeC(_npc.isChampion? Config.CHAMPION_AURA_TYPE : _npc.getTeam().getId());

 

  • Author

Doesn't work melron and SweeTs Everything i do, no work that aura for champions, i try all methods. :((

 

  • Author
15 hours ago, melron said:

try this

 


-			writeC(_npc.getTeam().getId());
+			writeC(_npc.isChampion? Config.CHAMPION_AURA_TYPE : _npc.getTeam().getId());

 

writeC(_npc.isChampion() ? Config.CHAMPION_AURA_TYPE : _npc.getTeam().getId());

and with this setting , 

http://DmF63w7.jpg

 

This one is the correct. If it does not work then, either the config is not parsed or the method for champion is wrong

  • Author

And what i can do ? What i can modify?

This is in Config.java

CHAMPION_AURA_TYPE = NPC.getInt("ChampionAuraType", 0);

Edited by InFocus

Eh, you are showing us monsters.. but the config is for CHAMPION. Does those mobs are champions?! NO, I don't think so. So, until you don't find a champion monster, you can't say if it's working or not. So, simply change the line to 1 or 2, to give aura for all monsters - if you see the aura, the line is LEGIT and your champion config sux balls, you are wasting our time showing normal monster. Which means, you are...

  • Author

I set monster frequency up to 99%, so?

Edited by InFocus

Guest
This topic is now closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.