#How to set perms for and spawn the new custom keycards

1 messages · Page 1 of 1 (latest)

daring ginkgo
#

ive tried reading the CustomKeycardCommand.cs and so far i think ive gotten the template for KeycardCustomTaskForce and got the details for it. i have no clue how to set any of the options (name, description, door permissions, etc)

my code rn

InventorySystem.Items.Keycards.KeycardItem keycard;

ItemType.KeycardCustomTaskForce.TryGetTemplate(out keycard);

#

i have found this also in the customkeycard command but i have no clue how to use it or if it even works correctly

foreach (DetailBase detail in keycard.Details) {
(ICustomizableDetail) detail).SetArguments()
}
wispy ermine
#

This is how i do it

                CustomPermsDetail permsDetail = ParentKeycard.Base.Details.OfType<CustomPermsDetail>().FirstOrDefault();
                if (permsDetail != null)
                {
                    try
                    {
                        object[] args = { value, PermissionsColor };
                        ArraySegment<object> arguments = new(args);
                        permsDetail.SetArguments(arguments);
                    }
                    catch (Exception ex)
                    {
                        LogManager.Error($"{nameof(CustomKeycard)}: Error processing CustomPermsDetail: {ex.Message}\nStack Trace: {ex.StackTrace}");
                    }
                }
KeycardDetailSynchronizer.ServerProcessItem(keycard.Base);
KeycardUtils.RemoveKeycardDetail(keycard.Serial);
#
        public static bool RemoveKeycardDetail(ushort serial)
        {
            try
            {
                FieldInfo databaseField = AccessTools.Field(typeof(KeycardDetailSynchronizer), "Database");

                if (databaseField == null)
                {
                    LogManager.Error("Could not find Database field in KeycardDetailSynchronizer.");
                    return false;
                }

                object databaseObject = databaseField.GetValue(null);
                if (databaseObject == null)
                {
                    LogManager.Error("KeycardDetailSynchronizer.Database field is null.");
                    return false;
                }
                if (databaseObject is Dictionary<ushort, ArraySegment<byte>> databaseDict)
                {
                    bool wasRemoved = databaseDict.Remove(serial);
                    LogManager.Debug($"Attempted to remove keycard detail for serial {serial}. Result: {wasRemoved}");
                    return wasRemoved;
                }
                else
                {
                    LogManager.Error($"KeycardDetailSynchronizer.Database field is not the expected Dictionary type. Found: {databaseObject.GetType().FullName}");
                    return false;
                }
            }
            catch (Exception ex)
            {
                LogManager.Error($"An exception occurred while trying to remove keycard detail for serial {serial}: {ex.Message}\n{ex.StackTrace}");
                return false;
            }
        }
    }
daring ginkgo
#

How to set perms for and spawn the new custom keycards

craggy ermine
#

id recommend waiting until the labapi wrappers come out

daring ginkgo
craggy ermine
#

yeah

#

I imagine it will be as simple as the command to create the cards

daring ginkgo
#

wait are the wrappers the ones on the github?

#

if so then that makes more sense 😭

craggy ermine
#

Wrappers are just for wrapping anything in the base game

daring ginkgo
#

yea i understand that

#

alr ill wait for the wrappers to come out