Plus Emulation Server Edited

Status
Not open for further replies.

Parsov

Member
May 18, 2016
315
206
Howdy Devbest Community! Today I'm releasing an emulator that me and a few people have worked on. The purpose of the release is because I witnessed that my work is in too many peoples hands and it's better off just releasing as most people can release it under their own name.
This Emulator is functional however you might face issues if so contact me about it and I'll definitely try to help.

This Emulator is very old it's using a very old Production aswell and there a few things that are not supported like the Group Forums however as an alternative we've made Group Chats.
I would say this is one of the most up-to-date Plus Emulator's out there rarely you will come across people using edits like my own.

Emulators Special Features:

  • 900 Achievements including many Game Achievements (I've been working on the Games like Freeze, Banzai and Football).
  • Skateboarding Achievements & Snowboarding
  • 80% Functioning Football and all working football achievements
  • 2 Types of Crackables (You can make literally any item crackable)
  • Group Chats
  • Habbo Olympics furniture working with timer achievements same for Skating.
  • Viking
  • Astar PathFinding
  • Ride Horse
  • Santa Shop
  • All latest wired effects conditions and custom wired
  • Staff Picks
  • Room Polls
  • A few custom commands
  • Lot's of fixes like Ignore Event (don't think it worked on Revision 1).
  • Maze features example = We have a Halloween Frank Item which when you click on sends you to a room which can be a maze and when they come to the final room they get their prize and it gets saved to the database.
  • The Maze is linked to Seasonal Manager which is where we put some data.
  • Immune system by @Meap
  • Event System thanks to @Berk
  • Random LTD
  • Way too many things you will find out!












(Images are from a hotel that the emulator used to run on).



The main functionality of this Emulator is that it has a lot of achievements coded to it. It's a pretty much vanilla emulator and there are a few things missing like Crafting, Ecotron (I think), JukeBox and Nux Alerts which are custom alerts.

If you want more features coming your way or you have a hard time using something hit me up on this thread and i'll definetly help you with that.

Here is the release link:



I won't be providing the database as I don't have a cleaned one it's just Plus Emulator with a few extra tables and columns which I'm sure people who are willing to use this Emulator will be able to figure.
Some might disagree that I did not do the work but I couldn't care less what people think.

Credits:
  • Myself For the edit
  • @Sledmore Plus Emulator and without him I wouldn't be posting this!
  • @Hvmada For letting me run my work on HabDab Hotel and also helping with somethings.
  • @Platinum without him and his hotel I wouldn't make this Edit.
  • @Meap for always anoyying me

Enjoy the Emulator!
You won't find another like this one! :)

If you have issues with AntiMutant.cs
Just do this:
C#:
using System;
using System.Linq;
using System.Xml.Linq;
using System.Collections.Generic;
using System.Net;
using System.IO;
using System.Xml;
using System.Windows.Forms;

namespace Plus.HabboHotel.Global
{
    public class AntiMutant
    {
        private Dictionary<string, Dictionary<string, Figure>> _parts;

        public AntiMutant()
        {
            _parts = new Dictionary<string, Dictionary<string, Figure>>();
            Init();
        }

