Batch #16619 by ragnarok-clanker: forced by an admin (1 lower score(s), 13 changed function(s)); checked with 460 compiled unit(s), including every includer of Source/Client/Mode/CGameMode.h, Source/Contents/Achievement/AchievementMgr.h, Source/Contents/Actors/ActorNameCard.h, Source/Contents/Actors/GameActor.h, Source/Contents/Actors/GndRiser.h, Source/Contents/Actors/GroundScope.h, Source/Contents/Actors/Item.h, Source/Contents/Actors/PlayerNameDictionary.h, Source/Contents/Actors/Resources/EquipmentResourceMgr.h, Source/Contents/AdventureGuide/AdventureGuideMgr.h, Source/Contents/CashEmotion/CashEmotionMgr.h, Source/Contents/Clan/ClanInfo.h, Source/Contents/CombatTypes.h, Source/Contents/Configuration/ConfigMgr.h, Source/Contents/Effects/Core/CellRangeEffect.h, Source/Contents/Effects/Core/ChangeSizeEffect.h, Source/Contents/Effects/Core/DummyEffectLauncher.h, Source/Contents/Effects/Core/Effect.h, Source/Contents/Effects/Core/EffectActor.h, Source/Contents/Effects/Core/EffectLists.h, Source/Contents/Effects/Core/EffectMaker.h, Source/Contents/Effects/Core/EffectMemoryMgr.h, Source/Contents/Effects/Core/EffectMessageId.h, Source/Contents/Effects/Core/EffectPoint.h, Source/Contents/Effects/Core/EffectPrimId.h, Source/Contents/Effects/Core/EffectTypes.h, Source/Contents/Effects/Core/MsgEffect.h, Source/Contents/Effects/Core/RagEffect.h, Source/Contents/Effects/Core/RagEffectState.h, Source/Contents/Effects/Core/ShowEffect.h, Source/Contents/Effects/Core/SquareRangeEffect.h, Source/Contents/Effects/EffectResourceSwitcher.h, Source/Contents/Effects/Particles/AnimatedEmitterEffect.h, Source/Contents/Effects/Particles/CharacterParticleBundle.h, Source/Contents/Effects/Particles/EZ2STREffect.h, Source/Contents/Effects/Particles/EZ2STREffectEx.h, Source/Contents/Effects/Particles/EffectEmitter.h, Source/Contents/Effects/Particles/EmitterEffect.h, Source/Contents/Effects/Particles/Particle.h, Source/Contents/Effects/Particles/ParticlePool.h, Source/Contents/Effects/Particles/SpriteEffect.h, Source/Contents/Effects/Particles/SpriteParticle.h, Source/Contents/Effects/Primitives/EffectPrim.h, Source/Contents/Effects/Primitives/EffectPrimitiveMotion.h, Source/Contents/Effects/Primitives/EffectPrimitiveState.h, Source/Contents/Effects/RDamageVar.h, Source/Contents/Effects/Skills/AMachineEffect.h, Source/Contents/Effects/Skills/AcidifiedThrow.h, Source/Contents/Effects/Skills/ArrowEffect.h, Source/Contents/Effects/Skills/AstralStrikeEffect.h, Source/Contents/Effects/Skills/AxeBoomerang.h, Source/Contents/Effects/Skills/Bash.h, Source/Contents/Effects/Skills/BezierArcThrowEffect.h, Source/Contents/Effects/Skills/BindTrapEffect.h, Source/Contents/Effects/Skills/BlastForge.h, Source/Contents/Effects/Skills/CaneOfEvilEyeEffect.h, Source/Contents/Effects/Skills/CartCannon.h, Source/Contents/Effects/Skills/ChargingPierceEffect.h, Source/Contents/Effects/Skills/CherryBlossomEffect.h, Source/Contents/Effects/Skills/ClimaxEffect.h, Source/Contents/Effects/Skills/CloudEffect.h, Source/Contents/Effects/Skills/CloudKillEffect.h, Source/Contents/Effects/Skills/CommonFloorEffect.h, Source/Contents/Effects/Skills/Competentia.h, Source/Contents/Effects/Skills/CresciveBolt.h, Source/Contents/Effects/Skills/ElectricEffect.h, Source/Contents/Effects/Skills/EnergyOrbEffect.h, Source/Contents/Effects/Skills/EvilLandEffect.h, Source/Contents/Effects/Skills/EvilsPawEffect.h, Source/Contents/Effects/Skills/FlowerCastingEffect.h, Source/Contents/Effects/Skills/FortuneKissEffect.h, Source/Contents/Effects/Skills/FriggSongEffect.h, Source/Contents/Effects/Skills/FuumaShouakuEffect.h, Source/Contents/Effects/Skills/GlassWallEffect.h, Source/Contents/Effects/Skills/GravityControlEffect.h, Source/Contents/Effects/Skills/HealEffect.h, Source/Contents/Effects/Skills/HealSpEffect.h, Source/Contents/Effects/Skills/HitLineEffect.h, Source/Contents/Effects/Skills/JupitelThunderStormEffect.h, Source/Contents/Effects/Skills/Level150Effect.h, Source/Contents/Effects/Skills/Level99Effect.h, Source/Contents/Effects/Skills/Level99Orb1Effect.h, Source/Contents/Effects/Skills/Level99Orb2Effect.h, Source/Contents/Effects/Skills/LightSphereEffect.h, Source/Contents/Effects/Skills/MagicFloorEffect.h, Source/Contents/Effects/Skills/MagnumBreak.h, Source/Contents/Effects/Skills/MandraAttackEffect.h, Source/Contents/Effects/Skills/MapChainEffect.h, Source/Contents/Effects/Skills/MapMagicZoneEffect.h, Source/Contents/Effects/Skills/MappillarEffect.h, Source/Contents/Effects/Skills/MonsterSkillEffects.h, Source/Contents/Effects/Skills/NyanggrassEffect.h, Source/Contents/Effects/Skills/PartyMemberEffects.h, Source/Contents/Effects/Skills/PokJukEffect.h, Source/Contents/Effects/Skills/PowderingEffect.h, Source/Contents/Effects/Skills/RainbowEffect.h, Source/Contents/Effects/Skills/RectUpEffect.h, Source/Contents/Effects/Skills/RedLineEffect.h, Source/Contents/Effects/Skills/RichManKim.h, Source/Contents/Effects/Skills/RotateBgEffect.h, Source/Contents/Effects/Skills/RotateItemEffect.h, Source/Contents/Effects/Skills/RotateLineEffect.h, Source/Contents/Effects/Skills/SaintCastingEffect.h, Source/Contents/Effects/Skills/ScatterEffect.h, Source/Contents/Effects/Skills/ShadowExceedEffect.h, Source/Contents/Effects/Skills/SkillEffects.h, Source/Contents/Effects/Skills/SmokeEffect.h, Source/Contents/Effects/Skills/SoulCollectEffect.h, Source/Contents/Effects/Skills/SoulUnityEffect.h, Source/Contents/Effects/Skills/SphereWind2Effect.h, Source/Contents/Effects/Skills/SphereWindEffect.h, Source/Contents/Effects/Skills/StarEffect.h, Source/Contents/Effects/Skills/StarEmperorEffect.h, Source/Contents/Effects/Skills/StealEffect.h, Source/Contents/Effects/Skills/StormCannonEffect.h, Source/Contents/Effects/Skills/StormGustEffect.h, Source/Contents/Effects/Skills/StormKickEffect.h, Source/Contents/Effects/Skills/SunStanceEffect.h, Source/Contents/Effects/Skills/TalismanMarkEffect.h, Source/Contents/Effects/Skills/TetraBallEffect.h, Source/Contents/Effects/Skills/ThrowEffects.h, Source/Contents/Effects/Skills/TriangleShotArrow.h, Source/Contents/Effects/Skills/ViolentQuakeEffect.h, Source/Contents/Effects/Skills/WhirlwindEffect.h, Source/Contents/Effects/Skills/WindEffect.h, Source/Contents/EntryQueue/EntryQueueMgr.h, Source/Contents/Events/CheckAttendanceMgr.h, Source/Contents/Events/RouletteMgr.h, Source/Contents/Events/ShowRankingScheduler.h, Source/Contents/Events/SpecialPopupMgr.h, Source/Contents/Guild/GuildInfo.h, Source/Contents/Guild/GuildMgr.h, Source/Contents/Guild/GuildTip.h, Source/Contents/Items/ClientItemLists.h, Source/Contents/Items/EnchantMgr.h, Source/Contents/Items/ItemDBToIDMgr.h, Source/Contents/Items/JobCodeForItem.h, Source/Contents/Map/FlyingShipRouteInfo.h, Source/Contents/Map/MapInfoMgr.h, Source/Contents/Map/MapPropertyMgr.h, Source/Contents/Map/MapSkyMgr.h, Source/Contents/Map/PrivateAirplaneMgr.h, Source/Contents/Map/TownInfoMgr.h, Source/Contents/Monster/ChampionMonsterMgr.h, Source/Contents/Movement/MovementRouteInterpolation.h, Source/Contents/Movement/TerrainPathSearch.h, Source/Contents/Navigation/NavigationManager.h, Source/Contents/Pet/PetEnums.h, Source/Contents/Pet/PetEvolutionMgr.h, Source/Contents/Quest/RenewQuestMgr.h, Source/Contents/Repute/ReputeMgr.h, Source/Contents/Repute/ReputeRecords.h, Source/Contents/Rodex/RodexMailStore.h, Source/Contents/RuneSystem/RuneSystem.h, Source/Contents/Skills/GraffiSkill.h, Source/Contents/Skin/SkinMgr.h, Source/Contents/Sprites/SpriteLayerDrawing.h, Source/Contents/Sprites/SpriteLayerOrder.h, Source/Contents/Sprites/SpriteRidingOffset.h, Source/Contents/Sprites/SpriteRidingPolicy.h, Source/Contents/Tables/ForbiddenWords.h, Source/Contents/Tables/MessageTable.h, Source/Contents/Tables/SimpleStringMgr.h, Source/Contents/Tables/TableMng.h, Source/Contents/Tables/TipBoxTitles.h, Source/Contents/Tables/TipOfTheDay.h, Source/Contents/Time/ServerTimeManager.h, Source/Contents/World/WorldViewData.h, Source/UI/Guild/UIGuildWnd.h, Source/UI/Lists/UIScrollBarVariants.h, Source/UI/Rodex/UIRodexInboxWnd.h, Source/UI/RuneSystem/UIRuneSystemWindows.h, Source/UI/RuneSystem/UIRuneSystemWnd.h, Source/UI/Text/UIAchWnd.h, Source/UI/UIReputeWnd.h, Source/UI/Window/UINewMakeCharWnd.h, Source/UI/Window/UIRoMapWnd.h, Source/Utility/JsonCppLoader.h, Source/Contents/AchievementMgr.h, Source/Contents/ActorNameCard.h, Source/Contents/Actors/GraffiSkill.h, Source/Contents/Actors/PetEnums.h, Source/Contents/AdventureGuideMgr.h, Source/Contents/CashEmotionMgr.h, Source/Contents/ChampionMonsterMgr.h, Source/Contents/CheckAttendanceMgr.h, Source/Contents/ClanInfo.h, Source/Contents/ClientItemLists.h, Source/Contents/Combat/CombatTypes.h, Source/Contents/ConfigMgr.h, Source/Contents/EffectResourceSwitcher.h, Source/Contents/Effects/AMachineEffect.h, Source/Contents/Effects/AcidifiedThrow.h, Source/Contents/Effects/AnimatedEmitterEffect.h, Source/Contents/Effects/ArrowEffect.h, Source/Contents/Effects/AstralStrikeEffect.h, Source/Contents/Effects/AxeBoomerang.h, Source/Contents/Effects/Bash.h, Source/Contents/Effects/BezierArcThrowEffect.h, Source/Contents/Effects/BindTrapEffect.h, Source/Contents/Effects/BlastForge.h, Source/Contents/Effects/CaneOfEvilEyeEffect.h, Source/Contents/Effects/CartCannon.h, Source/Contents/Effects/CellRangeEffect.h, Source/Contents/Effects/ChangeSizeEffect.h, Source/Contents/Effects/CharacterParticleBundle.h, Source/Contents/Effects/ChargingPierceEffect.h, Source/Contents/Effects/CherryBlossomEffect.h, Source/Contents/Effects/ClimaxEffect.h, Source/Contents/Effects/CloudEffect.h, Source/Contents/Effects/CloudKillEffect.h, Source/Contents/Effects/CommonFloorEffect.h, Source/Contents/Effects/Competentia.h, Source/Contents/Effects/CresciveBolt.h, Source/Contents/Effects/DummyEffectLauncher.h, Source/Contents/Effects/EZ2STREffect.h, Source/Contents/Effects/EZ2STREffectEx.h, Source/Contents/Effects/Effect.h, Source/Contents/Effects/EffectActor.h, Source/Contents/Effects/EffectEmitter.h, Source/Contents/Effects/EffectLists.h, Source/Contents/Effects/EffectMaker.h, Source/Contents/Effects/EffectMemoryMgr.h, Source/Contents/Effects/EffectMessageId.h, Source/Contents/Effects/EffectPoint.h, Source/Contents/Effects/EffectPrim.h, Source/Contents/Effects/EffectPrimId.h, Source/Contents/Effects/EffectPrimitiveMotion.h, Source/Contents/Effects/EffectPrimitiveState.h, Source/Contents/Effects/EffectTypes.h, Source/Contents/Effects/ElectricEffect.h, Source/Contents/Effects/EmitterEffect.h, Source/Contents/Effects/EnergyOrbEffect.h, Source/Contents/Effects/EvilLandEffect.h, Source/Contents/Effects/EvilsPawEffect.h, Source/Contents/Effects/FlowerCastingEffect.h, Source/Contents/Effects/FortuneKissEffect.h, Source/Contents/Effects/FriggSongEffect.h, Source/Contents/Effects/FuumaShouakuEffect.h, Source/Contents/Effects/GlassWallEffect.h, Source/Contents/Effects/GravityControlEffect.h, Source/Contents/Effects/HealEffect.h, Source/Contents/Effects/HealSpEffect.h, Source/Contents/Effects/HitLineEffect.h, Source/Contents/Effects/JupitelThunderStormEffect.h, Source/Contents/Effects/Level150Effect.h, Source/Contents/Effects/Level99Effect.h, Source/Contents/Effects/Level99Orb1Effect.h, Source/Contents/Effects/Level99Orb2Effect.h, Source/Contents/Effects/LightSphereEffect.h, Source/Contents/Effects/MagicFloorEffect.h, Source/Contents/Effects/MagnumBreak.h, Source/Contents/Effects/MandraAttackEffect.h, Source/Contents/Effects/MapChainEffect.h, Source/Contents/Effects/MapMagicZoneEffect.h, Source/Contents/Effects/MappillarEffect.h, Source/Contents/Effects/MonsterSkillEffects.h, Source/Contents/Effects/MsgEffect.h, Source/Contents/Effects/NyanggrassEffect.h, Source/Contents/Effects/Particle.h, Source/Contents/Effects/ParticlePool.h, Source/Contents/Effects/PartyMemberEffects.h, Source/Contents/Effects/PokJukEffect.h, Source/Contents/Effects/PowderingEffect.h, Source/Contents/Effects/RagEffect.h, Source/Contents/Effects/RagEffectState.h, Source/Contents/Effects/RainbowEffect.h, Source/Contents/Effects/RectUpEffect.h, Source/Contents/Effects/RedLineEffect.h, Source/Contents/Effects/RichManKim.h, Source/Contents/Effects/RotateBgEffect.h, Source/Contents/Effects/RotateItemEffect.h, Source/Contents/Effects/RotateLineEffect.h, Source/Contents/Effects/SaintCastingEffect.h, Source/Contents/Effects/ScatterEffect.h, Source/Contents/Effects/ShadowExceedEffect.h, Source/Contents/Effects/ShowEffect.h, Source/Contents/Effects/SkillEffects.h, Source/Contents/Effects/SmokeEffect.h, Source/Contents/Effects/SoulCollectEffect.h, Source/Contents/Effects/SoulUnityEffect.h, Source/Contents/Effects/SphereWind2Effect.h, Source/Contents/Effects/SphereWindEffect.h, Source/Contents/Effects/SpriteEffect.h, Source/Contents/Effects/SpriteParticle.h, Source/Contents/Effects/SquareRangeEffect.h, Source/Contents/Effects/StarEffect.h, Source/Contents/Effects/StarEmperorEffect.h, Source/Contents/Effects/StealEffect.h, Source/Contents/Effects/StormCannonEffect.h, Source/Contents/Effects/StormGustEffect.h, Source/Contents/Effects/StormKickEffect.h, Source/Contents/Effects/SunStanceEffect.h, Source/Contents/Effects/TalismanMarkEffect.h, Source/Contents/Effects/TetraBallEffect.h, Source/Contents/Effects/ThrowEffects.h, Source/Contents/Effects/TriangleShotArrow.h, Source/Contents/Effects/ViolentQuakeEffect.h, Source/Contents/Effects/WhirlwindEffect.h, Source/Contents/Effects/WindEffect.h, Source/Contents/EnchantMgr.h, Source/Contents/EntryQueueMgr.h, Source/Contents/EquipmentResourceMgr.h, Source/Contents/FlyingShipRouteInfo.h, Source/Contents/ForbiddenWords.h, Source/Contents/GuildInfo.h, Source/Contents/GuildMgr.h, Source/Contents/GuildTip.h, Source/Contents/ItemDBToIDMgr.h, Source/Contents/Items/RuneSystem.h, Source/Contents/JobCodeForItem.h, Source/Contents/MapInfoMgr.h, Source/Contents/MapPropertyMgr.h, Source/Contents/MapSkyMgr.h, Source/Contents/MessageTable.h, Source/Contents/MovementRouteInterpolation.h, Source/Contents/NavigationManager.h, Source/Contents/PetEvolutionMgr.h, Source/Contents/PlayerNameDictionary.h, Source/Contents/PrivateAirplaneMgr.h, Source/Contents/RDamageVar.h, Source/Contents/RenewQuestMgr.h, Source/Contents/ReputeMgr.h, Source/Contents/ReputeRecords.h, Source/Contents/RodexMailStore.h, Source/Contents/RouletteMgr.h, Source/Contents/ServerTimeManager.h, Source/Contents/ShowRankingScheduler.h, Source/Contents/SimpleStringMgr.h, Source/Contents/SkinMgr.h, Source/Contents/SpecialPopupMgr.h, Source/Contents/SpriteLayerDrawing.h, Source/Contents/SpriteLayerOrder.h, Source/Contents/SpriteRidingOffset.h, Source/Contents/SpriteRidingPolicy.h, Source/Contents/TableMng.h, Source/Contents/TerrainPathSearch.h, Source/Contents/TipBoxTitles.h, Source/Contents/TipOfTheDay.h, Source/Contents/TownInfoMgr.h, Source/Contents/WorldView/WorldViewData.h. Adds to the build: Source/Contents/Achievement/AchievementMgr.cpp, Source/Contents/Actors/ActorGeometry.cpp, Source/Contents/Actors/ActorNameCache.cpp, Source/Contents/Actors/ActorNameCard.cpp, Source/Contents/Actors/ActorNameDirectory.cpp, Source/Contents/Actors/ActorNameRequests.cpp, Source/Contents/Actors/PlayerNameDictionary.cpp, Source/Contents/Actors/Resources/BodyResources.cpp, Source/Contents/Actors/Resources/EquipmentResources.cpp, Source/Contents/Actors/Resources/HeadResources.cpp, Source/Contents/Actors/Resources/MonsterResources.cpp, Source/Contents/Actors/Resources/RobeResources.cpp, Source/Contents/Actors/Resources/StatusIconImages.cpp, Source/Contents/AdventureGuide/AdventureGuideMgr.cpp, Source/Contents/CashEmotion/CashEmotionMgr.cpp, Source/Contents/Clan/ClanInfo.cpp, Source/Contents/Configuration/ConfigMgr.cpp, Source/Contents/Effects/Core/CellRangeEffect.cpp, Source/Contents/Effects/Core/ChangeSizeEffect.cpp, Source/Contents/Effects/Core/DummyEffectLauncher.cpp, Source/Contents/Effects/Core/Effect.cpp, Source/Contents/Effects/Core/EffectActor.cpp, Source/Contents/Effects/Core/EffectAttachments.cpp, Source/Contents/Effects/Core/EffectForceRender.cpp, Source/Contents/Effects/Core/EffectLists.cpp, Source/Contents/Effects/Core/EffectMaker.cpp, Source/Contents/Effects/Core/EffectMemoryMgr.cpp, Source/Contents/Effects/Core/EffectTypes.cpp, Source/Contents/Effects/Core/EffectVisibility.cpp, Source/Contents/Effects/Core/MsgEffect.cpp, Source/Contents/Effects/Core/RagEffect.cpp, Source/Contents/Effects/Core/RagEffectInitialization.cpp, Source/Contents/Effects/Core/ShowEffect.cpp, Source/Contents/Effects/Core/SquareRangeEffect.cpp, Source/Contents/Effects/EffectResourceSwitcher.cpp, Source/Contents/Effects/Particles/AnimatedEmitterEffect.cpp, Source/Contents/Effects/Particles/CharacterParticleBundle.cpp, Source/Contents/Effects/Particles/EZ2STREffect.cpp, Source/Contents/Effects/Particles/EZ2STREffectEx.cpp, Source/Contents/Effects/Particles/EmitterEffect.cpp, Source/Contents/Effects/Particles/Particle.cpp, Source/Contents/Effects/Particles/ParticlePool.cpp, Source/Contents/Effects/Particles/SpriteEffect.cpp, Source/Contents/Effects/Particles/SpriteParticle.cpp, Source/Contents/Effects/Primitives/EffectPrim.cpp, Source/Contents/Effects/Primitives/EffectPrimitiveArcs.cpp, Source/Contents/Effects/Primitives/EffectPrimitiveColor.cpp, Source/Contents/Effects/Primitives/EffectPrimitiveGlowSquares.cpp, Source/Contents/Effects/Primitives/EffectPrimitiveMotion.cpp, Source/Contents/Effects/Primitives/EffectPrimitivePanels.cpp, Source/Contents/Effects/Primitives/EffectPrimitiveRecords.cpp, Source/Contents/Effects/Primitives/EffectPrimitiveRendering.cpp, Source/Contents/Effects/Primitives/EffectPrimitiveSprites.cpp, Source/Contents/Effects/Primitives/EffectPrimitiveState.cpp, Source/Contents/Effects/Primitives/EffectPrimitiveSweeps.cpp, Source/Contents/Effects/RDamageVar.cpp, Source/Contents/Effects/Skills/AMachineEffect.cpp, Source/Contents/Effects/Skills/AcidifiedThrow.cpp, Source/Contents/Effects/Skills/ArrowEffect.cpp, Source/Contents/Effects/Skills/AstralStrikeEffect.cpp, Source/Contents/Effects/Skills/AxeBoomerang.cpp, Source/Contents/Effects/Skills/Bash.cpp, Source/Contents/Effects/Skills/BezierArcThrowEffect.cpp, Source/Contents/Effects/Skills/BindTrapEffect.cpp, Source/Contents/Effects/Skills/BlastForge.cpp, Source/Contents/Effects/Skills/CaneOfEvilEyeEffect.cpp, Source/Contents/Effects/Skills/CartCannon.cpp, Source/Contents/Effects/Skills/ChargingPierceEffect.cpp, Source/Contents/Effects/Skills/CherryBlossomEffect.cpp, Source/Contents/Effects/Skills/ClimaxEffect.cpp, Source/Contents/Effects/Skills/CloudEffect.cpp, Source/Contents/Effects/Skills/CloudKillEffect.cpp, Source/Contents/Effects/Skills/CommonFloorEffect.cpp, Source/Contents/Effects/Skills/Competentia.cpp, Source/Contents/Effects/Skills/CresciveBolt.cpp, Source/Contents/Effects/Skills/ElectricEffect.cpp, Source/Contents/Effects/Skills/EnergyOrbEffect.cpp, Source/Contents/Effects/Skills/EvilLandEffect.cpp, Source/Contents/Effects/Skills/EvilsPawEffect.cpp, Source/Contents/Effects/Skills/FlowerCastingEffect.cpp, Source/Contents/Effects/Skills/FortuneKissEffect.cpp, Source/Contents/Effects/Skills/FriggSongEffect.cpp, Source/Contents/Effects/Skills/FuumaShouakuEffect.cpp, Source/Contents/Effects/Skills/GlassWallEffect.cpp, Source/Contents/Effects/Skills/HealEffect.cpp, Source/Contents/Effects/Skills/HealSpEffect.cpp, Source/Contents/Effects/Skills/HitLineEffect.cpp, Source/Contents/Effects/Skills/JupitelThunderStormEffect.cpp, Source/Contents/Effects/Skills/Level150Effect.cpp, Source/Contents/Effects/Skills/Level99Effect.cpp, Source/Contents/Effects/Skills/Level99Orb1Effect.cpp, Source/Contents/Effects/Skills/Level99Orb2Effect.cpp, Source/Contents/Effects/Skills/LightSphereEffect.cpp, Source/Contents/Effects/Skills/MagicFloorEffect.cpp, Source/Contents/Effects/Skills/MagnumBreak.cpp, Source/Contents/Effects/Skills/MandraAttackEffect.cpp, Source/Contents/Effects/Skills/MapChainEffect.cpp, Source/Contents/Effects/Skills/MapMagicZoneEffect.cpp, Source/Contents/Effects/Skills/MappillarEffect.cpp, Source/Contents/Effects/Skills/MeteorEffect.cpp, Source/Contents/Effects/Skills/MonsterSkillEffects.cpp, Source/Contents/Effects/Skills/NyanggrassEffect.cpp, Source/Contents/Effects/Skills/PartyMemberEffects.cpp, Source/Contents/Effects/Skills/PokJukEffect.cpp, Source/Contents/Effects/Skills/PowderingEffect.cpp, Source/Contents/Effects/Skills/RainbowEffect.cpp, Source/Contents/Effects/Skills/RectUpEffect.cpp, Source/Contents/Effects/Skills/RedLineEffect.cpp, Source/Contents/Effects/Skills/RichManKim.cpp, Source/Contents/Effects/Skills/RotateBgEffect.cpp, Source/Contents/Effects/Skills/RotateItemEffect.cpp, Source/Contents/Effects/Skills/RotateLineEffect.cpp, Source/Contents/Effects/Skills/SaintCastingEffect.cpp, Source/Contents/Effects/Skills/ScatterEffect.cpp, Source/Contents/Effects/Skills/ShadowExceedEffect.cpp, Source/Contents/Effects/Skills/ShadowExceedNewEffect.cpp, Source/Contents/Effects/Skills/SmokeEffect.cpp, Source/Contents/Effects/Skills/SoulCollectEffect.cpp, Source/Contents/Effects/Skills/SoulUnityEffect.cpp, Source/Contents/Effects/Skills/SphereWind2Effect.cpp, Source/Contents/Effects/Skills/SphereWindEffect.cpp, Source/Contents/Effects/Skills/StarEffect.cpp, Source/Contents/Effects/Skills/StarEmperorEffect.cpp, Source/Contents/Effects/Skills/StealEffect.cpp, Source/Contents/Effects/Skills/StormCannonEffect.cpp, Source/Contents/Effects/Skills/StormGustEffect.cpp, Source/Contents/Effects/Skills/StormKickEffect.cpp, Source/Contents/Effects/Skills/SunStanceEffect.cpp, Source/Contents/Effects/Skills/TalismanMarkEffect.cpp, Source/Contents/Effects/Skills/TetraBallEffect.cpp, Source/Contents/Effects/Skills/ThrowEffects.cpp, Source/Contents/Effects/Skills/TriangleShotArrow.cpp, Source/Contents/Effects/Skills/ViolentQuakeEffect.cpp, Source/Contents/Effects/Skills/WindEffect.cpp, Source/Contents/Emblems/EmblemCacheRaw.cpp, Source/Contents/Emblems/GuildEmblemLookup.cpp, Source/Contents/Emblems/GuildEmblemState.cpp, Source/Contents/EntryQueue/EntryQueueMgr.cpp, Source/Contents/Events/CheckAttendanceMgr.cpp, Source/Contents/Events/RouletteMgr.cpp, Source/Contents/Events/ShowRankingScheduler.cpp, Source/Contents/Events/SpecialPopupMgr.cpp, Source/Contents/Guild/GuildInfo.cpp, Source/Contents/Guild/GuildMgr.cpp, Source/Contents/Guild/GuildTip.cpp, Source/Contents/Items/ClientItemLists.cpp, Source/Contents/Items/EnchantMgr.cpp, Source/Contents/Items/ItemDBToIDMgr.cpp, Source/Contents/Items/JobCodeForItem.cpp, Source/Contents/Map/FlyingShipRouteInfo.cpp, Source/Contents/Map/MapInfoMgr.cpp, Source/Contents/Map/MapNameTable.cpp, Source/Contents/Map/MapPropertyMgr.cpp, Source/Contents/Map/MapSkyMgr.cpp, Source/Contents/Map/PrivateAirplaneMgr.cpp, Source/Contents/Map/TownInfoMgr.cpp, Source/Contents/Models/ModelKeyframes.cpp, Source/Contents/Monster/ChampionMonsterMgr.cpp, Source/Contents/Monster/EnemyMonsterTalk.cpp, Source/Contents/Monster/MonsterSpeech.cpp, Source/Contents/Monster/MonsterXmlActions.cpp, Source/Contents/Movement/ActorMovementRoute.cpp, Source/Contents/Movement/MovementRoute.cpp, Source/Contents/Movement/MovementRouteInterpolation.cpp, Source/Contents/Movement/MovementTraversal.cpp, Source/Contents/Movement/Pathfinding.cpp, Source/Contents/Movement/TerrainPathSearch.cpp, Source/Contents/Navigation/NavigationCandidates.cpp, Source/Contents/Navigation/NavigationDestinations.cpp, Source/Contents/Navigation/NavigationGraph.cpp, Source/Contents/Navigation/NavigationLink.cpp, Source/Contents/Navigation/NavigationRequest.cpp, Source/Contents/Navigation/NavigationRoute.cpp, Source/Contents/Navigation/NavigationSource.cpp, Source/Contents/Navigation/NpcLocationRadius.cpp, Source/Contents/Navigation/WorldNavigation.cpp, Source/Contents/Pet/PetEvolutionMgr.cpp, Source/Contents/Pet/PetStatus.cpp, Source/Contents/Pet/PetStrings.cpp, Source/Contents/Pet/PetTalk.cpp, Source/Contents/Pet/PetTalkNames.cpp, Source/Contents/Quest/RenewQuestMgr.cpp, Source/Contents/Repute/ReputeMgr.cpp, Source/Contents/Rodex/RodexMailStore.cpp, Source/Contents/RuneSystem/RuneSystem.cpp, Source/Contents/Skills/GraffiSkill.cpp, Source/Contents/Skin/SkinCatalog.cpp, Source/Contents/Skin/SkinInfo.cpp, Source/Contents/Skin/SkinMgr.cpp, Source/Contents/Sound/HitSounds.cpp, Source/Contents/Sprites/RobeOpacity.cpp, Source/Contents/Sprites/RobeTopLayer.cpp, Source/Contents/Sprites/SpriteFrameSynchronization.cpp, Source/Contents/Sprites/SpriteJob.cpp, Source/Contents/Sprites/SpriteLayerDepth.cpp, Source/Contents/Sprites/SpriteLayerDrawing.cpp, Source/Contents/Sprites/SpriteLayerOrder.cpp, Source/Contents/Sprites/SpriteRidingOffset.cpp, Source/Contents/Sprites/SpriteRidingPolicy.cpp, Source/Contents/Sprites/SpriteRobe.cpp, Source/Contents/Sprites/SpriteRobeCommands.cpp, Source/Contents/Sprites/SpriteShadow.cpp, Source/Contents/Tables/ClientXmlTables.cpp, Source/Contents/Tables/ForbiddenWords.cpp, Source/Contents/Tables/MessageTable.cpp, Source/Contents/Tables/SimpleStringMgr.cpp, Source/Contents/Tables/TableMng.cpp, Source/Contents/Tables/TipBoxTitles.cpp, Source/Contents/Tables/TipOfTheDay.cpp, Source/Contents/Time/ClientTiming.cpp, Source/Contents/Time/ServerTimeManager.cpp, Source/Contents/World/WorldViewData.cpp Deletes: Source/Contents/AchievementMgr.cpp, Source/Contents/AchievementMgr.h, Source/Contents/ActorGeometry.cpp, Source/Contents/ActorMovementRoute.cpp, Source/Contents/ActorNameCache.cpp, Source/Contents/ActorNameCard.cpp, Source/Contents/ActorNameCard.h, Source/Contents/ActorNameDirectory.cpp, Source/Contents/ActorNameRequests.cpp, Source/Contents/Actors/GraffiSkill.cpp, Source/Contents/Actors/GraffiSkill.h, Source/Contents/Actors/PetEnums.h, Source/Contents/AdventureGuideMgr.cpp, Source/Contents/AdventureGuideMgr.h, Source/Contents/BodyResources.cpp, Source/Contents/CashEmotionMgr.cpp, Source/Contents/CashEmotionMgr.h, Source/Contents/ChampionMonsterMgr.cpp, Source/Contents/ChampionMonsterMgr.h, Source/Contents/CheckAttendanceMgr.cpp, Source/Contents/CheckAttendanceMgr.h, Source/Contents/ClanInfo.cpp, Source/Contents/ClanInfo.h, Source/Contents/ClientItemLists.cpp, Source/Contents/ClientItemLists.h, Source/Contents/ClientTiming.cpp, Source/Contents/ClientXmlTables.cpp, Source/Contents/Combat/CombatTypes.h, Source/Contents/ConfigMgr.cpp, Source/Contents/ConfigMgr.h, Source/Contents/EffectResourceSwitcher.cpp, Source/Contents/EffectResourceSwitcher.h, Source/Contents/Effects/AMachineEffect.cpp, Source/Contents/Effects/AMachineEffect.h, Source/Contents/Effects/AcidifiedThrow.cpp, Source/Contents/Effects/AcidifiedThrow.h, Source/Contents/Effects/AnimatedEmitterEffect.cpp, Source/Contents/Effects/AnimatedEmitterEffect.h, Source/Contents/Effects/ArrowEffect.cpp, Source/Contents/Effects/ArrowEffect.h, Source/Contents/Effects/AstralStrikeEffect.cpp, Source/Contents/Effects/AstralStrikeEffect.h, Source/Contents/Effects/AxeBoomerang.cpp, Source/Contents/Effects/AxeBoomerang.h, Source/Contents/Effects/Bash.cpp, Source/Contents/Effects/Bash.h, Source/Contents/Effects/BezierArcThrowEffect.cpp, Source/Contents/Effects/BezierArcThrowEffect.h, Source/Contents/Effects/BindTrapEffect.cpp, Source/Contents/Effects/BindTrapEffect.h, Source/Contents/Effects/BlastForge.cpp, Source/Contents/Effects/BlastForge.h, Source/Contents/Effects/CaneOfEvilEyeEffect.cpp, Source/Contents/Effects/CaneOfEvilEyeEffect.h, Source/Contents/Effects/CartCannon.cpp, Source/Contents/Effects/CartCannon.h, Source/Contents/Effects/CellRangeEffect.cpp, Source/Contents/Effects/CellRangeEffect.h, Source/Contents/Effects/ChangeSizeEffect.cpp, Source/Contents/Effects/ChangeSizeEffect.h, Source/Contents/Effects/CharacterParticleBundle.cpp, Source/Contents/Effects/CharacterParticleBundle.h, Source/Contents/Effects/ChargingPierceEffect.cpp, Source/Contents/Effects/ChargingPierceEffect.h, Source/Contents/Effects/CherryBlossomEffect.cpp, Source/Contents/Effects/CherryBlossomEffect.h, Source/Contents/Effects/ClimaxEffect.cpp, Source/Contents/Effects/ClimaxEffect.h, Source/Contents/Effects/CloudEffect.cpp, Source/Contents/Effects/CloudEffect.h, Source/Contents/Effects/CloudKillEffect.cpp, Source/Contents/Effects/CloudKillEffect.h, Source/Contents/Effects/CommonFloorEffect.cpp, Source/Contents/Effects/CommonFloorEffect.h, Source/Contents/Effects/Competentia.cpp, Source/Contents/Effects/Competentia.h, Source/Contents/Effects/CresciveBolt.cpp, Source/Contents/Effects/CresciveBolt.h, Source/Contents/Effects/DummyEffectLauncher.cpp, Source/Contents/Effects/DummyEffectLauncher.h, Source/Contents/Effects/EZ2STREffect.cpp, Source/Contents/Effects/EZ2STREffect.h, Source/Contents/Effects/EZ2STREffectEx.cpp, Source/Contents/Effects/EZ2STREffectEx.h, Source/Contents/Effects/Effect.cpp, Source/Contents/Effects/Effect.h, Source/Contents/Effects/EffectActor.cpp, Source/Contents/Effects/EffectActor.h, Source/Contents/Effects/EffectAttachments.cpp, Source/Contents/Effects/EffectEmitter.h, Source/Contents/Effects/EffectForceRender.cpp, Source/Contents/Effects/EffectLists.cpp, Source/Contents/Effects/EffectLists.h, Source/Contents/Effects/EffectMaker.cpp, Source/Contents/Effects/EffectMaker.h, Source/Contents/Effects/EffectMemoryMgr.cpp, Source/Contents/Effects/EffectMemoryMgr.h, Source/Contents/Effects/EffectMessageId.h, Source/Contents/Effects/EffectPoint.h, Source/Contents/Effects/EffectPrim.cpp, Source/Contents/Effects/EffectPrim.h, Source/Contents/Effects/EffectPrimId.h, Source/Contents/Effects/EffectPrimitiveArcs.cpp, Source/Contents/Effects/EffectPrimitiveColor.cpp, Source/Contents/Effects/EffectPrimitiveGlowSquares.cpp, Source/Contents/Effects/EffectPrimitiveMotion.cpp, Source/Contents/Effects/EffectPrimitiveMotion.h, Source/Contents/Effects/EffectPrimitivePanels.cpp, Source/Contents/Effects/EffectPrimitiveRecords.cpp, Source/Contents/Effects/EffectPrimitiveRendering.cpp, Source/Contents/Effects/EffectPrimitiveSprites.cpp, Source/Contents/Effects/EffectPrimitiveState.cpp, Source/Contents/Effects/EffectPrimitiveState.h, Source/Contents/Effects/EffectPrimitiveSweeps.cpp, Source/Contents/Effects/EffectTypes.cpp, Source/Contents/Effects/EffectTypes.h, Source/Contents/Effects/EffectVisibility.cpp, Source/Contents/Effects/ElectricEffect.cpp, Source/Contents/Effects/ElectricEffect.h, Source/Contents/Effects/EmitterEffect.cpp, Source/Contents/Effects/EmitterEffect.h, Source/Contents/Effects/EnergyOrbEffect.cpp, Source/Contents/Effects/EnergyOrbEffect.h, Source/Contents/Effects/EvilLandEffect.cpp, Source/Contents/Effects/EvilLandEffect.h, Source/Contents/Effects/EvilsPawEffect.cpp, Source/Contents/Effects/EvilsPawEffect.h, Source/Contents/Effects/FlowerCastingEffect.cpp, Source/Contents/Effects/FlowerCastingEffect.h, Source/Contents/Effects/FortuneKissEffect.cpp, Source/Contents/Effects/FortuneKissEffect.h, Source/Contents/Effects/FriggSongEffect.cpp, Source/Contents/Effects/FriggSongEffect.h, Source/Contents/Effects/FuumaShouakuEffect.cpp, Source/Contents/Effects/FuumaShouakuEffect.h, Source/Contents/Effects/GlassWallEffect.cpp, Source/Contents/Effects/GlassWallEffect.h, Source/Contents/Effects/GravityControlEffect.h, Source/Contents/Effects/HealEffect.cpp, Source/Contents/Effects/HealEffect.h, Source/Contents/Effects/HealSpEffect.cpp, Source/Contents/Effects/HealSpEffect.h, Source/Contents/Effects/HitLineEffect.cpp, Source/Contents/Effects/HitLineEffect.h, Source/Contents/Effects/JupitelThunderStormEffect.cpp, Source/Contents/Effects/JupitelThunderStormEffect.h, Source/Contents/Effects/Level150Effect.cpp, Source/Contents/Effects/Level150Effect.h, Source/Contents/Effects/Level99Effect.cpp, Source/Contents/Effects/Level99Effect.h, Source/Contents/Effects/Level99Orb1Effect.cpp, Source/Contents/Effects/Level99Orb1Effect.h, Source/Contents/Effects/Level99Orb2Effect.cpp, Source/Contents/Effects/Level99Orb2Effect.h, Source/Contents/Effects/LightSphereEffect.cpp, Source/Contents/Effects/LightSphereEffect.h, Source/Contents/Effects/MagicFloorEffect.cpp, Source/Contents/Effects/MagicFloorEffect.h, Source/Contents/Effects/MagnumBreak.cpp, Source/Contents/Effects/MagnumBreak.h, Source/Contents/Effects/MandraAttackEffect.cpp, Source/Contents/Effects/MandraAttackEffect.h, Source/Contents/Effects/MapChainEffect.cpp, Source/Contents/Effects/MapChainEffect.h, Source/Contents/Effects/MapMagicZoneEffect.cpp, Source/Contents/Effects/MapMagicZoneEffect.h, Source/Contents/Effects/MappillarEffect.cpp, Source/Contents/Effects/MappillarEffect.h, Source/Contents/Effects/MeteorEffect.cpp, Source/Contents/Effects/MonsterSkillEffects.cpp, Source/Contents/Effects/MonsterSkillEffects.h, Source/Contents/Effects/MsgEffect.cpp, Source/Contents/Effects/MsgEffect.h, Source/Contents/Effects/NyanggrassEffect.cpp, Source/Contents/Effects/NyanggrassEffect.h, Source/Contents/Effects/Particle.cpp, Source/Contents/Effects/Particle.h, Source/Contents/Effects/ParticlePool.cpp, Source/Contents/Effects/ParticlePool.h, Source/Contents/Effects/PartyMemberEffects.cpp, Source/Contents/Effects/PartyMemberEffects.h, Source/Contents/Effects/PokJukEffect.cpp, Source/Contents/Effects/PokJukEffect.h, Source/Contents/Effects/PowderingEffect.cpp, Source/Contents/Effects/PowderingEffect.h, Source/Contents/Effects/RagEffect.cpp, Source/Contents/Effects/RagEffect.h, Source/Contents/Effects/RagEffectInitialization.cpp, Source/Contents/Effects/RagEffectState.h, Source/Contents/Effects/RainbowEffect.cpp, Source/Contents/Effects/RainbowEffect.h, Source/Contents/Effects/RectUpEffect.cpp, Source/Contents/Effects/RectUpEffect.h, Source/Contents/Effects/RedLineEffect.cpp, Source/Contents/Effects/RedLineEffect.h, Source/Contents/Effects/RichManKim.cpp, Source/Contents/Effects/RichManKim.h, Source/Contents/Effects/RotateBgEffect.cpp, Source/Contents/Effects/RotateBgEffect.h, Source/Contents/Effects/RotateItemEffect.cpp, Source/Contents/Effects/RotateItemEffect.h, Source/Contents/Effects/RotateLineEffect.cpp, Source/Contents/Effects/RotateLineEffect.h, Source/Contents/Effects/SaintCastingEffect.cpp, Source/Contents/Effects/SaintCastingEffect.h, Source/Contents/Effects/ScatterEffect.cpp, Source/Contents/Effects/ScatterEffect.h, Source/Contents/Effects/ShadowExceedEffect.cpp, Source/Contents/Effects/ShadowExceedEffect.h, Source/Contents/Effects/ShadowExceedNewEffect.cpp, Source/Contents/Effects/ShowEffect.cpp, Source/Contents/Effects/ShowEffect.h, Source/Contents/Effects/SkillEffects.h, Source/Contents/Effects/SmokeEffect.cpp, Source/Contents/Effects/SmokeEffect.h, Source/Contents/Effects/SoulCollectEffect.cpp, Source/Contents/Effects/SoulCollectEffect.h, Source/Contents/Effects/SoulUnityEffect.cpp, Source/Contents/Effects/SoulUnityEffect.h, Source/Contents/Effects/SphereWind2Effect.cpp, Source/Contents/Effects/SphereWind2Effect.h, Source/Contents/Effects/SphereWindEffect.cpp, Source/Contents/Effects/SphereWindEffect.h, Source/Contents/Effects/SpriteEffect.cpp, Source/Contents/Effects/SpriteEffect.h, Source/Contents/Effects/SpriteParticle.cpp, Source/Contents/Effects/SpriteParticle.h, Source/Contents/Effects/SquareRangeEffect.cpp, Source/Contents/Effects/SquareRangeEffect.h, Source/Contents/Effects/StarEffect.cpp, Source/Contents/Effects/StarEffect.h, Source/Contents/Effects/StarEmperorEffect.cpp, Source/Contents/Effects/StarEmperorEffect.h, Source/Contents/Effects/StealEffect.cpp, Source/Contents/Effects/StealEffect.h, Source/Contents/Effects/StormCannonEffect.cpp, Source/Contents/Effects/StormCannonEffect.h, Source/Contents/Effects/StormGustEffect.cpp, Source/Contents/Effects/StormGustEffect.h, Source/Contents/Effects/StormKickEffect.cpp, Source/Contents/Effects/StormKickEffect.h, Source/Contents/Effects/SunStanceEffect.cpp, Source/Contents/Effects/SunStanceEffect.h, Source/Contents/Effects/TalismanMarkEffect.cpp, Source/Contents/Effects/TalismanMarkEffect.h, Source/Contents/Effects/TetraBallEffect.cpp, Source/Contents/Effects/TetraBallEffect.h, Source/Contents/Effects/ThrowEffects.cpp, Source/Contents/Effects/ThrowEffects.h, Source/Contents/Effects/TriangleShotArrow.cpp, Source/Contents/Effects/TriangleShotArrow.h, Source/Contents/Effects/ViolentQuakeEffect.cpp, Source/Contents/Effects/ViolentQuakeEffect.h, Source/Contents/Effects/WhirlwindEffect.h, Source/Contents/Effects/WindEffect.cpp, Source/Contents/Effects/WindEffect.h, Source/Contents/EmblemCacheRaw.cpp, Source/Contents/EnchantMgr.cpp, Source/Contents/EnchantMgr.h, Source/Contents/EnemyMonsterTalk.cpp, Source/Contents/EntryQueueMgr.cpp, Source/Contents/EntryQueueMgr.h, Source/Contents/EquipmentResourceMgr.h, Source/Contents/EquipmentResources.cpp, Source/Contents/FlyingShipRouteInfo.cpp, Source/Contents/FlyingShipRouteInfo.h, Source/Contents/ForbiddenWords.cpp, Source/Contents/ForbiddenWords.h, Source/Contents/GuildEmblemLookup.cpp, Source/Contents/GuildEmblemState.cpp, Source/Contents/GuildInfo.cpp, Source/Contents/GuildInfo.h, Source/Contents/GuildMgr.cpp, Source/Contents/GuildMgr.h, Source/Contents/GuildTip.cpp, Source/Contents/GuildTip.h, Source/Contents/HeadResources.cpp, Source/Contents/HitSounds.cpp, Source/Contents/ItemDBToIDMgr.cpp, Source/Contents/ItemDBToIDMgr.h, Source/Contents/Items/RuneSystem.cpp, Source/Contents/Items/RuneSystem.h, Source/Contents/JobCodeForItem.cpp, Source/Contents/JobCodeForItem.h, Source/Contents/MapInfoMgr.cpp, Source/Contents/MapInfoMgr.h, Source/Contents/MapNameTable.cpp, Source/Contents/MapPropertyMgr.cpp, Source/Contents/MapPropertyMgr.h, Source/Contents/MapSkyMgr.cpp, Source/Contents/MapSkyMgr.h, Source/Contents/MessageTable.cpp, Source/Contents/MessageTable.h, Source/Contents/ModelKeyframes.cpp, Source/Contents/MonsterResources.cpp, Source/Contents/MonsterSpeech.cpp, Source/Contents/MonsterXmlActions.cpp, Source/Contents/MovementRoute.cpp, Source/Contents/MovementRouteInterpolation.cpp, Source/Contents/MovementRouteInterpolation.h, Source/Contents/MovementTraversal.cpp, Source/Contents/NavigationCandidates.cpp, Source/Contents/NavigationDestinations.cpp, Source/Contents/NavigationGraph.cpp, Source/Contents/NavigationLink.cpp, Source/Contents/NavigationManager.h, Source/Contents/NavigationRequest.cpp, Source/Contents/NavigationRoute.cpp, Source/Contents/NavigationSource.cpp, Source/Contents/NpcLocationRadius.cpp, Source/Contents/Pathfinding.cpp, Source/Contents/PetEvolutionMgr.cpp, Source/Contents/PetEvolutionMgr.h, Source/Contents/PetStatus.cpp, Source/Contents/PetStrings.cpp, Source/Contents/PetTalk.cpp, Source/Contents/PetTalkNames.cpp, Source/Contents/PlayerNameDictionary.cpp, Source/Contents/PlayerNameDictionary.h, Source/Contents/PrivateAirplaneMgr.cpp, Source/Contents/PrivateAirplaneMgr.h, Source/Contents/RDamageVar.cpp, Source/Contents/RDamageVar.h, Source/Contents/RenewQuestMgr.cpp, Source/Contents/RenewQuestMgr.h, Source/Contents/ReputeMgr.cpp, Source/Contents/ReputeMgr.h, Source/Contents/ReputeRecords.h, Source/Contents/RobeOpacity.cpp, Source/Contents/RobeResources.cpp, Source/Contents/RobeTopLayer.cpp, Source/Contents/RodexMailStore.cpp, Source/Contents/RodexMailStore.h, Source/Contents/RouletteMgr.cpp, Source/Contents/RouletteMgr.h, Source/Contents/ServerTimeManager.cpp, Source/Contents/ServerTimeManager.h, Source/Contents/ShowRankingScheduler.cpp, Source/Contents/ShowRankingScheduler.h, Source/Contents/SimpleStringMgr.cpp, Source/Contents/SimpleStringMgr.h, Source/Contents/SkinCatalog.cpp, Source/Contents/SkinInfo.cpp, Source/Contents/SkinMgr.cpp, Source/Contents/SkinMgr.h, Source/Contents/SpecialPopupMgr.cpp, Source/Contents/SpecialPopupMgr.h, Source/Contents/SpriteFrameSynchronization.cpp, Source/Contents/SpriteJob.cpp, Source/Contents/SpriteLayerDepth.cpp, Source/Contents/SpriteLayerDrawing.cpp, Source/Contents/SpriteLayerDrawing.h, Source/Contents/SpriteLayerOrder.cpp, Source/Contents/SpriteLayerOrder.h, Source/Contents/SpriteRidingOffset.cpp, Source/Contents/SpriteRidingOffset.h, Source/Contents/SpriteRidingPolicy.cpp, Source/Contents/SpriteRidingPolicy.h, Source/Contents/SpriteRobe.cpp, Source/Contents/SpriteRobeCommands.cpp, Source/Contents/SpriteShadow.cpp, Source/Contents/StatusIconImages.cpp, Source/Contents/TableMng.cpp, Source/Contents/TableMng.h, Source/Contents/TerrainPathSearch.cpp, Source/Contents/TerrainPathSearch.h, Source/Contents/TipBoxTitles.cpp, Source/Contents/TipBoxTitles.h, Source/Contents/TipOfTheDay.cpp, Source/Contents/TipOfTheDay.h, Source/Contents/TownInfoMgr.cpp, Source/Contents/TownInfoMgr.h, Source/Contents/WorldNavigation.cpp, Source/Contents/WorldView/WorldViewData.cpp, Source/Contents/WorldView/WorldViewData.h
952 lines
33 KiB
C++
952 lines
33 KiB
C++
#include "Contents/Actors/Skill.h"
|
|
#include "Contents/Actors/ActorEnums.h"
|
|
#include "Contents/Skills/SkillId.h"
|
|
#include "Contents/Skills/SkillUnitId.h"
|
|
|
|
#include "ActorPickNode.h"
|
|
#include "Contents/Skills/GraffiSkill.h"
|
|
|
|
#include "Client/Mode/CGameMode.h"
|
|
#include "Client/Mode/ModeMgr.h"
|
|
#include "Client/Session.h"
|
|
#include "Contents/Actors/Pc.h"
|
|
#include "Contents/Effects/Skills/CaneOfEvilEyeEffect.h"
|
|
#include "Contents/Effects/Particles/EZ2STREffect.h"
|
|
#include "Contents/Effects/Core/Effect.h"
|
|
#include "Contents/Effects/Core/EffectLists.h"
|
|
#include "Contents/Effects/Core/EffectTypes.h"
|
|
#include "Contents/Effects/Core/RagEffect.h"
|
|
#include "Contents/Ground/TerrainHeight.h"
|
|
#include "Contents/Models/ModelActor.h"
|
|
#include "Contents/Skills/SkillInfo.h"
|
|
#include "Contents/Sound/SoundMgr.h"
|
|
#include "Contents/World/World.h"
|
|
#include "Resource/Models/ModelResource.h"
|
|
#include "Resource/ResourceMgr.h"
|
|
#include "Render/Renderer.h"
|
|
#include "Render/SpriteGeometry.h"
|
|
#include "Resource/World/TerrainResource.h"
|
|
#include "UI/Text/UITransBalloonText.h"
|
|
#include "UI/Window/UIWindowMgr.h"
|
|
|
|
#include <cstring>
|
|
#include <cstdlib>
|
|
#include <new>
|
|
#include <windows.h>
|
|
#include <timeapi.h>
|
|
|
|
struct SkillHitMessage {
|
|
/* 0000 */ int skillId;
|
|
/* 0004 */ int damage;
|
|
/* 0008 */ int action;
|
|
/* 000C */ std::uint32_t targetAid;
|
|
/* 0010 */ int startTime;
|
|
/* 0014 */ int monsterValue;
|
|
/* 0018 */ int hitCount;
|
|
/* 001C */ int cellX;
|
|
/* 0020 */ int cellY;
|
|
/* 0024 */ int attackMotionTime;
|
|
/* 0028 */ int motionSpeed;
|
|
};
|
|
|
|
struct SkillUnitMessage {
|
|
/* 0000 */ std::uint32_t aid;
|
|
/* 0004 */ std::uint32_t owner;
|
|
/* 0008 */ int type;
|
|
/* 000C */ int x;
|
|
/* 0010 */ int y;
|
|
/* 0014 */ unsigned char visible;
|
|
/* 0018 */ int range;
|
|
/* 001C */ int level;
|
|
/* 0020 */ std::uint32_t characterId;
|
|
};
|
|
|
|
#if defined(_WIN32) && !defined(_WIN64)
|
|
static_assert(sizeof(SkillHitMessage) == 0x2C);
|
|
static_assert(sizeof(SkillUnitMessage) == 0x24);
|
|
#endif
|
|
|
|
// OFFSET: 0x00E4A350
|
|
// FUNCTION: fn_24252
|
|
CGraffiSkill::CGraffiSkill() : CSkill(0) {
|
|
}
|
|
|
|
// OFFSET: 0x00E4A6D0
|
|
// FUNCTION: fn_24256
|
|
CSkill::CSkill(std::uint32_t aid) {
|
|
this->skillAid = aid;
|
|
this->SetActorJob(0x7E);
|
|
this->m_effectTimer = 0x8CA0;
|
|
this->render.visibilityOptions[1] = 0;
|
|
this->render.enabled = 0;
|
|
this->actorWindows[0] = 0;
|
|
this->m_model = nullptr;
|
|
this->m_effect = nullptr;
|
|
this->sourceActorId = 0;
|
|
this->range = 0;
|
|
this->m_hasEffect = false;
|
|
this->m_targets.clear();
|
|
}
|
|
|
|
// OFFSET: 0x00E4AA30
|
|
// FUNCTION: fn_24259
|
|
CSkill::~CSkill() {
|
|
if (this->actorWindows[0] != 0) {
|
|
g_windowMgr.Schedule(reinterpret_cast<UIWindow*>(this->actorWindows[0]));
|
|
this->actorWindows[0] = 0;
|
|
}
|
|
|
|
this->ReleaseModel();
|
|
for (std::vector<std::uint64_t>::iterator it = this->m_targets.begin(); it != this->m_targets.end(); ++it) {
|
|
std::uint64_t target = *it;
|
|
static_cast<CGameMode*>(g_modeMgr.GetGameMode())->scene->SendObjectMessage(this, target, 24, 0, 0, 0, 0);
|
|
}
|
|
|
|
this->m_targets.clear();
|
|
}
|
|
|
|
// OFFSET: 0x00E4B400
|
|
// FUNCTION: fn_24268
|
|
const char* CSkill::GetTrapModelName() {
|
|
switch (this->GetEffectiveJob(-1)) {
|
|
case UNT_BLASTMINE:
|
|
case UNT_REVERBERATION:
|
|
case UNT_NETHERWORLD:
|
|
case UNT_WALLOFTHORN:
|
|
return "외부소품\\트랩03_3.rsm";
|
|
case UNT_SKIDTRAP:
|
|
return "외부소품\\트랩02.rsm";
|
|
case UNT_THORNS_TRAP:
|
|
return "event\\3차트랩_가시01.rsm";
|
|
case UNT_LANDMINE:
|
|
return "외부소품\\트랩03.rsm";
|
|
case UNT_SHOCKWAVE:
|
|
return "외부소품\\트랩03_6.rsm";
|
|
case UNT_SANDMAN:
|
|
return "외부소품\\트랩03_4.rsm";
|
|
case UNT_FLASHER:
|
|
return "외부소품\\트랩03_5.rsm";
|
|
case UNT_FREEZINGTRAP:
|
|
return "외부소품\\트랩03_2.rsm";
|
|
case UNT_CLAYMORETRAP:
|
|
return "외부소품\\트랩04.rsm";
|
|
case UNT_TALKIEBOX:
|
|
return "외부소품\\트랩05.rsm";
|
|
case UNT_ANKLESNARE:
|
|
case UNT_EARTHSTRAIN:
|
|
return "외부소품\\트랩01.rsm";
|
|
case UNT_MAGENTATRAP:
|
|
return "event\\3차트랩_변화01.rsm";
|
|
case UNT_COBALTTRAP:
|
|
return "event\\3차트랩_변수01.rsm";
|
|
case UNT_MAIZETRAP:
|
|
return "event\\3차트랩_변지01.rsm";
|
|
case UNT_VERDURETRAP:
|
|
return "event\\3차트랩_변풍01.rsm";
|
|
case UNT_FIRINGTRAP:
|
|
return "event\\3차트랩_화01.rsm";
|
|
case UNT_ICEBOUNDTRAP:
|
|
return "event\\3차트랩_수01.rsm";
|
|
case UNT_ELECTRICSHOCKER:
|
|
return "event\\3차트랩_풍01.rsm";
|
|
case UNT_CLUSTERBOMB:
|
|
return "event\\3차트랩_지01.rsm";
|
|
case UNT_DEEPBLINDTRAP:
|
|
return "effect\\deepblindtrap\\deep_trap.rsm2";
|
|
case UNT_SOLIDTRAP:
|
|
return "effect\\solidtrap\\sol_trap.rsm2";
|
|
case UNT_SWIFTTRAP:
|
|
return "effect\\swifttrap\\swi_trap.rsm2";
|
|
case UNT_FLAMETRAP:
|
|
return "effect\\flametrap\\fla_trap.rsm2";
|
|
default:
|
|
return nullptr;
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00E4B580
|
|
// FUNCTION: fn_24269
|
|
void CSkill::ReleaseModel() {
|
|
if (this->m_model == nullptr) {
|
|
return;
|
|
}
|
|
|
|
CGameMode* mode = static_cast<CGameMode*>(g_modeMgr.GetGameMode());
|
|
WorldSpatialTree* spatial = &mode->scene->spatial;
|
|
if (spatial != nullptr) {
|
|
spatial->RemoveModel(this->m_model, 0);
|
|
}
|
|
|
|
delete this->m_model;
|
|
this->m_model = nullptr;
|
|
if (this->m_effect != nullptr) {
|
|
this->m_effect->SendMsg(nullptr, AM_MASTER_DEAD, 0, 0, 0, 0, 0, 0);
|
|
}
|
|
|
|
this->m_effect = nullptr;
|
|
if (this->m_hasEffect) {
|
|
g_effectMgr->Find(this->skillAid, this->m_effectId)->RetireIfInactive();
|
|
this->m_hasEffect = false;
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00E503F0
|
|
// FUNCTION: fn_24294
|
|
void CSkill::Render(int argument) {
|
|
if (this->render.enabled) {
|
|
float x;
|
|
float y;
|
|
float reciprocalDepth;
|
|
g_renderer->ProjectViewport(&this->render.position.x, reinterpret_cast<const float*>(argument), &x, &y, &reciprocalDepth);
|
|
CRenderer* renderer = g_renderer;
|
|
float scale = renderer->ScaleDistance(reciprocalDepth);
|
|
scale /= g_heightScale;
|
|
this->render.distanceScale = scale;
|
|
|
|
float bounds[5];
|
|
bounds[0] = x - (renderer->viewport.uiScaleX + renderer->viewport.uiScaleX) * scale;
|
|
bounds[1] = y - (renderer->viewport.uiScaleY + renderer->viewport.uiScaleY) * scale;
|
|
bounds[2] = (renderer->viewport.uiScaleX + renderer->viewport.uiScaleX) * scale + x;
|
|
bounds[3] = y;
|
|
bounds[4] = reciprocalDepth;
|
|
this->SetRenderInfo(bounds, x, y);
|
|
} else {
|
|
this->UpdateTlvertex(reinterpret_cast<const float*>(argument));
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00E4B690
|
|
// FUNCTION: fn_24271
|
|
void CSkill::LaunchGroundEffects(int effectId, int, int duration) {
|
|
if (g_effectMgr->HasAllocator(effectId)) {
|
|
g_effectMgr->Spawn(this->render.accountId, effectId, 0.0f, 0.0f, 0.0f, 0, -1, 1, 0);
|
|
}
|
|
|
|
unsigned interval = EffectLifetime(effectId) - 20;
|
|
if (duration > 0) {
|
|
interval = duration - 20;
|
|
}
|
|
if (this->m_effectTimer < interval) {
|
|
return;
|
|
}
|
|
|
|
this->m_effectTimer = 0;
|
|
const int range = this->range < 0 ? 0 : this->range;
|
|
for (int column = -range; column <= range; ++column) {
|
|
for (int row = -range; row <= range; ++row) {
|
|
const float x = static_cast<float>(column * 6) + this->render.position.x + static_cast<float>(rand() % 11) * 0.2f - 1.0f;
|
|
const float z = static_cast<float>(row * 6) + this->render.position.z + static_cast<float>(rand() % 11) * 0.2f - 1.0f;
|
|
float y = static_cast<CGameMode*>(g_modeMgr.GetGameMode())->scene->terrain->Height(x, z);
|
|
if (effectId == 0x3BF || effectId == 0x3CF) {
|
|
y += 20.0f;
|
|
}
|
|
y -= static_cast<float>(rand() % 11) * 0.4f;
|
|
|
|
vector3d position;
|
|
position.x = x;
|
|
position.y = y;
|
|
position.z = z;
|
|
static_cast<CGameMode*>(g_modeMgr.GetGameMode())->LaunchDummyEffect(&position, effectId, interval + 20, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00E55100
|
|
// FUNCTION: fn_24303
|
|
void CSkill::SetRenderInfo(const float* box, float x, float y) {
|
|
if (this->render.visibilityOptions[1] != 0) {
|
|
// GLOBAL: gl_25171
|
|
static int minimum = static_cast<int>(g_renderer->UiScaleX() * 34.0f);
|
|
ActorPickInfo* info = new ActorPickInfo;
|
|
info->left = box[0] < box[2] ? box[0] : box[2];
|
|
info->top = box[1];
|
|
info->depth = box[4] + 350.0f;
|
|
info->right = box[0] > box[2] ? box[0] : box[2];
|
|
info->bottom = box[3];
|
|
info->depthOffset = box[4] + 350.0f;
|
|
info->accountId = this->skillAid;
|
|
info->job = this->GetEffectiveJob(-1);
|
|
info->healthState = 0;
|
|
info->kind = 2;
|
|
|
|
const int width = static_cast<int>(info->right - info->left);
|
|
if (width < minimum) {
|
|
const float pad = static_cast<float>((minimum - width) / 2);
|
|
info->right += pad;
|
|
info->left -= pad;
|
|
}
|
|
|
|
const int height = static_cast<int>(info->bottom - info->top);
|
|
if (height < minimum) {
|
|
const float pad = static_cast<float>((minimum - height) / 2);
|
|
info->bottom += pad;
|
|
info->top -= pad;
|
|
}
|
|
|
|
g_actorPickNode.AddPickInfo(info);
|
|
}
|
|
|
|
this->SetTlvert(x, y);
|
|
}
|
|
|
|
// OFFSET: 0x00E55320
|
|
// FUNCTION: fn_24304
|
|
void CSkill::ShowModel(const char* modelName) {
|
|
if (modelName == nullptr || this->render.enabled == 0) {
|
|
return;
|
|
}
|
|
|
|
this->ReleaseModel();
|
|
const float diffuse[3] = {0.5f, 0.7f, 0.5f};
|
|
const float white[3] = {1.0f, 1.0f, 1.0f};
|
|
const float ambient[3] = {0.5f, 0.5f, 0.5f};
|
|
auto* resource = static_cast<C3dModelRes*>(ResourceMgr::Instance().Load(modelName));
|
|
if (resource->major == 1) {
|
|
this->m_model = new C3dActorV1;
|
|
} else if (resource->major == 2) {
|
|
this->m_model = new C3dActorV2;
|
|
}
|
|
|
|
this->m_model->CopyVolumes(resource->volumes);
|
|
this->m_model->SetSpeed(1.0f);
|
|
const vector3d position = this->render.position;
|
|
this->m_model->position[0] = position.x;
|
|
this->m_model->position[1] = position.y;
|
|
this->m_model->position[2] = position.z;
|
|
this->m_model->dirty = 1;
|
|
this->m_model->Assign(*resource);
|
|
this->m_model->Animate(3.0);
|
|
this->m_model->occlusionEnabled = 0;
|
|
this->m_model->playback = 0;
|
|
this->m_model->Prepare(diffuse, white, ambient);
|
|
static_cast<CGameMode*>(g_modeMgr.GetGameMode())->scene->spatial.InsertModel(*this->m_model, 0);
|
|
}
|
|
|
|
// OFFSET: 0x00E51BD0
|
|
// FUNCTION: fn_24302
|
|
void CSkill::SendMsg(CGameObject* sender, int message, int a, int b, int c, int d, int e, int f, int g, int h, int i, int, int, int, int) {
|
|
CGameMode* mode = static_cast<CGameMode*>(g_modeMgr.GetGameMode());
|
|
|
|
switch (static_cast<std::int64_t>(a) << 32 | static_cast<std::uint32_t>(message)) {
|
|
case AM_CHAT: {
|
|
const char* text = reinterpret_cast<const char*>(b);
|
|
if (std::strlen(text) == 0) {
|
|
return;
|
|
}
|
|
|
|
this->chatTick = timeGetTime();
|
|
if (this->actorWindows[0] == 0) {
|
|
UITransBalloonText* balloon =
|
|
new UITransBalloonText();
|
|
this->actorWindows[0] = reinterpret_cast<int>(balloon);
|
|
balloon->SetSize(8, 8);
|
|
g_windowMgr.AddRenderedFront(reinterpret_cast<UIWindow*>(this->actorWindows[0]));
|
|
}
|
|
|
|
UITransBalloonText* balloon = reinterpret_cast<UITransBalloonText*>(this->actorWindows[0]);
|
|
balloon->SetText(text, 35);
|
|
balloon->SetColors(0xFF8080, 0);
|
|
this->chatWidth = balloon->geometry.width;
|
|
this->chatHeight = balloon->geometry.height;
|
|
balloon->Move(this->render.screenX - this->chatWidth / 2, this->render.screenY - g_renderer->viewport.height * 110 / 480);
|
|
return;
|
|
}
|
|
case AM_SKILL: {
|
|
const SkillHitMessage* hit = reinterpret_cast<const SkillHitMessage*>(b);
|
|
const int skillId = hit->skillId;
|
|
const int monsterValue = hit->monsterValue;
|
|
const int cellX = hit->cellX;
|
|
const int cellY = hit->cellY;
|
|
const int motionSpeed = hit->motionSpeed;
|
|
int hitCount = hit->hitCount;
|
|
if (hitCount == 0) {
|
|
hitCount = 1;
|
|
}
|
|
const int damage = hit->damage / hitCount;
|
|
|
|
CRenderObject* target = nullptr;
|
|
if (g_session.m_aid == hit->targetAid) {
|
|
target = mode->scene->player;
|
|
g_session.GetDisplayJob();
|
|
} else {
|
|
CRenderObject* actor = mode->scene->GetGameActorByAID(hit->targetAid);
|
|
CRenderObject* skill = mode->scene->GetSkillByAID(hit->targetAid);
|
|
if (actor != nullptr) {
|
|
target = actor;
|
|
} else if (skill != nullptr) {
|
|
target = skill;
|
|
}
|
|
if (target != nullptr) {
|
|
static_cast<CGameActor*>(target)->GetEffectiveJob(-1);
|
|
}
|
|
}
|
|
|
|
int effectId = skillId < 493 ? 0 : -1;
|
|
switch (skillId) {
|
|
case MG_FIREWALL:
|
|
effectId = 0x31;
|
|
break;
|
|
case PR_MAGNUS:
|
|
effectId = 0x98;
|
|
break;
|
|
case WZ_VERMILION:
|
|
case SJ_BOOKOFCREATINGSTAR:
|
|
effectId = 0x34;
|
|
break;
|
|
case WZ_STORMGUST:
|
|
case NPC_STORMGUST2:
|
|
effectId = 0x33;
|
|
break;
|
|
case SG_SUN_WARM:
|
|
case SG_MOON_WARM:
|
|
case SG_STAR_WARM:
|
|
effectId = 0x247;
|
|
break;
|
|
case AG_MYSTERY_ILLUSION:
|
|
effectId = 0x6EF;
|
|
break;
|
|
case AG_VIOLENT_QUAKE_ATK:
|
|
case AG_STRANTUM_TREMOR:
|
|
effectId = 0x764;
|
|
break;
|
|
case AG_ALL_BLOOM_ATK:
|
|
case AG_ALL_BLOOM_ATK2:
|
|
effectId = 0x707;
|
|
break;
|
|
case AG_TORNADO_STORM:
|
|
effectId = 0x6F4;
|
|
break;
|
|
case AG_FLORAL_FLARE_ROAD:
|
|
effectId = 0x70F;
|
|
break;
|
|
case ABC_ABYSS_SQUARE:
|
|
case EM_LIGHTNING_LAND:
|
|
case EM_VENOM_SWAMP:
|
|
case EM_CONFLAGRATION:
|
|
case MH_BLAST_FORGE:
|
|
effectId = g_session.FindSkillFollowEffect(skillId);
|
|
break;
|
|
case WH_DEEPBLINDTRAP:
|
|
effectId = 0x753;
|
|
break;
|
|
case WH_SOLIDTRAP:
|
|
effectId = 0x75B;
|
|
break;
|
|
case WH_SWIFTTRAP:
|
|
effectId = 0x757;
|
|
break;
|
|
case WH_FLAMETRAP:
|
|
effectId = 0x782;
|
|
break;
|
|
}
|
|
|
|
if (target != nullptr) {
|
|
ActorDamageMessage damageMessage;
|
|
damageMessage.targetAid = this->hitTargetAid;
|
|
damageMessage.action = 26;
|
|
damageMessage.damage = damage;
|
|
damageMessage.time = timeGetTime();
|
|
damageMessage.attackerAid = this->skillAid;
|
|
damageMessage.cellX = cellX;
|
|
damageMessage.cellY = cellY;
|
|
damageMessage.hitEffect = effectId;
|
|
damageMessage.effectId = -1;
|
|
damageMessage.monsterValue = monsterValue;
|
|
damageMessage.motionSpeed = static_cast<float>(motionSpeed) / 288.0f;
|
|
damageMessage.blueDamage = 0;
|
|
damageMessage.skillId = skillId;
|
|
damageMessage.skillTarget = 0;
|
|
|
|
const int address = reinterpret_cast<int>(&damageMessage);
|
|
int total = damage;
|
|
target->SendMsg(this, AM_WILL_BE_ATTACKED, 0, address, address >> 31, total, total >> 31, 0, 0, 0, 0, 0, 0, 0, 0);
|
|
for (int index = 0; index < hitCount - 1;) {
|
|
++index;
|
|
damageMessage.time += g_multiHitInterval;
|
|
total += damage;
|
|
damageMessage.skillTarget = index;
|
|
target->SendMsg(this, AM_WILL_BE_ATTACKED, 0, address, address >> 31, total, total >> 31, 0, 0, 0, 0, 0, 0, 0, 0);
|
|
}
|
|
}
|
|
|
|
if (this->m_model != nullptr) {
|
|
this->m_model->playback = 1;
|
|
}
|
|
return;
|
|
}
|
|
case AM_SKILLSTANDENTRY: {
|
|
const SkillUnitMessage* unit = reinterpret_cast<const SkillUnitMessage*>(b);
|
|
this->range = unit->range;
|
|
this->skillAid = unit->aid;
|
|
this->render.accountId = unit->aid;
|
|
this->SetActorJob(unit->type);
|
|
this->render.enabled = unit->visible;
|
|
if (unit->visible) {
|
|
this->render.enabled = 1;
|
|
} else {
|
|
const bool visible =
|
|
g_session.m_aid == unit->owner ||
|
|
g_session.PartyByCharacter(unit->characterId).valid != 0;
|
|
this->render.enabled = visible;
|
|
}
|
|
|
|
mode->CellCenter(unit->x, unit->y, this->render.position.x, this->render.position.z);
|
|
this->render.position.y = mode->scene->terrain->Height(this->render.position.x, this->render.position.z);
|
|
this->m_effectId = -1;
|
|
|
|
const vector3d& position = this->render.position;
|
|
switch (this->GetEffectiveJob(-1)) {
|
|
case UNT_ICEWALL:
|
|
this->render.visibilityOptions[1] = 1;
|
|
return;
|
|
case UNT_FIREWALL:
|
|
case UNT_FIRE_MANTLE: {
|
|
const vector3d& player = mode->scene->player->render.position;
|
|
g_soundMgr->PlayWave("effect\\EF_FireWall.wav", position.x - player.x, 0.0f, position.z - player.z, 250, 40, 1.0f, 0);
|
|
this->render.visibilityOptions[1] = 0;
|
|
return;
|
|
}
|
|
case UNT_TATAMIGAESHI:
|
|
case UNT_FIREWALK:
|
|
case UNT_ELECTRICWALK:
|
|
case UNT_VACUUM_EXTREME:
|
|
this->render.visibilityOptions[1] = 0;
|
|
return;
|
|
case UNT_GROUNDDRIFT_WIND:
|
|
this->m_effectId = 0x6B;
|
|
this->render.visibilityOptions[1] = 0;
|
|
return;
|
|
case UNT_WALLOFTHORN:
|
|
this->m_effectId = 0x6A;
|
|
this->render.visibilityOptions[1] = 1;
|
|
return;
|
|
case UNT_WARMER:
|
|
this->m_effectId = 0x6A;
|
|
this->render.visibilityOptions[1] = 0;
|
|
return;
|
|
case UNT_GROUNDDRIFT_DARK:
|
|
case UNT_GROUNDDRIFT_FIRE:
|
|
case UNT_GROUNDDRIFT_NEUTRAL:
|
|
this->m_effectId = 0x63;
|
|
this->render.visibilityOptions[1] = 0;
|
|
return;
|
|
case UNT_GROUNDDRIFT_POISON:
|
|
this->m_effectId = 0x8B;
|
|
this->render.visibilityOptions[1] = 0;
|
|
return;
|
|
case UNT_MAGENTATRAP:
|
|
case UNT_COBALTTRAP:
|
|
case UNT_MAIZETRAP:
|
|
case UNT_VERDURETRAP:
|
|
this->m_effectId = 0x8B;
|
|
this->render.visibilityOptions[1] = 0;
|
|
this->ShowModel(this->GetTrapModelName());
|
|
return;
|
|
case UNT_ELECTRICSHOCKER:
|
|
this->m_effectId = 0x6B;
|
|
this->render.visibilityOptions[1] = 0;
|
|
this->ShowModel(this->GetTrapModelName());
|
|
if (!this->HasId(0x91)) {
|
|
this->LaunchEffect(0x91, vector3d{0.0f, 0.0f, 0.0f}, 0.0f);
|
|
}
|
|
return;
|
|
case UNT_FIRINGTRAP:
|
|
case UNT_CLUSTERBOMB:
|
|
this->m_effectId = 0x6B;
|
|
this->render.visibilityOptions[1] = 0;
|
|
this->ShowModel(this->GetTrapModelName());
|
|
return;
|
|
case UNT_ICEBOUNDTRAP:
|
|
this->m_effectId = 0x6C;
|
|
this->render.visibilityOptions[1] = 0;
|
|
this->ShowModel(this->GetTrapModelName());
|
|
return;
|
|
case UNT_GROUNDDRIFT_WATER:
|
|
this->m_effectId = 0x6C;
|
|
this->render.visibilityOptions[1] = 0;
|
|
return;
|
|
case UNT_KAEN:
|
|
if (rand() % 8 == 0) {
|
|
const vector3d& player = mode->scene->player->render.position;
|
|
g_soundMgr->PlayWave("effect\\화염진.wav", position.x - player.x, 0.0f, position.z - player.z, 250, 40, 1.0f, 0);
|
|
}
|
|
this->render.visibilityOptions[1] = 0;
|
|
return;
|
|
case UNT_TRAP:
|
|
this->render.visibilityOptions[1] = 1;
|
|
this->ShowModel(this->GetTrapModelName());
|
|
return;
|
|
case UNT_BLASTMINE:
|
|
this->render.visibilityOptions[1] = 1;
|
|
this->m_effectId = 0x6A;
|
|
this->ShowModel(this->GetTrapModelName());
|
|
return;
|
|
case UNT_REVERBERATION:
|
|
case UNT_NETHERWORLD:
|
|
this->render.visibilityOptions[1] = 1;
|
|
this->m_effectId = 0x1D0;
|
|
return;
|
|
case UNT_SKIDTRAP:
|
|
case UNT_ANKLESNARE:
|
|
case UNT_LANDMINE:
|
|
case UNT_TALKIEBOX:
|
|
case UNT_THORNS_TRAP:
|
|
this->render.visibilityOptions[1] = 1;
|
|
this->ShowModel(this->GetTrapModelName());
|
|
return;
|
|
case UNT_SANDMAN:
|
|
this->render.visibilityOptions[1] = 1;
|
|
this->m_effectId = 0x8B;
|
|
this->ShowModel(this->GetTrapModelName());
|
|
return;
|
|
case UNT_FLASHER:
|
|
this->render.visibilityOptions[1] = 1;
|
|
this->m_effectId = 0x63;
|
|
this->ShowModel(this->GetTrapModelName());
|
|
return;
|
|
case UNT_FREEZINGTRAP:
|
|
this->render.visibilityOptions[1] = 1;
|
|
this->m_effectId = 0x6C;
|
|
this->ShowModel(this->GetTrapModelName());
|
|
return;
|
|
case UNT_CLAYMORETRAP:
|
|
this->render.visibilityOptions[1] = 1;
|
|
this->m_effectId = 0x6B;
|
|
this->ShowModel(this->GetTrapModelName());
|
|
return;
|
|
case UNT_SHOCKWAVE:
|
|
this->render.visibilityOptions[1] = 1;
|
|
this->ShowModel(this->GetTrapModelName());
|
|
if (this->render.enabled && !this->HasId(0x91)) {
|
|
this->LaunchEffect(0x91, vector3d{0.0f, 0.0f, 0.0f}, 0.0f);
|
|
}
|
|
return;
|
|
case UNT_FEINTBOMB: {
|
|
CPc* source;
|
|
if (unit->owner == g_session.m_aid) {
|
|
source = reinterpret_cast<CPc*>(static_cast<CGameMode*>(g_modeMgr.GetGameMode())->scene->player);
|
|
} else {
|
|
source = static_cast<CPc*>(static_cast<CGameMode*>(g_modeMgr.GetGameMode())->scene->GetGameActorByAID(this->sourceActorId));
|
|
}
|
|
if (source != nullptr) {
|
|
CreateHallucinationPc(
|
|
source->GetEffectiveJob(-1), source->sex, source->head, &this->render.position, 180, source->render.bodyPalette,
|
|
source->headPalette, source->GetBodyCostume()
|
|
);
|
|
}
|
|
return;
|
|
}
|
|
case UNT_KINGS_GRACE: {
|
|
const vector3d& player = mode->scene->player->render.position;
|
|
g_soundMgr->PlayWave("effect\\lg_kings_grace.wav", position.x - player.x, 0.0f, position.z - player.z, 250, 40, 1.0f, 0);
|
|
this->render.visibilityOptions[1] = 0;
|
|
return;
|
|
}
|
|
case UNT_MAGMA_ERUPTION: {
|
|
const vector3d& player = mode->scene->player->render.position;
|
|
g_soundMgr->PlayWave("effect\\NC_MAGMA_ERUPTION.wav", position.x - player.x, 0.0f, position.z - player.z, 250, 40, 1.0f, 0);
|
|
this->render.visibilityOptions[1] = 0;
|
|
return;
|
|
}
|
|
case UNT_PNEUMA:
|
|
g_effectMgr->Spawn(this->render.accountId, 0x8D, position.x, position.y, position.z, 0, -1, 0, 0);
|
|
return;
|
|
case UNT_B_TRAP:
|
|
switch (unit->level) {
|
|
case 1:
|
|
g_effectMgr->Spawn(this->render.accountId, 0x42D, position.x, position.y, position.z, 0, -1, 0, 0);
|
|
return;
|
|
case 2:
|
|
case 3:
|
|
g_effectMgr->Spawn(this->render.accountId, 0x42E, position.x, position.y, position.z, 0, -1, 0, 0);
|
|
return;
|
|
case 4:
|
|
case 5:
|
|
g_effectMgr->Spawn(this->render.accountId, 0x42F, position.x, position.y, position.z, 0, -1, 0, 0);
|
|
return;
|
|
}
|
|
return;
|
|
case UNT_CATNIPPOWDER:
|
|
g_effectMgr->Spawn(this->render.accountId, 0x450, position.x, position.y, position.z, 0, unit->level, 0, 0);
|
|
return;
|
|
case UNT_NYANGGRASS: {
|
|
const vector3d& player = static_cast<CGameMode*>(g_modeMgr.GetGameMode())->scene->player->render.position;
|
|
g_soundMgr->PlayWave("effect\\su_nyanggrass.wav", position.x - player.x, 0.0f, position.z - player.z, 250, 40, 1.0f, 0);
|
|
g_effectMgr->Spawn(this->render.accountId, 0x465, position.x, position.y, position.z, 0, unit->level, 0, 0);
|
|
return;
|
|
}
|
|
case UNT_CREATINGSTAR: {
|
|
g_effectMgr->Spawn(this->render.accountId, 0x4B0, position.x, position.y, position.z, 0, -1, 0, 0);
|
|
const vector3d& player = static_cast<CGameMode*>(g_modeMgr.GetGameMode())->scene->player->render.position;
|
|
g_soundMgr->PlayWave("effect\\g카트토네이도.wav", position.x - player.x, 0.0f, position.z - player.z, 250, 40, 1.0f, 0);
|
|
return;
|
|
}
|
|
case UNT_SEEDTRAP:
|
|
switch (unit->level) {
|
|
case 1:
|
|
this->m_effectId = 0x642;
|
|
break;
|
|
case 2:
|
|
this->m_effectId = 0x643;
|
|
break;
|
|
case 3:
|
|
this->m_effectId = 0x644;
|
|
break;
|
|
case 4:
|
|
this->m_effectId = 0x645;
|
|
break;
|
|
case 5:
|
|
this->m_effectId = 0x646;
|
|
break;
|
|
}
|
|
return;
|
|
case UNT_PNEUMATICUS_PROCELLA:
|
|
g_effectMgr->Spawn(this->render.accountId, 0x7A5, position.x, position.y, position.z, 0, unit->level, 0, 0);
|
|
return;
|
|
case UNT_RAIN_OF_CRYSTAL:
|
|
if (!g_effectMgr->Has(this->render.accountId, 0x6D8)) {
|
|
g_effectMgr->Retire(this->render.accountId, 0x6D8);
|
|
}
|
|
g_effectMgr->Spawn(this->render.accountId, 0x6D8, position.x, position.y, position.z, 0, unit->level, 0, 0);
|
|
return;
|
|
case UNT_VIOLENT_QUAKE:
|
|
g_effectMgr->Retire(this->render.accountId, 0x701);
|
|
g_effectMgr->Spawn(this->render.accountId, 0x701, position.x, position.y, position.z, 0, unit->level, 0, 0);
|
|
return;
|
|
case UNT_ASTRAL_STRIKE:
|
|
if (!g_effectMgr->Has(this->render.accountId, 0x6E8)) {
|
|
g_effectMgr->Retire(this->render.accountId, 0x6E8);
|
|
}
|
|
g_effectMgr->Spawn(this->render.accountId, 0x6E8, position.x, position.y, position.z, 0, unit->level, 0, 0);
|
|
return;
|
|
case UNT_MYSTERY_ILLUSION:
|
|
if (!g_effectMgr->Has(this->render.accountId, 0x6EC)) {
|
|
g_effectMgr->Retire(this->render.accountId, 0x6EC);
|
|
}
|
|
g_effectMgr->Spawn(this->render.accountId, 0x6EC, position.x, position.y, position.z, 0, unit->level, 0, 0);
|
|
return;
|
|
case UNT_TORNADO_STORM:
|
|
if (!g_effectMgr->Has(this->render.accountId, 0x6F0)) {
|
|
g_effectMgr->Retire(this->render.accountId, 0x6F0);
|
|
}
|
|
g_effectMgr->Spawn(this->render.accountId, 0x6F0, position.x, position.y, position.z, 0, unit->level, 0, 0);
|
|
if (!g_effectMgr->Has(this->render.accountId, 0x6F1)) {
|
|
g_effectMgr->Retire(this->render.accountId, 0x6F1);
|
|
}
|
|
g_effectMgr->Spawn(this->render.accountId, 0x6F1, position.x, position.y, position.z, 0, unit->level, 0, 0);
|
|
return;
|
|
case UNT_ALL_BLOOM:
|
|
g_effectMgr->Retire(this->render.accountId, 0x702);
|
|
g_effectMgr->Spawn(this->render.accountId, 0x702, position.x, position.y, position.z, 0, unit->level, 0, 0);
|
|
g_effectMgr->Retire(this->render.accountId, 0x703);
|
|
g_effectMgr->Spawn(this->render.accountId, 0x703, position.x, position.y, position.z, 0, unit->level, 0, 0);
|
|
return;
|
|
case UNT_FLORAL_FLARE_ROAD:
|
|
g_effectMgr->Retire(this->render.accountId, 0x70C);
|
|
g_effectMgr->Spawn(this->render.accountId, 0x70C, position.x, position.y, position.z, 0, unit->level, 0, 0);
|
|
return;
|
|
case UNT_STRANTUM_TREMOR:
|
|
for (std::int64_t effectId = 0x765; effectId <= 0x766; ++effectId) {
|
|
if (!g_effectMgr->Has(this->render.accountId, static_cast<int>(effectId))) {
|
|
g_effectMgr->Retire(this->render.accountId, static_cast<int>(effectId));
|
|
}
|
|
CEffect* effect = g_effectMgr->Spawn(this->render.accountId, static_cast<int>(effectId), position.x, position.y, position.z, 0, unit->level, 0, 0);
|
|
if (effect != nullptr) {
|
|
effect->SetAngle(90.0f);
|
|
static_cast<CEZ2STRScreenEffect*>(effect)->followCamera = 1;
|
|
}
|
|
}
|
|
return;
|
|
case UNT_VENOM_SWAMP:
|
|
if (!g_effectMgr->Has(this->render.accountId, 0x7EF)) {
|
|
g_effectMgr->Retire(this->render.accountId, 0x7EF);
|
|
}
|
|
g_effectMgr->Spawn(this->render.accountId, 0x7EF, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
return;
|
|
case UNT_LIGHTNING_LAND:
|
|
if (!g_effectMgr->Has(this->render.accountId, 0x7FA)) {
|
|
g_effectMgr->Retire(this->render.accountId, 0x7FA);
|
|
}
|
|
g_effectMgr->Spawn(this->render.accountId, 0x7FA, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
if (!g_effectMgr->Has(this->render.accountId, 0x7F9)) {
|
|
g_effectMgr->Retire(this->render.accountId, 0x7F9);
|
|
}
|
|
g_effectMgr->Spawn(this->render.accountId, 0x7F9, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
return;
|
|
case UNT_CONFLAGRATION:
|
|
if (!g_effectMgr->Has(this->render.accountId, 0x808)) {
|
|
g_effectMgr->Retire(this->render.accountId, 0x808);
|
|
}
|
|
g_effectMgr->Spawn(this->render.accountId, 0x808, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
if (!g_effectMgr->Has(this->render.accountId, 0x807)) {
|
|
g_effectMgr->Retire(this->render.accountId, 0x807);
|
|
}
|
|
g_effectMgr->Spawn(this->render.accountId, 0x807, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
return;
|
|
case UNT_ABYSS_SQUARE:
|
|
g_effectMgr->Spawn(this->render.accountId, 0x852, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
g_effectMgr->Spawn(this->render.accountId, 0x851, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
return;
|
|
case UNT_ACIDIFIED_ZONE_FIRE: {
|
|
g_effectMgr->Spawn(this->render.accountId, 0x8A0, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
g_effectMgr->Spawn(this->render.accountId, 0x8A1, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
CEffect* effect = g_effectMgr->Spawn(this->render.accountId, 0x8A2, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
if (effect != nullptr) {
|
|
effect->SetDelay(10);
|
|
}
|
|
effect = g_effectMgr->Spawn(this->render.accountId, 0x8A3, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
if (effect != nullptr) {
|
|
effect->SetDelay(10);
|
|
}
|
|
return;
|
|
}
|
|
case UNT_ACIDIFIED_ZONE_WATER: {
|
|
g_effectMgr->Spawn(this->render.accountId, 0x8A8, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
g_effectMgr->Spawn(this->render.accountId, 0x8A9, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
CEffect* effect = g_effectMgr->Spawn(this->render.accountId, 0x8AA, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
if (effect != nullptr) {
|
|
effect->SetDelay(10);
|
|
}
|
|
effect = g_effectMgr->Spawn(this->render.accountId, 0x8AB, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
if (effect != nullptr) {
|
|
effect->SetDelay(10);
|
|
}
|
|
return;
|
|
}
|
|
case UNT_ACIDIFIED_ZONE_WIND: {
|
|
g_effectMgr->Spawn(this->render.accountId, 0x8B0, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
g_effectMgr->Spawn(this->render.accountId, 0x8B1, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
CEffect* effect = g_effectMgr->Spawn(this->render.accountId, 0x8B2, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
if (effect != nullptr) {
|
|
effect->SetDelay(10);
|
|
}
|
|
effect = g_effectMgr->Spawn(this->render.accountId, 0x8B3, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
if (effect != nullptr) {
|
|
effect->SetDelay(10);
|
|
}
|
|
return;
|
|
}
|
|
case UNT_ACIDIFIED_ZONE_GROUND: {
|
|
g_effectMgr->Spawn(this->render.accountId, 0x8B8, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
g_effectMgr->Spawn(this->render.accountId, 0x8B9, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
CEffect* effect = g_effectMgr->Spawn(this->render.accountId, 0x8BA, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
if (effect != nullptr) {
|
|
effect->SetDelay(10);
|
|
}
|
|
effect = g_effectMgr->Spawn(this->render.accountId, 0x8BB, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
if (effect != nullptr) {
|
|
effect->SetDelay(10);
|
|
}
|
|
return;
|
|
}
|
|
case UNT_CANE_OF_EVIL_EYE:
|
|
g_effectMgr->Spawn(this->render.accountId, 0x903, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
return;
|
|
case UNT_DEEPBLINDTRAP:
|
|
this->render.visibilityOptions[1] = 1;
|
|
this->ShowModel(this->GetTrapModelName());
|
|
if (this->render.enabled) {
|
|
g_effectMgr->Spawn(this->render.accountId, 0x752, position.x, position.y, position.z, 0, -1, 0, 0);
|
|
}
|
|
return;
|
|
case UNT_SWIFTTRAP:
|
|
this->render.visibilityOptions[1] = 1;
|
|
this->ShowModel(this->GetTrapModelName());
|
|
if (this->render.enabled) {
|
|
g_effectMgr->Spawn(this->render.accountId, 0x756, position.x, position.y, position.z, 0, -1, 0, 0);
|
|
}
|
|
return;
|
|
case UNT_SOLIDTRAP:
|
|
this->render.visibilityOptions[1] = 1;
|
|
this->ShowModel(this->GetTrapModelName());
|
|
if (this->render.enabled) {
|
|
g_effectMgr->Spawn(this->render.accountId, 0x75A, position.x, position.y, position.z, 0, -1, 0, 0);
|
|
}
|
|
return;
|
|
case UNT_FLAMETRAP:
|
|
this->render.visibilityOptions[1] = 1;
|
|
this->ShowModel(this->GetTrapModelName());
|
|
if (this->render.enabled) {
|
|
g_effectMgr->Spawn(this->render.accountId, 0x77F, position.x, position.y, position.z, 0, -1, 0, 0);
|
|
}
|
|
return;
|
|
default: {
|
|
CRenderObject* source = static_cast<CGameMode*>(g_modeMgr.GetGameMode())->scene->GetGameActorByAidIncludeMe(this->sourceActorId);
|
|
CSkillActionMgr* actions = CSkillActionMgr::GetInstance();
|
|
actions->OnSkillObjectCreate(this->GetEffectiveJob(-1), unit->level, this, static_cast<CGameActor*>(source));
|
|
return;
|
|
}
|
|
case 0x532C:
|
|
g_effectMgr->Spawn(this->render.accountId, 0x925, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
return;
|
|
}
|
|
}
|
|
case AM_SETJOB:
|
|
this->SetActorJob(b);
|
|
switch (this->GetEffectiveJob(-1)) {
|
|
case UNT_WARP_WAITING: {
|
|
const vector3d& player = static_cast<CGameMode*>(g_modeMgr.GetGameMode())->scene->player->render.position;
|
|
g_soundMgr->PlayWave(
|
|
"effect\\EF_Portal.wav", this->render.position.x - player.x, 0.0f, this->render.position.z - player.z, 250, 40, 1.0f, 0
|
|
);
|
|
break;
|
|
}
|
|
case UNT_USED_TRAPS:
|
|
if (this->m_effectId != -1 &&
|
|
!g_effectMgr->Spawn(0, this->m_effectId, this->render.position.x, this->render.position.y, this->render.position.z, 0, -1, 0, 0)) {
|
|
CRagEffect* effect = this->LaunchEffect(this->m_effectId, vector3d{0.0f, 0.0f, 0.0f}, 0.0f);
|
|
if (effect != nullptr) {
|
|
effect->SendMsg(nullptr, AM_SETPOS, 0, reinterpret_cast<int>(&this->render.position), 0, 0, 0, 0);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
this->m_effectTimer = 36000;
|
|
this->ShowModel(this->GetTrapModelName());
|
|
if (this->m_model != nullptr) {
|
|
this->m_model->playback = 1;
|
|
}
|
|
return;
|
|
case AM_DISAPPEAR:
|
|
if (this->GetEffectiveJob(-1) == UNT_CANE_OF_EVIL_EYE) {
|
|
CEffect* effect = g_effectMgr->Find(this->render.accountId, 0x903);
|
|
if (effect != nullptr) {
|
|
static_cast<CCaneOfEvilEyeEffect*>(effect)->Finish();
|
|
}
|
|
} else {
|
|
CSkillActionMgr* actions = CSkillActionMgr::GetInstance();
|
|
actions->OnSkillObjectRemove(this->GetEffectiveJob(-1), this);
|
|
}
|
|
return;
|
|
case AM_SKILL_UPDATE:
|
|
if (this->render.enabled) {
|
|
return;
|
|
}
|
|
|
|
this->render.enabled = 1;
|
|
this->ShowModel(this->GetTrapModelName());
|
|
if (this->GetEffectiveJob(-1) == UNT_SHOCKWAVE && !this->HasId(0x91)) {
|
|
this->LaunchEffect(0x91, vector3d{0.0f, 0.0f, 0.0f}, 0.0f);
|
|
}
|
|
|
|
switch (this->GetEffectiveJob(-1)) {
|
|
case UNT_DEEPBLINDTRAP:
|
|
g_effectMgr->Spawn(this->render.accountId, 0x752, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
return;
|
|
case UNT_SOLIDTRAP:
|
|
g_effectMgr->Spawn(this->render.accountId, 0x75A, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
return;
|
|
case UNT_SWIFTTRAP:
|
|
g_effectMgr->Spawn(this->render.accountId, 0x756, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
return;
|
|
case UNT_FLAMETRAP:
|
|
g_effectMgr->Spawn(this->render.accountId, 0x77F, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
|
return;
|
|
}
|
|
return;
|
|
default:
|
|
this->CGameActor::SendMsg(sender, message, a, b, c, d, e, f, g, h, i, 0, 0, 0, 0);
|
|
return;
|
|
}
|
|
}
|