게임

palworld(팔월드, 팰월드) 서버 여는법, 세팅법

blackbearwow 2024. 1. 23. 23:31

목차

1. 요구사항

2. Windows - Steam

3. Windows - SteamCMD

4. Linux - SteamCMD

5. palworldsettings.ini 서버 세팅

6. 서버 명령어 (Server command)

7. 메모리 누수 해결하기


1. 요구사항

CPU 4코어 이상 권장
RAM 공식 사이트에는 16GB라고 적혀있다. 하지만 직접 서버를 켜보니 16GB로는 4명 서버(초대서버)만 버틸 것 같고 32기가는 되어야 4명이상을 버틸 수 있다. 현재 램 누수가 있어 램을 많이 먹는다.
Network UDP 8211포트의 포트포워딩 필요 (필자는 TCP를 포트포워딩하고 왜 안되지 애먹었다)

2. Windows - Steam

게임서버를 만들어보지 않은사람에게 추천하는 방법. 가장 쉬운 서버 만들기 방법이다.

스팀 라이브러리에서 Palworld Dedicated Server를 찾는다.

위 옵션을 클릭 후 Play.

위와 같이 화면이 뜬다면 성공. 만약 연결이 안된다면, ip주소가 정확한건지 그리고 포트포워딩을 잘 했는지 그리고 윈도우 보안 세팅이 적절히 되었는지 확인한다.

3. Windows - SteamCMD

3.1. SteamCMD를 설정한다

- Windows용 SteamCMD를 다운한다  : [링크]

- zip폴더를 steamcmd폴더에 압축해제한다.

3.2. SteamCMD로그인, 앱다운, 서버실행

steamcmd를 켜서 실행할 것들:

login anonymous
app_update 2394010 validate
quit

다운로드가 다 되었다면, steamcmd경로\steamapps\common\PalServer\PalServer.exe로 서버를 실행시킨다.

※ 아직 서버 프로그램은 초기라서 메모리 누수가 많다. app_update 2394010 validate로 서버 프로그램을 최신으로 유지시키자.

4. Linux - SteamCMD

4.1. SteamCMD를 설정한다

SteamCMD를 안전하게 실행시킬 새로운 user account 이름 steam을 만들어, os와 격리시킨다.

경고: root유저로 steamcmd를 실행시키지 마라. 보안상 위험성이 있다.

- root유저로 steam user를 만든다:

sudo useradd -m steam
sudo passwd steam

- home folder로 간다:

sudo -u steam -s
cd ~

Ubuntu

sudo add-apt-repository multiverse; sudo dpkg --add-architecture i386; sudo apt update
sudo apt install steamcmd

Debian

sudo apt update; sudo apt install software-properties-common; sudo apt-add-repository non-free; sudo dpkg --add-architecture i386; sudo apt update
sudo apt install steamcmd

Docker

docker run -it --name=steamcmd cm2network/steamcmd bash

4.2. SteamCMD로그인, 앱다운, 서버실행

steamcmd를 켜서 실행할 것들:

login anonymous
app_update 2394010 validate
quit

다운로드가 다 되었다면, Steam\steamapps\common\PalServer\PalServer.sh로 서버를 실행시킨다.

※ 아직 서버 프로그램은 초기라서 메모리 누수가 많다. app_update 2394010 validate로 서버 프로그램을 최신으로 유지시키자.

※ 서버가 업데이트됐다면 steam에 sudo권한을 주자. sudo vim /etc/sudoers에 steam ALL=(ALL:ALL) ALL을 잠시 추가해 steam이 steamcmd를 실행할 수 있게 하자.

 

.steam/sdk64/steamclient.so: cannot open shared object file: No such file or directory

라는 오류가 뜬다면, 

mkdir -p ~/.steam/sdk64/
steamcmd +login anonymous +app_update 1007 +quit
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/

로 해결할 수 있다.

다음과 같이 뜬다면 성공한것이다

$ ./PalServer.sh
Shutdown handler: initalize.
Increasing per-process limit of core file size to infinity.
dlopen failed trying to load:
steamclient.so
with error:
steamclient.so: cannot open shared object file: No such file or directory
[S_API] SteamAPI_Init(): Loaded '/home/ubuntu/.steam/sdk64/steamclient.so' OK.  (First tried local 'steamclient.so')

5. PalWorldSettings.ini 서버 세팅

세팅파일을 통해 설정하자.

