Разноцветные ники баг

  • Автор темы Автор темы Dev_mod
  • Дата начала Дата начала
Статус
В этой теме нельзя размещать новые ответы.

Dev_mod

Пляшущий с бубном
Участник
Сообщения
64
Розыгрыши
0
Решения
3
Репутация
5
Реакции
20
Баллы
240
Хроники
  1. Chaotic Throne: High Five
Исходники
Присутствуют
Сборка
L2scripts
у персонажей постоянно меняеться цвет ника думаю проблема в пакете
ExCharInfo "/*0xFE:0x254*/" но много раз пересматривал переделовал но так нечего и не получилось.
может кто-то подсказать в какую сторону дальше рыть?
протокол 474 майн
1768137547660.webp
 
Решение
я решил проблему, прикол был в том что я не реализовал пакетные данные для пакеты
/*0xCE*/ RelationChanged. интересно почему он повлиял на цвет ника?
у персонажей постоянно меняеться цвет ника думаю проблема в пакете
ExCharInfo "/*0xFE:0x254*/" но много раз пересматривал переделовал но так нечего и не получилось.
может кто-то подсказать в какую сторону дальше рыть?
протокол 474 майн
Посмотреть вложение 92860
Так радуйся, вон админы пв софта бешеные бабки платят что бы их ники и титулы анимировались разными цветами) а тут на шару :loltt0:
 
Кстати да, на удивление много кто не знает что кроме обычной отрицательной кармы еще давно и положительная есть, в пределах от 1 до 500 и как раз красящая ник в зеленый.
Дается за убийство пк, но не чаще чем раз в несколько часов и дает возможность убить разово (пока очки пк = 0) кого-то другого в пк не получив за это отрицательную карму - она просто упадет до 0.
 
вот пакет MrKirill1232
Java:
package org.mmocore.gameserver.serverpackets.Character;

import org.mmocore.gameserver.Config;
import org.mmocore.gameserver.geometry.ILocation;
import org.mmocore.gameserver.instancemanager.CursedWeaponsManager;
import org.mmocore.gameserver.model.Creature;
import org.mmocore.gameserver.model.Player;
import org.mmocore.gameserver.model.actor.instances.player.Cubic;
import org.mmocore.gameserver.model.base.TeamType;
import org.mmocore.gameserver.model.entity.Hero;
import org.mmocore.gameserver.model.items.Inventory;
import org.mmocore.gameserver.model.items.PcInventory;
import org.mmocore.gameserver.model.matching.MatchingRoom;
import org.mmocore.gameserver.model.pledge.Alliance;
import org.mmocore.gameserver.model.pledge.Clan;
import org.mmocore.gameserver.serverpackets.L2GameServerPacket;
import org.mmocore.gameserver.skills.AbnormalEffect;
import org.mmocore.gameserver.utils.Location;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Set;

public class ExCharInfo extends L2GameServerPacket
{
    public static final int[] PAPERDOLL_ORDER = {
            Inventory.PAPERDOLL_UNDER,
            Inventory.PAPERDOLL_HEAD,
            Inventory.PAPERDOLL_RHAND,
            Inventory.PAPERDOLL_LHAND,
            Inventory.PAPERDOLL_GLOVES,
            Inventory.PAPERDOLL_CHEST,
            Inventory.PAPERDOLL_LEGS,
            Inventory.PAPERDOLL_FEET,
            Inventory.PAPERDOLL_BACK,
            Inventory.PAPERDOLL_LRHAND,
            Inventory.PAPERDOLL_HAIR,
            Inventory.PAPERDOLL_DHAIR
    };

    private static final int[] PAPERDOLL_ORDER_AUGMENT =
            {
                    Inventory.PAPERDOLL_RHAND,
                    Inventory.PAPERDOLL_LHAND,
                    Inventory.PAPERDOLL_RHAND
            };


    private static final int[] PAPERDOLL_ORDER_VISUAL_ID =
            {
                    Inventory.PAPERDOLL_RHAND,
                    Inventory.PAPERDOLL_LHAND,
                    Inventory.PAPERDOLL_RHAND,
                    Inventory.PAPERDOLL_GLOVES,
                    Inventory.PAPERDOLL_CHEST,
                    Inventory.PAPERDOLL_LEGS,
                    Inventory.PAPERDOLL_FEET,
                    Inventory.PAPERDOLL_HAIR,
                    Inventory.PAPERDOLL_DHAIR
            };

    private static final Logger LOGGER = LoggerFactory.getLogger(ExCharInfo.class);

    private boolean canWrite = false;

    private int[][] paperdolls;
    private int mAtkSpd, pAtkSpd;
    private int runSpd, walkSpd, swimRunSpd, swimWalkSpd, flRunSpd, flWalkSpd, flyRunSpd, flyWalkSpd;
    private ILocation fishLoc;
    private String name, title;
    private int x, y, z, heading, boatId;
    private int objId, race, sex, baseClass, pvpFlag, karma, recHave;
    private double speedMove, speedAtack, colRadius, colHeight;
    private int hairStyle, hairColor, face;
    private int clanId, clanCrestId, largeClanCrestId, allyId, allyCrestId, classId;
    private int sit, run, combat, dead, privateStore, enchant;
    private int hero, fishing, mountType;
    private int pledgeClass, pledgeType, clanRepScore, mountId;
    private int nameColor, titleColor, transformId, agathionId;
    private Cubic[] cubics;
    private boolean partyRoomLeader, flying;
    private int curHp, maxHp, curMp, maxMp, curCp;
    private TeamType teamType;
    private Set<AbnormalEffect> abnormalEffects;
    private boolean showHeadAccessories;
    private int armorSetEnchant;
    private boolean noble;
    private int _ranking, _cursedweapon;

