[TUTORIAL] SISTEMA DE IDENTIFICADOR STAFF 09.07.17 17:54
Ao entrar no jogo, aparecerá um alerta onde irá pedir uma chave de segurança, ou melhor, um código de verificação.
Lembrando que esse sistema é para os usuários da equipe, após então você colocar o código de verificação, automaticamente irá aparecer o MOD Tools e enfim, os comandos da equipe. Caso o contrário, você não poderá executar comandos e nem terá o MOD Tools dentro do servidor.
Essa chave de segurança (código de verificação) será enviada por e-mail.
Imagem 2:
Imagem 3:
Imagem 4:
Como pode ver na terceira imagem, o código foi enviado do e-mail, mas, depois explico como iremos ativar. Na quarta imagem estaremos vendo como colocar o código corretamente, se colocar de uma maneira errada, não irá aparecer MOD Tools e comandos e então aparecerá um alerta avisando do erro. Agora, vamos ao código para que o sistema funcione!
No primeiro passo iremos a PlusEnvironment.cs e buscaremos por;
- Código:
public static string SWFRevision = "";
- Código:
public static string source;
No segundo passo iremos até Habbo.cs e buscaremos por;
- Código:
public Habbo(int Id, string Username,
- Código:
internal bool PinStaff;
Depois buscaremos o seguinte;
- Código:
//TODO: Nope.
this.InitPermissions();
- Código:
this.PinStaff = false;
No terceiro passo iremos a GameClient.cs e buscaremos por;
- Código:
if (!string.IsNullOrWhiteSpace(PlusEnvironment.GetDBConfig().DBData["welcome_message"]))
SendMessage(new MOTDNotificationComposer(PlusEnvironment.GetDBConfig().DBData["welcome_message"]));
- Código:
if (userData.user.GetPermissions().HasRight("mod_tickets"))
{
SendMessage(new ModeratorInitComposer(
PlusEnvironment.GetGame().GetModerationManager().UserMessagePresets,
PlusEnvironment.GetGame().GetModerationManager().RoomMessagePresets,
PlusEnvironment.GetGame().GetModerationManager().UserActionPresets,
PlusEnvironment.GetGame().GetModerationTool().GetTickets));
}
- Código:
/*
if (userData.user.GetPermissions().HasRight("mod_tickets"))
{
SendMessage(new ModeratorInitComposer(
PlusEnvironment.GetGame().GetModerationManager().UserMessagePresets,
PlusEnvironment.GetGame().GetModerationManager().RoomMessagePresets,
PlusEnvironment.GetGame().GetModerationManager().UserActionPresets,
PlusEnvironment.GetGame().GetModerationTool().GetTickets));
}
*/
- Código:
if (!string.IsNullOrWhiteSpace(PlusEnvironment.GetDBConfig().DBData["welcome_message"]))
SendMessage(new MOTDNotificationComposer(PlusEnvironment.GetDBConfig().DBData["welcome_message"]));
- Código:
var rank = userData.user.Rank;
if (rank == 5 || rank == 6 || rank == 7 || rank == 8 || rank == 9) //editamos los rank a los que queremos pedir pin.
{
ServerPacket verify = new ServerPacket(ServerPacketHeader.VerifyMobilePhoneWindowComposer);
verify.WriteInteger(1);
verify.WriteInteger(1);
SendMessage(verify);
int PasswordLength = 10;
string _allowedChars = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789!@$?";
Byte[] randomBytes = new Byte[PasswordLength];
char[] chars = new char[PasswordLength];
int allowedCharCount = _allowedChars.Length;
for (int i = 0; i < PasswordLength; i++)
{
Random randomObj = new Random();
randomObj.NextBytes(randomBytes);
chars[i] = _allowedChars[(int)randomBytes[i] % allowedCharCount];
}
var clave = new string(chars);
System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
mail.From = new MailAddress("AQUITUGMAIL@GMAIL.COM"); //aqui tu GMAIL
try
{
DataRow UserData = null;
using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor())
{
dbClient.SetQuery("SELECT `id`,`username`,`mail` FROM users WHERE `username` = @Username LIMIT 1");
dbClient.AddParameter("Username", userData.user.Username);
UserData = dbClient.getRow();
}
mail.To.Add(Convert.ToString(UserData["mail"]));
}
catch
{
}
mail.Subject = "Clave para activar tu cuenta";
mail.Body = "Clave para activar tu cuenta staff, Clave acceso: " + clave + "";
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.Port = 587;
smtp.Credentials = new NetworkCredential("AQUITUGMAIL@GMAIL.COM", "TU CLAVE DE GMAIL");
smtp.EnableSsl = true;
try
{
smtp.Send(mail);
SendNotification("Te hemos mandando una clave a tu Email para poder activar tu cuenta, comprueba tu correo.");
}
catch (Exception ex)
{
Console.Write(ex.Message);
}
PlusEnvironment.source = clave;
userData.user.PinStaff = true;
}
else
{
if (userData.user.GetPermissions().HasRight("mod_tickets"))
{
SendMessage(new ModeratorInitComposer(
PlusEnvironment.GetGame().GetModerationManager().UserMessagePresets,
PlusEnvironment.GetGame().GetModerationManager().RoomMessagePresets,
PlusEnvironment.GetGame().GetModerationManager().UserActionPresets,
PlusEnvironment.GetGame().GetModerationTool().GetTickets));
}
}
Agora no quarto passo criaremos uma pasta em Plus.Communication.Packets.Incoming e iremos chamar a mesma de PINSMS e dentro dessa nova pasta iremos adicionar uma classe chamada PinStaffSms;
- Código:
using Plus.Communication.Packets.Outgoing;
using Plus.Communication.Packets.Outgoing.Catalog;
using Plus.Communication.Packets.Outgoing.Moderation;
using Plus.Communication.Packets.Outgoing.Notifications;
using Plus.HabboHotel.GameClients;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace Plus.Communication.Packets.Incoming.PINSMS
{
class PinStaffSms : IPacketEvent
{
public void Parse(HabboHotel.GameClients.GameClient Session, ClientPacket Packet)
{
string clave = Packet.PopString();
if (clave == PlusEnvironment.source)
{
StringBuilder HabboInfo = new StringBuilder();
HabboInfo.Append("Hola " + Session.GetHabbo().Username + "\r");
HabboInfo.Append("Te has identificado correctamente");
Session.SendNotification(HabboInfo.ToString());
Session.GetHabbo().PinStaff = false;
if (Session.GetHabbo().GetPermissions().HasRight("mod_tickets"))
{
Session.SendMessage(new ModeratorInitComposer(
PlusEnvironment.GetGame().GetModerationManager().UserMessagePresets,
PlusEnvironment.GetGame().GetModerationManager().RoomMessagePresets,
PlusEnvironment.GetGame().GetModerationManager().UserActionPresets,
PlusEnvironment.GetGame().GetModerationTool().GetTickets));
}
}
else
{
Session.SendNotification("Error de clave, prueba de nuevo");
ServerPacket verify= new ServerPacket(ServerPacketHeader.VerifyMobilePhoneWindowComposer);
verify.WriteInteger(1);
verify.WriteInteger(1);
Session.SendMessage(verify);
return;
}
ServerPacket error = new ServerPacket(ServerPacketHeader.SMSErrorComposer);
error.WriteInteger(2);
error.WriteInteger(2);
Session.SendMessage(error);
ServerPacket verify2 = new ServerPacket(ServerPacketHeader.VerifyMobilePhoneWindowComposer);
verify2.WriteInteger(-1);
verify2.WriteInteger(-1);
Session.SendMessage(verify2);
}
}
}
No quinto passo, vamos a ChatEvent.cs e buscaremos por;
- Código:
if (Session == null || Session.GetHabbo() == null || !Session.GetHabbo().InRoom)
return;
- Código:
if (Session.GetHabbo().PinStaff)
{
Session.SendWhisper("No has activado tu cuenta, nada de hablar.");
return;
}
Sexto passo, adicionamos os IDS dos Packets de alertas para mostrar.. ServerPacketHeader.cs
- Código:
public const int SMSErrorComposer = 3747;
public const int VerifyMobilePhoneWindowComposer = 2685;
- Código:
public const int SmsVerification = 2069;
No sétimo passo iremos a PacketManager.cs e buscaremos por;
- Código:
private void RegisterNux()
- Código:
this._incomingPackets.Add(ClientPacketHeader.SmsVerification, new PinStaffSms());
A PRODUCTION que utilizei nesse tutorial foi PRODUCTION-201609061203-935497134, vocês terão que adicionar as IDS da release. Bom, agora vamos para a parte do GMAIL (E-mail), link para enviar e-mails a partir de C# de erros livres.
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
Aqui irá dizer se você deve ou não permitir aplicações menos seguras e você terá que permitir, pronto. Enfim, qualquer coisa sobre o assunto, não hesite em comentar.
Créditos:
Habbo
antonyxxx10
eu por postar no ppf :*