Перейти к содержанию

Рекомендуемые сообщения

Опубликовано (изменено)
18.10.2021 18:38:28, Azazellz сказал(-а):

Я так думаю, что дело не в самой функции, а в том, что ты вызываешь ее по 16 (?) раз.

Не проще ли при установке метки делать это один раз, писать результат в проперти типа стринг, и потом уже оттуда его в меню подтягивать?

Ну или вообще без проперти обойтись, тупо переменной. Квестовые скрипты активны постоянно, поэтому оно все равно никуда не пропадет.

Даже не представляю как можно эту функцию рассчитанную на подстановку в неё значений использовать только один раз, мне надо 16  разных имён на выходе получить, в зависимости от места где находится маркер.

String Function GetCellName(ObjectReference O, String S1, String S2)
if (O.GetParentCell().IsInterior() == 0); Обработка Exterior
  If (O.GetCurrentLocation().GetName() != "")
   return (O.GetCurrentLocation().GetName() + " (Снаружи)")
  ElseIf ((O.GetCurrentLocation().GetName() == "") && (O.GetParentCell().GetName() == "")); Обработка World Space
   Int xcell = math.floor(O.getpositionX() / 4096 as Float)
   Int ycell = math.floor(O.getpositionY() / 4096 as Float)
   Int zcell = math.floor(O.getpositionZ())
   return ("Тамриэль " + xcell as String + " , " + ycell as String); Скайрим
  Endif
ElseIf (O.GetParentCell().IsInterior() == 1); Обработка Interior и дефолтный Cell
  If (O.GetParentCell().GetName() != "")
   If ((S1 == "Mark And Recall Markers Cell") && (S2 == "Пусто"))
   Else
    return (O.GetParentCell().GetName())
   Endif
  EndIf
EndIf
EndFunction
Изменено пользователем aaa112aaa
Опубликовано
18.10.2021 19:30:12, aaa112aaa сказал(-а):
Даже не представляю как можно эту функцию рассчитанную на подстановку в неё значений использовать только один раз, мне надо 16  разных имён на выходе получить, в зависимости от места где находится маркер.

Ну, вообще, все зависит от реализации.

Я не понимаю, зачем у тебя такие сложности? Зачем вызывать функцию 16 раз?

Пометка-возврат делается же элементарно.

Кастуется пометка, выбирается слот, на точку игрока переносится определенный заранее созданный маркер. При касте возврата и выбора определенной строки, игрока на этот маркер телепортирует.

 

Вот и вызывай функцию один раз, при установке пометки. Бери cellname и передавай в скрипт квеста, записывай его как проперти или переменную. А при построении меню бери имена ячейки из того списка, что ты уже передал. Не надо заново вызывать функцию, тебе важно только имя и индекс, по которому ты будешь делать возврат на определенный маркер.

Плюс портянки эти с кодом - мне аж поплохело, когда я это все увидел, даже вникать глубоко не стал, что именно ты этими простынями делаешь =)

Опубликовано
18.10.2021 21:07:05, Azazellz сказал(-а):

Ну, вообще, все зависит от реализации.

Я не понимаю, зачем у тебя такие сложности? Зачем вызывать функцию 16 раз?

Пометка-возврат делается же элементарно.

Кастуется пометка, выбирается слот, на точку игрока переносится определенный заранее созданный маркер. При касте возврата и выбора определенной строки, игрока на этот маркер телепортирует.

 

Вот и вызывай функцию один раз, при установке пометки. Бери cellname и передавай в скрипт квеста, записывай его как проперти или переменную. А при построении меню бери имена ячейки из того списка, что ты уже передал. Не надо заново вызывать функцию, тебе важно только имя и индекс, по которому ты будешь делать возврат на определенный маркер.

Плюс портянки эти с кодом - мне аж поплохело, когда я это все увидел, даже вникать глубоко не стал, что именно ты этими простынями делаешь =)

Понял, сделал, проверяю. )

Опубликовано (изменено)

Ну вроде всё оптимизировал на сколько возможно, меню показывает быстро, теперь другая проблема, сделал сохранение имени локации в которой стою в конфиг, а после от туда подтягиваю, и вставляю в функцию CenterOnCell() сначала всё было как надо, помечал, загружал сохранение предыдущее, делал возврат и о чудо, оказывался там где ставил метку, только вот пока это было всего 4 переменных (Имя локации, X, Y, Z), всё работала, а когда сделал на все 16 меток по 4 переменные, то функция CenterOnCell() перестало работать, есть какой альтернативный способ телепортации в локацию без использования указания цели (ObjectReference) ?

Или как сохранить ссылку на ObjectReference? что-то навроде ида, а потом выбирать по этому иду.

Изменено пользователем aaa112aaa
Опубликовано
20.10.2021 15:01:30, aaa112aaa сказал(-а):

Ну вроде всё оптимизировал на сколько возможно, меню показывает быстро, теперь другая проблема, сделал сохранение имени локации в которой стою в конфиг, а после от туда подтягиваю, и вставляю в функцию CenterOnCell() сначала всё было как надо, помечал, загружал сохранение предыдущее, делал возврат и о чудо, оказывался там где ставил метку, только вот пока это было всего 4 переменных (Имя локации, X, Y, Z), всё работала, а когда сделал на все 16 меток по 4 переменные, то функция CenterOnCell() перестало работать, есть какой альтернативный способ телепортации в локацию без использования указания цели (ObjectReference) ?

Или как сохранить ссылку на ObjectReference? что-то навроде ида, а потом выбирать по этому иду.

Зачем тебе вообще CenterOnCell использовать?

Используй MoveTo с указанием объекта. Я ж не зря писал про маркеры в старом сообщении.

Берешь 16 маркеров, ставишь их куда-нибудь в служебную ячейку (лучше в ванильную, уже созданную), забиваешь их в проперти скрипта по номерам.

При касте пометки делаешь MoveTo на маркер под нужным номером, указывая целью игрока. Типа такого: ReturnMarker01.MoveTo(Player, abMatchRotation = true)

При касте возврата делаешь MoveTo на игрока, указывая целью маркер под нужным номером. Типа такого: Player.MoveTo(ReturnMarker01, abMatchRotation = true)

Не забудь только механизм ввести, который игроку перенестись к еще не размещенным маркерам не позволит. bool-переменные какие-нибудь, которые будут включаться, когда игрок пометки делает.

 

Т.е. вся система работает по принципу: вариант в меню (индекс) == маркер. И все.

Имя локации тебе нужно только для интерфейса и отображения, чтоб игрок не путался. В самом скрипте оно нигде не используется.

 

Если совсем круто сделать хочешь - позволь игроку самому название вводить.

Ставишь пометку, появляется окно, в нем доступен ввод текста. Название ячейки, которое ты раньше нашел, получено, и уже в него забито. Можно так оставить и подтвердить выбор, а можно свое ввести.

Я когда-то что-то такое делал, но за давностью лет уже забыл, как именно это окошко с вводом текста вызывается, и с какой системы оно идет вообще =)

Опубликовано (изменено)
20.10.2021 18:22:46, Azazellz сказал(-а):

Зачем тебе вообще CenterOnCell использовать?

Используй MoveTo с указанием объекта. Я ж не зря писал про маркеры в старом сообщении.

Берешь 16 маркеров, ставишь их куда-нибудь в служебную ячейку (лучше в ванильную, уже созданную), забиваешь их в проперти скрипта по номерам.

При касте пометки делаешь MoveTo на маркер под нужным номером, указывая целью игрока. Типа такого: ReturnMarker01.MoveTo(Player, abMatchRotation = true)

При касте возврата делаешь MoveTo на игрока, указывая целью маркер под нужным номером. Типа такого: Player.MoveTo(ReturnMarker01, abMatchRotation = true)

Не забудь только механизм ввести, который игроку перенестись к еще не размещенным маркерам не позволит. bool-переменные какие-нибудь, которые будут включаться, когда игрок пометки делает.

 

Т.е. вся система работает по принципу: вариант в меню (индекс) == маркер. И все.

Имя локации тебе нужно только для интерфейса и отображения, чтоб игрок не путался. В самом скрипте оно нигде не используется.

 

Если совсем круто сделать хочешь - позволь игроку самому название вводить.

Ставишь пометку, появляется окно, в нем доступен ввод текста. Название ячейки, которое ты раньше нашел, получено, и уже в него забито. Можно так оставить и подтвердить выбор, а можно свое ввести.

Я когда-то что-то такое делал, но за давностью лет уже забыл, как именно это окошко с вводом текста вызывается, и с какой системы оно идет вообще =)

У меня итак сделано по принципу MoveTo, но я решил попытаться сделать "костыль" сохранения помеченных точек телепорта в конфиг, если например начал новую игру или сделал пометку в другом сохранении, то скрипт бы загрузил названия локаций (в моём случае, пока что) и при нажатии на "возврат" сверяет имена по доп функции, если имена не совпадают или имя пустое, телепортирует через CenterOnCell, если совпадают, телепортирует стандартно через MoveTo. Пока у меня так сделано, но из-за того что функция CenterOnCell перестала работать пришлось "запретить" использование по умолчанию.


If (IsAllowed == True)
	CheckMark(MarkerReturn, CellName_16, fX_16, fY_16, fZ_16)
Else
	Recall()
EndIf
Изменено пользователем aaa112aaa
Опубликовано
20.10.2021 19:01:08, aaa112aaa сказал(-а):
но я решил попытаться сделать "костыль" сохранения помеченных точек телепорта в конфиг, если например начал новую игру или сделал пометку в другом сохранении

Передавай между сохранениями ID/имя ячейки и координаты маркеров.

По нажатию какой-нибудь специальной кнопки пусть скрипт эти данные подгружает и заново расставляет маркеры.

Не уверен, правда, как это можно сделать.


20.10.2021 19:01:08, aaa112aaa сказал(-а):
но из-за того что функция CenterOnCell перестала работать пришлось "запретить" использование по умолчанию.

Вообще да, на вики вон про нее пишут, что скайрим может вообще зависнуть. Так что лучше ее осторожно использовать.

Опубликовано (изменено)

И снова здравствуйте.

Снова я, снова проблема.

 

Так вот, в скрипте в части "Oninit" есть код и почему-то он выполняется дважды, а то бывает и трижды, если бы не сообщения, я бы об этом и не узнал никогда.

Вот почему так? И не важно какое сохранение, я загружался и на чистое сохранение, без мода.

 

Вот собственно код Event OnInit() :

OnInit()
Event OnInit(); quests that are not run-once (задания, которые не выполняются один раз)
	bIsInitStarted = true
	RegisterForSingleUpdate(5.0); register for an onupdate event in 5 seconds
	Show_Notification("OnInit.", "#00ff00")
	if !(GetPlayer().HasSpell((GetFormFromFile(0x5901, "MarkAndRecall.esp")) as Spell))
		GetPlayer().addspell((GetFormFromFile(0x5901, "MarkAndRecall.esp")) as Spell, false)
		If(bGetCurrentLanguage() == true)
			Show_Notification("Заклинание: " + (GetFormFromFile(0x5901, "MarkAndRecall.esp")).GetName() + " Добавлено.", "#00FF00")
		Else
			Show_Notification("Spell: " + (GetFormFromFile(0x5901, "MarkAndRecall.esp")).GetName() + " Added.", "#00FF00")
		EndIf
	endif
	Quest SKI_ConfigManagerInstance = ((GetFormFromFile(0x802, "SkyUI_SE.esp")) as Quest)
	if self.IsRunning()
		LoadOnlySettings()
		LoadSettingsAtStart()
		if(ConfigMCM.OldVersion != ConfigMCM.Version)
			SKI_ConfigManagerInstance.SetStage(1)
			If(bGetCurrentLanguage() == true)
				MessageBox("Мод: " + self.GetName() + " был обновлён, загрузка настроек.")
				;Show_Notification("Мод: " + self.GetName() + " был обновлён загрузка настроек.", "#00ff00")
			Else
				MessageBox("The mod: " + self.GetName() + " has been updated, loading settings, please wait.")
				;Show_Notification("The mod: " + self.GetName() + " has been updated, loading settings, please wait.", "#00ff00")
			EndIf
			If(bGetCurrentLanguage() == true)
				Show_Notification("Версия " + self.GetName() + " " + ConfigMCM.Version, "#DAA520")
				DebugNotification("Старая версия " + self.GetName() + " " + ConfigMCM.OldVersion, false, "#00FF00")
			Else
				Show_Notification("Version of " + self.GetName() + " " + ConfigMCM.Version, "#DAA520")
				DebugNotification("Old version of " + self.GetName() + " " + ConfigMCM.OldVersion, false, "#00FF00")
			EndIf
			;LoadOnlyLocNames()
			If(bLoadOnlyLocNames() == true)
				Wait(1)
				MarkAndRecallScript.Set1()
				MarkAndRecallScript.Set2()
				MarkAndRecallScript.Set3()
				MarkAndRecallScript.Set4()
				MarkAndRecallScript.Set5()
				MarkAndRecallScript.Set6()
				MarkAndRecallScript.Set7()
				MarkAndRecallScript.Set8()
				MarkAndRecallScript.Set9()
				MarkAndRecallScript.Set10()
				MarkAndRecallScript.Set11()
				MarkAndRecallScript.Set12()
				MarkAndRecallScript.Set13()
				MarkAndRecallScript.Set14()
				MarkAndRecallScript.Set15()
				MarkAndRecallScript.Set16()
				Wait(3)
				RecallsDisplayed()
			EndIf
			If(bGetCurrentLanguage() == true)
				Show_Notification("Все готово.", "#00ff00")
			Else
				Show_Notification("Everything is ready.", "#00ff00")
			EndIf
			ConfigMCM.OldVersion = ConfigMCM.Version
		EndIf
		UpdateSettings()
		;self.OnGameReload()
	endIf
	bIsInitStarted = false
	bIsInitCompleted = true
EndEvent

 

А вот, если нужно, весь скрипт:

 

MarkAndRecallQuestScript
Scriptname MarkAndRecallQuestScript extends Quest Conditional

;Import SKSE
import Debug
import Utility
import Game
import Input
Import UI
Import StringUtil
Import SKI_ConfigBase

;-- Properties --------------------------------------
MarkAndRecallConfigMCMScript property ConfigMCM auto
MarkAndRecallScriptEffect property MarkAndRecallScript auto

bool Property bEnabled = true Auto
Bool Property IsDebugMode = false  Auto  
Bool Property IsAllowed = false  Auto  
Bool Property IsClassicMode = true  Auto
Bool Property bSaveUserSettings = false  Auto
Bool Property bCanCityPortal = true  Auto  Conditional
Bool Property bCheckingNames = false  Auto  Conditional
Bool Property bIsInitStarted = false  Auto
Bool Property bIsInitCompleted = false  Auto

bool property uninstall = false auto
Message property uninstallMessage auto

Bool property ErrorDetected = false  Auto Hidden 
Bool property MENUExtended  Auto Hidden 
Bool property DLC1Extended  Auto Hidden 

String property MinSKSEVersion
	String function get()

		return "2.0.19"
	endFunction
endproperty
Int property MinSKSERelease
	Int function get()

		return 53
	endFunction
endproperty
Int property ERR_SKSE_VERSION_SCPT
	Int function get()

		return 3
	endFunction
endproperty
Int property ERR_SKSE_MISSING
	Int function get()

		return 1
	endFunction
endproperty
Int property ERR_SKSE_BROKEN
	Int function get()

		return 7
	endFunction
endproperty
Int property ERR_SKSE_VERSION_RT
	Int function get()

		return 2
	endFunction
endproperty
Int property ERR_INI_PAPYRUS
	Int function get()

		return 4
	endFunction
endproperty

ReferenceAlias Property Recall1  Auto  
ReferenceAlias Property Recall2  Auto  
ReferenceAlias Property Recall3  Auto  
ReferenceAlias Property Recall4  Auto  
ReferenceAlias Property Recall5  Auto  
ReferenceAlias Property Recall6  Auto  
ReferenceAlias Property Recall7  Auto  
ReferenceAlias Property Recall8  Auto  
ReferenceAlias Property Recall9  Auto  
ReferenceAlias Property Recall10  Auto  
ReferenceAlias Property Recall11  Auto  
ReferenceAlias Property Recall12  Auto  
ReferenceAlias Property Recall13  Auto  
ReferenceAlias Property Recall14  Auto  
ReferenceAlias Property Recall15  Auto  
ReferenceAlias Property Recall16  Auto

String Property Recall1Name  Auto Hidden 
String Property Recall2Name  Auto Hidden 
String Property Recall3Name  Auto Hidden 
String Property Recall4Name  Auto Hidden 
String Property Recall5Name  Auto Hidden 
String Property Recall6Name  Auto Hidden 
String Property Recall7Name  Auto Hidden 
String Property Recall8Name  Auto Hidden 
String Property Recall9Name  Auto Hidden 
String Property Recall10Name  Auto Hidden 
String Property Recall11Name  Auto Hidden 
String Property Recall12Name  Auto Hidden 
String Property Recall13Name  Auto Hidden 
String Property Recall14Name  Auto Hidden 
String Property Recall15Name  Auto Hidden 
String Property Recall16Name  Auto Hidden 

String Property Cell_Name  Auto Hidden 

Float Property f_X  Auto Hidden 
Float Property f_Y  Auto Hidden 
Float Property f_Z  Auto Hidden 

Int Property Distance = 4000  Auto  

;ReferenceAlias Property Player  Auto  

;-- Variables ---------------------------------------
String settings_path = "..\\MarkAndRecall\\UserSettings"

String S_1

String[] sNames
String[] sCN
ReferenceAlias[] aORef

String _Recall_1_Name
String Recall2Name
String Recall3Name
String Recall4Name
String Recall5Name
String Recall6Name
String Recall7Name
String Recall8Name
String Recall9Name
String Recall10Name
String Recall11Name
String Recall12Name
String Recall13Name
String Recall14Name
String Recall15Name
String Recall16Name

String _Cell_Name_1
String _Cell_Name_2
String _Cell_Name_3
String _Cell_Name_4
String _Cell_Name_5
String _Cell_Name_6
String _Cell_Name_7
String _Cell_Name_8
String _Cell_Name_9
String _Cell_Name_10
String _Cell_Name_11
String _Cell_Name_12
String _Cell_Name_13
String _Cell_Name_14
String _Cell_Name_15
String _Cell_Name_16

int _IsNameSet1
int _IsNameSet2
int _IsNameSet3
int _IsNameSet4
int _IsNameSet5
int _IsNameSet6
int _IsNameSet7
int _IsNameSet8
int _IsNameSet9
int _IsNameSet10
int _IsNameSet11
int _IsNameSet12
int _IsNameSet13
int _IsNameSet14
int _IsNameSet15
int _IsNameSet16

float _fX_1
float _fX_2
float _fX_3
float _fX_4
float _fX_5
float _fX_6
float _fX_7
float _fX_8
float _fX_9
float _fX_10
float _fX_11
float _fX_12
float _fX_13
float _fX_14
float _fX_15
float _fX_16
float _fY_1
float _fY_2
float _fY_3
float _fY_4
float _fY_5
float _fY_6
float _fY_7
float _fY_8
float _fY_9
float _fY_10
float _fY_11
float _fY_12
float _fY_13
float _fY_14
float _fY_15
float _fY_16
float _fZ_1
float _fZ_2
float _fZ_3
float _fZ_4
float _fZ_5
float _fZ_6
float _fZ_7
float _fZ_8
float _fZ_9
float _fZ_10
float _fZ_11
float _fZ_12
float _fZ_13
float _fZ_14
float _fZ_15
float _fZ_16
;float _afZ

;/
/;

;-- Functions ---------------------------------------

Event OnInit(); quests that are not run-once (задания, которые не выполняются один раз)
	bIsInitStarted = true
	RegisterForSingleUpdate(5.0); register for an onupdate event in 5 seconds
	Show_Notification("OnInit.", "#00ff00")
	if !(GetPlayer().HasSpell((GetFormFromFile(0x5901, "MarkAndRecall.esp")) as Spell))
		GetPlayer().addspell((GetFormFromFile(0x5901, "MarkAndRecall.esp")) as Spell, false)
		If(bGetCurrentLanguage() == true)
			Show_Notification("Заклинание: " + (GetFormFromFile(0x5901, "MarkAndRecall.esp")).GetName() + " Добавлено.", "#00FF00")
		Else
			Show_Notification("Spell: " + (GetFormFromFile(0x5901, "MarkAndRecall.esp")).GetName() + " Added.", "#00FF00")
		EndIf
	endif
	Quest SKI_ConfigManagerInstance = ((GetFormFromFile(0x802, "SkyUI_SE.esp")) as Quest)
	if self.IsRunning()
		LoadOnlySettings()
		LoadSettingsAtStart()
		if(ConfigMCM.OldVersion != ConfigMCM.Version)
			SKI_ConfigManagerInstance.SetStage(1)
			If(bGetCurrentLanguage() == true)
				MessageBox("Мод: " + self.GetName() + " был обновлён, загрузка настроек.")
				;Show_Notification("Мод: " + self.GetName() + " был обновлён загрузка настроек.", "#00ff00")
			Else
				MessageBox("The mod: " + self.GetName() + " has been updated, loading settings, please wait.")
				;Show_Notification("The mod: " + self.GetName() + " has been updated, loading settings, please wait.", "#00ff00")
			EndIf
			If(bGetCurrentLanguage() == true)
				Show_Notification("Версия " + self.GetName() + " " + ConfigMCM.Version, "#DAA520")
				DebugNotification("Старая версия " + self.GetName() + " " + ConfigMCM.OldVersion, false, "#00FF00")
			Else
				Show_Notification("Version of " + self.GetName() + " " + ConfigMCM.Version, "#DAA520")
				DebugNotification("Old version of " + self.GetName() + " " + ConfigMCM.OldVersion, false, "#00FF00")
			EndIf
			;LoadOnlyLocNames()
			If(bLoadOnlyLocNames() == true)
				Wait(1)
				MarkAndRecallScript.Set1()
				MarkAndRecallScript.Set2()
				MarkAndRecallScript.Set3()
				MarkAndRecallScript.Set4()
				MarkAndRecallScript.Set5()
				MarkAndRecallScript.Set6()
				MarkAndRecallScript.Set7()
				MarkAndRecallScript.Set8()
				MarkAndRecallScript.Set9()
				MarkAndRecallScript.Set10()
				MarkAndRecallScript.Set11()
				MarkAndRecallScript.Set12()
				MarkAndRecallScript.Set13()
				MarkAndRecallScript.Set14()
				MarkAndRecallScript.Set15()
				MarkAndRecallScript.Set16()
				Wait(3)
				RecallsDisplayed()
			EndIf
			If(bGetCurrentLanguage() == true)
				Show_Notification("Все готово.", "#00ff00")
			Else
				Show_Notification("Everything is ready.", "#00ff00")
			EndIf
			ConfigMCM.OldVersion = ConfigMCM.Version
		EndIf
		UpdateSettings()
		;self.OnGameReload()
	endIf
	bIsInitStarted = false
	bIsInitCompleted = true
EndEvent

Event OnPlayerLoadGame()
	Show_Notification("MarkAndRecallQuest: OnPlayerLoadGame", "#00ff00")
	LoadSettingsAtStart()
EndEvent

Function OnGameReload(); quests that were running at time of save (задания, которые выполнялись во время сохранения) requires SkyUI's SKI_PlayerLoadGameAlias script; or use Player's OnPlayerLoadGame event
	LoadOnlySettings()
	LoadSettingsAtStart()
	DebugNotification("OnGameReload.", true , "#00FF00")
	if (IsDebugMode)
		MarkAndRecallScript.IsDebugMode = IsDebugMode
		ConfigMCM.bIsDebugMode = IsDebugMode
	endif
	if (IsAllowed)
		MarkAndRecallScript.IsAllowed = IsAllowed
		ConfigMCM.bIsAllowed = IsAllowed
	endif
	if (IsClassicMode)
		MarkAndRecallScript.IsClassicMode = IsClassicMode
		ConfigMCM.bIsClassicMode = IsClassicMode
	endif
	if (bCanCityPortal)
		MarkAndRecallScript.bCanCityPortal = bCanCityPortal
		ConfigMCM.bIsClassicMode = bCanCityPortal
	endif
	if (bCheckingNames)
		MarkAndRecallScript.bCheckingNames = bCheckingNames
		ConfigMCM.bIsClassicMode = bCheckingNames
	endif

;/
	bool MENUCheck = (Game.GetFormFromFile(0xE00, "UIExtensions.esp") != None)
	If MENUCheck
		Debug.Trace("Notification: Menu system loaded.", 1)
		MENUExtended = true
	Else
		Debug.Trace("WARNING: Menu system disabled, plugin UIExtensions.esp failed to load.", 1)
		MENUExtended = false
	Endif
/;
	
;	Check for DLC1
	bool DLC1Check = (Game.GetFormFromFile(0x588C, "Dawnguard.esm") != None) ; Checks for DLC1VampireTurnScript Quest
	If DLC1Check
		Debug.Trace("Notification: Dawnguard loaded.", 1)
		DLC1Extended = true
	Else
		DLC1Extended = false
		Debug.Trace("WARNING: Dawnguard not loaded.", 1)
	Endif
	
	bool APNLCheck = (Game.GetFormFromFile(0x824, "SkyUI_SE.esp") != None)
	If APNLCheck
		Debug.Trace("Notification: SkyUI_SE.esp loaded.", 1)
	Else
		Debug.Trace("WARNING: Plugin failed to load SkyUI not found.", 1)
	Endif

	ErrorDetected = false
	if skse.GetVersionRelease() == 0
		self.Error(self.ERR_SKSE_MISSING, "The Skyrim Script Extender (SKSE64) не запущен.")
		return 
	elseIf self.GetType() == 0
		self.Error(self.ERR_SKSE_BROKEN, "SKSE64 скрипты были перезаписаны или неправильно установлены.\nПереустановка SKSE64 может исправить эту проблему.")
		return 
	elseIf skse.GetVersionRelease() < self.MinSKSERelease
		self.Error(self.ERR_SKSE_VERSION_RT, "SKSE64 является устаревшей версией.\n" + "Требуемая версия: " + self.MinSKSEVersion + " или новее\n" + "Обнаруженная версия: " + skse.GetVersion() as String + "." + skse.GetVersionMinor() as String + "." + skse.GetVersionBeta() as String)
		return 
	elseIf skse.GetScriptVersionRelease() < self.MinSKSERelease
		self.Error(self.ERR_SKSE_VERSION_SCPT, "SKSE64 скрипты устарели.\nВы скорее всего забыли установить/обновить эти скрипты, которые поставляются вместе с SKSE64.")
		return 
	endIf
	
	if utility.GetINIInt("iMinMemoryPageSize:Papyrus") <= 0 || utility.GetINIInt("iMaxMemoryPageSize:Papyrus") <= 0 || utility.GetINIInt("iMaxAllocatedMemoryBytes:Papyrus") <= 0
		self.Error(self.ERR_INI_PAPYRUS, "Ваши настройки Papyrus INI являются недействительными. Пожалуйста исправьте их.")
		return 
	endIf
	
	Quest MarkAndRecallVersionCheck = ((GetFormFromFile(0x52FF0, "MarkAndRecall.esp")) as Quest)
	Quest MarkAndRecallObjectivesDisplayedQuest = ((GetFormFromFile(0x52FEF, "MarkAndRecall.esp")) as Quest)
	Quest SKI_ConfigManagerInstance = ((GetFormFromFile(0x802, "SkyUI_SE.esp")) as Quest)
	if(ConfigMCM.OldVersion as String != ConfigMCM.Version as String)
		SKI_ConfigManagerInstance.SetStage(1)
		If(bGetCurrentLanguage() == true)
			MessageBox("Мод: " + self.GetName() + " был обновлён, загрузка настроек.")
			;Show_Notification("Мод: " + self.GetName() + " был обновлён загрузка настроек.", "#00ff00")
		Else
			MessageBox("The mod: " + self.GetName() + " has been updated, loading settings, please wait.")
			;Show_Notification("The mod: " + self.GetName() + " has been updated, loading settings, please wait.", "#00ff00")
		EndIf
		If(bGetCurrentLanguage() == true)
			Show_Notification("Мод: " + self.GetName() + " был обновлён загрузка настроек.", "#00ff00")
		Else
			Show_Notification("The mod: " + self.GetName() + " has been updated, loading settings, please wait.", "#00ff00")
		EndIf
		If(bGetCurrentLanguage() == true)
			Show_Notification("Версия " + self.GetName() + " " + ConfigMCM.Version, "#DAA520")
			DebugNotification("Старая версия " + self.GetName() + " " + ConfigMCM.OldVersion, true , "#00FF00")
		Else
			Show_Notification("Version of " + self.GetName() + " " + ConfigMCM.Version, "#DAA520")
			DebugNotification("Old version of " + self.GetName() + " " + ConfigMCM.OldVersion, true , "#00FF00")
		EndIf
		;LoadOnlyLocNames()
		If(bLoadOnlyLocNames() == true)
			Wait(1)
			MarkAndRecallScript.Set1()
			MarkAndRecallScript.Set2()
			MarkAndRecallScript.Set3()
			MarkAndRecallScript.Set4()
			MarkAndRecallScript.Set5()
			MarkAndRecallScript.Set6()
			MarkAndRecallScript.Set7()
			MarkAndRecallScript.Set8()
			MarkAndRecallScript.Set9()
			MarkAndRecallScript.Set10()
			MarkAndRecallScript.Set11()
			MarkAndRecallScript.Set12()
			MarkAndRecallScript.Set13()
			MarkAndRecallScript.Set14()
			MarkAndRecallScript.Set15()
			MarkAndRecallScript.Set16()
			Wait(3)
			RecallsDisplayed()
		EndIf
		If(bGetCurrentLanguage() == true)
			Show_Notification("Все готово.", "#00ff00")
		Else
			Show_Notification("Everything is ready.", "#00ff00")
		EndIf
		ConfigMCM.OldVersion = ConfigMCM.Version
	Else
	EndIf
	UpdateSettings()
EndFunction

Function UpdateSettings()
	;ConfigMCM.bEnabled = bEnabled
	If bEnabled
		MarkAndRecallScript.IsDebugMode = IsDebugMode
		MarkAndRecallScript.IsAllowed = IsAllowed
		MarkAndRecallScript.IsClassicMode = IsClassicMode
		MarkAndRecallScript.bCanCityPortal = bCanCityPortal
		MarkAndRecallScript.bCheckingNames = bCheckingNames
		;ConfigMCM.bEnabled = bEnabled
		ConfigMCM.bIsAllowed = IsAllowed
		ConfigMCM.bIsClassicMode = IsClassicMode
		ConfigMCM.bIsDebugMode = IsDebugMode
		ConfigMCM.bCanCityPortal = bCanCityPortal
		ConfigMCM.bCheckingNames = bCheckingNames
	EndIf
	if (uninstall)
		Quest MarkAndRecallVersionCheck = ((GetFormFromFile(0x52FF0, "MarkAndRecall.esp")) as Quest)
		Quest MarkAndRecallObjectivesDisplayedQuest = ((GetFormFromFile(0x52FEF, "MarkAndRecall.esp")) as Quest)
		;Quest MarkAndRecallConfigQuest = ((GetFormFromFile(0x23D97, "MarkAndRecall.esp")) as Quest)
		;MarkAndRecallConfigQuest.stop()
		MarkAndRecallVersionCheck.stop()
		MarkAndRecallObjectivesDisplayedQuest.stop()
		Self.stop()
		If(bGetCurrentLanguage() == true)
			Show_Notification("Квест: " + self.GetName() + " Остановлен.", "#FF0000")
		Else
			Show_Notification("Quest: " + self.GetName() + " Stoped.", "#FF0000")
		EndIf
		if (GetPlayer().HasSpell((GetFormFromFile(0x5901, "MarkAndRecall.esp")) as Spell))
			; Forces this actor to unequip the specified spell. The casting source can be:
			; 0 - Left hand
			; 1 - Right hand
			; UnequipSpell(Spell akSpell, int aiSource)
			Form leftHand = GetPlayer().GetEquippedObject(0)
			Form rightHand = GetPlayer().GetEquippedObject(1)
			if (leftHand as Spell != none)
				GetPlayer().UnequipSpell((leftHand as Spell), 0)
			endif
			if (rightHand as Spell != none)
				GetPlayer().UnequipSpell((rightHand as Spell), 1)
			endif
			wait(1)
			GetPlayer().RemoveSpell((GetFormFromFile(0x5901, "MarkAndRecall.esp")) as Spell)
			If(bGetCurrentLanguage() == true)
				Show_Notification("Заклинание: " + (GetFormFromFile(0x5901, "MarkAndRecall.esp")).GetName() + " Удалено.", "#FF0000")
			Else
				Show_Notification("Spell: " + (GetFormFromFile(0x5901, "MarkAndRecall.esp")).GetName() + " Removed.", "#FF0000")
			EndIf
		endif
		uninstallMessage.Show(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
		Quest SKI_ConfigManagerInstance = ((GetFormFromFile(0x802, "SkyUI_SE.esp")) as Quest)
		SKI_ConfigManagerInstance.SetStage(1)
		wait(1)
	Else
		SaveSettings()
	endif
EndFunction

Event OnGameLoad()
	Show_Notification("OnGameLoad.", "#00ff00")
EndEvent

Event OnUpdate()
	DebugNotification("OnUpdate.", true , "#00FF00")
	if (IsDebugMode)
		MarkAndRecallScript.IsDebugMode = IsDebugMode
		ConfigMCM.bIsDebugMode = IsDebugMode
	endif
	if (IsAllowed)
		MarkAndRecallScript.IsAllowed = IsAllowed
		ConfigMCM.bIsAllowed = IsAllowed
	endif
	if (IsClassicMode)
		MarkAndRecallScript.IsClassicMode = IsClassicMode
		ConfigMCM.bIsClassicMode = IsClassicMode
	endif
	if (bCanCityPortal)
		MarkAndRecallScript.bCanCityPortal = bCanCityPortal
		ConfigMCM.bIsClassicMode = bCanCityPortal
	endif
	if (bCheckingNames)
		MarkAndRecallScript.bCheckingNames = bCheckingNames
		ConfigMCM.bIsClassicMode = bCheckingNames
	endif
	SaveSettings()
EndEvent

function Error(Int a_errId, String a_msg)
	MessageBox("Кодовая ошибка " + a_errId as String + "\n\n" + a_msg)
	ErrorDetected = true
endFunction

String Function DebugNotification(String S, bool c, String color = "")
	If(IsDebugMode == true)
		if (c)
			((Self as Form) as UILIB_1).ShowNotification(S, color)
		Else
			Notification(S)
		endif
	EndIf
EndFunction

Function Show_Notification_Icon(String S1, String S2, int i, String S3)
{String asMessage, String asIconPath, Int aiIconFrame = 0, String asColor = "#FFFFFF"}
	return ((Self as Form) as UILIB_1).ShowNotificationIcon(S1, S2, i, S3)
EndFunction

Function Show_Notification(String S1, String S2)
{String asMessage, String asColor = "#FFFFFF"}
	return ((Self as Form) as UILIB_1).ShowNotification(S1, S2)
EndFunction

;/
Int Function ShowList(String asTitle = "", String[] asOptions, Int aiStartIndex, Int aiDefaultIndex)
	If(bMenuOpen)
		Return -1
	EndIf
	bMenuOpen = True
	iInput = -1
	sTitle = asTitle
	sOptions = asOptions
	iStartIndex = aiStartIndex
	iDefaultIndex = aiDefaultIndex
	ListMenu_Open(Self)
	While(bMenuOpen)
		Utility.WaitMenuMode(0.1)
	EndWhile
	ListMenu_Release(Self)
	Return iInput
EndFunction

	iIndex = 1
	while iIndex <= 16;self.GetNumAliases()
		iIndex += 1
	endWhile

Function ShowMarkAndRecallMenu()
	String[] sOptions = new String[5]
	sOptions = new String[5]
	sOptions[0] = "First"
	sOptions[1] = "Second"
	sOptions[2] = "Third"
	sOptions[3] = "Fourth"
	sOptions[4] = "Fifth"
	UILIB_1.ListMenu_Open(Self)
EndFunction
Int Property iMenuItemIndex = 5 Auto  
/;
Function ShowMarkAndRecallMenu()
	String Title
	String MenuItem1
	String MenuItem2
	String MenuItem3
	String MenuItem4
	String sCancel
	If(bGetCurrentLanguage() == true)
		Title = "Меню Пометки и Возврата"
		MenuItem1 = "Пометка"
		MenuItem2 = "Возврат"
		MenuItem3 = "Проверка имен"
		MenuItem4 = "Городской портал"
		sCancel = "Отмена"
	Else
		Title = "Mark & Recall Menu"
		MenuItem1 = "Mark"
		MenuItem2 = "Recall"
		MenuItem3 = "Name verification"
		MenuItem4 = "City Portal"
		sCancel = "Cancel"
	EndIf
	String[] sOptions = new String[5]
		sOptions[0] = MenuItem1
		sOptions[1] = MenuItem2
		sOptions[2] = MenuItem3
		sOptions[3] = MenuItem4
		sOptions[4] = sCancel
	Int iInput = ((Self as Form) as UILIB_1).ShowList(Title, sOptions, 4, 4)
EndFunction

Function ShowMarkMenu()
	String[] sOptions = new String[17]
	String Title
	String sCancel
	String RecallName
	String CellName
	int iIndex
	sNames = new String[16]
	aORef = new ReferenceAlias[16]
	sNames[1] = Recall1Name
	sNames[2] = Recall2Name
	sNames[3] = Recall3Name
	sNames[4] = Recall4Name
	sNames[5] = Recall5Name
	sNames[6] = Recall6Name
	sNames[7] = Recall7Name
	sNames[8] = Recall8Name
	sNames[9] = Recall9Name
	sNames[10] = Recall10Name
	sNames[11] = Recall11Name
	sNames[12] = Recall12Name
	sNames[13] = Recall13Name
	sNames[14] = Recall14Name
	sNames[15] = Recall15Name
	sNames[16] = Recall16Name
	aORef[1] = Recall1
	aORef[2] = Recall2
	aORef[3] = Recall3
	aORef[4] = Recall4
	aORef[5] = Recall5
	aORef[6] = Recall6
	aORef[7] = Recall7
	aORef[8] = Recall8
	aORef[9] = Recall9
	aORef[10] = Recall10
	aORef[11] = Recall11
	aORef[12] = Recall12
	aORef[13] = Recall13
	aORef[14] = Recall14
	aORef[15] = Recall15
	aORef[16] = Recall16
	If(bGetCurrentLanguage() == true)
		Title = "Меню Пометки"
		RecallName = "Пусто"
		sCancel = "Отмена"
	Else
		Title = "Mark Menu"
		RecallName = "Empty"
		sCancel = "Cancel"
	EndIf
	iIndex = 1
	while iIndex <= 16;self.GetNumAliases()
		if (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 0)
			sCN[iIndex] = aORef[iIndex].GetRef().GetCurrentLocation().GetName()
			;DebugNotification("GetCurrentLocation: " + " " + iIndex + " " + aORef[iIndex].GetRef().GetCurrentLocation().GetName())
		ElseIf (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 1)
			sCN[iIndex] = aORef[iIndex].GetRef().GetParentCell().GetName()
			;DebugNotification("GetParentCell: " + " " + iIndex + " " + aORef[iIndex].GetRef().GetParentCell().GetName())
		EndIf
		If (GetCellNameIdentical(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex]) == false)
			sNames[iIndex] = GetCellName(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex])
			if sNames[iIndex] == "Mark And Recall Markers Cell"
				sNames[iIndex] = RecallName
				sOptions[0] = sCancel
				sOptions[1] = "Mark " + iIndex + " - " + sNames[1]
				sOptions[2] = ("Mark " + iIndex + " - " + sNames[2])
				sOptions[3] = ("Mark " + iIndex + " - " + sNames[3])
				sOptions[4] = ("Mark " + iIndex + " - " + sNames[4])
				sOptions[5] = ("Mark " + iIndex + " - " + sNames[5])
				sOptions[6] = ("Mark " + iIndex + " - " + sNames[6])
				sOptions[7] = ("Mark " + iIndex + " - " + sNames[7])
				sOptions[8] = ("Mark " + iIndex + " - " + sNames[8])
				sOptions[9] = ("Mark " + iIndex + " - " + sNames[9])
				sOptions[10] = ("Mark " + iIndex + " - " + sNames[10])
				sOptions[11] = ("Mark " + iIndex + " - " + sNames[11])
				sOptions[12] = ("Mark " + iIndex + " - " + sNames[12])
				sOptions[13] = ("Mark " + iIndex + " - " + sNames[13])
				sOptions[14] = ("Mark " + iIndex + " - " + sNames[14])
				sOptions[15] = ("Mark " + iIndex + " - " + sNames[15])
				sOptions[16] = ("Mark " + iIndex + " - " + sNames[16])
				DebugNotification("sNames: " + " " + iIndex + " " + sNames[iIndex], false)
			endif
		endif
		iIndex += 1
	endWhile
	Int iInput = ((Self as Form) as UILIB_1).ShowList(Title, sOptions, 0, 0)
EndFunction

Function ShowRecallMenu()
	String[] sOptions = new String[16]
	String Title
	String RecallName
	String CellName
	int iIndex
	sNames = new String[16]
	aORef = new ReferenceAlias[16]
	sNames[1] = Recall1Name
	sNames[2] = Recall2Name
	sNames[3] = Recall3Name
	sNames[4] = Recall4Name
	sNames[5] = Recall5Name
	sNames[6] = Recall6Name
	sNames[7] = Recall7Name
	sNames[8] = Recall8Name
	sNames[9] = Recall9Name
	sNames[10] = Recall10Name
	sNames[11] = Recall11Name
	sNames[12] = Recall12Name
	sNames[13] = Recall13Name
	sNames[14] = Recall14Name
	sNames[15] = Recall15Name
	sNames[16] = Recall16Name
	aORef[1] = Recall1
	aORef[2] = Recall2
	aORef[3] = Recall3
	aORef[4] = Recall4
	aORef[5] = Recall5
	aORef[6] = Recall6
	aORef[7] = Recall7
	aORef[8] = Recall8
	aORef[9] = Recall9
	aORef[10] = Recall10
	aORef[11] = Recall11
	aORef[12] = Recall12
	aORef[13] = Recall13
	aORef[14] = Recall14
	aORef[15] = Recall15
	aORef[16] = Recall16
	iIndex = 1
	while iIndex <= 16;self.GetNumAliases()
		If(bGetCurrentLanguage() == true)
			RecallName = "Пусто"
		Else
			RecallName = "Empty"
		EndIf
		if (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 0)
			sCN[iIndex] = aORef[iIndex].GetRef().GetCurrentLocation().GetName()
			;DebugNotification("GetCurrentLocation: " + " " + iIndex + " " + aORef[iIndex].GetRef().GetCurrentLocation().GetName())
		ElseIf (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 1)
			sCN[iIndex] = aORef[iIndex].GetRef().GetParentCell().GetName()
			;DebugNotification("GetParentCell: " + " " + iIndex + " " + aORef[iIndex].GetRef().GetParentCell().GetName())
		EndIf
		If (GetCellNameIdentical(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex]) == false)
			sNames[iIndex] = GetCellName(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex])
			if sNames[iIndex] == "Mark And Recall Markers Cell"
				sNames[iIndex] = RecallName
				DebugNotification("sNames: " + " " + iIndex + " " + sNames[iIndex], false)
			endif
		endif
		DebugNotification("sNames: " + " " + iIndex + " " + sNames[iIndex], false)
		sOptions[0] = sNames[1]
		sOptions[1] = sNames[2]
		sOptions[2] = sNames[3]
		sOptions[3] = sNames[4]
		sOptions[4] = sNames[5]
		sOptions[5] = sNames[6]
		sOptions[6] = sNames[7]
		sOptions[7] = sNames[8]
		sOptions[8] = sNames[9]
		sOptions[9] = sNames[10]
		sOptions[10] = sNames[11]
		sOptions[11] = sNames[12]
		sOptions[12] = sNames[13]
		sOptions[13] = sNames[14]
		sOptions[14] = sNames[15]
		sOptions[15] = sNames[16]
		iIndex += 1
	endWhile
	If(bGetCurrentLanguage() == true)
		Title = "Меню Возврата"
	Else
		Title = "Recall Menu"
	EndIf
	Int iInput = ((Self as Form) as UILIB_1).ShowList(Title, sOptions, 0, 0)
EndFunction

bool function bGetCurrentLanguage()
	If(GetINIString("sLanguage:General") == "")
		Show_Notification("Your language is not recognized, notifications will be disabled.", "#FF0000")
	ElseIf(GetINIString("sLanguage:General") == "ENGLISH")
		return false
	ElseIf(GetINIString("sLanguage:General") == "RUSSIAN")
		return true
	EndIf
endFunction

String function GetCurrentLanguage()
	If(GetINIString("sLanguage:General") == "")
		Notification("Your language is not recognized, notifications will be disabled.")
	Else
		return GetINIString("sLanguage:General")
	EndIf
endFunction

string function FormatBoolean(bool b, String S1, String S2)
	if (b)
		return S1
	endIf
	return S2
endFunction

string function FormatBooleanColor(bool b, String S1, String S2, bool c)
	if (b)
		if (c)
			((Self as Form) as UILIB_1).ShowNotification(S1, "#00FF00")
		Else
			return S1
		endif
	Else
		if (c)
			((Self as Form) as UILIB_1).ShowNotification(S2, "#FF0000")
		Else
			return S2
		endif
	endif
endFunction

function ToggleMapMarker(objectreference objMarked)

	Trace("ToggleMapMarker, objMarked.GetDisplayName():" + objMarked.GetDisplayName(), 0)
	if objMarked
		ReferenceAlias refAlias
		Int iIndex = 1
		while iIndex < 16;self.GetNumAliases()
			If ((refAlias.GetRef().GetParentCell() != MarkAndRecallScript.IgnoreCell) && (refAlias.GetRef() != GetPlayer()))
				refAlias = self.GetNthAlias(iIndex) as ReferenceAlias
				if refAlias.GetRef() == objMarked
					refAlias.Clear()
					self.SetObjectiveDisplayed(iIndex, false, true)
					If(bGetCurrentLanguage() == true)
						Show_Notification("Маркер на карте удален.", "#FF0000")
					Else
						Show_Notification("The marker on the map has been removed.", "#FF0000")
					EndIf
					return 
				endIf
			endIf
			iIndex += 1
		endWhile
		iIndex = 1
		while iIndex < 16;self.GetNumAliases()
			If ((refAlias.GetRef().GetParentCell() != MarkAndRecallScript.IgnoreCell) && (refAlias.GetRef() != GetPlayer()))
				refAlias = self.GetNthAlias(iIndex) as ReferenceAlias
				if refAlias.GetRef() == none
					refAlias.ForceRefTo(objMarked)
					If (refAlias.GetRef().GetParentCell() != MarkAndRecallScript.IgnoreCell)
						self.SetObjectiveDisplayed(iIndex, true, true)
					EndIf
					If(bGetCurrentLanguage() == true)
						Show_Notification("Маркер добавлен на карту.", "#00FF00")
					Else
						Show_Notification("Marker added to the map.", "#00FF00")
					EndIf
					return 
				endIf
			endIf
			iIndex += 1
		endWhile
		If(bGetCurrentLanguage() == true)
			Show_Notification("Достигнуто максимальное количество маркеров. Удалите маркеры.", "#FF0000")
		Else
			Show_Notification("The maximum number of markers has been reached. Remove the markers.", "#FF0000")
		EndIf
	endIf
endFunction

bool Function IsMarkerNearPlayer(ObjectReference O)
	Actor player = GetPlayer()
	Cell targetCell = O.GetParentCell()
	Cell playerCell = player.GetParentCell()
	
	if (targetCell != playerCell)
		return false
	else
		if (player.GetDistance(O) >= Distance)
			; pretty darned far away -- safe
			return false
		else
			; too close for comfort
			return true
		endif
	endif
endFunction

Function IsIdentical(String S1, String S2)
	String Identical = "Совпадает "
	String NotIdentical = "Не Совпадает "
	String Empty = " is Empty "
	If(S1 == S2)
		If(S1 == "")
			notification(Identical + " " + Empty)
		else
			notification(Identical)
		Endif
	else
			notification(NotIdentical)
	EndIf
EndFunction

bool Function bIsIdentical(String S1, String S2)
	If(S1 == S2)
		If(S1 == "")
			return false
		else
			return true
		Endif
	else
		return false
	EndIf
EndFunction

Bool Function GetCellNameIdenticalInvert(ObjectReference O, String S1, String S2)
	String CellName
	String WorldSpaceName
	If ((S1 == S2) && (S2 != ""))
		DebugNotification("True", false)
		return true
	ElseIf (S1 != S2)
		If ((S2 == "") && (S1 != ""))
			DebugNotification("True (S2 == Empty) && (S1 != Empty)", false)
			return true
		ElseIf ((S2 != "") && (S1 == ""))
			If ((O.GetCurrentLocation().GetName() == "") && (O.GetParentCell().GetName() == ""))
				Int xcell = math.floor(O.getpositionX() / 4096 as Float)
				Int ycell = math.floor(O.getpositionY() / 4096 as Float)
				Int zcell = math.floor(O.getpositionZ())
				If(bGetCurrentLanguage() == true)
					WorldSpaceName = "Тамриэль"
				Else
					WorldSpaceName = "Tamriel"
				EndIf
				If (S2 == (WorldSpaceName + " " + xcell as String + " , " + ycell as String)); Скайрим
					DebugNotification("True Tamriel", false)
					return true
				Else
					DebugNotification("False Tamriel", false)
					return false
				EndIf
			EndIf
			If(bGetCurrentLanguage() == true)
				CellName = "Пусто"
			Else
				CellName = "Empty"
			EndIf
		ElseIf ((S1 == "Mark And Recall Markers Cell") && (S2 == CellName))
			DebugNotification("True - Ignore Cell", false)
			return true
		Endif
		DebugNotification("False - (S1 != S2)", false)
;		Notification("GetWorldSpaceName: " + O.GetWorldSpace().GetName())
		return false
	ElseIf (S2 == "")
		DebugNotification("True (S2 == Empty)", false)
		return true
	EndIf
EndFunction

Bool Function GetCellNameIdentical(ObjectReference O, String S1, String S2)
	String CellName
	String LocationName
	String WorldSpaceName
	If ((S1 == S2) && (S2 != ""))
		return true
	ElseIf (S1 != S2)
		If(bGetCurrentLanguage() == true)
			LocationName = "(Снаружи)"
		Else
			LocationName = "(Outside)"
		EndIf
		If ((S2 == (S1 + " " + LocationName)) && (S1 != ""))
			DebugNotification("True - (S2 == (S1 + ( Outside)))", false)
			return true
		ElseIf ((S2 == "") && (S1 != ""))
			DebugNotification("False - (S2 == Empty) && (S1 != Empty)", false)
			return false
		ElseIf ((S2 != "") && (S1 == ""))
			If ((O.GetCurrentLocation().GetName() == "") && (O.GetParentCell().GetName() == ""))
;				Notification("GetWorldSpaceName: " + O.GetWorldSpace().GetName())
				Int xcell = math.floor(O.getpositionX() / 4096 as Float)
				Int ycell = math.floor(O.getpositionY() / 4096 as Float)
				Int zcell = math.floor(O.getpositionZ())
				If(bGetCurrentLanguage() == true)
					WorldSpaceName = "Тамриэль"
				Else
					WorldSpaceName = "Tamriel"
				EndIf
				If (S2 == (WorldSpaceName + " " + xcell as String + " , " + ycell as String)); Скайрим
					DebugNotification("True Tamriel", false)
					return true
				Else
					DebugNotification("False Tamriel", false)
					return false
				EndIf
			EndIf
			If(bGetCurrentLanguage() == true)
				CellName = "Пусто"
			Else
				CellName = "Empty"
			EndIf
		ElseIf ((S1 == "Mark And Recall Markers Cell") && (S2 == CellName))
			DebugNotification("True - Ignore Cell", false)
			return true
		Endif
		DebugNotification("False - (S1 != S2)", false)
		return false
	ElseIf (S2 == "")
		DebugNotification("False - (S2 == Empty)", false)
		return false
	ElseIf ((S1 == "") && (S2 == ""))
		DebugNotification("False - Strings == Empty", false)
		return false
	EndIf
EndFunction

String Function GetCellName(ObjectReference O, String S1, String S2)
	String CellName
	String LocationName
	String WorldSpaceName
	if (O.GetParentCell().IsInterior() == 0)
		If (O.GetCurrentLocation().GetName() != "")
			;DebugNotification("True")
			If(bGetCurrentLanguage() == true)
				LocationName = "(Снаружи)"
			Else
				LocationName = "(Outside)"
			EndIf
			;DebugNotification(LocationName)
			return (O.GetCurrentLocation().GetName() + " " + LocationName)
		ElseIf ((O.GetCurrentLocation().GetName() == "") && (O.GetParentCell().GetName() == ""))
			Int xcell = math.floor(O.getpositionX() / 4096 as Float)
			Int ycell = math.floor(O.getpositionY() / 4096 as Float)
			Int zcell = math.floor(O.getpositionZ())
			If(bGetCurrentLanguage() == true)
				WorldSpaceName = "Тамриэль"
			Else
				WorldSpaceName = "Tamriel"
			EndIf
			;DebugNotification(WorldSpaceName)
			return (WorldSpaceName + " " + xcell as String + " , " + ycell as String); Скайрим
		Endif
	ElseIf (O.GetParentCell().IsInterior() == 1)
		If (O.GetParentCell().GetName() != "")
			If(bGetCurrentLanguage() == true)
				CellName = "Пусто"
			Else
				CellName = "Empty"
			EndIf
			If ((S1 == "Mark And Recall Markers Cell") && (S2 == CellName))
			Else
				;DebugNotification("Interior")
				return (O.GetParentCell().GetName())
			Endif
		EndIf
	EndIf
EndFunction

String Function GetCellName1(ObjectReference O, String S1, String S2)
	If ((S1 == S2) && (S2 != ""))
	ElseIf ((S1 == "") && (O.GetCurrentLocation().GetName() != ""))
		if ((O.GetParentCell().IsInterior() == 0) && (S1 == S2))
			return (O.GetCurrentLocation().GetName() + " (Снаружи)")
		Endif
	ElseIf ((S1 == "") && (O.GetCurrentLocation().GetName() == "") && (O.GetParentCell().GetName() == ""))
		Int xcell = math.floor(O.getpositionX() / 4096 as Float)
		Int ycell = math.floor(O.getpositionY() / 4096 as Float)
		Int zcell = math.floor(O.getpositionZ())
;		Notification("Check 4: " + O.GetWorldSpace().GetName() + " " + xcell as String + " , " + ycell as String)
		return ("Тамриэль " + xcell as String + " , " + ycell as String); Скайрим
	ElseIf (S1 != S2)
;		Notification("Check: Else")
		If ((S2 == "") && (S1 != ""))
			if (O.GetParentCell().IsInterior() == 0)
				If (O.GetCurrentLocation().GetName() != "")
;					Notification("Check 2: " + O.GetCurrentLocation().GetName() + " (Outside)")
					return (O.GetCurrentLocation().GetName() + " (Снаружи)")
				Endif
			ElseIf (O.GetParentCell().IsInterior() == 1)
				If (O.GetParentCell().GetName() != "")
;					Notification("Check: " + O.GetParentCell().GetName())
					return (O.GetParentCell().GetName())
				Endif
			Endif
		ElseIf ((S1 != "Mark And Recall Markers Cell") && (S2 != "Пусто"))
			If (O.GetParentCell().GetName() != "")
;				Notification("Check 3: " + O.GetParentCell().GetName())
				return (O.GetParentCell().GetName())
			Endif
		ElseIf ((S1 == "Mark And Recall Markers Cell") && (S2 != "Пусто"))
			If (O.GetParentCell().GetName() != "")
				return (O.GetParentCell().GetName())
			Endif
		ElseIf ((S1 == "Mark And Recall Markers Cell") && (S2 == "Пусто"))
		Endif
	EndIf
EndFunction
;	messagebox("Player is in cell " + xcell as String + "," + ycell as String + " at elevation " + zcell as String)

function LoadSettingsAtStart()

	Bool ValidatePapyrusUtil = papyrusutil.GetVersion() > 31
	if ValidatePapyrusUtil
		if jsonutil.JsonExists(settings_path)
			;self.LoadUserSettingsPapyrus()
			If(self.LoadUserSettingsPapyrus() == true)
				If(bGetCurrentLanguage() == true)
					Show_Notification("Загрузка настроек завершена.", "#00FF00")
				Else
					Show_Notification("The settings loading is complete.", "#00FF00")
				EndIf
			EndIf
			return 
		endIf
	endIf
endFunction

function SaveSettings()
	Bool ValidatePapyrusUtil = papyrusutil.GetVersion() > 31
	if ValidatePapyrusUtil
		if jsonutil.JsonExists(settings_path)
			self.SaveUserSettingsPapyrus()
			If(bGetCurrentLanguage() == true)
				if(self.SaveUserSettingsPapyrus() == true)
					Show_Notification("Сохранение настроек завершено.", "#00FF00")
				EndIf
			Else
				if(self.SaveUserSettingsPapyrus() == true)
					Show_Notification("Saving the settings is complete.", "#00FF00")
				EndIf
				
				;Show_Notification(FormatBoolean(SaveUserSettingsPapyrus(), "Сохранение завершено.", "Сохранение: Что-то пошло не так..."), "#00FF00")
				;FormatBooleanColor(SaveUserSettingsPapyrus(), "Saving is completed.", "Saving: Something went wrong...", true)
				;Show_Notification(FormatBoolean(SaveUserSettingsPapyrus(), "Saving is completed.", "Saving: Something went wrong..."), "#00FF00")
			EndIf
			return 
		endIf
	endIf
endFunction

bool function bLoadOnlyLocNames()

	Bool ValidatePapyrusUtil = papyrusutil.GetVersion() > 31
	if ValidatePapyrusUtil
		if jsonutil.JsonExists(settings_path)
			If(self.LoadOnlyLocNamesPapyrus() == true)
				return true
			Else
				return false
			EndIf
		endIf
	endIf
endFunction

function LoadOnlyLocNames()

	Bool ValidatePapyrusUtil = papyrusutil.GetVersion() > 31
	if ValidatePapyrusUtil
		if jsonutil.JsonExists(settings_path)
			self.LoadOnlyLocNamesPapyrus()
			return 
		endIf
	endIf
endFunction

function LoadOnlyBoolean()
	Bool ValidatePapyrusUtil = papyrusutil.GetVersion() > 31
	if ValidatePapyrusUtil
		if jsonutil.JsonExists(settings_path)
			self.LoadOnlyBooleanPapyrus()
			return 
		endIf
	endIf
endFunction

function LoadOnlyAxisAndCellName()
	Bool ValidatePapyrusUtil = papyrusutil.GetVersion() > 31
	if ValidatePapyrusUtil
		if jsonutil.JsonExists(settings_path)
			self.LoadOnlyAxisAndCellNamePapyrus()
			return 
		endIf
	endIf
endFunction

function LoadOnlySettings()
	Bool ValidatePapyrusUtil = papyrusutil.GetVersion() > 31
	if ValidatePapyrusUtil
		if jsonutil.JsonExists(settings_path)
			self.LoadOnlySettingsPapyrus()
			return 
		endIf
	endIf
endFunction

Bool function LoadOnlySettingsPapyrus()
	if !jsonutil.IsGood(settings_path)
		return false
	endIf
	;====================================
	if (jsonutil.GetPathStringValue(settings_path, "OldVersion", ConfigMCM.OldVersion) != "")
		ConfigMCM.OldVersion = jsonutil.GetPathStringValue(settings_path, "OldVersion", ConfigMCM.OldVersion)
	endif
	;====================================
	bEnabled = jsonutil.GetPathIntValue(settings_path, "bEnabled", bEnabled as int)
	IsDebugMode = jsonutil.GetPathIntValue(settings_path, "IsDebugMode", IsDebugMode as int)
	IsAllowed = jsonutil.GetPathIntValue(settings_path, "IsAllowed", IsAllowed as int)
	IsClassicMode = jsonutil.GetPathIntValue(settings_path, "IsClassicMode", IsClassicMode as int)
	bCanCityPortal = jsonutil.GetPathIntValue(settings_path, "CanCityPortal", bCanCityPortal as int)
	bCheckingNames = jsonutil.GetPathIntValue(settings_path, "CheckingNames", bCheckingNames as int)
	
	return true
endFunction

Bool function LoadOnlyAxisAndCellNamePapyrus()
	if !jsonutil.IsGood(settings_path)
		return false
	endIf
	;====================================
	If(IsAllowed == true)
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_1", _Cell_Name_1) != "")
			_Cell_Name_1 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_1", _Cell_Name_1)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_2", _Cell_Name_2) != "")
			_Cell_Name_2 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_2", _Cell_Name_2)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_3", _Cell_Name_3) != "")
			_Cell_Name_3 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_3", _Cell_Name_3)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_4", _Cell_Name_4) != "")
			_Cell_Name_4 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_4", _Cell_Name_4)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_5", _Cell_Name_5) != "")
			_Cell_Name_5 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_5", _Cell_Name_5)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_6", _Cell_Name_6) != "")
			_Cell_Name_6 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_6", _Cell_Name_6)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_7", _Cell_Name_7) != "")
			_Cell_Name_7 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_7", _Cell_Name_7)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_8", _Cell_Name_8) != "")
			_Cell_Name_8 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_8", _Cell_Name_8)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_9", _Cell_Name_9) != "")
			_Cell_Name_9 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_9", _Cell_Name_9)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_10", _Cell_Name_10) != "")
			_Cell_Name_10 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_10", _Cell_Name_10)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_11", _Cell_Name_11) != "")
			_Cell_Name_11 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_11", _Cell_Name_11)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_12", _Cell_Name_12) != "")
			_Cell_Name_12 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_12", _Cell_Name_12)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_13", _Cell_Name_13) != "")
			_Cell_Name_13 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_13", _Cell_Name_13)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_14", _Cell_Name_14) != "")
			_Cell_Name_14 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_14", _Cell_Name_14)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_15", _Cell_Name_15) != "")
			_Cell_Name_15 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_15", _Cell_Name_15)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_16", _Cell_Name_16) != "")
			_Cell_Name_16 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_16", _Cell_Name_16)
		endif
		;====================================
		_fX_1 = jsonutil.GetPathFloatValue(settings_path, "_fX_1", _fX_1)
		_fY_1 = jsonutil.GetPathFloatValue(settings_path, "_fY_1", _fY_1)
		_fZ_1 = jsonutil.GetPathFloatValue(settings_path, "_fZ_1", _fZ_1)
		_fX_2 = jsonutil.GetPathFloatValue(settings_path, "_fX_2", _fX_2)
		_fY_2 = jsonutil.GetPathFloatValue(settings_path, "_fY_2", _fY_2)
		_fZ_2 = jsonutil.GetPathFloatValue(settings_path, "_fZ_2", _fZ_2)
		_fX_3 = jsonutil.GetPathFloatValue(settings_path, "_fX_3", _fX_3)
		_fY_3 = jsonutil.GetPathFloatValue(settings_path, "_fY_3", _fY_3)
		_fZ_3 = jsonutil.GetPathFloatValue(settings_path, "_fZ_3", _fZ_3)
		_fX_4 = jsonutil.GetPathFloatValue(settings_path, "_fX_4", _fX_4)
		_fY_4 = jsonutil.GetPathFloatValue(settings_path, "_fY_4", _fY_4)
		_fZ_4 = jsonutil.GetPathFloatValue(settings_path, "_fZ_4", _fZ_4)
		_fX_5 = jsonutil.GetPathFloatValue(settings_path, "_fX_5", _fX_5)
		_fY_5 = jsonutil.GetPathFloatValue(settings_path, "_fY_5", _fY_5)
		_fZ_5 = jsonutil.GetPathFloatValue(settings_path, "_fZ_5", _fZ_5)
		_fX_6 = jsonutil.GetPathFloatValue(settings_path, "_fX_6", _fX_6)
		_fY_6 = jsonutil.GetPathFloatValue(settings_path, "_fY_6", _fY_6)
		_fZ_6 = jsonutil.GetPathFloatValue(settings_path, "_fZ_6", _fZ_6)
		_fX_7 = jsonutil.GetPathFloatValue(settings_path, "_fX_7", _fX_7)
		_fY_7 = jsonutil.GetPathFloatValue(settings_path, "_fY_7", _fY_7)
		_fZ_7 = jsonutil.GetPathFloatValue(settings_path, "_fZ_7", _fZ_7)
		_fX_8 = jsonutil.GetPathFloatValue(settings_path, "_fX_8", _fX_8)
		_fY_8 = jsonutil.GetPathFloatValue(settings_path, "_fY_8", _fY_8)
		_fZ_8 = jsonutil.GetPathFloatValue(settings_path, "_fZ_8", _fZ_8)
		_fX_9 = jsonutil.GetPathFloatValue(settings_path, "_fX_9", _fX_9)
		_fY_9 = jsonutil.GetPathFloatValue(settings_path, "_fY_9", _fY_9)
		_fZ_9 = jsonutil.GetPathFloatValue(settings_path, "_fZ_9", _fZ_9)
		_fX_10 = jsonutil.GetPathFloatValue(settings_path, "_fX_10", _fX_10)
		_fY_10 = jsonutil.GetPathFloatValue(settings_path, "_fY_10", _fY_10)
		_fZ_10 = jsonutil.GetPathFloatValue(settings_path, "_fZ_10", _fZ_10)
		_fX_11 = jsonutil.GetPathFloatValue(settings_path, "_fX_11", _fX_11)
		_fY_11 = jsonutil.GetPathFloatValue(settings_path, "_fY_11", _fY_11)
		_fZ_11 = jsonutil.GetPathFloatValue(settings_path, "_fZ_11", _fZ_11)
		_fX_12 = jsonutil.GetPathFloatValue(settings_path, "_fX_12", _fX_12)
		_fY_12 = jsonutil.GetPathFloatValue(settings_path, "_fY_12", _fY_12)
		_fZ_12 = jsonutil.GetPathFloatValue(settings_path, "_fZ_12", _fZ_12)
		_fX_13 = jsonutil.GetPathFloatValue(settings_path, "_fX_13", _fX_13)
		_fY_13 = jsonutil.GetPathFloatValue(settings_path, "_fY_13", _fY_13)
		_fZ_13 = jsonutil.GetPathFloatValue(settings_path, "_fZ_13", _fZ_13)
		_fX_14 = jsonutil.GetPathFloatValue(settings_path, "_fX_14", _fX_14)
		_fY_14 = jsonutil.GetPathFloatValue(settings_path, "_fY_14", _fY_14)
		_fZ_14 = jsonutil.GetPathFloatValue(settings_path, "_fZ_14", _fZ_14)
		_fX_15 = jsonutil.GetPathFloatValue(settings_path, "_fX_15", _fX_15)
		_fY_15 = jsonutil.GetPathFloatValue(settings_path, "_fY_15", _fY_15)
		_fZ_15 = jsonutil.GetPathFloatValue(settings_path, "_fZ_15", _fZ_15)
		_fX_16 = jsonutil.GetPathFloatValue(settings_path, "_fX_16", _fX_16)
		_fY_16 = jsonutil.GetPathFloatValue(settings_path, "_fY_16", _fY_16)
		_fZ_16 = jsonutil.GetPathFloatValue(settings_path, "_fZ_16", _fZ_16)
	;====================================
		if _Cell_Name_1 != ""
			(GetFormFromFile(0x1B118, "MarkAndRecall.esp")).SetName(_Cell_Name_1)
		endif
		if _Cell_Name_2 != ""
			(GetFormFromFile(0x1B12E, "MarkAndRecall.esp")).SetName(_Cell_Name_2)
		endif
		if _Cell_Name_3 != ""
			(GetFormFromFile(0x1B12F, "MarkAndRecall.esp")).SetName(_Cell_Name_3)
		endif
		if _Cell_Name_4 != ""
			(GetFormFromFile(0x1B130, "MarkAndRecall.esp")).SetName(_Cell_Name_4)
		endif
		if _Cell_Name_5 != ""
			(GetFormFromFile(0x1B131, "MarkAndRecall.esp")).SetName(_Cell_Name_5)
		endif
		if _Cell_Name_6 != ""
			(GetFormFromFile(0x1B132, "MarkAndRecall.esp")).SetName(_Cell_Name_6)
		endif
		if _Cell_Name_7 != ""
			(GetFormFromFile(0x1B133, "MarkAndRecall.esp")).SetName(_Cell_Name_7)
		endif
		if _Cell_Name_8 != ""
			(GetFormFromFile(0x1B134, "MarkAndRecall.esp")).SetName(_Cell_Name_8)
		endif
		if _Cell_Name_9 != ""
			(GetFormFromFile(0x1B135, "MarkAndRecall.esp")).SetName(_Cell_Name_9)
		endif
		if _Cell_Name_10 != ""
			(GetFormFromFile(0x1B136, "MarkAndRecall.esp")).SetName(_Cell_Name_10)
		endif
		if _Cell_Name_11 != ""
			(GetFormFromFile(0x1B137, "MarkAndRecall.esp")).SetName(_Cell_Name_11)
		endif
		if _Cell_Name_12 != ""
			(GetFormFromFile(0x1B138, "MarkAndRecall.esp")).SetName(_Cell_Name_12)
		endif
		if _Cell_Name_13 != ""
			(GetFormFromFile(0x1B139, "MarkAndRecall.esp")).SetName(_Cell_Name_13)
		endif
		if _Cell_Name_14 != ""
			(GetFormFromFile(0x1B13A, "MarkAndRecall.esp")).SetName(_Cell_Name_14)
		endif
		if _Cell_Name_15 != ""
			(GetFormFromFile(0x1B13B, "MarkAndRecall.esp")).SetName(_Cell_Name_15)
		endif
		if _Cell_Name_16 != ""
			(GetFormFromFile(0x1B13C, "MarkAndRecall.esp")).SetName(_Cell_Name_16)
		endif
		;====================================
		if (_fX_1) != ""
			(GetFormFromFile(0x1B0FD, "MarkAndRecall.esp")).SetName(_fX_1 as float)
		endif
		if (_fY_1) != ""
			(GetFormFromFile(0x1B0FE, "MarkAndRecall.esp")).SetName(_fY_1 as float)
		endif
		if (_fZ_1) != ""
			(GetFormFromFile(0x1B0FF, "MarkAndRecall.esp")).SetName(_fZ_1 as float)
		endif
		if (_fX_2) != ""
			(GetFormFromFile(0x1B100, "MarkAndRecall.esp")).SetName(_fX_2 as float)
		endif
		if (_fY_2) != ""
			(GetFormFromFile(0x1B101, "MarkAndRecall.esp")).SetName(_fY_2 as float)
		endif
		if (_fZ_2) != ""
			(GetFormFromFile(0x1B102, "MarkAndRecall.esp")).SetName(_fZ_2 as float)
		endif
		if (_fX_3) != ""
			(GetFormFromFile(0x1B103, "MarkAndRecall.esp")).SetName(_fX_3 as float)
		endif
		if (_fY_3) != ""
			(GetFormFromFile(0x1B104, "MarkAndRecall.esp")).SetName(_fY_3 as float)
		endif
		if (_fZ_3) != ""
			(GetFormFromFile(0x1B105, "MarkAndRecall.esp")).SetName(_fZ_3 as float)
		endif
		if (_fX_4) != ""
			(GetFormFromFile(0x1B106, "MarkAndRecall.esp")).SetName(_fX_4 as float)
		endif
		if (_fY_4) != ""
			(GetFormFromFile(0x1B107, "MarkAndRecall.esp")).SetName(_fY_4 as float)
		endif
		if (_fZ_4) != ""
			(GetFormFromFile(0x1B108, "MarkAndRecall.esp")).SetName(_fZ_4 as float)
		endif
		if (_fX_5) != ""
			(GetFormFromFile(0x1B109, "MarkAndRecall.esp")).SetName(_fX_5 as float)
		endif
		if (_fY_5) != ""
			(GetFormFromFile(0x1B10A, "MarkAndRecall.esp")).SetName(_fY_5 as float)
		endif
		if (_fZ_5) != ""
			(GetFormFromFile(0x1B10B, "MarkAndRecall.esp")).SetName(_fZ_5 as float)
		endif
		if (_fX_6) != ""
			(GetFormFromFile(0x1B10C, "MarkAndRecall.esp")).SetName(_fX_6 as float)
		endif
		if (_fY_6) != ""
			(GetFormFromFile(0x1B10D, "MarkAndRecall.esp")).SetName(_fY_6 as float)
		endif
		if (_fZ_6) != ""
			(GetFormFromFile(0x1B10E, "MarkAndRecall.esp")).SetName(_fZ_6 as float)
		endif
		if (_fX_7) != ""
			(GetFormFromFile(0x1B10F, "MarkAndRecall.esp")).SetName(_fX_7 as float)
		endif
		if (_fY_7) != ""
			(GetFormFromFile(0x1B110, "MarkAndRecall.esp")).SetName(_fY_7 as float)
		endif
		if (_fZ_7) != ""
			(GetFormFromFile(0x1B111, "MarkAndRecall.esp")).SetName(_fZ_7 as float)
		endif
		if (_fX_8) != ""
			(GetFormFromFile(0x1B112, "MarkAndRecall.esp")).SetName(_fX_8 as float)
		endif
		if (_fY_8) != ""
			(GetFormFromFile(0x1B113, "MarkAndRecall.esp")).SetName(_fY_8 as float)
		endif
		if (_fZ_8) != ""
			(GetFormFromFile(0x1B114, "MarkAndRecall.esp")).SetName(_fZ_8 as float)
		endif
		if (_fX_9) != ""
			(GetFormFromFile(0x1B115, "MarkAndRecall.esp")).SetName(_fX_9 as float)
		endif
		if (_fY_9) != ""
			(GetFormFromFile(0x1B116, "MarkAndRecall.esp")).SetName(_fY_9 as float)
		endif
		if (_fZ_9) != ""
			(GetFormFromFile(0x1B117, "MarkAndRecall.esp")).SetName(_fZ_9 as float)
		endif
		if (_fX_10) != ""
			(GetFormFromFile(0x1B119, "MarkAndRecall.esp")).SetName(_fX_10 as float)
		endif
		if (_fY_10) != ""
			(GetFormFromFile(0x1B120, "MarkAndRecall.esp")).SetName(_fY_10 as float)
		endif
		if (_fZ_10) != ""
			(GetFormFromFile(0x1B127, "MarkAndRecall.esp")).SetName(_fZ_10 as float)
		endif
		if (_fX_11) != ""
			(GetFormFromFile(0x1B11A, "MarkAndRecall.esp")).SetName(_fX_11 as float)
		endif
		if (_fY_11) != ""
			(GetFormFromFile(0x1B121, "MarkAndRecall.esp")).SetName(_fY_11 as float)
		endif
		if (_fZ_11) != ""
			(GetFormFromFile(0x1B128, "MarkAndRecall.esp")).SetName(_fZ_11 as float)
		endif
		if (_fX_12) != ""
			(GetFormFromFile(0x1B11B, "MarkAndRecall.esp")).SetName(_fX_12 as float)
		endif
		if (_fY_12) != ""
			(GetFormFromFile(0x1B122, "MarkAndRecall.esp")).SetName(_fY_12 as float)
		endif
		if (_fZ_12) != ""
			(GetFormFromFile(0x1B129, "MarkAndRecall.esp")).SetName(_fZ_12 as float)
		endif
		if (_fX_13) != ""
			(GetFormFromFile(0x1B11C, "MarkAndRecall.esp")).SetName(_fX_13 as float)
		endif
		if (_fY_13) != ""
			(GetFormFromFile(0x1B123, "MarkAndRecall.esp")).SetName(_fY_13 as float)
		endif
		if (_fZ_13) != ""
			(GetFormFromFile(0x1B12A, "MarkAndRecall.esp")).SetName(_fZ_13 as float)
		endif
		if (_fX_14) != ""
			(GetFormFromFile(0x1B11D, "MarkAndRecall.esp")).SetName(_fX_14 as float)
		endif
		if (_fY_14) != ""
			(GetFormFromFile(0x1B124, "MarkAndRecall.esp")).SetName(_fY_14 as float)
		endif
		if (_fZ_14) != ""
			(GetFormFromFile(0x1B12B, "MarkAndRecall.esp")).SetName(_fZ_14 as float)
		endif
		if (_fX_15) != ""
			(GetFormFromFile(0x1B11E, "MarkAndRecall.esp")).SetName(_fX_15 as float)
		endif
		if (_fY_15) != ""
			(GetFormFromFile(0x1B125, "MarkAndRecall.esp")).SetName(_fY_15 as float)
		endif
		if (_fZ_15) != ""
			(GetFormFromFile(0x1B12C, "MarkAndRecall.esp")).SetName(_fZ_15 as float)
		endif
		if (_fX_16) != ""
			(GetFormFromFile(0x1B11F, "MarkAndRecall.esp")).SetName(_fX_16 as float)
		endif
		if (_fY_16) != ""
			(GetFormFromFile(0x1B126, "MarkAndRecall.esp")).SetName(_fY_16 as float)
		endif
		if (_fZ_16) != ""
			(GetFormFromFile(0x1B12D, "MarkAndRecall.esp")).SetName(_fZ_16 as float)
		endif
	EndIf
	return true
endFunction


Bool function LoadOnlyBooleanPapyrus()
	if !jsonutil.IsGood(settings_path)
		return false
	endIf
	;====================================
	_IsNameSet1 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_1", _IsNameSet1)
	_IsNameSet2 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_2", _IsNameSet2)
	_IsNameSet3 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_3", _IsNameSet3)
	_IsNameSet4 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_4", _IsNameSet4)
	_IsNameSet5 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_5", _IsNameSet5)
	_IsNameSet6 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_6", _IsNameSet6)
	_IsNameSet7 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_7", _IsNameSet7)
	_IsNameSet8 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_8", _IsNameSet8)
	_IsNameSet9 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_9", _IsNameSet9)
	_IsNameSet10 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_10", _IsNameSet10)
	_IsNameSet11 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_11", _IsNameSet11)
	_IsNameSet12 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_12", _IsNameSet12)
	_IsNameSet13 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_13", _IsNameSet13)
	_IsNameSet14 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_14", _IsNameSet14)
	_IsNameSet15 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_15", _IsNameSet15)
	_IsNameSet16 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_16", _IsNameSet16)
	;====================================
	if (_IsNameSet1) != ""
		(GetFormFromFile(0x1B0ED, "MarkAndRecall.esp")).SetName(_IsNameSet1 as int)
	endif
	if (_IsNameSet2) != ""
		(GetFormFromFile(0x1B0EE, "MarkAndRecall.esp")).SetName(_IsNameSet2 as int)
	endif
	if (_IsNameSet3) != ""
		(GetFormFromFile(0x1B0EF, "MarkAndRecall.esp")).SetName(_IsNameSet3 as int)
	endif
	if (_IsNameSet4) != ""
		(GetFormFromFile(0x1B0F0, "MarkAndRecall.esp")).SetName(_IsNameSet4 as int)
	endif
	if (_IsNameSet5) != ""
		(GetFormFromFile(0x1B0F1, "MarkAndRecall.esp")).SetName(_IsNameSet5 as int)
	endif
	if (_IsNameSet6) != ""
		(GetFormFromFile(0x1B0F2, "MarkAndRecall.esp")).SetName(_IsNameSet6 as int)
	endif
	if (_IsNameSet7) != ""
		(GetFormFromFile(0x1B0F3, "MarkAndRecall.esp")).SetName(_IsNameSet7 as int)
	endif
	if (_IsNameSet8) != ""
		(GetFormFromFile(0x1B0F4, "MarkAndRecall.esp")).SetName(_IsNameSet8 as int)
	endif
	if (_IsNameSet9) != ""
		(GetFormFromFile(0x1B0F5, "MarkAndRecall.esp")).SetName(_IsNameSet9 as int)
	endif
	if (_IsNameSet10) != ""
		(GetFormFromFile(0x1B0F6, "MarkAndRecall.esp")).SetName(_IsNameSet10 as int)
	endif
	if (_IsNameSet11) != ""
		(GetFormFromFile(0x1B0F7, "MarkAndRecall.esp")).SetName(_IsNameSet11 as int)
	endif
	if (_IsNameSet12) != ""
		(GetFormFromFile(0x1B0F8, "MarkAndRecall.esp")).SetName(_IsNameSet12 as int)
	endif
	if (_IsNameSet13) != ""
		(GetFormFromFile(0x1B0F9, "MarkAndRecall.esp")).SetName(_IsNameSet13 as int)
	endif
	if (_IsNameSet14) != ""
		(GetFormFromFile(0x1B0FA, "MarkAndRecall.esp")).SetName(_IsNameSet14 as int)
	endif
	if (_IsNameSet15) != ""
		(GetFormFromFile(0x1B0FB, "MarkAndRecall.esp")).SetName(_IsNameSet15 as int)
	endif
	if (_IsNameSet16) != ""
		(GetFormFromFile(0x1B0FC, "MarkAndRecall.esp")).SetName(_IsNameSet16 as int)
	endif
	;====================================
	return true
endFunction


Bool function LoadOnlyLocNamesPapyrus()
	if !jsonutil.IsGood(settings_path)
		return false
	endIf
	;====================================
	if (jsonutil.GetPathStringValue(settings_path, "Recall_1_Name", Recall1Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_1_Name", Recall1Name), Recall1Name) == false)
			Recall1Name = jsonutil.GetPathStringValue(settings_path, "Recall_1_Name", Recall1Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_2_Name", Recall2Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_2_Name", Recall2Name), Recall2Name) == false)
			Recall2Name = jsonutil.GetPathStringValue(settings_path, "Recall_2_Name", Recall2Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_3_Name", Recall3Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_3_Name", Recall3Name), Recall3Name) == false)
			Recall3Name = jsonutil.GetPathStringValue(settings_path, "Recall_3_Name", Recall3Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_4_Name", Recall4Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_4_Name", Recall4Name), Recall4Name) == false)
			Recall4Name = jsonutil.GetPathStringValue(settings_path, "Recall_4_Name", Recall4Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_5_Name", Recall5Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_5_Name", Recall5Name), Recall5Name) == false)
			Recall5Name = jsonutil.GetPathStringValue(settings_path, "Recall_5_Name", Recall5Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_6_Name", Recall6Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_6_Name", Recall6Name), Recall6Name) == false)
			Recall6Name = jsonutil.GetPathStringValue(settings_path, "Recall_6_Name", Recall6Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_7_Name", Recall7Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_7_Name", Recall7Name), Recall7Name) == false)
			Recall7Name = jsonutil.GetPathStringValue(settings_path, "Recall_7_Name", Recall7Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_8_Name", Recall8Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_8_Name", Recall8Name), Recall8Name) == false)
			Recall8Name = jsonutil.GetPathStringValue(settings_path, "Recall_8_Name", Recall8Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_9_Name", Recall9Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_9_Name", Recall9Name), Recall9Name) == false)
			Recall9Name = jsonutil.GetPathStringValue(settings_path, "Recall_9_Name", Recall9Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_10_Name", Recall10Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_10_Name", Recall10Name), Recall10Name) == false)
			Recall10Name = jsonutil.GetPathStringValue(settings_path, "Recall_10_Name", Recall10Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_11_Name", Recall11Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_11_Name", Recall11Name), Recall11Name) == false)
			Recall11Name = jsonutil.GetPathStringValue(settings_path, "Recall_11_Name", Recall11Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_12_Name", Recall12Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_12_Name", Recall12Name), Recall12Name) == false)
			Recall12Name = jsonutil.GetPathStringValue(settings_path, "Recall_12_Name", Recall12Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_13_Name", Recall13Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_13_Name", Recall13Name), Recall13Name) == false)
			Recall13Name = jsonutil.GetPathStringValue(settings_path, "Recall_13_Name", Recall13Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_14_Name", Recall14Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_14_Name", Recall14Name), Recall14Name) == false)
			Recall14Name = jsonutil.GetPathStringValue(settings_path, "Recall_14_Name", Recall14Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_15_Name", Recall15Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_15_Name", Recall15Name), Recall15Name) == false)
			Recall15Name = jsonutil.GetPathStringValue(settings_path, "Recall_15_Name", Recall15Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_16_Name", Recall16Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_16_Name", Recall16Name), Recall16Name) == false)
			Recall16Name = jsonutil.GetPathStringValue(settings_path, "Recall_16_Name", Recall16Name)
		endif
	endif
	;====================================
	if Recall1Name != ""
		(GetFormFromFile(0x12484, "MarkAndRecall.esp")).SetName(Recall1Name)
		(GetFormFromFile(0x48DCA, "MarkAndRecall.esp")).SetName(Recall1Name)
	endif
	if Recall2Name != ""
		(GetFormFromFile(0x12485, "MarkAndRecall.esp")).SetName(Recall2Name)
		(GetFormFromFile(0x48DCC, "MarkAndRecall.esp")).SetName(Recall2Name)
	endif
	if Recall3Name != ""
		(GetFormFromFile(0x12486, "MarkAndRecall.esp")).SetName(Recall3Name)
		(GetFormFromFile(0x48DDB, "MarkAndRecall.esp")).SetName(Recall3Name)
	endif
	if Recall4Name != ""
		(GetFormFromFile(0x12487, "MarkAndRecall.esp")).SetName(Recall4Name)
		(GetFormFromFile(0x48DCE, "MarkAndRecall.esp")).SetName(Recall4Name)
	endif
	if Recall5Name != ""
		(GetFormFromFile(0x12488, "MarkAndRecall.esp")).SetName(Recall5Name)
		(GetFormFromFile(0x48DCF, "MarkAndRecall.esp")).SetName(Recall5Name)
	endif
	if Recall6Name != ""
		(GetFormFromFile(0x12489, "MarkAndRecall.esp")).SetName(Recall6Name)
		(GetFormFromFile(0x48DD0, "MarkAndRecall.esp")).SetName(Recall6Name)
	endif
	if Recall7Name != ""
		(GetFormFromFile(0x1248A, "MarkAndRecall.esp")).SetName(Recall7Name)
		(GetFormFromFile(0x48DD1, "MarkAndRecall.esp")).SetName(Recall7Name)
	endif
	if Recall8Name != ""
		(GetFormFromFile(0x1248B, "MarkAndRecall.esp")).SetName(Recall8Name)
		(GetFormFromFile(0x48DDC, "MarkAndRecall.esp")).SetName(Recall8Name)
	endif
	if Recall9Name != ""
		(GetFormFromFile(0x1248C, "MarkAndRecall.esp")).SetName(Recall9Name)
		(GetFormFromFile(0x48DD3, "MarkAndRecall.esp")).SetName(Recall9Name)
	endif
	if Recall10Name != ""
		(GetFormFromFile(0x1248D, "MarkAndRecall.esp")).SetName(Recall10Name)
		(GetFormFromFile(0x48DD4, "MarkAndRecall.esp")).SetName(Recall10Name)
	endif
	if Recall11Name != ""
		(GetFormFromFile(0x1248E, "MarkAndRecall.esp")).SetName(Recall11Name)
		(GetFormFromFile(0x48DD5, "MarkAndRecall.esp")).SetName(Recall11Name)
	endif
	if Recall12Name != ""
		(GetFormFromFile(0x1248F, "MarkAndRecall.esp")).SetName(Recall12Name)
		(GetFormFromFile(0x48DD6, "MarkAndRecall.esp")).SetName(Recall12Name)
	endif
	if Recall13Name != ""
		(GetFormFromFile(0x12490, "MarkAndRecall.esp")).SetName(Recall13Name)
		(GetFormFromFile(0x48DD7, "MarkAndRecall.esp")).SetName(Recall13Name)
	endif
	if Recall14Name != ""
		(GetFormFromFile(0x12491, "MarkAndRecall.esp")).SetName(Recall14Name)
		(GetFormFromFile(0x48DD8, "MarkAndRecall.esp")).SetName(Recall14Name)
	endif
	if Recall15Name != ""
		(GetFormFromFile(0x12492, "MarkAndRecall.esp")).SetName(Recall15Name)
		(GetFormFromFile(0x48DD9, "MarkAndRecall.esp")).SetName(Recall15Name)
	endif
	if Recall16Name != ""
		(GetFormFromFile(0x12493, "MarkAndRecall.esp")).SetName(Recall16Name)
		(GetFormFromFile(0x48DDA, "MarkAndRecall.esp")).SetName(Recall16Name)
	endif
	return true
endFunction


;string function GetPathStringValue(string FileName, string Path, string missing = "") global native
;		jsonutil.SetPathStringValue(settings_path, "Recall_1_Name", _Recall_1_Name)
;bool function GetPathBoolValue(string FileName, string Path, bool missing = false) global
;bool function IsPathBool(string FileName, string Path) global native
;function SetPathIntValue(string FileName, string Path, int value) global native
;int function GetPathIntValue(string FileName, string Path, int missing = 0) global native
;Bool function loadBool(String name)
;function saveBool(String name, Bool b)

; Moves this object to the position of the specified object, with an offset, and optionally matching its rotation
;Function MoveTo(ObjectReference akTarget, float afXOffset = 0.0, float afYOffset = 0.0, float afZOffset = 0.0, bool abMatchRotation = true) native

;float function GetPathFloatValue(string FileName, string Path, float missing = 0.0) global native
;function SetPathFloatValue(string FileName, string Path, float value) global native
;Float function loadFloat(String name)
;function saveFloat(String name, Float f)

Bool function LoadUserSettingsPapyrus()
	if !jsonutil.IsGood(settings_path)
		return false
	endIf
	;====================================
	if (jsonutil.GetPathStringValue(settings_path, "OldVersion", ConfigMCM.OldVersion) != "")
		ConfigMCM.OldVersion = jsonutil.GetPathStringValue(settings_path, "OldVersion", ConfigMCM.OldVersion)
	endif
	;====================================
	bEnabled = jsonutil.GetPathIntValue(settings_path, "bEnabled", bEnabled as int)
	IsDebugMode = jsonutil.GetPathIntValue(settings_path, "IsDebugMode", IsDebugMode as int)
	IsAllowed = jsonutil.GetPathIntValue(settings_path, "IsAllowed", IsAllowed as int)
	IsClassicMode = jsonutil.GetPathIntValue(settings_path, "IsClassicMode", IsClassicMode as int)
	bCanCityPortal = jsonutil.GetPathIntValue(settings_path, "CanCityPortal", bCanCityPortal as int)
	bCheckingNames = jsonutil.GetPathIntValue(settings_path, "CheckingNames", bCheckingNames as int)
	;====================================
	If(IsAllowed == true)
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_1", _Cell_Name_1) != "")
			_Cell_Name_1 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_1", _Cell_Name_1)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_2", _Cell_Name_2) != "")
			_Cell_Name_2 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_2", _Cell_Name_2)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_3", _Cell_Name_3) != "")
			_Cell_Name_3 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_3", _Cell_Name_3)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_4", _Cell_Name_4) != "")
			_Cell_Name_4 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_4", _Cell_Name_4)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_5", _Cell_Name_5) != "")
			_Cell_Name_5 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_5", _Cell_Name_5)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_6", _Cell_Name_6) != "")
			_Cell_Name_6 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_6", _Cell_Name_6)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_7", _Cell_Name_7) != "")
			_Cell_Name_7 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_7", _Cell_Name_7)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_8", _Cell_Name_8) != "")
			_Cell_Name_8 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_8", _Cell_Name_8)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_9", _Cell_Name_9) != "")
			_Cell_Name_9 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_9", _Cell_Name_9)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_10", _Cell_Name_10) != "")
			_Cell_Name_10 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_10", _Cell_Name_10)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_11", _Cell_Name_11) != "")
			_Cell_Name_11 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_11", _Cell_Name_11)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_12", _Cell_Name_12) != "")
			_Cell_Name_12 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_12", _Cell_Name_12)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_13", _Cell_Name_13) != "")
			_Cell_Name_13 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_13", _Cell_Name_13)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_14", _Cell_Name_14) != "")
			_Cell_Name_14 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_14", _Cell_Name_14)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_15", _Cell_Name_15) != "")
			_Cell_Name_15 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_15", _Cell_Name_15)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_16", _Cell_Name_16) != "")
			_Cell_Name_16 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_16", _Cell_Name_16)
		endif
		;====================================
		_fX_1 = jsonutil.GetPathFloatValue(settings_path, "_fX_1", _fX_1)
		_fY_1 = jsonutil.GetPathFloatValue(settings_path, "_fY_1", _fY_1)
		_fZ_1 = jsonutil.GetPathFloatValue(settings_path, "_fZ_1", _fZ_1)
		_fX_2 = jsonutil.GetPathFloatValue(settings_path, "_fX_2", _fX_2)
		_fY_2 = jsonutil.GetPathFloatValue(settings_path, "_fY_2", _fY_2)
		_fZ_2 = jsonutil.GetPathFloatValue(settings_path, "_fZ_2", _fZ_2)
		_fX_3 = jsonutil.GetPathFloatValue(settings_path, "_fX_3", _fX_3)
		_fY_3 = jsonutil.GetPathFloatValue(settings_path, "_fY_3", _fY_3)
		_fZ_3 = jsonutil.GetPathFloatValue(settings_path, "_fZ_3", _fZ_3)
		_fX_4 = jsonutil.GetPathFloatValue(settings_path, "_fX_4", _fX_4)
		_fY_4 = jsonutil.GetPathFloatValue(settings_path, "_fY_4", _fY_4)
		_fZ_4 = jsonutil.GetPathFloatValue(settings_path, "_fZ_4", _fZ_4)
		_fX_5 = jsonutil.GetPathFloatValue(settings_path, "_fX_5", _fX_5)
		_fY_5 = jsonutil.GetPathFloatValue(settings_path, "_fY_5", _fY_5)
		_fZ_5 = jsonutil.GetPathFloatValue(settings_path, "_fZ_5", _fZ_5)
		_fX_6 = jsonutil.GetPathFloatValue(settings_path, "_fX_6", _fX_6)
		_fY_6 = jsonutil.GetPathFloatValue(settings_path, "_fY_6", _fY_6)
		_fZ_6 = jsonutil.GetPathFloatValue(settings_path, "_fZ_6", _fZ_6)
		_fX_7 = jsonutil.GetPathFloatValue(settings_path, "_fX_7", _fX_7)
		_fY_7 = jsonutil.GetPathFloatValue(settings_path, "_fY_7", _fY_7)
		_fZ_7 = jsonutil.GetPathFloatValue(settings_path, "_fZ_7", _fZ_7)
		_fX_8 = jsonutil.GetPathFloatValue(settings_path, "_fX_8", _fX_8)
		_fY_8 = jsonutil.GetPathFloatValue(settings_path, "_fY_8", _fY_8)
		_fZ_8 = jsonutil.GetPathFloatValue(settings_path, "_fZ_8", _fZ_8)
		_fX_9 = jsonutil.GetPathFloatValue(settings_path, "_fX_9", _fX_9)
		_fY_9 = jsonutil.GetPathFloatValue(settings_path, "_fY_9", _fY_9)
		_fZ_9 = jsonutil.GetPathFloatValue(settings_path, "_fZ_9", _fZ_9)
		_fX_10 = jsonutil.GetPathFloatValue(settings_path, "_fX_10", _fX_10)
		_fY_10 = jsonutil.GetPathFloatValue(settings_path, "_fY_10", _fY_10)
		_fZ_10 = jsonutil.GetPathFloatValue(settings_path, "_fZ_10", _fZ_10)
		_fX_11 = jsonutil.GetPathFloatValue(settings_path, "_fX_11", _fX_11)
		_fY_11 = jsonutil.GetPathFloatValue(settings_path, "_fY_11", _fY_11)
		_fZ_11 = jsonutil.GetPathFloatValue(settings_path, "_fZ_11", _fZ_11)
		_fX_12 = jsonutil.GetPathFloatValue(settings_path, "_fX_12", _fX_12)
		_fY_12 = jsonutil.GetPathFloatValue(settings_path, "_fY_12", _fY_12)
		_fZ_12 = jsonutil.GetPathFloatValue(settings_path, "_fZ_12", _fZ_12)
		_fX_13 = jsonutil.GetPathFloatValue(settings_path, "_fX_13", _fX_13)
		_fY_13 = jsonutil.GetPathFloatValue(settings_path, "_fY_13", _fY_13)
		_fZ_13 = jsonutil.GetPathFloatValue(settings_path, "_fZ_13", _fZ_13)
		_fX_14 = jsonutil.GetPathFloatValue(settings_path, "_fX_14", _fX_14)
		_fY_14 = jsonutil.GetPathFloatValue(settings_path, "_fY_14", _fY_14)
		_fZ_14 = jsonutil.GetPathFloatValue(settings_path, "_fZ_14", _fZ_14)
		_fX_15 = jsonutil.GetPathFloatValue(settings_path, "_fX_15", _fX_15)
		_fY_15 = jsonutil.GetPathFloatValue(settings_path, "_fY_15", _fY_15)
		_fZ_15 = jsonutil.GetPathFloatValue(settings_path, "_fZ_15", _fZ_15)
		_fX_16 = jsonutil.GetPathFloatValue(settings_path, "_fX_16", _fX_16)
		_fY_16 = jsonutil.GetPathFloatValue(settings_path, "_fY_16", _fY_16)
		_fZ_16 = jsonutil.GetPathFloatValue(settings_path, "_fZ_16", _fZ_16)
	EndIf
	;====================================
	_IsNameSet1 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_1", _IsNameSet1)
	_IsNameSet2 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_2", _IsNameSet2)
	_IsNameSet3 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_3", _IsNameSet3)
	_IsNameSet4 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_4", _IsNameSet4)
	_IsNameSet5 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_5", _IsNameSet5)
	_IsNameSet6 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_6", _IsNameSet6)
	_IsNameSet7 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_7", _IsNameSet7)
	_IsNameSet8 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_8", _IsNameSet8)
	_IsNameSet9 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_9", _IsNameSet9)
	_IsNameSet10 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_10", _IsNameSet10)
	_IsNameSet11 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_11", _IsNameSet11)
	_IsNameSet12 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_12", _IsNameSet12)
	_IsNameSet13 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_13", _IsNameSet13)
	_IsNameSet14 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_14", _IsNameSet14)
	_IsNameSet15 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_15", _IsNameSet15)
	_IsNameSet16 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_16", _IsNameSet16)
	;====================================
	if (jsonutil.GetPathStringValue(settings_path, "Recall_1_Name", _Recall_1_Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_1_Name", _Recall_1_Name), _Recall_1_Name) == false)
			_Recall_1_Name = jsonutil.GetPathStringValue(settings_path, "Recall_1_Name", _Recall_1_Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_2_Name", Recall2Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_2_Name", Recall2Name), Recall2Name) == false)
			Recall2Name = jsonutil.GetPathStringValue(settings_path, "Recall_2_Name", Recall2Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_3_Name", Recall3Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_3_Name", Recall3Name), Recall3Name) == false)
			Recall3Name = jsonutil.GetPathStringValue(settings_path, "Recall_3_Name", Recall3Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_4_Name", Recall4Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_4_Name", Recall4Name), Recall4Name) == false)
			Recall4Name = jsonutil.GetPathStringValue(settings_path, "Recall_4_Name", Recall4Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_5_Name", Recall5Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_5_Name", Recall5Name), Recall5Name) == false)
			Recall5Name = jsonutil.GetPathStringValue(settings_path, "Recall_5_Name", Recall5Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_6_Name", Recall6Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_6_Name", Recall6Name), Recall6Name) == false)
			Recall6Name = jsonutil.GetPathStringValue(settings_path, "Recall_6_Name", Recall6Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_7_Name", Recall7Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_7_Name", Recall7Name), Recall7Name) == false)
			Recall7Name = jsonutil.GetPathStringValue(settings_path, "Recall_7_Name", Recall7Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_8_Name", Recall8Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_8_Name", Recall8Name), Recall8Name) == false)
			Recall8Name = jsonutil.GetPathStringValue(settings_path, "Recall_8_Name", Recall8Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_9_Name", Recall9Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_9_Name", Recall9Name), Recall9Name) == false)
			Recall9Name = jsonutil.GetPathStringValue(settings_path, "Recall_9_Name", Recall9Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_10_Name", Recall10Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_10_Name", Recall10Name), Recall10Name) == false)
			Recall10Name = jsonutil.GetPathStringValue(settings_path, "Recall_10_Name", Recall10Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_11_Name", Recall11Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_11_Name", Recall11Name), Recall11Name) == false)
			Recall11Name = jsonutil.GetPathStringValue(settings_path, "Recall_11_Name", Recall11Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_12_Name", Recall12Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_12_Name", Recall12Name), Recall12Name) == false)
			Recall12Name = jsonutil.GetPathStringValue(settings_path, "Recall_12_Name", Recall12Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_13_Name", Recall13Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_13_Name", Recall13Name), Recall13Name) == false)
			Recall13Name = jsonutil.GetPathStringValue(settings_path, "Recall_13_Name", Recall13Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_14_Name", Recall14Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_14_Name", Recall14Name), Recall14Name) == false)
			Recall14Name = jsonutil.GetPathStringValue(settings_path, "Recall_14_Name", Recall14Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_15_Name", Recall15Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_15_Name", Recall15Name), Recall15Name) == false)
			Recall15Name = jsonutil.GetPathStringValue(settings_path, "Recall_15_Name", Recall15Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_16_Name", Recall16Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_16_Name", Recall16Name), Recall16Name) == false)
			Recall16Name = jsonutil.GetPathStringValue(settings_path, "Recall_16_Name", Recall16Name)
		endif
	endif
	;====================================
	If(IsAllowed == true)
		if _Cell_Name_1 != ""
			(GetFormFromFile(0x1B118, "MarkAndRecall.esp")).SetName(_Cell_Name_1)
		endif
		if _Cell_Name_2 != ""
			(GetFormFromFile(0x1B12E, "MarkAndRecall.esp")).SetName(_Cell_Name_2)
		endif
		if _Cell_Name_3 != ""
			(GetFormFromFile(0x1B12F, "MarkAndRecall.esp")).SetName(_Cell_Name_3)
		endif
		if _Cell_Name_4 != ""
			(GetFormFromFile(0x1B130, "MarkAndRecall.esp")).SetName(_Cell_Name_4)
		endif
		if _Cell_Name_5 != ""
			(GetFormFromFile(0x1B131, "MarkAndRecall.esp")).SetName(_Cell_Name_5)
		endif
		if _Cell_Name_6 != ""
			(GetFormFromFile(0x1B132, "MarkAndRecall.esp")).SetName(_Cell_Name_6)
		endif
		if _Cell_Name_7 != ""
			(GetFormFromFile(0x1B133, "MarkAndRecall.esp")).SetName(_Cell_Name_7)
		endif
		if _Cell_Name_8 != ""
			(GetFormFromFile(0x1B134, "MarkAndRecall.esp")).SetName(_Cell_Name_8)
		endif
		if _Cell_Name_9 != ""
			(GetFormFromFile(0x1B135, "MarkAndRecall.esp")).SetName(_Cell_Name_9)
		endif
		if _Cell_Name_10 != ""
			(GetFormFromFile(0x1B136, "MarkAndRecall.esp")).SetName(_Cell_Name_10)
		endif
		if _Cell_Name_11 != ""
			(GetFormFromFile(0x1B137, "MarkAndRecall.esp")).SetName(_Cell_Name_11)
		endif
		if _Cell_Name_12 != ""
			(GetFormFromFile(0x1B138, "MarkAndRecall.esp")).SetName(_Cell_Name_12)
		endif
		if _Cell_Name_13 != ""
			(GetFormFromFile(0x1B139, "MarkAndRecall.esp")).SetName(_Cell_Name_13)
		endif
		if _Cell_Name_14 != ""
			(GetFormFromFile(0x1B13A, "MarkAndRecall.esp")).SetName(_Cell_Name_14)
		endif
		if _Cell_Name_15 != ""
			(GetFormFromFile(0x1B13B, "MarkAndRecall.esp")).SetName(_Cell_Name_15)
		endif
		if _Cell_Name_16 != ""
			(GetFormFromFile(0x1B13C, "MarkAndRecall.esp")).SetName(_Cell_Name_16)
		endif
		;====================================
		if (_fX_1) != ""
			(GetFormFromFile(0x1B0FD, "MarkAndRecall.esp")).SetName(_fX_1 as float)
		endif
		if (_fY_1) != ""
			(GetFormFromFile(0x1B0FE, "MarkAndRecall.esp")).SetName(_fY_1 as float)
		endif
		if (_fZ_1) != ""
			(GetFormFromFile(0x1B0FF, "MarkAndRecall.esp")).SetName(_fZ_1 as float)
		endif
		if (_fX_2) != ""
			(GetFormFromFile(0x1B100, "MarkAndRecall.esp")).SetName(_fX_2 as float)
		endif
		if (_fY_2) != ""
			(GetFormFromFile(0x1B101, "MarkAndRecall.esp")).SetName(_fY_2 as float)
		endif
		if (_fZ_2) != ""
			(GetFormFromFile(0x1B102, "MarkAndRecall.esp")).SetName(_fZ_2 as float)
		endif
		if (_fX_3) != ""
			(GetFormFromFile(0x1B103, "MarkAndRecall.esp")).SetName(_fX_3 as float)
		endif
		if (_fY_3) != ""
			(GetFormFromFile(0x1B104, "MarkAndRecall.esp")).SetName(_fY_3 as float)
		endif
		if (_fZ_3) != ""
			(GetFormFromFile(0x1B105, "MarkAndRecall.esp")).SetName(_fZ_3 as float)
		endif
		if (_fX_4) != ""
			(GetFormFromFile(0x1B106, "MarkAndRecall.esp")).SetName(_fX_4 as float)
		endif
		if (_fY_4) != ""
			(GetFormFromFile(0x1B107, "MarkAndRecall.esp")).SetName(_fY_4 as float)
		endif
		if (_fZ_4) != ""
			(GetFormFromFile(0x1B108, "MarkAndRecall.esp")).SetName(_fZ_4 as float)
		endif
		if (_fX_5) != ""
			(GetFormFromFile(0x1B109, "MarkAndRecall.esp")).SetName(_fX_5 as float)
		endif
		if (_fY_5) != ""
			(GetFormFromFile(0x1B10A, "MarkAndRecall.esp")).SetName(_fY_5 as float)
		endif
		if (_fZ_5) != ""
			(GetFormFromFile(0x1B10B, "MarkAndRecall.esp")).SetName(_fZ_5 as float)
		endif
		if (_fX_6) != ""
			(GetFormFromFile(0x1B10C, "MarkAndRecall.esp")).SetName(_fX_6 as float)
		endif
		if (_fY_6) != ""
			(GetFormFromFile(0x1B10D, "MarkAndRecall.esp")).SetName(_fY_6 as float)
		endif
		if (_fZ_6) != ""
			(GetFormFromFile(0x1B10E, "MarkAndRecall.esp")).SetName(_fZ_6 as float)
		endif
		if (_fX_7) != ""
			(GetFormFromFile(0x1B10F, "MarkAndRecall.esp")).SetName(_fX_7 as float)
		endif
		if (_fY_7) != ""
			(GetFormFromFile(0x1B110, "MarkAndRecall.esp")).SetName(_fY_7 as float)
		endif
		if (_fZ_7) != ""
			(GetFormFromFile(0x1B111, "MarkAndRecall.esp")).SetName(_fZ_7 as float)
		endif
		if (_fX_8) != ""
			(GetFormFromFile(0x1B112, "MarkAndRecall.esp")).SetName(_fX_8 as float)
		endif
		if (_fY_8) != ""
			(GetFormFromFile(0x1B113, "MarkAndRecall.esp")).SetName(_fY_8 as float)
		endif
		if (_fZ_8) != ""
			(GetFormFromFile(0x1B114, "MarkAndRecall.esp")).SetName(_fZ_8 as float)
		endif
		if (_fX_9) != ""
			(GetFormFromFile(0x1B115, "MarkAndRecall.esp")).SetName(_fX_9 as float)
		endif
		if (_fY_9) != ""
			(GetFormFromFile(0x1B116, "MarkAndRecall.esp")).SetName(_fY_9 as float)
		endif
		if (_fZ_9) != ""
			(GetFormFromFile(0x1B117, "MarkAndRecall.esp")).SetName(_fZ_9 as float)
		endif
		if (_fX_10) != ""
			(GetFormFromFile(0x1B119, "MarkAndRecall.esp")).SetName(_fX_10 as float)
		endif
		if (_fY_10) != ""
			(GetFormFromFile(0x1B120, "MarkAndRecall.esp")).SetName(_fY_10 as float)
		endif
		if (_fZ_10) != ""
			(GetFormFromFile(0x1B127, "MarkAndRecall.esp")).SetName(_fZ_10 as float)
		endif
		if (_fX_11) != ""
			(GetFormFromFile(0x1B11A, "MarkAndRecall.esp")).SetName(_fX_11 as float)
		endif
		if (_fY_11) != ""
			(GetFormFromFile(0x1B121, "MarkAndRecall.esp")).SetName(_fY_11 as float)
		endif
		if (_fZ_11) != ""
			(GetFormFromFile(0x1B128, "MarkAndRecall.esp")).SetName(_fZ_11 as float)
		endif
		if (_fX_12) != ""
			(GetFormFromFile(0x1B11B, "MarkAndRecall.esp")).SetName(_fX_12 as float)
		endif
		if (_fY_12) != ""
			(GetFormFromFile(0x1B122, "MarkAndRecall.esp")).SetName(_fY_12 as float)
		endif
		if (_fZ_12) != ""
			(GetFormFromFile(0x1B129, "MarkAndRecall.esp")).SetName(_fZ_12 as float)
		endif
		if (_fX_13) != ""
			(GetFormFromFile(0x1B11C, "MarkAndRecall.esp")).SetName(_fX_13 as float)
		endif
		if (_fY_13) != ""
			(GetFormFromFile(0x1B123, "MarkAndRecall.esp")).SetName(_fY_13 as float)
		endif
		if (_fZ_13) != ""
			(GetFormFromFile(0x1B12A, "MarkAndRecall.esp")).SetName(_fZ_13 as float)
		endif
		if (_fX_14) != ""
			(GetFormFromFile(0x1B11D, "MarkAndRecall.esp")).SetName(_fX_14 as float)
		endif
		if (_fY_14) != ""
			(GetFormFromFile(0x1B124, "MarkAndRecall.esp")).SetName(_fY_14 as float)
		endif
		if (_fZ_14) != ""
			(GetFormFromFile(0x1B12B, "MarkAndRecall.esp")).SetName(_fZ_14 as float)
		endif
		if (_fX_15) != ""
			(GetFormFromFile(0x1B11E, "MarkAndRecall.esp")).SetName(_fX_15 as float)
		endif
		if (_fY_15) != ""
			(GetFormFromFile(0x1B125, "MarkAndRecall.esp")).SetName(_fY_15 as float)
		endif
		if (_fZ_15) != ""
			(GetFormFromFile(0x1B12C, "MarkAndRecall.esp")).SetName(_fZ_15 as float)
		endif
		if (_fX_16) != ""
			(GetFormFromFile(0x1B11F, "MarkAndRecall.esp")).SetName(_fX_16 as float)
		endif
		if (_fY_16) != ""
			(GetFormFromFile(0x1B126, "MarkAndRecall.esp")).SetName(_fY_16 as float)
		endif
		if (_fZ_16) != ""
			(GetFormFromFile(0x1B12D, "MarkAndRecall.esp")).SetName(_fZ_16 as float)
		endif
	EndIf
	;====================================
	if (_IsNameSet1) != ""
		(GetFormFromFile(0x1B0ED, "MarkAndRecall.esp")).SetName(_IsNameSet1 as int)
	endif
	if (_IsNameSet2) != ""
		(GetFormFromFile(0x1B0EE, "MarkAndRecall.esp")).SetName(_IsNameSet2 as int)
	endif
	if (_IsNameSet3) != ""
		(GetFormFromFile(0x1B0EF, "MarkAndRecall.esp")).SetName(_IsNameSet3 as int)
	endif
	if (_IsNameSet4) != ""
		(GetFormFromFile(0x1B0F0, "MarkAndRecall.esp")).SetName(_IsNameSet4 as int)
	endif
	if (_IsNameSet5) != ""
		(GetFormFromFile(0x1B0F1, "MarkAndRecall.esp")).SetName(_IsNameSet5 as int)
	endif
	if (_IsNameSet6) != ""
		(GetFormFromFile(0x1B0F2, "MarkAndRecall.esp")).SetName(_IsNameSet6 as int)
	endif
	if (_IsNameSet7) != ""
		(GetFormFromFile(0x1B0F3, "MarkAndRecall.esp")).SetName(_IsNameSet7 as int)
	endif
	if (_IsNameSet8) != ""
		(GetFormFromFile(0x1B0F4, "MarkAndRecall.esp")).SetName(_IsNameSet8 as int)
	endif
	if (_IsNameSet9) != ""
		(GetFormFromFile(0x1B0F5, "MarkAndRecall.esp")).SetName(_IsNameSet9 as int)
	endif
	if (_IsNameSet10) != ""
		(GetFormFromFile(0x1B0F6, "MarkAndRecall.esp")).SetName(_IsNameSet10 as int)
	endif
	if (_IsNameSet11) != ""
		(GetFormFromFile(0x1B0F7, "MarkAndRecall.esp")).SetName(_IsNameSet11 as int)
	endif
	if (_IsNameSet12) != ""
		(GetFormFromFile(0x1B0F8, "MarkAndRecall.esp")).SetName(_IsNameSet12 as int)
	endif
	if (_IsNameSet13) != ""
		(GetFormFromFile(0x1B0F9, "MarkAndRecall.esp")).SetName(_IsNameSet13 as int)
	endif
	if (_IsNameSet14) != ""
		(GetFormFromFile(0x1B0FA, "MarkAndRecall.esp")).SetName(_IsNameSet14 as int)
	endif
	if (_IsNameSet15) != ""
		(GetFormFromFile(0x1B0FB, "MarkAndRecall.esp")).SetName(_IsNameSet15 as int)
	endif
	if (_IsNameSet16) != ""
		(GetFormFromFile(0x1B0FC, "MarkAndRecall.esp")).SetName(_IsNameSet16 as int)
	endif
	;====================================
	if _Recall_1_Name != ""
		(GetFormFromFile(0x12484, "MarkAndRecall.esp")).SetName(_Recall_1_Name)
		(GetFormFromFile(0x48DCA, "MarkAndRecall.esp")).SetName(_Recall_1_Name)
	endif
	if Recall2Name != ""
		(GetFormFromFile(0x12485, "MarkAndRecall.esp")).SetName(Recall2Name)
		(GetFormFromFile(0x48DCC, "MarkAndRecall.esp")).SetName(Recall2Name)
	endif
	if Recall3Name != ""
		(GetFormFromFile(0x12486, "MarkAndRecall.esp")).SetName(Recall3Name)
		(GetFormFromFile(0x48DDB, "MarkAndRecall.esp")).SetName(Recall3Name)
	endif
	if Recall4Name != ""
		(GetFormFromFile(0x12487, "MarkAndRecall.esp")).SetName(Recall4Name)
		(GetFormFromFile(0x48DCE, "MarkAndRecall.esp")).SetName(Recall4Name)
	endif
	if Recall5Name != ""
		(GetFormFromFile(0x12488, "MarkAndRecall.esp")).SetName(Recall5Name)
		(GetFormFromFile(0x48DCF, "MarkAndRecall.esp")).SetName(Recall5Name)
	endif
	if Recall6Name != ""
		(GetFormFromFile(0x12489, "MarkAndRecall.esp")).SetName(Recall6Name)
		(GetFormFromFile(0x48DD0, "MarkAndRecall.esp")).SetName(Recall6Name)
	endif
	if Recall7Name != ""
		(GetFormFromFile(0x1248A, "MarkAndRecall.esp")).SetName(Recall7Name)
		(GetFormFromFile(0x48DD1, "MarkAndRecall.esp")).SetName(Recall7Name)
	endif
	if Recall8Name != ""
		(GetFormFromFile(0x1248B, "MarkAndRecall.esp")).SetName(Recall8Name)
		(GetFormFromFile(0x48DDC, "MarkAndRecall.esp")).SetName(Recall8Name)
	endif
	if Recall9Name != ""
		(GetFormFromFile(0x1248C, "MarkAndRecall.esp")).SetName(Recall9Name)
		(GetFormFromFile(0x48DD3, "MarkAndRecall.esp")).SetName(Recall9Name)
	endif
	if Recall10Name != ""
		(GetFormFromFile(0x1248D, "MarkAndRecall.esp")).SetName(Recall10Name)
		(GetFormFromFile(0x48DD4, "MarkAndRecall.esp")).SetName(Recall10Name)
	endif
	if Recall11Name != ""
		(GetFormFromFile(0x1248E, "MarkAndRecall.esp")).SetName(Recall11Name)
		(GetFormFromFile(0x48DD5, "MarkAndRecall.esp")).SetName(Recall11Name)
	endif
	if Recall12Name != ""
		(GetFormFromFile(0x1248F, "MarkAndRecall.esp")).SetName(Recall12Name)
		(GetFormFromFile(0x48DD6, "MarkAndRecall.esp")).SetName(Recall12Name)
	endif
	if Recall13Name != ""
		(GetFormFromFile(0x12490, "MarkAndRecall.esp")).SetName(Recall13Name)
		(GetFormFromFile(0x48DD7, "MarkAndRecall.esp")).SetName(Recall13Name)
	endif
	if Recall14Name != ""
		(GetFormFromFile(0x12491, "MarkAndRecall.esp")).SetName(Recall14Name)
		(GetFormFromFile(0x48DD8, "MarkAndRecall.esp")).SetName(Recall14Name)
	endif
	if Recall15Name != ""
		(GetFormFromFile(0x12492, "MarkAndRecall.esp")).SetName(Recall15Name)
		(GetFormFromFile(0x48DD9, "MarkAndRecall.esp")).SetName(Recall15Name)
	endif
	if Recall16Name != ""
		(GetFormFromFile(0x12493, "MarkAndRecall.esp")).SetName(Recall16Name)
		(GetFormFromFile(0x48DDA, "MarkAndRecall.esp")).SetName(Recall16Name)
	endif
	return true
