Lucky craft.

Contributed by Liamxroy.
This commit is contained in:
MobiusDev
2017-11-05 20:40:58 +00:00
parent 5cf8f30b9d
commit 2ffde9c10a
18 changed files with 711 additions and 15 deletions

View File

@@ -1421,4 +1421,207 @@
<stat value="199" bonus="1.318" /> <stat value="199" bonus="1.318" />
<stat value="200" bonus="1.32" /> <stat value="200" bonus="1.32" />
</CHA> </CHA>
<LUC>
<stat value="0" bonus="0" />
<stat value="1" bonus="0.001" />
<stat value="2" bonus="0.002" />
<stat value="3" bonus="0.003" />
<stat value="4" bonus="0.004" />
<stat value="5" bonus="0.005" />
<stat value="6" bonus="0.007" />
<stat value="7" bonus="0.009" />
<stat value="8" bonus="0.011" />
<stat value="9" bonus="0.013" />
<stat value="10" bonus="0.015" />
<stat value="11" bonus="0.017" />
<stat value="12" bonus="0.019" />
<stat value="13" bonus="0.021" />
<stat value="14" bonus="0.023" />
<stat value="15" bonus="0.025" />
<stat value="16" bonus="0.027" />
<stat value="17" bonus="0.029" />
<stat value="18" bonus="0.031" />
<stat value="19" bonus="0.033" />
<stat value="20" bonus="0.035" />
<stat value="21" bonus="0.037" />
<stat value="22" bonus="0.039" />
<stat value="23" bonus="0.041" />
<stat value="24" bonus="0.043" />
<stat value="25" bonus="0.045" />
<stat value="26" bonus="0.047" />
<stat value="27" bonus="0.049" />
<stat value="28" bonus="0.051" />
<stat value="29" bonus="0.053" />
<stat value="30" bonus="0.055" />
<stat value="31" bonus="0.057" />
<stat value="32" bonus="0.059" />
<stat value="33" bonus="0.061" />
<stat value="34" bonus="0.063" />
<stat value="35" bonus="0.065" />
<stat value="36" bonus="0.068" />
<stat value="37" bonus="0.071" />
<stat value="38" bonus="0.074" />
<stat value="39" bonus="0.077" />
<stat value="40" bonus="0.08" />
<stat value="41" bonus="0.083" />
<stat value="42" bonus="0.086" />
<stat value="43" bonus="0.089" />
<stat value="44" bonus="0.092" />
<stat value="45" bonus="0.095" />
<stat value="46" bonus="0.098" />
<stat value="47" bonus="0.101" />
<stat value="48" bonus="0.104" />
<stat value="49" bonus="0.107" />
<stat value="50" bonus="0.11" />
<stat value="51" bonus="0.113" />
<stat value="52" bonus="0.115" />
<stat value="53" bonus="0.118" />
<stat value="54" bonus="0.12" />
<stat value="55" bonus="0.123" />
<stat value="56" bonus="0.148" />
<stat value="57" bonus="0.153" />
<stat value="58" bonus="0.158" />
<stat value="59" bonus="0.181" />
<stat value="60" bonus="0.212" />
<stat value="61" bonus="0.225" />
<stat value="62" bonus="0.225" />
<stat value="63" bonus="0.225" />
<stat value="64" bonus="0.225" />
<stat value="65" bonus="0.225" />
<stat value="66" bonus="0.225" />
<stat value="67" bonus="0.225" />
<stat value="68" bonus="0.225" />
<stat value="69" bonus="0.225" />
<stat value="70" bonus="0.225" />
<stat value="71" bonus="0.225" />
<stat value="72" bonus="0.225" />
<stat value="73" bonus="0.225" />
<stat value="74" bonus="0.225" />
<stat value="75" bonus="0.225" />
<stat value="76" bonus="0.225" />
<stat value="77" bonus="0.225" />
<stat value="78" bonus="0.225" />
<stat value="79" bonus="0.225" />
<stat value="80" bonus="0.225" />
<stat value="81" bonus="0.225" />
<stat value="82" bonus="0.225" />
<stat value="83" bonus="0.225" />
<stat value="84" bonus="0.225" />
<stat value="85" bonus="0.225" />
<stat value="86" bonus="0.225" />
<stat value="87" bonus="0.225" />
<stat value="88" bonus="0.225" />
<stat value="89" bonus="0.225" />
<stat value="90" bonus="0.225" />
<stat value="91" bonus="0.225" />
<stat value="92" bonus="0.225" />
<stat value="93" bonus="0.225" />
<stat value="94" bonus="0.225" />
<stat value="95" bonus="0.225" />
<stat value="96" bonus="0.225" />
<stat value="97" bonus="0.225" />
<stat value="98" bonus="0.225" />
<stat value="99" bonus="0.225" />
<stat value="100" bonus="0.225" />
<stat value="101" bonus="0.225" />
<stat value="102" bonus="0.225" />
<stat value="103" bonus="0.225" />
<stat value="104" bonus="0.225" />
<stat value="105" bonus="0.225" />
<stat value="106" bonus="0.225" />
<stat value="107" bonus="0.225" />
<stat value="108" bonus="0.225" />
<stat value="109" bonus="0.225" />
<stat value="110" bonus="0.225" />
<stat value="111" bonus="0.225" />
<stat value="112" bonus="0.225" />
<stat value="113" bonus="0.225" />
<stat value="114" bonus="0.225" />
<stat value="115" bonus="0.225" />
<stat value="116" bonus="0.225" />
<stat value="117" bonus="0.225" />
<stat value="118" bonus="0.225" />
<stat value="119" bonus="0.225" />
<stat value="120" bonus="0.225" />
<stat value="121" bonus="0.225" />
<stat value="122" bonus="0.225" />
<stat value="123" bonus="0.225" />
<stat value="124" bonus="0.225" />
<stat value="125" bonus="0.225" />
<stat value="126" bonus="0.225" />
<stat value="127" bonus="0.225" />
<stat value="128" bonus="0.225" />
<stat value="129" bonus="0.225" />
<stat value="130" bonus="0.225" />
<stat value="131" bonus="0.225" />
<stat value="132" bonus="0.225" />
<stat value="133" bonus="0.225" />
<stat value="134" bonus="0.225" />
<stat value="135" bonus="0.225" />
<stat value="136" bonus="0.225" />
<stat value="137" bonus="0.225" />
<stat value="138" bonus="0.225" />
<stat value="139" bonus="0.225" />
<stat value="140" bonus="0.225" />
<stat value="141" bonus="0.225" />
<stat value="142" bonus="0.225" />
<stat value="143" bonus="0.225" />
<stat value="144" bonus="0.225" />
<stat value="145" bonus="0.225" />
<stat value="146" bonus="0.225" />
<stat value="147" bonus="0.225" />
<stat value="148" bonus="0.225" />
<stat value="149" bonus="0.225" />
<stat value="150" bonus="0.225" />
<stat value="151" bonus="0.225" />
<stat value="152" bonus="0.225" />
<stat value="153" bonus="0.225" />
<stat value="154" bonus="0.225" />
<stat value="155" bonus="0.225" />
<stat value="156" bonus="0.225" />
<stat value="157" bonus="0.225" />
<stat value="158" bonus="0.225" />
<stat value="159" bonus="0.225" />
<stat value="160" bonus="0.225" />
<stat value="161" bonus="0.225" />
<stat value="162" bonus="0.225" />
<stat value="163" bonus="0.225" />
<stat value="164" bonus="0.225" />
<stat value="165" bonus="0.225" />
<stat value="166" bonus="0.225" />
<stat value="167" bonus="0.225" />
<stat value="168" bonus="0.225" />
<stat value="169" bonus="0.225" />
<stat value="170" bonus="0.225" />
<stat value="171" bonus="0.225" />
<stat value="172" bonus="0.225" />
<stat value="173" bonus="0.225" />
<stat value="174" bonus="0.225" />
<stat value="175" bonus="0.225" />
<stat value="176" bonus="0.225" />
<stat value="177" bonus="0.225" />
<stat value="178" bonus="0.225" />
<stat value="179" bonus="0.225" />
<stat value="180" bonus="0.225" />
<stat value="181" bonus="0.225" />
<stat value="182" bonus="0.225" />
<stat value="183" bonus="0.225" />
<stat value="184" bonus="0.225" />
<stat value="185" bonus="0.225" />
<stat value="186" bonus="0.225" />
<stat value="187" bonus="0.225" />
<stat value="188" bonus="0.225" />
<stat value="189" bonus="0.225" />
<stat value="190" bonus="0.225" />
<stat value="191" bonus="0.225" />
<stat value="192" bonus="0.225" />
<stat value="193" bonus="0.225" />
<stat value="194" bonus="0.225" />
<stat value="195" bonus="0.225" />
<stat value="196" bonus="0.225" />
<stat value="197" bonus="0.225" />
<stat value="198" bonus="0.225" />
<stat value="199" bonus="0.225" />
<stat value="200" bonus="0.225" />
</LUC>
</list> </list>

