R
roblox-ts•3mo ago
Tester

Cannot create custom type in Centurion

I'm getting a weird error that the type is not registered
18 Replies
Tester
TesterOP•3mo ago
how would i properly register types?
const EItemType = TypeBuilder.create<string>("EItemType")
.markForRegistration()
.transform((text) => {
if (!ItemsMetadata.IsInvalidOrNone(text)) return TransformResult.err("Invalid Item");
return TransformResult.ok(text);
})
.suggestions(() => ItemsMetadata.GetItemsList())
.build();

export default EItemType;
const EItemType = TypeBuilder.create<string>("EItemType")
.markForRegistration()
.transform((text) => {
if (!ItemsMetadata.IsInvalidOrNone(text)) return TransformResult.err("Invalid Item");
return TransformResult.ok(text);
})
.suggestions(() => ItemsMetadata.GetItemsList())
.build();

export default EItemType;
server.registry.load(script.Parent!.WaitForChild("Types"));
server.registry.load(script.Parent!.WaitForChild("Commands"));
server.registry.load(script.Parent!.WaitForChild("Types"));
server.registry.load(script.Parent!.WaitForChild("Commands"));
Tester
TesterOP•3mo ago
And I'm getting this error
No description
Unknown User
Unknown User•3mo ago
Message Not Public
Sign In & Join Server To View
Tester
TesterOP•3mo ago
I'm registering the type only on the server Do I need to do on both?
Unknown User
Unknown User•3mo ago
Message Not Public
Sign In & Join Server To View
Tester
TesterOP•3mo ago
😮 omg I only noticed it's a client error
Unknown User
Unknown User•3mo ago
Message Not Public
Sign In & Join Server To View
Tester
TesterOP•3mo ago
As well smth like client.register.load? Ok I will try And btw do I need to do mark for registration?
Unknown User
Unknown User•3mo ago
Message Not Public
Sign In & Join Server To View
Tester
TesterOP•3mo ago
Yes, I didn't understand this part And the last one Can some commands be in shared or purely client?
Tester
TesterOP•3mo ago
I swear
No description
Tester
TesterOP•3mo ago
Anyway thx @Sasial (ping in replies!) @UrbanIndigo
Unknown User
Unknown User•3mo ago
Message Not Public
Sign In & Join Server To View
Tester
TesterOP•3mo ago
Ok I will try that as well prob Thanks
Unknown User
Unknown User•3mo ago
Message Not Public
Sign In & Join Server To View
Tester
TesterOP•3mo ago
i use Modding.inspect usually and in metadata files the functions usually return the list of valid things and can validate it
Unknown User
Unknown User•3mo ago
Message Not Public
Sign In & Join Server To View
Tester
TesterOP•3mo ago
export namespace LoadoutMetadata...
export const enum EProfileIndex {
Profile1 = "1",
Profile2 = "2",
Profile3 = "3",
}

const valid_profile_indexes_list = table.freeze(Modding.inspect<EProfileIndex[]>());
export function GetValidProfileIndexesList(): readonly EProfileIndex[] {
return valid_profile_indexes_list;
}

export function IsValidProfileIndex(profile_index?: string): profile_index is EProfileIndex {
if (profile_index === undefined) return false;
return valid_profile_indexes_list.includes(profile_index as EProfileIndex);
}
export namespace LoadoutMetadata...
export const enum EProfileIndex {
Profile1 = "1",
Profile2 = "2",
Profile3 = "3",
}

const valid_profile_indexes_list = table.freeze(Modding.inspect<EProfileIndex[]>());
export function GetValidProfileIndexesList(): readonly EProfileIndex[] {
return valid_profile_indexes_list;
}

export function IsValidProfileIndex(profile_index?: string): profile_index is EProfileIndex {
if (profile_index === undefined) return false;
return valid_profile_indexes_list.includes(profile_index as EProfileIndex);
}
if the data is defined somewhere outside i just read the keys or smth
export namespace ItemsMetadata...
const cashed_items = TableTools.GetKeys(items_data);
export function GetItemsList(): string[] {
return table.clone(cashed_items);
}
export namespace ItemsMetadata...
const cashed_items = TableTools.GetKeys(items_data);
export function GetItemsList(): string[] {
return table.clone(cashed_items);
}
prob could remove cloning and just freeze it 🤔 Then the types look like this
const EItemType = TypeBuilder.create<string>("EItemType")
.markForRegistration()
.transform((text) => {
if (ItemsMetadata.IsInvalidOrNone(text)) return TransformResult.err("Invalid Item");
return TransformResult.ok(text);
})
.suggestions(() => ItemsMetadata.GetItemsList())
.build();

export default EItemType;
const EItemType = TypeBuilder.create<string>("EItemType")
.markForRegistration()
.transform((text) => {
if (ItemsMetadata.IsInvalidOrNone(text)) return TransformResult.err("Invalid Item");
return TransformResult.ok(text);
})
.suggestions(() => ItemsMetadata.GetItemsList())
.build();

export default EItemType;
import { TransformResult, TypeBuilder } from "@rbxts/centurion";
import { LoadoutMetadata } from "shared/GameData/LoadoutMetadata";

const EWeaponSlotIndexType = TypeBuilder.create<string>("EWeaponSlotIndexType")
.markForRegistration()
.transform((text) => {
if (!LoadoutMetadata.IsValidWeaponSlotIndex(text))
return TransformResult.err("Invalid slot index");
return TransformResult.ok(text);
})
.suggestions(() => LoadoutMetadata.GetValidWeaponSlotIndexesList() as string[])
.build();

export default EWeaponSlotIndexType;
import { TransformResult, TypeBuilder } from "@rbxts/centurion";
import { LoadoutMetadata } from "shared/GameData/LoadoutMetadata";

const EWeaponSlotIndexType = TypeBuilder.create<string>("EWeaponSlotIndexType")
.markForRegistration()
.transform((text) => {
if (!LoadoutMetadata.IsValidWeaponSlotIndex(text))
return TransformResult.err("Invalid slot index");
return TransformResult.ok(text);
})
.suggestions(() => LoadoutMetadata.GetValidWeaponSlotIndexesList() as string[])
.build();

export default EWeaponSlotIndexType;

Did you find this page helpful?