Emberveil sourcetests/GloryTeleportCheck.java
import com.rs2.Constants;
import com.rs2.game.items.ItemDefinitions;
import com.rs2.game.items.impl.Teles;
import com.rs2.game.dialogues.DialogueOptions;
import com.rs2.game.players.Client;
import org.apollo.cache.IndexedFileSystem;
import org.apollo.cache.decoder.ItemDefinitionDecoder;
import java.nio.file.Paths;
import java.util.Arrays;
public final class GloryTeleportCheck {
static int checks;
static void check(boolean ok,String label){checks++;if(!ok)throw new AssertionError(label);}
static class Fixture extends Client {
Fixture(){super(null,1);playerName="gloryqa";tutorialProgress=36;isActive=true;absX=3222;absY=3218;respawnTimer=-6;
Arrays.fill(playerEquipment,-1);getOutStream().packetEncryption=new org.apollo.util.security.IsaacRandom(new int[]{1,2,3,4});}
public void flushOutStream(){getOutStream().currentOffset=0;}
}
static Fixture inventory(int id){Fixture p=new Fixture();p.playerItems[0]=id+1;p.playerItemsN[0]=1;p.itemUsing=id;return p;}
public static void main(String[] args)throws Exception {
new ItemDefinitionDecoder(new IndexedFileSystem(Paths.get("data/cache"),true)).run();ItemDefinitions.load();
int[][] destinations={{9178,3088,3500},{9179,3293,3174},{9180,2911,3152},{9181,3103,3249}};
for(int id:new int[]{1712,1710,1708,1706})for(int[] d:destinations){
Fixture p=inventory(id);Teles.useAOG(p);DialogueOptions.handleDialogueOptions(p,d[0]);
check(p.teleTimer>0&&p.teleX==d[1]&&p.teleY==d[2],"destination "+id+" / "+d[0]);
check(p.getItemAssistant().playerHasItem(id-2,1)&&!p.getItemAssistant().playerHasItem(id,1),"one charge used");
DialogueOptions.handleDialogueOptions(p,d[0]);check(p.getItemAssistant().playerHasItem(id-2,1),"repeat option cannot spend another charge");
}
Fixture blocked=inventory(1712);blocked.teleBlockDelay=System.currentTimeMillis();blocked.teleBlockLength=60000;
check(!Teles.teleportGlory(blocked,3088,3500,0)&&blocked.getItemAssistant().playerHasItem(1712,1),"teleblock preserves charge");
Fixture deep=inventory(1712);deep.absX=3100;deep.absY=3900;deep.wildLevel=48;
check(!Teles.teleportGlory(deep,3088,3500,0)&&deep.getItemAssistant().playerHasItem(1712,1),"deep wilderness preserves charge");
Fixture trade=inventory(1712);trade.inTrade=true;
check(!Teles.teleportGlory(trade,3088,3500,0)&&trade.getItemAssistant().playerHasItem(1712,1),"trade preserves charge");
Fixture empty=inventory(1704);check(!Teles.teleportGlory(empty,3088,3500,0)&&empty.teleTimer==0,"empty glory cannot teleport");
Fixture missing=new Fixture();missing.itemUsing=1712;check(!Teles.teleportGlory(missing,3088,3500,0),"removed glory cannot teleport");
Fixture equipped=new Fixture();equipped.itemUsing=1712;equipped.isOperate=true;equipped.playerEquipment[equipped.playerAmulet]=1712;
check(Teles.teleportGlory(equipped,3088,3500,0)&&equipped.playerEquipment[equipped.playerAmulet]==1710,"equipped charge source remains equipped");
System.out.println("PASS "+checks+" glory destination, charge, stale-dialogue and restriction checks");
}
}