View File

@@ -87,6 +87,18 @@
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="LUC" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="stat" minOccurs="1" maxOccurs="201">
<xs:complexType>
<xs:attribute name="bonus" type="xs:decimal" use="required" />
<xs:attribute name="value" type="xs:integer" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>

View File

@@ -407,9 +407,9 @@ public class RecipeController
// handle possible cheaters here // handle possible cheaters here
// (they click craft then try to get rid of items in order to get free craft) // (they click craft then try to get rid of items in order to get free craft)
} }
else if (Rnd.get(100) < _recipeList.getSuccessRate()) else if ((Rnd.get(100) < _recipeList.getSuccessRate()) || _target.tryLuck())
{ {
rewardPlayer(); // and immediately puts created item in its place rewardPlayer(_target); // and immediately puts created item in its place
updateMakeInfo(true); updateMakeInfo(true);
} }
else else
@@ -657,7 +657,7 @@ public class RecipeController
_activeMakers.remove(_player.getObjectId()); _activeMakers.remove(_player.getObjectId());
} }
private void rewardPlayer() private void rewardPlayer(L2PcInstance player)
{ {
final int rareProdId = _recipeList.getRareItemId(); final int rareProdId = _recipeList.getRareItemId();
int itemId = _recipeList.getItemId(); int itemId = _recipeList.getItemId();
@@ -674,6 +674,11 @@ public class RecipeController
} }
} }
if (player.tryLuck())
{
itemCount *= 2;
}
_target.getInventory().addItem("Manufacture", itemId, itemCount, _target, _player); _target.getInventory().addItem("Manufacture", itemId, itemCount, _target, _player);
// inform customer of earned item // inform customer of earned item

