Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -10178,26 +10178,14 @@
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "40.0",
|
||||
"id": "2677",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "5",
|
||||
"weight": "50.0",
|
||||
"id": "386",
|
||||
"maxAmount": "15"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "1373",
|
||||
"id": "1289",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "1201",
|
||||
"id": "1303",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
@@ -10209,7 +10197,13 @@
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "1289",
|
||||
"id": "1113",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "1147",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
@@ -10219,112 +10213,10 @@
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"minAmount": "20",
|
||||
"weight": "50.0",
|
||||
"id": "5298",
|
||||
"maxAmount": "2"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "5281",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "5294",
|
||||
"maxAmount": "2"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "5104",
|
||||
"maxAmount": "3"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "5292",
|
||||
"maxAmount": "2"
|
||||
},
|
||||
{
|
||||
"minAmount": "3",
|
||||
"weight": "50.0",
|
||||
"id": "5311",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "5299",
|
||||
"maxAmount": "2"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "200",
|
||||
"maxAmount": "11"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "202",
|
||||
"maxAmount": "11"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "204",
|
||||
"maxAmount": "11"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "206",
|
||||
"maxAmount": "11"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "210",
|
||||
"maxAmount": "11"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "212",
|
||||
"maxAmount": "11"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "214",
|
||||
"maxAmount": "11"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "216",
|
||||
"maxAmount": "11"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "2486",
|
||||
"maxAmount": "11"
|
||||
},
|
||||
{
|
||||
"minAmount": "3",
|
||||
"weight": "50.0",
|
||||
"id": "1602",
|
||||
"maxAmount": "5"
|
||||
},
|
||||
{
|
||||
"minAmount": "3",
|
||||
"weight": "50.0",
|
||||
"id": "2362",
|
||||
"maxAmount": "7"
|
||||
"id": "4699",
|
||||
"maxAmount": "40"
|
||||
},
|
||||
{
|
||||
"minAmount": "20",
|
||||
@@ -10333,146 +10225,272 @@
|
||||
"maxAmount": "40"
|
||||
},
|
||||
{
|
||||
"minAmount": "20",
|
||||
"minAmount": "10",
|
||||
"weight": "50.0",
|
||||
"id": "565",
|
||||
"maxAmount": "20"
|
||||
},
|
||||
{
|
||||
"minAmount": "20",
|
||||
"weight": "25.0",
|
||||
"id": "563",
|
||||
"maxAmount": "45"
|
||||
"maxAmount": "40"
|
||||
},
|
||||
{
|
||||
"minAmount": "8",
|
||||
"weight": "25.0",
|
||||
"id": "200",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "8",
|
||||
"weight": "25.0",
|
||||
"id": "202",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "8",
|
||||
"weight": "25.0",
|
||||
"id": "204",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "8",
|
||||
"weight": "25.0",
|
||||
"id": "206",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "8",
|
||||
"weight": "25.0",
|
||||
"id": "208",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "8",
|
||||
"weight": "25.0",
|
||||
"id": "210",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "8",
|
||||
"weight": "25.0",
|
||||
"id": "212",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "8",
|
||||
"weight": "25.0",
|
||||
"id": "214",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "8",
|
||||
"weight": "25.0",
|
||||
"id": "216",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "8",
|
||||
"weight": "25.0",
|
||||
"id": "2486",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "4",
|
||||
"weight": "50.0",
|
||||
"id": "1443",
|
||||
"maxAmount": "4"
|
||||
},
|
||||
{
|
||||
"minAmount": "3000",
|
||||
"weight": "75.0",
|
||||
"id": "995",
|
||||
"maxAmount": "15000"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "25.0",
|
||||
"id": "5302",
|
||||
"maxAmount": "2"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "10.0",
|
||||
"id": "1149",
|
||||
"maxAmount": "2"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "25.0",
|
||||
"id": "5303",
|
||||
"maxAmount": "2"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "25.0",
|
||||
"id": "5105",
|
||||
"maxAmount": "3"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "25.0",
|
||||
"id": "5296",
|
||||
"maxAmount": "2"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "25.0",
|
||||
"id": "5323",
|
||||
"maxAmount": "4"
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "12176",
|
||||
"maxAmount": "2"
|
||||
"id": "5321",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "5292",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "5294",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "5295",
|
||||
"maxAmount": "3"
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "12176",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "5296",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "5298",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "5299",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "5300",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "5301",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "5302",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "5304",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "5100",
|
||||
"maxAmount": "2"
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "5104",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "5105",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "5311",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "5280",
|
||||
"maxAmount": "1"
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "5281",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "4",
|
||||
"weight": "25.0",
|
||||
"id": "5282",
|
||||
"maxAmount": "10"
|
||||
},
|
||||
{
|
||||
"minAmount": "5",
|
||||
"weight": "50.0",
|
||||
"id": "385",
|
||||
"maxAmount": "15"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "25.0",
|
||||
"id": "1163",
|
||||
"maxAmount": "1"
|
||||
"id": "163",
|
||||
"maxAmount": "6"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "25.0",
|
||||
"id": "1113",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "25.0",
|
||||
"id": "208",
|
||||
"maxAmount": "11"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "25.0",
|
||||
"id": "5301",
|
||||
"id": "139",
|
||||
"maxAmount": "3"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "25.0",
|
||||
"id": "218",
|
||||
"maxAmount": "11"
|
||||
"minAmount": "3",
|
||||
"weight": "50.0",
|
||||
"id": "2362",
|
||||
"maxAmount": "5"
|
||||
},
|
||||
{
|
||||
"minAmount": "10",
|
||||
"minAmount": "3",
|
||||
"weight": "50.0",
|
||||
"id": "1602",
|
||||
"maxAmount": "5"
|
||||
},
|
||||
{
|
||||
"minAmount": "2",
|
||||
"weight": "25.0",
|
||||
"id": "565",
|
||||
"maxAmount": "20"
|
||||
"id": "1443",
|
||||
"maxAmount": "5"
|
||||
},
|
||||
{
|
||||
"minAmount": "3000",
|
||||
"weight": "100.0",
|
||||
"id": "995",
|
||||
"maxAmount": "13000"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "1.0",
|
||||
"weight": "3.42",
|
||||
"id": "14484",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "1.0",
|
||||
"id": "14474",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "1.0",
|
||||
"id": "14476",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "1.0",
|
||||
"weight": "1.71",
|
||||
"id": "14472",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "5.0",
|
||||
"weight": "1.71",
|
||||
"id": "14474",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "1.71",
|
||||
"id": "14476",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "2677",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "31",
|
||||
"maxAmount": "1"
|
||||
}
|
||||
@@ -26358,6 +26376,12 @@
|
||||
"ids": "1615,4230",
|
||||
"description": "",
|
||||
"main": [
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "1365",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
@@ -26370,18 +26394,6 @@
|
||||
"id": "1361",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "50.0",
|
||||
"id": "1365",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "2.4",
|
||||
"id": "4151",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "25.0",
|
||||
@@ -26491,8 +26503,8 @@
|
||||
"maxAmount": "3"
|
||||
},
|
||||
{
|
||||
"minAmount": "9",
|
||||
"weight": "50.0",
|
||||
"minAmount": "30",
|
||||
"weight": "100.0",
|
||||
"id": "995",
|
||||
"maxAmount": "3000"
|
||||
},
|
||||
@@ -26514,12 +26526,6 @@
|
||||
"id": "7937",
|
||||
"maxAmount": "60"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "25.0",
|
||||
"id": "1440",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "25.0",
|
||||
@@ -26540,13 +26546,19 @@
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "5.0",
|
||||
"weight": "25.0",
|
||||
"id": "31",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "100.0",
|
||||
"weight": "2.5",
|
||||
"id": "4151",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "150.0",
|
||||
"id": "0",
|
||||
"maxAmount": "1"
|
||||
}
|
||||
@@ -33874,28 +33886,22 @@
|
||||
"main": [
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "0.685",
|
||||
"weight": "0.675",
|
||||
"id": "6528",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "0.685",
|
||||
"weight": "0.675",
|
||||
"id": "6524",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "0.685",
|
||||
"weight": "0.675",
|
||||
"id": "6568",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "1",
|
||||
"weight": "5.0",
|
||||
"id": "1393",
|
||||
"maxAmount": "1"
|
||||
},
|
||||
{
|
||||
"minAmount": "12",
|
||||
"weight": "5.0",
|
||||
|
||||
@@ -311,4 +311,22 @@ public abstract class DialoguePlugin implements Plugin<Player> {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Use the automatic linesplitting feature in DialUtils to produce npc dialogues
|
||||
* @param expr the FacialExpression to use, located in the FacialExpression enum.
|
||||
* @param msg the message for the NPC to say
|
||||
*/
|
||||
public Component npcl(FacialExpression expr, String msg){
|
||||
return npc(expr, api.DialUtils.splitLines(msg));
|
||||
}
|
||||
|
||||
/**
|
||||
* Use the automatic linesplitting feature in DialUtils to produce player dialogues
|
||||
* @param expr the FacialExpression to use, located in the FacialExpression enum.
|
||||
* @param msg the message for the player to say
|
||||
*/
|
||||
public Component playerl(FacialExpression expr, String msg){
|
||||
return player(expr, api.DialUtils.splitLines(msg));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -137,7 +137,7 @@ public final class HansDialoguePlugin extends DialoguePlugin {
|
||||
case 12:
|
||||
switch(buttonId){
|
||||
case 1:
|
||||
options("2.5x","5x","10x","20x");
|
||||
options("1.0x","2.5x","10x","20x");
|
||||
stage++;
|
||||
break;
|
||||
case 2:
|
||||
@@ -150,7 +150,7 @@ public final class HansDialoguePlugin extends DialoguePlugin {
|
||||
switch(buttonId){
|
||||
case 1:
|
||||
if(player.newPlayer) {
|
||||
player.getSkills().experienceMutiplier = 2.5;
|
||||
player.getSkills().experienceMutiplier = 1.0;
|
||||
stage = 14;
|
||||
} else {
|
||||
stage = 15;
|
||||
@@ -159,7 +159,7 @@ public final class HansDialoguePlugin extends DialoguePlugin {
|
||||
break;
|
||||
case 2:
|
||||
if(player.newPlayer){
|
||||
player.getSkills().experienceMutiplier = 5.0;
|
||||
player.getSkills().experienceMutiplier = 2.5;
|
||||
stage = 14;
|
||||
} else {
|
||||
stage = 15;
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
package core.game.interaction.npc;
|
||||
|
||||
import core.cache.def.impl.NPCDefinition;
|
||||
import core.game.component.Component;
|
||||
import core.game.interaction.OptionHandler;
|
||||
import core.game.node.Node;
|
||||
import core.game.node.entity.npc.NPC;
|
||||
import core.game.node.entity.player.Player;
|
||||
import core.plugin.Initializable;
|
||||
import core.plugin.Plugin;
|
||||
import core.game.node.entity.skill.crafting.TanningProduct;
|
||||
|
||||
/**
|
||||
* Represents the plugin used for an npc with the trade option.
|
||||
* @author 'Vexia
|
||||
* @version 1.0
|
||||
*/
|
||||
@Initializable
|
||||
public final class NPCTradePlugin extends OptionHandler {
|
||||
|
||||
@Override
|
||||
public Plugin<Object> newInstance(Object arg) throws Throwable {
|
||||
NPCDefinition.setOptionHandler("trade", this);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handle(Player player, Node node, String option) {
|
||||
final NPC npc = (NPC) node;
|
||||
if (npc.getId() == 2824) {
|
||||
TanningProduct.open(player, 2824);
|
||||
return true;
|
||||
}
|
||||
if(npc.getId() == 7601){
|
||||
player.getInterfaceManager().open(new Component(732));
|
||||
return true;
|
||||
}
|
||||
return node.asNpc().openShop(player);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package core.game.interaction.npc
|
||||
|
||||
import api.ContentAPI
|
||||
import core.cache.def.impl.NPCDefinition
|
||||
import core.game.component.Component
|
||||
import core.plugin.Initializable
|
||||
import core.game.interaction.OptionHandler
|
||||
import core.game.node.Node
|
||||
import core.game.node.entity.npc.NPC
|
||||
import core.game.node.entity.player.Player
|
||||
import core.plugin.Plugin
|
||||
import core.game.node.entity.skill.crafting.TanningProduct
|
||||
import rs09.game.interaction.InteractionListener
|
||||
|
||||
/**
|
||||
* Represents the plugin used for an npc with the trade option.
|
||||
* @author Ceikry
|
||||
* @version 1.0
|
||||
*/
|
||||
class NPCTradePlugin : InteractionListener() {
|
||||
override fun defineListeners() {
|
||||
on(NPC, "trade", "shop"){player, node ->
|
||||
val npc = node as NPC
|
||||
if (npc.id == 2824) {
|
||||
TanningProduct.open(player, 2824)
|
||||
return@on true
|
||||
}
|
||||
if (npc.id == 7601) {
|
||||
ContentAPI.openInterface(player, 732)
|
||||
return@on true
|
||||
}
|
||||
return@on npc.openShop(player)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
package api
|
||||
import rs09.game.system.SystemLogger
|
||||
import java.util.*
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
@@ -550,6 +550,26 @@ class ScriptAPI(private val bot: Player) {
|
||||
bot.pulseManager.run(BankingPulse())
|
||||
}
|
||||
|
||||
/**
|
||||
* Takes every item out of the bots inventory and places it into the bank.
|
||||
* @param none
|
||||
* @author cfunnyman joe
|
||||
*/
|
||||
fun bankAll(){
|
||||
class BankingPulse() : Pulse(20){
|
||||
override fun pulse(): Boolean {
|
||||
for(item in bot.inventory.toArray()){
|
||||
var itemAmount = bot.inventory.getAmount(item)
|
||||
|
||||
bot.inventory.remove(item)
|
||||
bot.bank.add(item)
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
bot.pulseManager.run(BankingPulse())
|
||||
}
|
||||
|
||||
/**
|
||||
* Function that makes the bot eat the food item in their inventory if their HP is below 2/3.
|
||||
* @author Ceikry
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
package rs09.game.ai.general.scriptrepository
|
||||
|
||||
import core.game.world.map.Location
|
||||
import org.rs09.consts.Items
|
||||
import rs09.game.ai.general.ScriptAPI
|
||||
|
||||
@PlayerCompatible
|
||||
@ScriptName("Chicken Killer")
|
||||
@ScriptDescription("Kills chickens and loots feathers. Start in any chicken area.")
|
||||
@ScriptIdentifier("chicken_killer")
|
||||
class ChickenKiller : Script(){
|
||||
var state = State.INIT
|
||||
var chickenCounter = 0
|
||||
var overlay: ScriptAPI.BottingOverlay?= null
|
||||
var startLocation = Location(0,0,0)
|
||||
var timer = 3
|
||||
var lootFeathers = false
|
||||
|
||||
override fun tick() {
|
||||
when(state){
|
||||
|
||||
State.INIT -> {
|
||||
overlay = scriptAPI.getOverlay()
|
||||
overlay!!.init()
|
||||
overlay!!.setTitle("Chickens")
|
||||
overlay!!.setTaskLabel("Chickens KO'd:")
|
||||
overlay!!.setAmount(0)
|
||||
state = State.CONFIG
|
||||
bot.dialogueInterpreter.sendOptions("Loot Feathers?","Yes","No")
|
||||
bot.dialogueInterpreter.addAction{player,button ->
|
||||
lootFeathers = button == 2
|
||||
state = State.KILLING
|
||||
}
|
||||
startLocation = bot.location
|
||||
}
|
||||
|
||||
State.KILLING -> {
|
||||
val chicken = scriptAPI.getNearestNode("Chicken")
|
||||
if(chicken == null){
|
||||
scriptAPI.randomWalkTo(startLocation,3)
|
||||
} else {
|
||||
scriptAPI.attackNpcInRadius(bot,"Chicken",10)
|
||||
if(lootFeathers) {
|
||||
state = State.IDLE
|
||||
timer = 4
|
||||
}
|
||||
chickenCounter++
|
||||
overlay!!.setAmount(chickenCounter)
|
||||
}
|
||||
}
|
||||
|
||||
State.IDLE -> {
|
||||
if(timer-- <= 0){
|
||||
state = State.LOOTING
|
||||
}
|
||||
}
|
||||
|
||||
State.LOOTING -> {
|
||||
scriptAPI.takeNearestGroundItem(Items.FEATHER_314)
|
||||
state = State.KILLING
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
override fun newInstance(): Script {
|
||||
return this
|
||||
}
|
||||
|
||||
enum class State {
|
||||
IDLE,
|
||||
INIT,
|
||||
KILLING,
|
||||
LOOTING,
|
||||
RETURN,
|
||||
CONFIG
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,164 @@
|
||||
package rs09.game.ai.general.scriptrepository
|
||||
|
||||
|
||||
import core.game.interaction.DestinationFlag
|
||||
import core.game.interaction.MovementPulse
|
||||
import core.game.node.Node
|
||||
import core.game.node.entity.skill.Skills
|
||||
import core.game.node.item.Item
|
||||
import core.game.world.map.zone.ZoneBorders
|
||||
import org.rs09.consts.Items
|
||||
import rs09.game.ai.general.ScriptAPI
|
||||
import rs09.game.ai.skillingbot.SkillingBotAssembler
|
||||
import rs09.game.interaction.InteractionListener
|
||||
import rs09.game.interaction.InteractionListeners
|
||||
import api.ContentAPI
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import java.util.logging.Handler
|
||||
|
||||
@PlayerCompatible
|
||||
@ScriptName("Falador Coal Miner")
|
||||
@ScriptDescription("Start in Falador East Bank with a pick equipped","or in your inventory.")
|
||||
@ScriptIdentifier("fally_coal")
|
||||
class CoalMiner : Script() {
|
||||
var state = State.INIT
|
||||
var ladderSwitch = false
|
||||
val bottomLadder = ZoneBorders(3016,9736,3024,9742)
|
||||
val topLadder = ZoneBorders(3016,3336,3022,3342)
|
||||
val mine = ZoneBorders(3027,9733,3054,9743)
|
||||
val bank = ZoneBorders(3009,3355,3018,3358)
|
||||
var overlay: ScriptAPI.BottingOverlay? = null
|
||||
var coalAmount = 0
|
||||
|
||||
override fun tick() {
|
||||
when(state){
|
||||
|
||||
State.INIT -> {
|
||||
overlay = scriptAPI.getOverlay()
|
||||
ladderSwitch = true
|
||||
overlay!!.init()
|
||||
overlay!!.setTitle("Mining")
|
||||
overlay!!.setTaskLabel("Coal Mined:")
|
||||
overlay!!.setAmount(0)
|
||||
|
||||
if (mine.insideBorder(bot)){
|
||||
ladderSwitch = false
|
||||
state = State.MINING
|
||||
} else {
|
||||
state = State.TO_MINE
|
||||
}
|
||||
}
|
||||
|
||||
State.MINING -> {
|
||||
bot.interfaceManager.close()
|
||||
if(bot.inventory.freeSlots() == 0){
|
||||
state = State.TO_BANK
|
||||
}
|
||||
if(!mine.insideBorder(bot)){
|
||||
scriptAPI.walkTo(mine.randomLoc)
|
||||
} else {
|
||||
val rock = scriptAPI.getNearestNode("rocks",true)
|
||||
rock?.let { InteractionListeners.run(rock.id, InteractionListener.OBJECT,"mine",bot,rock) }
|
||||
}
|
||||
overlay!!.setAmount(ContentAPI.amountInInventory(bot, Items.COAL_453) + coalAmount)
|
||||
}
|
||||
|
||||
State.TO_BANK -> {
|
||||
if(bank.insideBorder(bot)){
|
||||
val bank = scriptAPI.getNearestNode("bank booth",true)
|
||||
if(bank != null) {
|
||||
bot.pulseManager.run(object : BankingPulse(this, bank){
|
||||
override fun pulse(): Boolean {
|
||||
state = State.BANKING
|
||||
return super.pulse()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
} else {
|
||||
if(!ladderSwitch) {
|
||||
val ladder = scriptAPI.getNearestNode(30941, true)
|
||||
ladder ?: scriptAPI.walkTo(bottomLadder.randomLoc).also { return }
|
||||
ladder?.interaction?.handle(bot, ladder.interaction[0]).also { ladderSwitch = true }
|
||||
} else {
|
||||
if (!bank.insideBorder(bot)) scriptAPI.walkTo(bank.randomLoc).also { return }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
State.BANKING -> {
|
||||
coalAmount += bot.inventory.getAmount(Items.COAL_453)
|
||||
scriptAPI.bankAll()
|
||||
state = State.TO_MINE
|
||||
}
|
||||
|
||||
State.TO_MINE -> {
|
||||
if(ladderSwitch){
|
||||
bot.interfaceManager.close()
|
||||
if(!topLadder.insideBorder(bot.location)){
|
||||
scriptAPI.walkTo(topLadder.randomLoc)
|
||||
} else {
|
||||
val ladder = scriptAPI.getNearestNode("Ladder",true)
|
||||
if(ladder != null){
|
||||
ladder.interaction.handle(bot,ladder.interaction[0])
|
||||
ladderSwitch = false
|
||||
} else {
|
||||
scriptAPI.walkTo(topLadder.randomLoc)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if(!mine.insideBorder(bot)){
|
||||
scriptAPI.walkTo(mine.randomLoc)
|
||||
} else {
|
||||
state = State.MINING
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
State.TO_GE -> {
|
||||
scriptAPI.teleportToGE()
|
||||
state = State.SELLING
|
||||
}
|
||||
|
||||
State.SELLING -> {
|
||||
scriptAPI.sellOnGE(Items.COAL_453)
|
||||
state = State.GO_BACK
|
||||
}
|
||||
|
||||
State.GO_BACK -> {
|
||||
scriptAPI.teleport(bank.randomLoc)
|
||||
state = State.TO_MINE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
open class BankingPulse(val script: Script, val bank: Node) : MovementPulse(script.bot,bank, DestinationFlag.OBJECT){
|
||||
override fun pulse(): Boolean {
|
||||
script.bot.faceLocation(bank.location)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
override fun newInstance(): Script {
|
||||
val script = CoalMiner()
|
||||
script.bot = SkillingBotAssembler().produce(SkillingBotAssembler.Wealth.POOR,bot.startLocation)
|
||||
return script
|
||||
}
|
||||
|
||||
enum class State {
|
||||
MINING,
|
||||
TO_MINE,
|
||||
TO_BANK,
|
||||
BANKING,
|
||||
TO_GE,
|
||||
SELLING,
|
||||
GO_BACK,
|
||||
INIT
|
||||
}
|
||||
|
||||
init {
|
||||
equipment.add(Item(Items.IRON_PICKAXE_1267))
|
||||
skills.put(Skills.MINING,75)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
package rs09.game.ai.general.scriptrepository
|
||||
|
||||
import core.game.component.Component
|
||||
import core.game.interaction.DestinationFlag
|
||||
import core.game.interaction.MovementPulse
|
||||
import core.game.node.entity.skill.Skills
|
||||
import core.game.node.item.Item
|
||||
import core.game.world.map.zone.ZoneBorders
|
||||
import org.rs09.consts.Items
|
||||
import rs09.game.interaction.InteractionListener
|
||||
import rs09.game.interaction.InteractionListeners
|
||||
import rs09.tools.stringtools.colorize
|
||||
|
||||
@PlayerCompatible
|
||||
@ScriptName("Draynor Willows")
|
||||
@ScriptDescription("Start in Draynor with an axe equipped or in inventory.")
|
||||
@ScriptIdentifier("draynor_trees")
|
||||
class DraynorWillows : Script(){
|
||||
val willowZone = ZoneBorders(3084, 3225,3091, 3239)
|
||||
|
||||
|
||||
val bankZone = ZoneBorders(3092, 3240,3094, 3246)
|
||||
var state = State.INIT
|
||||
var logCount = 0
|
||||
|
||||
override fun tick() {
|
||||
when(state){
|
||||
State.INIT -> {
|
||||
if(true){
|
||||
bot.interfaceManager.openOverlay(Component(195))
|
||||
bot.packetDispatch.sendString("Woodcutting",195,7)
|
||||
bot.packetDispatch.sendString(colorize("%BLogs Chopped:"),195,8)
|
||||
bot.packetDispatch.sendString(colorize("%B0"),195,9)
|
||||
bot.packetDispatch.sendInterfaceConfig(195,5,true)
|
||||
}
|
||||
state = State.CHOPPING
|
||||
}
|
||||
|
||||
State.CHOPPING -> {
|
||||
if (!willowZone.insideBorder(bot))
|
||||
scriptAPI.walkTo(willowZone.randomLoc)
|
||||
else {
|
||||
val willowtree = scriptAPI.getNearestNode("willow", true)
|
||||
bot.interfaceManager.close()
|
||||
willowtree?.let { InteractionListeners.run(willowtree.id,
|
||||
InteractionListener.OBJECT,"Chop down",bot,willowtree) }
|
||||
if (bot.inventory.isFull)
|
||||
state = State.BANKING
|
||||
}
|
||||
|
||||
bot.packetDispatch.sendString(colorize("%B${logCount + bot.inventory.getAmount(Items.WILLOW_LOGS_1519)}"), 195, 9)
|
||||
}
|
||||
|
||||
State.BANKING -> {
|
||||
if(!bankZone.insideBorder(bot))
|
||||
scriptAPI.walkTo(bankZone.randomLoc)
|
||||
else{
|
||||
val bank = scriptAPI.getNearestNode("Bank Booth",true)
|
||||
if(bank != null){
|
||||
bot.pulseManager.run(object : MovementPulse(bot,bank, DestinationFlag.OBJECT){
|
||||
override fun pulse(): Boolean {
|
||||
val logs = bot.inventory.getAmount(Item(Items.WILLOW_LOGS_1519))
|
||||
logCount += logs
|
||||
bot.inventory.remove(Item(Items.WILLOW_LOGS_1519,logs))
|
||||
bot.bank.add(Item(Items.WILLOW_LOGS_1519,logs))
|
||||
state = State.CHOPPING
|
||||
return true
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
inventory.add(Item(Items.ADAMANT_AXE_1357))
|
||||
skills[Skills.WOODCUTTING] = 35
|
||||
}
|
||||
|
||||
override fun newInstance(): Script {
|
||||
val script = DraynorWillows()
|
||||
return script
|
||||
}
|
||||
|
||||
enum class State {
|
||||
CHOPPING,
|
||||
BANKING,
|
||||
INIT
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,198 @@
|
||||
package rs09.game.ai.general.scriptrepository
|
||||
|
||||
import core.game.interaction.DestinationFlag
|
||||
import core.game.interaction.MovementPulse
|
||||
import core.game.node.entity.skill.Skills
|
||||
import core.game.node.item.Item
|
||||
import core.game.system.task.Pulse
|
||||
import core.game.world.map.Location
|
||||
import core.game.world.map.path.Pathfinder
|
||||
import core.game.world.update.flag.context.Animation
|
||||
import core.game.world.update.flag.context.Graphics
|
||||
import core.tools.RandomFunction
|
||||
import org.rs09.consts.Items
|
||||
import rs09.game.ai.AIPlayer
|
||||
import rs09.game.ai.general.ScriptAPI
|
||||
import rs09.game.interaction.InteractionListener
|
||||
import rs09.game.interaction.InteractionListeners
|
||||
import rs09.game.world.GameWorld
|
||||
import kotlin.random.Random
|
||||
|
||||
@PlayerCompatible
|
||||
@ScriptName("Catherby Lobs")
|
||||
@ScriptDescription("Start in Catherby bank with a lobster pot in your inventory.")
|
||||
@ScriptIdentifier("cath_lobs")
|
||||
class LobsterCatcher : Script() {
|
||||
private val ANIMATION = Animation(714)
|
||||
val offers = HashMap<Int, Int>()
|
||||
val limit = 2000
|
||||
var myCounter = 0
|
||||
/**
|
||||
* Represents the graphics to use.
|
||||
*/
|
||||
private val GRAPHICS = Graphics(308, 100, 50)
|
||||
internal enum class Sets(val equipment: List<Item>) {
|
||||
SET_1(listOf(Item(2643), Item(9470), Item(10756), Item(10394), Item(88), Item(9793))),
|
||||
SET_2(listOf(Item(2643), Item(6585), Item(10750), Item(10394), Item(88), Item(9793))),
|
||||
SET_3(listOf(Item(9472), Item(9470), Item(10750), Item(10394), Item(88), Item(9786))),
|
||||
SET_4(listOf(Item(2639), Item(6585), Item(10752), Item(10394), Item(88), Item(9786))),
|
||||
SET_5(listOf(Item(2639), Item(9470), Item(10750), Item(10394), Item(88), Item(9784))),
|
||||
SET_6(listOf(Item(2639), Item(6585), Item(10750), Item(10394), Item(88), Item(9784)));
|
||||
|
||||
}
|
||||
|
||||
private var bots = 0
|
||||
private var lobstopper = false
|
||||
var overlay: ScriptAPI.BottingOverlay?= null
|
||||
var fishCounter = 0
|
||||
|
||||
private var state = State.INIT
|
||||
private var tick = 0
|
||||
override fun tick() {
|
||||
when(state){
|
||||
|
||||
State.INIT -> {
|
||||
overlay = scriptAPI.getOverlay()
|
||||
overlay!!.init()
|
||||
overlay!!.setTitle("Fishing")
|
||||
overlay!!.setTaskLabel("Lobs Caught:")
|
||||
overlay!!.setAmount(0)
|
||||
state = State.FIND_SPOT
|
||||
}
|
||||
|
||||
|
||||
State.BANKING -> {
|
||||
fishCounter += bot.inventory.getAmount(Items.RAW_LOBSTER_377)
|
||||
scriptAPI.bankItem(Items.RAW_LOBSTER_377)
|
||||
state = State.IDLE
|
||||
}
|
||||
|
||||
|
||||
State.FISHING -> {
|
||||
bot.interfaceManager.close()
|
||||
val spot = scriptAPI.getNearestNode(333, false)
|
||||
if(spot == null){
|
||||
state = State.IDLE
|
||||
} else {
|
||||
InteractionListeners.run(spot.id,InteractionListener.NPC,"cage",bot,spot)
|
||||
}
|
||||
if(bot.inventory.isFull){
|
||||
state = State.FIND_BANK
|
||||
}
|
||||
overlay!!.setAmount(fishCounter + bot.inventory.getAmount(Items.RAW_LOBSTER_377))
|
||||
}
|
||||
|
||||
State.IDLE -> {
|
||||
if (Random.nextBoolean()){
|
||||
state = State.FIND_SPOT
|
||||
}
|
||||
else if(myCounter++ >= RandomFunction.random(1,25)){
|
||||
state = State.FIND_SPOT
|
||||
}
|
||||
}
|
||||
|
||||
State.FIND_SPOT -> {
|
||||
val spot = scriptAPI.getNearestNode(333, false)
|
||||
if (spot != null) {
|
||||
bot.walkingQueue.reset()
|
||||
state = State.FISHING
|
||||
} else {
|
||||
if (bot.location.x < 2837) {
|
||||
Pathfinder.find(bot, Location.create(2837, 3435, 0)).walk(bot)
|
||||
} else {
|
||||
Pathfinder.find(bot, Location.create(2854, 3427, 0)).walk(bot)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
State.FIND_BANK -> {
|
||||
val bank = scriptAPI.getNearestGameObject(bot.location, 2213)
|
||||
class BankingPulse : MovementPulse(bot, bank, DestinationFlag.OBJECT) {
|
||||
override fun pulse(): Boolean {
|
||||
bot.faceLocation(bank!!.location)
|
||||
state = State.BANKING
|
||||
return true
|
||||
}
|
||||
}
|
||||
if(bank != null){
|
||||
bot.pulseManager.run(BankingPulse())
|
||||
} else {
|
||||
if (bot.location.x > 2837) {
|
||||
Pathfinder.find(bot, Location.create(2837, 3435, 0)).walk(bot)
|
||||
} else if (bot.location.x > 2821) {
|
||||
Pathfinder.find(bot, Location.create(2821, 3435, 0)).walk(bot)
|
||||
} else if (bot.location.x > 2809){
|
||||
Pathfinder.find(bot,Location.create(2809, 3436, 0)).walk(bot)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
State.TELEPORT_GE -> {
|
||||
scriptAPI.teleportToGE()
|
||||
state = State.SELL_GE
|
||||
}
|
||||
|
||||
|
||||
State.SELL_GE -> {
|
||||
scriptAPI.sellOnGE(Items.RAW_LOBSTER_377)
|
||||
state = State.TELE_CATH
|
||||
}
|
||||
|
||||
State.TELE_CATH -> {
|
||||
if(tick++ == 10) {
|
||||
bot.lock()
|
||||
bot.visualize(ANIMATION, GRAPHICS)
|
||||
bot.impactHandler.disabledTicks = 4
|
||||
val location = Location.create(2819, 3437, 0)
|
||||
GameWorld.Pulser.submit(object : Pulse(4, bot) {
|
||||
override fun pulse(): Boolean {
|
||||
bot.unlock()
|
||||
bot.properties.teleportLocation = location
|
||||
bot.animator.reset()
|
||||
state = State.IDLE
|
||||
return true
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
init {
|
||||
val setUp = RandomFunction.random(Sets.values().size)
|
||||
equipment.addAll(Sets.values()[setUp].equipment)
|
||||
inventory.add(Item(301))
|
||||
skills[Skills.FISHING] = 40
|
||||
}
|
||||
|
||||
enum class State{
|
||||
FISHING,
|
||||
BANKING,
|
||||
FIND_BANK,
|
||||
FIND_SPOT,
|
||||
TELEPORT_GE,
|
||||
SELL_GE,
|
||||
TELE_CATH,
|
||||
IDLE,
|
||||
INIT
|
||||
}
|
||||
|
||||
override fun newInstance(): Script {
|
||||
if (!lobstopper && bots <= 0) {
|
||||
val script = LobsterCatcher()
|
||||
script.bot = AIPlayer(bot.startLocation)
|
||||
script.state = State.FIND_SPOT
|
||||
bots = 1
|
||||
return script
|
||||
}else if (tick++ == 6000 && lobstopper) {
|
||||
tick = 0
|
||||
lobstopper = false
|
||||
}
|
||||
return newInstance()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package rs09.game.ai.general.scriptrepository
|
||||
|
||||
import io.github.classgraph.ClassGraph
|
||||
|
||||
object PlayerScripts {
|
||||
class PlayerScript(val identifier: String, val description: Array<String>, val name: String, val clazz: Class<*>)
|
||||
val identifierMap = HashMap<String,PlayerScript>()
|
||||
|
||||
|
||||
fun init(){
|
||||
val result = ClassGraph().enableAnnotationInfo().acceptPackages("rs09.game.ai.general.scriptrepository").scan()
|
||||
result.getClassesWithAnnotation("rs09.game.ai.general.scriptrepository.PlayerCompatible").forEach { res ->
|
||||
val description = res.getAnnotationInfo("rs09.game.ai.general.scriptrepository.ScriptDescription").parameterValues[0].value as Array<String>
|
||||
val identifier = res.getAnnotationInfo("rs09.game.ai.general.scriptrepository.ScriptIdentifier").parameterValues[0].value.toString()
|
||||
val name = res.getAnnotationInfo("rs09.game.ai.general.scriptrepository.ScriptName").parameterValues[0].value.toString()
|
||||
identifierMap[identifier] = PlayerScript(identifier,description,name,res.loadClass())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
package rs09.game.ai.general.scriptrepository
|
||||
|
||||
import core.game.interaction.DestinationFlag
|
||||
import core.game.interaction.MovementPulse
|
||||
import core.game.node.entity.skill.Skills
|
||||
import core.game.node.item.Item
|
||||
import core.game.world.map.Location
|
||||
import core.game.world.map.zone.ZoneBorders
|
||||
import core.tools.RandomFunction
|
||||
import org.rs09.consts.Items
|
||||
import rs09.game.ai.general.ScriptAPI
|
||||
import rs09.game.ai.skillingbot.SkillingBotAssembler
|
||||
import rs09.game.interaction.InteractionListener
|
||||
import rs09.game.interaction.InteractionListeners
|
||||
|
||||
@PlayerCompatible
|
||||
@ScriptName("Seers Magics")
|
||||
@ScriptDescription("Start in Seers Bank with an axe equipped or in your inventory.")
|
||||
@ScriptIdentifier("seers_magics")
|
||||
class SeersMagicTrees : Script(){
|
||||
var state = State.INIT
|
||||
var stage = 0
|
||||
val bankZone = ZoneBorders(2722,3490,2727,3493)
|
||||
val magicsZone = ZoneBorders(2700, 3396,2704, 3399)
|
||||
var overlay: ScriptAPI.BottingOverlay? = null
|
||||
var logCounter = 0
|
||||
|
||||
override fun tick() {
|
||||
when(state){
|
||||
|
||||
State.INIT -> {
|
||||
overlay = scriptAPI.getOverlay()
|
||||
overlay!!.init()
|
||||
overlay!!.setTitle("Woodcutting")
|
||||
overlay!!.setTaskLabel("Logs cut:")
|
||||
overlay!!.setAmount(0)
|
||||
state = State.RETURN_TO_TREES
|
||||
}
|
||||
|
||||
State.CHOPPING -> {
|
||||
val tree = scriptAPI.getNearestNode(1306,true)
|
||||
bot.interfaceManager.close()
|
||||
tree?.let { InteractionListeners.run(tree.id, InteractionListener.OBJECT,"Chop down",bot,tree) }
|
||||
if(bot.inventory.isFull){
|
||||
state = State.FIND_BANK
|
||||
}
|
||||
overlay!!.setAmount(logCounter + bot.inventory.getAmount(Items.MAGIC_LOGS_1513))
|
||||
}
|
||||
|
||||
State.FIND_BANK -> {
|
||||
if(!bankZone.insideBorder(bot)){
|
||||
scriptAPI.walkTo(bankZone.randomLoc)
|
||||
} else {
|
||||
state = State.BANKING
|
||||
}
|
||||
}
|
||||
|
||||
State.BANKING -> {
|
||||
val bank = scriptAPI.getNearestNode(25808,true)
|
||||
if(bank != null)
|
||||
bot.pulseManager.run(object: MovementPulse(bot,bank, DestinationFlag.OBJECT){
|
||||
override fun pulse(): Boolean {
|
||||
bot.faceLocation(bank.location)
|
||||
logCounter += bot.inventory.getAmount(Items.MAGIC_LOGS_1513)
|
||||
scriptAPI.bankItem(Items.MAGIC_LOGS_1513)
|
||||
state = State.RETURN_TO_TREES
|
||||
return true
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
State.RETURN_TO_TREES -> {
|
||||
bot.interfaceManager.close()
|
||||
if(!magicsZone.insideBorder(bot)){
|
||||
scriptAPI.walkTo(magicsZone.randomLoc)
|
||||
} else {
|
||||
state = State.CHOPPING
|
||||
}
|
||||
}
|
||||
|
||||
State.TELE_GE -> {
|
||||
state = State.SELL_GE
|
||||
scriptAPI.teleportToGE()
|
||||
}
|
||||
|
||||
State.SELL_GE -> {
|
||||
state = State.TELE_SEERS
|
||||
scriptAPI.sellOnGE(Items.MAGIC_LOGS_1513)
|
||||
}
|
||||
|
||||
State.TELE_SEERS -> {
|
||||
state = State.RETURN_TO_TREES
|
||||
scriptAPI.teleport(Location.create(2756, 3478, 0))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
inventory.add(Item(Items.RUNE_AXE_1359))
|
||||
skills[Skills.WOODCUTTING] = RandomFunction.random(75,99)
|
||||
}
|
||||
|
||||
enum class State {
|
||||
CHOPPING,
|
||||
FIND_BANK,
|
||||
BANKING,
|
||||
RETURN_TO_TREES,
|
||||
TELE_GE,
|
||||
SELL_GE,
|
||||
TELE_SEERS,
|
||||
INIT
|
||||
}
|
||||
|
||||
override fun newInstance(): Script {
|
||||
val script = SeersMagicTrees()
|
||||
script.bot = SkillingBotAssembler().produce(SkillingBotAssembler.Wealth.AVERAGE,bot.startLocation)
|
||||
return script
|
||||
}
|
||||
}
|
||||
@@ -114,6 +114,7 @@ class SharkCatcher : Script() {
|
||||
}
|
||||
|
||||
State.FISHING -> {
|
||||
bot.interfaceManager.close()
|
||||
if (Random.nextBoolean()) {
|
||||
tick = 0
|
||||
val spot = scriptAPI.getNearestNode(334, false)
|
||||
|
||||
@@ -22,6 +22,7 @@ class VarrockEssenceMiner : Script(){
|
||||
|
||||
when(state){
|
||||
State.TO_ESSENCE -> {
|
||||
bot.interfaceManager.close()
|
||||
if(!auburyZone.insideBorder(bot))
|
||||
scriptAPI.walkTo(auburyZone.randomLoc)
|
||||
else {
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
package rs09.game.content.dialogue
|
||||
|
||||
import api.ContentAPI
|
||||
import core.game.content.dialogue.DialoguePlugin
|
||||
import core.game.content.dialogue.FacialExpression
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.node.item.Item
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.Items
|
||||
import org.rs09.consts.NPCs
|
||||
import rs09.tools.END_DIALOGUE
|
||||
import java.text.SimpleDateFormat
|
||||
import java.time.temporal.ChronoUnit
|
||||
import java.util.*
|
||||
|
||||
@Initializable
|
||||
class CaptainCainDialogue(player: Player? = null) : DialoguePlugin(player) {
|
||||
val sdf = SimpleDateFormat("ddMMyyyy")
|
||||
override fun newInstance(player: Player?): DialoguePlugin {
|
||||
return CaptainCainDialogue(player)
|
||||
}
|
||||
|
||||
override fun open(vararg args: Any?): Boolean {
|
||||
npcl(FacialExpression.FRIENDLY, "Hello, there, adventurer. Say, you wouldn't happen to be interested in purchasing a Fighter Torso would you?")
|
||||
stage = 0
|
||||
return true
|
||||
}
|
||||
|
||||
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
|
||||
val start = sdf.parse("27112020").toInstant()
|
||||
val now = Date().toInstant()
|
||||
val days = ChronoUnit.DAYS.between(start,now)
|
||||
when(stage){
|
||||
0 -> npcl(FacialExpression.ANNOYED,"I'm having to offer this service because it's been $days days since Ryan promised to give us barbarian assault.").also { stage++ }
|
||||
1 -> options("Yes, please.","No, thanks.").also { stage++ }
|
||||
2 -> when(buttonId){
|
||||
1 -> playerl(FacialExpression.FRIENDLY, "Yes, please.").also { stage = 10 }
|
||||
2 -> playerl(FacialExpression.HALF_THINKING, "No, thanks.").also { stage = END_DIALOGUE }
|
||||
}
|
||||
|
||||
10 -> npcl(FacialExpression.FRIENDLY, "Alright, then, that'll be 7,500,000 gold please.").also { stage++ }
|
||||
11 -> options("Here you go!","Nevermind.").also { stage++ }
|
||||
12 -> when(buttonId){
|
||||
1 -> if(ContentAPI.inInventory(player, 995, 7500000))
|
||||
playerl(FacialExpression.FRIENDLY, "Here you go!").also { stage = 20 }
|
||||
else
|
||||
playerl(FacialExpression.HALF_GUILTY, "Actually, I don't have that much.").also { stage = END_DIALOGUE }
|
||||
|
||||
2 -> playerl(FacialExpression.FRIENDLY, "On second thought, nevermind.").also { stage = END_DIALOGUE }
|
||||
}
|
||||
|
||||
20 -> {
|
||||
npcl(FacialExpression.FRIENDLY, "Thank you much, kind sir. And here's your torso.")
|
||||
if(ContentAPI.removeItem(player, Item(995,7500000), api.Container.INVENTORY)) {
|
||||
ContentAPI.addItem(player, Items.FIGHTER_TORSO_10551, 1)
|
||||
}
|
||||
stage = END_DIALOGUE
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun getIds(): IntArray {
|
||||
return intArrayOf(NPCs.CAPTAIN_CAIN_5030)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -20,6 +20,8 @@ import core.plugin.Plugin
|
||||
import core.tools.RandomFunction
|
||||
import rs09.game.ai.AIPBuilder
|
||||
import rs09.game.ai.AIPlayer
|
||||
import rs09.game.ai.general.GeneralBotCreator
|
||||
import rs09.game.ai.general.scriptrepository.LobsterCatcher
|
||||
import rs09.game.ai.pvmbots.PvMBotsBuilder
|
||||
import rs09.game.ai.pvp.PVPAIPActions
|
||||
import rs09.game.ai.pvp.PVPAIPBuilderUtils
|
||||
@@ -307,6 +309,7 @@ class AIPCommandPlugin : CommandPlugin() {
|
||||
return true
|
||||
}
|
||||
//"manthiev" -> GeneralBotCreator(player.location, ManThiever())
|
||||
"fish" -> GeneralBotCreator(Location.create(2805, 3435, 0), LobsterCatcher())
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
package rs09.game.system.command.sets
|
||||
|
||||
import core.game.component.Component
|
||||
import core.plugin.Initializable
|
||||
import org.rs09.consts.Components
|
||||
import rs09.game.ai.general.GeneralBotCreator
|
||||
import rs09.game.ai.general.scriptrepository.PlayerScripts
|
||||
import rs09.game.ai.general.scriptrepository.Script
|
||||
import rs09.game.system.command.Command
|
||||
import rs09.game.world.GameWorld
|
||||
import rs09.tools.stringtools.colorize
|
||||
|
||||
@Initializable
|
||||
class BottingCommandSet : CommandSet(Command.Privilege.STANDARD) {
|
||||
override fun defineCommands() {
|
||||
define("scripts"){player, _ ->
|
||||
if(GameWorld.settings?.enabled_botting != true){
|
||||
player.sendChat("I just tried to do something silly!")
|
||||
return@define
|
||||
}
|
||||
if(!player.getAttribute("botting:warning_shown",false)){
|
||||
player.dialogueInterpreter.sendDialogue(colorize("%RWARNING: Running a bot script will permanently remove you"),colorize("%Rfrom the highscores."))
|
||||
player.dialogueInterpreter.addAction { player, buttonId -> player.setAttribute("/save:botting:warning_shown",true) }
|
||||
return@define
|
||||
}
|
||||
for (i in 0..310) {
|
||||
player.packetDispatch.sendString("", 275, i)
|
||||
}
|
||||
var lineid = 11
|
||||
player.packetDispatch.sendString("Bot Scripts",275,2)
|
||||
for(script in PlayerScripts.identifierMap.values) {
|
||||
player.packetDispatch.sendString("<bold>${script.name}</bold>", 275, lineid++)
|
||||
script.description.forEach { line ->
|
||||
player.packetDispatch.sendString(line,275,lineid++)
|
||||
}
|
||||
player.packetDispatch.sendString("<img=3> ::script ${script.identifier}",275,lineid++)
|
||||
player.packetDispatch.sendString("<str> </str>",275,lineid++)
|
||||
}
|
||||
player.interfaceManager.open(Component(Components.QUESTJOURNAL_SCROLL_275))
|
||||
}
|
||||
define("script"){player,args ->
|
||||
if(GameWorld.settings?.enabled_botting != true){
|
||||
player.sendChat("I just tried to do something very silly!")
|
||||
return@define
|
||||
}
|
||||
if(!player.getAttribute("botting:warning_shown",false)){
|
||||
player.dialogueInterpreter.sendDialogue(colorize("%RWARNING: Running a bot script will permanently remove you from the highscores."))
|
||||
player.dialogueInterpreter.addAction { player, buttonId -> player.setAttribute("/save:botting:warning_shown",true) }
|
||||
return@define
|
||||
}
|
||||
if(args.size < 2){
|
||||
reject(player,"Usage: ::script identifier")
|
||||
}
|
||||
val identifier = args[1]
|
||||
val script = PlayerScripts.identifierMap[identifier]
|
||||
if(script == null){
|
||||
reject(player,"Invalid script identifier")
|
||||
}
|
||||
player.interfaceManager.close()
|
||||
GeneralBotCreator(script!!.clazz.newInstance() as Script,player,true)
|
||||
player.sendMessage(colorize("%RStarting script..."))
|
||||
player.sendMessage(colorize("%RTo stop the script, do ::stopscript or log out."))
|
||||
|
||||
}
|
||||
define("stopscript"){player,args ->
|
||||
val pulse: GeneralBotCreator.BotScriptPulse? = player.getAttribute("botting:script",null)
|
||||
pulse?.stop()
|
||||
player.interfaceManager.closeOverlay()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ import core.game.world.map.RegionManager
|
||||
import core.plugin.CorePluginTypes.StartupPlugin
|
||||
import core.tools.RandomFunction
|
||||
import core.tools.mysql.DatabaseManager
|
||||
import rs09.game.ai.general.scriptrepository.PlayerScripts
|
||||
import rs09.ServerConstants
|
||||
import rs09.game.node.entity.state.newsys.StateRepository
|
||||
import rs09.game.system.SystemLogger
|
||||
@@ -151,6 +152,7 @@ object GameWorld {
|
||||
}
|
||||
ObjectDefinition.getDefinitions().values.forEach(Consumer { obj: ObjectDefinition -> obj.examine })
|
||||
System.gc()
|
||||
PlayerScripts.init()
|
||||
StateRepository.init()
|
||||
SystemLogger.initTradeLogger()
|
||||
}
|
||||
|
||||
@@ -41,9 +41,11 @@ object ImmerseWorld {
|
||||
}
|
||||
|
||||
fun immerseSeersAndCatherby(){
|
||||
GeneralBotCreator(SeersMagicTrees(), skillingBotAssembler.produce(SkillingBotAssembler.Wealth.AVERAGE, Location.create(2702, 3397, 0)))
|
||||
GeneralBotCreator(SeersFlax(), skillingBotAssembler.produce(SkillingBotAssembler.Wealth.POOR, Location.create(2738, 3444, 0)))
|
||||
GeneralBotCreator(FletchingBankstander(), skillingBotAssembler.produce(SkillingBotAssembler.Wealth.AVERAGE, Location.create(2722, 3493, 0)))
|
||||
GeneralBotCreator(GlassBlowingBankstander(), skillingBotAssembler.produce(SkillingBotAssembler.Wealth.AVERAGE, Location.create(2807, 3441, 0)))
|
||||
GeneralBotCreator(Location.create(2805, 3435, 0), LobsterCatcher())
|
||||
}
|
||||
|
||||
fun immerseLumbridgeDraynor(){
|
||||
@@ -53,6 +55,9 @@ object ImmerseWorld {
|
||||
GeneralBotCreator(ManThiever(), skillingBotAssembler.produce(SkillingBotAssembler.Wealth.POOR,Location.create(3235, 3213, 0)))
|
||||
GeneralBotCreator(FarmerThiever(), skillingBotAssembler.produce(SkillingBotAssembler.Wealth.POOR,Location.create(3094,3243,0)))
|
||||
GeneralBotCreator(FarmerThiever(), skillingBotAssembler.produce(SkillingBotAssembler.Wealth.POOR,Location.create(3094,3243,0)))
|
||||
GeneralBotCreator(DraynorWillows(), skillingBotAssembler.produce(SkillingBotAssembler.Wealth.values().random(),Location.create(3094, 3245, 0)))
|
||||
GeneralBotCreator(DraynorWillows(), skillingBotAssembler.produce(SkillingBotAssembler.Wealth.values().random(),Location.create(3094, 3245, 0)))
|
||||
GeneralBotCreator(DraynorWillows(), skillingBotAssembler.produce(SkillingBotAssembler.Wealth.values().random(),Location.create(3094, 3245, 0)))
|
||||
GeneralBotCreator(DraynorFisher(), skillingBotAssembler.produce(SkillingBotAssembler.Wealth.POOR,Location.create(3095, 3246, 0)))
|
||||
GeneralBotCreator(DraynorFisher(), skillingBotAssembler.produce(SkillingBotAssembler.Wealth.POOR,Location.create(3095, 3246, 0)))
|
||||
GeneralBotCreator(DraynorFisher(), skillingBotAssembler.produce(SkillingBotAssembler.Wealth.POOR,Location.create(3095, 3246, 0)))
|
||||
@@ -78,6 +83,10 @@ object ImmerseWorld {
|
||||
}
|
||||
}
|
||||
|
||||
fun immerseFalador(){
|
||||
GeneralBotCreator(CoalMiner(), skillingBotAssembler.produce(SkillingBotAssembler.Wealth.POOR,Location.create(3037, 9737, 0)))
|
||||
}
|
||||
|
||||
fun immerseSlayer(){
|
||||
GeneralBotCreator(GenericSlayerBot(), assembler.produce(CombatBotAssembler.Type.MELEE,CombatBotAssembler.Tier.HIGH,Location.create(2673, 3635, 0)))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user