Dans ce guide, je’Je décrivez quelques modifications dans lesquelles j'ai corrigé pour ajuster quelques comportements d'interface utilisateur et pour tromper un peu après avoir terminé le jeu.
Le jeu est écrit en Unity et C #, ce qui le rend relativement facile à explorer via l'outil DNSPY.
Notez cependant que ces modifications’t mods réels mais correctifs temporaires parce que le moment où le jeu est mis à jour par les développeurs, Les changements locaux sont écrasés. Il existe des cadres de modding, comme Bepinex pour d'autres jeux, mais je n'ai pas examiné ceux.
Préparations
- Téléchargez le dernier disponible dnspy.
- Extrairez-le à un emplacement approprié et exécutez dnspy.exe
- Dans le dossier > Ouvrir, localiser le Assembly-CSharp.dll dans le
%{vapeur}\common\The Planet Crafter Prologue\Planet Crafter_Data\Managed
annuaire.
Je recommande d'utiliser « Méthode de modification » au lieu de « Modifier la classe » Pour éviter la recompilation drastique des pièces de code non apparentées qui peuvent casser autre chose. Aussi, DNSPY a des bugs, donc pas besoin de le tenter.
Modifier le tri
Le jeu trie les articles par leur nom par défaut, mais j'aime l'air et la nourriture à l'avant de la liste. Le tri est géré dans le Vaisseau spatial.inventory::Autosorte() méthode. La méthode a actuellement une expression LINQ pour le tri que nous remplacerons par un appel direct à Liste::Trier().
this.worldobjectsininventory.sort(déléguer(WorldObject a, WorldObject B) { String id = a.getgroup().Peut(); String id2 = b.getgroup().Peut(); si (id.startswith("Oxygéncapsule") && !id2.startswith("Oxygéncapsule")) { retour -1; } si (!id.startswith("Oxygéncapsule") && id2.startswith("Oxygéncapsule")) { retour 1; } si (id.startswith("Bouton d'eau") && !id2.startswith("Bouton d'eau")) { retour -1; } si (!id.startswith("Bouton d'eau") && id2.startswith("Bouton d'eau")) { retour 1; } return id.compareto(id2); });
Je n'en ai pas’T Connaissez tous les ID des éléments mais pourra être jeté dans un fichier à partir de cette méthode via Streamwriter.
Déplacer les éléments du même type vers / depuis l'inventaire
Par défaut, on peut déplacer les articles un par un, qui peut être fastidieux. Cliquez sur une image d'inventaire est gérée par Spacecraft.inventorydisplayer::OnImageClicked() méthode. Par défaut, il a une action pour les clics de souris gauche et droite. Depuis que je pouvais’T Trouvez un moyen de vérifier les modificateurs tels que les touches Shift ou CTRL, J'ai décidé d'utiliser le bouton de la souris du milieu.
Lorsque l'utilisateur clique sur le bouton de la souris intermédiaire, Nous devons trouver les objets dans l'inventaire actuel ayant le même ID d'élément, Ensuite, obtenez l'autre entité d'inventaire. Ensuite, essayez de l'ajouter à l'autre inventaire et en cas de succès, Retirez-le de l'inventaire actuel, gérer ainsi le cas complet.
si (_EventtriggerCallbackData.pointerEventData.button == PointereventData.inputButton.middle) { Dataconfig.umpype openDui = mijutools.managers.getManager().Denté(); si (OpenEDUI == Dataconfig.uitype.Container) { Inventaire autreInventory = ((UiwindowContainer)Mijutools.managers.getManager().Getwindowviauiid(ouvert)).Getotherinventory(this.inventory); si (this.inventory != nul && autre inventaire != nul) { String id = _EventtriggerCallbackData.worldObject.getGroup().Peut(); Liste de liste = nouvelle liste(); foretter (WorldObject WorldObject2 dans ce.inventory.getInsideworldObjects()) { si (worldobject2.getgroup().Peut() == ID) { list.add(WorldObject2); } } foretter (WorldObject WorldObject3 dans la liste) { si (autreInventory.additem(WorldObject3)) { this.inventory.removeitem(WorldObject3, FAUX); } } } } }
Capacité d'inventaire (Tricherie)
Par défaut, L'inventaire est assez petit et j'ai passé la plupart du temps à faire des allers-retours entre les dépôts, sites de stockage et de construction. J'aime aussi collecter tous les dépôts qui devenaient du temps et de la consommation d'air.
L'inventaire est géré par le Vaisseau spatial.inventory la classe et sa capacité sont gérées dans le inventaire terrain privé. Malheureusement, Tout ce que je pouvais faire, c'est écraser ce champ dans 3 emplacements: le constructeur, Le Getter et le Setter ne cassent pas la structure d'assemblage à beaucoup:
inventaire public(int _inventoryid, int _inventorySize, Liste _WorldObjectSinInventory = null) { this.inventoryid = _inventoryid; this.inventorysize = _inventorysize; this.inventorysize = 250; // <---------------------------------- this.worldObjectSinInventory = ((_worldobjectsininventory != nul) ? _worldobjectsininventory : nouvelle liste()); this.authorizedGroups = nouvelle liste(); } public Int GetSize() { this.inventorysize = 250; // <---------------------------------- Renvoyez ceci.inventorySize; } SetSize de vide public(int _inventorySize) { si (_inventorySize == this.inventorysize) { retour; } this.inventorysize = _inventorysize; this.inventorysize = 250; // <---------------------------------- this.refreshdisplayercontent(); }
toutefois, Cela a des conséquences sur l'interface utilisateur:
- L'écran d'inventaire du joueur dépassera l'écran et vous avez gagné’Pour pouvoir interagir avec quoi que ce soit au-delà.
- Il affecte l'équipement « inventaire »
- Il affecte tous les conteneurs, y compris le mineur de base.
- Les articles ramassés sont ajoutés à la fin de l'inventaire et peuvent ne pas être visibles, y compris l'air, eau et aliments.
- Trop de clics lors du dépôt de l'inventaire dans les conteneurs.
- Déclassement de l'écran lors de la visualisation et du déplacement des éléments dans des conteneurs.
Heureusement, ce dernier peut être corrigé par le trieur et les mods de déplacement de groupe au-dessus. Stockez les articles par type dans des conteneurs séparés.
Emplacement des astéroïdes (Tricherie)
Par défaut, Le jeu cible un rayon relativement important autour du joueur lorsque les astéroïdes (naturel et ressource appelé via les roquettes) atterrir. Ma base est au Lambda Rock et la structure de lancement est également là. Par conséquent, De nombreux rochers se retrouvent dans le lac de la zone de départ.
Les astéroïdes sont manipulés dans le Vaisseau spatial. et la sélection cible est dans le Spawnasteroid() méthode. Trouvez la boucle et dedans, un vecteur calculé via une unité aléatoire et un rayon. Changez-le en quelque chose comme ça:
Vector2 vector = UnityEngine.Random.InsideUnitCircle * Math.min((flotter)_asteroidevent.Distancefromplayer, 20f);
La raison pour laquelle j'utilise Math.Min est d'éviter la réoptimisation indésirable de la méthode lorsqu'il est recompilé. 20F est assez serré, donc je recommande de sortir dans un champ ouvert ou une position élevée. Cette concentration présente l'inconvénient que l'emplacement du joueur est inondé de débris qui peuvent enterrer le joueur et ces rochers restent quelques minutes avant de mépris.
Avertissement. Dans les versions d'accès anticipées, Les astéroïdes peuvent faire du mal au joueur, alors donnez au mod un rayon plus grand ou allez à l'intérieur et attendez que les débris disparaissent.
C'est tout ce que nous partageons aujourd'hui pour cela L'artisan de la planète guide. Ce guide a été initialement créé et rédigé par Akarnokd. Si nous ne parvenons pas à mettre à jour ce guide, vous pouvez trouver la dernière mise à jour en suivant ceci lien.