L2JMobius

High Five Crafting window result info

rekokt · 1 · 183

Offline rekokt

  • Vassal
  • *
    • Posts: 3
Hi,
i've notice something odd in RecipeItemMakeInfo:
Code: [Select]
public RecipeItemMakeInfo(int id, Player player, boolean success)
{
_id = id;
_player = player;
_success = success;
}

public RecipeItemMakeInfo(int id, Player player)
{
_id = id;
_player = player;
_success = true;
}
@Override
public void writeImpl(GameClient client, WritableBuffer buffer)
{
final RecipeList recipe = RecipeData.getInstance().getRecipeList(_id);
if (recipe == null)
{
PacketLogger.info("Character: " + _player + ": Requested unexisting recipe with id = " + _id);
return;
}

ServerPackets.RECIPE_ITEM_MAKE_INFO.writeId(this, buffer);
buffer.writeInt(_id);
buffer.writeInt(!recipe.isDwarvenRecipe()); // 0 = Dwarven - 1 = Common
buffer.writeInt((int) _player.getCurrentMp());
buffer.writeInt(_player.getMaxMp());
buffer.writeInt(_success); // item creation success/failed
}

If i understand correctly it is all the info that is send to client on self craft if:
-player open item craft window
-craft item
It always send packet with MakingResult inside, but if MakingResult is not provided it sends result as true, so while opening craft window player will receive info on the bottom of that Item xxx has been manufactured...
I was wondering should id be like that?
Default value of MakingResult imo should be -1, not true, to avoid bad client inerpretation.
my pseduo code :)

Code: [Select]
public class RecipeItemMakeInfo extends ServerPacket
{
private final int _id;
private final Player _player;
private final boolean _success;
private final int= _isuccess;


public RecipeItemMakeInfo(int id, Player player, boolean success)
{
_id = id;
_player = player;
_success = success;
if(_success==true)
{
_isuccess=1;
}
else
{
_isuccess=2;
}
}

public RecipeItemMakeInfo(int id, Player player)
{
_id = id;
_player = player;
_success = true;
_isuccess=-1;
}

@Override
public void writeImpl(GameClient client, WritableBuffer buffer)
{
final RecipeList recipe = RecipeData.getInstance().getRecipeList(_id);
if (recipe == null)
{
PacketLogger.info("Character: " + _player + ": Requested unexisting recipe with id = " + _id);
return;
}

ServerPackets.RECIPE_ITEM_MAKE_INFO.writeId(this, buffer);
buffer.writeInt(_id);
buffer.writeInt(!recipe.isDwarvenRecipe()); // 0 = Dwarven - 1 = Common
buffer.writeInt((int) _player.getCurrentMp());
buffer.writeInt(_player.getMaxMp());
//buffer.writeInt(_success); // item creation success/failed
                buffer.writeInt(_isuccess);
}
}

Can someone check if my logic is right?