package game import ( "fmt" "thehouseoficarus/internal/net" "thehouseoficarus/internal/player" "thehouseoficarus/internal/world" ) func (g *Game) onAssassinKill(sess *net.Session, p *player.Player, mob *world.MobInstance) { taskMob := getPlayerFlagString(p, "assassin_task_mob") if taskMob == "" || taskMob != mob.DefID { return } remaining := getPlayerFlagInt(p, "assassin_task_remaining") if remaining <= 0 { return } xp := mob.MaxHP * 2 g.awardSkillXP(sess, p, player.Assassin, xp) if p.OptionBool("xp_drops") { sess.WriteLine(g.colorize(sess, "xp", fmt.Sprintf(" (+%dxp asm)", xp))) } remaining-- g.setPlayerFlag(p, "assassin_task_remaining", remaining) if remaining <= 0 { completed := getPlayerFlagInt(p, "assassin_tasks_completed") + 1 streak := getPlayerFlagInt(p, "assassin_streak") + 1 g.setPlayerFlag(p, "assassin_tasks_completed", completed) g.setPlayerFlag(p, "assassin_streak", streak) delete(p.Flags, "assassin_task_mob") g.setPlayerFlag(p, "assassin_task_remaining", 0) g.setPlayerFlag(p, "assassin_task_total", 0) rep := 1 bonus := streakBonus(streak) rep += bonus currentRep := getPlayerFlagInt(p, "assassin_reputation") g.setPlayerFlag(p, "assassin_reputation", currentRep+rep) sess.WriteLine(g.colorize(sess, "assassin_task", "*** Assassin task complete! ***")) if bonus > 0 { sess.WriteLine(g.colorize(sess, "assassin_task", fmt.Sprintf(" Streak bonus! %d tasks in a row. +%d bonus reputation.", streak, bonus))) } sess.WriteLine(g.colorize(sess, "assassin_task", fmt.Sprintf(" Reputation earned: %d (total: %d)", rep, currentRep+rep))) } else { total := getPlayerFlagInt(p, "assassin_task_total") def, _ := g.MobStore.LoadDef(taskMob) name := taskMob if def != nil { name = def.Name } sess.WriteLine(g.colorize(sess, "assassin_task", fmt.Sprintf(" Assassin task: %d of %d %ss remaining.", remaining, total, name))) } g.AccountStore.SaveCharacter(p) } func streakBonus(streak int) int { if streak%1000 == 0 { return 50 } if streak%250 == 0 { return 35 } if streak%100 == 0 { return 25 } if streak%50 == 0 { return 15 } if streak%10 == 0 { return 5 } return 0 }