xjoao xjoao  • 20.12.16 2:33

[FIX CALENDARIO DE ADVENTO PLUS] Calendario de advento [FIX CALENDARIO DE ADVENTO PLUS] - Página 1 Empty [FIX CALENDARIO DE ADVENTO PLUS] Calendario de advento [FIX CALENDARIO DE ADVENTO PLUS] 20.12.16 2:33

Relembrando a primeira mensagem :

ola eu ia deixar esse fix Privado mas vou dar ele para vocês !

Vá em Gameclient.cs e procure por:
Código:
_habbo.InitProcess();


Acima disso adicione :
Código:
if (PlusStaticGameSettings.CampaignCalendarEnabled)
SendMessage(new CampaignCalendarDataComposer(_habbo.GetStats().openedGifts));

Adicione no topo da gameclient.cs
Código:
using Plus.Communication.Packets.Outgoing.Campaigns;

Em seguida, abra PlusStaticGameSettings.cs procure por:
Código:
public const bool NewUserTutorialBotEnabled = true;

em baixo coloque:
Código:
public const bool CampaignCalendarEnabled = true;

crie agora na Outgoing uma pasta chamada campaigns 
depois crie uma classe.cs chamada CampaignCalendarDataComposer.cs e cole:

Código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Plus.Communication.Packets.Outgoing.Campaigns
{
    class CampaignCalendarDataComposer : ServerPacket
    {
        public CampaignCalendarDataComposer(List<int> OpenedGifts)
            : base(ServerPacketHeader.CampaignCalendarDataMessageComposer)
        {
            int currentDate = DateTime.Now.Day - 1;

            base.WriteString("xmas16"); //eventTrigger
            base.WriteString(string.Empty); //idk? same as habbo ;P
            base.WriteInteger(currentDate); //currentDate
            base.WriteInteger(25); //totalAmountOfDays

            base.WriteInteger(OpenedGifts.Count); //countOpenGifts
            foreach (int Opened in OpenedGifts)
            {
                base.WriteInteger(Opened); //giftDay
            }

            List<int> MissedGifts = Enumerable.Range(0, (currentDate - 2)).Where(Day => !OpenedGifts.Contains(Day)).ToList();

            base.WriteInteger(MissedGifts.Count); //countMissedGifts
            foreach (int Missed in MissedGifts)
            {
                base.WriteInteger(Missed); //giftDay
            }
        }
    }



Vá em ServerPacketHeader.cs e adicione :
Código:
public const int CampaignCalendarDataMessageComposer = 2740;

Depois vá em Packets>Incoming>LandingView 
Crie uma classe dentro chamada OpenCalendarBoxEvent.cs e cole o código :

Código:
using Plus.Communication.Packets.Outgoing.Inventory.Furni;
using Plus.Communication.Packets.Outgoing.LandingView;
using Plus.Database.Interfaces;
using Plus.HabboHotel.Items;
using Plus.HabboHotel.Users;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Plus.Communication.Packets.Incoming.LandingView
{
    class OpenCalendarBoxEvent : IPacketEvent
    {
        public void Parse(HabboHotel.GameClients.GameClient Session, ClientPacket Packet)
        {
            string eventName = Packet.PopString();
            int giftDay = Packet.PopInt();

            HabboStats habboStats = Session?.GetHabbo()?.GetStats();

            int currentDay = DateTime.Now.Day - 1;

            if (!PlusStaticGameSettings.CampaignCalendarEnabled || habboStats == null ||
                habboStats.openedGifts.Contains(giftDay) || giftDay < (currentDay-2) ||
                giftDay > currentDay || eventName != "xmas16")
            {
                return;
            }



Depois vá em Packets>Incoming>LandingView 
Crie uma classe dentro chamada CampaignCalendarGiftComposer.cs  e cole o código :

Código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Plus.Communication.Packets.Outgoing.LandingView
{
    class CampaignCalendarGiftComposer : ServerPacket
    {
        public CampaignCalendarGiftComposer(string iconName = "throne")
            : base(ServerPacketHeader.CampaignCalendarGiftMessageComposer)
        {
            base.WriteBoolean(true); // never bothered to check
            base.WriteString("xmas14_starfish"); //productName
            base.WriteString(""); //customImage
            base.WriteString(iconName); //iconName
        }
    }
}

Vá agora para LandingViewManager.cs e adicione esta função :

Código:
public bool GenerateCalendarItem(Habbo Habbo, string eventName, int eventDate, out Item newItem)
        {
            newItem = null;

            using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor())
            {
                dbClient.SetQuery("SELECT `item_id` FROM `campaign_calendar_gifts` WHERE `event_name` = @eventName AND `base_id` = @dayId LIMIT 1");
                dbClient.AddParameter("eventName", eventName);
                dbClient.AddParameter("dayId", eventDate);

                DataRow row = dbClient.getRow();
                ItemData itemData = null;

                if (row?["item_id"] != null &&
                    PlusEnvironment.GetGame().GetItemManager().GetItem((string)row["item_id"], out itemData))
                {
                    newItem = ItemFactory.CreateSingleItemNullable(itemData, Habbo, "", "");
                    return newItem != null;
                }

                return false;
            }
        }


Abra ItemDataManager.cs  procure por :

Código:
public bool GetItem(int Id, out ItemData Item)

Acima disso, coloque isso:

Código:
public bool GetItem(string itemName, out ItemData item)
        {
            item = this._items.Values.Where(x => x.ItemName == itemName).FirstOrDefault();
            return item != null;
        }



SQL para a Database:
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]

Print de como vai ficar :
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]

Obs: Se não souber não faça 

Créditos:
Do meu amigo StackOverflow-
Esse código será usado no Nouget server !

Brytch Brytch  • 20.12.16 17:04

Permissões neste sub-fórum
Não podes responder a tópicos

BH Servers

Recomendamos a BH Servers com proteção DDOS gratuita em Cloud Server de alta performance. Entrega imediata.