    public ExCharInfo(Creature cha, Player receiver) {
        if (cha == null) {
            LOGGER.error("CIPacket: cha is null!", new Exception());
            return;
        }

        if (receiver == null)
            return;

        if (cha.isInvisible(receiver))
            return;

        if (cha.isDeleted())
            return;

        objId = cha.getObjectId();
        if (objId == 0)
            return;

        if (receiver.getObjectId() == objId) {
            LOGGER.error("You cant send CIPacket about his character to active user!!!", new Exception());
            return;
        }

        Player player = cha.getPlayer();
        if (player == null)
            return;

        Location loc = null;
        if (player.isInBoat()) {
            loc = player.getInBoatPosition();
            boatId = player.getBoat().getBoatId();
        }

        if (loc == null)
            loc = cha.getLoc();

        x = loc.x;
        y = loc.y;
        z = loc.z;
        heading = loc.h;


        name = player.getVisibleName(receiver);
        nameColor = player.getVisibleNameColor(receiver);

        if (player.isConnected() || player.isInOfflineMode() || player.isFakePlayer()) {
            title = player.getVisibleTitle(receiver);
            titleColor = player.getVisibleTitleColor(receiver);
        } else {
            title = "NO CARRIER";
            titleColor = 255;
        }

        if (player.isPledgeVisible(receiver)) {
            Clan clan = player.getClan();
            Alliance alliance = clan == null ? null : clan.getAlliance();
            //
            clanId = clan == null ? 0 : clan.getClanId();
            clanCrestId = clan == null ? 0 : clan.getCrestId();
            largeClanCrestId = clan == null ? 0 : clan.getCrestLargeId();
            //
            allyId = alliance == null ? 0 : alliance.getAllyId();
            allyCrestId = alliance == null ? 0 : alliance.getAllyCrestId();
        }

        if (player.isMounted()) {
            enchant = 0;
            mountId = player.getMountNpcId() + 1000000;
            mountType = player.getMountType().ordinal();
        } else {
            enchant = player.getEnchantEffect();
            mountId = 0;
            mountType = 0;
        }

        paperdolls = new int[PcInventory.PAPERDOLL_MAX][4];

        for(int PAPERDOLL_ID : PAPERDOLL_ORDER)
        {
            paperdolls[PAPERDOLL_ID][0] = player.getInventory().getPaperdollItemId(PAPERDOLL_ID);
            paperdolls[PAPERDOLL_ID][1] = player.getInventory().getPaperdollVariation1Id(PAPERDOLL_ID);
            paperdolls[PAPERDOLL_ID][2] = player.getInventory().getPaperdollVariation2Id(PAPERDOLL_ID);
            paperdolls[PAPERDOLL_ID][3] = player.getInventory().getPaperdollVisualId(PAPERDOLL_ID);
        }

        mAtkSpd = player.getMAtkSpd();
        pAtkSpd = player.getPAtkSpd();
        speedMove = player.getMovementSpeedMultiplier();
        runSpd = (int) (player.getRunSpeed() / speedMove);
        walkSpd = (int) (player.getWalkSpeed() / speedMove);

        flRunSpd = 0; // TODO
        flWalkSpd = 0; // TODO

        if (player.isFlying()) {
            flyRunSpd = runSpd;
            flyWalkSpd = walkSpd;
        } else {
            flyRunSpd = 0;
            flyWalkSpd = 0;
        }

        swimRunSpd = player.getSwimRunSpeed();
        swimWalkSpd = player.getSwimWalkSpeed();
        race = player.getRace().ordinal();

        sex = player.getSex().ordinal();
        baseClass = player.getBaseDefaultClassId();

        pvpFlag = player.getPvpFlag();
        karma = player.getKarma();

        speedAtack = player.getAttackSpeedMultiplier();
        colRadius = player.getCurrentCollisionRadius();
        colHeight = player.getCurrentCollisionHeight();
        hairStyle = player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIR) > 0 ? sex : (player.getBeautyHairStyle() > 0 ? player.getBeautyHairStyle() : player.getHairStyle());
        hairColor = player.getBeautyHairColor() > 0 ? player.getBeautyHairColor() : player.getHairColor();
        face = player.getBeautyFace() > 0 ? player.getBeautyFace() : player.getFace();
        if (clanId > 0 && player.getClan() != null)
            clanRepScore = (int) player.getClan().getReputationScore();
        else
            clanRepScore = 0;
        sit = player.isSitting() ? 0 : 1; // standing = 1 sitting = 0
        run = player.isRunning() ? 1 : 0; // running = 1 walking = 0
        combat = player.isInCombat() ? 1 : 0;
        dead = player.isAlikeDead() ? 1 : 0;
        privateStore = player.isInObserverMode() ? Player.STORE_OBSERVING_GAMES : player.getPrivateStoreType();
        cubics = player.getCubics().toArray(new Cubic[0]);
        abnormalEffects = player.getAbnormalEffects();
        recHave = player.isGM() ? 0 : player.getRecomHave();
        classId = player.getClassId().getId();
        teamType = player.getTeam();
        hero = player.isHero() || player.isGM() && Config.GM_HERO_AURA ? 2 : 0; // 0x01: Hero Aura
        if (hero == 0)
            hero = Hero.getInstance().isInactiveHero(objId) ? 1 : 0;
        noble = hero > 0;
        fishing = player.isFishing() ? 1 : 0;
        fishLoc = player.getFishing().getHookLocation();
        pledgeClass = player.getPledgeClass();
        pledgeType = player.getPledgeType();
        transformId = player.getVisualTransformId();
        agathionId = player.getAgathionNpcId();
        partyRoomLeader = player.getMatchingRoom() != null && player.getMatchingRoom().getType() == MatchingRoom.PARTY_MATCHING && player.getMatchingRoom().getLeader() == player;
        flying = player.isInFlyingTransform();
        curHp = (int) player.getCurrentHp();//receiver.canReceiveStatusUpdate(player, StatusUpdatePacket.UpdateType.DEFAULT, StatusUpdatePacket.CUR_HP) ? (int) player.getCurrentHp() : 0;
        maxHp = player.getMaxHp();//receiver.canReceiveStatusUpdate(player, StatusUpdatePacket.UpdateType.DEFAULT, StatusUpdatePacket.MAX_HP) ? player.getMaxHp() : 0;
        curMp = (int) player.getCurrentMp();
        maxMp = player.getMaxMp();
        curCp = (int) player.getCurrentCp();
        showHeadAccessories = !player.hideHeadAccessories();
        armorSetEnchant = player.getArmorSetEnchant();
        _ranking = player.isTopRank() ? 1 : player.isTopRaceRank() ? 2 : player.isTopClassRank() ? 3 : 0;
        /*if(player.isInFightClub())
        {
            AbFightstractClub fightClubEvent = player.getFightClubEvent();
            name = fightClubEvent.getVisibleName(player, name, false);
            title = fightClubEvent.getVisibleTitle(player, title, false);
            titleColor = fightClubEvent.getVisibleTitleColor(player, titleColor, false);
            nameColor = fightClubEvent.getVisibleNameColor(player, nameColor, false);
        }*/
        canWrite = true;
        _cursedweapon = player.isCursedWeaponEquipped() ? CursedWeaponsManager.getInstance().getLevel(player.getCursedWeaponEquippedId()) : 0;
    }

    @Override
    protected boolean canWrite()
    {
        return canWrite;
    }

    @Override
    protected void writeImpl() {
        ByteBuffer cachedInformation = writeCachedParameters(this);
        ByteBuffer realTimeInformation = writeRealTimeParameters(this);

        writeH(Short.BYTES + cachedInformation.position());
        writeB(Arrays.copyOfRange(cachedInformation.array(), 0, cachedInformation.position()));
        writeH(Short.BYTES + realTimeInformation.position());
        writeB(Arrays.copyOfRange(realTimeInformation.array(), 0, realTimeInformation.position()));
    }

    private ByteBuffer writeCachedParameters(ExCharInfo packet)
    {
        ByteBuffer buffer = ByteBuffer.allocate(800).order(ByteOrder.LITTLE_ENDIAN);

        buffer.putInt(packet.objId);
        buffer.putShort((short) packet.race);
        buffer.put((byte) packet.sex);
        buffer.putInt(packet.baseClass);

        buffer.putShort((short) (Short.BYTES + (Integer.BYTES * PAPERDOLL_ORDER.length)));

        for (int paperdollId : PAPERDOLL_ORDER)
        {
            buffer.putInt(packet.paperdolls[paperdollId][0]);
        }

        buffer.putShort((short) (Short.BYTES + (Integer.BYTES * ((PAPERDOLL_ORDER_AUGMENT.length * 2)))));

        for (int paperdollId : PAPERDOLL_ORDER_AUGMENT)
        {
            buffer.putInt(packet.paperdolls[paperdollId][1]);
        }
        for (int paperdollId : PAPERDOLL_ORDER_AUGMENT)
        {
            buffer.putInt(packet.paperdolls[paperdollId][2]);
        }

        // Armor Enchant Abnormal
        buffer.put((byte) packet.armorSetEnchant);

        buffer.putShort((short) (Short.BYTES + (Integer.BYTES * PAPERDOLL_ORDER_VISUAL_ID.length)));

        for (int paperdollId : PAPERDOLL_ORDER_VISUAL_ID)
        {
            buffer.putInt(packet.paperdolls[paperdollId][3]);
        }

        buffer.put((byte) packet.pvpFlag);
        buffer.putInt(packet.karma);

        buffer.putInt(packet.mAtkSpd);
        buffer.putInt(packet.pAtkSpd);

        buffer.putInt(packet.runSpd);
        buffer.putInt(packet.walkSpd);
        buffer.putInt(packet.swimRunSpd);
        buffer.putInt(packet.swimWalkSpd);
        buffer.putInt(packet.flRunSpd);
        buffer.putInt(packet.flWalkSpd);
        buffer.putInt(packet.flyRunSpd);
        buffer.putInt(packet.flyWalkSpd);

        buffer.putFloat((float) packet.speedMove);
        buffer.putFloat((float) packet.speedAtack);
        buffer.putFloat((float) packet.colRadius);
        buffer.putFloat((float) packet.colHeight);

        buffer.putInt(packet.hairStyle);
        buffer.putInt(packet.hairColor);
        buffer.putInt(packet.face);

        buffer.putShort((short) packet.title.length());
        buffer.put(packet.title.getBytes(StandardCharsets.UTF_16LE));

        buffer.putInt(packet.clanId);
        buffer.putInt(packet.clanCrestId);
        buffer.putInt(packet.allyId);
        buffer.putInt(packet.allyCrestId);

        buffer.put((byte) packet.sit);
        buffer.put((byte) packet.run);
        buffer.put((byte) packet.combat);
        buffer.put((byte) packet.mountType);    // 1-on Strider, 2-on Wyvern, 3-on Great Wolf, 0-no mount
        buffer.put((byte) packet.privateStore);

        buffer.putInt(packet.cubics.length);
        for (Cubic cubic : packet.cubics)
        {
            buffer.putShort((short) (cubic == null ? 0 : cubic.getId()));
        }
        buffer.put((byte) (packet.partyRoomLeader ? 1 : 0));    // find party members
        buffer.put((byte) (packet.flying ? 2 : 0));
        buffer.putShort((short) packet.recHave);
        buffer.putInt(packet.mountId);
        buffer.putInt(packet.classId);
        buffer.putInt(0);  // Foot Effect

        // TODO: FIND ME
        buffer.put((byte) packet.enchant);   // cSNEnchant
        buffer.put((byte) 0);   // cBackEnchant
        buffer.put((byte) 0);   // cHairEnchant
        buffer.put((byte) 0);   // cHair2Enchant

        buffer.put((byte) packet.teamType.ordinal());  // team circle around feet 1 = Blue, 2 = red

        buffer.putInt(packet.largeClanCrestId);
        buffer.put((byte) (packet.noble ? 1 : 0));  // Is Noble
        buffer.put((byte) packet.hero);

        buffer.put((byte) packet.fishing);
        buffer.putInt(packet.fishLoc.getX());
        buffer.putInt(packet.fishLoc.getY());
        buffer.putInt(packet.fishLoc.getZ());

        buffer.putInt(packet.nameColor);
        buffer.putInt(packet.heading);

        buffer.put((byte) packet.pledgeClass);
        buffer.putShort((short) packet.pledgeType);

        buffer.putInt(packet.titleColor);

        buffer.put((byte) _cursedweapon); // Cursed Weapon Level

        buffer.putInt(packet.clanRepScore);

        buffer.putInt(packet.transformId);
        buffer.putInt(packet.agathionId);
        buffer.put((byte) 0); // nPvPRestrainStatus

        buffer.putInt(packet.curCp);
        buffer.putInt(packet.curHp);
        buffer.putInt(packet.maxHp);
        buffer.putInt(packet.curMp);
        buffer.putInt(packet.maxMp);

        buffer.put((byte) 0); // cBRLectureMark

        buffer.putInt(packet.abnormalEffects.size());
        for (AbnormalEffect abnormal : packet.abnormalEffects)
        {
            buffer.putShort((short) abnormal.getClientId());
        }


        buffer.put((byte) 0);    // Chaos Festival Winner
        buffer.put((byte) (packet.showHeadAccessories ? 1 : 0));
        buffer.put((byte) 0); //  Used Abilities Points
        buffer.putInt(0);    // nCursedWeaponClassId:
        buffer.putInt(-1); // nWaitActionId
        buffer.putInt(packet._ranking);
        buffer.putShort((short) 0); // hNotoriety
        buffer.putInt(packet.classId); // again class id
        buffer.putInt(0); // nCharacterColorIndex
        buffer.putInt(Config.REQUEST_ID); // again class id

        return buffer;
    }

    private static ByteBuffer writeRealTimeParameters(ExCharInfo packet)
    {
        ByteBuffer buffer = ByteBuffer.allocate(800).order(ByteOrder.LITTLE_ENDIAN);

        buffer.put((byte) 0);   // cCreateOrUpdate
        buffer.put((byte) 0);   // cShowSpawnEvent
        buffer.putInt(packet.x);
        buffer.putInt(packet.y);
        buffer.putInt(packet.z);
        buffer.putInt(packet.boatId);

        buffer.putShort((short) packet.name.length());
        buffer.put(packet.name.getBytes(StandardCharsets.UTF_16LE));

        buffer.put((byte) packet.dead);
        buffer.put((byte) 0);   // cOrcRiderShapeLevel [Mobius: 362 - Vanguard mount.]
        buffer.putInt(0);   // nlastDeadStatus
        buffer.putInt(0);   // nEnemyKillCount

        return buffer;
    }
}
 
