From 957a4c7e2f87c706f1ab167a66e1e82c9a25d475 Mon Sep 17 00:00:00 2001 From: VDm Date: Thu, 17 Apr 2025 01:32:37 +0400 Subject: [PATCH] feat(glue): add realm and character handling (#7) * fix(build): make project compilable * feat(glue): update Character Selection screen to support switching * fix(ui): fix CSimpleFontString::GetHeight() to use proper method * feat(db): add static database classes from whoa-autocode * feat(ui): use class and area IDs for Character Selection * chore(db): update ItemRandomPropertiesRec * feat(glue): update CCharacterSelection methods * chore(db): uncomment DB records * feat(glue): implement character deletion * feat(gx): update supported text tags in GxuDetermineQuotedCode * fix(ui): fix CSimpleFontString to use the FixedColor flag only if the string does not contain color tags * feat(net): implement GrunLogin::LogOff * feat(net): implement NetClient::Disconnect * feat(login): implement trimming of realm name in LoginResponse::HandleRealmData * feat(net): implement proper disconnection from login and realm servers * feat(net): implement PING/PONG messages * feat(net): add NetClient::Destroy method * feat(net): implement ClientServices::GetRealmList (second request of Realm List) * feat(glue): implement CGlueMgr::PollRealmList * feat(glue): implement CGlueMgr::PollCreateCharacter * chore(glue): add skeleton of CCharacterComponent class * fix(build): fix build using latest features * fix(glue): kill gotos in CGlueMgr::NetDisconnectHandler * fix(build): include SDL3 --------- Co-authored-by: superp00t --- src/client/Client.cpp | 11 + src/client/Client.hpp | 1 + src/client/ClientServices.cpp | 149 +++++++++- src/client/ClientServices.hpp | 4 + src/clientobject/Player_C.cpp | 51 ++++ src/clientobject/Player_C.hpp | 14 + src/clientobject/Types.hpp | 14 + src/clientobject/Unit_C.cpp | 45 ++- src/clientobject/Unit_C.hpp | 6 +- src/db/StaticDb.cpp | 0 src/db/StaticDb.hpp | 0 src/db/rec/Achievement_CategoryRec.cpp | 0 src/db/rec/Achievement_CategoryRec.hpp | 0 src/db/rec/Achievement_CriteriaRec.cpp | 0 src/db/rec/Achievement_CriteriaRec.hpp | 0 src/db/rec/AnimKitBoneSetAliasRec.cpp | 0 src/db/rec/AnimKitBoneSetAliasRec.hpp | 0 src/db/rec/AnimKitBoneSetRec.cpp | 0 src/db/rec/AnimKitBoneSetRec.hpp | 0 src/db/rec/AnimKitConfigBoneSetRec.cpp | 0 src/db/rec/AnimKitConfigBoneSetRec.hpp | 0 src/db/rec/AnimKitConfigRec.cpp | 0 src/db/rec/AnimKitConfigRec.hpp | 0 src/db/rec/AnimKitPriorityRec.cpp | 0 src/db/rec/AnimKitPriorityRec.hpp | 0 src/db/rec/AnimKitRec.cpp | 0 src/db/rec/AnimKitRec.hpp | 0 src/db/rec/AnimKitSegmentRec.cpp | 0 src/db/rec/AnimKitSegmentRec.hpp | 0 src/db/rec/AnimReplacementRec.cpp | 0 src/db/rec/AnimReplacementRec.hpp | 0 src/db/rec/AnimReplacementSetRec.cpp | 0 src/db/rec/AnimReplacementSetRec.hpp | 0 src/db/rec/AnimationDataRec.cpp | 0 src/db/rec/AnimationDataRec.hpp | 0 src/db/rec/AreaAssignmentRec.cpp | 0 src/db/rec/AreaAssignmentRec.hpp | 0 src/db/rec/AreaGroupRec.cpp | 0 src/db/rec/AreaGroupRec.hpp | 0 src/db/rec/AreaPOIRec.cpp | 0 src/db/rec/AreaPOIRec.hpp | 0 src/db/rec/AreaTableRec.cpp | 0 src/db/rec/AreaTableRec.hpp | 0 src/db/rec/AreaTriggerRec.cpp | 0 src/db/rec/AreaTriggerRec.hpp | 0 src/db/rec/ArmorLocationRec.cpp | 0 src/db/rec/ArmorLocationRec.hpp | 0 src/db/rec/AttackAnimKitsRec.cpp | 0 src/db/rec/AttackAnimKitsRec.hpp | 0 src/db/rec/AttackAnimTypesRec.cpp | 0 src/db/rec/AttackAnimTypesRec.hpp | 0 src/db/rec/AuctionHouseRec.cpp | 0 src/db/rec/AuctionHouseRec.hpp | 0 src/db/rec/BankBagSlotPricesRec.cpp | 0 src/db/rec/BankBagSlotPricesRec.hpp | 0 src/db/rec/BannedAddonsRec.cpp | 48 +++ src/db/rec/BannedAddonsRec.hpp | 26 ++ src/db/rec/BarberShopStyleRec.cpp | 0 src/db/rec/BarberShopStyleRec.hpp | 0 src/db/rec/BattlemasterListRec.cpp | 0 src/db/rec/BattlemasterListRec.hpp | 0 src/db/rec/CameraModeRec.cpp | 0 src/db/rec/CameraModeRec.hpp | 0 src/db/rec/CameraShakesRec.cpp | 0 src/db/rec/CameraShakesRec.hpp | 0 src/db/rec/CharBaseInfoRec.cpp | 0 src/db/rec/CharBaseInfoRec.hpp | 0 src/db/rec/CharHairGeosetsRec.cpp | 0 src/db/rec/CharHairGeosetsRec.hpp | 0 src/db/rec/CharHairTexturesRec.cpp | 0 src/db/rec/CharHairTexturesRec.hpp | 0 src/db/rec/CharSectionsRec.cpp | 0 src/db/rec/CharSectionsRec.hpp | 0 src/db/rec/CharStartOutfitRec.cpp | 0 src/db/rec/CharStartOutfitRec.hpp | 0 src/db/rec/CharTitlesRec.cpp | 0 src/db/rec/CharTitlesRec.hpp | 0 src/db/rec/CharVariationsRec.cpp | 0 src/db/rec/CharVariationsRec.hpp | 0 src/db/rec/CharacterFacialHairStylesRec.cpp | 0 src/db/rec/CharacterFacialHairStylesRec.hpp | 0 src/db/rec/ChatChannelsRec.cpp | 0 src/db/rec/ChatChannelsRec.hpp | 0 src/db/rec/ChatProfanityRec.cpp | 0 src/db/rec/ChatProfanityRec.hpp | 0 src/db/rec/ChrClassesRec.cpp | 0 src/db/rec/ChrClassesRec.hpp | 0 src/db/rec/CinematicCameraRec.cpp | 0 src/db/rec/CinematicCameraRec.hpp | 0 src/db/rec/CinematicSequencesRec.cpp | 0 src/db/rec/CinematicSequencesRec.hpp | 0 src/db/rec/CreatureDisplayInfoExtraRec.cpp | 0 src/db/rec/CreatureDisplayInfoExtraRec.hpp | 0 src/db/rec/CreatureDisplayInfoRec.cpp | 0 src/db/rec/CreatureDisplayInfoRec.hpp | 0 src/db/rec/CreatureFamilyRec.cpp | 0 src/db/rec/CreatureFamilyRec.hpp | 0 src/db/rec/CreatureModelDataRec.cpp | 0 src/db/rec/CreatureModelDataRec.hpp | 0 src/db/rec/CreatureMovementInfoRec.cpp | 0 src/db/rec/CreatureMovementInfoRec.hpp | 0 src/db/rec/CreatureSoundDataRec.cpp | 0 src/db/rec/CreatureSoundDataRec.hpp | 0 src/db/rec/CreatureSpellDataRec.cpp | 0 src/db/rec/CreatureSpellDataRec.hpp | 0 src/db/rec/CreatureTypeRec.cpp | 0 src/db/rec/CreatureTypeRec.hpp | 0 src/db/rec/CurrencyCategoryRec.cpp | 0 src/db/rec/CurrencyCategoryRec.hpp | 0 src/db/rec/CurrencyTypesRec.cpp | 0 src/db/rec/CurrencyTypesRec.hpp | 0 src/db/rec/DanceMovesRec.cpp | 0 src/db/rec/DanceMovesRec.hpp | 0 src/db/rec/DeathThudLookupsRec.cpp | 0 src/db/rec/DeathThudLookupsRec.hpp | 0 src/db/rec/DeclinedWordCasesRec.cpp | 0 src/db/rec/DeclinedWordCasesRec.hpp | 0 src/db/rec/DeclinedWordRec.cpp | 0 src/db/rec/DeclinedWordRec.hpp | 0 src/db/rec/DestructibleModelDataRec.cpp | 0 src/db/rec/DestructibleModelDataRec.hpp | 0 src/db/rec/DungeonEncounterRec.cpp | 0 src/db/rec/DungeonEncounterRec.hpp | 0 src/db/rec/DungeonMapChunkRec.cpp | 0 src/db/rec/DungeonMapChunkRec.hpp | 0 src/db/rec/DungeonMapRec.cpp | 0 src/db/rec/DungeonMapRec.hpp | 0 src/db/rec/DurabilityCostsRec.cpp | 0 src/db/rec/DurabilityCostsRec.hpp | 0 src/db/rec/DurabilityQualityRec.cpp | 0 src/db/rec/DurabilityQualityRec.hpp | 0 src/db/rec/EmotesRec.cpp | 0 src/db/rec/EmotesRec.hpp | 0 src/db/rec/EmotesTextDataRec.cpp | 0 src/db/rec/EmotesTextDataRec.hpp | 0 src/db/rec/EmotesTextRec.cpp | 0 src/db/rec/EmotesTextRec.hpp | 0 src/db/rec/EmotesTextSoundRec.cpp | 0 src/db/rec/EmotesTextSoundRec.hpp | 0 src/db/rec/EnvironmentalDamageRec.cpp | 0 src/db/rec/EnvironmentalDamageRec.hpp | 0 src/db/rec/ExhaustionRec.cpp | 0 src/db/rec/ExhaustionRec.hpp | 0 src/db/rec/FactionGroupRec.cpp | 0 src/db/rec/FactionGroupRec.hpp | 0 src/db/rec/FactionRec.cpp | 0 src/db/rec/FactionRec.hpp | 0 src/db/rec/FactionTemplateRec.cpp | 0 src/db/rec/FactionTemplateRec.hpp | 0 src/db/rec/FileDataRec.cpp | 0 src/db/rec/FileDataRec.hpp | 0 src/db/rec/FootprintTexturesRec.cpp | 0 src/db/rec/FootprintTexturesRec.hpp | 0 src/db/rec/FootstepTerrainLookupRec.cpp | 0 src/db/rec/FootstepTerrainLookupRec.hpp | 0 src/db/rec/GMSurveyAnswersRec.cpp | 0 src/db/rec/GMSurveyAnswersRec.hpp | 0 src/db/rec/GMSurveyCurrentSurveyRec.cpp | 0 src/db/rec/GMSurveyCurrentSurveyRec.hpp | 0 src/db/rec/GMSurveyQuestionsRec.cpp | 0 src/db/rec/GMSurveyQuestionsRec.hpp | 0 src/db/rec/GMSurveySurveysRec.cpp | 0 src/db/rec/GMSurveySurveysRec.hpp | 0 src/db/rec/GMTicketCategoryRec.cpp | 0 src/db/rec/GMTicketCategoryRec.hpp | 0 src/db/rec/GameObjectArtKitRec.cpp | 0 src/db/rec/GameObjectArtKitRec.hpp | 0 src/db/rec/GameObjectDisplayInfoRec.cpp | 0 src/db/rec/GameObjectDisplayInfoRec.hpp | 0 src/db/rec/GameTablesRec.cpp | 0 src/db/rec/GameTablesRec.hpp | 0 src/db/rec/GameTipsRec.cpp | 0 src/db/rec/GameTipsRec.hpp | 0 src/db/rec/GemPropertiesRec.cpp | 0 src/db/rec/GemPropertiesRec.hpp | 0 src/db/rec/GlueScreenEmoteRec.cpp | 0 src/db/rec/GlueScreenEmoteRec.hpp | 0 src/db/rec/GlyphPropertiesRec.cpp | 0 src/db/rec/GlyphPropertiesRec.hpp | 0 src/db/rec/GlyphSlotRec.cpp | 0 src/db/rec/GlyphSlotRec.hpp | 0 src/db/rec/GroundEffectDoodadRec.cpp | 0 src/db/rec/GroundEffectDoodadRec.hpp | 0 src/db/rec/GroundEffectTextureRec.cpp | 0 src/db/rec/GroundEffectTextureRec.hpp | 0 src/db/rec/GuildPerkSpellsRec.cpp | 0 src/db/rec/GuildPerkSpellsRec.hpp | 0 src/db/rec/HelmetGeosetVisDataRec.cpp | 0 src/db/rec/HelmetGeosetVisDataRec.hpp | 0 src/db/rec/HolidayDescriptionsRec.cpp | 0 src/db/rec/HolidayDescriptionsRec.hpp | 0 src/db/rec/HolidayNamesRec.cpp | 0 src/db/rec/HolidayNamesRec.hpp | 0 src/db/rec/HolidaysRec.cpp | 0 src/db/rec/HolidaysRec.hpp | 0 src/db/rec/ItemArmorQualityRec.cpp | 0 src/db/rec/ItemArmorQualityRec.hpp | 0 src/db/rec/ItemArmorShieldRec.cpp | 0 src/db/rec/ItemArmorShieldRec.hpp | 0 src/db/rec/ItemArmorTotalRec.cpp | 0 src/db/rec/ItemArmorTotalRec.hpp | 0 src/db/rec/ItemBagFamilyRec.cpp | 0 src/db/rec/ItemBagFamilyRec.hpp | 0 src/db/rec/ItemClassRec.cpp | 0 src/db/rec/ItemClassRec.hpp | 0 src/db/rec/ItemCondExtCostsRec.cpp | 0 src/db/rec/ItemCondExtCostsRec.hpp | 0 src/db/rec/ItemDamageAmmoRec.cpp | 0 src/db/rec/ItemDamageAmmoRec.hpp | 0 src/db/rec/ItemDamageOneHandCasterRec.cpp | 0 src/db/rec/ItemDamageOneHandCasterRec.hpp | 0 src/db/rec/ItemDamageOneHandRec.cpp | 0 src/db/rec/ItemDamageOneHandRec.hpp | 0 src/db/rec/ItemDamageRangedRec.cpp | 0 src/db/rec/ItemDamageRangedRec.hpp | 0 src/db/rec/ItemDamageThrownRec.cpp | 0 src/db/rec/ItemDamageThrownRec.hpp | 0 src/db/rec/ItemDamageTwoHandCasterRec.cpp | 0 src/db/rec/ItemDamageTwoHandCasterRec.hpp | 0 src/db/rec/ItemDamageTwoHandRec.cpp | 0 src/db/rec/ItemDamageTwoHandRec.hpp | 0 src/db/rec/ItemDamageWandRec.cpp | 0 src/db/rec/ItemDamageWandRec.hpp | 0 src/db/rec/ItemDisplayInfoRec.cpp | 0 src/db/rec/ItemDisplayInfoRec.hpp | 0 src/db/rec/ItemExtendedCostRec.cpp | 0 src/db/rec/ItemExtendedCostRec.hpp | 0 src/db/rec/ItemGroupSoundsRec.cpp | 0 src/db/rec/ItemGroupSoundsRec.hpp | 0 src/db/rec/ItemLimitCategoryRec.cpp | 0 src/db/rec/ItemLimitCategoryRec.hpp | 0 src/db/rec/ItemPetFoodRec.cpp | 0 src/db/rec/ItemPetFoodRec.hpp | 0 src/db/rec/ItemPurchaseGroupRec.cpp | 0 src/db/rec/ItemPurchaseGroupRec.hpp | 0 src/db/rec/ItemRandomPropertiesRec.cpp | 0 src/db/rec/ItemRandomPropertiesRec.hpp | 0 src/db/rec/ItemRandomSuffixRec.cpp | 0 src/db/rec/ItemRandomSuffixRec.hpp | 0 src/db/rec/ItemRec.cpp | 0 src/db/rec/ItemRec.hpp | 0 src/db/rec/ItemReforgeRec.cpp | 0 src/db/rec/ItemReforgeRec.hpp | 0 src/db/rec/ItemSetRec.cpp | 0 src/db/rec/ItemSetRec.hpp | 0 src/db/rec/ItemSubClassMaskRec.cpp | 0 src/db/rec/ItemSubClassMaskRec.hpp | 0 src/db/rec/ItemSubClassRec.cpp | 0 src/db/rec/ItemSubClassRec.hpp | 0 src/db/rec/ItemVisualEffectsRec.cpp | 0 src/db/rec/ItemVisualEffectsRec.hpp | 0 src/db/rec/ItemVisualsRec.cpp | 0 src/db/rec/ItemVisualsRec.hpp | 0 src/db/rec/LFGDungeonExpansionRec.cpp | 45 +++ src/db/rec/LFGDungeonExpansionRec.hpp | 29 ++ src/db/rec/LFGDungeonGroupRec.cpp | 67 +++++ src/db/rec/LFGDungeonGroupRec.hpp | 26 ++ src/db/rec/LFGDungeonsRec.cpp | 102 +++++++ src/db/rec/LFGDungeonsRec.hpp | 38 +++ src/db/rec/LanguageWordsRec.cpp | 0 src/db/rec/LanguageWordsRec.hpp | 0 src/db/rec/LanguagesRec.cpp | 0 src/db/rec/LanguagesRec.hpp | 0 src/db/rec/LightFloatBandRec.cpp | 0 src/db/rec/LightFloatBandRec.hpp | 0 src/db/rec/LightIntBandRec.cpp | 0 src/db/rec/LightIntBandRec.hpp | 0 src/db/rec/LightParamsRec.cpp | 0 src/db/rec/LightParamsRec.hpp | 0 src/db/rec/LightRec.cpp | 0 src/db/rec/LightRec.hpp | 0 src/db/rec/LightSkyboxRec.cpp | 0 src/db/rec/LightSkyboxRec.hpp | 0 src/db/rec/LiquidMaterialRec.cpp | 0 src/db/rec/LiquidMaterialRec.hpp | 0 src/db/rec/LiquidObjectRec.cpp | 0 src/db/rec/LiquidObjectRec.hpp | 0 src/db/rec/LiquidTypeRec.cpp | 0 src/db/rec/LiquidTypeRec.hpp | 0 src/db/rec/LoadingScreenTaxiSplinesRec.cpp | 0 src/db/rec/LoadingScreenTaxiSplinesRec.hpp | 0 src/db/rec/LoadingScreensRec.cpp | 0 src/db/rec/LoadingScreensRec.hpp | 0 src/db/rec/LockRec.cpp | 0 src/db/rec/LockRec.hpp | 0 src/db/rec/LockTypeRec.cpp | 0 src/db/rec/LockTypeRec.hpp | 0 src/db/rec/MailTemplateRec.cpp | 0 src/db/rec/MailTemplateRec.hpp | 0 src/db/rec/MapDifficultyRec.cpp | 0 src/db/rec/MapDifficultyRec.hpp | 0 src/db/rec/MapRec.cpp | 0 src/db/rec/MapRec.hpp | 0 src/db/rec/MaterialRec.cpp | 0 src/db/rec/MaterialRec.hpp | 0 src/db/rec/MountTypeRec.cpp | 0 src/db/rec/MountTypeRec.hpp | 0 src/db/rec/MovieFileDataRec.cpp | 0 src/db/rec/MovieFileDataRec.hpp | 0 src/db/rec/MovieRec.cpp | 0 src/db/rec/MovieRec.hpp | 0 src/db/rec/MovieVariationRec.cpp | 0 src/db/rec/MovieVariationRec.hpp | 0 src/db/rec/NPCSoundsRec.cpp | 0 src/db/rec/NPCSoundsRec.hpp | 0 src/db/rec/NameGenRec.cpp | 0 src/db/rec/NameGenRec.hpp | 0 src/db/rec/NamesProfanityRec.cpp | 0 src/db/rec/NamesProfanityRec.hpp | 0 src/db/rec/NamesReservedRec.cpp | 0 src/db/rec/NamesReservedRec.hpp | 0 src/db/rec/ObjectEffectGroupRec.cpp | 0 src/db/rec/ObjectEffectGroupRec.hpp | 0 src/db/rec/ObjectEffectModifierRec.cpp | 0 src/db/rec/ObjectEffectModifierRec.hpp | 0 src/db/rec/ObjectEffectPackageElemRec.cpp | 0 src/db/rec/ObjectEffectPackageElemRec.hpp | 0 src/db/rec/ObjectEffectPackageRec.cpp | 0 src/db/rec/ObjectEffectPackageRec.hpp | 0 src/db/rec/ObjectEffectRec.cpp | 0 src/db/rec/ObjectEffectRec.hpp | 0 src/db/rec/OverrideSpellDataRec.cpp | 0 src/db/rec/OverrideSpellDataRec.hpp | 0 src/db/rec/PVPDifficultyRec.cpp | 43 +++ src/db/rec/PVPDifficultyRec.hpp | 27 ++ src/db/rec/PackageRec.cpp | 0 src/db/rec/PackageRec.hpp | 0 src/db/rec/PageTextMaterialRec.cpp | 0 src/db/rec/PageTextMaterialRec.hpp | 0 src/db/rec/PaperDollItemFrameRec.cpp | 0 src/db/rec/PaperDollItemFrameRec.hpp | 0 src/db/rec/ParticleColorRec.cpp | 0 src/db/rec/ParticleColorRec.hpp | 0 src/db/rec/PetPersonalityRec.cpp | 0 src/db/rec/PetPersonalityRec.hpp | 0 src/db/rec/PetitionTypeRec.cpp | 0 src/db/rec/PetitionTypeRec.hpp | 0 src/db/rec/PhaseRec.cpp | 0 src/db/rec/PhaseRec.hpp | 0 src/db/rec/PhaseShiftZoneSoundsRec.cpp | 0 src/db/rec/PhaseShiftZoneSoundsRec.hpp | 0 src/db/rec/PhaseXPhaseGroupRec.cpp | 0 src/db/rec/PhaseXPhaseGroupRec.hpp | 0 src/db/rec/PowerDisplayRec.cpp | 0 src/db/rec/PowerDisplayRec.hpp | 0 src/db/rec/QuestFactionRewardRec.cpp | 0 src/db/rec/QuestFactionRewardRec.hpp | 0 src/db/rec/QuestInfoRec.cpp | 0 src/db/rec/QuestInfoRec.hpp | 0 src/db/rec/QuestSortRec.cpp | 0 src/db/rec/QuestSortRec.hpp | 0 src/db/rec/QuestXPRec.cpp | 0 src/db/rec/QuestXPRec.hpp | 0 src/db/rec/RandPropPointsRec.cpp | 0 src/db/rec/RandPropPointsRec.hpp | 0 src/db/rec/ResearchBranchRec.cpp | 0 src/db/rec/ResearchBranchRec.hpp | 0 src/db/rec/ResistancesRec.cpp | 0 src/db/rec/ResistancesRec.hpp | 0 src/db/rec/ScalingStatDistributionRec.cpp | 0 src/db/rec/ScalingStatDistributionRec.hpp | 0 src/db/rec/ScalingStatValuesRec.cpp | 0 src/db/rec/ScalingStatValuesRec.hpp | 0 src/db/rec/ScreenEffectRec.cpp | 0 src/db/rec/ScreenEffectRec.hpp | 0 src/db/rec/ServerMessagesRec.cpp | 0 src/db/rec/ServerMessagesRec.hpp | 0 src/db/rec/SheatheSoundLookupsRec.cpp | 0 src/db/rec/SheatheSoundLookupsRec.hpp | 0 src/db/rec/SkillCostsDataRec.cpp | 0 src/db/rec/SkillCostsDataRec.hpp | 0 src/db/rec/SkillLineAbilityRec.cpp | 0 src/db/rec/SkillLineAbilityRec.hpp | 0 src/db/rec/SkillLineCategoryRec.cpp | 0 src/db/rec/SkillLineCategoryRec.hpp | 0 src/db/rec/SkillLineRec.cpp | 0 src/db/rec/SkillLineRec.hpp | 0 src/db/rec/SkillRaceClassInfoRec.cpp | 0 src/db/rec/SkillRaceClassInfoRec.hpp | 0 src/db/rec/SkillTiersRec.cpp | 0 src/db/rec/SkillTiersRec.hpp | 0 src/db/rec/SoundAmbienceRec.cpp | 0 src/db/rec/SoundAmbienceRec.hpp | 0 src/db/rec/SoundEmittersRec.cpp | 0 src/db/rec/SoundEmittersRec.hpp | 0 src/db/rec/SoundEntriesAdvancedRec.cpp | 0 src/db/rec/SoundEntriesAdvancedRec.hpp | 0 src/db/rec/SoundEntriesRec.cpp | 0 src/db/rec/SoundEntriesRec.hpp | 0 src/db/rec/SoundFilterElemRec.cpp | 0 src/db/rec/SoundFilterElemRec.hpp | 0 src/db/rec/SoundFilterRec.cpp | 0 src/db/rec/SoundFilterRec.hpp | 0 src/db/rec/SoundProviderPreferencesRec.cpp | 0 src/db/rec/SoundProviderPreferencesRec.hpp | 0 src/db/rec/SoundSamplePreferencesRec.cpp | 0 src/db/rec/SoundSamplePreferencesRec.hpp | 0 src/db/rec/SoundWaterTypeRec.cpp | 0 src/db/rec/SoundWaterTypeRec.hpp | 0 src/db/rec/SpamMessagesRec.cpp | 0 src/db/rec/SpamMessagesRec.hpp | 0 src/db/rec/SpellAuraOptionsRec.cpp | 0 src/db/rec/SpellAuraOptionsRec.hpp | 0 src/db/rec/SpellAuraRestrictionsRec.cpp | 0 src/db/rec/SpellAuraRestrictionsRec.hpp | 0 src/db/rec/SpellCastTimesRec.cpp | 0 src/db/rec/SpellCastTimesRec.hpp | 0 src/db/rec/SpellCastingRequirementsRec.cpp | 0 src/db/rec/SpellCastingRequirementsRec.hpp | 0 src/db/rec/SpellCategoriesRec.cpp | 0 src/db/rec/SpellCategoriesRec.hpp | 0 src/db/rec/SpellCategoryRec.cpp | 0 src/db/rec/SpellCategoryRec.hpp | 0 src/db/rec/SpellChainEffectsRec.cpp | 0 src/db/rec/SpellChainEffectsRec.hpp | 0 src/db/rec/SpellClassOptionsRec.cpp | 0 src/db/rec/SpellClassOptionsRec.hpp | 0 src/db/rec/SpellCooldownsRec.cpp | 0 src/db/rec/SpellCooldownsRec.hpp | 0 src/db/rec/SpellDescriptionVariablesRec.cpp | 0 src/db/rec/SpellDescriptionVariablesRec.hpp | 0 src/db/rec/SpellDifficultyRec.cpp | 0 src/db/rec/SpellDifficultyRec.hpp | 0 src/db/rec/SpellDispelTypeRec.cpp | 0 src/db/rec/SpellDispelTypeRec.hpp | 0 src/db/rec/SpellDurationRec.cpp | 0 src/db/rec/SpellDurationRec.hpp | 0 src/db/rec/SpellEffectCameraShakesRec.cpp | 0 src/db/rec/SpellEffectCameraShakesRec.hpp | 0 src/db/rec/SpellEffectRec.cpp | 0 src/db/rec/SpellEffectRec.hpp | 0 src/db/rec/SpellEquippedItemsRec.cpp | 0 src/db/rec/SpellEquippedItemsRec.hpp | 0 src/db/rec/SpellFocusObjectRec.cpp | 0 src/db/rec/SpellFocusObjectRec.hpp | 0 src/db/rec/SpellIconRec.cpp | 0 src/db/rec/SpellIconRec.hpp | 0 src/db/rec/SpellInterruptsRec.cpp | 0 src/db/rec/SpellInterruptsRec.hpp | 0 .../rec/SpellItemEnchantmentConditionRec.cpp | 0 .../rec/SpellItemEnchantmentConditionRec.hpp | 0 src/db/rec/SpellItemEnchantmentRec.cpp | 0 src/db/rec/SpellItemEnchantmentRec.hpp | 0 src/db/rec/SpellLevelsRec.cpp | 0 src/db/rec/SpellLevelsRec.hpp | 0 src/db/rec/SpellMechanicRec.cpp | 0 src/db/rec/SpellMechanicRec.hpp | 0 src/db/rec/SpellMissileMotionRec.cpp | 0 src/db/rec/SpellMissileMotionRec.hpp | 0 src/db/rec/SpellMissileRec.cpp | 0 src/db/rec/SpellMissileRec.hpp | 0 src/db/rec/SpellPowerRec.cpp | 0 src/db/rec/SpellPowerRec.hpp | 0 src/db/rec/SpellRadiusRec.cpp | 0 src/db/rec/SpellRadiusRec.hpp | 0 src/db/rec/SpellRangeRec.cpp | 0 src/db/rec/SpellRangeRec.hpp | 0 src/db/rec/SpellReagentsRec.cpp | 0 src/db/rec/SpellReagentsRec.hpp | 0 src/db/rec/SpellRec.cpp | 0 src/db/rec/SpellRec.hpp | 0 src/db/rec/SpellRuneCostRec.cpp | 0 src/db/rec/SpellRuneCostRec.hpp | 0 src/db/rec/SpellScalingRec.cpp | 0 src/db/rec/SpellScalingRec.hpp | 0 src/db/rec/SpellShapeshiftFormRec.cpp | 0 src/db/rec/SpellShapeshiftFormRec.hpp | 0 src/db/rec/SpellShapeshiftRec.cpp | 0 src/db/rec/SpellShapeshiftRec.hpp | 0 src/db/rec/SpellTargetRestrictionsRec.cpp | 0 src/db/rec/SpellTargetRestrictionsRec.hpp | 0 src/db/rec/SpellTotemsRec.cpp | 0 src/db/rec/SpellTotemsRec.hpp | 0 src/db/rec/SpellVisualEffectNameRec.cpp | 0 src/db/rec/SpellVisualEffectNameRec.hpp | 0 src/db/rec/SpellVisualKitAreaModelRec.cpp | 0 src/db/rec/SpellVisualKitAreaModelRec.hpp | 0 src/db/rec/SpellVisualKitModelAttachRec.cpp | 0 src/db/rec/SpellVisualKitModelAttachRec.hpp | 0 src/db/rec/SpellVisualKitRec.cpp | 0 src/db/rec/SpellVisualKitRec.hpp | 0 .../rec/SpellVisualPrecastTransitionsRec.cpp | 0 .../rec/SpellVisualPrecastTransitionsRec.hpp | 0 src/db/rec/SpellVisualRec.cpp | 0 src/db/rec/SpellVisualRec.hpp | 0 src/db/rec/StableSlotPricesRec.cpp | 0 src/db/rec/StableSlotPricesRec.hpp | 0 src/db/rec/Startup_StringsRec.cpp | 0 src/db/rec/Startup_StringsRec.hpp | 0 src/db/rec/StationeryRec.cpp | 0 src/db/rec/StationeryRec.hpp | 0 src/db/rec/StringLookupsRec.cpp | 0 src/db/rec/StringLookupsRec.hpp | 0 src/db/rec/SummonPropertiesRec.cpp | 0 src/db/rec/SummonPropertiesRec.hpp | 0 src/db/rec/TalentRec.cpp | 0 src/db/rec/TalentRec.hpp | 0 src/db/rec/TalentTabRec.cpp | 0 src/db/rec/TalentTabRec.hpp | 0 src/db/rec/TaxiNodesRec.cpp | 0 src/db/rec/TaxiNodesRec.hpp | 0 src/db/rec/TaxiPathNodeRec.cpp | 0 src/db/rec/TaxiPathNodeRec.hpp | 0 src/db/rec/TaxiPathRec.cpp | 0 src/db/rec/TaxiPathRec.hpp | 0 src/db/rec/TeamContributionPointsRec.cpp | 0 src/db/rec/TeamContributionPointsRec.hpp | 0 src/db/rec/TerrainMaterialRec.cpp | 0 src/db/rec/TerrainMaterialRec.hpp | 0 src/db/rec/TerrainTypeRec.cpp | 0 src/db/rec/TerrainTypeRec.hpp | 0 src/db/rec/TerrainTypeSoundsRec.cpp | 0 src/db/rec/TerrainTypeSoundsRec.hpp | 0 src/db/rec/TotemCategoryRec.cpp | 0 src/db/rec/TotemCategoryRec.hpp | 0 src/db/rec/TransportAnimationRec.cpp | 0 src/db/rec/TransportAnimationRec.hpp | 0 src/db/rec/TransportPhysicsRec.cpp | 0 src/db/rec/TransportPhysicsRec.hpp | 0 src/db/rec/TransportRotationRec.cpp | 0 src/db/rec/TransportRotationRec.hpp | 0 src/db/rec/UISoundLookupsRec.cpp | 0 src/db/rec/UISoundLookupsRec.hpp | 0 src/db/rec/UnitBloodLevelsRec.cpp | 0 src/db/rec/UnitBloodLevelsRec.hpp | 0 src/db/rec/UnitBloodRec.cpp | 0 src/db/rec/UnitBloodRec.hpp | 0 src/db/rec/VehicleRec.cpp | 0 src/db/rec/VehicleRec.hpp | 0 src/db/rec/VehicleSeatRec.cpp | 0 src/db/rec/VehicleSeatRec.hpp | 0 src/db/rec/VehicleUIIndSeatRec.cpp | 0 src/db/rec/VehicleUIIndSeatRec.hpp | 0 src/db/rec/VehicleUIIndicatorRec.cpp | 0 src/db/rec/VehicleUIIndicatorRec.hpp | 0 src/db/rec/VideoHardwareRec.cpp | 0 src/db/rec/VideoHardwareRec.hpp | 0 src/db/rec/VocalUISoundsRec.cpp | 0 src/db/rec/VocalUISoundsRec.hpp | 0 src/db/rec/WMOAreaTableRec.cpp | 0 src/db/rec/WMOAreaTableRec.hpp | 0 src/db/rec/WeaponImpactSoundsRec.cpp | 0 src/db/rec/WeaponImpactSoundsRec.hpp | 0 src/db/rec/WeaponSwingSounds2Rec.cpp | 0 src/db/rec/WeaponSwingSounds2Rec.hpp | 0 src/db/rec/WeatherRec.cpp | 0 src/db/rec/WeatherRec.hpp | 0 src/db/rec/WorldChunkSoundsRec.cpp | 0 src/db/rec/WorldChunkSoundsRec.hpp | 0 src/db/rec/WorldMapAreaRec.cpp | 0 src/db/rec/WorldMapAreaRec.hpp | 0 src/db/rec/WorldMapContinentRec.cpp | 0 src/db/rec/WorldMapContinentRec.hpp | 0 src/db/rec/WorldMapOverlayRec.cpp | 0 src/db/rec/WorldMapOverlayRec.hpp | 0 src/db/rec/WorldMapTransformsRec.cpp | 0 src/db/rec/WorldMapTransformsRec.hpp | 0 src/db/rec/WorldSafeLocsRec.cpp | 0 src/db/rec/WorldSafeLocsRec.hpp | 0 src/db/rec/WorldStateUIRec.cpp | 0 src/db/rec/WorldStateUIRec.hpp | 0 src/db/rec/WorldStateZoneSoundsRec.cpp | 0 src/db/rec/WorldStateZoneSoundsRec.hpp | 0 src/db/rec/WowError_StringsRec.cpp | 0 src/db/rec/WowError_StringsRec.hpp | 0 src/db/rec/ZoneIntroMusicTableRec.cpp | 0 src/db/rec/ZoneIntroMusicTableRec.hpp | 0 src/db/rec/ZoneLightPointRec.cpp | 0 src/db/rec/ZoneLightPointRec.hpp | 0 src/db/rec/ZoneLightRec.cpp | 0 src/db/rec/ZoneLightRec.hpp | 0 src/db/rec/ZoneMusicRec.cpp | 0 src/db/rec/ZoneMusicRec.hpp | 0 src/db/rec/gtBarberShopCostBaseRec.cpp | 0 src/db/rec/gtBarberShopCostBaseRec.hpp | 0 src/db/rec/gtChanceToMeleeCritBaseRec.cpp | 0 src/db/rec/gtChanceToMeleeCritBaseRec.hpp | 0 src/db/rec/gtChanceToMeleeCritRec.cpp | 0 src/db/rec/gtChanceToMeleeCritRec.hpp | 0 src/db/rec/gtChanceToSpellCritBaseRec.cpp | 0 src/db/rec/gtChanceToSpellCritBaseRec.hpp | 0 src/db/rec/gtChanceToSpellCritRec.cpp | 0 src/db/rec/gtChanceToSpellCritRec.hpp | 0 src/db/rec/gtCombatRatingsRec.cpp | 0 src/db/rec/gtCombatRatingsRec.hpp | 0 src/db/rec/gtNPCManaCostScalerRec.cpp | 0 src/db/rec/gtNPCManaCostScalerRec.hpp | 0 .../rec/gtOCTClassCombatRatingScalarRec.cpp | 0 .../rec/gtOCTClassCombatRatingScalarRec.hpp | 0 src/db/rec/gtOCTRegenHPRec.cpp | 0 src/db/rec/gtOCTRegenHPRec.hpp | 0 src/db/rec/gtOCTRegenMPRec.cpp | 0 src/db/rec/gtOCTRegenMPRec.hpp | 0 src/db/rec/gtRegenHPPerSptRec.cpp | 0 src/db/rec/gtRegenHPPerSptRec.hpp | 0 src/db/rec/gtRegenMPPerSptRec.cpp | 0 src/db/rec/gtRegenMPPerSptRec.hpp | 0 src/db/rec/gtSpellScalingRec.cpp | 0 src/db/rec/gtSpellScalingRec.hpp | 0 src/glue/CCharacterComponent.cpp | 1 + src/glue/CCharacterComponent.hpp | 17 ++ src/glue/CCharacterCreation.cpp | 8 + src/glue/CCharacterCreation.hpp | 25 ++ src/glue/CCharacterSelection.cpp | 127 ++++++-- src/glue/CCharacterSelection.hpp | 23 +- src/glue/CGlueMgr.cpp | 243 ++++++++++++--- src/glue/CGlueMgr.hpp | 7 + src/gx/Font.cpp | 107 ++++++- src/gx/d3d/CGxDeviceD3d.hpp | 1 + src/gx/font/CGxString.cpp | 4 +- src/net/CMakeLists.txt | 1 + src/net/Types.hpp | 24 ++ src/net/connection/ClientConnection.cpp | 137 ++------- src/net/connection/ClientConnection.hpp | 2 + src/net/connection/NetClient.cpp | 276 ++++++++++++++++-- src/net/connection/NetClient.hpp | 13 + src/net/connection/RealmConnection.cpp | 10 +- src/net/connection/RealmConnection.hpp | 1 + src/net/connection/WowConnection.cpp | 27 +- src/net/connection/WowConnection.hpp | 1 + src/net/connection/WowConnectionNet.cpp | 2 +- src/net/grunt/ClientResponse.hpp | 1 + src/net/login/GruntLogin.cpp | 8 +- src/net/login/GruntLogin.hpp | 1 + src/net/login/Login.cpp | 4 + src/net/login/Login.hpp | 1 + src/net/login/LoginResponse.cpp | 57 +++- src/ui/CSimpleFontString.cpp | 16 +- src/ui/ScriptFunctionsCharCreate.cpp | 17 +- src/ui/ScriptFunctionsCharSelect.cpp | 40 ++- src/ui/ScriptFunctionsGlueScriptEvents.cpp | 3 +- src/ui/ScriptFunctionsRealmList.cpp | 3 +- vendor/CMakeLists.txt | 2 +- 633 files changed, 1729 insertions(+), 227 deletions(-) create mode 100644 src/clientobject/Player_C.cpp create mode 100644 src/clientobject/Player_C.hpp create mode 100644 src/clientobject/Types.hpp mode change 100755 => 100644 src/db/StaticDb.cpp mode change 100755 => 100644 src/db/StaticDb.hpp mode change 100755 => 100644 src/db/rec/Achievement_CategoryRec.cpp mode change 100755 => 100644 src/db/rec/Achievement_CategoryRec.hpp mode change 100755 => 100644 src/db/rec/Achievement_CriteriaRec.cpp mode change 100755 => 100644 src/db/rec/Achievement_CriteriaRec.hpp mode change 100755 => 100644 src/db/rec/AnimKitBoneSetAliasRec.cpp mode change 100755 => 100644 src/db/rec/AnimKitBoneSetAliasRec.hpp mode change 100755 => 100644 src/db/rec/AnimKitBoneSetRec.cpp mode change 100755 => 100644 src/db/rec/AnimKitBoneSetRec.hpp mode change 100755 => 100644 src/db/rec/AnimKitConfigBoneSetRec.cpp mode change 100755 => 100644 src/db/rec/AnimKitConfigBoneSetRec.hpp mode change 100755 => 100644 src/db/rec/AnimKitConfigRec.cpp mode change 100755 => 100644 src/db/rec/AnimKitConfigRec.hpp mode change 100755 => 100644 src/db/rec/AnimKitPriorityRec.cpp mode change 100755 => 100644 src/db/rec/AnimKitPriorityRec.hpp mode change 100755 => 100644 src/db/rec/AnimKitRec.cpp mode change 100755 => 100644 src/db/rec/AnimKitRec.hpp mode change 100755 => 100644 src/db/rec/AnimKitSegmentRec.cpp mode change 100755 => 100644 src/db/rec/AnimKitSegmentRec.hpp mode change 100755 => 100644 src/db/rec/AnimReplacementRec.cpp mode change 100755 => 100644 src/db/rec/AnimReplacementRec.hpp mode change 100755 => 100644 src/db/rec/AnimReplacementSetRec.cpp mode change 100755 => 100644 src/db/rec/AnimReplacementSetRec.hpp mode change 100755 => 100644 src/db/rec/AnimationDataRec.cpp mode change 100755 => 100644 src/db/rec/AnimationDataRec.hpp mode change 100755 => 100644 src/db/rec/AreaAssignmentRec.cpp mode change 100755 => 100644 src/db/rec/AreaAssignmentRec.hpp mode change 100755 => 100644 src/db/rec/AreaGroupRec.cpp mode change 100755 => 100644 src/db/rec/AreaGroupRec.hpp mode change 100755 => 100644 src/db/rec/AreaPOIRec.cpp mode change 100755 => 100644 src/db/rec/AreaPOIRec.hpp mode change 100755 => 100644 src/db/rec/AreaTableRec.cpp mode change 100755 => 100644 src/db/rec/AreaTableRec.hpp mode change 100755 => 100644 src/db/rec/AreaTriggerRec.cpp mode change 100755 => 100644 src/db/rec/AreaTriggerRec.hpp mode change 100755 => 100644 src/db/rec/ArmorLocationRec.cpp mode change 100755 => 100644 src/db/rec/ArmorLocationRec.hpp mode change 100755 => 100644 src/db/rec/AttackAnimKitsRec.cpp mode change 100755 => 100644 src/db/rec/AttackAnimKitsRec.hpp mode change 100755 => 100644 src/db/rec/AttackAnimTypesRec.cpp mode change 100755 => 100644 src/db/rec/AttackAnimTypesRec.hpp mode change 100755 => 100644 src/db/rec/AuctionHouseRec.cpp mode change 100755 => 100644 src/db/rec/AuctionHouseRec.hpp mode change 100755 => 100644 src/db/rec/BankBagSlotPricesRec.cpp mode change 100755 => 100644 src/db/rec/BankBagSlotPricesRec.hpp create mode 100644 src/db/rec/BannedAddonsRec.cpp create mode 100644 src/db/rec/BannedAddonsRec.hpp mode change 100755 => 100644 src/db/rec/BarberShopStyleRec.cpp mode change 100755 => 100644 src/db/rec/BarberShopStyleRec.hpp mode change 100755 => 100644 src/db/rec/BattlemasterListRec.cpp mode change 100755 => 100644 src/db/rec/BattlemasterListRec.hpp mode change 100755 => 100644 src/db/rec/CameraModeRec.cpp mode change 100755 => 100644 src/db/rec/CameraModeRec.hpp mode change 100755 => 100644 src/db/rec/CameraShakesRec.cpp mode change 100755 => 100644 src/db/rec/CameraShakesRec.hpp mode change 100755 => 100644 src/db/rec/CharBaseInfoRec.cpp mode change 100755 => 100644 src/db/rec/CharBaseInfoRec.hpp mode change 100755 => 100644 src/db/rec/CharHairGeosetsRec.cpp mode change 100755 => 100644 src/db/rec/CharHairGeosetsRec.hpp mode change 100755 => 100644 src/db/rec/CharHairTexturesRec.cpp mode change 100755 => 100644 src/db/rec/CharHairTexturesRec.hpp mode change 100755 => 100644 src/db/rec/CharSectionsRec.cpp mode change 100755 => 100644 src/db/rec/CharSectionsRec.hpp mode change 100755 => 100644 src/db/rec/CharStartOutfitRec.cpp mode change 100755 => 100644 src/db/rec/CharStartOutfitRec.hpp mode change 100755 => 100644 src/db/rec/CharTitlesRec.cpp mode change 100755 => 100644 src/db/rec/CharTitlesRec.hpp mode change 100755 => 100644 src/db/rec/CharVariationsRec.cpp mode change 100755 => 100644 src/db/rec/CharVariationsRec.hpp mode change 100755 => 100644 src/db/rec/CharacterFacialHairStylesRec.cpp mode change 100755 => 100644 src/db/rec/CharacterFacialHairStylesRec.hpp mode change 100755 => 100644 src/db/rec/ChatChannelsRec.cpp mode change 100755 => 100644 src/db/rec/ChatChannelsRec.hpp mode change 100755 => 100644 src/db/rec/ChatProfanityRec.cpp mode change 100755 => 100644 src/db/rec/ChatProfanityRec.hpp mode change 100755 => 100644 src/db/rec/ChrClassesRec.cpp mode change 100755 => 100644 src/db/rec/ChrClassesRec.hpp mode change 100755 => 100644 src/db/rec/CinematicCameraRec.cpp mode change 100755 => 100644 src/db/rec/CinematicCameraRec.hpp mode change 100755 => 100644 src/db/rec/CinematicSequencesRec.cpp mode change 100755 => 100644 src/db/rec/CinematicSequencesRec.hpp mode change 100755 => 100644 src/db/rec/CreatureDisplayInfoExtraRec.cpp mode change 100755 => 100644 src/db/rec/CreatureDisplayInfoExtraRec.hpp mode change 100755 => 100644 src/db/rec/CreatureDisplayInfoRec.cpp mode change 100755 => 100644 src/db/rec/CreatureDisplayInfoRec.hpp mode change 100755 => 100644 src/db/rec/CreatureFamilyRec.cpp mode change 100755 => 100644 src/db/rec/CreatureFamilyRec.hpp mode change 100755 => 100644 src/db/rec/CreatureModelDataRec.cpp mode change 100755 => 100644 src/db/rec/CreatureModelDataRec.hpp mode change 100755 => 100644 src/db/rec/CreatureMovementInfoRec.cpp mode change 100755 => 100644 src/db/rec/CreatureMovementInfoRec.hpp mode change 100755 => 100644 src/db/rec/CreatureSoundDataRec.cpp mode change 100755 => 100644 src/db/rec/CreatureSoundDataRec.hpp mode change 100755 => 100644 src/db/rec/CreatureSpellDataRec.cpp mode change 100755 => 100644 src/db/rec/CreatureSpellDataRec.hpp mode change 100755 => 100644 src/db/rec/CreatureTypeRec.cpp mode change 100755 => 100644 src/db/rec/CreatureTypeRec.hpp mode change 100755 => 100644 src/db/rec/CurrencyCategoryRec.cpp mode change 100755 => 100644 src/db/rec/CurrencyCategoryRec.hpp mode change 100755 => 100644 src/db/rec/CurrencyTypesRec.cpp mode change 100755 => 100644 src/db/rec/CurrencyTypesRec.hpp mode change 100755 => 100644 src/db/rec/DanceMovesRec.cpp mode change 100755 => 100644 src/db/rec/DanceMovesRec.hpp mode change 100755 => 100644 src/db/rec/DeathThudLookupsRec.cpp mode change 100755 => 100644 src/db/rec/DeathThudLookupsRec.hpp mode change 100755 => 100644 src/db/rec/DeclinedWordCasesRec.cpp mode change 100755 => 100644 src/db/rec/DeclinedWordCasesRec.hpp mode change 100755 => 100644 src/db/rec/DeclinedWordRec.cpp mode change 100755 => 100644 src/db/rec/DeclinedWordRec.hpp mode change 100755 => 100644 src/db/rec/DestructibleModelDataRec.cpp mode change 100755 => 100644 src/db/rec/DestructibleModelDataRec.hpp mode change 100755 => 100644 src/db/rec/DungeonEncounterRec.cpp mode change 100755 => 100644 src/db/rec/DungeonEncounterRec.hpp mode change 100755 => 100644 src/db/rec/DungeonMapChunkRec.cpp mode change 100755 => 100644 src/db/rec/DungeonMapChunkRec.hpp mode change 100755 => 100644 src/db/rec/DungeonMapRec.cpp mode change 100755 => 100644 src/db/rec/DungeonMapRec.hpp mode change 100755 => 100644 src/db/rec/DurabilityCostsRec.cpp mode change 100755 => 100644 src/db/rec/DurabilityCostsRec.hpp mode change 100755 => 100644 src/db/rec/DurabilityQualityRec.cpp mode change 100755 => 100644 src/db/rec/DurabilityQualityRec.hpp mode change 100755 => 100644 src/db/rec/EmotesRec.cpp mode change 100755 => 100644 src/db/rec/EmotesRec.hpp mode change 100755 => 100644 src/db/rec/EmotesTextDataRec.cpp mode change 100755 => 100644 src/db/rec/EmotesTextDataRec.hpp mode change 100755 => 100644 src/db/rec/EmotesTextRec.cpp mode change 100755 => 100644 src/db/rec/EmotesTextRec.hpp mode change 100755 => 100644 src/db/rec/EmotesTextSoundRec.cpp mode change 100755 => 100644 src/db/rec/EmotesTextSoundRec.hpp mode change 100755 => 100644 src/db/rec/EnvironmentalDamageRec.cpp mode change 100755 => 100644 src/db/rec/EnvironmentalDamageRec.hpp mode change 100755 => 100644 src/db/rec/ExhaustionRec.cpp mode change 100755 => 100644 src/db/rec/ExhaustionRec.hpp mode change 100755 => 100644 src/db/rec/FactionGroupRec.cpp mode change 100755 => 100644 src/db/rec/FactionGroupRec.hpp mode change 100755 => 100644 src/db/rec/FactionRec.cpp mode change 100755 => 100644 src/db/rec/FactionRec.hpp mode change 100755 => 100644 src/db/rec/FactionTemplateRec.cpp mode change 100755 => 100644 src/db/rec/FactionTemplateRec.hpp mode change 100755 => 100644 src/db/rec/FileDataRec.cpp mode change 100755 => 100644 src/db/rec/FileDataRec.hpp mode change 100755 => 100644 src/db/rec/FootprintTexturesRec.cpp mode change 100755 => 100644 src/db/rec/FootprintTexturesRec.hpp mode change 100755 => 100644 src/db/rec/FootstepTerrainLookupRec.cpp mode change 100755 => 100644 src/db/rec/FootstepTerrainLookupRec.hpp mode change 100755 => 100644 src/db/rec/GMSurveyAnswersRec.cpp mode change 100755 => 100644 src/db/rec/GMSurveyAnswersRec.hpp mode change 100755 => 100644 src/db/rec/GMSurveyCurrentSurveyRec.cpp mode change 100755 => 100644 src/db/rec/GMSurveyCurrentSurveyRec.hpp mode change 100755 => 100644 src/db/rec/GMSurveyQuestionsRec.cpp mode change 100755 => 100644 src/db/rec/GMSurveyQuestionsRec.hpp mode change 100755 => 100644 src/db/rec/GMSurveySurveysRec.cpp mode change 100755 => 100644 src/db/rec/GMSurveySurveysRec.hpp mode change 100755 => 100644 src/db/rec/GMTicketCategoryRec.cpp mode change 100755 => 100644 src/db/rec/GMTicketCategoryRec.hpp mode change 100755 => 100644 src/db/rec/GameObjectArtKitRec.cpp mode change 100755 => 100644 src/db/rec/GameObjectArtKitRec.hpp mode change 100755 => 100644 src/db/rec/GameObjectDisplayInfoRec.cpp mode change 100755 => 100644 src/db/rec/GameObjectDisplayInfoRec.hpp mode change 100755 => 100644 src/db/rec/GameTablesRec.cpp mode change 100755 => 100644 src/db/rec/GameTablesRec.hpp mode change 100755 => 100644 src/db/rec/GameTipsRec.cpp mode change 100755 => 100644 src/db/rec/GameTipsRec.hpp mode change 100755 => 100644 src/db/rec/GemPropertiesRec.cpp mode change 100755 => 100644 src/db/rec/GemPropertiesRec.hpp mode change 100755 => 100644 src/db/rec/GlueScreenEmoteRec.cpp mode change 100755 => 100644 src/db/rec/GlueScreenEmoteRec.hpp mode change 100755 => 100644 src/db/rec/GlyphPropertiesRec.cpp mode change 100755 => 100644 src/db/rec/GlyphPropertiesRec.hpp mode change 100755 => 100644 src/db/rec/GlyphSlotRec.cpp mode change 100755 => 100644 src/db/rec/GlyphSlotRec.hpp mode change 100755 => 100644 src/db/rec/GroundEffectDoodadRec.cpp mode change 100755 => 100644 src/db/rec/GroundEffectDoodadRec.hpp mode change 100755 => 100644 src/db/rec/GroundEffectTextureRec.cpp mode change 100755 => 100644 src/db/rec/GroundEffectTextureRec.hpp mode change 100755 => 100644 src/db/rec/GuildPerkSpellsRec.cpp mode change 100755 => 100644 src/db/rec/GuildPerkSpellsRec.hpp mode change 100755 => 100644 src/db/rec/HelmetGeosetVisDataRec.cpp mode change 100755 => 100644 src/db/rec/HelmetGeosetVisDataRec.hpp mode change 100755 => 100644 src/db/rec/HolidayDescriptionsRec.cpp mode change 100755 => 100644 src/db/rec/HolidayDescriptionsRec.hpp mode change 100755 => 100644 src/db/rec/HolidayNamesRec.cpp mode change 100755 => 100644 src/db/rec/HolidayNamesRec.hpp mode change 100755 => 100644 src/db/rec/HolidaysRec.cpp mode change 100755 => 100644 src/db/rec/HolidaysRec.hpp mode change 100755 => 100644 src/db/rec/ItemArmorQualityRec.cpp mode change 100755 => 100644 src/db/rec/ItemArmorQualityRec.hpp mode change 100755 => 100644 src/db/rec/ItemArmorShieldRec.cpp mode change 100755 => 100644 src/db/rec/ItemArmorShieldRec.hpp mode change 100755 => 100644 src/db/rec/ItemArmorTotalRec.cpp mode change 100755 => 100644 src/db/rec/ItemArmorTotalRec.hpp mode change 100755 => 100644 src/db/rec/ItemBagFamilyRec.cpp mode change 100755 => 100644 src/db/rec/ItemBagFamilyRec.hpp mode change 100755 => 100644 src/db/rec/ItemClassRec.cpp mode change 100755 => 100644 src/db/rec/ItemClassRec.hpp mode change 100755 => 100644 src/db/rec/ItemCondExtCostsRec.cpp mode change 100755 => 100644 src/db/rec/ItemCondExtCostsRec.hpp mode change 100755 => 100644 src/db/rec/ItemDamageAmmoRec.cpp mode change 100755 => 100644 src/db/rec/ItemDamageAmmoRec.hpp mode change 100755 => 100644 src/db/rec/ItemDamageOneHandCasterRec.cpp mode change 100755 => 100644 src/db/rec/ItemDamageOneHandCasterRec.hpp mode change 100755 => 100644 src/db/rec/ItemDamageOneHandRec.cpp mode change 100755 => 100644 src/db/rec/ItemDamageOneHandRec.hpp mode change 100755 => 100644 src/db/rec/ItemDamageRangedRec.cpp mode change 100755 => 100644 src/db/rec/ItemDamageRangedRec.hpp mode change 100755 => 100644 src/db/rec/ItemDamageThrownRec.cpp mode change 100755 => 100644 src/db/rec/ItemDamageThrownRec.hpp mode change 100755 => 100644 src/db/rec/ItemDamageTwoHandCasterRec.cpp mode change 100755 => 100644 src/db/rec/ItemDamageTwoHandCasterRec.hpp mode change 100755 => 100644 src/db/rec/ItemDamageTwoHandRec.cpp mode change 100755 => 100644 src/db/rec/ItemDamageTwoHandRec.hpp mode change 100755 => 100644 src/db/rec/ItemDamageWandRec.cpp mode change 100755 => 100644 src/db/rec/ItemDamageWandRec.hpp mode change 100755 => 100644 src/db/rec/ItemDisplayInfoRec.cpp mode change 100755 => 100644 src/db/rec/ItemDisplayInfoRec.hpp mode change 100755 => 100644 src/db/rec/ItemExtendedCostRec.cpp mode change 100755 => 100644 src/db/rec/ItemExtendedCostRec.hpp mode change 100755 => 100644 src/db/rec/ItemGroupSoundsRec.cpp mode change 100755 => 100644 src/db/rec/ItemGroupSoundsRec.hpp mode change 100755 => 100644 src/db/rec/ItemLimitCategoryRec.cpp mode change 100755 => 100644 src/db/rec/ItemLimitCategoryRec.hpp mode change 100755 => 100644 src/db/rec/ItemPetFoodRec.cpp mode change 100755 => 100644 src/db/rec/ItemPetFoodRec.hpp mode change 100755 => 100644 src/db/rec/ItemPurchaseGroupRec.cpp mode change 100755 => 100644 src/db/rec/ItemPurchaseGroupRec.hpp mode change 100755 => 100644 src/db/rec/ItemRandomPropertiesRec.cpp mode change 100755 => 100644 src/db/rec/ItemRandomPropertiesRec.hpp mode change 100755 => 100644 src/db/rec/ItemRandomSuffixRec.cpp mode change 100755 => 100644 src/db/rec/ItemRandomSuffixRec.hpp mode change 100755 => 100644 src/db/rec/ItemRec.cpp mode change 100755 => 100644 src/db/rec/ItemRec.hpp mode change 100755 => 100644 src/db/rec/ItemReforgeRec.cpp mode change 100755 => 100644 src/db/rec/ItemReforgeRec.hpp mode change 100755 => 100644 src/db/rec/ItemSetRec.cpp mode change 100755 => 100644 src/db/rec/ItemSetRec.hpp mode change 100755 => 100644 src/db/rec/ItemSubClassMaskRec.cpp mode change 100755 => 100644 src/db/rec/ItemSubClassMaskRec.hpp mode change 100755 => 100644 src/db/rec/ItemSubClassRec.cpp mode change 100755 => 100644 src/db/rec/ItemSubClassRec.hpp mode change 100755 => 100644 src/db/rec/ItemVisualEffectsRec.cpp mode change 100755 => 100644 src/db/rec/ItemVisualEffectsRec.hpp mode change 100755 => 100644 src/db/rec/ItemVisualsRec.cpp mode change 100755 => 100644 src/db/rec/ItemVisualsRec.hpp create mode 100644 src/db/rec/LFGDungeonExpansionRec.cpp create mode 100644 src/db/rec/LFGDungeonExpansionRec.hpp create mode 100644 src/db/rec/LFGDungeonGroupRec.cpp create mode 100644 src/db/rec/LFGDungeonGroupRec.hpp create mode 100644 src/db/rec/LFGDungeonsRec.cpp create mode 100644 src/db/rec/LFGDungeonsRec.hpp mode change 100755 => 100644 src/db/rec/LanguageWordsRec.cpp mode change 100755 => 100644 src/db/rec/LanguageWordsRec.hpp mode change 100755 => 100644 src/db/rec/LanguagesRec.cpp mode change 100755 => 100644 src/db/rec/LanguagesRec.hpp mode change 100755 => 100644 src/db/rec/LightFloatBandRec.cpp mode change 100755 => 100644 src/db/rec/LightFloatBandRec.hpp mode change 100755 => 100644 src/db/rec/LightIntBandRec.cpp mode change 100755 => 100644 src/db/rec/LightIntBandRec.hpp mode change 100755 => 100644 src/db/rec/LightParamsRec.cpp mode change 100755 => 100644 src/db/rec/LightParamsRec.hpp mode change 100755 => 100644 src/db/rec/LightRec.cpp mode change 100755 => 100644 src/db/rec/LightRec.hpp mode change 100755 => 100644 src/db/rec/LightSkyboxRec.cpp mode change 100755 => 100644 src/db/rec/LightSkyboxRec.hpp mode change 100755 => 100644 src/db/rec/LiquidMaterialRec.cpp mode change 100755 => 100644 src/db/rec/LiquidMaterialRec.hpp mode change 100755 => 100644 src/db/rec/LiquidObjectRec.cpp mode change 100755 => 100644 src/db/rec/LiquidObjectRec.hpp mode change 100755 => 100644 src/db/rec/LiquidTypeRec.cpp mode change 100755 => 100644 src/db/rec/LiquidTypeRec.hpp mode change 100755 => 100644 src/db/rec/LoadingScreenTaxiSplinesRec.cpp mode change 100755 => 100644 src/db/rec/LoadingScreenTaxiSplinesRec.hpp mode change 100755 => 100644 src/db/rec/LoadingScreensRec.cpp mode change 100755 => 100644 src/db/rec/LoadingScreensRec.hpp mode change 100755 => 100644 src/db/rec/LockRec.cpp mode change 100755 => 100644 src/db/rec/LockRec.hpp mode change 100755 => 100644 src/db/rec/LockTypeRec.cpp mode change 100755 => 100644 src/db/rec/LockTypeRec.hpp mode change 100755 => 100644 src/db/rec/MailTemplateRec.cpp mode change 100755 => 100644 src/db/rec/MailTemplateRec.hpp mode change 100755 => 100644 src/db/rec/MapDifficultyRec.cpp mode change 100755 => 100644 src/db/rec/MapDifficultyRec.hpp mode change 100755 => 100644 src/db/rec/MapRec.cpp mode change 100755 => 100644 src/db/rec/MapRec.hpp mode change 100755 => 100644 src/db/rec/MaterialRec.cpp mode change 100755 => 100644 src/db/rec/MaterialRec.hpp mode change 100755 => 100644 src/db/rec/MountTypeRec.cpp mode change 100755 => 100644 src/db/rec/MountTypeRec.hpp mode change 100755 => 100644 src/db/rec/MovieFileDataRec.cpp mode change 100755 => 100644 src/db/rec/MovieFileDataRec.hpp mode change 100755 => 100644 src/db/rec/MovieRec.cpp mode change 100755 => 100644 src/db/rec/MovieRec.hpp mode change 100755 => 100644 src/db/rec/MovieVariationRec.cpp mode change 100755 => 100644 src/db/rec/MovieVariationRec.hpp mode change 100755 => 100644 src/db/rec/NPCSoundsRec.cpp mode change 100755 => 100644 src/db/rec/NPCSoundsRec.hpp mode change 100755 => 100644 src/db/rec/NameGenRec.cpp mode change 100755 => 100644 src/db/rec/NameGenRec.hpp mode change 100755 => 100644 src/db/rec/NamesProfanityRec.cpp mode change 100755 => 100644 src/db/rec/NamesProfanityRec.hpp mode change 100755 => 100644 src/db/rec/NamesReservedRec.cpp mode change 100755 => 100644 src/db/rec/NamesReservedRec.hpp mode change 100755 => 100644 src/db/rec/ObjectEffectGroupRec.cpp mode change 100755 => 100644 src/db/rec/ObjectEffectGroupRec.hpp mode change 100755 => 100644 src/db/rec/ObjectEffectModifierRec.cpp mode change 100755 => 100644 src/db/rec/ObjectEffectModifierRec.hpp mode change 100755 => 100644 src/db/rec/ObjectEffectPackageElemRec.cpp mode change 100755 => 100644 src/db/rec/ObjectEffectPackageElemRec.hpp mode change 100755 => 100644 src/db/rec/ObjectEffectPackageRec.cpp mode change 100755 => 100644 src/db/rec/ObjectEffectPackageRec.hpp mode change 100755 => 100644 src/db/rec/ObjectEffectRec.cpp mode change 100755 => 100644 src/db/rec/ObjectEffectRec.hpp mode change 100755 => 100644 src/db/rec/OverrideSpellDataRec.cpp mode change 100755 => 100644 src/db/rec/OverrideSpellDataRec.hpp create mode 100644 src/db/rec/PVPDifficultyRec.cpp create mode 100644 src/db/rec/PVPDifficultyRec.hpp mode change 100755 => 100644 src/db/rec/PackageRec.cpp mode change 100755 => 100644 src/db/rec/PackageRec.hpp mode change 100755 => 100644 src/db/rec/PageTextMaterialRec.cpp mode change 100755 => 100644 src/db/rec/PageTextMaterialRec.hpp mode change 100755 => 100644 src/db/rec/PaperDollItemFrameRec.cpp mode change 100755 => 100644 src/db/rec/PaperDollItemFrameRec.hpp mode change 100755 => 100644 src/db/rec/ParticleColorRec.cpp mode change 100755 => 100644 src/db/rec/ParticleColorRec.hpp mode change 100755 => 100644 src/db/rec/PetPersonalityRec.cpp mode change 100755 => 100644 src/db/rec/PetPersonalityRec.hpp mode change 100755 => 100644 src/db/rec/PetitionTypeRec.cpp mode change 100755 => 100644 src/db/rec/PetitionTypeRec.hpp mode change 100755 => 100644 src/db/rec/PhaseRec.cpp mode change 100755 => 100644 src/db/rec/PhaseRec.hpp mode change 100755 => 100644 src/db/rec/PhaseShiftZoneSoundsRec.cpp mode change 100755 => 100644 src/db/rec/PhaseShiftZoneSoundsRec.hpp mode change 100755 => 100644 src/db/rec/PhaseXPhaseGroupRec.cpp mode change 100755 => 100644 src/db/rec/PhaseXPhaseGroupRec.hpp mode change 100755 => 100644 src/db/rec/PowerDisplayRec.cpp mode change 100755 => 100644 src/db/rec/PowerDisplayRec.hpp mode change 100755 => 100644 src/db/rec/QuestFactionRewardRec.cpp mode change 100755 => 100644 src/db/rec/QuestFactionRewardRec.hpp mode change 100755 => 100644 src/db/rec/QuestInfoRec.cpp mode change 100755 => 100644 src/db/rec/QuestInfoRec.hpp mode change 100755 => 100644 src/db/rec/QuestSortRec.cpp mode change 100755 => 100644 src/db/rec/QuestSortRec.hpp mode change 100755 => 100644 src/db/rec/QuestXPRec.cpp mode change 100755 => 100644 src/db/rec/QuestXPRec.hpp mode change 100755 => 100644 src/db/rec/RandPropPointsRec.cpp mode change 100755 => 100644 src/db/rec/RandPropPointsRec.hpp mode change 100755 => 100644 src/db/rec/ResearchBranchRec.cpp mode change 100755 => 100644 src/db/rec/ResearchBranchRec.hpp mode change 100755 => 100644 src/db/rec/ResistancesRec.cpp mode change 100755 => 100644 src/db/rec/ResistancesRec.hpp mode change 100755 => 100644 src/db/rec/ScalingStatDistributionRec.cpp mode change 100755 => 100644 src/db/rec/ScalingStatDistributionRec.hpp mode change 100755 => 100644 src/db/rec/ScalingStatValuesRec.cpp mode change 100755 => 100644 src/db/rec/ScalingStatValuesRec.hpp mode change 100755 => 100644 src/db/rec/ScreenEffectRec.cpp mode change 100755 => 100644 src/db/rec/ScreenEffectRec.hpp mode change 100755 => 100644 src/db/rec/ServerMessagesRec.cpp mode change 100755 => 100644 src/db/rec/ServerMessagesRec.hpp mode change 100755 => 100644 src/db/rec/SheatheSoundLookupsRec.cpp mode change 100755 => 100644 src/db/rec/SheatheSoundLookupsRec.hpp mode change 100755 => 100644 src/db/rec/SkillCostsDataRec.cpp mode change 100755 => 100644 src/db/rec/SkillCostsDataRec.hpp mode change 100755 => 100644 src/db/rec/SkillLineAbilityRec.cpp mode change 100755 => 100644 src/db/rec/SkillLineAbilityRec.hpp mode change 100755 => 100644 src/db/rec/SkillLineCategoryRec.cpp mode change 100755 => 100644 src/db/rec/SkillLineCategoryRec.hpp mode change 100755 => 100644 src/db/rec/SkillLineRec.cpp mode change 100755 => 100644 src/db/rec/SkillLineRec.hpp mode change 100755 => 100644 src/db/rec/SkillRaceClassInfoRec.cpp mode change 100755 => 100644 src/db/rec/SkillRaceClassInfoRec.hpp mode change 100755 => 100644 src/db/rec/SkillTiersRec.cpp mode change 100755 => 100644 src/db/rec/SkillTiersRec.hpp mode change 100755 => 100644 src/db/rec/SoundAmbienceRec.cpp mode change 100755 => 100644 src/db/rec/SoundAmbienceRec.hpp mode change 100755 => 100644 src/db/rec/SoundEmittersRec.cpp mode change 100755 => 100644 src/db/rec/SoundEmittersRec.hpp mode change 100755 => 100644 src/db/rec/SoundEntriesAdvancedRec.cpp mode change 100755 => 100644 src/db/rec/SoundEntriesAdvancedRec.hpp mode change 100755 => 100644 src/db/rec/SoundEntriesRec.cpp mode change 100755 => 100644 src/db/rec/SoundEntriesRec.hpp mode change 100755 => 100644 src/db/rec/SoundFilterElemRec.cpp mode change 100755 => 100644 src/db/rec/SoundFilterElemRec.hpp mode change 100755 => 100644 src/db/rec/SoundFilterRec.cpp mode change 100755 => 100644 src/db/rec/SoundFilterRec.hpp mode change 100755 => 100644 src/db/rec/SoundProviderPreferencesRec.cpp mode change 100755 => 100644 src/db/rec/SoundProviderPreferencesRec.hpp mode change 100755 => 100644 src/db/rec/SoundSamplePreferencesRec.cpp mode change 100755 => 100644 src/db/rec/SoundSamplePreferencesRec.hpp mode change 100755 => 100644 src/db/rec/SoundWaterTypeRec.cpp mode change 100755 => 100644 src/db/rec/SoundWaterTypeRec.hpp mode change 100755 => 100644 src/db/rec/SpamMessagesRec.cpp mode change 100755 => 100644 src/db/rec/SpamMessagesRec.hpp mode change 100755 => 100644 src/db/rec/SpellAuraOptionsRec.cpp mode change 100755 => 100644 src/db/rec/SpellAuraOptionsRec.hpp mode change 100755 => 100644 src/db/rec/SpellAuraRestrictionsRec.cpp mode change 100755 => 100644 src/db/rec/SpellAuraRestrictionsRec.hpp mode change 100755 => 100644 src/db/rec/SpellCastTimesRec.cpp mode change 100755 => 100644 src/db/rec/SpellCastTimesRec.hpp mode change 100755 => 100644 src/db/rec/SpellCastingRequirementsRec.cpp mode change 100755 => 100644 src/db/rec/SpellCastingRequirementsRec.hpp mode change 100755 => 100644 src/db/rec/SpellCategoriesRec.cpp mode change 100755 => 100644 src/db/rec/SpellCategoriesRec.hpp mode change 100755 => 100644 src/db/rec/SpellCategoryRec.cpp mode change 100755 => 100644 src/db/rec/SpellCategoryRec.hpp mode change 100755 => 100644 src/db/rec/SpellChainEffectsRec.cpp mode change 100755 => 100644 src/db/rec/SpellChainEffectsRec.hpp mode change 100755 => 100644 src/db/rec/SpellClassOptionsRec.cpp mode change 100755 => 100644 src/db/rec/SpellClassOptionsRec.hpp mode change 100755 => 100644 src/db/rec/SpellCooldownsRec.cpp mode change 100755 => 100644 src/db/rec/SpellCooldownsRec.hpp mode change 100755 => 100644 src/db/rec/SpellDescriptionVariablesRec.cpp mode change 100755 => 100644 src/db/rec/SpellDescriptionVariablesRec.hpp mode change 100755 => 100644 src/db/rec/SpellDifficultyRec.cpp mode change 100755 => 100644 src/db/rec/SpellDifficultyRec.hpp mode change 100755 => 100644 src/db/rec/SpellDispelTypeRec.cpp mode change 100755 => 100644 src/db/rec/SpellDispelTypeRec.hpp mode change 100755 => 100644 src/db/rec/SpellDurationRec.cpp mode change 100755 => 100644 src/db/rec/SpellDurationRec.hpp mode change 100755 => 100644 src/db/rec/SpellEffectCameraShakesRec.cpp mode change 100755 => 100644 src/db/rec/SpellEffectCameraShakesRec.hpp mode change 100755 => 100644 src/db/rec/SpellEffectRec.cpp mode change 100755 => 100644 src/db/rec/SpellEffectRec.hpp mode change 100755 => 100644 src/db/rec/SpellEquippedItemsRec.cpp mode change 100755 => 100644 src/db/rec/SpellEquippedItemsRec.hpp mode change 100755 => 100644 src/db/rec/SpellFocusObjectRec.cpp mode change 100755 => 100644 src/db/rec/SpellFocusObjectRec.hpp mode change 100755 => 100644 src/db/rec/SpellIconRec.cpp mode change 100755 => 100644 src/db/rec/SpellIconRec.hpp mode change 100755 => 100644 src/db/rec/SpellInterruptsRec.cpp mode change 100755 => 100644 src/db/rec/SpellInterruptsRec.hpp mode change 100755 => 100644 src/db/rec/SpellItemEnchantmentConditionRec.cpp mode change 100755 => 100644 src/db/rec/SpellItemEnchantmentConditionRec.hpp mode change 100755 => 100644 src/db/rec/SpellItemEnchantmentRec.cpp mode change 100755 => 100644 src/db/rec/SpellItemEnchantmentRec.hpp mode change 100755 => 100644 src/db/rec/SpellLevelsRec.cpp mode change 100755 => 100644 src/db/rec/SpellLevelsRec.hpp mode change 100755 => 100644 src/db/rec/SpellMechanicRec.cpp mode change 100755 => 100644 src/db/rec/SpellMechanicRec.hpp mode change 100755 => 100644 src/db/rec/SpellMissileMotionRec.cpp mode change 100755 => 100644 src/db/rec/SpellMissileMotionRec.hpp mode change 100755 => 100644 src/db/rec/SpellMissileRec.cpp mode change 100755 => 100644 src/db/rec/SpellMissileRec.hpp mode change 100755 => 100644 src/db/rec/SpellPowerRec.cpp mode change 100755 => 100644 src/db/rec/SpellPowerRec.hpp mode change 100755 => 100644 src/db/rec/SpellRadiusRec.cpp mode change 100755 => 100644 src/db/rec/SpellRadiusRec.hpp mode change 100755 => 100644 src/db/rec/SpellRangeRec.cpp mode change 100755 => 100644 src/db/rec/SpellRangeRec.hpp mode change 100755 => 100644 src/db/rec/SpellReagentsRec.cpp mode change 100755 => 100644 src/db/rec/SpellReagentsRec.hpp mode change 100755 => 100644 src/db/rec/SpellRec.cpp mode change 100755 => 100644 src/db/rec/SpellRec.hpp mode change 100755 => 100644 src/db/rec/SpellRuneCostRec.cpp mode change 100755 => 100644 src/db/rec/SpellRuneCostRec.hpp mode change 100755 => 100644 src/db/rec/SpellScalingRec.cpp mode change 100755 => 100644 src/db/rec/SpellScalingRec.hpp mode change 100755 => 100644 src/db/rec/SpellShapeshiftFormRec.cpp mode change 100755 => 100644 src/db/rec/SpellShapeshiftFormRec.hpp mode change 100755 => 100644 src/db/rec/SpellShapeshiftRec.cpp mode change 100755 => 100644 src/db/rec/SpellShapeshiftRec.hpp mode change 100755 => 100644 src/db/rec/SpellTargetRestrictionsRec.cpp mode change 100755 => 100644 src/db/rec/SpellTargetRestrictionsRec.hpp mode change 100755 => 100644 src/db/rec/SpellTotemsRec.cpp mode change 100755 => 100644 src/db/rec/SpellTotemsRec.hpp mode change 100755 => 100644 src/db/rec/SpellVisualEffectNameRec.cpp mode change 100755 => 100644 src/db/rec/SpellVisualEffectNameRec.hpp mode change 100755 => 100644 src/db/rec/SpellVisualKitAreaModelRec.cpp mode change 100755 => 100644 src/db/rec/SpellVisualKitAreaModelRec.hpp mode change 100755 => 100644 src/db/rec/SpellVisualKitModelAttachRec.cpp mode change 100755 => 100644 src/db/rec/SpellVisualKitModelAttachRec.hpp mode change 100755 => 100644 src/db/rec/SpellVisualKitRec.cpp mode change 100755 => 100644 src/db/rec/SpellVisualKitRec.hpp mode change 100755 => 100644 src/db/rec/SpellVisualPrecastTransitionsRec.cpp mode change 100755 => 100644 src/db/rec/SpellVisualPrecastTransitionsRec.hpp mode change 100755 => 100644 src/db/rec/SpellVisualRec.cpp mode change 100755 => 100644 src/db/rec/SpellVisualRec.hpp mode change 100755 => 100644 src/db/rec/StableSlotPricesRec.cpp mode change 100755 => 100644 src/db/rec/StableSlotPricesRec.hpp mode change 100755 => 100644 src/db/rec/Startup_StringsRec.cpp mode change 100755 => 100644 src/db/rec/Startup_StringsRec.hpp mode change 100755 => 100644 src/db/rec/StationeryRec.cpp mode change 100755 => 100644 src/db/rec/StationeryRec.hpp mode change 100755 => 100644 src/db/rec/StringLookupsRec.cpp mode change 100755 => 100644 src/db/rec/StringLookupsRec.hpp mode change 100755 => 100644 src/db/rec/SummonPropertiesRec.cpp mode change 100755 => 100644 src/db/rec/SummonPropertiesRec.hpp mode change 100755 => 100644 src/db/rec/TalentRec.cpp mode change 100755 => 100644 src/db/rec/TalentRec.hpp mode change 100755 => 100644 src/db/rec/TalentTabRec.cpp mode change 100755 => 100644 src/db/rec/TalentTabRec.hpp mode change 100755 => 100644 src/db/rec/TaxiNodesRec.cpp mode change 100755 => 100644 src/db/rec/TaxiNodesRec.hpp mode change 100755 => 100644 src/db/rec/TaxiPathNodeRec.cpp mode change 100755 => 100644 src/db/rec/TaxiPathNodeRec.hpp mode change 100755 => 100644 src/db/rec/TaxiPathRec.cpp mode change 100755 => 100644 src/db/rec/TaxiPathRec.hpp mode change 100755 => 100644 src/db/rec/TeamContributionPointsRec.cpp mode change 100755 => 100644 src/db/rec/TeamContributionPointsRec.hpp mode change 100755 => 100644 src/db/rec/TerrainMaterialRec.cpp mode change 100755 => 100644 src/db/rec/TerrainMaterialRec.hpp mode change 100755 => 100644 src/db/rec/TerrainTypeRec.cpp mode change 100755 => 100644 src/db/rec/TerrainTypeRec.hpp mode change 100755 => 100644 src/db/rec/TerrainTypeSoundsRec.cpp mode change 100755 => 100644 src/db/rec/TerrainTypeSoundsRec.hpp mode change 100755 => 100644 src/db/rec/TotemCategoryRec.cpp mode change 100755 => 100644 src/db/rec/TotemCategoryRec.hpp mode change 100755 => 100644 src/db/rec/TransportAnimationRec.cpp mode change 100755 => 100644 src/db/rec/TransportAnimationRec.hpp mode change 100755 => 100644 src/db/rec/TransportPhysicsRec.cpp mode change 100755 => 100644 src/db/rec/TransportPhysicsRec.hpp mode change 100755 => 100644 src/db/rec/TransportRotationRec.cpp mode change 100755 => 100644 src/db/rec/TransportRotationRec.hpp mode change 100755 => 100644 src/db/rec/UISoundLookupsRec.cpp mode change 100755 => 100644 src/db/rec/UISoundLookupsRec.hpp mode change 100755 => 100644 src/db/rec/UnitBloodLevelsRec.cpp mode change 100755 => 100644 src/db/rec/UnitBloodLevelsRec.hpp mode change 100755 => 100644 src/db/rec/UnitBloodRec.cpp mode change 100755 => 100644 src/db/rec/UnitBloodRec.hpp mode change 100755 => 100644 src/db/rec/VehicleRec.cpp mode change 100755 => 100644 src/db/rec/VehicleRec.hpp mode change 100755 => 100644 src/db/rec/VehicleSeatRec.cpp mode change 100755 => 100644 src/db/rec/VehicleSeatRec.hpp mode change 100755 => 100644 src/db/rec/VehicleUIIndSeatRec.cpp mode change 100755 => 100644 src/db/rec/VehicleUIIndSeatRec.hpp mode change 100755 => 100644 src/db/rec/VehicleUIIndicatorRec.cpp mode change 100755 => 100644 src/db/rec/VehicleUIIndicatorRec.hpp mode change 100755 => 100644 src/db/rec/VideoHardwareRec.cpp mode change 100755 => 100644 src/db/rec/VideoHardwareRec.hpp mode change 100755 => 100644 src/db/rec/VocalUISoundsRec.cpp mode change 100755 => 100644 src/db/rec/VocalUISoundsRec.hpp mode change 100755 => 100644 src/db/rec/WMOAreaTableRec.cpp mode change 100755 => 100644 src/db/rec/WMOAreaTableRec.hpp mode change 100755 => 100644 src/db/rec/WeaponImpactSoundsRec.cpp mode change 100755 => 100644 src/db/rec/WeaponImpactSoundsRec.hpp mode change 100755 => 100644 src/db/rec/WeaponSwingSounds2Rec.cpp mode change 100755 => 100644 src/db/rec/WeaponSwingSounds2Rec.hpp mode change 100755 => 100644 src/db/rec/WeatherRec.cpp mode change 100755 => 100644 src/db/rec/WeatherRec.hpp mode change 100755 => 100644 src/db/rec/WorldChunkSoundsRec.cpp mode change 100755 => 100644 src/db/rec/WorldChunkSoundsRec.hpp mode change 100755 => 100644 src/db/rec/WorldMapAreaRec.cpp mode change 100755 => 100644 src/db/rec/WorldMapAreaRec.hpp mode change 100755 => 100644 src/db/rec/WorldMapContinentRec.cpp mode change 100755 => 100644 src/db/rec/WorldMapContinentRec.hpp mode change 100755 => 100644 src/db/rec/WorldMapOverlayRec.cpp mode change 100755 => 100644 src/db/rec/WorldMapOverlayRec.hpp mode change 100755 => 100644 src/db/rec/WorldMapTransformsRec.cpp mode change 100755 => 100644 src/db/rec/WorldMapTransformsRec.hpp mode change 100755 => 100644 src/db/rec/WorldSafeLocsRec.cpp mode change 100755 => 100644 src/db/rec/WorldSafeLocsRec.hpp mode change 100755 => 100644 src/db/rec/WorldStateUIRec.cpp mode change 100755 => 100644 src/db/rec/WorldStateUIRec.hpp mode change 100755 => 100644 src/db/rec/WorldStateZoneSoundsRec.cpp mode change 100755 => 100644 src/db/rec/WorldStateZoneSoundsRec.hpp mode change 100755 => 100644 src/db/rec/WowError_StringsRec.cpp mode change 100755 => 100644 src/db/rec/WowError_StringsRec.hpp mode change 100755 => 100644 src/db/rec/ZoneIntroMusicTableRec.cpp mode change 100755 => 100644 src/db/rec/ZoneIntroMusicTableRec.hpp mode change 100755 => 100644 src/db/rec/ZoneLightPointRec.cpp mode change 100755 => 100644 src/db/rec/ZoneLightPointRec.hpp mode change 100755 => 100644 src/db/rec/ZoneLightRec.cpp mode change 100755 => 100644 src/db/rec/ZoneLightRec.hpp mode change 100755 => 100644 src/db/rec/ZoneMusicRec.cpp mode change 100755 => 100644 src/db/rec/ZoneMusicRec.hpp mode change 100755 => 100644 src/db/rec/gtBarberShopCostBaseRec.cpp mode change 100755 => 100644 src/db/rec/gtBarberShopCostBaseRec.hpp mode change 100755 => 100644 src/db/rec/gtChanceToMeleeCritBaseRec.cpp mode change 100755 => 100644 src/db/rec/gtChanceToMeleeCritBaseRec.hpp mode change 100755 => 100644 src/db/rec/gtChanceToMeleeCritRec.cpp mode change 100755 => 100644 src/db/rec/gtChanceToMeleeCritRec.hpp mode change 100755 => 100644 src/db/rec/gtChanceToSpellCritBaseRec.cpp mode change 100755 => 100644 src/db/rec/gtChanceToSpellCritBaseRec.hpp mode change 100755 => 100644 src/db/rec/gtChanceToSpellCritRec.cpp mode change 100755 => 100644 src/db/rec/gtChanceToSpellCritRec.hpp mode change 100755 => 100644 src/db/rec/gtCombatRatingsRec.cpp mode change 100755 => 100644 src/db/rec/gtCombatRatingsRec.hpp mode change 100755 => 100644 src/db/rec/gtNPCManaCostScalerRec.cpp mode change 100755 => 100644 src/db/rec/gtNPCManaCostScalerRec.hpp mode change 100755 => 100644 src/db/rec/gtOCTClassCombatRatingScalarRec.cpp mode change 100755 => 100644 src/db/rec/gtOCTClassCombatRatingScalarRec.hpp mode change 100755 => 100644 src/db/rec/gtOCTRegenHPRec.cpp mode change 100755 => 100644 src/db/rec/gtOCTRegenHPRec.hpp mode change 100755 => 100644 src/db/rec/gtOCTRegenMPRec.cpp mode change 100755 => 100644 src/db/rec/gtOCTRegenMPRec.hpp mode change 100755 => 100644 src/db/rec/gtRegenHPPerSptRec.cpp mode change 100755 => 100644 src/db/rec/gtRegenHPPerSptRec.hpp mode change 100755 => 100644 src/db/rec/gtRegenMPPerSptRec.cpp mode change 100755 => 100644 src/db/rec/gtRegenMPPerSptRec.hpp mode change 100755 => 100644 src/db/rec/gtSpellScalingRec.cpp mode change 100755 => 100644 src/db/rec/gtSpellScalingRec.hpp create mode 100644 src/glue/CCharacterComponent.cpp create mode 100644 src/glue/CCharacterComponent.hpp create mode 100644 src/glue/CCharacterCreation.cpp create mode 100644 src/glue/CCharacterCreation.hpp diff --git a/src/client/Client.cpp b/src/client/Client.cpp index 33829c1..b2390a0 100644 --- a/src/client/Client.cpp +++ b/src/client/Client.cpp @@ -39,6 +39,7 @@ CVar* Client::g_accountUsesTokenVar; CVar* Client::g_movieVar; CVar* Client::g_expansionMovieVar; CVar* Client::g_movieSubtitleVar; +CVar* Client::g_lastCharacterIndex; HEVENTCONTEXT Client::g_clientEventContext; @@ -168,6 +169,16 @@ void ClientRegisterConsoleCommands() { false ); + Client::g_lastCharacterIndex = CVar::Register( + "lastCharacterIndex", + "Last character selected", + 0, + "0", + nullptr, + GAME, + false, + nullptr, + false); // TODO } diff --git a/src/client/Client.hpp b/src/client/Client.hpp index 0569966..31d8902 100644 --- a/src/client/Client.hpp +++ b/src/client/Client.hpp @@ -14,6 +14,7 @@ namespace Client { extern CVar* g_movieVar; extern CVar* g_expansionMovieVar; extern CVar* g_movieSubtitleVar; + extern CVar* g_lastCharacterIndex; extern HEVENTCONTEXT g_clientEventContext; extern char g_currentLocaleName[5]; } diff --git a/src/client/ClientServices.cpp b/src/client/ClientServices.cpp index a306b70..7686ab6 100644 --- a/src/client/ClientServices.cpp +++ b/src/client/ClientServices.cpp @@ -9,6 +9,113 @@ #include #include +static const char* s_errorCodeTokens[] = { + "RESPONSE_SUCCESS", + "RESPONSE_FAILURE", + "RESPONSE_CANCELLED", + "RESPONSE_DISCONNECTED", + "RESPONSE_FAILED_TO_CONNECT", + "RESPONSE_CONNECTED", + "RESPONSE_VERSION_MISMATCH", + "CSTATUS_CONNECTING", + "CSTATUS_NEGOTIATING_SECURITY", + "CSTATUS_NEGOTIATION_COMPLETE", + "CSTATUS_NEGOTIATION_FAILED", + "CSTATUS_AUTHENTICATING", + "AUTH_OK", + "AUTH_FAILED", + "AUTH_REJECT", + "AUTH_BAD_SERVER_PROOF", + "AUTH_UNAVAILABLE", + "AUTH_SYSTEM_ERROR", + "AUTH_BILLING_ERROR", + "AUTH_BILLING_EXPIRED", + "AUTH_VERSION_MISMATCH", + "AUTH_UNKNOWN_ACCOUNT", + "AUTH_INCORRECT_PASSWORD", + "AUTH_SESSION_EXPIRED", + "AUTH_SERVER_SHUTTING_DOWN", + "AUTH_ALREADY_LOGGING_IN", + "AUTH_LOGIN_SERVER_NOT_FOUND", + "AUTH_WAIT_QUEUE", + "AUTH_BANNED", + "AUTH_ALREADY_ONLINE", + "AUTH_NO_TIME", + "AUTH_DB_BUSY", + "AUTH_SUSPENDED", + "AUTH_PARENTAL_CONTROL", + "AUTH_LOCKED_ENFORCED", + "REALM_LIST_IN_PROGRESS", + "REALM_LIST_SUCCESS", + "REALM_LIST_FAILED", + "REALM_LIST_INVALID", + "REALM_LIST_REALM_NOT_FOUND", + "ACCOUNT_CREATE_IN_PROGRESS", + "ACCOUNT_CREATE_SUCCESS", + "ACCOUNT_CREATE_FAILED", + "CHAR_LIST_RETRIEVING", + "CHAR_LIST_RETRIEVED", + "CHAR_LIST_FAILED", + "CHAR_CREATE_IN_PROGRESS", + "CHAR_CREATE_SUCCESS", + "CHAR_CREATE_ERROR", + "CHAR_CREATE_FAILED", + "CHAR_CREATE_NAME_IN_USE", + "CHAR_CREATE_DISABLED", + "CHAR_CREATE_PVP_TEAMS_VIOLATION", + "CHAR_CREATE_SERVER_LIMIT", + "CHAR_CREATE_ACCOUNT_LIMIT", + "CHAR_CREATE_SERVER_QUEUE", + "CHAR_CREATE_ONLY_EXISTING", + "CHAR_CREATE_EXPANSION", + "CHAR_CREATE_EXPANSION_CLASS", + "CHAR_CREATE_LEVEL_REQUIREMENT", + "CHAR_CREATE_UNIQUE_CLASS_LIMIT", + "CHAR_CREATE_CHARACTER_IN_GUILD", + "CHAR_CREATE_RESTRICTED_RACECLASS", + "CHAR_CREATE_CHARACTER_CHOOSE_RACE", + "CHAR_CREATE_CHARACTER_ARENA_LEADER", + "CHAR_CREATE_CHARACTER_DELETE_MAIL", + "CHAR_CREATE_CHARACTER_SWAP_FACTION", + "CHAR_CREATE_CHARACTER_RACE_ONLY", + "CHAR_CREATE_CHARACTER_GOLD_LIMIT", + "CHAR_CREATE_FORCE_LOGIN", + "CHAR_DELETE_IN_PROGRESS", + "CHAR_DELETE_SUCCESS", + "CHAR_DELETE_FAILED", + "CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER", + "CHAR_DELETE_FAILED_GUILD_LEADER", + "CHAR_DELETE_FAILED_ARENA_CAPTAIN", + "CHAR_LOGIN_IN_PROGRESS", + "CHAR_LOGIN_SUCCESS", + "CHAR_LOGIN_NO_WORLD", + "CHAR_LOGIN_DUPLICATE_CHARACTER", + "CHAR_LOGIN_NO_INSTANCES", + "CHAR_LOGIN_FAILED", + "CHAR_LOGIN_DISABLED", + "CHAR_LOGIN_NO_CHARACTER", + "CHAR_LOGIN_LOCKED_FOR_TRANSFER", + "CHAR_LOGIN_LOCKED_BY_BILLING", + "CHAR_LOGIN_LOCKED_BY_MOBILE_AH", + "CHAR_NAME_SUCCESS", + "CHAR_NAME_FAILURE", + "CHAR_NAME_NO_NAME", + "CHAR_NAME_TOO_SHORT", + "CHAR_NAME_TOO_LONG", + "CHAR_NAME_INVALID_CHARACTER", + "CHAR_NAME_MIXED_LANGUAGES", + "CHAR_NAME_PROFANE", + "CHAR_NAME_RESERVED", + "CHAR_NAME_INVALID_APOSTROPHE", + "CHAR_NAME_MULTIPLE_APOSTROPHES", + "CHAR_NAME_THREE_CONSECUTIVE", + "CHAR_NAME_INVALID_SPACE", + "CHAR_NAME_CONSECUTIVE_SPACES", + "CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS", + "CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END", + "CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME", +}; + ClientConnection* g_clientConnection; char ClientServices::s_accountName[1280]; @@ -27,6 +134,20 @@ CVar* ClientServices::s_darkPortalVar = nullptr; CVar* ClientServices::s_ServerAlertVar = nullptr; CVar* ClientServices::s_realmListVar = nullptr; +const char* ClientServices::GetErrorToken(uint32_t token) { + if (token < sizeof(s_errorCodeTokens) / sizeof(s_errorCodeTokens[0])) { + return s_errorCodeTokens[token]; + } else { + return ""; + } +} + +bool ClientServices::ValidDisconnect(const void* client) { + STORM_ASSERT(client); + STORM_ASSERT(ClientServices::s_currentConnection); + return client == ClientServices::s_currentConnection; +} + void ClientServices::ConnectToSelectedServer() { if (!ClientServices::s_selectRealmInfoValid && !ClientServices::SetSelectedRealmInfo(0)) { ClientServices::Connection()->Complete(0, 39); @@ -69,13 +190,25 @@ void ClientServices::SetMessageHandler(NETMESSAGE msgId, MESSAGE_HANDLER handler } void ClientServices::GetRealmList() { - // TODO + STORM_ASSERT(ClientServices::s_currentConnection); + ClientServices::s_currentConnection->Initiate(COP_GET_REALMS, 35, nullptr); + if (ClientServices::s_loginObj->IsLoggedOn()) { + ClientServices::s_loginObj->GetRealmList(); + } else { + ClientServices::s_loginObj->Reconnect(); + } } void ClientServices::GetCharacterList() { + STORM_ASSERT(ClientServices::s_currentConnection); ClientServices::s_currentConnection->GetCharacterList(); } +void ClientServices::EnumerateCharacters(ENUMERATE_CHARACTERS_CALLBACK fcn, void* param) { + STORM_ASSERT(ClientServices::s_currentConnection); + ClientServices::s_currentConnection->EnumerateCharacters(fcn, param); +} + void ClientServices::CharacterLogin(uint64_t id, const C3Vector& position) { ClientServices::s_currentConnection->CharacterLogin(id); } @@ -110,6 +243,11 @@ const REALM_INFO* ClientServices::GetSelectedRealm() { return &ClientServices::s_selectRealmInfo; } +void ClientServices::CharacterDelete(uint64_t guid) { + STORM_ASSERT(ClientServices::s_currentConnection); + ClientServices::s_currentConnection->DeleteCharacter(guid); +} + void ClientServices::Initialize() { if (!g_clientConnection) { ClientServices::s_clientRealmResponse = NEW(ClientRealmResponseAdapter); @@ -235,6 +373,7 @@ void ClientServices::LoginServerStatus(LOGIN_STATE state, LOGIN_RESULT result, c void ClientServices::RealmEnumCallback(uint32_t a2) { auto connection = ClientServices::Connection(); + STORM_ASSERT(connection); if (a2 == 1) { connection->Complete(0, 23); @@ -246,7 +385,13 @@ void ClientServices::RealmEnumCallback(uint32_t a2) { return; } - // TODO statusCop checks + // TODO: Proper implementation + if (connection->m_statusCop != COP_CONNECT) { + if (connection->m_statusCop == COP_GET_REALMS) { + connection->Complete(1, 36); + } + return; + } if (ClientServices::LoginConnection()->GetLoginServerType() == 1) { // TODO Battlenet logic diff --git a/src/client/ClientServices.hpp b/src/client/ClientServices.hpp index 4cc7b1f..0e96354 100644 --- a/src/client/ClientServices.hpp +++ b/src/client/ClientServices.hpp @@ -32,16 +32,20 @@ class ClientServices : public LoginResponse { static CVar* s_patchListVar; // Static functions + static const char* GetErrorToken(uint32_t token); + static bool ValidDisconnect(const void* client); static void ConnectToSelectedServer(); static ClientConnection* Connection(); static ClientServices* GetInstance(); static void SetMessageHandler(NETMESSAGE msgId, MESSAGE_HANDLER handler, void* param); static void GetRealmList(); static void GetCharacterList(); + static void EnumerateCharacters(ENUMERATE_CHARACTERS_CALLBACK fcn, void* param); static void CharacterLogin(uint64_t id, const C3Vector& position); static REALM_INFO* GetRealmInfoByIndex(int32_t index); static const char* GetSelectedRealmName(); static const REALM_INFO* GetSelectedRealm(); + static void CharacterDelete(uint64_t guid); static void Initialize(); static Login* LoginConnection(); static void Logon(const char* accountName, const char* password); diff --git a/src/clientobject/Player_C.cpp b/src/clientobject/Player_C.cpp new file mode 100644 index 0000000..95b0564 --- /dev/null +++ b/src/clientobject/Player_C.cpp @@ -0,0 +1,51 @@ +#include "clientobject/Player_C.hpp" +#include "clientobject/Types.hpp" +#include "db/Db.hpp" +#include + + +const CreatureModelDataRec* Player_C_GetModelName(uint32_t race, uint32_t sex) { + STORM_ASSERT(sex < UNITSEX_LAST); + + auto displayId = Player_C_GetDisplayId(race, sex); + auto record = g_creatureDisplayInfoDB.GetRecord(displayId); + if (!record) { + SErrPrepareAppFatal(__FILE__, __LINE__); + SErrDisplayAppFatal("Error, unknown displayInfo %d specified for player race %d sex %d!", displayId, race, sex); + } + + auto modelData = g_creatureModelDataDB.GetRecord(record->m_modelID); + if (!modelData) { + SErrPrepareAppFatal(__FILE__, __LINE__); + SErrDisplayAppFatal("Error, unknown model record %d specified for player race %d sex %d!", record->m_modelID, race, sex); + } + + return modelData; +} + +uint32_t Player_C_GetDisplayId(uint32_t race, uint32_t sex) { + STORM_ASSERT(sex < UNITSEX_LAST); + + auto record = g_chrRacesDB.GetRecord(race); + if (!record) { + SErrPrepareAppFatal(__FILE__, __LINE__); + SErrDisplayAppFatal("Error, race %d not found in race table!", race); + } + + if (sex == UNITSEX_MALE) { + return record->m_maleDisplayID; + } + + if (sex == UNITSEX_FEMALE) { + return record->m_femaleDisplayID; + } + + if (sex == UNITSEX_NONE) { + SErrPrepareAppFatal(__FILE__, __LINE__); + SErrDisplayAppFatal("Error, attempted to look up model for player with sex %d (UNITSEX_NONE), all players have sex! =D", 2); + } + + SErrPrepareAppFatal(__FILE__, __LINE__); + SErrDisplayAppFatal("Error, unrecognized sex code %d!", sex); + return 0; +} diff --git a/src/clientobject/Player_C.hpp b/src/clientobject/Player_C.hpp new file mode 100644 index 0000000..10ce0c4 --- /dev/null +++ b/src/clientobject/Player_C.hpp @@ -0,0 +1,14 @@ +#ifndef CLIENTOBJECT_PLAYER_C_HPP +#define CLIENTOBJECT_PLAYER_C_HPP + +#include + + +class CreatureModelDataRec; + + +const CreatureModelDataRec* Player_C_GetModelName(uint32_t race, uint32_t sex); +uint32_t Player_C_GetDisplayId(uint32_t race, uint32_t sex); + + +#endif // CLIENTOBJECT_PLAYER_C_HPP diff --git a/src/clientobject/Types.hpp b/src/clientobject/Types.hpp new file mode 100644 index 0000000..a5028e1 --- /dev/null +++ b/src/clientobject/Types.hpp @@ -0,0 +1,14 @@ +#ifndef CLIENTOBJECT_TYPES_HPP +#define CLIENTOBJECT_TYPES_HPP + + +enum UNIT_SEX { + UNITSEX_MALE = 0x0, + UNITSEX_FEMALE = 0x1, + UNITSEX_NONE = 0x2, + UNITSEX_LAST = 0x3, + UNITSEX_BOTH = 0x3, +}; + + +#endif diff --git a/src/clientobject/Unit_C.cpp b/src/clientobject/Unit_C.cpp index fe9436a..495b817 100644 --- a/src/clientobject/Unit_C.cpp +++ b/src/clientobject/Unit_C.cpp @@ -1,8 +1,49 @@ #include "clientobject/Unit_C.hpp" -const char* CGUnit_C::GetDisplayRaceNameFromRecord(ChrRacesRec* record, uint8_t sexIn, uint8_t* sexOut) { - const char* result; +#include "db/Db.hpp" + +const char* CGUnit_C::GetDisplayRaceNameFromRecord(ChrRacesRec* record, uint8_t sexIn, uint8_t* sexOut) { + if (sexOut) { + *sexOut = sexIn; + } + if (!record) { + return nullptr; + } + if (!sexIn) { + if (record->m_nameMale[0]) { + return record->m_nameMale; + } + + if (record->m_nameFemale[0]) { + if (sexOut) { + *sexOut = 1; + } + return record->m_nameFemale; + } + + return record->m_name; + } + + if (sexIn != 1) { + return record->m_name; + } + + if (record->m_nameFemale[0]) { + return record->m_nameFemale; + } + + if (!record->m_nameMale[0]) { + return record->m_name; + } + + if (sexOut) { + *sexOut = 0; + } + return record->m_nameMale; +} + +const char* CGUnit_C::GetDisplayClassNameFromRecord(ChrClassesRec* record, uint8_t sexIn, uint8_t* sexOut) { if (sexOut) { *sexOut = sexIn; } diff --git a/src/clientobject/Unit_C.hpp b/src/clientobject/Unit_C.hpp index 01299ba..c5a2c69 100644 --- a/src/clientobject/Unit_C.hpp +++ b/src/clientobject/Unit_C.hpp @@ -1,11 +1,15 @@ #ifndef CLIENTOBJECT_UNIT_C_HPP #define CLIENTOBJECT_UNIT_C_HPP -#include "db/rec/ChrRacesRec.hpp" +#include + +class ChrRacesRec; +class ChrClassesRec; class CGUnit_C { public: static const char* GetDisplayRaceNameFromRecord(ChrRacesRec* record, uint8_t sexIn, uint8_t* sexOut = nullptr); + static const char* GetDisplayClassNameFromRecord(ChrClassesRec* record, uint8_t sexIn, uint8_t* sexOut = nullptr); }; #endif // CLIENTOBJECT_UNIT_C_HPP diff --git a/src/db/StaticDb.cpp b/src/db/StaticDb.cpp old mode 100755 new mode 100644 diff --git a/src/db/StaticDb.hpp b/src/db/StaticDb.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/Achievement_CategoryRec.cpp b/src/db/rec/Achievement_CategoryRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/Achievement_CategoryRec.hpp b/src/db/rec/Achievement_CategoryRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/Achievement_CriteriaRec.cpp b/src/db/rec/Achievement_CriteriaRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/Achievement_CriteriaRec.hpp b/src/db/rec/Achievement_CriteriaRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimKitBoneSetAliasRec.cpp b/src/db/rec/AnimKitBoneSetAliasRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimKitBoneSetAliasRec.hpp b/src/db/rec/AnimKitBoneSetAliasRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimKitBoneSetRec.cpp b/src/db/rec/AnimKitBoneSetRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimKitBoneSetRec.hpp b/src/db/rec/AnimKitBoneSetRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimKitConfigBoneSetRec.cpp b/src/db/rec/AnimKitConfigBoneSetRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimKitConfigBoneSetRec.hpp b/src/db/rec/AnimKitConfigBoneSetRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimKitConfigRec.cpp b/src/db/rec/AnimKitConfigRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimKitConfigRec.hpp b/src/db/rec/AnimKitConfigRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimKitPriorityRec.cpp b/src/db/rec/AnimKitPriorityRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimKitPriorityRec.hpp b/src/db/rec/AnimKitPriorityRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimKitRec.cpp b/src/db/rec/AnimKitRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimKitRec.hpp b/src/db/rec/AnimKitRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimKitSegmentRec.cpp b/src/db/rec/AnimKitSegmentRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimKitSegmentRec.hpp b/src/db/rec/AnimKitSegmentRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimReplacementRec.cpp b/src/db/rec/AnimReplacementRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimReplacementRec.hpp b/src/db/rec/AnimReplacementRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimReplacementSetRec.cpp b/src/db/rec/AnimReplacementSetRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimReplacementSetRec.hpp b/src/db/rec/AnimReplacementSetRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimationDataRec.cpp b/src/db/rec/AnimationDataRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AnimationDataRec.hpp b/src/db/rec/AnimationDataRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AreaAssignmentRec.cpp b/src/db/rec/AreaAssignmentRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AreaAssignmentRec.hpp b/src/db/rec/AreaAssignmentRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AreaGroupRec.cpp b/src/db/rec/AreaGroupRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AreaGroupRec.hpp b/src/db/rec/AreaGroupRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AreaPOIRec.cpp b/src/db/rec/AreaPOIRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AreaPOIRec.hpp b/src/db/rec/AreaPOIRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AreaTableRec.cpp b/src/db/rec/AreaTableRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AreaTableRec.hpp b/src/db/rec/AreaTableRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AreaTriggerRec.cpp b/src/db/rec/AreaTriggerRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AreaTriggerRec.hpp b/src/db/rec/AreaTriggerRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ArmorLocationRec.cpp b/src/db/rec/ArmorLocationRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ArmorLocationRec.hpp b/src/db/rec/ArmorLocationRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AttackAnimKitsRec.cpp b/src/db/rec/AttackAnimKitsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AttackAnimKitsRec.hpp b/src/db/rec/AttackAnimKitsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AttackAnimTypesRec.cpp b/src/db/rec/AttackAnimTypesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AttackAnimTypesRec.hpp b/src/db/rec/AttackAnimTypesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AuctionHouseRec.cpp b/src/db/rec/AuctionHouseRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/AuctionHouseRec.hpp b/src/db/rec/AuctionHouseRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/BankBagSlotPricesRec.cpp b/src/db/rec/BankBagSlotPricesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/BankBagSlotPricesRec.hpp b/src/db/rec/BankBagSlotPricesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/BannedAddonsRec.cpp b/src/db/rec/BannedAddonsRec.cpp new file mode 100644 index 0000000..1df9ad3 --- /dev/null +++ b/src/db/rec/BannedAddonsRec.cpp @@ -0,0 +1,48 @@ +// DO NOT EDIT: generated by whoa-autocode +#include "db/rec/BannedAddOnsRec.hpp" +#include "db/Locale.hpp" +#include "util/SFile.hpp" + +const char* BannedAddOnsRec::GetFilename() { + return "DBFilesClient\\BannedAddOns.dbc"; +} + +uint32_t BannedAddOnsRec::GetNumColumns() { + return 11; +} + +uint32_t BannedAddOnsRec::GetRowSize() { + return 44; +} + +bool BannedAddOnsRec::NeedIDAssigned() { + return false; +} + +int32_t BannedAddOnsRec::GetID() { + return this->m_ID; +} + +void BannedAddOnsRec::SetID(int32_t id) { + this->m_ID = id; +} + +bool BannedAddOnsRec::Read(SFile* f, const char* stringBuffer) { + if ( + !SFile::Read(f, &this->m_ID, sizeof(this->m_ID), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_nameMd5[0], sizeof(m_nameMd5[0]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_nameMd5[1], sizeof(m_nameMd5[0]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_nameMd5[2], sizeof(m_nameMd5[0]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_nameMd5[3], sizeof(m_nameMd5[0]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_versionMd5[0], sizeof(m_versionMd5[0]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_versionMd5[1], sizeof(m_versionMd5[0]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_versionMd5[2], sizeof(m_versionMd5[0]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_versionMd5[3], sizeof(m_versionMd5[0]), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_lastModified, sizeof(this->m_lastModified), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_flags, sizeof(this->m_flags), nullptr, nullptr, nullptr) + ) { + return false; + } + + return true; +} diff --git a/src/db/rec/BannedAddonsRec.hpp b/src/db/rec/BannedAddonsRec.hpp new file mode 100644 index 0000000..a21397f --- /dev/null +++ b/src/db/rec/BannedAddonsRec.hpp @@ -0,0 +1,26 @@ +// DO NOT EDIT: generated by whoa-autocode +#ifndef DB_REC_BANNED_ADD_ONS_REC_HPP +#define DB_REC_BANNED_ADD_ONS_REC_HPP + +#include + +class SFile; + +class BannedAddOnsRec { + public: + int32_t m_ID; + int32_t m_nameMd5[4]; + int32_t m_versionMd5[4]; + int32_t m_lastModified; + int32_t m_flags; + + static const char* GetFilename(); + static uint32_t GetNumColumns(); + static uint32_t GetRowSize(); + static bool NeedIDAssigned(); + int32_t GetID(); + void SetID(int32_t id); + bool Read(SFile* f, const char* stringBuffer); +}; + +#endif \ No newline at end of file diff --git a/src/db/rec/BarberShopStyleRec.cpp b/src/db/rec/BarberShopStyleRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/BarberShopStyleRec.hpp b/src/db/rec/BarberShopStyleRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/BattlemasterListRec.cpp b/src/db/rec/BattlemasterListRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/BattlemasterListRec.hpp b/src/db/rec/BattlemasterListRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CameraModeRec.cpp b/src/db/rec/CameraModeRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CameraModeRec.hpp b/src/db/rec/CameraModeRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CameraShakesRec.cpp b/src/db/rec/CameraShakesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CameraShakesRec.hpp b/src/db/rec/CameraShakesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CharBaseInfoRec.cpp b/src/db/rec/CharBaseInfoRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CharBaseInfoRec.hpp b/src/db/rec/CharBaseInfoRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CharHairGeosetsRec.cpp b/src/db/rec/CharHairGeosetsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CharHairGeosetsRec.hpp b/src/db/rec/CharHairGeosetsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CharHairTexturesRec.cpp b/src/db/rec/CharHairTexturesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CharHairTexturesRec.hpp b/src/db/rec/CharHairTexturesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CharSectionsRec.cpp b/src/db/rec/CharSectionsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CharSectionsRec.hpp b/src/db/rec/CharSectionsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CharStartOutfitRec.cpp b/src/db/rec/CharStartOutfitRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CharStartOutfitRec.hpp b/src/db/rec/CharStartOutfitRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CharTitlesRec.cpp b/src/db/rec/CharTitlesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CharTitlesRec.hpp b/src/db/rec/CharTitlesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CharVariationsRec.cpp b/src/db/rec/CharVariationsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CharVariationsRec.hpp b/src/db/rec/CharVariationsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CharacterFacialHairStylesRec.cpp b/src/db/rec/CharacterFacialHairStylesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CharacterFacialHairStylesRec.hpp b/src/db/rec/CharacterFacialHairStylesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ChatChannelsRec.cpp b/src/db/rec/ChatChannelsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ChatChannelsRec.hpp b/src/db/rec/ChatChannelsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ChatProfanityRec.cpp b/src/db/rec/ChatProfanityRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ChatProfanityRec.hpp b/src/db/rec/ChatProfanityRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ChrClassesRec.cpp b/src/db/rec/ChrClassesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ChrClassesRec.hpp b/src/db/rec/ChrClassesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CinematicCameraRec.cpp b/src/db/rec/CinematicCameraRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CinematicCameraRec.hpp b/src/db/rec/CinematicCameraRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CinematicSequencesRec.cpp b/src/db/rec/CinematicSequencesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CinematicSequencesRec.hpp b/src/db/rec/CinematicSequencesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CreatureDisplayInfoExtraRec.cpp b/src/db/rec/CreatureDisplayInfoExtraRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CreatureDisplayInfoExtraRec.hpp b/src/db/rec/CreatureDisplayInfoExtraRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CreatureDisplayInfoRec.cpp b/src/db/rec/CreatureDisplayInfoRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CreatureDisplayInfoRec.hpp b/src/db/rec/CreatureDisplayInfoRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CreatureFamilyRec.cpp b/src/db/rec/CreatureFamilyRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CreatureFamilyRec.hpp b/src/db/rec/CreatureFamilyRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CreatureModelDataRec.cpp b/src/db/rec/CreatureModelDataRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CreatureModelDataRec.hpp b/src/db/rec/CreatureModelDataRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CreatureMovementInfoRec.cpp b/src/db/rec/CreatureMovementInfoRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CreatureMovementInfoRec.hpp b/src/db/rec/CreatureMovementInfoRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CreatureSoundDataRec.cpp b/src/db/rec/CreatureSoundDataRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CreatureSoundDataRec.hpp b/src/db/rec/CreatureSoundDataRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CreatureSpellDataRec.cpp b/src/db/rec/CreatureSpellDataRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CreatureSpellDataRec.hpp b/src/db/rec/CreatureSpellDataRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CreatureTypeRec.cpp b/src/db/rec/CreatureTypeRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CreatureTypeRec.hpp b/src/db/rec/CreatureTypeRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CurrencyCategoryRec.cpp b/src/db/rec/CurrencyCategoryRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CurrencyCategoryRec.hpp b/src/db/rec/CurrencyCategoryRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CurrencyTypesRec.cpp b/src/db/rec/CurrencyTypesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/CurrencyTypesRec.hpp b/src/db/rec/CurrencyTypesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DanceMovesRec.cpp b/src/db/rec/DanceMovesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DanceMovesRec.hpp b/src/db/rec/DanceMovesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DeathThudLookupsRec.cpp b/src/db/rec/DeathThudLookupsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DeathThudLookupsRec.hpp b/src/db/rec/DeathThudLookupsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DeclinedWordCasesRec.cpp b/src/db/rec/DeclinedWordCasesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DeclinedWordCasesRec.hpp b/src/db/rec/DeclinedWordCasesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DeclinedWordRec.cpp b/src/db/rec/DeclinedWordRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DeclinedWordRec.hpp b/src/db/rec/DeclinedWordRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DestructibleModelDataRec.cpp b/src/db/rec/DestructibleModelDataRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DestructibleModelDataRec.hpp b/src/db/rec/DestructibleModelDataRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DungeonEncounterRec.cpp b/src/db/rec/DungeonEncounterRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DungeonEncounterRec.hpp b/src/db/rec/DungeonEncounterRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DungeonMapChunkRec.cpp b/src/db/rec/DungeonMapChunkRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DungeonMapChunkRec.hpp b/src/db/rec/DungeonMapChunkRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DungeonMapRec.cpp b/src/db/rec/DungeonMapRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DungeonMapRec.hpp b/src/db/rec/DungeonMapRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DurabilityCostsRec.cpp b/src/db/rec/DurabilityCostsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DurabilityCostsRec.hpp b/src/db/rec/DurabilityCostsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DurabilityQualityRec.cpp b/src/db/rec/DurabilityQualityRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/DurabilityQualityRec.hpp b/src/db/rec/DurabilityQualityRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/EmotesRec.cpp b/src/db/rec/EmotesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/EmotesRec.hpp b/src/db/rec/EmotesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/EmotesTextDataRec.cpp b/src/db/rec/EmotesTextDataRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/EmotesTextDataRec.hpp b/src/db/rec/EmotesTextDataRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/EmotesTextRec.cpp b/src/db/rec/EmotesTextRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/EmotesTextRec.hpp b/src/db/rec/EmotesTextRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/EmotesTextSoundRec.cpp b/src/db/rec/EmotesTextSoundRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/EmotesTextSoundRec.hpp b/src/db/rec/EmotesTextSoundRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/EnvironmentalDamageRec.cpp b/src/db/rec/EnvironmentalDamageRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/EnvironmentalDamageRec.hpp b/src/db/rec/EnvironmentalDamageRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ExhaustionRec.cpp b/src/db/rec/ExhaustionRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ExhaustionRec.hpp b/src/db/rec/ExhaustionRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/FactionGroupRec.cpp b/src/db/rec/FactionGroupRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/FactionGroupRec.hpp b/src/db/rec/FactionGroupRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/FactionRec.cpp b/src/db/rec/FactionRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/FactionRec.hpp b/src/db/rec/FactionRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/FactionTemplateRec.cpp b/src/db/rec/FactionTemplateRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/FactionTemplateRec.hpp b/src/db/rec/FactionTemplateRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/FileDataRec.cpp b/src/db/rec/FileDataRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/FileDataRec.hpp b/src/db/rec/FileDataRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/FootprintTexturesRec.cpp b/src/db/rec/FootprintTexturesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/FootprintTexturesRec.hpp b/src/db/rec/FootprintTexturesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/FootstepTerrainLookupRec.cpp b/src/db/rec/FootstepTerrainLookupRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/FootstepTerrainLookupRec.hpp b/src/db/rec/FootstepTerrainLookupRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GMSurveyAnswersRec.cpp b/src/db/rec/GMSurveyAnswersRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GMSurveyAnswersRec.hpp b/src/db/rec/GMSurveyAnswersRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GMSurveyCurrentSurveyRec.cpp b/src/db/rec/GMSurveyCurrentSurveyRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GMSurveyCurrentSurveyRec.hpp b/src/db/rec/GMSurveyCurrentSurveyRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GMSurveyQuestionsRec.cpp b/src/db/rec/GMSurveyQuestionsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GMSurveyQuestionsRec.hpp b/src/db/rec/GMSurveyQuestionsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GMSurveySurveysRec.cpp b/src/db/rec/GMSurveySurveysRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GMSurveySurveysRec.hpp b/src/db/rec/GMSurveySurveysRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GMTicketCategoryRec.cpp b/src/db/rec/GMTicketCategoryRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GMTicketCategoryRec.hpp b/src/db/rec/GMTicketCategoryRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GameObjectArtKitRec.cpp b/src/db/rec/GameObjectArtKitRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GameObjectArtKitRec.hpp b/src/db/rec/GameObjectArtKitRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GameObjectDisplayInfoRec.cpp b/src/db/rec/GameObjectDisplayInfoRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GameObjectDisplayInfoRec.hpp b/src/db/rec/GameObjectDisplayInfoRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GameTablesRec.cpp b/src/db/rec/GameTablesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GameTablesRec.hpp b/src/db/rec/GameTablesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GameTipsRec.cpp b/src/db/rec/GameTipsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GameTipsRec.hpp b/src/db/rec/GameTipsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GemPropertiesRec.cpp b/src/db/rec/GemPropertiesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GemPropertiesRec.hpp b/src/db/rec/GemPropertiesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GlueScreenEmoteRec.cpp b/src/db/rec/GlueScreenEmoteRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GlueScreenEmoteRec.hpp b/src/db/rec/GlueScreenEmoteRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GlyphPropertiesRec.cpp b/src/db/rec/GlyphPropertiesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GlyphPropertiesRec.hpp b/src/db/rec/GlyphPropertiesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GlyphSlotRec.cpp b/src/db/rec/GlyphSlotRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GlyphSlotRec.hpp b/src/db/rec/GlyphSlotRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GroundEffectDoodadRec.cpp b/src/db/rec/GroundEffectDoodadRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GroundEffectDoodadRec.hpp b/src/db/rec/GroundEffectDoodadRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GroundEffectTextureRec.cpp b/src/db/rec/GroundEffectTextureRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GroundEffectTextureRec.hpp b/src/db/rec/GroundEffectTextureRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GuildPerkSpellsRec.cpp b/src/db/rec/GuildPerkSpellsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/GuildPerkSpellsRec.hpp b/src/db/rec/GuildPerkSpellsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/HelmetGeosetVisDataRec.cpp b/src/db/rec/HelmetGeosetVisDataRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/HelmetGeosetVisDataRec.hpp b/src/db/rec/HelmetGeosetVisDataRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/HolidayDescriptionsRec.cpp b/src/db/rec/HolidayDescriptionsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/HolidayDescriptionsRec.hpp b/src/db/rec/HolidayDescriptionsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/HolidayNamesRec.cpp b/src/db/rec/HolidayNamesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/HolidayNamesRec.hpp b/src/db/rec/HolidayNamesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/HolidaysRec.cpp b/src/db/rec/HolidaysRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/HolidaysRec.hpp b/src/db/rec/HolidaysRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemArmorQualityRec.cpp b/src/db/rec/ItemArmorQualityRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemArmorQualityRec.hpp b/src/db/rec/ItemArmorQualityRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemArmorShieldRec.cpp b/src/db/rec/ItemArmorShieldRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemArmorShieldRec.hpp b/src/db/rec/ItemArmorShieldRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemArmorTotalRec.cpp b/src/db/rec/ItemArmorTotalRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemArmorTotalRec.hpp b/src/db/rec/ItemArmorTotalRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemBagFamilyRec.cpp b/src/db/rec/ItemBagFamilyRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemBagFamilyRec.hpp b/src/db/rec/ItemBagFamilyRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemClassRec.cpp b/src/db/rec/ItemClassRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemClassRec.hpp b/src/db/rec/ItemClassRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemCondExtCostsRec.cpp b/src/db/rec/ItemCondExtCostsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemCondExtCostsRec.hpp b/src/db/rec/ItemCondExtCostsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemDamageAmmoRec.cpp b/src/db/rec/ItemDamageAmmoRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemDamageAmmoRec.hpp b/src/db/rec/ItemDamageAmmoRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemDamageOneHandCasterRec.cpp b/src/db/rec/ItemDamageOneHandCasterRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemDamageOneHandCasterRec.hpp b/src/db/rec/ItemDamageOneHandCasterRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemDamageOneHandRec.cpp b/src/db/rec/ItemDamageOneHandRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemDamageOneHandRec.hpp b/src/db/rec/ItemDamageOneHandRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemDamageRangedRec.cpp b/src/db/rec/ItemDamageRangedRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemDamageRangedRec.hpp b/src/db/rec/ItemDamageRangedRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemDamageThrownRec.cpp b/src/db/rec/ItemDamageThrownRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemDamageThrownRec.hpp b/src/db/rec/ItemDamageThrownRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemDamageTwoHandCasterRec.cpp b/src/db/rec/ItemDamageTwoHandCasterRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemDamageTwoHandCasterRec.hpp b/src/db/rec/ItemDamageTwoHandCasterRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemDamageTwoHandRec.cpp b/src/db/rec/ItemDamageTwoHandRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemDamageTwoHandRec.hpp b/src/db/rec/ItemDamageTwoHandRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemDamageWandRec.cpp b/src/db/rec/ItemDamageWandRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemDamageWandRec.hpp b/src/db/rec/ItemDamageWandRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemDisplayInfoRec.cpp b/src/db/rec/ItemDisplayInfoRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemDisplayInfoRec.hpp b/src/db/rec/ItemDisplayInfoRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemExtendedCostRec.cpp b/src/db/rec/ItemExtendedCostRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemExtendedCostRec.hpp b/src/db/rec/ItemExtendedCostRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemGroupSoundsRec.cpp b/src/db/rec/ItemGroupSoundsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemGroupSoundsRec.hpp b/src/db/rec/ItemGroupSoundsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemLimitCategoryRec.cpp b/src/db/rec/ItemLimitCategoryRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemLimitCategoryRec.hpp b/src/db/rec/ItemLimitCategoryRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemPetFoodRec.cpp b/src/db/rec/ItemPetFoodRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemPetFoodRec.hpp b/src/db/rec/ItemPetFoodRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemPurchaseGroupRec.cpp b/src/db/rec/ItemPurchaseGroupRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemPurchaseGroupRec.hpp b/src/db/rec/ItemPurchaseGroupRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemRandomPropertiesRec.cpp b/src/db/rec/ItemRandomPropertiesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemRandomPropertiesRec.hpp b/src/db/rec/ItemRandomPropertiesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemRandomSuffixRec.cpp b/src/db/rec/ItemRandomSuffixRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemRandomSuffixRec.hpp b/src/db/rec/ItemRandomSuffixRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemRec.cpp b/src/db/rec/ItemRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemRec.hpp b/src/db/rec/ItemRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemReforgeRec.cpp b/src/db/rec/ItemReforgeRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemReforgeRec.hpp b/src/db/rec/ItemReforgeRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemSetRec.cpp b/src/db/rec/ItemSetRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemSetRec.hpp b/src/db/rec/ItemSetRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemSubClassMaskRec.cpp b/src/db/rec/ItemSubClassMaskRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemSubClassMaskRec.hpp b/src/db/rec/ItemSubClassMaskRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemSubClassRec.cpp b/src/db/rec/ItemSubClassRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemSubClassRec.hpp b/src/db/rec/ItemSubClassRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemVisualEffectsRec.cpp b/src/db/rec/ItemVisualEffectsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemVisualEffectsRec.hpp b/src/db/rec/ItemVisualEffectsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemVisualsRec.cpp b/src/db/rec/ItemVisualsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ItemVisualsRec.hpp b/src/db/rec/ItemVisualsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LFGDungeonExpansionRec.cpp b/src/db/rec/LFGDungeonExpansionRec.cpp new file mode 100644 index 0000000..06f7779 --- /dev/null +++ b/src/db/rec/LFGDungeonExpansionRec.cpp @@ -0,0 +1,45 @@ +// DO NOT EDIT: generated by whoa-autocode +#include "db/rec/LfgDungeonExpansionRec.hpp" +#include "db/Locale.hpp" +#include "util/SFile.hpp" + +const char* LfgDungeonExpansionRec::GetFilename() { + return "DBFilesClient\\LfgDungeonExpansion.dbc"; +} + +uint32_t LfgDungeonExpansionRec::GetNumColumns() { + return 8; +} + +uint32_t LfgDungeonExpansionRec::GetRowSize() { + return 32; +} + +bool LfgDungeonExpansionRec::NeedIDAssigned() { + return false; +} + +int32_t LfgDungeonExpansionRec::GetID() { + return this->m_ID; +} + +void LfgDungeonExpansionRec::SetID(int32_t id) { + this->m_ID = id; +} + +bool LfgDungeonExpansionRec::Read(SFile* f, const char* stringBuffer) { + if ( + !SFile::Read(f, &this->m_ID, sizeof(this->m_ID), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_lfgID, sizeof(this->m_lfgID), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_expansionLevel, sizeof(this->m_expansionLevel), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_randomID, sizeof(this->m_randomID), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_hardLevelMin, sizeof(this->m_hardLevelMin), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_hardLevelMax, sizeof(this->m_hardLevelMax), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_targetLevelMin, sizeof(this->m_targetLevelMin), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_targetLevelMax, sizeof(this->m_targetLevelMax), nullptr, nullptr, nullptr) + ) { + return false; + } + + return true; +} diff --git a/src/db/rec/LFGDungeonExpansionRec.hpp b/src/db/rec/LFGDungeonExpansionRec.hpp new file mode 100644 index 0000000..3bd4f1e --- /dev/null +++ b/src/db/rec/LFGDungeonExpansionRec.hpp @@ -0,0 +1,29 @@ +// DO NOT EDIT: generated by whoa-autocode +#ifndef DB_REC_LFG_DUNGEON_EXPANSION_REC_HPP +#define DB_REC_LFG_DUNGEON_EXPANSION_REC_HPP + +#include + +class SFile; + +class LfgDungeonExpansionRec { + public: + int32_t m_ID; + int32_t m_lfgID; + int32_t m_expansionLevel; + int32_t m_randomID; + int32_t m_hardLevelMin; + int32_t m_hardLevelMax; + int32_t m_targetLevelMin; + int32_t m_targetLevelMax; + + static const char* GetFilename(); + static uint32_t GetNumColumns(); + static uint32_t GetRowSize(); + static bool NeedIDAssigned(); + int32_t GetID(); + void SetID(int32_t id); + bool Read(SFile* f, const char* stringBuffer); +}; + +#endif \ No newline at end of file diff --git a/src/db/rec/LFGDungeonGroupRec.cpp b/src/db/rec/LFGDungeonGroupRec.cpp new file mode 100644 index 0000000..6963983 --- /dev/null +++ b/src/db/rec/LFGDungeonGroupRec.cpp @@ -0,0 +1,67 @@ +// DO NOT EDIT: generated by whoa-autocode +#include "db/rec/LfgDungeonGroupRec.hpp" +#include "db/Locale.hpp" +#include "util/SFile.hpp" + +const char* LfgDungeonGroupRec::GetFilename() { + return "DBFilesClient\\LfgDungeonGroup.dbc"; +} + +uint32_t LfgDungeonGroupRec::GetNumColumns() { + return 21; +} + +uint32_t LfgDungeonGroupRec::GetRowSize() { + return 84; +} + +bool LfgDungeonGroupRec::NeedIDAssigned() { + return false; +} + +int32_t LfgDungeonGroupRec::GetID() { + return this->m_ID; +} + +void LfgDungeonGroupRec::SetID(int32_t id) { + this->m_ID = id; +} + +bool LfgDungeonGroupRec::Read(SFile* f, const char* stringBuffer) { + uint32_t nameOfs[16]; + uint32_t nameMask; + + if ( + !SFile::Read(f, &this->m_ID, sizeof(this->m_ID), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[0], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[1], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[2], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[3], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[4], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[5], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[6], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[7], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[8], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[9], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[10], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[11], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[12], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[13], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[14], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[15], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameMask, sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_orderIndex, sizeof(this->m_orderIndex), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_parentGroupID, sizeof(this->m_parentGroupID), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_typeID, sizeof(this->m_typeID), nullptr, nullptr, nullptr) + ) { + return false; + } + + if (stringBuffer) { + this->m_name = &stringBuffer[nameOfs[CURRENT_LANGUAGE]]; + } else { + this->m_name = ""; + } + + return true; +} diff --git a/src/db/rec/LFGDungeonGroupRec.hpp b/src/db/rec/LFGDungeonGroupRec.hpp new file mode 100644 index 0000000..50b743c --- /dev/null +++ b/src/db/rec/LFGDungeonGroupRec.hpp @@ -0,0 +1,26 @@ +// DO NOT EDIT: generated by whoa-autocode +#ifndef DB_REC_LFG_DUNGEON_GROUP_REC_HPP +#define DB_REC_LFG_DUNGEON_GROUP_REC_HPP + +#include + +class SFile; + +class LfgDungeonGroupRec { + public: + int32_t m_ID; + const char* m_name; + int32_t m_orderIndex; + int32_t m_parentGroupID; + int32_t m_typeID; + + static const char* GetFilename(); + static uint32_t GetNumColumns(); + static uint32_t GetRowSize(); + static bool NeedIDAssigned(); + int32_t GetID(); + void SetID(int32_t id); + bool Read(SFile* f, const char* stringBuffer); +}; + +#endif \ No newline at end of file diff --git a/src/db/rec/LFGDungeonsRec.cpp b/src/db/rec/LFGDungeonsRec.cpp new file mode 100644 index 0000000..3e410d7 --- /dev/null +++ b/src/db/rec/LFGDungeonsRec.cpp @@ -0,0 +1,102 @@ +// DO NOT EDIT: generated by whoa-autocode +#include "db/rec/LfgDungeonsRec.hpp" +#include "db/Locale.hpp" +#include "util/SFile.hpp" + +const char* LfgDungeonsRec::GetFilename() { + return "DBFilesClient\\LfgDungeons.dbc"; +} + +uint32_t LfgDungeonsRec::GetNumColumns() { + return 49; +} + +uint32_t LfgDungeonsRec::GetRowSize() { + return 196; +} + +bool LfgDungeonsRec::NeedIDAssigned() { + return false; +} + +int32_t LfgDungeonsRec::GetID() { + return this->m_ID; +} + +void LfgDungeonsRec::SetID(int32_t id) { + this->m_ID = id; +} + +bool LfgDungeonsRec::Read(SFile* f, const char* stringBuffer) { + uint32_t nameOfs[16]; + uint32_t nameMask; + uint32_t textureFilenameOfs; + uint32_t descriptionOfs[16]; + uint32_t descriptionMask; + + if ( + !SFile::Read(f, &this->m_ID, sizeof(this->m_ID), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[0], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[1], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[2], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[3], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[4], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[5], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[6], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[7], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[8], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[9], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[10], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[11], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[12], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[13], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[14], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameOfs[15], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &nameMask, sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_minLevel, sizeof(this->m_minLevel), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_maxLevel, sizeof(this->m_maxLevel), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_targetLevel, sizeof(this->m_targetLevel), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_targetLevelMin, sizeof(this->m_targetLevelMin), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_targetLevelMax, sizeof(this->m_targetLevelMax), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_mapID, sizeof(this->m_mapID), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_difficulty, sizeof(this->m_difficulty), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_flags, sizeof(this->m_flags), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_typeID, sizeof(this->m_typeID), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_faction, sizeof(this->m_faction), nullptr, nullptr, nullptr) + || !SFile::Read(f, &textureFilenameOfs, sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_expansionLevel, sizeof(this->m_expansionLevel), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_orderIndex, sizeof(this->m_orderIndex), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_groupID, sizeof(this->m_groupID), nullptr, nullptr, nullptr) + || !SFile::Read(f, &descriptionOfs[0], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &descriptionOfs[1], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &descriptionOfs[2], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &descriptionOfs[3], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &descriptionOfs[4], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &descriptionOfs[5], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &descriptionOfs[6], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &descriptionOfs[7], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &descriptionOfs[8], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &descriptionOfs[9], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &descriptionOfs[10], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &descriptionOfs[11], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &descriptionOfs[12], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &descriptionOfs[13], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &descriptionOfs[14], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &descriptionOfs[15], sizeof(uint32_t), nullptr, nullptr, nullptr) + || !SFile::Read(f, &descriptionMask, sizeof(uint32_t), nullptr, nullptr, nullptr) + ) { + return false; + } + + if (stringBuffer) { + this->m_name = &stringBuffer[nameOfs[CURRENT_LANGUAGE]]; + this->m_textureFilename = &stringBuffer[textureFilenameOfs]; + this->m_description = &stringBuffer[descriptionOfs[CURRENT_LANGUAGE]]; + } else { + this->m_name = ""; + this->m_textureFilename = ""; + this->m_description = ""; + } + + return true; +} diff --git a/src/db/rec/LFGDungeonsRec.hpp b/src/db/rec/LFGDungeonsRec.hpp new file mode 100644 index 0000000..1ea412a --- /dev/null +++ b/src/db/rec/LFGDungeonsRec.hpp @@ -0,0 +1,38 @@ +// DO NOT EDIT: generated by whoa-autocode +#ifndef DB_REC_LFG_DUNGEONS_REC_HPP +#define DB_REC_LFG_DUNGEONS_REC_HPP + +#include + +class SFile; + +class LfgDungeonsRec { + public: + int32_t m_ID; + const char* m_name; + int32_t m_minLevel; + int32_t m_maxLevel; + int32_t m_targetLevel; + int32_t m_targetLevelMin; + int32_t m_targetLevelMax; + int32_t m_mapID; + int32_t m_difficulty; + int32_t m_flags; + int32_t m_typeID; + int32_t m_faction; + const char* m_textureFilename; + int32_t m_expansionLevel; + int32_t m_orderIndex; + int32_t m_groupID; + const char* m_description; + + static const char* GetFilename(); + static uint32_t GetNumColumns(); + static uint32_t GetRowSize(); + static bool NeedIDAssigned(); + int32_t GetID(); + void SetID(int32_t id); + bool Read(SFile* f, const char* stringBuffer); +}; + +#endif \ No newline at end of file diff --git a/src/db/rec/LanguageWordsRec.cpp b/src/db/rec/LanguageWordsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LanguageWordsRec.hpp b/src/db/rec/LanguageWordsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LanguagesRec.cpp b/src/db/rec/LanguagesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LanguagesRec.hpp b/src/db/rec/LanguagesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LightFloatBandRec.cpp b/src/db/rec/LightFloatBandRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LightFloatBandRec.hpp b/src/db/rec/LightFloatBandRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LightIntBandRec.cpp b/src/db/rec/LightIntBandRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LightIntBandRec.hpp b/src/db/rec/LightIntBandRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LightParamsRec.cpp b/src/db/rec/LightParamsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LightParamsRec.hpp b/src/db/rec/LightParamsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LightRec.cpp b/src/db/rec/LightRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LightRec.hpp b/src/db/rec/LightRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LightSkyboxRec.cpp b/src/db/rec/LightSkyboxRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LightSkyboxRec.hpp b/src/db/rec/LightSkyboxRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LiquidMaterialRec.cpp b/src/db/rec/LiquidMaterialRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LiquidMaterialRec.hpp b/src/db/rec/LiquidMaterialRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LiquidObjectRec.cpp b/src/db/rec/LiquidObjectRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LiquidObjectRec.hpp b/src/db/rec/LiquidObjectRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LiquidTypeRec.cpp b/src/db/rec/LiquidTypeRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LiquidTypeRec.hpp b/src/db/rec/LiquidTypeRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LoadingScreenTaxiSplinesRec.cpp b/src/db/rec/LoadingScreenTaxiSplinesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LoadingScreenTaxiSplinesRec.hpp b/src/db/rec/LoadingScreenTaxiSplinesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LoadingScreensRec.cpp b/src/db/rec/LoadingScreensRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LoadingScreensRec.hpp b/src/db/rec/LoadingScreensRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LockRec.cpp b/src/db/rec/LockRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LockRec.hpp b/src/db/rec/LockRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LockTypeRec.cpp b/src/db/rec/LockTypeRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/LockTypeRec.hpp b/src/db/rec/LockTypeRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/MailTemplateRec.cpp b/src/db/rec/MailTemplateRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/MailTemplateRec.hpp b/src/db/rec/MailTemplateRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/MapDifficultyRec.cpp b/src/db/rec/MapDifficultyRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/MapDifficultyRec.hpp b/src/db/rec/MapDifficultyRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/MapRec.cpp b/src/db/rec/MapRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/MapRec.hpp b/src/db/rec/MapRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/MaterialRec.cpp b/src/db/rec/MaterialRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/MaterialRec.hpp b/src/db/rec/MaterialRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/MountTypeRec.cpp b/src/db/rec/MountTypeRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/MountTypeRec.hpp b/src/db/rec/MountTypeRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/MovieFileDataRec.cpp b/src/db/rec/MovieFileDataRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/MovieFileDataRec.hpp b/src/db/rec/MovieFileDataRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/MovieRec.cpp b/src/db/rec/MovieRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/MovieRec.hpp b/src/db/rec/MovieRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/MovieVariationRec.cpp b/src/db/rec/MovieVariationRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/MovieVariationRec.hpp b/src/db/rec/MovieVariationRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/NPCSoundsRec.cpp b/src/db/rec/NPCSoundsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/NPCSoundsRec.hpp b/src/db/rec/NPCSoundsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/NameGenRec.cpp b/src/db/rec/NameGenRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/NameGenRec.hpp b/src/db/rec/NameGenRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/NamesProfanityRec.cpp b/src/db/rec/NamesProfanityRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/NamesProfanityRec.hpp b/src/db/rec/NamesProfanityRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/NamesReservedRec.cpp b/src/db/rec/NamesReservedRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/NamesReservedRec.hpp b/src/db/rec/NamesReservedRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ObjectEffectGroupRec.cpp b/src/db/rec/ObjectEffectGroupRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ObjectEffectGroupRec.hpp b/src/db/rec/ObjectEffectGroupRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ObjectEffectModifierRec.cpp b/src/db/rec/ObjectEffectModifierRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ObjectEffectModifierRec.hpp b/src/db/rec/ObjectEffectModifierRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ObjectEffectPackageElemRec.cpp b/src/db/rec/ObjectEffectPackageElemRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ObjectEffectPackageElemRec.hpp b/src/db/rec/ObjectEffectPackageElemRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ObjectEffectPackageRec.cpp b/src/db/rec/ObjectEffectPackageRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ObjectEffectPackageRec.hpp b/src/db/rec/ObjectEffectPackageRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ObjectEffectRec.cpp b/src/db/rec/ObjectEffectRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ObjectEffectRec.hpp b/src/db/rec/ObjectEffectRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/OverrideSpellDataRec.cpp b/src/db/rec/OverrideSpellDataRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/OverrideSpellDataRec.hpp b/src/db/rec/OverrideSpellDataRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/PVPDifficultyRec.cpp b/src/db/rec/PVPDifficultyRec.cpp new file mode 100644 index 0000000..ccecfe2 --- /dev/null +++ b/src/db/rec/PVPDifficultyRec.cpp @@ -0,0 +1,43 @@ +// DO NOT EDIT: generated by whoa-autocode +#include "db/rec/PvpDifficultyRec.hpp" +#include "db/Locale.hpp" +#include "util/SFile.hpp" + +const char* PvpDifficultyRec::GetFilename() { + return "DBFilesClient\\PvpDifficulty.dbc"; +} + +uint32_t PvpDifficultyRec::GetNumColumns() { + return 6; +} + +uint32_t PvpDifficultyRec::GetRowSize() { + return 24; +} + +bool PvpDifficultyRec::NeedIDAssigned() { + return false; +} + +int32_t PvpDifficultyRec::GetID() { + return this->m_ID; +} + +void PvpDifficultyRec::SetID(int32_t id) { + this->m_ID = id; +} + +bool PvpDifficultyRec::Read(SFile* f, const char* stringBuffer) { + if ( + !SFile::Read(f, &this->m_ID, sizeof(this->m_ID), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_mapID, sizeof(this->m_mapID), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_rangeIndex, sizeof(this->m_rangeIndex), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_minLevel, sizeof(this->m_minLevel), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_maxLevel, sizeof(this->m_maxLevel), nullptr, nullptr, nullptr) + || !SFile::Read(f, &this->m_difficulty, sizeof(this->m_difficulty), nullptr, nullptr, nullptr) + ) { + return false; + } + + return true; +} diff --git a/src/db/rec/PVPDifficultyRec.hpp b/src/db/rec/PVPDifficultyRec.hpp new file mode 100644 index 0000000..4896670 --- /dev/null +++ b/src/db/rec/PVPDifficultyRec.hpp @@ -0,0 +1,27 @@ +// DO NOT EDIT: generated by whoa-autocode +#ifndef DB_REC_PVP_DIFFICULTY_REC_HPP +#define DB_REC_PVP_DIFFICULTY_REC_HPP + +#include + +class SFile; + +class PvpDifficultyRec { + public: + int32_t m_ID; + int32_t m_mapID; + int32_t m_rangeIndex; + int32_t m_minLevel; + int32_t m_maxLevel; + int32_t m_difficulty; + + static const char* GetFilename(); + static uint32_t GetNumColumns(); + static uint32_t GetRowSize(); + static bool NeedIDAssigned(); + int32_t GetID(); + void SetID(int32_t id); + bool Read(SFile* f, const char* stringBuffer); +}; + +#endif \ No newline at end of file diff --git a/src/db/rec/PackageRec.cpp b/src/db/rec/PackageRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/PackageRec.hpp b/src/db/rec/PackageRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/PageTextMaterialRec.cpp b/src/db/rec/PageTextMaterialRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/PageTextMaterialRec.hpp b/src/db/rec/PageTextMaterialRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/PaperDollItemFrameRec.cpp b/src/db/rec/PaperDollItemFrameRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/PaperDollItemFrameRec.hpp b/src/db/rec/PaperDollItemFrameRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ParticleColorRec.cpp b/src/db/rec/ParticleColorRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ParticleColorRec.hpp b/src/db/rec/ParticleColorRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/PetPersonalityRec.cpp b/src/db/rec/PetPersonalityRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/PetPersonalityRec.hpp b/src/db/rec/PetPersonalityRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/PetitionTypeRec.cpp b/src/db/rec/PetitionTypeRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/PetitionTypeRec.hpp b/src/db/rec/PetitionTypeRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/PhaseRec.cpp b/src/db/rec/PhaseRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/PhaseRec.hpp b/src/db/rec/PhaseRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/PhaseShiftZoneSoundsRec.cpp b/src/db/rec/PhaseShiftZoneSoundsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/PhaseShiftZoneSoundsRec.hpp b/src/db/rec/PhaseShiftZoneSoundsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/PhaseXPhaseGroupRec.cpp b/src/db/rec/PhaseXPhaseGroupRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/PhaseXPhaseGroupRec.hpp b/src/db/rec/PhaseXPhaseGroupRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/PowerDisplayRec.cpp b/src/db/rec/PowerDisplayRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/PowerDisplayRec.hpp b/src/db/rec/PowerDisplayRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/QuestFactionRewardRec.cpp b/src/db/rec/QuestFactionRewardRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/QuestFactionRewardRec.hpp b/src/db/rec/QuestFactionRewardRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/QuestInfoRec.cpp b/src/db/rec/QuestInfoRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/QuestInfoRec.hpp b/src/db/rec/QuestInfoRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/QuestSortRec.cpp b/src/db/rec/QuestSortRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/QuestSortRec.hpp b/src/db/rec/QuestSortRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/QuestXPRec.cpp b/src/db/rec/QuestXPRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/QuestXPRec.hpp b/src/db/rec/QuestXPRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/RandPropPointsRec.cpp b/src/db/rec/RandPropPointsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/RandPropPointsRec.hpp b/src/db/rec/RandPropPointsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ResearchBranchRec.cpp b/src/db/rec/ResearchBranchRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ResearchBranchRec.hpp b/src/db/rec/ResearchBranchRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ResistancesRec.cpp b/src/db/rec/ResistancesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ResistancesRec.hpp b/src/db/rec/ResistancesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ScalingStatDistributionRec.cpp b/src/db/rec/ScalingStatDistributionRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ScalingStatDistributionRec.hpp b/src/db/rec/ScalingStatDistributionRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ScalingStatValuesRec.cpp b/src/db/rec/ScalingStatValuesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ScalingStatValuesRec.hpp b/src/db/rec/ScalingStatValuesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ScreenEffectRec.cpp b/src/db/rec/ScreenEffectRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ScreenEffectRec.hpp b/src/db/rec/ScreenEffectRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ServerMessagesRec.cpp b/src/db/rec/ServerMessagesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ServerMessagesRec.hpp b/src/db/rec/ServerMessagesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SheatheSoundLookupsRec.cpp b/src/db/rec/SheatheSoundLookupsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SheatheSoundLookupsRec.hpp b/src/db/rec/SheatheSoundLookupsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SkillCostsDataRec.cpp b/src/db/rec/SkillCostsDataRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SkillCostsDataRec.hpp b/src/db/rec/SkillCostsDataRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SkillLineAbilityRec.cpp b/src/db/rec/SkillLineAbilityRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SkillLineAbilityRec.hpp b/src/db/rec/SkillLineAbilityRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SkillLineCategoryRec.cpp b/src/db/rec/SkillLineCategoryRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SkillLineCategoryRec.hpp b/src/db/rec/SkillLineCategoryRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SkillLineRec.cpp b/src/db/rec/SkillLineRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SkillLineRec.hpp b/src/db/rec/SkillLineRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SkillRaceClassInfoRec.cpp b/src/db/rec/SkillRaceClassInfoRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SkillRaceClassInfoRec.hpp b/src/db/rec/SkillRaceClassInfoRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SkillTiersRec.cpp b/src/db/rec/SkillTiersRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SkillTiersRec.hpp b/src/db/rec/SkillTiersRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SoundAmbienceRec.cpp b/src/db/rec/SoundAmbienceRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SoundAmbienceRec.hpp b/src/db/rec/SoundAmbienceRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SoundEmittersRec.cpp b/src/db/rec/SoundEmittersRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SoundEmittersRec.hpp b/src/db/rec/SoundEmittersRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SoundEntriesAdvancedRec.cpp b/src/db/rec/SoundEntriesAdvancedRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SoundEntriesAdvancedRec.hpp b/src/db/rec/SoundEntriesAdvancedRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SoundEntriesRec.cpp b/src/db/rec/SoundEntriesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SoundEntriesRec.hpp b/src/db/rec/SoundEntriesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SoundFilterElemRec.cpp b/src/db/rec/SoundFilterElemRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SoundFilterElemRec.hpp b/src/db/rec/SoundFilterElemRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SoundFilterRec.cpp b/src/db/rec/SoundFilterRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SoundFilterRec.hpp b/src/db/rec/SoundFilterRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SoundProviderPreferencesRec.cpp b/src/db/rec/SoundProviderPreferencesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SoundProviderPreferencesRec.hpp b/src/db/rec/SoundProviderPreferencesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SoundSamplePreferencesRec.cpp b/src/db/rec/SoundSamplePreferencesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SoundSamplePreferencesRec.hpp b/src/db/rec/SoundSamplePreferencesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SoundWaterTypeRec.cpp b/src/db/rec/SoundWaterTypeRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SoundWaterTypeRec.hpp b/src/db/rec/SoundWaterTypeRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpamMessagesRec.cpp b/src/db/rec/SpamMessagesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpamMessagesRec.hpp b/src/db/rec/SpamMessagesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellAuraOptionsRec.cpp b/src/db/rec/SpellAuraOptionsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellAuraOptionsRec.hpp b/src/db/rec/SpellAuraOptionsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellAuraRestrictionsRec.cpp b/src/db/rec/SpellAuraRestrictionsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellAuraRestrictionsRec.hpp b/src/db/rec/SpellAuraRestrictionsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellCastTimesRec.cpp b/src/db/rec/SpellCastTimesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellCastTimesRec.hpp b/src/db/rec/SpellCastTimesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellCastingRequirementsRec.cpp b/src/db/rec/SpellCastingRequirementsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellCastingRequirementsRec.hpp b/src/db/rec/SpellCastingRequirementsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellCategoriesRec.cpp b/src/db/rec/SpellCategoriesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellCategoriesRec.hpp b/src/db/rec/SpellCategoriesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellCategoryRec.cpp b/src/db/rec/SpellCategoryRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellCategoryRec.hpp b/src/db/rec/SpellCategoryRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellChainEffectsRec.cpp b/src/db/rec/SpellChainEffectsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellChainEffectsRec.hpp b/src/db/rec/SpellChainEffectsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellClassOptionsRec.cpp b/src/db/rec/SpellClassOptionsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellClassOptionsRec.hpp b/src/db/rec/SpellClassOptionsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellCooldownsRec.cpp b/src/db/rec/SpellCooldownsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellCooldownsRec.hpp b/src/db/rec/SpellCooldownsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellDescriptionVariablesRec.cpp b/src/db/rec/SpellDescriptionVariablesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellDescriptionVariablesRec.hpp b/src/db/rec/SpellDescriptionVariablesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellDifficultyRec.cpp b/src/db/rec/SpellDifficultyRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellDifficultyRec.hpp b/src/db/rec/SpellDifficultyRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellDispelTypeRec.cpp b/src/db/rec/SpellDispelTypeRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellDispelTypeRec.hpp b/src/db/rec/SpellDispelTypeRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellDurationRec.cpp b/src/db/rec/SpellDurationRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellDurationRec.hpp b/src/db/rec/SpellDurationRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellEffectCameraShakesRec.cpp b/src/db/rec/SpellEffectCameraShakesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellEffectCameraShakesRec.hpp b/src/db/rec/SpellEffectCameraShakesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellEffectRec.cpp b/src/db/rec/SpellEffectRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellEffectRec.hpp b/src/db/rec/SpellEffectRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellEquippedItemsRec.cpp b/src/db/rec/SpellEquippedItemsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellEquippedItemsRec.hpp b/src/db/rec/SpellEquippedItemsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellFocusObjectRec.cpp b/src/db/rec/SpellFocusObjectRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellFocusObjectRec.hpp b/src/db/rec/SpellFocusObjectRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellIconRec.cpp b/src/db/rec/SpellIconRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellIconRec.hpp b/src/db/rec/SpellIconRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellInterruptsRec.cpp b/src/db/rec/SpellInterruptsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellInterruptsRec.hpp b/src/db/rec/SpellInterruptsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellItemEnchantmentConditionRec.cpp b/src/db/rec/SpellItemEnchantmentConditionRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellItemEnchantmentConditionRec.hpp b/src/db/rec/SpellItemEnchantmentConditionRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellItemEnchantmentRec.cpp b/src/db/rec/SpellItemEnchantmentRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellItemEnchantmentRec.hpp b/src/db/rec/SpellItemEnchantmentRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellLevelsRec.cpp b/src/db/rec/SpellLevelsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellLevelsRec.hpp b/src/db/rec/SpellLevelsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellMechanicRec.cpp b/src/db/rec/SpellMechanicRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellMechanicRec.hpp b/src/db/rec/SpellMechanicRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellMissileMotionRec.cpp b/src/db/rec/SpellMissileMotionRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellMissileMotionRec.hpp b/src/db/rec/SpellMissileMotionRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellMissileRec.cpp b/src/db/rec/SpellMissileRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellMissileRec.hpp b/src/db/rec/SpellMissileRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellPowerRec.cpp b/src/db/rec/SpellPowerRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellPowerRec.hpp b/src/db/rec/SpellPowerRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellRadiusRec.cpp b/src/db/rec/SpellRadiusRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellRadiusRec.hpp b/src/db/rec/SpellRadiusRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellRangeRec.cpp b/src/db/rec/SpellRangeRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellRangeRec.hpp b/src/db/rec/SpellRangeRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellReagentsRec.cpp b/src/db/rec/SpellReagentsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellReagentsRec.hpp b/src/db/rec/SpellReagentsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellRec.cpp b/src/db/rec/SpellRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellRec.hpp b/src/db/rec/SpellRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellRuneCostRec.cpp b/src/db/rec/SpellRuneCostRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellRuneCostRec.hpp b/src/db/rec/SpellRuneCostRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellScalingRec.cpp b/src/db/rec/SpellScalingRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellScalingRec.hpp b/src/db/rec/SpellScalingRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellShapeshiftFormRec.cpp b/src/db/rec/SpellShapeshiftFormRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellShapeshiftFormRec.hpp b/src/db/rec/SpellShapeshiftFormRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellShapeshiftRec.cpp b/src/db/rec/SpellShapeshiftRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellShapeshiftRec.hpp b/src/db/rec/SpellShapeshiftRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellTargetRestrictionsRec.cpp b/src/db/rec/SpellTargetRestrictionsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellTargetRestrictionsRec.hpp b/src/db/rec/SpellTargetRestrictionsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellTotemsRec.cpp b/src/db/rec/SpellTotemsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellTotemsRec.hpp b/src/db/rec/SpellTotemsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellVisualEffectNameRec.cpp b/src/db/rec/SpellVisualEffectNameRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellVisualEffectNameRec.hpp b/src/db/rec/SpellVisualEffectNameRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellVisualKitAreaModelRec.cpp b/src/db/rec/SpellVisualKitAreaModelRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellVisualKitAreaModelRec.hpp b/src/db/rec/SpellVisualKitAreaModelRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellVisualKitModelAttachRec.cpp b/src/db/rec/SpellVisualKitModelAttachRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellVisualKitModelAttachRec.hpp b/src/db/rec/SpellVisualKitModelAttachRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellVisualKitRec.cpp b/src/db/rec/SpellVisualKitRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellVisualKitRec.hpp b/src/db/rec/SpellVisualKitRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellVisualPrecastTransitionsRec.cpp b/src/db/rec/SpellVisualPrecastTransitionsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellVisualPrecastTransitionsRec.hpp b/src/db/rec/SpellVisualPrecastTransitionsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellVisualRec.cpp b/src/db/rec/SpellVisualRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SpellVisualRec.hpp b/src/db/rec/SpellVisualRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/StableSlotPricesRec.cpp b/src/db/rec/StableSlotPricesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/StableSlotPricesRec.hpp b/src/db/rec/StableSlotPricesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/Startup_StringsRec.cpp b/src/db/rec/Startup_StringsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/Startup_StringsRec.hpp b/src/db/rec/Startup_StringsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/StationeryRec.cpp b/src/db/rec/StationeryRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/StationeryRec.hpp b/src/db/rec/StationeryRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/StringLookupsRec.cpp b/src/db/rec/StringLookupsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/StringLookupsRec.hpp b/src/db/rec/StringLookupsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SummonPropertiesRec.cpp b/src/db/rec/SummonPropertiesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/SummonPropertiesRec.hpp b/src/db/rec/SummonPropertiesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TalentRec.cpp b/src/db/rec/TalentRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TalentRec.hpp b/src/db/rec/TalentRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TalentTabRec.cpp b/src/db/rec/TalentTabRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TalentTabRec.hpp b/src/db/rec/TalentTabRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TaxiNodesRec.cpp b/src/db/rec/TaxiNodesRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TaxiNodesRec.hpp b/src/db/rec/TaxiNodesRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TaxiPathNodeRec.cpp b/src/db/rec/TaxiPathNodeRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TaxiPathNodeRec.hpp b/src/db/rec/TaxiPathNodeRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TaxiPathRec.cpp b/src/db/rec/TaxiPathRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TaxiPathRec.hpp b/src/db/rec/TaxiPathRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TeamContributionPointsRec.cpp b/src/db/rec/TeamContributionPointsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TeamContributionPointsRec.hpp b/src/db/rec/TeamContributionPointsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TerrainMaterialRec.cpp b/src/db/rec/TerrainMaterialRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TerrainMaterialRec.hpp b/src/db/rec/TerrainMaterialRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TerrainTypeRec.cpp b/src/db/rec/TerrainTypeRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TerrainTypeRec.hpp b/src/db/rec/TerrainTypeRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TerrainTypeSoundsRec.cpp b/src/db/rec/TerrainTypeSoundsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TerrainTypeSoundsRec.hpp b/src/db/rec/TerrainTypeSoundsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TotemCategoryRec.cpp b/src/db/rec/TotemCategoryRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TotemCategoryRec.hpp b/src/db/rec/TotemCategoryRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TransportAnimationRec.cpp b/src/db/rec/TransportAnimationRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TransportAnimationRec.hpp b/src/db/rec/TransportAnimationRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TransportPhysicsRec.cpp b/src/db/rec/TransportPhysicsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TransportPhysicsRec.hpp b/src/db/rec/TransportPhysicsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TransportRotationRec.cpp b/src/db/rec/TransportRotationRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/TransportRotationRec.hpp b/src/db/rec/TransportRotationRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/UISoundLookupsRec.cpp b/src/db/rec/UISoundLookupsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/UISoundLookupsRec.hpp b/src/db/rec/UISoundLookupsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/UnitBloodLevelsRec.cpp b/src/db/rec/UnitBloodLevelsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/UnitBloodLevelsRec.hpp b/src/db/rec/UnitBloodLevelsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/UnitBloodRec.cpp b/src/db/rec/UnitBloodRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/UnitBloodRec.hpp b/src/db/rec/UnitBloodRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/VehicleRec.cpp b/src/db/rec/VehicleRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/VehicleRec.hpp b/src/db/rec/VehicleRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/VehicleSeatRec.cpp b/src/db/rec/VehicleSeatRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/VehicleSeatRec.hpp b/src/db/rec/VehicleSeatRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/VehicleUIIndSeatRec.cpp b/src/db/rec/VehicleUIIndSeatRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/VehicleUIIndSeatRec.hpp b/src/db/rec/VehicleUIIndSeatRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/VehicleUIIndicatorRec.cpp b/src/db/rec/VehicleUIIndicatorRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/VehicleUIIndicatorRec.hpp b/src/db/rec/VehicleUIIndicatorRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/VideoHardwareRec.cpp b/src/db/rec/VideoHardwareRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/VideoHardwareRec.hpp b/src/db/rec/VideoHardwareRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/VocalUISoundsRec.cpp b/src/db/rec/VocalUISoundsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/VocalUISoundsRec.hpp b/src/db/rec/VocalUISoundsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WMOAreaTableRec.cpp b/src/db/rec/WMOAreaTableRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WMOAreaTableRec.hpp b/src/db/rec/WMOAreaTableRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WeaponImpactSoundsRec.cpp b/src/db/rec/WeaponImpactSoundsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WeaponImpactSoundsRec.hpp b/src/db/rec/WeaponImpactSoundsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WeaponSwingSounds2Rec.cpp b/src/db/rec/WeaponSwingSounds2Rec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WeaponSwingSounds2Rec.hpp b/src/db/rec/WeaponSwingSounds2Rec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WeatherRec.cpp b/src/db/rec/WeatherRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WeatherRec.hpp b/src/db/rec/WeatherRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WorldChunkSoundsRec.cpp b/src/db/rec/WorldChunkSoundsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WorldChunkSoundsRec.hpp b/src/db/rec/WorldChunkSoundsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WorldMapAreaRec.cpp b/src/db/rec/WorldMapAreaRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WorldMapAreaRec.hpp b/src/db/rec/WorldMapAreaRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WorldMapContinentRec.cpp b/src/db/rec/WorldMapContinentRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WorldMapContinentRec.hpp b/src/db/rec/WorldMapContinentRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WorldMapOverlayRec.cpp b/src/db/rec/WorldMapOverlayRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WorldMapOverlayRec.hpp b/src/db/rec/WorldMapOverlayRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WorldMapTransformsRec.cpp b/src/db/rec/WorldMapTransformsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WorldMapTransformsRec.hpp b/src/db/rec/WorldMapTransformsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WorldSafeLocsRec.cpp b/src/db/rec/WorldSafeLocsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WorldSafeLocsRec.hpp b/src/db/rec/WorldSafeLocsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WorldStateUIRec.cpp b/src/db/rec/WorldStateUIRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WorldStateUIRec.hpp b/src/db/rec/WorldStateUIRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WorldStateZoneSoundsRec.cpp b/src/db/rec/WorldStateZoneSoundsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WorldStateZoneSoundsRec.hpp b/src/db/rec/WorldStateZoneSoundsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WowError_StringsRec.cpp b/src/db/rec/WowError_StringsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/WowError_StringsRec.hpp b/src/db/rec/WowError_StringsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ZoneIntroMusicTableRec.cpp b/src/db/rec/ZoneIntroMusicTableRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ZoneIntroMusicTableRec.hpp b/src/db/rec/ZoneIntroMusicTableRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ZoneLightPointRec.cpp b/src/db/rec/ZoneLightPointRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ZoneLightPointRec.hpp b/src/db/rec/ZoneLightPointRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ZoneLightRec.cpp b/src/db/rec/ZoneLightRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ZoneLightRec.hpp b/src/db/rec/ZoneLightRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ZoneMusicRec.cpp b/src/db/rec/ZoneMusicRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/ZoneMusicRec.hpp b/src/db/rec/ZoneMusicRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtBarberShopCostBaseRec.cpp b/src/db/rec/gtBarberShopCostBaseRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtBarberShopCostBaseRec.hpp b/src/db/rec/gtBarberShopCostBaseRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtChanceToMeleeCritBaseRec.cpp b/src/db/rec/gtChanceToMeleeCritBaseRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtChanceToMeleeCritBaseRec.hpp b/src/db/rec/gtChanceToMeleeCritBaseRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtChanceToMeleeCritRec.cpp b/src/db/rec/gtChanceToMeleeCritRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtChanceToMeleeCritRec.hpp b/src/db/rec/gtChanceToMeleeCritRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtChanceToSpellCritBaseRec.cpp b/src/db/rec/gtChanceToSpellCritBaseRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtChanceToSpellCritBaseRec.hpp b/src/db/rec/gtChanceToSpellCritBaseRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtChanceToSpellCritRec.cpp b/src/db/rec/gtChanceToSpellCritRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtChanceToSpellCritRec.hpp b/src/db/rec/gtChanceToSpellCritRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtCombatRatingsRec.cpp b/src/db/rec/gtCombatRatingsRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtCombatRatingsRec.hpp b/src/db/rec/gtCombatRatingsRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtNPCManaCostScalerRec.cpp b/src/db/rec/gtNPCManaCostScalerRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtNPCManaCostScalerRec.hpp b/src/db/rec/gtNPCManaCostScalerRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtOCTClassCombatRatingScalarRec.cpp b/src/db/rec/gtOCTClassCombatRatingScalarRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtOCTClassCombatRatingScalarRec.hpp b/src/db/rec/gtOCTClassCombatRatingScalarRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtOCTRegenHPRec.cpp b/src/db/rec/gtOCTRegenHPRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtOCTRegenHPRec.hpp b/src/db/rec/gtOCTRegenHPRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtOCTRegenMPRec.cpp b/src/db/rec/gtOCTRegenMPRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtOCTRegenMPRec.hpp b/src/db/rec/gtOCTRegenMPRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtRegenHPPerSptRec.cpp b/src/db/rec/gtRegenHPPerSptRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtRegenHPPerSptRec.hpp b/src/db/rec/gtRegenHPPerSptRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtRegenMPPerSptRec.cpp b/src/db/rec/gtRegenMPPerSptRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtRegenMPPerSptRec.hpp b/src/db/rec/gtRegenMPPerSptRec.hpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtSpellScalingRec.cpp b/src/db/rec/gtSpellScalingRec.cpp old mode 100755 new mode 100644 diff --git a/src/db/rec/gtSpellScalingRec.hpp b/src/db/rec/gtSpellScalingRec.hpp old mode 100755 new mode 100644 diff --git a/src/glue/CCharacterComponent.cpp b/src/glue/CCharacterComponent.cpp new file mode 100644 index 0000000..07dc44f --- /dev/null +++ b/src/glue/CCharacterComponent.cpp @@ -0,0 +1 @@ +#include "glue/CCharacterComponent.hpp" diff --git a/src/glue/CCharacterComponent.hpp b/src/glue/CCharacterComponent.hpp new file mode 100644 index 0000000..22601dd --- /dev/null +++ b/src/glue/CCharacterComponent.hpp @@ -0,0 +1,17 @@ +#ifndef GLUE_C_CHARACTER_COMPONENT_HPP +#define GLUE_C_CHARACTER_COMPONENT_HPP + +#include "net/Types.hpp" +#include + +class CSimpleModelFFX; +class CM2Model; + +class CCharacterComponent { + public: + // Static variables + + // Static functions +}; + +#endif // GLUE_C_CHARACTER_COMPONENT_HPP diff --git a/src/glue/CCharacterCreation.cpp b/src/glue/CCharacterCreation.cpp new file mode 100644 index 0000000..a175055 --- /dev/null +++ b/src/glue/CCharacterCreation.cpp @@ -0,0 +1,8 @@ +#include "glue/CCharacterCreation.hpp" + +float CCharacterCreation::m_charFacing = 0.0; +CharacterCreationDisplay CCharacterCreation::m_character = {}; + +void CCharacterCreation::Initialize() { + CCharacterCreation::m_charFacing = 0.0; +} diff --git a/src/glue/CCharacterCreation.hpp b/src/glue/CCharacterCreation.hpp new file mode 100644 index 0000000..d48ad6d --- /dev/null +++ b/src/glue/CCharacterCreation.hpp @@ -0,0 +1,25 @@ +#ifndef GLUE_C_CHARACTER_CREATION_HPP +#define GLUE_C_CHARACTER_CREATION_HPP + +#include "net/Types.hpp" +#include + +class CSimpleModelFFX; +class CM2Model; + +struct CharacterCreationDisplay { + CHARACTER_CREATE_INFO m_characterInfo; + CM2Model* m_characterModel; +}; + +class CCharacterCreation { + public: + // Static variables + static float m_charFacing; + static CharacterCreationDisplay m_character; + + // Static functions + static void Initialize(); +}; + +#endif // GLUE_C_CHARACTER_CREATION_HPP diff --git a/src/glue/CCharacterSelection.cpp b/src/glue/CCharacterSelection.cpp index 8ed69c5..b6fcc63 100644 --- a/src/glue/CCharacterSelection.cpp +++ b/src/glue/CCharacterSelection.cpp @@ -1,34 +1,61 @@ #include "glue/CCharacterSelection.hpp" +#include "model/CM2Model.hpp" #include "model/CM2Shared.hpp" #include "ui/CSimpleModelFFX.hpp" #include "client/ClientServices.hpp" +#include "client/Client.hpp" +#include "console/CVar.hpp" #include "net/Connection.hpp" +#include "clientobject/Player_C.hpp" +#include "db/Db.hpp" +CSimpleModelFFX* CCharacterSelection::m_modelFrame = nullptr; +uint32_t CCharacterSelection::m_characterCount = 0; +float CCharacterSelection::m_charFacing = 0.0f; +uint32_t CCharacterSelection::m_restrictHuman = 0; +uint32_t CCharacterSelection::m_restrictDwarf = 0; +uint32_t CCharacterSelection::m_restrictGnome = 0; +uint32_t CCharacterSelection::m_restrictNightElf = 0; +uint32_t CCharacterSelection::m_restrictDraenei = 0; +uint32_t CCharacterSelection::m_restrictOrc = 0; +uint32_t CCharacterSelection::m_restrictTroll = 0; +uint32_t CCharacterSelection::m_restrictTauren = 0; +uint32_t CCharacterSelection::m_restrictUndead = 0; +uint32_t CCharacterSelection::m_restrictBloodElf = 0; TSGrowableArray CCharacterSelection::s_characterList; -CSimpleModelFFX* CCharacterSelection::s_modelFrame; -float CCharacterSelection::s_charFacing = 0.0f; +int32_t CCharacterSelection::m_selectionIndex = 0; + + +CharacterSelectionDisplay::CharacterSelectionDisplay() + : m_characterModel(nullptr) { +} + + +void CCharacterSelection::Initialize() { + // Empty method +} void CCharacterSelection::RenderPrep() { // TODO } void CCharacterSelection::SetBackgroundModel(const char* modelPath) { - if (!CCharacterSelection::s_modelFrame || !modelPath || !*modelPath) { + if (!CCharacterSelection::m_modelFrame || !modelPath || !*modelPath) { return; } - auto model = CCharacterSelection::s_modelFrame->m_model; + auto model = CCharacterSelection::m_modelFrame->m_model; // Check if already set if (model && !SStrCmpI(modelPath, model->m_shared->m_filePath, STORM_MAX_STR)) { return; } - CCharacterSelection::s_modelFrame->SetModel(modelPath); + CCharacterSelection::m_modelFrame->SetModel(modelPath); // TODO BYTE1(CCharacterSelection::m_modelFrame->simplemodelffx_dword510[3]) = 1; - model = CCharacterSelection::s_modelFrame->m_model; + model = CCharacterSelection::m_modelFrame->m_model; if (model) { // TODO lighting callback + arg @@ -37,8 +64,48 @@ void CCharacterSelection::SetBackgroundModel(const char* modelPath) { } } +void CCharacterSelection::EnumerateCharactersCallback(CHARACTER_INFO& info, void* param) { + auto character = CCharacterSelection::s_characterList.New(); + character->m_characterInfo = info; + // TODO: LoadAddOnEnableState(a1 + 8); +} + +void CCharacterSelection::ShowCharacter() { + auto index = CCharacterSelection::m_selectionIndex; + if (index < 0 || index >= CCharacterSelection::GetNumCharacters()) { + return; + } + // TODO + + CCharacterSelection::m_charFacing = 0.0; + + auto& character = CCharacterSelection::s_characterList[index]; + + if (character.m_characterModel) { + // TODO + return; + } + + auto rec = Player_C_GetModelName(character.m_characterInfo.raceID, character.m_characterInfo.sexID); + STORM_ASSERT(rec); + if (!rec->m_modelName) { + // TODO + return; + } + + auto scene = CCharacterSelection::m_modelFrame->GetScene(); + character.m_characterModel = scene->CreateModel(rec->m_modelName, 0); +} + void CCharacterSelection::SetCharFacing(float facing) { - // TODO: + if (!CCharacterSelection::m_characterCount || !CCharacterSelection::GetNumCharacters()) { + return; + } + + auto character = CCharacterSelection::s_characterList[CCharacterSelection::m_selectionIndex]; + if (character.m_characterModel) { + character.m_characterModel->SetWorldTransform(C3Vector(), facing, 1.0); + } } void CCharacterSelection::ClearCharacterList() { @@ -46,24 +113,46 @@ void CCharacterSelection::ClearCharacterList() { void CCharacterSelection::UpdateCharacterList() { // TODO: ClearAddOnEnableState(0); - // TODO: Proper implementation - auto& received = ClientServices::Connection()->m_characterList; - CCharacterSelection::s_characterList.SetCount(received.Count()); - for (uint32_t i = 0; i < received.Count(); ++i) { - CCharacterSelection::s_characterList[i].m_characterInfo = received[i]; - } + CCharacterSelection::s_characterList.SetCount(0); - if (CCharacterSelection::GetNumCharacters()) { - int32_t currentIndex = 0; - FrameScript_SignalEvent(8, "%d", currentIndex + 1); + CCharacterSelection::m_restrictHuman = 0; + CCharacterSelection::m_restrictDwarf = 0; + CCharacterSelection::m_restrictGnome = 0; + CCharacterSelection::m_restrictNightElf = 0; + CCharacterSelection::m_restrictDraenei = 0; + CCharacterSelection::m_restrictOrc = 0; + CCharacterSelection::m_restrictTroll = 0; + CCharacterSelection::m_restrictTauren = 0; + CCharacterSelection::m_restrictUndead = 0; + CCharacterSelection::m_restrictBloodElf = 0; + + ClientServices::EnumerateCharacters(&CCharacterSelection::EnumerateCharactersCallback, nullptr); + + if (CCharacterSelection::s_characterList.Count()) { + // TODO: Apply restrictions (m_restrictHuman, etc) + // TODO: CRealmList::m_preferredCategory = 0; + + int32_t selectionIndex = Client::g_lastCharacterIndex->GetInt(); + if (selectionIndex < 0 || selectionIndex >= CCharacterSelection::s_characterList.Count()) { + selectionIndex = 0; + } + + CCharacterSelection::m_selectionIndex = selectionIndex; + CCharacterSelection::ShowCharacter(); + + FrameScript_SignalEvent(8, "%d", CCharacterSelection::m_selectionIndex + 1); } else { - int32_t currentIndex = 0; - FrameScript_SignalEvent(8, "%d", currentIndex + 1); + CCharacterSelection::m_selectionIndex = 0; + CCharacterSelection::ShowCharacter(); + FrameScript_SignalEvent(8, "%d", CCharacterSelection::m_selectionIndex + 1); + if (CCharacterSelection::m_modelFrame) { + // TODO + } } FrameScript_SignalEvent(7, nullptr); } uint32_t CCharacterSelection::GetNumCharacters() { - return s_characterList.Count(); + return CCharacterSelection::s_characterList.Count(); } diff --git a/src/glue/CCharacterSelection.hpp b/src/glue/CCharacterSelection.hpp index 7d25381..27617dd 100644 --- a/src/glue/CCharacterSelection.hpp +++ b/src/glue/CCharacterSelection.hpp @@ -5,21 +5,40 @@ #include "net/Types.hpp" class CSimpleModelFFX; +class CM2Model; struct CharacterSelectionDisplay { + CharacterSelectionDisplay(); + CHARACTER_INFO m_characterInfo; + CM2Model* m_characterModel; }; class CCharacterSelection { public: // Static variables + static CSimpleModelFFX* m_modelFrame; + static uint32_t m_characterCount; + static float m_charFacing; + static uint32_t m_restrictHuman; + static uint32_t m_restrictDwarf; + static uint32_t m_restrictGnome; + static uint32_t m_restrictNightElf; + static uint32_t m_restrictDraenei; + static uint32_t m_restrictOrc; + static uint32_t m_restrictTroll; + static uint32_t m_restrictTauren; + static uint32_t m_restrictUndead; + static uint32_t m_restrictBloodElf; static TSGrowableArray s_characterList; - static CSimpleModelFFX* s_modelFrame; - static float s_charFacing; + static int32_t m_selectionIndex; // Static functions + static void Initialize(); static void RenderPrep(); static void SetBackgroundModel(const char* modelPath); + static void EnumerateCharactersCallback(CHARACTER_INFO& info, void* param); + static void ShowCharacter(); static void SetCharFacing(float facing); static void ClearCharacterList(); static void UpdateCharacterList(); diff --git a/src/glue/CGlueMgr.cpp b/src/glue/CGlueMgr.cpp index 0d8453e..25cd17b 100644 --- a/src/glue/CGlueMgr.cpp +++ b/src/glue/CGlueMgr.cpp @@ -1,6 +1,8 @@ #include "glue/CGlueMgr.hpp" #include "glue/CRealmList.hpp" #include "glue/CCharacterSelection.hpp" +#include "glue/CCharacterCreation.hpp" +#include "console/Console.hpp" #include "client/Client.hpp" #include "client/ClientServices.hpp" #include "gx/Coordinate.hpp" @@ -67,6 +69,7 @@ int32_t CGlueMgr::m_reload; int32_t CGlueMgr::m_scandllOkayToLogIn = 1; // TODO float CGlueMgr::m_screenHeight; float CGlueMgr::m_screenWidth; +int32_t CGlueMgr::m_clientKickReason; int32_t CGlueMgr::m_showedDisconnect; CSimpleTop* CGlueMgr::m_simpleTop; int32_t CGlueMgr::m_suspended; @@ -229,6 +232,61 @@ void CGlueMgr::GetCharacterList() { } } +int32_t CGlueMgr::NetDisconnectHandler(const void* eventData, void*) { + bool v11 = CGlueMgr::m_idleState != IDLE_ACCOUNT_LOGIN; + + CGlueMgr::m_idleState = IDLE_NONE; + CGlueMgr::m_showedDisconnect = 0; + + if (CGlueMgr::m_disconnectPending) { + ConsolePrintf("CGlueMgr::NetDisconnectHandler: Disconnect pending"); + CGlueMgr::m_disconnectPending = 0; + + if (CGlueMgr::m_reconnect) { + CGlueMgr::m_reconnect = 0; + CGlueMgr::m_idleState = IDLE_ACCOUNT_LOGIN; + CGlueMgr::m_showedDisconnect = 0; + auto text = FrameScript_GetText("GAME_SERVER_LOGIN", -1, GENDER_NOT_APPLICABLE); + FrameScript_SignalEvent(3u, "%s%s", "CANCEL", text); + ClientServices::Connection()->Connect(); + return 1; + } + return 1; + } + if (!ClientServices::ValidDisconnect(eventData)) { + ConsolePrintf("CGlueMgr::NetDisconnectHandler: Invalid disconnect"); + return 1; + } + // TODO: ClientDestroyGame(0, 1, 0); + // TODO: EventSetMouseMode(0, 0); + + if (CGlueMgr::m_suspended) { + CGlueMgr::Resume(); + } + + if (v11) { + ConsolePrintf("CGlueMgr::NetDisconnectHandler: Displaying script"); + FrameScript_SignalEvent(2u, "%d", CGlueMgr::m_clientKickReason); + } else { + ConsolePrintf("CGlueMgr::NetDisconnectHandler: NOT displaying script"); + WOWCS_OPS op; + const char* msg; + int32_t result; + int32_t errorCode; + int32_t complete = ClientServices::Connection()->PollStatus(op, &msg, result, errorCode); + + if (!complete || result) { + ClientServices::SelectRealm(""); + FrameScript_SignalEvent(2u, "%d", CGlueMgr::m_clientKickReason); + } else { + FrameScript_SignalEvent(3u, "%s%s", "OKAY", msg); + } + } + + ClientServices::LoginConnection()->Logoff(); + return 1; +} + // TODO a1: const EVENT_DATA_IDLE* int32_t CGlueMgr::Idle(const void* a1, void* a2) { // TODO: @@ -287,44 +345,64 @@ int32_t CGlueMgr::Idle(const void* a1, void* a2) { int32_t complete = ClientServices::Connection()->PollStatus(op, &msg, result, errorCode); switch (CGlueMgr::m_idleState) { - case IDLE_LOGIN_SERVER_LOGIN: { - CGlueMgr::PollLoginServerLogin(); - break; - } - - case IDLE_ACCOUNT_LOGIN: { - CGlueMgr::PollAccountLogin(errorCode, msg, complete, result, op); - break; - } - - case IDLE_CHARACTER_LIST: { - CGlueMgr::PollCharacterList(errorCode, msg, complete, result, op); - break; - } - - case IDLE_ENTER_WORLD: { - CGlueMgr::PollEnterWorld(); - break; - } - - case IDLE_12: { - if (CGlueMgr::m_patchDownload) { - CGlueMgr::PatchDownloadIdle(); - } else if (CGlueMgr::m_surveyDownload) { - CGlueMgr::SurveyDownloadIdle(); + case IDLE_LOGIN_SERVER_LOGIN: { + CGlueMgr::PollLoginServerLogin(); + break; } - break; - } - case IDLE_13: { - CGlueMgr::PollUserSurvey(); - break; - } + case IDLE_ACCOUNT_LOGIN: { + CGlueMgr::PollAccountLogin(errorCode, msg, complete, result, op); + break; + } - // TODO other idle states + case IDLE_CHARACTER_LIST: { + CGlueMgr::PollCharacterList(errorCode, msg, complete, result, op); + break; + } - default: - break; + case IDLE_REALM_LIST: { + CGlueMgr::PollRealmList(errorCode, msg, complete, result, op); + break; + } + + case IDLE_CREATE_CHARACTER: { + CGlueMgr::PollCreateCharacter(errorCode, msg, complete, result, op); + break; + } + + case IDLE_DELETE_CHARACTER: { + CGlueMgr::PollDeleteCharacter(errorCode, msg, complete, result, op); + break; + } + + case IDLE_ENTER_WORLD: { + CGlueMgr::PollEnterWorld(); + break; + } + + case IDLE_WORLD_LOGIN: { + FrameScript_SignalEvent(3u, "%s%s", "OKAY", msg); + break; + } + + case IDLE_12: { + if (CGlueMgr::m_patchDownload) { + CGlueMgr::PatchDownloadIdle(); + } else if (CGlueMgr::m_surveyDownload) { + CGlueMgr::SurveyDownloadIdle(); + } + break; + } + + case IDLE_13: { + CGlueMgr::PollUserSurvey(); + break; + } + + // TODO other idle states + + default: + break; } return 1; @@ -624,6 +702,80 @@ void CGlueMgr::PollCharacterList(int32_t errorCode, const char* msg, int32_t com CGlueMgr::m_accountMsgAvailable = 0; } +void CGlueMgr::PollRealmList(int32_t errorCode, const char* msg, int32_t complete, int32_t result, WOWCS_OPS op) { + FrameScript_SignalEvent(4u, "%s", msg); + if (CGlueMgr::HandleBattlenetDisconnect()) { + CGlueMgr::m_idleState = IDLE_NONE; + CGlueMgr::m_showedDisconnect = 0; + } + + if (!complete) { + return; + } + + if (result) { + CGlueMgr::m_idleState = IDLE_NONE; + CGlueMgr::m_showedDisconnect = 0; + FrameScript_SignalEvent(5u, nullptr); + CRealmList::UpdateList(); + if (!CGlueMgr::m_accountMsgAvailable) + return; + FrameScript_SignalEvent(34u, nullptr); + CGlueMgr::m_accountMsgAvailable = 0; + } else { + FrameScript_SignalEvent(3u, "%s%s", "OKAY", msg); + CGlueMgr::m_idleState = IDLE_NONE; + CGlueMgr::m_showedDisconnect = 0; + } +} +void CGlueMgr::PollCreateCharacter(int32_t errorCode, const char* msg, int32_t complete, int32_t result, WOWCS_OPS op) { + FrameScript_SignalEvent(4u, "%s", msg); + + if (CGlueMgr::HandleBattlenetDisconnect()) { + CGlueMgr::m_idleState = IDLE_NONE; + CGlueMgr::m_showedDisconnect = 0; + } + + if (!complete) { + return; + } + + if (result) { + CGlueMgr::m_idleState = IDLE_NONE; + CGlueMgr::m_showedDisconnect = 0; + FrameScript_SignalEvent(5u, 0); + FrameScript_SignalEvent(0xCu, 0); + CGlueMgr::SetScreen("charselect"); + } else { + FrameScript_SignalEvent(3u, "%s%s", "OKAY", msg); + CGlueMgr::m_idleState = IDLE_NONE; + CGlueMgr::m_showedDisconnect = 0; + } +} + +void CGlueMgr::PollDeleteCharacter(int32_t errorCode, const char* msg, int32_t complete, int32_t result, WOWCS_OPS op) { + FrameScript_SignalEvent(4, "%s", msg); + + if (CGlueMgr::HandleBattlenetDisconnect()) { + CGlueMgr::m_idleState = IDLE_NONE; + CGlueMgr::m_showedDisconnect = 0; + } + + if (!complete) { + return; + } + + if (result) { + FrameScript_SignalEvent(13, 0); + CGlueMgr::GetCharacterList(); + return; + } + + FrameScript_SignalEvent(3, "%s%s", "OKAY", msg); + CGlueMgr::m_idleState = IDLE_NONE; + CGlueMgr::m_showedDisconnect = 0; +} + void CGlueMgr::PollUserSurvey() { if (CGlueMgr::m_surveyDownload && false /* virtual call */) { if (CGlueMgr::m_executedSurvey) { @@ -640,6 +792,12 @@ void CGlueMgr::PollUserSurvey() { } } +void CGlueMgr::CancelLogin() { + if (CGlueMgr::m_idleState == IDLE_LOGIN_SERVER_LOGIN) { + CGlueMgr::StatusDialogClick(); + } +} + void CGlueMgr::InitCursor() { uint32_t width; uint32_t height; @@ -709,6 +867,9 @@ void CGlueMgr::Resume() { OsCreateDirectory("Logs", 0); + CCharacterSelection::Initialize(); + CCharacterCreation::Initialize(); + CWOWClientStatus status; if (!SLogCreate("Logs\\GlueXML.log", 0, &status.m_logFile)) { @@ -920,6 +1081,20 @@ bool CGlueMgr::HandleBattlenetDisconnect() { return false; } +void CGlueMgr::DeleteCharacter(uint64_t guid) { + if (!guid) { + return; + } + + CGlueMgr::m_idleState = IDLE_DELETE_CHARACTER; + CGlueMgr::m_showedDisconnect = 0; + + auto errorText = ClientServices::GetErrorToken(70); + auto text = FrameScript_GetText(errorText, -1, GENDER_NOT_APPLICABLE); + FrameScript_SignalEvent(3u, "%s%s", "CANCEL", text); + ClientServices::CharacterDelete(guid); +} + void CGlueMgr::PollEnterWorld() { //if (!LoadingScreenDrawing()) // return; diff --git a/src/glue/CGlueMgr.hpp b/src/glue/CGlueMgr.hpp index 5623dad..f4d3cd3 100644 --- a/src/glue/CGlueMgr.hpp +++ b/src/glue/CGlueMgr.hpp @@ -59,6 +59,7 @@ class CGlueMgr { static int32_t m_scandllOkayToLogIn; static float m_screenHeight; static float m_screenWidth; + static int32_t m_clientKickReason; static int32_t m_showedDisconnect; static CSimpleTop* m_simpleTop; static int32_t m_suspended; @@ -78,6 +79,7 @@ class CGlueMgr { static int32_t HandleDisplaySizeChanged(const CSizeEvent& event); static void GetRealmList(bool showProgress); static void GetCharacterList(); + static int32_t NetDisconnectHandler(const void* eventData, void*); static int32_t Idle(const void* a1, void* a2); static void Initialize(); static void InitCursor(); @@ -87,7 +89,11 @@ class CGlueMgr { static void PollAccountLogin(int32_t errorCode, const char* msg, int32_t complete, int32_t result, WOWCS_OPS op); static void PollLoginServerLogin(); static void PollCharacterList(int32_t errorCode, const char* msg, int32_t complete, int32_t result, WOWCS_OPS op); + static void PollRealmList(int32_t errorCode, const char* msg, int32_t complete, int32_t result, WOWCS_OPS op); + static void PollCreateCharacter(int32_t errorCode, const char* msg, int32_t complete, int32_t result, WOWCS_OPS op); + static void PollDeleteCharacter(int32_t errorCode, const char* msg, int32_t complete, int32_t result, WOWCS_OPS op); static void PollUserSurvey(); + static void CancelLogin(); static void Resume(); static void SetCurrentAccount(const char* accountName); static void SetLoginStateAndResult(LOGIN_STATE state, LOGIN_RESULT result, char const* addrStr, char const* stateStr, char const* resultStr, uint8_t flags); @@ -97,6 +103,7 @@ class CGlueMgr { static void Suspend(); static void UpdateCurrentScreen(const char* screen); static bool HandleBattlenetDisconnect(); + static void DeleteCharacter(uint64_t guid); static void PollEnterWorld(); diff --git a/src/gx/Font.cpp b/src/gx/Font.cpp index a81e91e..405bfa1 100644 --- a/src/gx/Font.cpp +++ b/src/gx/Font.cpp @@ -10,11 +10,13 @@ #include "gx/Shader.hpp" #include #include +#include #include #include #include #include #include +#include CGxShader* g_fontPixelShader[1]; CGxShader* g_fontVertexShader[2]; @@ -177,7 +179,18 @@ uint32_t GetScreenPixelWidth() { } QUOTEDCODE GxuDetermineQuotedCode(const char* text, int32_t& advance, CImVector* color, uint32_t flags, uint32_t& wide) { - wide = SUniSGetUTF8(reinterpret_cast(text), &advance); + STORM_ASSERT(text); + STORM_ASSERT(*text); + + bool ignoreColorCodes = flags & 0x100; + bool ignoreNewlines = flags & 0x200; + bool ignoreHyperlinks = flags & 0x400; + bool ignorePipes = flags & 0x800; + bool ignoreTextures = flags & 0x1000; + + auto utext = reinterpret_cast(text); + + wide = sgetu8(utext, &advance); switch (wide) { case 0x0: @@ -185,7 +198,7 @@ QUOTEDCODE GxuDetermineQuotedCode(const char* text, int32_t& advance, CImVector* return CODE_INVALIDCODE; case '\r': - advance = 2 - (SUniSGetUTF8(reinterpret_cast(text + 1), &advance) != '\n'); + advance = 2 - (sgetu8(utext + 1, &advance) != '\n'); return CODE_NEWLINE; case '\n': @@ -193,7 +206,7 @@ QUOTEDCODE GxuDetermineQuotedCode(const char* text, int32_t& advance, CImVector* return CODE_NEWLINE; } - if (wide != '|' || flags & 0x800) { + if (wide != '|' || ignorePipes) { return CODE_INVALIDCODE; } @@ -203,18 +216,98 @@ QUOTEDCODE GxuDetermineQuotedCode(const char* text, int32_t& advance, CImVector* return CODE_INVALIDCODE; } + int32_t firstCharAdvance = advance; + switch (quotedCode) { - case 'N': - case 'n': { - if (flags & 0x200) { + case 'C': + case 'c': { + if (ignoreColorCodes) { return CODE_INVALIDCODE; } + size_t offset = advance + 1; + uint8_t comps[4]; + + for (size_t j = 0; j < 4; ++j) { + if (!text[offset] || !text[offset + 1]) { + return CODE_INVALIDCODE; + } + + char hex[3] = { text[offset], text[offset + 1], '\0' }; + offset += 2; + char* error = nullptr; + comps[j] = static_cast(strtol(hex, &error, 16)); + if (error && *error) { + return CODE_INVALIDCODE; + } + } + + if (color) { + color->value = CImVector::MakeARGB(255, comps[1], comps[2], comps[3]); + } + + advance = 10; + return CODE_COLORON; + } + + case 'H': { + if (ignoreHyperlinks) { + return CODE_INVALIDCODE; + } + // TODO + break; + } + + case 'N': + case 'n': { + if (ignoreNewlines) { + return CODE_INVALIDCODE; + } advance = 2; return CODE_NEWLINE; } - // TODO handle other control codes + case 'R': + case 'r': { + if (ignoreColorCodes) { + return CODE_INVALIDCODE; + } + advance = 2; + return CODE_COLORRESTORE; + } + + case 'T': { + if (ignoreTextures) { + return CODE_INVALIDCODE; + } + // TODO + break; + } + + case 'h': { + if (ignoreHyperlinks) { + return CODE_INVALIDCODE; + } + advance = 2; + return CODE_HYPERLINKSTOP; + } + + case 't': { + if (ignoreTextures) { + return CODE_INVALIDCODE; + } + advance = 2; + return CODE_TEXTURESTOP; + } + + case '|': { + advance = 2; + return CODE_PIPE; + } + + default: { + return CODE_INVALIDCODE; + } } // TODO remainder of function diff --git a/src/gx/d3d/CGxDeviceD3d.hpp b/src/gx/d3d/CGxDeviceD3d.hpp index 56c8d73..c4b786b 100644 --- a/src/gx/d3d/CGxDeviceD3d.hpp +++ b/src/gx/d3d/CGxDeviceD3d.hpp @@ -229,6 +229,7 @@ class CGxDeviceD3d : public CGxDevice { LPDIRECT3DDEVICE9 m_d3dDevice = nullptr; D3DCAPS9 m_d3dCaps; int32_t m_d3dIsHwDevice = 0; + int32_t m_d3dStereoEnabled = 0; LPDIRECT3DVERTEXDECLARATION9 m_d3dVertexDecl[GxVertexBufferFormats_Last] = { 0 }; D3DDISPLAYMODE m_desktopDisplayMode; int32_t m_inScene; diff --git a/src/gx/font/CGxString.cpp b/src/gx/font/CGxString.cpp index 6694241..eab4ce8 100644 --- a/src/gx/font/CGxString.cpp +++ b/src/gx/font/CGxString.cpp @@ -348,7 +348,7 @@ int32_t CGxString::Initialize(float fontHeight, const C3Vector& position, float face->m_strings.LinkToTail(this); - float requestedFontHeight = this->m_flags & 0x4 && !(this->m_flags & 0x80) + float requestedFontHeight = ((this->m_flags & 0x4) && !(this->m_flags & 0x80)) ? GxuFontGetOneToOneHeight(face) : fontHeight; this->m_requestedFontHeight = requestedFontHeight; @@ -382,7 +382,7 @@ void CGxString::InitializeTextLine(const char* currentText, uint32_t numBytes, C float stepGlyph = 0.0f; float stepScreen = 0.0f; uint32_t prevCode = 0; - CImVector color; + CImVector color = this->m_fontColor; while (numBytes && *currentText) { int32_t advance; diff --git a/src/net/CMakeLists.txt b/src/net/CMakeLists.txt index 13f2a67..1a0d0ac 100644 --- a/src/net/CMakeLists.txt +++ b/src/net/CMakeLists.txt @@ -32,6 +32,7 @@ target_include_directories(net target_link_libraries(net PRIVATE client + console event PUBLIC bc diff --git a/src/net/Types.hpp b/src/net/Types.hpp index fa3d356..bd65e34 100644 --- a/src/net/Types.hpp +++ b/src/net/Types.hpp @@ -1174,6 +1174,7 @@ enum NETSTATE { NS_STATE_3 = 3, NS_CONNECTING = 4, NS_CONNECTED = 5, + NS_DISCONNECTING = 6 }; enum WOW_CONN_STATE { @@ -1285,5 +1286,28 @@ struct CHARACTER_INFO { uint8_t firstLogin; }; +struct CHARACTER_CREATE_INFO { + uint8_t unk[24]; + uint32_t raceID; + uint32_t sexID; +}; + +struct CLIENT_NETSTATS { + uint32_t bytesSent; + uint32_t messagesSent; + uint32_t sendTimestamp; + uint32_t bytesReceived; + uint32_t messagesReceived; + uint32_t receivTimestamp; + uint32_t logTimestamp; + uint32_t unk1; + uint32_t unk2; + uint32_t unk3; + uint32_t unk4; +}; + + +typedef void (*ENUMERATE_CHARACTERS_CALLBACK)(CHARACTER_INFO&, void*); + #endif diff --git a/src/net/connection/ClientConnection.cpp b/src/net/connection/ClientConnection.cpp index 9138d20..6ac0b53 100644 --- a/src/net/connection/ClientConnection.cpp +++ b/src/net/connection/ClientConnection.cpp @@ -3,113 +3,8 @@ #include "client/ClientServices.hpp" #include "ui/FrameScript.hpp" #include +#include -const char* s_errorCodeTokens[] = { - "RESPONSE_SUCCESS", - "RESPONSE_FAILURE", - "RESPONSE_CANCELLED", - "RESPONSE_DISCONNECTED", - "RESPONSE_FAILED_TO_CONNECT", - "RESPONSE_CONNECTED", - "RESPONSE_VERSION_MISMATCH", - "CSTATUS_CONNECTING", - "CSTATUS_NEGOTIATING_SECURITY", - "CSTATUS_NEGOTIATION_COMPLETE", - "CSTATUS_NEGOTIATION_FAILED", - "CSTATUS_AUTHENTICATING", - "AUTH_OK", - "AUTH_FAILED", - "AUTH_REJECT", - "AUTH_BAD_SERVER_PROOF", - "AUTH_UNAVAILABLE", - "AUTH_SYSTEM_ERROR", - "AUTH_BILLING_ERROR", - "AUTH_BILLING_EXPIRED", - "AUTH_VERSION_MISMATCH", - "AUTH_UNKNOWN_ACCOUNT", - "AUTH_INCORRECT_PASSWORD", - "AUTH_SESSION_EXPIRED", - "AUTH_SERVER_SHUTTING_DOWN", - "AUTH_ALREADY_LOGGING_IN", - "AUTH_LOGIN_SERVER_NOT_FOUND", - "AUTH_WAIT_QUEUE", - "AUTH_BANNED", - "AUTH_ALREADY_ONLINE", - "AUTH_NO_TIME", - "AUTH_DB_BUSY", - "AUTH_SUSPENDED", - "AUTH_PARENTAL_CONTROL", - "AUTH_LOCKED_ENFORCED", - "REALM_LIST_IN_PROGRESS", - "REALM_LIST_SUCCESS", - "REALM_LIST_FAILED", - "REALM_LIST_INVALID", - "REALM_LIST_REALM_NOT_FOUND", - "ACCOUNT_CREATE_IN_PROGRESS", - "ACCOUNT_CREATE_SUCCESS", - "ACCOUNT_CREATE_FAILED", - "CHAR_LIST_RETRIEVING", - "CHAR_LIST_RETRIEVED", - "CHAR_LIST_FAILED", - "CHAR_CREATE_IN_PROGRESS", - "CHAR_CREATE_SUCCESS", - "CHAR_CREATE_ERROR", - "CHAR_CREATE_FAILED", - "CHAR_CREATE_NAME_IN_USE", - "CHAR_CREATE_DISABLED", - "CHAR_CREATE_PVP_TEAMS_VIOLATION", - "CHAR_CREATE_SERVER_LIMIT", - "CHAR_CREATE_ACCOUNT_LIMIT", - "CHAR_CREATE_SERVER_QUEUE", - "CHAR_CREATE_ONLY_EXISTING", - "CHAR_CREATE_EXPANSION", - "CHAR_CREATE_EXPANSION_CLASS", - "CHAR_CREATE_LEVEL_REQUIREMENT", - "CHAR_CREATE_UNIQUE_CLASS_LIMIT", - "CHAR_CREATE_CHARACTER_IN_GUILD", - "CHAR_CREATE_RESTRICTED_RACECLASS", - "CHAR_CREATE_CHARACTER_CHOOSE_RACE", - "CHAR_CREATE_CHARACTER_ARENA_LEADER", - "CHAR_CREATE_CHARACTER_DELETE_MAIL", - "CHAR_CREATE_CHARACTER_SWAP_FACTION", - "CHAR_CREATE_CHARACTER_RACE_ONLY", - "CHAR_CREATE_CHARACTER_GOLD_LIMIT", - "CHAR_CREATE_FORCE_LOGIN", - "CHAR_DELETE_IN_PROGRESS", - "CHAR_DELETE_SUCCESS", - "CHAR_DELETE_FAILED", - "CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER", - "CHAR_DELETE_FAILED_GUILD_LEADER", - "CHAR_DELETE_FAILED_ARENA_CAPTAIN", - "CHAR_LOGIN_IN_PROGRESS", - "CHAR_LOGIN_SUCCESS", - "CHAR_LOGIN_NO_WORLD", - "CHAR_LOGIN_DUPLICATE_CHARACTER", - "CHAR_LOGIN_NO_INSTANCES", - "CHAR_LOGIN_FAILED", - "CHAR_LOGIN_DISABLED", - "CHAR_LOGIN_NO_CHARACTER", - "CHAR_LOGIN_LOCKED_FOR_TRANSFER", - "CHAR_LOGIN_LOCKED_BY_BILLING", - "CHAR_LOGIN_LOCKED_BY_MOBILE_AH", - "CHAR_NAME_SUCCESS", - "CHAR_NAME_FAILURE", - "CHAR_NAME_NO_NAME", - "CHAR_NAME_TOO_SHORT", - "CHAR_NAME_TOO_LONG", - "CHAR_NAME_INVALID_CHARACTER", - "CHAR_NAME_MIXED_LANGUAGES", - "CHAR_NAME_PROFANE", - "CHAR_NAME_RESERVED", - "CHAR_NAME_INVALID_APOSTROPHE", - "CHAR_NAME_MULTIPLE_APOSTROPHES", - "CHAR_NAME_THREE_CONSECUTIVE", - "CHAR_NAME_INVALID_SPACE", - "CHAR_NAME_CONSECUTIVE_SPACES", - "CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS", - "CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END", - "CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME", -}; void ClientConnection::AccountLogin(const char* name, const char* password, int32_t region, int32_t locale) { STORM_ASSERT(this->m_statusComplete == 1); @@ -141,6 +36,13 @@ void ClientConnection::GetCharacterList() { } } +void ClientConnection::EnumerateCharacters(ENUMERATE_CHARACTERS_CALLBACK fcn, void* param) { + STORM_ASSERT(fcn); + for (uint32_t i = 0; i < this->m_characterList.Count(); ++i) { + fcn(this->m_characterList[i], param); + } +} + void ClientConnection::CharacterLogin(uint64_t id) { this->Initiate(COP_LOGIN_CHARACTER, 76, nullptr); if (this->m_connected) { @@ -150,6 +52,19 @@ void ClientConnection::CharacterLogin(uint64_t id) { } } +void ClientConnection::DeleteCharacter(uint64_t guid) { + this->Initiate(COP_DELETE_CHARACTER, 70, nullptr); + if (this->m_connected) { + CDataStore msg; + msg.Put(static_cast(CMSG_CHAR_DELETE)); + msg.Put(guid); + msg.Finalize(); + this->Send(&msg); + } else { + this->Cancel(4); + } +} + void ClientConnection::Cancel(int32_t errorCode) { this->Complete(0, errorCode); } @@ -185,7 +100,9 @@ void ClientConnection::Connect() { } int32_t ClientConnection::Disconnect() { - // TODO + this->NetClient::Disconnect(); + this->m_connected = 0; + // TODO: WardenClient_Destroy(); return 0; } @@ -220,8 +137,10 @@ int32_t ClientConnection::PollStatus(WOWCS_OPS& op, const char** msg, int32_t& r static char altText[256]; if (this->m_statusComplete) { - auto text = errorCode >= 0 && errorCode < 104 - ? FrameScript_GetText(s_errorCodeTokens[errorCode], -1, GENDER_NOT_APPLICABLE) + auto errorText = ClientServices::GetErrorToken(errorCode); + + auto text = errorText[0] + ? FrameScript_GetText(errorText, -1, GENDER_NOT_APPLICABLE) : nullptr; if (!text) { diff --git a/src/net/connection/ClientConnection.hpp b/src/net/connection/ClientConnection.hpp index a579464..bb88880 100644 --- a/src/net/connection/ClientConnection.hpp +++ b/src/net/connection/ClientConnection.hpp @@ -28,7 +28,9 @@ class ClientConnection : public RealmConnection { void AccountLogin_Finish(int32_t authResult); void AccountLogin_Queued(); void GetCharacterList(); + void EnumerateCharacters(ENUMERATE_CHARACTERS_CALLBACK fcn, void* param); void CharacterLogin(uint64_t id); + void DeleteCharacter(uint64_t guid); void Cancel(int32_t errorCode); void Cleanup(); void Connect(); diff --git a/src/net/connection/NetClient.cpp b/src/net/connection/NetClient.cpp index e60e6ec..ece9cce 100644 --- a/src/net/connection/NetClient.cpp +++ b/src/net/connection/NetClient.cpp @@ -1,5 +1,7 @@ #include "net/connection/NetClient.hpp" #include "net/connection/WowConnection.hpp" +#include "glue/CGlueMgr.hpp" +#include "console/Console.hpp" #include #include #include @@ -11,7 +13,8 @@ HPROPCONTEXT s_propContext; -int32_t NetClient::s_clientCount; +CLIENT_NETSTATS NetClient::s_stats = {}; +int32_t NetClient::s_clientCount = 0; void InitializePropContext() { if (PropGetSelectedContext() != s_propContext) { @@ -19,6 +22,11 @@ void InitializePropContext() { } } + +NETEVENTQUEUE::~NETEVENTQUEUE() { + this->Clear(); +} + void NETEVENTQUEUE::AddEvent(EVENTID eventId, void* conn, NetClient* client, const void* data, uint32_t bytes) { this->m_critSect.Enter(); @@ -98,12 +106,33 @@ void NETEVENTQUEUE::Poll() { this->m_critSect.Leave(); } +void NETEVENTQUEUE::Clear() { + this->m_critSect.Enter(); + this->m_eventQueue.Clear(); + this->m_critSect.Leave(); +} + + +void NetClient::LogStats() { + char message[128]; + + uint32_t time = OsGetAsyncTimeMs(); + SStrPrintf( + message, + sizeof(message), + "Client net stats: %Lu bytes sent, %Lu bytes received, %Lu msec elapsed", + NetClient::s_stats.bytesSent, + NetClient::s_stats.bytesReceived, + time - s_stats.logTimestamp); + ConsoleWrite(message, DEFAULT_COLOR); +} + void NetClient::AddRef() { SInterlockedIncrement(&this->m_refCount); } void NetClient::AuthChallengeHandler(WowConnection* conn, CDataStore* msg) { - auto challenge = static_cast(SMemAlloc(sizeof(AuthenticationChallenge), __FILE__, __LINE__, 0x0)); + auto challenge = NEW(AuthenticationChallenge); uint32_t v14; msg->Get(v14); @@ -120,7 +149,7 @@ void NetClient::AuthChallengeHandler(WowConnection* conn, CDataStore* msg) { conn->Disconnect(); } - delete challenge; + DEL(challenge); } void NetClient::Connect(const char* addrStr) { @@ -144,6 +173,34 @@ void NetClient::Connect(const char* addrStr) { this->ConnectInternal(host, port); } +void NetClient::Disconnect() { + if (this->m_redirectConnection) { + this->m_redirectConnection->SetResponse(nullptr, false); + this->m_redirectConnection->Disconnect(); + this->m_redirectConnection->Release(); + } + + if (this->m_netState == NS_CONNECTED) { + this->m_netState = NS_DISCONNECTING; + this->m_serverConnection->Disconnect(); + } else { + this->m_serverConnection->SetResponse(nullptr, false); + this->m_serverConnection->Disconnect(); + this->m_netEventQueue->Clear(); + this->m_serverConnection->Release(); + + auto connectionMem = SMemAlloc(sizeof(WowConnection), __FILE__, __LINE__, 0x0); + if (connectionMem) { + auto connection = new (connectionMem) WowConnection(this, nullptr); + this->m_serverConnection = connection; + } else { + this->m_serverConnection = nullptr; + } + + this->m_netState = NS_INITIALIZED; + } +} + int32_t NetClient::ConnectInternal(const char* host, uint16_t port) { if (this->m_netState != NS_INITIALIZED) { SErrDisplayAppFatal("Expected (m_netState == NS_INITIALIZED), got %d", this->m_netState); @@ -152,7 +209,12 @@ int32_t NetClient::ConnectInternal(const char* host, uint16_t port) { this->m_netState = NS_CONNECTING; this->m_serverConnection->Connect(host, port, -1); - // TODO + if (this->m_redirectConnection) { + this->m_redirectConnection->SetResponse(nullptr, false); + this->m_redirectConnection->Disconnect(); + this->m_redirectConnection->Release(); + this->m_redirectConnection = nullptr; + } return 1; } @@ -192,44 +254,98 @@ NETSTATE NetClient::GetState() { return this->m_netState; } +void NetClient::Ping() { + if (!this->m_serverConnection->m_encrypt) { + return; + } + + this->m_pingLock.Enter(); + this->m_pingSent = OsGetAsyncTimeMsPrecise(); + + CDataStore msg; + msg.Put(static_cast(CMSG_PING)); + msg.Put(++this->m_pingSequence); + if (this->m_netState == NS_CONNECTED) { + if (this->m_latencyEnd) { + msg.Put(this->m_latency[this->m_latencyEnd]); + } else { + msg.Put(static_cast(0)); + } + } + msg.Finalize(); + + this->m_pingLock.Leave(); + this->Send(&msg); +} + int32_t NetClient::HandleCantConnect() { - // TODO + this->PushObjMgr(); + + STORM_ASSERT(m_netState == NS_CONNECTING); + this->m_netState = NS_INITIALIZED; + + this->PopObjMgr(); + return 1; } +int32_t NetClient::ValidateMessageId(uint32_t msgId) { + // This method does nothing + return 0; +} + int32_t NetClient::HandleConnect() { - // TODO push obj mgr + this->PushObjMgr(); this->m_netState = NS_CONNECTED; - // TODO pop obj mgr + this->PopObjMgr(); return 1; } int32_t NetClient::HandleData(uint32_t timeReceived, void* data, int32_t size) { - // TODO push obj mgr + this->PushObjMgr(); - CDataStore msg; - msg.m_data = static_cast(data); - msg.m_size = size; - msg.m_alloc = -1; - msg.m_read = 0; + NetClient::s_stats.bytesReceived += size + 2; - this->ProcessMessage(timeReceived, &msg, 0); + if (this->m_netState == NS_CONNECTED) { + CDataStore msg; + msg.m_data = static_cast(data); + msg.m_size = size; + msg.m_alloc = -1; + msg.m_read = 0; - // TODO pop obj mgr + this->ProcessMessage(timeReceived, &msg, 0); + } + + this->PopObjMgr(); return 1; } int32_t NetClient::HandleDisconnect() { - // TODO + this->PushObjMgr(); + + STORM_ASSERT(this->m_netState == NS_CONNECTED || this->m_netState == NS_DISCONNECTING); + + this->m_netState = NS_INITIALIZED; + ConsolePrintf("NetClient::HandleDisconnect()"); + CGlueMgr::NetDisconnectHandler(this, nullptr); + + this->PopObjMgr(); return 1; } void NetClient::HandleIdle() { - // TODO; + s_stats.unk1 = s_stats.bytesSent; + s_stats.unk2 = s_stats.bytesReceived; + s_stats.unk3 = s_stats.messagesSent; + s_stats.unk4 = s_stats.messagesReceived; + + if (OsGetAsyncTimeMsPrecise() - this->m_pingSent >= 30000) { + this->Ping(); + } } int32_t NetClient::Initialize() { @@ -261,21 +377,77 @@ int32_t NetClient::Initialize() { return 1; } +void NetClient::Destroy() { + if (this->m_netState == NS_UNINITIALIZED) { + return; + } + + this->Disconnect(); + + this->m_serverConnection->SetResponse(nullptr, false); + this->m_serverConnection->Release(); + this->m_serverConnection = nullptr; + + memset(this->m_handlers, 0, sizeof(this->m_handlers)); + memset(this->m_handlerParams, 0, sizeof(this->m_handlerParams)); + + if (this->m_netEventQueue) { + DEL(this->m_netEventQueue); + } + this->m_netEventQueue = nullptr; + + if (--NetClient::s_clientCount == 0) { + OsSleep(1); + // TODO: WowConnection::DestroyOsNet(); + } + + this->m_netState = NS_UNINITIALIZED; + + if (NetClient::s_clientCount == 0) { + NetClient::LogStats(); + } +} + void NetClient::PollEventQueue() { this->m_netEventQueue->Poll(); } void NetClient::PongHandler(WowConnection* conn, CDataStore* msg) { - // TODO + if (conn != this->m_serverConnection || this->m_suspended) { + conn->Disconnect(); + return; + } + + this->m_pingLock.Enter(); + + uint32_t sequence; + msg->Get(sequence); + + if (sequence == this->m_pingSequence) { + this->m_latency[this->m_latencyEnd++] = OsGetAsyncTimeMsPrecise() - this->m_pingSent; + + if (this->m_latencyEnd >= 16) { + this->m_latencyEnd = 0; + } + + if (this->m_latencyEnd == this->m_latencyStart) { + ++this->m_latencyStart; + if (this->m_latencyStart >= 16) + this->m_latencyStart = 0; + } + } else { + ConsolePrintf("Received pong with old sequence"); + } + this->m_pingLock.Leave(); } void NetClient::ProcessMessage(uint32_t timeReceived, CDataStore* msg, int32_t a4) { - // TODO s_stats.messagesReceived++ + ++NetClient::s_stats.messagesReceived; uint16_t msgId; msg->Get(msgId); - // TODO virtual function call on NetClient + this->ValidateMessageId(msgId); if (msgId >= NUM_MSG_TYPES || !this->m_handlers[msgId]) { msg->Reset(); @@ -324,13 +496,70 @@ void NetClient::SetLoginData(LoginData* loginData) { memcpy(&this->m_loginData, loginData, sizeof(this->m_loginData)); } +void NetClient::DisplayNetworkStats() { + this->m_pingLock.Enter(); + OsGetAsyncTimeMs(); + + float bandwidthIn; + float bandwidthOut; + uint32_t latency; + this->GetNetStats(bandwidthIn, bandwidthOut, latency); + + this->m_pingLock.Leave(); +} + +void NetClient::GetNetStats(float& bandwidthIn, float& bandwidthOut, uint32_t& latency) { + this->m_pingLock.Enter(); + + double v5 = (double)(OsGetAsyncTimeMs() - this->m_connectedTimestamp) * 0.001; + bandwidthIn = (double)this->m_bytesReceived * 0.0009765625 / v5; + bandwidthOut = (double)this->m_bytesSent * 0.0009765625 / v5; + + uint32_t latencyStart = this->m_latencyStart; + uint32_t latencyEnd = this->m_latencyEnd; + + uint32_t v6 = 0; + uint32_t v9 = 0; + + while (latencyStart != latencyEnd) { + if (latencyStart >= 16) { + latencyStart = 0; + if (!latencyEnd) + break; + } + v9 += this->m_latency[latencyStart]; + ++v6; + ++latencyStart; + } ; + + if (!v6) { + latency = 0; + } else { + latency = v9 / v6; + } + + this->m_pingLock.Leave(); +} + +void NetClient::PushObjMgr() { + // TODO +} + +void NetClient::PopObjMgr() { + // TODO +} + void NetClient::SetMessageHandler(NETMESSAGE msgId, MESSAGE_HANDLER handler, void* param) { this->m_handlers[msgId] = handler; this->m_handlerParams[msgId] = param; } void NetClient::WCCantConnect(WowConnection* conn, uint32_t timeStamp, NETCONNADDR* addr) { - // TODO + if (conn == this->m_redirectConnection) { + // TODO + } else if (conn == this->m_serverConnection) { + this->m_netEventQueue->AddEvent(EVENT_ID_NET_CANTCONNECT, conn, this, nullptr, 0); + } } void NetClient::WCConnected(WowConnection* conn, WowConnection* inbound, uint32_t timeStamp, const NETCONNADDR* addr) { @@ -353,7 +582,10 @@ void NetClient::WCConnected(WowConnection* conn, WowConnection* inbound, uint32_ } void NetClient::WCDisconnected(WowConnection* conn, uint32_t timeStamp, NETCONNADDR* addr) { - // TODO + this->DisplayNetworkStats(); + if (this->m_netEventQueue) { + this->m_netEventQueue->AddEvent(EVENT_ID_NET_DISCONNECT, conn, this, nullptr, 0); + } } void NetClient::WCMessageReady(WowConnection* conn, uint32_t timeStamp, CDataStore* msg) { diff --git a/src/net/connection/NetClient.hpp b/src/net/connection/NetClient.hpp index 7564e33..7785d59 100644 --- a/src/net/connection/NetClient.hpp +++ b/src/net/connection/NetClient.hpp @@ -41,12 +41,16 @@ class NETEVENTQUEUE { NETEVENTQUEUE(NetClient* client) : m_client(client) {}; + ~NETEVENTQUEUE(); void AddEvent(EVENTID eventId, void* conn, NetClient* client, const void* data, uint32_t bytes); void Poll(); + void Clear(); }; class NetClient : public WowConnectionResponse { public: + static void LogStats(); + // Virtual member functions virtual void WCMessageReady(WowConnection* conn, uint32_t timeStamp, CDataStore* msg); virtual void WCConnected(WowConnection* conn, WowConnection* inbound, uint32_t timeStamp, const NETCONNADDR* addr); @@ -57,19 +61,23 @@ class NetClient : public WowConnectionResponse { virtual int32_t HandleConnect(); virtual int32_t HandleDisconnect(); virtual int32_t HandleCantConnect(); + virtual int32_t ValidateMessageId(uint32_t msgId); // Member functions void AddRef(); void AuthChallengeHandler(WowConnection* conn, CDataStore* msg); void Connect(const char* addrStr); + void Disconnect(); int32_t ConnectInternal(const char* host, uint16_t port); void DelRef(); void EnableEncryption(WowConnection* conn, uint8_t* seed, uint8_t seedLen); bool GetDelete(); const LoginData& GetLoginData(); NETSTATE GetState(); + void Ping(); void HandleIdle(); int32_t Initialize(); + void Destroy(); void PollEventQueue(); void PongHandler(WowConnection* conn, CDataStore* msg); void ProcessMessage(uint32_t timeReceived, CDataStore* msg, int32_t a4); @@ -77,9 +85,14 @@ class NetClient : public WowConnectionResponse { void SetDelete(); void SetLoginData(LoginData* loginData); void SetMessageHandler(NETMESSAGE msgId, MESSAGE_HANDLER handler, void* param); + void DisplayNetworkStats(); + void GetNetStats(float& bandwidthIn, float& bandwidthOut, uint32_t& latency); + void PushObjMgr(); + void PopObjMgr(); private: // Static variables + static CLIENT_NETSTATS s_stats; static int32_t s_clientCount; // Member variables diff --git a/src/net/connection/RealmConnection.cpp b/src/net/connection/RealmConnection.cpp index 1a24ca4..1133592 100644 --- a/src/net/connection/RealmConnection.cpp +++ b/src/net/connection/RealmConnection.cpp @@ -1,5 +1,6 @@ #include "net/connection/RealmConnection.hpp" #include "net/connection/RealmResponse.hpp" +#include "net/connection/ClientConnection.hpp" #include "net/Types.hpp" #include #include @@ -29,7 +30,7 @@ int32_t RealmConnection::MessageHandler(void* param, NETMESSAGE msgId, uint32_t } case SMSG_DELETE_CHAR: { - // TODO + result = connection->HandleCharacterDelete(msgId, time, msg); break; } @@ -271,6 +272,13 @@ int32_t RealmConnection::HandleCharEnum(uint32_t msgId, uint32_t time, CDataStor return 1; } +int32_t RealmConnection::HandleCharacterDelete(uint32_t msgId, uint32_t time, CDataStore* msg) { + uint8_t result; + msg->Get(result); + static_cast(this)->Complete(1, result); + return 1; +} + void RealmConnection::SetSelectedRealm(uint32_t a2, uint32_t a3, uint32_t a4) { // TODO } diff --git a/src/net/connection/RealmConnection.hpp b/src/net/connection/RealmConnection.hpp index 211060e..03ebaf7 100644 --- a/src/net/connection/RealmConnection.hpp +++ b/src/net/connection/RealmConnection.hpp @@ -41,6 +41,7 @@ class RealmConnection : public NetClient { RealmConnection(RealmResponse* realmResponse); int32_t HandleAuthResponse(uint32_t msgId, uint32_t time, CDataStore* msg); int32_t HandleCharEnum(uint32_t msgId, uint32_t time, CDataStore* msg); + int32_t HandleCharacterDelete(uint32_t msgId, uint32_t time, CDataStore* msg); void SetSelectedRealm(uint32_t a2, uint32_t a3, uint32_t a4); void RequestCharacterEnum(); void RequestCharacterLogin(uint64_t id); diff --git a/src/net/connection/WowConnection.cpp b/src/net/connection/WowConnection.cpp index 54d5df2..d2f12dc 100644 --- a/src/net/connection/WowConnection.cpp +++ b/src/net/connection/WowConnection.cpp @@ -341,8 +341,7 @@ void WowConnection::DoDisconnect() { this->m_lock.Leave(); if (this->m_response && this->m_sock >= 0) { - // TODO - // this->m_response->Vfunc4(this, OsGetAsyncTimeMsPrecise()); + this->m_response->WCDisconnected(this, OsGetAsyncTimeMsPrecise(), &this->m_peer); } this->m_lock.Enter(); @@ -670,6 +669,27 @@ void WowConnection::Init(WowConnectionResponse* response, void (*func)(void)) { this->m_type = WOWC_TYPE_MESSAGES; } +void WowConnection::SetResponse(WowConnectionResponse* response, bool a3) { + while (1) { + this->m_responseLock.Enter(); + if (!this->m_responseRef || this->m_responseRefThread == SGetCurrentThreadId()) + break; + + if (a3) { + // this->off_53 = response; + this->m_responseLock.Leave(); + return; + } + + this->m_responseLock.Leave(); + OsSleep(50u); + } + + this->m_response = response; + // this->off_53 = nullptr; + this->m_responseLock.Leave(); +} + WowConnection::SENDNODE* WowConnection::NewSendNode(void* data, int32_t size, bool raw) { // TODO counters @@ -694,8 +714,7 @@ void WowConnection::Release() { if (WowConnection::s_network) { WowConnection::s_network->Delete(this); } else { - // TODO SMemFree - delete this; + DEL(this); } } } diff --git a/src/net/connection/WowConnection.hpp b/src/net/connection/WowConnection.hpp index 0433dfb..132535a 100644 --- a/src/net/connection/WowConnection.hpp +++ b/src/net/connection/WowConnection.hpp @@ -99,6 +99,7 @@ class WowConnection { void FreeSendNode(SENDNODE* sn); WOW_CONN_STATE GetState(); void Init(WowConnectionResponse* response, void (*func)(void)); + void SetResponse(WowConnectionResponse* response, bool a3); SENDNODE* NewSendNode(void* data, int32_t size, bool raw); void Release(); void ReleaseResponseRef(); diff --git a/src/net/connection/WowConnectionNet.cpp b/src/net/connection/WowConnectionNet.cpp index 2971ad1..04bab31 100644 --- a/src/net/connection/WowConnectionNet.cpp +++ b/src/net/connection/WowConnectionNet.cpp @@ -34,7 +34,7 @@ void WowConnectionNet::Delete(WowConnection* connection) { this->m_connectionsLock.Enter(); if (connection->m_refCount == 0) { - delete connection; + DEL(connection); } this->m_connectionsLock.Leave(); diff --git a/src/net/grunt/ClientResponse.hpp b/src/net/grunt/ClientResponse.hpp index d5e604a..0d87bb9 100644 --- a/src/net/grunt/ClientResponse.hpp +++ b/src/net/grunt/ClientResponse.hpp @@ -20,6 +20,7 @@ class Grunt::ClientResponse { virtual void RealmListResult(CDataStore* msg) = 0; virtual LOGIN_STATE NextSecurityState(LOGIN_STATE state) = 0; virtual int32_t GetServerId() = 0; + virtual void Reconnect() = 0; virtual void GetRealmList() = 0; virtual void Logon(const char* a2, const char* a3) = 0; virtual void ProveVersion(const uint8_t* versionChecksum) = 0; diff --git a/src/net/login/GruntLogin.cpp b/src/net/login/GruntLogin.cpp index b0b843e..b0f2956 100644 --- a/src/net/login/GruntLogin.cpp +++ b/src/net/login/GruntLogin.cpp @@ -88,6 +88,10 @@ int32_t GruntLogin::GetServerId() { return 0; } +void GruntLogin::Reconnect() { + // TODO +} + void GruntLogin::GetVersionProof(const uint8_t* versionChallenge) { if (this->IsReconnect()) { // TODO @@ -113,7 +117,9 @@ void GruntLogin::Init(LoginResponse* loginResponse) { } void GruntLogin::Logoff() { - // TODO + if (this->m_loggedOn) { + this->m_clientLink->Disconnect(); + } } void GruntLogin::Logon(const char* a2, const char* a3) { diff --git a/src/net/login/GruntLogin.hpp b/src/net/login/GruntLogin.hpp index d8c33c5..0e59a4b 100644 --- a/src/net/login/GruntLogin.hpp +++ b/src/net/login/GruntLogin.hpp @@ -22,6 +22,7 @@ class GruntLogin : public Login { virtual void LogonResult(Grunt::Result result, const uint8_t* sessionKey, uint32_t sessionKeyLen, uint16_t flags); virtual LOGIN_STATE NextSecurityState(LOGIN_STATE state); virtual int32_t GetServerId(); + virtual void Reconnect(); virtual void GetRealmList(); virtual void Logon(const char* a2, const char* a3); virtual void ProveVersion(const uint8_t* versionChecksum); diff --git a/src/net/login/Login.cpp b/src/net/login/Login.cpp index ed5e38a..1bde9a9 100644 --- a/src/net/login/Login.cpp +++ b/src/net/login/Login.cpp @@ -13,6 +13,10 @@ bool Login::IsReconnect() { return this->m_reconnect; } +bool Login::IsLoggedOn() { + return this->m_loggedOn; +} + bool Login::OnlineIdle() { // TODO diff --git a/src/net/login/Login.hpp b/src/net/login/Login.hpp index f5f9228..e105ace 100644 --- a/src/net/login/Login.hpp +++ b/src/net/login/Login.hpp @@ -22,6 +22,7 @@ class Login : public Grunt::ClientResponse { virtual bool OnlineIdle(); virtual void RealmListResult(CDataStore* msg); virtual bool IsReconnect(); + virtual bool IsLoggedOn(); // Member functions void SetLogonCreds(const char* accountName, const char* password); diff --git a/src/net/login/LoginResponse.cpp b/src/net/login/LoginResponse.cpp index cc6251b..46556cc 100644 --- a/src/net/login/LoginResponse.cpp +++ b/src/net/login/LoginResponse.cpp @@ -72,7 +72,62 @@ void LoginResponse::HandleRealmData(uint32_t a2, CDataStore* msg) { realm.flags |= 0x80; } - // TODO name manipulation + if (realm.name[0] == '\0') { + continue; + } + + int32_t j = 0; + while (realm.name[j]) { + switch (realm.name[j]) { + case '"': + case '*': + case '/': + case ':': + case '<': + case '>': + case '?': + case '\\': + case '|': { + realm.name[j] = ' '; + break; + } + + default: { + break; + } + } + ++j; + } + + while (j > 0) { + bool stop = false; + switch (realm.name[j - 1]) { + case ' ': + case '"': + case '*': + case '.': + case '/': + case ':': + case '<': + case '>': + case '?': + case '\\': + case '|': { + --j; + break; + } + + default: { + stop = true; + break; + } + } + if (stop) { + break; + } + } + + realm.name[j] = '\0'; } msg->Get(reinterpret_cast(this->uint10)); diff --git a/src/ui/CSimpleFontString.cpp b/src/ui/CSimpleFontString.cpp index 525185e..5d58631 100644 --- a/src/ui/CSimpleFontString.cpp +++ b/src/ui/CSimpleFontString.cpp @@ -234,7 +234,7 @@ float CSimpleFontString::GetHeight() { float v9 = v2 == 0.0f ? this->GetStringHeight() : v2; float v3 = 1.0f / (CoordinateGetAspectCompensation() * 1024.0f); - float v4 = NDCToDDCWidth(v3); + float v4 = NDCToDDCHeight(v3); return v9 <= v4 ? v4 : v9; } @@ -876,9 +876,17 @@ void CSimpleFontString::UpdateString() { uint32_t styleFlags = this->m_styleFlags; if (!(this->m_styleFlags & 0x400)) { - // TODO - - styleFlags |= 0x400; + // Set FixedColor flag if the text does not contain color tags + bool found = false; + for (size_t i = 0; displayText && displayText[i]; ++i) { + if (displayText[i] == '|' && (displayText[i + 1] == 'C' || displayText[i + 1] == 'c')) { + found = true; + break; + } + } + if (!found) { + styleFlags |= 0x400u; + } } CImVector color = { 0xFF, 0xFF, 0xFF, 0xFF }; diff --git a/src/ui/ScriptFunctionsCharCreate.cpp b/src/ui/ScriptFunctionsCharCreate.cpp index b1b869e..2f49eb6 100644 --- a/src/ui/ScriptFunctionsCharCreate.cpp +++ b/src/ui/ScriptFunctionsCharCreate.cpp @@ -2,6 +2,9 @@ #include "ui/Types.hpp" #include "util/Lua.hpp" #include "util/Unimplemented.hpp" +#include "db/Db.hpp" +#include "clientobject/Unit_C.hpp" +#include "glue/CCharacterCreation.hpp" #include int32_t Script_SetCharCustomizeFrame(lua_State* L) { @@ -17,7 +20,19 @@ int32_t Script_ResetCharCustomize(lua_State* L) { } int32_t Script_GetNameForRace(lua_State* L) { - WHOA_UNIMPLEMENTED(0); + auto raceID = CCharacterCreation::m_character.m_characterInfo.raceID; + auto sexID = CCharacterCreation::m_character.m_characterInfo.sexID; + auto record = g_chrRacesDB.GetRecord(raceID); + auto raceName = CGUnit_C::GetDisplayRaceNameFromRecord(record, sexID); + if (record && raceName) { + lua_pushstring(L, raceName); + lua_pushstring(L, record->m_clientFileString); + } else { + lua_pushnil(L); + lua_pushnil(L); + } + + return 2; } int32_t Script_GetFactionForRace(lua_State* L) { diff --git a/src/ui/ScriptFunctionsCharSelect.cpp b/src/ui/ScriptFunctionsCharSelect.cpp index 51d464f..a97d67a 100644 --- a/src/ui/ScriptFunctionsCharSelect.cpp +++ b/src/ui/ScriptFunctionsCharSelect.cpp @@ -19,7 +19,7 @@ int32_t Script_SetCharSelectModelFrame(lua_State* L) { auto frame = CScriptObject::GetScriptObjectByName(name, type); if (frame) { - CCharacterSelection::s_modelFrame = static_cast(frame); + CCharacterSelection::m_modelFrame = static_cast(frame); } return 0; @@ -54,8 +54,8 @@ int32_t Script_GetCharacterInfo(lua_State* L) { luaL_error(L, "Usage: GetCharacterInfo(index)"); } - int index = static_cast(lua_tonumber(L, 1)) - 1; - if (index < 0 || index > CCharacterSelection::GetNumCharacters()) { + int32_t index = static_cast(lua_tonumber(L, 1)) - 1; + if (index < 0 || index >= CCharacterSelection::GetNumCharacters()) { lua_pushnil(L); // name lua_pushnil(L); // race lua_pushnil(L); // class @@ -75,16 +75,14 @@ int32_t Script_GetCharacterInfo(lua_State* L) { auto raceName = CGUnit_C::GetDisplayRaceNameFromRecord(g_chrRacesDB.GetRecord(character.raceID), character.sexID); lua_pushstring(L, raceName ? raceName : ""); - // TODO: auto className = CGUnit_C::GetDisplayClassNameFromRecord(g_chrClassesDB.GetRecord(character.classID), character.sexID); - auto className = "Warrior"; + auto className = CGUnit_C::GetDisplayClassNameFromRecord(g_chrClassesDB.GetRecord(character.classID), character.sexID); lua_pushstring(L, className ? className : ""); lua_pushnumber(L, character.experienceLevel); - // TODO: auto areaRecord = g_areaTableDB.GetRecord(character.zoneID); - void* areaRecord = nullptr; + auto areaRecord = g_areaTableDB.GetRecord(character.zoneID); if (areaRecord) { - // TODO: lua_pushstring(L, areaRecord->name) + lua_pushstring(L, areaRecord->m_areaName); } else { lua_pushnil(L); } @@ -108,11 +106,31 @@ int32_t Script_GetCharacterInfo(lua_State* L) { } int32_t Script_SelectCharacter(lua_State* L) { - WHOA_UNIMPLEMENTED(0); + if (!lua_isnumber(L, 1)) { + luaL_error(L, "Usage: SelectCharacter(index)"); + } + + int32_t index = static_cast(lua_tonumber(L, 1)) - 1; + if (index < 1 || index >= CCharacterSelection::GetNumCharacters()) { + index = 0; + } + + CCharacterSelection::m_selectionIndex = index; + CCharacterSelection::ShowCharacter(); + FrameScript_SignalEvent(8u, "%d", CCharacterSelection::m_selectionIndex + 1); + return 0; } int32_t Script_DeleteCharacter(lua_State* L) { - WHOA_UNIMPLEMENTED(0); + if (!lua_isnumber(L, 1)) { + luaL_error(L, "Usage: DeleteCharacter(index)"); + } + + int32_t index = static_cast(lua_tonumber(L, 1)) - 1; + if (index >= 0 && index < CCharacterSelection::GetNumCharacters()) { + CGlueMgr::DeleteCharacter(CCharacterSelection::s_characterList[index].m_characterInfo.guid); + } + return 0; } int32_t Script_RenameCharacter(lua_State* L) { @@ -131,7 +149,7 @@ int32_t Script_UpdateSelectionCustomizationScene(lua_State* L) { int32_t Script_GetCharacterSelectFacing(lua_State* L) { // Radian to Degree - lua_pushnumber(L, CCharacterSelection::s_charFacing * 57.29578f); + lua_pushnumber(L, CCharacterSelection::m_charFacing * 57.29578f); return 1; } diff --git a/src/ui/ScriptFunctionsGlueScriptEvents.cpp b/src/ui/ScriptFunctionsGlueScriptEvents.cpp index a3f5220..7ba0834 100644 --- a/src/ui/ScriptFunctionsGlueScriptEvents.cpp +++ b/src/ui/ScriptFunctionsGlueScriptEvents.cpp @@ -520,7 +520,8 @@ int32_t Script_RequestRealmSplitInfo(lua_State* L) { } int32_t Script_CancelLogin(lua_State* L) { - WHOA_UNIMPLEMENTED(0); + CGlueMgr::CancelLogin(); + return 0; } int32_t Script_GetCVar(lua_State* L) { diff --git a/src/ui/ScriptFunctionsRealmList.cpp b/src/ui/ScriptFunctionsRealmList.cpp index 202de5d..7e283e6 100644 --- a/src/ui/ScriptFunctionsRealmList.cpp +++ b/src/ui/ScriptFunctionsRealmList.cpp @@ -11,7 +11,8 @@ #include int32_t Script_RequestRealmList(lua_State* L) { - WHOA_UNIMPLEMENTED(0); + CGlueMgr::GetRealmList(StringToBOOL(L, 1, 0)); + return 0; } int32_t Script_RealmListUpdateRate(lua_State* L) { diff --git a/vendor/CMakeLists.txt b/vendor/CMakeLists.txt index 7abc28c..1325202 100644 --- a/vendor/CMakeLists.txt +++ b/vendor/CMakeLists.txt @@ -9,7 +9,7 @@ endif () if (WHOA_BUILD_GLSDL) set(SDL_SHARED OFF) set(SDL_STATIC ON) - add_subdirectory(sdl-2.30.5) + add_subdirectory(sdl-3.2.10) set(glew-cmake_BUILD_SHARED OFF) set(glew-cmake_BUILD_STATIC ON)