Neste guia, Descreverei algumas modificações que corrigi para ajustar alguns comportamentos da interface do usuário e trapacear um pouco depois de concluir o jogo.
O jogo está escrito em Unity e C#, o que torna relativamente fácil de explorar através da ferramenta DNSPY.
Observe que essas modificações não são mods reais, mas patches temporários, porque no momento em que o jogo é atualizado pelos desenvolvedores, As mudanças locais são substituídas. Existem estruturas de modding, como bepinex para outros jogos, mas eu não olhei para aqueles.
Preparativos
- Baixe os mais recentes disponíveis dnSpy.
- Extraia -o para um local adequado e execute dnspy.exe
- No arquivo > Abrir, localize o Assembly-csharp.dll no
%{dir}\common\The Planet Crafter Prologue\Planet Crafter_Data\Managed
diretório.
Eu recomendo usar “Método de edição” em vez de “Classe de edição” Para evitar recompilação drástica de peças de código não relacionadas que podem quebrar outra coisa. Também, DNSPY tem bugs, então não há necessidade de tentar.
Modificar a classificação
O jogo classifica os itens pelo nome por padrão, mas eu gosto de ar e comida na frente da lista. A classificação é tratada no Spacecraft.inventory::AUTOSORT() método. O método atualmente possui uma expressão LINQ para classificar que substituiremos por uma chamada direta para Lista::Organizar().
this.worldObjectsinininventory.sort(delegar(WorldObject a, WorldObject b) { string id = a.getGroup().Pode(); string id2 = b.getGroup().Pode(); se (id.startswith("Oxygencapsule") && !id2.startswith("Oxygencapsule")) { retornar -1; } se (!id.startswith("Oxygencapsule") && id2.startswith("Oxygencapsule")) { retornar 1; } se (id.startswith("Waterbottle") && !id2.startswith("Waterbottle")) { retornar -1; } se (!id.startswith("Waterbottle") && id2.startswith("Waterbottle")) { retornar 1; } Retornar id.compareto(ID2); });
Não conheço todos os IDs dos itens, mas posso ser despejado em um arquivo deste método via StreamWriter.
Mover itens do mesmo tipo de/para o inventário
Por padrão, Pode -se mover itens um por um, que pode ser tedioso. Clicar em uma imagem de inventário é tratado por Spacecraft.inventoryDisplayer::OnImageClicked() método. Por padrão, Tem ação para os cliques do mouse esquerdo e direito. Como não consegui encontrar uma maneira de verificar modificadores como Shift ou Ctrl Keys, Eu decidi usar o botão do mouse do meio.
Quando o usuário clica no botão do mouse do meio, Temos que encontrar os objetos no inventário atual com o mesmo ID do item, Em seguida, pegue a outra entidade de inventário. Em seguida, tente adicioná -lo ao outro inventário e se bem -sucedido, Remova -o do inventário atual, Assim, lidando com o caso completo.
se (_EventTriggerCallbackData.PointeventData.Button == PointerEventData.inputButton.middle) { Dataconfig.umpype OpenEdui = mijutools.managers.getmanager().Dentes(); se (OpenEdui == DATACONFIG.UIDADEPE.CONTINER) { Inventário OtherInventory = ((UiWindowContainer)Mijutools.managers.getManager().Getwindowviauiid(Openedui)).Getotherinventory(this.inventory); se (this.inventory != nulo && Other inventory != nulo) { string id = _eventtriggercallbackdata.worldobject.getgroup().Pode(); Lista da lista = nova lista(); foreach (WorldObject WorldObject2 NEST.Inventory.GetinsideWorldObjects()) { se (WorldObject2.GetGroup().Pode() == id) { list.add(WorldObject2); } } foreach (WorldObject WorldObject3 na lista) { se (OtherInventory.additem(WorldObject3)) { this.inventory.removeItem(WorldObject3, falso); } } } } }
Capacidade de inventário (Trapaceando)
Por padrão, O inventário é muito pequeno e passei a maior parte do tempo indo e voltando entre os depósitos, Sites de armazenamento e construção. Eu também gosto de coletar todos os depósitos que estavam se tornando tempo e consumo de ar.
O inventário é gerenciado pelo acima mencionado Spacecraft.inventory classe e sua capacidade é tratada no InventorySize campo privado. Infelizmente, tudo que eu poderia fazer é substituir este campo em 3 locais: o construtor, o getter e o setter para não quebrar a estrutura da montagem para muito:
inventário público(int _inventoryId, int _inventorySize, Lista _worldObjectsinininventory = nulo) { this.inventoryId = _inventoryId; this.inventorySize = _inventorySize; this.inventorySize = 250; // <---------------------------------- this.worldObjectsinininventory = ((_worldObjectsinininventory != nulo) ? _worldObjectsinininventory : nova lista()); this.authorizedGroups = nova lista(); } Public Int Getsize() { this.inventorySize = 250; // <---------------------------------- devolver este.inventorySize; } Public Void Setsize(int _inventorySize) { se (_inventorySize == this.inventorySize) { retornar; } this.inventorySize = _inventorySize; this.inventorySize = 250; // <---------------------------------- this.RefreshDisplayerContent(); }
No entanto, isso tem algumas consequências da interface do usuário:
- A tela de inventário para o jogador excederá a tela e você não poderá interagir com nada além dela.
- Afeta o equipamento “inventário”
- Afeta todos os recipientes, incluindo o mineiro principal.
- Os itens captados são adicionados ao final do inventário e podem não ser visíveis, incluindo ar, itens de água e comida.
- Muitos cliques ao depositar inventário em contêineres.
- Tela Lag ao visualizar e mover itens em contêineres.
Felizmente, o último pode ser remediado pelo classificador e no grupo mover mods acima. Armazene os itens por tipo em recipientes separados.
Localização do asteróide (Trapaceando)
Por padrão, O jogo tem como alvo um raio relativamente grande ao redor do jogador quando asteróides (Natural e Recursos chamados em Via Rockets) terra. Minha base está na rocha lambda e a estrutura de lançamento também está lá. Consequentemente, Muitas pedras acabam no lago da área de partida.
Os asteróides são tratados no Spacecraft.asteridHandler e a seleção de alvo está no Spawnasteróide() método. Encontre o loop e nele, um vetor calculado através de uma unidade aleatória e raio. Mude para algo assim:
Vetor2 vetor = unityEngine.random.insideunitcircle * Math.Min((flutuador)_asteroidevent.distanceflomplyer, 20f);
A razão pela qual eu uso matemática.. 20f é bem apertado, então eu recomendo sair em um campo aberto ou posição elevada. Essa concentração tem a desvantagem de que a localização do jogador é inundada de detritos que podem enterrar o jogador e essas pedras ficam por minutos antes de despertar.
Aviso. Nas versões de acesso inicial, Os asteróides podem e machucam o jogador, então dê ao mod um raio maior ou vá para dentro de casa e espere os detritos desaparecerem.
Isso é tudo o que estamos compartilhando hoje para isso O Criador do Planeta guia. Este guia foi originalmente criado e escrito por Akarnokd. Caso não atualizemos este guia, você pode encontrar a atualização mais recente seguindo este link.