вот пакет MrKirill1232
Java:
package org.mmocore.gameserver.serverpackets.Character;

import org.mmocore.gameserver.Config;
import org.mmocore.gameserver.geometry.ILocation;
import org.mmocore.gameserver.instancemanager.CursedWeaponsManager;
import org.mmocore.gameserver.model.Creature;
import org.mmocore.gameserver.model.Player;
import org.mmocore.gameserver.model.actor.instances.player.Cubic;
import org.mmocore.gameserver.model.base.TeamType;
import org.mmocore.gameserver.model.entity.Hero;
import org.mmocore.gameserver.model.items.Inventory;
import org.mmocore.gameserver.model.items.PcInventory;
import org.mmocore.gameserver.model.matching.MatchingRoom;
import org.mmocore.gameserver.model.pledge.Alliance;
import org.mmocore.gameserver.model.pledge.Clan;
import org.mmocore.gameserver.serverpackets.L2GameServerPacket;
import org.mmocore.gameserver.skills.AbnormalEffect;
import org.mmocore.gameserver.utils.Location;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Set;

public class ExCharInfo extends L2GameServerPacket
{
    public static final int[] PAPERDOLL_ORDER = {
            Inventory.PAPERDOLL_UNDER,
            Inventory.PAPERDOLL_HEAD,
            Inventory.PAPERDOLL_RHAND,
            Inventory.PAPERDOLL_LHAND,
            Inventory.PAPERDOLL_GLOVES,
            Inventory.PAPERDOLL_CHEST,
            Inventory.PAPERDOLL_LEGS,
            Inventory.PAPERDOLL_FEET,
            Inventory.PAPERDOLL_BACK,
            Inventory.PAPERDOLL_LRHAND,
            Inventory.PAPERDOLL_HAIR,
            Inventory.PAPERDOLL_DHAIR
    };

