using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Uber.Messages;
using Uber.HabboHotel.Rooms;
using Uber.HabboHotel.Pathfinding;
namespace Uber.HabboHotel.RoomBots
{
class PetBot : BotAI
{
private int SpeechTimer;
private int ActionTimer;
private int EnergyTimer;
// TO-DO: This needs cleaning up BADLY, If anyone wants to attempt cleaning up my mess, go for it (Y) (Pets 100% done - Kryptos)
// All credits go to Kryptos || Meth0d || Shorty.
public PetBot(int VirtualId)
{
this.SpeechTimer = new Random((VirtualId ^ 2) + DateTime.Now.Millisecond).Next(10, 60);
this.ActionTimer = new Random((VirtualId ^ 2) + DateTime.Now.Millisecond).Next(10, 30 + VirtualId);
this.EnergyTimer = new Random((VirtualId ^ 2) + DateTime.Now.Millisecond).Next(10, 60);
}
private void RemovePetStatus()
{
RoomUser Pet = GetRoomUser();
// Remove Status
Pet.Statusses.Remove("sit");
Pet.Statusses.Remove("lay");
Pet.Statusses.Remove("snf");
Pet.Statusses.Remove("eat");
Pet.Statusses.Remove("ded");
Pet.Statusses.Remove("jmp");
Pet.Statusses.Remove("ply");
}
public override void OnSelfEnterRoom()
{
int randomX = UberEnvironment.GetRandomNumber(0, GetRoom().Model.MapSizeX);
int randomY = UberEnvironment.GetRandomNumber(0, GetRoom().Model.MapSizeY);
GetRoomUser().MoveTo(randomX, randomY);
}
public override void OnSelfLeaveRoom(bool Kicked) { }
public override void OnUserEnterRoom(Rooms.RoomUser User)
{
if (User.GetClient().GetHabbo().Username.ToLower() == GetRoomUser().PetData.OwnerName.ToLower())
{
GetRoomUser().Chat(null, "*drools over master*", false);
}
}
public override void OnUserLeaveRoom(GameClients.GameClient Client) { }
#region Commands
public override void OnUserSay(Rooms.RoomUser User, string Message)
{
RoomUser Pet = GetRoomUser();
if (Message.ToLower().Equals(Pet.PetData.Name.ToLower()))
{
Pet.SetRot(Rotation.Calculate(Pet.X, Pet.Y, User.X, User.Y));
return;
}
if (Message.ToLower().StartsWith(Pet.PetData.Name.ToLower() + " ") && User.GetClient().GetHabbo().Username.ToLower() == GetRoomUser().PetData.OwnerName.ToLower())
{
string Command = Message.Substring(Pet.PetData.Name.ToLower().Length + 1);
int r = UberEnvironment.GetRandomNumber(1, 8); // Made Random
if (Pet.PetData.Energy > 10 && r < 6 || Pet.PetData.Level > 15)
{
RemovePetStatus(); // Remove Status
switch (Command)
{
// TODO - Level you can use the commands at... Done - Kryptos
#region free
case "free":
if (Pet.PetData.Level >= 1)
RemovePetStatus();
int randomX = UberEnvironment.GetRandomNumber(0, GetRoom().Model.MapSizeX);
int randomY = UberEnvironment.GetRandomNumber(0, GetRoom().Model.MapSizeY);
Pet.MoveTo(randomX, randomY);
Pet.PetData.AddExpirience(10); // Give XP
break;
#endregion
#region here
case "come":
case "here":
if (Pet.PetData.Level > 1)
RemovePetStatus();
int NewX = User.X;
int NewY = User.Y;
ActionTimer = 30; // Reset ActionTimer
#region Rotation
if (User.RotBody == 4)
{
NewY = User.Y + 1;
}
else if (User.RotBody == 0)
{
NewY = User.Y - 1;
}
else if (User.RotBody == 6)
{
NewX = User.X - 1;
}
else if (User.RotBody == 2)
{
NewX = User.X + 1;
}
else if (User.RotBody == 3)
{
NewX = User.X + 1;
NewY = User.Y + 1;
}
else if (User.RotBody == 1)
{
NewX = User.X + 1;
NewY = User.Y - 1;
}
else if (User.RotBody == 7)
{
NewX = User.X - 1;
NewY = User.Y - 1;
}
else if (User.RotBody == 5)
{
NewX = User.X - 1;
NewY = User.Y + 1;
}
#endregion
Pet.PetData.AddExpirience(20); // Give XP
Pet.MoveTo(NewX, NewY);
break;
#endregion
#region sit
case "sit":
if (Pet.PetData.Level >= 1)
// Remove Status
RemovePetStatus();
Pet.PetData.AddExpirience(10); // Give XP
// Add Status
Pet.Statusses.Add("sit", Pet.Z.ToString());
ActionTimer = 25;
EnergyTimer = 10;
break;
#endregion
#region lay
case "lay":
case "down":
if (Pet.PetData.Level >= 1)
// Remove Status
RemovePetStatus();
// Add Status
Pet.Statusses.Add("lay", Pet.Z.ToString());
Pet.PetData.AddExpirience(10); // Give XP
ActionTimer = 30;
EnergyTimer = 5;
break;
#endregion
#region dead
case "play dead":
case "dead":
if (Pet.PetData.Level >= 1)
// Remove Status
RemovePetStatus();
// Add Status
Pet.Statusses.Add("ded", Pet.Z.ToString());
Pet.PetData.AddExpirience(20); // Give XP
// Don't move to speak for a set amount of time.
SpeechTimer = 45;
ActionTimer = 30;
break;
#endregion
#region sleep
case "sleep":
if (Pet.PetData.Level >= 1)
// Remove Status
RemovePetStatus();
Pet.Chat(null, "ZzzZZZzzzzZzz", false);
Pet.Statusses.Add("lay", Pet.Z.ToString());
Pet.PetData.AddExpirience(10); // Give XP
// Don't move to speak for a set amount of time.
EnergyTimer = 5;
SpeechTimer = 30;
ActionTimer = 45;
break;
#endregion
#region jump
case "jump":
if (Pet.PetData.Level >= 1)
// Remove Status
RemovePetStatus();
// Add Status
Pet.Statusses.Add("jmp", Pet.Z.ToString());
Pet.PetData.AddExpirience(10); // Give XP
// Don't move to speak for a set amount of time.
EnergyTimer = 5;
SpeechTimer = 10;
ActionTimer = 5;
break;
#endregion
#region Silent
case "silent":
if (Pet.PetData.Level >= 1)
//Remove Status
RemovePetStatus();
Pet.PetData.AddExperience(10); //Give XP
// Don't move to speak for a set amount of time.
SpeechTimer = 60;
#endregion
#region beg
case "beg":
if (Pet.PetData.Level >=1)
//Remove Status
RemovePetStatus();
//Add Status
Pet.Statusses.Add("beg", Pet.Z.ToString());
ActionTimer = 25;
EnergyTimer = 10;
Pet.PetData.AddExperience(10);
break;
#endregion
#region stand
case "stand":
if (Pet.PetData.Level >= 1)
//Add Status
Pet.Statusses.Remove("sit", Pet.Z.ToString());
Pet.PetData.AddExperience(10);
break;
#endregion
#region speak
case "speak":
if (Pet.PetData.Level >= 1)
//Remove Status
RemovePetStatus();
if (Pet.PetData.Type == 0 || Pet.PetData.Type == 3)
{
GetRoomUser().Chat(null, "Woof! Woof", false);
}
else if (Pet.PetData.Type == 1)
{
GetRoomUser().Chat(null, "meow...meOW", false);
}
else if (Pet.PetData.Type == 2)
{
GetRoomUser().Chat(null, "Rrrr....Grrrrrg....", false);
}
else if (Pet.PetData.Type == 3)
{
GetRoomUser().Chat(null, "woooooooof", false);
}
else if (Pet.PetData.Type == 4)
{
GetRoomUser.Chat(null, "Rawrrr!", false);
}
else if (Pet.PetData.Type == 5)
{
GetRoomUser().Chat(null, "Oink Oink..", false);
}
break;
#endregion
#region follow
case "follow":
if (Pet.PetData.Level >= 1)
RemovePetStatus();
int NewX = User.X;
int NewY = User.Y;
ActionTimer = 30; // Reset ActionTimer
#region Rotation
if (User.RotBody == 4)
{
NewY = User.Y - 1;
}
else if (User.RotBody == 0)
{
NewY = User.Y + 1;
}
else if (User.RotBody == 6)
{
NewX = User.X + 1;
}
else if (User.RotBody == 2)
{
NewX = User.X + 1;
}
else if (User.RotBody == 3)
{
NewX = User.X - 1;
NewY = User.Y - 1;
}
else if (User.RotBody == 1)
{
NewX = User.X - 1;
NewY = User.Y + 1;
}
else if (User.RotBody == 7)
{
NewX = User.X + 1;
NewY = User.Y + 1;
}
else if (User.RotBody == 5)
{
NewX = User.X + 1;
NewY = User.Y - 1;
}
#endregion
Pet.PetData.AddExpirience(20); // Give XP
Pet.MoveTo(NewX, NewY);
break;
#endregion
#region follow left
case "follow left":
if (Pet.PetData.Level >= 1)
RemovePetStatus();
int NewX = User.X;
int NewY = User.Y;
ActionTimer = 30; // Reset ActionTimer
#region Rotation
if (User.RotBody == 4)
{
NewY = User.X + 1;
}
else if (User.RotBody == 0)
{
NewY = User.X - 1;
}
else if (User.RotBody == 6)
{
NewX = User.Y - 1;
}
else if (User.RotBody == 2)
{
NewX = User.Y + 1;
}
else if (User.RotBody == 3)
{
NewX = User.Y + 1;
NewY = User.X + 1;
}
else if (User.RotBody == 1)
{
NewX = User.Y + 1;
NewY = User.X - 1;
}
else if (User.RotBody == 7)
{
NewX = User.Y - 1;
NewY = User.X - 1;
}
else if (User.RotBody == 5)
{
NewX = User.Y - 1;
NewY = User.X + 1;
}
#endregion
Pet.PetData.AddExpirience(20); // Give Xp
Pet.MoveTo(NewX, NewY);
break;
#endregion
#region follow right
case "follow right":
if (Pet.PetData.Level >= 1)
RemovePetStatus();
int NewX = User.X;
int NewY = User.Y;
ActionTimer = 30; // Reset ActionTimer
#region Rotation
if (User.RotBody == 4)
{
NewY = User.X - 1;
}
else if (User.RotBody == 0)
{
NewY = User.X + 1;
}
else if (User.RotBody == 6)
{
NewX = User.Y + 1;
}
else if (User.RotBody == 2)
{
NewX = User.Y + 1;
}
else if (User.RotBody == 3)
{
NewX = User.Y - 1;
NewY = User.X - 1;
}
else if (User.RotBody == 1)
{
NewX = User.Y - 1;
NewY = User.X + 1;
}
else if (User.RotBody == 7)
{
NewX = User.X + 1;
NewY = User.Y + 1;
}
else if (User.RotBody == 5)
{
NewX = User.Y + 1;
NewY = User.X - 1;
}
#endregion
Pet.PetData.AddExpirience(20); // Give XP
Pet.MoveTo(NewX, NewY);
break;
#endregion
default:
string[] Speech = { "*confused*", "What?", "Huh?", "What is that?", "hmm..?" };
Random RandomSpeech = new Random();
Pet.Chat(null, Speech[RandomSpeech.Next(0, Speech.Length - 1)], false);
break;
}
Pet.PetData.PetEnergy(false); // Remove Energy
Pet.PetData.PetEnergy(false); // Remove Energy
Pet.PetData.PetNutrition(true); // Remove Nutrition
Pet.PetData.PetNutrition(true); // Remove Nutrition
}
else
{
RemovePetStatus(); // Remove Status
if (Pet.PetData.Energy < 10)
{
string[] Speech = { "ZzZzzzzz", "*sleeps*", "Tired... *sleeps*", "ZzZzZZzzzZZz", "zzZzzZzzz", "... Yawnn ..", "ZzZzzZ" };
Random RandomSpeech = new Random();
Pet.Chat(null, Speech[RandomSpeech.Next(0, Speech.Length - 1)], false);
Pet.Statusses.Add("lay", Pet.Z.ToString());
SpeechTimer = 50;
ActionTimer = 45;
EnergyTimer = 5;
}
else
{
string[] Speech = { "*sigh*", "*refuses*", " ... ", "Who do you think you are?", "you do it", "Grr!", "*laughs*", "Why?" };
Random RandomSpeech = new Random();
Pet.Chat(null, Speech[RandomSpeech.Next(0, Speech.Length - 1)], false);
Pet.PetData.PetEnergy(false); // Remove Energy
Pet.PetData.PetNutrition(true); // Add Nutrition
}
}
}
Pet = null;
}
#endregion
public override void OnUserShout(Rooms.RoomUser User, string Message) { }
public override void OnTimerTick()
{
#region Speech
if (SpeechTimer <= 0)
{
RoomUser Pet = GetRoomUser();
if (Pet != null)
{
Random RandomSpeech = new Random();
RemovePetStatus();
if (Pet.PetData.Type == 0 || Pet.PetData.Type == 3) // Dog & Terrier
{
string[] Speech = { "woof woof woof!!!", "hooooowl", "wooooof!", "Woof Woof!", "sit", "lay", "snf", "Woof" };
string rSpeech = Speech[RandomSpeech.Next(0, Speech.Length - 1)];
if (rSpeech.Length != 3)
{
Pet.Chat(null, rSpeech, false);
}
else
{
Pet.Statusses.Add(rSpeech, Pet.Z.ToString());
}
}
else if (Pet.PetData.Type == 1)
{ // Cat
string[] Speech = { "meow", "meow...meOW", "muew..muew", "lay", "sit", "lay" };
string rSpeech = Speech[RandomSpeech.Next(0, Speech.Length - 1)];
if (rSpeech.Length != 3)
{
Pet.Chat(null, rSpeech, false);
}
else
{
Pet.Statusses.Add(rSpeech, Pet.Z.ToString());
}
}
else if (Pet.PetData.Type == 2)
{ // Crocodile
string[] Speech = { "Rrrr....Grrrrrg....", "*Mellow*", "Tick tock tick....", "*feels like eating my owner*", "Nom Nom Nom", ".. Yawwnn!", "snf" };
string rSpeech = Speech[RandomSpeech.Next(0, Speech.Length - 1)];
if (rSpeech.Length != 3)
{
Pet.Chat(null, rSpeech, false);
}
else
{
Pet.Statusses.Add(rSpeech, Pet.Z.ToString());
}
}
else if (Pet.PetData.Type == 4)
{ // Bear
string[] Speech = { "*pack of fresh salmon please*", "Rawrrr!", "*sniff sniff*", "Yawnnnn..", "Rawr! ... Rawrrrrr?", "snf" };
string rSpeech = Speech[RandomSpeech.Next(0, Speech.Length - 1)];
if (rSpeech.Length != 3)
{
Pet.Chat(null, rSpeech, false);
}
else
{
Pet.Statusses.Add(rSpeech, Pet.Z.ToString());
}
}
else if (Pet.PetData.Type == 5)
{ // Pig
string[] Speech = { "Oink Oink..", "*Mellow*", "Sniff... Sniff..", "snf", "Oink!", "snf", "lay", "oink" };
string rSpeech = Speech[RandomSpeech.Next(0, Speech.Length - 1)];
if (rSpeech.Length != 3)
{
Pet.Chat(null, rSpeech, false);
}
else
{
Pet.Statusses.Add(rSpeech, Pet.Z.ToString());
}
}
Pet = null;
}
SpeechTimer = UberEnvironment.GetRandomNumber(20, 120);
}
else
{
SpeechTimer--;
}
#endregion
if (ActionTimer <= 0)
{
// Remove Status
RemovePetStatus();
int randomX = UberEnvironment.GetRandomNumber(0, GetRoom().Model.MapSizeX);
int randomY = UberEnvironment.GetRandomNumber(0, GetRoom().Model.MapSizeY);
GetRoomUser().MoveTo(randomX, randomY);
ActionTimer = UberEnvironment.GetRandomNumber(15, 40 + GetRoomUser().PetData.VirtualId);
}
else
{
ActionTimer--;
}
if (EnergyTimer <= 0)
{
RemovePetStatus(); // Remove Status
RoomUser Pet = GetRoomUser();
Pet.PetData.PetEnergy(true); // Add Energy
EnergyTimer = UberEnvironment.GetRandomNumber(30, 120); // 2 Min Max
}
else
{
EnergyTimer--;
}
}
}
}