View File

@@ -13975,4 +13975,15 @@ public final class L2PcInstance extends L2Playable
addStatusUpdateValue(StatusUpdateType.MAX_CP); addStatusUpdateValue(StatusUpdateType.MAX_CP);
addStatusUpdateValue(StatusUpdateType.CUR_CP); addStatusUpdateValue(StatusUpdateType.CUR_CP);
} }
public boolean tryLuck()
{
if ((Rnd.nextDouble() < BaseStats.LUC.getValue(getLUC())) && !hasSkillReuse(CommonSkill.LUCKY_CLOVER.getSkill().getReuseHashCode()))
{
SkillCaster.triggerCast(this, this, CommonSkill.LUCKY_CLOVER.getSkill());
sendPacket(SystemMessageId.LADY_LUCK_SMILES_UPON_YOU);
return true;
}
return false;
}
} }

View File

@@ -170,7 +170,7 @@ public final class EnchantScroll extends AbstractEnchantItem
final double finalChance = Math.min(chance + bonusRate + supportBonusRate, 100); final double finalChance = Math.min(chance + bonusRate + supportBonusRate, 100);
final double random = 100 * Rnd.nextDouble(); final double random = 100 * Rnd.nextDouble();
final boolean success = (random < finalChance); boolean success = (random < finalChance) || player.tryLuck();
if (player.isDebug()) if (player.isDebug())
{ {

View File

@@ -57,7 +57,8 @@ public enum CommonSkill
ALCHEMY_CUBE(17943, 1), ALCHEMY_CUBE(17943, 1),
ALCHEMY_CUBE_RANDOM_SUCCESS(17966, 1), ALCHEMY_CUBE_RANDOM_SUCCESS(17966, 1),
PET_SWITCH_STANCE(6054, 1), PET_SWITCH_STANCE(6054, 1),
WEIGHT_PENALTY(4270, 1); WEIGHT_PENALTY(4270, 1),
LUCKY_CLOVER(18103, 1);
private final SkillHolder _holder; private final SkillHolder _holder;

View File

@@ -1421,4 +1421,207 @@
<stat value="199" bonus="1.318" /> <stat value="199" bonus="1.318" />
<stat value="200" bonus="1.32" /> <stat value="200" bonus="1.32" />
</CHA> </CHA>
<LUC>
<stat value="0" bonus="0" />
<stat value="1" bonus="0.001" />
<stat value="2" bonus="0.002" />
<stat value="3" bonus="0.003" />
<stat value="4" bonus="0.004" />
<stat value="5" bonus="0.005" />
<stat value="6" bonus="0.007" />
<stat value="7" bonus="0.009" />
<stat value="8" bonus="0.011" />
<stat value="9" bonus="0.013" />
<stat value="10" bonus="0.015" />
<stat value="11" bonus="0.017" />
<stat value="12" bonus="0.019" />
<stat value="13" bonus="0.021" />
<stat value="14" bonus="0.023" />
<stat value="15" bonus="0.025" />
<stat value="16" bonus="0.027" />
<stat value="17" bonus="0.029" />
<stat value="18" bonus="0.031" />
<stat value="19" bonus="0.033" />
<stat value="20" bonus="0.035" />
<stat value="21" bonus="0.037" />
<stat value="22" bonus="0.039" />
<stat value="23" bonus="0.041" />
<stat value="24" bonus="0.043" />
<stat value="25" bonus="0.045" />
<stat value="26" bonus="0.047" />
<stat value="27" bonus="0.049" />
<stat value="28" bonus="0.051" />
<stat value="29" bonus="0.053" />
<stat value="30" bonus="0.055" />
<stat value="31" bonus="0.057" />
<stat value="32" bonus="0.059" />
<stat value="33" bonus="0.061" />
<stat value="34" bonus="0.063" />
<stat value="35" bonus="0.065" />
<stat value="36" bonus="0.068" />
<stat value="37" bonus="0.071" />
<stat value="38" bonus="0.074" />
<stat value="39" bonus="0.077" />
<stat value="40" bonus="0.08" />
<stat value="41" bonus="0.083" />
<stat value="42" bonus="0.086" />
<stat value="43" bonus="0.089" />
<stat value="44" bonus="0.092" />
<stat value="45" bonus="0.095" />
<stat value="46" bonus="0.098" />
<stat value="47" bonus="0.101" />
<stat value="48" bonus="0.104" />
<stat value="49" bonus="0.107" />
<stat value="50" bonus="0.11" />
<stat value="51" bonus="0.113" />
<stat value="52" bonus="0.115" />
<stat value="53" bonus="0.118" />
<stat value="54" bonus="0.12" />
<stat value="55" bonus="0.123" />
<stat value="56" bonus="0.148" />
<stat value="57" bonus="0.153" />
<stat value="58" bonus="0.158" />
<stat value="59" bonus="0.181" />
<stat value="60" bonus="0.212" />
<stat value="61" bonus="0.225" />
<stat value="62" bonus="0.225" />
<stat value="63" bonus="0.225" />
<stat value="64" bonus="0.225" />
<stat value="65" bonus="0.225" />
<stat value="66" bonus="0.225" />
<stat value="67" bonus="0.225" />
<stat value="68" bonus="0.225" />
<stat value="69" bonus="0.225" />
<stat value="70" bonus="0.225" />
<stat value="71" bonus="0.225" />
<stat value="72" bonus="0.225" />
<stat value="73" bonus="0.225" />
<stat value="74" bonus="0.225" />
<stat value="75" bonus="0.225" />
<stat value="76" bonus="0.225" />
<stat value="77" bonus="0.225" />
<stat value="78" bonus="0.225" />
<stat value="79" bonus="0.225" />
<stat value="80" bonus="0.225" />
<stat value="81" bonus="0.225" />
<stat value="82" bonus="0.225" />
<stat value="83" bonus="0.225" />
<stat value="84" bonus="0.225" />
<stat value="85" bonus="0.225" />
<stat value="86" bonus="0.225" />
<stat value="87" bonus="0.225" />
<stat value="88" bonus="0.225" />
<stat value="89" bonus="0.225" />
<stat value="90" bonus="0.225" />
<stat value="91" bonus="0.225" />
<stat value="92" bonus="0.225" />
<stat value="93" bonus="0.225" />
<stat value="94" bonus="0.225" />
<stat value="95" bonus="0.225" />
<stat value="96" bonus="0.225" />
<stat value="97" bonus="0.225" />
<stat value="98" bonus="0.225" />
<stat value="99" bonus="0.225" />
<stat value="100" bonus="0.225" />
<stat value="101" bonus="0.225" />
<stat value="102" bonus="0.225" />
<stat value="103" bonus="0.225" />
<stat value="104" bonus="0.225" />
<stat value="105" bonus="0.225" />
<stat value="106" bonus="0.225" />
<stat value="107" bonus="0.225" />
<stat value="108" bonus="0.225" />
<stat value="109" bonus="0.225" />
<stat value="110" bonus="0.225" />
<stat value="111" bonus="0.225" />
<stat value="112" bonus="0.225" />
<stat value="113" bonus="0.225" />
<stat value="114" bonus="0.225" />
<stat value="115" bonus="0.225" />
<stat value="116" bonus="0.225" />
<stat value="117" bonus="0.225" />
<stat value="118" bonus="0.225" />
<stat value="119" bonus="0.225" />
<stat value="120" bonus="0.225" />
<stat value="121" bonus="0.225" />
<stat value="122" bonus="0.225" />
<stat value="123" bonus="0.225" />
<stat value="124" bonus="0.225" />
<stat value="125" bonus="0.225" />
<stat value="126" bonus="0.225" />
<stat value="127" bonus="0.225" />
<stat value="128" bonus="0.225" />
<stat value="129" bonus="0.225" />
<stat value="130" bonus="0.225" />
<stat value="131" bonus="0.225" />
<stat value="132" bonus="0.225" />
<stat value="133" bonus="0.225" />
<stat value="134" bonus="0.225" />
<stat value="135" bonus="0.225" />
<stat value="136" bonus="0.225" />
<stat value="137" bonus="0.225" />
<stat value="138" bonus="0.225" />
<stat value="139" bonus="0.225" />
<stat value="140" bonus="0.225" />
<stat value="141" bonus="0.225" />
<stat value="142" bonus="0.225" />
<stat value="143" bonus="0.225" />
<stat value="144" bonus="0.225" />
<stat value="145" bonus="0.225" />
<stat value="146" bonus="0.225" />
<stat value="147" bonus="0.225" />
<stat value="148" bonus="0.225" />
<stat value="149" bonus="0.225" />
<stat value="150" bonus="0.225" />
<stat value="151" bonus="0.225" />
<stat value="152" bonus="0.225" />
<stat value="153" bonus="0.225" />
<stat value="154" bonus="0.225" />
<stat value="155" bonus="0.225" />
<stat value="156" bonus="0.225" />
<stat value="157" bonus="0.225" />
<stat value="158" bonus="0.225" />
<stat value="159" bonus="0.225" />
<stat value="160" bonus="0.225" />
<stat value="161" bonus="0.225" />
<stat value="162" bonus="0.225" />
<stat value="163" bonus="0.225" />
<stat value="164" bonus="0.225" />
<stat value="165" bonus="0.225" />
<stat value="166" bonus="0.225" />
<stat value="167" bonus="0.225" />
<stat value="168" bonus="0.225" />
<stat value="169" bonus="0.225" />
<stat value="170" bonus="0.225" />
<stat value="171" bonus="0.225" />
<stat value="172" bonus="0.225" />
<stat value="173" bonus="0.225" />
<stat value="174" bonus="0.225" />
<stat value="175" bonus="0.225" />
<stat value="176" bonus="0.225" />
<stat value="177" bonus="0.225" />
<stat value="178" bonus="0.225" />
<stat value="179" bonus="0.225" />
<stat value="180" bonus="0.225" />
<stat value="181" bonus="0.225" />
<stat value="182" bonus="0.225" />
<stat value="183" bonus="0.225" />
<stat value="184" bonus="0.225" />
<stat value="185" bonus="0.225" />
<stat value="186" bonus="0.225" />
<stat value="187" bonus="0.225" />
<stat value="188" bonus="0.225" />
<stat value="189" bonus="0.225" />
<stat value="190" bonus="0.225" />
<stat value="191" bonus="0.225" />
<stat value="192" bonus="0.225" />
<stat value="193" bonus="0.225" />
<stat value="194" bonus="0.225" />
<stat value="195" bonus="0.225" />
<stat value="196" bonus="0.225" />
<stat value="197" bonus="0.225" />
<stat value="198" bonus="0.225" />
<stat value="199" bonus="0.225" />
<stat value="200" bonus="0.225" />
</LUC>
</list> </list>

View File

@@ -87,6 +87,18 @@
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="LUC" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="stat" minOccurs="1" maxOccurs="201">
<xs:complexType>
<xs:attribute name="bonus" type="xs:decimal" use="required" />
<xs:attribute name="value" type="xs:integer" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>

View File

@@ -407,9 +407,9 @@ public class RecipeController
// handle possible cheaters here // handle possible cheaters here
// (they click craft then try to get rid of items in order to get free craft) // (they click craft then try to get rid of items in order to get free craft)
} }
else if (Rnd.get(100) < _recipeList.getSuccessRate()) else if ((Rnd.get(100) < _recipeList.getSuccessRate()) || _target.tryLuck())
{ {
rewardPlayer(); // and immediately puts created item in its place rewardPlayer(_target); // and immediately puts created item in its place
updateMakeInfo(true); updateMakeInfo(true);
} }
else else
@@ -657,7 +657,7 @@ public class RecipeController
_activeMakers.remove(_player.getObjectId()); _activeMakers.remove(_player.getObjectId());
} }
private void rewardPlayer() private void rewardPlayer(L2PcInstance player)
{ {
final int rareProdId = _recipeList.getRareItemId(); final int rareProdId = _recipeList.getRareItemId();
int itemId = _recipeList.getItemId(); int itemId = _recipeList.getItemId();
@@ -674,6 +674,11 @@ public class RecipeController
} }
} }
if (player.tryLuck())
{
itemCount *= 2;
}
_target.getInventory().addItem("Manufacture", itemId, itemCount, _target, _player); _target.getInventory().addItem("Manufacture", itemId, itemCount, _target, _player);
// inform customer of earned item // inform customer of earned item

