Implemented Lv53+62 rotations

main
sigonasr2 2 years ago
parent 67d621fde1
commit 8d80645850
  1. 6
      SigCrafter/condition_stats.txt
  2. 4
      SigCrafter/run
  3. 334
      SigCrafter/src/sig/SigCraft.java
  4. 24
      SigCrafter/src/sig/skills/CarefulSynthesis.java

@ -1,3 +1,3 @@
862
154
28
14830
3087
451

@ -1,2 +1,4 @@
javac src/sig/*.java src/sig/skills/*.java -d bin
cd src
javac sig/*.java sig/skills/*.java -d ../bin
cd ..
java -cp bin sig/SigCraft

@ -17,7 +17,7 @@ import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import sig.skills.BasicSynthesis;
import sig.skills.CarefulSynthesis;
import sig.skills.BasicTouch;
import sig.skills.BrandOfTheElements;
import sig.skills.ByregotsBlessing;
@ -40,7 +40,7 @@ import sig.utils.FileUtils;
public class SigCraft {
public static int LEVEL = 100;
public static int RECIPE_LEVEL = 41;
public static int CP = 280;
public static int CP = 311;
public static int BASE_PROGRESS = 57;
public static int CONTROL = 185;
public static int PROGRESS_GOAL = 143;
@ -54,7 +54,8 @@ public class SigCraft {
public static boolean STAT_TRACKING = true;
final static NumberFormat displayFormat = new DecimalFormat("#0.0");
public static List<String> VALID_TOUCH_ACTIONS = Arrays.asList("Basic Touch","Standard Touch","Hasty Touch","Byregot's Blessing","Brand of the Elements");
//WHEN A TOUCH ACTION IS ADDED YOU MUST UPDATE THIS LIST AS WELL!
public static List<String> VALID_TOUCH_ACTIONS = Arrays.asList("Basic Touch","Standard Touch","Hasty Touch","Byregot's Blessing","Brand of the Elements","Precise Touch");
public static Map<String,Buff> BUFFLIST = new HashMap<String,Buff>();
public static Map<String,Skill> SKILLLIST = new HashMap<String,Skill>();
@ -98,12 +99,18 @@ public class SigCraft {
}
SKILLLIST.put("Rapid Synthesis",new RapidSynthesis("Rapid Synthesis",0,false,9,KeyEvent.VK_SHIFT,KeyEvent.VK_4));
SKILLLIST.put("Basic Synthesis",new BasicSynthesis("Basic Synthesis",0,true,1,KeyEvent.VK_1));
SKILLLIST.put("Basic Synthesis",new CarefulSynthesis("Basic Synthesis",0,true,1,KeyEvent.VK_1));
SKILLLIST.put("Careful Synthesis",new CarefulSynthesis("Careful Synthesis",7,true,62,KeyEvent.VK_Z));
SKILLLIST.put("Brand of the Elements",new BrandOfTheElements("Brand of the Elements",6,true,37,KeyEvent.VK_CONTROL,KeyEvent.VK_X));
//TOUCH ACTIONS
// !!IMPORTANT!! WHEN YOU ADD A TOUCH ACTION YOU MUST UPDATE THE VALID TOUCH ACTIONS LIST ABOVE TO AVOID AN INFINITE LOOP ON EXCELLENT PROCS!!!!
SKILLLIST.put("Basic Touch",new BasicTouch("Basic Touch",18,true,5,KeyEvent.VK_2));
SKILLLIST.put("Hasty Touch",new HastyTouch("Hasty Touch",0,false,9,KeyEvent.VK_CONTROL,KeyEvent.VK_3));
SKILLLIST.put("Standard Touch",new StandardTouch("Standard Touch",32,true,18,KeyEvent.VK_SHIFT,KeyEvent.VK_2));
SKILLLIST.put("Precise Touch",new PreciseTouch("Precise Touch",18,true,53,KeyEvent.VK_ALT,KeyEvent.VK_2));
//
//SKILLLIST.add(new Skill("Byregot's Blessing",24,true,50)); //TODO We don't know how this works yet.
SKILLLIST.put("Tricks of the Trade",new TricksOfTheTrade("Tricks of the Trade",0,true,13,KeyEvent.VK_CONTROL,KeyEvent.VK_2));
SKILLLIST.put("Master's Mend",new MastersMend("Master's Mend",88,true,7,KeyEvent.VK_3));
@ -115,7 +122,7 @@ public class SigCraft {
SKILLLIST.put("Innovation",new Innovation("Innovation",18,true,26,KeyEvent.VK_4));
SKILLLIST.put("Name of the Elements",new NameOfTheElements("Name of the Elements",30,true,37,KeyEvent.VK_CONTROL,KeyEvent.VK_Z));
SKILLLIST.put("Observe",new Observe("Observe",7,true,13,KeyEvent.VK_C));
SKILLLIST.put("Byregot's Blessing",new ByregotsBlessing("Byregot's Blessing",24,true,50,KeyEvent.VK_ALT,KeyEvent.VK_2));
SKILLLIST.put("Byregot's Blessing",new ByregotsBlessing("Byregot's Blessing",24,true,50,KeyEvent.VK_ALT,KeyEvent.VK_3));
BUFFLIST.put("Inner Quiet",new Buff("Inner Quiet",0));
@ -136,6 +143,7 @@ public class SigCraft {
//284,68 77,77,77
while (true) {
//for (int i=0;i<17;i++){
r.delay(100);
//System.out.println("Waiting...");
//LookForScreenPixels(CRAFT_START_PIXELS);
@ -160,15 +168,8 @@ public class SigCraft {
LookForScreenPixels(READY_FOR_ACTION_PIXELS);
CONDITION_CHECK = true;
UpdateCondition();
//LoadRotation_40Durability_800Quality_1Synth_280CP_LV50();
//LoadRotation_40Durability_1200Quality_1Synth_282CP_LV47();
//LoadRotation_40Durability_1200Quality_1Synth_wVeneration_280CP_LV47();
LoadRotation_40Durability_1200Quality_1Synth_wVeneration_280CP_LV53();
//LoadRotation_40Durability_1700Quality_1Synth_278CP_LV47();
//LoadRotation_40Durability_1700Quality_1Synth_wVeneration_278CP_LV47();
//LoadRotation_40Durability_1900Quality_1Synth_280CP_LV45();
//LoadRotation_40Durability_1900Quality_1Synth_280CP_LV50();
//LoadRotation_40Durability_2300Quality_1Synth_282CP_LV50();
LoadRotation_40Durability_1600Quality_1Synth_311CP_LV62();
//LoadRotation_40Durability_1600Quality_1Synth_311CP_LV53();
System.out.println("Rotation: "+CURRENT_CRAFT.getRotationString());
FileUtils.writetoFile(new String[]{Integer.toString(NORMAL_COUNT),Integer.toString(GOOD_COUNT),Integer.toString(EXCELLENT_COUNT),},"condition_stats.txt");
int TOTAL_COUNT = NORMAL_COUNT+GOOD_COUNT+EXCELLENT_COUNT;
@ -180,302 +181,67 @@ public class SigCraft {
}
}
private static void LoadRotation_40Durability_2300Quality_1Synth_282CP_LV50() {
private static void LoadRotation_40Durability_1600Quality_1Synth_311CP_LV62(){
DURABILITY=40;
CURRENT_CRAFT = new Craft(CONTROL,LEVEL,CP,BASE_PROGRESS,PROGRESS_GOAL,QUALITY_GOAL,GUARANTEED,DURABILITY,CRAFT_PROGRESS,CRAFT_QUALITY,DURABILITY,CP,1,1,1,RECIPE_LEVEL,Status.NORMAL,BUFFLIST);
PerformSkill("Inner Quiet");
boolean tricksUsed = false;
tricksUsed=CheckForRecoveryCP()||tricksUsed;
PerformSkill("Waste Not II");
while (CURRENT_CRAFT.craft_durability>10&&!MaxQuality()) {
if (CURRENT_CONDITION==Condition.EXCELLENT) {
PerformSkill("Basic Touch",true);
PerformSkill("Innovation",true);
while (CURRENT_CRAFT.craft_durability>10&&CURRENT_CRAFT.BuffList.get("Waste Not").stackCount>=3) {
UseRegularTouch();
}
PerformSkill("Great Strides",true);
PerformSkill("Byregot's Blessing",true);
PerformSkill("Basic Synthesis");
return;
}
PerformSkill("Hasty Touch",true);
}
PerformSkill("Master's Mend",true);
//tricksUsed=CheckForRecoveryCP()||tricksUsed;
PerformSkill("Hasty Touch",true);
tricksUsed=CheckForRecoveryCP()||tricksUsed;
PerformSkill("Hasty Touch",true);
if (CheckForRecoveryCP()) {
if (!tricksUsed) {
tricksUsed=true;
UseRegularTouch();
}
}
PerformSkill("Innovation",true);
if (CURRENT_CRAFT.craft_cp>=84) {
UseRegularTouch();
} else {
CheckForRecoveryCP();PerformSkill("Hasty Touch",true);
}
PerformSkill("Great Strides",true);
if (CURRENT_CRAFT.craft_cp>=24) {
while (CURRENT_CRAFT.BuffList.get("Great Strides").stackCount>=2&&CURRENT_CRAFT.BuffList.get("Innovation").stackCount>=2&&CURRENT_CRAFT.craft_cp>=31&&CURRENT_CONDITION!=Condition.GOOD&&CURRENT_CONDITION!=Condition.EXCELLENT) {
PerformSkill("Observe",true);
}
PerformSkill("Byregot's Blessing",true);
} else {
UseRegularTouch();
}
PerformSkill("Basic Synthesis");
}
private static void LoadRotation_40Durability_2300Quality_2Synth_282CP_LV50() {
DURABILITY=40;
CURRENT_CRAFT = new Craft(CONTROL,LEVEL,CP,BASE_PROGRESS,PROGRESS_GOAL,QUALITY_GOAL,GUARANTEED,DURABILITY,CRAFT_PROGRESS,CRAFT_QUALITY,DURABILITY,CP,1,1,1,RECIPE_LEVEL,Status.NORMAL,BUFFLIST);
PerformSkill("Inner Quiet");
boolean tricksUsed = false;
tricksUsed=CheckForRecoveryCP()||tricksUsed;
PerformSkill("Waste Not II");
while (CURRENT_CRAFT.craft_durability>10&&!MaxQuality()) {
PerformSkill("Hasty Touch",true);
}
PerformSkill("Master's Mend",true);
//tricksUsed=CheckForRecoveryCP()||tricksUsed;
PerformSkill("Hasty Touch",true);
tricksUsed=CheckForRecoveryCP()||tricksUsed;
PerformSkill("Hasty Touch",true);
if (tricksUsed) {
PerformSkill("Hasty Touch",true);
}
if (CheckForRecoveryCP()) {
if (!tricksUsed) {
tricksUsed=true;
PerformSkill("Hasty Touch",true);
}
}
PerformSkill("Great Strides",true);
if (CheckForRecoveryCP()) {
if (!tricksUsed) {
tricksUsed=true;
PerformSkill("Hasty Touch",true);
}
}
PerformSkill("Innovation",true);
if (CURRENT_CRAFT.craft_cp>=24) {
PerformSkill("Byregot's Blessing",true);
} else {
UseRegularTouch();
}
if (tricksUsed) {
PerformSkill("Veneration");
}
if (CURRENT_CRAFT.craft_cp>=18) {
tricksUsed=true;
PerformSkill("Hasty Touch",true);
}
PerformSkill("Basic Synthesis");
if (!tricksUsed) {
PerformSkill("Basic Synthesis");
}
}
private static void LoadRotation_40Durability_800Quality_1Synth_280CP_LV50() {
LEVEL=50;
DURABILITY=40;
CURRENT_CRAFT = new Craft(CONTROL,LEVEL,CP,BASE_PROGRESS,PROGRESS_GOAL,QUALITY_GOAL,GUARANTEED,DURABILITY,CRAFT_PROGRESS,CRAFT_QUALITY,DURABILITY,CP,1,1,1,RECIPE_LEVEL,Status.NORMAL,BUFFLIST);
PerformSkill("Inner Quiet");
CONDITION_CHECK = false;UpdateCondition();
PerformSkill("Waste Not II");
UseRegularTouch();
UseRegularTouch();
UseRegularTouch();
PerformSkill("Great Strides",true);
PerformSkill("Byregot's Blessing",true);
PerformSkill("Basic Synthesis");
}
private static void LoadRotation_40Durability_1900Quality_1Synth_280CP_LV50() {
LEVEL=50;
DURABILITY=40;
CURRENT_CRAFT = new Craft(CONTROL,LEVEL,CP,BASE_PROGRESS,PROGRESS_GOAL,QUALITY_GOAL,GUARANTEED,DURABILITY,CRAFT_PROGRESS,CRAFT_QUALITY,DURABILITY,CP,1,1,1,RECIPE_LEVEL,Status.NORMAL,BUFFLIST);
PerformSkill("Inner Quiet");
CONDITION_CHECK = false;UpdateCondition();
PerformSkill("Waste Not II");
UseRegularTouch();
UseRegularTouch();
UseRegularTouch();
UseRegularTouch();
UseRegularTouch();
PerformSkill("Innovation",true);
UseRegularTouch();
PerformSkill("Great Strides",true);
/*if (CURRENT_CONDITION==Condition.NORMAL){
PerformSkill("Observe");
}*/
PerformSkill("Byregot's Blessing",true);
PerformSkill("Basic Synthesis");
PerformSkill("Careful Synthesis");
}
private static void LoadRotation_40Durability_1700Quality_1Synth_278CP_LV47() {
LEVEL=47;
private static void LoadRotation_40Durability_1600Quality_1Synth_311CP_LV53(){
DURABILITY=40;
CURRENT_CRAFT = new Craft(CONTROL,LEVEL,CP,BASE_PROGRESS,PROGRESS_GOAL,QUALITY_GOAL,GUARANTEED,DURABILITY,CRAFT_PROGRESS,CRAFT_QUALITY,DURABILITY,CP,1,1,1,RECIPE_LEVEL,Status.NORMAL,BUFFLIST);
PerformSkill("Inner Quiet");
CONDITION_CHECK = false;UpdateCondition();
PerformSkill("Innovation");
PerformSkill("Waste Not II");
UseRegularTouch();
UseRegularTouch();
UseRegularTouch();
UseRegularTouch();
CONDITION_CHECK = true;UpdateCondition();
PerformSkill("Innovation",true);
CONDITION_CHECK = false;UpdateCondition();
UseRegularTouch();
UseRegularTouch();
UseRegularTouch();
PerformSkill("Basic Synthesis");
}
private static void LoadRotation_40Durability_1700Quality_1Synth_wVeneration_278CP_LV47() {
LEVEL=47;
DURABILITY=40;
CURRENT_CRAFT = new Craft(CONTROL,LEVEL,CP,BASE_PROGRESS,PROGRESS_GOAL,QUALITY_GOAL,GUARANTEED,DURABILITY,CRAFT_PROGRESS,CRAFT_QUALITY,DURABILITY,CP,1,1,1,RECIPE_LEVEL,Status.NORMAL,BUFFLIST);
PerformSkill("Inner Quiet");
CONDITION_CHECK = false;UpdateCondition();
PerformSkill("Innovation");
PerformSkill("Waste Not II");
UseRegularTouch();
UseRegularTouch();
CONDITION_CHECK = true;UpdateCondition();
PerformSkill("Innovation",true);
CONDITION_CHECK = false;UpdateCondition();
UseRegularTouch();
UseRegularTouch();
UseRegularTouch();
UseRegularTouch();
PerformSkill("Veneration");
PerformSkill("Basic Synthesis");
}
private static void LoadRotation_40Durability_1200Quality_1Synth_282CP_LV47() {
LEVEL=47;
DURABILITY=40;
CURRENT_CRAFT = new Craft(CONTROL,LEVEL,CP,BASE_PROGRESS,PROGRESS_GOAL,QUALITY_GOAL,GUARANTEED,DURABILITY,CRAFT_PROGRESS,CRAFT_QUALITY,DURABILITY,CP,1,1,1,RECIPE_LEVEL,Status.NORMAL,BUFFLIST);
CONDITION_CHECK = false;UpdateCondition();
PerformSkill("Inner Quiet");
PerformSkill("Innovation");
PerformSkill("Waste Not II");
UseRegularTouch();
UseRegularTouch();
UseRegularTouch();
UseRegularTouch();
//PerformSkill("Innovation",true);
UseRegularTouch();
UseRegularTouch();
UseRegularTouch();
PerformSkill("Basic Synthesis");
}
private static void LoadRotation_40Durability_1200Quality_1Synth_wVeneration_280CP_LV47() {
LEVEL=47;
DURABILITY=40;
CURRENT_CRAFT = new Craft(CONTROL,LEVEL,CP,BASE_PROGRESS,PROGRESS_GOAL,QUALITY_GOAL,GUARANTEED,DURABILITY,CRAFT_PROGRESS,CRAFT_QUALITY,DURABILITY,CP,1,1,1,RECIPE_LEVEL,Status.NORMAL,BUFFLIST);
//PerformSkill("Inner Quiet");
CONDITION_CHECK = false;UpdateCondition();
PerformSkill("Waste Not II");
PerformSkill("Innovation");
UseRegularTouch();
UseRegularTouch();
UseRegularTouch();
UseRegularTouch();
//PerformSkill("Innovation",true);
UseRegularTouch();
UseRegularTouch();
UseRegularTouch();
PerformSkill("Veneration");
PerformSkill("Basic Synthesis");
}
private static void LoadRotation_40Durability_1200Quality_1Synth_wVeneration_280CP_LV53() {
LEVEL=53;
DURABILITY=40;
CURRENT_CRAFT = new Craft(CONTROL,LEVEL,CP,BASE_PROGRESS,PROGRESS_GOAL,QUALITY_GOAL,GUARANTEED,DURABILITY,CRAFT_PROGRESS,CRAFT_QUALITY,DURABILITY,CP,1,1,1,RECIPE_LEVEL,Status.NORMAL,BUFFLIST);
//PerformSkill("Inner Quiet");
CONDITION_CHECK = false;UpdateCondition();
PerformSkill("Waste Not II");
PerformSkill("Innovation");
UseRegularTouch();
UseRegularTouch();
UseRegularTouch();
UseRegularTouch();
//PerformSkill("Innovation",true);
UseRegularTouch();
UseRegularTouch();
UseRegularTouch();
PerformSkill("Great Strides",true);
/*if (CURRENT_CONDITION==Condition.NORMAL){
PerformSkill("Observe");
}*/
PerformSkill("Byregot's Blessing",true);
PerformSkill("Veneration");
PerformSkill("Basic Synthesis");
}
private static void LoadRotation_40Durability_1900Quality_1Synth_280CP_LV45() {
LEVEL=45;
DURABILITY=40;
CURRENT_CRAFT = new Craft(CONTROL,LEVEL,CP,BASE_PROGRESS,PROGRESS_GOAL,QUALITY_GOAL,GUARANTEED,DURABILITY,CRAFT_PROGRESS,CRAFT_QUALITY,DURABILITY,CP,1,1,1,RECIPE_LEVEL,Status.NORMAL,BUFFLIST);
boolean combo=false;
PerformSkill("Inner Quiet");
CheckForRecoveryCP();PerformSkill("Innovation");
CheckForRecoveryCP();PerformSkill("Waste Not");
while (!MaxQuality()) {
if (CURRENT_CONDITION==Condition.EXCELLENT) {
UseRegularTouch();
} else
if (CURRENT_CRAFT.BuffList.get("Waste Not").stackCount!=0) {
if (!IsThereEnoughTurns(CURRENT_CRAFT.craft_durability,CURRENT_CRAFT.BuffList,1)) {
break;
}
UseRegularTouch();
} else {
CheckForRecoveryCP();PerformSkill("Innovation");
CheckForRecoveryCP();PerformSkill("Waste Not");
}
//System.out.println(IsThereEnoughTurns(CURRENT_CRAFT.craft_durability,CURRENT_CRAFT.BuffList,2));
}
PerformSkill("Basic Synthesis");
}
private static void UseRegularTouch() {
boolean isHundredPercent=false;
try {
Color col = new Color(CaptureScreen().getRGB(HUNDRED_PERCENT_QUALITY.p.x,HUNDRED_PERCENT_QUALITY.p.y));
if (col.getRGB()==HUNDRED_PERCENT_QUALITY.c.getRGB()) {
isHundredPercent=true;
}
} catch (IOException e) {
e.printStackTrace();
if (MaxQuality()){
return;
}
if (!isHundredPercent){
if ((CURRENT_CRAFT.craft_durability>5&&CURRENT_CRAFT.BuffList.get("Waste Not").stackCount>0)||(CURRENT_CRAFT.craft_durability>10&&CURRENT_CRAFT.BuffList.get("Waste Not").stackCount==0)) {
if (CURRENT_CRAFT.craft_cp>=18) {
if (LEVEL>=53){
UpdateCondition();
}
if (LEVEL>=53&&(CURRENT_CONDITION==Condition.GOOD||CURRENT_CONDITION==Condition.EXCELLENT)){
PerformSkill("Precise Touch",true);
} else
if (IsCombo()) {
PerformSkill("Standard Touch",true);
} else {
PerformSkill("Basic Touch",true);
}
if ((CURRENT_CRAFT.craft_durability>5&&CURRENT_CRAFT.BuffList.get("Waste Not").stackCount>0)||(CURRENT_CRAFT.craft_durability>10&&CURRENT_CRAFT.BuffList.get("Waste Not").stackCount==0)) {
if (CURRENT_CRAFT.craft_cp>=18) {
if (LEVEL>=53&&(CURRENT_CONDITION==Condition.GOOD||CURRENT_CONDITION==Condition.EXCELLENT)){
PerformSkill("Precise Touch",true);
} else
if (IsCombo()) {
PerformSkill("Standard Touch",true);
} else {
PerformSkill("Hasty Touch",true);
PerformSkill("Basic Touch",true);
}
} else {
PerformSkill("Hasty Touch",true);
}
} else {
System.out.println("100% has been reached, touch will be skipped...");
}
}
private static boolean IsCombo() {
return CURRENT_CRAFT.SkillList.get(CURRENT_CRAFT.SkillList.size()-1).name.equals("Basic Touch");
if (CURRENT_CRAFT.SkillList.size()>0) {
return CURRENT_CRAFT.SkillList.get(CURRENT_CRAFT.SkillList.size()-1).name.equals("Basic Touch");
} else {
return false;
}
}
private static boolean CheckForRecoveryCP() {
@ -528,7 +294,9 @@ public class SigCraft {
}
private static void PerformSkill(String string,boolean checkForMaxQuality) {
if (checkForMaxQuality&&MaxQuality()) {
return;
}
if (CURRENT_CONDITION==Condition.EXCELLENT&&
!VALID_TOUCH_ACTIONS.contains(string)) {
UseRegularTouch();
@ -539,9 +307,6 @@ public class SigCraft {
e.printStackTrace();
}
r.delay(40);
if (checkForMaxQuality&&MaxQuality()) {
return;
}
if (VALID_TOUCH_ACTIONS.contains(string)&&!IsThereEnoughTurns(CURRENT_CRAFT.craft_durability,CURRENT_CRAFT.BuffList,1)) {return;}
//System.out.println(" Still enough Turns.");
Skill s = SKILLLIST.get(string);
@ -558,7 +323,6 @@ public class SigCraft {
s.useSkill(CURRENT_CRAFT);
System.out.println(" Durability: "+CURRENT_CRAFT.craft_durability+" CP:"+CURRENT_CRAFT.craft_cp);
}
r.delay(300);
UpdateCondition();
if (CONDITION_CHECK) {
System.out.println("Condition is now: "+CURRENT_CONDITION);
@ -569,12 +333,12 @@ public class SigCraft {
private static boolean MaxQuality() {
Color col=null;
try {
col = new Color(CaptureScreen().getRGB(336, 267));
col = new Color(CaptureScreen().getRGB(HUNDRED_PERCENT_QUALITY.p.x,HUNDRED_PERCENT_QUALITY.p.y));
//System.out.println(col);
} catch (IOException e) {
e.printStackTrace();
}
return col.getRed()==151&&col.getGreen()==220&&col.getBlue()==96;
return col.getRGB()==HUNDRED_PERCENT_QUALITY.c.getRGB();
}
private static void LookForScreenPixels(ColorPosition...cp) throws IOException, InterruptedException {

@ -0,0 +1,24 @@
package sig.skills;
import sig.Craft;
import sig.Skill;
public class CarefulSynthesis extends Skill {
public CarefulSynthesis(String name, int CPCost, boolean guaranteed, int lvReq, int modifier, int key) {
super(name, CPCost, guaranteed, lvReq, modifier, key);
}
public CarefulSynthesis(String name, int CPCost, boolean guaranteed, int lvReq, int key) {
super(name, CPCost, guaranteed, lvReq, key);
}
@Override
public void useSkill(Craft c) {
c.craft_progress += c.base_progress * c.progress_mult * 1.2;
c.craft_durability -= 10 * c.durability_mult;
super.useSkill(c);
super.updateBuffs(c);
}
}
Loading…
Cancel
Save