mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2025-12-16 03:20:19 -07:00
Refactorings and improvements backported from the stealing-creation branch.
This commit is contained in:
parent
236f95ff63
commit
2bd3154611
31 changed files with 479 additions and 106 deletions
|
|
@ -1726,5 +1726,45 @@
|
||||||
"darkbow_graphic": "",
|
"darkbow_graphic": "",
|
||||||
"projectile": "1839,40,36,32,32,15,0",
|
"projectile": "1839,40,36,32,32,15,0",
|
||||||
"poison_damage": "0"
|
"poison_damage": "0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "14202",
|
||||||
|
"name": "Arrows (class 1)",
|
||||||
|
"start_graphic": "24,96",
|
||||||
|
"darkbow_graphic": "1109,96",
|
||||||
|
"projectile": "15,40,36,41,46,5,0",
|
||||||
|
"poison_damage": "0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "14203",
|
||||||
|
"name": "Arrows (class 2)",
|
||||||
|
"start_graphic": "24,96",
|
||||||
|
"darkbow_graphic": "1109,96",
|
||||||
|
"projectile": "15,40,36,41,46,5,0",
|
||||||
|
"poison_damage": "0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "14204",
|
||||||
|
"name": "Arrows (class 3)",
|
||||||
|
"start_graphic": "24,96",
|
||||||
|
"darkbow_graphic": "1109,96",
|
||||||
|
"projectile": "15,40,36,41,46,5,0",
|
||||||
|
"poison_damage": "0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "14205",
|
||||||
|
"name": "Arrows (class 4)",
|
||||||
|
"start_graphic": "24,96",
|
||||||
|
"darkbow_graphic": "1109,96",
|
||||||
|
"projectile": "15,40,36,41,46,5,0",
|
||||||
|
"poison_damage": "0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "14206",
|
||||||
|
"name": "Arrows (class 5)",
|
||||||
|
"start_graphic": "24,96",
|
||||||
|
"darkbow_graphic": "1109,96",
|
||||||
|
"projectile": "15,40,36,41,46,5,0",
|
||||||
|
"poison_damage": "0"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -712,5 +712,17 @@
|
||||||
"interfaceType": "3",
|
"interfaceType": "3",
|
||||||
"walkable": "false",
|
"walkable": "false",
|
||||||
"tabIndex": "-1"
|
"tabIndex": "-1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "804",
|
||||||
|
"interfaceType": "1",
|
||||||
|
"walkable": "true",
|
||||||
|
"tabIndex": "-1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "809",
|
||||||
|
"interfaceType": "1",
|
||||||
|
"walkable": "true",
|
||||||
|
"tabIndex": "-1"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -134119,7 +134119,7 @@
|
||||||
"attack_speed": "4",
|
"attack_speed": "4",
|
||||||
"id": "14202",
|
"id": "14202",
|
||||||
"absorb": "0,0,0",
|
"absorb": "0,0,0",
|
||||||
"bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,15,0,0",
|
"bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,15",
|
||||||
"equipment_slot": "13"
|
"equipment_slot": "13"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -134133,7 +134133,7 @@
|
||||||
"attack_speed": "4",
|
"attack_speed": "4",
|
||||||
"id": "14203",
|
"id": "14203",
|
||||||
"absorb": "0,0,0",
|
"absorb": "0,0,0",
|
||||||
"bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,30,0,0",
|
"bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,30",
|
||||||
"equipment_slot": "13"
|
"equipment_slot": "13"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -134147,7 +134147,7 @@
|
||||||
"attack_speed": "4",
|
"attack_speed": "4",
|
||||||
"id": "14204",
|
"id": "14204",
|
||||||
"absorb": "0,0,0",
|
"absorb": "0,0,0",
|
||||||
"bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,45,0,0",
|
"bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,45",
|
||||||
"equipment_slot": "13"
|
"equipment_slot": "13"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -134161,7 +134161,7 @@
|
||||||
"attack_speed": "4",
|
"attack_speed": "4",
|
||||||
"id": "14205",
|
"id": "14205",
|
||||||
"absorb": "0,0,0",
|
"absorb": "0,0,0",
|
||||||
"bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,60,0,0",
|
"bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,60",
|
||||||
"equipment_slot": "13"
|
"equipment_slot": "13"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -134175,7 +134175,7 @@
|
||||||
"attack_speed": "4",
|
"attack_speed": "4",
|
||||||
"id": "14206",
|
"id": "14206",
|
||||||
"absorb": "0,0,0",
|
"absorb": "0,0,0",
|
||||||
"bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,75,0,0",
|
"bonuses": "0,0,0,0,0,0,0,0,0,0,0,0,0,0,75",
|
||||||
"equipment_slot": "13"
|
"equipment_slot": "13"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -135431,6 +135431,8 @@
|
||||||
"destroy_message": "Drop",
|
"destroy_message": "Drop",
|
||||||
"name": "Scimitar (class 1)",
|
"name": "Scimitar (class 1)",
|
||||||
"archery_ticket_price": "0",
|
"archery_ticket_price": "0",
|
||||||
|
"attack_anims": "390,390,381,390",
|
||||||
|
"attack_audios": "2500,0,2517,0",
|
||||||
"id": "14287",
|
"id": "14287",
|
||||||
"bonuses": "0,55,0,0,0,0,0,0,0,0,0,15,0,0,0"
|
"bonuses": "0,55,0,0,0,0,0,0,0,0,0,15,0,0,0"
|
||||||
},
|
},
|
||||||
|
|
@ -135459,6 +135461,8 @@
|
||||||
"destroy_message": "Drop",
|
"destroy_message": "Drop",
|
||||||
"name": "Scimitar (class 2)",
|
"name": "Scimitar (class 2)",
|
||||||
"archery_ticket_price": "0",
|
"archery_ticket_price": "0",
|
||||||
|
"attack_anims": "390,390,381,390",
|
||||||
|
"attack_audios": "2500,0,2517,0",
|
||||||
"id": "14289",
|
"id": "14289",
|
||||||
"bonuses": "0,90,0,0,0,0,0,0,0,0,0,30,0,0,0"
|
"bonuses": "0,90,0,0,0,0,0,0,0,0,0,30,0,0,0"
|
||||||
},
|
},
|
||||||
|
|
@ -135487,6 +135491,8 @@
|
||||||
"destroy_message": "Drop",
|
"destroy_message": "Drop",
|
||||||
"name": "Scimitar (class 3)",
|
"name": "Scimitar (class 3)",
|
||||||
"archery_ticket_price": "0",
|
"archery_ticket_price": "0",
|
||||||
|
"attack_anims": "390,390,381,390",
|
||||||
|
"attack_audios": "2500,0,2517,0",
|
||||||
"id": "14291",
|
"id": "14291",
|
||||||
"bonuses": "0,145,0,0,0,0,0,0,0,0,0,45,0,0,0"
|
"bonuses": "0,145,0,0,0,0,0,0,0,0,0,45,0,0,0"
|
||||||
},
|
},
|
||||||
|
|
@ -135515,6 +135521,8 @@
|
||||||
"destroy_message": "Drop",
|
"destroy_message": "Drop",
|
||||||
"name": "Scimitar (class 4)",
|
"name": "Scimitar (class 4)",
|
||||||
"archery_ticket_price": "0",
|
"archery_ticket_price": "0",
|
||||||
|
"attack_anims": "390,390,381,390",
|
||||||
|
"attack_audios": "2500,0,2517,0",
|
||||||
"id": "14293",
|
"id": "14293",
|
||||||
"bonuses": "0,180,0,0,0,0,0,0,0,0,0,60,0,0,0"
|
"bonuses": "0,180,0,0,0,0,0,0,0,0,0,60,0,0,0"
|
||||||
},
|
},
|
||||||
|
|
@ -135543,6 +135551,8 @@
|
||||||
"destroy_message": "Drop",
|
"destroy_message": "Drop",
|
||||||
"name": "Scimitar (class 5)",
|
"name": "Scimitar (class 5)",
|
||||||
"archery_ticket_price": "0",
|
"archery_ticket_price": "0",
|
||||||
|
"attack_anims": "390,390,381,390",
|
||||||
|
"attack_audios": "2500,0,2517,0",
|
||||||
"id": "14295",
|
"id": "14295",
|
||||||
"bonuses": "0,225,0,0,0,0,0,0,0,0,0,75,0,0,0"
|
"bonuses": "0,225,0,0,0,0,0,0,0,0,0,75,0,0,0"
|
||||||
},
|
},
|
||||||
|
|
@ -135570,6 +135580,8 @@
|
||||||
"destroy_message": "Drop",
|
"destroy_message": "Drop",
|
||||||
"name": "Dagger (class 1)",
|
"name": "Dagger (class 1)",
|
||||||
"archery_ticket_price": "0",
|
"archery_ticket_price": "0",
|
||||||
|
"attack_anims": "400,400,401,400",
|
||||||
|
"attack_audios": "2517,2517,2500,2517",
|
||||||
"id": "14297",
|
"id": "14297",
|
||||||
"bonuses": "41,0,0,0,0,0,0,0,0,0,0,15,0,0,0"
|
"bonuses": "41,0,0,0,0,0,0,0,0,0,0,15,0,0,0"
|
||||||
},
|
},
|
||||||
|
|
@ -135597,6 +135609,8 @@
|
||||||
"destroy_message": "Drop",
|
"destroy_message": "Drop",
|
||||||
"name": "Dagger (class 2)",
|
"name": "Dagger (class 2)",
|
||||||
"archery_ticket_price": "0",
|
"archery_ticket_price": "0",
|
||||||
|
"attack_anims": "400,400,401,400",
|
||||||
|
"attack_audios": "2517,2517,2500,2517",
|
||||||
"id": "14299",
|
"id": "14299",
|
||||||
"bonuses": "68,0,0,0,0,0,0,0,0,0,0,30,0,0,0"
|
"bonuses": "68,0,0,0,0,0,0,0,0,0,0,30,0,0,0"
|
||||||
},
|
},
|
||||||
|
|
@ -135624,6 +135638,8 @@
|
||||||
"destroy_message": "Drop",
|
"destroy_message": "Drop",
|
||||||
"name": "Dagger (class 3)",
|
"name": "Dagger (class 3)",
|
||||||
"archery_ticket_price": "0",
|
"archery_ticket_price": "0",
|
||||||
|
"attack_anims": "400,400,401,400",
|
||||||
|
"attack_audios": "2517,2517,2500,2517",
|
||||||
"id": "14301",
|
"id": "14301",
|
||||||
"bonuses": "101,0,0,0,0,0,0,0,0,0,0,45,0,0,0"
|
"bonuses": "101,0,0,0,0,0,0,0,0,0,0,45,0,0,0"
|
||||||
},
|
},
|
||||||
|
|
@ -135651,6 +135667,8 @@
|
||||||
"destroy_message": "Drop",
|
"destroy_message": "Drop",
|
||||||
"name": "Dagger (class 4)",
|
"name": "Dagger (class 4)",
|
||||||
"archery_ticket_price": "0",
|
"archery_ticket_price": "0",
|
||||||
|
"attack_anims": "400,400,401,400",
|
||||||
|
"attack_audios": "2517,2517,2500,2517",
|
||||||
"id": "14303",
|
"id": "14303",
|
||||||
"bonuses": "135,0,0,0,0,0,0,0,0,0,0,60,0,0,0"
|
"bonuses": "135,0,0,0,0,0,0,0,0,0,0,60,0,0,0"
|
||||||
},
|
},
|
||||||
|
|
@ -135678,6 +135696,8 @@
|
||||||
"destroy_message": "Drop",
|
"destroy_message": "Drop",
|
||||||
"name": "Dagger (class 5)",
|
"name": "Dagger (class 5)",
|
||||||
"archery_ticket_price": "0",
|
"archery_ticket_price": "0",
|
||||||
|
"attack_anims": "400,400,401,400",
|
||||||
|
"attack_audios": "2517,2517,2500,2517",
|
||||||
"id": "14305",
|
"id": "14305",
|
||||||
"bonuses": "168,0,0,0,0,0,0,0,0,0,0,75,0,0,0"
|
"bonuses": "168,0,0,0,0,0,0,0,0,0,0,75,0,0,0"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -2296,5 +2296,11 @@
|
||||||
"name": "Charmin' Farmin'",
|
"name": "Charmin' Farmin'",
|
||||||
"indexId": "516",
|
"indexId": "516",
|
||||||
"borders": "{1600,4672,1663,4735}"
|
"borders": "{1600,4672,1663,4735}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "578",
|
||||||
|
"name": "Stealing Creation",
|
||||||
|
"indexId": "620",
|
||||||
|
"borders": ""
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -1564,5 +1564,50 @@
|
||||||
"animation": "426",
|
"animation": "426",
|
||||||
"drop_ammo": "true",
|
"drop_ammo": "true",
|
||||||
"ammunition": "882,883,5616,5622,598,884,885,5617,5623,2532,886,887,5618,5624,2534,888,889,5619,5625,2536,890,891,5620,5626,2538,892,893,5621,5627,2540,11212,11227,11228,11229,11217,78,4160"
|
"ammunition": "882,883,5616,5622,598,884,885,5617,5623,2532,886,887,5618,5624,2534,888,889,5619,5625,2536,890,891,5620,5626,2538,892,893,5621,5627,2540,11212,11227,11228,11229,11217,78,4160"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "14192",
|
||||||
|
"name": "Bow (class 1)",
|
||||||
|
"ammo_slot": "13",
|
||||||
|
"weapon_type": "0",
|
||||||
|
"animation": "426",
|
||||||
|
"drop_ammo": "true",
|
||||||
|
"ammunition": "14202,14203,14204,14205,14206"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "14194",
|
||||||
|
"name": "Bow (class 2)",
|
||||||
|
"ammo_slot": "13",
|
||||||
|
"weapon_type": "0",
|
||||||
|
"animation": "426",
|
||||||
|
"drop_ammo": "true",
|
||||||
|
"ammunition": "14202,14203,14204,14205,14206"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "14196",
|
||||||
|
"name": "Bow (class 3)",
|
||||||
|
"ammo_slot": "13",
|
||||||
|
"weapon_type": "0",
|
||||||
|
"animation": "426",
|
||||||
|
"drop_ammo": "true",
|
||||||
|
"ammunition": "14202,14203,14204,14205,14206"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "14198",
|
||||||
|
"name": "Bow (class 4)",
|
||||||
|
"ammo_slot": "13",
|
||||||
|
"weapon_type": "0",
|
||||||
|
"animation": "426",
|
||||||
|
"drop_ammo": "true",
|
||||||
|
"ammunition": "14202,14203,14204,14205,14206"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "14200",
|
||||||
|
"name": "Bow (class 5)",
|
||||||
|
"ammo_slot": "13",
|
||||||
|
"weapon_type": "0",
|
||||||
|
"animation": "426",
|
||||||
|
"drop_ammo": "true",
|
||||||
|
"ammunition": "14202,14203,14204,14205,14206"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -348,7 +348,17 @@ public enum Consumables {
|
||||||
FISH_MIX(new BarbarianMix(new int[] {11477, 11479}, new MultiEffect(new SkillEffect(Skills.FISHING, 3, 0), new HealingEffect(6)))),
|
FISH_MIX(new BarbarianMix(new int[] {11477, 11479}, new MultiEffect(new SkillEffect(Skills.FISHING, 3, 0), new HealingEffect(6)))),
|
||||||
SUPER_ENERGY_MIX(new BarbarianMix(new int[] {11481, 11483}, new MultiEffect(new EnergyEffect(20), new HealingEffect(6)))),
|
SUPER_ENERGY_MIX(new BarbarianMix(new int[] {11481, 11483}, new MultiEffect(new EnergyEffect(20), new HealingEffect(6)))),
|
||||||
HUNTING_MIX(new BarbarianMix(new int[] {11517, 11519}, new MultiEffect(new SkillEffect(Skills.HUNTER, 3, 0), new HealingEffect(6)))),
|
HUNTING_MIX(new BarbarianMix(new int[] {11517, 11519}, new MultiEffect(new SkillEffect(Skills.HUNTER, 3, 0), new HealingEffect(6)))),
|
||||||
SUPER_STR_MIX(new BarbarianMix(new int[] {11485, 11487}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 5, 0.15), new HealingEffect(6))));
|
SUPER_STR_MIX(new BarbarianMix(new int[] {11485, 11487}, new MultiEffect(new SkillEffect(Skills.STRENGTH, 5, 0.15), new HealingEffect(6)))),
|
||||||
|
|
||||||
|
/** Stealing creation potions */
|
||||||
|
SC_PRAYER(new Potion(new int[] {14207, 14209, 14211, 14213, 14215}, new PrayerEffect(7, 0.25))),
|
||||||
|
SC_ENERGY(new Potion(new int[] {14217, 14219, 14221, 14223, 14225}, new EnergyEffect(20))),
|
||||||
|
SC_ATTACK(new Potion(new int[] {14227, 14229, 14231, 14233, 14235}, new SkillEffect(Skills.ATTACK, 3, 0.2))),
|
||||||
|
SC_STRENGTH(new Potion(new int[] {14237, 14239, 14241, 14243, 14245}, new SkillEffect(Skills.STRENGTH, 3, 0.2))),
|
||||||
|
SC_RANGE(new Potion(new int[] {14247, 14249, 14251, 14253, 14255}, new SkillEffect(Skills.RANGE, 3, 0.1))),
|
||||||
|
SC_DEFENCE(new Potion(new int[] {14257, 14259, 14261, 14263, 14265}, new SkillEffect(Skills.DEFENCE, 3, 0.1))),
|
||||||
|
SC_MAGIC(new Potion(new int[] {14267, 14269, 14271, 14273, 14275}, new SkillEffect(Skills.MAGIC, 3, 0.1))),
|
||||||
|
SC_SUMMONING(new Potion(new int[] {14277, 14279, 14281, 14283, 14285}, new SummoningEffect(7, 0.25)));
|
||||||
|
|
||||||
public static HashMap<Integer,Consumable> consumables = new HashMap<>();
|
public static HashMap<Integer,Consumable> consumables = new HashMap<>();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,9 @@ public final class Option {
|
||||||
* The player trade option.
|
* The player trade option.
|
||||||
*/
|
*/
|
||||||
public static final Option _P_TRADE = new Option("Trade with", 3);
|
public static final Option _P_TRADE = new Option("Trade with", 3);
|
||||||
|
public static final Option _P_GIVETO = new Option("Give-to", 3);
|
||||||
|
|
||||||
|
public static final Option _P_PICKPOCKET = new Option("Pickpocket", 4);
|
||||||
|
|
||||||
|
|
||||||
public static final Option _P_EXAMINE = new Option("Examine", 7);
|
public static final Option _P_EXAMINE = new Option("Examine", 7);
|
||||||
|
|
@ -122,4 +125,4 @@ public final class Option {
|
||||||
this.handler = handler;
|
this.handler = handler;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,10 @@ public final class PacketDispatch {
|
||||||
PacketRepository.send(Config.class, new ConfigContext(player, varp.getIndex(), varp.getValue()));
|
PacketRepository.send(Config.class, new ConfigContext(player, varp.getIndex(), varp.getValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void sendVarcUpdate(short index, int value) {
|
||||||
|
PacketRepository.send(VarcUpdate.class, new VarcUpdateContext(player, index, value));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send a game message.
|
* Send a game message.
|
||||||
* @param message The game message.
|
* @param message The game message.
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ public class StileShortcut extends AgilityShortcut {
|
||||||
* Constructs a new {@Code StileShortcut} {@Code Object}
|
* Constructs a new {@Code StileShortcut} {@Code Object}
|
||||||
*/
|
*/
|
||||||
public StileShortcut() {
|
public StileShortcut() {
|
||||||
super(new int[] { 993, 3730, 7527, 12982, 19222, 22302, 29460, 33842, 34776 }, 1, 0.0, false, 0.0, new String[] { "climb-over" });
|
super(new int[] { 993, 3730, 7527, 12982, 19222, 22302, 29460, 33842, 34776, 39508, 39509, 39510 }, 1, 0.0, false, 0.0, new String[] { "climb-over" });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -389,17 +389,16 @@ public final class HouseManager {
|
||||||
for (int x = 0; x < 8; x++) {
|
for (int x = 0; x < 8; x++) {
|
||||||
for (int y = 0; y < 8; y++) {
|
for (int y = 0; y < 8; y++) {
|
||||||
if(z == 3){
|
if(z == 3){
|
||||||
region.replaceChunk(z, x, y, defaultSkyChunk.copy(region.getPlanes()[z]), from);
|
region.replaceChunk(z, x, y, defaultSkyChunk/*.copy(region.getPlanes()[z])*/, from);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Room room = rooms[z][x][y];
|
Room room = rooms[z][x][y];
|
||||||
if (room != null) {
|
if (room != null) {
|
||||||
if (room.getProperties().isRoof() && buildingMode) {
|
if (room.getProperties().isRoof() && buildingMode) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
BuildRegionChunk copy = room.getChunk().copy(region.getPlanes()[z]);
|
region.replaceChunk(z, x, y, room.getChunk(), from);
|
||||||
region.replaceChunk(z, x, y, copy, from);
|
room.loadDecorations(z, (BuildRegionChunk)region.getPlanes()[z].getChunks()[x][y], this);
|
||||||
room.loadDecorations(z, copy, this);
|
|
||||||
} else {
|
} else {
|
||||||
region.replaceChunk(z, x, y, z != 0 ? defaultSkyChunk.copy(region.getPlanes()[z]) : defaultChunk.copy(region.getPlanes()[0]), from);
|
region.replaceChunk(z, x, y, z != 0 ? defaultSkyChunk.copy(region.getPlanes()[z]) : defaultChunk.copy(region.getPlanes()[0]), from);
|
||||||
}
|
}
|
||||||
|
|
@ -831,4 +830,4 @@ public final class HouseManager {
|
||||||
public HouseZone getZone() {
|
public HouseZone getZone() {
|
||||||
return zone;
|
return zone;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
package core.game.node.entity.skill.gather;
|
package core.game.node.entity.skill.gather;
|
||||||
|
|
||||||
import core.game.node.entity.skill.Skills;
|
|
||||||
import core.game.node.entity.player.Player;
|
import core.game.node.entity.player.Player;
|
||||||
|
import core.game.node.entity.skill.Skills;
|
||||||
import core.game.world.update.flag.context.Animation;
|
import core.game.world.update.flag.context.Animation;
|
||||||
|
import org.rs09.consts.Items;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a skilling tool (such as knife, axe, needle, ...)
|
* Represents a skilling tool (such as knife, axe, needle, ...)
|
||||||
* @author Emperor
|
* @author Emperor
|
||||||
*/
|
*/
|
||||||
public enum SkillingTool {
|
public enum SkillingTool {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a bronze axe (woodcutting).
|
* Represents a bronze axe (woodcutting).
|
||||||
*/
|
*/
|
||||||
|
|
@ -88,7 +88,29 @@ public enum SkillingTool {
|
||||||
/**
|
/**
|
||||||
* Represents the Inferno Adze (mining)
|
* Represents the Inferno Adze (mining)
|
||||||
*/
|
*/
|
||||||
INFERNO_ADZE2(13661, 61, 1.0D, new Animation(10222));
|
INFERNO_ADZE2(13661, 61, 1.0D, new Animation(10222)),
|
||||||
|
|
||||||
|
HATCHET_CLASS1(Items.HATCHET_CLASS_1_14132, 1, 0.1, new Animation(10603)),
|
||||||
|
HATCHET_CLASS2(Items.HATCHET_CLASS_2_14134, 20, 0.3, new Animation(10604)),
|
||||||
|
HATCHET_CLASS3(Items.HATCHET_CLASS_3_14136, 40, 0.65, new Animation(10605)),
|
||||||
|
HATCHET_CLASS4(Items.HATCHET_CLASS_4_14138, 60, 0.85, new Animation(10606)),
|
||||||
|
HATCHET_CLASS5(Items.HATCHET_CLASS_5_14140, 80, 1.0, new Animation(10607)),
|
||||||
|
PICKAXE_CLASS1(Items.PICKAXE_CLASS_1_14122, 1, 0.1, new Animation(10608)),
|
||||||
|
PICKAXE_CLASS2(Items.PICKAXE_CLASS_2_14124, 20, 0.3, new Animation(10609)),
|
||||||
|
PICKAXE_CLASS3(Items.PICKAXE_CLASS_3_14126, 40, 0.65, new Animation(10610)),
|
||||||
|
PICKAXE_CLASS4(Items.PICKAXE_CLASS_4_14128, 60, 0.85, new Animation(10611)),
|
||||||
|
PICKAXE_CLASS5(Items.PICKAXE_CLASS_5_14130, 80, 1.0, new Animation(10612)),
|
||||||
|
HARPOON_CLASS1(Items.HARPOON_CLASS_1_14142, 1, 0.1, new Animation(10613)),
|
||||||
|
HARPOON_CLASS2(Items.HARPOON_CLASS_2_14144, 20, 0.3, new Animation(10614)),
|
||||||
|
HARPOON_CLASS3(Items.HARPOON_CLASS_3_14146, 40, 0.65, new Animation(10615)),
|
||||||
|
HARPOON_CLASS4(Items.HARPOON_CLASS_4_14148, 60, 0.85, new Animation(10616)),
|
||||||
|
HARPOON_CLASS5(Items.HARPOON_CLASS_5_14150, 80, 1.0, new Animation(10617)),
|
||||||
|
BUTTERFLY_NET_CLASS1(Items.BUTTERFLY_NET_CLASS_1_14152, 1, 0.1, new Animation(10618)),
|
||||||
|
BUTTERFLY_NET_CLASS2(Items.BUTTERFLY_NET_CLASS_2_14154, 20, 0.3, new Animation(10619)),
|
||||||
|
BUTTERFLY_NET_CLASS3(Items.BUTTERFLY_NET_CLASS_3_14156, 40, 0.65, new Animation(10620)),
|
||||||
|
BUTTERFLY_NET_CLASS4(Items.BUTTERFLY_NET_CLASS_4_14158, 60, 0.85, new Animation(10621)),
|
||||||
|
BUTTERFLY_NET_CLASS5(Items.BUTTERFLY_NET_CLASS_5_14160, 80, 1.0, new Animation(10622));
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The tool id.
|
* The tool id.
|
||||||
|
|
@ -145,23 +167,28 @@ public enum SkillingTool {
|
||||||
*/
|
*/
|
||||||
public static SkillingTool getHatchet(Player player) {
|
public static SkillingTool getHatchet(Player player) {
|
||||||
SkillingTool tool = null;
|
SkillingTool tool = null;
|
||||||
if (checkTool(player, Skills.WOODCUTTING, SkillingTool.DRAGON_AXE)) {
|
SkillingTool[] hatchetPriority = new SkillingTool[] {
|
||||||
tool = SkillingTool.DRAGON_AXE;
|
SkillingTool.HATCHET_CLASS5,
|
||||||
} else if (checkTool(player, Skills.WOODCUTTING, SkillingTool.RUNE_AXE)) {
|
SkillingTool.HATCHET_CLASS4,
|
||||||
tool = SkillingTool.RUNE_AXE;
|
SkillingTool.DRAGON_AXE,
|
||||||
} else if (checkTool(player, Skills.WOODCUTTING, SkillingTool.ADAMANT_AXE)) {
|
SkillingTool.HATCHET_CLASS3,
|
||||||
tool = SkillingTool.ADAMANT_AXE;
|
SkillingTool.RUNE_AXE,
|
||||||
} else if (checkTool(player, Skills.WOODCUTTING, SkillingTool.MITHRIL_AXE)) {
|
SkillingTool.ADAMANT_AXE,
|
||||||
tool = SkillingTool.MITHRIL_AXE;
|
SkillingTool.HATCHET_CLASS2,
|
||||||
} else if (checkTool(player, Skills.WOODCUTTING, SkillingTool.BLACK_AXE)) {
|
SkillingTool.MITHRIL_AXE,
|
||||||
tool = SkillingTool.BLACK_AXE;
|
SkillingTool.BLACK_AXE,
|
||||||
} else if (checkTool(player, Skills.WOODCUTTING, SkillingTool.STEEL_AXE)) {
|
SkillingTool.STEEL_AXE,
|
||||||
tool = SkillingTool.STEEL_AXE;
|
SkillingTool.HATCHET_CLASS1,
|
||||||
} else if (checkTool(player, Skills.WOODCUTTING, SkillingTool.IRON_AXE)) {
|
SkillingTool.IRON_AXE,
|
||||||
tool = SkillingTool.IRON_AXE;
|
SkillingTool.BRONZE_AXE
|
||||||
} else if (checkTool(player, Skills.WOODCUTTING, SkillingTool.BRONZE_AXE)) {
|
};
|
||||||
tool = SkillingTool.BRONZE_AXE;
|
for(SkillingTool hatchet : hatchetPriority) {
|
||||||
} else if (checkTool(player, Skills.WOODCUTTING, SkillingTool.INFERNO_ADZE)) {
|
if (checkTool(player, Skills.WOODCUTTING, hatchet)) {
|
||||||
|
tool = hatchet;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (checkTool(player, Skills.WOODCUTTING, SkillingTool.INFERNO_ADZE)) {
|
||||||
if(player.getSkills().getLevel(Skills.FIREMAKING) >= 92) {
|
if(player.getSkills().getLevel(Skills.FIREMAKING) >= 92) {
|
||||||
tool = SkillingTool.INFERNO_ADZE;
|
tool = SkillingTool.INFERNO_ADZE;
|
||||||
}
|
}
|
||||||
|
|
@ -176,26 +203,84 @@ public enum SkillingTool {
|
||||||
*/
|
*/
|
||||||
public static SkillingTool getPickaxe(Player player) {
|
public static SkillingTool getPickaxe(Player player) {
|
||||||
SkillingTool tool = null;
|
SkillingTool tool = null;
|
||||||
|
SkillingTool[] pickaxePriority = new SkillingTool[] {
|
||||||
|
SkillingTool.PICKAXE_CLASS5,
|
||||||
|
SkillingTool.PICKAXE_CLASS4,
|
||||||
|
SkillingTool.RUNE_PICKAXE,
|
||||||
|
SkillingTool.PICKAXE_CLASS3,
|
||||||
|
SkillingTool.ADAMANT_PICKAXE,
|
||||||
|
SkillingTool.PICKAXE_CLASS2,
|
||||||
|
SkillingTool.MITHRIL_PICKAXE,
|
||||||
|
SkillingTool.STEEL_PICKAXE,
|
||||||
|
SkillingTool.PICKAXE_CLASS1,
|
||||||
|
SkillingTool.IRON_PICKAXE,
|
||||||
|
SkillingTool.BRONZE_PICKAXE,
|
||||||
|
};
|
||||||
|
for(SkillingTool pickaxe : pickaxePriority) {
|
||||||
|
if (checkTool(player, Skills.MINING, pickaxe)) {
|
||||||
|
tool = pickaxe;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (checkTool(player, Skills.MINING, SkillingTool.INFERNO_ADZE2)) {
|
if (checkTool(player, Skills.MINING, SkillingTool.INFERNO_ADZE2)) {
|
||||||
if (player.getSkills().getLevel(Skills.FIREMAKING) >= 92) {
|
if (player.getSkills().getLevel(Skills.FIREMAKING) >= 92) {
|
||||||
tool = SkillingTool.INFERNO_ADZE2;
|
tool = SkillingTool.INFERNO_ADZE2;
|
||||||
}
|
}
|
||||||
} else if (checkTool(player, Skills.MINING, SkillingTool.RUNE_PICKAXE)) {
|
|
||||||
tool = SkillingTool.RUNE_PICKAXE;
|
|
||||||
} else if (checkTool(player, Skills.MINING, SkillingTool.ADAMANT_PICKAXE)) {
|
|
||||||
tool = SkillingTool.ADAMANT_PICKAXE;
|
|
||||||
} else if (checkTool(player, Skills.MINING, SkillingTool.MITHRIL_PICKAXE)) {
|
|
||||||
tool = SkillingTool.MITHRIL_PICKAXE;
|
|
||||||
} else if (checkTool(player, Skills.MINING, SkillingTool.STEEL_PICKAXE)) {
|
|
||||||
tool = SkillingTool.STEEL_PICKAXE;
|
|
||||||
} else if (checkTool(player, Skills.MINING, SkillingTool.IRON_PICKAXE)) {
|
|
||||||
tool = SkillingTool.IRON_PICKAXE;
|
|
||||||
} else if (checkTool(player, Skills.MINING, SkillingTool.BRONZE_PICKAXE)) {
|
|
||||||
tool = SkillingTool.BRONZE_PICKAXE;
|
|
||||||
}
|
}
|
||||||
return tool;
|
return tool;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static SkillingTool getHarpoon(Player player) {
|
||||||
|
SkillingTool tool = null;
|
||||||
|
SkillingTool[] harpoonPriority = new SkillingTool[] {
|
||||||
|
SkillingTool.BUTTERFLY_NET_CLASS5,
|
||||||
|
SkillingTool.BUTTERFLY_NET_CLASS4,
|
||||||
|
SkillingTool.BUTTERFLY_NET_CLASS3,
|
||||||
|
SkillingTool.BUTTERFLY_NET_CLASS2,
|
||||||
|
SkillingTool.BUTTERFLY_NET_CLASS1,
|
||||||
|
};
|
||||||
|
for(SkillingTool harpoon : harpoonPriority) {
|
||||||
|
if (checkTool(player, Skills.FISHING, harpoon)) {
|
||||||
|
tool = harpoon;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return tool;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SkillingTool getButterflyNet(Player player) {
|
||||||
|
SkillingTool tool = null;
|
||||||
|
SkillingTool[] butterflyNetPriority = new SkillingTool[] {
|
||||||
|
SkillingTool.BUTTERFLY_NET_CLASS5,
|
||||||
|
SkillingTool.BUTTERFLY_NET_CLASS4,
|
||||||
|
SkillingTool.BUTTERFLY_NET_CLASS3,
|
||||||
|
SkillingTool.BUTTERFLY_NET_CLASS2,
|
||||||
|
SkillingTool.BUTTERFLY_NET_CLASS1,
|
||||||
|
};
|
||||||
|
for(SkillingTool butterflyNet : butterflyNetPriority) {
|
||||||
|
if (checkTool(player, Skills.HUNTER, butterflyNet)) {
|
||||||
|
tool = butterflyNet;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return tool;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SkillingTool getToolForSkill(Player player, int skill) {
|
||||||
|
switch(skill) {
|
||||||
|
case Skills.MINING:
|
||||||
|
return getPickaxe(player);
|
||||||
|
case Skills.WOODCUTTING:
|
||||||
|
return getHatchet(player);
|
||||||
|
case Skills.FISHING:
|
||||||
|
return getHarpoon(player);
|
||||||
|
case Skills.HUNTER:
|
||||||
|
return getButterflyNet(player);
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the player has a tool and if he can use it.
|
* Checks if the player has a tool and if he can use it.
|
||||||
* @param tool The tool.
|
* @param tool The tool.
|
||||||
|
|
@ -242,4 +327,4 @@ public enum SkillingTool {
|
||||||
public Animation getAnimation() {
|
public Animation getAnimation() {
|
||||||
return animation;
|
return animation;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,9 @@ public enum CombinationRune {
|
||||||
MIST_RUNE(4695,Runes.WATER_RUNE,Runes.AIR_RUNE),
|
MIST_RUNE(4695,Runes.WATER_RUNE,Runes.AIR_RUNE),
|
||||||
DUST_RUNE(4696, Runes.AIR_RUNE,Runes.EARTH_RUNE),
|
DUST_RUNE(4696, Runes.AIR_RUNE,Runes.EARTH_RUNE),
|
||||||
SMOKE_RUNE(4697,Runes.FIRE_RUNE,Runes.AIR_RUNE),
|
SMOKE_RUNE(4697,Runes.FIRE_RUNE,Runes.AIR_RUNE),
|
||||||
MUD_RUNE(4698,Runes.EARTH_RUNE,Runes.WATER_RUNE);
|
MUD_RUNE(4698,Runes.EARTH_RUNE,Runes.WATER_RUNE),
|
||||||
|
ELEMENTAL_RUNE(12850, Runes.AIR_RUNE, Runes.WATER_RUNE, Runes.EARTH_RUNE, Runes.FIRE_RUNE),
|
||||||
|
CATALYTIC_RUNE(12851, Runes.MIND_RUNE, Runes.CHAOS_RUNE, Runes.DEATH_RUNE, Runes.BLOOD_RUNE, Runes.SOUL_RUNE, Runes.ASTRAL_RUNE);
|
||||||
|
|
||||||
public Runes[] types;
|
public Runes[] types;
|
||||||
public int id;
|
public int id;
|
||||||
|
|
|
||||||
|
|
@ -399,7 +399,13 @@ public enum SummoningPouch {
|
||||||
/**
|
/**
|
||||||
* Represents a steel titan pouch.
|
* Represents a steel titan pouch.
|
||||||
*/
|
*/
|
||||||
STEEL_TITAN_POUCH(76, 12790, 99, 435.2, 7343, 4.9, 10, new Item(12160), new Item(1119), new Item(12155), new Item(12183, 178));
|
STEEL_TITAN_POUCH(76, 12790, 99, 435.2, 7343, 4.9, 10, new Item(12160), new Item(1119), new Item(12155), new Item(12183, 178)),
|
||||||
|
|
||||||
|
SACRED_CLAY_POUCH_1(-1, 14422, 1, 0, 8240, 0, 1, new Item(14182)),
|
||||||
|
SACRED_CLAY_POUCH_2(-1, 14424, 20, 0, 8242, 0, 3, new Item(14184)),
|
||||||
|
SACRED_CLAY_POUCH_3(-1, 14426, 40, 0, 8244, 0, 5, new Item(14186)),
|
||||||
|
SACRED_CLAY_POUCH_4(-1, 14428, 60, 0, 8246, 0, 7, new Item(14188)),
|
||||||
|
SACRED_CLAY_POUCH_5(-1, 14430, 80, 0, 8248, 0, 9, new Item(14190));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The mapping.
|
* The mapping.
|
||||||
|
|
@ -564,4 +570,4 @@ public enum SummoningPouch {
|
||||||
return slot;
|
return slot;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,12 @@ package core.game.node.entity.skill.summoning;
|
||||||
public enum SummoningScroll {
|
public enum SummoningScroll {
|
||||||
HOWL_SCROLL(0, 12425, 0.1, 1, 12047), DREADFOWL_STRIKE_SCROLL(1, 12445, 0.1, 4, 12043), EGG_SPAWN_SCROLL(2, 12428, 0.2, 10, 12059), SLIME_SPRAY_SCROLL(3, 12459, 0.2, 13, 12019), STONY_SHELL_SCROLL(4, 12533, 0.2, 16, 12009), PESTER_SCROLL(5, 12838, 0.5, 17, 12778), ELECTRIC_LASH_SCROLL(6, 12460, 0.4, 18, 12049), VENOM_SHOT_SCROLL(7, 12432, 0.9, 19, 12055), FIREBALL_ASSAULT_SCROLL(8, 12839, 1.1, 22, 12808), CHEESE_FEAST_SCROLL(9, 12430, 2.3, 23, 12067), SANDSTORM_SCROLL(10, 12446, 2.5, 25, 12063), GENERATE_COMPOST_SCROLL(11, 12440, 0.6, 28, 12091), EXPLODE_SCROLL(12, 12834, 2.9, 29, 12800), VAMPYRE_TOUCH_SCROLL(13, 12447, 1.5, 31, 12053), INSANE_FEROCITY_SCROLL(14, 12433, 1.6, 32, 12065), MULTICHOP_SCROLL(15, 12429, 0.7, 33, 12021), CALL_TO_ARMS_SCROLL1(16, 12443, 0.7, 34, 12818), CALL_TO_ARMS_SCROLL2(17, 12443, 0.7, 34, 12814), CALL_TO_ARMS_SCROLL3(18, 12443, 0.7, 34, 12780), CALL_TO_ARMS_SCROLL4(19, 12443, 0.7, 34, 12798), BRONZE_BULL_RUSH_SCROLL(64, 12461, 3.6, 36, 12073), UNBURDEN_SCROLL(20, 12431, 0.6, 40, 12087), HERBCALL_SCROLL(21, 12422, 0.8, 41, 12071), EVIL_FLAMES_SCROLL(22, 12448, 2.1, 42, 12051), PETRIFYING_GAZE_SCROLL1(23, 12458, 0.9, 43, 12095), PETRIFYING_GAZE_SCROLL2(24, 12458, 0.9, 43, 12097), PETRIFYING_GAZE_SCROLL3(25, 12458, 0.9, 43, 12099), PETRIFYING_GAZE_SCROLL4(26, 12458, 0.9, 43, 12101), PETRIFYING_GAZE_SCROLL5(27, 12458, 0.9, 43, 12103), PETRIFYING_GAZE_SCROLL6(28, 12458, 0.9, 43, 12105), PETRIFYING_GAZE_SCROLL7(29, 12458, 0.9, 43, 12107), IRON_BULL_RUSH_SCROLL(65, 12462, 4.6, 46, 12075), IMMENSE_HEAT_SCROLL(30, 12829, 2.3, 46, 12816), THIEVING_FINGERS_SCROLL(31, 12426, 47, 167, 12041), BLOOD_DRAIN_SCROLL(32, 12444, 2.4, 49, 12061), TIRELESS_RUN_SCROLL(33, 12441, 0.8, 52, 12007), ABYSSAL_DRAIN_SCROLL(34, 12454, 1.1, 54, 12035), DISSOLVE_SCROLL(35, 12453, 5.5, 55, 12027), STEEL_BULL_RUSH_SCROLL(66, 12463, 5.6, 56, 12077), FISH_RAIN_SCROLL(36, 12424, 1.1, 56, 12531), AMBUSH_SCROLL(37, 12836, 5.7, 57, 12812), RENDING_SCROLL(38, 12840, 5.7, 57, 12784), GOAD_SCROLL(39, 12835, 5.7, 57, 12810), DOOMSPHERE_SCROLL(40, 12455, 5.8, 58, -1), DUST_CLOUD_SCROLL(41, 12468, 3.0, 61, 12085), ABYSSAL_STEALTH_SCROLL(42, 12427, 1.9, 62, 12037), OPHIDIAN_INCUBATION_SCROLL(43, 12436, 3.1, 63, 12015), POISONOUS_BLAST_SCROLL(44, 12467, 3.2, 64, 12045), MITHRIL_BULL_RUSH_SCROLL(67, 12464, 6.6, 66, 12079), TOAD_BARK_SCROLL(45, 12452, 1.0, 66, 12123), TESTUDO_SCROLL(46, 12439, 0.7, 67, 12031), SWALLOW_WHOLE_SCROLL(47, 12438, 1.4, 68, 12029), FRUITFALL_SCROLL(48, 12423, 1.4, 69, 12033), FAMINE_SCROLL(49, 12830, 1.5, 70, 12820), ARCTIC_BLAST_SCROLL(50, 12451, 1.1, 71, 12057),
|
HOWL_SCROLL(0, 12425, 0.1, 1, 12047), DREADFOWL_STRIKE_SCROLL(1, 12445, 0.1, 4, 12043), EGG_SPAWN_SCROLL(2, 12428, 0.2, 10, 12059), SLIME_SPRAY_SCROLL(3, 12459, 0.2, 13, 12019), STONY_SHELL_SCROLL(4, 12533, 0.2, 16, 12009), PESTER_SCROLL(5, 12838, 0.5, 17, 12778), ELECTRIC_LASH_SCROLL(6, 12460, 0.4, 18, 12049), VENOM_SHOT_SCROLL(7, 12432, 0.9, 19, 12055), FIREBALL_ASSAULT_SCROLL(8, 12839, 1.1, 22, 12808), CHEESE_FEAST_SCROLL(9, 12430, 2.3, 23, 12067), SANDSTORM_SCROLL(10, 12446, 2.5, 25, 12063), GENERATE_COMPOST_SCROLL(11, 12440, 0.6, 28, 12091), EXPLODE_SCROLL(12, 12834, 2.9, 29, 12800), VAMPYRE_TOUCH_SCROLL(13, 12447, 1.5, 31, 12053), INSANE_FEROCITY_SCROLL(14, 12433, 1.6, 32, 12065), MULTICHOP_SCROLL(15, 12429, 0.7, 33, 12021), CALL_TO_ARMS_SCROLL1(16, 12443, 0.7, 34, 12818), CALL_TO_ARMS_SCROLL2(17, 12443, 0.7, 34, 12814), CALL_TO_ARMS_SCROLL3(18, 12443, 0.7, 34, 12780), CALL_TO_ARMS_SCROLL4(19, 12443, 0.7, 34, 12798), BRONZE_BULL_RUSH_SCROLL(64, 12461, 3.6, 36, 12073), UNBURDEN_SCROLL(20, 12431, 0.6, 40, 12087), HERBCALL_SCROLL(21, 12422, 0.8, 41, 12071), EVIL_FLAMES_SCROLL(22, 12448, 2.1, 42, 12051), PETRIFYING_GAZE_SCROLL1(23, 12458, 0.9, 43, 12095), PETRIFYING_GAZE_SCROLL2(24, 12458, 0.9, 43, 12097), PETRIFYING_GAZE_SCROLL3(25, 12458, 0.9, 43, 12099), PETRIFYING_GAZE_SCROLL4(26, 12458, 0.9, 43, 12101), PETRIFYING_GAZE_SCROLL5(27, 12458, 0.9, 43, 12103), PETRIFYING_GAZE_SCROLL6(28, 12458, 0.9, 43, 12105), PETRIFYING_GAZE_SCROLL7(29, 12458, 0.9, 43, 12107), IRON_BULL_RUSH_SCROLL(65, 12462, 4.6, 46, 12075), IMMENSE_HEAT_SCROLL(30, 12829, 2.3, 46, 12816), THIEVING_FINGERS_SCROLL(31, 12426, 47, 167, 12041), BLOOD_DRAIN_SCROLL(32, 12444, 2.4, 49, 12061), TIRELESS_RUN_SCROLL(33, 12441, 0.8, 52, 12007), ABYSSAL_DRAIN_SCROLL(34, 12454, 1.1, 54, 12035), DISSOLVE_SCROLL(35, 12453, 5.5, 55, 12027), STEEL_BULL_RUSH_SCROLL(66, 12463, 5.6, 56, 12077), FISH_RAIN_SCROLL(36, 12424, 1.1, 56, 12531), AMBUSH_SCROLL(37, 12836, 5.7, 57, 12812), RENDING_SCROLL(38, 12840, 5.7, 57, 12784), GOAD_SCROLL(39, 12835, 5.7, 57, 12810), DOOMSPHERE_SCROLL(40, 12455, 5.8, 58, -1), DUST_CLOUD_SCROLL(41, 12468, 3.0, 61, 12085), ABYSSAL_STEALTH_SCROLL(42, 12427, 1.9, 62, 12037), OPHIDIAN_INCUBATION_SCROLL(43, 12436, 3.1, 63, 12015), POISONOUS_BLAST_SCROLL(44, 12467, 3.2, 64, 12045), MITHRIL_BULL_RUSH_SCROLL(67, 12464, 6.6, 66, 12079), TOAD_BARK_SCROLL(45, 12452, 1.0, 66, 12123), TESTUDO_SCROLL(46, 12439, 0.7, 67, 12031), SWALLOW_WHOLE_SCROLL(47, 12438, 1.4, 68, 12029), FRUITFALL_SCROLL(48, 12423, 1.4, 69, 12033), FAMINE_SCROLL(49, 12830, 1.5, 70, 12820), ARCTIC_BLAST_SCROLL(50, 12451, 1.1, 71, 12057),
|
||||||
// RISE_FROM_THE_ASHES_SCROLL(51, 14622, 8.0, 277, -1),
|
// RISE_FROM_THE_ASHES_SCROLL(51, 14622, 8.0, 277, -1),
|
||||||
VOLCANIC_STRENGTH_SCROLL(51, 12826, 7.3, 73, 12792), CRUSHING_CLAW_SCROLL(52, 12449, 3.7, 74, 12069), MANTIS_STRIKE_SCROLL(53, 12450, 3.7, 75, 12011), INFERNO_SCROLL(54, 12841, 1.5, 76, 12782), ADAMANT_BULL_RUSH_SCROLL(68, 12465, 7.6, 76, 12081), DEADLY_CLAW_SCROLL(55, 12831, 11.0, 77, 12162), ACORN_MISSILE_SCROLL(56, 12457, 1.6, 78, 12013), TITANS_CONSTITUTION_SCROLL1(57, 12824, 7.9, 79, 12802), TITANS_CONSTITUTION_SCROLL2(58, 12824, 7.9, 79, 12806), TITANS_CONSTITUTION_SCROLL3(59, 12824, 7.9, 79, 12804), REGROWTH_SCROLL(60, 12442, 1.6, 80, 12025), SPIKE_SHOT_SCROLL(61, 12456, 4.1, 83, 12017), EBON_THUNDER_SCROLL(62, 12837, 8.3, 83, 12788), SWAMP_PLAGUE_SCROLL(63, 12832, 4.1, 85, 12776), RUNE_BULL_RUSH_SCROLL(69, 12466, 8.6, 86, 12083), HEALING_AURA_SCROLL(70, 12434, 1.8, 88, 12039), BOIL_SCROLL(71, 12833, 8.9, 89, 12786), MAGIC_FOCUS_SCROLL(72, 12437, 4.6, 92, 12089), ESSENCE_SHIPMENT_SCROLL(73, 12827, 1.9, 93, 12796), IRON_WITHIN_SCROLL(74, 12828, 4.7, 95, 12822), WINTER_STORAGE_SCROLL(75, 12435, 4.8, 96, 12093), STEEL_OF_LEGENDS_SCROLL(76, 12825, 4.9, 99, 12790);
|
VOLCANIC_STRENGTH_SCROLL(51, 12826, 7.3, 73, 12792), CRUSHING_CLAW_SCROLL(52, 12449, 3.7, 74, 12069), MANTIS_STRIKE_SCROLL(53, 12450, 3.7, 75, 12011), INFERNO_SCROLL(54, 12841, 1.5, 76, 12782), ADAMANT_BULL_RUSH_SCROLL(68, 12465, 7.6, 76, 12081), DEADLY_CLAW_SCROLL(55, 12831, 11.0, 77, 12162), ACORN_MISSILE_SCROLL(56, 12457, 1.6, 78, 12013), TITANS_CONSTITUTION_SCROLL1(57, 12824, 7.9, 79, 12802), TITANS_CONSTITUTION_SCROLL2(58, 12824, 7.9, 79, 12806), TITANS_CONSTITUTION_SCROLL3(59, 12824, 7.9, 79, 12804), REGROWTH_SCROLL(60, 12442, 1.6, 80, 12025), SPIKE_SHOT_SCROLL(61, 12456, 4.1, 83, 12017), EBON_THUNDER_SCROLL(62, 12837, 8.3, 83, 12788), SWAMP_PLAGUE_SCROLL(63, 12832, 4.1, 85, 12776), RUNE_BULL_RUSH_SCROLL(69, 12466, 8.6, 86, 12083), HEALING_AURA_SCROLL(70, 12434, 1.8, 88, 12039), BOIL_SCROLL(71, 12833, 8.9, 89, 12786), MAGIC_FOCUS_SCROLL(72, 12437, 4.6, 92, 12089), ESSENCE_SHIPMENT_SCROLL(73, 12827, 1.9, 93, 12796), IRON_WITHIN_SCROLL(74, 12828, 4.7, 95, 12822), WINTER_STORAGE_SCROLL(75, 12435, 4.8, 96, 12093), STEEL_OF_LEGENDS_SCROLL(76, 12825, 4.9, 99, 12790),
|
||||||
|
CLAY_DEPOSIT_SCROLL_1(-1, 14421, 0, 1, 14422),
|
||||||
|
CLAY_DEPOSIT_SCROLL_2(-1, 14421, 0, 20, 14424),
|
||||||
|
CLAY_DEPOSIT_SCROLL_3(-1, 14421, 0, 40, 14426),
|
||||||
|
CLAY_DEPOSIT_SCROLL_4(-1, 14421, 0, 60, 14428),
|
||||||
|
CLAY_DEPOSIT_SCROLL_5(-1, 14421, 0, 80, 14430);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The level required.
|
* The level required.
|
||||||
|
|
@ -131,4 +136,4 @@ public enum SummoningScroll {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -270,4 +270,4 @@ public final class SceneryBuilder {
|
||||||
RegionManager.getRegionChunk(o.getLocation()).flag(new ObjectUpdateFlag(o, !o.isActive()));
|
RegionManager.getRegionChunk(o.getLocation()).flag(new ObjectUpdateFlag(o, !o.isActive()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -278,4 +278,4 @@ public class BuildRegionChunk extends RegionChunk {
|
||||||
public Scenery[][] getObjects(int index) {
|
public Scenery[][] getObjects(int index) {
|
||||||
return objects[index];
|
return objects[index];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@ import core.cache.Cache;
|
||||||
import core.game.node.entity.npc.NPC;
|
import core.game.node.entity.npc.NPC;
|
||||||
import core.game.node.entity.player.Player;
|
import core.game.node.entity.player.Player;
|
||||||
import core.game.node.entity.player.link.music.MusicZone;
|
import core.game.node.entity.player.link.music.MusicZone;
|
||||||
|
import core.game.node.scenery.Scenery;
|
||||||
|
import core.game.node.scenery.SceneryBuilder;
|
||||||
import core.game.system.task.Pulse;
|
import core.game.system.task.Pulse;
|
||||||
import core.game.world.map.build.DynamicRegion;
|
import core.game.world.map.build.DynamicRegion;
|
||||||
import core.game.world.map.build.LandscapeParser;
|
import core.game.world.map.build.LandscapeParser;
|
||||||
|
|
@ -19,6 +21,7 @@ import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import kotlin.Pair;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a region.
|
* Represents a region.
|
||||||
|
|
@ -45,7 +48,7 @@ public class Region {
|
||||||
/**
|
/**
|
||||||
* The region planes.
|
* The region planes.
|
||||||
*/
|
*/
|
||||||
private final RegionPlane[] planes = new RegionPlane[4];
|
protected final RegionPlane[] planes = new RegionPlane[4];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The activity pulse.
|
* The activity pulse.
|
||||||
|
|
@ -226,6 +229,15 @@ public class Region {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void sendUpdateSceneGraph(boolean login) {
|
||||||
|
for (int z = 0; z < 4; z++) {
|
||||||
|
for (Player p : this.getPlanes()[z].getPlayers()) {
|
||||||
|
p.updateSceneGraph(login);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if this region has the inactivity flagging pulse running.
|
* Checks if this region has the inactivity flagging pulse running.
|
||||||
* @return {@code True} if so.
|
* @return {@code True} if so.
|
||||||
|
|
@ -546,4 +558,10 @@ public class Region {
|
||||||
public void setUpdateAllPlanes(boolean updateAllPlanes) {
|
public void setUpdateAllPlanes(boolean updateAllPlanes) {
|
||||||
this.updateAllPlanes = updateAllPlanes;
|
this.updateAllPlanes = updateAllPlanes;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public void transformAllSceneryById(Pair<Integer, Integer>[] ids, boolean clip, boolean permanent) {
|
||||||
|
for(RegionPlane rp : getPlanes()) {
|
||||||
|
rp.transformAllSceneryById(ids, clip, permanent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import core.game.node.entity.player.Player;
|
||||||
import core.game.node.item.GroundItem;
|
import core.game.node.item.GroundItem;
|
||||||
import core.game.node.item.Item;
|
import core.game.node.item.Item;
|
||||||
import core.game.node.scenery.Scenery;
|
import core.game.node.scenery.Scenery;
|
||||||
|
import core.game.node.scenery.SceneryBuilder;
|
||||||
import rs09.game.system.SystemLogger;
|
import rs09.game.system.SystemLogger;
|
||||||
import core.game.world.map.build.DynamicRegion;
|
import core.game.world.map.build.DynamicRegion;
|
||||||
import core.game.world.map.build.LandscapeParser;
|
import core.game.world.map.build.LandscapeParser;
|
||||||
|
|
@ -15,7 +16,9 @@ import core.net.packet.out.ConstructScenery;
|
||||||
import core.net.packet.out.UpdateAreaPosition;
|
import core.net.packet.out.UpdateAreaPosition;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.function.Function;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import kotlin.Pair;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a region chunk.
|
* Represents a region chunk.
|
||||||
|
|
@ -365,4 +368,38 @@ public class RegionChunk {
|
||||||
this.currentBase = currentBase;
|
this.currentBase = currentBase;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
public void transformAllSceneryById(Pair<Integer, Integer>[] ids, boolean clip, boolean permanent) {
|
||||||
|
/*for(int i = 0; i < 8; i++) {
|
||||||
|
for(int j = 0; j < 8; j++) {
|
||||||
|
for(Scenery s : getObjects(i, j)) {
|
||||||
|
for(Pair<Integer, Integer> id : ids) {
|
||||||
|
if(s != null && s.getId() == id.getFirst()) {
|
||||||
|
SceneryBuilder.replace(s, s.transform(id.getSecond()), clip, permanent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
transformAllSceneryByFunction(clip, permanent, (Scenery s) -> {
|
||||||
|
for(Pair<Integer, Integer> id : ids) {
|
||||||
|
if(s != null && s.getId() == id.getFirst()) {
|
||||||
|
return s.transform(id.getSecond());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void transformAllSceneryByFunction(boolean clip, boolean permanent, Function<Scenery, Scenery> f) {
|
||||||
|
for(int i = 0; i < 8; i++) {
|
||||||
|
for(int j = 0; j < 8; j++) {
|
||||||
|
for(Scenery s : getObjects(i, j)) {
|
||||||
|
Scenery t = f.apply(s);
|
||||||
|
if(s != t) {
|
||||||
|
SceneryBuilder.replace(s, t, clip, permanent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
import kotlin.Pair;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents one of the 4 planes of a region.
|
* Represents one of the 4 planes of a region.
|
||||||
|
|
@ -418,4 +419,12 @@ public final class RegionPlane {
|
||||||
return chunks;
|
return chunks;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
public void transformAllSceneryById(Pair<Integer, Integer>[] ids, boolean clip, boolean permanent) {
|
||||||
|
for(int x = 0; x < 8; x++) {
|
||||||
|
for(int y = 0; y < 8; y++) {
|
||||||
|
RegionChunk rc = getChunks()[x][y];
|
||||||
|
rc.transformAllSceneryById(ids, clip, permanent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -152,4 +152,4 @@ public final class Viewport {
|
||||||
this.currentPlane = currentPlane;
|
this.currentPlane = currentPlane;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,11 +34,6 @@ public final class DynamicRegion extends Region {
|
||||||
*/
|
*/
|
||||||
private final int regionId;
|
private final int regionId;
|
||||||
|
|
||||||
/**
|
|
||||||
* The region chunks.
|
|
||||||
*/
|
|
||||||
private final RegionChunk[][][] chunks;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The zone borders.
|
* The zone borders.
|
||||||
*/
|
*/
|
||||||
|
|
@ -75,7 +70,6 @@ public final class DynamicRegion extends Region {
|
||||||
public DynamicRegion(int regionId, int x, int y) {
|
public DynamicRegion(int regionId, int x, int y) {
|
||||||
super(x, y);
|
super(x, y);
|
||||||
this.regionId = regionId;
|
this.regionId = regionId;
|
||||||
this.chunks = new RegionChunk[4][SIZE >> 3][SIZE >> 3];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -95,12 +89,12 @@ public final class DynamicRegion extends Region {
|
||||||
* @param regionTwo The second/last region.
|
* @param regionTwo The second/last region.
|
||||||
* @return The new region.
|
* @return The new region.
|
||||||
*/
|
*/
|
||||||
public static DynamicRegion create(int regionOne, int regionTwo) {
|
public static DynamicRegion[] create(int regionOne, int regionTwo) {
|
||||||
int x = (regionOne >> 8) << 6;
|
int x = (regionOne >> 8) << 6;
|
||||||
int y = (regionOne & 0xFF) << 6;
|
int y = (regionOne & 0xFF) << 6;
|
||||||
int x1 = (regionTwo >> 8) << 6;
|
int x1 = (regionTwo >> 8) << 6;
|
||||||
int y1 = (regionTwo & 0xFF) << 6;
|
int y1 = (regionTwo & 0xFF) << 6;
|
||||||
return create(new ZoneBorders(x, y, x1 + SIZE, y1 + SIZE))[0];
|
return create(new ZoneBorders(x, y, x1 + SIZE, y1 + SIZE));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -134,11 +128,7 @@ public final class DynamicRegion extends Region {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (Region r : regions) {
|
for (Region r : regions) {
|
||||||
for (int z = 0; z < 4; z++) {
|
r.sendUpdateSceneGraph(false);
|
||||||
for (Player p : r.getPlanes()[z].getPlayers()) {
|
|
||||||
p.updateSceneGraph(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return regions.toArray(new DynamicRegion[regions.size()]);
|
return regions.toArray(new DynamicRegion[regions.size()]);
|
||||||
}
|
}
|
||||||
|
|
@ -211,12 +201,13 @@ public final class DynamicRegion extends Region {
|
||||||
int x = regionX + (offsetX << 3);
|
int x = regionX + (offsetX << 3);
|
||||||
int y = regionY + (offsetY << 3);
|
int y = regionY + (offsetY << 3);
|
||||||
for (int plane = 0; plane < 4; plane++) {
|
for (int plane = 0; plane < 4; plane++) {
|
||||||
RegionChunk c = region.chunks[plane][offsetX][offsetY];
|
RegionChunk c = region.planes[plane].getChunks()[offsetX][offsetY];
|
||||||
if (c == null) {
|
if (c == null) {
|
||||||
region.chunks[plane][offsetX][offsetY] = c = new RegionChunk(Location.create(0, 0, 0), 0, region.getPlanes()[plane]);
|
region.planes[plane].getChunks()[offsetX][offsetY] = c = new RegionChunk(Location.create(0, 0, 0), 0, region.getPlanes()[plane]);
|
||||||
}
|
}
|
||||||
c.setRotation(0);
|
c.setRotation(0);
|
||||||
c.setBase(Location.create(x, y, plane));
|
c.setBase(Location.create(x, y, plane));
|
||||||
|
c.setCurrentBase(region.getBaseLocation().transform(offsetX << 3, offsetY << 3, 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -267,10 +258,10 @@ public final class DynamicRegion extends Region {
|
||||||
*/
|
*/
|
||||||
public void rotate() {
|
public void rotate() {
|
||||||
for (int z = 0; z < 4; z++) {
|
for (int z = 0; z < 4; z++) {
|
||||||
RegionChunk[][] c = Arrays.copyOf(chunks[z], 8);
|
RegionChunk[][] c = Arrays.copyOf(planes[z].getChunks(), 8);
|
||||||
for (int x = 0; x < 8; x++) {
|
for (int x = 0; x < 8; x++) {
|
||||||
for (int y = 0; y < 8; y++) {
|
for (int y = 0; y < 8; y++) {
|
||||||
RegionChunk r = chunks[z][x][y] = c[8 - y - 1][x];
|
RegionChunk r = planes[z].getChunks()[x][y] = c[8 - y - 1][x].copy(planes[z]);
|
||||||
if (r != null) {
|
if (r != null) {
|
||||||
r.setRotation(r.getRotation() + 1);
|
r.setRotation(r.getRotation() + 1);
|
||||||
}
|
}
|
||||||
|
|
@ -287,8 +278,7 @@ public final class DynamicRegion extends Region {
|
||||||
* @param chunk The chunk to set.
|
* @param chunk The chunk to set.
|
||||||
*/
|
*/
|
||||||
public void setChunk(int z, int x, int y, RegionChunk chunk) {
|
public void setChunk(int z, int x, int y, RegionChunk chunk) {
|
||||||
chunks[z][x][y] = chunk;
|
planes[z].getChunks()[x][y] = chunk.copy(planes[z]);
|
||||||
getPlanes()[z].getChunks()[x][y] = chunk;
|
|
||||||
if (chunk != null) {
|
if (chunk != null) {
|
||||||
chunk.setCurrentBase(getBaseLocation().transform(x << 3, y << 3, 0));
|
chunk.setCurrentBase(getBaseLocation().transform(x << 3, y << 3, 0));
|
||||||
}
|
}
|
||||||
|
|
@ -303,16 +293,18 @@ public final class DynamicRegion extends Region {
|
||||||
* @param fromRegion The region the chunk is copied from.
|
* @param fromRegion The region the chunk is copied from.
|
||||||
*/
|
*/
|
||||||
public void replaceChunk(int z, int x, int y, RegionChunk chunk, Region fromRegion) {
|
public void replaceChunk(int z, int x, int y, RegionChunk chunk, Region fromRegion) {
|
||||||
|
if(fromRegion instanceof DynamicRegion) {
|
||||||
|
fromRegion = RegionManager.forId(fromRegion.getRegionId());
|
||||||
|
}
|
||||||
Region.load(DynamicRegion.this);
|
Region.load(DynamicRegion.this);
|
||||||
RegionPlane p = getPlanes()[z];
|
RegionPlane p = planes[z];
|
||||||
chunks[z][x][y] = chunk;
|
|
||||||
p.getChunks()[x][y] = chunk;
|
|
||||||
if (chunk == null) {
|
if (chunk == null) {
|
||||||
|
p.getChunks()[x][y] = null;
|
||||||
for (int i = x << 3; i < (x + 1) << 3; i++) {
|
for (int i = x << 3; i < (x + 1) << 3; i++) {
|
||||||
for (int j = y << 3; j < (y + 1) << 3; j++) {
|
for (int j = y << 3; j < (y + 1) << 3; j++) {
|
||||||
p.getFlags().getClippingFlags()[i][j] = -1;
|
p.getFlags().getClippingFlags()[i][j] = -1;
|
||||||
p.getProjectileFlags().getClippingFlags()[i][j] = -1;
|
p.getProjectileFlags().getClippingFlags()[i][j] = -1;
|
||||||
Scenery object = p.getObjects()[i][j];
|
Scenery object = p.getChunkObject(i, j);
|
||||||
if (object != null) {
|
if (object != null) {
|
||||||
LandscapeParser.removeScenery(object);
|
LandscapeParser.removeScenery(object);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -321,10 +313,11 @@ public final class DynamicRegion extends Region {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
chunk.clear();
|
RegionChunk newChunk = p.getChunks()[x][y] = chunk.copy(p);
|
||||||
|
newChunk.clear();
|
||||||
Region.load(fromRegion);
|
Region.load(fromRegion);
|
||||||
Location l = chunk.getBase();
|
Location l = newChunk.getBase();
|
||||||
chunk.setCurrentBase(getBaseLocation().transform(x << 3, y << 3, 0));
|
newChunk.setCurrentBase(getBaseLocation().transform(x << 3, y << 3, 0));
|
||||||
Location regionBase = fromRegion.getBaseLocation();
|
Location regionBase = fromRegion.getBaseLocation();
|
||||||
RegionPlane rp = fromRegion.getPlanes()[l.getZ()];
|
RegionPlane rp = fromRegion.getPlanes()[l.getZ()];
|
||||||
for (int i = 0; i < 8; i++) {
|
for (int i = 0; i < 8; i++) {
|
||||||
|
|
@ -379,7 +372,7 @@ public final class DynamicRegion extends Region {
|
||||||
NPC npc = plane.getNpcs().get(0);
|
NPC npc = plane.getNpcs().get(0);
|
||||||
npc.clear();
|
npc.clear();
|
||||||
}
|
}
|
||||||
for (RegionChunk[] chunks : getChunks()[plane.getPlane()]) {
|
for (RegionChunk[] chunks : getPlanes()[plane.getPlane()].getChunks()) {
|
||||||
for (RegionChunk chunk : chunks) {
|
for (RegionChunk chunk : chunks) {
|
||||||
if (chunk != null) {
|
if (chunk != null) {
|
||||||
for (Iterator<GroundItem> it = chunk.getItems().iterator(); it.hasNext();) {
|
for (Iterator<GroundItem> it = chunk.getItems().iterator(); it.hasNext();) {
|
||||||
|
|
@ -406,14 +399,6 @@ public final class DynamicRegion extends Region {
|
||||||
return regionId;
|
return regionId;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the chunks.
|
|
||||||
* @return The chunks.
|
|
||||||
*/
|
|
||||||
public RegionChunk[][][] getChunks() {
|
|
||||||
return chunks;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the borders.
|
* Gets the borders.
|
||||||
* @return The borders.
|
* @return The borders.
|
||||||
|
|
@ -476,4 +461,4 @@ public final class DynamicRegion extends Region {
|
||||||
}
|
}
|
||||||
NPCs.clear();
|
NPCs.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,8 @@ public final class LandscapeParser {
|
||||||
*/
|
*/
|
||||||
public static void addScenery(Scenery object, boolean landscape) {
|
public static void addScenery(Scenery object, boolean landscape) {
|
||||||
Location l = object.getLocation();
|
Location l = object.getLocation();
|
||||||
flagScenery(RegionManager.getRegionPlane(l), l.getLocalX(), l.getLocalY(), object, landscape, false);
|
RegionPlane rp = RegionManager.getRegionPlane(l);
|
||||||
|
flagScenery(rp, l.getLocalX(), l.getLocalY(), object, landscape, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -214,4 +215,4 @@ public final class LandscapeParser {
|
||||||
}
|
}
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,4 +52,4 @@ public class ObjectUpdateFlag extends UpdateFlag<Object> {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,7 @@ public final class PacketRepository {
|
||||||
OUTGOING_PACKETS.put(InstancedLocationUpdate.class, new InstancedLocationUpdate()); //
|
OUTGOING_PACKETS.put(InstancedLocationUpdate.class, new InstancedLocationUpdate()); //
|
||||||
OUTGOING_PACKETS.put(CSConfigPacket.class, new CSConfigPacket()); //
|
OUTGOING_PACKETS.put(CSConfigPacket.class, new CSConfigPacket()); //
|
||||||
OUTGOING_PACKETS.put(Varbit.class, new Varbit());
|
OUTGOING_PACKETS.put(Varbit.class, new Varbit());
|
||||||
|
OUTGOING_PACKETS.put(VarcUpdate.class, new VarcUpdate());
|
||||||
INCOMING_PACKETS.put(22, new ClientFocusPacket());
|
INCOMING_PACKETS.put(22, new ClientFocusPacket());
|
||||||
INCOMING_PACKETS.put(93, new PingPacketHandler());
|
INCOMING_PACKETS.put(93, new PingPacketHandler());
|
||||||
INCOMING_PACKETS.put(44, new CommandPacket());
|
INCOMING_PACKETS.put(44, new CommandPacket());
|
||||||
|
|
@ -204,4 +205,4 @@ public final class PacketRepository {
|
||||||
public static IncomingPacket getIncoming(int opcode) {
|
public static IncomingPacket getIncoming(int opcode) {
|
||||||
return INCOMING_PACKETS.get(opcode);
|
return INCOMING_PACKETS.get(opcode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
package core.net.packet.context;
|
||||||
|
|
||||||
|
import core.game.node.entity.player.Player;
|
||||||
|
import core.net.packet.Context;
|
||||||
|
|
||||||
|
public class VarcUpdateContext implements Context {
|
||||||
|
|
||||||
|
Player player;
|
||||||
|
public int varcId;
|
||||||
|
public int value;
|
||||||
|
|
||||||
|
public VarcUpdateContext(Player player, int varcId, int value){
|
||||||
|
this.player = player;
|
||||||
|
this.varcId = varcId;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Player getPlayer() {
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -39,7 +39,7 @@ public final class BuildDynamicScene implements OutgoingPacket<DynamicSceneConte
|
||||||
r = RegionManager.forId((x >> 3) << 8 | (y >> 3));
|
r = RegionManager.forId((x >> 3) << 8 | (y >> 3));
|
||||||
if (r instanceof DynamicRegion) {
|
if (r instanceof DynamicRegion) {
|
||||||
DynamicRegion dr = (DynamicRegion) r;
|
DynamicRegion dr = (DynamicRegion) r;
|
||||||
chunks[z][x - baseX][y - baseY] = dr.getChunks()[z][x - (dr.getX() << 3)][y - (dr.getY() << 3)];
|
chunks[z][x - baseX][y - baseY] = dr.getPlanes()[z].getChunks()[x - (dr.getX() << 3)][y - (dr.getY() << 3)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -75,4 +75,4 @@ public final class BuildDynamicScene implements OutgoingPacket<DynamicSceneConte
|
||||||
player.getPlayerFlags().setLastSceneGraph(player.getLocation());
|
player.getPlayerFlags().setLastSceneGraph(player.getLocation());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,4 +33,4 @@ public final class ConstructScenery implements OutgoingPacket<BuildSceneryContex
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
26
Server/src/main/java/core/net/packet/out/VarcUpdate.java
Normal file
26
Server/src/main/java/core/net/packet/out/VarcUpdate.java
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
package core.net.packet.out;
|
||||||
|
|
||||||
|
import core.game.node.entity.player.Player;
|
||||||
|
import core.net.packet.IoBuffer;
|
||||||
|
import core.net.packet.OutgoingPacket;
|
||||||
|
import core.net.packet.context.VarcUpdateContext;
|
||||||
|
|
||||||
|
public class VarcUpdate implements OutgoingPacket<VarcUpdateContext> {
|
||||||
|
@Override
|
||||||
|
public void send(VarcUpdateContext varcUpdateContext) {
|
||||||
|
Player player = varcUpdateContext.getPlayer();
|
||||||
|
if(varcUpdateContext.value <= 255) {
|
||||||
|
IoBuffer buffer = new IoBuffer(65);
|
||||||
|
buffer.putLEShort(player.getInterfaceManager().getPacketCount(1));
|
||||||
|
buffer.putC((byte) varcUpdateContext.value);
|
||||||
|
buffer.putLEShortA(varcUpdateContext.varcId);
|
||||||
|
player.getSession().write(buffer);
|
||||||
|
} else {
|
||||||
|
IoBuffer buffer = new IoBuffer(69);
|
||||||
|
buffer.putLEShortA(player.getInterfaceManager().getPacketCount(1));
|
||||||
|
buffer.putInt(varcUpdateContext.value);
|
||||||
|
buffer.putShortA(varcUpdateContext.varcId);
|
||||||
|
player.getSession().write(buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -120,7 +120,9 @@ class EquipHandler : InteractionListener() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
InteractionListeners.run(itemId,player,item,false)
|
if(!InteractionListeners.run(itemId,player,item,false)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
if (player.equipment.remove(item)) {
|
if (player.equipment.remove(item)) {
|
||||||
player.audioManager.send(Audio(2238, 10, 1))
|
player.audioManager.send(Audio(2238, 10, 1))
|
||||||
player.dialogueInterpreter.close()
|
player.dialogueInterpreter.close()
|
||||||
|
|
@ -132,4 +134,4 @@ class EquipHandler : InteractionListener() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -427,6 +427,19 @@ class MiscCommandSet : CommandSet(Command.Privilege.ADMIN){
|
||||||
|
|
||||||
player.varpManager.get(index!!).setVarbit(offset!!, value!!).send(player)
|
player.varpManager.get(index!!).setVarbit(offset!!, value!!).send(player)
|
||||||
}
|
}
|
||||||
|
define("setvarc", Command.Privilege.ADMIN) { player, args ->
|
||||||
|
if(args.size < 3){
|
||||||
|
reject(player,"Usage: ::setvarc index value")
|
||||||
|
}
|
||||||
|
val index = args[1].toShortOrNull()
|
||||||
|
val value = args[2].toIntOrNull()
|
||||||
|
|
||||||
|
if(index == null || value == null) {
|
||||||
|
reject(player,"Usage ::setvarc index value")
|
||||||
|
}
|
||||||
|
|
||||||
|
player.packetDispatch.sendVarcUpdate(index!!, value!!)
|
||||||
|
}
|
||||||
|
|
||||||
define("grow",Command.Privilege.ADMIN){player,_ ->
|
define("grow",Command.Privilege.ADMIN){player,_ ->
|
||||||
val state: FarmingState = player.states.get("farming") as FarmingState? ?: return@define
|
val state: FarmingState = player.states.get("farming") as FarmingState? ?: return@define
|
||||||
|
|
|
||||||
|
|
@ -70,5 +70,27 @@ class SpawnCommandSet : CommandSet(Command.Privilege.ADMIN){
|
||||||
SceneryBuilder.add(`object`)
|
SceneryBuilder.add(`object`)
|
||||||
SystemLogger.logInfo("object = $`object`")
|
SystemLogger.logInfo("object = $`object`")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
define("objectgrid") { player, args ->
|
||||||
|
if(args!!.size != 5) {
|
||||||
|
reject(player, "Usage: objectgrid beginId endId type rotation")
|
||||||
|
return@define
|
||||||
|
}
|
||||||
|
val beginId = args[1].toIntOrNull() ?: return@define
|
||||||
|
val endId = args[2].toIntOrNull() ?: return@define
|
||||||
|
val type = args[3].toIntOrNull() ?: return@define
|
||||||
|
val rotation = args[4].toIntOrNull() ?: return@define
|
||||||
|
for(i in 0..10) {
|
||||||
|
SceneryBuilder.add(Scenery(29447 + i, player.location.transform(i, -1, 0)))
|
||||||
|
}
|
||||||
|
for(i in beginId..endId) {
|
||||||
|
val j = i - beginId
|
||||||
|
val scenery = Scenery(i, player.location.transform(j % 10, j / 10, 0), type, rotation)
|
||||||
|
SceneryBuilder.add(scenery)
|
||||||
|
if(j % 10 == 0) {
|
||||||
|
SceneryBuilder.add(Scenery(29447 + (j / 10) % 10, player.location.transform(-1, j/10, 0)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue