RE:NODE

Valheim-ის მოდების ვერსიის შეუსაბამობა: რატომ გაგდებს შესვლისას

ავტორი RE:NODE-ის გუნდი
10 წუთის საკითხავი


როცა მოდიფიცირებული Valheim სერვერი დაკავშირებისთანავე kick-ს გაძლევს, თითქმის ყოველთვის მიზეზი ის არის, რომ შენი და სერვერის მოდები არ ემთხვევა - ერთ მხარეს მოდი აკლია, ან იგივე მოდი სხვა ვერსიითაა. disconnect ეკრანზე შეტყობინება ჩვეულებრივ მოდს ასახელებს. წაიკითხე, შენი ნაკრები სერვერისას იდენტური გახადე და შიგნით ხარ. დროის წამღები შემთხვევებია ის, როცა შეტყობინება ბუნდოვანია, მოდიდან კი არა, თამაშიდან მოდის, ან როცა ორი ადამიანი იფიცება, რომ "ერთი და იგივე მოდები" აქვთ, და არ აქვთ. ეს პოსტი გაივლის, რას ნიშნავს თითოეული ტიპის შეტყობინება, რომელმა სისტემამ შექმნა ის, როგორ შეადარო ორი ნაკრები ზუსტად და როგორ შეაჩერო ეს ყოველ ჯერზე, როცა ვინმე რამეს განაახლებს.

თუ არცერთ მოდს არ იყენებ და მაინც იღებ "Incompatible version"-ს, საქმე თამაშის ვერსიაშია და არა მოდებში - იხილე სერვერის განახლება და ვერსიის შეუსაბამობა.

სამი შემოწმება, სამი სხვადასხვა შეტყობინება#

მოდიფიცირებული Valheim-ის კავშირი სამამდე დამოუკიდებელ ვერსიის შემოწმებას გადის. თუ იცი, რომელმა გაგაჩერა, იცი, სად უნდა ეძებო.

შემოწმებავინ უშვებსრას ადარებსრას ხედავ
Vanillaთამაშითამაშისა და ქსელის ვერსია"Incompatible version"
JotunnJotunn ორივე მხარესმოდები, რომლებიც თავსებადობის დონეს აცხადებენფანჯარა მოდებისა და ვერსიების სიით
ServerSyncყოველი მოდი, რომელიც მას შეიცავსამ მოდის ვერსია და მისი საჭირო მინიმუმიდამატებითი ხაზები მოდის სახელით

ისინი სხვადასხვა მომენტში ეშვება. vanilla შემოწმება პირველია, handshake-ის დროს: თუ თამაშის ვერსიები განსხვავდება, სხვა არაფერი ედარება. Jotunn-ისა და ServerSync-ის შემოწმებები ხდება მას შემდეგ, რაც კავშირი მიღებულია და მოდები ინფორმაციას ცვლიან, ამიტომაც მოდის შეუსაბამობა შეიძლება ჰგავდეს კავშირს, რომელიც ერთი წამით შედგა და მერე გაწყდა.

შეტყობინების წაკითხვა#

"Incompatible version" მოდების სახელების გარეშე

თამაშის ვერსია განსხვავდება. ან კლიენტი განახლდა და სერვერი არა, ან პირიქით. მოდიფიცირებულ სერვერზე ჩვეულებრივი მიზეზია მოთამაშე, რომლის Steam კლიენტმა Valheim ღამით განაახლა, მაშინ როცა სერვერი განზრახ უკან არის დაჭერილი, სანამ მოდები დაეწევა. გამოსავალი დროის მხარესაა და არა მოდების მხარეს. ServerSync-ის ზოგიერთი ვერსია თავის მოდის ხაზებს ამავე შეტყობინების ქვემოთ ამატებს, ამიტომ თუ ქვემოთ მეტი ტექსტია, ჯერ ის წაიკითხე.

Jotunn-ის ფანჯარა მოდების სიით

Jotunn disconnect-ის შემდეგ ცალკე ფანჯარას აჩვენებს, სადაც ჩამოთვლილია ყოველი მოდი, რომელმაც შემოწმება ვერ გაიარა, და რატომ: აკლია შენს მხარეს, აკლია სერვერის მხარეს, ან ორივეზეა ზედმეტად დაშორებული ვერსიებით, ორივე ვერსიის ჩვენებით. სიმკაცრეს - არის თუ არა 1.4.2 და 1.4.3 პრობლემა - თითოეული მოდი აცხადებს. Jotunn-ის ახსნაში დონეების სრული ცხრილია.

