მოდიან Valheim სერვერზე სინქრონიზებულად მონიშნული პარამეტრი სერვერს ეკუთვნის. როცა მოთამაშე უკავშირდება, მოდი ამ პარამეტრებისთვის სერვერის მნიშვნელობებს აგზავნის და კლიენტი მათ სესიის დასრულებამდე იყენებს, მისი საკუთარი config ფაილი რასაც არ უნდა ამბობდეს. თითქმის მთელ ამ საქმეს ორი ბიბლიოთეკა აკეთებს: ServerSync, რომელსაც ბევრი მოდი თავის .dll-ში აკომპილირებს, და Jotunn, რომელიც მხოლოდ ადმინისტრატორისთვის განკუთვნილად მონიშნულ პარამეტრებს სინქრონებს. ორივეს ჩვეულებრივ დაბლოკვა მოჰყვება. Lock Configuration = On შემთხვევაში სინქრონიზებულ მნიშვნელობებს მხოლოდ სერვერის ფაილი და ადმინების სიაში მყოფი მოთამაშეები ცვლიან; გამორთულზე ქცევა მოდის მიხედვით განსხვავდება და მოთამაშეებმა შეიძლება ისეთი რამ შეცვალონ, რაც არ უნდა შეეძლოთ. თუ ერთი წესი უნდა დაიმახსოვრო: სინქრონიზებული პარამეტრები სერვერზე ცვალე და არასდროს კლიენტზე, და კლიენტის ფაილისგან ნუ ელი რამეს იმის შესახებ, რასაც სერვერი რეალურად ამოქმედებს.
რატომ სჭირდება Valheim-ის მოდებს config-ის სინქრონი#
Valheim-ის მულტიპლეერი სერვერზე არ არის დამოკიდებული. სერვერი სამყაროს ინახავს და მდგომარეობას გადასცემს, მაგრამ თითოეულ ზონას იმ მოთამაშის კლიენტი სიმულირებს, რომელსაც ის ეკუთვნის. მოდი, რომელიც წესს ცვლის - დაწყობის ზომას, ტვირთის წონას, მოსავლის გაზრდის დროს, მტრის სიცოცხლეს - ამიტომ ყველა მანქანაზე მუშაობს და თითოეული საკუთარ config ფაილს კითხულობს.
სინქრონის გარეშე ეს ისე გაფუჭდება, როგორც მოსალოდნელია. სერვერის მფლობელი ტვირთის წონას 600-ზე აყენებს, ერთ მოთამაშეს კი ფაილში ნაგულისხმევი 300 აქვს, და ორივე ერთმანეთს არ ეთანხმება. მოდის მიხედვით მოთამაშე ან ძველ წესს ხედავს, ან ახალს არათანმიმდევრულად, ან ყველას აფუჭებს, ვინც მის კუთვნილ ზონაშია. უარესი: მოთამაშეს შეუძლია თავის ფაილში მნიშვნელობა გაზარდოს და უპირატესობა მიიღოს, რომელზეც სერვერს არასდროს უთქვამს თანხმობა.
Config sync ორივეს აგვარებს. სერვერი ერთადერთი სიმართლის წყაროა იმ პარამეტრებისთვის, რომლებიც უნდა ემთხვეოდეს, და კლიენტებს ამ მნიშვნელობებს დაკავშირებისას ეუბნება. ნამდვილად პირადი პარამეტრები - ინტერფეისის პოზიცია, ღილაკები, ფერები - უსინქრონოდ რჩება, რომ თითოეულმა მოთამაშემ საკუთარი შეინახოს.
ორი სისტემა: ServerSync და Jotunn#
config-ს სინქრონებული მოდების უმეტესობა ამ ორიდან ერთს იყენებს და იმავე სერვერზე ორივეს შეხვდები.
| ServerSync | Jotunn config sync | |
|---|---|---|
| რა არის | blaxxun-ის პატარა ბიბლიოთეკა, თითოეულ მოდში ჩაშენებული | Jotunn-ის მოდინგ ბიბლიოთეკის ნაწილი |
| როგორ დგას | ცალკე არაფერია; მოდის .dll-შია | Jotunn ცალკე plugin-ად დგას |
| რომელი პარამეტრები სინქრონდება | რომლებსაც მოდი ServerSync-ში არეგისტრირებს | რომლებსაც მოდი admin-only-დ ნიშნავს |
| დაბლოკვა | ჩვეულებრივ Lock Configuration პარამეტრი თითო მოდზე | admin-only პარამეტრები ყოველთვის სერვერის მართვაშია |
| ვერსიის შემოწმება | მოდის მიხედვით: მიმდინარე და მინიმალური ვერსია | Jotunn-ის ქსელური თავსებადობის შემოწმება |
| ტიპური მოდები | Smoothbrain-ის, Azumatt-ისა და blaxxun-ის ბევრი მოდი | Jotunn-ზე აგებული კონტენტ-მოდები |
ServerSync ჩაშენებულია, ამიტომ BepInEx-ის ლოგში ცალკე ხაზად არასდროს ჩანს და ცალკე განახლებას არ საჭიროებს. თითოეული მოდი იმ ასლს ატარებს, რომლითაც აშენდა. ამიტომაც ServerSync-თან დაკავშირებული პრობლემები ყოველთვის მოდზეა მიბმული: ერთი მოდის ცუდი სინქრონი დანარჩენზე არაფერს ამბობს.
Jotunn საერთო ბიბლიოთეკაა, ამიტომ მისი სინქრონი ყველა მოდში, რომელიც მას იყენებს, ერთნაირად მუშაობს. Jotunn-ის განმარტება ბიბლიოთეკას მთლიანად განიხილავს; აქ მთავარია, რომ მოდის ავტორი ცალკეულ პარამეტრებს admin-only-დ ნიშნავს, Jotunn კი მათ სერვერიდან აგზავნის და არა-ადმინებს ცვლილებას უკრძალავს.
მოდის გვერდი ჩვეულებრივ ამბობს, რომელს იყენებს, და config ფაილიც ხშირად აჩვენებს.
სინქრონიზებული config ფაილის კითხვა#
მოდის პირველი გაშვებისას მისი ფაილი BepInEx/config-ში გენერირდება და plugin-ის GUID-ს ატარებს. გავრცელებულ ServerSync შაბლონზე აგებული მოდები თითოეული პარამეტრის აღწერაში ამას მიუთითებენ:
## Settings file was created by plugin ExampleMod v1.2.3## Plugin GUID: com.example.examplemod[1 - General]## If on, the configuration is locked and can be changed by server admins only. [Synced with Server]# Setting type: Toggle# Default value: On# Acceptable values: Off, OnLock Configuration = On[2 - Limits]## Maximum carry weight. [Synced with Server]# Setting type: Single# Default value: 300Max Carry Weight = 600## Show the weight bar on the HUD. [Not Synced with Server]# Setting type: Toggle# Default value: On# Acceptable values: Off, OnShow Weight Bar = Onსუფიქსები [Synced with Server] და [Not Synced with Server] კონვენციაა და BepInEx-ი მათ არ ამატებს, ამიტომ ყველა მოდს არ აქვს. როცა არ არის, ერთადერთი გზამკვლევი მოდის გვერდი ან თითოეული პარამეტრის საკუთარი აღწერაა. Jotunn-ის მოდებს შეიძლება ფაილში პარამეტრები საერთოდ არ ჰქონდეს მონიშნული; თამაშის შიგნით რედაქტორში admin-only ჩანაწერები ისაა, რომელთა შეცვლაც არა-ადმინს არ შეუძლია.
ფაილი უბრალო INI-ა, ისევე როგორც ნებისმიერი BepInEx config, და იგივე წესები მოქმედებს: მოდი გაშვებისას მას თავიდან წერს, უცნობი გასაღებები იკარგება, არასწორ სექციაში მყოფი მნიშვნელობა იგნორირდება. ფაილის ფორმატს ზოგადად განიხილავს Valheim-ის მოდები BepInEx-ით სერვერზე.
რას აკეთებს Lock Configuration#
Lock Configuration არის გადამრთველი, რომელიც წყვეტს, სინქრონიზებული პარამეტრები იძულებით ამოქმედდება თუ უბრალოდ შემოთავაზებულია. ის თავად სინქრონიზებულია, ამიტომ ითვლება სერვერის მნიშვნელობა.
- On (ჩვეულებრივი ნაგულისხმევი). სერვერის მნიშვნელობები ყველა სინქრონიზებული პარამეტრისთვის დაკავშირებისას კლიენტზე გამოიყენება და ძალაში რჩება. არა-ადმინ მოთამაშეს მათი შეცვლა სესიის დროს არც ფაილში შეუძლია, არც თამაშის შიგნით რედაქტორში. სერვერის ადმინების სიაში მყოფ მოთამაშეებს შეუძლიათ თამაშში შეცვლა და ცვლილება სერვერზე მიდის.
- Off. სერვერი მაინც აგზავნის თავის მნიშვნელობებს, მაგრამ მოთამაშეებს სინქრონიზებული პარამეტრების ლოკალურად შეცვლა შეუძლიათ. ზუსტად რას ნიშნავს ეს, მოდზეა დამოკიდებული: ზოგი კლიენტის საკუთარ მნიშვნელობას მხოლოდ იმ მოთამაშისთვის იყენებს, ზოგი ნებისმიერ კლიენტზე ცვლილებას ავრცელებს. დაბლოკვა გამორთული არ დატოვო სერვერზე, რომელსაც სრულად არ ენდობი, და ტესტირების შემდეგ შემთხვევით არ დატოვო.
სასარგებლო ჩვევა: ServerSync-ის მოდის დაყენების შემდეგ სერვერის მთელ config საქაღალდეში მოძებნე დაბლოკვა და თითოეული დაადასტურე.
$ grep -H "^Lock Configuration" BepInEx/config/*.cfgBepInEx/config/com.example.examplemod.cfg:Lock Configuration = OnBepInEx/config/com.example.othermod.cfg:Lock Configuration = Offამ სიაში ყოველი Off გადაწყვეტილება უნდა იყოს და არა შემთხვევითობა.
ვინ ითვლება ადმინად#
config sync-ის ადმინისტრატორის უფლებები Valheim-ის საკუთარი adminlist.txt-დან მოდის, სერვერის შენახვის დირექტორიაში, იმავე ფაილიდან, რომელიც kick-სა და ban-ს აკონტროლებს. არც ServerSync-ს აქვს საკუთარი სია, არც Jotunn-ს. ამას ორი შედეგი აქვს.
პირველი, ID-ის ფორმატი სწორი უნდა იყოს. მხოლოდ Steam-ის სერვერზე ხაზი მოთამაშის SteamID64-ია; crossplay სერვერზე - პლატფორმის პრეფიქსიანი ფორმა, მაგალითად Steam_76561198012345678. არასწორ ფორმატში ჩაწერილი მოთამაშე config sync-ისთვისაც არ არის ადმინი, რაც თამაშის შიგნით რედაქტორში გაუქმებული პარამეტრებით ჩანს. სამი სიის ფაილი ფორმატებს სრულად აღწერს, ID-ის ასაღებად კი სანდო გზა სერვერის ლოგში დაკავშირების ხაზია.
მეორე, ადმინობა მოთამაშეს საშუალებას აძლევს, თამაშიდან შეცვალოს სერვერის სინქრონიზებული მნიშვნელობები თამაშის შიგნით config რედაქტორით. ახალი მნიშვნელობა სერვერზე იგზავნება, იქ გამოიყენება, სერვერის config ფაილში იწერება და ყველა დაკავშირებულს ეგზავნება. ეს მოსახერხებელია სესიის დროს ბალანსის დასარეგულირებლად და საშიშია იმავე მიზეზით. ადმინების სია მოკლე შეინახე. თავად რედაქტორს განიხილავს ConfigurationManager სერვერებზე.
სინქრონიზებული პარამეტრების რედაქტირება: სერვერზე, შემდეგ გადატვირთვა#
სინქრონიზებული პარამეტრის შეცვლის სუფთა გზა სერვერის ფაილის რედაქტირებაა. ძალაში შედის თუ არა ის მაშინვე, მოდზეა დამოკიდებული.
- მოდები, რომლებიც თავიანთ ფაილს აკვირდებიან. ბევრი ServerSync მოდი, მათ შორის გავრცელებულ შაბლონზე აგებულთა უმეტესობა, საკუთარ
.cfg-ს ცვლილებებზე აკვირდება და შენახვისას თავიდან კითხულობს. შეცვალე სერვერის ფაილი, შეინახე და ახალი მნიშვნელობა სერვერზე გამოიყენება და დაკავშირებულ კლიენტებს ცოტა ხანში გადაეცემა. სადაც მოდი ბეჭდავს, სერვერის კონსოლში მისი გადატვირთვის ხაზი შეამოწმე. - მოდები, რომლებიც გაშვებისას კითხულობენ. სხვები config-ს ერთხელ კითხულობენ. ფაილი შეცვალე, სანამ სერვერი გაჩერებულია, შემდეგ გაუშვი.
როცა არ იცი, რომელი ტიპისაა, გაჩერებული სერვერის მეთოდი ყოველთვის მუშაობს:
- სერვერი სუფთად გააჩერე და დაელოდე სამყაროს შენახვას.
- შეცვალე ფაილი
BepInEx/config-ში. შენი ცვლილებების ასლი სერვერის გარეთ შეინახე. - გაუშვი სერვერი და მოდის
Loadingხაზს დააკვირდი. - დაუკავშირდი და თამაშში მნიშვნელობა დაადასტურე.
კლიენტის ფაილის რედაქტირება სერვერის პრობლემას არასდროს აგვარებს. დაკავშირებისას კლიენტი სერვერის მნიშვნელობებს იყენებს; გათიშვისას ServerSync ჩვეულებრივ კლიენტის საკუთარ მნიშვნელობებს აბრუნებს. ზოგი მოთამაშე ფიქრობს, რომ მათ კომპიუტერზე ფაილი სერვერს უნდა ასახავდეს და დაბნეულები არიან, როცა ასე არ არის. არაფერია გაფუჭებული - ფაილი მათი ლოკალური ნაგულისხმევია და არა იმის ჩანაწერი, რასაც სერვერი ამოქმედებს.
RE:NODE-ზე სერვერის BepInEx/config პანელის ფაილების მენეჯერშია გახსნილი სინტაქსის გამოკვეთით, ამიტომ რედაქტირება-შენახვა-გადატვირთვის ციკლს ჩამოტვირთვა არ სჭირდება, კონსოლი კი გადატვირთვის ან გაშვების გამოტანას ცოცხლად აჩვენებს.
.cfg-ს გარდა: YAML და სხვა სინქრონიზებული ფაილები#
რამდენიმე დიდი მოდი ნამდვილ კონფიგურაციას ცალკე ფაილებში ინახავს, ხშირად YAML-ში - მორგებული spawn ცხრილები, რეცეპტების სიები, ნივთების განმარტებები. ServerSync მათაც შეუძლია სინქრონოს, როგორც მორგებული სინქრონიზებული მნიშვნელობები, და მოდები, რომლებიც ამას იყენებენ, ფაილის მთელ შიგთავსს დაკავშირებისას თითოეულ კლიენტს უგზავნიან.
პრაქტიკაში ეს ნიშნავს:
- სერვერის ასლი არის ის, რაც მნიშვნელობს, ისევე როგორც
.cfg-ისთვის. კლიენტები მას დაკავშირებისას იღებენ. - დიდი ფაილები შესვლას ანელებს. კლიენტმა ყველა სინქრონიზებული ფაილი უნდა მიიღოს, სანამ სრულად შევა, ამიტომ რამდენიმე მოდის YAML-ის ძალიან დიდი ნაკრები დაკავშირების დროს ზრდის. თუ მოთამაშეები მოდის დამატების შემდეგ ჩატვირთვის ეკრანზე უფრო დიდხანს რჩებიან, ეს სავარაუდო მიზეზია - სხვებზე წერია გაჭედვა დაკავშირებასა და ჩატვირთვაზე.
- სინტაქსის შეცდომა ამ მოდის სინქრონს აჩერებს ან ნაგულისხმევზე აბრუნებს, მოდის მიხედვით. YAML ჩაწევებზე მომთხოვნია; საკმარისია space-ის ნაცვლად tab ჩაწერო. რედაქტირებისთანავე სერვერის ლოგი შეამოწმე.
თითოეული ასეთი მოდის დოკუმენტაცია წაიკითხე, სად ცხოვრობს ფაილები და აკვირდება თუ არა მათ ცვლილებებს. გზები სტანდარტიზებული არ არის.
ვერსიების იძულება იმავე კავშირზე გადის#
ხელის ჩამორთმევა, რომელიც config-ს აგზავნის, ვერსიებსაც ადარებს. სწორედ აქედან მოდის მოდიან სერვერებზე "გამოგდება დაკავშირებისას" შეტყობინებების უმეტესობა.
ServerSync-ით თითოეულ მოდს შეუძლია გამოაცხადოს თავისი მიმდინარე ვერსია, მინიმალური ვერსია, რომელსაც მეორე მხრიდან მიიღებს, და ის, საჭიროა თუ არა მეორე მხარეს საერთოდ ეს მოდი. თუ კლიენტის ვერსია მინიმუმზე დაბალია ან საჭირო მოდი აკლია, კავშირი იწყვეტება და გათიშვის შეტყობინება მოდსა და ორივე ვერსიას ასახელებს. თითოეული მოდი საკუთარ თავს ამოწმებს, ამიტომ მოთამაშეს სამი მოძველებული მოდის შემთხვევაში შეიძლება ერთი-ერთხელ ეუბნებოდნენ.
Jotunn იმავე საქმეს ცენტრალიზებულად აკეთებს. თითოეული მოდი აცხადებს ქსელური თავსებადობის დონეს (მაგალითად, ყველას უნდა ჰქონდეს მოდი) და ვერსიის სიმკაცრეს (major, minor ან patch), Jotunn კი დაკავშირებისას მთელ სიას ადარებს და შეუსაბამობების ფანჯარას აჩვენებს.
DisconnectedExampleMod: Server has version 1.2.3, you have 1.2.1.Minimum required version is 1.2.3.ზემოთ მოცემული ფორმულირება საილუსტრაციოა; თითოეული მოდი და ServerSync-ის ვერსია მას ოდნავ სხვანაირად წერს, მაგრამ შინაარსი ყოველთვის მოდის სახელი და ორი ვერსიაა. გამოსავალი ნაკრებების შესაბამისობაა და არა შემოწმების შესუსტება. მოდის ვერსიის შეუსაბამობის გამო გამოგდება კლიენტისა და სერვერის სიების ზუსტი შედარების პროცედურას შეიცავს.
სინქრონის გავრცელებული პრობლემები და გამოსწორება#
| სიმპტომი | ჩვეულებრივი მიზეზი | გამოსწორება |
|---|---|---|
| მოთამაშის პარამეტრი შესვლისას უბრუნდება | ასე უნდა იყოს: პარამეტრი სინქრონიზებულია | შეცვალე სერვერზე |
| ადმინი თამაშში სინქრონიზებულ პარამეტრს ვერ ცვლის | არ არის adminlist.txt-ში ან ID-ის ფორმატი არასწორია | დაამატე სწორი ID; სია მუშაობისას თავიდან იკითხება |
| სერვერის ფაილის რედაქტირებას შედეგი არ აქვს | მოდი config-ს მხოლოდ გაშვებისას კითხულობს | გააჩერე, შეცვალე, გაუშვი |
| რედაქტირება გადატვირთვის შემდეგ გაქრა | მომუშავე სერვერის ფაილი შეიცვალა, რომელიც მოდმა მერე გადააწერა | შეცვალე გაჩერებულზე ან გამოიყენე მოდი, რომელიც ფაილს აკვირდება |
| მოთამაშეებს ბალანსის მნიშვნელობების შეცვლა შეუძლიათ | სერვერზე Lock Configuration = Off | ჩართე ის ამ მოდის სერვერის ფაილში |
| შესვლისას გრძელი ჩატვირთვა | დიდი სინქრონიზებული YAML ან ბევრი სინქრონიზებული მოდი | ფაილები შეამცირე ან შეეგუე ნელ შესვლას |
| ერთ მოთამაშეს განსხვავებული წესები აქვს | მოდი ამ კლიენტზე აკლია და სავალდებულოდ არ არის მონიშნული | მოდების ნაკრებები დააბალანსე |
ორი პრობლემა ცხრილის ხაზზე მეტს იმსახურებს.
პარამეტრი, რომელიც საერთოდ არ სინქრონდება. თუ მოდი ბალანსის პარამეტრს სინქრონიზებულად არ ნიშნავს, სერვერი მას ვერ აიძულებს. გადაწყვეტს თითოეული მოთამაშის საკუთარი ფაილი. ერთადერთი გამოსავალი ისაა, რომ მოდების ნაკრებთან ერთად იგივე config გაავრცელო - modpack config საქაღალდით ან ექსპორტირებული პროფილი - ან აირჩიო მოდი, რომელიც მას სინქრონებს. ნუ ივარაუდებ, რომ პარამეტრი სინქრონიზებულია იმიტომ, რომ იმავე ფაილის სხვა პარამეტრები ასეა.
სამყარო იცვლება სინქრონის პრობლემის შემდეგ. თუ კონტენტ-მოდი სერვერზე ვერ იტვირთება, კლიენტებს კი ჯერ კიდევ აქვთ, ამ მოდის ობიექტებს სერვერი ვერ ცნობს და ისინი სამყაროდან შეიძლება წაიშალოს, როცა მათი ზონები შემდეგ ჩაიტვირთება და შეინახება. როგორც კი კონტენტ-მოდი Loading ხაზებში აღარ ჩანს, სერვერი დაუყოვნებლივ გააჩერე და, თუ რამე უკვე დაიკარგა, ბოლო backup აღადგინე. ყოველი მოდის ცვლილებამდე გაკეთებული დაბლოკვადი backup ყველაზე იაფი დაცვაა.
FAQ#
მჭირდება ServerSync-ის ცალკე დაყენება?
თითქმის არასდროს. მოდების უმეტესობა, რომელიც მას იყენებს, თავის .dll-ში აკომპილირებს, ამიტომ ის მოდთან ერთად მოდის და ცალკე plugin-ად არ ჩანს. ზოგ ძველ კონფიგურაციას ის ცალკე პაკეტად მოჰქონდა; თუ მოდის გვერდი ServerSync-ს dependency-ად ჩამოთვლის, მიჰყევი მას.
რატომ აჩვენებს ჩემი config ფაილი ერთ მნიშვნელობას, თამაში კი სხვას იყენებს?
იმიტომ, რომ პარამეტრი სინქრონიზებულია და სერვერზე ხარ დაკავშირებული. სერვერის მნიშვნელობა სესიისთვის შენსას ანაცვლებს. შენი ფაილი შენი ლოკალური ნაგულისხმევია, რომელიც ერთმოთამაშიან რეჟიმში და იმ სერვერებზე გამოიყენება, სადაც მოდი არ მუშაობს.
ხედავენ თუ არა მოთამაშეები სერვერის სინქრონიზებულ მნიშვნელობებს?
დიახ, თამაშის შიგნით config რედაქტორში დაკავშირებისას, სადაც სინქრონიზებული პარამეტრები სერვერის მიმდინარე მნიშვნელობებს აჩვენებს. ისინი მათ ვერ შეცვლიან, თუ დაბლოკვა გამორთული არ არის ან ადმინების სიაში არ არიან.
გავლენას ახდენს Lock Configuration უსინქრონო პარამეტრებზე?
არა. უსინქრონო პარამეტრები ყოველთვის თითო მოთამაშისაა, დაბლოკვით თუ მის გარეშე. დაბლოკვა მხოლოდ იმას აკონტროლებს, შეუძლიათ თუ არა არა-ადმინებს სერვერის სინქრონიზებული მნიშვნელობების შეცვლა.
არის config sync საიმედო anti-cheat?
ის მოდის მიერ სინქრონიზებულად არჩეულ მნიშვნელობებს ამოქმედებს, რაც ბალანსის პარამეტრების უბრალო რედაქტირებას აჩერებს. ის არ იცავს მოთამაშისგან, რომელიც თავად მოდს ცვლის ან სხვა ინსტრუმენტებს იყენებს. ჩათვალე, როგორც გზა პატიოსანი მოთამაშეების თანმიმდევრულობისთვის, ყველაფერი დანარჩენისთვის კი backup-ები შეინახე.
გავლენას ახდენენ crossplay მოთამაშეები config sync-ზე?
კონსოლის მოთამაშეებს მოდების დაყენება არ შეუძლიათ, ამიტომ ისინი ვერ შეუერთდებიან სერვერს, რომლის მოდებიც კლიენტებზე სავალდებულოა. მხოლოდ სერვერის მხარის მოდებიან სერვერზე სინქრონი მათზე არ ვრცელდება, რადგან მათ მხარეს სინქრონიზებადი არაფერია.


