Тема: Augmentation
Показать сообщение отдельно
Непрочитано 24.10.2012, 13:24   #9
Аватар для Archiel
Пользователь

Автор темы (Топик Стартер) Re: Augmentation

Цитата:
Сообщение от Gaikotsu Посмотреть сообщение
возможно стоит покопать в серверных пакетах, отсылающих информацию о предметах клиенту - там для той же брони к примеру может значение ауги не слаться, ну точнее будет слаться ее отсутствие.
Да механику я понимаю, но я там уже всё перерыл, сейчас скину куски кода, которые вообще связаны с аугментацией.

Добавлено через 15 минут
В общем сам процесс вот каков:

1) AugmentationData.java
Тут всё просто, алгоритм рассчёта аугментации, начисление бонусов и т.п.
В конце концов рассчитывается просто
Код:
generateRandomAugmentation
там никаких условий связанных со шмотом нет, кроме:
1:
Свернуть ↑Развернуть ↓

Что само по себе просто меняет алгоритмы вычисления и возможные бонусы.


2) AbstractRefinePacket.java

Тут хранятся как раз условия при которых вообще можно запустить аугмент, хранятся камни, их ИД, уровни, гемы, которые используются при аугментации и т.п. Опять же, настройки влияют только на сам процесс аугментации.

3) Ну и, наконец, когда мы всё рассчитали, у нас идёт RequestRefine.java

1:
Свернуть ↑Развернуть ↓



Что я нашёл ещё, в сервер пакетах есть вот это:
CharSelectionInfo.java
Код:
writeD(charInfoPackage.getAugmentationId());
А ниже:
1:
Свернуть ↑Развернуть ↓


Добавлено через 22 минуты
Исходники:
Свернуть ↑Развернуть ↓


Добавлено через 1 час 51 минуту
Продебажил весь процесс аугментации, разницы между аугментом армора и оружия не увидел. В обоих случаях в итоге шлётся:
Код:
final int stat12 = 0x0000FFFF & aug.getAugmentationId();
		final int stat34 = aug.getAugmentationId() >> 16;
		activeChar.sendPacket(new ExVariationResult(stat12,stat34,1));

		InventoryUpdate iu = new InventoryUpdate();
		iu.addModifiedItem(targetItem);
		activeChar.sendPacket(iu);
И всё.

Добавлено через 1 час 53 минуты
Весь класс вот:
Код:
public class ExVariationResult extends L2GameServerPacket
{
	private static final String _S__FE_55_EXVARIATIONRESULT = "[S] FE:56 ExVariationResult";

	private int _stat12;
	private int _stat34;
	private int _unk3;

	public ExVariationResult(int unk1, int unk2, int unk3)
	{
		_stat12 = unk1;
		_stat34 = unk2;
		_unk3 = unk3;
	}

	/**
	 * @see ru.l2open.util.network.BaseSendablePacket.ServerBasePacket#writeImpl()
	 */
	@Override
	protected void writeImpl()
	{
		writeC(0xfe);
		writeH(0x56);
		writeD(_stat12);
		writeD(_stat34);
		writeD(_unk3);
	}

	/**
	 * @see ru.l2open.gameserver.BasePacket#getType()
	 */
	@Override
	public String getType()
	{
		return _S__FE_55_EXVARIATIONRESULT;
	}

}
Добавлено через 1 час 55 минут
А вот вторая часть, InventoryUpdate.java

1:
Свернуть ↑Развернуть ↓

Последний раз редактировалось Archiel; 24.10.2012 в 15:19. Причина: Добавлено сообщение
Archiel вне форума Отправить сообщение для Archiel с помощью ICQ Ответить с цитированием