ეს მარტივი შემთხვევაა. ყოველი ხაზი გეუბნება, რა დააყენო, წაშალო ან რომელ ვერსიაზე შეცვალო.

ServerSync-ის ხაზები მოდის სახელით

ServerSync არის ბიბლიოთეკა, რომელსაც ბევრი პოპულარული მოდი (Smoothbrain-ის, Azumatt-ისა და blaxxun-ის ოჯახების დიდი ნაწილი, სხვებთან ერთად) პირდაპირ საკუთარ .dll-ში აკომპილირებს, ამიტომ ის ჩვეულებრივ ცალკე არ ყენდება და მოდების სიაში ცალკე ჩანაწერად არ ჩანს. ის მოდს საშუალებას აძლევს, გამოაცხადოს თავისი მიმდინარე ვერსია და მინიმალური ვერსია, რომელსაც მეორე მხრიდან მიიღებს, და საჭიროა თუ არა მეორე მხარეს მოდი საერთოდ. როცა შემოწმება ვერ გადის, ის disconnect-ის შეტყობინებას ხაზებს უმატებს, სადაც წერია, რომელმა მოდმა ვერ გაიარა და რომელი ვერსიებით.

რადგან ყოველ მოდს საკუთარი ასლი აქვს, ServerSync-ის შემოწმებები თითო მოდზე ვარდება. ერთს ასწორებ, თავიდან უკავშირდები და შეიძლება შემდეგზე გითხრან. ყველა ერთდროულად გაასწორე სრული სიების შედარებით, როგორც ქვემოთ წერია, ნაცვლად იმისა, რომ თითო-თითოდ ებრძოლო.

kick ყოველგვარი სასარგებლო შეტყობინების გარეშე

log-ებს შეხედე. მოთამაშის მხარე BepInEx-ის output-ს წერს BepInEx/LogOutput.log-ში თავისი მოდების profile-ის საქაღალდეში, ხოლო Unity-ის საკუთარ log-ს აქ:

code
%USERPROFILE%\AppData\LocalLow\IronGate\Valheim\Player.log

სერვერის მხარე წერს BepInEx/LogOutput.log-ს სერვერის root საქაღალდეში, ხოლო console იგივე output-ს რეალურ დროში აჩვენებს. ორივეში მოძებნე დაკავშირების მომენტი და სიტყვები version, incompatible ან მოთამაშის სახელი. log-ები, რომელთა შენახვაც ღირს ასაბუთებს, რატომ უნდა ჩამოტვირთო სერვერის log, სანამ restart მას გადაწერს.

ორი ნაკრების ზუსტი შედარება#

"ერთი და იგივე მოდები გვაქვს" არის განცხადება, რომელსაც ვერავინ გადაამოწმებს mod manager-ის ეკრანზე ყურებით. ამის ნაცვლად რეალურად ჩატვირთული ვერსიები შეადარე. BepInEx გაშვებისას თითო plugin-ზე თითო ხაზს ბეჭდავს, იმ ვერსიით, რომელიც რეალურად ჩატვირთა:

bash
# სერვერზე, სერვერის root საქაღალდიდან$ grep -o 'Loading \[[^]]*\]' BepInEx/LogOutput.log | sort > server-mods.txt

Windows კლიენტზე, ერთი მოდიფიცირებული გაშვების შემდეგ, იგივე გაუშვი PowerShell-ში profile-ის საქაღალდიდან:

code
PS> Select-String -Path BepInEx\LogOutput.log -Pattern 'Loading \[[^\]]*\]' |      ForEach-Object { $_.Matches.Value } | Sort-Object > client-mods.txt

ორი ფაილი გვერდიგვერდ დადე ან diff გაუკეთე:

bash
$ diff server-mods.txt client-mods.txt< Loading [EpicLoot 0.x.y]> Loading [EpicLoot 0.x.z]

diff-ის ყოველი ხაზი პრობლემაა, თუმცა ყოველი პრობლემა kick-ს არ იწვევს. მხოლოდ კლიენტის მოდები კლიენტის მხარეს გამოჩნდება და ეს ნორმალურია. მხოლოდ სერვერის მოდები სერვერის მხარეს გამოჩნდება და ესეც ნორმალურია. დანარჩენი ყველაფერი იდენტური უნდა იყოს.

