Changelog
1.4.0
This version reworked some C# Quest apis (used by new Quest Essentials mod, the QF extension), fixes lot of problems with QF quests, adds fields for mail letters after quest completion and new some new conditions for interact between inventory and quests and current location. Also this upgrades to new Harmony 2.1 and SMAPI 3.12, adds Hungarian and Spanish translations.
- Added Hungarian translation by martin66789 and spanish translation by Carlos
- Updated Harmony references to work with Harmony2.0 (thx shekurika)
- Enhanced logging for loading content packs and exposing quest types
- Fixed minor issue when resizing while CustomBoard is open
- Fixed controller input problem on CustomBoards
- Added better log for used action tiles for custom dropboxes
- Fixed slay monster quest reward problem
- Added new common global conditions:
HasItemInInventory
,HasActiveQuest
andCurrentLocation
- Quest offer manager now internally checks if offering quest is already in log (and offers it ONLY if not)
- Added offering quest by pick up an item
- Reworked NPC quest offer system (optimized)
- Added fields
AddMailOnComplete
andRemoveMailOnComplete
for content pack quests - Show talk bubble mouse cursor when quest should be offered on NPC talk
- Added adjust quest trigger when farmer try talk with NPC
- Added
ITalkMessage
interface - Quests with
BaseType
valueCustom
always returns false for Quest.checkIfComplete and your custom quest is not vanilla base type or doesn't implementsIQuestObserver
interface (for checking completion for custom quests override OnCompletionCheck method on your custom quest type class) - Update title, objective and description methods are splited from
IQuestObserver
toIQuestInfoUpdater
(IQuestObserver extends IQuestInfoUpdater) CustomQuest<TState>.Sync
now marks quest for sync at end of update sync instead of sync immediatelly (for immediatelly sync use new API methodCustomQuest<TState>.PerformSync
)- CustomQuest class now implements IDisposable interface
- Added new extensions:
CheckGlobalConditions
,CheckGlobalCondition
- Added new APIs for
CustomQuest<TState>
class:NeedsSync
,PerformSync
; and protected virtual methodsOnStateReset
,OnStateRestored
- Added new APIs for
CustomQuest
class:onCompletionCheck
,OnRegister
,OnInitialize
,ForceUpdate
,OnUpdate
,OnAdjust
- Added new managed API:
CheckForQuestComplete
,AdjustQuest
andGetAllManagedQuests
- Added support for offer special order via NPC talk
1.3.4
- Fixed problem with quest type id reintegration
- Refactored quest reintegration and better log messages
1.3.3
- Optimized NPC offer indicator performance
- Better error message when invalid client connected in multiplayer
- Fixed exception when connected client running without SMAPI or without QF
1.3.2
- Fixed problem with special order board in town (hopefully)
1.3.1
- Fixed problems with reintegrate quests
1.3.0
Common changes
- Quest bulletin board in town now chooses random quest when is offered more quests of the day in the same day
- Added custom drop box support for special orders
- Added texture loader for content packs (allows load texture added by Content Patcher)
- When NPC offers you a quest via dialogue, an indicator is shown above their head. (You can disable it in config.json)
- Added support for custom quest and special order boards (in any location what you want)
- Managed quests are scrollable in questlog if content needs scroll (like special orders)
- Added support for multiple objectives (for future features)
- Fixed some multiplayer problems
For Content Pack modders
- Added extra optional field
Secret
forOfferDetails
ofNPC
quest offer. - Added field
CustomDropBoxes
for define custom drop boxes for special orders (see docs) - Added field
CustomBoards
for define custom quest or special order boards (see docs)
For SMAPI modders
- New managed API method
RegisterCustomBoard
- New CustomQuest apis:
GetCurrentObjectives
,UpdateUpdateCurrentObjectives
methods for define multiple objectives for a quest. (You must handle objectives manually in your quest code)
1.2.1
Common changes
- Update to work with Stardew Valley 1.5 (SMAPI 3.8)
1.2.0
Common changes
- Internal hook API is deprecated
- Added support for gain additional friendship by complete a quest
- Added support for custom background texture and font colors for quest details window in quest log menu
- Added support for new types of quest reward:
Object
andWeapon
- Fixed some issues with multiplayer
- Write quest type classes in console for
quests_list
,quests_log
andquests_customtypes
- Added new command
quests_customtypes
For Content Pack modders
- Added field
FriendshipGain
for define how much friendship points for which NPCs player gains after quest completion - Added new fields for quest:
RewardType
,RewardAmount
,Texture
andColors
- Added support for custom quest types in content packs (via
<modUid>/<questTypeName>
inType
field) - Better error messages
For SMAPI modders
- Added simple API for mods which wants work with QF and do basic stuff (like resolve quest id from name; check if quest is managed; ...) without referencing dll.
- Added property
ConditionFunc
onQuestOffer
class for support additional programatic condition - Added new API on
CustomQuest
class for define how much friendship points for which NPCs player gains after quest completion - Added new APIs for define quest reward type, custom bg texture nad font colors
- Deprecated
IStateful.ResetState()
andIManagedQuestApi.GetById
now raise a compilation error when it is used in code - Added active state
- Added new state interfaces:
IPersistentState
andIReactiveState
- Added support for disposable quest state (by implementing
IDisposable
interface) - Added new APIs for expose custom quest types (class)
- Exposed
ITriggerLoader
interface
1.1.1
Common changes
- Fixed vanilla SDV quest type id resolving (this fixes problem with item harvest quest completion)
- Fixed item harvest quest current objective
- Added command for list raw content from
Data\Quests
(commandquests_list raw
) - Added korean translation (thx KAYA)
1.1.0
Common changes
- Fixed red alert caused by wrong quest dialogue pattern (Thx @Jonquora for help, issue #16)
- Improved check condition logging.
- Fixed
BuildingConstructed
condition - Avoid renaming already named custom quests
- Added
HasMod
condition for check if mod with specified mod UID is loaded in SMAPI - Added comptibility with Expanded Preconditions Utility (
EPU
was added to common conditions) - Added state verifier (disabled by default)
- Added configuration model for config.json
For Content Pack modders
- Added support for custom properties for
CustomQuest
from content packs - Added option of ConversationTopic to add or remove conversation topic when quest accepted, removed, or completed. (thx itsbenter)
- Added support for i18n translations (provided by SMAPI)
For SMAPI modders
- Added new APIs for
CustomQuest
and statefullCustomQuest<TState>
- Added
GetQuestByName
to Managed mod API. - Added
GetQuestById
as replacement forGetbyId
(old API method is deprecated and will be removed in one of next versions)
1.0.0
Common changes
- Added new debug commands:
quests_accept
,quests_complete
andquests_remove
. - Fixed wrong quest type binding in asset editor for
Data/Quests
- Fixed removing quests marked as destroy from questlog
- Added new conditions:
QuestCompletedDate
,QuestAcceptedToday
,QuestCompletedToday
,QuestNeverAccepted
,QuestNeverCompleted
, - Added new condition
SkillLevel
to check if the skill level met the minimum requirement - Added new condition
BuildingConstructed
to check if specified building is present on farm - Added new condition
IsCommunityCenterCompleted
to check whether community center completed or not - Added new condition
FriendshipStatus
to check friendship status of specified character (Married, Engaged, Dating, Friendly) - Rename conditions:
Friendship
toFriendshipLevel
to distinguish fromFriendshipStatus
For Content Pack modders
- Added support for
OR
logical function between values in conditions (with|
separator)
For Content Pack modders
- Added support for
OR
logical function between values in conditions (with|
separator)
For SMAPI modders
- Added new extensions for class
CustomQuest
:IsNeverAccepted
andIsNeverCompleted
1.0.0-beta.3
Common changes
- Fixed problematic issues with Android
- Added Portuguese translation (thx Randy)
1.0.0-beta.2
Common changes
- Improved Bulletinboard quest offer
- Added
not:
prefix for negate result of checked condition (can be used in hooks and offers and in both programatic and content pack usage) - Added new conditions for check known recipes:
KnownCraftingRecipe
andKnownCookingRecipe
- Added new condition
Random
with random chance in % to offer or execute hook - Added new condition
QuestAcceptedDate
for check if quest was accepted in specified date - Added new condition
QuestAcceptedInPeriod
for check if quest was accepted in current season, day, year and other time period(s). - Added stats support
- Improved some minor refactors
For SMAPI modders
- Added API method
ForceRefresh()
- Improved accept quest API which allows add quest quietly (without popup alert message and without "new" flag in questlog)
- Added new global quest events:
QuestCompleted
,QuestAccepted
,QuestRemoved
,QuestLogMenuOpen
,QuestLogMenuClosed
andRefreshed
. - Added new managed API:
ExposeGlobalCondition
for expose global condition(s) for using in quest offers or hooks. - Added extensions for
CustomQuest
class (use namespaceQuestFramework.Extensions
for apply)
1.0.0-beta.1
Common changes
- Fixed saving game
- Added new global conditions: MinDaysPlayed, MaxDaysPlayed, DaysPlayed and IsFarmerMarried
- Added support for daily quests (day limited quests)
For Content Pack modders
- You can define days left for quests (daily quests)
- Added token for use objects from JsonAssets in quest triggers.
(example for ItemDelivery quest type:
Willy {{ja:Fish Oil}}
)
For SMAPI modders
- You can define days left for quests (daily quests) via SMAPI mod-provided API
- Added trigger parser-loader in CustomQuest class
1.0.0-beta
- First release