View File

@@ -13959,4 +13959,15 @@ public final class L2PcInstance extends L2Playable
addStatusUpdateValue(StatusUpdateType.MAX_CP); addStatusUpdateValue(StatusUpdateType.MAX_CP);
addStatusUpdateValue(StatusUpdateType.CUR_CP); addStatusUpdateValue(StatusUpdateType.CUR_CP);
} }
public boolean tryLuck()
{
if ((Rnd.nextDouble() < BaseStats.LUC.getValue(getLUC())) && !hasSkillReuse(CommonSkill.LUCKY_CLOVER.getSkill().getReuseHashCode()))
{
SkillCaster.triggerCast(this, this, CommonSkill.LUCKY_CLOVER.getSkill());
sendPacket(SystemMessageId.LADY_LUCK_SMILES_UPON_YOU);
return true;
}
return false;
}
} }

View File

@@ -170,7 +170,7 @@ public final class EnchantScroll extends AbstractEnchantItem
final double finalChance = Math.min(chance + bonusRate + supportBonusRate, 100); final double finalChance = Math.min(chance + bonusRate + supportBonusRate, 100);
final double random = 100 * Rnd.nextDouble(); final double random = 100 * Rnd.nextDouble();
final boolean success = (random < finalChance); boolean success = (random < finalChance) || player.tryLuck();
if (player.isDebug()) if (player.isDebug())
{ {

View File

@@ -57,7 +57,8 @@ public enum CommonSkill
ALCHEMY_CUBE(17943, 1), ALCHEMY_CUBE(17943, 1),
ALCHEMY_CUBE_RANDOM_SUCCESS(17966, 1), ALCHEMY_CUBE_RANDOM_SUCCESS(17966, 1),
PET_SWITCH_STANCE(6054, 1), PET_SWITCH_STANCE(6054, 1),
WEIGHT_PENALTY(4270, 1); WEIGHT_PENALTY(4270, 1),
LUCKY_CLOVER(18103, 1);
private final SkillHolder _holder; private final SkillHolder _holder;

View File

@@ -1421,4 +1421,207 @@
<stat value="199" bonus="1.318" /> <stat value="199" bonus="1.318" />
<stat value="200" bonus="1.32" /> <stat value="200" bonus="1.32" />
</CHA> </CHA>
<LUC>
<stat value="0" bonus="0" />
<stat value="1" bonus="0.001" />
<stat value="2" bonus="0.002" />
<stat value="3" bonus="0.003" />
<stat value="4" bonus="0.004" />
<stat value="5" bonus="0.005" />
<stat value="6" bonus="0.007" />
<stat value="7" bonus="0.009" />
<stat value="8" bonus="0.011" />
<stat value="9" bonus="0.013" />
<stat value="10" bonus="0.015" />
<stat value="11" bonus="0.017" />
<stat value="12" bonus="0.019" />
<stat value="13" bonus="0.021" />
<stat value="14" bonus="0.023" />
<stat value="15" bonus="0.025" />
<stat value="16" bonus="0.027" />
<stat value="17" bonus="0.029" />
<stat value="18" bonus="0.031" />
<stat value="19" bonus="0.033" />
<stat value="20" bonus="0.035" />
<stat value="21" bonus="0.037" />
<stat value="22" bonus="0.039" />
<stat value="23" bonus="0.041" />
<stat value="24" bonus="0.043" />
<stat value="25" bonus="0.045" />
<stat value="26" bonus="0.047" />
<stat value="27" bonus="0.049" />
<stat value="28" bonus="0.051" />
<stat value="29" bonus="0.053" />
<stat value="30" bonus="0.055" />
<stat value="31" bonus="0.057" />
<stat value="32" bonus="0.059" />
<stat value="33" bonus="0.061" />
<stat value="34" bonus="0.063" />
<stat value="35" bonus="0.065" />
<stat value="36" bonus="0.068" />
<stat value="37" bonus="0.071" />
<stat value="38" bonus="0.074" />
<stat value="39" bonus="0.077" />
<stat value="40" bonus="0.08" />
<stat value="41" bonus="0.083" />
<stat value="42" bonus="0.086" />
<stat value="43" bonus="0.089" />
<stat value="44" bonus="0.092" />
<stat value="45" bonus="0.095" />
<stat value="46" bonus="0.098" />
<stat value="47" bonus="0.101" />
<stat value="48" bonus="0.104" />
<stat value="49" bonus="0.107" />
<stat value="50" bonus="0.11" />
<stat value="51" bonus="0.113" />
<stat value="52" bonus="0.115" />
<stat value="53" bonus="0.118" />
<stat value="54" bonus="0.12" />
<stat value="55" bonus="0.123" />
<stat value="56" bonus="0.148" />
<stat value="57" bonus="0.153" />
<stat value="58" bonus="0.158" />
<stat value="59" bonus="0.181" />
<stat value="60" bonus="0.212" />
<stat value="61" bonus="0.225" />
<stat value="62" bonus="0.225" />
<stat value="63" bonus="0.225" />
<stat value="64" bonus="0.225" />
<stat value="65" bonus="0.225" />
<stat value="66" bonus="0.225" />
<stat value="67" bonus="0.225" />
<stat value="68" bonus="0.225" />
<stat value="69" bonus="0.225" />
<stat value="70" bonus="0.225" />
<stat value="71" bonus="0.225" />
<stat value="72" bonus="0.225" />
<stat value="73" bonus="0.225" />
<stat value="74" bonus="0.225" />
<stat value="75" bonus="0.225" />
<stat value="76" bonus="0.225" />
<stat value="77" bonus="0.225" />
<stat value="78" bonus="0.225" />
<stat value="79" bonus="0.225" />
<stat value="80" bonus="0.225" />
<stat value="81" bonus="0.225" />
<stat value="82" bonus="0.225" />
<stat value="83" bonus="0.225" />
<stat value="84" bonus="0.225" />
<stat value="85" bonus="0.225" />
<stat value="86" bonus="0.225" />
<stat value="87" bonus="0.225" />
<stat value="88" bonus="0.225" />
<stat value="89" bonus="0.225" />
<stat value="90" bonus="0.225" />
<stat value="91" bonus="0.225" />
<stat value="92" bonus="0.225" />
<stat value="93" bonus="0.225" />
<stat value="94" bonus="0.225" />
<stat value="95" bonus="0.225" />
<stat value="96" bonus="0.225" />
<stat value="97" bonus="0.225" />
<stat value="98" bonus="0.225" />
<stat value="99" bonus="0.225" />
<stat value="100" bonus="0.225" />
<stat value="101" bonus="0.225" />
<stat value="102" bonus="0.225" />
<stat value="103" bonus="0.225" />
<stat value="104" bonus="0.225" />
<stat value="105" bonus="0.225" />
<stat value="106" bonus="0.225" />
<stat value="107" bonus="0.225" />
<stat value="108" bonus="0.225" />
<stat value="109" bonus="0.225" />
<stat value="110" bonus="0.225" />
<stat value="111" bonus="0.225" />
<stat value="112" bonus="0.225" />
<stat value="113" bonus="0.225" />
<stat value="114" bonus="0.225" />
<stat value="115" bonus="0.225" />
<stat value="116" bonus="0.225" />
<stat value="117" bonus="0.225" />
<stat value="118" bonus="0.225" />
<stat value="119" bonus="0.225" />
<stat value="120" bonus="0.225" />
<stat value="121" bonus="0.225" />
<stat value="122" bonus="0.225" />
<stat value="123" bonus="0.225" />
<stat value="124" bonus="0.225" />
<stat value="125" bonus="0.225" />
<stat value="126" bonus="0.225" />
<stat value="127" bonus="0.225" />
<stat value="128" bonus="0.225" />
<stat value="129" bonus="0.225" />
<stat value="130" bonus="0.225" />
<stat value="131" bonus="0.225" />
<stat value="132" bonus="0.225" />
<stat value="133" bonus="0.225" />
<stat value="134" bonus="0.225" />
<stat value="135" bonus="0.225" />
<stat value="136" bonus="0.225" />
<stat value="137" bonus="0.225" />
<stat value="138" bonus="0.225" />
<stat value="139" bonus="0.225" />
<stat value="140" bonus="0.225" />
<stat value="141" bonus="0.225" />
<stat value="142" bonus="0.225" />
<stat value="143" bonus="0.225" />
<stat value="144" bonus="0.225" />
<stat value="145" bonus="0.225" />
<stat value="146" bonus="0.225" />
<stat value="147" bonus="0.225" />
<stat value="148" bonus="0.225" />
<stat value="149" bonus="0.225" />
<stat value="150" bonus="0.225" />
<stat value="151" bonus="0.225" />
<stat value="152" bonus="0.225" />
<stat value="153" bonus="0.225" />
<stat value="154" bonus="0.225" />
<stat value="155" bonus="0.225" />
<stat value="156" bonus="0.225" />
<stat value="157" bonus="0.225" />
<stat value="158" bonus="0.225" />
<stat value="159" bonus="0.225" />
<stat value="160" bonus="0.225" />
<stat value="161" bonus="0.225" />
<stat value="162" bonus="0.225" />
<stat value="163" bonus="0.225" />
<stat value="164" bonus="0.225" />
<stat value="165" bonus="0.225" />
<stat value="166" bonus="0.225" />
<stat value="167" bonus="0.225" />
<stat value="168" bonus="0.225" />
<stat value="169" bonus="0.225" />
<stat value="170" bonus="0.225" />
<stat value="171" bonus="0.225" />
<stat value="172" bonus="0.225" />
<stat value="173" bonus="0.225" />
<stat value="174" bonus="0.225" />
<stat value="175" bonus="0.225" />
<stat value="176" bonus="0.225" />
<stat value="177" bonus="0.225" />
<stat value="178" bonus="0.225" />
<stat value="179" bonus="0.225" />
<stat value="180" bonus="0.225" />
<stat value="181" bonus="0.225" />
<stat value="182" bonus="0.225" />
<stat value="183" bonus="0.225" />
<stat value="184" bonus="0.225" />
<stat value="185" bonus="0.225" />
<stat value="186" bonus="0.225" />
<stat value="187" bonus="0.225" />
<stat value="188" bonus="0.225" />
<stat value="189" bonus="0.225" />
<stat value="190" bonus="0.225" />
<stat value="191" bonus="0.225" />
<stat value="192" bonus="0.225" />
<stat value="193" bonus="0.225" />
<stat value="194" bonus="0.225" />
<stat value="195" bonus="0.225" />
<stat value="196" bonus="0.225" />
<stat value="197" bonus="0.225" />
<stat value="198" bonus="0.225" />
<stat value="199" bonus="0.225" />
<stat value="200" bonus="0.225" />
</LUC>
</list> </list>

View File

@@ -87,6 +87,18 @@
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
<xs:element name="LUC" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="stat" minOccurs="1" maxOccurs="201">
<xs:complexType>
<xs:attribute name="bonus" type="xs:decimal" use="required" />
<xs:attribute name="value" type="xs:integer" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>

View File

@@ -407,9 +407,9 @@ public class RecipeController
// handle possible cheaters here // handle possible cheaters here
// (they click craft then try to get rid of items in order to get free craft) // (they click craft then try to get rid of items in order to get free craft)
} }
else if (Rnd.get(100) < _recipeList.getSuccessRate()) else if ((Rnd.get(100) < _recipeList.getSuccessRate()) || _target.tryLuck())
{ {
rewardPlayer(); // and immediately puts created item in its place rewardPlayer(_target); // and immediately puts created item in its place
updateMakeInfo(true); updateMakeInfo(true);
} }
else else
@@ -657,7 +657,7 @@ public class RecipeController
_activeMakers.remove(_player.getObjectId()); _activeMakers.remove(_player.getObjectId());
} }
private void rewardPlayer() private void rewardPlayer(L2PcInstance player)
{ {
final int rareProdId = _recipeList.getRareItemId(); final int rareProdId = _recipeList.getRareItemId();
int itemId = _recipeList.getItemId(); int itemId = _recipeList.getItemId();
@@ -674,6 +674,11 @@ public class RecipeController
} }
} }
if (player.tryLuck())
{
itemCount *= 2;
}
_target.getInventory().addItem("Manufacture", itemId, itemCount, _target, _player); _target.getInventory().addItem("Manufacture", itemId, itemCount, _target, _player);
// inform customer of earned item // inform customer of earned item