log გეუბნება, რა ჩაიტვირთა, და სწორედ ეს არის მნიშვნელოვანი; მოდი, რომელიც plugins-შია, მაგრამ ვერ ჩაიტვირთა, არ ჩანს. თუ გინდა, რა არის დაყენებული და არა რა ჩაიტვირთა, mod manager-ით დაყენებულ მოდებს თავიანთ საქაღალდეში აქვთ manifest.json version_number ველით:

bash
$ grep -H '"version_number"' BepInEx/plugins/*/manifest.json

გაითვალისწინე, რომ plugin-ის ვერსია, რომელსაც მოდი ჩატვირთვისას აცხადებს, და მისი Thunderstore პაკეტის ვერსია ჩვეულებრივ ერთია, მაგრამ არა ყოველთვის. როცა ისინი განსხვავდება, ვერსიის შემოწმებები ჩატვირთვის ხაზს ხედავს.

ჩვეულებრივი მიზეზები, იმ თანმიმდევრობით, როგორც ხდება#

kick-ების უმეტესობას რამდენიმე მიზეზიდან ერთ-ერთი აქვს:

  1. ვიღაცამ "Update all"-ს დააჭირა. მისმა mod manager-მა ყველა მოდი უახლეს release-ზე განაახლა. ახლა ის სერვერზე წინ არის. ეს ყველაზე ხშირი მიზეზია დიდი სხვაობით და მიზეზი, რის გამოც ჯგუფის profile-ები დაფიქსირებული უნდა იყოს - r2modman Valheim-ის ჯგუფებისთვის აჩვენებს, როგორ.
  2. სერვერი განახლდა, ჯგუფის profile კი არა. admin-მა სერვერზე მოდები განაახლა და ახალი profile-ის გაზიარება დაავიწყდა, ამიტომ ახლა ყველა უკან არის.
  3. დამოკიდებულება გადაიხარა. კონტენტის მოდები ემთხვევა, მაგრამ Jotunn, ან ბიბლიოთეკა, რომელზეც ერთი მოდია დამოკიდებული, არა. დამოკიდებულებები სიის ნაწილია.
  4. არასწორი profile. მოთამაშეს ორი profile აქვს და ძველი გაუშვა, ან Steam-ში Play დააჭირა და vanilla ჩართო. vanilla სერვერთან, რომელიც მოდებს ითხოვს, იღებს Jotunn-ის ფანჯარას, სადაც ყველა მოდი აკლიად არის ჩამოთვლილი.
  5. დუბლირებული მოდი. ერთი და იმავე plugin-ის ორი ასლი plugins-ში, ხშირად ძველი ცალკე მდებარე .dll და უფრო ახალი საკუთარ საქაღალდეში. BepInEx ერთს ტვირთავს და მეორეს გამოტოვებს, და აუცილებლად არა იმას, რომელსაც ელოდი.
  6. სხვაობა მხოლოდ config-ში. იშვიათია, მაგრამ ზოგი მოდი sync-ის შემოწმებაში config-ის მნიშვნელობასაც რთავს. ამ მოდისთვის სერვერის BepInEx/config ფაილების დაკოპირება მას აგვარებს.

კლიენტისა და სერვერის ნაკრებების დამთხვევა#

ეტალონად სერვერი აირჩიე. სერვერი არის ის, რასაც ყველა უკავშირდება, ის ყველაზე იშვიათად იცვლება და მისი ნაკრები უკვე სამყაროსთან არის დატესტილი.

  1. სია სერვერიდან აიღე. გამოიყენე ზემოთ მოცემული log-ის ამონაწერი და ჩაწერე სადმე, სადაც ჯგუფი წაიკითხავს.
  2. შექმენი ერთი profile, რომელიც მას ემთხვევა. ერთი ადამიანი ქმნის ან ანახლებს mod manager-ის profile-ს ზუსტად ამ ვერსიებით, Jotunn-ის, HookGenPatcher-ისა და BepInExPack Valheim-ის ჩათვლით. r2modman-ში მოდის ჩამოტვირთვის ფანჯარა უფრო ძველი ვერსიის არჩევის საშუალებას გაძლევს.
  3. profile-ის export ფაილად გააკეთე და გააზიარე. ყველა მას ახალ profile-ად აკეთებს import-ს, ძველის შეკეთების ნაცვლად.
  4. სინქრონიზებული მოდებისთვის სერვერის config-ები profile-ში დააკოპირე, თუ რომელიმე მოდი თავის შემოწმებაში config-ს რთავს, ან გამოტოვე ეს ნაბიჯი, თუ არცერთი არ რთავს.
  5. გამოცხადებამდე ერთ მოთამაშესთან დატესტე. თუ ის უპრობლემოდ დაუკავშირდება, profile სწორია.

თუ არასწორი სწორედ სერვერია - მაგალითად, ის მოდის ძველ ვერსიას იყენებს ცნობილი bug-ით და გინდა, ყველა ახალზე იყოს - ჯერ სერვერი განაახლე, დარწმუნდი, რომ ის სამყაროსთან ერთად უპრობლემოდ ეშვება, შემდეგ ახალი სიით იგივე ნაბიჯები გაიარე. არასდროს განაახლო ჯერ კლიენტები და მერე სერვერი; შუალედურ საათებში ვერავინ ითამაშებს.

Backupსამყარო + BepInExსერვერის განახლებამოდები, მერე თამაშისატესტო შესვლაერთი მოთამაშეprofile-ის exportფაილის ახალი სახელიჯგუფის importახალ profile-ად
განახლების თანმიმდევრობა kick-ების დღის გარეშე

გარჩეული მაგალითი#

ექვსკაციან ჯგუფს სერვერი თორმეტი მოდით აქვს. სამშაბათ საღამოს ორ მოთამაშეს შესვლა შეუძლია, ოთხს კი დაკავშირებისას kick-ს აძლევს. აი, როგორ წყდება ეს დაახლოებით ათ წუთში და არა მთელ საღამოში.

პირველი გაგდებული მოთამაშე screenshot-ს აგზავნის. მასზე ჩანს vanilla "Incompatible version" შეტყობინება, ქვემოთ არაფრით. ეს თამაშზე მიუთითებს და არა მოდებზე: მისმა Steam კლიენტმა Valheim იმ დღის მეორე ნახევარში განაახლა. ორ მოთამაშეს, რომლებსაც ჯერ კიდევ შეუძლიათ შესვლა, მას შემდეგ Steam არ გადაუტვირთავთ. სერვერი განზრახ წინა patch-ზეა დაჭერილი, რადგან სამი მოდი ჯერ არ განახლებულა.

admin-ს ორი არჩევანი აქვს. ან დაელოდოს მოდებს და ყველაფერი ერთად განაახლოს, ან გაგდებულ მოთამაშეებს საკუთარი თამაში უკან დააბრუნებინოს. Steam მოთამაშეების უმეტესობას მარტივ rollback-ს არ სთავაზობს, ამიტომ ლოდინი რეალისტური ვარიანტია. admin ჯგუფის ჩატში წერს, რომ სერვერი ძველ patch-ზე რჩება, სანამ მოდები მზად იქნება, და რომ ორმა ჯერ კიდევ დაკავშირებულმა მოთამაშემ ამაღამ Steam არ გადატვირთოს.

ხუთშაბათს მოდები განახლდება. admin აკეთებს სამყაროსა და BepInEx-ის backup-ს, ანახლებს სერვერის თამაშსა და მოდებს, უშვებს მას, log-ში ამოწმებს exception-ებს და ყოველ Loading [...] ხაზს, და ერთხელ შედის, რომ შეამოწმოს, მოდიფიცირებული ნივთების ზარდახშა ისევ ხელუხლებელია თუ არა. შემდეგ ახალი სახელით ახალი profile ფაილის export-ს აკეთებს და აქვეყნებს. მეოთხე მოთამაშე მაინც kick-ს იღებს: Jotunn-ის ფანჯარა ერთ მოდს ძველი ვერსიით აჩვენებს. მან ახალი profile-ის import გააკეთა, მაგრამ ძველი გაუშვა. profile-ის გადართვა ამას ასწორებს.

ამ თანმიმდევრობაში არაფერი მოითხოვდა, რომ ვინმეს რამე გამოეცნო. ყოველი ნაბიჯი შეტყობინებას ან log-ის ხაზს კითხულობდა და მის მიხედვით მოქმედებდა.

როგორ შეაჩერო ამის განმეორება#

kick-ები ყოველ ჯერზე ბრუნდება, როცა მოდების სია იცვლება, თუ ჯგუფს განახლებებთან დაკავშირებით ჩვევა არ აქვს. რა მუშაობს:

  • მოდების სიას ერთი მფლობელი ჰყავს. ერთი ადამიანი წყვეტს, რა არის დაყენებული და რომელი ვერსიით. დანარჩენები import-ს აკეთებენ.
  • კლიენტებზე ადგილზე განახლება არ ხდება. წესია "გააკეთე ახალი profile-ის import" და არასდროს "განაახლე შენი მოდები".
  • დააფიქსირე სერვერის თამაშის ვერსია, სანამ მოდები მზად იქნება. Valheim-ის patch BepInEx-ის მოდების უმეტესობას ტეხავს, და patch-ის დღის პირველი kick ის არის, რომ კლიენტის თამაშის ვერსია სერვერისაზე ახალია. თამაშის სერვერის ვერსიის დაფიქსირება და rollback-ები განიხილავს სერვერის განზრახ უკან დაჭერას.
  • შეინახე ბოლო მომუშავე ნაკრები. ყოველი ცვლილების წინ BepInEx-ის backup გააკეთე. RE:NODE-ზე backup სლოტები Valheim-ის ყველა გეგმას მოყვება და backup-ის ჩაკეტვა შეიძლება rotation-ისგან, ამიტომ ბოლო ცნობილი კარგი მოდების ნაკრები ღამის backup-ებით არ განიდევნება, სანამ ახალს ასწორებ.
  • ვერსიები ჩაიწერე. დამაგრებული შეტყობინება profile-ის ფაილით, თარიღითა და Jotunn-ის ვერსიით შემდეგ ადამიანს diff-ს აცილებს.

მოდიფიცირებული ჯგუფის სერვერისთვის ზოგადი ჩვევები მოდიფიცირებული სერვერის გაშვება მეგობრებისთვის-შია.

FAQ#

რატომ მაგდებს, როცა ზუსტად იგივე მოდები მაქვს, რაც ჩემს მეგობარს?

იმიტომ, რომ "იგივე მოდები" ჩვეულებრივ ნიშნავს იგივე სახელებს და არა იგივე ვერსიებს ან დამოკიდებულებებს. ორივე log-იდან Loading [...] ხაზები შეადარე. Jotunn-ის ან ბიბლიოთეკის ერთი განსხვავებული ვერსიაც საკმარისია.

შემიძლია მოდიფიცირებულ სერვერზე შესვლა სერვერზე ნაკლები მოდით?

მხოლოდ მაშინ, თუ დაკლებული მოდები მხოლოდ სერვერისაა ან შემოწმებას არ ითხოვს. ნებისმიერი მოდი, რომელიც აცხადებს, რომ ის ყველას უნდა ჰქონდეს, უარს გეტყვის, ხოლო კონტენტის მოდი, რომელიც გაკლია, საუკეთესო შემთხვევაში ვერ დაგანახებს იმას, რასაც სხვა მოთამაშეები ხედავენ.

შემიძლია სერვერზე ვერსიის შემოწმების გამორთვა?

ზოგადი გადამრთველი არ არსებობს და არც უნდა ეძებო. ყოველი მოდი თავის შემოწმებას აცხადებს, რადგან შეუსაბამო ვერსია ნივთებს, რეცეპტებს ან სამყაროს ობიექტებს ისე ტეხავს, რომ შეიძლება სამყარო დააზიანოს. ამის ნაცვლად ვერსიები დაამთხვიე.

შეტყობინება ამბობს Incompatible version, მაგრამ ყველამ განვაახლეთ. ახლა რა?

შეამოწმე, განახლდა თუ არა სერვერიც. თუ განახლდა, ნახე, ასახელებს თუ არა შეტყობინების ქვემოთ მოცემული ტექსტი მოდს - ServerSync თავის ხაზებს იქ ამატებს. თუ არაფერია დასახელებული, ყოველი კლიენტის მთავარ მენიუში თამაშის ვერსია შეადარე სერვერის startup log-ში მოცემულ ვერსიას.

config ფაილებიც უნდა ემთხვეოდეს?

თავად შემოწმებისთვის ჩვეულებრივ არა. მოდები, რომლებიც თავიანთ config-ს სინქრონიზებენ, დაკავშირებისას სერვერის მნიშვნელობებს აგზავნიან, ამიტომ კლიენტების საკუთარ ფაილებს მნიშვნელობა არ აქვს. რამდენიმე მოდი იმაში, რასაც ადარებს, config-ს რთავს, და ამ მოდისთვის სერვერის ფაილის დაკოპირება ამას აგვარებს.