Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Вывод хп цели
#1
Сборка l2ft (хф) interface.u уже патченный.
Уже заморочился танцевать с бубном.
Что имеем сейчас:
+Вижу хп\ману мобов, персонажей.
Косяки:
- Если взять в таргет персонажа с фулманой, то мана может соответствовать показателю последней цели(заполненность полоски). Пока тот не сделает изменение - не обновит.
- Первая цель которую мы берем в таргет после захода в игру(моб\игрок) имеет пустую полоску маны, видать т.к. неоткуда еще не получали значение.

Так понимаю что оно показатели шлет пакетом только при обновлении значения.
Еще есть незначительные задержки отображения маны если менять мобов /nexttarget, но это можно списать на слабенький ноут, а может и метод-костыль действительно кривой и надо переделать всё:redlol:
А реально ли сделать что б взяв в таргет сразу все отображало корректно? (по методу хп монстра\персонажа из пати). Пока цеплялся за эти ключевые моменты, думаю нас интересует первый класс:
Player.java
[SRC="java"]
public void broadcastStatusUpdate()
{
if(!needStatusUpdate()) //По идее еше должно срезать траффик. Будут глюки с отображением - убрать это условие.
return;

StatusUpdate su = makeStatusUpdate(StatusUpdate.MAX_HP, StatusUpdate.MAX_MP, StatusUpdate.MAX_CP, StatusUpdate.CUR_HP, StatusUpdate.CUR_MP, StatusUpdate.CUR_CP);
sendPacket(su);
broadcastToStatusListeners(su); //Этой строчкой добилсятого что сейчас есть, отображает персонажа.
// Check if a party is in progress
if(isInParty())
// Send the Server->Client packet PartySmallWindowUpdate with current HP, MP and Level to all other L2Player of the Party
getParty().broadcastToPartyMembers(this, new PartySmallWindowUpdate(this));

DuelEvent duelEvent = getEvent(DuelEvent.class);
if(duelEvent != null)
duelEvent.sendPacket(new ExDuelUpdateUserInfo(this), getTeam().revert().name());

if(isInOlympiadMode() && isOlympiadCompStart())
{
if(_olympiadGame != null)
_olympiadGame.broadcastInfo(this, null, false);
}
}

public void setObjectTarget(GameObject target)
{
setTarget(target);
if(target == null)
return;

if(target == getTarget())
{
if(target.isNpc())
{
NpcInstance npc = (NpcInstance) target;
sendPacket(new MyTargetSelected(npc.getObjectId(), getLevel() - npc.getLevel()));
sendPacket(npc.makeStatusUpdate(StatusUpdate.CUR_HP, StatusUpdate.MAX_HP, StatusUpdate.CUR_MP, StatusUpdate.MAX_MP));
sendPacket(new ValidateLocation(npc), ActionFail.STATIC);
}
else
sendPacket(new MyTargetSelected(target.getObjectId(), 0));
}
}

@Override
public void setTarget(GameObject newTarget)
{
// Check if the new target is visible
if(newTarget != null && !newTarget.isVisible())
newTarget = null;

// Can't target and attack festival monsters if not participant
if(newTarget instanceof FestivalMonsterInstance && !isFestivalParticipant())
newTarget = null;

Party party = getParty();

// Can't target and attack rift invaders if not in the same room
if(party != null && party.isInDimensionalRift())
{
int riftType = party.getDimensionalRift().getType();
int riftRoom = party.getDimensionalRift().getCurrentRoom();
if(newTarget != null && !DimensionalRiftManager.getInstance().getRoom(riftType, riftRoom).checkIfInZone(newTarget.getX(), newTarget.getY(), newTarget.getZ()))
newTarget = null;
}

GameObject oldTarget = getTarget();

if(oldTarget != null)
{
if(oldTarget.equals(newTarget))
return;

// Remove the L2Player from the _statusListener of the old target if it was a L2Character
if(oldTarget.isCreature())
((Creature) oldTarget).removeStatusListener(this);

broadcastPacket(new TargetUnselected(this));
}

if(newTarget != null)
{
// Add the L2Player to the _statusListener of the new target if it's a L2Character
if(newTarget.isCreature())
((Creature) newTarget).addStatusListener(this);

broadcastPacket(new TargetSelected(this, newTarget.getObjectId(), getLoc()));
}

super.setTarget(newTarget);
}[/SRC]
Creature.java //тут ничего не копал особо, но ту самую строчку, в остальном неинтересно думаю.
[SRC="java"] public void broadcastStatusUpdate()
{
if(!needStatusUpdate())
return;

StatusUpdate su = makeStatusUpdate(StatusUpdate.MAX_HP, StatusUpdate.MAX_MP, StatusUpdate.CUR_HP, StatusUpdate.CUR_MP);
broadcastToStatusListeners(su);
}[/SRC]
Даст кто подсказки\наводки?Smile
Ответ
#2
Интересно выделили красным - именно туда и копал, но что-т пока безрезультатно, слабенько шарю, особенно в пакетке, если математику и геймплей приемлемо для обработки кода, то здесь геморы. Компил ругался\нет результатов\только портилBig Grin

