Estrutura Básica de um Mod
Configure seu ambiente, crie o projeto e entenda a estrutura fundamental de um mod de script puro.
Criar um mod que usa o padrão [Tunable] + World.OnWorldLoadFinishedEventHandler para executar código automaticamente quando o mundo carrega.
Configurando o Projeto
Crie um Novo Projeto
Abra o Visual Studio e crie um novo projeto Class Library (Biblioteca de Classes) em C#.
Use .NET Framework 3.5 ou .NET Framework 2.0. O The Sims 3 foi construído sobre estas versões.
Referencie as DLLs do Jogo
Adicione referências às seguintes DLLs:
📁 Referências:
├── ScriptCore.dll
├── SimIFace.dll
├── Sims3GameplaySystems.dll
├── Sims3GameplayObjects.dll
├── UI.dll
├── mscorlib.dll
├── System.dll
└── System.Core.dll
AssemblyInfo.cs com [Tunable]
Adicione o atributo [assembly: Tunable] para permitir que o jogo leia suas variáveis via XML:
using System.Reflection;
using System.Runtime.InteropServices;
using Sims3.SimIFace;
[assembly: Tunable]
[assembly: Guid("12345678-1234-1234-1234-123456789abc")]
Sem o atributo [Tunable] no assembly, o jogo NÃO conseguirá ler suas variáveis via XML e o mod não será inicializado.
Classe Principal (ModMain.cs)
using System;
using Sims3.Gameplay;
using Sims3.Gameplay.Actors;
using Sims3.SimIFace;
namespace SeuNamespace
{
public static class ModMain
{
// Esta variável é lida pelo XML de tuning
[Tunable]
internal static bool kInstantiator = false;
// Construtor estático - executado quando a classe é inicializada
static ModMain()
{
// Registra o callback para quando o mundo terminar de carregar
World.sOnWorldLoadFinishedEventHandler += new EventHandler(OnWorldLoadFinished);
}
// Método chamado quando o mundo termina de carregar
private static void OnWorldLoadFinished(object sender, EventArgs e)
{
try
{
// Seu código aqui!
Sim[] sims = World.GetObjects<Sim>();
foreach (Sim sim in sims)
{
if (sim != null && sim.SimDescription.TeenOrAbove)
{
AddInteractions(sim);
}
}
}
catch (Exception ex)
{
// Log de erro
}
}
public static void AddInteractions(Sim sim)
{
if (sim == null) return;
// Adicionar interações personalizadas
}
}
}
Arquivo de Tuning XML
Crie um arquivo SeuMod+Instantiator.tuning na pasta ITUN/:
<?xml version="1.0" encoding="utf-8"?>
<C>
<T n="SeuNamespace.ModMain,SeuMod">
<L n="_TunableFields">
<T>kInstantiator</T>
</L>
<T n="kInstantiator" type="Boolean">true</T>
</T>
</C>
O XML define que a classe SeuNamespace.ModMain tem um campo tunable chamado kInstantiator. Quando o jogo lê o XML e tenta atribuir true, o .NET inicializa a classe, disparando o construtor estático.
Compilar e Empacotar
Compile o Projeto
# No Windows (Visual Studio)
# Build → Build Solution
# No Linux/Mono
xbuild /p:Configuration=Release SeuMod.csproj
Crie o Package (.package)
Use o S3PE para criar o arquivo package:
- Abra o S3PE e crie um novo arquivo
- Adicione um recurso do tipo S3SA (Script Assembly)
- Importe sua DLL compilada
- Adicione um recurso do tipo ITUN (Tuning)
- Importe seu arquivo XML
- Salve como
SeuMod.package
Checklist Final
- ✅ Projeto configurado com .NET 3.5
- ✅ DLLs do jogo referenciadas
- ✅
[assembly: Tunable]no AssemblyInfo - ✅ Classe com campo
[Tunable]estático - ✅ Construtor estático registrando evento
- ✅ Arquivo XML ITUN configurado
- ✅ Package montado no S3PE