Mage Training Arena and stuff (#504)

* Fixup door/stairs in mage training arena

* Fixup bedsheets, should be worn on head, not weapon slot

* [Mage Training Arena] spawn rewards guardian

* [Mage Training Arena] Add arena teleports (non functioning)

* Just adding some comments

* [Mage Training Arena] Basic mage training arena stuff

* [Mage Training Arena] Allow shop to open and show items correctly

* [Mage Training Arena] Show shop prices when clicked

* noclip

* [Mage Training Arena] Add 2nd option handler (filler)

* [Mage Training Arena] Be able to purchase stuff, lock bones to peaches

* Update MageArena.java

* [Mage Training Arena] setup boundary

* Readability

* Tidy up enchanting

* MageArena -> MageTrainingArena

* Create Alchemy.java

* Update RSInterface.java

* [Mage Training Arena] Spawn entrance npcs

* [Mage Training Arena] Initial Alchemy

* [Mage Training Arena]  Add comments

* [Mage Training Arena] Handle alchemy while in arena

* [Mage Training Arena] Show interface for alchemy room

* [Mage Training Arena] Display values, Search cupboards

* [Mage Training Arena] Don't allow the player to wear items from the Alchemy game

* [Mage Training Arena] Announce when items are changing

* Don't allow the player to bring any coins with them

* Sort by values

* [Mage Training Arena] Allow alching items etc

* Update method name

* Show magic tab after using alch even if can't alch

* [Mage Training Arena] Coin collector - temp

* [Mage Training Arena] Give player points, take items, add bonus xp, add bank items

* [Mage Training Arena] Remove items when player leaves the alchemy training area

* Fixup staffs for runes, Tidy up checks

Was missing all Mystic staff
This commit is contained in:
Danial
2021-10-01 10:25:48 +13:00
committed by GitHub
parent 8589277ece
commit bbe1587e20
23 changed files with 821 additions and 418 deletions
@@ -32,6 +32,7 @@ import com.rs2.game.content.minigames.Dueling;
import com.rs2.game.content.minigames.FightPits;
import com.rs2.game.content.minigames.PestControl;
import com.rs2.game.content.minigames.castlewars.CastleWars;
import com.rs2.game.content.minigames.magetrainingarena.MageTrainingArena;
import com.rs2.game.content.music.PlayList;
import com.rs2.game.content.music.sound.SoundList;
import com.rs2.game.content.skills.SkillInterfaces;
@@ -114,6 +115,7 @@ public abstract class Player {
public IoSession session;
private final ItemAssistant itemAssistant = new ItemAssistant(this);
private final ShopAssistant shopAssistant = new ShopAssistant(this);
private final MageTrainingArena mageArena = new MageTrainingArena(this);
private final Trading trading = new Trading(this);
private final Dueling duel = new Dueling(this);
private final PlayerAssistant playerAssistant = new PlayerAssistant(this);
@@ -400,6 +402,10 @@ public abstract class Player {
return shopAssistant;
}
public MageTrainingArena getMageTrainingArena() {
return mageArena;
}
public Trading getTrading() {
return trading;
}
@@ -814,6 +820,8 @@ public abstract class Player {
isSnowy = false;
} else if (inCw() || inPits) {
getPacketSender().showOption(3, 0, "Attack", 1);
} else if (Boundary.isIn(this, Boundary.MAGE_TRAINING_ARENA_ALCHEMY)) {
getPacketSender().walkableInterface(15892);
} else {
getPacketSender().sendMapState(0);
if (!isSnowy) {
@@ -1624,7 +1632,7 @@ public abstract class Player {
* Combat variables
*/
public boolean doubleHit, usingSpecial, usingRangeWeapon,
usingBow, usingMagic, castingMagic;
usingBow, usingMagic, castingMagic, unlockedBonesToPeaches;
public int castingSpellId, oldSpellId,
spellId, hitDelay;
public int specMaxHitIncrease, freezeDelay, freezeTimer = -6, killerId,
@@ -1632,7 +1640,7 @@ public abstract class Player {
crystalBowArrowCount, playerMagicBook, teleGfx, teleEndAnimation,
teleHeight, teleX, teleY, rangeItemUsed, killingNpcIndex,
totalDamageDealt, globalDamageDealt, oldNpcIndex, fightMode, attackTimer,
bowSpecShot, ectofuntusWorshipped;
bowSpecShot, ectofuntusWorshipped, graveyardPoints, alchemyPoints, enchantmentPoints, telekineticPoints;
public boolean magicFailed, oldMagicFailed;
/**
* End
@@ -2145,13 +2153,18 @@ public abstract class Player {
mapRegionX = (teleportToX >> 3) - 6;
mapRegionY = (teleportToY >> 3) - 6;
}
if (Boundary.isIn(this, Boundary.MAGE_TRAINING_ARENA_ALCHEMY) && !Boundary.isIn(teleportToX, teleportToY, teleHeight, Boundary.MAGE_TRAINING_ARENA_ALCHEMY)) {
// remove any alchemy training items
getMageTrainingArena().alchemy.clearItems();
}
currentX = teleportToX - 8 * mapRegionX;
currentY = teleportToY - 8 * mapRegionY;
absX = teleportToX;
absY = teleportToY;
heightLevel = teleHeight >= 0 ? teleHeight : heightLevel >= 0 ? heightLevel : 0;
resetWalkingQueue();
teleportToX = teleportToY = -1;
teleportToX = teleportToY = teleHeight = -1;
didTeleport = true;
updateWalkEntities();
} else {
@@ -845,7 +845,6 @@ public class PlayerAssistant {
public void processTeleport() {
player.teleportToX = player.teleX;
player.teleportToY = player.teleY;
player.heightLevel = player.teleHeight;
if (player.teleEndAnimation > 0) {
player.startAnimation(player.teleEndAnimation);
}
@@ -859,7 +858,7 @@ public class PlayerAssistant {
if(player.heightLevel != h) {
player.refresh = true;
}
player.heightLevel = h;
player.teleHeight = h;
player.getPlayerAssistant().requestUpdates();
}
@@ -1165,53 +1164,60 @@ public class PlayerAssistant {
|| itemId == 995) {
return;
}
boolean canAlch = true;
switch (spellId) {
case 1162: // low alch
player.getPacketSender().sendShowTab(6);
if (player.inTrade) {
player.getPacketSender().sendMessage("You can't alch while in a trade!");
return;
}
if (System.currentTimeMillis() - player.alchDelay > 1000) {
if (!player.getCombatAssistant().checkMagicReqs(49)) {
break;
if (System.currentTimeMillis() - player.alchDelay <= 1000) {
return;
}
if (!player.getCombatAssistant().checkMagicReqs(49)) {
return;
}
if (Boundary.isIn(player, Boundary.MAGE_TRAINING_ARENA)) {
player.getMageTrainingArena().alchItem(itemId, spellId);
return;
}
canAlch = true;
for (int i : ItemConstants.ITEM_UNALCHABLE) {
if (itemId == i) {
player.getPacketSender().sendMessage("You can't alch that item!");
canAlch = false;
return;
}
boolean canAlch = true;
for (int i : ItemConstants.ITEM_UNALCHABLE) {
if (itemId == i) {
player.getPacketSender().sendMessage("You can't alch that item!");
canAlch = false;
return;
}
}
if (canAlch) {
int value = (int) Math.floor(player.getShopAssistant().getItemShopValue(itemId) * 0.4);
String itemName = ItemAssistant.getItemName(itemId).toLowerCase();
if (player.getPlayerAssistant().isPlayer()) {
GameLogger.writeLog(player.playerName, "alchemy", player.playerName + " cast Low Alchemy on " + itemName + " for " + GameLogger.formatCurrency(value) + " coins");
}
if (canAlch) {
int value = (int) Math.floor(player.getShopAssistant().getItemShopValue(itemId) * 0.4);
String itemName = ItemAssistant.getItemName(itemId).toLowerCase();
if (player.getPlayerAssistant().isPlayer()) {
GameLogger.writeLog(player.playerName, "alchemy", player.playerName + " cast Low Alchemy on " + itemName + " for " + GameLogger.formatCurrency(value) + " coins");
}
player.getItemAssistant().deleteItem(itemId, slot, 1);
//855 - 858
if (itemId > 854 && itemId < 857) {
player.getItemAssistant().addItem(995, 512);
} else if (itemId > 856 && itemId < 859) {
player.getItemAssistant().addItem(995, 320);
} else if (itemId > 860 && itemId < 863) {
player.getItemAssistant().addItem(995, 640);
} else if (itemId > 858 && itemId < 861) {
player.getItemAssistant().addItem(995, 1024);
} else {
player.getItemAssistant().addItem(995, value);
}
player.startAnimation(MagicData.MAGIC_SPELLS[49][2]);
player.gfx100(MagicData.MAGIC_SPELLS[49][3]);
player.alchDelay = System.currentTimeMillis();
player.getPacketSender().sendFrame106(6);
addSkillXP(31, 6);
player.getPacketSender().sendSound(
SoundList.LOW_ALCHEMY, 100, 0);
RandomEventHandler.addRandom(player);
refreshSkill(6);
player.getItemAssistant().deleteItem(itemId, slot, 1);
//855 - 858
if (itemId > 854 && itemId < 857) {
player.getItemAssistant().addItem(995, 512);
} else if (itemId > 856 && itemId < 859) {
player.getItemAssistant().addItem(995, 320);
} else if (itemId > 860 && itemId < 863) {
player.getItemAssistant().addItem(995, 640);
} else if (itemId > 858 && itemId < 861) {
player.getItemAssistant().addItem(995, 1024);
} else {
player.getItemAssistant().addItem(995, value);
}
player.startAnimation(MagicData.MAGIC_SPELLS[49][2]);
player.gfx100(MagicData.MAGIC_SPELLS[49][3]);
player.alchDelay = System.currentTimeMillis();
player.getPacketSender().sendShowTab(6);
addSkillXP(31, 6);
player.getPacketSender().sendSound(
SoundList.LOW_ALCHEMY, 100, 0);
RandomEventHandler.addRandom(player);
refreshSkill(6);
}
break;
@@ -1227,54 +1233,64 @@ public class PlayerAssistant {
case 1180: // Lvl-4 enchant diamond
case 1187: // Lvl-5 enchant dragonstone
case 6003: // Lvl-6 enchant onyx
player.getEnchanting().enchantItem(itemId, spellId);
if (Boundary.isIn(player, Boundary.MAGE_TRAINING_ARENA)) {
player.getMageTrainingArena().enchantItem(itemId, spellId);
} else {
player.getEnchanting().enchantItem(itemId, spellId);
}
break;
case 1178: // high alch
player.getPacketSender().sendShowTab(6);
if (player.inTrade) {
player.getPacketSender().sendMessage("You can't alch while in a trade!");
return;
}
if (System.currentTimeMillis() - player.alchDelay > 1000) {
if (!player.getCombatAssistant().checkMagicReqs(50)) {
break;
if (System.currentTimeMillis() - player.alchDelay <= 1000) {
return;
}
if (!player.getCombatAssistant().checkMagicReqs(50)) {
break;
}
if (Boundary.isIn(player, Boundary.MAGE_TRAINING_ARENA)) {
player.getMageTrainingArena().alchItem(itemId, spellId);
return;
}
canAlch = true;
for (int i : ItemConstants.ITEM_UNALCHABLE) {
if (itemId == i) {
player.getPacketSender().sendMessage("You can't alch that item!");
canAlch = false;
return;
}
boolean canAlch = true;
for (int i : ItemConstants.ITEM_UNALCHABLE) {
if (itemId == i) {
player.getPacketSender().sendMessage("You can't alch that item!");
canAlch = false;
return;
}
}
if (canAlch) {
int value = (int) Math.floor(player.getShopAssistant().getItemShopValue(itemId) * 0.75);
String itemName = ItemAssistant.getItemName(itemId).toLowerCase();
if (player.getPlayerAssistant().isPlayer()) {
GameLogger.writeLog(player.playerName, "alchemy", player.playerName + " cast High Alchemy on " + itemName + " for" + GameLogger.formatCurrency(value) + " coins");
}
if (canAlch) {
int value = (int) Math.floor(player.getShopAssistant().getItemShopValue(itemId) * 0.75);
String itemName = ItemAssistant.getItemName(itemId).toLowerCase();
if (player.getPlayerAssistant().isPlayer()) {
GameLogger.writeLog(player.playerName, "alchemy", player.playerName + " cast High Alchemy on " + itemName + " for" + GameLogger.formatCurrency(value) + " coins");
}
player.getItemAssistant().deleteItem(itemId, slot, 1);
if (itemId > 854 && itemId < 857) {
player.getItemAssistant().addItem(995, 768);
} else if (itemId > 856 && itemId < 859) {
player.getItemAssistant().addItem(995, 480);
} else if (itemId > 858 && itemId < 861) {
player.getItemAssistant().addItem(995, 1536);
} else if (itemId > 860 && itemId < 863) {
player.getItemAssistant().addItem(995, 960);
} else {
player.getItemAssistant().addItem(995, (int) (player.getShopAssistant().getItemShopValue(itemId) * .75));
}
player.startAnimation(MagicData.MAGIC_SPELLS[50][2]);
player.gfx100(MagicData.MAGIC_SPELLS[50][3]);
player.alchDelay = System.currentTimeMillis();
player.getPacketSender().sendFrame106(6);
RandomEventHandler.addRandom(player);
addSkillXP(65, 6);
player.getPacketSender().sendSound(
SoundList.HIGH_ALCHEMY, 100, 0);
refreshSkill(6);
player.getItemAssistant().deleteItem(itemId, slot, 1);
if (itemId > 854 && itemId < 857) {
player.getItemAssistant().addItem(995, 768);
} else if (itemId > 856 && itemId < 859) {
player.getItemAssistant().addItem(995, 480);
} else if (itemId > 858 && itemId < 861) {
player.getItemAssistant().addItem(995, 1536);
} else if (itemId > 860 && itemId < 863) {
player.getItemAssistant().addItem(995, 960);
} else {
player.getItemAssistant().addItem(995, (int) (player.getShopAssistant().getItemShopValue(itemId) * .75));
}
player.startAnimation(MagicData.MAGIC_SPELLS[50][2]);
player.gfx100(MagicData.MAGIC_SPELLS[50][3]);
player.alchDelay = System.currentTimeMillis();
player.getPacketSender().sendShowTab(6);
RandomEventHandler.addRandom(player);
addSkillXP(65, 6);
player.getPacketSender().sendSound(
SoundList.HIGH_ALCHEMY, 100, 0);
refreshSkill(6);
}
break;
}
@@ -81,6 +81,7 @@ public class PlayerSave {
switch (token) {
case "character-height":
player.heightLevel = Integer.parseInt(token2);
player.teleHeight = Integer.parseInt(token2);
break;
case "character-posx":
player.teleportToX = Integer.parseInt(token2) <= 0 ? player.lastX : Integer.parseInt(token2);
@@ -412,6 +413,21 @@ public class PlayerSave {
case "ectofuntusWorshipped":
player.ectofuntusWorshipped = Integer.parseInt(token2);
break;
case "graveyard-points":
player.graveyardPoints = Integer.parseInt(token2);
break;
case "alchemy-points":
player.alchemyPoints = Integer.parseInt(token2);
break;
case "enchantment-points":
player.enchantmentPoints = Integer.parseInt(token2);
break;
case "telekinetic-points":
player.telekineticPoints = Integer.parseInt(token2);
break;
case "unlocked-bones-to-peaches":
player.unlockedBonesToPeaches = Boolean.parseBoolean(token2);
break;
}
break;
case 3:
@@ -782,6 +798,16 @@ public class PlayerSave {
characterfile.newLine();
characterfile.write("ectofuntusWorshipped = " + player.ectofuntusWorshipped);
characterfile.newLine();
characterfile.write("graveyard-points = " + player.graveyardPoints);
characterfile.newLine();
characterfile.write("alchemy-points = " + player.alchemyPoints);
characterfile.newLine();
characterfile.write("enchantment-points = " + player.enchantmentPoints);
characterfile.newLine();
characterfile.write("telekinetic-points = " + player.telekineticPoints);
characterfile.newLine();
characterfile.write("unlocked-bones-to-peaches = " + player.unlockedBonesToPeaches);
characterfile.newLine();
String voidStatus = "";
for (int voidS : player.voidStatus){
voidStatus += voidS + "\t";