Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Ú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ť?

Předmět Autor Datum
Nejspíš se snažíš přistoupit k něčemu co je protected nebo private mimo samotnou třídu či její potom…
Wikan 06.03.2024 06:38
Wikan
Skúšal som to aj cez Visual Studio, no výsledok bol úplne ten istý. Skúsil som aj DotPeek.
sakulmore 06.03.2024 10:34
sakulmore
Bez konkrétního kódu se nejspíš rady nedočkáš.
Wikan 06.03.2024 11:06
Wikan
Snažím sa prakticky len upraviť hodnotu, nič viac, nič menej. Hodnotu upravujem v: AlterraWays.dll -…
sakulmore 06.03.2024 12:51
sakulmore
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…
L-Core 06.03.2024 13:04
L-Core
Chyby, ktoré som vyššie uviedol, vypisuje kompilátor aj vtedy, keď vôbec nič nezmením. Keď upravím m…
sakulmore 06.03.2024 13:19
sakulmore
Co je classa CraftData.Ingredient? Když ji změníš třeba na public, začne to fungovat?
Wikan 06.03.2024 14:28
Wikan
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…
sakulmore 06.03.2024 14:35
sakulmore
To se mi nějak nezdá. To prostě musí jít.
Wikan 06.03.2024 14:36
Wikan
https://youtu.be/uDKLqvlc85A
sakulmore 06.03.2024 14:51
sakulmore
Dekompiluj si to do složky a pak edituj ve VS. Pak se ti tam rozhodně nebude měnit nic pod rukama.
Wikan 06.03.2024 14:57
Wikan
Veď tak som to urobil :D .
sakulmore 06.03.2024 15:34
sakulmore
Na tom videu to rozhodně ve VS neděláš.
Wikan 06.03.2024 15:42
Wikan
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?????
sakulmore 06.03.2024 16:16
sakulmore
Možná by bylo rychlejší sem dát odkaz na tu knihovnu.
Wikan 06.03.2024 16:37
Wikan
Ospravedlňujem sa za neskoršiu odpoveď no bolela ma hlava tak som si išiel ľahnúť. Tu je link na mó…
sakulmore 06.03.2024 21:44
sakulmore
Tak můj tip je, že to dekompiluje špatně. Nebo spíš kompilát při kompilaci použil nějakou optimaliza…
Wikan 07.03.2024 09:43
Wikan
Možná bude nejjednodušší se domluvit s původním tvůrcem modifikace. Můj tip na okraj: je to z Worksh…
L-Core 06.03.2024 07:42
L-Core
Mód som práveže sťahoval z nexusmods.
sakulmore 06.03.2024 10:36
sakulmore
dnSpy nepodporuje dekompiláciu knihovien .NET frameworku novšieho ako ver.4.6 a knihovne z VS 15,tie…
audax mobile 07.03.2024 09:49
audax mobile
Vieš mi nejaké dekompiléry odporučiť? Zatiaľ poznám len dnSpy a dotPeek. V oboch prípadoch to ukazov…
sakulmore 07.03.2024 10:33
sakulmore
Ještě je ILSpy, ale tam je to to samé. poslední
Wikan 07.03.2024 10:47
Wikan

Snažím sa prakticky len upraviť hodnotu, nič viac, nič menej.
Hodnotu upravujem v: AlterraWays.dll -> AlterraWays.Food -> FruitNutrietBlock.

Konkrétne upravujem tento riadok:


cloneTemplate.ModifyPrefab = delegate(GameObject go)
{
  Eatable eatable = go.EnsureComponent<Eatable>();
  eatable.foodValue = 68f;
};

na:


cloneTemplate.ModifyPrefab = delegate(GameObject go)
{
  Eatable eatable = go.EnsureComponent<Eatable>();
  eatable.foodValue = 100f;
  eatable.waterValue = 100f;
};

Presné chyby:


'CraftData.Ingredient' is inaccessible due to its protection level
'List<CraftData.Ingredient>.Add(CraftData.Ingredient)' is inaccessible due to its protection level
'CraftData.Ingredient' is inaccessible due to its protection level
'List<CraftData.Ingredient>.Add(CraftData.Ingredient)' is inaccessible due to its protection level

Toto je tá časť, ktorá (asi) spôsobuje danú chybu: (Assembly-CSharp.dll ->CraftData)


private sealed class Ingredients : List<CraftData.Ingredient>
    {
        // Token: 0x0600484C RID: 18508 RVA: 0x00176BEC File Offset: 0x00174DEC
        public void Add(TechType techType, int amount = 1)
        {
            base.Add(new CraftData.Ingredient(techType, amount));
        }
    }

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.

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.

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....

Zpět do poradny Odpovědět na původní otázku Nahoru