GetDestination() public method

Returns current destination.
public GetDestination ( ) : Position
return Position
コード例 #1
0
ファイル: CreatureHelper.cs プロジェクト: tkiapril/aura
		public static Packet AddCreatureInfo(this Packet packet, Creature creature, CreaturePacketType type)
		{
			var pos = creature.GetPosition();

			// Start
			// --------------------------------------------------------------

			packet.PutLong(creature.EntityId);
			packet.PutByte((byte)type);

			// Looks/Location
			// --------------------------------------------------------------
			packet.PutString(creature.Name);
			packet.PutString("");				 // Title
			packet.PutString("");				 // Eng Title
			packet.PutInt(creature.RaceId);
			packet.PutByte(creature.SkinColor);
			packet.PutShort(creature.EyeType); // [180600, NA187 (25.06.2014)] Changed from byte to short
			packet.PutByte(creature.EyeColor);
			packet.PutByte(creature.MouthType);
			packet.PutUInt((uint)creature.State);
			if (type == CreaturePacketType.Public)
			{
				packet.PutUInt((uint)creature.StateEx);

				// [180300, NA166 (18.09.2013)]
				{
					packet.PutInt(0);
				}
			}
			packet.PutFloat(creature.Height);
			packet.PutFloat(creature.Weight);
			packet.PutFloat(creature.Upper);
			packet.PutFloat(creature.Lower);
			packet.PutInt(creature.RegionId);
			packet.PutInt(pos.X);
			packet.PutInt(pos.Y);
			packet.PutByte(creature.Direction);
			packet.PutInt(Convert.ToInt32(creature.IsInBattleStance));
			packet.PutByte((byte)creature.Inventory.WeaponSet);
			packet.PutUInt(creature.Color1);
			packet.PutUInt(creature.Color2);
			packet.PutUInt(creature.Color3);

			// Stats
			// --------------------------------------------------------------
			packet.PutFloat(creature.CombatPower);
			packet.PutString(creature.StandStyle);

			if (type == CreaturePacketType.Private)
			{
				packet.PutFloat(creature.Life);
				packet.PutFloat(creature.LifeInjured);
				packet.PutFloat(creature.LifeMaxBaseTotal);
				packet.PutFloat(creature.LifeMaxMod);
				packet.PutFloat(creature.Mana);
				packet.PutFloat(creature.ManaMaxBaseTotal);
				packet.PutFloat(creature.ManaMaxMod);
				packet.PutFloat(creature.Stamina);
				packet.PutFloat(creature.StaminaMaxBaseTotal);
				packet.PutFloat(creature.StaminaMaxMod);
				packet.PutFloat(creature.StaminaHunger);
				packet.PutFloat(0.5f);
				packet.PutShort(creature.Level);
				packet.PutInt(creature.TotalLevel - creature.Level);
				packet.PutShort(0);                  // Max Level (reached ever?)
				packet.PutShort((short)creature.RebirthCount);
				packet.PutShort(0);
				packet.PutLong(AuraData.ExpDb.CalculateRemaining(creature.Level, creature.Exp) * 1000);
				packet.PutShort(creature.Age);
				packet.PutFloat(creature.StrBaseTotal);
				packet.PutFloat(creature.StrMod);
				packet.PutFloat(creature.DexBaseTotal);
				packet.PutFloat(creature.DexMod);
				packet.PutFloat(creature.IntBaseTotal);
				packet.PutFloat(creature.IntMod);
				packet.PutFloat(creature.WillBaseTotal);
				packet.PutFloat(creature.WillMod);
				packet.PutFloat(creature.LuckBaseTotal);
				packet.PutFloat(creature.LuckMod);
				packet.PutFloat(creature.LifeFoodMod);
				packet.PutFloat(creature.ManaFoodMod);
				packet.PutFloat(creature.StaminaFoodMod);
				packet.PutFloat(creature.StrFoodMod);
				packet.PutFloat(creature.DexFoodMod);
				packet.PutFloat(creature.IntFoodMod);
				packet.PutFloat(creature.WillFoodMod);
				packet.PutFloat(creature.LuckFoodMod);
				packet.PutShort(creature.AbilityPoints);
				packet.PutShort((short)creature.AttackMinBase);
				packet.PutShort((short)creature.AttackMinMod);
				packet.PutShort((short)creature.AttackMaxBase);
				packet.PutShort((short)creature.AttackMaxMod);
				packet.PutShort((short)creature.InjuryMinBase);
				packet.PutShort((short)creature.InjuryMinMod);
				packet.PutShort((short)creature.InjuryMaxBase);
				packet.PutShort((short)creature.InjuryMaxMod);
				packet.PutShort((short)creature.LeftAttackMinMod);
				packet.PutShort((short)creature.LeftAttackMaxMod);
				packet.PutShort((short)creature.RightAttackMinMod);
				packet.PutShort((short)creature.RightAttackMaxMod);
				packet.PutShort((short)creature.LeftInjuryMinMod);
				packet.PutShort((short)creature.LeftInjuryMaxMod);
				packet.PutShort((short)creature.RightInjuryMinMod);
				packet.PutShort((short)creature.RightInjuryMaxMod);
				packet.PutFloat(creature.LeftCriticalMod);
				packet.PutFloat(creature.RightCriticalMod);
				packet.PutShort((short)creature.LeftBalanceMod);
				packet.PutShort((short)creature.RightBalanceMod);
				packet.PutFloat(0);			         // MagicDefenseMod
				// [180300, NA166 (18.09.2013)] Magic Protection
				{
					packet.PutFloat(0);			     // MagicProtectMod
				}
				packet.PutFloat(0);			         // MagicAttackMod
				packet.PutShort(15);		         // MeleeAttackRateMod
				packet.PutShort(15);		         // RangeAttackRateMod
				packet.PutFloat(creature.CriticalBase);
				packet.PutFloat(0);			         // CriticalMod
				packet.PutFloat((short)creature.ProtectionBase);
				packet.PutFloat(creature.ProtectionMod);
				packet.PutShort((short)creature.DefenseBase);
				packet.PutShort((short)creature.DefenseMod);
				packet.PutShort((short)creature.BalanceBase);
				packet.PutShort(0);			         // RateMod
				packet.PutShort(0);			         // Rank1
				packet.PutShort(0);			         // Rank2
				// [180300, NA166 (18.09.2013)] Armor Pierce
				{
					packet.PutShort(0);			     // ArmorPierceMod
				}
				packet.PutLong(0);			         // Score
				packet.PutShort((short)creature.AttackMinBaseMod);
				packet.PutShort((short)creature.AttackMaxBaseMod);
				packet.PutShort((short)creature.InjuryMinBaseMod);
				packet.PutShort((short)creature.InjuryMaxBaseMod);
				packet.PutFloat(creature.CriticalBaseMod);
				packet.PutFloat(creature.ProtectionBaseMod);
				packet.PutShort((short)creature.DefenseBaseMod);
				packet.PutShort((short)creature.BalanceBaseMod);

				// In some tests the damage display would be messed up if
				// those two weren't set to something.
				// In recent tests they were simply added to the min/max dmg,
				// purpose unknown.
				packet.PutShort(0);                  // MeleeAttackMinBaseMod (8 / 3)
				packet.PutShort(0);                  // MeleeAttackMaxBaseMod (18 / 4)

				packet.PutShort(0);                  // MeleeInjuryMinBaseMod
				packet.PutShort(0);                  // MeleeInjuryMaxBaseMod
				packet.PutShort(0);                  // RangeAttackMinBaseMod (10)
				packet.PutShort(0);                  // RangeAttackMaxBaseMod (25)
				packet.PutShort(0);                  // RangeInjuryMinBaseMod
				packet.PutShort(0);                  // RangeInjuryMaxBaseMod
				// [180100] Guns
				{
					packet.PutShort(0);			     // DualgunAttackMinBaseMod
					packet.PutShort(0);			     // DualgunAttackMaxBaseMod
					packet.PutShort(0);			     // DualgunInjuryMinBaseMod
					packet.PutShort(0);			     // DualgunInjuryMaxBaseMod
				}
				// [180800, NA189 (23.07.2014)] Ninja?
				{
					packet.PutShort(0);			     // ? AttackMinBaseMod
					packet.PutShort(0);			     // ? AttackMaxBaseMod
					packet.PutShort(0);			     // ? InjuryMinBaseMod
					packet.PutShort(0);			     // ? InjuryMaxBaseMod
				}
				packet.PutShort(0);			         // PoisonBase
				packet.PutShort(0);			         // PoisonMod
				packet.PutShort(67);		         // PoisonImmuneBase
				packet.PutShort(0);			         // PoisonImmuneMod
				packet.PutFloat(0.5f);		         // PoisonDamageRatio1
				packet.PutFloat(0);			         // PoisonDamageRatio2
				packet.PutFloat(0);			         // toxicStr
				packet.PutFloat(0);			         // toxicInt
				packet.PutFloat(0);			         // toxicDex
				packet.PutFloat(0);			         // toxicWill
				packet.PutFloat(0);			         // toxicLuck
				packet.PutString(creature.LastTown);
				packet.PutShort(1);					 // ExploLevel
				packet.PutShort(0);					 // ExploMaxKeyLevel
				packet.PutInt(0);					 // ExploCumLevel
				packet.PutLong(0);					 // ExploExp
				packet.PutInt(0);					 // DiscoverCount
				packet.PutFloat(0);					 // conditionStr
				packet.PutFloat(0);					 // conditionInt
				packet.PutFloat(0);					 // conditionDex
				packet.PutFloat(0);					 // conditionWill
				packet.PutFloat(0);					 // conditionLuck
				packet.PutByte(9);					 // ElementPhysical
				packet.PutByte(0);					 // ElementLightning
				packet.PutByte(0);					 // ElementFire
				packet.PutByte(0);					 // ElementIce

				// [180800, NA196 (14.10.2014)] ?
				{
					packet.PutByte(0);
					packet.PutByte(0);
				}

				// [190200, NA203 (22.04.2015)] ?
				{
					packet.PutByte(0);
				}

				var regens = creature.Regens.GetList();
				packet.PutInt(regens.Count);
				foreach (var regen in regens)
					packet.AddRegen(regen);
			}
			else if (type == CreaturePacketType.Public || type == CreaturePacketType.Minimal)
			{
				packet.PutFloat(creature.Life);
				packet.PutFloat(creature.LifeMaxBaseTotal);
				packet.PutFloat(creature.LifeMaxMod);
				packet.PutFloat(creature.LifeInjured);

				// [180800, NA196 (14.10.2014)] ?
				{
					packet.PutShort(0);
				}

				var regens = creature.Regens.GetPublicList();
				packet.PutInt(regens.Count);
				foreach (var regen in regens)
					packet.AddRegen(regen);

				// Another 6 elements list?
				packet.PutInt(0);
			}

			// Titles
			// --------------------------------------------------------------
			packet.PutUShort(creature.Titles.SelectedTitle);
			packet.PutLong(creature.Titles.Applied);
			if (type == CreaturePacketType.Private)
			{
				// List of available titles
				var titles = creature.Titles.GetList();
				packet.PutShort((short)titles.Count);
				foreach (var title in titles)
				{
					packet.PutUShort(title.Key);
					packet.PutByte((byte)title.Value);
					packet.PutLong(0); // [190100, NA200 (2014-01-15)] Changed from Int to Long
				}
			}
			if (type == CreaturePacketType.Private || type == CreaturePacketType.Public)
			{
				packet.PutUShort(creature.Titles.SelectedOptionTitle);
			}

			// Items and expiring? (Last part of minimal)
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Minimal)
			{
				packet.PutString("");
				packet.PutByte(0);

				var items = creature.Inventory.GetAllEquipment();

				packet.PutInt(items.Length);
				foreach (var item in items)
				{
					packet.PutLong(item.EntityId);
					packet.PutBin(item.Info);
				}

				packet.PutInt(0);  // PetRemainingTime
				packet.PutLong(0); // PetLastTime
				packet.PutLong(0); // PetExpireTime

				return packet;
			}

			// Mate
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Private)
			{
				packet.PutLong(0);					 // MateID
				packet.PutString("");				 // MateName
				packet.PutLong(0);					 // MarriageTime
				packet.PutShort(0);					 // MarriageCount
			}
			else if (type == CreaturePacketType.Public)
			{
				packet.PutString("");				 // MateName
			}

			// Destiny
			// --------------------------------------------------------------
			packet.PutByte(0);			             // (0:Venturer, 1:Knight, 2:Wizard, 3:Bard, 4:Merchant, 5:Alchemist)

			// Inventory
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Private)
			{
				packet.PutInt(creature.RaceData.InventoryWidth);
				packet.PutInt(creature.RaceData.InventoryHeight);

				var items = creature.Inventory.GetItems();
				packet.PutInt(items.Length);
				foreach (var item in items)
					packet.AddItemInfo(item, ItemPacketType.Private);
			}
			else if (type == CreaturePacketType.Public)
			{
				var items = creature.Inventory.GetAllEquipment();

				packet.PutInt(items.Length);
				foreach (var item in items)
				{
					packet.PutLong(item.EntityId);
					packet.PutBin(item.Info);
				}
			}

			// [180300, NA169 (23.10.2013)] ?
			// Strange one, it's in the logs, but stucks the char in
			// casting animation. Dependent on something?
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Private)
			{
				//packet.PutInt(2); // Count?
				//packet.PutInt(36);
				//packet.PutInt(8);
				//packet.PutInt(38);
				//packet.PutInt(4);
			}

			// Keywords
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Private)
			{
				var keywords = creature.Keywords.GetList();
				packet.PutShort((short)keywords.Count);
				foreach (var keyword in keywords)
					packet.PutUShort(keyword);
			}

			// Skills
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Private)
			{
				var skills = creature.Skills.GetList();
				packet.PutShort((short)skills.Count);
				foreach (var skill in skills)
					packet.PutBin(skill.Info);
				packet.PutInt(0);			     // SkillVarBufferList
				// loop						         
				//   packet.PutInt
				//   packet.PutFloat
			}
			else if (type == CreaturePacketType.Public)
			{
				packet.PutShort(0);			     // CurrentSkill
				packet.PutByte(0);			     // SkillStackCount
				packet.PutInt(0);			     // SkillProgress

				// Wrong?
				//packet.PutInt(0);			     // SkillSyncList
				// loop						         
				//   packet.PutShort
				//   packet.PutShort

				// Not 100% sure what this is, Yiting added the above years
				// ago, now it looks like this is a list of skill bins.
				// The skills listed seem to be skills of type "7",
				// which seem to be skills that have their Start/Stop
				// packets being broadcasted.
				// It's possible that it was two shorts originally,
				// the skill id + the flags. [exec]
				var skills = creature.Skills.GetList(s => s.Data.Type == SkillType.BroadcastStartStop);
				packet.PutInt(skills.Count);
				foreach (var skill in skills)
					packet.PutBin(skill.Info);
			}

			// [150100] ?
			{
				packet.PutByte(0);			     // {PLGCNT}
			}

			// [190200, NA203 (24.04.2015)] ?
			{
				packet.PutInt(0);
			}

			// Party
			// --------------------------------------------------------------
			if (creature.IsInParty)
			{
				packet.PutByte(creature.Party.IsOpen && creature.Party.Leader == creature);
				packet.PutString(creature.Party.ToString());
			}
			else
			{
				packet.PutByte(0);
				packet.PutString("");
			}

			// PvP
			// --------------------------------------------------------------
			packet.AddPvPInfo(creature);

			// [180800, NA196 (14.10.2014)] ?
			{
				packet.PutByte(0);
			}

			// Conditions
			// --------------------------------------------------------------
			packet.AddConditions(creature.Conditions);

			// Guild
			// --------------------------------------------------------------
			//if (creature.Guild != null)
			//{
			//    packet.PutLong(creature.Guild.Id);
			//    packet.PutString(creature.Guild.Name);
			//    packet.PutInt((uint)creature.GuildMember.MemberRank);
			//    packet.PutByte(0);
			//    packet.PutByte(0);
			//    packet.PutByte(0);
			//    packet.PutInt(0);
			//    packet.PutByte(0);
			//    packet.PutByte(0);
			//    packet.PutByte(0);
			//    packet.PutByte(0);
			//    packet.PutString(creature.Guild.Title);
			//}
			//else
			{
				packet.PutLong(0);
				packet.PutString("");
				packet.PutInt(0);
				packet.PutByte(0);
				packet.PutByte(0);
				packet.PutByte(0);
				packet.PutInt(0);
				packet.PutByte(0);
				packet.PutByte(0);
				packet.PutByte(0);
				packet.PutByte(0);
				packet.PutString("");
			}

			// PTJ
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Private)
			{
				packet.PutLong(0);				     // ArbeitID

				var records = creature.Quests.GetPtjTrackRecords();
				packet.PutInt(records.Length);
				foreach (var record in records)
				{
					packet.PutShort((short)record.Type);
					packet.PutShort((short)record.Done);
					packet.PutShort((short)record.Success);
				}
			}

			// Following a master
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Private)
			{
				if (creature.Master != null)
				{
					packet.PutLong(creature.Master.EntityId);
					packet.PutByte(2);               // Type (1:RPCharacter, 2:Pet, 3:Transport, 4:PartnerVehicle)
					packet.PutByte(0);				 // SubType
				}
				else
				{
					packet.PutLong(0);
					packet.PutByte(0);
					packet.PutByte(0);
				}
			}

			// [170100] ?
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Private)
			{
				packet.PutFloat(1);
				packet.PutLong(0);
			}

			// Transformation
			// --------------------------------------------------------------
			packet.PutByte(0);				     // Type (1:Paladin, 2:DarkKnight, 3:SubraceTransformed, 4:TransformedElf, 5:TransformedGiant)
			packet.PutShort(0);				     // Level
			packet.PutShort(0);				     // SubType

			// Pet
			// --------------------------------------------------------------
			if (creature.Master != null)
			{
				packet.PutString(creature.Master.Name);

				if (type == CreaturePacketType.Private)
				{
					packet.PutInt(2000000000);			// RemainingSummonTime
					packet.PutLong(0);					// LastSummonTime
					packet.PutLong(0);					// PetExpireTime
					packet.PutByte(0);					// Loyalty
					packet.PutByte(0);					// Favor
					packet.PutLong(DateTime.Now);		// SummonTime
					packet.PutByte(0);					// KeepingMode
					packet.PutLong(0);					// KeepingProp
					packet.PutLong(creature.Master.EntityId);
					packet.PutByte(0);					// PetSealCount {PSCNT}
				}
				else if (type == CreaturePacketType.Public)
				{
					packet.PutLong(creature.Master.EntityId);
					packet.PutByte(0);				 // KeepingMode
					packet.PutLong(0);				 // KeepingProp
				}
			}
			else
			{
				packet.PutString("");

				if (type == CreaturePacketType.Private)
				{
					packet.PutInt(0);
					packet.PutLong(0);
					packet.PutLong(0);
					packet.PutByte(0);
					packet.PutByte(0);
					packet.PutLong(0);
					packet.PutByte(0);
					packet.PutLong(0);
					packet.PutLong(0);
					packet.PutByte(0);
				}
				else if (type == CreaturePacketType.Public)
				{
					packet.PutLong(0);
					packet.PutByte(0);
					packet.PutLong(0);
				}
			}

			// House
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Private)
				packet.PutLong(0);				 // HouseID

			// Taming
			// --------------------------------------------------------------
			packet.PutLong(0);					 // MasterID
			packet.PutByte(0);					 // IsTamed
			packet.PutByte(0);					 // TamedType (1:DarkKnightTamed, 2:InstrumentTamed, 3:AnimalTraining, 4:MercenaryTamed, 5:Recalled, 6:SoulStoneTamed, 7:TamedFriend)
			packet.PutByte(1);					 // IsMasterMode
			packet.PutInt(0);					 // LimitTime

			// Vehicle
			// --------------------------------------------------------------
			packet.PutInt(0);					 // Type
			packet.PutInt(0);					 // TypeFlag (0x1:Driver, 0x4:Owner)
			packet.PutLong(0);					 // VehicleId
			packet.PutInt(0);					 // SeatIndex
			packet.PutByte(0);					 // PassengerList
			// loop
			//   packet.PutLong

			// Showdown
			// --------------------------------------------------------------
			packet.PutInt(0);	                 // unknown at 0x18
			packet.PutLong(0);                   // unknown at 0x08
			packet.PutLong(0);	                 // unknown at 0x10
			packet.PutByte(1);	                 // IsPartyPvpDropout

			// Transport
			// --------------------------------------------------------------
			packet.PutLong(0);					 // TransportID
			packet.PutInt(0);					 // HuntPoint

			// Aviation
			// --------------------------------------------------------------
			packet.PutByte(0); // --v
			//packet.PutByte(creature.IsFlying);
			//if (creature.IsFlying)
			//{
			//    var pos = creature.GetPosition();
			//    packet.PutFloat(pos.X);
			//    packet.PutFloat(pos.H);
			//    packet.PutFloat(pos.Y);
			//    packet.PutFloat(creature.Destination.X);
			//    packet.PutFloat(creature.Destination.H);
			//    packet.PutFloat(creature.Destination.Y);
			//    packet.PutFloat(creature.Direction);
			//}

			// Skiing
			// --------------------------------------------------------------
			packet.PutByte(0);					 // IsSkiing
			// loop
			//   packet.PutFloat
			//   packet.PutFloat
			//   packet.PutFloat
			//   packet.PutFloat
			//   packet.PutInt
			//   packet.PutInt
			//   packet.PutByte
			//   packet.PutByte

			// Farming
			// [150100-170400] Public too
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Private)
			{
				packet.PutLong(0);					 // FarmId
				//   packet.PutLong
				//   packet.PutLong
				//   packet.PutLong
				//   packet.PutShort
				//   packet.PutShort
				//   packet.PutShort
				//   packet.PutShort
				//   packet.PutShort
				//   packet.PutShort
				//   packet.PutByte
				//   packet.PutLong
				//   packet.PutByte
				//   packet.PutLong
			}

			// Event (CaptureTheFlag, WaterBalloonBattle)
			// --------------------------------------------------------------
			packet.PutByte(0);				     // EventFullSuitIndex
			packet.PutByte(0);				     // TeamId
			// if?
			//   packet.PutInt					 // HitPoint
			//   packet.PutInt					 // MaxHitPoint

			// [170300] ?
			{
				packet.PutString("");
				packet.PutByte(0);
			}

			// Heartstickers
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Private)
			{
				packet.PutShort(0);
				packet.PutShort(0);
			}

			// Joust
			// --------------------------------------------------------------
			packet.PutInt(0);					 // JoustId
			if (type == CreaturePacketType.Private)
			{
				packet.PutInt(0);					 // JoustPoint
				packet.PutByte(0);					 // unknown at 0x1D
				packet.PutByte(0);					 // unknown at 0x1C
				packet.PutByte(0);					 // WeekWinCount
				packet.PutShort(0);					 // DailyWinCount
				packet.PutShort(0);					 // DailyLoseCount
				packet.PutShort(0);					 // ServerWinCount
				packet.PutShort(0);					 // ServerLoseCount
			}
			else if (type == CreaturePacketType.Public)
			{
				packet.PutLong(0);			         // HorseId
				packet.PutFloat(0);	                 // Life
				packet.PutInt(100);		             // LifeMax
				packet.PutByte(9);			         // unknown at 0x6C
				packet.PutByte(0);			         // IsJousting
			}

			// Achievements
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Private)
			{
				packet.PutInt(0);	                 // TotalScore
				packet.PutShort(0);                  // AchievementList
				// loop
				//   packet.PutShort achievementId
			}

			// PrivateFarm
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Private)
			{
				packet.PutInt(0);					 // FavoriteFarmList
				// loop
				//   packet.PutLong                  // FarmId
				//   packet.PutInt                   // ZoneId
				//   packet.PutShort                 // PosX
				//   packet.PutShort                 // PoxY
				//   packet.PutString                // FarmName
				//   packet.PutString                // OwnerName
			}

			// Family
			// --------------------------------------------------------------
			packet.PutLong(0);					 // FamilyId
			// if
			//   packet.PutString				 // FamilyName
			//   packet.PutShort
			//   packet.PutShort
			//   packet.PutShort
			//   packet.PutString				 // FamilyTitle

			// Demigod
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Private)
			{
				packet.PutInt(0);					 // SupportType (0:None, 1:Neamhain, 2:Morrighan)
			}

			// [150100] NPC options
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Public && creature is NPC)
			{
				packet.PutShort(0);		         // OnlyShowFilter
				packet.PutShort(0);		         // HideFilter
			}

			// [150100] Commerce
			// --------------------------------------------------------------
			{
				packet.PutByte(1);               // IsInCommerceCombat
				packet.PutLong(0);               // TransportCharacterId
				packet.PutFloat(1);              // ScaleHeight
			}

			// [170100] Talents
			// --------------------------------------------------------------
			{
				if (type == CreaturePacketType.Public)
				{
					packet.PutLong(0);
					packet.PutByte(0);
					packet.PutByte(0);
					packet.PutFloat(1);
					packet.PutLong(0);

					packet.PutShort(0); // --v
					packet.PutByte(0);  // --v
					//packet.PutShort((ushort)creature.Talents.SelectedTitle);
					//packet.PutByte((byte)creature.Talents.Grandmaster);
				}
				else if (type == CreaturePacketType.Private)
				{
					packet.AddPrivateTalentInfo(creature);
				}
			}

			// [170300] Shamala
			// --------------------------------------------------------------
			{
				if (type == CreaturePacketType.Private)
				{
					// Transformation Diary
					packet.PutInt(0); // --v
					//packet.PutSInt(character.Shamalas.Count);
					//foreach (var trans in character.Shamalas)
					//{
					//    packet.PutInt(trans.Id);
					//    packet.PutByte(trans.Counter);
					//    packet.PutByte((byte)trans.State);
					//}
				}
				else if (type == CreaturePacketType.Public)
				{
					// Current transformation info
					//if (creature.Shamala != null)
					//{
					//    packet.PutInt(creature.Shamala.Id);
					//    packet.PutByte(0);
					//    packet.PutInt(creature.ShamalaRace.Id);
					//    packet.PutFloat(creature.Shamala.Size);
					//    packet.PutInt(creature.Shamala.Color1);
					//    packet.PutInt(creature.Shamala.Color2);
					//    packet.PutInt(creature.Shamala.Color3);
					//}
					//else
					{
						packet.PutInt(0);
						packet.PutByte(0);
						packet.PutInt(0);
						packet.PutFloat(1);
						packet.PutInt(0x808080);
						packet.PutInt(0x808080);
						packet.PutInt(0x808080);
					}
					packet.PutByte(0);
					packet.PutByte(0);
				}
			}

			// [180100] ?
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Private)
			{
				packet.PutInt(0);
				packet.PutInt(0);
			}

			// [NA170403, TW170300] ?
			// --------------------------------------------------------------
			{
				packet.PutInt(0);
				packet.PutLong(0);
				packet.PutLong(0);

				// Rock/Paper/Scissors?
				packet.PutString(""); // Banner text?
				packet.PutByte(0);    // Banner enabled?
			}

			// [190100, NA198 (11.12.2014)] ?
			// --------------------------------------------------------------
			{
				packet.PutInt(0);
			}

			// [180300, NA166 (18.09.2013)] ?
			// Required, even though it looks like a list.
			// --------------------------------------------------------------
			{
				packet.PutInt(10); // Count?
				packet.PutLong(4194304);
				packet.PutInt(1347950097);
				packet.PutLong(34359771136);
				packet.PutInt(1346340501);
				packet.PutLong(0);
				packet.PutInt(0);
				packet.PutLong(0);
				packet.PutInt(0);
				packet.PutLong(0);
				packet.PutInt(0);
				packet.PutLong(0);
				packet.PutInt(0);
				packet.PutLong(0);
				packet.PutInt(0);
				packet.PutLong(0);
				packet.PutInt(0);
				packet.PutLong(0);
				packet.PutInt(0);
				packet.PutLong(0);
				packet.PutInt(0);
			}

			// [180500, NA181 (12.02.2014)] ?
			// Without this the "me" creature in the Smash cutscene had a
			// red aura.
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Public)
			{
				packet.PutByte(0);
			}

			// Character
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Public)
			{
				packet.PutLong(0);			         // AimingTarget
				packet.PutLong(0);			         // Executor
				packet.PutShort(0);			         // ReviveTypeList
				// loop						         
				//   packet.PutInt	

				// < int g18 monsters?
			}

			packet.PutByte(0);					 // IsGhost

			// SittingProp
			if (creature.Temp.SittingProp == null)
				packet.PutLong(0);
			else
				packet.PutLong(creature.Temp.SittingProp.EntityId);

			packet.PutInt(-1);					 // SittedSocialMotionId

			// ? (Last Part of public, except for something at the very end)
			// --------------------------------------------------------------
			if (type == CreaturePacketType.Public)
			{
				packet.PutLong(0);			         // DoubleGoreTarget (Doppelganger condition)
				packet.PutInt(0);			         // DoubleGoreTargetType

				// [180300, NA169 (23.10.2013)] ?
				{
					packet.PutLong(0);
				}

				if (!creature.IsMoving)
				{
					packet.PutByte(0);
				}
				else
				{
					var dest = creature.GetDestination();

					packet.PutByte((byte)(!creature.IsWalking ? 2 : 1));
					packet.PutInt(dest.X);
					packet.PutInt(dest.Y);
				}

				if (creature is NPC)
				{
					packet.PutString(creature.StandStyleTalking);
				}

				// [150100] Bomb Event
				{
					packet.PutByte(0);			     // BombEventState
				}

				// [170400] ?
				{
					packet.PutByte(0);
				}

				// [180?00] ?
				{
					packet.PutByte(1);
				}

				// [180500, NA181 (12.02.2014)] ?
				{
					packet.PutByte(1);
				}
			}

			if (type == CreaturePacketType.Private)
			{
				// private:

				// [JP] ?
				// This int is needed in the JP client (1704 log),
				// but doesn't appear in the NA 1704 or KR test 1801 log.
				{
					//packet.PutInt(4);
				}

				// Premium stuff
				// --------------------------------------------------------------
				// [180600, NA187 (25.06.2014)] ?
				{
					packet.PutByte(0);
				}
				packet.PutByte(0);                   // IsUsingExtraStorage (old service)
				packet.PutByte(1);                   // IsUsingNaosSupport (old service) (Style tab in 1803?)
				packet.PutByte(0);                   // IsUsingAdvancedPlay (old service)
				packet.PutByte(0);                   // PremiumService 0
				packet.PutByte(0);                   // PremiumService 1
				packet.PutByte(1);                   // Premium Gestures
				packet.PutByte(1);					 // ? (Default 1 on NA?)
				packet.PutByte(0);
				// [170402, TW170300] New premium thing
				{
					packet.PutByte(1); // VIP inv? (since 1803?)
				}
				// [180300, NA166 (18.09.2013)] ?
				{
					packet.PutByte(0);
					packet.PutByte(0);
				}
				// [180800, NA196 (14.10.2014)] ?
				{
					packet.PutByte(0);
				}
				packet.PutInt(0);
				packet.PutByte(0);
				packet.PutInt(0);
				packet.PutInt(0);
				packet.PutInt(0);

				// Quests
				// --------------------------------------------------------------
				var quests = creature.Quests.GetIncompleteList();
				packet.PutInt(quests.Count);
				foreach (var quest in quests)
					packet.AddQuest(quest);

				// Char
				// --------------------------------------------------------------
				packet.PutByte(0);					 // NaoDress (0:normal, 12:??, 13:??)
				packet.PutLong(creature.CreationTime);
				packet.PutLong(creature.LastRebirth);
				packet.PutString("");
				packet.PutByte(0); // "true" makes character lie on floor?
				packet.PutByte(2);

				// [150100] Pocket ExpireTime List
				// Apperantly a list of "pockets"?, incl expiration time.
				// Ends with a long 0?
				// --------------------------------------------------------------
				{
					// Style
					packet.PutLong(DateTime.Now.AddMonths(1));
					packet.PutShort(72);

					// ?
					//packet.PutLong(0);
					//packet.PutShort(73);

					packet.PutLong(0);
				}
			}

			// [190200, NA215 (18.11.2015)] Chat Sticker
			{
				var stickerId = 0;
				var end = DateTime.MinValue;
				if (creature.Vars.Perm["ChatStickerId"] != null)
				{
					stickerId = creature.Vars.Perm["ChatStickerId"];
					end = creature.Vars.Perm["ChatStickerEnd"];
				}

				packet.PutInt((int)stickerId);
				packet.PutLong(end);
			}

			return packet;
		}