    private static final int[] PAPERDOLL_ORDER_AUGMENT =
            {
                    Inventory.PAPERDOLL_RHAND,
                    Inventory.PAPERDOLL_LHAND,
                    Inventory.PAPERDOLL_RHAND
            };


    private static final int[] PAPERDOLL_ORDER_VISUAL_ID =
            {
                    Inventory.PAPERDOLL_RHAND,
                    Inventory.PAPERDOLL_LHAND,
                    Inventory.PAPERDOLL_RHAND,
                    Inventory.PAPERDOLL_GLOVES,
                    Inventory.PAPERDOLL_CHEST,
                    Inventory.PAPERDOLL_LEGS,
                    Inventory.PAPERDOLL_FEET,
                    Inventory.PAPERDOLL_HAIR,
                    Inventory.PAPERDOLL_DHAIR
            };

    private static final Logger LOGGER = LoggerFactory.getLogger(ExCharInfo.class);

    private boolean canWrite = false;

    private int[][] paperdolls;
    private int mAtkSpd, pAtkSpd;
    private int runSpd, walkSpd, swimRunSpd, swimWalkSpd, flRunSpd, flWalkSpd, flyRunSpd, flyWalkSpd;
    private ILocation fishLoc;
    private String name, title;
    private int x, y, z, heading, boatId;
    private int objId, race, sex, baseClass, pvpFlag, karma, recHave;
    private double speedMove, speedAtack, colRadius, colHeight;
    private int hairStyle, hairColor, face;
    private int clanId, clanCrestId, largeClanCrestId, allyId, allyCrestId, classId;
    private int sit, run, combat, dead, privateStore, enchant;
    private int hero, fishing, mountType;
    private int pledgeClass, pledgeType, clanRepScore, mountId;
    private int nameColor, titleColor, transformId, agathionId;
    private Cubic[] cubics;
    private boolean partyRoomLeader, flying;
    private int curHp, maxHp, curMp, maxMp, curCp;
    private TeamType teamType;
    private Set<AbnormalEffect> abnormalEffects;
    private boolean showHeadAccessories;
    private int armorSetEnchant;
    private boolean noble;
    private int _ranking, _cursedweapon;

