ARK 서버용 ' 자살 명령어' 커맨드 플러그인 제작기 🔫
목차4개 항목
🧠 왜 만들었는가?
ARK 서버 운영을 하다 보면, 다음과 같은 상황들이 종종 발생합니다.
- 지형 버그에 끼어서 움직이지 못함
- 텔레포트 기능 없이 리스폰이 필요한 상황
- 스스로 죽지 않으면 진행이 안 되는 퀘스트나 이벤트
이럴 때 서버 운영자나 유저에게 /suicide 명령어를 제공하면 굉장히 유용합니다.
하지만 너무 무분별하게 사용되면 서버 밸런스를 해칠 수도 있죠. 그래서 저는 "조건부 자살 명령어" 플러그인을 만들었습니다. 즉, 관리자가 허용한 상황에서만 자살이 가능하도록 제어하는 거죠.
🧩 주요 기능
- 🛡️ 관리자 전용 설정 가능 (AllowOnlyAdminCommand)
- 🦖 탈것 탑승 중 자살 제한 (AllowRidingDinoSuicide)
- 😵 무의식 상태에서 자살 제한 (AllowUnconsiousSuicide)
- 🧠 노글린 정신지배 상태 제한 (AllowNoglineSuicide)
- 🔗 수갑 착용 중 제한 (AllowTakeUpHandcuffs)
- 💊 특정 버프 보유 중 제한 (AllowCustomHaveBuffs)
- 🔫 특정 무기 장착 중 제한 (AllowCustomTakeUpWeapon)
CommandSuicide.cpp
void CommandSuicide(AShooterPlayerController* playerController, FString* msg, int mode) {
if (!config["suicide"]["EnableMode"])
return;
// 관리자 권한 체크
if (config["suicide"]["AllowOnlyAdminCommand"] == true) {
if (!playerController->bIsAdmin()()) {
// 관리자 아닐 경우 차단 메시지 출력
SendDenyMessage(playerController, "PermissionDeniedMessage");
return;
}
}
// 탈것 탑승 체크
if (!config["suicide"]["AllowRidingDinoSuicide"] && playerController->IsRidingDino()) {
SendDenyMessage(playerController, "DeniedRidingDinoSuicideMessage");
return;
}
// 무의식 상태 체크
if (!config["suicide"]["AllowUnconsiousSuicide"] && !playerController->GetPlayerCharacter()->IsConscious()) {
SendDenyMessage(playerController, "DeniedUnconsiousSuicideMessage");
return;
}
// 노글린 정신지배 체크
if (!config["suicide"]["AllowNoglineSuicide"] && bIsNoglinMindControllForPlayer(playerController)) {
SendDenyMessage(playerController, "DeniedNoglineSuicideMessage");
return;
}
// 수갑 착용 체크
if (!config["suicide"]["AllowTakeUpHandcuffs"] && bIsPlayerHandCuffed(playerController)) {
SendDenyMessage(playerController, "DeniedTakeUpHandcuffsMessage");
return;
}
// 커스텀 버프 보유 여부 확인
if (!config["suicide"]["AllowCustomHaveBuffs"]) {
if (bIsPlayerHaveBuffs(playerController, LoadBuffList("BuffList"))) {
SendDenyMessage(playerController, "DeniedCustomHaveBuffsMessage");
return;
}
}
// 커스텀 무기 장착 여부 확인
if (!config["suicide"]["AllowCustomTakeUpWeapon"]) {
if (bIsPlayerTakeUpWeapon(playerController, LoadBuffList("weaponList"))) {
SendDenyMessage(playerController, "DeniedCustomTakeUpWeaponMessage");
return;
}
}
// 자살 실행
playerController->GetPlayerCharacter()->Suicide();
SendSuccessMessage(playerController, "SuicideMessage");
}💬 메시지 출력과 목록 로딩은 헬퍼 함수로 추상화하면 깔끔해요!
PlayerStatusUtils.cpp
bool bIsPlayerHaveBuffs(AShooterPlayerController* playerController, TArray<FString> BuffList) {
auto playerBuffs = playerController->GetPlayerCharacter()->BuffsField();
for (auto buff : playerBuffs) {
FString playerBuffBP = ArkApi::GetApiUtils().GetBlueprint(buff);
if (BuffList.Contains(playerBuffBP)) return true;
}
return false;
}
bool bIsNoglinMindControllForPlayer(AShooterPlayerController* playerController) {
TArray<FString> noglinBuff = { "Blueprint'/Game/Genesis2/Dinos/BrainSlug/Buff_BrainSlug_HumanControl.Buff_BrainSlug_HumanControl'" };
return bIsPlayerHaveBuffs(playerController, noglinBuff);
}
bool bIsPlayerTakeUpWeapon(AShooterPlayerController* playerController, TArray<FString> WeaponList) {
auto weapon = playerController->GetPlayerCharacter()->CurrentWeaponField();
if (!weapon) return false;
FString weaponBP = ArkApi::GetApiUtils().GetBlueprint(weapon->AssociatedPrimalItemField());
return WeaponList.Contains(weaponBP);
}🛠️ 적용 방법
- CommandSuicide.cpp 와 PlayerStatusUtils.cpp 를 프로젝트에 추가 (일부 소스코드는 아직 비공개 입니다 :D)
- suicide 관련 설정 항목 .json 파일에 정의
- 커맨드 시스템에 suicide 명령어 연결
- 테스트 → 성공하면 운영 적용!
💬 마무리
게임 내 자살 기능이라고 하면 무겁게 느껴질 수 있지만, 서버 운영 측면에선 굉장히 필요하고 실용적인 기능이 될 수 있습니다.
플레이어가 자유롭게 상황을 정리할 수 있게 하면서도, 운영자는 그 자유를 제어 가능한 옵션으로 만들 수 있어요.
