Skip to content

Commit cd552b0

Browse files
committed
Some message improvements
1 parent 85a667b commit cd552b0

File tree

4 files changed

+84
-33
lines changed

4 files changed

+84
-33
lines changed

engine/src/main/kotlin/world/gregs/voidps/engine/map/collision/Collisions.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ fun Area.random(collision: CollisionStrategy = CollisionStrategies.Normal, size:
5151
val steps = get<StepValidator>()
5252
var tile = random()
5353
var exit = 100
54-
while (!canFit(steps, tile, collision, size, extraFlag)) {
54+
while (!steps.canFit(tile, collision, size, extraFlag)) {
5555
if (--exit <= 0) {
5656
return null
5757
}
@@ -60,25 +60,25 @@ fun Area.random(collision: CollisionStrategy = CollisionStrategies.Normal, size:
6060
return tile
6161
}
6262

63-
private fun canFit(steps: StepValidator, tile: Tile, collision: CollisionStrategy, size: Int, extraFlag: Int): Boolean {
63+
fun StepValidator.canFit(tile: Tile, collision: CollisionStrategy, size: Int, extraFlag: Int): Boolean {
6464
if (size != 1) {
6565
for (i in 1 until size) {
66-
if (!steps.canTravel(tile.level, tile.x - i, tile.y, 1, 0, size, extraFlag)) {
66+
if (!canTravel(tile.level, tile.x - i, tile.y, 1, 0, size, extraFlag)) {
6767
return false
6868
}
69-
if (!steps.canTravel(tile.level, tile.x, tile.y - i, 0, 1, size, extraFlag)) {
69+
if (!canTravel(tile.level, tile.x, tile.y - i, 0, 1, size, extraFlag)) {
7070
return false
7171
}
72-
if (!steps.canTravel(tile.level, tile.x + i, tile.y, -1, 0, size, extraFlag)) {
72+
if (!canTravel(tile.level, tile.x + i, tile.y, -1, 0, size, extraFlag)) {
7373
return false
7474
}
75-
if (!steps.canTravel(tile.level, tile.x, tile.y + i, 0, -1, size, extraFlag)) {
75+
if (!canTravel(tile.level, tile.x, tile.y + i, 0, -1, size, extraFlag)) {
7676
return false
7777
}
7878
}
7979
return true
8080
}
81-
return steps.canTravel(x = tile.x, z = tile.y - 1, level = tile.level, offsetX = 0, offsetZ = 1, size = size, collision = collision, extraFlag = extraFlag) || steps.canTravel(x = tile.x, z = tile.y + 1, level = tile.level, offsetX = 0, offsetZ = -1, size = size, collision = collision, extraFlag = extraFlag) || steps.canTravel(
81+
return canTravel(x = tile.x, z = tile.y - 1, level = tile.level, offsetX = 0, offsetZ = 1, size = size, collision = collision, extraFlag = extraFlag) || canTravel(x = tile.x, z = tile.y + 1, level = tile.level, offsetX = 0, offsetZ = -1, size = size, collision = collision, extraFlag = extraFlag) || canTravel(
8282
x = tile.x - 1,
8383
z = tile.y,
8484
level = tile.level,
@@ -87,5 +87,5 @@ private fun canFit(steps: StepValidator, tile: Tile, collision: CollisionStrateg
8787
size = size,
8888
collision = collision,
8989
extraFlag = extraFlag
90-
) || steps.canTravel(x = tile.x + 1, z = tile.y, level = tile.level, offsetX = -1, offsetZ = 0, size = size, collision = collision, extraFlag = extraFlag)
90+
) || canTravel(x = tile.x + 1, z = tile.y, level = tile.level, offsetX = -1, offsetZ = 0, size = size, collision = collision, extraFlag = extraFlag)
9191
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package content.skill.summoning
2+
3+
import world.gregs.voidps.engine.Script
4+
import world.gregs.voidps.engine.client.message
5+
6+
class Familiars : Script {
7+
init {
8+
npcOperate("Store", "*_familiar") {
9+
message("<dark_green>Not currently implemented.")
10+
}
11+
}
12+
}

game/src/main/kotlin/content/skill/summoning/Summoning.kt

Lines changed: 49 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package content.skill.summoning
22

33
import content.entity.player.dialogue.type.choice
4+
import net.pearx.kasechange.toLowerSpaceCase
5+
import org.rsmod.game.pathfinder.StepValidator
46
import world.gregs.voidps.cache.definition.data.NPCDefinition
57
import world.gregs.voidps.engine.Script
68
import world.gregs.voidps.engine.client.message
@@ -15,11 +17,15 @@ import world.gregs.voidps.engine.entity.character.npc.NPC
1517
import world.gregs.voidps.engine.entity.character.npc.NPCs
1618
import world.gregs.voidps.engine.entity.character.player.Player
1719
import world.gregs.voidps.engine.entity.character.player.skill.Skill
20+
import world.gregs.voidps.engine.entity.character.player.skill.level.Level.has
1821
import world.gregs.voidps.engine.entity.item.Item
19-
import world.gregs.voidps.engine.inject
22+
import world.gregs.voidps.engine.get
2023
import world.gregs.voidps.engine.inv.inventory
2124
import world.gregs.voidps.engine.inv.remove
25+
import world.gregs.voidps.engine.map.collision.canFit
26+
import world.gregs.voidps.engine.map.spiral
2227
import world.gregs.voidps.engine.queue.softQueue
28+
import world.gregs.voidps.type.Tile
2329

2430
val Character?.isFamiliar: Boolean
2531
get() = this != null && this is NPC && id.endsWith("_familiar")
@@ -43,13 +49,15 @@ var Player.follower: NPC?
4349
* @param restart A boolean used to tell if this familiar is being summoned at login. If set to false will start a new
4450
* familiar timer
4551
*/
46-
fun Player.summonFamiliar(familiar: NPCDefinition, restart: Boolean): NPC? {
52+
fun Player.summonFamiliar(familiar: NPCDefinition, restart: Boolean) {
4753
if (follower != null) {
48-
// TODO: Find actual message for this
49-
message("You must dismiss your current follower before summoning another.")
50-
return null
54+
message("You already have a follower.")
55+
return
5156
}
5257

58+
// TODO summoning energy
59+
// message("You don't have enough summoning energy to summon this familiar.")
60+
5361
val familiarNpc = NPCs.add(familiar.stringId, tile)
5462
familiarNpc.mode = Follow(familiarNpc, this)
5563
softQueue("summon_familiar", 2) {
@@ -60,7 +68,6 @@ fun Player.summonFamiliar(familiar: NPCDefinition, restart: Boolean): NPC? {
6068
timers.start("familiar_timer")
6169
}
6270
}
63-
return familiarNpc
6471
}
6572

6673
/**
@@ -90,7 +97,7 @@ fun Player.dismissFamiliar() {
9097
fun Player.updateFamiliarInterface() {
9198
val follower = follower ?: return
9299
interfaces.open("familiar_details")
93-
set("follower_details_name", world.gregs.voidps.engine.get<EnumDefinitions>().get("summoning_familiar_ids").getKey(follower.def.id))
100+
set("follower_details_name", get<EnumDefinitions>().get("summoning_familiar_ids").getKey(follower.def.id))
94101
set("follower_details_chathead", follower.def.id)
95102
set("follower_details_chathead_animation", follower.id)
96103
}
@@ -115,7 +122,23 @@ fun Player.confirmFollowerLeftClickOptions() {
115122
*/
116123
fun Player.callFollower() {
117124
val follower = follower ?: return
118-
follower.tele(steps.follow, clearMode = false)
125+
val steps: StepValidator = get()
126+
var target: Tile? = null
127+
for (tile in tile.spiral(follower.size)) {
128+
if (tile == this.tile) {
129+
continue
130+
}
131+
if (!steps.canFit(tile, follower.collision, follower.size, follower.blockMove)) {
132+
continue
133+
}
134+
target = tile
135+
break
136+
}
137+
if (target == null) {
138+
message("Your familiar is too large to fit in the area you are standing in. Move into a larger space and try again.")
139+
return
140+
}
141+
follower.tele(target, clearMode = false)
119142
follower.clearWatch()
120143
follower.gfx("summon_familiar_size_${follower.size}")
121144
}
@@ -126,19 +149,24 @@ fun Player.callFollower() {
126149
*/
127150
fun Player.renewFamiliar() {
128151
val follower = follower ?: return
129-
val pouchId = world.gregs.voidps.engine.get<EnumDefinitions>().get("summoning_familiar_ids").getKey(follower.def.id)
152+
val pouchId = get<EnumDefinitions>().get("summoning_familiar_ids").getKey(follower.def.id)
130153
val pouchItem = Item(ItemDefinitions.get(pouchId).stringId)
131-
154+
val remaining = get("familiar_details_minutes_remaining", 0) * 60 + get("familiar_details_seconds_remaining", 0)
155+
if (remaining >= 170) {
156+
message("You need to have less than 2:50 remaining before you can renew your familiar.")
157+
return
158+
}
132159
if (!inventory.contains(pouchItem.id)) {
133-
// TODO: Find the actual message used here in 2011
134-
message("You don't have the required pouch to renew your familiar.")
160+
message("You need a ${pouchItem.def.name.toLowerSpaceCase()} to renew your familiar's timer.")
161+
return
162+
}
163+
if (!inventory.remove(pouchItem.id)) {
135164
return
136165
}
137-
138-
inventory.remove(pouchItem.id)
139166
set("familiar_details_minutes_remaining", follower.def["summoning_time_minutes", 0])
140167
set("familiar_details_seconds_remaining", 0)
141168
follower.gfx("summon_familiar_size_${follower.size}")
169+
message("You use your remaining pouch to renew your familiar.")
142170
}
143171

144172
class Summoning(val enums: EnumDefinitions) : Script {
@@ -149,14 +177,11 @@ class Summoning(val enums: EnumDefinitions) : Script {
149177
val familiarId = enums.get("summoning_familiar_ids").getInt(option.item.def.id)
150178
val summoningXp = option.item.def["summon_experience", 0.0]
151179
val familiar = NPCDefinitions.get(familiarId)
152-
153-
if (levels.get(Skill.Summoning) < familiarLevel) {
154-
// TODO: Get actual message
155-
message("You don't have the level needed to summon that familiar...")
180+
if (!has(Skill.Summoning, familiarLevel)) {
181+
message("You are not high enough level to use this pouch.")
156182
return@itemOption
157183
}
158-
159-
summonFamiliar(familiar, false) ?: return@itemOption
184+
summonFamiliar(familiar, false)
160185
inventory.remove(option.item.id)
161186
experience.add(Skill.Summoning, summoningXp)
162187
}
@@ -233,5 +258,9 @@ class Summoning(val enums: EnumDefinitions) : Script {
233258
timers.restart("familiar_timer")
234259
summonFamiliar(familiarDef, true)
235260
}
261+
262+
interfaceOption("Take BoB", "familiar_details:take_bob_items") {
263+
message("<dark_green>Not currently implemented.")
264+
}
236265
}
237266
}

game/src/main/kotlin/content/skill/summoning/SummoningTimers.kt

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package content.skill.summoning
22

33
import world.gregs.voidps.engine.Script
4+
import world.gregs.voidps.engine.client.message
45
import world.gregs.voidps.engine.entity.character.npc.NPCs
56
import world.gregs.voidps.engine.timer.Timer
67
import world.gregs.voidps.engine.timer.toTicks
@@ -18,12 +19,21 @@ class SummoningTimers : Script {
1819
}
1920

2021
timerTick("familiar_timer") {
21-
if (get("familiar_details_seconds_remaining", 0) == 0) {
22+
var seconds = get("familiar_details_seconds_remaining", 0)
23+
if (seconds == 0) {
2224
dec("familiar_details_minutes_remaining")
2325
}
24-
set("familiar_details_seconds_remaining", (get("familiar_details_seconds_remaining", 0) + 1) % 2)
25-
26-
if (get("familiar_details_seconds_remaining", 0) <= 0 && get("familiar_details_minutes_remaining", 0) <= 0) {
26+
seconds++
27+
set("familiar_details_seconds_remaining", seconds % 2)
28+
val minutes = get("familiar_details_minutes_remaining", 0)
29+
if (minutes == 1) {
30+
if (seconds == 0) {
31+
message("You have 1 minute before your familiar vanishes.")
32+
} else {
33+
message("You have 30 seconds before your familiar vanishes.")
34+
}
35+
}
36+
if (seconds <= 0 && minutes <= 0) {
2737
return@timerTick Timer.CANCEL
2838
}
2939

@@ -35,7 +45,7 @@ class SummoningTimers : Script {
3545
NPCs.remove(follower)
3646
return@timerStop
3747
}
38-
48+
3949
if (follower != null) {
4050
dismissFamiliar()
4151
}

0 commit comments

Comments
 (0)