    public ExCharInfo(Creature cha, Player receiver) {
        if (cha == null) {
            LOGGER.error("CIPacket: cha is null!", new Exception());
            return;
        }

        if (receiver == null)
            return;

        if (cha.isInvisible(receiver))
            return;

        if (cha.isDeleted())
            return;

        objId = cha.getObjectId();
        if (objId == 0)
            return;

        if (receiver.getObjectId() == objId) {
            LOGGER.error("You cant send CIPacket about his character to active user!!!", new Exception());
            return;
        }

        Player player = cha.getPlayer();
        if (player == null)
            return;

        Location loc = null;
        if (player.isInBoat()) {
            loc = player.getInBoatPosition();
            boatId = player.getBoat().getBoatId();
        }

        if (loc == null)
            loc = cha.getLoc();

        x = loc.x;
        y = loc.y;
        z = loc.z;
        heading = loc.h;


        name = player.getVisibleName(receiver);
        nameColor = player.getVisibleNameColor(receiver);

        if (player.isConnected() || player.isInOfflineMode() || player.isFakePlayer()) {
            title = player.getVisibleTitle(receiver);
            titleColor = player.getVisibleTitleColor(receiver);
        } else {
            title = "NO CARRIER";
            titleColor = 255;
        }

        if (player.isPledgeVisible(receiver)) {
            Clan clan = player.getClan();
            Alliance alliance = clan == null ? null : clan.getAlliance();
            //
            clanId = clan == null ? 0 : clan.getClanId();
            clanCrestId = clan == null ? 0 : clan.getCrestId();
            largeClanCrestId = clan == null ? 0 : clan.getCrestLargeId();
            //
            allyId = alliance == null ? 0 : alliance.getAllyId();
            allyCrestId = alliance == null ? 0 : alliance.getAllyCrestId();
        }

        if (player.isMounted()) {
            enchant = 0;
            mountId = player.getMountNpcId() + 1000000;
            mountType = player.getMountType().ordinal();
        } else {
            enchant = player.getEnchantEffect();
            mountId = 0;
            mountType = 0;
        }

        paperdolls = new int[PcInventory.PAPERDOLL_MAX][4];

        for(int PAPERDOLL_ID : PAPERDOLL_ORDER)
        {
            paperdolls[PAPERDOLL_ID][0] = player.getInventory().getPaperdollItemId(PAPERDOLL_ID);
            paperdolls[PAPERDOLL_ID][1] = player.getInventory().getPaperdollVariation1Id(PAPERDOLL_ID);
            paperdolls[PAPERDOLL_ID][2] = player.getInventory().getPaperdollVariation2Id(PAPERDOLL_ID);
            paperdolls[PAPERDOLL_ID][3] = player.getInventory().getPaperdollVisualId(PAPERDOLL_ID);
        }

        mAtkSpd = player.getMAtkSpd();
        pAtkSpd = player.getPAtkSpd();
        speedMove = player.getMovementSpeedMultiplier();
        runSpd = (int) (player.getRunSpeed() / speedMove);
        walkSpd = (int) (player.getWalkSpeed() / speedMove);

        flRunSpd = 0; // TODO
        flWalkSpd = 0; // TODO

        if (player.isFlying()) {
            flyRunSpd = runSpd;
            flyWalkSpd = walkSpd;
        } else {
            flyRunSpd = 0;
            flyWalkSpd = 0;
        }

        swimRunSpd = player.getSwimRunSpeed();
        swimWalkSpd = player.getSwimWalkSpeed();
        race = player.getRace().ordinal();

        sex = player.getSex().ordinal();
        baseClass = player.getBaseDefaultClassId();

        pvpFlag = player.getPvpFlag();
        karma = player.getKarma();

        speedAtack = player.getAttackSpeedMultiplier();
        colRadius = player.getCurrentCollisionRadius();
        colHeight = player.getCurrentCollisionHeight();
        hairStyle = player.getInventory().getPaperdollItemId(Inventory.PAPERDOLL_HAIR) > 0 ? sex : (player.getBeautyHairStyle() > 0 ? player.getBeautyHairStyle() : player.getHairStyle());
        hairColor = player.getBeautyHairColor() > 0 ? player.getBeautyHairColor() : player.getHairColor();
        face = player.getBeautyFace() > 0 ? player.getBeautyFace() : player.getFace();
        if (clanId > 0 && player.getClan() != null)
            clanRepScore = (int) player.getClan().getReputationScore();
        else
            clanRepScore = 0;
        sit = player.isSitting() ? 0 : 1; // standing = 1 sitting = 0
        run = player.isRunning() ? 1 : 0; // running = 1 walking = 0
        combat = player.isInCombat() ? 1 : 0;
        dead = player.isAlikeDead() ? 1 : 0;
        privateStore = player.isInObserverMode() ? Player.STORE_OBSERVING_GAMES : player.getPrivateStoreType();
        cubics = player.getCubics().toArray(new Cubic[0]);
        abnormalEffects = player.getAbnormalEffects();
        recHave = player.isGM() ? 0 : player.getRecomHave();
        classId = player.getClassId().getId();
        teamType = player.getTeam();
        hero = player.isHero() || player.isGM() && Config.GM_HERO_AURA ? 2 : 0; // 0x01: Hero Aura
        if (hero == 0)
            hero = Hero.getInstance().isInactiveHero(objId) ? 1 : 0;
        noble = hero > 0;
        fishing = player.isFishing() ? 1 : 0;
        fishLoc = player.getFishing().getHookLocation();
        pledgeClass = player.getPledgeClass();
        pledgeType = player.getPledgeType();
        transformId = player.getVisualTransformId();
        agathionId = player.getAgathionNpcId();
        partyRoomLeader = player.getMatchingRoom() != null && player.getMatchingRoom().getType() == MatchingRoom.PARTY_MATCHING && player.getMatchingRoom().getLeader() == player;
        flying = player.isInFlyingTransform();
        curHp = (int) player.getCurrentHp();//receiver.canReceiveStatusUpdate(player, StatusUpdatePacket.UpdateType.DEFAULT, StatusUpdatePacket.CUR_HP) ? (int) player.getCurrentHp() : 0;
        maxHp = player.getMaxHp();//receiver.canReceiveStatusUpdate(player, StatusUpdatePacket.UpdateType.DEFAULT, StatusUpdatePacket.MAX_HP) ? player.getMaxHp() : 0;
        curMp = (int) player.getCurrentMp();
        maxMp = player.getMaxMp();
        curCp = (int) player.getCurrentCp();
        showHeadAccessories = !player.hideHeadAccessories();
        armorSetEnchant = player.getArmorSetEnchant();
        _ranking = player.isTopRank() ? 1 : player.isTopRaceRank() ? 2 : player.isTopClassRank() ? 3 : 0;
        /*if(player.isInFightClub())
        {
            AbFightstractClub fightClubEvent = player.getFightClubEvent();
            name = fightClubEvent.getVisibleName(player, name, false);
            title = fightClubEvent.getVisibleTitle(player, title, false);
            titleColor = fightClubEvent.getVisibleTitleColor(player, titleColor, false);
            nameColor = fightClubEvent.getVisibleNameColor(player, nameColor, false);
        }*/
        canWrite = true;
        _cursedweapon = player.isCursedWeaponEquipped() ? CursedWeaponsManager.getInstance().getLevel(player.getCursedWeaponEquippedId()) : 0;
    }

