Úprava .dll súboru pomocou dnSpy
Zdravím
Snažím sa upraviť jeden mód do hry (.dll súbor, hra je robená cez Unity 3D) no dnSpy vypisuje chybu pri kompilácii "... is inaccessible due to its protection level".
Kód som však zatiaľ nijako neupravoval, čiže táto chyba vyskakuje už od začiatku bez akýchkoľvek úprav.
Vedeli by ste mi prosím poradiť ako by som chybu mohol opraviť?
Nejspíš se snažíš přistoupit k něčemu co je protected nebo private mimo samotnou třídu či její potomky.
Pokud už je to tam od začátku, tak je to možná špatně dekompilované. Ostatně dnSpy se už pár let nevyvíjí.
Skúšal som to aj cez Visual Studio, no výsledok bol úplne ten istý. Skúsil som aj DotPeek.
Bez konkrétního kódu se nejspíš rady nedočkáš.
Snažím sa prakticky len upraviť hodnotu, nič viac, nič menej.
Hodnotu upravujem v: AlterraWays.dll -> AlterraWays.Food -> FruitNutrietBlock.
Konkrétne upravujem tento riadok:
na:
Presné chyby:
Toto je tá časť, ktorá (asi) spôsobuje danú chybu: (Assembly-CSharp.dll ->CraftData)
Taktiež Assembly-CSharp.dll sa nedá nijako upravovať (aspoň mne to teda nešlo ani cez dnSpy, ani cez VS).
A nebude potřeba upravit ještě něco jiného? Z jídla měníš atributy na jídlo a vodu, nebude potřeba nějak "přeřadit" tu potravinu z "jenom jídlo" na "jídlo i pití"?
Třeba ve Skyrimu, když si něco upravuju, musím si to hlídat. Když třeba u náušnic měním váhu nebo cenu, není problém. Jakmile ale chci přidat armor, musím to přeřadit z "oblečení" na "zbroj". Pro Skyrim ale naštěstí existují na tohle použitelné utility.
Chyby, ktoré som vyššie uviedol, vypisuje kompilátor aj vtedy, keď vôbec nič nezmením. Keď upravím mód podľa seba, chyby po kompilácii sú úplne tie isté. Čiže tým to na 200% nebude.
Co je classa CraftData.Ingredient? Když ji změníš třeba na public, začne to fungovat?
Práve že zmeniť sa to vôbec nedá. Aj keď to zmením a skompilujem, vráti sa to do pôvodného stavu. A to isté aj cez visual studio.
Vo VS to nejde zmeniť už vôbec (nejde to ani prepísať).
To se mi nějak nezdá. To prostě musí jít.
https://youtu.be/uDKLqvlc85A
Dekompiluj si to do složky a pak edituj ve VS. Pak se ti tam rozhodně nebude měnit nic pod rukama.
Veď tak som to urobil :D .
Na tom videu to rozhodně ve VS neděláš.
Vo videu nie, no robil som to aj vo VS včera. Alebo mám natočiť aj video ako to robím vo VS?????
Možná by bylo rychlejší sem dát odkaz na tu knihovnu.
Ospravedlňujem sa za neskoršiu odpoveď no bolela ma hlava tak som si išiel ľahnúť.
Tu je link na mód + potrebné .dll súbory: https://www.dropbox.com/scl/fi/mhhsyh7p4usp02nbm3ldi/mod.zip?rlkey=wlnggsx2o102a8y5q8v5imopd&dl=1
Tak můj tip je, že to dekompiluje špatně. Nebo spíš kompilát při kompilaci použil nějakou optimalizaci, kterou dekompilátor není schopen obnovit do původní podoby.
Řešení to určitě má, ale bude s tím spousta práce - dekompilovat Assembly-CSharp.dll, upravit ty třídy na public, upravit vše ostatní, aby to bylo možné znovu zkompilovat. A pak to samé zopakovat s AlterraWays.dll. A kdo ví, jeslti se při tom neobjeví ještě něco dalšího.
Možná bude nejjednodušší se domluvit s původním tvůrcem modifikace.
Můj tip na okraj: je to z Workshopu Steamu? Pokud ano, zkus mrknout na Nexus, moddb apod., jestli tam náhodou není přístupnější varianta.
Mód som práveže sťahoval z nexusmods.
dnSpy nepodporuje dekompiláciu knihovien .NET frameworku novšieho ako ver.4.6 a knihovne z VS 15,tie ďalšie použité utility sú pre .NET framework 3.2-3.6,dotyčný program má knihovne z verzie 4.8.1/5.x.x a VS 19-22,na tie si musíš zadovážiť novšie dekompilery a utility,inak sa dopracuješ len k novým chybám....
Vieš mi nejaké dekompiléry odporučiť? Zatiaľ poznám len dnSpy a dotPeek. V oboch prípadoch to ukazovalo tie isté chyby.
Ještě je ILSpy, ale tam je to to samé.