Emberveil source

tests/DarrenAndGoblinCheck.java

import com.rs2.Constants;
import com.rs2.game.content.emberveil.*;
import com.rs2.game.content.quests.*;
import com.rs2.game.content.quests.impl.GoblinDiplomacy;
import com.rs2.game.dialogues.DialogueOptions;
import com.rs2.game.items.*;
import com.rs2.game.players.*;
import com.rs2.world.clip.*;
import org.apollo.cache.*;
import org.apollo.cache.decoder.*;
import java.nio.file.*;
import java.util.*;

public final class DarrenAndGoblinCheck {
 static int checks;
 static void check(boolean value,String label){checks++;if(!value)throw new AssertionError(label);}
 static class F extends MemberQuestsCheck.Fixture { F(){playerName=playerName2="goblinquestqa";playerXP[Constants.CRAFTING]=0;playerLevel[Constants.CRAFTING]=1;} }
 static void general(F p,int npc){p.getNpcs().firstClickNpc(npc);}
 static void accept(F p){general(p,296);p.getDialogueHandler().sendDialogues(p.nextChat,296);DialogueOptions.handleDialogueOptions(p,9157);}
 static void goblins()throws Exception {
  F p=new F();p.pos(0,0,0);general(p,296);check(p.nextChat==0,"remote quest start rejected");
  p.pos(2960,3510,0);general(p,296);p.getDialogueHandler().sendDialogues(p.nextChat,296);DialogueOptions.handleDialogueOptions(p,9158);check(p.goblinDiplomacy==0,"decline does not start quest");
  accept(p);check(p.goblinDiplomacy==1,"NPC and dialogue start Goblin Diplomacy");
  p.item(0,287);general(p,296);check(p.goblinDiplomacy==1&&p.getItemAssistant().playerHasItem(287),"wrong colour cannot skip orange");
  p.item(1,286);p.inTrade=true;general(p,296);check(p.goblinDiplomacy==1,"trade blocks hand-in");p.inTrade=false;
  p.heightLevel=1;general(p,296);check(p.goblinDiplomacy==1,"wrong floor blocks hand-in");p.heightLevel=0;
  general(p,296);check(p.goblinDiplomacy==2&&!p.getItemAssistant().playerHasItem(286),"orange accepted once");
  p.pos(2954,3510,0);general(p,297);check(p.goblinDiplomacy==3&&!p.getItemAssistant().playerHasItem(287),"other general accepts blue");
  p.clear();for(int i=0;i<28;i++)p.item(i,1511);p.item(3,288);general(p,297);
  check(p.goblinDiplomacy==4&&p.questPoints==5,"brown completes quest with five QP");
  check(p.playerItems[3]==2358&&p.getItemAssistant().freeSlots()==0,"full inventory exchanges brown mail for gold bar");
  check(p.playerXP[Constants.CRAFTING]==800,"200 base Crafting XP receives server multiplier once");
  for(int i=0;i<5;i++)general(p,297);check(p.questPoints==5&&p.playerXP[Constants.CRAFTING]==800,"completed quest rewards cannot repeat");
  String previous=System.getProperty("user.dir");Path save=Paths.get(previous,"../../runtime/goblin-save-check").normalize().toAbsolutePath();
  check(!Files.exists(save.resolve("data/characters/goblinquestqa.txt")),"test cannot overwrite a real save");
  try {System.setProperty("user.dir",save.toString());p.saveFile=p.saveCharacter=true;p.newPlayer=false;PlayerHandler.players[1]=p;
   check(PlayerSave.saveGame(p),"quest saves");F q=new F();check(PlayerSave.loadPlayerInfo(q,q.playerName,"",false)==1,"quest reloads");
   check(q.goblinDiplomacy==4&&q.questPoints==5&&q.playerXP[Constants.CRAFTING]==800,"progress and rewards persist");
  }finally{System.setProperty("user.dir",previous);PlayerHandler.players[1]=null;Files.deleteIfExists(save.resolve("data/characters/goblinquestqa.txt"));Files.deleteIfExists(save.resolve("data/characters/goblinquestqa.txt.bak"));}
  check(QuestAssistant.Quests.GOBLIN.questStatus(),"free quest enabled in quest list");QuestAssistant.questButtons(p,28170);
  F d=new F();for(int i=0;i<28;i++)d.item(i,1511);d.item(0,1763);d.item(1,1765);UseItem.itemOnItem(d,1765,1763);
  check(d.getItemAssistant().playerHasItem(1769)&&!d.getItemAssistant().playerHasItem(1763)&&!d.getItemAssistant().playerHasItem(1765),"red and yellow make orange in full inventory");
  int count=d.getItemAssistant().getItemAmount(1769);UseItem.itemOnItem(d,1765,1763);check(d.getItemAssistant().getItemAmount(1769)==count,"missing ingredients cannot duplicate dye");
  d.item(1,288);UseItem.itemOnItem(d,288,1769);check(d.getItemAssistant().playerHasItem(286),"orange dye colours goblin mail");
  d.item(0,1767);d.item(1,288);UseItem.itemOnItem(d,1767,288);check(d.getItemAssistant().playerHasItem(287),"blue dye colours goblin mail");
 }
 static void staff()throws Exception {
  F p=new F();p.playerName="darren";p.playerRights=0;p.pos(3233,3229,0);StaffZone.teleport(p);check(!p.isTeleporting,"ordinary Darren cannot use owner teleport before promotion");
  p.playerRights=3;check(StaffZone.permitted(p),"co-owner permitted");p.playerName="bonds";check(StaffZone.permitted(p),"owner permitted");p.playerName="other";check(!StaffZone.permitted(p),"unrelated rank-three staff denied");p.playerName="darren";
  p.inTrade=true;StaffZone.teleport(p);check(!p.isTeleporting,"trade cannot be escaped");p.inTrade=false;
  p.playerIndex=2;StaffZone.teleport(p);check(!p.isTeleporting,"combat cannot be escaped");p.playerIndex=0;
  p.teleBlockDelay=System.currentTimeMillis();p.teleBlockLength=300000;StaffZone.teleport(p);check(!p.isTeleporting,"teleblock respected");p.teleBlockLength=0;
  p.pos(3090,3956,0);p.wildLevel=55;StaffZone.teleport(p);check(!p.isTeleporting,"deep wilderness restriction respected");p.pos(3233,3229,0);p.wildLevel=0;
  check(Emberveil.handle(p,"staffzone",new String[0]),"exact staffzone command dispatched");check(p.isTeleporting&&p.teleX==2539&&p.teleY==4713&&p.teleHeight==0,"teleport reaches Mage Bank meeting point");
  check((Region.getClipping(2539,4713,0)&0x1280100)==0,"Mage Bank landing is walkable");
  check(org.apollo.cache.def.ItemDefinition.lookup(1044).getName().toLowerCase().contains("green partyhat"),"green partyhat ID verified");
 }
 public static void main(String[] args)throws Exception {
  Constants.XP_RATE=4;Constants.VARIABLE_XP_RATE=false;
  IndexedFileSystem cache=new IndexedFileSystem(Paths.get("data/cache"),true);new ItemDefinitionDecoder(cache).run();ItemDefinitions.load();new NpcDefinitionDecoder(cache).run();new ObjectDefinitionDecoder(cache).run();RegionFactory.load(cache);
  goblins();staff();System.out.println("PASS "+checks+" Goblin Diplomacy and Darren staff-zone checks");
 }
}