View File

@@ -14017,4 +14017,15 @@ public final class L2PcInstance extends L2Playable
addStatusUpdateValue(StatusUpdateType.MAX_CP); addStatusUpdateValue(StatusUpdateType.MAX_CP);
addStatusUpdateValue(StatusUpdateType.CUR_CP); addStatusUpdateValue(StatusUpdateType.CUR_CP);
} }
public boolean tryLuck()
{
if ((Rnd.nextDouble() < BaseStats.LUC.getValue(getLUC())) && !hasSkillReuse(CommonSkill.LUCKY_CLOVER.getSkill().getReuseHashCode()))
{
SkillCaster.triggerCast(this, this, CommonSkill.LUCKY_CLOVER.getSkill());
sendPacket(SystemMessageId.LADY_LUCK_SMILES_UPON_YOU);
return true;
}
return false;
}
} }

View File

@@ -170,7 +170,7 @@ public final class EnchantScroll extends AbstractEnchantItem
final double finalChance = Math.min(chance + bonusRate + supportBonusRate, 100); final double finalChance = Math.min(chance + bonusRate + supportBonusRate, 100);
final double random = 100 * Rnd.nextDouble(); final double random = 100 * Rnd.nextDouble();
final boolean success = (random < finalChance); boolean success = (random < finalChance) || player.tryLuck();
if (player.isDebug()) if (player.isDebug())
{ {

View File

@@ -57,7 +57,8 @@ public enum CommonSkill
ALCHEMY_CUBE(17943, 1), ALCHEMY_CUBE(17943, 1),
ALCHEMY_CUBE_RANDOM_SUCCESS(17966, 1), ALCHEMY_CUBE_RANDOM_SUCCESS(17966, 1),
PET_SWITCH_STANCE(6054, 1), PET_SWITCH_STANCE(6054, 1),
WEIGHT_PENALTY(4270, 1); WEIGHT_PENALTY(4270, 1),
LUCKY_CLOVER(18103, 1);
private final SkillHolder _holder; private final SkillHolder _holder;