Сообщений: 289
Тем: 55
Зарегистрирован: Mar 2012
Репутация:
672
Здравствуйте, уважаемые знатоки, есть код, для оффлайн торговли, работает отлично, когда вы садишься на торговлю и выходишь и игры, появляется титул Offline Trade + меняется цвет. Вопрос, как сделать, теперь когда ты заходишь обратно на чара, чтобы титул пропадал? Спасибо за внимание.
Код
player.setTitle("Offline Trade");
player.getAppearance().setTitleColor(0x808080);
player.broadcastUserInfo();
Понимаю насколько нубский вопрос и понимаю что надо писать проверку...
Сообщений: 1,240
Тем: 29
Зарегистрирован: May 2013
Репутация:
2,505
CharInfo() думаю куда лучшее место для этого. А также всегда будет без лишних манипуляций и присваиваний выдавать всё при каждом broadcastUserInfo().
Родился, живу и когда-нибудь умру.
Сообщений: 289
Тем: 55
Зарегистрирован: Mar 2012
Репутация:
672
Donatte Написал:CharInfo() думаю куда лучшее место для этого. А также всегда будет без лишних манипуляций и присваиваний выдавать всё при каждом broadcastUserInfo(). Немного не понял), куда засунуть код я знаю, но титул присваивается навсегда, а нужно чтобы когда ты заходил в игру, титул пропадал
Сообщений: 1,240
Тем: 29
Зарегистрирован: May 2013
Репутация:
2,505
FireaGe Написал:Немного не понял), куда засунуть код я знаю, но титул присваивается навсегда, а нужно чтобы когда ты заходил в игру, титул пропадал
Что-то вроде того:
[SRC="java"]if (_activeChar.isOnlineInt() == 2)
writeS("Offline Trade");
else
writeS(_activeChar.getAppereance().getTitle());[/SRC]
Смысл думаю понятен...
Родился, живу и когда-нибудь умру.
Сообщений: 289
Тем: 55
Зарегистрирован: Mar 2012
Репутация:
672
Donatte Написал:Что-то вроде того:
[SRC="java"]if (_activeChar.isOnlineInt() == 2)
writeS("Offline Trade");
else
writeS(_activeChar.getAppereance().getTitle());[/SRC]
Смысл думаю понятен... Проверил, теперь титул не появляется и чар появляется под землей, где виден только ник
Сообщений: 466
Тем: 10
Зарегистрирован: Dec 2012
Репутация:
398
FireaGe Написал:Проверил, теперь титул не появляется и чар появляется под землей, где виден только ник
При изменении одного флага с титулом ничего больше не должно изменяться. Значит поменял что-то еще.
В CharInfo ищешь writeS(_title) и отправляешь его во всех случаях, кроме оффтрейда.
Сообщений: 289
Тем: 55
Зарегистрирован: Mar 2012
Репутация:
672
Сделал как вы говорите, теперь персонажа вообще не видно)), он сидит на трейде, но его нету на том месте, куда прилетает администратор)) Уже не знаю, что делать
Сообщений: 466
Тем: 10
Зарегистрирован: Dec 2012
Репутация:
398
FireaGe Написал:Сделал как вы говорите, теперь персонажа вообще не видно)), он сидит на трейде, но его нету на том месте, куда прилетает администратор)) Уже не знаю, что делать
Я имел в виду:
[src='java']if(чарВОффтрейде) writeS("титул_оффтрейда");
else writeS(_title);[/src]
Изменять только строку с титулом в CharInfo. Хотя если так подумать, то этот титул должен меняться и в UserInfo. Тогда там тоже нужно добавить разветвление.
Сообщений: 289
Тем: 55
Зарегистрирован: Mar 2012
Репутация:
672
Warencense Написал:Я имел в виду:
[src='java']if(чарВОффтрейде) writeS("титул_оффтрейда");
else writeS(_title);[/src]
Изменять только строку с титулом в CharInfo. Хотя если так подумать, то этот титул должен меняться и в UserInfo. Тогда там тоже нужно добавить разветвление. В том дело, что в CharInfo нету writeS(_title)
Может вам проще будет, вот мой CharInfo:
Код
Код: package net.sf.l2j.gameserver.network.serverpackets;
import net.sf.l2j.commons.config.Config;
import net.sf.l2j.gameserver.datatables.NpcTable;
import net.sf.l2j.gameserver.model.Location;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.itemcontainer.Inventory;
import net.sf.l2j.gameserver.skills.AbnormalEffect;
public class CharInfo extends L2GameServerPacket
{
private final L2PcInstance _activeChar;
private final Inventory _inv;
private final int _x, _y, _z, _heading;
private final int _mAtkSpd, _pAtkSpd;
private final int _runSpd, _walkSpd;
private final float _moveMultiplier;
public CharInfo(L2PcInstance cha)
{
_activeChar = cha;
_inv = _activeChar.getInventory();
_x = _activeChar.getX();
_y = _activeChar.getY();
_z = _activeChar.getZ();
_heading = _activeChar.getHeading();
_mAtkSpd = _activeChar.getMAtkSpd();
_pAtkSpd = _activeChar.getPAtkSpd();
_moveMultiplier = _activeChar.getMovementSpeedMultiplier();
_runSpd = (int) (_activeChar.getRunSpeed() / _moveMultiplier);
_walkSpd = (int) (_activeChar.getWalkSpeed() / _moveMultiplier);
}
@Override
protected final void writeImpl()
{
boolean gmSeeInvis = false;
if (_activeChar.getAppearance().getInvisible())
{
L2PcInstance tmp = getClient().getActiveChar();
if (tmp != null && tmp.isGM())
gmSeeInvis = true;
}
writeC(0x03);
writeD(_x);
writeD(_y);
writeD(_z);
writeD(_heading);
writeD(_activeChar.getObjectId());
writeS(_activeChar.getName());
writeD(_activeChar.getRace().ordinal());
writeD(_activeChar.getAppearance().getSex() ? 1 : 0);
if (_activeChar.getClassIndex() == 0)
writeD(_activeChar.getClassId().getId());
else
writeD(_activeChar.getBaseClass());
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIRALL));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FACE));
// c6 new h's
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_RHAND));
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_LHAND));
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeD(0x00); // PvpFlag
writeD(0x00); // Karma
writeD(_mAtkSpd);
writeD(_pAtkSpd);
writeD(0x00); // PvpFlag
writeD(0x00); // Karma
writeD(_runSpd);
writeD(_walkSpd);
writeD(_runSpd); // swim run speed
writeD(_walkSpd); // swim walk speed
writeD(_runSpd); // fl run speed
writeD(_walkSpd); // fl walk speed
writeD(_runSpd); // fly run speed
writeD(_walkSpd); // fly walk speed
writeF(_activeChar.getMovementSpeedMultiplier());
writeF(_activeChar.getAttackSpeedMultiplier());
if (_activeChar.getMountType() != 0)
{
writeF(NpcTable.getInstance().getTemplate(_activeChar.getMountNpcId()).getCollisionRadius());
writeF(NpcTable.getInstance().getTemplate(_activeChar.getMountNpcId()).getCollisionHeight());
}
else
{
writeF(_activeChar.getBaseTemplate().getCollisionRadius());
writeF(_activeChar.getBaseTemplate().getCollisionHeight());
}
writeD(_activeChar.getAppearance().getHairStyle());
writeD(_activeChar.getAppearance().getHairColor());
writeD(_activeChar.getAppearance().getFace());
if (gmSeeInvis)
writeS("Invisible");
else
writeS(_activeChar.getTitle());
writeD(_activeChar.getClanId());
writeD(_activeChar.getClanCrestId());
writeD(_activeChar.getAllyId());
writeD(_activeChar.getAllyCrestId());
writeD(0);
writeC(_activeChar.isSitting() ? 0 : 1); // standing = 1 sitting = 0
writeC(_activeChar.isRunning() ? 1 : 0); // running = 1 walking = 0
writeC(_activeChar.isInCombat() ? 1 : 0);
writeC(_activeChar.isAlikeDead() ? 1 : 0);
if (gmSeeInvis)
writeC(0);
else
writeC(_activeChar.getAppearance().getInvisible() ? 1 : 0); // invisible = 1 visible =0
writeC(_activeChar.getMountType()); // 1 on strider 2 on wyvern 0 no mount
writeC(_activeChar.getPrivateStoreType()); // 1 - sellshop
writeH(_activeChar.getCubics().size());
for (int id : _activeChar.getCubics().keySet())
writeH(id);
writeC(_activeChar.isInPartyMatchRoom() ? 1 : 0);
if (gmSeeInvis)
writeD((_activeChar.getAbnormalEffect() | AbnormalEffect.STEALTH.getMask()));
else
writeD(_activeChar.getAbnormalEffect());
writeC(_activeChar.getRecomLeft());
writeH(_activeChar.getRecomHave()); // Blue value for name (0 = white, 255 = pure blue)
writeD(_activeChar.getClassId().getId());
writeD(_activeChar.getMaxCp());
writeD((int) _activeChar.getCurrentCp());
writeC(_activeChar.isMounted() ? 0 : _activeChar.getEnchantEffect());
writeC(_activeChar.isRaceArhont() && _activeChar.isRaceArhontConfirmed() ? 1 : (_activeChar.isHero() ? 2 : 0));
writeD(_activeChar.getClanCrestLargeId());
writeC(_activeChar.isNoble() ? 1 : 0); // Symbol on char menu ctrl+I
writeC(_activeChar.isRaceLeader() && _activeChar.isRaceLeaderConfirmed() ? 1 : 0);
writeC(_activeChar.isFishing() ? 1 : 0); // 0x01: Fishing Mode (Cant be undone by setting back to 0)
Location loc = _activeChar.getFishingLoc();
if (loc != null)
{
writeD(loc.getX());
writeD(loc.getY());
writeD(loc.getZ());
}
else
{
writeD(0);
writeD(0);
writeD(0);
}
writeD(_activeChar.getAppearance().getNameColor());
writeD(0x00); // isRunning() as in UserInfo?
writeD(_activeChar.getPledgeClass());
writeD(_activeChar.getPledgeType());
writeD(_activeChar.getAppearance().getTitleColor());
}
}
Сообщений: 666
Тем: 15
Зарегистрирован: Aug 2014
Репутация:
1,790
FireaGe Написал:В том дело, что в CharInfo нету writeS(_title)
Может вам проще будет, вот мой CharInfo:
Код
Код: package net.sf.l2j.gameserver.network.serverpackets;
import net.sf.l2j.commons.config.Config;
import net.sf.l2j.gameserver.datatables.NpcTable;
import net.sf.l2j.gameserver.model.Location;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.itemcontainer.Inventory;
import net.sf.l2j.gameserver.skills.AbnormalEffect;
public class CharInfo extends L2GameServerPacket
{
private final L2PcInstance _activeChar;
private final Inventory _inv;
private final int _x, _y, _z, _heading;
private final int _mAtkSpd, _pAtkSpd;
private final int _runSpd, _walkSpd;
private final float _moveMultiplier;
public CharInfo(L2PcInstance cha)
{
_activeChar = cha;
_inv = _activeChar.getInventory();
_x = _activeChar.getX();
_y = _activeChar.getY();
_z = _activeChar.getZ();
_heading = _activeChar.getHeading();
_mAtkSpd = _activeChar.getMAtkSpd();
_pAtkSpd = _activeChar.getPAtkSpd();
_moveMultiplier = _activeChar.getMovementSpeedMultiplier();
_runSpd = (int) (_activeChar.getRunSpeed() / _moveMultiplier);
_walkSpd = (int) (_activeChar.getWalkSpeed() / _moveMultiplier);
}
@Override
protected final void writeImpl()
{
boolean gmSeeInvis = false;
if (_activeChar.getAppearance().getInvisible())
{
L2PcInstance tmp = getClient().getActiveChar();
if (tmp != null && tmp.isGM())
gmSeeInvis = true;
}
writeC(0x03);
writeD(_x);
writeD(_y);
writeD(_z);
writeD(_heading);
writeD(_activeChar.getObjectId());
writeS(_activeChar.getName());
writeD(_activeChar.getRace().ordinal());
writeD(_activeChar.getAppearance().getSex() ? 1 : 0);
if (_activeChar.getClassIndex() == 0)
writeD(_activeChar.getClassId().getId());
else
writeD(_activeChar.getBaseClass());
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIRALL));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FACE));
// c6 new h's
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_RHAND));
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_LHAND));
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeH(0x00);
writeD(0x00); // PvpFlag
writeD(0x00); // Karma
writeD(_mAtkSpd);
writeD(_pAtkSpd);
writeD(0x00); // PvpFlag
writeD(0x00); // Karma
writeD(_runSpd);
writeD(_walkSpd);
writeD(_runSpd); // swim run speed
writeD(_walkSpd); // swim walk speed
writeD(_runSpd); // fl run speed
writeD(_walkSpd); // fl walk speed
writeD(_runSpd); // fly run speed
writeD(_walkSpd); // fly walk speed
writeF(_activeChar.getMovementSpeedMultiplier());
writeF(_activeChar.getAttackSpeedMultiplier());
if (_activeChar.getMountType() != 0)
{
writeF(NpcTable.getInstance().getTemplate(_activeChar.getMountNpcId()).getCollisionRadius());
writeF(NpcTable.getInstance().getTemplate(_activeChar.getMountNpcId()).getCollisionHeight());
}
else
{
writeF(_activeChar.getBaseTemplate().getCollisionRadius());
writeF(_activeChar.getBaseTemplate().getCollisionHeight());
}
writeD(_activeChar.getAppearance().getHairStyle());
writeD(_activeChar.getAppearance().getHairColor());
writeD(_activeChar.getAppearance().getFace());
if (gmSeeInvis)
writeS("Invisible");
else
writeS(_activeChar.getTitle());
writeD(_activeChar.getClanId());
writeD(_activeChar.getClanCrestId());
writeD(_activeChar.getAllyId());
writeD(_activeChar.getAllyCrestId());
writeD(0);
writeC(_activeChar.isSitting() ? 0 : 1); // standing = 1 sitting = 0
writeC(_activeChar.isRunning() ? 1 : 0); // running = 1 walking = 0
writeC(_activeChar.isInCombat() ? 1 : 0);
writeC(_activeChar.isAlikeDead() ? 1 : 0);
if (gmSeeInvis)
writeC(0);
else
writeC(_activeChar.getAppearance().getInvisible() ? 1 : 0); // invisible = 1 visible =0
writeC(_activeChar.getMountType()); // 1 on strider 2 on wyvern 0 no mount
writeC(_activeChar.getPrivateStoreType()); // 1 - sellshop
writeH(_activeChar.getCubics().size());
for (int id : _activeChar.getCubics().keySet())
writeH(id);
writeC(_activeChar.isInPartyMatchRoom() ? 1 : 0);
if (gmSeeInvis)
writeD((_activeChar.getAbnormalEffect() | AbnormalEffect.STEALTH.getMask()));
else
writeD(_activeChar.getAbnormalEffect());
writeC(_activeChar.getRecomLeft());
writeH(_activeChar.getRecomHave()); // Blue value for name (0 = white, 255 = pure blue)
writeD(_activeChar.getClassId().getId());
writeD(_activeChar.getMaxCp());
writeD((int) _activeChar.getCurrentCp());
writeC(_activeChar.isMounted() ? 0 : _activeChar.getEnchantEffect());
writeC(_activeChar.isRaceArhont() && _activeChar.isRaceArhontConfirmed() ? 1 : (_activeChar.isHero() ? 2 : 0));
writeD(_activeChar.getClanCrestLargeId());
writeC(_activeChar.isNoble() ? 1 : 0); // Symbol on char menu ctrl+I
writeC(_activeChar.isRaceLeader() && _activeChar.isRaceLeaderConfirmed() ? 1 : 0);
writeC(_activeChar.isFishing() ? 1 : 0); // 0x01: Fishing Mode (Cant be undone by setting back to 0)
Location loc = _activeChar.getFishingLoc();
if (loc != null)
{
writeD(loc.getX());
writeD(loc.getY());
writeD(loc.getZ());
}
else
{
writeD(0);
writeD(0);
writeD(0);
}
writeD(_activeChar.getAppearance().getNameColor());
writeD(0x00); // isRunning() as in UserInfo?
writeD(_activeChar.getPledgeClass());
writeD(_activeChar.getPledgeType());
writeD(_activeChar.getAppearance().getTitleColor());
}
}
Код: if (gmSeeInvis)
writeS("Invisible");
else
writeS(_activeChar.getTitle());
|