소스 정보
- 저장소
- infometa/workbuddyskills
- 최근 소스 활동
- 2026년 7월 21일 03:35
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 205
- 포크
- 65
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/infometa/workbuddyskills --skill code-generator명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | code-generator |
| description | 代码生成技能。根据模板和需求生成 GDScript 代码,支持自动补全、 模块化代码生成和代码规范检查。 |
| version | 1.0.0 |
| dependencies | ["godot-core","file-manager"] |
| triggers | [{"pattern":"生成代码|创建脚本|写一个|实现.*功能|.*控制器|.*管理器"}] |
| inputs | [{"name":"template_type","type":"string","enum":["singleton","entity","component","state","ui_controller","system","data_class"],"required":true},{"name":"class_name","type":"string","required":true},{"name":"features","type":"array","required":false}] |
| outputs | [{"name":"script_path","type":"string","description":"生成的脚本文件路径"}] |
根据模板和需求自动生成 GDScript 代码。
| 类型 | 命名方式 | 示例 |
|---|---|---|
| 类名 | PascalCase | PlayerController, GameManager |
| 函数名 | snake_case | get_health(), apply_damage() |
| 变量名 | snake_case | max_health, current_speed |
| 常量 | UPPER_SNAKE_CASE | MAX_SPEED, DEFAULT_HEALTH |
| 信号 | snake_case | health_changed, died |
| 枚举 | PascalCase (类型), UPPER_SNAKE_CASE (值) | enum State { IDLE, RUNNING } |
## 类描述(文档注释)
##
## 详细说明
## @author AI Generated
## @version 1.0.0
class_name ClassName
extends BaseClass
# region 信号
signal signal_name(param: Type)
# endregion
# region 常量
const MAX_VALUE: int = 100
# endregion
# region 导出变量
@export var exported_var: Type
@export_group("Group Name")
@export var grouped_var: Type
# endregion
# region 公共变量
var public_var: Type
# endregion
# region 私有变量
var _private_var: Type
# endregion
# region 生命周期方法
func _ready() -> void:
pass
func _process(delta: float) -> void:
pass
func _physics_process(delta: float) -> void:
pass
# endregion
# region 公共方法
func public_method() -> ReturnType:
pass
# endregion
# region 私有方法
func _private_method() -> void:
pass
# endregion
用于全局管理器,如 GameManager、AudioManager 等。
## {{CLASS_DESCRIPTION}}
##
## 全局单例,通过 Autoload 加载
## @author AI Generated
## @version {{VERSION}}
class_name {{CLASS_NAME}}
extends Node
# region 信号
{{SIGNALS}}
# endregion
# region 常量
{{CONSTANTS}}
# endregion
# region 私有变量
{{PRIVATE_VARS}}
# endregion
# region 生命周期
func _ready() -> void:
_initialize()
func _initialize() -> void:
{{INIT_CONTENT}}
# endregion
# region 公共 API
{{PUBLIC_METHODS}}
# endregion
# region 内部方法
{{PRIVATE_METHODS}}
# endregion
使用示例:
生成一个 AudioManager 单例,支持播放背景音乐和音效,支持音量控制
用于游戏实体,如 Player、Enemy 等。
## {{CLASS_DESCRIPTION}}
##
## @author AI Generated
## @version {{VERSION}}
class_name {{CLASS_NAME}}
extends {{BASE_CLASS}}
# region 信号
signal died
signal health_changed(old_value: int, new_value: int)
{{ADDITIONAL_SIGNALS}}
# endregion
# region 导出变量
@export_group("Stats")
@export var max_health: int = 100
@export var move_speed: float = 200.0
{{ADDITIONAL_EXPORTS}}
# endregion
# region 状态变量
var current_health: int:
set(value):
var old = current_health
current_health = clampi(value, 0, max_health)
health_changed.emit(old, current_health)
if current_health <= 0:
_die()
get:
return current_health
var is_alive: bool:
get: return current_health > 0
{{ADDITIONAL_STATE}}
# endregion
# region 组件引用
{{COMPONENT_REFS}}
# endregion
# region 生命周期
func _ready() -> void:
_setup_components()
_initialize()
func _physics_process(delta: float) -> void:
if not is_alive:
return
{{PHYSICS_CONTENT}}
# endregion
# region 公共方法
func take_damage(amount: int, source: Node = null) -> void:
if not is_alive:
return
current_health -= amount
func heal(amount: int) -> void:
if not is_alive:
return
current_health += amount
{{ADDITIONAL_PUBLIC}}
# endregion
# region 私有方法
func _setup_components() -> void:
{{SETUP_COMPONENTS}}
func _initialize() -> void:
current_health = max_health
{{INIT_CONTENT}}
func _die() -> void:
died.emit()
{{DIE_CONTENT}}
{{ADDITIONAL_PRIVATE}}
# endregion
用于可复用的功能组件。
## {{CLASS_DESCRIPTION}}
##
## 组件模式:附加到实体节点上提供特定功能
## @author AI Generated
## @version {{VERSION}}
class_name {{CLASS_NAME}}
extends Node
# region 信号
{{SIGNALS}}
# endregion
# region 导出变量
@export var enabled: bool = true
{{EXPORTS}}
# endregion
# region 私有变量
var _owner_entity: Node
{{PRIVATE_VARS}}
# endregion
# region 生命周期
func _ready() -> void:
_owner_entity = get_parent()
if not _owner_entity:
push_error("{{CLASS_NAME}} must be a child of an entity node")
return
_initialize()
func _process(delta: float) -> void:
if not enabled:
return
{{PROCESS_CONTENT}}
# endregion
# region 公共方法
{{PUBLIC_METHODS}}
# endregion
# region 私有方法
func _initialize() -> void:
{{INIT_CONTENT}}
{{PRIVATE_METHODS}}
# endregion
用于状态机中的各个状态。
## {{STATE_DESCRIPTION}}
##
## 状态机状态
## @author AI Generated
## @version {{VERSION}}
class_name {{CLASS_NAME}}
extends State
# region 导出变量
{{EXPORTS}}
# endregion
# region 状态生命周期
func enter() -> void:
{{ENTER_CONTENT}}
func exit() -> void:
{{EXIT_CONTENT}}
func update(delta: float) -> void:
{{UPDATE_CONTENT}}
func physics_update(delta: float) -> void:
{{PHYSICS_UPDATE_CONTENT}}
# endregion
# region 输入处理
func handle_input(event: InputEvent) -> void:
{{INPUT_CONTENT}}
# endregion
# region 状态转换检查
func get_transition() -> StringName:
{{TRANSITION_CHECKS}}
return &""
# endregion
用于 UI 界面控制。
## {{CLASS_DESCRIPTION}}
##
## UI 控制器
## @author AI Generated
## @version {{VERSION}}
class_name {{CLASS_NAME}}
extends Control
# region 信号
signal opened
signal closed
{{ADDITIONAL_SIGNALS}}
# endregion
# region 节点引用
{{NODE_REFS}}
# endregion
# region 生命周期
func _ready() -> void:
_setup_ui()
_connect_signals()
func _setup_ui() -> void:
{{SETUP_UI}}
func _connect_signals() -> void:
{{CONNECT_SIGNALS}}
# endregion
# region 公共方法
func open() -> void:
show()
opened.emit()
{{OPEN_CONTENT}}
func close() -> void:
hide()
closed.emit()
{{CLOSE_CONTENT}}
func refresh() -> void:
{{REFRESH_CONTENT}}
# endregion
# region 事件处理
{{EVENT_HANDLERS}}
# endregion
# region 数据绑定
{{DATA_BINDING}}
# endregion
用于游戏系统,如战斗系统、背包系统等。
## {{CLASS_DESCRIPTION}}
##
## 游戏系统
## @author AI Generated
## @version {{VERSION}}
class_name {{CLASS_NAME}}
extends Node
# region 信号
{{SIGNALS}}
# endregion
# region 常量
{{CONSTANTS}}
# endregion
# region 数据存储
{{DATA_STORAGE}}
# endregion
# region 生命周期
func _ready() -> void:
_load_config()
_initialize()
func _load_config() -> void:
{{LOAD_CONFIG}}
func _initialize() -> void:
{{INIT_CONTENT}}
# endregion
# region 公共 API
{{PUBLIC_API}}
# endregion
# region 内部逻辑
{{INTERNAL_LOGIC}}
# endregion
# region 事件处理
{{EVENT_HANDLERS}}
# endregion
# region 数据持久化
func save_data() -> Dictionary:
{{SAVE_DATA}}
return {}
func load_data(data: Dictionary) -> void:
{{LOAD_DATA}}
# endregion
用于定义数据结构。
## {{CLASS_DESCRIPTION}}
##
## 数据类定义
## @author AI Generated
## @version {{VERSION}}
class_name {{CLASS_NAME}}
extends Resource
# region 导出属性
{{PROPERTIES}}
# endregion
# region 构造函数
func _init({{INIT_PARAMS}}) -> void:
{{INIT_BODY}}
# endregion
# region 序列化
func to_dict() -> Dictionary:
return {
{{TO_DICT_BODY}}
}
static func from_dict(data: Dictionary) -> {{CLASS_NAME}}:
var instance = {{CLASS_NAME}}.new()
{{FROM_DICT_BODY}}
return instance
# endregion
# region 验证
func is_valid() -> bool:
{{VALIDATION}}
return true
# endregion
| 变量 | 说明 | 示例 |
|---|---|---|
{{CLASS_NAME}} | 类名 | PlayerController |
{{CLASS_DESCRIPTION}} | 类描述 | 玩家控制器,处理输入和移动 |
{{BASE_CLASS}} | 基类 | CharacterBody2D |
{{VERSION}} | 版本号 | 1.0.0 |
{{SIGNALS}} | 信号定义 | signal attacked(target) |
{{EXPORTS}} | 导出变量 | @export var speed: float = 100.0 |
{{PRIVATE_VARS}} | 私有变量 | var _velocity: Vector2 |
{{PUBLIC_METHODS}} | 公共方法 | - |
{{PRIVATE_METHODS}} | 私有方法 | - |
生成一个 InventorySystem 系统,支持:
- 物品添加/移除
- 物品堆叠
- 背包容量限制
- 物品使用
- 数据保存/加载
## 背包系统
##
## 管理玩家物品的存储、使用和持久化
## @author AI Generated
## @version 1.0.0
class_name InventorySystem
extends Node
# region 信号
signal item_added(item_id: String, amount: int)
signal item_removed(item_id: String, amount: int)
signal item_used(item_id: String)
signal inventory_full
signal inventory_changed
# endregion
# region 常量
const DEFAULT_CAPACITY: int = 20
# endregion
# region 数据存储
var _items: Dictionary = {} # item_id -> amount
var _capacity: int = DEFAULT_CAPACITY
var _item_database: Dictionary = {} # 物品配置缓存
# endregion
# region 生命周期
func _ready() -> void:
_load_config()
_initialize()
func _load_config() -> void:
var config_path = "res://config/data/items.json"
if FileAccess.file_exists(config_path):
var file = FileAccess.open(config_path, FileAccess.READ)
var json = JSON.new()
if json.parse(file.get_as_text()) == OK:
for item in json.data:
_item_database[item.id] = item
file.close()
func _initialize() -> void:
_items.clear()
# endregion
# region 公共 API
func add_item(item_id: String, amount: int = 1) -> bool:
if not _item_database.has(item_id):
push_error("Unknown item: " + item_id)
return false
var item_config = _item_database[item_id]
var current = _items.get(item_id, 0)
var max_stack = item_config.get("max_stack", 99)
if not item_config.get("stackable", true) and current > 0:
if get_total_slots_used() >= _capacity:
inventory_full.emit()
return false
var new_amount = mini(current + amount, max_stack)
var added = new_amount - current
if added > 0:
_items[item_id] = new_amount
item_added.emit(item_id, added)
inventory_changed.emit()
return true
return false
func remove_item(item_id: String, amount: int = 1) -> bool:
if not _items.has(item_id):
return false
var current = _items[item_id]
var new_amount = current - amount
if new_amount <= 0:
_items.erase(item_id)
else:
_items[item_id] = new_amount
item_removed.emit(item_id, mini(amount, current))
inventory_changed.emit()
return true
func use_item(item_id: String) -> bool:
if not has_item(item_id):
return false
var item_config = _item_database.get(item_id)
if not item_config:
return false
# 执行物品效果
_apply_item_effects(item_config)
# 消耗品则移除
if item_config.get("type") == "consumable":
remove_item(item_id, 1)
item_used.emit(item_id)
return true
func has_item(item_id: String, amount: int = 1) -> bool:
return _items.get(item_id, 0) >= amount
func get_item_amount(item_id: String) -> int:
return _items.get(item_id, 0)
func get_all_items() -> Dictionary:
return _items.duplicate()
func get_total_slots_used() -> int:
return _items.size()
func get_capacity() -> int:
return _capacity
func set_capacity(new_capacity: int) -> void:
_capacity = new_capacity
# endregion
# region 内部逻辑
func _apply_item_effects(item_config: Dictionary) -> void:
var effects = item_config.get("effects", [])
for effect in effects:
match effect.type:
"heal_hp":
EventBus.emit_signal("heal_player", effect.value)
"heal_mp":
EventBus.emit_signal("restore_mp", effect.value)
"buff":
EventBus.emit_signal("apply_buff", effect.buff_id, effect.duration)
# endregion
# region 数据持久化
func save_data() -> Dictionary:
return {
"items": _items.duplicate(),
"capacity": _capacity
}
func load_data(data: Dictionary) -> void:
_items = data.get("items", {}).duplicate()
_capacity = data.get("capacity", DEFAULT_CAPACITY)
inventory_changed.emit()
# endregion
生成代码后自动检查: