Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
ОБЪЯСНЕНИЕ:Вот пакет -> RecipeItemMakeInfo
Хранится тута - java/org/l2jmobius/gameserver/network/serverpackets/RecipeItemMakeInfo.java
При каких-то условиях (если что-то там равно 2), можно в конце выслать еще fcfc
Если что-то будет интересное - поделитесь
А так, я сначало подумал что это как с Изобилками.
Как Я и ChaosPaladin ответили, в пакете, который отправляет сервер клиенту при запросе на отображение окна, указаного Вами выше, параметры, такие как "не отображается бонус от этого умения", не прописаны в пакете. Вам мной было предложено перейти по путикните носом пож куда лезть искать?
При выученном умении Мастер Создания у крафтера при крафте не отображается бонус от этого умения
java/org/l2jmobius/gameserver/network/serverpackets/RecipeItemMakeInfo.java
и лицезреть структуру пакета, который предстоит доработать для того, Вы получили результат.но к сожалению с условиемможно в конце выслать еще fcfc
Как ответил ChaosPaladin - это условиеПри каких-то условиях (если что-то там равно 2)
Можно предположить, что если данные параметры появляются у Вас в окне, на которое Вы ссылаетесь в первом посте, это условие выполняется и так же, как заметил ChaosPaladin2 это GL2ServerType
FC - это дополнительный шанс, а FC - это шанс крита.А fcfc это доп шанс и крит шанс
в файлике, который называется "пакет"Расскажите какие?
java/org/l2jmobius/gameserver/network/serverpackets/RecipeItemMakeInfo.java
в конце структуры записи для отправки в клиент@Override
public boolean write(PacketWriter packet)
{
final RecipeHolder recipe = RecipeData.getInstance().getRecipe(_id);
if (recipe != null)
{
OutgoingPackets.RECIPE_ITEM_MAKE_INFO.writeId(packet);
packet.writeD(_id);
packet.writeD(recipe.isDwarvenRecipe() ? 0 : 1); // 0 = Dwarven - 1 = Common
packet.writeD((int) _player.getCurrentMp());
packet.writeD(_player.getMaxMp());
packet.writeD(_success == null ? -1 : (_success ? 1 : 0)); // item creation none/success/failed
packet.writeC(_offeringMaximumAdena > 0 ? 1 : 0); // Show offering window.
packet.writeQ(_offeringMaximumAdena); // Adena worth of items for maximum offering.
return true;
}
PacketLogger.info("Character: " + _player + ": Requested unexisting recipe with id = " + _id);
return false;
}
@Override
public boolean write(PacketWriter packet)
{
final RecipeHolder recipe = RecipeData.getInstance().getRecipe(_id);
if (recipe != null)
{
OutgoingPackets.RECIPE_ITEM_MAKE_INFO.writeId(packet);
packet.writeD(_id);
packet.writeD(recipe.isDwarvenRecipe() ? 0 : 1); // 0 = Dwarven - 1 = Common
packet.writeD((int) _player.getCurrentMp());
packet.writeD(_player.getMaxMp());
packet.writeD(_success == null ? -1 : (_success ? 1 : 0)); // item creation none/success/failed
packet.writeC(_offeringMaximumAdena > 0 ? 1 : 0); // Show offering window.
packet.writeQ(_offeringMaximumAdena); // Adena worth of items for maximum offering.
packet.writeF(0);
packet.writeC(0);
packet.writeF(0);
packet.writeC(0);
return true;
}
PacketLogger.info("Character: " + _player + ": Requested unexisting recipe with id = " + _id);
return false;
}
2 это GL2ServerTypeПри каких-то условиях (если что-то там равно 2), можно в конце выслать еще fcfc
у вас не корректная структура сервер пакетов для отображения данного параметра помойму 2ухТкните носом пож куда лезть искать?
При выученном умении Мастер Создания у крафтера при крафте не отображается бонус от этого умения
Посмотреть вложение 44444
Расскажите какие?у вас не корректная структура сервер пакетов для отображения данного параметра помойму 2ух
частично ток согласен, структура немного другая но протоколы разные поэтому не буду критиковатьОБЪЯСНЕНИЕ:
На приложеном Вами скриншоте мы все увидели недоработку, о которой Вы сообщили в посте как
Как Я и ChaosPaladin ответили, в пакете, который отправляет сервер клиенту при запросе на отображение окна, указаного Вами выше, параметры, такие как "не отображается бонус от этого умения", не прописаны в пакете. Вам мной было предложено перейти по путиjava/org/l2jmobius/gameserver/network/serverpackets/RecipeItemMakeInfo.java
и лицезреть структуру пакета, который предстоит доработать для того, Вы получили результат.
Для получения результата, мной было предложено в конце пакета дописать
но к сожалению с условием
Как ответил ChaosPaladin - это условие
Можно предположить, что если данные параметры появляются у Вас в окне, на которое Вы ссылаетесь в первом посте, это условие выполняется и так же, как заметил ChaosPaladin
FC - это дополнительный шанс, а FC - это шанс крита.
Из этого следует, что
в файлике, который называется "пакет"java/org/l2jmobius/gameserver/network/serverpackets/RecipeItemMakeInfo.java
в конце структуры записи для отправки в клиент
требуется дописать fcfc. То-есть чтобы получить следующую структуру:Код:@Override public boolean write(PacketWriter packet) { final RecipeHolder recipe = RecipeData.getInstance().getRecipe(_id); if (recipe != null) { OutgoingPackets.RECIPE_ITEM_MAKE_INFO.writeId(packet); packet.writeD(_id); packet.writeD(recipe.isDwarvenRecipe() ? 0 : 1); // 0 = Dwarven - 1 = Common packet.writeD((int) _player.getCurrentMp()); packet.writeD(_player.getMaxMp()); packet.writeD(_success == null ? -1 : (_success ? 1 : 0)); // item creation none/success/failed packet.writeC(_offeringMaximumAdena > 0 ? 1 : 0); // Show offering window. packet.writeQ(_offeringMaximumAdena); // Adena worth of items for maximum offering. return true; } PacketLogger.info("Character: " + _player + ": Requested unexisting recipe with id = " + _id); return false; }
Далее при помощи простых действий (на постижение которых у меня ушли годы) - сохраняем файлик с новой структурой - запускаем сервер в режиме отладки и при открытии меню, которое Вы показали в первом посте, смотреть отслеживение параметров и изменять их в самом коде пакета (путем изменения ноликов на единички и путем hotswap обновлять класс, которые запрашивает сервер. Или перезагружать сервер при каждом изменении параметра.Код:@Override public boolean write(PacketWriter packet) { final RecipeHolder recipe = RecipeData.getInstance().getRecipe(_id); if (recipe != null) { OutgoingPackets.RECIPE_ITEM_MAKE_INFO.writeId(packet); packet.writeD(_id); packet.writeD(recipe.isDwarvenRecipe() ? 0 : 1); // 0 = Dwarven - 1 = Common packet.writeD((int) _player.getCurrentMp()); packet.writeD(_player.getMaxMp()); packet.writeD(_success == null ? -1 : (_success ? 1 : 0)); // item creation none/success/failed packet.writeC(_offeringMaximumAdena > 0 ? 1 : 0); // Show offering window. packet.writeQ(_offeringMaximumAdena); // Adena worth of items for maximum offering. packet.writeF(0); packet.writeC(0); packet.writeF(0); packet.writeC(0); return true; } PacketLogger.info("Character: " + _player + ": Requested unexisting recipe with id = " + _id); return false; }
ОТВЕТ НА ГЛАВНЫЙ ВОПРОС.
У МОБИУСА ТАКОГО НЕТУ.
@Override
protected final void writeImpl()
{
writeC(0xDD);
writeD(_recipe.getId());
writeD(!_recipe.isDwarven());
writeD(_curMp);
writeD(_maxMp);
writeD(_status); //итог крафта: 0xFFFFFFFF - нет статуса, 1 - удача, 0 - провал
writeC(_recipe.getOffering() > 0);
writeQ(_recipe.getOffering());
writeF(_chanceAdd);
writeC(_chanceCrit > 0);
writeF(_chanceCrit);
}
кстати вру.Ткните носом пож куда лезть искать?
При выученном умении Мастер Создания у крафтера при крафте не отображается бонус от этого умения
Посмотреть вложение 44444
Можете вот даже проверить...Ткните носом пож куда лезть искать?
При выученном умении Мастер Создания у крафтера при крафте не отображается бонус от этого умения
Посмотреть вложение 44444
Index: java/org/l2jmobius/gameserver/network/serverpackets/RecipeItemMakeInfo.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/java/org/l2jmobius/gameserver/network/serverpackets/RecipeItemMakeInfo.java b/java/org/l2jmobius/gameserver/network/serverpackets/RecipeItemMakeInfo.java
--- a/java/org/l2jmobius/gameserver/network/serverpackets/RecipeItemMakeInfo.java
+++ b/java/org/l2jmobius/gameserver/network/serverpackets/RecipeItemMakeInfo.java (date 1657757785005)
@@ -20,6 +20,7 @@
import org.l2jmobius.gameserver.data.xml.RecipeData;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.holders.RecipeHolder;
+import org.l2jmobius.gameserver.model.stats.Stat;
import org.l2jmobius.gameserver.network.OutgoingPackets;
import org.l2jmobius.gameserver.network.PacketLogger;
@@ -65,6 +66,8 @@
@Override
public boolean write(PacketWriter packet)
{
+ double craft_rate = _player.getStat().getValue(Stat.CRAFT_RATE, 0);
+ double craft_critical = _player.getStat().getValue(Stat.CRAFTING_CRITICAL, 0);
final RecipeHolder recipe = RecipeData.getInstance().getRecipe(_id);
if (recipe != null)
{
@@ -76,6 +79,10 @@
packet.writeD(_success == null ? -1 : (_success ? 1 : 0)); // item creation none/success/failed
packet.writeC(_offeringMaximumAdena > 0 ? 1 : 0); // Show offering window.
packet.writeQ(_offeringMaximumAdena); // Adena worth of items for maximum offering.
+ packet.writeF(Math.max(craft_rate, 100.0));
+ packet.writeC(craft_rate > 0 ? 1 : 0);
+ packet.writeF(Math.max(craft_critical, 100.0));
+ packet.writeC(craft_critical > 0 ? 1 : 0);
return true;
}
PacketLogger.info("Character: " + _player + ": Requested unexisting recipe with id = " + _id);
Index: java/org/l2jmobius/gameserver/network/serverpackets/RecipeShopItemInfo.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/java/org/l2jmobius/gameserver/network/serverpackets/RecipeShopItemInfo.java b/java/org/l2jmobius/gameserver/network/serverpackets/RecipeShopItemInfo.java
--- a/java/org/l2jmobius/gameserver/network/serverpackets/RecipeShopItemInfo.java
+++ b/java/org/l2jmobius/gameserver/network/serverpackets/RecipeShopItemInfo.java (date 1657757934486)
@@ -18,6 +18,7 @@
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.stats.Stat;
import org.l2jmobius.gameserver.network.OutgoingPackets;
public class RecipeShopItemInfo implements IClientOutgoingPacket
@@ -49,6 +50,8 @@
@Override
public boolean write(PacketWriter packet)
{
+ double craft_rate = _manufacturer.getStat().getValue(Stat.CRAFT_RATE, 0);
+ double craft_critical = _manufacturer.getStat().getValue(Stat.CRAFTING_CRITICAL, 0);
OutgoingPackets.RECIPE_SHOP_ITEM_INFO.writeId(packet);
packet.writeD(_manufacturer.getObjectId());
packet.writeD(_recipeId);
@@ -58,6 +61,10 @@
packet.writeQ(_manufacturePrice);
packet.writeC(_offeringMaximumAdena > 0 ? 1 : 0); // Trigger offering window if 1
packet.writeQ(_offeringMaximumAdena);
+ packet.writeF(Math.max(craft_rate, 100.0));
+ packet.writeC(craft_rate > 0 ? 1 : 0);
+ packet.writeF(Math.max(craft_critical, 100.0));
+ packet.writeC(craft_critical > 0 ? 1 : 0);
return true;
}
}
Index: java/org/l2jmobius/gameserver/network/serverpackets/RecipeShopSellList.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/java/org/l2jmobius/gameserver/network/serverpackets/RecipeShopSellList.java b/java/org/l2jmobius/gameserver/network/serverpackets/RecipeShopSellList.java
--- a/java/org/l2jmobius/gameserver/network/serverpackets/RecipeShopSellList.java
+++ b/java/org/l2jmobius/gameserver/network/serverpackets/RecipeShopSellList.java (date 1657758086935)
@@ -20,6 +20,7 @@
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.stats.Stat;
import org.l2jmobius.gameserver.network.OutgoingPackets;
public class RecipeShopSellList implements IClientOutgoingPacket
@@ -36,6 +37,8 @@
@Override
public boolean write(PacketWriter packet)
{
+ double craft_rate = _manufacturer.getStat().getValue(Stat.CRAFT_RATE, 0);
+ double craft_critical = _manufacturer.getStat().getValue(Stat.CRAFTING_CRITICAL, 0);
OutgoingPackets.RECIPE_SHOP_SELL_LIST.writeId(packet);
packet.writeD(_manufacturer.getObjectId());
packet.writeD((int) _manufacturer.getCurrentMp()); // Creator's MP
@@ -53,6 +56,9 @@
packet.writeD(item.getKey());
packet.writeD(0); // CanCreate?
packet.writeQ(item.getValue());
+ packet.writeF(Math.max(craft_rate, 100.0));
+ packet.writeC(craft_rate > 0 ? 1 : 0);
+ packet.writeF(Math.max(craft_critical, 100.0));
}
}
return true;
Спасибо за подробное описание. Буду пробовать.ОБЪЯСНЕНИЕ:
На приложеном Вами скриншоте мы все увидели недоработку, о которой Вы сообщили в посте как
Как Я и ChaosPaladin ответили, в пакете, который отправляет сервер клиенту при запросе на отображение окна, указаного Вами выше, параметры, такие как "не отображается бонус от этого умения", не прописаны в пакете. Вам мной было предложено перейти по путиjava/org/l2jmobius/gameserver/network/serverpackets/RecipeItemMakeInfo.java
и лицезреть структуру пакета, который предстоит доработать для того, Вы получили результат.
Для получения результата, мной было предложено в конце пакета дописать
но к сожалению с условием
Как ответил ChaosPaladin - это условие
Можно предположить, что если данные параметры появляются у Вас в окне, на которое Вы ссылаетесь в первом посте, это условие выполняется и так же, как заметил ChaosPaladin
FC - это дополнительный шанс, а FC - это шанс крита.
Из этого следует, что
в файлике, который называется "пакет"java/org/l2jmobius/gameserver/network/serverpackets/RecipeItemMakeInfo.java
в конце структуры записи для отправки в клиент
требуется дописать fcfc. То-есть чтобы получить следующую структуру:Код:@Override public boolean write(PacketWriter packet) { final RecipeHolder recipe = RecipeData.getInstance().getRecipe(_id); if (recipe != null) { OutgoingPackets.RECIPE_ITEM_MAKE_INFO.writeId(packet); packet.writeD(_id); packet.writeD(recipe.isDwarvenRecipe() ? 0 : 1); // 0 = Dwarven - 1 = Common packet.writeD((int) _player.getCurrentMp()); packet.writeD(_player.getMaxMp()); packet.writeD(_success == null ? -1 : (_success ? 1 : 0)); // item creation none/success/failed packet.writeC(_offeringMaximumAdena > 0 ? 1 : 0); // Show offering window. packet.writeQ(_offeringMaximumAdena); // Adena worth of items for maximum offering. return true; } PacketLogger.info("Character: " + _player + ": Requested unexisting recipe with id = " + _id); return false; }
Далее при помощи простых действий (на постижение которых у меня ушли годы) - сохраняем файлик с новой структурой - запускаем сервер в режиме отладки и при открытии меню, которое Вы показали в первом посте, смотреть отслеживение параметров и изменять их в самом коде пакета (путем изменения ноликов на единички и путем hotswap обновлять класс, которые запрашивает сервер. Или перезагружать сервер при каждом изменении параметра.Код:@Override public boolean write(PacketWriter packet) { final RecipeHolder recipe = RecipeData.getInstance().getRecipe(_id); if (recipe != null) { OutgoingPackets.RECIPE_ITEM_MAKE_INFO.writeId(packet); packet.writeD(_id); packet.writeD(recipe.isDwarvenRecipe() ? 0 : 1); // 0 = Dwarven - 1 = Common packet.writeD((int) _player.getCurrentMp()); packet.writeD(_player.getMaxMp()); packet.writeD(_success == null ? -1 : (_success ? 1 : 0)); // item creation none/success/failed packet.writeC(_offeringMaximumAdena > 0 ? 1 : 0); // Show offering window. packet.writeQ(_offeringMaximumAdena); // Adena worth of items for maximum offering. packet.writeF(0); packet.writeC(0); packet.writeF(0); packet.writeC(0); return true; } PacketLogger.info("Character: " + _player + ": Requested unexisting recipe with id = " + _id); return false; }
ОТВЕТ НА ГЛАВНЫЙ ВОПРОС.
У МОБИУСА ТАКОГО НЕТУ.
Кстати критикал крафт(он же дабл крафт) тоже почему то не в рабочем состоянии. Нет ээфекта для него. Но пока хочу разобраться с обычным крафтом, котлрый просто добавляет шанс к успешному крафту. Указывая в коде скила 100%, то есть он работает хорошо, но не указывает в окне количество бонусных % за скиллкстати вру.
Чуть-чуть посмотрев (вот эти ваши нолики писал) нашел парочку статов
Stat.CRAFTING_CRITICAL и Stat.CRAFT_RATE