Отображение Хп в таргете персонажа.

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

Hedgehog

Знающий
Местный
Сообщения
366
Розыгрыши
0
Решения
3
Репутация
151
Реакции
271
Баллы
433
Сборка HF l2j-dev патч от Monokini2

Доброго времени суток, хочу реализовать отображение хп Цп в таргете персонажа.
1695585806467.png

Кто может помочь!?

В интерфейсе в TargetStatusWnd.uc вставил код
C++:
                if (!info.bNpc && !info.bPet && m_TargetID != playerID )
                {
                    bShowHPBar = true;
                    UpdateHPBar(info.nCurHP, info.nMaxHP);
                }
Шкала хп появилась но само хп не отображается. Этот же код если вставить в НПС то хп отображается и обновляется нормально.
1695586048367.png
1695586263021.png
1695586282730.png
При каждом ударе хп обновляеться.

С этим же патчем захожу на сборку L2JETERNITY и там хп отображается но обновляется только тогда когда заново берёшь в таргет.

Помогите реализовать такое за небольшую плату :cry:
 

Hedgehog need to send the info from sv to interface, i was doing this long time ago

On L2PcInstance.java -> check it there and just add Broadcast.toKnownPlayersInRadius(this, su, 2500); but take care with the performance of the sv maybe overload the sv when a lot players are placed in the same radius.


Java:
public void broadcastStatusUpdate()
    {
        StatusUpdate su = new StatusUpdate(this);
        su.addAttribute(StatusUpdate.MAX_HP, getMaxHp());
        his . addAttribute ( StatusUpdate . CUR_HP , ( int ) getCurrentHp ( ) ) ;
        su.addAttribute(StatusUpdate.MAX_MP, getMaxMp());
        su.addAttribute(StatusUpdate.CUR_MP, (int) getCurrentMp());
        su.addAttribute(StatusUpdate.MAX_CP, getMaxCp());
        su.addAttribute(StatusUpdate.CUR_CP, (int) getCurrentCp());
        sendPacket(su);
       
        Broadcast.toKnownPlayersInRadius(this, su, 2500);
       
        final boolean needCpUpdate = needCpUpdate();
        final boolean needHpUpdate = needHpUpdate();

        if (isInParty() && (needCpUpdate || needHpUpdate || needMpUpdate()))
        {
            getParty().broadcastToPartyMembers(this, new PartySmallWindowUpdate(this));
        }
       
        if (isInOlympiadMode() && isOlympiadStart() && (needCpUpdate || needHpUpdate))
        {
            final OlympiadGameTask game = OlympiadGameManager.getInstance().getOlympiadTask(getOlympiadGameId());
            if ((game != null) && game.isBattleStarted())
            {
                game.getZone().broadcastStatusUpdate(this);
            }
        }

        if (isInDuel() && (needCpUpdate || needHpUpdate))
        {
            DuelManager.getInstance().broadcastToOppositTeam(this, new ExDuelUpdateUserInfo(this));
        }
    }

GL;)
 
Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
Сборка HF l2j-dev патч от Monokini2

Доброго времени суток, хочу реализовать отображение хп Цп в таргете персонажа.
Посмотреть вложение 55298

Кто может помочь!?

В интерфейсе в TargetStatusWnd.uc вставил код
C++:
                if (!info.bNpc && !info.bPet && m_TargetID != playerID )
                {
                    bShowHPBar = true;
                    UpdateHPBar(info.nCurHP, info.nMaxHP);
                }
Шкала хп появилась но само хп не отображается. Этот же код если вставить в НПС то хп отображается и обновляется нормально.
Посмотреть вложение 55299
Посмотреть вложение 55301
Посмотреть вложение 55302
При каждом ударе хп обновляеться.

С этим же патчем захожу на сборку L2JETERNITY и там хп отображается но обновляется только тогда когда заново берёшь в таргет.

Помогите реализовать такое за небольшую плату :cry:
смотри в сторону того что передаётся при действиях
в onload зарегай событие, и в onevent обновление статуса передавай
C++:
function OnLoad()
{
RegisterEvent(EV_TargetUpdate);//Подпишись на событие
}

function OnEvent(int Event_ID, string param)//Произошло событие
{   
    
local UserInfo a_UserInfo;//Структура UserInfo
    
    if (Event_ID == EV_TargetUpdate)//Если наше событие тогда выполним
    {
    
GetTargetInfo( a_UserInfo ); //Получим инфу из таргета

Выводим куда хотим  = TargetInfo("HP", a_UserInfo); //Получим HP в данный момен (Меняем на CP, HP, MP)
        
    }
    
//Чужое CP HP MP
function int TargetInfo(String name, UserInfo TargetInfo){ //Своя функция

    switch( name )
    {
    case "CP":
    return TargetInfo.nCurCP;
    break;
    case "HP":
    return TargetInfo.nCurHP;
    break;
    }
что-то вроде этого
 
Hedgehog need to send the info from sv to interface, i was doing this long time ago

On L2PcInstance.java -> check it there and just add Broadcast.toKnownPlayersInRadius(this, su, 2500); but take care with the performance of the sv maybe overload the sv when a lot players are placed in the same radius.


Java:
public void broadcastStatusUpdate()
    {
        StatusUpdate su = new StatusUpdate(this);
        su.addAttribute(StatusUpdate.MAX_HP, getMaxHp());
        his . addAttribute ( StatusUpdate . CUR_HP , ( int ) getCurrentHp ( ) ) ;
        su.addAttribute(StatusUpdate.MAX_MP, getMaxMp());
        su.addAttribute(StatusUpdate.CUR_MP, (int) getCurrentMp());
        su.addAttribute(StatusUpdate.MAX_CP, getMaxCp());
        su.addAttribute(StatusUpdate.CUR_CP, (int) getCurrentCp());
        sendPacket(su);
      
        Broadcast.toKnownPlayersInRadius(this, su, 2500);
      
        final boolean needCpUpdate = needCpUpdate();
        final boolean needHpUpdate = needHpUpdate();

        if (isInParty() && (needCpUpdate || needHpUpdate || needMpUpdate()))
        {
            getParty().broadcastToPartyMembers(this, new PartySmallWindowUpdate(this));
        }
      
        if (isInOlympiadMode() && isOlympiadStart() && (needCpUpdate || needHpUpdate))
        {
            final OlympiadGameTask game = OlympiadGameManager.getInstance().getOlympiadTask(getOlympiadGameId());
            if ((game != null) && game.isBattleStarted())
            {
                game.getZone().broadcastStatusUpdate(this);
            }
        }

        if (isInDuel() && (needCpUpdate || needHpUpdate))
        {
            DuelManager.getInstance().broadcastToOppositTeam(this, new ExDuelUpdateUserInfo(this));
        }
    }

GL;)
Doesn't compile :cry:
 
Probably cuz at case of enemyplayer the client didnt recive any info about currenthp/maxhp from packet
 
Сервер не шлёт состояние хпцпмп для PC в UserInfo, потому что это нигде не используется, кроме какой-нибудь группы. В которой, к слову, можно посмотреть, как это всё устроено. Скорее всего просто броадкастится, если игроки в группе друг с другом. Не силён в механиках сервера (особенно жава).
 
StatusUpdate отправляет данные для изменения хп
 
бродкаст на ХФ не сделан, начиная с ГОД хроник шлется всем вокруг в связи с настройками интерфейса.
 
если вы являетесь моим клиентом конечно, если нет то тоже могу помочь на стороннем сорсе пишите по контактам
Отписал в ТГ

Вопрос решен благодаря LordWinter , Спасибо всем кто отозвался. Проблема была в том о чём он писал выше.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу