For the complete documentation index, see llms.txt. This page is also available as Markdown.

Referencia avanzada del lenguaje

CSL te ofrece unas cuantas herramientas “tipo arreglo” que cubren la mayoría de las necesidades de gameplay: arreglos fijos, slices y arreglos dinámicos. Esta página es la guía práctica para usarlos sin dispararte en el pie.

Glosario rápido

  • Arreglo fijo: [N]T — el tamaño se conoce en tiempo de compilación.

  • Slice / arreglo administrado: []T — una vista sobre los datos del arreglo (a menudo se usa para parámetros).

  • Arreglo dinámico: [..]T — lista redimensionable con conteo y capacidad.

fixed: [4]int = {1, 2, 3, 4};
view: []int = fixed; // vista de slice

list: [..]int;
list.append(10);
list.append(20);

Los métodos de arreglos dinámicos usan llamadas normales con punto (por ejemplo, list.append(x)). Los campos también usan acceso con punto (por ejemplo, list.count).

Arreglos dinámicos ([..]T)

Los arreglos dinámicos son el tipo de “lista por defecto” para el código de gameplay.

Creación y adición

players_seen: [..]string;
players_seen.append(player.get_user_id());

Reserva de capacidad (rendimiento)

Si sabes que vas a añadir muchos elementos, reserva primero para evitar realocaciones repetidas.

Eliminar elementos

Por lo general eliges entre eliminación rápida (el orden no importa) y eliminación ordenada (conservar el orden).

También puedes eliminar por índice:

Limpiar

Pasar arreglos a procedimientos

Muchas APIs aceptan []T (un slice/vista). Los arreglos dinámicos pueden pasarse donde se espera []T .

Patrones de iteración

Iterar elementos

Iterar índices

Usa ..< cuando quieres un bucle normal de "0 hasta, pero sin incluir, count":

Los bucles inversos usan #reverse:

Tablas hash

Usa Hashtable(Key_Type, Value_Type) cuando necesitas una búsqueda rápida por clave. Admite claves enteras y de cadena, junto con los métodos habituales para búsqueda, inserción, sobrescritura, eliminación e iteración.

Usa add cuando las claves duplicadas deben provocar una aserción. Usa add_or_overwrite cuando se espera actualizar una clave existente. try_add devuelve true si la clave ya existía y deja el valor anterior sin cambios.

Clausuras, callbacks y userdata (importante)

CSL notiene clausuras. Las definiciones inline proc() { ... }

no pueden capturar variables del entorno. Cuando necesites callbacks (manejadores de UI, hooks de muerte, etc.), empareja el callback con un campo userdata: Object .

Referencia de la API

Cada proyecto incluye una api_references/ carpeta que contiene la API central actual. Abre el .csl_engine archivo correspondiente para inspeccionar un tipo o procedimiento.

Última actualización