public void HandlePacket(GameClient client, GSPacketIn packet) { string name=packet.ReadString(30); //TODO do bad name checks here from some database with //bad names, this is just a temp testthing here bool bad = false; ArrayList names = GameServer.Instance.InvalidNames; foreach(string s in names) { if(name.ToLower().IndexOf(s) != -1) { bad = true; break; } } //if(bad) //DOLConsole.WriteLine(String.Format("Name {0} is bad!",name)); //else //DOLConsole.WriteLine(String.Format("Name {0} seems to be a good name!",name)); client.Out.SendBadNameCheckReply(name,bad); }
public void HandlePacket(GameClient client, GSPacketIn packet) { if (client.Player == null) return; int slot = packet.ReadByte(); int unk1 = packet.ReadByte(); ushort unk2 = packet.ReadShort(); uint price = packet.ReadInt(); GameConsignmentMerchant con = client.Player.ActiveConMerchant; House house = HouseMgr.GetHouse(con.HouseNumber); if (house == null) return; if (!house.HasOwnerPermissions(client.Player)) return; int dbSlot = (int)eInventorySlot.Consignment_First + slot; InventoryItem item = GameServer.Database.SelectObject<InventoryItem>("OwnerID = '" + client.Player.DBCharacter.ObjectId + "' AND SlotPosition = '" + dbSlot.ToString() + "'"); if (item != null) { item.SellPrice = (int)price; GameServer.Database.SaveObject(item); } else { client.Player.TempProperties.setProperty(NEW_PRICE, (int)price); } // another update required here,currently the player needs to reopen the window to see the price, thats why we msg him client.Out.SendMessage("New price set! (open the merchant window again to see the price)", eChatType.CT_System, eChatLoc.CL_SystemWindow); }
public void HandlePacket(GameClient client, GSPacketIn packet) { ushort id = packet.ReadShort(); // GameNPC npc = (GameNPC)WorldMgr.GetObjectTypeByIDFromRegion(client.Player.CurrentRegionID, id, typeof(GameNPC)); if(client.Player==null) return; Region region = client.Player.CurrentRegion; if (region == null) return; GameNPC npc = region.GetObject(id) as GameNPC; if(npc != null) { Tuple<ushort, ushort> key = new Tuple<ushort, ushort>(npc.CurrentRegionID, (ushort)npc.ObjectID); long updatetime; if (!client.GameObjectUpdateArray.TryGetValue(key, out updatetime)) { updatetime = 0; } client.Out.SendNPCCreate(npc); // override update from npc create as this is a client request ! if (updatetime > 0) client.GameObjectUpdateArray[key] = updatetime; if(npc.Inventory != null) client.Out.SendLivingEquipmentUpdate(npc); //DO NOT SEND A NPC UPDATE, it is done in Create anyway //Sending a Update causes a UDP packet to be sent and //the client will get the UDP packet before the TCP Create packet //Causing the client to issue another NPC CREATION REQUEST! //client.Out.SendNPCUpdate(npc); <-- BIG NO NO } }
public void HandlePacket(GameClient client, GSPacketIn packet) { string localIP = packet.ReadString(22); ushort localPort = packet.ReadShort(); client.LocalIP = localIP; client.Out.SendUDPInitReply(); }
public void HandlePacket(GameClient client, GSPacketIn packet) { int flagSpeedData = packet.ReadShort(); int heading = packet.ReadShort(); if (client.Version > GameClient.eClientVersion.Version171) { int xOffsetInZone = packet.ReadShort(); int yOffsetInZone = packet.ReadShort(); int currentZoneID = packet.ReadShort(); int realZ = packet.ReadShort(); Zone newZone = WorldMgr.GetZone((ushort) currentZoneID); if (newZone == null) { if (Log.IsWarnEnabled) Log.Warn("Unknown zone in UseSpellHandler: " + currentZoneID + " player: " + client.Player.Name); } else { client.Player.X = newZone.XOffset + xOffsetInZone; client.Player.Y = newZone.YOffset + yOffsetInZone; client.Player.Z = realZ; client.Player.MovementStartTick = Environment.TickCount; } } int spellLevel = packet.ReadByte(); int spellLineIndex = packet.ReadByte(); client.Player.Heading = (ushort) (heading & 0xfff); new UseSpellAction(client.Player, flagSpeedData, spellLevel, spellLineIndex).Start(1); }
public void HandlePacket(GameClient client, GSPacketIn packet) { packet.Skip(4); int slot = packet.ReadShort(); InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)slot); if (item != null) { if (item.IsIndestructible) { client.Out.SendMessage(String.Format("You can't destroy {0}!", item.GetName(0, false)), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (item.Id_nb == "ARelic") { client.Out.SendMessage("You cannot destroy a relic!", eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (client.Player.Inventory.EquippedItems.Contains(item)) { client.Out.SendMessage("You cannot destroy an equipped item!", eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (client.Player.Inventory.RemoveItem(item)) { client.Out.SendMessage("You destroy the " + item.Name + ".", eChatType.CT_System, eChatLoc.CL_SystemWindow); InventoryLogging.LogInventoryAction(client.Player, "(destroy)", eInventoryActionType.Other, item.Template, item.Count); } } }
public void HandlePacket(GameClient client, GSPacketIn packet) { int rc4 = packet.ReadByte(); byte clientType = (byte)packet.ReadByte(); client.ClientType = (GameClient.eClientType)(clientType & 0x0F); client.ClientAddons = (GameClient.eClientAddons)(clientType & 0xF0); byte major = (byte)packet.ReadByte(); byte minor = (byte)packet.ReadByte(); byte build = (byte)packet.ReadByte(); if(rc4==1) { //DOLConsole.Log("SBox=\n"); //DOLConsole.LogDump(client.PacketProcessor.Encoding.SBox); packet.Read(((PacketEncoding168)client.PacketProcessor.Encoding).SBox,0,256); ((PacketEncoding168)client.PacketProcessor.Encoding).EncryptionState=PacketEncoding168.eEncryptionState.PseudoRC4Encrypted; //DOLConsole.WriteLine(client.Socket.RemoteEndPoint.ToString()+": SBox set!"); //DOLConsole.Log("SBox=\n"); //DOLConsole.LogDump(((PacketEncoding168)client.PacketProcessor.Encoding).SBox); } else { //Send the crypt key to the client client.Out.SendVersionAndCryptKey(); } }
public void HandlePacket(GameClient client, GSPacketIn packet) { ushort playerID = packet.ReadShort(); // no use for that. // house is null, return var house = client.Player.CurrentHouse; if(house == null) return; // grab all valid changes var changes = new List<int>(); for (int i = 0; i < 10; i++) { int swtch = packet.ReadByte(); int change = packet.ReadByte(); if (swtch != 255) { changes.Add(change); } } // apply changes if (changes.Count > 0) { house.Edit(client.Player, changes); } }
public void HandlePacket(GameClient client, GSPacketIn packet) { ushort keepId = packet.ReadShort(); ushort wallId = packet.ReadShort(); ushort responce = packet.ReadShort(); int HPindex = packet.ReadShort(); AbstractGameKeep keep = GameServer.KeepManager.GetKeepByID(keepId); if (keep == null || !(GameServer.ServerRules.IsSameRealm(client.Player, (GameKeepComponent)keep.KeepComponents[wallId], true) || client.Account.PrivLevel > 1)) return; if (responce == 0x00)//show info client.Out.SendKeepComponentInteract(((GameKeepComponent)keep.KeepComponents[wallId])); else if (responce == 0x01)// click on hookpoint button client.Out.SendKeepComponentHookPoint(((GameKeepComponent)keep.KeepComponents[wallId]), HPindex); else if (responce == 0x02)//select an hookpoint { if (client.Account.PrivLevel > 1) client.Out.SendMessage("DEBUG : selected hookpoint id " + HPindex, eChatType.CT_Say, eChatLoc.CL_SystemWindow); GameKeepComponent hp = keep.KeepComponents[wallId] as GameKeepComponent; client.Out.SendClearKeepComponentHookPoint(hp, HPindex); client.Out.SendHookPointStore(hp.HookPoints[HPindex] as GameKeepHookPoint); } }
public void HandlePacket(GameClient client, GSPacketIn packet) { ushort housenumber = packet.ReadShort(); var index = (byte) packet.ReadByte(); var unk1 = (byte) packet.ReadByte(); // house is null, return var house = HouseMgr.GetHouse(housenumber); if (house == null) return; // player is null, return if (client.Player == null) return; // rotation only works for inside items if (!client.Player.InHouse) return; // no permission to change the interior, return if (!house.CanChangeInterior(client.Player, DecorationPermissions.Add)) return; var pak = new GSTCPPacketOut(client.Out.GetPacketCode(eServerPackets.HouseDecorationRotate)); pak.WriteShort(housenumber); pak.WriteByte(index); pak.WriteByte(0x01); client.Out.SendTCP(pak); }
public void HandlePacket(GameClient client, GSPacketIn packet) { int permissionSlot = packet.ReadByte(); int newPermissionLevel = packet.ReadByte(); ushort houseNumber = packet.ReadShort(); // house is null, return var house = HouseMgr.GetHouse(houseNumber); if (house == null) return; // player is null, return if (client.Player == null) return; // can't set permissions unless you're the owner. if (!house.HasOwnerPermissions(client.Player) && client.Account.PrivLevel <= 1) return; // check if we're setting or removing permissions if (newPermissionLevel == 100) { house.RemovePermission(permissionSlot); } else { house.AdjustPermissionSlot(permissionSlot, newPermissionLevel); } }
public void HandlePacket(GameClient client, GSPacketIn packet) { lock (this) { string dllName = packet.ReadString(16); packet.Position = 0x50; uint upTime = packet.ReadInt(); string text = string.Format("Client crash ({0}) dll:{1} clientUptime:{2}sec", client.ToString(), dllName, upTime); if (log.IsInfoEnabled) log.Info(text); if (log.IsDebugEnabled) { log.Debug("Last client sent/received packets (from older to newer):"); foreach (IPacket prevPak in client.PacketProcessor.GetLastPackets()) { log.Info(prevPak.ToHumanReadable()); } } //Eden if(client.Player!=null) { GamePlayer player = client.Player; client.Out.SendPlayerQuit(true); client.Player.SaveIntoDatabase(); client.Player.Quit(true); client.Disconnect(); } } }
public void HandlePacket(GameClient client, GSPacketIn packet) { ushort unk1 = packet.ReadShort(); ushort questIndex = packet.ReadShort(); ushort unk2 = packet.ReadShort(); ushort unk3 = packet.ReadShort(); AbstractQuest quest = null; int index = 0; lock (client.Player.QuestList) { foreach (AbstractQuest q in client.Player.QuestList) { // ignore completed quests if (q.Step == -1) continue; if (index == questIndex) { quest = q; break; } index++; } } if (quest != null) quest.AbortQuest(); }
public void HandlePacket(GameClient client, GSPacketIn packet) { var aggroState = (byte) packet.ReadByte(); // 1-Aggressive, 2-Deffensive, 3-Passive var walkState = (byte) packet.ReadByte(); // 1-Follow, 2-Stay, 3-GoTarg, 4-Here var command = (byte) packet.ReadByte(); // 1-Attack, 2-Release //[Ganrod] Nidel: Animist can removed his TurretFnF without MainPet. if (client.Player.TargetObject != null && command == 2 && client.Player.ControlledBrain == null && client.Player.CharacterClass.ID == (int) eCharacterClass.Animist) { var turret = client.Player.TargetObject as TurretPet; if (turret != null && turret.Brain is TurretFNFBrain && client.Player.IsControlledNPC(turret)) { //release new HandlePetCommandAction(client.Player, 0, 0, 2).Start(1); return; } } //[Ganrod] Nidel: Call only if player has controllednpc if (client.Player.ControlledBrain != null) { new HandlePetCommandAction(client.Player, aggroState, walkState, command).Start(1); return; } }
public void HandlePacket(GameClient client, GSPacketIn packet) { uint x = packet.ReadInt(); uint y = packet.ReadInt(); ushort id = packet.ReadShort(); ushort item_slot = packet.ReadShort(); if (client.Player.TargetObject == null) { client.Out.SendMessage("You must select an NPC to sell to.", eChatType.CT_Merchant, eChatLoc.CL_SystemWindow); return; } lock (client.Player.Inventory) { InventoryItem item = client.Player.Inventory.GetItem((eInventorySlot)item_slot); if (item == null) return; int itemCount = Math.Max(1, item.Count); int packSize = Math.Max(1, item.PackSize); if (client.Player.TargetObject is GameMerchant) { //Let the merchant choos how to handle the trade. ((GameMerchant)client.Player.TargetObject).OnPlayerSell(client.Player, item); } else if (client.Player.TargetObject is GameLotMarker) { ((GameLotMarker)client.Player.TargetObject).OnPlayerSell(client.Player, item); } } }
public void HandlePacket(GameClient client, GSPacketIn packet) { ushort keepId = packet.ReadShort(); ushort wallId = packet.ReadShort(); int hookpointID = packet.ReadShort(); ushort itemslot = packet.ReadShort(); int payType = packet.ReadByte();//gold RP BP contrat??? int unk2 = packet.ReadByte(); int unk3 = packet.ReadByte(); int unk4 = packet.ReadByte(); // client.Player.Out.SendMessage("x="+unk2+"y="+unk3+"z="+unk4,eChatType.CT_Say,eChatLoc.CL_SystemWindow); AbstractGameKeep keep = GameServer.KeepManager.GetKeepByID(keepId); if (keep == null) return; GameKeepComponent component = keep.KeepComponents[wallId] as GameKeepComponent; if (component == null) return; /*GameKeepHookPoint hookpoint = component.HookPoints[hookpointID] as GameKeepHookPoint; if (hookpoint == null) return 1; */ HookPointInventory inventory = null; if(hookpointID > 0x80) inventory = HookPointInventory.YellowHPInventory; //oil else if(hookpointID > 0x60) inventory = HookPointInventory.GreenHPInventory;//big siege else if(hookpointID > 0x40) inventory = HookPointInventory.LightGreenHPInventory; //small siege else if (hookpointID > 0x20) inventory = HookPointInventory.BlueHPInventory;//npc else inventory = HookPointInventory.RedHPInventory;//guard if (inventory != null) { HookPointItem item = inventory.GetItem(itemslot); if (item != null) item.Invoke(client.Player, payType, component.HookPoints[hookpointID] as GameKeepHookPoint, component); } }
//rewritten by Corillian so if it doesn't work you know who to yell at ;) public void HandlePacket(GameClient client, GSPacketIn packet) { byte grouped = (byte)packet.ReadByte(); ArrayList list = new ArrayList(); if (grouped != 0x00) { ArrayList groups = GroupMgr.ListGroupByStatus(0x00); if (groups != null) { foreach (Group group in groups) if (GameServer.ServerRules.IsAllowedToGroup(group.Leader, client.Player, true)) { list.Add(group.Leader); } } } ArrayList Lfg = GroupMgr.LookingForGroupPlayers(); if (Lfg != null) { foreach (GamePlayer player in Lfg) { if (player != client.Player && GameServer.ServerRules.IsAllowedToGroup(client.Player, player, true)) { list.Add(player); } } } client.Out.SendFindGroupWindowUpdate((GamePlayer[])list.ToArray(typeof(GamePlayer))); }
public void HandlePacket(GameClient client, GSPacketIn packet) { int unk1 = packet.ReadByte(); int position = packet.ReadByte(); ushort housenumber = packet.ReadShort(); ushort angle = packet.ReadShort(); ushort unk2 = packet.ReadShort(); // rotation only works for inside items if (!client.Player.InHouse) return; // house is null, return var house = HouseMgr.GetHouse(housenumber); if (house == null) return; // player is null, return if (client.Player == null) return; // no permission to change the interior, return if (!house.CanChangeInterior(client.Player, DecorationPermissions.Add)) return; if (house.IndoorItems.ContainsKey(position) == false) return; // grab the item in question IndoorItem iitem = house.IndoorItems[position]; if (iitem == null) { client.Player.Out.SendMessage("error: id was null", eChatType.CT_Help, eChatLoc.CL_SystemWindow); return; } //should this ever happen? // adjust the item's roation int old = iitem.Rotation; iitem.Rotation = (iitem.Rotation + angle)%360; if (iitem.Rotation < 0) { iitem.Rotation = 360 + iitem.Rotation; } iitem.DatabaseItem.Rotation = iitem.Rotation; // save item GameServer.Database.SaveObject(iitem.DatabaseItem); ChatUtil.SendSystemMessage(client, string.Format("Interior decoration rotated from {0} degrees to {1}", old, iitem.Rotation)); // update all players in the house. foreach (GamePlayer plr in house.GetAllPlayersInHouse()) { plr.Client.Out.SendFurniture(house, position); } }
public void HandlePacket(GameClient client, GSPacketIn packet) { var mode = (byte) packet.ReadByte(); bool userAction = packet.ReadByte() == 0; // set to 0 if user pressed the button, set to 1 if client decided to stop attack new AttackRequestHandler(client.Player, mode != 0, userAction).Start(1); }
public void HandlePacket(GameClient client, GSPacketIn packet) { int flagSpeedData = packet.ReadShort(); int index = packet.ReadByte(); int type = packet.ReadByte(); new UseSkillAction(client.Player, flagSpeedData, index, type).Start(1); }
/// <summary> /// Called when the packet has been received /// </summary> /// <param name="client">Client that sent the packet</param> /// <param name="packet">Packet data</param> /// <returns>Non zero if function was successfull</returns> public void HandlePacket(GameClient client, GSPacketIn packet) { string localIP = packet.ReadString(22); ushort localPort = packet.ReadShort(); // TODO check changed localIP client.LocalIP = localIP; client.UdpPingTime = DateTime.Now.Ticks; }
public void HandlePacket(GameClient client, GSPacketIn packet) { if (client == null || client.Player == null) return; if ((client.Player.TargetObject is IGameInventoryObject) == false) return; MarketSearch.SearchData search = new MarketSearch.SearchData(); search.name = packet.ReadString(64); search.slot = (int)packet.ReadInt(); search.skill = (int)packet.ReadInt(); search.resist = (int)packet.ReadInt(); search.bonus = (int)packet.ReadInt(); search.hp = (int)packet.ReadInt(); search.power = (int)packet.ReadInt(); search.proc = (int)packet.ReadInt(); search.qtyMin = (int)packet.ReadInt(); search.qtyMax = (int)packet.ReadInt(); search.levelMin = (int)packet.ReadInt(); search.levelMax = (int)packet.ReadInt(); search.priceMin = (int)packet.ReadInt(); search.priceMax = (int)packet.ReadInt(); search.visual = (int)packet.ReadInt(); search.page = (byte)packet.ReadByte(); byte unk1 = (byte)packet.ReadByte(); short unk2 = (short)packet.ReadShort(); byte unk3 = 0; byte unk4 = 0; byte unk5 = 0; byte unk6 = 0; byte unk7 = 0; byte unk8 = 0; if (client.Version >= GameClient.eClientVersion.Version198) { // Dunnerholl 2009-07-28 Version 1.98 introduced new options to Market search. 12 Bytes were added, but only 7 are in usage so far in my findings. // update this, when packets change and keep in mind, that this code reflects only the 1.98 changes search.armorType = search.page; // page is now used for the armorType (still has to be logged, i just checked that 2 means leather, 0 = standard search.damageType = (byte)packet.ReadByte(); // 1=crush, 2=slash, 3=thrust unk3 = (byte)packet.ReadByte(); unk4 = (byte)packet.ReadByte(); unk5 = (byte)packet.ReadByte(); search.playerCrafted = (byte)packet.ReadByte(); // 1 = show only Player crafted, 0 = all // 3 bytes unused packet.Skip(3); search.page = (byte)packet.ReadByte(); // page is now sent here unk6 = (byte)packet.ReadByte(); unk7 = (byte)packet.ReadByte(); unk8 = (byte)packet.ReadByte(); } search.clientVersion = client.Version.ToString(); (client.Player.TargetObject as IGameInventoryObject).SearchInventory(client.Player, search); }
/// <summary> /// Called when the packet has been received /// </summary> /// <param name="client">Client that sent the packet</param> /// <param name="packet">Packet data</param> /// <returns>Non zero if function was successfull</returns> public void HandlePacket(GameClient client, GSPacketIn packet) { packet.Skip(4); //Skip the first 4 bytes long pingDiff = (DateTime.Now.Ticks - client.PingTime)/1000; client.PingTime = DateTime.Now.Ticks; ulong timestamp = packet.ReadInt(); client.Out.SendPingReply(timestamp,packet.Sequence); }
public void HandlePacket(GameClient client, GSPacketIn packet) { if (client == null || client.Player == null) return; client.UdpConfirm = false; new WorldInitAction(client.Player).Start(1); }
public void HandlePacket(GameClient client, GSPacketIn packet) { string name = packet.ReadString(30); string select = string.Format("Name = '{0}'", GameServer.Database.Escape(name)); DOLCharacters character = GameServer.Database.SelectObject<DOLCharacters>(select); bool nameExists = (character != null); client.Out.SendDupNameCheckReply(name, nameExists); }
public void HandlePacket(GameClient client, GSPacketIn packet) { uint X = packet.ReadInt(); uint Y = packet.ReadInt(); ushort id = packet.ReadShort(); ushort item_slot = packet.ReadShort(); new AppraiseActionHandler(client.Player, item_slot).Start(1); }
public void HandlePacket(GameClient client, GSPacketIn packet) { string localIP = packet.ReadString(22); ushort localPort = packet.ReadShort(); client.LocalIP = localIP; client.Out.SendUDPInitReply(); if (client.Account.PrivLevel > 1 && ServerProperties.Properties.ENABLE_DEBUG) client.Out.SendDebugMessage("local IP:{0} port:{1}", localIP, localPort); }
public void HandlePacket(GameClient client, GSPacketIn packet) { ushort checkerOID = packet.ReadShort(); ushort targetOID = packet.ReadShort(); ushort response = packet.ReadShort(); ushort unknow = packet.ReadShort(); new HandleCheckAction(client.Player, checkerOID, targetOID, response).Start(1); }
public void HandlePacket(GameClient client, GSPacketIn packet) { ushort data1 = packet.ReadShort(); ushort data2 = packet.ReadShort(); ushort data3 = packet.ReadShort(); var messageType = (byte) packet.ReadByte(); var response = (byte) packet.ReadByte(); new DialogBoxResponseAction(client.Player, data1, data2, data3, messageType, response).Start(1); }
public void HandlePacket(GameClient client, GSPacketIn packet) { string name = packet.ReadString(30); //TODO do bad name checks here from some database with //bad names, this is just a temp testthing here var bad = GameServer.Instance.PlayerManager.InvalidNames[name]; client.Out.SendBadNameCheckReply(name,bad); }
public bool HandleCommand(TankMarryLogicProcessor process, GamePlayer player, GSPacketIn packet) { if (player.CurrentMarryRoom != null && player.CurrentMarryRoom.RoomState == eRoomState.FREE) { if (player.PlayerCharacter.ID == player.CurrentMarryRoom.Info.GroomID || player.PlayerCharacter.ID == player.CurrentMarryRoom.Info.BrideID) { int userID = packet.ReadInt(); player.CurrentMarryRoom.KickPlayerByUserID(player, userID); return(true); } } return(false); }
public void SendPlayerState() { GSPacketIn pkg = this.m_host.Out.SendRoomUpdatePlayerStates(this.m_playerState); this.SendToAll(pkg, this.m_host); }
public bool AddPlayerUnsafe(GamePlayer player) { int index = -1; GamePlayer[] places; Monitor.Enter(places = this.m_places); try { for (int i = 0; i < 8; i++) { if (this.m_places[i] == null && this.m_placesState[i] == -1) { this.m_places[i] = player; this.m_placesState[i] = player.PlayerId; this.m_playerCount++; index = i; break; } } } finally { Monitor.Exit(places); } if (index != -1) { player.CurrentRoom = this; player.CurrentRoomIndex = index; if (this.RoomType == eRoomType.Freedom) { player.CurrentRoomTeam = index % 2 + 1; } else { player.CurrentRoomTeam = 1; } GSPacketIn pkg = player.Out.SendRoomPlayerAdd(player); this.SendToAll(pkg, player); GSPacketIn bufferPkg = player.Out.SendBufferList(player, player.BufferList.GetAllBuffer()); this.SendToAll(bufferPkg, player); List <GamePlayer> list = this.GetPlayers(); foreach (GamePlayer p in list) { if (p != player) { player.Out.SendRoomPlayerAdd(p); player.Out.SendBufferList(p, p.BufferList.GetAllBuffer()); } } if (this.m_host == null) { this.m_host = player; this.UpdatePlayerState(player, 2, true); } else { this.UpdatePlayerState(player, 0, true); } this.SendPlaceState(); this.UpdateGameStyle(); } return(index != -1); }
public bool HandleCommand(TankMarryLogicProcessor process, GamePlayer player, GSPacketIn packet) { if (player.CurrentMarryRoom == null || player.CurrentMarryRoom.RoomState != eRoomState.FREE) { return(false); } if (player.PlayerCharacter.ID != player.CurrentMarryRoom.Info.GroomID && player.PlayerCharacter.ID != player.CurrentMarryRoom.Info.BrideID) { return(false); } int needMoney = GameProperties.PRICE_PROPOSE; if (player.CurrentMarryRoom.Info.IsHymeneal) { if (player.PlayerCharacter.Money < needMoney) { player.Out.SendMessage(eMessageType.ChatNormal, LanguageMgr.GetTranslation("UserFirecrackersCommand.MoneyNotEnough")); return(false); } } GamePlayer Groom = player.CurrentMarryRoom.GetPlayerByUserID(player.CurrentMarryRoom.Info.GroomID); if (Groom == null) { player.Out.SendMessage(eMessageType.ChatNormal, LanguageMgr.GetTranslation("HymenealCommand.NoGroom")); return(false); } GamePlayer Bride = player.CurrentMarryRoom.GetPlayerByUserID(player.CurrentMarryRoom.Info.BrideID); if (Bride == null) { player.Out.SendMessage(eMessageType.ChatNormal, LanguageMgr.GetTranslation("HymenealCommand.NoBride")); return(false); } bool result = false; bool isFirst = false; GSPacketIn pkg = packet.Clone(); int hymenealState = packet.ReadInt(); if (1 == hymenealState) { player.CurrentMarryRoom.RoomState = eRoomState.FREE; } else { player.CurrentMarryRoom.RoomState = eRoomState.Hymeneal; player.CurrentMarryRoom.BeginTimerForHymeneal(170 * 1000); if (!player.PlayerCharacter.IsGotRing) { isFirst = true; ItemTemplateInfo ringTemplate = ItemMgr.FindItemTemplate(9022); ItemInfo ring1 = ItemInfo.CreateFromTemplate(ringTemplate, 1, (int)ItemAddType.webing); ring1.IsBinds = true; //Groom.CurrentInventory.AddItem(ring1, 11); using (PlayerBussiness pb = new PlayerBussiness()) { ring1.UserID = 0; pb.AddGoods(ring1); string content = LanguageMgr.GetTranslation("HymenealCommand.Content", Bride.PlayerCharacter.NickName); MailInfo mail = new MailInfo(); mail.Annex1 = ring1.ItemID.ToString(); mail.Content = content; mail.Gold = 0; mail.IsExist = true; mail.Money = 0; mail.Receiver = Groom.PlayerCharacter.NickName; mail.ReceiverID = Groom.PlayerCharacter.ID; mail.Sender = LanguageMgr.GetTranslation("HymenealCommand.Sender"); mail.SenderID = 0; mail.Title = LanguageMgr.GetTranslation("HymenealCommand.Title"); mail.Type = (int)eMailType.Marry; if (pb.SendMail(mail)) { result = true; } player.Out.SendMailResponse(mail.ReceiverID, eMailRespose.Receiver); } ItemInfo ring2 = ItemInfo.CreateFromTemplate(ringTemplate, 1, (int)ItemAddType.webing); ring2.IsBinds = true; //Bride.CurrentInventory.AddItem(ring2, 11); using (PlayerBussiness pb = new PlayerBussiness()) { ring2.UserID = 0; pb.AddGoods(ring2); string content = LanguageMgr.GetTranslation("HymenealCommand.Content", Groom.PlayerCharacter.NickName); MailInfo mail = new MailInfo(); mail.Annex1 = ring2.ItemID.ToString(); mail.Content = content; mail.Gold = 0; mail.IsExist = true; mail.Money = 0; mail.Receiver = Bride.PlayerCharacter.NickName; mail.ReceiverID = Bride.PlayerCharacter.ID; mail.Sender = LanguageMgr.GetTranslation("HymenealCommand.Sender"); mail.SenderID = 0; mail.Title = LanguageMgr.GetTranslation("HymenealCommand.Title"); mail.Type = (int)eMailType.Marry; if (pb.SendMail(mail)) { result = true; } player.Out.SendMailResponse(mail.ReceiverID, eMailRespose.Receiver); } player.CurrentMarryRoom.Info.IsHymeneal = true; using (PlayerBussiness db = new PlayerBussiness()) { db.UpdateMarryRoomInfo(player.CurrentMarryRoom.Info); //更新IsGotRing的数据库 db.UpdatePlayerGotRingProp(Groom.PlayerCharacter.ID, Bride.PlayerCharacter.ID); //通过数据库读入PlayerCharacter内存 Groom.LoadMarryProp(); Bride.LoadMarryProp(); } //Groom.PlayerCharacter.IsGotRing = true; //Bride.PlayerCharacter.IsGotRing = true; } else { isFirst = false; result = true; } if (!isFirst) { //player.SetMoney(-needMoney, MoneyRemoveType.Marry); player.RemoveMoney(needMoney); LogMgr.LogMoneyAdd(LogMoneyType.Marry, LogMoneyType.Marry_Hymeneal, player.PlayerCharacter.ID, needMoney, player.PlayerCharacter.Money, 0, 0, 0, "", "", ""); CountBussiness.InsertSystemPayCount(player.PlayerCharacter.ID, needMoney, 0, (int)eConsumerType.Marry, (int)eSubConsumerType.Marry_Hymeneal); } pkg.WriteInt(player.CurrentMarryRoom.Info.ID); pkg.WriteBoolean(result); //0 player.CurrentMarryRoom.SendToAll(pkg); //0 player.CurrentMarryRoom.SendToAllForScene(pkg,1); player.CurrentMarryRoom.SendToAll(pkg); if (result) { string msg = LanguageMgr.GetTranslation("HymenealCommand.Succeed", Groom.PlayerCharacter.NickName, Bride.PlayerCharacter.NickName); GSPacketIn message = player.Out.SendMessage(eMessageType.ChatNormal, msg); player.CurrentMarryRoom.SendToPlayerExceptSelfForScene(message, player); } } return(true); }
public override int HandlePacket(GamePlayer player, GSPacketIn packet) { GSPacketIn pkg = packet.Clone(); pkg.ClearContext(); string nickName = packet.ReadString(); int relation = packet.ReadInt(); int result; if (relation < 0 || relation > 1) { result = 1; } else { using (PlayerBussiness db = new PlayerBussiness()) { GamePlayer other = WorldMgr.GetClientByPlayerNickName(nickName); PlayerInfo user; if (other != null) { user = other.PlayerCharacter; } else { user = db.GetUserSingleByNickName(nickName); } if (!string.IsNullOrEmpty(nickName) && user != null) { if (!player.Friends.ContainsKey(user.ID) || player.Friends[user.ID] != relation) { if (db.AddFriends(new FriendInfo { FriendID = user.ID, IsExist = true, Remark = "", UserID = player.PlayerCharacter.ID, Relation = relation })) { player.FriendsAdd(user.ID, relation); pkg.WriteInt(user.ID); pkg.WriteString(user.NickName); pkg.WriteBoolean(user.Sex); pkg.WriteString(user.Style); pkg.WriteString(user.Colors); pkg.WriteString(user.Skin); pkg.WriteInt((user.State == 1) ? 1 : 0); pkg.WriteInt(user.Grade); pkg.WriteInt(user.Hide); pkg.WriteString(user.ConsortiaName); pkg.WriteInt(user.Total); pkg.WriteInt(user.Escape); pkg.WriteInt(user.Win); pkg.WriteInt(user.Offer); pkg.WriteInt(user.Repute); pkg.WriteInt(relation); pkg.WriteString(user.UserName); pkg.WriteInt(user.Nimbus); pkg.WriteInt(user.FightPower); pkg.WriteInt(user.AchievementPoint); pkg.WriteString(user.Honor); if (relation != 1 && user.State != 0) { GSPacketIn response = new GSPacketIn(166, player.PlayerCharacter.ID); response.WriteInt(user.ID); response.WriteString(player.PlayerCharacter.NickName); if (other != null) { other.Out.SendTCP(response); } else { GameServer.Instance.LoginServer.SendPacket(response); } } player.Out.SendTCP(pkg); } } else { player.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("FriendAddHandler.Falied", new object[0])); } } else { player.Out.SendMessage(eMessageType.ERROR, LanguageMgr.GetTranslation("FriendAddHandler.Success", new object[0])); } } result = 0; } return(result); }
/// <summary> /// Handle the packet /// </summary> /// <param name="client"></param> /// <param name="packet"></param> /// <returns></returns> public void HandlePacket(GameClient client, GSPacketIn packet) { int unknown = packet.ReadByte(); int position = packet.ReadByte(); int housenumber = packet.ReadShort(); int method = packet.ReadByte(); House house = HouseMgr.GetHouse(client.Player.CurrentRegionID, housenumber); if (house == null) { return; } if (client.Player == null) { return; } //log.DebugFormat("House PickupItem - Method: {0}, Position: {0}", method, position); switch (method) { case 1: //garden item // no permission to remove items from the garden, return if (!house.CanChangeGarden(client.Player, DecorationPermissions.Remove)) { return; } foreach (var entry in house.OutdoorItems) { // continue if this is not the item in question OutdoorItem oitem = entry.Value; if (oitem.Position != position) { continue; } int i = entry.Key; GameServer.Database.DeleteObject(oitem.DatabaseItem); //delete the database instance // return indoor item into inventory item, add to player inventory var invitem = GameInventoryItem.Create((house.OutdoorItems[i]).BaseItem); if (client.Player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, invitem)) { InventoryLogging.LogInventoryAction("(HOUSE;" + house.HouseNumber + ")", client.Player, eInventoryActionType.Other, invitem.Template, invitem.Count); } house.OutdoorItems.Remove(i); // update garden client.Out.SendGarden(house); ChatUtil.SendSystemMessage(client, "Garden object removed."); ChatUtil.SendSystemMessage(client, string.Format("You get {0} and put it in your backpack.", invitem.Name)); return; } //no object @ position ChatUtil.SendSystemMessage(client, "There is no Garden Tile at slot " + position + "!"); break; case 2: case 3: //wall/floor mode // no permission to remove items from the interior, return if (!house.CanChangeInterior(client.Player, DecorationPermissions.Remove)) { return; } if (house.IndoorItems.ContainsKey(position) == false) { return; } IndoorItem iitem = house.IndoorItems[position]; if (iitem == null) { client.Player.Out.SendMessage("error: id was null", eChatType.CT_Help, eChatLoc.CL_SystemWindow); return; } if (iitem.BaseItem != null) { var item = GameInventoryItem.Create((house.IndoorItems[(position)]).BaseItem); if (GetItemBack(item)) { if (client.Player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, item)) { string removalMsg = string.Format("The {0} is cleared from the {1}.", item.Name, (method == 2 ? "wall surface" : "floor")); ChatUtil.SendSystemMessage(client, removalMsg); InventoryLogging.LogInventoryAction("(HOUSE;" + house.HouseNumber + ")", client.Player, eInventoryActionType.Other, item.Template, item.Count); } else { ChatUtil.SendSystemMessage(client, "You need place in your inventory !"); return; } } else { ChatUtil.SendSystemMessage(client, "The " + item.Name + " is cleared from the wall surface."); } } else if (iitem.DatabaseItem.BaseItemID.Contains("GuildBanner")) { var it = new ItemTemplate { Id_nb = iitem.DatabaseItem.BaseItemID, CanDropAsLoot = false, IsDropable = true, IsPickable = true, IsTradable = true, Item_Type = 41, Level = 1, MaxCharges = 1, MaxCount = 1, Model = iitem.DatabaseItem.Model, Emblem = iitem.DatabaseItem.Emblem, Object_Type = (int)eObjectType.HouseWallObject, Realm = 0, Quality = 100 }; string[] idnb = iitem.DatabaseItem.BaseItemID.Split('_'); it.Name = idnb[1] + "'s Banner"; // TODO: Once again with guild banners, templates are memory only and will not load correctly once player logs out - tolakram var inv = GameInventoryItem.Create(it); if (client.Player.Inventory.AddItem(eInventorySlot.FirstEmptyBackpack, inv)) { string invMsg = string.Format("The {0} is cleared from the {1}.", inv.Name, (method == 2 ? "wall surface" : "floor")); ChatUtil.SendSystemMessage(client, invMsg); InventoryLogging.LogInventoryAction("(HOUSE;" + house.HouseNumber + ")", client.Player, eInventoryActionType.Other, inv.Template, inv.Count); } else { ChatUtil.SendSystemMessage(client, "You need place in your inventory !"); return; } } else if (method == 2) { ChatUtil.SendSystemMessage(client, "The decoration item is cleared from the wall surface."); } else { ChatUtil.SendSystemMessage(client, "The decoration item is cleared from the floor."); } GameServer.Database.DeleteObject((house.IndoorItems[(position)]).DatabaseItem); house.IndoorItems.Remove(position); var pak = new GSTCPPacketOut(client.Out.GetPacketCode(eServerPackets.HousingItem)); pak.WriteShort((ushort)housenumber); pak.WriteByte(0x01); pak.WriteByte(0x00); pak.WriteByte((byte)position); pak.WriteByte(0x00); foreach (GamePlayer plr in house.GetAllPlayersInHouse()) { plr.Out.SendTCP(pak); } break; } }
public bool RemovePlayerUnsafe(GamePlayer player, bool isKick) { int index = -1; GamePlayer[] places; Monitor.Enter(places = this.m_places); try { for (int i = 0; i < 8; i++) { if (this.m_places[i] == player) { this.m_places[i] = null; this.m_playerState[i] = 0; this.m_placesState[i] = -1; this.m_playerCount--; index = i; break; } } } finally { Monitor.Exit(places); } if (index != -1) { this.UpdatePosUnsafe(index, true); player.CurrentRoom = null; GSPacketIn pkg = player.Out.SendRoomPlayerRemove(player); this.SendToAll(pkg); if (isKick) { player.Out.SendMessage(eMessageType.ChatERROR, LanguageMgr.GetTranslation("Game.Server.SceneGames.KickRoom", new object[0])); } bool isChangeHost = false; if (this.m_host == player) { if (this.m_playerCount > 0) { for (int i = 0; i < 8; i++) { if (this.m_places[i] != null) { this.SetHost(this.m_places[i]); isChangeHost = true; break; } } } else { this.m_host = null; } } if (this.IsPlaying) { if (this.m_game != null) { if (isChangeHost && this.m_game is PVEGame) { PVEGame pveGame = this.m_game as PVEGame; foreach (Player p in pveGame.Players.Values) { if (p.PlayerDetail == this.m_host) { p.Ready = false; } } } this.m_game.RemovePlayer(player, isKick); } if (this.BattleServer != null) { if (this.m_game != null) { this.BattleServer.Server.SendPlayerDisconnet(this.Game.Id, player.GamePlayerId, this.RoomId); if (this.PlayerCount == 0) { this.BattleServer.RemoveRoom(this); } player.RemoveGP(player.PlayerCharacter.Grade * 12); if (this.GameType == eGameType.Guild) { player.RemoveOffer(15); } else { if (this.GameType == eGameType.Free) { player.RemoveOffer(5); } } } else { this.SendMessage(eMessageType.ChatERROR, LanguageMgr.GetTranslation("Game.Server.SceneGames.PairUp.Failed", new object[0])); RoomMgr.AddAction(new CancelPickupAction(this.BattleServer, this)); this.BattleServer.RemoveRoom(this); this.IsPlaying = false; } } } this.UpdateGameStyle(); if (isChangeHost) { if (!(this.m_game is PVEGame) || !this.IsPlaying) { this.ResetRoomSetting(); } } } return(index != -1); }
public int HandlePacket(GameClient client, GSPacketIn packet) { ClientErrorLog.log.Error("client log: " + packet.ReadString()); return(0); }
public void SendToTeam(GSPacketIn pkg, int team) { this.SendToTeam(pkg, team, null); }
public bool HandleCommand(TankHotSpringLogicProcessor process, GamePlayer player, GSPacketIn packet) { if ((player.CurrentHotSpringRoom != null) && (player.CurrentHotSpringRoom.RoomState == eRoomState.FREE)) { string str = packet.ReadString(); int num = packet.ReadInt(); player.X = packet.ReadInt(); player.Y = packet.ReadInt(); player.CurrentHotSpringRoom.ReturnPacketForScene(player, packet); return(true); } return(false); }
/// <summary> /// Called when the client receives bytes /// </summary> /// <param name="numBytes">The number of bytes received</param> public void ReceiveBytes(int numBytes) { lock (m_SyncLock) { byte[] buffer = m_client.ReceiveBuffer; //End Offset of buffer int bufferSize = m_client.ReceiveBufferOffset + numBytes; //Size < minimum if (bufferSize < GSPacketIn.HDR_SIZE) { m_client.ReceiveBufferOffset = bufferSize; // undo buffer read return; } //Reset the offset m_client.ReceiveBufferOffset = 0; //Current offset into the buffer int curOffset = 0; do { int packetLength = (buffer[curOffset] << 8) + buffer[curOffset + 1] + GSPacketIn.HDR_SIZE; int dataLeft = bufferSize - curOffset; if (dataLeft < packetLength) { Buffer.BlockCopy(buffer, curOffset, buffer, 0, dataLeft); m_client.ReceiveBufferOffset = dataLeft; break; } // ** commented out because this hasn't been used in forever and crutching // ** to it only hurts performance in a design that needs to be reworked // ** anyways. // ** - tobz //var curPacket = new byte[packetLength]; //Buffer.BlockCopy(buffer, curOffset, curPacket, 0, packetLength); //curPacket = m_encoding.DecryptPacket(buffer, false); int packetEnd = curOffset + packetLength; int calcCheck = CalculateChecksum(buffer, curOffset, packetLength - 2); int pakCheck = (buffer[packetEnd - 2] << 8) | (buffer[packetEnd - 1]); if (pakCheck != calcCheck) { if (log.IsWarnEnabled) { log.WarnFormat( "Bad TCP packet checksum (packet:0x{0:X4} calculated:0x{1:X4}) -> disconnecting\nclient: {2}\ncurOffset={3}; packetLength={4}", pakCheck, calcCheck, m_client.ToString(), curOffset, packetLength); } if (log.IsInfoEnabled) { log.Info("Last client sent/received packets (from older to newer):"); foreach (IPacket prevPak in GetLastPackets()) { log.Info(prevPak.ToHumanReadable()); } log.Info(Marshal.ToHexDump("Last Received Bytes : ", buffer)); } m_client.Disconnect(); return; } var pak = new GSPacketIn(packetLength - GSPacketIn.HDR_SIZE); pak.Load(buffer, curOffset, packetLength); try { HandlePacket(pak); } catch (Exception e) { if (log.IsErrorEnabled) { log.Error("HandlePacket(pak)", e); } } curOffset += packetLength; } while (bufferSize - 1 > curOffset); if (bufferSize - 1 == curOffset) { buffer[0] = buffer[curOffset]; m_client.ReceiveBufferOffset = 1; } } }
public void HandlePacket(GameClient client, GSPacketIn packet) { int unk1 = packet.ReadByte(); int position = packet.ReadByte(); ushort housenumber = packet.ReadShort(); ushort angle = packet.ReadShort(); ushort unk2 = packet.ReadShort(); // rotation only works for inside items if (!client.Player.InHouse) { return; } // house is null, return var house = HouseMgr.GetHouse(housenumber); if (house == null) { return; } // player is null, return if (client.Player == null) { return; } // no permission to change the interior, return if (!house.CanChangeInterior(client.Player, DecorationPermissions.Add)) { return; } if (house.IndoorItems.ContainsKey(position) == false) { return; } // grab the item in question IndoorItem iitem = house.IndoorItems[position]; if (iitem == null) { client.Player.Out.SendMessage("error: id was null", eChatType.CT_Help, eChatLoc.CL_SystemWindow); return; } //should this ever happen? // adjust the item's roation int old = iitem.Rotation; iitem.Rotation = (iitem.Rotation + angle) % 360; if (iitem.Rotation < 0) { iitem.Rotation = 360 + iitem.Rotation; } iitem.DatabaseItem.Rotation = iitem.Rotation; // save item GameServer.Database.SaveObject(iitem.DatabaseItem); ChatUtil.SendSystemMessage(client, string.Format("Interior decoration rotated from {0} degrees to {1}", old, iitem.Rotation)); // update all players in the house. foreach (GamePlayer plr in house.GetAllPlayersInHouse()) { plr.Client.Out.SendFurniture(house, position); } }
public void HandlePacket(GSPacketIn packet) { if (packet == null || m_client == null) { return; } int code = packet.ID; Statistics.BytesIn += packet.PacketSize; Statistics.PacketsIn++; SavePacket(packet); IPacketHandler packetHandler = null; if (code < m_packetHandlers.Length) { packetHandler = m_packetHandlers[code]; } else if (log.IsErrorEnabled) { log.ErrorFormat("Received packet code is outside of m_packetHandlers array bounds! " + m_client); log.Error(Marshal.ToHexDump( String.Format("===> <{2}> Packet 0x{0:X2} (0x{1:X2}) length: {3} (ThreadId={4})", code, code ^ 168, (m_client.Account != null) ? m_client.Account.Name : m_client.TcpEndpoint, packet.PacketSize, Thread.CurrentThread.ManagedThreadId), packet.ToArray())); } // make sure we can handle this packet at this stage var preprocess = m_packetPreprocessor.CanProcessPacket(m_client, packet); if (!preprocess) { // this packet can't be processed by this client right now, for whatever reason log.Info("PacketPreprocessor: Preprocessor prevents handling of a packet with packet.ID=" + packet.ID); return; } if (packetHandler != null) { Timer monitorTimer = null; if (log.IsDebugEnabled) { try { monitorTimer = new Timer(10000); m_activePacketHandler = packetHandler; m_handlerThreadID = Thread.CurrentThread.ManagedThreadId; monitorTimer.Elapsed += HandlePacketTimeout; monitorTimer.Start(); } catch (Exception e) { if (log.IsErrorEnabled) { log.Error("Starting packet monitor timer", e); } if (monitorTimer != null) { monitorTimer.Stop(); monitorTimer.Close(); monitorTimer = null; } } } #if LOGACTIVESTACKS //Put the current thread into the active thread list! //No need to lock the hashtable since we created it //synchronized! One reader, multiple writers supported! m_activePacketThreads.Add(Thread.CurrentThread, m_client); #endif long start = Environment.TickCount; try { packetHandler.HandlePacket(m_client, packet); } catch (Exception e) { if (log.IsErrorEnabled) { string client = (m_client == null ? "null" : m_client.ToString()); log.Error( "Error while processing packet (handler=" + packetHandler.GetType().FullName + " client: " + client + ")", e); } } #if LOGACTIVESTACKS finally { //Remove the thread from the active list after execution //No need to lock the hashtable since we created it //synchronized! One reader, multiple writers supported! m_activePacketThreads.Remove(Thread.CurrentThread); } #endif long timeUsed = Environment.TickCount - start; if (monitorTimer != null) { monitorTimer.Stop(); monitorTimer.Close(); } m_activePacketHandler = null; if (timeUsed > 1000) { string source = ((m_client.Account != null) ? m_client.Account.Name : m_client.TcpEndpoint); if (log.IsWarnEnabled) { log.Warn("(" + source + ") Handle packet Thread " + Thread.CurrentThread.ManagedThreadId + " " + packetHandler + " took " + timeUsed + "ms!"); } } } }
public int HandlePacket(GameClient client, GSPacketIn packet) { var LittleGame_cmd = packet.ReadByte(); return(0); }
public void HandlePacket(GameClient client, GSPacketIn packet) { new PlayerInitRequestAction(client.Player).Start(1); }
public void SendToAll(GSPacketIn pkg) { this.SendToAll(pkg, null); }
public void Execute() { if (this.m_room.CanStart()) { List <GamePlayer> players = this.m_room.GetPlayers(); if (this.m_room.RoomType == eRoomType.Freedom) { List <IGamePlayer> list = new List <IGamePlayer>(); List <IGamePlayer> list2 = new List <IGamePlayer>(); foreach (GamePlayer current in players) { if (current != null) { if (current.CurrentRoomTeam == 1) { list.Add(current); } else { list2.Add(current); } } } BaseGame game = GameMgr.StartPVPGame(this.m_room.RoomId, list, list2, this.m_room.MapId, this.m_room.RoomType, this.m_room.GameType, (int)this.m_room.TimeMode); this.StartGame(game); } else { if (this.m_room.RoomType == eRoomType.Dungeon || this.m_room.RoomType == eRoomType.Freshman || this.m_room.RoomType == eRoomType.Lanbyrinth || this.m_room.RoomType == eRoomType.ConsortiaBoss || this.m_room.RoomType == eRoomType.AcademyDungeon || this.m_room.RoomType == eRoomType.FightLib || this.m_room.RoomType == eRoomType.WordBoss) { List <IGamePlayer> list3 = new List <IGamePlayer>(); foreach (GamePlayer current2 in players) { if (current2 != null) { list3.Add(current2); } } this.UpdatePveRoomTimeMode(); BaseGame game2 = GameMgr.StartPVEGame(this.m_room.RoomId, list3, this.m_room.MapId, this.m_room.RoomType, this.m_room.GameType, (int)this.m_room.TimeMode, this.m_room.HardLevel, this.m_room.LevelLimits); this.StartGame(game2); } else { if (this.m_room.RoomType == eRoomType.Match) { this.m_room.UpdateAvgLevel(); BattleServer battleServer = BattleMgr.AddRoom(this.m_room); if (battleServer != null) { this.m_room.BattleServer = battleServer; this.m_room.IsPlaying = true; this.m_room.SendStartPickUp(); } else { GSPacketIn pkg = this.m_room.Host.Out.SendMessage(eMessageType.ChatERROR, "Game đã bắt đầu!"); this.m_room.SendToAll(pkg, this.m_room.Host); this.m_room.SendCancelPickUp(); } } } } RoomMgr.WaitingRoom.SendUpdateRoom(this.m_room); } }
public void HandlePacket(GameClient client, GSPacketIn packet) { new HandleGroupInviteAction(client.Player).Start(1); }
public int HandlePacket(GameClient client, GSPacketIn packet) { AASInfo aASInfo = new AASInfo(); aASInfo.UserID = client.Player.PlayerCharacter.ID; bool flag = false; bool flag2 = packet.ReadBoolean(); bool flag3; if (flag2) { aASInfo.Name = ""; aASInfo.IDNumber = ""; aASInfo.State = 0; flag3 = true; } else { aASInfo.Name = packet.ReadString(); aASInfo.IDNumber = packet.ReadString(); flag3 = this.CheckIDNumber(aASInfo.IDNumber); if (aASInfo.IDNumber != "") { client.Player.IsAASInfo = true; int num = Convert.ToInt32(aASInfo.IDNumber.Substring(6, 4)); int value = Convert.ToInt32(aASInfo.IDNumber.Substring(10, 2)); if (DateTime.Now.Year.CompareTo(num + 18) > 0 || (DateTime.Now.Year.CompareTo(num + 18) == 0 && DateTime.Now.Month.CompareTo(value) >= 0)) { client.Player.IsMinor = false; } } if (aASInfo.Name != "" && flag3) { aASInfo.State = 1; } else { aASInfo.State = 0; } } if (flag3) { client.Out.SendAASState(false); using (ProduceBussiness produceBussiness = new ProduceBussiness()) { flag = produceBussiness.AddAASInfo(aASInfo); client.Out.SendAASInfoSet(flag); } } if (flag && aASInfo.State == 1) { ItemTemplateInfo itemTemplateInfo = ItemMgr.FindItemTemplate(11019); if (itemTemplateInfo != null) { ItemInfo itemInfo = ItemInfo.CreateFromTemplate(itemTemplateInfo, 1, 107); if (itemInfo != null) { itemInfo.IsBinds = true; AbstractInventory itemInventory = client.Player.GetItemInventory(itemInfo.Template); if (itemInventory.AddItem(itemInfo, itemInventory.BeginSlot)) { client.Out.SendMessage(eMessageType.ChatNormal, LanguageMgr.GetTranslation("ASSInfoSetHandle.Success", new object[] { itemInfo.Template.Name })); } else { client.Out.SendMessage(eMessageType.ChatNormal, LanguageMgr.GetTranslation("ASSInfoSetHandle.NoPlace", new object[0])); } } } } return(0); }
public int HandlePacket(GameClient client, GSPacketIn packet) { byte type = packet.ReadByte(); return(0); }
public int HandlePacket(GameClient client, GSPacketIn packet) { if (client.Player.PlayerCharacter.ConsortiaID == 0) { return(0); } bool result = false; string msg = "ConsortiaSmithUpGradeHandler.Failed"; //using (ConsortiaBussiness db = new ConsortiaBussiness()) //{ // ConsortiaInfo info = db.GetConsortiaSingle(client.Player.PlayerCharacter.ConsortiaID); ConsortiaInfo info = Managers.ConsortiaMgr.FindConsortiaInfo(client.Player.PlayerCharacter.ConsortiaID); if (info == null) { msg = "ConsortiaSmithUpGradeHandler.NoConsortia"; } else { using (ConsortiaBussiness cb = new ConsortiaBussiness()) { if (cb.UpGradeSmithConsortia(client.Player.PlayerCharacter.ConsortiaID, client.Player.PlayerCharacter.ID, ref msg)) { info.SmithLevel++; GameServer.Instance.LoginServer.SendConsortiaSmithUpGrade(info); msg = "ConsortiaSmithUpGradeHandler.Success"; result = true; } } } if (info.SmithLevel >= 3) { string msg1 = LanguageMgr.GetTranslation("ConsortiaSmithUpGradeHandler.Notice", client.Player.PlayerCharacter.ConsortiaName, info.SmithLevel); GSPacketIn pkg = new GSPacketIn((byte)ePackageType.SYS_NOTICE); pkg.WriteInt(2); pkg.WriteString(msg1); GameServer.Instance.LoginServer.SendPacket(pkg); GamePlayer[] players = Game.Server.Managers.WorldMgr.GetAllPlayers(); foreach (GamePlayer p in players) { if (p != client.Player) { p.Out.SendTCP(pkg); } } } //} packet.WriteBoolean(result); packet.WriteString(LanguageMgr.GetTranslation(msg)); client.Out.SendTCP(packet); return(1); }
public int HandlePacket(GameClient client, GSPacketIn packet) { int bagType = packet.ReadInt(); int num = packet.ReadInt(); string translateId = null; List <ShopItemInfo> list = new List <ShopItemInfo>(); if (client.Player.PlayerCharacter.HasBagPassword && client.Player.PlayerCharacter.IsLocked) { client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("Bag.Locked", new object[0])); return(0); } ItemInfo itemInfo; if (num == -1) { int num2 = packet.ReadInt(); int num3 = packet.ReadInt(); int num4 = 0; int num5 = 0; ItemTemplateInfo goods = ItemMgr.FindItemTemplate(num2); itemInfo = ItemInfo.CreateFromTemplate(goods, 1, 102); list = ShopMgr.FindShopbyTemplatID(num2); for (int i = 0; i < list.Count; i++) { if (list[i].APrice1 == -1 && list[i].AValue1 != 0) { num5 = list[i].AValue1; itemInfo.ValidDate = list[i].AUnit; } } if (itemInfo != null) { if (num4 <= client.Player.PlayerCharacter.Gold && num5 <= client.Player.PlayerCharacter.Money) { client.Player.RemoveMoney(num5); client.Player.RemoveGold(num4); LogMgr.LogMoneyAdd(LogMoneyType.Shop, LogMoneyType.Shop_Card, client.Player.PlayerCharacter.ID, num5, client.Player.PlayerCharacter.Money, num4, 0, 0, 0, "牌子编号", itemInfo.TemplateID.ToString(), num3.ToString()); translateId = "CardUseHandler.Success"; } else { itemInfo = null; } } } else { itemInfo = client.Player.PropBag.GetItemAt(num); translateId = "CardUseHandler.Success"; } if (itemInfo != null) { string translateId2 = string.Empty; if (itemInfo.Template.Property1 != 21) { AbstractBuffer abstractBuffer = BufferList.CreateBuffer(itemInfo.Template, itemInfo.ValidDate); if (abstractBuffer != null) { abstractBuffer.Start(client.Player); if (num != -1) { client.Player.PropBag.RemoveCountFromStack(itemInfo, 1); } } client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation(translateId, new object[0])); } else { if (itemInfo.IsValidItem()) { client.Player.PlayerCharacter.GP += client.Player.AddGP(itemInfo.Template.Property2 * itemInfo.Count);//fix add nuoc kinh nghiem if (itemInfo.Template.CanDelete) { client.Player.RemoveAt((eBageType)bagType, num); translateId2 = "GPDanUser.Success"; } } client.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation(translateId2, new object[] { itemInfo.Template.Property2 *itemInfo.Count })); } } return(0); }
public void HandlePacket(GameClient client, GSPacketIn packet) { try { int unknow1 = packet.ReadByte(); // 1=Money 0=Item (?) int slot = packet.ReadByte(); // Item/money slot ushort housenumber = packet.ReadShort(); // N° of house int unknow2 = (byte)packet.ReadByte(); _position = (byte)packet.ReadByte(); int method = packet.ReadByte(); // 2=Wall 3=Floor int rotation = packet.ReadByte(); // garden items only var xpos = (short)packet.ReadShort(); // x for inside objs var ypos = (short)packet.ReadShort(); // y for inside objs. //Log.Info("U1: " + unknow1 + " - U2: " + unknow2); ChatUtil.SendDebugMessage(client, string.Format("HousingPlaceItem: slot: {0}, position: {1}, method: {2}, xpos: {3}, ypos: {4}", slot, _position, method, xpos, ypos)); if (client.Player == null) { return; } // house must exist House house = HouseMgr.GetHouse(client.Player.CurrentRegionID, housenumber); if (house == null) { client.Player.Out.SendInventorySlotsUpdate(null); return; } if ((slot >= 244) && (slot <= 248)) // money { // check that player has permission to pay rent if (!house.CanPayRent(client.Player)) { client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } long moneyToAdd = _position; switch (slot) { case 248: moneyToAdd *= 1; break; case 247: moneyToAdd *= 100; break; case 246: moneyToAdd *= 10000; break; case 245: moneyToAdd *= 10000000; break; case 244: moneyToAdd *= 10000000000; break; } client.Player.TempProperties.setProperty(HousingConstants.MoneyForHouseRent, moneyToAdd); client.Player.TempProperties.setProperty(HousingConstants.HouseForHouseRent, house); client.Player.Out.SendInventorySlotsUpdate(null); client.Player.Out.SendHousePayRentDialog("Housing07"); return; } // make sure the item dropped still exists InventoryItem orgitem = client.Player.Inventory.GetItem((eInventorySlot)slot); if (orgitem == null) { client.Player.Out.SendInventorySlotsUpdate(null); return; } if (orgitem.Id_nb == "house_removal_deed") { client.Out.SendInventorySlotsUpdate(null); // make sure player has owner permissions if (!house.HasOwnerPermissions(client.Player)) { ChatUtil.SendSystemMessage(client.Player, "You don't own this house!"); return; } client.Player.TempProperties.setProperty(DeedWeak, new WeakRef(orgitem)); client.Player.TempProperties.setProperty(TargetHouse, house); client.Player.Out.SendCustomDialog(LanguageMgr.GetTranslation(client.Account.Language, "WARNING: You are about to delete this house and all indoor and outdoor items attached to it!"), HouseRemovalDialog); return; } if (orgitem.Id_nb.Contains("cottage_deed") || orgitem.Id_nb.Contains("house_deed") || orgitem.Id_nb.Contains("villa_deed") || orgitem.Id_nb.Contains("mansion_deed")) { client.Out.SendInventorySlotsUpdate(null); // make sure player has owner permissions if (!house.HasOwnerPermissions(client.Player)) { ChatUtil.SendSystemMessage(client, "You may not change other peoples houses"); return; } client.Player.TempProperties.setProperty(DeedWeak, new WeakRef(orgitem)); client.Player.TempProperties.setProperty(TargetHouse, house); client.Player.Out.SendMessage("Warning:\n This will remove *all* items from your current house!", eChatType.CT_System, eChatLoc.CL_PopupWindow); client.Player.Out.SendCustomDialog("Are you sure you want to upgrade your House?", HouseUpgradeDialog); return; } if (orgitem.Name == "deed of guild transfer") { // player needs to be in a guild to xfer a house to a guild if (client.Player.Guild == null) { client.Out.SendInventorySlotsUpdate(new[] { slot }); ChatUtil.SendSystemMessage(client, "You must be a member of a guild to do that"); return; } // player needs to own the house to be able to xfer it if (!house.HasOwnerPermissions(client.Player)) { client.Out.SendInventorySlotsUpdate(new[] { slot }); ChatUtil.SendSystemMessage(client, "You do not own this house."); return; } // guild can't already have a house if (client.Player.Guild.GuildOwnsHouse) { client.Out.SendInventorySlotsUpdate(new[] { slot }); ChatUtil.SendSystemMessage(client, "Your Guild already owns a house."); return; } // player needs to be a GM in the guild to xfer his personal house to the guild if (!client.Player.Guild.HasRank(client.Player, Guild.eRank.Leader)) { client.Out.SendInventorySlotsUpdate(new[] { slot }); ChatUtil.SendSystemMessage(client, "You are not the leader of a guild."); return; } if (HouseMgr.HouseTransferToGuild(client.Player, house)) { // This will still take the item even if player answers NO to confirmation. // I'm fixing consignment, not housing, and frankly I'm sick of fixing stuff! :) - tolakram client.Player.Inventory.RemoveItem(orgitem); InventoryLogging.LogInventoryAction(client.Player, "(HOUSE;" + housenumber + ")", eInventoryActionType.Other, orgitem.Template, orgitem.Count); client.Player.Guild.UpdateGuildWindow(); } return; } if (house.CanChangeInterior(client.Player, DecorationPermissions.Remove)) { if (orgitem.Name == "interior banner removal") { house.IndoorGuildBanner = false; ChatUtil.SendSystemMessage(client.Player, "Scripts.Player.Housing.InteriorBannersRemoved", null); return; } if (orgitem.Name == "interior shield removal") { house.IndoorGuildShield = false; ChatUtil.SendSystemMessage(client.Player, "Scripts.Player.Housing.InteriorShieldsRemoved", null); return; } if (orgitem.Name == "carpet removal") { house.Rug1Color = 0; house.Rug2Color = 0; house.Rug3Color = 0; house.Rug4Color = 0; ChatUtil.SendSystemMessage(client.Player, "Scripts.Player.Housing.CarpetsRemoved", null); return; } } if (house.CanChangeExternalAppearance(client.Player)) { if (orgitem.Name == "exterior banner removal") { house.OutdoorGuildBanner = false; ChatUtil.SendSystemMessage(client.Player, "Scripts.Player.Housing.OutdoorBannersRemoved", null); return; } if (orgitem.Name == "exterior shield removal") { house.OutdoorGuildShield = false; ChatUtil.SendSystemMessage(client.Player, "Scripts.Player.Housing.OutdoorShieldsRemoved", null); return; } } int objType = orgitem.Object_Type; if (objType == 49) // Garden items { method = 1; } else if (orgitem.Id_nb == "housing_porch_deed" || orgitem.Id_nb == "housing_porch_remove_deed" || orgitem.Id_nb == "housing_consignment_deed") { method = 4; } else if (objType >= 59 && objType <= 64) // Outdoor Roof/Wall/Door/Porch/Wood/Shutter/awning Material item type { ChatUtil.SendSystemMessage(client.Player, "Scripts.Player.Housing.HouseUseMaterials", null); return; } else if (objType == 56 || objType == 52 || (objType >= 69 && objType <= 71)) // Indoor carpets 1-4 { ChatUtil.SendSystemMessage(client.Player, "Scripts.Player.Housing.HouseUseCarpets", null); return; } else if (objType == 57 || objType == 58 || // Exterior banner/shield objType == 66 || objType == 67) // Interior banner/shield { method = 6; } else if (objType == 53 || objType == 55 || objType == 68) { method = 5; } else if (objType == (int)eObjectType.HouseVault) { method = 7; } ChatUtil.SendDebugMessage(client, string.Format("Place Item: method: {0}", method)); int pos; switch (method) { case 1: // GARDEN OBJECT { if (client.Player.InHouse) { client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } // no permissions to add to the garden, return if (!house.CanChangeGarden(client.Player, DecorationPermissions.Add)) { client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } // garden is already full, return if (house.OutdoorItems.Count >= Properties.MAX_OUTDOOR_HOUSE_ITEMS) { ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.GardenMaxObjects", null); client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } // create an outdoor item to represent the item being placed var oitem = new OutdoorItem { BaseItem = GameServer.Database.FindObjectByKey <ItemTemplate>(orgitem.Id_nb), Model = orgitem.Model, Position = (byte)_position, Rotation = (byte)rotation }; //add item in db pos = GetFirstFreeSlot(house.OutdoorItems.Keys); DBHouseOutdoorItem odbitem = oitem.CreateDBOutdoorItem(housenumber); oitem.DatabaseItem = odbitem; GameServer.Database.AddObject(odbitem); // remove the item from the player's inventory client.Player.Inventory.RemoveItem(orgitem); InventoryLogging.LogInventoryAction(client.Player, "(HOUSE;" + housenumber + ")", eInventoryActionType.Other, orgitem.Template, orgitem.Count); //add item to outdooritems house.OutdoorItems.Add(pos, oitem); ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.GardenItemPlaced", Properties.MAX_OUTDOOR_HOUSE_ITEMS - house.OutdoorItems.Count); ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.GardenItemPlacedName", orgitem.Name); // update all nearby players foreach (GamePlayer player in WorldMgr.GetPlayersCloseToSpot(house.RegionID, house, WorldMgr.OBJ_UPDATE_DISTANCE)) { player.Out.SendGarden(house); } // save the house house.SaveIntoDatabase(); break; } case 2: // WALL OBJECT case 3: // FLOOR OBJECT { if (client.Player.InHouse == false) { client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } // no permission to add to the interior, return if (!house.CanChangeInterior(client.Player, DecorationPermissions.Add)) { client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } // not a wall object, return if (!IsSuitableForWall(orgitem) && method == 2) { ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.NotWallObject", null); client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } // not a floor object, return if (objType != 51 && method == 3) { ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.NotFloorObject", null); client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } // interior already has max items, return if (house.IndoorItems.Count >= GetMaxIndoorItemsForHouse(house.Model)) { ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.IndoorMaxItems", GetMaxIndoorItemsForHouse(house.Model)); client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } // create an indoor item to represent the item being placed var iitem = new IndoorItem { Model = orgitem.Model, Color = orgitem.Color, X = xpos, Y = ypos, Size = orgitem.DPS_AF > 3 ? orgitem.DPS_AF : 100, // max size is 255 Position = _position, PlacementMode = method, BaseItem = null }; // figure out proper rotation for item int properRotation = client.Player.Heading / 10; properRotation = properRotation.Clamp(0, 360); if (method == 2 && IsSuitableForWall(orgitem)) { properRotation = 360; if (objType != 50) { client.Out.SendInventorySlotsUpdate(new[] { slot }); } } iitem.Rotation = properRotation; pos = GetFirstFreeSlot(house.IndoorItems.Keys); if (objType == 50 || objType == 51) { //its a housing item, so lets take it! client.Player.Inventory.RemoveItem(orgitem); InventoryLogging.LogInventoryAction(client.Player, "(HOUSE;" + housenumber + ")", eInventoryActionType.Other, orgitem.Template, orgitem.Count); //set right base item, so we can recreate it on take. if (orgitem.Id_nb.Contains("GuildBanner")) { iitem.BaseItem = orgitem.Template; iitem.Size = 50; // Banners have to be reduced in size } else { iitem.BaseItem = GameServer.Database.FindObjectByKey <ItemTemplate>(orgitem.Id_nb); } } DBHouseIndoorItem idbitem = iitem.CreateDBIndoorItem(housenumber); iitem.DatabaseItem = idbitem; GameServer.Database.AddObject(idbitem); house.IndoorItems.Add(pos, iitem); // let player know the item has been placed ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.IndoorItemPlaced", (GetMaxIndoorItemsForHouse(house.Model) - house.IndoorItems.Count)); switch (method) { case 2: ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.IndoorWallPlaced", orgitem.Name); break; case 3: ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.IndoorFloorPlaced", orgitem.Name); break; } // update furniture for all players in the house foreach (GamePlayer plr in house.GetAllPlayersInHouse()) { plr.Out.SendFurniture(house, pos); } break; } case 4: // PORCH { // no permission to add to the garden, return if (!house.CanChangeGarden(client.Player, DecorationPermissions.Add)) { client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } switch (orgitem.Id_nb) { case "housing_porch_deed": // try and add the porch if (house.AddPorch()) { // remove the original item from the player's inventory client.Player.Inventory.RemoveItem(orgitem); InventoryLogging.LogInventoryAction(client.Player, "(HOUSE;" + housenumber + ")", eInventoryActionType.Other, orgitem.Template, orgitem.Count); } else { ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.PorchAlready", null); client.Out.SendInventorySlotsUpdate(new[] { slot }); } return; case "housing_porch_remove_deed": var consignmentMerchant = house.ConsignmentMerchant; if (consignmentMerchant != null && (consignmentMerchant.DBItems(client.Player).Count > 0 || consignmentMerchant.TotalMoney > 0)) { ChatUtil.SendSystemMessage(client, "All items and money must be removed from your consigmment merchant in order to remove the porch!"); client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } // try and remove the porch if (house.RemovePorch()) { // remove the original item from the player's inventory client.Player.Inventory.RemoveItem(orgitem); InventoryLogging.LogInventoryAction(client.Player, "(HOUSE;" + housenumber + ")", eInventoryActionType.Other, orgitem.Template, orgitem.Count); } else { ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.PorchNone", null); client.Out.SendInventorySlotsUpdate(new[] { slot }); } return; case "housing_consignment_deed": { // make sure there is a porch for this consignment merchant! if (!house.Porch) { ChatUtil.SendSystemMessage(client, "Your House needs a Porch first."); client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } // try and add a new consignment merchant if (house.AddConsignment(0)) { // remove the original item from the player's inventory client.Player.Inventory.RemoveItem(orgitem); InventoryLogging.LogInventoryAction(client.Player, "(HOUSE;" + housenumber + ")", eInventoryActionType.Other, orgitem.Template, orgitem.Count); } else { ChatUtil.SendSystemMessage(client, "You can not add a Consignment Merchant here."); client.Out.SendInventorySlotsUpdate(new[] { slot }); } return; } default: ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.PorchNotItem", null); client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } } case 5: // HOOKPOINT { if (client.Player.InHouse == false) { client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } // no permission to add to the interior, return if (!house.CanChangeInterior(client.Player, DecorationPermissions.Add)) { client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } // don't allow non-hookpoint items to be dropped on hookpoints if (IsSuitableForHookpoint(orgitem) == false) { client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } // if the hookpoint doesn't exist, prompt player to Log it in the database for us if (house.GetHookpointLocation((uint)_position) == null) { client.Out.SendInventorySlotsUpdate(new[] { slot }); if (client.Account.PrivLevel == (int)ePrivLevel.Admin) { if (client.Player.TempProperties.getProperty <bool>(HousingConstants.AllowAddHouseHookpoint, false)) { ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.HookPointID", +_position); ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.HookPointCloser", null); client.Player.Out.SendCustomDialog(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Player.Housing.HookPointLogLoc"), LogLocation); } else { ChatUtil.SendDebugMessage(client, "use '/house addhookpoints' to allow addition of new housing hookpoints."); } } } else if (house.GetHookpointLocation((uint)_position) != null) { var point = new DBHouseHookpointItem { HouseNumber = house.HouseNumber, ItemTemplateID = orgitem.Id_nb, HookpointID = (uint)_position }; // If we already have soemthing here, do not place more foreach (var hpitem in GameServer.Database.SelectObjects <DBHouseHookpointItem>("`HouseNumber` = @HouseNumber", new QueryParameter("@HouseNumber", house.HouseNumber))) { if (hpitem.HookpointID == point.HookpointID) { ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.HookPointAlready", null); client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } } if (house.HousepointItems.ContainsKey(point.HookpointID) == false) { house.HousepointItems.Add(point.HookpointID, point); house.FillHookpoint((uint)_position, orgitem.Id_nb, client.Player.Heading, 0); } else { string error = string.Format("Hookpoint already has item on attempt to attach {0} to hookpoint {1} for house {2}!", orgitem.Id_nb, _position, house.HouseNumber); log.ErrorFormat(error); client.Out.SendInventorySlotsUpdate(new[] { slot }); throw new Exception(error); } // add the item to the database GameServer.Database.AddObject(point); // remove the original item from the player's inventory client.Player.Inventory.RemoveItem(orgitem); InventoryLogging.LogInventoryAction(client.Player, "(HOUSE;" + housenumber + ")", eInventoryActionType.Other, orgitem.Template, orgitem.Count); ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.HookPointAdded", null); // save the house house.SaveIntoDatabase(); } else { ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.HookPointNot", null); client.Out.SendInventorySlotsUpdate(new[] { slot }); } // broadcast updates house.SendUpdate(); break; } case 6: { // no permission to change external appearance, return if (!house.CanChangeExternalAppearance(client.Player)) { client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } if (objType == 57) // We have outdoor banner { house.OutdoorGuildBanner = true; ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.OutdoorBannersAdded", null); client.Player.Inventory.RemoveItem(orgitem); InventoryLogging.LogInventoryAction(client.Player, "(HOUSE;" + housenumber + ")", eInventoryActionType.Other, orgitem.Template, orgitem.Count); } else if (objType == 58) // We have outdoor shield { house.OutdoorGuildShield = true; ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.OutdoorShieldsAdded", null); client.Player.Inventory.RemoveItem(orgitem); InventoryLogging.LogInventoryAction(client.Player, "(HOUSE;" + housenumber + ")", eInventoryActionType.Other, orgitem.Template, orgitem.Count); } else if (objType == 66) // We have indoor banner { house.IndoorGuildBanner = true; ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.InteriorBannersAdded", null); client.Player.Inventory.RemoveItem(orgitem); InventoryLogging.LogInventoryAction(client.Player, "(HOUSE;" + housenumber + ")", eInventoryActionType.Other, orgitem.Template, orgitem.Count); } else if (objType == 67) // We have indoor shield { house.IndoorGuildShield = true; ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.InteriorShieldsAdded", null); client.Player.Inventory.RemoveItem(orgitem); InventoryLogging.LogInventoryAction(client.Player, "(HOUSE;" + housenumber + ")", eInventoryActionType.Other, orgitem.Template, orgitem.Count); } else { ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.BadShieldBanner", null); client.Out.SendInventorySlotsUpdate(new[] { slot }); } // save the house and broadcast updates house.SaveIntoDatabase(); house.SendUpdate(); break; } case 7: // House vault. { if (client.Player.InHouse == false) { client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } // make sure the hookpoint position is valid if (_position > HousingConstants.MaxHookpointLocations) { ChatUtil.SendSystemMessage(client, "This hookpoint position is unknown, error logged."); log.Error("HOUSING: " + client.Player.Name + " working with invalid position " + _position + " in house " + house.HouseNumber + " model " + house.Model); client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } // if hookpoint doesn't exist, prompt player to Log it in the database for us if (house.GetHookpointLocation((uint)_position) == null) { client.Out.SendInventorySlotsUpdate(new[] { slot }); if (client.Account.PrivLevel == (int)ePrivLevel.Admin) { if (client.Player.TempProperties.getProperty <bool>(HousingConstants.AllowAddHouseHookpoint, false)) { ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.HookPointID", +_position); ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.HookPointCloser", null); client.Player.Out.SendCustomDialog(LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Player.Housing.HookPointLogLoc"), LogLocation); } else { ChatUtil.SendDebugMessage(client, "use '/house addhookpoints' to allow addition of new housing hookpoints."); } } return; } // make sure we have space to add another vult int vaultIndex = house.GetFreeVaultNumber(); if (vaultIndex < 0) { client.Player.Out.SendMessage("You can't add any more vaults to this house!", eChatType.CT_System, eChatLoc.CL_SystemWindow); client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } // If we already have soemthing here, do not place more foreach (var hpitem in GameServer.Database.SelectObjects <DBHouseHookpointItem>("`HouseNumber` = @HouseNumber", new QueryParameter("@HouseNumber", house.HouseNumber))) { if (hpitem.HookpointID == _position) { ChatUtil.SendSystemMessage(client, "Scripts.Player.Housing.HookPointAlready", null); client.Out.SendInventorySlotsUpdate(new[] { slot }); return; } } // create the new vault and attach it to the house var houseVault = new GameHouseVault(orgitem.Template, vaultIndex); houseVault.Attach(house, (uint)_position, (ushort)((client.Player.Heading + 2048) % 4096)); // remove the original item from the player's inventory client.Player.Inventory.RemoveItem(orgitem); InventoryLogging.LogInventoryAction(client.Player, "(HOUSE;" + housenumber + ")", eInventoryActionType.Other, orgitem.Template, orgitem.Count); // save the house and broadcast uodates house.SaveIntoDatabase(); house.SendUpdate(); return; } default: { ChatUtil.SendDebugMessage(client, "Place Item: Unknown method, do nothing."); client.Out.SendInventorySlotsUpdate(null); break; } } } catch (Exception ex) { log.Error("HousingPlaceItemHandler", ex); client.Out.SendMessage("Error processing housing action; the error has been logged!", eChatType.CT_Staff, eChatLoc.CL_SystemWindow); client.Out.SendInventorySlotsUpdate(null); } }
public override int HandlePacket(GamePlayer player, GSPacketIn packet) { int operate = packet.ReadInt(); BoxInfo box = null; int result2; if (operate == 0) { int time = packet.ReadInt(); int onlineTime = (int)DateTime.Now.Subtract(player.BoxBeginTime).TotalMinutes; box = BoxMgr.FindTemplateByCondition(0, player.PlayerCharacter.Grade, player.PlayerCharacter.BoxProgression); if (box != null && onlineTime >= time && box.Condition == time) { using (ProduceBussiness db = new ProduceBussiness()) { db.UpdateBoxProgression(player.PlayerCharacter.ID, player.PlayerCharacter.BoxProgression, player.PlayerCharacter.GetBoxLevel, player.PlayerCharacter.AddGPLastDate, DateTime.Now, time); player.PlayerCharacter.AlreadyGetBox = time; player.PlayerCharacter.BoxGetDate = DateTime.Now; } } result2 = 0; } else { int type = packet.ReadInt(); GSPacketIn pkg = packet.Clone(); pkg.ClearContext(); bool updatedb = false; bool result = true; if (type == 0) { int onlineTime = (int)DateTime.Now.Subtract(player.BoxBeginTime).TotalMinutes; box = BoxMgr.FindTemplateByCondition(0, player.PlayerCharacter.Grade, player.PlayerCharacter.BoxProgression); if (box != null && (onlineTime >= box.Condition || player.PlayerCharacter.AlreadyGetBox == box.Condition)) { using (ProduceBussiness db = new ProduceBussiness()) { if (db.UpdateBoxProgression(player.PlayerCharacter.ID, box.Condition, player.PlayerCharacter.GetBoxLevel, player.PlayerCharacter.AddGPLastDate, DateTime.Now.Date, 0)) { player.PlayerCharacter.BoxProgression = box.Condition; player.PlayerCharacter.BoxGetDate = DateTime.Now.Date; player.PlayerCharacter.AlreadyGetBox = 0; updatedb = true; } } } } else { box = BoxMgr.FindTemplateByCondition(1, player.PlayerCharacter.GetBoxLevel, Convert.ToInt32(player.PlayerCharacter.Sex)); if (box != null && player.PlayerCharacter.Grade >= box.Level) { using (ProduceBussiness db = new ProduceBussiness()) { if (db.UpdateBoxProgression(player.PlayerCharacter.ID, player.PlayerCharacter.BoxProgression, box.Level, player.PlayerCharacter.AddGPLastDate, player.PlayerCharacter.BoxGetDate, 0)) { player.PlayerCharacter.GetBoxLevel = box.Level; updatedb = true; } } } } if (updatedb) { if (box != null) { List <ItemInfo> mailList = new List <ItemInfo>(); List <ItemInfo> items = new List <ItemInfo>(); int gold = 0; int money = 0; int giftToken = 0; int gp = 0; ItemBoxMgr.CreateItemBox(Convert.ToInt32(box.Template), items, ref gold, ref money, ref giftToken, ref gp); if (gold > 0) { player.AddGold(gold); } if (money > 0) { player.AddMoney(money, LogMoneyType.Award, LogMoneyType.Award); } if (giftToken > 0) { player.AddGiftToken(giftToken); } if (gp > 0) { player.AddGP(gp); } foreach (ItemInfo item in items) { item.RemoveType = 120; if (!player.AddItem(item)) { mailList.Add(item); } } if (type == 0) { player.BoxBeginTime = DateTime.Now; box = BoxMgr.FindTemplateByCondition(0, player.PlayerCharacter.Grade, player.PlayerCharacter.BoxProgression); if (box != null) { player.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("UserGetTimeBoxHandler.success", new object[] { box.Condition })); } else { player.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("UserGetTimeBoxHandler.todayOver", new object[0])); } } else { box = BoxMgr.FindTemplateByCondition(1, player.PlayerCharacter.GetBoxLevel, Convert.ToInt32(player.PlayerCharacter.Sex)); if (box != null) { player.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("UserGetTimeBoxHandler.level", new object[] { box.Level })); } else { player.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("UserGetTimeBoxHandler.over", new object[0])); } } if (mailList.Count > 0) { if (player.SendItemsToMail(mailList, LanguageMgr.GetTranslation("UserGetTimeBoxHandler.mail", new object[0]), LanguageMgr.GetTranslation("UserGetTimeBoxHandler.title", new object[0]), eMailType.OpenUpArk)) { player.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("UserGetTimeBixHandler..full", new object[0])); result = true; player.Out.SendMailResponse(player.PlayerCharacter.ID, eMailRespose.Receiver); } } } else { result = false; } } else { player.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("UserGetTimeBoxHandler.fail", new object[0])); } if (type == 0) { pkg.WriteBoolean(result); pkg.WriteInt(player.PlayerCharacter.BoxProgression); player.SendTCP(pkg); } result2 = 0; } return(result2); }
public bool ShootImp(int bombId, int x, int y, int force, int angle, int bombCount, int shootCount) { BallInfo ballInfo = BallMgr.FindBall(bombId); Tile shape = BallMgr.FindTile(bombId); BombType ballType = BallMgr.GetBallType(bombId); int num = (int)(this.m_map.wind * 10f); if (ballInfo != null) { GSPacketIn gSPacketIn = new GSPacketIn(91, base.Id); gSPacketIn.Parameter1 = base.Id; gSPacketIn.WriteByte(2); gSPacketIn.WriteInt(num); gSPacketIn.WriteBoolean(num > 0); gSPacketIn.WriteByte(this.m_game.GetVane(num, 1)); gSPacketIn.WriteByte(this.m_game.GetVane(num, 2)); gSPacketIn.WriteByte(this.m_game.GetVane(num, 3)); gSPacketIn.WriteInt(bombCount); float num2 = 0f; SimpleBomb simpleBomb = null; for (int i = 0; i < bombCount; i++) { double num3 = 1.0; int num4 = 0; if (i == 1) { num3 = 0.9; num4 = -5; } else { if (i == 2) { num3 = 1.1; num4 = 5; } } int num5 = (int)((double)force * num3 * Math.Cos((double)(angle + num4) / 180.0 * 3.1415926535897931)); int num6 = (int)((double)force * num3 * Math.Sin((double)(angle + num4) / 180.0 * 3.1415926535897931)); simpleBomb = new SimpleBomb(this.m_game.PhysicalId++, ballType, this, this.m_game, ballInfo, shape, this.ControlBall); simpleBomb.SetXY(x, y); simpleBomb.setSpeedXY(num5, num6); this.m_map.AddPhysical(simpleBomb); simpleBomb.StartMoving(); gSPacketIn.WriteInt(0); gSPacketIn.WriteInt(0); gSPacketIn.WriteBoolean(simpleBomb.DigMap); gSPacketIn.WriteInt(simpleBomb.Id); gSPacketIn.WriteInt(x); gSPacketIn.WriteInt(y); gSPacketIn.WriteInt(num5); gSPacketIn.WriteInt(num6); gSPacketIn.WriteInt(simpleBomb.BallInfo.ID); gSPacketIn.WriteString(simpleBomb.BallInfo.FlyingPartical); gSPacketIn.WriteInt(simpleBomb.BallInfo.Radii * 1000 / 4); gSPacketIn.WriteInt((int)simpleBomb.BallInfo.Power * 1000); gSPacketIn.WriteInt(simpleBomb.Actions.Count); foreach (BombAction current in simpleBomb.Actions) { gSPacketIn.WriteInt(current.TimeInt); gSPacketIn.WriteInt(current.Type); gSPacketIn.WriteInt(current.Param1); gSPacketIn.WriteInt(current.Param2); gSPacketIn.WriteInt(current.Param3); gSPacketIn.WriteInt(current.Param4); } num2 = Math.Max(num2, simpleBomb.LifeTime); } int num7 = 0; int count = simpleBomb.PetActions.Count; if (count > 0 && this.PetBaseAtt > 0) { gSPacketIn.WriteInt(count); foreach (BombAction current2 in simpleBomb.PetActions) { gSPacketIn.WriteInt(current2.Param1); gSPacketIn.WriteInt(current2.Param2); gSPacketIn.WriteInt(current2.Param4); gSPacketIn.WriteInt(current2.Param3); } gSPacketIn.WriteInt(1); num7 = 2; } else { gSPacketIn.WriteInt(0); gSPacketIn.WriteInt(0); } this.m_game.SendToAll(gSPacketIn); this.m_game.WaitTime((int)((num2 + 2f + (float)num7 + (float)(bombCount / 3)) * 1000f)); return(true); } return(false); }
public int HandlePacket(GameClient client, GSPacketIn packet) { if (client.Player.CurrentRoom == null) { return(0); } int id = packet.ReadInt(); GamePlayer player = Managers.WorldMgr.GetPlayerById(id); if (player == client.Player) { return(0); } List <GamePlayer> players = client.Player.CurrentRoom.GetPlayers(); foreach (GamePlayer p in players) { if (p == player) { client.Out.SendMessage(eMessageType.ERROR, LanguageMgr.GetTranslation("friendnotinthesameserver.Sameroom")); return(0); } } GSPacketIn pkg = new GSPacketIn((byte)ePackageType.GAME_INVITE); if (player != null && player.CurrentRoom == null) { pkg.WriteInt(client.Player.PlayerCharacter.ID); pkg.WriteInt(client.Player.CurrentRoom.RoomId); pkg.WriteInt(client.Player.CurrentRoom.MapId); pkg.WriteByte((byte)client.Player.CurrentRoom.TimeMode); pkg.WriteByte((byte)client.Player.CurrentRoom.RoomType); pkg.WriteByte((byte)client.Player.CurrentRoom.HardLevel); pkg.WriteByte((byte)client.Player.CurrentRoom.LevelLimits); pkg.WriteString(client.Player.PlayerCharacter.NickName); pkg.WriteByte(client.Player.PlayerCharacter.typeVIP); pkg.WriteInt(client.Player.PlayerCharacter.VIPLevel); pkg.WriteString(client.Player.CurrentRoom.Name); pkg.WriteString(client.Player.CurrentRoom.Password); pkg.WriteInt(0); //_loc_3.barrierNum = _loc_2.readInt(); pkg.WriteBoolean(client.Player.CurrentRoom.isOpenBoss); //_loc_3.isOpenBoss = _loc_2.readBoolean(); player.Out.SendTCP(pkg); } else { if (player != null && player.CurrentRoom != null && player.CurrentRoom != client.Player.CurrentRoom) { client.Out.SendMessage(eMessageType.ERROR, LanguageMgr.GetTranslation("friendnotinthesameserver.Room")); } else { client.Out.SendMessage(eMessageType.ERROR, LanguageMgr.GetTranslation("friendnotinthesameserver.Fail")); } } return(0); }
public void SendToScenePlayer(GSPacketIn packet, GamePlayer player) { WorldMgr.SpaScene.SendToALL(packet, player); }
public void HandlePacket(GameClient client, GSPacketIn packet) { int housenumber = packet.ReadShort(); int menuid = packet.ReadByte(); int flag = packet.ReadByte(); var house = HouseMgr.GetHouse(client.Player.CurrentRegionID, housenumber); if (house == null) { return; } if (client.Player == null) { return; } client.Player.CurrentHouse = house; switch (menuid) { case 0: // Exterior decoration (Garden) { if (!house.CanChangeGarden(client.Player, DecorationPermissions.Add)) { return; } HouseMgr.SendHousingMerchantWindow(client.Player, eMerchantWindowType.HousingOutsideShop); break; } case 1: // Interior decoration { if (!house.CanChangeInterior(client.Player, DecorationPermissions.Add)) { return; } HouseMgr.SendHousingMerchantWindow(client.Player, eMerchantWindowType.HousingInsideShop); break; } case 2: // Exterior menu { if (!house.CanChangeGarden(client.Player, DecorationPermissions.Add)) { return; } client.Player.Out.SendMerchantWindow(HouseTemplateMgr.OutdoorMenuItems, eMerchantWindowType.HousingOutsideMenu); break; } case 3: // interior npc { if (!house.CanChangeInterior(client.Player, DecorationPermissions.Add)) { return; } HouseMgr.SendHousingMerchantWindow(client.Player, eMerchantWindowType.HousingNPCHookpoint); break; } case 4: // vault shop { if (!house.CanChangeInterior(client.Player, DecorationPermissions.Add)) { return; } HouseMgr.SendHousingMerchantWindow(client.Player, eMerchantWindowType.HousingVaultHookpoint); break; } case 5: // craft shop { if (!house.CanChangeInterior(client.Player, DecorationPermissions.Add)) { return; } HouseMgr.SendHousingMerchantWindow(client.Player, eMerchantWindowType.HousingCraftingHookpoint); break; } case 6: // bindstone shop { if (!house.CanChangeInterior(client.Player, DecorationPermissions.Add)) { return; } HouseMgr.SendHousingMerchantWindow(client.Player, eMerchantWindowType.HousingBindstoneHookpoint); break; } case 7: house.SendHouseInfo(client.Player); break; case 8: // Interior menu (flag = 0x00 - roof, 0xFF - floor or wall) if (!house.CanChangeInterior(client.Player, DecorationPermissions.Add)) { return; } client.Player.Out.SendMerchantWindow(HouseTemplateMgr.IndoorMenuItems, eMerchantWindowType.HousingInsideMenu); break; default: client.Out.SendMessage("Invalid menu id " + menuid + " (hookpoint?).", eChatType.CT_System, eChatLoc.CL_SystemWindow); break; } }
public void HandlePacket(GameClient client, GSPacketIn packet) { int index = packet.ReadByte(); new CancelEffectHandler(client.Player, index).Start(1); }
public bool HandleCommand(TankHotSpringLogicProcessor process, GamePlayer player, GSPacketIn packet) { if (player.CurrentHotSpringRoom == null) { return(false); } if (player.PlayerCharacter.ID != player.CurrentHotSpringRoom.Info.GroomID && player.PlayerCharacter.ID != player.CurrentHotSpringRoom.Info.BrideID) { return(false); } int hour = packet.ReadInt(); string[] money = GameProperties.PRICE_MARRY_ROOM.Split(','); if (money.Length < 3) { if (log.IsErrorEnabled) { log.Error("HotSpringRoomCreateMoney node in configuration file is wrong"); } return(false); } int needMoney = 0; switch (hour) { case 2: needMoney = int.Parse(money[0]); break; case 3: needMoney = int.Parse(money[1]); break; case 4: needMoney = int.Parse(money[2]); break; default: needMoney = int.Parse(money[2]); hour = 4; break; } if (player.PlayerCharacter.Money < needMoney) { player.Out.SendMessage(eMessageType.ChatNormal, LanguageMgr.GetTranslation("MarryApplyHandler.Msg1")); return(false); } //player.SetMoney(-needMoney, MoneyRemoveType.Marry); player.RemoveMoney(needMoney); LogMgr.LogMoneyAdd(LogMoneyType.Marry, LogMoneyType.Marry_RoomAdd, player.PlayerCharacter.ID, needMoney, player.PlayerCharacter.Money, 0, 0, 0, "", "", ""); CountBussiness.InsertSystemPayCount(player.PlayerCharacter.ID, needMoney, 0, (int)eConsumerType.Marry, (int)eSubConsumerType.Marry_HotSpringRoom); player.CurrentHotSpringRoom.RoomContinuation(hour); GSPacketIn pkg = player.Out.SendContinuation(player, player.CurrentHotSpringRoom.Info); int spouseID = 0; if (player.PlayerCharacter.ID == player.CurrentHotSpringRoom.Info.GroomID) { spouseID = player.CurrentHotSpringRoom.Info.BrideID; } else { spouseID = player.CurrentHotSpringRoom.Info.GroomID; } GamePlayer spouse = WorldMgr.GetPlayerById(spouseID); if (spouse != null) { spouse.Out.SendTCP(pkg); } player.Out.SendMessage(eMessageType.Normal, LanguageMgr.GetTranslation("ContinuationCommand.Successed")); return(true); }