mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-29 00:32:49 +00:00
Operators and retting rid of 'records'
This commit is contained in:
parent
a0989c3481
commit
4449b66846
@ -19,7 +19,7 @@ namespace
|
|||||||
|
|
||||||
const ESM::Dialogue* foundDialogueFilteredOut(const ESM::Dialogue* possibleResult) const
|
const ESM::Dialogue* foundDialogueFilteredOut(const ESM::Dialogue* possibleResult) const
|
||||||
{
|
{
|
||||||
if (possibleResult and possibleResult->mType == filter)
|
if (possibleResult && possibleResult->mType == filter)
|
||||||
{
|
{
|
||||||
return possibleResult;
|
return possibleResult;
|
||||||
}
|
}
|
||||||
@ -56,7 +56,7 @@ namespace
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
++mIter;
|
++mIter;
|
||||||
} while (mIter->mType != filter and mIter != mEndIter);
|
} while (mIter->mType != filter && mIter != mEndIter);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,13 +66,13 @@ namespace
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
++mIter;
|
++mIter;
|
||||||
} while (mIter->mType != filter and mIter != mEndIter);
|
} while (mIter->mType != filter && mIter != mEndIter);
|
||||||
return iter;
|
return iter;
|
||||||
}
|
}
|
||||||
|
|
||||||
FilteredDialogueIterator& operator+=(difference_type advance)
|
FilteredDialogueIterator& operator+=(difference_type advance)
|
||||||
{
|
{
|
||||||
while (advance > 0 and mIter != mEndIter)
|
while (advance > 0 && mIter != mEndIter)
|
||||||
{
|
{
|
||||||
++mIter;
|
++mIter;
|
||||||
if (mIter->mType == filter)
|
if (mIter->mType == filter)
|
||||||
@ -85,7 +85,7 @@ namespace
|
|||||||
|
|
||||||
bool operator==(const FilteredDialogueIterator& x) const { return mIter == x.mIter; }
|
bool operator==(const FilteredDialogueIterator& x) const { return mIter == x.mIter; }
|
||||||
|
|
||||||
bool operator!=(const FilteredDialogueIterator& x) const { return not(*this == x); }
|
bool operator!=(const FilteredDialogueIterator& x) const { return !(*this == x); }
|
||||||
|
|
||||||
const value_type& operator*() const { return *mIter; }
|
const value_type& operator*() const { return *mIter; }
|
||||||
|
|
||||||
@ -121,7 +121,7 @@ namespace
|
|||||||
iterator begin() const
|
iterator begin() const
|
||||||
{
|
{
|
||||||
iterator result{ mDialogueStore.begin(), mDialogueStore.end() };
|
iterator result{ mDialogueStore.begin(), mDialogueStore.end() };
|
||||||
while (result != end() and result->mType != filter)
|
while (result != end() && result->mType != filter)
|
||||||
{
|
{
|
||||||
++result;
|
++result;
|
||||||
}
|
}
|
||||||
@ -136,12 +136,6 @@ namespace
|
|||||||
{
|
{
|
||||||
using StoreT = FilteredDialogueStore<filter>;
|
using StoreT = FilteredDialogueStore<filter>;
|
||||||
|
|
||||||
table["record"] = sol::overload(
|
|
||||||
[](const MWLua::Object& obj) -> const ESM::Dialogue* { return obj.ptr().get<ESM::Dialogue>()->mBase; },
|
|
||||||
[](std::string_view id) -> const ESM::Dialogue* {
|
|
||||||
return StoreT{}.search(ESM::RefId::deserializeText(Misc::StringUtils::lowerCase(id)));
|
|
||||||
});
|
|
||||||
|
|
||||||
sol::state_view& lua = context.mLua->sol();
|
sol::state_view& lua = context.mLua->sol();
|
||||||
sol::usertype<StoreT> storeBindingsClass
|
sol::usertype<StoreT> storeBindingsClass
|
||||||
= lua.new_usertype<StoreT>("ESM3_Dialogue_Type" + std::to_string(filter) + " Store");
|
= lua.new_usertype<StoreT>("ESM3_Dialogue_Type" + std::to_string(filter) + " Store");
|
||||||
@ -151,7 +145,7 @@ namespace
|
|||||||
storeBindingsClass[sol::meta_function::length] = [](const StoreT& store) { return store.getSize(); };
|
storeBindingsClass[sol::meta_function::length] = [](const StoreT& store) { return store.getSize(); };
|
||||||
storeBindingsClass[sol::meta_function::index] = sol::overload(
|
storeBindingsClass[sol::meta_function::index] = sol::overload(
|
||||||
[](const StoreT& store, size_t index) -> const ESM::Dialogue* {
|
[](const StoreT& store, size_t index) -> const ESM::Dialogue* {
|
||||||
if (index == 0 or index > store.getSize())
|
if (index == 0 || index > store.getSize())
|
||||||
{
|
{
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@ -224,7 +218,7 @@ namespace
|
|||||||
recordInfosBindingsClass[sol::meta_function::index]
|
recordInfosBindingsClass[sol::meta_function::index]
|
||||||
= [](const DialogueInfos& store, size_t index) -> const ESM::DialInfo* {
|
= [](const DialogueInfos& store, size_t index) -> const ESM::DialInfo* {
|
||||||
const ESM::Dialogue* dialogueRecord = store.getDialogueRecord();
|
const ESM::Dialogue* dialogueRecord = store.getDialogueRecord();
|
||||||
if (not dialogueRecord or index == 0 or index > dialogueRecord->mInfo.size())
|
if (!dialogueRecord || index == 0 || index > dialogueRecord->mInfo.size())
|
||||||
{
|
{
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@ -367,7 +361,7 @@ namespace
|
|||||||
return result == -1 ? sol::nil : sol::make_object(lua, result);
|
return result == -1 ? sol::nil : sol::make_object(lua, result);
|
||||||
});
|
});
|
||||||
recordInfoBindingsClass["sound"] = sol::readonly_property([lua](const ESM::DialInfo& rec) -> sol::object {
|
recordInfoBindingsClass["sound"] = sol::readonly_property([lua](const ESM::DialInfo& rec) -> sol::object {
|
||||||
if (rec.mData.mType == ESM::Dialogue::Type::Journal or rec.mSound == "")
|
if (rec.mData.mType == ESM::Dialogue::Type::Journal || rec.mSound == "")
|
||||||
{
|
{
|
||||||
return sol::nil;
|
return sol::nil;
|
||||||
}
|
}
|
||||||
|
@ -932,14 +932,14 @@
|
|||||||
-- @{#DialogueRecords} functions for journal (quest) read-only records.
|
-- @{#DialogueRecords} functions for journal (quest) read-only records.
|
||||||
-- @field [parent=#Dialogue] journal
|
-- @field [parent=#Dialogue] journal
|
||||||
-- @usage --print the name of the record, which is a capitalized version of its id
|
-- @usage --print the name of the record, which is a capitalized version of its id
|
||||||
-- print(core.dialogue.journal.record("ms_fargothring").name) -- MS_FargothRing
|
-- print(core.dialogue.journal.records["ms_fargothring"].name) -- MS_FargothRing
|
||||||
-- @usage --print ids of all journal records
|
-- @usage --print ids of all journal records
|
||||||
-- for _, journalRecord in pairs(core.dialogue.journal.records) do
|
-- for _, journalRecord in pairs(core.dialogue.journal.records) do
|
||||||
-- print(journalRecord.id)
|
-- print(journalRecord.id)
|
||||||
-- end
|
-- end
|
||||||
-- @usage --print quest names for all quests the player has inside a player script
|
-- @usage --print quest names for all quests the player has inside a player script
|
||||||
-- for _, quest in pairs(types.Player.quests(self)) do
|
-- for _, quest in pairs(types.Player.quests(self)) do
|
||||||
-- print(quest.id, core.dialogue.journal.record(quest.id).questName)
|
-- print(quest.id, core.dialogue.journal.records[quest.id].questName)
|
||||||
-- end
|
-- end
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -950,7 +950,7 @@
|
|||||||
-- print(topicRecord.id)
|
-- print(topicRecord.id)
|
||||||
-- end
|
-- end
|
||||||
-- @usage --print all NPC lines for "vivec"
|
-- @usage --print all NPC lines for "vivec"
|
||||||
-- for idx, topicInfo in pairs(core.dialogue.topic.record("vivec").infos) do
|
-- for idx, topicInfo in pairs(core.dialogue.topic.records["vivec"].infos) do
|
||||||
-- print(idx, topicInfo.text)
|
-- print(idx, topicInfo.text)
|
||||||
-- end
|
-- end
|
||||||
|
|
||||||
@ -962,7 +962,7 @@
|
|||||||
-- print(voiceRecord.id)
|
-- print(voiceRecord.id)
|
||||||
-- end
|
-- end
|
||||||
-- @usage --print all NPC lines & sounds for "flee"
|
-- @usage --print all NPC lines & sounds for "flee"
|
||||||
-- for idx, voiceInfo in pairs(core.dialogue.voice.record("flee").infos) do
|
-- for idx, voiceInfo in pairs(core.dialogue.voice.records["flee"].infos) do
|
||||||
-- print(idx, voiceInfo.text, voiceInfo.sound)
|
-- print(idx, voiceInfo.text, voiceInfo.sound)
|
||||||
-- end
|
-- end
|
||||||
|
|
||||||
@ -974,7 +974,7 @@
|
|||||||
-- print(greetingRecord.id)
|
-- print(greetingRecord.id)
|
||||||
-- end
|
-- end
|
||||||
-- @usage --print all NPC lines for "greeting 0"
|
-- @usage --print all NPC lines for "greeting 0"
|
||||||
-- for idx, greetingInfo in pairs(core.dialogue.greeting.record("greeting 0").infos) do
|
-- for idx, greetingInfo in pairs(core.dialogue.greeting.records["greeting 0"].infos) do
|
||||||
-- print(idx, greetingInfo.text)
|
-- print(idx, greetingInfo.text)
|
||||||
-- end
|
-- end
|
||||||
|
|
||||||
@ -986,35 +986,25 @@
|
|||||||
-- print(persuasionRecord.id)
|
-- print(persuasionRecord.id)
|
||||||
-- end
|
-- end
|
||||||
-- @usage --print all NPC lines for "admire success"
|
-- @usage --print all NPC lines for "admire success"
|
||||||
-- for idx, persuasionInfo in pairs(core.dialogue.persuasion.record("admire success").infos) do
|
-- for idx, persuasionInfo in pairs(core.dialogue.persuasion.records["admire success"].infos) do
|
||||||
-- print(idx, persuasionInfo.text)
|
-- print(idx, persuasionInfo.text)
|
||||||
-- end
|
-- end
|
||||||
|
|
||||||
---
|
---
|
||||||
-- A read-only list of all @{#DialogueRecord}s in the world database, may be indexed by recordId, which doesn't have to be lowercase.
|
-- A read-only list of all @{#DialogueRecord}s in the world database, may be indexed by recordId, which doesn't have to be lowercase.
|
||||||
-- @field [parent=#DialogueRecords] #list<#DialogueRecord> records
|
|
||||||
-- Indexing is not case-sensitive.
|
|
||||||
-- Implements [iterables#List](iterables.html#List) of #DialogueRecord.
|
-- Implements [iterables#List](iterables.html#List) of #DialogueRecord.
|
||||||
|
-- @field [parent=#DialogueRecords] #list<#DialogueRecord> records
|
||||||
-- @usage local record = core.dialogue.journal.records['ms_fargothring']
|
-- @usage local record = core.dialogue.journal.records['ms_fargothring']
|
||||||
-- @usage local record = core.dialogue.journal.records['MS_FargothRing']
|
-- @usage local record = core.dialogue.journal.records['MS_FargothRing']
|
||||||
-- @usage local record = core.dialogue.journal.records[1]
|
-- @usage local record = core.dialogue.journal.records[1]
|
||||||
-- @usage local record = core.dialogue.topic.records[1]
|
-- @usage local record = core.dialogue.topic.records[1]
|
||||||
-- @usage local record = core.dialogue.topic.records['background']
|
-- @usage local record = core.dialogue.topic.records['background']
|
||||||
-- @usage local record = core.dialogue.greeting.records[1]
|
-- @usage local record = core.dialogue.greeting.records[1]
|
||||||
|
-- @usage local record = core.dialogue.greeting.records['greeting 0']
|
||||||
-- @usage local record = core.dialogue.persuasion.records[1]
|
-- @usage local record = core.dialogue.persuasion.records[1]
|
||||||
|
-- @usage local record = core.dialogue.persuasion.records['admire success']
|
||||||
-- @usage local record = core.dialogue.voice.records[1]
|
-- @usage local record = core.dialogue.voice.records[1]
|
||||||
|
-- @usage local record = core.dialogue.voice.records["flee"]
|
||||||
---
|
|
||||||
-- Returns a read-only @{#DialogueRecord}
|
|
||||||
-- @function [parent=#DialogueRecords] record
|
|
||||||
-- @param #string recordId Doesn't have to be lowercase.
|
|
||||||
-- @return #DialogueRecord
|
|
||||||
-- @usage local record = core.dialogue.journal.record('a1_2_antabolisinformant')
|
|
||||||
-- @usage local record = core.dialogue.journal.record('A1_2_AntabolisInformant')
|
|
||||||
-- @usage local record = core.dialogue.topic.record('my trade')
|
|
||||||
-- @usage local record = core.dialogue.greeting.record('greeting 0')
|
|
||||||
-- @usage local record = core.dialogue.persuasion.record('admire success')
|
|
||||||
-- @usage local record = core.dialogue.voice.record('flee')
|
|
||||||
|
|
||||||
---
|
---
|
||||||
-- Depending on which store this read-only dialogue record is from, it may either be a journal, topic, greeting, persuasion or voice.
|
-- Depending on which store this read-only dialogue record is from, it may either be a journal, topic, greeting, persuasion or voice.
|
||||||
@ -1023,9 +1013,9 @@
|
|||||||
-- @field #string name Same as id, but with upper cases preserved.
|
-- @field #string name Same as id, but with upper cases preserved.
|
||||||
-- @field #string questName Non-nil only for journal records with available value. Holds the quest name for this journal entry. Same info may be available under `infos[1].text` as well, but this variable is made for convenience.
|
-- @field #string questName Non-nil only for journal records with available value. Holds the quest name for this journal entry. Same info may be available under `infos[1].text` as well, but this variable is made for convenience.
|
||||||
-- @field #list<#DialogueRecordInfo> infos A read-only list containing all @{#DialogueRecordInfo}s for this record, in order.
|
-- @field #list<#DialogueRecordInfo> infos A read-only list containing all @{#DialogueRecordInfo}s for this record, in order.
|
||||||
-- @usage local journalId = core.dialogue.journal.record('A2_4_MiloGone').id -- "a2_4_milogone"
|
-- @usage local journalId = core.dialogue.journal.records['A2_4_MiloGone'].id -- "a2_4_milogone"
|
||||||
-- @usage local journalName = core.dialogue.journal.record('A2_4_MiloGone').name -- "A2_4_MiloGone"
|
-- @usage local journalName = core.dialogue.journal.records['A2_4_MiloGone'].name -- "A2_4_MiloGone"
|
||||||
-- @usage local questName = core.dialogue.journal.record('A2_4_MiloGone').questName -- "Mehra Milo and the Lost Prophecies"
|
-- @usage local questName = core.dialogue.journal.records['A2_4_MiloGone'].questName -- "Mehra Milo and the Lost Prophecies"
|
||||||
|
|
||||||
---
|
---
|
||||||
-- Holds the read-only data for one of many info entries inside a dialogue record. Depending on the type of the dialogue record (journal, topic, greeting, persuasion or voice), it could be, for example, a single journal entry or a NPC dialogue line.
|
-- Holds the read-only data for one of many info entries inside a dialogue record. Depending on the type of the dialogue record (journal, topic, greeting, persuasion or voice), it could be, for example, a single journal entry or a NPC dialogue line.
|
||||||
@ -1049,9 +1039,9 @@
|
|||||||
-- @field #string sound Non-nil only for non-journal records with available value for this parameter. Sound file path for this info entry.
|
-- @field #string sound Non-nil only for non-journal records with available value for this parameter. Sound file path for this info entry.
|
||||||
-- @field #string resultScript Non-nil only for non-journal records with available value for this parameter. MWScript (full script text) executed when this info is chosen.
|
-- @field #string resultScript Non-nil only for non-journal records with available value for this parameter. MWScript (full script text) executed when this info is chosen.
|
||||||
-- @usage --Variable `aa` below is "Congratulations, %PCName. You are now %PCName the %NextPCRank." in vanilla MW:
|
-- @usage --Variable `aa` below is "Congratulations, %PCName. You are now %PCName the %NextPCRank." in vanilla MW:
|
||||||
-- local aa = core.dialogue.topic.record('advancement').infos[100].text
|
-- local aa = core.dialogue.topic.records['advancement'].infos[100].text
|
||||||
-- @usage --Variable `bb` below is "sound/vo/a/f/fle_af003.mp3" in vanilla MW:
|
-- @usage --Variable `bb` below is "sound/vo/a/f/fle_af003.mp3" in vanilla MW:
|
||||||
-- local bb = core.dialogue.voice.record('flee').infos[149].sound
|
-- local bb = core.dialogue.voice.records['flee'].infos[149].sound
|
||||||
|
|
||||||
--- @{#Factions}: Factions
|
--- @{#Factions}: Factions
|
||||||
-- @field [parent=#core] #Factions factions
|
-- @field [parent=#core] #Factions factions
|
||||||
|
Loading…
x
Reference in New Issue
Block a user