    @Override
    protected boolean canWrite()
    {
        return canWrite;
    }

    @Override
    protected void writeImpl() {
        ByteBuffer cachedInformation = writeCachedParameters(this);
        ByteBuffer realTimeInformation = writeRealTimeParameters(this);

        writeH(Short.BYTES + cachedInformation.position());
        writeB(Arrays.copyOfRange(cachedInformation.array(), 0, cachedInformation.position()));
        writeH(Short.BYTES + realTimeInformation.position());
        writeB(Arrays.copyOfRange(realTimeInformation.array(), 0, realTimeInformation.position()));
    }

    private ByteBuffer writeCachedParameters(ExCharInfo packet)
    {
        ByteBuffer buffer = ByteBuffer.allocate(800).order(ByteOrder.LITTLE_ENDIAN);

        buffer.putInt(packet.objId);
        buffer.putShort((short) packet.race);
        buffer.put((byte) packet.sex);
        buffer.putInt(packet.baseClass);

        buffer.putShort((short) (Short.BYTES + (Integer.BYTES * PAPERDOLL_ORDER.length)));

        for (int paperdollId : PAPERDOLL_ORDER)
        {
            buffer.putInt(packet.paperdolls[paperdollId][0]);
        }

        buffer.putShort((short) (Short.BYTES + (Integer.BYTES * ((PAPERDOLL_ORDER_AUGMENT.length * 2)))));

        for (int paperdollId : PAPERDOLL_ORDER_AUGMENT)
        {
            buffer.putInt(packet.paperdolls[paperdollId][1]);
        }
        for (int paperdollId : PAPERDOLL_ORDER_AUGMENT)
        {
            buffer.putInt(packet.paperdolls[paperdollId][2]);
        }

        // Armor Enchant Abnormal
        buffer.put((byte) packet.armorSetEnchant);

        buffer.putShort((short) (Short.BYTES + (Integer.BYTES * PAPERDOLL_ORDER_VISUAL_ID.length)));

        for (int paperdollId : PAPERDOLL_ORDER_VISUAL_ID)
        {
            buffer.putInt(packet.paperdolls[paperdollId][3]);
        }

        buffer.put((byte) packet.pvpFlag);
        buffer.putInt(packet.karma);

        buffer.putInt(packet.mAtkSpd);
        buffer.putInt(packet.pAtkSpd);

        buffer.putInt(packet.runSpd);
        buffer.putInt(packet.walkSpd);
        buffer.putInt(packet.swimRunSpd);
        buffer.putInt(packet.swimWalkSpd);
        buffer.putInt(packet.flRunSpd);
        buffer.putInt(packet.flWalkSpd);
        buffer.putInt(packet.flyRunSpd);
        buffer.putInt(packet.flyWalkSpd);

        buffer.putFloat((float) packet.speedMove);
        buffer.putFloat((float) packet.speedAtack);
        buffer.putFloat((float) packet.colRadius);
        buffer.putFloat((float) packet.colHeight);

        buffer.putInt(packet.hairStyle);
        buffer.putInt(packet.hairColor);
        buffer.putInt(packet.face);

        buffer.putShort((short) packet.title.length());
        buffer.put(packet.title.getBytes(StandardCharsets.UTF_16LE));

        buffer.putInt(packet.clanId);
        buffer.putInt(packet.clanCrestId);
        buffer.putInt(packet.allyId);
        buffer.putInt(packet.allyCrestId);

        buffer.put((byte) packet.sit);
        buffer.put((byte) packet.run);
        buffer.put((byte) packet.combat);
        buffer.put((byte) packet.mountType);    // 1-on Strider, 2-on Wyvern, 3-on Great Wolf, 0-no mount
        buffer.put((byte) packet.privateStore);

        buffer.putInt(packet.cubics.length);
        for (Cubic cubic : packet.cubics)
        {
            buffer.putShort((short) (cubic == null ? 0 : cubic.getId()));
        }
        buffer.put((byte) (packet.partyRoomLeader ? 1 : 0));    // find party members
        buffer.put((byte) (packet.flying ? 2 : 0));
        buffer.putShort((short) packet.recHave);
        buffer.putInt(packet.mountId);
        buffer.putInt(packet.classId);
        buffer.putInt(0);  // Foot Effect

        // TODO: FIND ME
        buffer.put((byte) packet.enchant);   // cSNEnchant
        buffer.put((byte) 0);   // cBackEnchant
        buffer.put((byte) 0);   // cHairEnchant
        buffer.put((byte) 0);   // cHair2Enchant

        buffer.put((byte) packet.teamType.ordinal());  // team circle around feet 1 = Blue, 2 = red

        buffer.putInt(packet.largeClanCrestId);
        buffer.put((byte) (packet.noble ? 1 : 0));  // Is Noble
        buffer.put((byte) packet.hero);

        buffer.put((byte) packet.fishing);
        buffer.putInt(packet.fishLoc.getX());
        buffer.putInt(packet.fishLoc.getY());
        buffer.putInt(packet.fishLoc.getZ());

        buffer.putInt(packet.nameColor);
        buffer.putInt(packet.heading);

        buffer.put((byte) packet.pledgeClass);
        buffer.putShort((short) packet.pledgeType);

        buffer.putInt(packet.titleColor);

        buffer.put((byte) _cursedweapon); // Cursed Weapon Level

        buffer.putInt(packet.clanRepScore);

        buffer.putInt(packet.transformId);
        buffer.putInt(packet.agathionId);
        buffer.put((byte) 0); // nPvPRestrainStatus

        buffer.putInt(packet.curCp);
        buffer.putInt(packet.curHp);
        buffer.putInt(packet.maxHp);
        buffer.putInt(packet.curMp);
        buffer.putInt(packet.maxMp);

        buffer.put((byte) 0); // cBRLectureMark

        buffer.putInt(packet.abnormalEffects.size());
        for (AbnormalEffect abnormal : packet.abnormalEffects)
        {
            buffer.putShort((short) abnormal.getClientId());
        }


        buffer.put((byte) 0);    // Chaos Festival Winner
        buffer.put((byte) (packet.showHeadAccessories ? 1 : 0));
        buffer.put((byte) 0); //  Used Abilities Points
        buffer.putInt(0);    // nCursedWeaponClassId:
        buffer.putInt(-1); // nWaitActionId
        buffer.putInt(packet._ranking);
        buffer.putShort((short) 0); // hNotoriety
        buffer.putInt(packet.classId); // again class id
        buffer.putInt(0); // nCharacterColorIndex
        buffer.putInt(Config.REQUEST_ID); // again class id

        return buffer;
    }