서버설정법 PalWorldSettings.ini 경로(path)
Windows - Steam 모름
Windows - SteamCMD Pal/Saved/Config/WindowsServer/PalWorldSettings.ini
Linux - SteamCMD Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

내용은 다음과 같이 키-값 쌍으로 되어있다.

[/Script/Pal.PalGameWorldSettings]
OptionSettings=(Difficulty=None,DayTimeSpeedRate=1.000000,NightTimeSpeedRate=1.000000,...)

모든 세팅

매개변수 설명
Difficulty 게임의 난이도 조정 (None, Casual, Normal, Hard)
DayTimeSpeedRate 낮에 지나는 시간 배율 설정
NightTimeSpeedRate 밤에 지나는 시간 배율 설정
ExpRate 플레이어와 창작물의 경험치를 얻는 비율을 바꾼다
PalCaptureRate 팔 포획 확률 변경
PalSpawnNumRate 팔 창작물의 스폰 비율 조절
PalDamageRateAttack 팔 창작물의 데미지 조정
PalDamageRateDefense 팔 창작물의 데미지 받기 조정
PlayerDamageRateAttack 플레이어의 데미지 조정
PlayerDamageRateDefense 플레이어의 데미지 받기 조정
PlayerStomachDecreaseRate 플레이어 배고픔 닳는 비율 조정
PlayerStaminaDecreaseRate 플레이어 스테미나 감소 비율 조정
PlayerAutoHPRegeneRate 플레이어 hp자동으로 차는 비율 조정
PlayerAutoHpRegeneRateInSleep 플레이어 잠잘 때 hp자동으로 차는 비율 조정
PalStomachDecreaseRate 팔 배고픔 닳는 비율 조정
PalStaminaDecreaseRate 팔 스테미나 감소 비율 조정
PalAutoHPRegeneRate 팔 hp자동으로 차는 비율 조정
PalAutoHpRegeneRateInSleep 팔 잠잘 때 hp자동으로 차는 비율 조정
BuildObjectDamageRate 빌드 개체가 손상되는 비율 조정
BuildObjectDeteriorationDamageRate 빌드 개체의 악화되는 비율 설정
CollectionDropRate 수집된 항목의 드롭률 조정
CollectionObjectHpRate 수집된 항목의 건강 조정
CollectionObjectRespawnSpeedRate 수집된 항목의 리스폰 스피드 조정
EnemyDropItemRate 패배시킨 적의 아이템 드롭 확률 조정
DeathPenalty 플레이어 죽음 페널티 (ALL, ItemAndEquipment, Item, None)
bEnablePlayerToPlayerDamage  
bEnableFriendlyFire  
bEnableInvaderEnemy 적침입 이벤트를 가능하게 한다. (메모리 누수 때문에 False를 해야한다)
bActiveUNKO  
bEnableAimAssistPad  
bEnableAimAssistKeyboard  
DropItemMaxNum 게임에서 드랍되는 아이템의 최대 개수 설정
DropItemMaxNum_UNKO 게임에서 드랍되는 UNKO 아이템의 최대 개수 설정
BaseCampMaxNum 베이스캠프를 지을 수 있는 최대 개수 설정
BaseCampWorkerMaxNum 베이스캠프에서 일할 수 있는 최대 일꾼 수 설정
DropItemAliveMaxHours 드랍된 아이템이 최대 얼마나 살아있을 수 있는지 설정
bAutoResetGuildNoOnlinePlayers  
AutoResetGuildTimeNoOnlinePlayers  
GuildPlayerMaxNum 길드 최대인원수 설정
PalEggDefaultHatchingTime 팔 알의 기본 부화시간 설정
WorkSpeedRate 모든 작업시간 비율 조정
bIsMultiplay  
bIsPvP  
bCanPickupOtherGuildDeathPenaltyDrop  
bEnableNonLoginPenalty  
bEnableFastTravel  
bIsStartLocationSelectByMap  
bExistPlayerAfterLogout  
bEnableDefenseOtherGuildPlayer  
CoopPlayerMaxNum 세션에서 협동하는 플레이어의 최대 수 설정
ServerPlayerMaxNum 서버에서 최대 허용 가능 플레이어 수 설정
ServerName 서버 이름 설정
ServerDescription 서버 설명 제공
AdminPassword 관리자 비밀번호
ServerPassword  
PublicPort  
PublicIP  
RCONEnabled RCON 사용 여부(True, False)
RCONPort RCON 포트 번호
Region  
bUseAuth  
BanListURL  

6. 서버 명령어 (Server command)

- 어떻게 명령을 실행시키는가

명령들은 게임안에서 또는 RCON을 통해 실행시켜야 한다.

 

- 명령들

다음 명령들을 실행시키고싶다면. 너는 AdminPassword를 설정 후 /AdminPassword 명령을 하여 관리자 권한을 얻어야 한다.

명령 설명
/Shutdown {Seconds} {MessageText} 서버는 지정된 (숫자)초 뒤에 꺼진다. 메시지가 공지된다.
/DoExit 서버를 강제로 종료한다.
/Broadcast {MessageText} 서버의 모든 플레이어에게 메세지를 보낸다.
/KickPlayer {SteamID} 플레이어를 서버에서 추방한다.
/BanPlayer {SteamID} 플레이어를 서버에서 밴한다.
/TeleportToPlayer {SteamID} 대상 플레이어를 현재 위치로 텔레포트시킨다.
/TeleportToMe {SteamID} 대상 플레이어를 내 위치로 텔레포트시킨다.
/ShowPlayers 모든 접속중인 플레이어 정보를 보여준다.
/Info 서버 정보를 보여준다.
/Save
월드 정보를 저장한다.

SteamID 얻는법 - 관리자 권한이 있다면 SteamID를 복사할 수 있다.

플레이어 리스트에서 우클릭 두번으로 복사한다.

 

플레이어 밴 푸는법 - Pal/Saved/SaveGames/banlist.txt에서 SteamID를 지우면 된다. 적용하는데 2분정도 걸린다.

 

7. 메모리 누수 해결하기

여러 이슈 깃허브 - https://gist.github.com/Toakan/3c78a577c21a21fcc5fa917f3021d70e

 

현재 팔월드 서버의 메모리 누수가 엄청나다. 필자는 우분투 쉘코드로 3분마다 메모리 잔여량을 확인해 잔여량이 부족할 경우 서버를 재부팅 하였다.

#!/usr/bin/bash
# serverPalShell.sh

function palBG {
        ./PalServer.sh &
}
function checkFreeMem {
        freeMem=`free | grep Mem | awk '{print $4/$2*100}'`
        # 잔여 메모리가 15퍼센트 미만이라면
        if [ $(echo "$freeMem < 15" | bc) -eq 1 ]
        then
                rebootPalServer
        fi
}
function rebootPalServer {
        ./rcon-0.10.3-amd64_linux/rcon -a 127.0.0.1:25555 -p passwd "Broadcast memory_is_full"
        ./rcon-0.10.3-amd64_linux/rcon -a 127.0.0.1:25555 -p passwd "Broadcast server_will_reboot_after_2_minute"
        sleep 1m
        ./rcon-0.10.3-amd64_linux/rcon -a 127.0.0.1:25555 -p passwd "Broadcast server_will_reboot_after_1_minute"
        sleep 30s
        ./rcon-0.10.3-amd64_linux/rcon -a 127.0.0.1:25555 -p passwd "Broadcast server_will_reboot_after_30_seconds"
        sleep 20s
        ./rcon-0.10.3-amd64_linux/rcon -a 127.0.0.1:25555 -p passwd "Broadcast server_will_reboot_after_10_seconds"
        sleep 5s
        ./rcon-0.10.3-amd64_linux/rcon -a 127.0.0.1:25555 -p passwd "Save"
        ./rcon-0.10.3-amd64_linux/rcon -a 127.0.0.1:25555 -p passwd "Shutdown 5 server_will_reboot_after_5_seconds"
        sleep 20s
        palBG
}

# 실행

palBG

while true
do
        sleep 3m
        checkFreeMem
done

사용된 rcon 모듈: https://github.com/gorcon/rcon-cli

 

다른분은 crontab을 사용하여 해결하신 분도 있습니다: https://pokjuknam.tistory.com/6

 


참고:

https://tech.palworldgame.com/dedicated-server-guide

https://developer.valvesoftware.com/wiki/SteamCMD

https://help.dathost.net/article/150-palworld-how-to-edit-server-settings

https://tech.palworldgame.com/server-commands

 

 

'게임' 카테고리의 다른 글

windows에서 nintendo wii 하기 - dolphin  (0) 2023.04.07
windows에서 nintendo DS 하기 - desmume  (0) 2023.04.06