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.
2 это GL2ServerTypeПри каких-то условиях (если что-то там равно 2), можно в конце выслать еще fcfc
у вас не корректная структура сервер пакетов для отображения данного параметра помойму 2ухТкните носом пож куда лезть искать?
При выученном умении Мастер Создания у крафтера при крафте не отображается бонус от этого умения
Посмотреть вложение 44444
Расскажите какие?у вас не корректная структура сервер пакетов для отображения данного параметра помойму 2ух
ОБЪЯСНЕНИЕ:Вот пакет -> 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;
}
частично ток согласен, структура немного другая но протоколы разные поэтому не буду критиковатьОБЪЯСНЕНИЕ:
На приложеном Вами скриншоте мы все увидели недоработку, о которой Вы сообщили в посте как
Как Я и 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