RE:NODE

სახელმძღვანელოები17 წუთის საკითხავი

Squad სერვერის ჰოსტინგი: ლიცენზია, კონფიგი, პორტები და tick rate

Squad-ის dedicated სერვერის გაშვება: Offworld-ის ლიცენზია და მისი პირობები, Server.cfg, Admins.cfg, RCON, ხუთი პორტი, Workshop მოდები და 50 Hz-ის შენარჩუნება.

განახლებულია

0 მკითხველი

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-ის მქონე ორი სერვერი სრულიად სხვადასხვანაირად იგრძნობოდეს.

სლოტებიRAMCPUრეალისტური მოლოდინი
20-40, ქვეითი layer-ები8-10 GB2 სწრაფი ბირთვიკომფორტულია, tick მაღალი რჩება
50-60, შერეული layer-ები12 GB3-4 სწრაფი ბირთვიკერძო community-ის ჩვეულებრივი ზომა
80-100, ლიცენზირებული საჯარო16-20 GB4+ სწრაფი ბირთვი, მაღალი სიხშირეშემზღუდველი 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 მოდების ჩამოსატვირთადაც, რაც ხალხს ერევა.

bash
$ 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=None

Windows-ზე ექვივალენტია SquadGameServer.exe იმავე არგუმენტებით; panel-ზე დაფუძნებულ ჰოსტზე ამ ხაზს არასოდეს აკრეფ, რადგან იგივე პარამეტრები Startup ჩანართზე ველებად ჩანს და panel თვითონ აწყობს მას. ორივე შემთხვევაში მნიშვნელოვანი პარამეტრებია:

პარამეტრიტიპური მნიშვნელობარას აკეთებს
Port7787თამაშის ტრაფიკი. სერვერი შემდეგ პორტსაც იკავებს
QueryPort27165ის, რასაც server browser ესაუბრება
beaconport15000სესიის beacon, გამოიყენება შესვლისას
RCONPORT21114დისტანციური კონსოლი, TCP
FIXEDMAXPLAYERS80მკაცრი ზღვარი სლოტებზე, MaxPlayers-ისგან დამოუკიდებელი
MULTIHOME0.0.0.0რომელი მისამართი დაიკავოს, როცა მანქანას რამდენიმე აქვს
RANDOMNonerotation-ი დაწყებისას აირიოს თუ არა
FIXEDMAXTICKRATE50სამიზნე tick-ები წამში

პირველი გაშვება config საქაღალდეს აგენერირებს და შემდეგ პირველ layer-ს ტვირთავს, რასაც ცივ, დაუქეშებელ დისკზე გარკვეული დრო სჭირდება. კონსოლს უყურე, სანამ სერვერი არ იტყვის, რომ დონე ჩაიტვირთა და query port დაკავდა. SteamCMD ახსნილი მოიცავს validate-ს, beta-ებს და განახლების სკრიპტებს, რომლებიც დაგჭირდება, როცა ეს რუტინა გახდება.

Server.cfg ხაზ-ხაზ#

სერვერის იდენტობა და წესები მთლიანად SquadGame/ServerConfig/Server.cfg-ში ცხოვრობს. ფაილი უბრალო Key=Value ფორმატისაა // კომენტარებით და მოწოდებული ვერსია საკმაოდ კარგად ხსნის თავს. აი ხაზები, რომელთა გაგებაც ღირს:

SquadGame/ServerConfig/Server.cfg
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
პარამეტრინაგულისხმევირას წყვეტს
ShouldAdvertisetrueჩანს თუ არა სერვერი ბრაუზერში საერთოდ
IsLANMatchfalseLAN რეჟიმი. თუ true-ზე დააყენებ, გარედან ვერავინ გიპოვის
MaxPlayers100სლოტების რაოდენობა დაჯავშნილი სლოტების ჩათვლით
NumReservedSlots0ადმინებისა და წევრებისთვის შენახული სლოტები MaxPlayers-ის შიგნით
PublicQueueLimit25რიგის ზომა. 0 რიგს თიშავს, -1 შეუზღუდავია
MapRotationModeLayerListრომელი rotation ფაილი გამოიყენება და ირევა თუ არა
RandomizeAtStarttruerotation-ის არევა ჩართვისას
NumPlayersDiffForTeamChanges3რამდენად უთანასწორო შეიძლება გახდეს გუნდები, სანამ გადასვლა დაიბლოკება
RejoinSquadDelayAfterKick180წამები, რომლის შემდეგაც გაძევებულ მოთამაშეს ამ squad-ში დაბრუნება შეუძლია
ServerMessageInterval300წამები ServerMessages.cfg-ის ხაზებს შორის
AutoTKBanNumberTKs7team kill-ები რაუნდში ავტომატურ ban-მდე
AutoTKBanTime300ამ 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-ა. აქ მთავრდება "სერვერი მუშაობს, მაგრამ ვერავინ ხედავს" ტიპის ტიკეტების უმეტესობა.