    private static ByteBuffer writeRealTimeParameters(ExCharInfo packet)
    {
        ByteBuffer buffer = ByteBuffer.allocate(800).order(ByteOrder.LITTLE_ENDIAN);

        buffer.put((byte) 0);   // cCreateOrUpdate
        buffer.put((byte) 0);   // cShowSpawnEvent
        buffer.putInt(packet.x);
        buffer.putInt(packet.y);
        buffer.putInt(packet.z);
        buffer.putInt(packet.boatId);

        buffer.putShort((short) packet.name.length());
        buffer.put(packet.name.getBytes(StandardCharsets.UTF_16LE));

        buffer.put((byte) packet.dead);
        buffer.put((byte) 0);   // cOrcRiderShapeLevel [Mobius: 362 - Vanguard mount.]
        buffer.putInt(0);   // nlastDeadStatus
        buffer.putInt(0);   // nEnemyKillCount

        return buffer;
    }
}
не вижу ничего такого, так что - скорее всего действительно - добро пожаловать в мир кармы.

Запишите видео как у вас это получается, а то инфы мало пока.
 
У ПЕРСОНАЖЕЙ ПОСТОЯННО МЕНЯЕТЬСЯ ЦВЕТ НИКА
Просто так?
После чего именно это происходит?
И с какого на какой меняется цвет?
Видно ли это изменение другим игрокам или только тебе?
Чей цвет меняется - твой или другого игрока?
Перс гм или нет?
покажи getVisibleNameColor который в Player
 