        public void Init()
        {
            if (this._parts.Count > 0)
                this._parts.Clear();

            try
            {
                XDocument Doc = XDocument.Load(Path.Combine(Application.StartupPath, @"extra/figuredata.xml"));

                var data = (from item in Doc.Descendants("sets") from tItem in Doc.Descendants("settype") select new { Part = tItem.Elements("set"), Type = tItem.Attribute("type"), });
                foreach (var item in data.ToList())
                {
                    foreach (var part in item.Part.ToList())
                    {
                        string PartName = item.Type.Value;
                        if (!_parts.ContainsKey(PartName))
                            _parts.Add(PartName, new Dictionary<string, Figure>());

                        Figure toAddFigure = new Figure(PartName, part.Attribute("id").Value, part.Attribute("gender").Value, part.Attribute("colorable").Value);

                        if (!_parts[PartName].ContainsKey(part.Attribute("id").Value))
                            _parts[PartName].Add(part.Attribute("id").Value, toAddFigure);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                //Was the file found?
            }
        }

        public string RunLook(string Look)
        {
            List<string> toReturnFigureParts = new List<string>();
            List<string> fParts = new List<string>();
            string[] requiredParts = { "hd", "ch" };
            bool flagForDefault = false;

            string[] FigureParts = Look.Split('.');
            string genderLook = GetLookGender(Look);

            foreach (string Part in FigureParts.ToList())
            {
                string newPart = Part;
                string[] tPart = Part.Split('-');
                if (tPart.Count() < 2)
                {
                    flagForDefault = true;
                    continue;
                }

                string partName = tPart[0];
                string partId = tPart[1];

                if (!_parts.ContainsKey(partName) || !_parts[partName].ContainsKey(partId) || (genderLook != "U" && _parts[partName][partId].Gender != "U" && _parts[partName][partId].Gender != genderLook))
                {
                    if (partName == "hd" && partId == "99999")
                    {
                        if (tPart.Count() == 2)
                        {
                            newPart = SetDefault(partName, genderLook);
                        }
                    }
                    else
                    {
                        newPart = SetDefault(partName, genderLook);
                    }
                }

                if (!fParts.Contains(partName)) fParts.Add(partName);
                if (!toReturnFigureParts.Contains(newPart)) toReturnFigureParts.Add(newPart);
            }

            if (flagForDefault)
            {
                toReturnFigureParts.Clear();
                toReturnFigureParts.AddRange("sh-3338-93.ea-1406-62.hr-831-49.ha-3331-92.hd-180-7.ch-3334-93-1408.lg-3337-92.ca-1813-62".Split('.'));
            }

            foreach (string requiredPart in requiredParts.Where(requiredPart => !fParts.Contains(requiredPart) && !toReturnFigureParts.Contains(SetDefault(requiredPart, genderLook))))
            {
                toReturnFigureParts.Add(SetDefault(requiredPart, genderLook));
            }

            return string.Join(".", toReturnFigureParts);
        }

        private string GetLookGender(string Look)
        {
            string[] FigureParts = Look.Split('.');

            foreach (string Part in FigureParts.ToList())
            {
                string[] tPart = Part.Split('-');
                if (tPart.Count() < 2)
                    continue;

                string partName = tPart[0];
                string partId = tPart[1];

                return this._parts.ContainsKey(partName) && this._parts[partName].ContainsKey(partId) ? this._parts[partName][partId].Gender : "U";
            }
            return "U";
        }

        private string SetDefault(string partName, string Gender)
        {
            string partId = "0";
            if (this._parts.ContainsKey(partName))
            {
                KeyValuePair<string, Figure> part = _parts[partName].FirstOrDefault(x => x.Value.Gender == Gender || Gender == "U");
                partId = part.Equals(default(KeyValuePair<string, Figure>)) ? "0" : part.Key;
            }
            return partName + "-" + partId + "-1";
        }
    }

    class Figure
    {
        private string Part;
        private string PartId;
        public string Gender;
        private string Colorable;

        public Figure(string Part, string PartId, string Gender, string Colorable)
        {
            this.Part = Part;
            this.PartId = PartId;
            this.Gender = Gender;
            this.Colorable = Colorable;
        }
    }
}
 
Last edited:

RetroAddict

Member
Mar 29, 2017
43
6
Anytime friend ;]
Does your emulator also have this pathfinding? :
588a2da3b860056cb7edad6178768830.gif
 

Joe

Well-Known Member
Jun 10, 2012
4,088
1,915
Great release. I'm looking for the wired and crackables etc to add to my version of R2 Plus. I'm sure this will help me :)
 

Parsov

Member
May 18, 2016
315
206
Great release. I'm looking for the wired and crackables etc to add to my version of R2 Plus. I'm sure this will help me :)

I can release a few crackables if you would like :)
 

Joe

Well-Known Member
Jun 10, 2012
4,088
1,915
Hi, help me
My guess would be to add the column diamonds to the subscriptions table. I'm on my phone and the error isn't in English, since there's no database here you'll have to add the missing columns.
 

Parsov

Member
May 18, 2016
315
206
@JMG
como fazer isso
Em db qual tabela?

Copy and paste me the error, I will not be providing the Database as I stated on the post. Nor the SWF. Paste the error here so I can tell you what you would need to do, I can't see it on that screenshot.
Post automatically merged:

Pretty sure its sarcasm. He contributed to the development.
He was joking ???
 

Joe

Well-Known Member
Jun 10, 2012
4,088
1,915
Just thinking of this release, a lot of the features wont work for people as they'll be tons of things missing from the database that don't exist in normal databases.
Wired, furniture, achievements, there's probably a lot more.

It's prone to questions and even more problems down the line as all the thread will be is how do I get this working or how would I add all of the wired? etc. If you can be bothered it'd be nice to see a database structure or at least a support thread to stop people asking for help in a release thread and breaking the section rules :)
 

Parsov

Member
May 18, 2016
315
206
Just thinking of this release, a lot of the features wont work for people as they'll be tons of things missing from the database that don't exist in normal databases.
Wired, furniture, achievements, there's probably a lot more.

It's prone to questions and even more problems down the line as all the thread will be is how do I get this working or how would I add all of the wired? etc. If you can be bothered it'd be nice to see a database structure or at least a support thread to stop people asking for help in a release thread and breaking the section rules :)

If someone can't be asked to analyse and find where the issues are then it's better off not using it at all. If you have a clean Plus Emulator database setup that's about all it needs and after you can find the issues in MYSQL logs provided in the Emulator Debug folder to find the issues and work on them. I've released it so that people can take it apart and use it on their own revision if people want to be able to run this on their server which they most likely can if they know how to then they'll find a solution to the errors.
 
Status
Not open for further replies.

Users who are viewing this thread

Top