Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.66 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. using prjMango.Game.Pathfinding;
  7. using prjMango.Storage.MySql;
  8. using prjMango.Messages;
  9. using prjMango.Game.Rooms;
  10. using prjMango.Game.Items.Interactors;
  11.  
  12. namespace prjMango.Game.Items
  13. {
  14.     class RoomItem
  15.     {
  16.         public int Id;
  17.         public int BaseItem;
  18.         public string ExtraData;
  19.  
  20.         public int X;
  21.         public int Y;
  22.         public Double Z;
  23.         public int Rot;
  24.  
  25.         public string WallPos;
  26.  
  27.         public bool UpdateNeeded;
  28.         public int UpdateCounter;
  29.  
  30.         public int InteractingUser;
  31.         public int InteractingUser2;
  32.  
  33.         private Room Room;
  34.         private Item Item;
  35.  
  36.         public Coord Coordinate
  37.         {
  38.             get
  39.             {
  40.                 return new Coord(X, Y);
  41.             }
  42.         }
  43.  
  44.         public double TotalHeight
  45.         {
  46.             get
  47.             {
  48.                 return Z + GetBaseItem().Height;
  49.             }
  50.         }
  51.  
  52.         public bool IsWallItem
  53.         {
  54.             get
  55.             {
  56.                 if (GetBaseItem().Type.ToLower() == "i")
  57.                 {
  58.                     return true;
  59.                 }
  60.  
  61.                 return false;
  62.             }
  63.         }
  64.  
  65.         public bool IsFloorItem
  66.         {
  67.             get
  68.             {
  69.                 if (GetBaseItem().Type.ToLower() == "s")
  70.                 {
  71.                     return true;
  72.                 }
  73.  
  74.                 return false;
  75.             }
  76.         }
  77.  
  78.         public Coord SquareInFront
  79.         {
  80.             get
  81.             {
  82.                 Coord Sq = new Coord(X, Y);
  83.  
  84.                 if (Rot == 0)
  85.                 {
  86.                     Sq.y--;
  87.                 }
  88.                 else if (Rot == 2)
  89.                 {
  90.                     Sq.x++;
  91.                 }
  92.                 else if (Rot == 4)
  93.                 {
  94.                     Sq.y++;
  95.                 }
  96.                 else if (Rot == 6)
  97.                 {
  98.                     Sq.x--;
  99.                 }
  100.  
  101.                 return Sq;
  102.             }
  103.         }
  104.  
  105.         public Coord SquareBehind
  106.         {
  107.             get
  108.             {
  109.                 Coord Sq = new Coord(X, Y);
  110.  
  111.                 if (Rot == 0)
  112.                 {
  113.                     Sq.y++;
  114.                 }
  115.                 else if (Rot == 2)
  116.                 {
  117.                     Sq.x--;
  118.                 }
  119.                 else if (Rot == 4)
  120.                 {
  121.                     Sq.y--;
  122.                 }
  123.                 else if (Rot == 6)
  124.                 {
  125.                     Sq.x++;
  126.                 }
  127.  
  128.                 return Sq;
  129.             }
  130.         }
  131.  
  132.         public Interactor Interactor
  133.         {
  134.             get
  135.             {
  136.                 switch (GetBaseItem().InteractionType.ToLower())
  137.                 {
  138.                     case "teleport":
  139.  
  140.                         return new InteractorTeleport();
  141.  
  142.                     case "bottle":
  143.  
  144.                         return new InteractorSpinningBottle();
  145.  
  146.                     case "dice":
  147.  
  148.                         return new InteractorDice();
  149.  
  150.                     case "habbowheel":
  151.  
  152.                         return new InteractorWheel();
  153.  
  154.                     case "loveshuffler":
  155.  
  156.                         return new InteractorLoveShuffle();
  157.  
  158.                     case "onewaygate":
  159.  
  160.                         return new InteractorOneWayGate();
  161.  
  162.                     case "alert":
  163.  
  164.                         return new InteractorAlert();
  165.  
  166.                     case "vendingmachine":
  167.  
  168.                         return new InteractorVendor();
  169.  
  170.                     case "gate":
  171.  
  172.                         return new InteractorGate(GetBaseItem().Modes);
  173.  
  174.                     case "scoreboard":
  175.  
  176.                         return new InteractorScoreboard();
  177.  
  178.                     case "default":
  179.                     default:
  180.  
  181.                         return new InteractorGenericSwitch(GetBaseItem().Modes);
  182.                 }
  183.             }
  184.         }
  185.  
  186.         public RoomItem(int Id, int BaseItem, string ExtraData, int X, int Y, Double Z, int Rot, string WallPos, Room Room)
  187.         {
  188.             this.Id = Id;
  189.             this.BaseItem = BaseItem;
  190.             this.ExtraData = ExtraData;
  191.             this.X = X;
  192.             this.Y = Y;
  193.             this.Z = Z;
  194.             this.Rot = Rot;
  195.             this.WallPos = WallPos;
  196.             this.UpdateNeeded = false;
  197.             this.UpdateCounter = 0;
  198.             this.InteractingUser = 0;
  199.             this.InteractingUser2 = 0;
  200.             this.Room = Room;
  201.             this.Item = MangoServer.GetGame().GetItemManager().GetItem(BaseItem);
  202.  
  203.             switch (GetBaseItem().InteractionType.ToLower())
  204.             {
  205.                 case "teleport":
  206.  
  207.                     ReqUpdate(0);
  208.  
  209.                     break;
  210.             }
  211.         }
  212.  
  213.         public void ProcessUpdates()
  214.         {
  215.         }
  216.  
  217.         public void ReqUpdate(int Cycles)
  218.         {
  219.             this.UpdateCounter = Cycles;
  220.             this.UpdateNeeded = true;
  221.         }
  222.  
  223.         public void UpdateState()
  224.         {
  225.             UpdateState(true, true);
  226.         }
  227.  
  228.         public void UpdateState(bool inDb, bool inRoom)
  229.         {
  230.             if (inDb)
  231.             {
  232.                 using (SqlConnection SqlClient = MangoServer.GetSqlManager().GetConnection())
  233.                 {
  234.                     SqlClient.AddParamWithValue("extra_data", this.ExtraData);
  235.                     SqlClient.RunQuery("UPDATE rooms_items SET extra_data = @extra_data WHERE id = '" + Id + "' LIMIT 1");
  236.                 }
  237.             }
  238.  
  239.             if (inRoom)
  240.             {
  241.                 ServerMessage Message = new ServerMessage();
  242.  
  243.                 if (IsFloorItem)
  244.                 {
  245.                     Message.Init(88);
  246.                     Message.AppendStringWithBreak(Id.ToString());
  247.                     Message.AppendStringWithBreak(ExtraData);
  248.                 }
  249.                 else
  250.                 {
  251.                     Message.Init(85);
  252.                     Serialize(Message);
  253.                 }
  254.  
  255.                 GetRoom().SendMessage(Message);
  256.             }
  257.         }
  258.  
  259.         public void Serialize(ServerMessage Message)
  260.         {
  261.             // AU33614959XEP:w=3,11 l=31,83 l0
  262.             // A]r|ebuAQsPAQAJ0.0q|ebuA0MC[!`A
  263.  
  264.             if (IsFloorItem)
  265.             {
  266.                 Message.AppendInt32(Id);
  267.                 Message.AppendInt32(GetBaseItem().SpriteId);
  268.                 Message.AppendInt32(X);
  269.                 Message.AppendInt32(Y);
  270.                 Message.AppendInt32(Rot);
  271.                 Message.AppendStringWithBreak(Z.ToString().Replace(',', '.'));
  272.                 Message.AppendInt32(0);
  273.                 Message.AppendStringWithBreak(ExtraData);
  274.                 Message.AppendInt32(-1);
  275.             }
  276.             else if (IsWallItem)
  277.             {
  278.                 Message.AppendStringWithBreak(Id + "");
  279.                 Message.AppendInt32(GetBaseItem().SpriteId);
  280.                 Message.AppendStringWithBreak(WallPos);
  281.  
  282.                 switch (GetBaseItem().InteractionType.ToLower())
  283.                 {
  284.                     case "postit":
  285.  
  286.                         Message.AppendStringWithBreak(ExtraData.Split(' ')[0]);
  287.                         break;
  288.  
  289.                     default:
  290.  
  291.                         Message.AppendStringWithBreak(ExtraData);
  292.                         break;
  293.                 }
  294.             }
  295.         }
  296.  
  297.         public Item GetBaseItem()
  298.         {
  299.             return this.Item;
  300.         }
  301.  
  302.         public Room GetRoom()
  303.         {
  304.             return this.Room;
  305.         }
  306.     }
  307. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement