public void Handle(GameClient session, ClientMessage message) { RoomUnit user = session.GetHabbo().GetRoomSession().GetRoomUser(); if (!user.HasStatus("lay")) { if (user.BodyRotation == 0 || user.BodyRotation == 2 || user.BodyRotation == 4 || user.BodyRotation == 6) { user.AddStatus("sit", TextUtilies.DoubleWithDotDecimal((user.Z + 1) / 2 - user.Z * 0.5)); } } }
public ServerMessage Handle(ValueHolder valueHolder = null) { RoomItemRollerMovement[] movement = valueHolder.GetValueOrDefault <RoomItemRollerMovement[]>("Movement"); RoomUserRollerMovement user = valueHolder.GetValueOrDefault <RoomUserRollerMovement>("User"); ServerMessage message = BasicUtilies.GetRevisionServerMessage(Revision.RELEASE63_201211141113_913728051); message.Init(r63cOutgoing.RollerMovement); if (movement != null) { RoomItemRollerMovement single = movement[0]; message.AppendInt32(single.CurrentXY.X); message.AppendInt32(single.CurrentXY.Y); message.AppendInt32(single.NextXY.X); message.AppendInt32(single.NextXY.Y); message.AppendInt32(movement.Length); //items count foreach (RoomItemRollerMovement item in movement) { message.AppendUInt(item.ItemId); message.AppendString(TextUtilies.DoubleWithDotDecimal(item.CurrentZ)); message.AppendString(TextUtilies.DoubleWithDotDecimal(item.NextZ)); } message.AppendUInt(single.SourceID); //source of action } else { message.AppendInt32(user.CurrentX); message.AppendInt32(user.CurrentY); message.AppendInt32(user.NextX); message.AppendInt32(user.NextY); message.AppendInt32(0); //items count message.AppendUInt(user.SourceID); //source of action } if (user != null) { message.AppendInt32(2); //user movement type message.AppendInt32(user.VirtualID); message.AppendString(TextUtilies.DoubleWithDotDecimal(user.CurrentZ)); message.AppendString(TextUtilies.DoubleWithDotDecimal(user.NextZ)); } else { message.AppendInt32(0); } return(message); }
public override void Serialize(ServerMessage message) { message.AppendInt32(-1); message.AppendString(this.Data.Name); message.AppendString(this.Data.Motto); message.AppendString(this.Data.Look); message.AppendInt32(this.VirtualID); message.AppendInt32(this.X); message.AppendInt32(this.Y); message.AppendString(TextUtilies.DoubleWithDotDecimal(this.Z)); message.AppendInt32(2); //dir message.AppendInt32(3); }
public override void Serialize(ServerMessage message) { message.AppendUInt(this.PetData.ID); message.AppendString(this.PetData.Name); message.AppendString(""); //pets dont have motto xD message.AppendString(this.PetData.Look); message.AppendInt32(this.VirtualID); message.AppendInt32(this.X); message.AppendInt32(this.Y); message.AppendString(TextUtilies.DoubleWithDotDecimal(this.Z)); message.AppendInt32(2); //dir message.AppendInt32(2); message.AppendInt32(int.Parse(this.PetData.Race)); }
public override bool OnUse(GameClient session, string[] args) { if (args.Length >= 2) { GameClient target = Skylight.GetGame().GetGameClientManager().GetGameClientByUsername(args[1]); if (target != null) { RoomUnit me = session.GetHabbo().GetRoomSession().GetRoomUser(); RoomUnitUser other = target.GetHabbo().GetRoomSession().GetRoomUser(); if (target.GetHabbo().GetRoomSession().IsInRoom&& target.GetHabbo().GetRoomSession().CurrentRoomID == session.GetHabbo().GetRoomSession().CurrentRoomID) { bool doit = true; if ((me.X + 1 != other.X || me.Y != other.Y) && (me.X - 1 != other.X || me.Y != other.Y) && (me.Y + 1 != other.Y || me.X != other.X)) { bool skip = false; if (me.X - 1 == other.X) { if (me.Y == other.Y) { skip = true; } } if (!skip) { doit = me.X == other.X || me.Y == other.Y; } } if (doit) { me.Speak("*RKO'S " + other.Session.GetHabbo().Username + " OUT OF NO WHERE*", true); other.Speak("Ouch", true); if (!other.HasStatus("lay") && !other.HasStatus("sit")) { if (other.BodyRotation == 0 || other.BodyRotation == 2 || other.BodyRotation == 4 || other.BodyRotation == 6) { other.AddStatus("sit", TextUtilies.DoubleWithDotDecimal((other.Z + 1) / 2 - other.Z * 0.5)); } } } return(true); } } } return(false); }
public override void Serialize(ServerMessage message) { if (message.GetRevision() > Revision.R26_20080915_0408_7984_61ccb5f8b8797a3aba62c1fa2ca80169) { message.AppendUInt(this.Session.GetHabbo().ID); message.AppendString(this.Session.GetHabbo().Username); message.AppendString(this.Session.GetHabbo().Motto); message.AppendString(this.Session.GetHabbo().Look); message.AppendInt32(this.VirtualID); message.AppendInt32(this.X); message.AppendInt32(this.Y); message.AppendString(TextUtilies.DoubleWithDotDecimal(this.Z)); message.AppendInt32(0); message.AppendInt32(1); message.AppendString(this.Session.GetHabbo().Gender.ToLower()); message.AppendInt32(-1); //group id message.AppendInt32(-1); //fav group if (message.GetRevision() < Revision.RELEASE63_201211141113_913728051) { message.AppendInt32(-1); } else { message.AppendString(""); //group name } message.AppendString(this.Swimsuit); message.AppendInt32(this.Session.GetHabbo().GetUserStats().AchievementPoints); if (message.GetRevision() >= Revision.PRODUCTION_201601012205_226667486) { message.AppendBoolean(true); //IDK } } else { message.AppendString("i:" + this.VirtualID, 13); message.AppendString("a:" + this.UserID, 13); message.AppendString("s:" + this.Session.GetHabbo().Gender, 13); message.AppendString("n:" + this.Session.GetHabbo().Username, 13); message.AppendString("f:" + this.Session.GetHabbo().Look, 13); message.AppendString("l:" + this.X + " " + this.Y + " " + TextUtilies.DoubleWithDotDecimal(this.Z), 13); message.AppendString("c:" + this.Session.GetHabbo().Motto, 13); if (!string.IsNullOrEmpty(this.Swimsuit)) { message.AppendString("p:" + this.Swimsuit, 13); } } }
public override bool OnUse(GameClient session, string[] args) { RoomUnit user = session.GetHabbo().GetRoomSession().GetRoomUser(); if (user.HasStatus("sit") && !user.CurrentTile.IsSeat) { user.RemoveStatus("sit"); return(true); } else { if (!user.HasStatus("lay")) { if (user.BodyRotation == 0 || user.BodyRotation == 2 || user.BodyRotation == 4 || user.BodyRotation == 6) { user.AddStatus("sit", TextUtilies.DoubleWithDotDecimal((user.Z + 1) / 2 - user.Z * 0.5)); } } } return(true); }
public override void SerializeStatus(ServerMessage message) { if (message.GetRevision() > Revision.R26_20080915_0408_7984_61ccb5f8b8797a3aba62c1fa2ca80169) { message.AppendInt32(this.VirtualID); message.AppendInt32(this.X); message.AppendInt32(this.Y); message.AppendString(TextUtilies.DoubleWithDotDecimal(this.Z)); message.AppendInt32(this.SkateboardRotation ?? this.BodyRotation); message.AppendInt32(this.SkateboardRotation ?? this.HeadRotation); } else { message.AppendString(this.VirtualID + " " + this.X + "," + this.Y + "," + TextUtilies.DoubleWithDotDecimal(this.Z) + "," + this.BodyRotation + "," + this.HeadRotation, null); } string status = "/"; foreach (KeyValuePair <string, string> value in this.Statuses) { if (status.Length > 1) { status += "/"; } status += value.Key + " " + value.Value; } if (message.GetRevision() > Revision.R26_20080915_0408_7984_61ccb5f8b8797a3aba62c1fa2ca80169) { message.AppendString(status); } else { message.AppendString(status, (byte)13); } }
public void OnUserSpeak(RoomUnitUser user, string message, bool shout) { if (!shout) { if (message == this.PetData.Name) { this.SetRotation(WalkRotation.Walk(this.X, this.Y, user.X, user.Y), false); } else if (message.StartsWith(this.PetData.Name + " ") && user.UserID == this.PetData.OwnerID) //pet commands { int random = RandomUtilies.GetRandom(1, 100); if (random <= this.PetData.Happiness) { string command = message.Split(' ')[1]; switch (command) { case "free": { this.EndAction(); } break; case "sit": { if (this.PetData.Energy >= 10) { this.AddExpirience(10); this.PetData.Energy -= 10; this.PetData.NeedUpdate = true; this.AddStatus("sit", TextUtilies.DoubleWithDotDecimal(this.Z)); this.Moving = false; if (this.HasStatus("mv")) { this.RemoveStatus("mv"); } this.ActionTick = 8; this.Action = "sit"; } else { this.Speak("Too tired! :(", false); } } break; default: this.Speak("*not yet implemented*", false); break; } } else { this.PetData.Energy -= 10; if (this.PetData.Energy < 0) { this.PetData.Energy = 0; } this.PetData.NeedUpdate = true; this.Speak("NO! >:(", false); } } } }
public void BuyItem(GameClient session, int pageId, uint itemId, string extraData, int amountMultiplayer, bool asGift, string receiverUsername = "", string giftMessage = "", int giftSpriteId = 0, int giftBoxId = 0, int giftRibbonId = 0) { CatalogPage page = this.GetCatalogPage(pageId); if (page != null && page.Visible & page.Enabled && page.MinRank <= session.GetHabbo().Rank) { CatalogItem item = page.GetItem(itemId); if (item != null) { if (item.IsDeal) { if (amountMultiplayer > 1) { session.SendNotif("You can't buy multiple deals at once!"); return; } } Tuple <Item, int>[] products = item.GetItems(); uint giftReceiverId = 0; if (asGift) { foreach (Tuple <Item, int> data in products) { if (!data.Item1.AllowGift) { return; } } giftReceiverId = Skylight.GetGame().GetGameClientManager().GetIDByUsername(receiverUsername); if (giftReceiverId == 0) //not valid user { ServerMessage receiverNotFound = BasicUtilies.GetRevisionServerMessage(Revision.RELEASE63_35255_34886_201108111108); receiverNotFound.Init(r63aOutgoing.GiftReceiverNotFound); session.SendMessage(receiverNotFound); return; } } if (amountMultiplayer > 1 && products[0].Item2 * amountMultiplayer > 100) { session.SendNotif("You can't buy more then 100 at once with the buy command"); return; } int finalCredits = item.CostCredits * amountMultiplayer; int finalPixels = item.CostActivityPoints * amountMultiplayer; if (asGift && giftSpriteId > 0) //special gifts costs one credit more { finalCredits++; } bool noCredits = false; bool noActivityPoints = false; if (session.GetHabbo().Credits < finalCredits) { noCredits = true; } if (session.GetHabbo().TryGetActivityPoints(item.ActivityPointsType) < finalPixels) { noActivityPoints = true; } if (noCredits || noActivityPoints) { ServerMessage noEnoughtCash = BasicUtilies.GetRevisionServerMessage(Revision.RELEASE63_35255_34886_201108111108); noEnoughtCash.Init(r63aOutgoing.NoEnoughtCash); noEnoughtCash.AppendBoolean(noCredits); noEnoughtCash.AppendBoolean(noActivityPoints); session.SendMessage(noEnoughtCash); } else { if (asGift) { foreach (Tuple <Item, int> data in products) { if (data.Item1.Type == "e") { session.SendNotif("You can not send this item as a gift."); return; } } } if (!item.IsDeal) { switch (products[0].Item1.InteractionType.ToLower()) { case "pet": { string[] data = extraData.Split('\n'); string petName = data[0]; int petRace = int.Parse(data[1]); string color = data[2]; Regex regex = new Regex(@"^[A-Z0-9_-]+$", RegexOptions.IgnoreCase); if (petName.Length >= 2 && petName.Length <= 16 && regex.IsMatch(petName) && !TextUtilies.HaveBlacklistedWords(petName)) { //buy } else { return; } if (color.Length != 6) { return; } break; } case "roomeffect": { extraData = TextUtilies.DoubleWithDotDecimal(double.Parse(extraData)); } break; case "postit": { extraData = "FFFF33"; //if you leave extra data empty same result, but for sure } break; case "dimmer": { extraData = "1,1,1,#000000,255"; //current mode } break; case "trophy": { extraData = session.GetHabbo().ID.ToString() + (char)9 + DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year + (char)9 + TextUtilies.FilterString(extraData, false, true); } break; default: { extraData = ""; break; } } } if (finalCredits > 0) { session.GetHabbo().Credits -= finalCredits; session.GetHabbo().UpdateCredits(true); } if (finalPixels > 0) { session.GetHabbo().RemoveActivityPoints(item.ActivityPointsType, finalPixels); session.GetHabbo().UpdateActivityPoints(item.ActivityPointsType, true); } session.SendMessage(BasicUtilies.GetRevisionPacketManager(session.Revision).GetOutgoing(OutgoingPacketsEnum.BuyInfo).Handle(new ValueHolder("Item", item, "Products", products, "Credits", finalCredits, "Pixels", finalPixels))); if (asGift) { Item gift = this.GetGiftLook(giftSpriteId); using (DatabaseClient dbClient = Skylight.GetDatabaseManager().GetClient()) { string giftData = TextUtilies.FilterString(giftMessage, false, true) + (char)9 + session.GetHabbo().ID + (char)9 + giftBoxId + (char)9 + giftRibbonId; dbClient.AddParamWithValue("giftData", giftData); dbClient.AddParamWithValue("receiverId", giftReceiverId); dbClient.AddParamWithValue("giftBaseItem", gift.ID); uint giftItemId = (uint)dbClient.ExecuteQuery("INSERT INTO items(user_id, base_item, extra_data) VALUES(@receiverId, @giftBaseItem, @giftData)"); string baseItems = ""; string amounts = ""; foreach (Tuple <Item, int> data in products) { if (baseItems.Length > 0) { baseItems += ","; amounts += ","; } baseItems += data.Item1.ID; amounts += data.Item2 * amountMultiplayer; } dbClient.AddParamWithValue("itemId", giftItemId); dbClient.AddParamWithValue("baseItems", baseItems); dbClient.AddParamWithValue("amounts", amounts); dbClient.AddParamWithValue("extraData", extraData); dbClient.ExecuteQuery("INSERT INTO items_presents(item_id, base_ids, amounts, extra_data) VALUES(@itemId, @baseItems, @amounts, @extraData)"); GameClient receiver = Skylight.GetGame().GetGameClientManager().GetGameClientById(giftReceiverId); if (receiver != null) { if (giftReceiverId != session.GetHabbo().ID) //do achievement progress { receiver.GetHabbo().GetUserStats().GiftsReceived++; receiver.GetHabbo().GetUserAchievements().CheckAchievement("GiftReceiver"); } receiver.GetHabbo().GetInventoryManager().AddItem(giftItemId, gift.ID, giftData, false); //add it to inventory first session.SendMessage(BasicUtilies.GetRevisionPacketManager(session.Revision).GetOutgoing(OutgoingPacketsEnum.UnseenItem).Handle(new ValueHolder("Type", 1, "ID", giftItemId))); //receiver one item in this case the gift //receiver.GetHabbo().GetInventoryManager().UpdateInventoryItems(true); //update inv } else { if (giftReceiverId != session.GetHabbo().ID) //do achievement progress { dbClient.ExecuteQuery("UPDATE user_stats SET gifts_received = gifts_received + 1 WHERE user_id = @receiverId LIMIT 1"); } } } if (giftReceiverId != session.GetHabbo().ID) //do achievement progress { session.GetHabbo().GetUserStats().GiftsGived++; session.GetHabbo().GetUserAchievements().CheckAchievement("GiftGiver"); } } else { session.GetHabbo().GetInventoryManager().SetQueueBytes(true); foreach (Tuple <Item, int> data in products) { this.AddItem(session, data.Item1, data.Item2 * amountMultiplayer, extraData, true, false); } session.GetHabbo().GetInventoryManager().SetQueueBytes(false); } } } } }
public void Serialize(ServerMessage message) { if (this.IsFloorItem) { if (message.GetRevision() > Revision.R26_20080915_0408_7984_61ccb5f8b8797a3aba62c1fa2ca80169) { message.AppendUInt(this.ID); message.AppendInt32(this.BaseItem.SpriteID); } else { message.AppendString(this.ID.ToString()); message.AppendString(this.BaseItem.ItemName); } message.AppendInt32(this.X); message.AppendInt32(this.Y); if (message.GetRevision() < Revision.RELEASE63_35255_34886_201108111108) { message.AppendInt32(this.BaseItem.Lenght); message.AppendInt32(this.BaseItem.Width); } message.AppendInt32(this.Rot); message.AppendString(TextUtilies.DoubleWithDotDecimal(this.Z)); if (message.GetRevision() > Revision.RELEASE63_201211141113_913728051) { message.AppendString(""); //What is this? } if (this.GetBaseItem().ItemName.StartsWith("present_")) { string[] data = this.ExtraData.Split((char)9); if (data.Length >= 2) { if (this.GetBaseItem().ItemName.StartsWith("present_wrap")) { message.AppendInt32(int.Parse(data[2]) * 1000 + int.Parse(data[3])); //gift style } else { message.AppendInt32(0); } message.AppendString("!" + data[0] + "\n\n-" + Skylight.GetGame().GetGameClientManager().GetUsernameByID(uint.Parse(data[1]))); //client ignores first char } else { message.AppendInt32(0); message.AppendString("!" + data[0]); } } else if (this.GetBaseItem().InteractionType.ToLower() == "trophy") { message.AppendInt32(0); string[] data = this.ExtraData.Split((char)9); message.AppendString(Skylight.GetGame().GetGameClientManager().GetUsernameByID(uint.Parse(data[0])) + (char)9 + string.Join("" + (char)9, data, 1, data.Length - 1)); } else { if (message.GetRevision() > Revision.R26_20080915_0408_7984_61ccb5f8b8797a3aba62c1fa2ca80169) { if (message.GetRevision() >= Revision.RELEASE63_201211141113_913728051) { message.AppendInt32(0); //case } message.AppendInt32(0); //song id, gift style, etc message.AppendString(this.ExtraData); } else { message.AppendString(""); //COLOR, r63a doesnt have this message.AppendString(""); //item status, for pets? message.AppendBoolean(false); //is dis f*****g pet food or nah message.AppendString(OldSchoolUtils.GetOldSchoolExtraData(this)); } } if (message.GetRevision() > Revision.R26_20080915_0408_7984_61ccb5f8b8797a3aba62c1fa2ca80169) { message.AppendInt32(-1); //expire time if (message.GetRevision() >= Revision.RELEASE63_201211141113_913728051) { message.AppendInt32(1); //use button message.AppendUInt(this.UserID); } else { message.AppendBoolean(true); //use button } if (this.GetBaseItem().SpriteID < 0) { message.AppendString(this.GetBaseItem().ItemName); //if sprite id is negative then this is needed } } } else { if (this.IsWallItem) //just for sure nothing goes wrong { message.AppendString(this.ID.ToString()); message.AppendInt32(this.BaseItem.SpriteID); message.AppendString(this.WallCoordinate != null ? this.WallCoordinate.ToString() : ""); //sometimes its null ;( if (this.BaseItem.ItemName.StartsWith("poster_")) { message.AppendString(this.BaseItem.ItemName.Split(new char[] { '_' })[1]); } else { string text = this.BaseItem.InteractionType.ToLower(); if (text != null && text == "postit") { message.AppendString(this.ExtraData.Split(new char[] { ' ' })[0]); } else { message.AppendString(this.ExtraData); } } if (message.GetRevision() < Revision.PRODUCTION_201601012205_226667486) { if (message.GetRevision() >= Revision.RELEASE63_201211141113_913728051) { message.AppendInt32(1); //use button message.AppendUInt(this.UserID); } else { message.AppendBoolean(true); //use button } } else { message.AppendUInt(this.UserID); message.AppendInt32(1); //use button message.AppendInt32(0); //idk } } } }
public override string GetItemData() { string itemString = ""; foreach (KeyValuePair <uint, MatchFurniData> data in this.MatchFurniData) { if (itemString.Length > 0) { itemString += "|"; } itemString += data.Key + "," + data.Value.ExtraData + "," + data.Value.Rot + "," + data.Value.X + "," + data.Value.Y + "," + TextUtilies.DoubleWithDotDecimal(data.Value.Z); } return(itemString + (char)9 + TextUtilies.BoolToString(this.FurniState) + (char)9 + TextUtilies.BoolToString(this.Direction) + (char)9 + TextUtilies.BoolToString(this.Position)); }