94 lines
3.5 KiB
Kotlin
94 lines
3.5 KiB
Kotlin
package rs09.game.content.jobs
|
|
|
|
import GatheringJobs
|
|
import SlayingJob
|
|
import core.game.node.entity.npc.NPC
|
|
import core.game.node.entity.player.Player
|
|
import core.game.node.item.GroundItemManager
|
|
import core.game.node.item.Item
|
|
import rs09.game.system.SystemLogger
|
|
import java.util.concurrent.TimeUnit
|
|
|
|
object JobManager {
|
|
@JvmStatic
|
|
fun updateJobRemaining(player: Player, amount: Int = 0) {
|
|
val cur = player.getAttribute("jobs:amount",0)
|
|
val new = cur - amount
|
|
val jobType = player.getAttribute("jobs:type",0)
|
|
val jobId = player.getAttribute("jobs:id",0)
|
|
|
|
var gJob: GatheringJobs? = null
|
|
var sJob: SlayingJob? = null
|
|
|
|
if(jobType == 0){
|
|
gJob = GatheringJobs.values()[jobId]
|
|
} else {
|
|
sJob = SlayingJob.values()[jobId]
|
|
}
|
|
|
|
if(new % 5 == 0 && sJob != null && new > 0){
|
|
player.sendMessage("You have $new ${NPC(sJob.ids[0]).name.toLowerCase()} left to go.")
|
|
}
|
|
if(new == 0 && sJob != null){
|
|
player.sendMessage("You have completed your job.")
|
|
}
|
|
player.setAttribute("jobs:amount",new)
|
|
}
|
|
|
|
@JvmStatic
|
|
fun handleDeath(npc: Int, player: Player) {
|
|
val jobId = player.getAttribute("jobs:id",0)
|
|
val type = player.getAttribute("jobs:type",0)
|
|
if(type == 1) {
|
|
val job = SlayingJob.values()[jobId]
|
|
if (job.ids.contains(npc)) {
|
|
updateJobRemaining(player, 1)
|
|
}
|
|
}
|
|
}
|
|
|
|
@JvmStatic
|
|
fun rewardPlayer(player: Player, npc: NPC){
|
|
val amt = player.getAttribute("jobs:original_amount",0)
|
|
val type = player.getAttribute("jobs:type",0)
|
|
val jobId = player.getAttribute("jobs:id",0)
|
|
val dailyDone = player.getAttribute("jobs:dailyAmt",0)
|
|
if(dailyDone == 3){
|
|
player.dialogueInterpreter.sendDialogue("You can only complete 3 jobs per day.")
|
|
return
|
|
}
|
|
if(type == 0){
|
|
val it = Item(GatheringJobs.values()[jobId].itemId)
|
|
var amount = player.inventory.getAmount(it)
|
|
val needed = player.getAttribute("jobs:amount",0)
|
|
if(amount == 0){
|
|
player.dialogueInterpreter.open(CancelJobDialogueFile(),npc)
|
|
SystemLogger.logAlert("Opening CancelJob")
|
|
return
|
|
}
|
|
if(amount < needed){
|
|
player.dialogueInterpreter.sendItemMessage(GatheringJobs.values()[jobId].itemId,"You still need to gather ${needed - amount} more.")
|
|
player.inventory.remove(Item(it.id,amount))
|
|
player.setAttribute("jobs:amount",needed - amount)
|
|
return
|
|
}
|
|
if(amount > needed) amount = needed
|
|
player.inventory.remove(Item(it.id,amount))
|
|
} else {
|
|
val needed = player.getAttribute("jobs:amount",0)
|
|
if(needed > 0){
|
|
player.dialogueInterpreter.sendDialogue("You still need to kill $needed more ${NPC(SlayingJob.values()[jobId].ids[0]).name.toLowerCase()}.")
|
|
return
|
|
}
|
|
}
|
|
if(!player.inventory.add(Item(995,250 * amt))){
|
|
GroundItemManager.create(Item(995,250 * amt),player.centerLocation,player)
|
|
}
|
|
player.removeAttribute("jobs:id")
|
|
player.removeAttribute("jobs:amount")
|
|
player.removeAttribute("jobs:original_amount")
|
|
player.removeAttribute("jobs:type")
|
|
player.incrementAttribute("/save:jobs:dailyAmt",1)
|
|
System.out.println("Complete amount: ${player.getAttribute("jobs:dailyAmt",0)}")
|
|
}
|
|
} |