Сообщений: 666
Тем: 15
Зарегистрирован: Aug 2014
Репутация:
1,790
Колупаю по чуть-чуть линдвиор, все сообщения урона вроде настроил, но тут заметил одну деталь...
Когда саммон критует, в системных сообщениях пишет, а вот над таргетом который он бьет, надпись "Крит." не вылетает, только когда перевожу окно ла2 в пассивный режим(переключаюсь на другое окно к примеру), то выскакивают все криты которые были до этого. Куда копать?
Сообщений: 199
Тем: 0
Зарегистрирован: Jul 2013
Репутация:
348
Influence Написал:Колупаю по чуть-чуть линдвиор, все сообщения урона вроде настроил, но тут заметил одну деталь...
Когда саммон критует, в системных сообщениях пишет, а вот над таргетом который он бьет, надпись "Крит." не вылетает, только когда перевожу окно ла2 в пассивный режим(переключаюсь на другое окно к примеру), то выскакивают все криты которые были до этого. Куда копать?
PetInfo дописывать
Сообщений: 666
Тем: 15
Зарегистрирован: Aug 2014
Репутация:
1,790
Melcor Написал:PetInfo дописывать
А к чему тут PetInfo если крит отправляется через SystemMessage из SummonInstance?
Сообщений: 466
Тем: 10
Зарегистрирован: Dec 2012
Репутация:
398
На сколько я знаю, надписи "Крит.", "Блок" и т.п. выползает при помощи пакета Attack. Выходя из этого - видимо копать флаги, либо (если с флагами все в порядке) условия, которых нужно придерживаться для вывода надписи.
Сообщений: 666
Тем: 15
Зарегистрирован: Aug 2014
Репутация:
1,790
10-29-2014, 07:17 PM
(Сообщение последний раз редактировалось: 10-29-2014, 07:24 PM Influence.)
Warencense Написал:На сколько я знаю, надписи "Крит.", "Блок" и т.п. выползает при помощи пакета Attack. Выходя из этого - видимо копать флаги, либо (если с флагами все в порядке) условия, которых нужно придерживаться для вывода надписи.
displayGivenDamageMessage
Код: public void displayGiveDamageMessage(Creature target, int damage, boolean crit, boolean miss, boolean shld, boolean magic)
{
Player owner = getPlayer();
if (owner == null)
{
return;
}
if (crit)
{
owner.sendPacket(SystemMsg.SUMMONED_MONSTERS_CRITICAL_HIT);
}
if (miss)
{
owner.sendPacket(new SystemMessage(SystemMessage.C1S_ATTACK_WENT_ASTRAY).addName(this));
}
else if (!target.isInvul())
{
owner.sendPacket(new SystemMessage(SystemMessage.C1_HAS_GIVEN_C2_DAMAGE_OF_S3).addName(this).addName(target).addNumber(damage));
}
}
Добавлено через 6 минут
Сейчас попробую поковырять флаги в Attack, как то из совсем не замети :confused:
Сообщений: 466
Тем: 10
Зарегистрирован: Dec 2012
Репутация:
398
Аа. Сорян, все, то другое. Но все же стоит пересмотреть.
В общем глянь в SystemMsg-ru.dat сообщения, начинающиеся на C1. Или поиск по SUMMON. А если есть саммонер на евро, можно соснифать ID месседжа.
Сообщений: 666
Тем: 15
Зарегистрирован: Aug 2014
Репутация:
1,790
Warencense Написал:Аа. Сорян, все, то другое. Но все же стоит пересмотреть.
В общем глянь в SystemMsg-ru.dat сообщения, начинающиеся на C1. Или поиск по SUMMON. А если есть саммонер на евро, можно соснифать ID месседжа.
Суть не в том, сами то пакеты приходят, но сразу не отображаются, а если свернуть клиент и развернуть, или переключаться на другое окно, а потом обратно на клиент, то выскакивает сразу куча строк Крит., которые небыли показаны ранее.
Сообщений: 466
Тем: 10
Зарегистрирован: Dec 2012
Репутация:
398
Ну если пакеты приходят во время, значит скорее всего проблема в патче, я так думаю. Попробуй отловить траффик при сворачивании/разворачивании клиента. Но это вряд ли поможет.
Сообщений: 199
Тем: 0
Зарегистрирован: Jul 2013
Репутация:
348
Influence Написал:А к чему тут PetInfo если крит отправляется через SystemMessage из SummonInstance?
В старых сборках он не был заполнен до конца, то есть поля со скоростью атаки и движения остались с еденичками. Просто возникал такой же баг.
Сообщений: 666
Тем: 15
Зарегистрирован: Aug 2014
Репутация:
1,790
Melcor Написал:В старых сборках он не был заполнен до конца, то есть поля со скоростью атаки и движения остались с еденичками. Просто возникал такой же баг.
PetInfo
Код: /*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package lineage2.gameserver.network.serverpackets;
import java.util.List;
import lineage2.gameserver.model.Summon;
import lineage2.gameserver.model.base.TeamType;
import lineage2.gameserver.tables.PetDataTable;
import lineage2.gameserver.utils.Location;
public class PetInfo extends L2GameServerPacket
{
private final int _runSpd;
private final int _walkSpd;
private final int MAtkSpd;
private final int PAtkSpd;
private final int pvp_flag;
private final int karma;
private int rideable;
private final int _type;
private final int obj_id;
private final int npc_id;
private final int runing;
private final int incombat;
private final int dead;
private final int _sp;
private final int level;
private final int curFed;
private final int maxFed;
private final int curHp;
private final int maxHp;
private final int curMp;
private final int maxMp;
private final int curLoad;
private final int maxLoad;
private final int PAtk;
private final int PDef;
private final int MAtk;
private final int MDef;
private final int Accuracy;
private final int Evasion;
private final int Crit;
private final int sps;
private final int ss;
private final int type;
private int _showSpawnAnimation;
private final Location _loc;
private final double col_redius;
private final double col_height;
private final long exp;
private final long exp_this_lvl;
private final long exp_next_lvl;
private final String _name;
private final String title;
private final TeamType _team;
private final int sumPoint;
private final int maxSumPoint;
private final int _ownerId;
private final List<Integer> _aveList;
private final int _mevasion;
private final int _maccuracy;
private final int _mCritRate;
public PetInfo(Summon summon)
{
_type = summon.getSummonType();
_ownerId = summon.getPlayer().getObjectId();
obj_id = summon.getObjectId();
npc_id = summon.getTemplate().getId();
_loc = summon.getLoc();
MAtkSpd = summon.getMAtkSpd();
PAtkSpd = summon.getPAtkSpd();
_runSpd = summon.getRunSpeed();
_walkSpd = summon.getWalkSpeed();
col_redius = summon.getColRadius();
col_height = summon.getColHeight();
runing = summon.isRunning() ? 1 : 0;
incombat = summon.isInCombat() ? 1 : 0;
dead = summon.isAlikeDead() ? 1 : 0;
_name = summon.getName().equalsIgnoreCase(summon.getTemplate().name) ? "" : summon.getName();
title = summon.getTitle();
pvp_flag = summon.getPvpFlag();
karma = summon.getKarma();
curFed = summon.getCurrentFed();
maxFed = summon.getMaxFed();
curHp = (int) summon.getCurrentHp();
maxHp = summon.getMaxHp();
curMp = (int) summon.getCurrentMp();
maxMp = summon.getMaxMp();
_sp = summon.getSp();
level = summon.getLevel();
exp = summon.getExp();
exp_this_lvl = summon.getExpForThisLevel();
exp_next_lvl = summon.getExpForNextLevel();
curLoad = summon.isPet() ? summon.getInventory().getTotalWeight() : 0;
maxLoad = summon.getMaxLoad();
PAtk = summon.getPAtk(null);
PDef = summon.getPDef(null);
MAtk = summon.getMAtk(null, null);
MDef = summon.getMDef(null, null);
Accuracy = summon.getAccuracy();
Evasion = summon.getEvasionRate(null);
Crit = summon.getCriticalHit(null, null);
if (summon.getPlayer().getTransformation() != 0)
{
rideable = 0; // not rideable
}
else
{
rideable = PetDataTable.isMountable(npc_id) ? 1 : 0;
}
_team = summon.getTeam();
ss = summon.getSoulshotConsumeCount();
sps = summon.getSpiritshotConsumeCount();
_showSpawnAnimation = summon.getSpawnAnimation();
type = summon.getFormId();
sumPoint = summon.getPlayer().getSummonList().getUsedPoints();
maxSumPoint = summon.getPlayer().getSummonPointMax();
_aveList = summon.getAveList();
_mevasion = summon.getMEvasionRate(null);
_maccuracy = summon.getMAccuracy();
_mCritRate = (int) summon.getMagicCriticalRate(null, null);
}
public PetInfo update()
{
_showSpawnAnimation = 1;
return this;
}
@Override
protected final void writeImpl()
{
writeC(0xb2);
writeD(_type);
writeD(obj_id);
writeD(npc_id + 1000000);
writeD(0); // 1=attackable
writeD(_loc.getX());
writeD(_loc.getY());
writeD(_loc.getZ());
writeD(_loc.getHeading());
writeD(0);
writeD(MAtkSpd);
writeD(PAtkSpd);
writeD(_runSpd);
writeD(_walkSpd);
writeD(_runSpd/* _swimRunSpd */);
writeD(_walkSpd/* _swimWalkSpd */);
writeD(_runSpd/* _flRunSpd */);
writeD(_walkSpd/* _flWalkSpd */);
writeD(_runSpd/* _flyRunSpd */);
writeD(_walkSpd/* _flyWalkSpd */);
writeF(1/* _cha.getProperMultiplier() */);
writeF(1/* _cha.getAttackSpeedMultiplier() */);
writeF(col_redius);
writeF(col_height);
writeD(0); // right hand weapon
writeD(0); // body armor
writeD(0); // left hand weapon
writeC(_ownerId); // name above char 1=true ... ??
writeC(runing); // running=1
writeC(incombat); // attacking 1=true
writeC(dead); // dead 1=true
writeC(_showSpawnAnimation); // invisible ?? 0=false 1=true 2=summoned
// (only works if model has a summon
// animation)
writeD(-1);
writeS(_name);
writeD(-1);
writeS(title);
writeD(1);
writeD(pvp_flag); // 0=white, 1=purple, 2=purpleblink, if its greater
// then karma = purple
writeD(karma); // hmm karma ??
writeD(curFed); // how fed it is
writeD(maxFed); // max fed it can be
writeD(curHp); // current hp
writeD(maxHp); // max hp
writeD(curMp); // current mp
writeD(maxMp); // max mp
writeD(_sp); // sp
writeD(level);// lvl
writeQ(exp);
writeQ(exp_this_lvl); // 0% absolute value
writeQ(exp_next_lvl); // 100% absoulte value
writeD(curLoad); // weight
writeD(maxLoad); // max weight it can carry
writeD(PAtk);// patk
writeD(PDef);// pdef
writeD(Accuracy);// accuracy
writeD(Evasion);// evasion
writeD(Crit);// critical
writeD(MAtk);// matk
writeD(MDef);// mdef
writeD(_mevasion);
writeD(_maccuracy);
writeD(_mCritRate);
writeD(_runSpd);// speed
writeD(PAtkSpd);// atkspeed
writeD(MAtkSpd);// casting speed
writeD(rideable);
writeC(0); // c2
writeC(_team.ordinal()); // team aura (1 = blue, 2 = red)
writeD(ss);
writeD(sps);
writeD(type);
writeD(0x00); // id
writeD(sumPoint);
writeD(maxSumPoint);
if (_aveList != null)
{
writeD(_aveList.size());
for (int i : _aveList)
{
writeD(i);
}
}
else
{
writeD(0x00);
}
writeC(0);
}
}
|