Оверпостинг
не вижу ничего такого, так что - скорее всего действительно - добро пожаловать в мир кармы.

Запишите видео как у вас это получается, а то инфы мало пока.
к сожилении я сейчас не могу записать видио. это происходит сразу после входа в игру ники иногда разные вот например сейчас тёмно зелённый до этого был злёный когда-то был красный постоянно разные. вот сейчас он стал белым вот например я заметил что в адене и в стартовых зоннах он постоянно зелённый в этой зоне он белый. у камаелей он красный. вот уже полител в аден за этих же персонажей один стал уже былым обратно а у другого персонажа зелёный. до того как я апал покетку такого небыло. 1768235977080.webp 1768236414756.webp 1768236555139.webp 1768236582304.webp

Просто так?
После чего именно это происходит?
И с какого на какой меняется цвет?
Видно ли это изменение другим игрокам или только тебе?
Чей цвет меняется - твой или другого игрока?
Перс гм или нет?
покажи getVisibleNameColor который в Player
цвет меняется при входе и при телепортации. пока заметил зелёный тёмно зелёный белый красны и был когда-то жёлтый.
другим не видно. меняется не мой ник а ник другого персонажа которого я вижу. персонажы гм.

Java:
public int getVisibleNameColor(Player receiver) {
        if (isInBuffStore()) {
            OfflineBufferManager.BufferData bufferData = OfflineBufferManager.getInstance().getBuffStore(getObjectId());
            if (bufferData != null) {
                if (isInOfflineMode())
                    return Config.BUFF_STORE_OFFLINE_NAME_COLOR;
                else
                    return Config.BUFF_STORE_NAME_COLOR;
            }
        }

        if (isInStoreMode() && isInOfflineMode()) {
            return Config.SERVICES_OFFLINE_TRADE_NAME_COLOR;
        }

        Integer color;
        for (GlobalEvent event : getEvents()) {
            color = event.getVisibleNameColor(this, receiver);
            if (color != null)
                return color.intValue();
        }

        // int premiumNameColor = getPremiumAccount().getProperties().getNameColor();
        // if(premiumNameColor != -1)
        //     return premiumNameColor;

        return getNameColor();
    }
 
Последнее редактирование модератором:
к сожилении я сейчас не могу записать видио. это происходит сразу после входа в игру ники иногда разные вот например сейчас тёмно зелённый до этого был злёный когда-то был красный постоянно разные. вот сейчас он стал белым вот например я заметил что в адене и в стартовых зоннах он постоянно зелённый в этой зоне он белый. у камаелей он красный. вот уже полител в аден за этих же персонажей один стал уже былым обратно а у другого персонажа зелёный. до того как я апал покетку такого небыло. Посмотреть вложение 92879Посмотреть вложение 92880Посмотреть вложение 92881Посмотреть вложение 92882


цвет меняется при входе и при телепортации. пока заметил зелёный тёмно зелёный белый красны и был когда-то жёлтый.
другим не видно. меняется не мой ник а ник другого персонажа которого я вижу. персонажы гм.

Java:
public int getVisibleNameColor(Player receiver) {
        if (isInBuffStore()) {
            OfflineBufferManager.BufferData bufferData = OfflineBufferManager.getInstance().getBuffStore(getObjectId());
            if (bufferData != null) {
                if (isInOfflineMode())
                    return Config.BUFF_STORE_OFFLINE_NAME_COLOR;
                else
                    return Config.BUFF_STORE_NAME_COLOR;
            }
        }

        if (isInStoreMode() && isInOfflineMode()) {
            return Config.SERVICES_OFFLINE_TRADE_NAME_COLOR;
        }

        Integer color;
        for (GlobalEvent event : getEvents()) {
            color = event.getVisibleNameColor(this, receiver);
            if (color != null)
                return color.intValue();
        }

        // int premiumNameColor = getPremiumAccount().getProperties().getNameColor();
        // if(premiumNameColor != -1)
        //     return premiumNameColor;

        return getNameColor();
    }
смог решить проблему ?
 
да прост написал в описании сервера: "уникальная механика - при каждом входе разный цвет ника!" и закрыл кейс, делов то.
фича сервера выходит на новый уровень :)
 
да прост написал в описании сервера: "уникальная механика - при каждом входе разный цвет ника!" и закрыл кейс, делов то.
Фича такого сервера будет не айс😅
 
я решил проблему, прикол был в том что я не реализовал пакетные данные для пакеты
/*0xCE*/ RelationChanged. интересно почему он повлиял на цвет ника?
 
Решение
я решил проблему, прикол был в том что я не реализовал пакетные данные для пакеты
/*0xCE*/ RelationChanged. интересно почему он повлиял на цвет ника?
красавчик, что когда нашел проблему - отписался на форум, а не просто забил
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу