package com.lloydm.javakogengine_chess; class Tech //2sep2021 { public static boolean TECHUNITSELECTED = false; public static int TECHUNITIDSELECTED = -1; public static int COMPLETEDTIME = 60 * 5; //time to show on screen the 'completed' message for.... public static int COMPLETEDID = -1; // public static int ADDSUBTRACT = 0; public static int TARGETUID = -1; // public String name; public String techcategory;//23sep2021 public String displayname; public String[] description; public String tooltip; public int guilinkid; public int id; public int faction; // public int researchtime; //number of seconds to count down from public int timeleft; //initialised to -1 public int researched; //reset at beginning of mission. public int completedtime;// public int researching; public int unlimited;//23sep2021 // public int goldcost;//23sep2021 public int purchased;//23sep2021 public int purchaseguilink;//23sep2021 public int temporary;//23sep2021 public int temporarytime;//23sep2021 public int TEMPORARYTIME = 90;//23sep2021 public int attackaction;//23sep2021 public int guiactionid;//23sep2021 public int selectedtopurchase;//23sep2021 public int manacost;//23sep2021 // public int img; //icon image public int imgframe; //frame in image if multiple cells... public String imgfile; //image file public int saleimg;//saleimage//23sep2021 public String saleimgfile;//image file//23sep2021 public int saleimgframe;//23sep2021 public int scw; //cell width//23sep2021 public int sch; //cell height//23sep2021 public int snw; //number wide//23sep2021 public int snh; //number high//23sep2021 public int cw; //cell width public int ch; //cell height public int nw; //number wide public int nh; //number high // public String effectname; //pipe separated list of items.... public int effectint;// if value is a buff of sorts.... // public static String ENABLEUNIT = "EU_"; public static String BUFFMOVE = "BM_"; public static String BUFFATT = "BA_"; public static String BUFFDEF = "BD_"; public static String BUFFHP = "BH_"; public static String BUFFABILITY = "BZ_"; // public int[] unittemplatesenabled; public int[] unittemplatesmove; public int[] unittemplatesatt; public int[] unittemplatesdef; public int[] unittemplateshp; public String[] unittemplatesability; // //example effect name String: //effectname = EU_Hero Skeleton //would enable the Hero Skeleton to be built. //effectname = BA_Hero Skeleton|BD_Hero Skeleton //effectint = 1 //would buff Hero Skeletons' Att and Def by +1 point permanently. public static String MV = "MV"; public static String BA = "BA"; public static String BD = "BD"; public static String BH = "BH"; public static String BZ = "BZ"; ///////////////////Method Definition/////////////// public static int PercentComplete(Game game,int id) { if(!Config.USETECH) { return 100; } if(Game.techs[id].timeleft<0) { return 0; } if(Game.techs[id].timeleft==0) { return 100; } if(Game.techs[id].researchtime<=0) { return 100; } return ((Game.techs[id].researchtime - Game.techs[id].timeleft) * 100) / Game.techs[id].researchtime; } ///////////////////Method Definition/////////////// public static void StartResearch(Game game,int techid,int faction) { if(!Config.USETECH) { return; } for(int i=0;i0) { if(Game.techs[i].unittemplatesmove!=null && type.equals(Tech.MV)) { for(int j=0;j0) { Game.units[id].magicrelease = Unit.MAGICRELEASE; } else { Game.units[id].magicrelease = 0; } break; case "magictransform": //for transforming into a different unit redomagic = true; Game.units[id].magictransform +=value; if(Game.units[id].magictransform>0) { Game.units[id].magictransform = Unit.MAGICTRANSFORM; } else { Game.units[id].magictransform = 0; } break; case "magicsummoner": redomagic = true; Game.units[id].magiczombiemaster+=value; if(Game.units[id].magiczombiemaster>0) { Game.units[id].magiczombiemaster = Unit.MAGICZOMBIEMASTER; } else { Game.units[id].magiczombiemaster = 0; } break; case "magiczombiemaster"://redundant version alias redomagic = true; Game.units[id].magiczombiemaster+=value; if(Game.units[id].magiczombiemaster>0) { Game.units[id].magiczombiemaster = Unit.MAGICZOMBIEMASTER; } else { Game.units[id].magiczombiemaster = 0; } break; case "magicleader": Game.units[id].magicleader+=value; redomagic = true; if(Game.units[id].magicleader>0) { Game.units[id].magicleader = Unit.MAGICLEADER; } else { Game.units[id].magicleader = 0; } break; //end----------------//9apr2021 case "magicfrenzy": Game.units[id].magicfrenzy+=value; redomagic = true; if(Game.units[id].magicfrenzy>0) { Game.units[id].magicfrenzy = Unit.MAGICFRENZY; } else { Game.units[id].magicfrenzy = 0; } break; case "magicdoom": Game.units[id].magicdoom+=value; redomagic = true; if(Game.units[id].magicdoom>0) { Game.units[id].magicdoom = Unit.MAGICDOOM; } else { Game.units[id].magicdoom = 0; } break; case "magicdefense": Game.units[id].magicdef+=value; redomagic = true; if(Game.units[id].magicdef>0) { Game.units[id].magicdef = Unit.MAGICDEF; } else { Game.units[id].magicdef = 0; } break; case "magicdef": //redundancy Game.units[id].magicdef+=value; redomagic = true; if(Game.units[id].magicdef>0) { Game.units[id].magicdef = Unit.MAGICDEF; } else { Game.units[id].magicdef = 0; } break; //end-------------//01apr2021 //start---------------//28mar2021 case "magicweb": Game.units[id].magicweb+=value; redomagic = true; if(Game.units[id].magicweb>0) { Game.units[id].magicweb = Unit.MAGICWEB; } else { Game.units[id].magicweb = 0; } break; case "magicgas": redomagic = true; Game.units[id].magicgas+=value; if(Game.units[id].magicgas>0) { Game.units[id].magicgas = Unit.MAGICGAS; } else { Game.units[id].magicgas = 0; } break; case "magichaste": redomagic = true; Game.units[id].magichaste+=value; if(Game.units[id].magichaste>0) { Game.units[id].magichaste = Unit.MAGICHASTE; } else { Game.units[id].magichaste = 0; } break; case "magicfear": redomagic = true; Game.units[id].magicfear+=value; if(Game.units[id].magicfear>0) { Game.units[id].magicfear = Unit.MAGICFEAR; } else { Game.units[id].magicfear = 0; } break; case "magicshield": redomagic = true; Game.units[id].magicshield+=value; if(Game.units[id].magicshield>0) { Game.units[id].magicshield = Unit.MAGICSHIELD; } else { Game.units[id].magicshield = 0; } break; case "magicstorm": redomagic = true; Game.units[id].magicstorm+=value; if(Game.units[id].magicstorm>0) { Game.units[id].magicstorm = Unit.MAGICSTORM; } else { Game.units[id].magicstorm = 0; } break; case "magicsword": redomagic = true; Game.units[id].magicsword += value; if(Game.units[id].magicsword>0) { Game.units[id].magicsword = Unit.MAGICSWORD; } else { Game.units[id].magicsword = 0; } break; case "magicstealth": redomagic = true; Game.units[id].magicstealth += value; if(Game.units[id].magicstealth>0) { Game.units[id].magicstealth = Unit.MAGICSTEALTH; } else { Game.units[id].magicstealth = 0; } break; case "magicplant": redomagic = true; Game.units[id].magicplant += value; if(Game.units[id].magicplant>0) { Game.units[id].magicplant = Unit.MAGICPLANT; } else { Game.units[id].magicplant = 0; } break; case "magicwind": redomagic = true; Game.units[id].magicwind += value; if(Game.units[id].magicwind>0) { Game.units[id].magicwind = Unit.MAGICWIND; } else { Game.units[id].magicwind = 0; } break; //end-----------------//28mar2021 case "highfirerate": //25Feb2021 Game.units[id].highfirerate += value; break; //start-------------//7mar2021 case "mob": Game.units[id].mob += value; break; case "hatred": Game.units[id].hatred += value; break; case "craftsman": Game.units[id].craftsman += value; break; case "planar": Game.units[id].planar += value; break; case "slow": Game.units[id].slow += value; break; case "woodsman": Game.units[id].woodsman += value; break; case "stupid": Game.units[id].stupid += value; break; case "frenzy": Game.units[id].frenzy += value; break; //end---------------//7mar2021 case "shocktroops": Game.units[id].shock += value; break; case "shock": //2sep2021 Game.units[id].shock += value; break;//2sep2021 case "stealth": Game.units[id].stealth += value; break; case "damagex": Game.units[id].damagex += value; break; case "fearsome": Game.units[id].fearsome += value; break; case "leader": Game.units[id].leader += value; break; case "bounddemon"://12jul2021 Game.units[id].bounddemon += value; break; case "bossmonster": Game.units[id].bossmonster += value; break; case "flammable": Game.units[id].flammable += value; break; case "regeneration": Game.units[id].regeneration += value; break; case "zombie": Game.units[id].zombie += value; break; case "evilfire": Game.units[id].firespell -= value; break; case "sacrificial": Game.units[id].sacrificial += value; break; case "cansacrifice": Game.units[id].cansacrifice += value; break; case "animosity": Game.units[id].animosity += value; break; } if(redomagic) { Game.units[id].magicarray = new int[17]; int m = 0; if(Game.units[id].magicrelease>0)//3may2021 { Game.units[id].magicarray[m] = Game.units[id].magicrelease; m++; } if(Game.units[id].magictransform>0)//3may2021 { Game.units[id].magicarray[m] = Game.units[id].magictransform; m++; } //start--------------//9apr2021 if(Game.units[id].magicleader>0)//01apr2021 { Game.units[id].magicarray[m] = Game.units[id].magicleader; m++; } if(Game.units[id].magiczombiemaster>0)//01apr2021 { Game.units[id].magicarray[m] = Game.units[id].magiczombiemaster; m++; } //end----------------//9apr2021 if(Game.units[id].magicdoom>0)//01apr2021 { Game.units[id].magicarray[m] = Game.units[id].magicdoom; m++; } if(Game.units[id].magicdef>0)//01apr2021 { Game.units[id].magicarray[m] = Game.units[id].magicdef; m++; } if(Game.units[id].magicfrenzy>0)//01apr2021 { Game.units[id].magicarray[m] = Game.units[id].magicfrenzy; m++; } if(Game.units[id].magicweb>0) { Game.units[id].magicarray[m] = Game.units[id].magicweb; m++; } if(Game.units[id].magicfear>0) { Game.units[id].magicarray[m] = Game.units[id].magicfear; m++; } if(Game.units[id].magicgas>0) { Game.units[id].magicarray[m] = Game.units[id].magicgas; m++; } if(Game.units[id].magichaste>0) { Game.units[id].magicarray[m] = Game.units[id].magichaste; m++; } if(Game.units[id].magicplant>0) { Game.units[id].magicarray[m] = Game.units[id].magicplant; m++; } if(Game.units[id].magicshield>0) { Game.units[id].magicarray[m] = Game.units[id].magicshield; m++; } if(Game.units[id].magicstealth>0) { Game.units[id].magicarray[m] = Game.units[id].magicstealth; m++; } if(Game.units[id].magicstorm>0) { Game.units[id].magicarray[m] = Game.units[id].magicstorm; m++; } if(Game.units[id].magicsword>0) { Game.units[id].magicarray[m] = Game.units[id].magicsword; m++; } if(Game.units[id].magicwind>0) { Game.units[id].magicarray[m] = Game.units[id].magicwind; m++; } } } ///////////////////Method Definition/////////////// public static boolean IsUnitEnabled(Game game,int templateid) { if(!Config.USETECH) { return true; } for(int i=0;i0) { if(Game.techs[i].unittemplatesenabled!=null) { for(int j=0;j0 && Game.units[u].faction==Game.techs[i].faction && Game.units[u].techguilinkid==Game.techs[i].guilinkid) { Tech.StartResearch(game,i,Game.techs[i].faction); break; } } } } } } } public static void resetall(Game game) { if(!Config.USETECH) { return; } for(int i=0;i=0) { Game.gui[i].action = Gui.ACTION_NONE; } } } ///////////////////Method Definition/////////////// public void update(Game game) { //start-----------//23sep2021 if(goldcost>0 && purchased<=0) { timeleft = -1; completedtime = -1; researched = -1; researching = 0; return; } if(temporary>0 && attackaction>0) { //player is using this tech to perform an attack..... //therefore if(temporarytime>0) { temporarytime--; researched = 1; completedtime = COMPLETEDTIME; timeleft = 0; researching = 0; Unit.SelectNearestTarget(null,Unit.GetPlayer(null));//24sep2021 } else { timeleft = -1; completedtime = -1; researched = -1; researching = 0; } return; } //end-------------//23sep2021 if(timeleft==0) { researched = 1; completedtime = COMPLETEDTIME; } if(timeleft>0 && researching>0) { timeleft--; } if(completedtime>0) { completedtime--; COMPLETEDID = id; } else { COMPLETEDID = -1; } } //start----------23sep2021 public static int GetTechIdFromAction(Game game,int guiactionid) { if(!Config.USETECH) { return -1; } if(Game.techs==null) { return -1; } for(int i=0;i0 && Game.techs[i].attackaction>0) { boolean found = false; for(int g=0;g=0) { //don't overwrite existing if filling an empty slot.... found = true; break; } } if(found) { continue; } return Game.techs[i].guiactionid; } } return Gui.ACTION_NONE; } // public static int GoldCost(Game game,int id) { if(!Config.USETECH) { return -1; } return Game.techs[id].goldcost; } public static int GoldCostGui(Game game,int action) { if(!Config.USETECH) { return 0; } for(int i=0;i=Game.techs.length) { return 0; } if(Game.techs[id].purchased>0) { return 0; } if(Game.techs[id].goldcost<=0) { return 0; } for(int i=0;i0) { Game.techs[i].selectedtopurchase = 0; } } Game.techs[id].selectedtopurchase = 1; if(Game.techs[id].unlimited>0) { Game.techs[id].selectedtopurchase = -1; } return Game.techs[id].selectedtopurchase; } public static int PurchaseGuiSelected(Game game) { int limit = 0; for(int i=0;i0) { return; } for(int j=0;j0 && Game.units[j].gold>=Game.techs[id].goldcost) { Game.units[j].gold-=Game.techs[id].goldcost; if(Game.techs[id].name.equals("healthpotion")) { Game.units[j].healthpotions++; break; } if(Game.techs[id].name.equals("manapotion")) { Game.units[j].manapotions++; break; } if(Game.techs[id].name.equals("bothpotion")) { Game.units[j].bothpotions++; break; } Game.techs[id].purchased=1; Game.techs[id].researched = -1; Game.techs[id].completedtime = -1; Game.techs[id].timeleft = -1; Game.techs[id].researching = 0; break; } } } public static void DrinkPotion(Game game,int pid,String type) { if(type.equals("health")) { if(Game.units[pid].healthpotions>0) { Game.units[pid].healthpotions--; Game.units[pid].hp+=PotionStrength(null,"healthpotion"); if(Game.units[pid].hp>Game.units[pid].basehp) { Game.units[pid].hp = Game.units[pid].basehp; } } } if(type.equals("mana")) { if(Game.units[pid].manapotions>0) { Game.units[pid].manapotions--; Game.units[pid].mana+=PotionStrength(null,"manapotion"); if(Game.units[pid].mana>Game.units[pid].basemana) { Game.units[pid].mana = Game.units[pid].basemana; } } } if(type.equals("both")) { if(Game.units[pid].bothpotions>0) { Game.units[pid].bothpotions--; Game.units[pid].hp+=PotionStrength(null,"bothpotion"); if(Game.units[pid].hp>Game.units[pid].basehp) { Game.units[pid].hp = Game.units[pid].basehp; } Game.units[pid].mana+=PotionStrength(null,"bothpotion"); if(Game.units[pid].mana>Game.units[pid].basemana) { Game.units[pid].mana = Game.units[pid].basemana; } } } } public static int PotionStrength(Game game,String type) { if(!Config.USETECH) { return 0; } if(Game.techs==null) { return 0; } for(int i=0;i0) { return true; } } } return false; } public static void ActivateAttack(Game game,int id) { if(!Config.USETECH) { return; } if(Game.techs==null) { return; } int pid = Unit.GetPlayer(null); if(pid==-1) { return; } for(int i=0;i0) { if(Game.units[pid].mana>=Game.techs[i].manacost) { Game.units[pid].mana-=Game.techs[i].manacost; } else { return; } if(Game.techs[i].temporary>0) { Game.techs[i].temporarytime = Game.techs[i].TEMPORARYTIME; } //the player will activate this option..... if(Game.units[pid].animmode!=Unit.ANIMMODE_ATTACK && Game.units[pid].animmode!=Unit.ANIMMODE_ATTACK2 && Game.units[pid].animmode!=Unit.ANIMMODE_ATTACK3) { Game.units[pid].firetargeti = -1; //reset the player's attack choice.... Game.units[pid].orderframe = 0; Game.techs[i].update(null); } } } } } public static void RemoveItemFromStore(Game game,int g) { if(!Config.USETECH) { return; } if(Game.techs==null) { return; } if(Game.gui==null) { return; } if(g<0 || g>Game.gui.length) { return; } Game.gui[g].action = Gui.ACTION_NONE; } public static void ChooseItemForStore(Game game,int g,String name,int mincost,int maxcost) { if(!Config.USETECH) { return; } if(Game.techs==null) { return; } if(Game.gui==null) { return; } if(g<0 || g>Game.gui.length) { return; } if(Game.gui[g].command.indexOf("buydescription")>=0) { return; } int count = 0; int index = 0; for(int i=0;imaxcost) { continue; } } if(Game.techs[i].name.equals(name)) { Game.gui[g].action = Game.techs[i].guiactionid; break; } if(Game.techs[i].techcategory.equals(name)) { count++; } } if(count>0) { index = Functions.rand(0,1000); if(index<0) { index*=-1; } index%=count; index++; for(int i=0;imaxcost) { continue; } } if(Game.techs[i].techcategory.equals(name)) { index--; if(index<=0) { Game.gui[g].action = Game.techs[i].guiactionid; break; } } } } } //end----23sep2021 }