Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {\rtf1\ansi\deff0\nouicompat{\fonttbl{\f0\fnil\fcharset0 Calibri;}}
- {\*\generator Riched20 10.0.18362}\viewkind4\uc1
- \pard\sa200\sl276\slmult1\f0\fs22\lang9 -- kanaBank - Release 3 - For tes3mp 0.7-alpha\par
- -- Implements a banking system for players to utilise\par
- \par
- --[[ INSTALLATION\par
- = GENERAL =\par
- a) Save this file as "kanaBank.lua" in server/scripts/custom\par
- \par
- = IN customScripts.LUA =\par
- a) kanaBank = require("custom.kanaBank")\par
- ]]\par
- \par
- local scriptConfig = \{\}\par
- \par
- scriptConfig.useBankerRank = 0 -- The staffRank required to use a bank via bankers\par
- scriptConfig.useBankCommandRank = 0 -- The staffRank required to use the /bank command\par
- scriptConfig.openOtherPlayersBankRank = 1 -- The staffRank required to use the /bank playername command\par
- \par
- -- Any object that's identified as a "banker" will open a player's bank on activation\par
- -- Provided the player meets the useBankerRank requirement. This /should/ override the default activation\par
- scriptConfig.bankerRefIds = \{"m'aiq",\}\par
- scriptConfig.bankerUniqueIndexes = \{\}\par
- \par
- -- Setting the following to true will have the script block any attempts at deleting a banker/bank storage item respectively\par
- -- Note that having them false doesn't guarantee attempts will always be successful - other things might also block its deletion.\par
- scriptConfig.denyBankerDelete = true\par
- scriptConfig.denyBankStorageDelete = true\par
- \par
- scriptConfig.baseObjectRefId = "dead rat"\par
- scriptConfig.baseObjectRecordType = "creature"\par
- scriptConfig.storageCell = "Clutter Warehouse - Everything Must Go!" -- The cell that will contain all the player's bank containers. Use a cell that can't be visited (like a debug cell). If running a cell resetting script, ensure the provided cell is exempt from resetting (if using Atkana's CellReset, this'll automatically be registered)!\par
- \par
- scriptConfig.logging = true\par
- scriptConfig.debug = false\par
- \par
- scriptConfig.recordRefId = "kanabankcontainer" -- Used internally for this script's base permanent record id. There should be no reason you'd need to change it\par
- \par
- local lang = \{\par
- \tab ["openOtherPlayerBankFailNoRank"] = "You don't have the required staff rank to open other player's banks.",\par
- \tab ["openOtherPlayerBankFailNoPlayer"] = "Couldn't find a bank for the player %name.",\par
- \tab ["useBankCommandFailNoRank"] = "You don't have the required staff rank to use the /bank command.",\par
- \tab ["useBankerFailNoRank"] = "You don't have the required staff rank to use bankers.",\par
- \tab\par
- \tab ["baseBankContainerDisplayName"] = "Bank Storage",\par
- \tab ["yourStorageName" ] = "Your Bank Storage",\par
- \tab ["otherPlayerStorageName"] = "%name's Bank Storage",\par
- \}\par
- \par
- ---------------------------------------------------------------------------------------\par
- \par
- local Methods = \{\}\par
- \par
- local scriptData = \{links = \{\}\}\par
- local scriptTemp = \{bankerRefIds = \{\}, bankerUniqueIndexes = \{\}\}\par
- \par
- Methods.GetLangText = function(key, data)\par
- \tab local function replacer(wildcard)\par
- \tab\tab if data[wildcard] then\par
- \tab\tab\tab return data[wildcard]\par
- \tab\tab else\par
- \tab\tab\tab return ""\par
- \tab\tab end\par
- \tab end\par
- \tab\par
- \tab local text = lang[key] or ""\par
- \tab text = text:gsub("%%(%w+)", replacer)\par
- \tab\par
- \tab return text\par
- end\par
- \par
- Methods.Save = function()\par
- \tab jsonInterface.save("custom/kanaBank.json", scriptData)\par
- end\par
- \par
- Methods.Load = function()\par
- \tab local loadedData = jsonInterface.load("custom/kanaBank.json")\par
- \tab\par
- \tab if loadedData then\par
- \tab\tab scriptData = loadedData\par
- \tab else\par
- \tab\tab -- There wasn't a json saved for this script, so we'll make one\par
- \tab\tab -- (We'll be using the default scriptData as is)\par
- \tab\tab Methods.Save()\par
- \tab end\par
- end\par
- \par
- local function doLog(message)\par
- \tab if scriptConfig.logging then\par
- \tab\tab tes3mp.LogMessage(1, "[kanaBank] - " .. message)\par
- \tab end\par
- end\par
- \par
- local function doDebug(message)\par
- \tab if scriptConfig.debug then\par
- \tab\tab tes3mp.LogMessage(1, "[kanaBank DEBUG] - " .. message)\par
- \tab end\par
- end\par
- \par
- ---------------------------------------------------------------------------------------\par
- local function getName(pid)\par
- \tab if Players[pid] ~= nil and Players[pid]:IsLoggedIn() then\par
- \tab\tab return Players[pid].accountName\par
- \tab end\par
- end\par
- \par
- -- Quick lazy function to message player so I don't have to type out the whole function + remember to add a newline to the end :P\par
- local function msg(pid, message)\par
- \tab tes3mp.SendMessage(pid, message .. "\\n")\par
- end\par
- \par
- -- Technically I could just always do logicHandler.LoadCell(scriptConfig.storageCell) and it'd accomplish the same thing...\par
- local function ensureCellLoaded()\par
- \tab if LoadedCells[scriptConfig.storageCell] == nil then\par
- \tab\tab logicHandler.LoadCell(scriptConfig.storageCell)\par
- \tab end\par
- end\par
- \par
- -- Temporarily changes the name of all instances of an object of the given refId for a player\par
- -- The refId to change need not be an actual custom record! Any refId works fine.\par
- -- Need to provide the recordType of the record\par
- Methods.RenameRecordForPid = function(pid, newName, refId, recordType)\par
- \tab tes3mp.ClearRecords()\par
- \tab tes3mp.SetRecordType(enumerations.recordType[string.upper(recordType)])\par
- \tab\par
- \tab packetBuilder.AddRecordByType(refId, \{baseId = refId, name = newName\}, recordType)\par
- \par
- \tab tes3mp.SendRecordDynamic(pid, false, false)\par
- end\par
- \par
- Methods.RegisterBankerRefId = function(refId)\par
- \tab scriptTemp.bankerRefIds[refId] = true\par
- \tab doDebug("Registered banker refId: " .. refId)\par
- end\par
- \par
- Methods.RegisterBankerUniqueIndex = function(uniqueIndex)\par
- \tab scriptTemp.bankerUniqueIndexes[uniqueIndex] = true\par
- \tab doDebug("Registered banker uniqueIndex: " .. uniqueIndex)\par
- end\par
- \par
- Methods.IsAllowedDeleteUniqueIndex = function(uniqueIndex)\par
- \tab -- Check to protect bankers if configured\par
- \tab if scriptConfig.denyBankerDelete then\par
- \tab\tab if Methods.IsBankerUniqueIndex(uniqueIndex) then\par
- \tab\tab\tab return false\par
- \tab\tab end\par
- \tab end\par
- \tab\par
- \tab -- Check to protect bank storage if configured\par
- \tab if scriptConfig.denyBankStorageDelete then\par
- \tab\tab if Methods.IsBankStorageUniqueIndex(uniqueIndex) then\par
- \tab\tab\tab return false\par
- \tab\tab end\par
- \tab end\par
- \tab\par
- \tab -- If we get here, we're fine\par
- \tab return true\par
- end\par
- \par
- Methods.IsAllowedDeleteRefId = function(refId)\par
- \tab -- Check to protect bankers if configured\par
- \tab if scriptConfig.denyBankerDelete then\par
- \tab\tab if Methods.IsBankerRefId(refId) then\par
- \tab\tab\tab return false\par
- \tab\tab end\par
- \tab end\par
- \tab\par
- \tab -- If we get here, we're fine\par
- \tab return true\par
- end\par
- \par
- -- Returns true if provided uniqueIndex belongs to a banker\par
- Methods.IsBankerUniqueIndex = function(uniqueIndex)\par
- \tab return scriptTemp.bankerUniqueIndexes[uniqueIndex] or false\par
- end\par
- \par
- -- Returns true if provided refId belongs to a banker\par
- Methods.IsBankerRefId = function(refId)\par
- \tab return scriptTemp.bankerRefIds[refId] or false\par
- end\par
- \par
- -- Returns true if provided uniqueIndex belongs to a player's bank storage\par
- Methods.IsBankStorageUniqueIndex = function(uniqueIndex)\par
- \tab for playerName, storageUniqueIndex in pairs(scriptData.links) do\par
- \tab\tab if storageUniqueIndex == uniqueIndex then\par
- \tab\tab\tab return true\par
- \tab\tab end\par
- \tab end\par
- \tab\par
- \tab -- If we get here, we haven't found anything, so it's not a bank storage for anyone\par
- \tab return false\par
- end\par
- \par
- Methods.GetPlayerContainerUniqueIndex = function(playerName)\par
- \tab return scriptData.links[string.lower(playerName)] or false\par
- end\par
- \par
- Methods.DoesPlayerHaveContainer = function(playerName)\par
- \tab local uniqueIndex = Methods.GetPlayerContainerUniqueIndex(playerName)\par
- \tab\par
- \tab if uniqueIndex then\par
- \tab\tab -- Check to make sure that the object still exists\par
- \tab\tab ensureCellLoaded()\par
- \tab\tab\par
- \tab\tab if LoadedCells[scriptConfig.storageCell]:ContainsObject(uniqueIndex) then\par
- \tab\tab\tab return true\par
- \tab\tab else\par
- \tab\tab\tab -- Somehow, the player's storage has been deleted.\par
- \tab\tab\tab -- We should remove the links\par
- \tab\tab\tab Methods.RemovePlayerContainerLink(playerName)\par
- \tab\tab\tab return false\par
- \tab\tab end\par
- \tab else --There's no recorded link for that player\par
- \tab\tab return false\tab\par
- \tab end\par
- end\par
- \par
- Methods.AddPlayerContainerLink = function(playerName, uniqueIndex)\par
- \tab scriptData.links[string.lower(playerName)] = uniqueIndex\par
- \tab Methods.Save()\par
- \tab\par
- \tab doDebug("Added new link to container " .. uniqueIndex .. " for " .. playerName)\par
- end\par
- \par
- Methods.RemovePlayerContainerLink = function(playerName)\par
- \tab scriptData.links[string.lower(playerName)] = nil\par
- \tab Methods.Save()\par
- \tab\par
- \tab doDebug("Removed existing link to container for " .. playerName)\par
- end\par
- \par
- Methods.CreateContainerForPlayer = function(playerName)\par
- \tab -- Make sure the cell is loaded\par
- \tab ensureCellLoaded()\par
- \tab\par
- \tab -- Spawn the object\par
- \tab -- Determine if "place" or "spawn" packet should be used\par
- \tab local packetType\par
- \tab if scriptConfig.baseObjectRecordType == "creature" or scriptConfig.baseObjectRecordType == "npc" then\par
- \tab\tab packetType = "spawn"\par
- \tab else\par
- \tab\tab packetType = "place"\par
- \tab end\par
- \tab\par
- \tab -- Just make a dummy location because we don't care about where it'll be\par
- \tab local location = \{posX = 0, posY = 0, posZ = 0, rotX = 0, rotY = 0, rotZ = 0\}\par
- \tab\par
- \tab local uniqueIndex = logicHandler.CreateObjectAtLocation(scriptConfig.storageCell, location, scriptConfig.recordRefId, packetType)\par
- \tab\par
- \tab doLog("Created a bank container with uniqueIndex " .. uniqueIndex .. " for player " .. playerName)\par
- \tab\par
- \tab -- Add container data\par
- \tab LoadedCells[scriptConfig.storageCell].data.objectData[uniqueIndex].inventory = \{\}\par
- \tab tableHelper.insertValueIfMissing(LoadedCells[scriptConfig.storageCell].data.packets.container, uniqueIndex)\par
- \tab\par
- \tab LoadedCells[scriptConfig.storageCell]:Save()\par
- \tab\par
- \tab -- Add a link in the script's data\par
- \tab Methods.AddPlayerContainerLink(playerName, uniqueIndex)\par
- \tab\par
- \tab return uniqueIndex\par
- end\par
- \par
- -- Use to load the data of all custom records contained in a provided inventory\par
- Methods.LoadInventoryGeneratedRecords = function(pid, inventory)\par
- \tab local storeTypes = \{\}\par
- \tab\par
- \tab for index, item in ipairs(inventory) do\par
- \tab\tab if logicHandler.IsGeneratedRecord(item.refId) then\par
- \tab\tab\tab local recordType = string.match(item.refId, "_(%a+)_")\par
- \tab\tab\tab\par
- \tab\tab\tab if not storeTypes[recordType] then storeTypes[recordType] = \{\} end\par
- \tab\tab\tab\par
- \tab\tab\tab table.insert(storeTypes[recordType], item.refId)\par
- \tab\tab end\par
- \tab end\par
- \tab\par
- \tab -- If there were items found, load them from each relevant store\par
- \tab if not tableHelper.isEmpty(storeTypes) then\par
- \tab\tab for storeType, refIdList in pairs(storeTypes) do\par
- \tab\tab\tab local recordStore = RecordStores[storeType]\par
- \par
- \tab\tab\tab if recordStore ~= nil then\par
- \tab\tab\tab\tab recordStore:LoadGeneratedRecords(pid, recordStore.data.generatedRecords, refIdList)\par
- \tab\tab\tab end\par
- \tab\tab end\par
- \tab end\par
- end\par
- \par
- Methods.OpenNamedPlayersContainerForPid = function(pid, targetPlayerName)\par
- \tab local playerName = getName(pid)\par
- \tab\par
- \tab if not Methods.DoesPlayerHaveContainer(targetPlayerName) then\par
- \tab\tab -- Target player doesn't have a container!\par
- \tab\tab return false\par
- \tab end\par
- \tab\par
- \tab local targetUniqueIndex = Methods.GetPlayerContainerUniqueIndex(targetPlayerName)\par
- \tab\par
- \tab -- Work out the relationships between players\par
- \tab if string.lower(playerName) == string.lower(targetPlayerName) then\par
- \tab\tab -- The player is opening their own container\par
- \tab\tab -- Rename the storage to reflect that it's theirs\par
- \tab\tab Methods.RenameRecordForPid(pid, Methods.GetLangText("yourStorageName"),scriptConfig.recordRefId, scriptConfig.baseObjectRecordType)\par
- \tab else\par
- \tab\tab -- The player is opening somebody else's container\par
- \tab\tab -- Rename the storage to reflect that it's someone else's\par
- \tab\tab Methods.RenameRecordForPid(pid, Methods.GetLangText("otherPlayerStorageName", \{name = targetPlayerName\}),scriptConfig.recordRefId, scriptConfig.baseObjectRecordType)\par
- \tab end\par
- \tab\par
- \tab -- Ensure cell is loaded\par
- \tab ensureCellLoaded()\par
- \tab\par
- \tab -- Ensure the player has the container's data loaded\par
- \tab local oData = LoadedCells[scriptConfig.storageCell].data.objectData\par
- \par
- \tab if scriptConfig.baseObjectRecordType == "creature" or scriptConfig.baseObjectRecordType == "npc" then\par
- \tab\tab LoadedCells[scriptConfig.storageCell]:LoadObjectsSpawned(pid, oData, \{targetUniqueIndex\})\par
- \tab else\par
- \tab\tab LoadedCells[scriptConfig.storageCell]:LoadObjectsPlaced(pid, oData, \{targetUniqueIndex\})\par
- \tab end\par
- \tab\par
- \tab -- Ensure player has all generated records associated with the inventory\par
- \tab Methods.LoadInventoryGeneratedRecords(pid, oData[targetUniqueIndex].inventory)\par
- \tab -- Load container info\par
- \tab LoadedCells[scriptConfig.storageCell]:LoadContainers(pid, oData, \{targetUniqueIndex\})\par
- \tab\par
- \tab -- Activate the container to open up its contents!\par
- \tab logicHandler.ActivateObjectForPlayer(pid, scriptConfig.storageCell, targetUniqueIndex)\par
- \tab\par
- \tab doLog(playerName .. " opened the bank container of " .. targetPlayerName .. ".")\par
- end\par
- \par
- ---------------------------------------------------------------------------------------\par
- Methods.OnBankCommand = function(pid, cmd)\par
- \tab local playerRank = Players[pid].data.settings.staffRank\par
- \tab\par
- \tab if not cmd[2] then -- Regular bank command was used\par
- \tab\tab if playerRank >= scriptConfig.useBankCommandRank then\par
- \tab\tab\tab local playerName = getName(pid)\par
- \tab\tab\tab\par
- \tab\tab\tab -- Check whether or not the player has a container\par
- \tab\tab\tab if not Methods.DoesPlayerHaveContainer(playerName) then\par
- \tab\tab\tab\tab -- Since they don't, create one!\par
- \tab\tab\tab\tab Methods.CreateContainerForPlayer(playerName)\par
- \tab\tab\tab end\par
- \tab\tab\tab\par
- \tab\tab\tab -- Open the player's container for them\par
- \tab\tab\tab Methods.OpenNamedPlayersContainerForPid(pid, playerName)\par
- \tab\tab\tab return true\par
- \tab\tab else -- Player doesn't have the rank to use the command\par
- \tab\tab\tab msg(pid, Methods.GetLangText("useBankCommandFailNoRank"))\par
- \tab\tab\tab return false\par
- \tab\tab end\par
- \tab else -- The player provided more data (i.e. the playername of the bank they want to open)\par
- \tab\tab -- Do rank check before continuing\par
- \tab\tab if playerRank >= scriptConfig.openOtherPlayersBankRank then\par
- \tab\tab\tab local targetPlayerName\par
- \tab\tab\tab local givenName = tableHelper.concatenateFromIndex(cmd, 2)\par
- \tab\tab\tab\par
- \tab\tab\tab if tonumber(givenName) then -- Might've entered a pid\par
- \tab\tab\tab\tab if Players[pid] ~= nil then\par
- \tab\tab\tab\tab\tab targetPlayerName = getName(pid)\par
- \tab\tab\tab\tab else\par
- \tab\tab\tab\tab\tab -- Use the number as a name...\par
- \tab\tab\tab\tab\tab targetPlayerName = givenName\par
- \tab\tab\tab\tab end\par
- \tab\tab\tab else\par
- \tab\tab\tab\tab targetPlayerName = givenName\par
- \tab\tab\tab end\par
- \tab\tab\tab\par
- \tab\tab\tab -- Check if there's actually data for that player's bank\par
- \tab\tab\tab if not Methods.DoesPlayerHaveContainer(targetPlayerName) then\par
- \tab\tab\tab\tab msg(pid, Methods.GetLangText("openOtherPlayerBankFailNoPlayer", \{name = targetPlayerName\}))\par
- \tab\tab\tab\tab return false\par
- \tab\tab\tab end\par
- \tab\tab\tab\par
- \tab\tab\tab -- Open the bank container for them\par
- \tab\tab\tab Methods.OpenNamedPlayersContainerForPid(pid, targetPlayerName)\par
- \tab\tab\tab return true\par
- \tab\tab else -- Player doesn't have the required rank\par
- \tab\tab\tab msg(pid, Methods.GetLangText("openOtherPlayerBankFailNoRank"))\par
- \tab\tab\tab return false\par
- \tab\tab end\par
- \tab end\par
- end\par
- \par
- -- Validator for activations. Used to prevent default behaviour for players activating bankers.\par
- Methods.ActivationCheck = function(eventStatus, pid, cellDescription, objects, players)\par
- \tab for _,object in pairs(objects) do\par
- \tab\tab -- Only bothered about the activation if:\par
- \tab\tab -- > The object is an object (not a player)\par
- \tab\tab -- > A player is the one doing the activation\par
- \tab\tab if object.pid == nil and object.activatingPid ~= nil then\par
- \tab\tab\tab local refId = object.refid\par
- \tab\tab\tab local uniqueIndex = object.uniqueIndex\par
- \par
- \tab\tab\tab -- Check whether or not this is a banker\par
- \tab\tab\tab if Methods.IsBankerUniqueIndex(uniqueIndex) or Methods.IsBankerRefId(refId) then\par
- \tab\tab\tab\tab -- Prevent the activation of the banker object, regardless of whether or not the player can actually use the banker\par
- \tab\tab\tab\tab return customEventHooks.makeEventStatus(false, nil)\par
- \tab\tab\tab end\par
- \tab\tab end\par
- \tab\tab -- Was either not a banker, or not a player doing the activation. Either way, we don't care about it.\par
- \tab\tab return customEventHooks.makeEventStatus(nil,nil)\par
- \tab end\par
- end\par
- \par
- Methods.OnObjectActivate = function(eventStatus, pid, cellDescription, objects, players)\par
- if eventStatus.validCustomHandlers ~= false then\par
- for _,object in pairs(objects) do\par
- if object.pid == nil and object.activatingPid ~= nil then\par
- \tab\tab\tab\tab local refId = object.refId\par
- \tab\tab\tab\tab local uniqueIndex = object.uniqueIndex\par
- \tab\tab\tab\tab local pid = object.activatingPid\par
- \tab\tab\tab\tab\par
- \tab\tab\tab\tab local playerRank = Players[pid].data.settings.staffRank\par
- \tab\tab\tab\tab local playerName = getName(pid)\par
- \par
- \tab\tab\tab\tab if Methods.IsBankerUniqueIndex(uniqueIndex) or Methods.IsBankerRefId(refId) then\par
- \tab\tab\tab\tab\tab if not (playerRank >= scriptConfig.useBankerRank) then\par
- \tab\tab\tab\tab\tab\tab -- The player doesn't have the required rank to use bankers\par
- \tab\tab\tab\tab\tab\tab doLog(playerName .. " activated a banker, but doesn't have a sufficient rank to use it.")\par
- \tab\tab\tab\tab\tab\tab msg(pid, Methods.GetLangText("useBankerFailNoRank"))\par
- \tab\tab\tab\tab\tab else\par
- \tab\tab\tab\tab\tab\tab doLog(playerName .. " activated a banker, accessed their bank.")\par
- \tab\tab\tab\tab\tab\tab -- The player can use bankers\par
- \tab\tab\tab\tab\tab\tab -- Check whether or not the player has a container\par
- \tab\tab\tab\tab\tab\tab if not Methods.DoesPlayerHaveContainer(playerName) then\par
- \tab\tab\tab\tab\tab\tab\tab -- Since they don't, create one!\par
- \tab\tab\tab\tab\tab\tab\tab Methods.CreateContainerForPlayer(playerName)\par
- \tab\tab\tab\tab\tab\tab end\par
- \par
- \tab\tab\tab\tab\tab\tab -- Open the player's container for them\par
- \tab\tab\tab\tab\tab\tab Methods.OpenNamedPlayersContainerForPid(pid, playerName)\par
- \tab\tab\tab\tab\tab\tab doLog(playerName .. " opened their bank via the banker " .. refId .. " " .. uniqueIndex .. ".")\par
- \tab\tab\tab\tab\tab end\par
- \tab\tab\tab\tab end\par
- \tab\tab\tab end\par
- end\par
- end\par
- end\par
- \par
- -- Returning true signals we want to block deletion\par
- Methods.DeletionCheck = function(eventStatus, pid, cellDescription, objects)\par
- \tab for _,object in pairs(objects) do\par
- local refId = object.refId\par
- local uniqueIndex = object.uniqueIndex\par
- \par
- if not Methods.IsAllowedDeleteRefId(refId) or not Methods.IsAllowedDeleteUniqueIndex(uniqueIndex) then\par
- -- The object is protected by this script!\par
- doDebug("Prevented deletion of object " .. refId .. " " .. uniqueIndex)\par
- return customEventHooks.makeEventStatus(false,false)\par
- end\par
- end\par
- \par
- return customEventHooks.makeEventStatus(nil,nil)\par
- end\par
- \par
- Methods.OnServerPostInit = function(eventStatus)\par
- \tab -- Load data\par
- \tab Methods.Load()\par
- \tab\par
- \tab -- Detect if this script's permanent record has been created on this server yet\par
- \tab -- If it hasn't, create it\par
- \tab if RecordStores[scriptConfig.baseObjectRecordType].data.permanentRecords[scriptConfig.recordRefId] == nil then\par
- \tab\tab local data = \{baseId = "dead rat", name = Methods.GetLangText("baseBankContainerDisplayName")\}\par
- \tab\tab\par
- \tab\tab RecordStores[scriptConfig.baseObjectRecordType].data.permanentRecords[scriptConfig.recordRefId] = data\par
- \tab\tab\par
- \tab\tab RecordStores[scriptConfig.baseObjectRecordType]:Save()\par
- \tab\tab doLog("Created permanent record entry for the script's base object.")\par
- \tab end\par
- \tab\par
- \tab -- Port the banker info from the config into scriptTemp\par
- \tab local bankerRefs = 0\par
- \tab local bankerIndexes = 0\par
- \tab\par
- \tab for index, refId in ipairs(scriptConfig.bankerRefIds) do\par
- \tab\tab scriptTemp.bankerRefIds[refId] = true\par
- \tab\tab bankerRefs = bankerRefs + 1\par
- \tab end\par
- \tab\par
- \tab for index, uniqueIndex in ipairs(scriptConfig.bankerUniqueIndexes) do\par
- \tab\tab scriptTemp.bankerUniqueIndexes[uniqueIndex] = true\par
- \tab\tab bankerIndexes = bankerIndexes + 1\par
- \tab end\par
- \tab\par
- \tab if bankerRefs > 0 then\par
- \tab\tab doLog("Imported " .. bankerRefs .. " banker refIds from scriptConfig.")\par
- \tab end\par
- \tab\par
- \tab if bankerIndexes > 0 then\par
- \tab\tab doLog("Imported " .. bankerIndexes .. " banker uniqueIndexes from scriptConfig.")\par
- \tab end\par
- \tab\par
- \tab -- If CellReset is being used, register the storage cell as an exempt cell\par
- \tab if CellReset then\par
- \tab\tab CellReset.RegisterFullyExemptCell(scriptConfig.storageCell, "kanaBank")\par
- \tab\tab doLog("Ensured storage cell is exempt from CellReset resets.")\par
- \tab end\par
- end\par
- \par
- customEventHooks.registerValidator("OnObjectActivate",Methods.ActivationCheck)\par
- customEventHooks.registerValidator("OnObjectDelete",Methods.DeletionCheck)\par
- customEventHooks.registerHandler("OnServerPostInit",Methods.OnServerPostInit)\par
- customEventHooks.registerHandler("OnObjectActivate",Methods.OnObjectActivate)\par
- customCommandHooks.registerCommand("bank",Methods.OnBankCommand)\par
- -------------\par
- return Methods\par
- }
Advertisement
Add Comment
Please, Sign In to add comment