01-31-2019, 06:05 PM
Сборка 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]
Даст кто подсказки\наводки?
Уже заморочился танцевать с бубном.
Что имеем сейчас:
+Вижу хп\ману мобов, персонажей.
Косяки:
- Если взять в таргет персонажа с фулманой, то мана может соответствовать показателю последней цели(заполненность полоски). Пока тот не сделает изменение - не обновит.
- Первая цель которую мы берем в таргет после захода в игру(моб\игрок) имеет пустую полоску маны, видать т.к. неоткуда еще не получали значение.
Так понимаю что оно показатели шлет пакетом только при обновлении значения.
Еще есть незначительные задержки отображения маны если менять мобов /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]
Даст кто подсказки\наводки?