endFunction

Bool function SaveUserSettingsPapyrus()
	;====================================
	if (ConfigMCM.OldVersion != "")
		ConfigMCM.OldVersion = ConfigMCM.Version
		jsonutil.SetPathStringValue(settings_path, "OldVersion", ConfigMCM.OldVersion)
	endif
	;====================================
	jsonutil.SetPathIntValue(settings_path, "bEnabled", bEnabled as int)
	jsonutil.SetPathIntValue(settings_path, "IsDebugMode", IsDebugMode as int)
	jsonutil.SetPathIntValue(settings_path, "IsAllowed", IsAllowed as int)
	jsonutil.SetPathIntValue(settings_path, "IsClassicMode", IsClassicMode as int)
	jsonutil.SetPathIntValue(settings_path, "CanCityPortal", bCanCityPortal as int)
	jsonutil.SetPathIntValue(settings_path, "CheckingNames", bCheckingNames as int)
	;====================================
	If(IsAllowed == true)
		If ((GetFormFromFile(0x1B118, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_1 = (GetFormFromFile(0x1B118, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B12E, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_2 = (GetFormFromFile(0x1B12E, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B12F, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_3 = (GetFormFromFile(0x1B12F, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B130, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_4 = (GetFormFromFile(0x1B130, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B131, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_5 = (GetFormFromFile(0x1B131, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B132, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_6 = (GetFormFromFile(0x1B132, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B133, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_7 = (GetFormFromFile(0x1B133, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B134, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_8 = (GetFormFromFile(0x1B134, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B135, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_9 = (GetFormFromFile(0x1B135, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B136, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_10 = (GetFormFromFile(0x1B136, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B137, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_11 = (GetFormFromFile(0x1B137, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B138, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_12 = (GetFormFromFile(0x1B138, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B139, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_13 = (GetFormFromFile(0x1B139, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B13A, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_14 = (GetFormFromFile(0x1B13A, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B13B, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_15 = (GetFormFromFile(0x1B13B, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B13C, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_16 = (GetFormFromFile(0x1B13C, "MarkAndRecall.esp")).GetName()
		EndIf
		;====================================
		If ((GetFormFromFile(0x1B0FD, "MarkAndRecall.esp")).GetName() != "")
			_fX_1 = ((GetFormFromFile(0x1B0FD, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B0FE, "MarkAndRecall.esp")).GetName() != "")
			_fY_1 = ((GetFormFromFile(0x1B0FE, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B0FF, "MarkAndRecall.esp")).GetName() != "")
			_fZ_1 = ((GetFormFromFile(0x1B0FF, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B100, "MarkAndRecall.esp")).GetName() != "")
			_fX_2 = ((GetFormFromFile(0x1B100, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B101, "MarkAndRecall.esp")).GetName() != "")
			_fY_2 = ((GetFormFromFile(0x1B101, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B102, "MarkAndRecall.esp")).GetName() != "")
			_fZ_2 = ((GetFormFromFile(0x1B102, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B103, "MarkAndRecall.esp")).GetName() != "")
			_fX_3 = ((GetFormFromFile(0x1B103, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B104, "MarkAndRecall.esp")).GetName() != "")
			_fY_3 = ((GetFormFromFile(0x1B104, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B105, "MarkAndRecall.esp")).GetName() != "")
			_fZ_3 = ((GetFormFromFile(0x1B105, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B106, "MarkAndRecall.esp")).GetName() != "")
			_fX_4 = ((GetFormFromFile(0x1B106, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B107, "MarkAndRecall.esp")).GetName() != "")
			_fY_4 = ((GetFormFromFile(0x1B107, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B108, "MarkAndRecall.esp")).GetName() != "")
			_fZ_4 = ((GetFormFromFile(0x1B108, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B109, "MarkAndRecall.esp")).GetName() != "")
			_fX_5 = ((GetFormFromFile(0x1B109, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B10A, "MarkAndRecall.esp")).GetName() != "")
			_fY_5 = ((GetFormFromFile(0x1B10A, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B10B, "MarkAndRecall.esp")).GetName() != "")
			_fZ_5 = ((GetFormFromFile(0x1B10B, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B10C, "MarkAndRecall.esp")).GetName() != "")
			_fX_6 = ((GetFormFromFile(0x1B10C, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B10D, "MarkAndRecall.esp")).GetName() != "")
			_fY_6 = ((GetFormFromFile(0x1B10D, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B10E, "MarkAndRecall.esp")).GetName() != "")
			_fZ_6 = ((GetFormFromFile(0x1B10E, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B10F, "MarkAndRecall.esp")).GetName() != "")
			_fX_7 = ((GetFormFromFile(0x1B10F, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B110, "MarkAndRecall.esp")).GetName() != "")
			_fY_7 = ((GetFormFromFile(0x1B110, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B111, "MarkAndRecall.esp")).GetName() != "")
			_fZ_7 = ((GetFormFromFile(0x1B111, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B112, "MarkAndRecall.esp")).GetName() != "")
			_fX_8 = ((GetFormFromFile(0x1B112, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B113, "MarkAndRecall.esp")).GetName() != "")
			_fY_8 = ((GetFormFromFile(0x1B113, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B114, "MarkAndRecall.esp")).GetName() != "")
			_fZ_8 = ((GetFormFromFile(0x1B114, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B115, "MarkAndRecall.esp")).GetName() != "")
			_fX_9 = ((GetFormFromFile(0x1B115, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B116, "MarkAndRecall.esp")).GetName() != "")
			_fY_9 = ((GetFormFromFile(0x1B116, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B117, "MarkAndRecall.esp")).GetName() != "")
			_fZ_9 = ((GetFormFromFile(0x1B117, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B119, "MarkAndRecall.esp")).GetName() != "")
			_fX_10 = ((GetFormFromFile(0x1B119, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B120, "MarkAndRecall.esp")).GetName() != "")
			_fY_10 = ((GetFormFromFile(0x1B120, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B127, "MarkAndRecall.esp")).GetName() != "")
			_fZ_10 = ((GetFormFromFile(0x1B127, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B11A, "MarkAndRecall.esp")).GetName() != "")
			_fX_11 = ((GetFormFromFile(0x1B11A, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B121, "MarkAndRecall.esp")).GetName() != "")
			_fY_11 = ((GetFormFromFile(0x1B121, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B128, "MarkAndRecall.esp")).GetName() != "")
			_fZ_11 = ((GetFormFromFile(0x1B128, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B11B, "MarkAndRecall.esp")).GetName() != "")
			_fX_12 = ((GetFormFromFile(0x1B11B, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B122, "MarkAndRecall.esp")).GetName() != "")
			_fY_12 = ((GetFormFromFile(0x1B122, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B129, "MarkAndRecall.esp")).GetName() != "")
			_fZ_12 = ((GetFormFromFile(0x1B129, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B11C, "MarkAndRecall.esp")).GetName() != "")
			_fX_13 = ((GetFormFromFile(0x1B11C, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B123, "MarkAndRecall.esp")).GetName() != "")
			_fY_13 = ((GetFormFromFile(0x1B123, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B12A, "MarkAndRecall.esp")).GetName() != "")
			_fZ_13 = ((GetFormFromFile(0x1B12A, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B11D, "MarkAndRecall.esp")).GetName() != "")
			_fX_14 = ((GetFormFromFile(0x1B11D, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B124, "MarkAndRecall.esp")).GetName() != "")
			_fY_14 = ((GetFormFromFile(0x1B124, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B12B, "MarkAndRecall.esp")).GetName() != "")
			_fZ_14 = ((GetFormFromFile(0x1B12B, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B11E, "MarkAndRecall.esp")).GetName() != "")
			_fX_15 = ((GetFormFromFile(0x1B11E, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B125, "MarkAndRecall.esp")).GetName() != "")
			_fY_15 = ((GetFormFromFile(0x1B125, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B12C, "MarkAndRecall.esp")).GetName() != "")
			_fZ_15 = ((GetFormFromFile(0x1B12C, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B11F, "MarkAndRecall.esp")).GetName() != "")
			_fX_16 = ((GetFormFromFile(0x1B11F, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B126, "MarkAndRecall.esp")).GetName() != "")
			_fY_16 = ((GetFormFromFile(0x1B126, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B12D, "MarkAndRecall.esp")).GetName() != "")
			_fZ_16 = ((GetFormFromFile(0x1B12D, "MarkAndRecall.esp")).GetName() as float)
		EndIf
	EndIf
	;====================================
	If ((GetFormFromFile(0x1B0ED, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet1 = ((GetFormFromFile(0x1B0ED, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0EE, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet2 = ((GetFormFromFile(0x1B0EE, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0EF, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet3 = ((GetFormFromFile(0x1B0EF, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F0, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet4 = ((GetFormFromFile(0x1B0F0, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F1, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet5 = ((GetFormFromFile(0x1B0F1, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F2, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet6 = ((GetFormFromFile(0x1B0F2, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F3, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet7 = ((GetFormFromFile(0x1B0F3, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F4, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet8 = ((GetFormFromFile(0x1B0F4, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F5, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet9 = ((GetFormFromFile(0x1B0F5, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F6, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet10 = ((GetFormFromFile(0x1B0F6, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F7, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet11 = ((GetFormFromFile(0x1B0F7, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F8, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet12 = ((GetFormFromFile(0x1B0F8, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F9, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet13 = ((GetFormFromFile(0x1B0F9, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0FA, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet14 = ((GetFormFromFile(0x1B0FA, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0FB, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet15 = ((GetFormFromFile(0x1B0FB, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	if ((GetFormFromFile(0x1B0FC, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet16 = ((GetFormFromFile(0x1B0FC, "MarkAndRecall.esp")).GetName() as int)
	endif
	;====================================\
	if ((GetFormFromFile(0x12484, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12484, "MarkAndRecall.esp")).GetName(), _Recall_1_Name) == false)
			_Recall_1_Name = (GetFormFromFile(0x12484, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x12485, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12485, "MarkAndRecall.esp")).GetName(), Recall2Name) == false)
			Recall2Name = (GetFormFromFile(0x12485, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x12486, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12486, "MarkAndRecall.esp")).GetName(), Recall3Name) == false)
			Recall3Name = (GetFormFromFile(0x12486, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x12487, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12487, "MarkAndRecall.esp")).GetName(), Recall4Name) == false)
			Recall4Name = (GetFormFromFile(0x12487, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x12488, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12488, "MarkAndRecall.esp")).GetName(), Recall5Name) == false)
			Recall5Name = (GetFormFromFile(0x12488, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x12489, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12489, "MarkAndRecall.esp")).GetName(), Recall6Name) == false)
			Recall6Name = (GetFormFromFile(0x12489, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x1248A, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x1248A, "MarkAndRecall.esp")).GetName(), Recall7Name) == false)
			Recall7Name = (GetFormFromFile(0x1248A, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x1248B, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x1248B, "MarkAndRecall.esp")).GetName(), Recall8Name) == false)
			Recall8Name = (GetFormFromFile(0x1248B, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x1248C, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x1248C, "MarkAndRecall.esp")).GetName(), Recall9Name) == false)
			Recall9Name = (GetFormFromFile(0x1248C, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x1248D, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x1248D, "MarkAndRecall.esp")).GetName(), Recall10Name) == false)
			Recall10Name = (GetFormFromFile(0x1248D, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x1248E, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x1248E, "MarkAndRecall.esp")).GetName(), Recall11Name) == false)
			Recall11Name = (GetFormFromFile(0x1248E, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x1248F, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x1248F, "MarkAndRecall.esp")).GetName(), Recall12Name) == false)
			Recall12Name = (GetFormFromFile(0x1248F, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x12490, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12490, "MarkAndRecall.esp")).GetName(), Recall13Name) == false)
			Recall13Name = (GetFormFromFile(0x12490, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x12491, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12491, "MarkAndRecall.esp")).GetName(), Recall14Name) == false)
			Recall14Name = (GetFormFromFile(0x12491, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x12492, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12492, "MarkAndRecall.esp")).GetName(), Recall15Name) == false)
			Recall15Name = (GetFormFromFile(0x12492, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x12493, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12493, "MarkAndRecall.esp")).GetName(), Recall16Name) == false)
			Recall16Name = (GetFormFromFile(0x12493, "MarkAndRecall.esp")).GetName()
		endif
	endif
	;====================================
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_1", _IsNameSet1)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_2", _IsNameSet2)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_3", _IsNameSet3)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_4", _IsNameSet4)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_5", _IsNameSet5)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_6", _IsNameSet6)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_7", _IsNameSet7)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_8", _IsNameSet8)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_9", _IsNameSet9)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_10", _IsNameSet10)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_11", _IsNameSet11)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_12", _IsNameSet12)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_13", _IsNameSet13)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_14", _IsNameSet14)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_15", _IsNameSet15)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_16", _IsNameSet16)
	;====================================
	If(IsAllowed == true)
		jsonutil.SetPathFloatValue(settings_path, "_fX_1", _fX_1)
		jsonutil.SetPathFloatValue(settings_path, "_fY_1", _fY_1)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_1", _fZ_1)
		jsonutil.SetPathFloatValue(settings_path, "_fX_2", _fX_2)
		jsonutil.SetPathFloatValue(settings_path, "_fY_2", _fY_2)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_2", _fZ_2)
		jsonutil.SetPathFloatValue(settings_path, "_fX_3", _fX_3)
		jsonutil.SetPathFloatValue(settings_path, "_fY_3", _fY_3)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_3", _fZ_3)
		jsonutil.SetPathFloatValue(settings_path, "_fX_4", _fX_4)
		jsonutil.SetPathFloatValue(settings_path, "_fY_4", _fY_4)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_4", _fZ_4)
		jsonutil.SetPathFloatValue(settings_path, "_fX_5", _fX_5)
		jsonutil.SetPathFloatValue(settings_path, "_fY_5", _fY_5)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_5", _fZ_5)
		jsonutil.SetPathFloatValue(settings_path, "_fX_6", _fX_6)
		jsonutil.SetPathFloatValue(settings_path, "_fY_6", _fY_6)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_6", _fZ_6)
		jsonutil.SetPathFloatValue(settings_path, "_fX_7", _fX_7)
		jsonutil.SetPathFloatValue(settings_path, "_fY_7", _fY_7)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_7", _fZ_7)
		jsonutil.SetPathFloatValue(settings_path, "_fX_8", _fX_8)
		jsonutil.SetPathFloatValue(settings_path, "_fY_8", _fY_8)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_8", _fZ_8)
		jsonutil.SetPathFloatValue(settings_path, "_fX_9", _fX_9)
		jsonutil.SetPathFloatValue(settings_path, "_fY_9", _fY_9)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_9", _fZ_9)
		jsonutil.SetPathFloatValue(settings_path, "_fX_10", _fX_10)
		jsonutil.SetPathFloatValue(settings_path, "_fY_10", _fY_10)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_10", _fZ_10)
		jsonutil.SetPathFloatValue(settings_path, "_fX_11", _fX_11)
		jsonutil.SetPathFloatValue(settings_path, "_fY_11", _fY_11)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_11", _fZ_11)
		jsonutil.SetPathFloatValue(settings_path, "_fX_12", _fX_12)
		jsonutil.SetPathFloatValue(settings_path, "_fY_12", _fY_12)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_12", _fZ_12)
		jsonutil.SetPathFloatValue(settings_path, "_fX_13", _fX_13)
		jsonutil.SetPathFloatValue(settings_path, "_fY_13", _fY_13)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_13", _fZ_13)
		jsonutil.SetPathFloatValue(settings_path, "_fX_14", _fX_14)
		jsonutil.SetPathFloatValue(settings_path, "_fY_14", _fY_14)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_14", _fZ_14)
		jsonutil.SetPathFloatValue(settings_path, "_fX_15", _fX_15)
		jsonutil.SetPathFloatValue(settings_path, "_fY_15", _fY_15)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_15", _fZ_15)
		jsonutil.SetPathFloatValue(settings_path, "_fX_16", _fX_16)
		jsonutil.SetPathFloatValue(settings_path, "_fY_16", _fY_16)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_16", _fZ_16)
		if (_Cell_Name_1 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_1", _Cell_Name_1)
		endif
		if (_Cell_Name_2 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_2", _Cell_Name_2)
		endif
		if (_Cell_Name_3 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_3", _Cell_Name_3)
		endif
		if (_Cell_Name_4 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_4", _Cell_Name_4)
		endif
		if (_Cell_Name_5 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_5", _Cell_Name_5)
		endif
		if (_Cell_Name_6 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_6", _Cell_Name_6)
		endif
		if (_Cell_Name_7 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_7", _Cell_Name_7)
		endif
		if (_Cell_Name_8 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_8", _Cell_Name_8)
		endif
		if (_Cell_Name_9 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_9", _Cell_Name_9)
		endif
		if (_Cell_Name_10 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_10", _Cell_Name_10)
		endif
		if (_Cell_Name_11 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_11", _Cell_Name_11)
		endif
		if (_Cell_Name_12 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_12", _Cell_Name_12)
		endif
		if (_Cell_Name_13 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_13", _Cell_Name_13)
		endif
		if (_Cell_Name_14 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_14", _Cell_Name_14)
		endif
		if (_Cell_Name_15 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_15", _Cell_Name_15)
		endif
		if (_Cell_Name_16 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_16", _Cell_Name_16)
		endif
	EndIf
	;====================================
	if (_Recall_1_Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_1_Name", _Recall_1_Name)
	endif
	if (Recall2Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_2_Name", Recall2Name)
	endif
	if (Recall3Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_3_Name", Recall3Name)
	endif
	if (Recall4Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_4_Name", Recall4Name)
	endif
	if (Recall5Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_5_Name", Recall5Name)
	endif
	if (Recall6Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_6_Name", Recall6Name)
	endif
	if (Recall7Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_7_Name", Recall7Name)
	endif
	if (Recall8Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_8_Name", Recall8Name)
	endif
	if (Recall9Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_9_Name", Recall9Name)
	endif
	if (Recall10Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_10_Name", Recall10Name)
	endif
	if (Recall11Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_11_Name", Recall11Name)
	endif
	if (Recall12Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_12_Name", Recall12Name)
	endif
	if (Recall13Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_13_Name", Recall13Name)
	endif
	if (Recall14Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_14_Name", Recall14Name)
	endif
	if (Recall15Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_15_Name", Recall15Name)
	endif
	if (Recall16Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_16_Name", Recall16Name)
	endif
	if !jsonutil.Save(settings_path, false)
		Trace("MAR: Error saving user settings.", 0)
		return false
	endIf
	bSaveUserSettings = false
	return true
endFunction

Bool function ClearAlternateRecallNames()
	If(IsAllowed == false)
		(GetFormFromFile(0x1B118, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B12E, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B12F, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B130, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B131, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B132, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B133, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B134, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B135, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B136, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B137, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B138, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B139, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B13A, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B13B, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B13C, "MarkAndRecall.esp")).SetName("")
		;=============================================================================
		_Cell_Name_1 = (GetFormFromFile(0x1B118, "MarkAndRecall.esp")).GetName()
		_Cell_Name_2 = (GetFormFromFile(0x1B12E, "MarkAndRecall.esp")).GetName()
		_Cell_Name_3 = (GetFormFromFile(0x1B12F, "MarkAndRecall.esp")).GetName()
		_Cell_Name_4 = (GetFormFromFile(0x1B130, "MarkAndRecall.esp")).GetName()
		_Cell_Name_5 = (GetFormFromFile(0x1B131, "MarkAndRecall.esp")).GetName()
		_Cell_Name_6 = (GetFormFromFile(0x1B132, "MarkAndRecall.esp")).GetName()
		_Cell_Name_7 = (GetFormFromFile(0x1B133, "MarkAndRecall.esp")).GetName()
		_Cell_Name_8 = (GetFormFromFile(0x1B134, "MarkAndRecall.esp")).GetName()
		_Cell_Name_9 = (GetFormFromFile(0x1B135, "MarkAndRecall.esp")).GetName()
		_Cell_Name_10 = (GetFormFromFile(0x1B136, "MarkAndRecall.esp")).GetName()
		_Cell_Name_11 = (GetFormFromFile(0x1B137, "MarkAndRecall.esp")).GetName()
		_Cell_Name_12 = (GetFormFromFile(0x1B138, "MarkAndRecall.esp")).GetName()
		_Cell_Name_13 = (GetFormFromFile(0x1B139, "MarkAndRecall.esp")).GetName()
		_Cell_Name_14 = (GetFormFromFile(0x1B13A, "MarkAndRecall.esp")).GetName()
		_Cell_Name_15 = (GetFormFromFile(0x1B13B, "MarkAndRecall.esp")).GetName()
		_Cell_Name_16 = (GetFormFromFile(0x1B13C, "MarkAndRecall.esp")).GetName()
		;=============================================================================
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_1", _Cell_Name_1)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_2", _Cell_Name_2)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_3", _Cell_Name_3)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_4", _Cell_Name_4)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_5", _Cell_Name_5)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_6", _Cell_Name_6)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_7", _Cell_Name_7)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_8", _Cell_Name_8)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_9", _Cell_Name_9)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_10", _Cell_Name_10)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_11", _Cell_Name_11)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_12", _Cell_Name_12)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_13", _Cell_Name_13)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_14", _Cell_Name_14)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_15", _Cell_Name_15)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_16", _Cell_Name_16)
	EndIf
	;====================================
	if !jsonutil.Save(settings_path, false)
		Trace("MAR: Error saving user settings.", 0)
		return false
	endIf
	return true
endFunction
;/
; Checks to see if the specified objective is displayed
bool Function IsObjectiveDisplayed(int aiObjective) native

Sets the specified objective to completed or not
 SetObjectiveCompleted(int aiObjective, bool abCompleted = true) native

Sets the specified objective to displayed or hidden - if abForce is true, will display the objective even if it has already been displayed
 SetObjectiveDisplayed(int aiObjective, bool abDisplayed = true, bool abForce = false) native

Sets the specified objective to failed or not
 SetObjectiveFailed(int aiObjective, bool abFailed = true) native
/;
Function RecallDisplayed(ObjectReference ORef, int i)
	aORef = new ReferenceAlias[16]
	aORef[1] = Recall1
	aORef[2] = Recall2
	aORef[3] = Recall3
	aORef[4] = Recall4
	aORef[5] = Recall5
	aORef[6] = Recall6
	aORef[7] = Recall7
	aORef[8] = Recall8
	aORef[9] = Recall9
	aORef[10] = Recall10
	aORef[11] = Recall11
	aORef[12] = Recall12
	aORef[13] = Recall13
	aORef[14] = Recall14
	aORef[15] = Recall15
	aORef[16] = Recall16
	If (ORef)
		If (ORef.GetParentCell() != MarkAndRecallScript.IgnoreCell)
			(self.GetNthAlias(i) as ReferenceAlias).GetRef().SetDisplayName(ORef.GetDisplayName(), true)
			If (self.IsObjectiveDisplayed(i) == false)
				self.SetObjectiveDisplayed(i, true, true)
			EndIf
		EndIf
	EndIf
	If(bGetCurrentLanguage() == true)
		Show_Notification("Маркер добавлен на карту.", "#00FF00")
	Else
		Show_Notification("The marker has been added to the map.", "#00FF00")
	EndIf
EndFunction

Function UpdateRecallsNames()
	String RecallName
	String CellName
	ReferenceAlias refAlias
	int iIndex
	sNames = new String[16]
	aORef = new ReferenceAlias[16]
	sNames[1] = Recall1Name
	sNames[2] = Recall2Name
	sNames[3] = Recall3Name
	sNames[4] = Recall4Name
	sNames[5] = Recall5Name
	sNames[6] = Recall6Name
	sNames[7] = Recall7Name
	sNames[8] = Recall8Name
	sNames[9] = Recall9Name
	sNames[10] = Recall10Name
	sNames[11] = Recall11Name
	sNames[12] = Recall12Name
	sNames[13] = Recall13Name
	sNames[14] = Recall14Name
	sNames[15] = Recall15Name
	sNames[16] = Recall16Name
	aORef[1] = Recall1
	aORef[2] = Recall2
	aORef[3] = Recall3
	aORef[4] = Recall4
	aORef[5] = Recall5
	aORef[6] = Recall6
	aORef[7] = Recall7
	aORef[8] = Recall8
	aORef[9] = Recall9
	aORef[10] = Recall10
	aORef[11] = Recall11
	aORef[12] = Recall12
	aORef[13] = Recall13
	aORef[14] = Recall14
	aORef[15] = Recall15
	aORef[16] = Recall16
	iIndex = 1
	while iIndex <= 16;self.GetNumAliases()
		refAlias = self.GetNthAlias(iIndex) as ReferenceAlias
		if refAlias.GetRef() == none
			refAlias.ForceRefTo(aORef[iIndex].GetRef())
			If(bGetCurrentLanguage() == true)
				RecallName = "Пусто"
			Else
				RecallName = "Empty"
			EndIf
			if aORef[iIndex].GetRef() == none
			endif
			if (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 0)
				sCN[iIndex] = aORef[iIndex].GetRef().GetCurrentLocation().GetName()
			ElseIf (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 1)
				sCN[iIndex] = aORef[iIndex].GetRef().GetParentCell().GetName()
			EndIf
			If (GetCellNameIdentical(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex]) == false)
				sNames[iIndex] = GetCellName(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex])
				if sNames[iIndex] == "Mark And Recall Markers Cell"
					sNames[iIndex] = RecallName
				endif
			endif
			(self.GetNthAlias(iIndex) as ReferenceAlias).GetRef().SetDisplayName(sNames[iIndex], true)
			return
		ElseIf (refAlias.GetRef())
			If(bGetCurrentLanguage() == true)
				RecallName = "Пусто"
			Else
				RecallName = "Empty"
			EndIf
			if (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 0)
				sCN[iIndex] = aORef[iIndex].GetRef().GetCurrentLocation().GetName()
			ElseIf (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 1)
				sCN[iIndex] = aORef[iIndex].GetRef().GetParentCell().GetName()
			EndIf
			If (GetCellNameIdentical(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex]) == false)
				sNames[iIndex] = GetCellName(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex])
				if sNames[iIndex] == "Mark And Recall Markers Cell"
					sNames[iIndex] = RecallName
				endif
			endif
			(self.GetNthAlias(iIndex) as ReferenceAlias).GetRef().SetDisplayName(sNames[iIndex], true)
		endIf
		Recall1Name = sNames[1]
		Recall2Name = sNames[2]
		Recall3Name = sNames[3]
		Recall4Name = sNames[4]
		Recall5Name = sNames[5]
		Recall6Name = sNames[6]
		Recall7Name = sNames[7]
		Recall8Name = sNames[8]
		Recall9Name = sNames[9]
		Recall10Name = sNames[10]
		Recall11Name = sNames[11]
		Recall12Name = sNames[12]
		Recall13Name = sNames[13]
		Recall14Name = sNames[14]
		Recall15Name = sNames[15]
		Recall16Name = sNames[16]
		iIndex += 1
	endWhile
EndFunction

Function RecallsDisplayed()
	String RecallName
	String CellName
	ReferenceAlias refAlias
	int iIndex
	sNames = new String[16]
	aORef = new ReferenceAlias[16]
	sNames[1] = Recall1Name
	sNames[2] = Recall2Name
	sNames[3] = Recall3Name
	sNames[4] = Recall4Name
	sNames[5] = Recall5Name
	sNames[6] = Recall6Name
	sNames[7] = Recall7Name
	sNames[8] = Recall8Name
	sNames[9] = Recall9Name
	sNames[10] = Recall10Name
	sNames[11] = Recall11Name
	sNames[12] = Recall12Name
	sNames[13] = Recall13Name
	sNames[14] = Recall14Name
	sNames[15] = Recall15Name
	sNames[16] = Recall16Name
	aORef[1] = Recall1
	aORef[2] = Recall2
	aORef[3] = Recall3
	aORef[4] = Recall4
	aORef[5] = Recall5
	aORef[6] = Recall6
	aORef[7] = Recall7
	aORef[8] = Recall8
	aORef[9] = Recall9
	aORef[10] = Recall10
	aORef[11] = Recall11
	aORef[12] = Recall12
	aORef[13] = Recall13
	aORef[14] = Recall14
	aORef[15] = Recall15
	aORef[16] = Recall16
	iIndex = 1
	while iIndex <= 16;self.GetNumAliases()
		refAlias = self.GetNthAlias(iIndex) as ReferenceAlias
		if refAlias.GetRef() == none
			refAlias.ForceRefTo(aORef[iIndex].GetRef())
			If(bGetCurrentLanguage() == true)
				RecallName = "Пусто"
			Else
				RecallName = "Empty"
			EndIf
			if aORef[iIndex].GetRef() == none
				;aORef[iIndex].ForceRefTo(aORef[iIndex].GetRef())
			endif
			if (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 0)
				sCN[iIndex] = aORef[iIndex].GetRef().GetCurrentLocation().GetName()
			ElseIf (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 1)
				sCN[iIndex] = aORef[iIndex].GetRef().GetParentCell().GetName()
			EndIf
			If (GetCellNameIdentical(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex]) == false)
				sNames[iIndex] = GetCellName(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex])
				if sNames[iIndex] == "Mark And Recall Markers Cell"
					sNames[iIndex] = RecallName
				endif
			endif
			(self.GetNthAlias(iIndex) as ReferenceAlias).GetRef().SetDisplayName(sNames[iIndex], true)
			if((self.GetNthAlias(iIndex) as ReferenceAlias).GetRef().GetDisplayName() != RecallName)
				If (self.IsObjectiveDisplayed(iIndex) == false)
					self.SetObjectiveDisplayed(iIndex, true, true)
					;DebugNotification("aORef Name if null: " + " " + iIndex + " " + (self.GetNthAlias(iIndex) as ReferenceAlias).GetRef().GetDisplayName())
				EndIf
			endif
			return
		ElseIf (refAlias.GetRef())
			If(bGetCurrentLanguage() == true)
				RecallName = "Пусто"
			Else
				RecallName = "Empty"
			EndIf
			if (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 0)
				sCN[iIndex] = aORef[iIndex].GetRef().GetCurrentLocation().GetName()
				;DebugNotification("GetCurrentLocation: " + " " + iIndex + " " + aORef[iIndex].GetRef().GetCurrentLocation().GetName())
			ElseIf (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 1)
				sCN[iIndex] = aORef[iIndex].GetRef().GetParentCell().GetName()
				;DebugNotification("GetParentCell: " + " " + iIndex + " " + aORef[iIndex].GetRef().GetParentCell().GetName())
			EndIf
			If (GetCellNameIdentical(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex]) == false)
				sNames[iIndex] = GetCellName(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex])
				if sNames[iIndex] == "Mark And Recall Markers Cell"
					sNames[iIndex] = RecallName
					;DebugNotification("sNames: " + " " + iIndex + " " + sNames[iIndex])
				endif
			endif
			(self.GetNthAlias(iIndex) as ReferenceAlias).GetRef().SetDisplayName(sNames[iIndex], true)
			if((self.GetNthAlias(iIndex) as ReferenceAlias).GetRef().GetDisplayName() != RecallName)
				If (self.IsObjectiveDisplayed(iIndex) == false)
					self.SetObjectiveDisplayed(iIndex, true, true)
					;If(bGetCurrentLanguage() == true)
					;	Show_Notification("Маркер добавлен на карту.", "#00FF00")
					;Else
					;	Show_Notification("The marker has been added to the map.", "#00FF00")
					;EndIf
					;DebugNotification("aORef Name: " + " " + iIndex + " " + (self.GetNthAlias(iIndex) as ReferenceAlias).GetRef().GetDisplayName())
				EndIf
			endif
		endIf
		Recall1Name = sNames[1]
		Recall2Name = sNames[2]
		Recall3Name = sNames[3]
		Recall4Name = sNames[4]
		Recall5Name = sNames[5]
		Recall6Name = sNames[6]
		Recall7Name = sNames[7]
		Recall8Name = sNames[8]
		Recall9Name = sNames[9]
		Recall10Name = sNames[10]
		Recall11Name = sNames[11]
		Recall12Name = sNames[12]
		Recall13Name = sNames[13]
		Recall14Name = sNames[14]
		Recall15Name = sNames[15]
		Recall16Name = sNames[16]
		iIndex += 1
	endWhile
EndFunction

Function RecallCompleted(ObjectReference ORef, int i)
	If (ORef)
		If (ORef.GetParentCell() != MarkAndRecallScript.IgnoreCell)
			self.SetObjectiveCompleted(i, true)
		EndIf
	EndIf
EndFunction

				;(self.GetNthAlias(iIndex) as ReferenceAlias).GetRef().SetDisplayName(ORef.GetDisplayName(), true)
	
;/
Function RecallDisplayed(ObjectReference ORef, int i)
	ReferenceAlias refAlias
	int iIndex
	If (ORef)
		If (ORef.GetParentCell() != MarkAndRecallScript.IgnoreCell)
			iIndex = 1
			while iIndex < self.GetNumAliases()
				refAlias = self.GetNthAlias(iIndex) as ReferenceAlias
				if refAlias.GetRef() == none
					refAlias.ForceRefTo(ORef)
					refAlias.GetRef().SetDisplayName(ORef.GetDisplayName(), true)
					self.SetObjectiveDisplayed(iIndex, true, true)
					Notification("Маркер добавлен на карту")
					return
				ElseIf refAlias.GetRef()
					refAlias.GetRef().SetDisplayName(ORef.GetDisplayName(), true)
					DebugNotification("GetDisplayName refAlias " + refAlias.GetRef().GetDisplayName
					self.SetObjectiveDisplayed(iIndex, true, true)
					Notification("Маркер добавлен на карту")
				endIf
				iIndex += 1
			endWhile
		EndIf
	EndIf
EndFunction

Изменено пользователем aaa112aaa
Опубликовано
25.10.2021 23:56:52, aaa112aaa сказал(-а):

И снова здравствуйте.

Снова я, снова проблема.

 

Так вот, в скрипте в части "Oninit" есть код и почему-то он выполняется дважды, а то бывает и трижды, если бы не сообщения, я бы об этом и не узнал никогда.

Вот почему так? И не важно какое сохранение, я загружался и на чистое сохранение, без мода.

 

Вот собственно код Event OnInit() :

OnInit()
Event OnInit(); quests that are not run-once (задания, которые не выполняются один раз)
	bIsInitStarted = true
	RegisterForSingleUpdate(5.0); register for an onupdate event in 5 seconds
	Show_Notification("OnInit.", "#00ff00")
	if !(GetPlayer().HasSpell((GetFormFromFile(0x5901, "MarkAndRecall.esp")) as Spell))
		GetPlayer().addspell((GetFormFromFile(0x5901, "MarkAndRecall.esp")) as Spell, false)
		If(bGetCurrentLanguage() == true)
			Show_Notification("Заклинание: " + (GetFormFromFile(0x5901, "MarkAndRecall.esp")).GetName() + " Добавлено.", "#00FF00")
		Else
			Show_Notification("Spell: " + (GetFormFromFile(0x5901, "MarkAndRecall.esp")).GetName() + " Added.", "#00FF00")
		EndIf
	endif
	Quest SKI_ConfigManagerInstance = ((GetFormFromFile(0x802, "SkyUI_SE.esp")) as Quest)
	if self.IsRunning()
		LoadOnlySettings()
		LoadSettingsAtStart()
		if(ConfigMCM.OldVersion != ConfigMCM.Version)
			SKI_ConfigManagerInstance.SetStage(1)
			If(bGetCurrentLanguage() == true)
				MessageBox("Мод: " + self.GetName() + " был обновлён, загрузка настроек.")
				;Show_Notification("Мод: " + self.GetName() + " был обновлён загрузка настроек.", "#00ff00")
			Else
				MessageBox("The mod: " + self.GetName() + " has been updated, loading settings, please wait.")
				;Show_Notification("The mod: " + self.GetName() + " has been updated, loading settings, please wait.", "#00ff00")
			EndIf
			If(bGetCurrentLanguage() == true)
				Show_Notification("Версия " + self.GetName() + " " + ConfigMCM.Version, "#DAA520")
				DebugNotification("Старая версия " + self.GetName() + " " + ConfigMCM.OldVersion, false, "#00FF00")
			Else
				Show_Notification("Version of " + self.GetName() + " " + ConfigMCM.Version, "#DAA520")
				DebugNotification("Old version of " + self.GetName() + " " + ConfigMCM.OldVersion, false, "#00FF00")
			EndIf
			;LoadOnlyLocNames()
			If(bLoadOnlyLocNames() == true)
				Wait(1)
				MarkAndRecallScript.Set1()
				MarkAndRecallScript.Set2()
				MarkAndRecallScript.Set3()
				MarkAndRecallScript.Set4()
				MarkAndRecallScript.Set5()
				MarkAndRecallScript.Set6()
				MarkAndRecallScript.Set7()
				MarkAndRecallScript.Set8()
				MarkAndRecallScript.Set9()
				MarkAndRecallScript.Set10()
				MarkAndRecallScript.Set11()
				MarkAndRecallScript.Set12()
				MarkAndRecallScript.Set13()
				MarkAndRecallScript.Set14()
				MarkAndRecallScript.Set15()
				MarkAndRecallScript.Set16()
				Wait(3)
				RecallsDisplayed()
			EndIf
			If(bGetCurrentLanguage() == true)
				Show_Notification("Все готово.", "#00ff00")
			Else
				Show_Notification("Everything is ready.", "#00ff00")
			EndIf
			ConfigMCM.OldVersion = ConfigMCM.Version
		EndIf
		UpdateSettings()
		;self.OnGameReload()
	endIf
	bIsInitStarted = false
	bIsInitCompleted = true
EndEvent

 

А вот, если нужно, весь скрипт:

 

MarkAndRecallQuestScript
Scriptname MarkAndRecallQuestScript extends Quest Conditional

;Import SKSE
import Debug
import Utility
import Game
import Input
Import UI
Import StringUtil
Import SKI_ConfigBase

;-- Properties --------------------------------------
MarkAndRecallConfigMCMScript property ConfigMCM auto
MarkAndRecallScriptEffect property MarkAndRecallScript auto

bool Property bEnabled = true Auto
Bool Property IsDebugMode = false  Auto  
Bool Property IsAllowed = false  Auto  
Bool Property IsClassicMode = true  Auto
Bool Property bSaveUserSettings = false  Auto
Bool Property bCanCityPortal = true  Auto  Conditional
Bool Property bCheckingNames = false  Auto  Conditional
Bool Property bIsInitStarted = false  Auto
Bool Property bIsInitCompleted = false  Auto

bool property uninstall = false auto
Message property uninstallMessage auto

Bool property ErrorDetected = false  Auto Hidden 
Bool property MENUExtended  Auto Hidden 
Bool property DLC1Extended  Auto Hidden 

String property MinSKSEVersion
	String function get()

		return "2.0.19"
	endFunction
endproperty
Int property MinSKSERelease
	Int function get()

		return 53
	endFunction
endproperty
Int property ERR_SKSE_VERSION_SCPT
	Int function get()

		return 3
	endFunction
endproperty
Int property ERR_SKSE_MISSING
	Int function get()

		return 1
	endFunction
endproperty
Int property ERR_SKSE_BROKEN
	Int function get()

		return 7
	endFunction
endproperty
Int property ERR_SKSE_VERSION_RT
	Int function get()

		return 2
	endFunction
endproperty
Int property ERR_INI_PAPYRUS
	Int function get()

		return 4
	endFunction
endproperty

ReferenceAlias Property Recall1  Auto  
ReferenceAlias Property Recall2  Auto  
ReferenceAlias Property Recall3  Auto  
ReferenceAlias Property Recall4  Auto  
ReferenceAlias Property Recall5  Auto  
ReferenceAlias Property Recall6  Auto  
ReferenceAlias Property Recall7  Auto  
ReferenceAlias Property Recall8  Auto  
ReferenceAlias Property Recall9  Auto  
ReferenceAlias Property Recall10  Auto  
ReferenceAlias Property Recall11  Auto  
ReferenceAlias Property Recall12  Auto  
ReferenceAlias Property Recall13  Auto  
ReferenceAlias Property Recall14  Auto  
ReferenceAlias Property Recall15  Auto  
ReferenceAlias Property Recall16  Auto

String Property Recall1Name  Auto Hidden 
String Property Recall2Name  Auto Hidden 
String Property Recall3Name  Auto Hidden 
String Property Recall4Name  Auto Hidden 
String Property Recall5Name  Auto Hidden 
String Property Recall6Name  Auto Hidden 
String Property Recall7Name  Auto Hidden 
String Property Recall8Name  Auto Hidden 
String Property Recall9Name  Auto Hidden 
String Property Recall10Name  Auto Hidden 
String Property Recall11Name  Auto Hidden 
String Property Recall12Name  Auto Hidden 
String Property Recall13Name  Auto Hidden 
String Property Recall14Name  Auto Hidden 
String Property Recall15Name  Auto Hidden 
String Property Recall16Name  Auto Hidden 

String Property Cell_Name  Auto Hidden 

Float Property f_X  Auto Hidden 
Float Property f_Y  Auto Hidden 
Float Property f_Z  Auto Hidden 

Int Property Distance = 4000  Auto  

;ReferenceAlias Property Player  Auto  

;-- Variables ---------------------------------------
String settings_path = "..\\MarkAndRecall\\UserSettings"

String S_1

String[] sNames
String[] sCN
ReferenceAlias[] aORef

String _Recall_1_Name
String Recall2Name
String Recall3Name
String Recall4Name
String Recall5Name
String Recall6Name
String Recall7Name
String Recall8Name
String Recall9Name
String Recall10Name
String Recall11Name
String Recall12Name
String Recall13Name
String Recall14Name
String Recall15Name
String Recall16Name

String _Cell_Name_1
String _Cell_Name_2
String _Cell_Name_3
String _Cell_Name_4
String _Cell_Name_5
String _Cell_Name_6
String _Cell_Name_7
String _Cell_Name_8
String _Cell_Name_9
String _Cell_Name_10
String _Cell_Name_11
String _Cell_Name_12
String _Cell_Name_13
String _Cell_Name_14
String _Cell_Name_15
String _Cell_Name_16

int _IsNameSet1
int _IsNameSet2
int _IsNameSet3
int _IsNameSet4
int _IsNameSet5
int _IsNameSet6
int _IsNameSet7
int _IsNameSet8
int _IsNameSet9
int _IsNameSet10
int _IsNameSet11
int _IsNameSet12
int _IsNameSet13
int _IsNameSet14
int _IsNameSet15
int _IsNameSet16

float _fX_1
float _fX_2
float _fX_3
float _fX_4
float _fX_5
float _fX_6
float _fX_7
float _fX_8
float _fX_9
float _fX_10
float _fX_11
float _fX_12
float _fX_13
float _fX_14
float _fX_15
float _fX_16
float _fY_1
float _fY_2
float _fY_3
float _fY_4
float _fY_5
float _fY_6
float _fY_7
float _fY_8
float _fY_9
float _fY_10
float _fY_11
float _fY_12
float _fY_13
float _fY_14
float _fY_15
float _fY_16
float _fZ_1
float _fZ_2
float _fZ_3
float _fZ_4
float _fZ_5
float _fZ_6
float _fZ_7
float _fZ_8
float _fZ_9
float _fZ_10
float _fZ_11
float _fZ_12
float _fZ_13
float _fZ_14
float _fZ_15
float _fZ_16
;float _afZ

;/
/;

;-- Functions ---------------------------------------

Event OnInit(); quests that are not run-once (задания, которые не выполняются один раз)
	bIsInitStarted = true
	RegisterForSingleUpdate(5.0); register for an onupdate event in 5 seconds
	Show_Notification("OnInit.", "#00ff00")
	if !(GetPlayer().HasSpell((GetFormFromFile(0x5901, "MarkAndRecall.esp")) as Spell))
		GetPlayer().addspell((GetFormFromFile(0x5901, "MarkAndRecall.esp")) as Spell, false)
		If(bGetCurrentLanguage() == true)
			Show_Notification("Заклинание: " + (GetFormFromFile(0x5901, "MarkAndRecall.esp")).GetName() + " Добавлено.", "#00FF00")
		Else
			Show_Notification("Spell: " + (GetFormFromFile(0x5901, "MarkAndRecall.esp")).GetName() + " Added.", "#00FF00")
		EndIf
	endif
	Quest SKI_ConfigManagerInstance = ((GetFormFromFile(0x802, "SkyUI_SE.esp")) as Quest)
	if self.IsRunning()
		LoadOnlySettings()
		LoadSettingsAtStart()
		if(ConfigMCM.OldVersion != ConfigMCM.Version)
			SKI_ConfigManagerInstance.SetStage(1)
			If(bGetCurrentLanguage() == true)
				MessageBox("Мод: " + self.GetName() + " был обновлён, загрузка настроек.")
				;Show_Notification("Мод: " + self.GetName() + " был обновлён загрузка настроек.", "#00ff00")
			Else
				MessageBox("The mod: " + self.GetName() + " has been updated, loading settings, please wait.")
				;Show_Notification("The mod: " + self.GetName() + " has been updated, loading settings, please wait.", "#00ff00")
			EndIf
			If(bGetCurrentLanguage() == true)
				Show_Notification("Версия " + self.GetName() + " " + ConfigMCM.Version, "#DAA520")
				DebugNotification("Старая версия " + self.GetName() + " " + ConfigMCM.OldVersion, false, "#00FF00")
			Else
				Show_Notification("Version of " + self.GetName() + " " + ConfigMCM.Version, "#DAA520")
				DebugNotification("Old version of " + self.GetName() + " " + ConfigMCM.OldVersion, false, "#00FF00")
			EndIf
			;LoadOnlyLocNames()
			If(bLoadOnlyLocNames() == true)
				Wait(1)
				MarkAndRecallScript.Set1()
				MarkAndRecallScript.Set2()
				MarkAndRecallScript.Set3()
				MarkAndRecallScript.Set4()
				MarkAndRecallScript.Set5()
				MarkAndRecallScript.Set6()
				MarkAndRecallScript.Set7()
				MarkAndRecallScript.Set8()
				MarkAndRecallScript.Set9()
				MarkAndRecallScript.Set10()
				MarkAndRecallScript.Set11()
				MarkAndRecallScript.Set12()
				MarkAndRecallScript.Set13()
				MarkAndRecallScript.Set14()
				MarkAndRecallScript.Set15()
				MarkAndRecallScript.Set16()
				Wait(3)
				RecallsDisplayed()
			EndIf
			If(bGetCurrentLanguage() == true)
				Show_Notification("Все готово.", "#00ff00")
			Else
				Show_Notification("Everything is ready.", "#00ff00")
			EndIf
			ConfigMCM.OldVersion = ConfigMCM.Version
		EndIf
		UpdateSettings()
		;self.OnGameReload()
	endIf
	bIsInitStarted = false
	bIsInitCompleted = true
EndEvent

Event OnPlayerLoadGame()
	Show_Notification("MarkAndRecallQuest: OnPlayerLoadGame", "#00ff00")
	LoadSettingsAtStart()
EndEvent

Function OnGameReload(); quests that were running at time of save (задания, которые выполнялись во время сохранения) requires SkyUI's SKI_PlayerLoadGameAlias script; or use Player's OnPlayerLoadGame event
	LoadOnlySettings()
	LoadSettingsAtStart()
	DebugNotification("OnGameReload.", true , "#00FF00")
	if (IsDebugMode)
		MarkAndRecallScript.IsDebugMode = IsDebugMode
		ConfigMCM.bIsDebugMode = IsDebugMode
	endif
	if (IsAllowed)
		MarkAndRecallScript.IsAllowed = IsAllowed
		ConfigMCM.bIsAllowed = IsAllowed
	endif
	if (IsClassicMode)
		MarkAndRecallScript.IsClassicMode = IsClassicMode
		ConfigMCM.bIsClassicMode = IsClassicMode
	endif
	if (bCanCityPortal)
		MarkAndRecallScript.bCanCityPortal = bCanCityPortal
		ConfigMCM.bIsClassicMode = bCanCityPortal
	endif
	if (bCheckingNames)
		MarkAndRecallScript.bCheckingNames = bCheckingNames
		ConfigMCM.bIsClassicMode = bCheckingNames
	endif

;/
	bool MENUCheck = (Game.GetFormFromFile(0xE00, "UIExtensions.esp") != None)
	If MENUCheck
		Debug.Trace("Notification: Menu system loaded.", 1)
		MENUExtended = true
	Else
		Debug.Trace("WARNING: Menu system disabled, plugin UIExtensions.esp failed to load.", 1)
		MENUExtended = false
	Endif
/;
	
;	Check for DLC1
	bool DLC1Check = (Game.GetFormFromFile(0x588C, "Dawnguard.esm") != None) ; Checks for DLC1VampireTurnScript Quest
	If DLC1Check
		Debug.Trace("Notification: Dawnguard loaded.", 1)
		DLC1Extended = true
	Else
		DLC1Extended = false
		Debug.Trace("WARNING: Dawnguard not loaded.", 1)
	Endif
	
	bool APNLCheck = (Game.GetFormFromFile(0x824, "SkyUI_SE.esp") != None)
	If APNLCheck
		Debug.Trace("Notification: SkyUI_SE.esp loaded.", 1)
	Else
		Debug.Trace("WARNING: Plugin failed to load SkyUI not found.", 1)
	Endif

	ErrorDetected = false
	if skse.GetVersionRelease() == 0
		self.Error(self.ERR_SKSE_MISSING, "The Skyrim Script Extender (SKSE64) не запущен.")
		return 
	elseIf self.GetType() == 0
		self.Error(self.ERR_SKSE_BROKEN, "SKSE64 скрипты были перезаписаны или неправильно установлены.\nПереустановка SKSE64 может исправить эту проблему.")
		return 
	elseIf skse.GetVersionRelease() < self.MinSKSERelease
		self.Error(self.ERR_SKSE_VERSION_RT, "SKSE64 является устаревшей версией.\n" + "Требуемая версия: " + self.MinSKSEVersion + " или новее\n" + "Обнаруженная версия: " + skse.GetVersion() as String + "." + skse.GetVersionMinor() as String + "." + skse.GetVersionBeta() as String)
		return 
	elseIf skse.GetScriptVersionRelease() < self.MinSKSERelease
		self.Error(self.ERR_SKSE_VERSION_SCPT, "SKSE64 скрипты устарели.\nВы скорее всего забыли установить/обновить эти скрипты, которые поставляются вместе с SKSE64.")
		return 
	endIf
	
	if utility.GetINIInt("iMinMemoryPageSize:Papyrus") <= 0 || utility.GetINIInt("iMaxMemoryPageSize:Papyrus") <= 0 || utility.GetINIInt("iMaxAllocatedMemoryBytes:Papyrus") <= 0
		self.Error(self.ERR_INI_PAPYRUS, "Ваши настройки Papyrus INI являются недействительными. Пожалуйста исправьте их.")
		return 
	endIf
	
	Quest MarkAndRecallVersionCheck = ((GetFormFromFile(0x52FF0, "MarkAndRecall.esp")) as Quest)
	Quest MarkAndRecallObjectivesDisplayedQuest = ((GetFormFromFile(0x52FEF, "MarkAndRecall.esp")) as Quest)
	Quest SKI_ConfigManagerInstance = ((GetFormFromFile(0x802, "SkyUI_SE.esp")) as Quest)
	if(ConfigMCM.OldVersion as String != ConfigMCM.Version as String)
		SKI_ConfigManagerInstance.SetStage(1)
		If(bGetCurrentLanguage() == true)
			MessageBox("Мод: " + self.GetName() + " был обновлён, загрузка настроек.")
			;Show_Notification("Мод: " + self.GetName() + " был обновлён загрузка настроек.", "#00ff00")
		Else
			MessageBox("The mod: " + self.GetName() + " has been updated, loading settings, please wait.")
			;Show_Notification("The mod: " + self.GetName() + " has been updated, loading settings, please wait.", "#00ff00")
		EndIf
		If(bGetCurrentLanguage() == true)
			Show_Notification("Мод: " + self.GetName() + " был обновлён загрузка настроек.", "#00ff00")
		Else
			Show_Notification("The mod: " + self.GetName() + " has been updated, loading settings, please wait.", "#00ff00")
		EndIf
		If(bGetCurrentLanguage() == true)
			Show_Notification("Версия " + self.GetName() + " " + ConfigMCM.Version, "#DAA520")
			DebugNotification("Старая версия " + self.GetName() + " " + ConfigMCM.OldVersion, true , "#00FF00")
		Else
			Show_Notification("Version of " + self.GetName() + " " + ConfigMCM.Version, "#DAA520")
			DebugNotification("Old version of " + self.GetName() + " " + ConfigMCM.OldVersion, true , "#00FF00")
		EndIf
		;LoadOnlyLocNames()
		If(bLoadOnlyLocNames() == true)
			Wait(1)
			MarkAndRecallScript.Set1()
			MarkAndRecallScript.Set2()
			MarkAndRecallScript.Set3()
			MarkAndRecallScript.Set4()
			MarkAndRecallScript.Set5()
			MarkAndRecallScript.Set6()
			MarkAndRecallScript.Set7()
			MarkAndRecallScript.Set8()
			MarkAndRecallScript.Set9()
			MarkAndRecallScript.Set10()
			MarkAndRecallScript.Set11()
			MarkAndRecallScript.Set12()
			MarkAndRecallScript.Set13()
			MarkAndRecallScript.Set14()
			MarkAndRecallScript.Set15()
			MarkAndRecallScript.Set16()
			Wait(3)
			RecallsDisplayed()
		EndIf
		If(bGetCurrentLanguage() == true)
			Show_Notification("Все готово.", "#00ff00")
		Else
			Show_Notification("Everything is ready.", "#00ff00")
		EndIf
		ConfigMCM.OldVersion = ConfigMCM.Version
	Else
	EndIf
	UpdateSettings()
EndFunction

Function UpdateSettings()
	;ConfigMCM.bEnabled = bEnabled
	If bEnabled
		MarkAndRecallScript.IsDebugMode = IsDebugMode
		MarkAndRecallScript.IsAllowed = IsAllowed
		MarkAndRecallScript.IsClassicMode = IsClassicMode
		MarkAndRecallScript.bCanCityPortal = bCanCityPortal
		MarkAndRecallScript.bCheckingNames = bCheckingNames
		;ConfigMCM.bEnabled = bEnabled
		ConfigMCM.bIsAllowed = IsAllowed
		ConfigMCM.bIsClassicMode = IsClassicMode
		ConfigMCM.bIsDebugMode = IsDebugMode
		ConfigMCM.bCanCityPortal = bCanCityPortal
		ConfigMCM.bCheckingNames = bCheckingNames
	EndIf
	if (uninstall)
		Quest MarkAndRecallVersionCheck = ((GetFormFromFile(0x52FF0, "MarkAndRecall.esp")) as Quest)
		Quest MarkAndRecallObjectivesDisplayedQuest = ((GetFormFromFile(0x52FEF, "MarkAndRecall.esp")) as Quest)
		;Quest MarkAndRecallConfigQuest = ((GetFormFromFile(0x23D97, "MarkAndRecall.esp")) as Quest)
		;MarkAndRecallConfigQuest.stop()
		MarkAndRecallVersionCheck.stop()
		MarkAndRecallObjectivesDisplayedQuest.stop()
		Self.stop()
		If(bGetCurrentLanguage() == true)
			Show_Notification("Квест: " + self.GetName() + " Остановлен.", "#FF0000")
		Else
			Show_Notification("Quest: " + self.GetName() + " Stoped.", "#FF0000")
		EndIf
		if (GetPlayer().HasSpell((GetFormFromFile(0x5901, "MarkAndRecall.esp")) as Spell))
			; Forces this actor to unequip the specified spell. The casting source can be:
			; 0 - Left hand
			; 1 - Right hand
			; UnequipSpell(Spell akSpell, int aiSource)
			Form leftHand = GetPlayer().GetEquippedObject(0)
			Form rightHand = GetPlayer().GetEquippedObject(1)
			if (leftHand as Spell != none)
				GetPlayer().UnequipSpell((leftHand as Spell), 0)
			endif
			if (rightHand as Spell != none)
				GetPlayer().UnequipSpell((rightHand as Spell), 1)
			endif
			wait(1)
			GetPlayer().RemoveSpell((GetFormFromFile(0x5901, "MarkAndRecall.esp")) as Spell)
			If(bGetCurrentLanguage() == true)
				Show_Notification("Заклинание: " + (GetFormFromFile(0x5901, "MarkAndRecall.esp")).GetName() + " Удалено.", "#FF0000")
			Else
				Show_Notification("Spell: " + (GetFormFromFile(0x5901, "MarkAndRecall.esp")).GetName() + " Removed.", "#FF0000")
			EndIf
		endif
		uninstallMessage.Show(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
		Quest SKI_ConfigManagerInstance = ((GetFormFromFile(0x802, "SkyUI_SE.esp")) as Quest)
		SKI_ConfigManagerInstance.SetStage(1)
		wait(1)
	Else
		SaveSettings()
	endif
EndFunction

Event OnGameLoad()
	Show_Notification("OnGameLoad.", "#00ff00")
EndEvent

Event OnUpdate()
	DebugNotification("OnUpdate.", true , "#00FF00")
	if (IsDebugMode)
		MarkAndRecallScript.IsDebugMode = IsDebugMode
		ConfigMCM.bIsDebugMode = IsDebugMode
	endif
	if (IsAllowed)
		MarkAndRecallScript.IsAllowed = IsAllowed
		ConfigMCM.bIsAllowed = IsAllowed
	endif
	if (IsClassicMode)
		MarkAndRecallScript.IsClassicMode = IsClassicMode
		ConfigMCM.bIsClassicMode = IsClassicMode
	endif
	if (bCanCityPortal)
		MarkAndRecallScript.bCanCityPortal = bCanCityPortal
		ConfigMCM.bIsClassicMode = bCanCityPortal
	endif
	if (bCheckingNames)
		MarkAndRecallScript.bCheckingNames = bCheckingNames
		ConfigMCM.bIsClassicMode = bCheckingNames
	endif
	SaveSettings()
EndEvent

function Error(Int a_errId, String a_msg)
	MessageBox("Кодовая ошибка " + a_errId as String + "\n\n" + a_msg)
	ErrorDetected = true
endFunction

String Function DebugNotification(String S, bool c, String color = "")
	If(IsDebugMode == true)
		if (c)
			((Self as Form) as UILIB_1).ShowNotification(S, color)
		Else
			Notification(S)
		endif
	EndIf
EndFunction

Function Show_Notification_Icon(String S1, String S2, int i, String S3)
{String asMessage, String asIconPath, Int aiIconFrame = 0, String asColor = "#FFFFFF"}
	return ((Self as Form) as UILIB_1).ShowNotificationIcon(S1, S2, i, S3)
EndFunction

Function Show_Notification(String S1, String S2)
{String asMessage, String asColor = "#FFFFFF"}
	return ((Self as Form) as UILIB_1).ShowNotification(S1, S2)
EndFunction

;/
Int Function ShowList(String asTitle = "", String[] asOptions, Int aiStartIndex, Int aiDefaultIndex)
	If(bMenuOpen)
		Return -1
	EndIf
	bMenuOpen = True
	iInput = -1
	sTitle = asTitle
	sOptions = asOptions
	iStartIndex = aiStartIndex
	iDefaultIndex = aiDefaultIndex
	ListMenu_Open(Self)
	While(bMenuOpen)
		Utility.WaitMenuMode(0.1)
	EndWhile
	ListMenu_Release(Self)
	Return iInput
EndFunction

	iIndex = 1
	while iIndex <= 16;self.GetNumAliases()
		iIndex += 1
	endWhile

Function ShowMarkAndRecallMenu()
	String[] sOptions = new String[5]
	sOptions = new String[5]
	sOptions[0] = "First"
	sOptions[1] = "Second"
	sOptions[2] = "Third"
	sOptions[3] = "Fourth"
	sOptions[4] = "Fifth"
	UILIB_1.ListMenu_Open(Self)
EndFunction
Int Property iMenuItemIndex = 5 Auto  
/;
Function ShowMarkAndRecallMenu()
	String Title
	String MenuItem1
	String MenuItem2
	String MenuItem3
	String MenuItem4
	String sCancel
	If(bGetCurrentLanguage() == true)
		Title = "Меню Пометки и Возврата"
		MenuItem1 = "Пометка"
		MenuItem2 = "Возврат"
		MenuItem3 = "Проверка имен"
		MenuItem4 = "Городской портал"
		sCancel = "Отмена"
	Else
		Title = "Mark & Recall Menu"
		MenuItem1 = "Mark"
		MenuItem2 = "Recall"
		MenuItem3 = "Name verification"
		MenuItem4 = "City Portal"
		sCancel = "Cancel"
	EndIf
	String[] sOptions = new String[5]
		sOptions[0] = MenuItem1
		sOptions[1] = MenuItem2
		sOptions[2] = MenuItem3
		sOptions[3] = MenuItem4
		sOptions[4] = sCancel
	Int iInput = ((Self as Form) as UILIB_1).ShowList(Title, sOptions, 4, 4)
EndFunction

Function ShowMarkMenu()
	String[] sOptions = new String[17]
	String Title
	String sCancel
	String RecallName
	String CellName
	int iIndex
	sNames = new String[16]
	aORef = new ReferenceAlias[16]
	sNames[1] = Recall1Name
	sNames[2] = Recall2Name
	sNames[3] = Recall3Name
	sNames[4] = Recall4Name
	sNames[5] = Recall5Name
	sNames[6] = Recall6Name
	sNames[7] = Recall7Name
	sNames[8] = Recall8Name
	sNames[9] = Recall9Name
	sNames[10] = Recall10Name
	sNames[11] = Recall11Name
	sNames[12] = Recall12Name
	sNames[13] = Recall13Name
	sNames[14] = Recall14Name
	sNames[15] = Recall15Name
	sNames[16] = Recall16Name
	aORef[1] = Recall1
	aORef[2] = Recall2
	aORef[3] = Recall3
	aORef[4] = Recall4
	aORef[5] = Recall5
	aORef[6] = Recall6
	aORef[7] = Recall7
	aORef[8] = Recall8
	aORef[9] = Recall9
	aORef[10] = Recall10
	aORef[11] = Recall11
	aORef[12] = Recall12
	aORef[13] = Recall13
	aORef[14] = Recall14
	aORef[15] = Recall15
	aORef[16] = Recall16
	If(bGetCurrentLanguage() == true)
		Title = "Меню Пометки"
		RecallName = "Пусто"
		sCancel = "Отмена"
	Else
		Title = "Mark Menu"
		RecallName = "Empty"
		sCancel = "Cancel"
	EndIf
	iIndex = 1
	while iIndex <= 16;self.GetNumAliases()
		if (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 0)
			sCN[iIndex] = aORef[iIndex].GetRef().GetCurrentLocation().GetName()
			;DebugNotification("GetCurrentLocation: " + " " + iIndex + " " + aORef[iIndex].GetRef().GetCurrentLocation().GetName())
		ElseIf (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 1)
			sCN[iIndex] = aORef[iIndex].GetRef().GetParentCell().GetName()
			;DebugNotification("GetParentCell: " + " " + iIndex + " " + aORef[iIndex].GetRef().GetParentCell().GetName())
		EndIf
		If (GetCellNameIdentical(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex]) == false)
			sNames[iIndex] = GetCellName(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex])
			if sNames[iIndex] == "Mark And Recall Markers Cell"
				sNames[iIndex] = RecallName
				sOptions[0] = sCancel
				sOptions[1] = "Mark " + iIndex + " - " + sNames[1]
				sOptions[2] = ("Mark " + iIndex + " - " + sNames[2])
				sOptions[3] = ("Mark " + iIndex + " - " + sNames[3])
				sOptions[4] = ("Mark " + iIndex + " - " + sNames[4])
				sOptions[5] = ("Mark " + iIndex + " - " + sNames[5])
				sOptions[6] = ("Mark " + iIndex + " - " + sNames[6])
				sOptions[7] = ("Mark " + iIndex + " - " + sNames[7])
				sOptions[8] = ("Mark " + iIndex + " - " + sNames[8])
				sOptions[9] = ("Mark " + iIndex + " - " + sNames[9])
				sOptions[10] = ("Mark " + iIndex + " - " + sNames[10])
				sOptions[11] = ("Mark " + iIndex + " - " + sNames[11])
				sOptions[12] = ("Mark " + iIndex + " - " + sNames[12])
				sOptions[13] = ("Mark " + iIndex + " - " + sNames[13])
				sOptions[14] = ("Mark " + iIndex + " - " + sNames[14])
				sOptions[15] = ("Mark " + iIndex + " - " + sNames[15])
				sOptions[16] = ("Mark " + iIndex + " - " + sNames[16])
				DebugNotification("sNames: " + " " + iIndex + " " + sNames[iIndex], false)
			endif
		endif
		iIndex += 1
	endWhile
	Int iInput = ((Self as Form) as UILIB_1).ShowList(Title, sOptions, 0, 0)
EndFunction

Function ShowRecallMenu()
	String[] sOptions = new String[16]
	String Title
	String RecallName
	String CellName
	int iIndex
	sNames = new String[16]
	aORef = new ReferenceAlias[16]
	sNames[1] = Recall1Name
	sNames[2] = Recall2Name
	sNames[3] = Recall3Name
	sNames[4] = Recall4Name
	sNames[5] = Recall5Name
	sNames[6] = Recall6Name
	sNames[7] = Recall7Name
	sNames[8] = Recall8Name
	sNames[9] = Recall9Name
	sNames[10] = Recall10Name
	sNames[11] = Recall11Name
	sNames[12] = Recall12Name
	sNames[13] = Recall13Name
	sNames[14] = Recall14Name
	sNames[15] = Recall15Name
	sNames[16] = Recall16Name
	aORef[1] = Recall1
	aORef[2] = Recall2
	aORef[3] = Recall3
	aORef[4] = Recall4
	aORef[5] = Recall5
	aORef[6] = Recall6
	aORef[7] = Recall7
	aORef[8] = Recall8
	aORef[9] = Recall9
	aORef[10] = Recall10
	aORef[11] = Recall11
	aORef[12] = Recall12
	aORef[13] = Recall13
	aORef[14] = Recall14
	aORef[15] = Recall15
	aORef[16] = Recall16
	iIndex = 1
	while iIndex <= 16;self.GetNumAliases()
		If(bGetCurrentLanguage() == true)
			RecallName = "Пусто"
		Else
			RecallName = "Empty"
		EndIf
		if (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 0)
			sCN[iIndex] = aORef[iIndex].GetRef().GetCurrentLocation().GetName()
			;DebugNotification("GetCurrentLocation: " + " " + iIndex + " " + aORef[iIndex].GetRef().GetCurrentLocation().GetName())
		ElseIf (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 1)
			sCN[iIndex] = aORef[iIndex].GetRef().GetParentCell().GetName()
			;DebugNotification("GetParentCell: " + " " + iIndex + " " + aORef[iIndex].GetRef().GetParentCell().GetName())
		EndIf
		If (GetCellNameIdentical(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex]) == false)
			sNames[iIndex] = GetCellName(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex])
			if sNames[iIndex] == "Mark And Recall Markers Cell"
				sNames[iIndex] = RecallName
				DebugNotification("sNames: " + " " + iIndex + " " + sNames[iIndex], false)
			endif
		endif
		DebugNotification("sNames: " + " " + iIndex + " " + sNames[iIndex], false)
		sOptions[0] = sNames[1]
		sOptions[1] = sNames[2]
		sOptions[2] = sNames[3]
		sOptions[3] = sNames[4]
		sOptions[4] = sNames[5]
		sOptions[5] = sNames[6]
		sOptions[6] = sNames[7]
		sOptions[7] = sNames[8]
		sOptions[8] = sNames[9]
		sOptions[9] = sNames[10]
		sOptions[10] = sNames[11]
		sOptions[11] = sNames[12]
		sOptions[12] = sNames[13]
		sOptions[13] = sNames[14]
		sOptions[14] = sNames[15]
		sOptions[15] = sNames[16]
		iIndex += 1
	endWhile
	If(bGetCurrentLanguage() == true)
		Title = "Меню Возврата"
	Else
		Title = "Recall Menu"
	EndIf
	Int iInput = ((Self as Form) as UILIB_1).ShowList(Title, sOptions, 0, 0)
EndFunction

bool function bGetCurrentLanguage()
	If(GetINIString("sLanguage:General") == "")
		Show_Notification("Your language is not recognized, notifications will be disabled.", "#FF0000")
	ElseIf(GetINIString("sLanguage:General") == "ENGLISH")
		return false
	ElseIf(GetINIString("sLanguage:General") == "RUSSIAN")
		return true
	EndIf
endFunction

String function GetCurrentLanguage()
	If(GetINIString("sLanguage:General") == "")
		Notification("Your language is not recognized, notifications will be disabled.")
	Else
		return GetINIString("sLanguage:General")
	EndIf
endFunction

string function FormatBoolean(bool b, String S1, String S2)
	if (b)
		return S1
	endIf
	return S2
endFunction

string function FormatBooleanColor(bool b, String S1, String S2, bool c)
	if (b)
		if (c)
			((Self as Form) as UILIB_1).ShowNotification(S1, "#00FF00")
		Else
			return S1
		endif
	Else
		if (c)
			((Self as Form) as UILIB_1).ShowNotification(S2, "#FF0000")
		Else
			return S2
		endif
	endif
endFunction

function ToggleMapMarker(objectreference objMarked)

	Trace("ToggleMapMarker, objMarked.GetDisplayName():" + objMarked.GetDisplayName(), 0)
	if objMarked
		ReferenceAlias refAlias
		Int iIndex = 1
		while iIndex < 16;self.GetNumAliases()
			If ((refAlias.GetRef().GetParentCell() != MarkAndRecallScript.IgnoreCell) && (refAlias.GetRef() != GetPlayer()))
				refAlias = self.GetNthAlias(iIndex) as ReferenceAlias
				if refAlias.GetRef() == objMarked
					refAlias.Clear()
					self.SetObjectiveDisplayed(iIndex, false, true)
					If(bGetCurrentLanguage() == true)
						Show_Notification("Маркер на карте удален.", "#FF0000")
					Else
						Show_Notification("The marker on the map has been removed.", "#FF0000")
					EndIf
					return 
				endIf
			endIf
			iIndex += 1
		endWhile
		iIndex = 1
		while iIndex < 16;self.GetNumAliases()
			If ((refAlias.GetRef().GetParentCell() != MarkAndRecallScript.IgnoreCell) && (refAlias.GetRef() != GetPlayer()))
				refAlias = self.GetNthAlias(iIndex) as ReferenceAlias
				if refAlias.GetRef() == none
					refAlias.ForceRefTo(objMarked)
					If (refAlias.GetRef().GetParentCell() != MarkAndRecallScript.IgnoreCell)
						self.SetObjectiveDisplayed(iIndex, true, true)
					EndIf
					If(bGetCurrentLanguage() == true)
						Show_Notification("Маркер добавлен на карту.", "#00FF00")
					Else
						Show_Notification("Marker added to the map.", "#00FF00")
					EndIf
					return 
				endIf
			endIf
			iIndex += 1
		endWhile
		If(bGetCurrentLanguage() == true)
			Show_Notification("Достигнуто максимальное количество маркеров. Удалите маркеры.", "#FF0000")
		Else
			Show_Notification("The maximum number of markers has been reached. Remove the markers.", "#FF0000")
		EndIf
	endIf
endFunction

bool Function IsMarkerNearPlayer(ObjectReference O)
	Actor player = GetPlayer()
	Cell targetCell = O.GetParentCell()
	Cell playerCell = player.GetParentCell()
	
	if (targetCell != playerCell)
		return false
	else
		if (player.GetDistance(O) >= Distance)
			; pretty darned far away -- safe
			return false
		else
			; too close for comfort
			return true
		endif
	endif
endFunction

Function IsIdentical(String S1, String S2)
	String Identical = "Совпадает "
	String NotIdentical = "Не Совпадает "
	String Empty = " is Empty "
	If(S1 == S2)
		If(S1 == "")
			notification(Identical + " " + Empty)
		else
			notification(Identical)
		Endif
	else
			notification(NotIdentical)
	EndIf
EndFunction

bool Function bIsIdentical(String S1, String S2)
	If(S1 == S2)
		If(S1 == "")
			return false
		else
			return true
		Endif
	else
		return false
	EndIf
EndFunction

Bool Function GetCellNameIdenticalInvert(ObjectReference O, String S1, String S2)
	String CellName
	String WorldSpaceName
	If ((S1 == S2) && (S2 != ""))
		DebugNotification("True", false)
		return true
	ElseIf (S1 != S2)
		If ((S2 == "") && (S1 != ""))
			DebugNotification("True (S2 == Empty) && (S1 != Empty)", false)
			return true
		ElseIf ((S2 != "") && (S1 == ""))
			If ((O.GetCurrentLocation().GetName() == "") && (O.GetParentCell().GetName() == ""))
				Int xcell = math.floor(O.getpositionX() / 4096 as Float)
				Int ycell = math.floor(O.getpositionY() / 4096 as Float)
				Int zcell = math.floor(O.getpositionZ())
				If(bGetCurrentLanguage() == true)
					WorldSpaceName = "Тамриэль"
				Else
					WorldSpaceName = "Tamriel"
				EndIf
				If (S2 == (WorldSpaceName + " " + xcell as String + " , " + ycell as String)); Скайрим
					DebugNotification("True Tamriel", false)
					return true
				Else
					DebugNotification("False Tamriel", false)
					return false
				EndIf
			EndIf
			If(bGetCurrentLanguage() == true)
				CellName = "Пусто"
			Else
				CellName = "Empty"
			EndIf
		ElseIf ((S1 == "Mark And Recall Markers Cell") && (S2 == CellName))
			DebugNotification("True - Ignore Cell", false)
			return true
		Endif
		DebugNotification("False - (S1 != S2)", false)
;		Notification("GetWorldSpaceName: " + O.GetWorldSpace().GetName())
		return false
	ElseIf (S2 == "")
		DebugNotification("True (S2 == Empty)", false)
		return true
	EndIf
EndFunction

Bool Function GetCellNameIdentical(ObjectReference O, String S1, String S2)
	String CellName
	String LocationName
	String WorldSpaceName
	If ((S1 == S2) && (S2 != ""))
		return true
	ElseIf (S1 != S2)
		If(bGetCurrentLanguage() == true)
			LocationName = "(Снаружи)"
		Else
			LocationName = "(Outside)"
		EndIf
		If ((S2 == (S1 + " " + LocationName)) && (S1 != ""))
			DebugNotification("True - (S2 == (S1 + ( Outside)))", false)
			return true
		ElseIf ((S2 == "") && (S1 != ""))
			DebugNotification("False - (S2 == Empty) && (S1 != Empty)", false)
			return false
		ElseIf ((S2 != "") && (S1 == ""))
			If ((O.GetCurrentLocation().GetName() == "") && (O.GetParentCell().GetName() == ""))
;				Notification("GetWorldSpaceName: " + O.GetWorldSpace().GetName())
				Int xcell = math.floor(O.getpositionX() / 4096 as Float)
				Int ycell = math.floor(O.getpositionY() / 4096 as Float)
				Int zcell = math.floor(O.getpositionZ())
				If(bGetCurrentLanguage() == true)
					WorldSpaceName = "Тамриэль"
				Else
					WorldSpaceName = "Tamriel"
				EndIf
				If (S2 == (WorldSpaceName + " " + xcell as String + " , " + ycell as String)); Скайрим
					DebugNotification("True Tamriel", false)
					return true
				Else
					DebugNotification("False Tamriel", false)
					return false
				EndIf
			EndIf
			If(bGetCurrentLanguage() == true)
				CellName = "Пусто"
			Else
				CellName = "Empty"
			EndIf
		ElseIf ((S1 == "Mark And Recall Markers Cell") && (S2 == CellName))
			DebugNotification("True - Ignore Cell", false)
			return true
		Endif
		DebugNotification("False - (S1 != S2)", false)
		return false
	ElseIf (S2 == "")
		DebugNotification("False - (S2 == Empty)", false)
		return false
	ElseIf ((S1 == "") && (S2 == ""))
		DebugNotification("False - Strings == Empty", false)
		return false
	EndIf
EndFunction

String Function GetCellName(ObjectReference O, String S1, String S2)
	String CellName
	String LocationName
	String WorldSpaceName
	if (O.GetParentCell().IsInterior() == 0)
		If (O.GetCurrentLocation().GetName() != "")
			;DebugNotification("True")
			If(bGetCurrentLanguage() == true)
				LocationName = "(Снаружи)"
			Else
				LocationName = "(Outside)"
			EndIf
			;DebugNotification(LocationName)
			return (O.GetCurrentLocation().GetName() + " " + LocationName)
		ElseIf ((O.GetCurrentLocation().GetName() == "") && (O.GetParentCell().GetName() == ""))
			Int xcell = math.floor(O.getpositionX() / 4096 as Float)
			Int ycell = math.floor(O.getpositionY() / 4096 as Float)
			Int zcell = math.floor(O.getpositionZ())
			If(bGetCurrentLanguage() == true)
				WorldSpaceName = "Тамриэль"
			Else
				WorldSpaceName = "Tamriel"
			EndIf
			;DebugNotification(WorldSpaceName)
			return (WorldSpaceName + " " + xcell as String + " , " + ycell as String); Скайрим
		Endif
	ElseIf (O.GetParentCell().IsInterior() == 1)
		If (O.GetParentCell().GetName() != "")
			If(bGetCurrentLanguage() == true)
				CellName = "Пусто"
			Else
				CellName = "Empty"
			EndIf
			If ((S1 == "Mark And Recall Markers Cell") && (S2 == CellName))
			Else
				;DebugNotification("Interior")
				return (O.GetParentCell().GetName())
			Endif
		EndIf
	EndIf
EndFunction

String Function GetCellName1(ObjectReference O, String S1, String S2)
	If ((S1 == S2) && (S2 != ""))
	ElseIf ((S1 == "") && (O.GetCurrentLocation().GetName() != ""))
		if ((O.GetParentCell().IsInterior() == 0) && (S1 == S2))
			return (O.GetCurrentLocation().GetName() + " (Снаружи)")
		Endif
	ElseIf ((S1 == "") && (O.GetCurrentLocation().GetName() == "") && (O.GetParentCell().GetName() == ""))
		Int xcell = math.floor(O.getpositionX() / 4096 as Float)
		Int ycell = math.floor(O.getpositionY() / 4096 as Float)
		Int zcell = math.floor(O.getpositionZ())
;		Notification("Check 4: " + O.GetWorldSpace().GetName() + " " + xcell as String + " , " + ycell as String)
		return ("Тамриэль " + xcell as String + " , " + ycell as String); Скайрим
	ElseIf (S1 != S2)
;		Notification("Check: Else")
		If ((S2 == "") && (S1 != ""))
			if (O.GetParentCell().IsInterior() == 0)
				If (O.GetCurrentLocation().GetName() != "")
;					Notification("Check 2: " + O.GetCurrentLocation().GetName() + " (Outside)")
					return (O.GetCurrentLocation().GetName() + " (Снаружи)")
				Endif
			ElseIf (O.GetParentCell().IsInterior() == 1)
				If (O.GetParentCell().GetName() != "")
;					Notification("Check: " + O.GetParentCell().GetName())
					return (O.GetParentCell().GetName())
				Endif
			Endif
		ElseIf ((S1 != "Mark And Recall Markers Cell") && (S2 != "Пусто"))
			If (O.GetParentCell().GetName() != "")
;				Notification("Check 3: " + O.GetParentCell().GetName())
				return (O.GetParentCell().GetName())
			Endif
		ElseIf ((S1 == "Mark And Recall Markers Cell") && (S2 != "Пусто"))
			If (O.GetParentCell().GetName() != "")
				return (O.GetParentCell().GetName())
			Endif
		ElseIf ((S1 == "Mark And Recall Markers Cell") && (S2 == "Пусто"))
		Endif
	EndIf
EndFunction
;	messagebox("Player is in cell " + xcell as String + "," + ycell as String + " at elevation " + zcell as String)

function LoadSettingsAtStart()

	Bool ValidatePapyrusUtil = papyrusutil.GetVersion() > 31
	if ValidatePapyrusUtil
		if jsonutil.JsonExists(settings_path)
			;self.LoadUserSettingsPapyrus()
			If(self.LoadUserSettingsPapyrus() == true)
				If(bGetCurrentLanguage() == true)
					Show_Notification("Загрузка настроек завершена.", "#00FF00")
				Else
					Show_Notification("The settings loading is complete.", "#00FF00")
				EndIf
			EndIf
			return 
		endIf
	endIf
endFunction

function SaveSettings()
	Bool ValidatePapyrusUtil = papyrusutil.GetVersion() > 31
	if ValidatePapyrusUtil
		if jsonutil.JsonExists(settings_path)
			self.SaveUserSettingsPapyrus()
			If(bGetCurrentLanguage() == true)
				if(self.SaveUserSettingsPapyrus() == true)
					Show_Notification("Сохранение настроек завершено.", "#00FF00")
				EndIf
			Else
				if(self.SaveUserSettingsPapyrus() == true)
					Show_Notification("Saving the settings is complete.", "#00FF00")
				EndIf
				
				;Show_Notification(FormatBoolean(SaveUserSettingsPapyrus(), "Сохранение завершено.", "Сохранение: Что-то пошло не так..."), "#00FF00")
				;FormatBooleanColor(SaveUserSettingsPapyrus(), "Saving is completed.", "Saving: Something went wrong...", true)
				;Show_Notification(FormatBoolean(SaveUserSettingsPapyrus(), "Saving is completed.", "Saving: Something went wrong..."), "#00FF00")
			EndIf
			return 
		endIf
	endIf
endFunction

bool function bLoadOnlyLocNames()

	Bool ValidatePapyrusUtil = papyrusutil.GetVersion() > 31
	if ValidatePapyrusUtil
		if jsonutil.JsonExists(settings_path)
			If(self.LoadOnlyLocNamesPapyrus() == true)
				return true
			Else
				return false
			EndIf
		endIf
	endIf
endFunction

function LoadOnlyLocNames()

	Bool ValidatePapyrusUtil = papyrusutil.GetVersion() > 31
	if ValidatePapyrusUtil
		if jsonutil.JsonExists(settings_path)
			self.LoadOnlyLocNamesPapyrus()
			return 
		endIf
	endIf
endFunction

function LoadOnlyBoolean()
	Bool ValidatePapyrusUtil = papyrusutil.GetVersion() > 31
	if ValidatePapyrusUtil
		if jsonutil.JsonExists(settings_path)
			self.LoadOnlyBooleanPapyrus()
			return 
		endIf
	endIf
endFunction

function LoadOnlyAxisAndCellName()
	Bool ValidatePapyrusUtil = papyrusutil.GetVersion() > 31
	if ValidatePapyrusUtil
		if jsonutil.JsonExists(settings_path)
			self.LoadOnlyAxisAndCellNamePapyrus()
			return 
		endIf
	endIf
endFunction

function LoadOnlySettings()
	Bool ValidatePapyrusUtil = papyrusutil.GetVersion() > 31
	if ValidatePapyrusUtil
		if jsonutil.JsonExists(settings_path)
			self.LoadOnlySettingsPapyrus()
			return 
		endIf
	endIf
endFunction

Bool function LoadOnlySettingsPapyrus()
	if !jsonutil.IsGood(settings_path)
		return false
	endIf
	;====================================
	if (jsonutil.GetPathStringValue(settings_path, "OldVersion", ConfigMCM.OldVersion) != "")
		ConfigMCM.OldVersion = jsonutil.GetPathStringValue(settings_path, "OldVersion", ConfigMCM.OldVersion)
	endif
	;====================================
	bEnabled = jsonutil.GetPathIntValue(settings_path, "bEnabled", bEnabled as int)
	IsDebugMode = jsonutil.GetPathIntValue(settings_path, "IsDebugMode", IsDebugMode as int)
	IsAllowed = jsonutil.GetPathIntValue(settings_path, "IsAllowed", IsAllowed as int)
	IsClassicMode = jsonutil.GetPathIntValue(settings_path, "IsClassicMode", IsClassicMode as int)
	bCanCityPortal = jsonutil.GetPathIntValue(settings_path, "CanCityPortal", bCanCityPortal as int)
	bCheckingNames = jsonutil.GetPathIntValue(settings_path, "CheckingNames", bCheckingNames as int)
	
	return true
endFunction

Bool function LoadOnlyAxisAndCellNamePapyrus()
	if !jsonutil.IsGood(settings_path)
		return false
	endIf
	;====================================
	If(IsAllowed == true)
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_1", _Cell_Name_1) != "")
			_Cell_Name_1 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_1", _Cell_Name_1)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_2", _Cell_Name_2) != "")
			_Cell_Name_2 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_2", _Cell_Name_2)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_3", _Cell_Name_3) != "")
			_Cell_Name_3 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_3", _Cell_Name_3)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_4", _Cell_Name_4) != "")
			_Cell_Name_4 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_4", _Cell_Name_4)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_5", _Cell_Name_5) != "")
			_Cell_Name_5 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_5", _Cell_Name_5)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_6", _Cell_Name_6) != "")
			_Cell_Name_6 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_6", _Cell_Name_6)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_7", _Cell_Name_7) != "")
			_Cell_Name_7 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_7", _Cell_Name_7)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_8", _Cell_Name_8) != "")
			_Cell_Name_8 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_8", _Cell_Name_8)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_9", _Cell_Name_9) != "")
			_Cell_Name_9 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_9", _Cell_Name_9)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_10", _Cell_Name_10) != "")
			_Cell_Name_10 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_10", _Cell_Name_10)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_11", _Cell_Name_11) != "")
			_Cell_Name_11 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_11", _Cell_Name_11)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_12", _Cell_Name_12) != "")
			_Cell_Name_12 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_12", _Cell_Name_12)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_13", _Cell_Name_13) != "")
			_Cell_Name_13 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_13", _Cell_Name_13)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_14", _Cell_Name_14) != "")
			_Cell_Name_14 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_14", _Cell_Name_14)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_15", _Cell_Name_15) != "")
			_Cell_Name_15 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_15", _Cell_Name_15)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_16", _Cell_Name_16) != "")
			_Cell_Name_16 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_16", _Cell_Name_16)
		endif
		;====================================
		_fX_1 = jsonutil.GetPathFloatValue(settings_path, "_fX_1", _fX_1)
		_fY_1 = jsonutil.GetPathFloatValue(settings_path, "_fY_1", _fY_1)
		_fZ_1 = jsonutil.GetPathFloatValue(settings_path, "_fZ_1", _fZ_1)
		_fX_2 = jsonutil.GetPathFloatValue(settings_path, "_fX_2", _fX_2)
		_fY_2 = jsonutil.GetPathFloatValue(settings_path, "_fY_2", _fY_2)
		_fZ_2 = jsonutil.GetPathFloatValue(settings_path, "_fZ_2", _fZ_2)
		_fX_3 = jsonutil.GetPathFloatValue(settings_path, "_fX_3", _fX_3)
		_fY_3 = jsonutil.GetPathFloatValue(settings_path, "_fY_3", _fY_3)
		_fZ_3 = jsonutil.GetPathFloatValue(settings_path, "_fZ_3", _fZ_3)
		_fX_4 = jsonutil.GetPathFloatValue(settings_path, "_fX_4", _fX_4)
		_fY_4 = jsonutil.GetPathFloatValue(settings_path, "_fY_4", _fY_4)
		_fZ_4 = jsonutil.GetPathFloatValue(settings_path, "_fZ_4", _fZ_4)
		_fX_5 = jsonutil.GetPathFloatValue(settings_path, "_fX_5", _fX_5)
		_fY_5 = jsonutil.GetPathFloatValue(settings_path, "_fY_5", _fY_5)
		_fZ_5 = jsonutil.GetPathFloatValue(settings_path, "_fZ_5", _fZ_5)
		_fX_6 = jsonutil.GetPathFloatValue(settings_path, "_fX_6", _fX_6)
		_fY_6 = jsonutil.GetPathFloatValue(settings_path, "_fY_6", _fY_6)
		_fZ_6 = jsonutil.GetPathFloatValue(settings_path, "_fZ_6", _fZ_6)
		_fX_7 = jsonutil.GetPathFloatValue(settings_path, "_fX_7", _fX_7)
		_fY_7 = jsonutil.GetPathFloatValue(settings_path, "_fY_7", _fY_7)
		_fZ_7 = jsonutil.GetPathFloatValue(settings_path, "_fZ_7", _fZ_7)
		_fX_8 = jsonutil.GetPathFloatValue(settings_path, "_fX_8", _fX_8)
		_fY_8 = jsonutil.GetPathFloatValue(settings_path, "_fY_8", _fY_8)
		_fZ_8 = jsonutil.GetPathFloatValue(settings_path, "_fZ_8", _fZ_8)
		_fX_9 = jsonutil.GetPathFloatValue(settings_path, "_fX_9", _fX_9)
		_fY_9 = jsonutil.GetPathFloatValue(settings_path, "_fY_9", _fY_9)
		_fZ_9 = jsonutil.GetPathFloatValue(settings_path, "_fZ_9", _fZ_9)
		_fX_10 = jsonutil.GetPathFloatValue(settings_path, "_fX_10", _fX_10)
		_fY_10 = jsonutil.GetPathFloatValue(settings_path, "_fY_10", _fY_10)
		_fZ_10 = jsonutil.GetPathFloatValue(settings_path, "_fZ_10", _fZ_10)
		_fX_11 = jsonutil.GetPathFloatValue(settings_path, "_fX_11", _fX_11)
		_fY_11 = jsonutil.GetPathFloatValue(settings_path, "_fY_11", _fY_11)
		_fZ_11 = jsonutil.GetPathFloatValue(settings_path, "_fZ_11", _fZ_11)
		_fX_12 = jsonutil.GetPathFloatValue(settings_path, "_fX_12", _fX_12)
		_fY_12 = jsonutil.GetPathFloatValue(settings_path, "_fY_12", _fY_12)
		_fZ_12 = jsonutil.GetPathFloatValue(settings_path, "_fZ_12", _fZ_12)
		_fX_13 = jsonutil.GetPathFloatValue(settings_path, "_fX_13", _fX_13)
		_fY_13 = jsonutil.GetPathFloatValue(settings_path, "_fY_13", _fY_13)
		_fZ_13 = jsonutil.GetPathFloatValue(settings_path, "_fZ_13", _fZ_13)
		_fX_14 = jsonutil.GetPathFloatValue(settings_path, "_fX_14", _fX_14)
		_fY_14 = jsonutil.GetPathFloatValue(settings_path, "_fY_14", _fY_14)
		_fZ_14 = jsonutil.GetPathFloatValue(settings_path, "_fZ_14", _fZ_14)
		_fX_15 = jsonutil.GetPathFloatValue(settings_path, "_fX_15", _fX_15)
		_fY_15 = jsonutil.GetPathFloatValue(settings_path, "_fY_15", _fY_15)
		_fZ_15 = jsonutil.GetPathFloatValue(settings_path, "_fZ_15", _fZ_15)
		_fX_16 = jsonutil.GetPathFloatValue(settings_path, "_fX_16", _fX_16)
		_fY_16 = jsonutil.GetPathFloatValue(settings_path, "_fY_16", _fY_16)
		_fZ_16 = jsonutil.GetPathFloatValue(settings_path, "_fZ_16", _fZ_16)
	;====================================
		if _Cell_Name_1 != ""
			(GetFormFromFile(0x1B118, "MarkAndRecall.esp")).SetName(_Cell_Name_1)
		endif
		if _Cell_Name_2 != ""
			(GetFormFromFile(0x1B12E, "MarkAndRecall.esp")).SetName(_Cell_Name_2)
		endif
		if _Cell_Name_3 != ""
			(GetFormFromFile(0x1B12F, "MarkAndRecall.esp")).SetName(_Cell_Name_3)
		endif
		if _Cell_Name_4 != ""
			(GetFormFromFile(0x1B130, "MarkAndRecall.esp")).SetName(_Cell_Name_4)
		endif
		if _Cell_Name_5 != ""
			(GetFormFromFile(0x1B131, "MarkAndRecall.esp")).SetName(_Cell_Name_5)
		endif
		if _Cell_Name_6 != ""
			(GetFormFromFile(0x1B132, "MarkAndRecall.esp")).SetName(_Cell_Name_6)
		endif
		if _Cell_Name_7 != ""
			(GetFormFromFile(0x1B133, "MarkAndRecall.esp")).SetName(_Cell_Name_7)
		endif
		if _Cell_Name_8 != ""
			(GetFormFromFile(0x1B134, "MarkAndRecall.esp")).SetName(_Cell_Name_8)
		endif
		if _Cell_Name_9 != ""
			(GetFormFromFile(0x1B135, "MarkAndRecall.esp")).SetName(_Cell_Name_9)
		endif
		if _Cell_Name_10 != ""
			(GetFormFromFile(0x1B136, "MarkAndRecall.esp")).SetName(_Cell_Name_10)
		endif
		if _Cell_Name_11 != ""
			(GetFormFromFile(0x1B137, "MarkAndRecall.esp")).SetName(_Cell_Name_11)
		endif
		if _Cell_Name_12 != ""
			(GetFormFromFile(0x1B138, "MarkAndRecall.esp")).SetName(_Cell_Name_12)
		endif
		if _Cell_Name_13 != ""
			(GetFormFromFile(0x1B139, "MarkAndRecall.esp")).SetName(_Cell_Name_13)
		endif
		if _Cell_Name_14 != ""
			(GetFormFromFile(0x1B13A, "MarkAndRecall.esp")).SetName(_Cell_Name_14)
		endif
		if _Cell_Name_15 != ""
			(GetFormFromFile(0x1B13B, "MarkAndRecall.esp")).SetName(_Cell_Name_15)
		endif
		if _Cell_Name_16 != ""
			(GetFormFromFile(0x1B13C, "MarkAndRecall.esp")).SetName(_Cell_Name_16)
		endif
		;====================================
		if (_fX_1) != ""
			(GetFormFromFile(0x1B0FD, "MarkAndRecall.esp")).SetName(_fX_1 as float)
		endif
		if (_fY_1) != ""
			(GetFormFromFile(0x1B0FE, "MarkAndRecall.esp")).SetName(_fY_1 as float)
		endif
		if (_fZ_1) != ""
			(GetFormFromFile(0x1B0FF, "MarkAndRecall.esp")).SetName(_fZ_1 as float)
		endif
		if (_fX_2) != ""
			(GetFormFromFile(0x1B100, "MarkAndRecall.esp")).SetName(_fX_2 as float)
		endif
		if (_fY_2) != ""
			(GetFormFromFile(0x1B101, "MarkAndRecall.esp")).SetName(_fY_2 as float)
		endif
		if (_fZ_2) != ""
			(GetFormFromFile(0x1B102, "MarkAndRecall.esp")).SetName(_fZ_2 as float)
		endif
		if (_fX_3) != ""
			(GetFormFromFile(0x1B103, "MarkAndRecall.esp")).SetName(_fX_3 as float)
		endif
		if (_fY_3) != ""
			(GetFormFromFile(0x1B104, "MarkAndRecall.esp")).SetName(_fY_3 as float)
		endif
		if (_fZ_3) != ""
			(GetFormFromFile(0x1B105, "MarkAndRecall.esp")).SetName(_fZ_3 as float)
		endif
		if (_fX_4) != ""
			(GetFormFromFile(0x1B106, "MarkAndRecall.esp")).SetName(_fX_4 as float)
		endif
		if (_fY_4) != ""
			(GetFormFromFile(0x1B107, "MarkAndRecall.esp")).SetName(_fY_4 as float)
		endif
		if (_fZ_4) != ""
			(GetFormFromFile(0x1B108, "MarkAndRecall.esp")).SetName(_fZ_4 as float)
		endif
		if (_fX_5) != ""
			(GetFormFromFile(0x1B109, "MarkAndRecall.esp")).SetName(_fX_5 as float)
		endif
		if (_fY_5) != ""
			(GetFormFromFile(0x1B10A, "MarkAndRecall.esp")).SetName(_fY_5 as float)
		endif
		if (_fZ_5) != ""
			(GetFormFromFile(0x1B10B, "MarkAndRecall.esp")).SetName(_fZ_5 as float)
		endif
		if (_fX_6) != ""
			(GetFormFromFile(0x1B10C, "MarkAndRecall.esp")).SetName(_fX_6 as float)
		endif
		if (_fY_6) != ""
			(GetFormFromFile(0x1B10D, "MarkAndRecall.esp")).SetName(_fY_6 as float)
		endif
		if (_fZ_6) != ""
			(GetFormFromFile(0x1B10E, "MarkAndRecall.esp")).SetName(_fZ_6 as float)
		endif
		if (_fX_7) != ""
			(GetFormFromFile(0x1B10F, "MarkAndRecall.esp")).SetName(_fX_7 as float)
		endif
		if (_fY_7) != ""
			(GetFormFromFile(0x1B110, "MarkAndRecall.esp")).SetName(_fY_7 as float)
		endif
		if (_fZ_7) != ""
			(GetFormFromFile(0x1B111, "MarkAndRecall.esp")).SetName(_fZ_7 as float)
		endif
		if (_fX_8) != ""
			(GetFormFromFile(0x1B112, "MarkAndRecall.esp")).SetName(_fX_8 as float)
		endif
		if (_fY_8) != ""
			(GetFormFromFile(0x1B113, "MarkAndRecall.esp")).SetName(_fY_8 as float)
		endif
		if (_fZ_8) != ""
			(GetFormFromFile(0x1B114, "MarkAndRecall.esp")).SetName(_fZ_8 as float)
		endif
		if (_fX_9) != ""
			(GetFormFromFile(0x1B115, "MarkAndRecall.esp")).SetName(_fX_9 as float)
		endif
		if (_fY_9) != ""
			(GetFormFromFile(0x1B116, "MarkAndRecall.esp")).SetName(_fY_9 as float)
		endif
		if (_fZ_9) != ""
			(GetFormFromFile(0x1B117, "MarkAndRecall.esp")).SetName(_fZ_9 as float)
		endif
		if (_fX_10) != ""
			(GetFormFromFile(0x1B119, "MarkAndRecall.esp")).SetName(_fX_10 as float)
		endif
		if (_fY_10) != ""
			(GetFormFromFile(0x1B120, "MarkAndRecall.esp")).SetName(_fY_10 as float)
		endif
		if (_fZ_10) != ""
			(GetFormFromFile(0x1B127, "MarkAndRecall.esp")).SetName(_fZ_10 as float)
		endif
		if (_fX_11) != ""
			(GetFormFromFile(0x1B11A, "MarkAndRecall.esp")).SetName(_fX_11 as float)
		endif
		if (_fY_11) != ""
			(GetFormFromFile(0x1B121, "MarkAndRecall.esp")).SetName(_fY_11 as float)
		endif
		if (_fZ_11) != ""
			(GetFormFromFile(0x1B128, "MarkAndRecall.esp")).SetName(_fZ_11 as float)
		endif
		if (_fX_12) != ""
			(GetFormFromFile(0x1B11B, "MarkAndRecall.esp")).SetName(_fX_12 as float)
		endif
		if (_fY_12) != ""
			(GetFormFromFile(0x1B122, "MarkAndRecall.esp")).SetName(_fY_12 as float)
		endif
		if (_fZ_12) != ""
			(GetFormFromFile(0x1B129, "MarkAndRecall.esp")).SetName(_fZ_12 as float)
		endif
		if (_fX_13) != ""
			(GetFormFromFile(0x1B11C, "MarkAndRecall.esp")).SetName(_fX_13 as float)
		endif
		if (_fY_13) != ""
			(GetFormFromFile(0x1B123, "MarkAndRecall.esp")).SetName(_fY_13 as float)
		endif
		if (_fZ_13) != ""
			(GetFormFromFile(0x1B12A, "MarkAndRecall.esp")).SetName(_fZ_13 as float)
		endif
		if (_fX_14) != ""
			(GetFormFromFile(0x1B11D, "MarkAndRecall.esp")).SetName(_fX_14 as float)
		endif
		if (_fY_14) != ""
			(GetFormFromFile(0x1B124, "MarkAndRecall.esp")).SetName(_fY_14 as float)
		endif
		if (_fZ_14) != ""
			(GetFormFromFile(0x1B12B, "MarkAndRecall.esp")).SetName(_fZ_14 as float)
		endif
		if (_fX_15) != ""
			(GetFormFromFile(0x1B11E, "MarkAndRecall.esp")).SetName(_fX_15 as float)
		endif
		if (_fY_15) != ""
			(GetFormFromFile(0x1B125, "MarkAndRecall.esp")).SetName(_fY_15 as float)
		endif
		if (_fZ_15) != ""
			(GetFormFromFile(0x1B12C, "MarkAndRecall.esp")).SetName(_fZ_15 as float)
		endif
		if (_fX_16) != ""
			(GetFormFromFile(0x1B11F, "MarkAndRecall.esp")).SetName(_fX_16 as float)
		endif
		if (_fY_16) != ""
			(GetFormFromFile(0x1B126, "MarkAndRecall.esp")).SetName(_fY_16 as float)
		endif
		if (_fZ_16) != ""
			(GetFormFromFile(0x1B12D, "MarkAndRecall.esp")).SetName(_fZ_16 as float)
		endif
	EndIf
	return true
endFunction


Bool function LoadOnlyBooleanPapyrus()
	if !jsonutil.IsGood(settings_path)
		return false
	endIf
	;====================================
	_IsNameSet1 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_1", _IsNameSet1)
	_IsNameSet2 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_2", _IsNameSet2)
	_IsNameSet3 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_3", _IsNameSet3)
	_IsNameSet4 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_4", _IsNameSet4)
	_IsNameSet5 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_5", _IsNameSet5)
	_IsNameSet6 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_6", _IsNameSet6)
	_IsNameSet7 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_7", _IsNameSet7)
	_IsNameSet8 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_8", _IsNameSet8)
	_IsNameSet9 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_9", _IsNameSet9)
	_IsNameSet10 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_10", _IsNameSet10)
	_IsNameSet11 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_11", _IsNameSet11)
	_IsNameSet12 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_12", _IsNameSet12)
	_IsNameSet13 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_13", _IsNameSet13)
	_IsNameSet14 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_14", _IsNameSet14)
	_IsNameSet15 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_15", _IsNameSet15)
	_IsNameSet16 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_16", _IsNameSet16)
	;====================================
	if (_IsNameSet1) != ""
		(GetFormFromFile(0x1B0ED, "MarkAndRecall.esp")).SetName(_IsNameSet1 as int)
	endif
	if (_IsNameSet2) != ""
		(GetFormFromFile(0x1B0EE, "MarkAndRecall.esp")).SetName(_IsNameSet2 as int)
	endif
	if (_IsNameSet3) != ""
		(GetFormFromFile(0x1B0EF, "MarkAndRecall.esp")).SetName(_IsNameSet3 as int)
	endif
	if (_IsNameSet4) != ""
		(GetFormFromFile(0x1B0F0, "MarkAndRecall.esp")).SetName(_IsNameSet4 as int)
	endif
	if (_IsNameSet5) != ""
		(GetFormFromFile(0x1B0F1, "MarkAndRecall.esp")).SetName(_IsNameSet5 as int)
	endif
	if (_IsNameSet6) != ""
		(GetFormFromFile(0x1B0F2, "MarkAndRecall.esp")).SetName(_IsNameSet6 as int)
	endif
	if (_IsNameSet7) != ""
		(GetFormFromFile(0x1B0F3, "MarkAndRecall.esp")).SetName(_IsNameSet7 as int)
	endif
	if (_IsNameSet8) != ""
		(GetFormFromFile(0x1B0F4, "MarkAndRecall.esp")).SetName(_IsNameSet8 as int)
	endif
	if (_IsNameSet9) != ""
		(GetFormFromFile(0x1B0F5, "MarkAndRecall.esp")).SetName(_IsNameSet9 as int)
	endif
	if (_IsNameSet10) != ""
		(GetFormFromFile(0x1B0F6, "MarkAndRecall.esp")).SetName(_IsNameSet10 as int)
	endif
	if (_IsNameSet11) != ""
		(GetFormFromFile(0x1B0F7, "MarkAndRecall.esp")).SetName(_IsNameSet11 as int)
	endif
	if (_IsNameSet12) != ""
		(GetFormFromFile(0x1B0F8, "MarkAndRecall.esp")).SetName(_IsNameSet12 as int)
	endif
	if (_IsNameSet13) != ""
		(GetFormFromFile(0x1B0F9, "MarkAndRecall.esp")).SetName(_IsNameSet13 as int)
	endif
	if (_IsNameSet14) != ""
		(GetFormFromFile(0x1B0FA, "MarkAndRecall.esp")).SetName(_IsNameSet14 as int)
	endif
	if (_IsNameSet15) != ""
		(GetFormFromFile(0x1B0FB, "MarkAndRecall.esp")).SetName(_IsNameSet15 as int)
	endif
	if (_IsNameSet16) != ""
		(GetFormFromFile(0x1B0FC, "MarkAndRecall.esp")).SetName(_IsNameSet16 as int)
	endif
	;====================================
	return true
endFunction


Bool function LoadOnlyLocNamesPapyrus()
	if !jsonutil.IsGood(settings_path)
		return false
	endIf
	;====================================
	if (jsonutil.GetPathStringValue(settings_path, "Recall_1_Name", Recall1Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_1_Name", Recall1Name), Recall1Name) == false)
			Recall1Name = jsonutil.GetPathStringValue(settings_path, "Recall_1_Name", Recall1Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_2_Name", Recall2Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_2_Name", Recall2Name), Recall2Name) == false)
			Recall2Name = jsonutil.GetPathStringValue(settings_path, "Recall_2_Name", Recall2Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_3_Name", Recall3Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_3_Name", Recall3Name), Recall3Name) == false)
			Recall3Name = jsonutil.GetPathStringValue(settings_path, "Recall_3_Name", Recall3Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_4_Name", Recall4Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_4_Name", Recall4Name), Recall4Name) == false)
			Recall4Name = jsonutil.GetPathStringValue(settings_path, "Recall_4_Name", Recall4Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_5_Name", Recall5Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_5_Name", Recall5Name), Recall5Name) == false)
			Recall5Name = jsonutil.GetPathStringValue(settings_path, "Recall_5_Name", Recall5Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_6_Name", Recall6Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_6_Name", Recall6Name), Recall6Name) == false)
			Recall6Name = jsonutil.GetPathStringValue(settings_path, "Recall_6_Name", Recall6Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_7_Name", Recall7Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_7_Name", Recall7Name), Recall7Name) == false)
			Recall7Name = jsonutil.GetPathStringValue(settings_path, "Recall_7_Name", Recall7Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_8_Name", Recall8Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_8_Name", Recall8Name), Recall8Name) == false)
			Recall8Name = jsonutil.GetPathStringValue(settings_path, "Recall_8_Name", Recall8Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_9_Name", Recall9Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_9_Name", Recall9Name), Recall9Name) == false)
			Recall9Name = jsonutil.GetPathStringValue(settings_path, "Recall_9_Name", Recall9Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_10_Name", Recall10Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_10_Name", Recall10Name), Recall10Name) == false)
			Recall10Name = jsonutil.GetPathStringValue(settings_path, "Recall_10_Name", Recall10Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_11_Name", Recall11Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_11_Name", Recall11Name), Recall11Name) == false)
			Recall11Name = jsonutil.GetPathStringValue(settings_path, "Recall_11_Name", Recall11Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_12_Name", Recall12Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_12_Name", Recall12Name), Recall12Name) == false)
			Recall12Name = jsonutil.GetPathStringValue(settings_path, "Recall_12_Name", Recall12Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_13_Name", Recall13Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_13_Name", Recall13Name), Recall13Name) == false)
			Recall13Name = jsonutil.GetPathStringValue(settings_path, "Recall_13_Name", Recall13Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_14_Name", Recall14Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_14_Name", Recall14Name), Recall14Name) == false)
			Recall14Name = jsonutil.GetPathStringValue(settings_path, "Recall_14_Name", Recall14Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_15_Name", Recall15Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_15_Name", Recall15Name), Recall15Name) == false)
			Recall15Name = jsonutil.GetPathStringValue(settings_path, "Recall_15_Name", Recall15Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_16_Name", Recall16Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_16_Name", Recall16Name), Recall16Name) == false)
			Recall16Name = jsonutil.GetPathStringValue(settings_path, "Recall_16_Name", Recall16Name)
		endif
	endif
	;====================================
	if Recall1Name != ""
		(GetFormFromFile(0x12484, "MarkAndRecall.esp")).SetName(Recall1Name)
		(GetFormFromFile(0x48DCA, "MarkAndRecall.esp")).SetName(Recall1Name)
	endif
	if Recall2Name != ""
		(GetFormFromFile(0x12485, "MarkAndRecall.esp")).SetName(Recall2Name)
		(GetFormFromFile(0x48DCC, "MarkAndRecall.esp")).SetName(Recall2Name)
	endif
	if Recall3Name != ""
		(GetFormFromFile(0x12486, "MarkAndRecall.esp")).SetName(Recall3Name)
		(GetFormFromFile(0x48DDB, "MarkAndRecall.esp")).SetName(Recall3Name)
	endif
	if Recall4Name != ""
		(GetFormFromFile(0x12487, "MarkAndRecall.esp")).SetName(Recall4Name)
		(GetFormFromFile(0x48DCE, "MarkAndRecall.esp")).SetName(Recall4Name)
	endif
	if Recall5Name != ""
		(GetFormFromFile(0x12488, "MarkAndRecall.esp")).SetName(Recall5Name)
		(GetFormFromFile(0x48DCF, "MarkAndRecall.esp")).SetName(Recall5Name)
	endif
	if Recall6Name != ""
		(GetFormFromFile(0x12489, "MarkAndRecall.esp")).SetName(Recall6Name)
		(GetFormFromFile(0x48DD0, "MarkAndRecall.esp")).SetName(Recall6Name)
	endif
	if Recall7Name != ""
		(GetFormFromFile(0x1248A, "MarkAndRecall.esp")).SetName(Recall7Name)
		(GetFormFromFile(0x48DD1, "MarkAndRecall.esp")).SetName(Recall7Name)
	endif
	if Recall8Name != ""
		(GetFormFromFile(0x1248B, "MarkAndRecall.esp")).SetName(Recall8Name)
		(GetFormFromFile(0x48DDC, "MarkAndRecall.esp")).SetName(Recall8Name)
	endif
	if Recall9Name != ""
		(GetFormFromFile(0x1248C, "MarkAndRecall.esp")).SetName(Recall9Name)
		(GetFormFromFile(0x48DD3, "MarkAndRecall.esp")).SetName(Recall9Name)
	endif
	if Recall10Name != ""
		(GetFormFromFile(0x1248D, "MarkAndRecall.esp")).SetName(Recall10Name)
		(GetFormFromFile(0x48DD4, "MarkAndRecall.esp")).SetName(Recall10Name)
	endif
	if Recall11Name != ""
		(GetFormFromFile(0x1248E, "MarkAndRecall.esp")).SetName(Recall11Name)
		(GetFormFromFile(0x48DD5, "MarkAndRecall.esp")).SetName(Recall11Name)
	endif
	if Recall12Name != ""
		(GetFormFromFile(0x1248F, "MarkAndRecall.esp")).SetName(Recall12Name)
		(GetFormFromFile(0x48DD6, "MarkAndRecall.esp")).SetName(Recall12Name)
	endif
	if Recall13Name != ""
		(GetFormFromFile(0x12490, "MarkAndRecall.esp")).SetName(Recall13Name)
		(GetFormFromFile(0x48DD7, "MarkAndRecall.esp")).SetName(Recall13Name)
	endif
	if Recall14Name != ""
		(GetFormFromFile(0x12491, "MarkAndRecall.esp")).SetName(Recall14Name)
		(GetFormFromFile(0x48DD8, "MarkAndRecall.esp")).SetName(Recall14Name)
	endif
	if Recall15Name != ""
		(GetFormFromFile(0x12492, "MarkAndRecall.esp")).SetName(Recall15Name)
		(GetFormFromFile(0x48DD9, "MarkAndRecall.esp")).SetName(Recall15Name)
	endif
	if Recall16Name != ""
		(GetFormFromFile(0x12493, "MarkAndRecall.esp")).SetName(Recall16Name)
		(GetFormFromFile(0x48DDA, "MarkAndRecall.esp")).SetName(Recall16Name)
	endif
	return true
endFunction


;string function GetPathStringValue(string FileName, string Path, string missing = "") global native
;		jsonutil.SetPathStringValue(settings_path, "Recall_1_Name", _Recall_1_Name)
;bool function GetPathBoolValue(string FileName, string Path, bool missing = false) global
;bool function IsPathBool(string FileName, string Path) global native
;function SetPathIntValue(string FileName, string Path, int value) global native
;int function GetPathIntValue(string FileName, string Path, int missing = 0) global native
;Bool function loadBool(String name)
;function saveBool(String name, Bool b)

; Moves this object to the position of the specified object, with an offset, and optionally matching its rotation
;Function MoveTo(ObjectReference akTarget, float afXOffset = 0.0, float afYOffset = 0.0, float afZOffset = 0.0, bool abMatchRotation = true) native

;float function GetPathFloatValue(string FileName, string Path, float missing = 0.0) global native
;function SetPathFloatValue(string FileName, string Path, float value) global native
;Float function loadFloat(String name)
;function saveFloat(String name, Float f)

Bool function LoadUserSettingsPapyrus()
	if !jsonutil.IsGood(settings_path)
		return false
	endIf
	;====================================
	if (jsonutil.GetPathStringValue(settings_path, "OldVersion", ConfigMCM.OldVersion) != "")
		ConfigMCM.OldVersion = jsonutil.GetPathStringValue(settings_path, "OldVersion", ConfigMCM.OldVersion)
	endif
	;====================================
	bEnabled = jsonutil.GetPathIntValue(settings_path, "bEnabled", bEnabled as int)
	IsDebugMode = jsonutil.GetPathIntValue(settings_path, "IsDebugMode", IsDebugMode as int)
	IsAllowed = jsonutil.GetPathIntValue(settings_path, "IsAllowed", IsAllowed as int)
	IsClassicMode = jsonutil.GetPathIntValue(settings_path, "IsClassicMode", IsClassicMode as int)
	bCanCityPortal = jsonutil.GetPathIntValue(settings_path, "CanCityPortal", bCanCityPortal as int)
	bCheckingNames = jsonutil.GetPathIntValue(settings_path, "CheckingNames", bCheckingNames as int)
	;====================================
	If(IsAllowed == true)
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_1", _Cell_Name_1) != "")
			_Cell_Name_1 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_1", _Cell_Name_1)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_2", _Cell_Name_2) != "")
			_Cell_Name_2 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_2", _Cell_Name_2)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_3", _Cell_Name_3) != "")
			_Cell_Name_3 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_3", _Cell_Name_3)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_4", _Cell_Name_4) != "")
			_Cell_Name_4 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_4", _Cell_Name_4)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_5", _Cell_Name_5) != "")
			_Cell_Name_5 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_5", _Cell_Name_5)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_6", _Cell_Name_6) != "")
			_Cell_Name_6 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_6", _Cell_Name_6)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_7", _Cell_Name_7) != "")
			_Cell_Name_7 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_7", _Cell_Name_7)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_8", _Cell_Name_8) != "")
			_Cell_Name_8 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_8", _Cell_Name_8)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_9", _Cell_Name_9) != "")
			_Cell_Name_9 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_9", _Cell_Name_9)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_10", _Cell_Name_10) != "")
			_Cell_Name_10 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_10", _Cell_Name_10)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_11", _Cell_Name_11) != "")
			_Cell_Name_11 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_11", _Cell_Name_11)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_12", _Cell_Name_12) != "")
			_Cell_Name_12 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_12", _Cell_Name_12)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_13", _Cell_Name_13) != "")
			_Cell_Name_13 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_13", _Cell_Name_13)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_14", _Cell_Name_14) != "")
			_Cell_Name_14 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_14", _Cell_Name_14)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_15", _Cell_Name_15) != "")
			_Cell_Name_15 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_15", _Cell_Name_15)
		endif
		if (jsonutil.GetPathStringValue(settings_path, "_Cell_Name_16", _Cell_Name_16) != "")
			_Cell_Name_16 = jsonutil.GetPathStringValue(settings_path, "_Cell_Name_16", _Cell_Name_16)
		endif
		;====================================
		_fX_1 = jsonutil.GetPathFloatValue(settings_path, "_fX_1", _fX_1)
		_fY_1 = jsonutil.GetPathFloatValue(settings_path, "_fY_1", _fY_1)
		_fZ_1 = jsonutil.GetPathFloatValue(settings_path, "_fZ_1", _fZ_1)
		_fX_2 = jsonutil.GetPathFloatValue(settings_path, "_fX_2", _fX_2)
		_fY_2 = jsonutil.GetPathFloatValue(settings_path, "_fY_2", _fY_2)
		_fZ_2 = jsonutil.GetPathFloatValue(settings_path, "_fZ_2", _fZ_2)
		_fX_3 = jsonutil.GetPathFloatValue(settings_path, "_fX_3", _fX_3)
		_fY_3 = jsonutil.GetPathFloatValue(settings_path, "_fY_3", _fY_3)
		_fZ_3 = jsonutil.GetPathFloatValue(settings_path, "_fZ_3", _fZ_3)
		_fX_4 = jsonutil.GetPathFloatValue(settings_path, "_fX_4", _fX_4)
		_fY_4 = jsonutil.GetPathFloatValue(settings_path, "_fY_4", _fY_4)
		_fZ_4 = jsonutil.GetPathFloatValue(settings_path, "_fZ_4", _fZ_4)
		_fX_5 = jsonutil.GetPathFloatValue(settings_path, "_fX_5", _fX_5)
		_fY_5 = jsonutil.GetPathFloatValue(settings_path, "_fY_5", _fY_5)
		_fZ_5 = jsonutil.GetPathFloatValue(settings_path, "_fZ_5", _fZ_5)
		_fX_6 = jsonutil.GetPathFloatValue(settings_path, "_fX_6", _fX_6)
		_fY_6 = jsonutil.GetPathFloatValue(settings_path, "_fY_6", _fY_6)
		_fZ_6 = jsonutil.GetPathFloatValue(settings_path, "_fZ_6", _fZ_6)
		_fX_7 = jsonutil.GetPathFloatValue(settings_path, "_fX_7", _fX_7)
		_fY_7 = jsonutil.GetPathFloatValue(settings_path, "_fY_7", _fY_7)
		_fZ_7 = jsonutil.GetPathFloatValue(settings_path, "_fZ_7", _fZ_7)
		_fX_8 = jsonutil.GetPathFloatValue(settings_path, "_fX_8", _fX_8)
		_fY_8 = jsonutil.GetPathFloatValue(settings_path, "_fY_8", _fY_8)
		_fZ_8 = jsonutil.GetPathFloatValue(settings_path, "_fZ_8", _fZ_8)
		_fX_9 = jsonutil.GetPathFloatValue(settings_path, "_fX_9", _fX_9)
		_fY_9 = jsonutil.GetPathFloatValue(settings_path, "_fY_9", _fY_9)
		_fZ_9 = jsonutil.GetPathFloatValue(settings_path, "_fZ_9", _fZ_9)
		_fX_10 = jsonutil.GetPathFloatValue(settings_path, "_fX_10", _fX_10)
		_fY_10 = jsonutil.GetPathFloatValue(settings_path, "_fY_10", _fY_10)
		_fZ_10 = jsonutil.GetPathFloatValue(settings_path, "_fZ_10", _fZ_10)
		_fX_11 = jsonutil.GetPathFloatValue(settings_path, "_fX_11", _fX_11)
		_fY_11 = jsonutil.GetPathFloatValue(settings_path, "_fY_11", _fY_11)
		_fZ_11 = jsonutil.GetPathFloatValue(settings_path, "_fZ_11", _fZ_11)
		_fX_12 = jsonutil.GetPathFloatValue(settings_path, "_fX_12", _fX_12)
		_fY_12 = jsonutil.GetPathFloatValue(settings_path, "_fY_12", _fY_12)
		_fZ_12 = jsonutil.GetPathFloatValue(settings_path, "_fZ_12", _fZ_12)
		_fX_13 = jsonutil.GetPathFloatValue(settings_path, "_fX_13", _fX_13)
		_fY_13 = jsonutil.GetPathFloatValue(settings_path, "_fY_13", _fY_13)
		_fZ_13 = jsonutil.GetPathFloatValue(settings_path, "_fZ_13", _fZ_13)
		_fX_14 = jsonutil.GetPathFloatValue(settings_path, "_fX_14", _fX_14)
		_fY_14 = jsonutil.GetPathFloatValue(settings_path, "_fY_14", _fY_14)
		_fZ_14 = jsonutil.GetPathFloatValue(settings_path, "_fZ_14", _fZ_14)
		_fX_15 = jsonutil.GetPathFloatValue(settings_path, "_fX_15", _fX_15)
		_fY_15 = jsonutil.GetPathFloatValue(settings_path, "_fY_15", _fY_15)
		_fZ_15 = jsonutil.GetPathFloatValue(settings_path, "_fZ_15", _fZ_15)
		_fX_16 = jsonutil.GetPathFloatValue(settings_path, "_fX_16", _fX_16)
		_fY_16 = jsonutil.GetPathFloatValue(settings_path, "_fY_16", _fY_16)
		_fZ_16 = jsonutil.GetPathFloatValue(settings_path, "_fZ_16", _fZ_16)
	EndIf
	;====================================
	_IsNameSet1 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_1", _IsNameSet1)
	_IsNameSet2 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_2", _IsNameSet2)
	_IsNameSet3 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_3", _IsNameSet3)
	_IsNameSet4 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_4", _IsNameSet4)
	_IsNameSet5 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_5", _IsNameSet5)
	_IsNameSet6 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_6", _IsNameSet6)
	_IsNameSet7 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_7", _IsNameSet7)
	_IsNameSet8 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_8", _IsNameSet8)
	_IsNameSet9 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_9", _IsNameSet9)
	_IsNameSet10 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_10", _IsNameSet10)
	_IsNameSet11 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_11", _IsNameSet11)
	_IsNameSet12 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_12", _IsNameSet12)
	_IsNameSet13 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_13", _IsNameSet13)
	_IsNameSet14 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_14", _IsNameSet14)
	_IsNameSet15 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_15", _IsNameSet15)
	_IsNameSet16 = jsonutil.GetPathIntValue(settings_path, "IsNameSet_16", _IsNameSet16)
	;====================================
	if (jsonutil.GetPathStringValue(settings_path, "Recall_1_Name", _Recall_1_Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_1_Name", _Recall_1_Name), _Recall_1_Name) == false)
			_Recall_1_Name = jsonutil.GetPathStringValue(settings_path, "Recall_1_Name", _Recall_1_Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_2_Name", Recall2Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_2_Name", Recall2Name), Recall2Name) == false)
			Recall2Name = jsonutil.GetPathStringValue(settings_path, "Recall_2_Name", Recall2Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_3_Name", Recall3Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_3_Name", Recall3Name), Recall3Name) == false)
			Recall3Name = jsonutil.GetPathStringValue(settings_path, "Recall_3_Name", Recall3Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_4_Name", Recall4Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_4_Name", Recall4Name), Recall4Name) == false)
			Recall4Name = jsonutil.GetPathStringValue(settings_path, "Recall_4_Name", Recall4Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_5_Name", Recall5Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_5_Name", Recall5Name), Recall5Name) == false)
			Recall5Name = jsonutil.GetPathStringValue(settings_path, "Recall_5_Name", Recall5Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_6_Name", Recall6Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_6_Name", Recall6Name), Recall6Name) == false)
			Recall6Name = jsonutil.GetPathStringValue(settings_path, "Recall_6_Name", Recall6Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_7_Name", Recall7Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_7_Name", Recall7Name), Recall7Name) == false)
			Recall7Name = jsonutil.GetPathStringValue(settings_path, "Recall_7_Name", Recall7Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_8_Name", Recall8Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_8_Name", Recall8Name), Recall8Name) == false)
			Recall8Name = jsonutil.GetPathStringValue(settings_path, "Recall_8_Name", Recall8Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_9_Name", Recall9Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_9_Name", Recall9Name), Recall9Name) == false)
			Recall9Name = jsonutil.GetPathStringValue(settings_path, "Recall_9_Name", Recall9Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_10_Name", Recall10Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_10_Name", Recall10Name), Recall10Name) == false)
			Recall10Name = jsonutil.GetPathStringValue(settings_path, "Recall_10_Name", Recall10Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_11_Name", Recall11Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_11_Name", Recall11Name), Recall11Name) == false)
			Recall11Name = jsonutil.GetPathStringValue(settings_path, "Recall_11_Name", Recall11Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_12_Name", Recall12Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_12_Name", Recall12Name), Recall12Name) == false)
			Recall12Name = jsonutil.GetPathStringValue(settings_path, "Recall_12_Name", Recall12Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_13_Name", Recall13Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_13_Name", Recall13Name), Recall13Name) == false)
			Recall13Name = jsonutil.GetPathStringValue(settings_path, "Recall_13_Name", Recall13Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_14_Name", Recall14Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_14_Name", Recall14Name), Recall14Name) == false)
			Recall14Name = jsonutil.GetPathStringValue(settings_path, "Recall_14_Name", Recall14Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_15_Name", Recall15Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_15_Name", Recall15Name), Recall15Name) == false)
			Recall15Name = jsonutil.GetPathStringValue(settings_path, "Recall_15_Name", Recall15Name)
		endif
	endif
	if (jsonutil.GetPathStringValue(settings_path, "Recall_16_Name", Recall16Name) != "")
		if(bIsIdentical(jsonutil.GetPathStringValue(settings_path, "Recall_16_Name", Recall16Name), Recall16Name) == false)
			Recall16Name = jsonutil.GetPathStringValue(settings_path, "Recall_16_Name", Recall16Name)
		endif
	endif
	;====================================
	If(IsAllowed == true)
		if _Cell_Name_1 != ""
			(GetFormFromFile(0x1B118, "MarkAndRecall.esp")).SetName(_Cell_Name_1)
		endif
		if _Cell_Name_2 != ""
			(GetFormFromFile(0x1B12E, "MarkAndRecall.esp")).SetName(_Cell_Name_2)
		endif
		if _Cell_Name_3 != ""
			(GetFormFromFile(0x1B12F, "MarkAndRecall.esp")).SetName(_Cell_Name_3)
		endif
		if _Cell_Name_4 != ""
			(GetFormFromFile(0x1B130, "MarkAndRecall.esp")).SetName(_Cell_Name_4)
		endif
		if _Cell_Name_5 != ""
			(GetFormFromFile(0x1B131, "MarkAndRecall.esp")).SetName(_Cell_Name_5)
		endif
		if _Cell_Name_6 != ""
			(GetFormFromFile(0x1B132, "MarkAndRecall.esp")).SetName(_Cell_Name_6)
		endif
		if _Cell_Name_7 != ""
			(GetFormFromFile(0x1B133, "MarkAndRecall.esp")).SetName(_Cell_Name_7)
		endif
		if _Cell_Name_8 != ""
			(GetFormFromFile(0x1B134, "MarkAndRecall.esp")).SetName(_Cell_Name_8)
		endif
		if _Cell_Name_9 != ""
			(GetFormFromFile(0x1B135, "MarkAndRecall.esp")).SetName(_Cell_Name_9)
		endif
		if _Cell_Name_10 != ""
			(GetFormFromFile(0x1B136, "MarkAndRecall.esp")).SetName(_Cell_Name_10)
		endif
		if _Cell_Name_11 != ""
			(GetFormFromFile(0x1B137, "MarkAndRecall.esp")).SetName(_Cell_Name_11)
		endif
		if _Cell_Name_12 != ""
			(GetFormFromFile(0x1B138, "MarkAndRecall.esp")).SetName(_Cell_Name_12)
		endif
		if _Cell_Name_13 != ""
			(GetFormFromFile(0x1B139, "MarkAndRecall.esp")).SetName(_Cell_Name_13)
		endif
		if _Cell_Name_14 != ""
			(GetFormFromFile(0x1B13A, "MarkAndRecall.esp")).SetName(_Cell_Name_14)
		endif
		if _Cell_Name_15 != ""
			(GetFormFromFile(0x1B13B, "MarkAndRecall.esp")).SetName(_Cell_Name_15)
		endif
		if _Cell_Name_16 != ""
			(GetFormFromFile(0x1B13C, "MarkAndRecall.esp")).SetName(_Cell_Name_16)
		endif
		;====================================
		if (_fX_1) != ""
			(GetFormFromFile(0x1B0FD, "MarkAndRecall.esp")).SetName(_fX_1 as float)
		endif
		if (_fY_1) != ""
			(GetFormFromFile(0x1B0FE, "MarkAndRecall.esp")).SetName(_fY_1 as float)
		endif
		if (_fZ_1) != ""
			(GetFormFromFile(0x1B0FF, "MarkAndRecall.esp")).SetName(_fZ_1 as float)
		endif
		if (_fX_2) != ""
			(GetFormFromFile(0x1B100, "MarkAndRecall.esp")).SetName(_fX_2 as float)
		endif
		if (_fY_2) != ""
			(GetFormFromFile(0x1B101, "MarkAndRecall.esp")).SetName(_fY_2 as float)
		endif
		if (_fZ_2) != ""
			(GetFormFromFile(0x1B102, "MarkAndRecall.esp")).SetName(_fZ_2 as float)
		endif
		if (_fX_3) != ""
			(GetFormFromFile(0x1B103, "MarkAndRecall.esp")).SetName(_fX_3 as float)
		endif
		if (_fY_3) != ""
			(GetFormFromFile(0x1B104, "MarkAndRecall.esp")).SetName(_fY_3 as float)
		endif
		if (_fZ_3) != ""
			(GetFormFromFile(0x1B105, "MarkAndRecall.esp")).SetName(_fZ_3 as float)
		endif
		if (_fX_4) != ""
			(GetFormFromFile(0x1B106, "MarkAndRecall.esp")).SetName(_fX_4 as float)
		endif
		if (_fY_4) != ""
			(GetFormFromFile(0x1B107, "MarkAndRecall.esp")).SetName(_fY_4 as float)
		endif
		if (_fZ_4) != ""
			(GetFormFromFile(0x1B108, "MarkAndRecall.esp")).SetName(_fZ_4 as float)
		endif
		if (_fX_5) != ""
			(GetFormFromFile(0x1B109, "MarkAndRecall.esp")).SetName(_fX_5 as float)
		endif
		if (_fY_5) != ""
			(GetFormFromFile(0x1B10A, "MarkAndRecall.esp")).SetName(_fY_5 as float)
		endif
		if (_fZ_5) != ""
			(GetFormFromFile(0x1B10B, "MarkAndRecall.esp")).SetName(_fZ_5 as float)
		endif
		if (_fX_6) != ""
			(GetFormFromFile(0x1B10C, "MarkAndRecall.esp")).SetName(_fX_6 as float)
		endif
		if (_fY_6) != ""
			(GetFormFromFile(0x1B10D, "MarkAndRecall.esp")).SetName(_fY_6 as float)
		endif
		if (_fZ_6) != ""
			(GetFormFromFile(0x1B10E, "MarkAndRecall.esp")).SetName(_fZ_6 as float)
		endif
		if (_fX_7) != ""
			(GetFormFromFile(0x1B10F, "MarkAndRecall.esp")).SetName(_fX_7 as float)
		endif
		if (_fY_7) != ""
			(GetFormFromFile(0x1B110, "MarkAndRecall.esp")).SetName(_fY_7 as float)
		endif
		if (_fZ_7) != ""
			(GetFormFromFile(0x1B111, "MarkAndRecall.esp")).SetName(_fZ_7 as float)
		endif
		if (_fX_8) != ""
			(GetFormFromFile(0x1B112, "MarkAndRecall.esp")).SetName(_fX_8 as float)
		endif
		if (_fY_8) != ""
			(GetFormFromFile(0x1B113, "MarkAndRecall.esp")).SetName(_fY_8 as float)
		endif
		if (_fZ_8) != ""
			(GetFormFromFile(0x1B114, "MarkAndRecall.esp")).SetName(_fZ_8 as float)
		endif
		if (_fX_9) != ""
			(GetFormFromFile(0x1B115, "MarkAndRecall.esp")).SetName(_fX_9 as float)
		endif
		if (_fY_9) != ""
			(GetFormFromFile(0x1B116, "MarkAndRecall.esp")).SetName(_fY_9 as float)
		endif
		if (_fZ_9) != ""
			(GetFormFromFile(0x1B117, "MarkAndRecall.esp")).SetName(_fZ_9 as float)
		endif
		if (_fX_10) != ""
			(GetFormFromFile(0x1B119, "MarkAndRecall.esp")).SetName(_fX_10 as float)
		endif
		if (_fY_10) != ""
			(GetFormFromFile(0x1B120, "MarkAndRecall.esp")).SetName(_fY_10 as float)
		endif
		if (_fZ_10) != ""
			(GetFormFromFile(0x1B127, "MarkAndRecall.esp")).SetName(_fZ_10 as float)
		endif
		if (_fX_11) != ""
			(GetFormFromFile(0x1B11A, "MarkAndRecall.esp")).SetName(_fX_11 as float)
		endif
		if (_fY_11) != ""
			(GetFormFromFile(0x1B121, "MarkAndRecall.esp")).SetName(_fY_11 as float)
		endif
		if (_fZ_11) != ""
			(GetFormFromFile(0x1B128, "MarkAndRecall.esp")).SetName(_fZ_11 as float)
		endif
		if (_fX_12) != ""
			(GetFormFromFile(0x1B11B, "MarkAndRecall.esp")).SetName(_fX_12 as float)
		endif
		if (_fY_12) != ""
			(GetFormFromFile(0x1B122, "MarkAndRecall.esp")).SetName(_fY_12 as float)
		endif
		if (_fZ_12) != ""
			(GetFormFromFile(0x1B129, "MarkAndRecall.esp")).SetName(_fZ_12 as float)
		endif
		if (_fX_13) != ""
			(GetFormFromFile(0x1B11C, "MarkAndRecall.esp")).SetName(_fX_13 as float)
		endif
		if (_fY_13) != ""
			(GetFormFromFile(0x1B123, "MarkAndRecall.esp")).SetName(_fY_13 as float)
		endif
		if (_fZ_13) != ""
			(GetFormFromFile(0x1B12A, "MarkAndRecall.esp")).SetName(_fZ_13 as float)
		endif
		if (_fX_14) != ""
			(GetFormFromFile(0x1B11D, "MarkAndRecall.esp")).SetName(_fX_14 as float)
		endif
		if (_fY_14) != ""
			(GetFormFromFile(0x1B124, "MarkAndRecall.esp")).SetName(_fY_14 as float)
		endif
		if (_fZ_14) != ""
			(GetFormFromFile(0x1B12B, "MarkAndRecall.esp")).SetName(_fZ_14 as float)
		endif
		if (_fX_15) != ""
			(GetFormFromFile(0x1B11E, "MarkAndRecall.esp")).SetName(_fX_15 as float)
		endif
		if (_fY_15) != ""
			(GetFormFromFile(0x1B125, "MarkAndRecall.esp")).SetName(_fY_15 as float)
		endif
		if (_fZ_15) != ""
			(GetFormFromFile(0x1B12C, "MarkAndRecall.esp")).SetName(_fZ_15 as float)
		endif
		if (_fX_16) != ""
			(GetFormFromFile(0x1B11F, "MarkAndRecall.esp")).SetName(_fX_16 as float)
		endif
		if (_fY_16) != ""
			(GetFormFromFile(0x1B126, "MarkAndRecall.esp")).SetName(_fY_16 as float)
		endif
		if (_fZ_16) != ""
			(GetFormFromFile(0x1B12D, "MarkAndRecall.esp")).SetName(_fZ_16 as float)
		endif
	EndIf
	;====================================
	if (_IsNameSet1) != ""
		(GetFormFromFile(0x1B0ED, "MarkAndRecall.esp")).SetName(_IsNameSet1 as int)
	endif
	if (_IsNameSet2) != ""
		(GetFormFromFile(0x1B0EE, "MarkAndRecall.esp")).SetName(_IsNameSet2 as int)
	endif
	if (_IsNameSet3) != ""
		(GetFormFromFile(0x1B0EF, "MarkAndRecall.esp")).SetName(_IsNameSet3 as int)
	endif
	if (_IsNameSet4) != ""
		(GetFormFromFile(0x1B0F0, "MarkAndRecall.esp")).SetName(_IsNameSet4 as int)
	endif
	if (_IsNameSet5) != ""
		(GetFormFromFile(0x1B0F1, "MarkAndRecall.esp")).SetName(_IsNameSet5 as int)
	endif
	if (_IsNameSet6) != ""
		(GetFormFromFile(0x1B0F2, "MarkAndRecall.esp")).SetName(_IsNameSet6 as int)
	endif
	if (_IsNameSet7) != ""
		(GetFormFromFile(0x1B0F3, "MarkAndRecall.esp")).SetName(_IsNameSet7 as int)
	endif
	if (_IsNameSet8) != ""
		(GetFormFromFile(0x1B0F4, "MarkAndRecall.esp")).SetName(_IsNameSet8 as int)
	endif
	if (_IsNameSet9) != ""
		(GetFormFromFile(0x1B0F5, "MarkAndRecall.esp")).SetName(_IsNameSet9 as int)
	endif
	if (_IsNameSet10) != ""
		(GetFormFromFile(0x1B0F6, "MarkAndRecall.esp")).SetName(_IsNameSet10 as int)
	endif
	if (_IsNameSet11) != ""
		(GetFormFromFile(0x1B0F7, "MarkAndRecall.esp")).SetName(_IsNameSet11 as int)
	endif
	if (_IsNameSet12) != ""
		(GetFormFromFile(0x1B0F8, "MarkAndRecall.esp")).SetName(_IsNameSet12 as int)
	endif
	if (_IsNameSet13) != ""
		(GetFormFromFile(0x1B0F9, "MarkAndRecall.esp")).SetName(_IsNameSet13 as int)
	endif
	if (_IsNameSet14) != ""
		(GetFormFromFile(0x1B0FA, "MarkAndRecall.esp")).SetName(_IsNameSet14 as int)
	endif
	if (_IsNameSet15) != ""
		(GetFormFromFile(0x1B0FB, "MarkAndRecall.esp")).SetName(_IsNameSet15 as int)
	endif
	if (_IsNameSet16) != ""
		(GetFormFromFile(0x1B0FC, "MarkAndRecall.esp")).SetName(_IsNameSet16 as int)
	endif
	;====================================
	if _Recall_1_Name != ""
		(GetFormFromFile(0x12484, "MarkAndRecall.esp")).SetName(_Recall_1_Name)
		(GetFormFromFile(0x48DCA, "MarkAndRecall.esp")).SetName(_Recall_1_Name)
	endif
	if Recall2Name != ""
		(GetFormFromFile(0x12485, "MarkAndRecall.esp")).SetName(Recall2Name)
		(GetFormFromFile(0x48DCC, "MarkAndRecall.esp")).SetName(Recall2Name)
	endif
	if Recall3Name != ""
		(GetFormFromFile(0x12486, "MarkAndRecall.esp")).SetName(Recall3Name)
		(GetFormFromFile(0x48DDB, "MarkAndRecall.esp")).SetName(Recall3Name)
	endif
	if Recall4Name != ""
		(GetFormFromFile(0x12487, "MarkAndRecall.esp")).SetName(Recall4Name)
		(GetFormFromFile(0x48DCE, "MarkAndRecall.esp")).SetName(Recall4Name)
	endif
	if Recall5Name != ""
		(GetFormFromFile(0x12488, "MarkAndRecall.esp")).SetName(Recall5Name)
		(GetFormFromFile(0x48DCF, "MarkAndRecall.esp")).SetName(Recall5Name)
	endif
	if Recall6Name != ""
		(GetFormFromFile(0x12489, "MarkAndRecall.esp")).SetName(Recall6Name)
		(GetFormFromFile(0x48DD0, "MarkAndRecall.esp")).SetName(Recall6Name)
	endif
	if Recall7Name != ""
		(GetFormFromFile(0x1248A, "MarkAndRecall.esp")).SetName(Recall7Name)
		(GetFormFromFile(0x48DD1, "MarkAndRecall.esp")).SetName(Recall7Name)
	endif
	if Recall8Name != ""
		(GetFormFromFile(0x1248B, "MarkAndRecall.esp")).SetName(Recall8Name)
		(GetFormFromFile(0x48DDC, "MarkAndRecall.esp")).SetName(Recall8Name)
	endif
	if Recall9Name != ""
		(GetFormFromFile(0x1248C, "MarkAndRecall.esp")).SetName(Recall9Name)
		(GetFormFromFile(0x48DD3, "MarkAndRecall.esp")).SetName(Recall9Name)
	endif
	if Recall10Name != ""
		(GetFormFromFile(0x1248D, "MarkAndRecall.esp")).SetName(Recall10Name)
		(GetFormFromFile(0x48DD4, "MarkAndRecall.esp")).SetName(Recall10Name)
	endif
	if Recall11Name != ""
		(GetFormFromFile(0x1248E, "MarkAndRecall.esp")).SetName(Recall11Name)
		(GetFormFromFile(0x48DD5, "MarkAndRecall.esp")).SetName(Recall11Name)
	endif
	if Recall12Name != ""
		(GetFormFromFile(0x1248F, "MarkAndRecall.esp")).SetName(Recall12Name)
		(GetFormFromFile(0x48DD6, "MarkAndRecall.esp")).SetName(Recall12Name)
	endif
	if Recall13Name != ""
		(GetFormFromFile(0x12490, "MarkAndRecall.esp")).SetName(Recall13Name)
		(GetFormFromFile(0x48DD7, "MarkAndRecall.esp")).SetName(Recall13Name)
	endif
	if Recall14Name != ""
		(GetFormFromFile(0x12491, "MarkAndRecall.esp")).SetName(Recall14Name)
		(GetFormFromFile(0x48DD8, "MarkAndRecall.esp")).SetName(Recall14Name)
	endif
	if Recall15Name != ""
		(GetFormFromFile(0x12492, "MarkAndRecall.esp")).SetName(Recall15Name)
		(GetFormFromFile(0x48DD9, "MarkAndRecall.esp")).SetName(Recall15Name)
	endif
	if Recall16Name != ""
		(GetFormFromFile(0x12493, "MarkAndRecall.esp")).SetName(Recall16Name)
		(GetFormFromFile(0x48DDA, "MarkAndRecall.esp")).SetName(Recall16Name)
	endif
	return true
