You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
4.9 KiB
Go
145 lines
4.9 KiB
Go
package model
|
|
|
|
import "math/rand"
|
|
|
|
// Phrase keys for adventure_log.event_code / WS adventure_log_line.event.code.
|
|
// No human-readable text on the server — only keys and structured args.
|
|
|
|
const (
|
|
LogPhraseDefeatedEnemy = "log.defeated_enemy"
|
|
LogPhraseLeveledUp = "log.leveled_up"
|
|
LogPhraseEquippedNew = "log.equipped_new"
|
|
LogPhraseInventoryFullDropped = "log.inventory_full_dropped"
|
|
LogPhraseBuffActivated = "log.buff_activated"
|
|
LogPhraseHeroRevived = "log.hero_revived"
|
|
LogPhraseWanderingMerchant = "log.wandering_merchant_encounter"
|
|
LogPhraseEncounteredEnemy = "log.encountered_enemy"
|
|
LogPhraseDiedFighting = "log.died_fighting"
|
|
LogPhraseAutoReviveHours = "log.auto_revive_hours"
|
|
LogPhraseAutoReviveAfterSec = "log.auto_revive_after_sec"
|
|
LogPhrasePurchasedBuffRefill = "log.purchased_buff_refill"
|
|
LogPhrasePurchasedBuffRefillRub = "log.purchased_buff_refill_rub"
|
|
LogPhraseSubscribed = "log.subscribed"
|
|
LogPhraseUsedHealingPotion = "log.used_healing_potion"
|
|
LogPhraseAchievementUnlocked = "log.achievement_unlocked"
|
|
LogPhraseMetNPC = "log.met_npc"
|
|
LogPhraseWanderingAlmsEquipped = "log.wandering_alms_equipped"
|
|
LogPhraseWanderingAlmsDropped = "log.wandering_alms_dropped"
|
|
LogPhraseWanderingAlmsStashed = "log.wandering_alms_stashed"
|
|
LogPhraseHealedFullTown = "log.healed_full_town"
|
|
LogPhraseBoughtPotionTown = "log.bought_potion_town"
|
|
LogPhraseBoughtGearTownMerchant = "log.bought_gear_town_merchant"
|
|
LogPhraseSoldItemsMerchant = "log.sold_items_merchant"
|
|
LogPhraseNPCSkippedVisit = "log.npc_skipped_visit"
|
|
LogPhrasePurchasedPotionFromNPC = "log.purchased_potion_from_npc"
|
|
LogPhrasePaidHealerFull = "log.paid_healer_full"
|
|
LogPhraseQuestGiverChecked = "log.quest_giver_checked"
|
|
LogPhraseQuestAccepted = "log.quest_accepted"
|
|
LogPhraseCombatHeroHit = "log.combat.hero_hit"
|
|
LogPhraseCombatHeroDodge = "log.combat.hero_dodge"
|
|
LogPhraseCombatHeroStun = "log.combat.hero_stun"
|
|
LogPhraseCombatEnemyHit = "log.combat.enemy_hit"
|
|
LogPhraseCombatEnemyBlock = "log.combat.enemy_block"
|
|
LogPhraseCombatDebuffSuffix = "log.combat.debuff_suffix"
|
|
LogPhraseHeroMeetPlayerSaid = "log.hero_meet.player_said"
|
|
LogPhraseHeroMeetScripted = "log.hero_meet.scripted_line"
|
|
)
|
|
|
|
// Town visit line slugs per NPC kind (order = timed line 0..5). Unknown npcType uses generic slugs with key prefix "generic".
|
|
var townVisitLineSlugs = map[string][]string{
|
|
"merchant": {
|
|
"crates_in_shade",
|
|
"practiced_tired_smile",
|
|
"chalk_prices_twice",
|
|
"rumors_bandits_carts",
|
|
"bell_traveler_pack",
|
|
"step_back_tally_gold",
|
|
"scale_dust_counter",
|
|
"rope_coil_trips_you",
|
|
"copper_jingles_pouch",
|
|
"foreign_coin_bite",
|
|
"no_credit_today",
|
|
"closing_soon_maybe",
|
|
},
|
|
"healer": {
|
|
"linens_herbs_tent",
|
|
"professional_frown_onceover",
|
|
"slept_badly_nod",
|
|
"tonic_steams_table",
|
|
"blessings_salves_bandages",
|
|
"lighter_under_canvas",
|
|
"needle_flash_quick",
|
|
"wash_basin_cloudy",
|
|
"herb_bundle_label_faded",
|
|
"whisper_count_pulse",
|
|
"lint_free_bandage_brag",
|
|
"bitter_tea_offer",
|
|
},
|
|
"quest_giver": {
|
|
"scrolls_wax_desk",
|
|
"ink_stained_map_tap",
|
|
"busy_roads_noncommittal",
|
|
"draft_parchment_smell",
|
|
"squint_spine_legend",
|
|
"promise_listen_worth_it",
|
|
"seal_crack_important",
|
|
"chair_squeak_dramatic",
|
|
"window_draft_story",
|
|
"stamp_ink_thumb",
|
|
"reward_bag_heavier",
|
|
"last_hero_failed_joke",
|
|
},
|
|
"generic": {
|
|
"town_noise_blanket",
|
|
"grain_prices_argument",
|
|
"dust_sunbeam_time",
|
|
"strap_tighten_pretend",
|
|
"dog_boring_sleeps",
|
|
"breathe_ready_move_on",
|
|
"bell_distant_smith",
|
|
"child_chasing_chicken",
|
|
"rain_barrel_drip",
|
|
"cloak_smell_smoke",
|
|
"notice_board_torn",
|
|
"two_guards_yawn",
|
|
},
|
|
}
|
|
|
|
// TownVisitPhraseKey returns e.g. town_visit.merchant.bell_traveler_pack (lineIdx 0..n); prefer TownVisitRandomPhraseKey for timed logs.
|
|
func TownVisitPhraseKey(npcType string, lineIdx int) string {
|
|
slugs, ok := townVisitLineSlugs[npcType]
|
|
keyType := npcType
|
|
if !ok {
|
|
slugs = townVisitLineSlugs["generic"]
|
|
keyType = "generic"
|
|
}
|
|
if lineIdx < 0 || lineIdx >= len(slugs) {
|
|
return ""
|
|
}
|
|
return "town_visit." + keyType + "." + slugs[lineIdx]
|
|
}
|
|
|
|
// TownVisitRandomPhraseKey picks a random line for npcType (town NPC visit log).
|
|
func TownVisitRandomPhraseKey(npcType string) string {
|
|
slugs, ok := townVisitLineSlugs[npcType]
|
|
keyType := npcType
|
|
if !ok {
|
|
slugs = townVisitLineSlugs["generic"]
|
|
keyType = "generic"
|
|
}
|
|
if len(slugs) == 0 {
|
|
return ""
|
|
}
|
|
return "town_visit." + keyType + "." + slugs[rand.Intn(len(slugs))]
|
|
}
|
|
|
|
func init() {
|
|
qg := townVisitLineSlugs["quest_giver"]
|
|
merch := townVisitLineSlugs["merchant"]
|
|
townVisitLineSlugs["bounty_hunter"] = qg
|
|
townVisitLineSlugs["elder"] = qg
|
|
townVisitLineSlugs["armorer"] = merch
|
|
townVisitLineSlugs["weapon"] = merch
|
|
townVisitLineSlugs["jeweler"] = merch
|
|
}
|