UPD 1. Спасибо за мелкое назидание, пробил все варианты апдейтов в сборке и именно нашел метод как оно апдейтит (выбор в таргет) мобов:
NpcInstance.java //дописав в параметрах таргета cur, max MP они заработали внезапно, осталось найти где берем персонажей аналогичным образом, правда тут проблема - серв хф по дефолту не шлет в таргет даже хп :\
[SRC="java"] public void onAction(Player player, boolean shift)
{
if(!isTargetable())
{
player.sendActionFailed();
return;
}

if(player.getTarget() != this)
{
player.setTarget(this);
if(player.getTarget() == this)
player.sendPacket(new MyTargetSelected(getObjectId(), player.getLevel() - getLevel()), makeStatusUpdate(StatusUpdate.CUR_HP, StatusUpdate.MAX_HP, StatusUpdate.CUR_MP, StatusUpdate.MAX_MP));

player.sendPacket(new ValidateLocation(this));
return;
}...........[/SRC] Есть идеи у кого-нибудь?) Вроде и не там где надо искал, но может статус персов непосредственно в player.java?


UPD 2. В общем получилось, спасибо за наводку и тому юзеру который компилер interface.u выложил на 2017 НГ )
player.java
Было
[SRC="java"] if(player.getTarget() == this)
player.sendPacket(new MyTargetSelected(getObjectId(), 0)); // The color to display in the select window is White
[/SRC]
Стало
[SRC="java"] ....if(player.getTarget() == this)
{
player.sendPacket(new MyTargetSelected(getObjectId(), 0)); // The color to display in the select window is White
player.sendPacket(makeStatusUpdate(StatusUpdate.CUR_HP, StatusUpdate.MAX_HP, StatusUpdate.CUR_MP, StatusUpdate.MAX_MP));
}...[/SRC]
//тупо скопировал метод из NpcInstance, надеюсь покемоны не полезут) Куски кода итд урезаны, но основной мотив понятен, вдруг кому поможет, вот и выкладываю)
Можно закрывать или как там у Вас принято.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Вывод минимального количества игроков в конфиг для прохода к Antharas texport 13 3,941 01-31-2014, 11:23 AM
Последний пост: texport
  Вывод номерации HTML: аналогично PTS. Injection 6 1,703 07-11-2013, 11:52 PM
Последний пост: Injection
  Вывод пути открытой HTML Noize 4 1,701 04-22-2013, 01:25 PM
Последний пост: Noize
  Вывод В Конфиги Drag0N 5 1,706 04-17-2013, 04:19 PM
Последний пост: Ashe
  Как включить вывод питоновских логов __init__.py.error.log havoc 0 1,109 09-04-2012, 10:46 PM
Последний пост: havoc
  Вывод off-tarde на сайте niko42 2 2,149 11-24-2010, 11:01 AM
Последний пост: niko42
  [JAVA] Вывод из mysql Дух системы 5 2,687 09-08-2010, 09:54 PM
Последний пост: DreamTheater
  [HELP] Вывод заданного сообшения в чат по нажатию кнопки. POPsy 1 2,063 09-06-2010, 02:42 AM
Последний пост: Brandonheat

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)