endFunction

Bool function SaveUserSettingsPapyrus()
	;====================================
	if (ConfigMCM.OldVersion != "")
		ConfigMCM.OldVersion = ConfigMCM.Version
		jsonutil.SetPathStringValue(settings_path, "OldVersion", ConfigMCM.OldVersion)
	endif
	;====================================
	jsonutil.SetPathIntValue(settings_path, "bEnabled", bEnabled as int)
	jsonutil.SetPathIntValue(settings_path, "IsDebugMode", IsDebugMode as int)
	jsonutil.SetPathIntValue(settings_path, "IsAllowed", IsAllowed as int)
	jsonutil.SetPathIntValue(settings_path, "IsClassicMode", IsClassicMode as int)
	jsonutil.SetPathIntValue(settings_path, "CanCityPortal", bCanCityPortal as int)
	jsonutil.SetPathIntValue(settings_path, "CheckingNames", bCheckingNames as int)
	;====================================
	If(IsAllowed == true)
		If ((GetFormFromFile(0x1B118, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_1 = (GetFormFromFile(0x1B118, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B12E, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_2 = (GetFormFromFile(0x1B12E, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B12F, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_3 = (GetFormFromFile(0x1B12F, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B130, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_4 = (GetFormFromFile(0x1B130, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B131, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_5 = (GetFormFromFile(0x1B131, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B132, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_6 = (GetFormFromFile(0x1B132, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B133, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_7 = (GetFormFromFile(0x1B133, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B134, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_8 = (GetFormFromFile(0x1B134, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B135, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_9 = (GetFormFromFile(0x1B135, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B136, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_10 = (GetFormFromFile(0x1B136, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B137, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_11 = (GetFormFromFile(0x1B137, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B138, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_12 = (GetFormFromFile(0x1B138, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B139, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_13 = (GetFormFromFile(0x1B139, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B13A, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_14 = (GetFormFromFile(0x1B13A, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B13B, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_15 = (GetFormFromFile(0x1B13B, "MarkAndRecall.esp")).GetName()
		EndIf
		If ((GetFormFromFile(0x1B13C, "MarkAndRecall.esp")).GetName() != "")
			_Cell_Name_16 = (GetFormFromFile(0x1B13C, "MarkAndRecall.esp")).GetName()
		EndIf
		;====================================
		If ((GetFormFromFile(0x1B0FD, "MarkAndRecall.esp")).GetName() != "")
			_fX_1 = ((GetFormFromFile(0x1B0FD, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B0FE, "MarkAndRecall.esp")).GetName() != "")
			_fY_1 = ((GetFormFromFile(0x1B0FE, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B0FF, "MarkAndRecall.esp")).GetName() != "")
			_fZ_1 = ((GetFormFromFile(0x1B0FF, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B100, "MarkAndRecall.esp")).GetName() != "")
			_fX_2 = ((GetFormFromFile(0x1B100, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B101, "MarkAndRecall.esp")).GetName() != "")
			_fY_2 = ((GetFormFromFile(0x1B101, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B102, "MarkAndRecall.esp")).GetName() != "")
			_fZ_2 = ((GetFormFromFile(0x1B102, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B103, "MarkAndRecall.esp")).GetName() != "")
			_fX_3 = ((GetFormFromFile(0x1B103, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B104, "MarkAndRecall.esp")).GetName() != "")
			_fY_3 = ((GetFormFromFile(0x1B104, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B105, "MarkAndRecall.esp")).GetName() != "")
			_fZ_3 = ((GetFormFromFile(0x1B105, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B106, "MarkAndRecall.esp")).GetName() != "")
			_fX_4 = ((GetFormFromFile(0x1B106, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B107, "MarkAndRecall.esp")).GetName() != "")
			_fY_4 = ((GetFormFromFile(0x1B107, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B108, "MarkAndRecall.esp")).GetName() != "")
			_fZ_4 = ((GetFormFromFile(0x1B108, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B109, "MarkAndRecall.esp")).GetName() != "")
			_fX_5 = ((GetFormFromFile(0x1B109, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B10A, "MarkAndRecall.esp")).GetName() != "")
			_fY_5 = ((GetFormFromFile(0x1B10A, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B10B, "MarkAndRecall.esp")).GetName() != "")
			_fZ_5 = ((GetFormFromFile(0x1B10B, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B10C, "MarkAndRecall.esp")).GetName() != "")
			_fX_6 = ((GetFormFromFile(0x1B10C, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B10D, "MarkAndRecall.esp")).GetName() != "")
			_fY_6 = ((GetFormFromFile(0x1B10D, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B10E, "MarkAndRecall.esp")).GetName() != "")
			_fZ_6 = ((GetFormFromFile(0x1B10E, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B10F, "MarkAndRecall.esp")).GetName() != "")
			_fX_7 = ((GetFormFromFile(0x1B10F, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B110, "MarkAndRecall.esp")).GetName() != "")
			_fY_7 = ((GetFormFromFile(0x1B110, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B111, "MarkAndRecall.esp")).GetName() != "")
			_fZ_7 = ((GetFormFromFile(0x1B111, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B112, "MarkAndRecall.esp")).GetName() != "")
			_fX_8 = ((GetFormFromFile(0x1B112, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B113, "MarkAndRecall.esp")).GetName() != "")
			_fY_8 = ((GetFormFromFile(0x1B113, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B114, "MarkAndRecall.esp")).GetName() != "")
			_fZ_8 = ((GetFormFromFile(0x1B114, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B115, "MarkAndRecall.esp")).GetName() != "")
			_fX_9 = ((GetFormFromFile(0x1B115, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B116, "MarkAndRecall.esp")).GetName() != "")
			_fY_9 = ((GetFormFromFile(0x1B116, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B117, "MarkAndRecall.esp")).GetName() != "")
			_fZ_9 = ((GetFormFromFile(0x1B117, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B119, "MarkAndRecall.esp")).GetName() != "")
			_fX_10 = ((GetFormFromFile(0x1B119, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B120, "MarkAndRecall.esp")).GetName() != "")
			_fY_10 = ((GetFormFromFile(0x1B120, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B127, "MarkAndRecall.esp")).GetName() != "")
			_fZ_10 = ((GetFormFromFile(0x1B127, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B11A, "MarkAndRecall.esp")).GetName() != "")
			_fX_11 = ((GetFormFromFile(0x1B11A, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B121, "MarkAndRecall.esp")).GetName() != "")
			_fY_11 = ((GetFormFromFile(0x1B121, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B128, "MarkAndRecall.esp")).GetName() != "")
			_fZ_11 = ((GetFormFromFile(0x1B128, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B11B, "MarkAndRecall.esp")).GetName() != "")
			_fX_12 = ((GetFormFromFile(0x1B11B, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B122, "MarkAndRecall.esp")).GetName() != "")
			_fY_12 = ((GetFormFromFile(0x1B122, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B129, "MarkAndRecall.esp")).GetName() != "")
			_fZ_12 = ((GetFormFromFile(0x1B129, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B11C, "MarkAndRecall.esp")).GetName() != "")
			_fX_13 = ((GetFormFromFile(0x1B11C, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B123, "MarkAndRecall.esp")).GetName() != "")
			_fY_13 = ((GetFormFromFile(0x1B123, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B12A, "MarkAndRecall.esp")).GetName() != "")
			_fZ_13 = ((GetFormFromFile(0x1B12A, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B11D, "MarkAndRecall.esp")).GetName() != "")
			_fX_14 = ((GetFormFromFile(0x1B11D, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B124, "MarkAndRecall.esp")).GetName() != "")
			_fY_14 = ((GetFormFromFile(0x1B124, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B12B, "MarkAndRecall.esp")).GetName() != "")
			_fZ_14 = ((GetFormFromFile(0x1B12B, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B11E, "MarkAndRecall.esp")).GetName() != "")
			_fX_15 = ((GetFormFromFile(0x1B11E, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B125, "MarkAndRecall.esp")).GetName() != "")
			_fY_15 = ((GetFormFromFile(0x1B125, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B12C, "MarkAndRecall.esp")).GetName() != "")
			_fZ_15 = ((GetFormFromFile(0x1B12C, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B11F, "MarkAndRecall.esp")).GetName() != "")
			_fX_16 = ((GetFormFromFile(0x1B11F, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B126, "MarkAndRecall.esp")).GetName() != "")
			_fY_16 = ((GetFormFromFile(0x1B126, "MarkAndRecall.esp")).GetName() as float)
		EndIf
		If ((GetFormFromFile(0x1B12D, "MarkAndRecall.esp")).GetName() != "")
			_fZ_16 = ((GetFormFromFile(0x1B12D, "MarkAndRecall.esp")).GetName() as float)
		EndIf
	EndIf
	;====================================
	If ((GetFormFromFile(0x1B0ED, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet1 = ((GetFormFromFile(0x1B0ED, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0EE, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet2 = ((GetFormFromFile(0x1B0EE, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0EF, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet3 = ((GetFormFromFile(0x1B0EF, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F0, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet4 = ((GetFormFromFile(0x1B0F0, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F1, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet5 = ((GetFormFromFile(0x1B0F1, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F2, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet6 = ((GetFormFromFile(0x1B0F2, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F3, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet7 = ((GetFormFromFile(0x1B0F3, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F4, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet8 = ((GetFormFromFile(0x1B0F4, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F5, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet9 = ((GetFormFromFile(0x1B0F5, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F6, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet10 = ((GetFormFromFile(0x1B0F6, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F7, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet11 = ((GetFormFromFile(0x1B0F7, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F8, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet12 = ((GetFormFromFile(0x1B0F8, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0F9, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet13 = ((GetFormFromFile(0x1B0F9, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0FA, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet14 = ((GetFormFromFile(0x1B0FA, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	If ((GetFormFromFile(0x1B0FB, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet15 = ((GetFormFromFile(0x1B0FB, "MarkAndRecall.esp")).GetName() as int)
	EndIf
	if ((GetFormFromFile(0x1B0FC, "MarkAndRecall.esp")).GetName() != "")
		_IsNameSet16 = ((GetFormFromFile(0x1B0FC, "MarkAndRecall.esp")).GetName() as int)
	endif
	;====================================\
	if ((GetFormFromFile(0x12484, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12484, "MarkAndRecall.esp")).GetName(), _Recall_1_Name) == false)
			_Recall_1_Name = (GetFormFromFile(0x12484, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x12485, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12485, "MarkAndRecall.esp")).GetName(), Recall2Name) == false)
			Recall2Name = (GetFormFromFile(0x12485, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x12486, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12486, "MarkAndRecall.esp")).GetName(), Recall3Name) == false)
			Recall3Name = (GetFormFromFile(0x12486, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x12487, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12487, "MarkAndRecall.esp")).GetName(), Recall4Name) == false)
			Recall4Name = (GetFormFromFile(0x12487, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x12488, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12488, "MarkAndRecall.esp")).GetName(), Recall5Name) == false)
			Recall5Name = (GetFormFromFile(0x12488, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x12489, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12489, "MarkAndRecall.esp")).GetName(), Recall6Name) == false)
			Recall6Name = (GetFormFromFile(0x12489, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x1248A, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x1248A, "MarkAndRecall.esp")).GetName(), Recall7Name) == false)
			Recall7Name = (GetFormFromFile(0x1248A, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x1248B, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x1248B, "MarkAndRecall.esp")).GetName(), Recall8Name) == false)
			Recall8Name = (GetFormFromFile(0x1248B, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x1248C, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x1248C, "MarkAndRecall.esp")).GetName(), Recall9Name) == false)
			Recall9Name = (GetFormFromFile(0x1248C, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x1248D, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x1248D, "MarkAndRecall.esp")).GetName(), Recall10Name) == false)
			Recall10Name = (GetFormFromFile(0x1248D, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x1248E, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x1248E, "MarkAndRecall.esp")).GetName(), Recall11Name) == false)
			Recall11Name = (GetFormFromFile(0x1248E, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x1248F, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x1248F, "MarkAndRecall.esp")).GetName(), Recall12Name) == false)
			Recall12Name = (GetFormFromFile(0x1248F, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x12490, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12490, "MarkAndRecall.esp")).GetName(), Recall13Name) == false)
			Recall13Name = (GetFormFromFile(0x12490, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x12491, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12491, "MarkAndRecall.esp")).GetName(), Recall14Name) == false)
			Recall14Name = (GetFormFromFile(0x12491, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x12492, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12492, "MarkAndRecall.esp")).GetName(), Recall15Name) == false)
			Recall15Name = (GetFormFromFile(0x12492, "MarkAndRecall.esp")).GetName()
		endif
	endif
	if ((GetFormFromFile(0x12493, "MarkAndRecall.esp")).GetName() != "")
		if(bIsIdentical((GetFormFromFile(0x12493, "MarkAndRecall.esp")).GetName(), Recall16Name) == false)
			Recall16Name = (GetFormFromFile(0x12493, "MarkAndRecall.esp")).GetName()
		endif
	endif
	;====================================
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_1", _IsNameSet1)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_2", _IsNameSet2)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_3", _IsNameSet3)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_4", _IsNameSet4)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_5", _IsNameSet5)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_6", _IsNameSet6)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_7", _IsNameSet7)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_8", _IsNameSet8)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_9", _IsNameSet9)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_10", _IsNameSet10)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_11", _IsNameSet11)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_12", _IsNameSet12)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_13", _IsNameSet13)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_14", _IsNameSet14)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_15", _IsNameSet15)
	jsonutil.SetPathIntValue(settings_path, "IsNameSet_16", _IsNameSet16)
	;====================================
	If(IsAllowed == true)
		jsonutil.SetPathFloatValue(settings_path, "_fX_1", _fX_1)
		jsonutil.SetPathFloatValue(settings_path, "_fY_1", _fY_1)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_1", _fZ_1)
		jsonutil.SetPathFloatValue(settings_path, "_fX_2", _fX_2)
		jsonutil.SetPathFloatValue(settings_path, "_fY_2", _fY_2)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_2", _fZ_2)
		jsonutil.SetPathFloatValue(settings_path, "_fX_3", _fX_3)
		jsonutil.SetPathFloatValue(settings_path, "_fY_3", _fY_3)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_3", _fZ_3)
		jsonutil.SetPathFloatValue(settings_path, "_fX_4", _fX_4)
		jsonutil.SetPathFloatValue(settings_path, "_fY_4", _fY_4)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_4", _fZ_4)
		jsonutil.SetPathFloatValue(settings_path, "_fX_5", _fX_5)
		jsonutil.SetPathFloatValue(settings_path, "_fY_5", _fY_5)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_5", _fZ_5)
		jsonutil.SetPathFloatValue(settings_path, "_fX_6", _fX_6)
		jsonutil.SetPathFloatValue(settings_path, "_fY_6", _fY_6)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_6", _fZ_6)
		jsonutil.SetPathFloatValue(settings_path, "_fX_7", _fX_7)
		jsonutil.SetPathFloatValue(settings_path, "_fY_7", _fY_7)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_7", _fZ_7)
		jsonutil.SetPathFloatValue(settings_path, "_fX_8", _fX_8)
		jsonutil.SetPathFloatValue(settings_path, "_fY_8", _fY_8)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_8", _fZ_8)
		jsonutil.SetPathFloatValue(settings_path, "_fX_9", _fX_9)
		jsonutil.SetPathFloatValue(settings_path, "_fY_9", _fY_9)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_9", _fZ_9)
		jsonutil.SetPathFloatValue(settings_path, "_fX_10", _fX_10)
		jsonutil.SetPathFloatValue(settings_path, "_fY_10", _fY_10)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_10", _fZ_10)
		jsonutil.SetPathFloatValue(settings_path, "_fX_11", _fX_11)
		jsonutil.SetPathFloatValue(settings_path, "_fY_11", _fY_11)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_11", _fZ_11)
		jsonutil.SetPathFloatValue(settings_path, "_fX_12", _fX_12)
		jsonutil.SetPathFloatValue(settings_path, "_fY_12", _fY_12)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_12", _fZ_12)
		jsonutil.SetPathFloatValue(settings_path, "_fX_13", _fX_13)
		jsonutil.SetPathFloatValue(settings_path, "_fY_13", _fY_13)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_13", _fZ_13)
		jsonutil.SetPathFloatValue(settings_path, "_fX_14", _fX_14)
		jsonutil.SetPathFloatValue(settings_path, "_fY_14", _fY_14)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_14", _fZ_14)
		jsonutil.SetPathFloatValue(settings_path, "_fX_15", _fX_15)
		jsonutil.SetPathFloatValue(settings_path, "_fY_15", _fY_15)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_15", _fZ_15)
		jsonutil.SetPathFloatValue(settings_path, "_fX_16", _fX_16)
		jsonutil.SetPathFloatValue(settings_path, "_fY_16", _fY_16)
		jsonutil.SetPathFloatValue(settings_path, "_fZ_16", _fZ_16)
		if (_Cell_Name_1 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_1", _Cell_Name_1)
		endif
		if (_Cell_Name_2 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_2", _Cell_Name_2)
		endif
		if (_Cell_Name_3 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_3", _Cell_Name_3)
		endif
		if (_Cell_Name_4 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_4", _Cell_Name_4)
		endif
		if (_Cell_Name_5 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_5", _Cell_Name_5)
		endif
		if (_Cell_Name_6 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_6", _Cell_Name_6)
		endif
		if (_Cell_Name_7 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_7", _Cell_Name_7)
		endif
		if (_Cell_Name_8 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_8", _Cell_Name_8)
		endif
		if (_Cell_Name_9 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_9", _Cell_Name_9)
		endif
		if (_Cell_Name_10 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_10", _Cell_Name_10)
		endif
		if (_Cell_Name_11 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_11", _Cell_Name_11)
		endif
		if (_Cell_Name_12 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_12", _Cell_Name_12)
		endif
		if (_Cell_Name_13 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_13", _Cell_Name_13)
		endif
		if (_Cell_Name_14 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_14", _Cell_Name_14)
		endif
		if (_Cell_Name_15 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_15", _Cell_Name_15)
		endif
		if (_Cell_Name_16 != "")
			jsonutil.SetPathStringValue(settings_path, "_Cell_Name_16", _Cell_Name_16)
		endif
	EndIf
	;====================================
	if (_Recall_1_Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_1_Name", _Recall_1_Name)
	endif
	if (Recall2Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_2_Name", Recall2Name)
	endif
	if (Recall3Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_3_Name", Recall3Name)
	endif
	if (Recall4Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_4_Name", Recall4Name)
	endif
	if (Recall5Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_5_Name", Recall5Name)
	endif
	if (Recall6Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_6_Name", Recall6Name)
	endif
	if (Recall7Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_7_Name", Recall7Name)
	endif
	if (Recall8Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_8_Name", Recall8Name)
	endif
	if (Recall9Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_9_Name", Recall9Name)
	endif
	if (Recall10Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_10_Name", Recall10Name)
	endif
	if (Recall11Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_11_Name", Recall11Name)
	endif
	if (Recall12Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_12_Name", Recall12Name)
	endif
	if (Recall13Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_13_Name", Recall13Name)
	endif
	if (Recall14Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_14_Name", Recall14Name)
	endif
	if (Recall15Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_15_Name", Recall15Name)
	endif
	if (Recall16Name != "")
		jsonutil.SetPathStringValue(settings_path, "Recall_16_Name", Recall16Name)
	endif
	if !jsonutil.Save(settings_path, false)
		Trace("MAR: Error saving user settings.", 0)
		return false
	endIf
	bSaveUserSettings = false
	return true
endFunction

Bool function ClearAlternateRecallNames()
	If(IsAllowed == false)
		(GetFormFromFile(0x1B118, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B12E, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B12F, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B130, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B131, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B132, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B133, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B134, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B135, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B136, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B137, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B138, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B139, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B13A, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B13B, "MarkAndRecall.esp")).SetName("")
		(GetFormFromFile(0x1B13C, "MarkAndRecall.esp")).SetName("")
		;=============================================================================
		_Cell_Name_1 = (GetFormFromFile(0x1B118, "MarkAndRecall.esp")).GetName()
		_Cell_Name_2 = (GetFormFromFile(0x1B12E, "MarkAndRecall.esp")).GetName()
		_Cell_Name_3 = (GetFormFromFile(0x1B12F, "MarkAndRecall.esp")).GetName()
		_Cell_Name_4 = (GetFormFromFile(0x1B130, "MarkAndRecall.esp")).GetName()
		_Cell_Name_5 = (GetFormFromFile(0x1B131, "MarkAndRecall.esp")).GetName()
		_Cell_Name_6 = (GetFormFromFile(0x1B132, "MarkAndRecall.esp")).GetName()
		_Cell_Name_7 = (GetFormFromFile(0x1B133, "MarkAndRecall.esp")).GetName()
		_Cell_Name_8 = (GetFormFromFile(0x1B134, "MarkAndRecall.esp")).GetName()
		_Cell_Name_9 = (GetFormFromFile(0x1B135, "MarkAndRecall.esp")).GetName()
		_Cell_Name_10 = (GetFormFromFile(0x1B136, "MarkAndRecall.esp")).GetName()
		_Cell_Name_11 = (GetFormFromFile(0x1B137, "MarkAndRecall.esp")).GetName()
		_Cell_Name_12 = (GetFormFromFile(0x1B138, "MarkAndRecall.esp")).GetName()
		_Cell_Name_13 = (GetFormFromFile(0x1B139, "MarkAndRecall.esp")).GetName()
		_Cell_Name_14 = (GetFormFromFile(0x1B13A, "MarkAndRecall.esp")).GetName()
		_Cell_Name_15 = (GetFormFromFile(0x1B13B, "MarkAndRecall.esp")).GetName()
		_Cell_Name_16 = (GetFormFromFile(0x1B13C, "MarkAndRecall.esp")).GetName()
		;=============================================================================
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_1", _Cell_Name_1)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_2", _Cell_Name_2)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_3", _Cell_Name_3)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_4", _Cell_Name_4)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_5", _Cell_Name_5)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_6", _Cell_Name_6)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_7", _Cell_Name_7)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_8", _Cell_Name_8)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_9", _Cell_Name_9)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_10", _Cell_Name_10)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_11", _Cell_Name_11)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_12", _Cell_Name_12)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_13", _Cell_Name_13)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_14", _Cell_Name_14)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_15", _Cell_Name_15)
		jsonutil.SetPathStringValue(settings_path, "_Cell_Name_16", _Cell_Name_16)
	EndIf
	;====================================
	if !jsonutil.Save(settings_path, false)
		Trace("MAR: Error saving user settings.", 0)
		return false
	endIf
	return true
endFunction
;/
; Checks to see if the specified objective is displayed
bool Function IsObjectiveDisplayed(int aiObjective) native

Sets the specified objective to completed or not
 SetObjectiveCompleted(int aiObjective, bool abCompleted = true) native

Sets the specified objective to displayed or hidden - if abForce is true, will display the objective even if it has already been displayed
 SetObjectiveDisplayed(int aiObjective, bool abDisplayed = true, bool abForce = false) native

Sets the specified objective to failed or not
 SetObjectiveFailed(int aiObjective, bool abFailed = true) native
/;
Function RecallDisplayed(ObjectReference ORef, int i)
	aORef = new ReferenceAlias[16]
	aORef[1] = Recall1
	aORef[2] = Recall2
	aORef[3] = Recall3
	aORef[4] = Recall4
	aORef[5] = Recall5
	aORef[6] = Recall6
	aORef[7] = Recall7
	aORef[8] = Recall8
	aORef[9] = Recall9
	aORef[10] = Recall10
	aORef[11] = Recall11
	aORef[12] = Recall12
	aORef[13] = Recall13
	aORef[14] = Recall14
	aORef[15] = Recall15
	aORef[16] = Recall16
	If (ORef)
		If (ORef.GetParentCell() != MarkAndRecallScript.IgnoreCell)
			(self.GetNthAlias(i) as ReferenceAlias).GetRef().SetDisplayName(ORef.GetDisplayName(), true)
			If (self.IsObjectiveDisplayed(i) == false)
				self.SetObjectiveDisplayed(i, true, true)
			EndIf
		EndIf
	EndIf
	If(bGetCurrentLanguage() == true)
		Show_Notification("Маркер добавлен на карту.", "#00FF00")
	Else
		Show_Notification("The marker has been added to the map.", "#00FF00")
	EndIf
EndFunction

Function UpdateRecallsNames()
	String RecallName
	String CellName
	ReferenceAlias refAlias
	int iIndex
	sNames = new String[16]
	aORef = new ReferenceAlias[16]
	sNames[1] = Recall1Name
	sNames[2] = Recall2Name
	sNames[3] = Recall3Name
	sNames[4] = Recall4Name
	sNames[5] = Recall5Name
	sNames[6] = Recall6Name
	sNames[7] = Recall7Name
	sNames[8] = Recall8Name
	sNames[9] = Recall9Name
	sNames[10] = Recall10Name
	sNames[11] = Recall11Name
	sNames[12] = Recall12Name
	sNames[13] = Recall13Name
	sNames[14] = Recall14Name
	sNames[15] = Recall15Name
	sNames[16] = Recall16Name
	aORef[1] = Recall1
	aORef[2] = Recall2
	aORef[3] = Recall3
	aORef[4] = Recall4
	aORef[5] = Recall5
	aORef[6] = Recall6
	aORef[7] = Recall7
	aORef[8] = Recall8
	aORef[9] = Recall9
	aORef[10] = Recall10
	aORef[11] = Recall11
	aORef[12] = Recall12
	aORef[13] = Recall13
	aORef[14] = Recall14
	aORef[15] = Recall15
	aORef[16] = Recall16
	iIndex = 1
	while iIndex <= 16;self.GetNumAliases()
		refAlias = self.GetNthAlias(iIndex) as ReferenceAlias
		if refAlias.GetRef() == none
			refAlias.ForceRefTo(aORef[iIndex].GetRef())
			If(bGetCurrentLanguage() == true)
				RecallName = "Пусто"
			Else
				RecallName = "Empty"
			EndIf
			if aORef[iIndex].GetRef() == none
			endif
			if (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 0)
				sCN[iIndex] = aORef[iIndex].GetRef().GetCurrentLocation().GetName()
			ElseIf (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 1)
				sCN[iIndex] = aORef[iIndex].GetRef().GetParentCell().GetName()
			EndIf
			If (GetCellNameIdentical(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex]) == false)
				sNames[iIndex] = GetCellName(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex])
				if sNames[iIndex] == "Mark And Recall Markers Cell"
					sNames[iIndex] = RecallName
				endif
			endif
			(self.GetNthAlias(iIndex) as ReferenceAlias).GetRef().SetDisplayName(sNames[iIndex], true)
			return
		ElseIf (refAlias.GetRef())
			If(bGetCurrentLanguage() == true)
				RecallName = "Пусто"
			Else
				RecallName = "Empty"
			EndIf
			if (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 0)
				sCN[iIndex] = aORef[iIndex].GetRef().GetCurrentLocation().GetName()
			ElseIf (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 1)
				sCN[iIndex] = aORef[iIndex].GetRef().GetParentCell().GetName()
			EndIf
			If (GetCellNameIdentical(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex]) == false)
				sNames[iIndex] = GetCellName(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex])
				if sNames[iIndex] == "Mark And Recall Markers Cell"
					sNames[iIndex] = RecallName
				endif
			endif
			(self.GetNthAlias(iIndex) as ReferenceAlias).GetRef().SetDisplayName(sNames[iIndex], true)
		endIf
		Recall1Name = sNames[1]
		Recall2Name = sNames[2]
		Recall3Name = sNames[3]
		Recall4Name = sNames[4]
		Recall5Name = sNames[5]
		Recall6Name = sNames[6]
		Recall7Name = sNames[7]
		Recall8Name = sNames[8]
		Recall9Name = sNames[9]
		Recall10Name = sNames[10]
		Recall11Name = sNames[11]
		Recall12Name = sNames[12]
		Recall13Name = sNames[13]
		Recall14Name = sNames[14]
		Recall15Name = sNames[15]
		Recall16Name = sNames[16]
		iIndex += 1
	endWhile
EndFunction

Function RecallsDisplayed()
	String RecallName
	String CellName
	ReferenceAlias refAlias
	int iIndex
	sNames = new String[16]
	aORef = new ReferenceAlias[16]
	sNames[1] = Recall1Name
	sNames[2] = Recall2Name
	sNames[3] = Recall3Name
	sNames[4] = Recall4Name
	sNames[5] = Recall5Name
	sNames[6] = Recall6Name
	sNames[7] = Recall7Name
	sNames[8] = Recall8Name
	sNames[9] = Recall9Name
	sNames[10] = Recall10Name
	sNames[11] = Recall11Name
	sNames[12] = Recall12Name
	sNames[13] = Recall13Name
	sNames[14] = Recall14Name
	sNames[15] = Recall15Name
	sNames[16] = Recall16Name
	aORef[1] = Recall1
	aORef[2] = Recall2
	aORef[3] = Recall3
	aORef[4] = Recall4
	aORef[5] = Recall5
	aORef[6] = Recall6
	aORef[7] = Recall7
	aORef[8] = Recall8
	aORef[9] = Recall9
	aORef[10] = Recall10
	aORef[11] = Recall11
	aORef[12] = Recall12
	aORef[13] = Recall13
	aORef[14] = Recall14
	aORef[15] = Recall15
	aORef[16] = Recall16
	iIndex = 1
	while iIndex <= 16;self.GetNumAliases()
		refAlias = self.GetNthAlias(iIndex) as ReferenceAlias
		if refAlias.GetRef() == none
			refAlias.ForceRefTo(aORef[iIndex].GetRef())
			If(bGetCurrentLanguage() == true)
				RecallName = "Пусто"
			Else
				RecallName = "Empty"
			EndIf
			if aORef[iIndex].GetRef() == none
				;aORef[iIndex].ForceRefTo(aORef[iIndex].GetRef())
			endif
			if (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 0)
				sCN[iIndex] = aORef[iIndex].GetRef().GetCurrentLocation().GetName()
			ElseIf (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 1)
				sCN[iIndex] = aORef[iIndex].GetRef().GetParentCell().GetName()
			EndIf
			If (GetCellNameIdentical(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex]) == false)
				sNames[iIndex] = GetCellName(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex])
				if sNames[iIndex] == "Mark And Recall Markers Cell"
					sNames[iIndex] = RecallName
				endif
			endif
			(self.GetNthAlias(iIndex) as ReferenceAlias).GetRef().SetDisplayName(sNames[iIndex], true)
			if((self.GetNthAlias(iIndex) as ReferenceAlias).GetRef().GetDisplayName() != RecallName)
				If (self.IsObjectiveDisplayed(iIndex) == false)
					self.SetObjectiveDisplayed(iIndex, true, true)
					;DebugNotification("aORef Name if null: " + " " + iIndex + " " + (self.GetNthAlias(iIndex) as ReferenceAlias).GetRef().GetDisplayName())
				EndIf
			endif
			return
		ElseIf (refAlias.GetRef())
			If(bGetCurrentLanguage() == true)
				RecallName = "Пусто"
			Else
				RecallName = "Empty"
			EndIf
			if (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 0)
				sCN[iIndex] = aORef[iIndex].GetRef().GetCurrentLocation().GetName()
				;DebugNotification("GetCurrentLocation: " + " " + iIndex + " " + aORef[iIndex].GetRef().GetCurrentLocation().GetName())
			ElseIf (aORef[iIndex].GetRef().GetParentCell().IsInterior() == 1)
				sCN[iIndex] = aORef[iIndex].GetRef().GetParentCell().GetName()
				;DebugNotification("GetParentCell: " + " " + iIndex + " " + aORef[iIndex].GetRef().GetParentCell().GetName())
			EndIf
			If (GetCellNameIdentical(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex]) == false)
				sNames[iIndex] = GetCellName(aORef[iIndex].GetRef(), sCN[iIndex], sNames[iIndex])
				if sNames[iIndex] == "Mark And Recall Markers Cell"
					sNames[iIndex] = RecallName
					;DebugNotification("sNames: " + " " + iIndex + " " + sNames[iIndex])
				endif
			endif
			(self.GetNthAlias(iIndex) as ReferenceAlias).GetRef().SetDisplayName(sNames[iIndex], true)
			if((self.GetNthAlias(iIndex) as ReferenceAlias).GetRef().GetDisplayName() != RecallName)
				If (self.IsObjectiveDisplayed(iIndex) == false)
					self.SetObjectiveDisplayed(iIndex, true, true)
					;If(bGetCurrentLanguage() == true)
					;	Show_Notification("Маркер добавлен на карту.", "#00FF00")
					;Else
					;	Show_Notification("The marker has been added to the map.", "#00FF00")
					;EndIf
					;DebugNotification("aORef Name: " + " " + iIndex + " " + (self.GetNthAlias(iIndex) as ReferenceAlias).GetRef().GetDisplayName())
				EndIf
			endif
		endIf
		Recall1Name = sNames[1]
		Recall2Name = sNames[2]
		Recall3Name = sNames[3]
		Recall4Name = sNames[4]
		Recall5Name = sNames[5]
		Recall6Name = sNames[6]
		Recall7Name = sNames[7]
		Recall8Name = sNames[8]
		Recall9Name = sNames[9]
		Recall10Name = sNames[10]
		Recall11Name = sNames[11]
		Recall12Name = sNames[12]
		Recall13Name = sNames[13]
		Recall14Name = sNames[14]
		Recall15Name = sNames[15]
		Recall16Name = sNames[16]
		iIndex += 1
	endWhile
EndFunction

Function RecallCompleted(ObjectReference ORef, int i)
	If (ORef)
		If (ORef.GetParentCell() != MarkAndRecallScript.IgnoreCell)
			self.SetObjectiveCompleted(i, true)
		EndIf
	EndIf
EndFunction

				;(self.GetNthAlias(iIndex) as ReferenceAlias).GetRef().SetDisplayName(ORef.GetDisplayName(), true)
	
;/
Function RecallDisplayed(ObjectReference ORef, int i)
	ReferenceAlias refAlias
	int iIndex
	If (ORef)
		If (ORef.GetParentCell() != MarkAndRecallScript.IgnoreCell)
			iIndex = 1
			while iIndex < self.GetNumAliases()
				refAlias = self.GetNthAlias(iIndex) as ReferenceAlias
				if refAlias.GetRef() == none
					refAlias.ForceRefTo(ORef)
					refAlias.GetRef().SetDisplayName(ORef.GetDisplayName(), true)
					self.SetObjectiveDisplayed(iIndex, true, true)
					Notification("Маркер добавлен на карту")
					return
				ElseIf refAlias.GetRef()
					refAlias.GetRef().SetDisplayName(ORef.GetDisplayName(), true)
					DebugNotification("GetDisplayName refAlias " + refAlias.GetRef().GetDisplayName
					self.SetObjectiveDisplayed(iIndex, true, true)
					Notification("Маркер добавлен на карту")
				endIf
				iIndex += 1
			endWhile
		EndIf
	EndIf
EndFunction

https://www.creationkit.com/index.php?title=OnInit

Тут внизу написано.

Опубликовано (изменено)

И снова здравствуйте.

 

Почему когда добавляю новые формы в FormList, старые пропадают, не помню уже все или только часть, вчера в игре тестировал, сегодня ещё нет.

Вчера ранее добавленный в список COCMarkerHeading после перемещения в другую область скайрима и нового сканирования, пропадает из списка, хотя я так понимаю список должен хранить ранее добавленные формы...

Вот функция сканирования COCMarkerHeading в радиусе и добавления в форм лист.

ScanCOCMH

Function ScanCOCMH()
	; MarkAndRecalCOCAliaslQuest
	; MARCOCAliaslScript
	; CC816
	; MarkAndRecalCOCList
	; CC817
	MarkAndRecalCOCList = ((GetFormFromFile(0xCC817, "MarkAndRecall.esp")) as FormList)
	Quest MarkAndRecalCOCAliaslQuest = ((GetFormFromFile(0xCC816, "MarkAndRecall.esp")) as Quest)
	ReferenceAlias[] refAlias
	int[] _iRefID
	int iCOC = 0
	int iIndex = 0
	;Scan
		;GetPlayer().MoveTo( GetFormEx(iRefID) as ObjectReference )
	;while iIndex <= iCOCMaxArrayIndex
	while iIndex <= iCOCMaxArrayIndex
		iCOC = (iIndex - 1)
		TempCOCMH[iIndex] = PO3_SKSEFunctions.FindAllReferencesOfType(GetPlayer(), GetFormFromFile(0x000032, "Skyrim.esm"), 10000000000000000000000000000000000000000000000000)[iIndex]
		If ((TempCOCMH[iIndex].GetFormID() as int) != (TempCOCMH[iCOC].GetFormID() as int))
			;_iRefID[iIndex] = PO3_SKSEFunctions.IntToString(GetFormEx(TempCOCMH[iIndex].GetFormID()).GetFormID(), false) as int
			;Notification("_iRefID: " + _iRefID[iIndex])
			;Notification("GetFormID: " + GetForm(_iRefID[iIndex]).GetFormID())
			If(TempCOCMH[iIndex].GetFormID() != 0)
				If (!MarkAndRecalCOCList.HasForm(GetFormEx(TempCOCMH[iIndex].GetFormID()) as ObjectReference))
					MarkAndRecalCOCList.AddForm(GetFormEx(TempCOCMH[iIndex].GetFormID()) as ObjectReference)
				EndIf
				If (MarkAndRecalCOCList.GetAt(iIndex).GetFormID() == 0)
					MarkAndRecalCOCList.RemoveAddedForm(MarkAndRecalCOCList.GetAt(iIndex))
				EndIf
			EndIf
		EndIf
		If ((TempCOCMH[iIndex].GetFormID() as int) > (TempCOCMH[iCOC].GetFormID() as int))
			;Notification("TempCOCMH 1 : " + TempCOCMH[iIndex].GetFormID())
		ElseIf ((TempCOCMH[iIndex].GetFormID() as int) < (TempCOCMH[iCOC].GetFormID() as int))
			;Notification("TempCOCMH 2 : " + TempCOCMH[iIndex].GetFormID())
		EndIf
		iIndex += 1
	endWhile
	; GetSize()
	; GetAt(int aiIndex)
	iIndex = 0
	while iIndex <= MarkAndRecalCOCList.GetSize()
		;refAlias[iIndex] = MarkAndRecalCOCAliaslQuest.GetNthAlias(iIndex) as ReferenceAlias
		If((MarkAndRecalCOCList.GetAt(iIndex) as ObjectReference).GetFormID() != 0)
			ScanedCOCMH[iIndex] = ((GetFormEx(MarkAndRecalCOCList.GetAt(iIndex).GetFormID()) as ObjectReference))
			;ScanedCOCMH[iIndex] = (MarkAndRecalCOCList.GetAt(iIndex) as ObjectReference)
		EndIf
		;Notification("GetAt: " + (MarkAndRecalCOCList.GetAt(iIndex) as ObjectReference).GetFormID())
		;Notification("ScanedCOCMH: " + ScanedCOCMH[iIndex].GetFormID())
		iIndex += 1
	endWhile
	Show_Notification("Сканирование завершено. Найдено: "+MarkAndRecalCOCList.GetSize(), "#00ff00")
EndFunction 

 

И Вот кусок кода отвечающий за вывод списка:

MaimMenuMarkAndRecall

	while iIndex <= MarkAndRecalCOCList.GetSize()
		iCOC = (iIndex - 1)
		;Notification("ScanedCOCMH "+iIndex+": " + ScanedCOCMH[iIndex].GetFormID())
		;Notification("GetFormEx: "+iIndex+": " + GetFormEx(ScanedCOCMH[iIndex].GetFormID()))
		;Notification("GetAt "+iIndex+": " + (MarkAndRecalCOCList.GetAt(iIndex) as ObjectReference).GetFormID())
		If(ScanedCOCMH[iIndex].GetFormID() != 0)
			if (ScanedCOCMH[iIndex].GetParentCell().IsInterior() == 0)
				if ((ScanedCOCMH[iIndex].GetParentCell().GetName() == "") && (ScanedCOCMH[iIndex].GetCurrentLocation().GetName() != ""))
					sCN[iIndex] = ScanedCOCMH[iIndex].GetCurrentLocation().GetName()
					((Self as Form) as uilistmenu).AddEntryItem(" "+(iIndex + 1)+ " "+sCN[iIndex]+" (Снаружи)", 81, -1, false); 81
					;If ((ScanedCOCMH[iIndex].GetFormID() as int) != (ScanedCOCMH[iCOC].GetFormID() as int))
					;	((Self as Form) as uilistmenu).AddEntryItem(" "+(iIndex + 1)+ " "+sCN[iIndex]+" (Снаружи)", 81, -1, false); 81
					;EndIf
				ElseIf ((ScanedCOCMH[iIndex].GetCurrentLocation().GetName() == "") && (ScanedCOCMH[iIndex].GetParentCell().GetName() == ""))
					Int xcell = math.floor(getplayer().getpositionX() / 4096 as Float)
					Int ycell = math.floor(getplayer().getpositionY() / 4096 as Float)
					Int zcell = math.floor(getplayer().getpositionZ())
					String WorldSpaceName
					If(bGetCurrentLanguage() == true)
						WorldSpaceName = "Тамриэль"
					Else
						WorldSpaceName = "Tamriel"
					EndIf
					sCN[iIndex] = (WorldSpaceName + " " + xcell as String + " , " + ycell as String)
					((Self as Form) as uilistmenu).AddEntryItem(" "+(iIndex + 1)+ " "+sCN[iIndex], 81, -1, false); 
					;If ((ScanedCOCMH[iIndex].GetFormID() as int) != (ScanedCOCMH[iCOC].GetFormID() as int))
					;	((Self as Form) as uilistmenu).AddEntryItem(" "+(iIndex + 1)+ " "+sCN[iIndex], 81, -1, false); 
					;EndIf
				Endif
			ElseIf (ScanedCOCMH[iIndex].GetParentCell().IsInterior() == 1)
				If (ScanedCOCMH[iIndex].GetParentCell().GetName() != "")
					sCN[iIndex] = ScanedCOCMH[iIndex].GetParentCell().GetName()
					((Self as Form) as uilistmenu).AddEntryItem(" "+(iIndex + 1)+ " "+sCN[iIndex], 81, -1, false); 
					;If ((ScanedCOCMH[iIndex].GetFormID() as int) != (ScanedCOCMH[iCOC].GetFormID() as int))
					;EndIf
				Endif
			EndIf
		EndIf
		iIndex += 1
	endWhile 

Изменено пользователем aaa112aaa
Опубликовано
03.11.2021 03:36:01, aaa112aaa сказал(-а):

И снова здравствуйте.

 

Почему когда добавляю новые формы в FormList, старые пропадают, не помню уже все или только часть, вчера в игре тестировал, сегодня ещё нет.

Вчера ранее добавленный в список COCMarkerHeading после перемещения в другую область скайрима и нового сканирования, пропадает из списка, хотя я так понимаю список должен хранить ранее добавленные формы...

Я понял почему. Он не пропадал, просто почему-то по скайриму натыканы дополнительно маркеры с FormID = 20 и поэтому, он в списке, но название другое.

Опубликовано

И снова здравствуйте.

 

есть несколько переменных, но сейчас проблема с этой - ObjectReference[] Property Recall  Auto 

 

Объявлена, потом идёт вызов функции, в которой переменным присваиваются значения, краткий кусок кода: 


Function PropertiesInit()
	Localisation()
	If(bOnly16 == true)
		iMaxArrayIndex = 15
		sCN = new String[16]
		Recall = new ObjectReference[16]
		RecallNameList = new String[16]
	Else
		iMaxArrayIndex = 31
		sCN = new String[32]
		Recall = new ObjectReference[32]
		RecallNameList = new String[32]
	EndIf
	self.SetRecall()

И далее начинает работу SetRecall() и тут проблема, до индекса 16 ObjectReference не равно None, с индекса 16 по 31 все None, вот сама функция:


function SetRecall()
	Int t = 0
	while t <= iMaxArrayIndex
		Recall[t] = (self.GetNthAlias(t) as ReferenceAlias).GetRef()
		;Notification("Recall "+Recall[t])
		t += 1
	endWhile
endFunction

хотя в квесте всё нормально...

703aab2287c3640e061de8883b5f7c47.jpg.jpeg

Опубликовано
07.11.2021 01:46:12, aaa112aaa сказал(-а):
хотя в квесте всё нормально...

А переменная там у тебя правильно установлена, чтоб скрипт по 32 позициям проходил?

Опубликовано
07.11.2021 18:02:15, Azazellz сказал(-а):

А переменная там у тебя правильно установлена, чтоб скрипт по 32 позициям проходил?

Ну я же написал что, да - iMaxArrayIndex = 31

Опубликовано

И ещё кстати, а есть кто разбирается в диалогах, в какую мне это тему на форуме? создал нпс, три фракции 2 креста и диалоги, ток вот диалоги у нпс не отображаются, даже если нет условий для показа топика.

Опубликовано
08.11.2021 16:01:40, aaa112aaa сказал(-а):

Ну я же написал что, да - iMaxArrayIndex = 31

Два разных массива сделай, для 32 и 16 переменных.

 

08.11.2021 18:32:10, aaa112aaa сказал(-а):
И ещё кстати, а есть кто разбирается в диалогах, в какую мне это тему на форуме? создал нпс, три фракции 2 креста и диалоги, ток вот диалоги у нпс не отображаются, даже если нет условий для показа топика.

Сюда.

  • 3 месяца спустя...
Опубликовано (изменено)

Привет, друзья. 

У меня возникла очень странная проблема со скриптом Manual Light Switch, и я не нашла подобных обсуждений на форумах. 

 

 

Вот этот скрипт
Manual Light Switch
ScriptName ManualLightSwitch extends ObjectReference
{Controls a set of lights with a master enable parent
marker (EnableMarker) and a switch with this script
attached to turn on and off when the switch is activated}

ObjectReference Property EnableMarker auto
{The marker set as the enable parent of all the lights}

Event OnInit()

If (EnableMarker.IsDisabled())
GoToState("LightsOff")
Else
GoToState("LightsOn")
EndIf

EndEvent

State LightsOff

Event OnBeginState()
EnableMarker.Disable()
EndEvent

Event OnActivate(ObjectReference akActionRef)
GoToState("LightsOn")
EndEvent

EndState

State LightsOn

Event OnBeginState()
EnableMarker.Enable()
EndEvent

Event OnActivate(ObjectReference akActionRef)
GoToState("LightsOff")
EndEvent

EndState

 

Мне нужно создать источник света, которым можно управлять вручную, т.е. изначально это были сухие дрова в камине, которые при активации меняли модель на горящие + включался заранее задисабленный источник света, ну, как обычно это делают. 

 

С самим скриптом все нормально при компиляции. Сложность возникает при работе со ссылкой на источник, когда нужно вручную ее указать в поле EnableMarker/Object Reference. (это поле появляется автоматически после успешной компиляции скрипта и его нужно только правильно настроить). Т.о. я выбираю в окне редактора свой источник света, сохраняю объект, но ничего не происходит. Смотрите скриншот. 

 

9d154f77136d.png.png

 

16aeb0c38f2f.png.png

 

Т.е мы видим, что во вкладке Linked Ref ничего не отображается, хотя объект прикреплен. В игре ничего не происходит. При воздействии на активатор, свет не загорается, и модель горящего огня не появляется. Визуально не отображается желтая ниточка связки с объектом, которую мы обычно видим, когда используем вкладку Linked Ref и привязываем объекты к друг другу. (Не обращайте внимания на другие модели огня и лампы, я просто пробую разные варианты моделей для этого скрипта). Суть же одна - это объект-активатор+объект горения+источник света. 

 

Это простой скрипт, но я застряла. :( 

В чем может быть проблема? 

Я делаю все по инструкции от уважаемого GKalian вот отсюда https://youtu.be/Esd1tguUVE0

В других мануалах тоже ничего особенного на эту тему нет, никто не знает, что это может быть за проблема. 

Я все внимательно проверила уже раз 150, но ничего особенного не нахожу...

У вас есть какие-нибудь идеи?...

Изменено пользователем Bosmer
Опубликовано
14.02.2022 09:45:39, Bosmer сказал(-а):

Привет, друзья. 

У меня возникла очень странная проблема со скриптом Manual Light Switch, и я не нашла подобных обсуждений на форумах.

 

При заполнении Property объектом А в скрипте на объекте Б, объект А и не должен быть показан в Linked Ref, этот раздел сделан для другого. В видео Кальяна используется раздел Enable Parent, который работает по принципу "дерева" - при включении одного объекта включаются все зависимые, при выключении - выключаются.

 

То есть вы прикрепляете скрипт к объекту, в Property указываете какой-нибудь невидимый маркер, далее указываете этот маркер во всех зависимых объектах. В горящем костре и источнике света он будет указан как обычно, а для потухшего костра вам нужно будет поставить галочку "Set Enable State to Opposite of Parent", чтобы при отключении маркера этот потухший костёр включался.

 

Если вы не уверены, срабатывает ли активация и правильно ли заполнен Property, вы можете использовать функцию Debug.MessageBox, чтобы вывести нужную информацию. Примерно вот так:

Event OnActivate(ObjectReference akActionRef)
    Debug.MessageBox("Activation in LightsOff state fired, EnableMarker is " + EnableMarker as String + ", going to state LightsOn")
    GoToState("LightsOn")
EndEvent

Подобные сообщения можно разместить тут и там, а когда вас всё устроит - убрать или закомментировать.

  • Нравится 3

————————————
don't forget your falls
————————————

Опубликовано
14.02.2022 11:29:20, Meridiano сказал(-а):
При заполнении Property объектом А в скрипте на объекте Б, объект А и не должен быть показан в Linked Ref, этот раздел сделан для другого.

 

Здравствуйте, и большое спасибо Вам за быстрый ответ!

 

На самом деле меня сбил с толку мод Fort Highwood от Ithlia, где были реализованы подобные лампы с огнем. Я разобрала эти лампы в конструкторе, чтобы посмотреть как объекты взаимодействуют друг с другом, и там как раз было задействовано поле Linked Ref в отношении источника света, что и привело меня к выводу, что оно должно быть заполнено при работе со скриптом. К сожалению посмотреть ресурс скрипта не удалось, т.к. автор не предоставил это. Но визуально это напоминало скрипт Manual Light Switch. 

 

Моя проблема решилась! Но она решилась совершенно неожиданным образом. Я не знаю, будет ли эта информация полезной для всех или это только мой частный случай с моим загадочным модом, но не все модели игры, которые вы захотите использовать в качестве активаторов подходят для работы с этим скриптом. Например, модель сухих дров (Static\FireplaceWood01Off0000) вообще не работает в кач-ве активатора, а пещерная лампа (Static\CaveLamp01, которая была использована у Ithlia) хоть и может гипотетически работать как активатор, но скрипт на ней не срабатывает. Мое решение было в том, чтобы заменить модель активатора на модель маркера с невидимой коллизией (Markers\Misc\InvisibleCollision01). И все заработало! 

 

04ae6fb2aeb4.jpg.jpeg

 

И еще, может быть кому-то будет полезно, если Вы захотите делать такой же скрипт, то не нужно добавлять в сам активатор звук горения. Он не исчезает автоматически после того, как Вы "потушите" камин. Лучше это тоже реализовать через скрипт. 

Опубликовано
14.02.2022 13:19:45, Bosmer сказал(-а):

не все модели игры, которые вы захотите использовать в качестве активаторов подходят для работы с этим скриптом

 

Это из-за того, что не все модели имеют коллизии - физические границы, за которые ГГ может "уцепиться" в игре. Действительно, модель FireplaceWood01Off.nif не имеет коллизий, а InvisibleCollision01.nif имеет. Заметьте, что создание коллизии произвольной формы через готовую модель сделать нельзя, как и "прозрачную" для перемещения коллизию только для активации. Это решается созданием Primitive, объекта простой формы, который в игре может быть "твёрдым" или "прозрачным" и по желанию - активируемым. Вы сможете придать ему форму сферы и накрыть им костёр так, чтобы он визуально совпадал с границами костра.

  • Нравится 2

————————————
don't forget your falls
————————————

Опубликовано
14.02.2022 14:41:28, Meridiano сказал(-а):

Это из-за того, что не все модели имеют коллизии - физические границы, за которые ГГ может "уцепиться" в игре.


Большое Вам спасибо за ценную информацию, Вы мне очень помогли!
Опубликовано
Привет, друзья! Мне снова нужен совет и помощь в поиске или составлении скрипта. Подскажите, пожалуйста, какой скрипт из существующих подойдёт для такого алгоритма.
1. Активация объекта
2. Проверка скриптом у игрока наличия/отсутствия в инвентаре определенных предметов.
3. Изъятие этих предметов, если они есть(1) или сообщение о том, что их нет. (0)
4. 1.Таймер и сообщение (Типа подождите несколько дней)
5. Получение игроком указанных предметов после окончания срока, установленного в скрипте.
6. При воздействии на активатор раньше срока сообщение, "подождите ещё столько-то времени".
Смысл скрипта - растянутый во времени крафт. Т.е. чтобы получить предметы не сразу, а только спустя какое-то время. Подобный скрипт есть в модах у Кораны для Обливион. Может что-то такое уже есть и для Скайрима, но я могу знать все моды, мне ещё такие не попадались. :(
  • 3 недели спустя...
Опубликовано (изменено)

Народ такой вопрос. Я сделал свой мод на изменения перков кузнечного дела и вот хочу сделать чтоб по мимо уровня владения для открытия перка было условие затраты денег на открытие, я не как не  могу подобрать нужное условие для этого. Подскажите пожалуйста.

https://prnt.sc/DAgefHxcWsDa

Изменено пользователем Dakost
  • 2 недели спустя...

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...