public void Parse(InputMessage message) { byte worlds = message.GetU8(); for (int i = 0; i < worlds; i++) { var world = new World(); world.ID = message.GetU8(); world.Name = message.GetString(); world.HostName = message.GetString(); world.Port = message.GetU16(); world.Preview = message.GetBool(); Worlds.Add(world); } byte characters = message.GetU8(); for (int i = 0; i < characters; i++) { Character character = new Character(); character.World = message.GetU8(); character.Name = message.GetString(); Characters.Add(character); } AccountState = message.GetU8(); IsPremium = message.GetBool(); PremiumTimeStamp = message.GetU32(); InfinitePremium = (IsPremium && PremiumTimeStamp == 0); }
private void ParseBasicData(InputMessage message) { bool premium = message.GetBool(); if (OpenTibiaUnity.GameManager.GetFeature(GameFeatures.GamePremiumExpiration)) { uint premiumExpiration = message.GetU32(); } byte vocation = message.GetU8(); if (OpenTibiaUnity.GameManager.ClientVersion >= 1100) { bool hasReachedMain = message.GetBool(); } List <byte> spells = new List <byte>(); ushort spellsCount = message.GetU16(); for (int i = 0; i < spellsCount; i++) { spells.Add(message.GetU8()); } if (m_Player) { //m_Player.PremiumStatus = premium; //m_Player.PremiumExpiration = premiumExpiration; //m_Player.Vocation = vocation; //m_Player.ReachedMain = hasReachedMain; } }
private void ParseOpenContainer(InputMessage message) { byte containerId = message.GetU8(); Appearances.ObjectInstance item = ReadObjectInstance(message); string name = message.GetString(); byte capacity = message.GetU8(); bool hasParent = message.GetBool(); bool unlocked = message.GetBool(); bool hasPages = message.GetBool(); ushort containerSize = message.GetU16(); ushort firstIndex = message.GetU16(); int itemCount = message.GetU8(); List <Appearances.ObjectInstance> items = new List <Appearances.ObjectInstance>(itemCount); for (int i = 0; i < itemCount; i++) { items.Add(ReadObjectInstance(message)); } }
private void ParseLoginSuccess(InputMessage message) { m_Player.ID = message.GetU32(); m_Player.Name = CharacterName; #if !UNITY_EDITOR string title = string.Format("OpenTibiaUnity - {0}", m_Player.Name); OpenTibiaUnity.GameManager.SetApplicationTitle(title); #endif BeatDuration = message.GetU16(); if (OpenTibiaUnity.GameManager.GetFeature(GameFeatures.GameNewSpeedLaw)) { Creatures.Creature.SpeedA = message.GetDouble(); Creatures.Creature.SpeedB = message.GetDouble(); Creatures.Creature.SpeedC = message.GetDouble(); } m_BugreportsAllowed = message.GetBool(); if (OpenTibiaUnity.GameManager.ClientVersion >= 1054) { bool canChangePvPFrameRate = message.GetBool(); } if (OpenTibiaUnity.GameManager.ClientVersion >= 1058) { bool exportPvPEnabled = message.GetBool(); } if (OpenTibiaUnity.GameManager.GetFeature(GameFeatures.GameIngameStore)) { string storeLink = message.GetString(); ushort storePackageSize = message.GetU16(); } }
private void ParseCreatureUnpass(InputMessage message) { uint creatureId = message.GetU32(); bool unpass = message.GetBool(); var creature = m_CreatureStorage.GetCreature(creatureId); if (!creature) { throw new System.Exception("ProtocolGame.ParseCreatureUnpass: Unknown creature id: " + creatureId); } else { creature.Unpassable = unpass; } }
private bool ParsePacket(InputMessage message) { byte opcode = message.GetU8(); switch (opcode) { // CUSTOM case 76: int size = message.GetU8(); for (int i = 0; i < size; i++) { message.GetString(); message.GetString(); message.GetU16(); message.GetU8(); } size = message.GetU8(); for (int i = 0; i < size; i++) { int type = message.GetU8(); message.GetU32(); message.GetU32(); if (message.GetBool() != true) { if (message.GetBool() != true) { message.GetU32(); } } if (type == 0) { message.GetU32(); message.GetU32(); int size2 = message.GetU8(); for (int j = 0; j < size2; j++) { message.GetU16(); message.GetString(); message.GetU32(); } } message.GetString(); message.GetString(); } break; // END CUSTOM case GameServerOpCodes.LoginOrPendingState: SendEnterGame(); break; case GameServerOpCodes.GMActions: ParseGmActions(message); break; case GameServerOpCodes.WorldEntered: ParseWorldEntered(message); IsGameRunning = true; OpenTibiaUnity.GameManager.ProcessGameStart(); break; case GameServerOpCodes.LoginError: ParseLoginError(message); break; case GameServerOpCodes.LoginAdvice: ParseLoginAdvice(message); break; case GameServerOpCodes.LoginWait: ParseLoginWait(message); break; case GameServerOpCodes.LoginSuccess: ParseLoginSuccess(message); break; case GameServerOpCodes.LoginToken: ParseLoginToken(message); break; case GameServerOpCodes.Ping: SendPingBack(); break; case GameServerOpCodes.PingBack: SendPing(); break; case GameServerOpCodes.Challenge: ParseChallange(message); break; case GameServerOpCodes.Death: ParseDeath(message); break; case GameServerOpCodes.OTClientOpcode: ParseOtclientExtendedOpcode(message); break; case GameServerOpCodes.FullMap: ParseFullMap(message); break; case GameServerOpCodes.MapTopRow: ParseMapTopRow(message); break; case GameServerOpCodes.MapRightRow: ParseMapRightRow(message); break; case GameServerOpCodes.MapBottomRow: ParseMapBottomRow(message); break; case GameServerOpCodes.MapLeftRow: ParseMapLeftRow(message); break; case GameServerOpCodes.FieldData: ParseFieldData(message); break; case GameServerOpCodes.CreateOnMap: ParseCreateOnMap(message); break; case GameServerOpCodes.ChangeOnMap: ParseChangeOnMap(message); break; case GameServerOpCodes.DeleteOnMap: ParseDeleteOnMap(message); break; case GameServerOpCodes.MoveCreature: ParseCreatureMove(message); break; case GameServerOpCodes.OpenContainer: ParseOpenContainer(message); break; case GameServerOpCodes.CloseContainer: ParseCloseContainer(message); break; case GameServerOpCodes.CreateContainer: ParseContainerAddItem(message); break; case GameServerOpCodes.ChangeInContainer: ParseContainerUpdateItem(message); break; case GameServerOpCodes.DeleteInContainer: ParseContainerRemoveItem(message); break; case GameServerOpCodes.SetInventory: ParseSetInventory(message); break; case GameServerOpCodes.DeleteInventory: ParseDeleteInventory(message); break; case GameServerOpCodes.AmbientLight: ParseAmbientLight(message); break; case GameServerOpCodes.GraphicalEffect: ParseGraphicalEffect(message); break; case GameServerOpCodes.MissleEffect: ParseMissleEffect(message); break; case GameServerOpCodes.CreatureHealth: ParseCreatureHealth(message); break; case GameServerOpCodes.CreatureLight: ParseCreatureLight(message); break; case GameServerOpCodes.CreatureOutfit: ParseCreatureOutfit(message); break; case GameServerOpCodes.CreatureSpeed: ParseCreatureSpeed(message); break; case GameServerOpCodes.CreatureSkull: ParseCreatureSkull(message); break; case GameServerOpCodes.CreatureShield: ParseCreatureShield(message); break; case GameServerOpCodes.CreatureUnpass: ParseCreatureUnpass(message); break; case GameServerOpCodes.CreatureMarks: ParseCreatureMarks(message); break; case GameServerOpCodes.PlayerHelpers: ParsePlayerHelpers(message); break; case GameServerOpCodes.CreatureType: ParseCreatureType(message); break; case GameServerOpCodes.PlayerBlessings: ParsePlayerBlessings(message); break; case GameServerOpCodes.PlayerBasicData: ParseBasicData(message); break; case GameServerOpCodes.PlayerStats: ParsePlayerStats(message); break; case GameServerOpCodes.PlayerSkills: ParsePlayerSkills(message); break; case GameServerOpCodes.PlayerStates: ParsePlayerStates(message); break; case GameServerOpCodes.ClearTarget: ParseClearTarget(message); break; case GameServerOpCodes.SetTactics: ParseSetTactics(message); break; case GameServerOpCodes.Talk: ParseTalk(message); break; case GameServerOpCodes.Channels: ParseChannels(message); break; case GameServerOpCodes.OpenChannel: ParseOpenChannel(message); break; case GameServerOpCodes.PrivateChannel: ParsePrivateChannel(message); break; case GameServerOpCodes.OpenOwnChannel: ParseOpenOwnChannel(message); break; case GameServerOpCodes.CloseChannel: ParseCloseChannel(message); break; case GameServerOpCodes.TextMessage: ParseTextMessage(message); break; case GameServerOpCodes.CancelWalk: ParseCancelWalk(message); break; case GameServerOpCodes.TopFloor: ParseMapTopFloor(message); break; case GameServerOpCodes.BottomFloor: ParseMapBottomFloor(message); break; case GameServerOpCodes.TrackedQuestFlags: ParseTrackedQuestFlags(message); break; case GameServerOpCodes.VipAdd: ParseVipAdd(message); break; case GameServerOpCodes.VipState: ParseVipState(message); break; case GameServerOpCodes.VipLogout: ParseVipLogout(message); break; case GameServerOpCodes.PreyFreeListRerollAvailability: ParsePreyFreeListRerollAvailability(message); break; case GameServerOpCodes.PreyTimeLeft: ParsePreyTimeLeft(message); break; case GameServerOpCodes.PreyData: ParsePreyData(message); break; case GameServerOpCodes.PreyRerollPrice: ParsePreyRerollPrice(message); break; case GameServerOpCodes.ResourceBalance: ParsePlayerResource(message); break; case GameServerOpCodes.ChannelEvent: ParseChannelEvent(message); break; case GameServerOpCodes.PlayerInventory: ParsePlayerInventory(message); break; default: string err = string.Format("<ProtocolGame> Unknown Opcode received ({0}). Last Opcode ({1}). Prev Opcode ({2})", opcode, m_LastOpcode, m_PrevOpcode); m_ChatStorage.AddDebugMessage(err); return(false); } m_PrevOpcode = m_LastOpcode; m_LastOpcode = opcode; return(true); }
private void ParsePlayerStats(InputMessage message) { int ticks = OpenTibiaUnity.TicksMillis; if (OpenTibiaUnity.GameManager.GetFeature(GameFeatures.GameDoubleHealth)) { uint health = message.GetU32(); uint maxHealth = message.GetU32(); m_Player.SetSkill(SkillTypes.Health, (int)health, (int)maxHealth, 0); } else { int health = message.GetU16(); int maxHealth = message.GetU16(); m_Player.SetSkill(SkillTypes.Health, health, maxHealth, 0); } int freeCapacity; if (OpenTibiaUnity.GameManager.GetFeature(GameFeatures.GameDoubleFreeCapacity)) { freeCapacity = message.GetS32(); } else { freeCapacity = message.GetS16(); } int totalCapacity = 0; if (OpenTibiaUnity.GameManager.GetFeature(GameFeatures.GameTotalCapacity)) { totalCapacity = message.GetS32(); } m_Player.SetSkill(SkillTypes.Capacity, freeCapacity, totalCapacity, 0); long experience; if (OpenTibiaUnity.GameManager.GetFeature(GameFeatures.GameDoubleExperience)) { experience = message.GetS64(); } else { experience = message.GetS32(); } m_Player.SetSkill(SkillTypes.Experience, (int)experience, 1, 0); ushort level = message.GetU16(); byte levelPercent = message.GetU8(); m_Player.SetSkill(SkillTypes.Level, level, 1, levelPercent); if (OpenTibiaUnity.GameManager.GetFeature(GameFeatures.GameExperienceBonus)) { float baseXpGain = message.GetU16() / 100f; float voucherAddend = message.GetU16() / 100f; float grindingAddend = message.GetU16() / 100f; float storeBoostAddend = message.GetU16() / 100f; float huntingBoostFactor = message.GetU16() / 100f; m_Player.ExperienceGainInfo.UpdateGainInfo(baseXpGain, voucherAddend, grindingAddend, storeBoostAddend, huntingBoostFactor); } if (OpenTibiaUnity.GameManager.GetFeature(GameFeatures.GameDoubleHealth)) { uint mana = message.GetU32(); uint maxMana = message.GetU32(); m_Player.SetSkill(SkillTypes.Mana, (int)mana, (int)maxMana, 0); } else { int mana = message.GetU16(); int maxMana = message.GetU16(); m_Player.SetSkill(SkillTypes.Mana, mana, maxMana, 0); } byte magicLevel = message.GetU8(); byte baseMagicLevel = OpenTibiaUnity.GameManager.GetFeature(GameFeatures.GameSkillsBase) ? message.GetU8() : magicLevel; byte magicLevelPercent = message.GetU8(); m_Player.SetSkill(SkillTypes.MagLevel, magicLevel, baseMagicLevel, magicLevelPercent); int soul = message.GetU8(); m_Player.SetSkill(SkillTypes.SoulPoints, soul, 1, 0); if (OpenTibiaUnity.GameManager.GetFeature(GameFeatures.GamePlayerStamina)) { int stamina = ticks + 60000 * message.GetU16(); m_Player.SetSkill(SkillTypes.Stamina, stamina, ticks, 0); } if (OpenTibiaUnity.GameManager.GetFeature(GameFeatures.GameSkillsBase)) { ushort baseSpeed = message.GetU16(); m_Player.SetSkill(SkillTypes.Speed, m_Player.GetSkillValue(SkillTypes.Speed), baseSpeed, 0); } if (OpenTibiaUnity.GameManager.GetFeature(GameFeatures.GamePlayerRegenerationTime)) { int regeneration = ticks + 60000 * message.GetU16(); m_Player.SetSkill(SkillTypes.Food, regeneration, ticks, 0); } if (OpenTibiaUnity.GameManager.GetFeature(GameFeatures.GameOfflineTrainingTime)) { int training = ticks + 60000 * message.GetU16(); m_Player.SetSkill(SkillTypes.OfflineTraining, training, ticks, 0); if (OpenTibiaUnity.GameManager.ClientVersion >= 1097) { uint remainingSeconds = message.GetU16(); bool canBuyMoreXpBoosts = message.GetBool(); m_Player.ExperienceGainInfo.UpdateStoreXpBoost(remainingSeconds, canBuyMoreXpBoosts); } } }