Squad-ის სერვერი ორი პრობლემაა ერთ ქურთუკში. პირველი ადმინისტრაციულია: Offworld Industries-ის ლიცენზიის გარეშე სერვერი სავსებით კარგად მუშაობს, მაგრამ მთავარ ბრაუზერში კი არა, Custom Servers ჩანართში ჩანს, ლიცენზიას კი პირობები ახლავს - სლოტების რაოდენობა კონკრეტულ დიაპაზონში, რეალური ადმინების სია, სერვერი მუდმივად საჯარო - და ისინი წყვეტს, როგორი community-ის გაძღოლას იღებ საკუთარ თავზე, ჯერ კიდევ მანამ, სანამ ტექნიკაზე ერთ ცენტსაც დახარჯავ. მეორე პრობლემა ტექნიკაა და ის უფრო მარტივია, ვიდრე ჩანს. ასი მოთამაშე, მათი ტექნიკა და მათი ტყვიები ერთი Unreal Engine-ის game thread-ია. tick rate-ს ერთი ბირთვის სიხშირე განსაზღვრავს და თითქმის არაფერი სხვა. დაგეგმე დაახლოებით 16 GB მეხსიერება, ბირთვები, რომლებსაც უცხო ადამიანთან არ იზიარებ, 60 GB სწრაფი დისკი და ხუთი ღია პორტი, შემდეგ კი ყურადღება ლიცენზიასა და layer-ების rotation-ს მიუძღვენი.
ლიცენზია და რას გაძლევს ის სინამდვილეში#
Squad თავის server browser-ს ორად ყოფს. ლიცენზირებული სერვერები მთავარ Server Browser ჩანართში ჩანს. ყველა დანარჩენი - Custom Servers-ში. ორივე მუშაობს. ორივე აჩვენებს ping-ს, მოთამაშეების რაოდენობასა და რუკას. განსხვავება აღმოჩენადობაშია: მთავარი ჩანართი იქაა, სადაც ის მოთამაშე ხვდება, ვინც თამაშს ხსნის და Servers-ს აჭერს, Custom ჩანართში კი ის მიდის, ვისაც ვინმემ უთხრა, რას ეძებოს.
ეს ერთი ფაქტი სტრატეგიას განსაზღვრავს. თუ სერვერს ორმოცი მუდმივი წევრის Discord-ისთვის უშვებ, რომლებიც სახელით შემოდიან, ლიცენზია უსარგებლოა და მისი მოთხოვნა შეცდომაა - ვალდებულებებს აიღებდი ხილვადობისთვის, რომელიც არ გჭირდება. თუ ნულიდან საჯარო 80-სლოტიან სერვერს აშენებ, ლიცენზია მთელი აზრია, რადგან სხვაგვარად ვერავინ გიპოვის.
განაცხადები license.offworldindustries.com-ზე მიდის. პოლიტიკა Offworld-ისაა და იცვლება, ამიტომ გეგმის დახაზვამდე მიმდინარე ვერსია წაიკითხე, თუმცა ამ წერისას მისი ფორმა დიდი ხანია სტაბილურია:
- სლოტების დიაპაზონი. 80 სლოტზე ნაკლები სერვერები ლიცენზირებული არ არის; მათგან მოსალოდნელია, რომ Custom ბრაუზერში დარჩებიან. სერვერები, რომლებიც 100 სლოტზე მეტს აცხადებენ, უარყოფილია.
- ადმინების სია. სულ მცირე ათი ადმინი ლიცენზირებულ სერვერზე, რაც იზრდება შენი სერვერების რაოდენობასთან ერთად, და ადმინები პიკის საათებში ადგილზე არიან.
- მუდმივად საჯარო. პაროლი არ გვაქვს, სერვერის დამალვა არ შეიძლება, კლანის საღამოებისთვის კერძოდ გადართვაც არა. Offworld-ის თანამშრომლებს ნებისმიერ დროს უნდა შეეძლოთ შესვლა.
- ქცევა. ლიცენზირებული სერვერები community-ის წესებს ეთანხმებიან და მათ უგულებელყოფის გამო ლიცენზიის დაკარგვა შეუძლიათ.
თვითონ ლიცენზია ID-სა და გასაღებად მოდის, რომლებიც SquadGame/ServerConfig/License.cfg-ში იწერება იმ ფორმით, რომელსაც გამცემი ელფოსტა მიუთითებს. ეს წყვილი პაროლივით მოექცი: ის შენს ორგანიზაციას Offworld-თან ამოიცნობს, გაჟონვის შემთხვევაში შეიძლება ხელახლა გენერირდეს და მისი ადგილი არ არის არც შენი config საქაღალდის სქრინშოტში და არც საჯარო GitHub repository-ში. თუ hosting panel-ს იყენებ, ლიცენზია სერვერზე ფაილშია და არა შენს ბილინგის ანგარიშში, ამიტომ ჰოსტის შეცვლა ლიცენზიას არ გაკარგვინებს - მაგრამ ეს ნიშნავს, რომ ფაილებზე წვდომის მქონე ნებისმიერ ადამიანს ის აქვს. ესაა კარგი მიზეზი, დამხმარეებს subuser მისცე იმ უფლებებით, რომლებიც სჭირდებათ და არაფრით მეტით.
Server.cfg-ში რამდენიმე პარამეტრი ფაილშივეა მონიშნული, როგორც ლიცენზირებული სერვერებისთვის სავალდებულო. ესენია team-kill-ის ავტომატური kick-ის ბლოკი და AllowCommunityAdminAccess, რომლებიც ქვემოთ არის განხილული. ლიცენზიის გარეშე სერვერზე მათ როგორც გინდა, ისე დააყენებ.
რა სჭირდება სერვერს: CPU, მეხსიერება და დისკი#
Squad აგებულია Unreal Engine-ზე, ხოლო ავტორიტეტული სიმულაცია - მოძრაობა, დარტყმის რეგისტრაცია, ტექნიკის ფიზიკა, ტყვიის ფრენა - ერთ game thread-ზე მუშაობს. მეტი ბირთვი ეხმარება ოპერაციულ სისტემას, ქსელის thread-ებსა და მანქანაზე დანარჩენ ყველაფერს, მაგრამ სიმულაციის ნაბიჯს უფრო სწრაფად ვერ ასრულებინებს. ეს თამაშის ზომის შერჩევის ყველაზე მნიშვნელოვანი ფაქტია და სწორედ ამიტომ შეიძლება ერთი და იმავე RAM-ის მქონე ორი სერვერი სრულიად სხვადასხვანაირად იგრძნობოდეს.
| სლოტები | RAM | CPU | რეალისტური მოლოდინი |
|---|---|---|---|
| 20-40, ქვეითი layer-ები | 8-10 GB | 2 სწრაფი ბირთვი | კომფორტულია, tick მაღალი რჩება |
| 50-60, შერეული layer-ები | 12 GB | 3-4 სწრაფი ბირთვი | კერძო community-ის ჩვეულებრივი ზომა |
| 80-100, ლიცენზირებული საჯარო | 16-20 GB | 4+ სწრაფი ბირთვი, მაღალი სიხშირე | შემზღუდველი tick-ია და არა მეხსიერება |
| ძლიერ მოდიფიცირებული, ნებისმიერი ზომა | 20-24 GB+ | 4+ სწრაფი ბირთვი | მთლიანად მოდების ნაკრებზეა დამოკიდებული |
- CPU. სიხშირე ბირთვების რაოდენობაზე მაღლაა, გამონაკლისის გარეშე. სავსე სერვერს სჭირდება თანამედროვე desktop კლასის ჩიპი, რომელიც დატვირთულ ბირთვზე 4.5 GHz-ს ზემოთ მუშაობს. 32 ნელი ბირთვის მქონე უფრო ძველი server კლასის პროცესორი 100-სლოტიან Squad სერვერს ცუდად გაუძღვება.
- მეხსიერება. Squad იმისთვის, რაც არის, განსაკუთრებით მეხსიერების მჭამელი არ არის. 16 GB სრულ vanilla სერვერს რეზერვით ფარავს. მეხსიერების დამატება სერვერზე, რომლის tick rate-ც ეცემა, საერთოდ არაფერს ცვლის - იხილე CPU თუ RAM: რომელი აყოვნებს შენს სერვერს, რომ გაიგო, რომელი გაქვს სინამდვილეში.
- დისკი. dedicated სერვერის ინსტალაცია დიდია და ყოველ მთავარ რელიზთან ერთად გაიზარდა. ბოლო ვერსიები მოდებამდე სადღაც 30-60 GB-ში ეტევა, ამიტომ თუ Workshop-ის კონტენტის გაშვებას აპირებ, დისკი 80 GB-ზე აარჩიე და რეალური რიცხვი პირველი ინსტალაციის შემდეგ შეამოწმე, ნუ ენდობი ბლოგპოსტში მოცემულ ციფრს, ამ პოსტისაც კი.
- გაზიარებული CPU ხაფანგია. Squad-ის მთელი წარმადობის პროფილი იმაზეა დამოკიდებული, რომ ერთ thread-ს ბირთვი ყოველთვის ჰქონდეს, როცა მოითხოვს. გადატვირთულ გაზიარებულ ტექნიკაზე გიჩნდება thread, რომელიც გასაშვებად მზადაა და დროის ნაჭერს ელოდება, რაც tick rate-ის ისეთ ვარდნად ჩანს, რომელიც არაპროგნოზირებად დროს ხდება და არა დატვირთვისას. გაზიარებული CPU და ხმაურიანი მეზობლები ამ არგუმენტის უფრო გრძელი ვერსიაა.
layer-ის არჩევანი დატვირთვას უფრო მეტად ცვლის, ვიდრე უმეტესობა ელოდება. დიდი ღია რუკა ტექნიკის, ვერტმფრენებისა და გრძელი ხედვის ხაზების სრული კომპლექტით tick-ზე მნიშვნელოვნად მეტი ჯდება, ვიდრე დახურული ქვეითი layer იმავე სერვერზე იმავე მოთამაშეებთან. თუ შენი rotation მთლიანად ჯავშანტექნიკის layer-ებია, ზომა ამას მოარგე და არა საშუალოს.
ინსტალაცია SteamCMD-ით#
dedicated სერვერი უფასო ანონიმური ჩამოტვირთვაა, Steam app id 403240. გაითვალისწინე, რომ ეს თამაშის app id არ არის - 393380 კლიენტია და სწორედ ის id გამოიყენება Workshop მოდების ჩამოსატვირთადაც, რაც ხალხს ერევა.
$ steamcmd +force_install_dir /home/squad/server \ +login anonymous +app_update 403240 validate +quit$ cd /home/squad/server$ ./SquadGameServer.sh Port=7787 QueryPort=27165 beaconport=15000 \ RCONPORT=21114 FIXEDMAXPLAYERS=80 RANDOM=NoneWindows-ზე ექვივალენტია SquadGameServer.exe იმავე არგუმენტებით; panel-ზე დაფუძნებულ ჰოსტზე ამ ხაზს არასოდეს აკრეფ, რადგან იგივე პარამეტრები Startup ჩანართზე ველებად ჩანს და panel თვითონ აწყობს მას. ორივე შემთხვევაში მნიშვნელოვანი პარამეტრებია:
| პარამეტრი | ტიპური მნიშვნელობა | რას აკეთებს |
|---|---|---|
Port | 7787 | თამაშის ტრაფიკი. სერვერი შემდეგ პორტსაც იკავებს |
QueryPort | 27165 | ის, რასაც server browser ესაუბრება |
beaconport | 15000 | სესიის beacon, გამოიყენება შესვლისას |
RCONPORT | 21114 | დისტანციური კონსოლი, TCP |
FIXEDMAXPLAYERS | 80 | მკაცრი ზღვარი სლოტებზე, MaxPlayers-ისგან დამოუკიდებელი |
MULTIHOME | 0.0.0.0 | რომელი მისამართი დაიკავოს, როცა მანქანას რამდენიმე აქვს |
RANDOM | None | rotation-ი დაწყებისას აირიოს თუ არა |
FIXEDMAXTICKRATE | 50 | სამიზნე tick-ები წამში |
პირველი გაშვება config საქაღალდეს აგენერირებს და შემდეგ პირველ layer-ს ტვირთავს, რასაც ცივ, დაუქეშებელ დისკზე გარკვეული დრო სჭირდება. კონსოლს უყურე, სანამ სერვერი არ იტყვის, რომ დონე ჩაიტვირთა და query port დაკავდა. SteamCMD ახსნილი მოიცავს validate-ს, beta-ებს და განახლების სკრიპტებს, რომლებიც დაგჭირდება, როცა ეს რუტინა გახდება.
Server.cfg ხაზ-ხაზ#
სერვერის იდენტობა და წესები მთლიანად SquadGame/ServerConfig/Server.cfg-ში ცხოვრობს. ფაილი უბრალო Key=Value ფორმატისაა // კომენტარებით და მოწოდებული ვერსია საკმაოდ კარგად ხსნის თავს. აი ხაზები, რომელთა გაგებაც ღირს:
ServerName="Longshot Tactical | Teamwork or Leave"ShouldAdvertise=trueIsLANMatch=falseMaxPlayers=80NumReservedSlots=4PublicQueueLimit=25MapRotationMode=LayerListRandomizeAtStart=trueUseVoteFactions=falseUseVoteLevel=falseUseVoteLayer=falseAllowTeamChanges=truePreventTeamChangeIfUnbalanced=trueNumPlayersDiffForTeamChanges=3RejoinSquadDelayAfterKick=180ServerMessageInterval=300RecordDemos=falseAllowPublicClientsToRecord=falseTKAutoKickEnabled=trueAutoTKBanNumberTKs=7AutoTKBanTime=300VehicleKitRequirementDisabled=falseAllowCommunityAdminAccess=true| პარამეტრი | ნაგულისხმევი | რას წყვეტს |
|---|---|---|
ShouldAdvertise | true | ჩანს თუ არა სერვერი ბრაუზერში საერთოდ |
IsLANMatch | false | LAN რეჟიმი. თუ true-ზე დააყენებ, გარედან ვერავინ გიპოვის |
MaxPlayers | 100 | სლოტების რაოდენობა დაჯავშნილი სლოტების ჩათვლით |
NumReservedSlots | 0 | ადმინებისა და წევრებისთვის შენახული სლოტები MaxPlayers-ის შიგნით |
PublicQueueLimit | 25 | რიგის ზომა. 0 რიგს თიშავს, -1 შეუზღუდავია |
MapRotationMode | LayerList | რომელი rotation ფაილი გამოიყენება და ირევა თუ არა |
RandomizeAtStart | true | rotation-ის არევა ჩართვისას |
NumPlayersDiffForTeamChanges | 3 | რამდენად უთანასწორო შეიძლება გახდეს გუნდები, სანამ გადასვლა დაიბლოკება |
RejoinSquadDelayAfterKick | 180 | წამები, რომლის შემდეგაც გაძევებულ მოთამაშეს ამ squad-ში დაბრუნება შეუძლია |
ServerMessageInterval | 300 | წამები ServerMessages.cfg-ის ხაზებს შორის |
AutoTKBanNumberTKs | 7 | team kill-ები რაუნდში ავტომატურ ban-მდე |
AutoTKBanTime | 300 | ამ ban-ის ხანგრძლივობა, წუთებში |
ამათგან ორი ხალხს აწყდება. NumReservedSlots MaxPlayers-იდან იკლება და მას არ ემატება: სერვერი MaxPlayers=80-ითა და NumReservedSlots=4-ით 76-სლოტიანი საჯარო სერვერია. და ServerName ის არის, რაზეც Custom ბრაუზერში შენი მთელი აღმოჩენადობის სტრატეგიაა დაფუძნებული, რადგან თამაშის ფილტრი ქვესტრიქონის ძებნაა - ჩასვი მასში გამორჩეული სიტყვა და მოთამაშეებს ეს სიტყვა უთხარი.
საქაღალდის დანარჩენი ნაწილი ერთმიზნიანი ფაილების ნაკრებია: Admins.cfg, Bans.cfg, License.cfg, Motd.cfg, ServerMessages.cfg, Rcon.cfg, LayerRotation.cfg, LevelRotation.cfg, ExcludedLayers.cfg, ExcludedFactions.cfg, VoteConfig.cfg და კიდევ რამდენიმე. ზუსტი ნაკრები მთავარ ვერსიებს შორის იცვლება. როცა რომელიმე გზამკვლევი ფაილის რედაქტირებას გირჩევს, რომელიც არ გაქვს, ხელით შექმნამდე შეამოწმე, ხომ არ გადაარქვა შენმა ვერსიამ სახელი - მოხვედრილი უცხო config ფაილი ჩუმად იგნორირდება, რაც უარესი შესაძლო ჩავარდნის რეჟიმია.
პორტები და firewall#
Squad-ს ხუთი პორტი სჭირდება და RCON-ის გარდა ყველა UDP-ა. აქ მთავრდება "სერვერი მუშაობს, მაგრამ ვერავინ ხედავს" ტიპის ტიკეტების უმეტესობა.
| პორტი | პროტოკოლი | დანიშნულება |
|---|---|---|
7787 | UDP | თამაშის ტრაფიკი |
7788 | UDP | თამაშის ტრაფიკი, Port-ზე ერთით მაღლა მდგარი პორტი |
27165 | UDP | Steam query - server browser |
27166 | UDP | Query, QueryPort-ზე ერთით მაღლა მდგარი პორტი |
15000 | UDP | სესიის beacon, გამოიყენება შესვლისას |
21114 | TCP | RCON |
აქედან ორი წესი გამომდინარეობს. პირველი, თამაშის პორტი და query port თითოეული მის ზემოთ მდგარ ნომერს იკავებს, ამიტომ ერთ მანქანაზე სერვისებს შორის ერთპორტიანი დაშორება შეჯახებას გამოიწვევს. თუ ერთ მანქანაზე ორ Squad სერვერს უშვებ, ერთმანეთისგან გარკვეული დაშორებით განალაგე - 7787/27165 და 7797/27175, და არა 7787 და 7788. მეორე, საწყისი handshake-ის შემდეგ Squad ცალკეული კლიენტის კავშირებისთვის მაღალ ephemeral UDP პორტებსაც იყენებს, ამიტომ firewall, რომელიც მხოლოდ ზემოთ მოცემულ ექვს ნომერს უშვებს და სხვა გამავალ დამყარებულ ტრაფიკს არა, მოთამაშეებს გამოიღებს, რომლებიც უერთდებიან და შემდეგ time out-ს იღებენ. stateful firewall, რომელიც established და related ტრაფიკს უშვებს, ამას სწორად ამუშავებს და დიაპაზონის გახსნა არ გჭირდება.
RCON TCP-ზე გამონაკლისია და საშიშიც. ეს დისტანციური კონსოლია სრული ადმინის უფლებებით პაროლის უკან, რომელიც ღია სახით მოგზაურობს. შეზღუდე წყარო მისამართით, თუ შენი firewall-ს შეუძლია, პაროლი არასოდეს გამოიყენო სხვაგან და სანამ მონაცემებს Discord bot-ს გადასცემ, წაიკითხე RCON-ის უსაფრთხოდ გამოყენება. გეიმ სერვერის პორტები ახსნილი გეუბნება, რატომ არსებობს query port-ები ცალკე რამედ საერთოდ და რა ტყდება, როცა წყვილიდან მხოლოდ ნახევარია მისაწვდომი.
ადმინები, ჯგუფები და RCON#
Admins.cfg ორნაწილიანი ფაილია: ჯგუფებს განსაზღვრავ უფლებების სიით, შემდეგ კი Steam ID-ებს ჯგუფებს მიაკუთვნებ. ფაილი უფლებების სახელების სრული სიით მოდის თავის კომენტარებში, რაც შენი ვერსიისთვის ავტორიტეტული წყაროა.
Group=Admin:changemap,pause,cheat,private,balance,chat,kick,ban,config,cameraman,immune,manageserver,reserve,teamchange,forceteamchange,canseeadminchatGroup=Moderator:kick,ban,chat,teamchange,canseeadminchatGroup=Whitelist:reserveAdmin=76561198012345678:AdminAdmin=76561198087654321:ModeratorAdmin=76561198011112222:Whitelistreserve უფლება არის წევრების whitelist-ის მექანიზმი: ნებისმიერ ადამიანს ჯგუფში, რომელსაც reserve აქვს, სერვერის გავსებისას NumReservedSlots-იდან ერთის დაკავება შეუძლია. ეს ის მექანიზმია, რომელსაც უმეტესი community სინამდვილეში ითხოვს, როცა whitelist-ს ამბობს, და plugin არ სჭირდება.
Rcon.cfg პაროლსა და პორტს ინახავს. დააყენე გრძელი შემთხვევითი პაროლი და თუ ფაილი კავშირების ლიმიტს გვთავაზობს, პატარა დატოვე.
Password=8fJq2tVbn4Rz7Lw1Port=21114როცა RCON მუშაობს, ადმინის ბრძანებები ერთნაირია, იქნება ეს თამაშში ადმინის კამერით აკრეფილი თუ socket-ით გაგზავნილი:
| ბრძანება | ეფექტი |
|---|---|
ListPlayers | ყველა დაკავშირებული მოთამაშე თავისი id-ით და გუნდით |
ListSquads | squad-ები გუნდების მიხედვით ლიდერებთან ერთად |
AdminBroadcast <text> | შეტყობინება ყველა ეკრანზე |
AdminWarn <name> <text> | პირადი გაფრთხილება ერთ მოთამაშეს |
AdminKick <name> <reason> | Kick სახელით |
AdminKickById <id> <reason> | Kick ListPlayers-დან აღებული id-ით |
AdminBan <name> <length> <reason> | Ban, ემატება Bans.cfg-ს |
AdminChangeLayer <layer> | layer-ის დაუყოვნებლივ გადართვა |
AdminSetNextLayer <layer> | layer-ის რიგში დაყენება შემდეგი რაუნდისთვის |
ShowNextMap | რა მოდის შემდეგ |
AdminEndMatch | რაუნდის ახლავე დასრულება |
AdminRestartMatch | მიმდინარე layer-ის თავიდან დაწყება |
AdminDisbandSquad <team> <squad> | squad-ის დაშლა |
AdminRemovePlayerFromSquad <name> | ერთი მოთამაშის squad-იდან ამოღება |
AdminForceTeamChange <name> | მოთამაშის მეორე გუნდში გადაყვანა |
სკრიპტებში ById ფორმებს მიანიჭე უპირატესობა. Squad-ში სახელები კლანის თეგებს, emoji-ს მსგავს სიმბოლოებსა და ჰარებს შეიცავს, ხოლო ნაწილობრივი სახელის დამთხვევა, რომელიც ორ მოთამაშეს ერგება, სწორედ ისაა, რითაც არასწორი ადამიანი ბანდება.
Layer-ები, rotation და კენჭისყრა#
Squad-ის "level" რუკაა; "layer" ამ რუკის კონკრეტული ვერსიაა - თამაშის რეჟიმი, ფრაქციების ნაკრები, დროშების კონკრეტული კონფიგურაცია. Al Basrah AAS v1 და Al Basrah Invasion v2 ერთი level-ის ორი layer-ია და სრულიად განსხვავებულად თამაშდება. rotation-ები ერთიდან ან მეორიდან შედგება, რასაც MapRotationMode განსაზღვრავს:
LevelListკითხულობსLevelRotation.cfg-ს და იმ level-ზე შენს მაგივრად layer-ს არჩევს.LayerListკითხულობსLayerRotation.cfg-ს და ზუსტად იმ layer-ებს თამაშობს, რომლებიც დაასახელე, თანმიმდევრობით.- ორივეს
_Randomizedვარიანტები სიას ურევს.
community-სთვის, რომელსაც აზრი აქვს, სწორი პასუხი LayerList-ია, რადგან ის ერთადერთი რეჟიმია, რომელიც ღამის მიმდინარეობაზე კონტროლს გაძლევს. rotation, რომელიც მძიმე ჯავშანტექნიკის layer-ს დახურულ ქვეითთან ცვლის, უკეთ თამაშდება და საშუალოდ CPU-ს ნაკლებად ხარჯავს, ვიდრე ტექნიკით გაჯერებული სამი layer ზედიზედ.
Sumari_AAS_v1GooseBay_Invasion_v1Yehorivka_RAAS_v4Narva_AAS_v1Fallujah_RAAS_v1layer-ების სახელები თამაშის შიდა სახელებს ზუსტად უნდა ემთხვეოდეს და ვერსიებს შორის იცვლება, როცა რუკა გადამუშავდება. შეცდომა არ გამოდის; ჩანაწერი გამოტოვებულია, ხოლო შეცდომებით სავსე rotation ჩუმად ორრუკიან rotation-ად იქცევა. ნებისმიერი Squad-ის განახლების შემდეგ გადატვირთე და ლოგში ნახე, რომელი layer-ები ჩაიტვირთა.
ExcludedLayers.cfg და ExcludedLevels.cfg გამოკლების ვერსიაა - გამოსადეგია LevelList-თან, როცა გინდა ყველაფერი, გარდა სამი რუკისა, რომლებიც შენს მოთამაშეებს სძულთ. VoteConfig.cfg რაუნდის ბოლოს კენჭისყრას არეგულირებს, რომელიც მხოლოდ მაშინ ხდება, თუ UseVoteLevel ან UseVoteLayer ჩართე. მოთამაშეებს კენჭისყრა უყვართ და rotation-ს ნელ-ნელა იმ სამ რუკამდე ავიწროებს, რომლებიც ყოველთვის იმარჯვებს, ამიტომ ღირს მასზე გადაწყვეტილების განზრახ მიღება და არა ნაგულისხმევად.
მოდები Workshop-იდან#
Squad-ის მოდები Steam Workshop-იდან მოდის თამაშის app id-ით, 393380. სერვერის მხარეს ისინი SteamCMD-ით SquadGame/Plugins/Mods-ში იტვირთება და უმეტესი panel ავლენს ველს, სადაც მძიმით გამოყოფილ Workshop id-ებს ჩასვამ, ჩამოტვირთვა კი შემდეგ გაშვებაზე ხდება.
$ steamcmd +force_install_dir /home/squad/server/SquadGame/Plugins/Mods \ +login anonymous +workshop_download_item 393380 2240351000 +quitSquad-ის მოდებზე სამი რამ არ განიხილება:
- ყველა მოთამაშეს ერთი და იგივე მოდები ერთსა და იმავე ვერსიაზე სჭირდება. გეიმფლეის კონტენტისთვის კლიენტისთვის არჩევითი მოდების ნაკრები არ არსებობს. მოთამაშე, რომელიც არ გამოწერილა, ან უფრო ძველი ვერსია აქვს, ვერ შემოდის. ესაა მთავარი მიზეზი, რატომ რჩება მოდიფიცირებული Squad სერვერები პატარა.
- მოდები უზარმაზარი შეიძლება იყოს. რუკების პაკეტები თითოეული რამდენიმე გიგაბაიტს აღწევს, როგორც შენს დისკზე, ისე ყველა მოთამაშის დისკზე. ოთხი დიდი მოდის პაკეტის მქონე სერვერი ახალ მოთამაშეს პირველ რაუნდამდე ჩამოტვირთვას სთხოვს და ბევრი მათგანი არ დაელოდება.
- თამაშის განახლება მოდებს ტეხავს, სანამ ავტორები მათ თავიდან არ ააწყობენ. Squad-ის მთავარი ვერსიები engine build-ს ცვლის და ძველზე დაკომპილებული მოდი აღარ ჩაიტვირთება. განახლებამდე სერვერი გააჩერე, მოდიფიცირებულ სერვერს patch-ის დღეს ავტომატურად ნუ გაანახლებინებ და წინა მუშა მოდების სია ჩაწერილი გქონდეს. რა ვქნა, როცა მოდის განახლება ტეხავს ზოგადი playbook-ია; Steam Workshop მოდები dedicated სერვერებზე კი აღწერს, როგორ მუშაობს ჩამოტვირთვის მხარე, როცა ის არასწორად მიდის.
მოდიდან მოსული layer-ების სახელები LayerRotation.cfg-ში ზუსტად ისე იწერება, როგორც vanilla-ს, და ისინი ზემოთ აღწერილი ჩუმად გამოტოვების პრობლემის ყველაზე გავრცელებული წყაროა.
Tick rate: როგორ წაიკითხო და როგორ შეინარჩუნო#
server browser თითოეულ სერვერზე tick rate-ს ბეჭდავს და ის Squad-ის ჰოსტინგში ყველაზე გულწრფელი რიცხვია. 50 Hz არის სამიზნე, რომელსაც თამაში ეფუძნება. ჯანმრთელი სერვერი მას ახლოს ინარჩუნებს. გაჭირვებული ოცდაათამდე ეცემა, რა დროსაც სროლა არათანმიმდევრულად იგრძნობა, ტექნიკა კანკალებს და ქვეითები კუთხეებთან თითქოს ტელეპორტირდებიან - ზუსტად ის სიმპტომები, რომელსაც ხალხი საკუთარ ping-ს აბრალებს.
რა ამოძრავებს ამ რიცხვს, თანმიმდევრობით:
- მოთამაშეების რაოდენობა. tick-ის ფასი იზრდება იმ მოთამაშეების რაოდენობასთან ერთად, რომლებიც სერვერმა უნდა მოახდინოს სიმულაცია და ინფორმაცია მიაწოდოს. 60-დან 100-მდე ნაბიჯი წრფივი არ არის.
- ტექნიკა და ტყვიები. ფიზიკა ყველაზე ძვირი ნაწილია. ჯავშანტექნიკით გადატვირთული layer ვერტმფრენებით იმავე რაოდენობის მოთამაშეებთან ქვეით layer-ზე რამდენჯერმე მეტი სამუშაოა.
- ერთი ბირთვის სიხშირე. ყველაფერი ზემოთქმული ერთ thread-ზე ეშვება. ეს ერთადერთი ტექნიკური ბერკეტია, რომელიც ჭერს ზრდის.
- მოდები. მორგებული ტექნიკა, იარაღი და დიდი რუკები ყველა ემატება tick-ზე სამუშაოს.
არ არსებობს პარამეტრი, რომელიც CPU-ზე მიბმულ Squad სერვერს სწრაფს გახდის. შენი არჩევანია: ნაკლები სლოტი, უფრო მსუბუქი rotation, ნაკლები მოდი ან უფრო სწრაფი ბირთვი, ხოლო community-ები, რომლებიც პირველ სამზე უარს ამბობენ, მეოთხეს ყიდულობენ. 80-სლოტიანი სერვერი, რომელიც მთელ საღამოს 50 Hz-ს ინარჩუნებს, უკეთესი სერვერია, ვიდრე 100-სლოტიანი, რომელიც პრაიმ-თაიმში 22-მდე ეცემა, და მოთამაშეები განსხვავებას გრძნობენ მაშინაც კი, როცა მას სახელს ვერ არქმევენ.
CPU-ს გრაფიკს tick rate-თან ერთად უყურე და არა ერთ-ერთს მარტო. game thread, რომელიც თავისი გამოყოფილი რესურსის ზღვარზე გაჩერებულია მაშინ, როცა მეხსიერება ბრტყელია, CPU-ზე მიბმული სერვერის სახელმძღვანელო სურათია და აღწერილია სერვერის დატვირთვის გრაფიკის წაკითხვაში და უფრო ღრმად რას ნიშნავს tick rate სინამდვილეში. თუ მთელ მანქანას ქირაობ, dedicated მანქანების გვერდზე მითითებულია CPU-ს მოდელი და არა მარკეტინგული დონე, რაც ყიდვამდე სიხშირის შეფასების ერთადერთი გზაა.
Backup-ები, განახლებები და პრობლემების გადაჭრა#
Squad-ს დასაკარგი world save არ აქვს - მნიშვნელოვანი მდგომარეობა შენი კონფიგურაცია, ban სია და ადმინების სიაა. ეს მცირე რაოდენობის ტექსტია და თვეების შრომის ნაყოფიცაა, ამიტომ SquadGame/ServerConfig/-ის backup ყოველ ცვლილებამდე გააკეთე და ასლი სერვერისგან განსხვავებულ ადგილას შეინახე. Backup-ები, რომლებიც მართლა აღდგება ამტკიცებს, რომ ასლის მუშაობა დროდადრო უნდა დაამტკიცო.
განახლებები Offworld-ის გრაფიკით მოდის და სავალდებულოა: ახალ ვერსიაზე მყოფი კლიენტი ძველ სერვერზე ვერ შემოდის. გააჩერე სერვერი, გაუშვი SteamCMD-ის განახლება validate-ით, ჩართე და შეამოწმე, ჩაიტვირთა თუ არა layer rotation და დაბრუნდა თუ არა მოდები.
სერვერი ბრაუზერში საერთოდ არ ჩანს. შეამოწმე ShouldAdvertise=true და IsLANMatch=false, შემდეგ query port. გახსნილი თამაშის პორტი დაბლოკილ query port-თან ზუსტად ამას იძლევა: მოთამაშეები, რომლებიც პირდაპირი კავშირით შედიან, წარმატებას აღწევენ, ხოლო ბრაუზერი არაფერს აჩვენებს.
ჩანს Custom Servers-ში, თუმცა მთავარ ჩანართს ელოდი. ეს ლიცენზიაა, ან ლიცენზია, რომელიც License.cfg-ში სწორად არ არის გამოყენებული. არ არსებობს პარამეტრი, რომელიც გადაგიყვანს.
მოთამაშეები უერთდებიან და შემდეგ 100%-ზე time out-ს იღებენ. ჩვეულებრივ beacon port ან ephemeral დიაპაზონია. შეამოწმე, რომ 15000 ღია UDP-ა და firewall დამყარებულ კავშირებს უშვებს.
tick rate კარგადაა, სანამ კონკრეტული layer არ ჩაიტვირთება. ეს rotation-ია და არა ტექნიკა. აღნიშნე, რომელი layer არის, და შეადარე ტექნიკის რაოდენობა. ამოიღე ის ან rotation-ში უფრო წყნარ ადგილზე გადაიტანე.
rotation მხოლოდ ორ რუკას თამაშობს. layer-ები, რომლებიც აღარ არსებობს, ჩუმად გამოიტოვება. შეადარე შენი LayerRotation.cfg მიმდინარე ვერსიის layer-ების სიას.
RCON უერთდება და მაშინვე წყდება. არასწორი პაროლი, ან კავშირების ლიმიტი, რომელიც უკვე გამოიყენა ინსტრუმენტმა, რომელიც დაგავიწყდა. Squad-ის RCON კავშირებს თავაზიანად არ აყენებს რიგში.
სერვერი თავისით გადაიტვირთება. ან პროცესს გარედან აჩერებენ - მეხსიერების ლიმიტი, supervisor, watchdog - ან ჩავარდა. კონსოლი გეუბნება, რომელია, და რატომ გადაიტვირთება შენი გეიმ სერვერი განუწყვეტლივ გასწავლის მათ გარჩევას.
FAQ#
მჭირდება Squad სერვერის ლიცენზია სერვერის გასაშვებად?
არა. ლიცენზიის გარეშე სერვერი სრული ფუნქციონალით მუშაობს და ბრაუზერის Custom Servers ჩანართში ჩანს. ლიცენზია მთავარ ჩანართში გიყვანს, რაც მხოლოდ მაშინ აქვს მნიშვნელობა, თუ უცხოებმა უნდა გიპოვონ. კლანის ან Discord community-სთვის, რომელიც სახელით შემოდის, ეს ვალდებულებაა სარგებლის გარეშე.
რამდენი სლოტი გავუშვა?
ნაკლები, ვიდრე გინდა. სლოტების ზრდასთან ერთად tick rate ეცემა და 60-სლოტიანი სერვერი, რომელიც 50 Hz-ს ინარჩუნებს, უკეთ თამაშდება, ვიდრე 100-სლოტიანი, რომელიც ოცდაათამდე ეცემა. თუ ლიცენზიის მოთხოვნას აპირებ, სულ მცირე 80 სლოტი გჭირდება, ამიტომ განაცხადის გაგზავნამდე CPU 80-ზე გათვალე.
რატომ არ ჩანს ჩემი Squad სერვერი server browser-ში?
სავარაუდოობის მიხედვით: query port დახურულია ან არასწორი ნომერია, ShouldAdvertise არის false, ან IsLANMatch არის true. ჯერ პირდაპირი კავშირით გამოსცადე - თუ ეს მუშაობს, თამაშის პორტი კარგადაა და პრობლემა query მხარესაა.
აუმჯობესებს მეტი RAM Squad-ის tick rate-ს?
არა. Squad-ის tick rate იმით განისაზღვრება, რამდენად სწრაფად ასრულებს ერთი CPU ბირთვი სიმულაციის ნაბიჯს. მეხსიერება გავლენას ახდენს იმაზე, მუშაობს თუ არა სერვერი საერთოდ და გადაიტანს თუ არა დიდ მოდიფიცირებულ რუკას, და არა იმაზე, როგორ იგრძნობა. მეხსიერება მაშინ დაამატე, როცა პროცესი ძალიან ბევრის გამოყენების გამო ჩერდება და არა მაშინ, როცა ჭედავს.
შემიძლია ერთ მანქანაზე ორი Squad სერვერის გაშვება?
დიახ, თუ CPU-ს ორი game thread-ის მიწოდება შეუძლია და პორტებს სწორად დააშორებ. თითოეულ ინსტანციას საკუთარი ინსტალაციის საქაღალდე მიეცი და პორტების ნომრებს შორის დაშორება დატოვე, რადგან თამაშის პორტიც და query port-იც მათ ზემოთ მდგარ ნომერს იკავებს.
უნდა დააინსტალირონ მოთამაშეებმა მოდები მოდიფიცირებულ სერვერზე შესასვლელად?
დიახ. Squad-ს კლიენტისთვის არჩევითი გეიმფლეის მოდები არ აქვს - ყველას ერთი და იგივე Workshop ელემენტები სჭირდება ერთსა და იმავე ვერსიაზე. გაითვალისწინე ახალ მოთამაშესა და მის პირველ რაუნდს შორის მდგარი მრავალგიგაბაიტიანი ჩამოტვირთვა და მოდების სია მოკლე გეჭიროს, თუ შემთხვევით ტრაფიკი გინდა.




კომენტარები
სრულიად ანონიმურად: ანგარიშის, ელფოსტის და cookie-ის გარეშე. ინახება მხოლოდ სახელი, ტექსტი და დრო - სხვა არაფერი. ბმულების რაოდენობა ლიმიტირებულია.