Uma biblioteca de PC para Gorilla Tag que lida com várias coisas relacionadas à sala (e mais?)
Se não quiser instalar manualmente, você pode instalar este mod com o Monke Mod Manager
Se o seu jogo não foi modificado com BepinEx, FAÇA ISSO PRIMEIRO! Basta acessar a versão mais recente do BepinEx e extrair BepinEx_x64_VERSION.zip diretamente na pasta do jogo e, em seguida, executar o jogo uma vez para instalar o BepinEx corretamente.
Em seguida, vá para a versão mais recente deste mod e extraia-o diretamente na pasta do jogo. Certifique-se de que ele seja extraído diretamente na pasta do seu jogo e não em uma subpasta!
Com o lançamento do Utilla 1.5.0, os mods são obrigados a funcionar apenas em modos de jogo modificados, em vez de em qualquer lobby privado. Utilla fornece atributos fáceis de usar para tornar essa transição o mais simples possível. Veja este commit para ver um exemplo de atualização do seu mod para funcionar com o novo sistema.
Saber se o jogador está em uma sala modificada é uma parte muito importante para garantir que seu mod não seja usado para trapacear. Utilla torna isso mais fácil, fornecendo atributos a serem acionados quando um lobby modificado é acessado.
O [ModdedGamemode]
deve ser aplicado à classe de plugin do seu mod para utilizar os demais atributos. [ModdedGamemodeJoin]
e [ModdedGamemodeLeave]
podem ser aplicados a qualquer método void dentro desta classe, com um parâmetro de string opcional contendo a string completa do modo de jogo. Esses métodos são chamados quando uma sala modificada é ingressada ou deixada, respectivamente.
using System ;
using BepInEx ;
using Utilla ;
namespace ExamplePlugin
{
[ BepInPlugin ( " org.legoandmars.gorillatag.exampleplugin " , " Example Plugin " , " 1.0.0 " ) ]
[ BepInDependency ( " org.legoandmars.gorillatag.utilla " , " 1.5.0 " ) ] // Make sure to add Utilla 1.5.0 as a dependency!
[ ModdedGamemode ] // Enable callbacks in default modded gamemodes
public class ExamplePlugin : BaseUnityPlugin
{
bool inAllowedRoom = false ;
private void Update ( )
{
if ( inAllowedRoom )
{
// Do mod stuff
}
}
[ ModdedGamemodeJoin ]
private void RoomJoined ( string gamemode )
{
// The room is modded. Enable mod stuff.
inAllowedRoom = true ;
}
[ ModdedGamemodeLeave ]
private void RoomLeft ( string gamemode )
{
// The room was left. Disable mod stuff.
inAllowedRoom = false ;
}
}
}
Utilla 1.5.0 traz suporte para modos de jogo personalizados para Gorilla Tag. Um mod pode registrar modos de jogo personalizados através do atributo [ModdedGamemode]
e aparecerá próximo aos modos de jogo padrão no jogo.
[ BepInPlugin ( " org.legoandmars.gorillatag.exampleplugin " , " Example Plugin " , " 1.0.0 " ) ]
[ BepInDependency ( " org.legoandmars.gorillatag.utilla " , " 1.5.0 " ) ] // Make sure to add Utilla 1.5.0 as a dependency!
[ ModdedGamemode ( " mygamemodeid " , " MY GAMEMODE " , Models . BaseGamemode . Casual ) ] // Enable callbacks in a new casual gamemode called "MY GAMEMODE"
public class ExamplePlugin : BaseUnityPlugin { }
Além disso, um gerenciador de jogos totalmente customizado pode ser usado, criando uma classe que herda GorillaGameManager
. A criação de um modo de jogo personalizado requer conhecimento avançado do código de rede do Gorilla Tag. Atualmente, o matchmaking não funciona para modos de jogo totalmente personalizados, mas eles ainda podem ser usados através de códigos de sala.
[ BepInPlugin ( " org.legoandmars.gorillatag.exampleplugin " , " Example Plugin " , " 1.0.0 " ) ]
[ BepInDependency ( " org.legoandmars.gorillatag.utilla " , " 1.5.0 " ) ] // Make sure to add Utilla 1.5.0 as a dependency!
[ ModdedGamemode ( " mygamemodeid " , " MY GAMEMODE " , typeof ( MyGameManager ) ) ] // Enable callbacks in a new custom gamemode using MyGameManager
public class ExamplePlugin : BaseUnityPlugin { }
public class MyGameManager : GorillaGameManager
{
// The game calls this when this is the gamemode for the room.
public override void StartPlaying ( )
{
// Base needs to run for base GorillaGamanger functionality to run.
base . StartPlaying ( ) ;
}
// Called by game when you leave a room or gamemode is changed.
public override void StopPlaying ( )
{
// Base needs to run for the game mode stop base GorillaGameManager functionality from running.
base . StopPlaying ( ) ;
}
// Called by the game when you leave a room after StopPlaying, use this for all important clean up and resetting the state of your game mode.
public override void Reset ( )
{
}
// Gamemode names must not have spaces and must not contain "CASUAL", "INFECTION", "HUNT", or "BATTLE".
// Names that contain the name of other custom gamemodes will confilict.
public override string GameModeName ( )
{
return " CUSTOM " ;
}
// GameModeType is an enum which is really an int, so any int value will work.
// Make sure to use a unique value not taken by other game modes.
public override GameModeType GameType ( )
{
return ( GameModeType ) 765 ;
}
public override int MyMatIndex ( Player forPlayer )
{
return 3 ;
}
}
Utilla fornece eventos para transmissão quando qualquer sala é ingressada. Não é recomendado ativar e desativar seu mod, para isso utilize os atributos descritos acima. Utilla oferece dois eventos para entrada e saída de sala, Utilla.Events.RoomJoined
e Utilla.Events.RoomLeft
using System ;
using BepInEx ;
using Utilla ;
namespace ExamplePlugin
{
[ BepInPlugin ( " org.legoandmars.gorillatag.exampleplugin " , " Example Plugin " , " 1.0.0 " ) ]
[ BepInDependency ( " org.legoandmars.gorillatag.utilla " , " 1.5.0 " ) ] // Make sure to add Utilla as a dependency!
public class ExamplePlugin : BaseUnityPlugin
{
void Awake ( )
{
Utilla . Events . RoomJoined += RoomJoined ;
Utilla . Events . RoomLeft += RoomLeft ;
}
private void RoomJoined ( object sender , Events . RoomJoinedArgs e )
{
UnityEngine . Debug . Log ( $" Private room: { e . isPrivate } , Gamemode: { e . Gamemode } " ) ;
}
private void RoomLeft ( object sender , Events . RoomJoinedArgs e )
{
UnityEngine . Debug . Log ( $" Private room: { e . isPrivate } , Gamemode: { e . Gamemode } " ) ;
}
}
}
Utilla fornece um evento que é acionado após a inicialização do Gorilla Tag. Use-o se você estiver recebendo erros de referência nula em objetos singleton, como GorillaLocomotion.Player.Instance
using System ;
using BepInEx ;
using Utilla ;
namespace ExamplePlugin
{
[ BepInPlugin ( " org.legoandmars.gorillatag.exampleplugin " , " Example Plugin " , " 1.0.0 " ) ]
[ BepInDependency ( " org.legoandmars.gorillatag.utilla " , " 1.5.0 " ) ] // Make sure to add Utilla as a dependency!
public class ExamplePlugin : BaseUnityPlugin
{
void Awake ( )
{
Utilla . Events . GameInitialized += GameInitialized ;
}
private void GameInitialized ( object sender , EventArgs e )
{
// Player instance has been created
UnityEngine . Debug . Log ( GorillaLocomotion . Player . Instance . jumpMultiplier ) ;
}
}
}
Se você quiser entrar em lobbies privados personalizados com seu mod, Utilla implementa métodos para isso também.
Utilla . Utils . RoomUtils . JoinPrivateLobby ( ) // Joins a private lobby with a random 6 character code
Utilla . Utils . RoomUtils . JoinPrivateLobby ( " TestLobby " ) // Joins a private lobby with the code TestLobby
Utilla . Utils . RoomUtils . JoinPrivateLobby ( " TestLobby " , true ) // Joins a private casual lobby with the code TestLobby
Se você quiser usar filas personalizadas com seu mod, o Utilla também implementa métodos para isso.
Utilla . Utils . RoomUtils . JoinModdedLobby ( " TestQueue " ) // Joins a random room in the queue TestQueue
Utilla . Utils . RoomUtils . JoinModdedLobby ( " TestQueue " , true ) // Joins a random casual room in the queue TestQueue
Este projeto é construído em C# usando .NET Standard.
Para referências, crie uma pasta Libs na mesma pasta da solução do projeto. Dentro desta pasta você precisará copiar:
0Harmony.dll
BepInEx.dll
BepInEx.Harmony.dll
de Gorilla TagBepInExplugins
e
Assembly-CSharp.dll
PhotonRealtime.dll
PhotonUnityNetworking.dll
UnityEngine.dll
UnityEngine.CoreModule.dll
de Gorilla TagGorilla Tag_DataManaged
.
Este produto não é afiliado à Gorilla Tag ou Another Axiom LLC e não é endossado ou patrocinado de outra forma pela Another Axiom LLC. Partes dos materiais aqui contidos são propriedade da Another Axiom LLC. ©2021 Outra Axiom LLC.