protected override void SendQuestPacket(AbstractQuest quest, int index) { using (GSTCPPacketOut pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.QuestEntry))) { pak.WriteByte((byte) index); if (quest.Step <= 0) { pak.WriteByte(0); pak.WriteByte(0); pak.WriteByte(0); pak.WriteByte(0); } else { string name = quest.Name; string desc = quest.Description; if (name.Length > byte.MaxValue) { if (log.IsWarnEnabled) log.Warn(quest.GetType().ToString() + ": name is too long for 1.71 clients ("+name.Length+") '"+name+"'"); name = name.Substring(0, byte.MaxValue); } if (desc.Length > ushort.MaxValue) { if (log.IsWarnEnabled) log.Warn(quest.GetType().ToString() + ": description is too long for 1.71 clients ("+desc.Length+") '"+desc+"'"); desc = desc.Substring(0, ushort.MaxValue); } if (name.Length + desc.Length > 2048-10) { if (log.IsWarnEnabled) log.Warn(quest.GetType().ToString() + ": name + description length is too long and would have crashed the client.\nName ("+name.Length+"): '"+name+"'\nDesc ("+desc.Length+"): '"+desc+"'"); name = name.Substring(0, 32); desc = desc.Substring(0, 2048-10 - name.Length); // all that's left } pak.WriteByte((byte)name.Length); pak.WriteShortLowEndian((ushort)desc.Length); pak.WriteByte(0); pak.WriteStringBytes(name); //Write Quest Name without trailing 0 pak.WriteStringBytes(desc); //Write Quest Description without trailing 0 } SendTCP(pak); } }
protected override void SendQuestPacket(AbstractQuest quest, int index) { using (GSTCPPacketOut pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.QuestEntry))) { pak.WriteByte((byte) index); if (quest == null) { pak.WriteByte(0); pak.WriteByte(0); pak.WriteByte(0); pak.WriteByte(0); pak.WriteByte(0); } else { string name = string.Format("{0} (Level {1})", quest.Name, quest.Level); string desc = string.Format("[Step #{0}]: {1}", quest.Step, quest.Description); if (name.Length > byte.MaxValue) { if (log.IsWarnEnabled) log.Warn(quest.GetType().ToString() + ": name is too long for 1.68+ clients (" + name.Length + ") '" + name + "'"); name = name.Substring(0, byte.MaxValue); } if (desc.Length > byte.MaxValue) { if (log.IsWarnEnabled) log.Warn(quest.GetType().ToString() + ": description is too long for 1.68+ clients (" + desc.Length + ") '" + desc + "'"); desc = desc.Substring(0, byte.MaxValue); } pak.WriteByte((byte)name.Length); pak.WriteShortLowEndian((ushort)desc.Length); pak.WriteByte(0); // Quest Zone ID ? pak.WriteByte(0); pak.WriteStringBytes(name); //Write Quest Name without trailing 0 pak.WriteStringBytes(desc); //Write Quest Description without trailing 0 } SendTCP(pak); } }
protected override void SendQuestPacket(AbstractQuest quest, int index) { using (GSTCPPacketOut pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.QuestEntry))) { pak.WriteByte((byte)index); if (quest.Step <= 0) { pak.WriteByte(0); pak.WriteByte(0); pak.WriteByte(0); } else { string name = quest.Name; string desc = quest.Description; if (name.Length > byte.MaxValue) { if (log.IsWarnEnabled) log.Warn(quest.GetType().ToString() + ": name is too long for 1.68+ clients (" + name.Length + ") '" + name + "'"); name = name.Substring(0, byte.MaxValue); } if (desc.Length > ushort.MaxValue) { if (log.IsWarnEnabled) log.Warn(quest.GetType().ToString() + ": description is too long for 1.68+ clients (" + desc.Length + ") '" + desc + "'"); desc = desc.Substring(0, ushort.MaxValue); } pak.WriteByte((byte)name.Length); pak.WriteShort((ushort)desc.Length); pak.WriteStringBytes(name); //Write Quest Name without trailing 0 pak.WriteStringBytes(desc); //Write Quest Description without trailing 0 } SendTCP(pak); } }