პორტიპროტოკოლიდანიშნულება
7787UDPთამაშის ტრაფიკი
7788UDPთამაშის ტრაფიკი, Port-ზე ერთით მაღლა მდგარი პორტი
27165UDPSteam query - server browser
27166UDPQuery, QueryPort-ზე ერთით მაღლა მდგარი პორტი
15000UDPსესიის beacon, გამოიყენება შესვლისას
21114TCPRCON
UDP 7787-7788UDP 27165TCP 21114მხოლოდ გამავალიbeacon 15000Server browserSteam queryადმინის ინსტრუმენტიSquadJS, RCON appSquad სერვერიერთი game threadმოთამაშეებითამაშის კლიენტიSteam / Workshopგანახლებები და მოდები
რა რომელ Squad პორტს ესაუბრება

აქედან ორი წესი გამომდინარეობს. პირველი, თამაშის პორტი და 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-ებს ჯგუფებს მიაკუთვნებ. ფაილი უფლებების სახელების სრული სიით მოდის თავის კომენტარებში, რაც შენი ვერსიისთვის ავტორიტეტული წყაროა.

SquadGame/ServerConfig/Admins.cfg
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:Whitelist

reserve უფლება არის წევრების whitelist-ის მექანიზმი: ნებისმიერ ადამიანს ჯგუფში, რომელსაც reserve აქვს, სერვერის გავსებისას NumReservedSlots-იდან ერთის დაკავება შეუძლია. ეს ის მექანიზმია, რომელსაც უმეტესი community სინამდვილეში ითხოვს, როცა whitelist-ს ამბობს, და plugin არ სჭირდება.

Rcon.cfg პაროლსა და პორტს ინახავს. დააყენე გრძელი შემთხვევითი პაროლი და თუ ფაილი კავშირების ლიმიტს გვთავაზობს, პატარა დატოვე.

SquadGame/ServerConfig/Rcon.cfg
Password=8fJq2tVbn4Rz7Lw1Port=21114

როცა RCON მუშაობს, ადმინის ბრძანებები ერთნაირია, იქნება ეს თამაშში ადმინის კამერით აკრეფილი თუ socket-ით გაგზავნილი:

ბრძანებაეფექტი
ListPlayersყველა დაკავშირებული მოთამაშე თავისი id-ით და გუნდით
ListSquadssquad-ები გუნდების მიხედვით ლიდერებთან ერთად
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 ზედიზედ.

SquadGame/ServerConfig/LayerRotation.cfg
Sumari_AAS_v1GooseBay_Invasion_v1Yehorivka_RAAS_v4Narva_AAS_v1Fallujah_RAAS_v1

layer-ების სახელები თამაშის შიდა სახელებს ზუსტად უნდა ემთხვეოდეს და ვერსიებს შორის იცვლება, როცა რუკა გადამუშავდება. შეცდომა არ გამოდის; ჩანაწერი გამოტოვებულია, ხოლო შეცდომებით სავსე 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-ებს ჩასვამ, ჩამოტვირთვა კი შემდეგ გაშვებაზე ხდება.

bash
$ steamcmd +force_install_dir /home/squad/server/SquadGame/Plugins/Mods \    +login anonymous +workshop_download_item 393380 2240351000 +quit

Squad-ის მოდებზე სამი რამ არ განიხილება:

  1. ყველა მოთამაშეს ერთი და იგივე მოდები ერთსა და იმავე ვერსიაზე სჭირდება. გეიმფლეის კონტენტისთვის კლიენტისთვის არჩევითი მოდების ნაკრები არ არსებობს. მოთამაშე, რომელიც არ გამოწერილა, ან უფრო ძველი ვერსია აქვს, ვერ შემოდის. ესაა მთავარი მიზეზი, რატომ რჩება მოდიფიცირებული Squad სერვერები პატარა.
  2. მოდები უზარმაზარი შეიძლება იყოს. რუკების პაკეტები თითოეული რამდენიმე გიგაბაიტს აღწევს, როგორც შენს დისკზე, ისე ყველა მოთამაშის დისკზე. ოთხი დიდი მოდის პაკეტის მქონე სერვერი ახალ მოთამაშეს პირველ რაუნდამდე ჩამოტვირთვას სთხოვს და ბევრი მათგანი არ დაელოდება.
  3. თამაშის განახლება მოდებს ტეხავს, სანამ ავტორები მათ თავიდან არ ააწყობენ. 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-ის გარეშე. ინახება მხოლოდ სახელი, ტექსტი და დრო - სხვა არაფერი. ბმულების რაოდენობა ლიმიტირებულია.

0/2000