Search the Community

Showing results for tags 'wotlk'.

More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


  • Important
    • Announcements
    • Getting Started
  • Modding
    • Modeling
    • Level Design
    • Interface
    • Serverside
    • Noggit
    • Miscellaneous
    • Retro-Porting
    • Useful Services
  • Projects
    • Recruitment
    • Paid Work
    • Showcase
    • Machinima
  • Community
    • General
    • Random
    • Gallery
    • Releases
    • The Graveyard


  • Tools
    • Uncategorized
    • Map Editing
    • Model Editing
    • DBC & DB2 Editing
    • Serverside
    • CASC & MPQ
  • Resources
    • Graphics
    • Uncategorized
    • Models
    • Maps
    • Client Patches
  • 010 Editor Scripts and Templates
  • Noggit Script Brushes


  • Projects
  • Machinima
  • Software Development


  • Beginner
    • Русский
    • Deutsch
  • Modeling
    • Česky
    • Français
  • Level Design
  • Interface
  • Serverside
  • Miscellaneous
    • Česky
    • Français
  • Retro-Porting
  • Machinima


  • Tutorials
  • Timelapse
  • Miscellaneous

Find results in...

Find results that contain...

Date Created

  • Start


Last Updated

  • Start


Filter by number of...


  • Start






Found 96 results

  1. Version 1.1.0


    Dear Modders, I've learned alot mainly thanks to this community, and since I was experimenting with the shadowlands creatures and mounts to retro port them to Wotlk, and we'll it's going pretty good at the moment. So why not share it, i'll post updates from time to time since i'm pretty busy with wow modding at the moment. REMEMBER TO LIKE & SUBSCRIBE (might be wrong platform) Release related to : NOTE: The patch contains the models & dbc files. The dbc files are far from accurate and were just placed to make the models show up. Question: Some models like the hands work perfectly in Wow model viewer, however morphing to that display id results in a crash. any idea's?
  2. Version 1.0.0


    Put together this HD Race Icon package a while ago. Thought I'd share it for anyone who was interested. Just updates the Race Icons with some HD faces. Drop this pack in to the /Data
  3. Hi, I would like to know if someone has a patch to change the old bear animation to the new one that came out in the BfA patch, which I think is incredible. Nowhere do I get it, I have tried to invade but I only get the form of kultira or that of zandal that I do not want. I would like if someone can give me or pass me that file to change the animation of all the bears of wow 3.3.5a. Please.
  4. Version 1.6


    There are two versions of WoW 335 executable here: WoWGen12.exe which - contains all features listed down below INCLUDING the hacky ones such as multi jump + ADDED NEW SCRIPT EDITS WoWGen11_WithoutHack.exe - contains all features listed down below EXCLUDING the hacky ones such as multi jump and EXCLUDING SCRIPT EDITS List of Features - Removed MD5 / SIG - Game version changed to my name initials and discord tag (A.S.E A2#6767) Release date to Dec 14 1337 for fun The real version of this file is still 3.3.5 - Druid on level 101+ get NO error when opening Base Stats - Every level 101+ can sit on barb Chair without Error - Does not Create CACHE file -Added LUA UNLOCKER you dont need to Manuly Unlock LUA functions via any 3rd party program this Exe has most of them unlocked by itself so far unlocked are (AcceptBattlefieldPort, SetCurrentTitle, UninviteUnit, ReloadUI, FocusUnit, ClearFocus, ... , InteractUnit, CastSpellByName, CastSpellByID, Movement functions ... , CancelLogout AttackTarget (error is still printed)) - Local Data Load directly from the folder no need to place them into the MPQ eg - M:\Client335\Data\DBFilesClient\ItemDisplayInfo.dbc is a viable path for wow.exe to read it in case wow.exe is in Client335 - Does not uses scan.dll to detect Cheat Engine at all - When you zoom close to your character it wont get transparent ========= ADDED IN SCRIPT ========= - Maximum Jump height - Maximum Climb Angle - Increased Far Clip ========= HACKY FEATURES========= - Allows Air Jumps at all time - You understand to every lang - /follow works simply on everysingle target no matter what target Due to popular demand im going to list of some Offsets for the edits I have done so you can do edits on your own or remove some unwanted functions List of functions that Warden scans for
  5. Hi there ! I made some custom spells, now I stuggle trying to avoid them being sorted in the "General" tab of the Spellbook. I would like it to be sorted in a new one, that would be called "Avatars" (or "Avatar" or something related), with its new icon. The same way spells are sorted in spec tabs for classes, like the frost spells of mages are sorted in the "Frost" tab of their spellbook. Except this new tab must be in all classes' spellbook (no race/class restriction) ! I've played with the SkillLine, SkillLineAbility and SkillRaceClassInfo DBCs without success. Can someone help me with this ? Has anyone already put custom spells in a new tab of the spellbook, for every race/class ? I'm working over WotLK 3.3.5 client/server (powered by TC). See attached image. And do not be impressed by my Paint.exe skills.
  6. Version 1.0.0


    Viridian Phase-Hunter - Possible New Warpstalker Mount from Burning Crusade Classic Promotion
  7. Wondering if anyone knows where this is handled at? Trying to create custom class buff ranks but currently having issues with them being in the general spellbook tab and wanting them to be in their correct spec tab (IE: Gift of the Wild in the Restoration tab for Druids). I've copied exactly from Spell.dbc, doesn't work. I've checked core and found nothing. I cannot see any other DBCs that would logically be responsible for it? Also checked Spellbook interface files and found nothing... honestly at a complete loss. EDIT: LOL and this folks is why you should Google before posting new stuff. Answer is needing to add entries into SkillLineAbility.dbc... Derp.
  8. Helo there is my project of custom guild system. It has guild reputation, new UI. Is not 100% done but so far there is it Youtube show off
  9. Version 2.0


    All the patches will be done as non-encrypted soon! This file contains HD characters and NPC models and textures for WotLK. The archive contains 4 patches: patch-w.mpq contains: NPC models Animations BakedNPCTextures patch-x.mpq contains: Character models Animations patch-enUS-w.mpq and patch-enUS-x.mpq contain: DBCs If you have questions/requests feel free to ask it in the comments or by PM, I will answer it as soon as possible. P.S. The previous versions of files by @Roarl were deleted, because of the wrong and non-existed links. All thanks should be given to him.
  10. Version 3.0


    This mod adds bloodier combat effects to the game and includes some blood splats similar to those removed during the classic beta. Download: WotLK - Cata (Old version) V2.0: -Fixed crashes. V3.0: -Violence level is now always 2 and cannot be disabled or changed. -Added purple blood (id 5). IMPORTANT: to make it work correctly go to video settings and turn "projected textures" on. Also, set the "Particle Density" to High and set the Texture Filtering to High to avoid visual glitches. If you are using V2, make sure your violence level is set to 2. In-game, type: /console violenceLevel 2 Known bugs: -If you zoom in to first person view, you won't be able to see the blood splats from your character. -If a character morphs into another model, all the blood splats from that character will disappear. -The blood splats change color if your character changes color (curses, venom, etc.). -The blood splats scale changes if the scale of your character changes. -Blood effects do not show if you one-hit kill the target. It's hardcoded into the client and can't be changed as far as I know (happens with the default blood as well). -It's not possible to use this mod in MoP since the game cleans all blood splats each time your character is hit or dies. Note: The splats on the ground disappear after 45 seconds. You can change it by editing the particle lifespan in 010editor. If you think there are too many blood splats to the point they overlap or affects the performance, just change the default particle emissionrate (12) to 7 or less with 010editor. Blood color is set in CreatureModelData.dbc, column 6 (1 = red, 2 = green, 3 = black, 4 = blue, 5 = purple).
  11. Trinity Item Creator [3.3.5] (Open source)What this application can do Save item as *.sql Copy query to clipboard Import to database Save/Load custom templates Load premade templates DisplayID finder Stats generator Reset all fields Make item.dbc What can you do?Help us maintain the application with latest trinitycore database structure and keep features functional by reporting any issue or request on our github issue tracker [here]. Available LinksOpen source repositoryLatest downloadable version Thanks Sdyees, Freddan962 for contribution
  12. Version 1.0.0


    Hiya, Today I would like to share with you my mount patch containing at this point 45 mounts going from Cata to Legion retro-ported to Wrath of the lich king. I work on this patch from time to time so be sure to keep an eye out for newer versions. Happy Modding. Poisonleaf
  13. Greetings welcome to my store ! In this topic you can buy my 3D models that are compatible with World of Warcraft 3.3.5 --- all files contains only Model itself you will have to add it to the DBC by yourself To buy the model click on PayPal button it will redirect you to CheckOut Site where you can buy the model after payment is done you will be redirected to Download site First item is... Sylvanas Windrunner model from Heroes of the Storm ported to WoW there is also thw wing added to only one side due it being a request for the commision that his was years ago Price 10$ If you have any problems with buying stuff contanct me via PM or DM on my discord "A2#6767"
  14. Greetings, i use Leeviathan's WOD character model patch, and it's awesome to have retail characters to 3.3.5 but, for some reason, the weapons of the female blood elf are reduced compared to Retail, and i need to increase the size of the weapons, if anyone can put on the comments how i can do this, i will be eternally grateful
  15. Hello everyone, apologies if this has been posted already, it seems I could not find it...or understand it if found... I've been using some patches in my WotLK client for some time and I was now trying to make some changes myself with no luck (given that I am a totally new to this topic)...hence this post. The patches I am using are Finsternis Creature/Mount patch, WoD Models (I don't remember the author, sorry), improved armor textures (sh1tdev, found on this site), Sun Light Alpha WoW 3.3.5 (Nicolas, again on this site). What I was trying to do was to change the Druids Moonkin and Tree of Life form by importing a model from another patch (Mounts, druid and other 1.0.0 by astrono1) and insert it on top of the patches I am currently using on my client. Is this somehow possible? I apologise in advance, I have tried to do it myself by checking the Forum, but I had no luck, could you please help me or give me some hints? Thank you for all the help that you'll be able to lend Kryhowl
  16. Version v1


    This script for 010editor converts Wrath of the Lich King .M2 and .SKIN files to Cataclysm, Mists of Pandaria and Warlords of Draenor. Supports: -Cameras. -Particles. -Animation flags. -Projected shadows. -Transparency flags. -Blend mode overrides. Also includes: -Batch file converter. -Shadow remover script. -Sequence flag remover script. -Skin template for 010editor with shadow batches added. DOWNLOAD Some notes and technical information: -make sure you are working on "OVR" mode before running the script. Projected shadows As you may know, projected shadows are stored inside the .skin file since Cataclysm. This script creates shadows for all texture units, including those with additive materials. If you want to remove the shadows from a specific geoset, just open the skin file with 010editor, run the skin template included inside the tools folder and delete the texture batch corresponing to that mesh. If you want to remove ALL shadows from a model, just use the "Cataclysm Shadow Remover" included in the tools folder (it's useful for stuff like fire or lights, that are not supposed to cast a shadow). As you can see, the glow, which is a billboarded square with addivite renderflag, is casting a shadow and the game can't handle shadows with additive materials. To remove it I selected its shadow batch, deleted it and reduced the shadow batch count by 1 in 010editor. More info in this video: Flying mount animations In WotLK, mounts use swimming animations for flying. Since Cataclysm, however, there are separate ids for swimming and flying since flying mounts can now be used as ground mounts and therefore swim. But, if a mount model doesn't have fly animations, the game will use its swimming animations. That's why this script doesn't duplicate them. It's not necessary. WotLK flying mounts should still work perfectly in Cata, MoP and WoD. Reflections This script doesn't convert reflections since there is no exact way to know when a texture unit is used for a reflection, glow, etc. So you must do it by hand. Just open your skin file, convert it to Cata+, go to the texunit with the reflection and change its shader to "144". Here is an example using "Creature\Murloc\": You can change the "texunit" and "texunit2" fields to "0" but it's optional since those fields are unused since Cataclysm, but just in case. Animation sequence flags Sequence flags are 128 digits bigger since Cataclysm. Without these flags some animation frames loop when they shouldn't and sequences don't blend correctly. This script fixes that problem and gives smoothness to the animations. If you want to remove the extra flags for some reason, just run the "Cataclysm Sequence Flag Remover" script included in the tools folder
  17. New 52809 spells fully implemented their visualization nonexistent mechanics replaced by similar The whole process took a little more than 100-110 hours Download:
  18. Yo. I'm trying to retexture some armor BLP textures in WotLK, but I'm having some trouble with it. This might also extend to Vanilla for me, as I made an MPQ patch for all of my retextures (which I made in Photoshop (selecting indexed textures) through a BLP converter), but it stopped recognizing new retextures after a while for some strange reason. I've tried looking for others with the same problem, but haven't come across anything useful. Basically, it boils down to this: I made an MPQ patch that eventually stopped working after adding enough retextures. I've tried using an older version of Photoshop (which I still have installed), because I thought that maybe it was because I switched to later versions a while ago, but even that didn't do anything. I swear I've been doing the same exact method since I started making these retextures. Some retextures are working, but new ones don't, and they also don't overwrite any of the retextures that were already in there. The MPQ format was something that I also looked into, and it turns out the reason why the new MPQ patch that I made for WotLK wasn't working at all was because it had the wrong MPQ format, which was 2.0, and the correct one being 1.0. The one I made for vanilla had the 1.0 format and that ended up working better than the other (since at least some older retextures are working). As you can see, the Executioner's Sword (Sword_1H_Short_A_03Red.blp) is retextured, but the Raider's Shoulderpads (Shoulder_Mail_B_01Red.blp) and the upper portion of my Husk of Naraxxis (Plate_D_01_Chest_TU_U.blp) both aren't desaturated (which is what I was trying to do). The strangest thing is just the fact that the files in the MPQ don't get overwritten and instead just leave a duplicate file in there with the same exact name and extension. I also ended up using a manual BLP2PNG converter and that also didn't work. Feel free to have a look at the MPQ. I'd really appreciate the help.
  19. Attempting to completely convert the content of these zones, as close as possible to the blizzlike. Raid: Firelands Mogushan Palace Throne of the Four Winds Dungeon: Well of Eternity Halls of Origination Lost City of the Tol'vir The Vortex Pinnacle The Maelstrom Battleground: Twin Peaks Temple of Kotmogu The Battle for Gilneas Arena: Tol'viron Arena The Tiger's Peak Artifacts Legion My list converting dbc structure Legion and Mop to client 3.3.5a Achievement.dbc Achievement_Category.dbc Achievement_Criteria.dbc AreaGroup.dbc AreaPOI.dbc AreaTable.dbc AreaTrigger.dbc BattlemasterList.dbc CharacterFacialHairStyles.dbc CharHairGeosets.dbc CharSections.dbc CharTitles.dbc ChatChannels.dbc ChrRaces.dbc CreatureDisplayInfo.dbc CreatureDisplayInfoExtra.dbc CreatureModelData.dbc CreatureSoundData.dbc CurrencyTypes.dbc DungeonMap.dbc DungeonMapChunk.dbc EmotesTextSound.dbc Faction.dbc FactionTemplate.dbc GameObjectDisplayInfo.dbc GemProperties.dbc GroundEffectDoodad.dbc GroundEffectTexture.dbc HolidayNames.dbc Item.dbc ItemDisplayInfo.dbc ItemExtendedCost.dbc ItemSet.dbc ItemVisualEffects.dbc ItemVisuals.dbc Light.dbc LightFloatBand.dbc LightIntBand.dbc LightParams.dbc LightSkybox.dbc LiquidMaterial.dbc LiquidObject.dbc LiquidType.dbc LoadingScreens.dbc Map.dbc MapDifficulty.dbc NPCSounds.dbc ObjectEffect.dbc ObjectEffectGroup.dbc ObjectEffectPackage.dbc ParticleColor.dbc PvpDifficulty.dbc ScalingStatDistribution.dbc SoundAmbience.dbc SoundEmitters.dbc SoundEntries.dbc SpellIcon.dbc SpellItemEnchantment.dbc SpellVisual.dbc SpellVisualEffectName.dbc Talent.dbc WMOAreaTable.dbc WorldMapArea.dbc WorldMapContinent.dbc WorldMapOverlay.dbc WorldMapTransforms.dbc WorldSafeLocs.dbc WorldStateUI.dbc WorldStateZoneSounds.dbc ZoneIntroMusicTable.dbc ZoneMusic.dbc My way converting dbc: 1. dbc>sql 2. manually compare dbc mop - wotlk 3. converting sql to csv 4. csv to dbc left to finish: - server part - full spell.dbc 5.4 > 3.3.5а Patch size almost 2GB
  20. hey all strange question would it be possible to give new players the option to choose from a pre set choice of levels to start at on a private server ? if this is possible would anyone be willing to share with me how this would be achieved Many Thanks in advance Mike
  21. Hello guys, I have some questions regarding an idea i have for a revamp of vanilla. It would be really awesome too incorporate Wotlk, and TBC, in its entirety in the vanilla formula. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Let me sketch how i would like too see this world: Everything is Downscaled to 60. Level 60 is the maximum level cap. 1) TBC lands and WoTLK lands are locked, and you need too unlock these by playing the 'endgame' of the previous expansion. -- In order to enter TBC content you need to have done every dungeon from the vanilla world, and completed the following raids : Lower Blackrock Spire Upper Blackrock Spire Zul'Gurub The ruins of Ahn'Qiraj Molten Core Blackwing Lair (the first 2 bosses of AQ40 minimum ?) -- In order to enter WotlK content you need to have done every dungeon (also heroic) from the TBC expansion, and completed the following raids : Karazhan. Gruul's Lair. Magtheridon's Lair. Serpentshrine Cavern. (The eye: Tempest keep 1st boss minimum ?) -- When entering WotlK, you must clear all dungeons (also heroic) to unlock the first raid instance. in order to unlock the next WotLK raid you need to have cleared content in the following order; Vault of Archavon. -> The Obsidian Sanctum. -> The Eye of Eternity. -> Ulduar. -> Trial of the Crusader. -> Onyxia's Lair. -> Icecrown Citadel. 2) TBC and WOTLK are all downscaled to 60 ==> TBC mobs are 60, but harder than those of Vanilla. (you would need atleast Pre raid BIS too even 'think' about solo'ing mobs in TBC) ==> WOTLK mobs are 60, but harder than those of TBC (TBC gear / Vanilla T2.5/T3 needed too even 'think' about solo'ing those mobs) --Also gear is Downscaled to 60. Vanilla endgame gear < TBC endgame gear < WotLK endgame gear. BUT there are exceptions: The 3 Endgame raids from all expansions (Vanilla -- TBC -- WoTLK) are kept as the true endgame raids. The loot rewards are similar in quality, with slight differences, the raid from the next expansion giving SLIGHT better loot, as it will be harder to obtain. Naxxramas < The Black Temple < Icecrown citadel. Kel'Thuzad, Illidian Stormrage and The Lich King will give same quality BIS loot. All the other raids (Like AQ40 full, Sunwell Plateau, Mount Hyjal,..) are meant for gearing up for the respectively next endgame raids. 3) Flying mounts are unlocked in the expansion you're active when you have cleared all it's dungeons. => Unlocking Flying mounts in Vanilla content requires you to have completed all dungeons (also heroic) in WotLK content. (this will then also unlock flying mounts in WoTLK content) 3) No content is truly altered, and kept in it's 'original state' Every raid and dungeon keeps its same tactics Everything is kept the same, except the TBC and WoTLK content is downscaled to 60 and requires unlocking, but expansions being harder to clear as it is next in line. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Now, i do not have any experience in modding or starting a server on my own. I would like too ask the following questions; How hard would it be to realize this on every level; code-wise, graphically etc. ? Does this sound like something that can be done, or enough people could be interested in ? Are there other thing you would recommend to do differently to make it better/ more interesting ? Any coders and GM's would like too help create this project, if there's enough interest ? ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ I'm pretty sure i forgot a whole lot, or might have created contradictions. So i might update this if i can remember them or peopIe remind me of it by reacting on this post. I would like to appologize for my bad English, but i hope everyone can somewhat understand what i have stated. Cheers.
  22. Sharing this here as well (copy/paste from Modcraft) Hi guys! Took me some time to post this because I couldn't find any fan for my laptop.... But I did some days ago so... Here you go! As I said before, I acknowledge this is not much. But I just wanna play my part in Modcraft as best as I can even if it doesn't mean a lot. First you will need the tables and rows which the script uses : SQL File Then the Creature Script : StockExchange.cpp /* 1.0.0 StockExchange NPC Script Description ----------- The script uses data from DB to define 5 different stocks (Name, Worth (in gold coins), Scale (scale of the stock's variations), OwnedRatio(so that players can't acquire more than its worth)). Players can buy and sell shares of those stocks, provided they have bought a licence first. Thanks to Rochet2 for the nice menu look and for helping me clean this script up! */ #include "ScriptPCH.h" #include "Config.h" #include "ScriptedCreature.h" #include "Language.h" #include "time.h" #define STOCKNUMBER 5 #define GOLDTOCOPPER 10000 namespace { class CS_StockExchange : public CreatureScript { public: CS_StockExchange() : CreatureScript("Creature_StockExchange") { } uint32 stock = 0; void OnPlayerTextEmote(Player* player, uint32 textEmote, uint32 emoteNum, ObjectGuid guid) override { } bool OnGossipHello(Player* plr, Creature* creature) override //MAIN MENU { //StockUpdate every 2 minutes QueryResult result = WorldDatabase.PQuery("SELECT `UpdateTime` FROM `stocks` WHERE iD = 0"); if (!result) return false; Field* field = result->Fetch(); uint32 stockPrevTime = field[0].GetUInt32(); uint32 realCurrTime = getMSTime(); uint32 stockDiff = getMSTimeDiff(stockPrevTime, realCurrTime); if (stockDiff >= 120000) { uint32 timeMult; timeMult = stockDiff / 120000; if (StockUpdate(timeMult)) TC_LOG_INFO("server.worldserver", "Stocks have been updated (%u)", realCurrTime); else { TC_LOG_INFO("server.worldserver", "Error while updating stocks..."); } stockPrevTime = realCurrTime; WorldDatabase.PExecute("UPDATE `stocks` SET `UpdateTime` = %u WHERE `iD` = 0", getMSTime()); } WorldSession* session = plr->GetSession(); QueryResult licencetest = CharacterDatabase.PQuery("SELECT `1`, `2`, `3`, `4`, `5` FROM `character_stockdata` WHERE iD = %u", plr->GetGUIDLow()); plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Scroll_08:30:30:-18:0|tWhat are the current exchange rates?", GOSSIP_SENDER_MAIN, 2); plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Misc_Book_11:30:30:-18:0|tHow many unsold shares are there left?", GOSSIP_SENDER_MAIN, 1); if (!licencetest) { plr->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_MISC_NOTE_02:30:30:-18:0|tI'd like to acquire a trade licence.", GOSSIP_SENDER_MAIN, 12, "This will cost you", 400000, false); } else //Player can invest if he has a licence { plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Misc_Coin_02:30:30:-18:0|tI'd like to manage my portfolio.", GOSSIP_SENDER_MAIN, 3); } plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/Ability_Spy:30:30:-18:0|tIt was a pleasure to make business with you.", GOSSIP_SENDER_MAIN, 4); plr->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID()); return true; } bool OnGossipSelect(Player* plr, Creature* creature, uint32 sender, uint32 uiAction) override { int32 amount = 0; plr->PlayerTalkClass->ClearMenus(); WorldSession* session = plr->GetSession(); std::ostringstream message; float ownedratio[5]; int worth[5]; for (int iter = 1; iter < 6; iter++) { QueryResult result = WorldDatabase.PQuery("SELECT `OwnedRatio`,`Worth` FROM `stocks` WHERE iD = %u", iter); if (!result) return false; Field* field = result->Fetch(); ownedratio[iter-1]= field[0].GetFloat(); worth[iter-1] = field[1].GetInt32(); } switch (uiAction) { case 1: //REMAINING SHARES message << "REMAINING SHARES (in gold coins)$BRavenholdt Manor : " << worth[0] * (1 - ownedratio[0]) << "$BBloodsail : " << worth[1] * (1 - ownedratio[1]) << "$BSteamwheedle Cartel : " << worth[2] * (1 - ownedratio[2]) << "$BTheramore Silk Traders : " << worth[3] * (1 - ownedratio[3]) << "$BEldoar'norore : " << worth[4] * (1 - ownedratio[4]); creature->Whisper(message.str(), LANG_UNIVERSAL, plr); plr->PlayerTalkClass->SendCloseGossip(); OnGossipHello(plr, creature); break; case 2: //CURRENT EXCHANGE RATES message << "CURRENT EXCHANGE RATES (in gold coins)$BRavenholdt Manor : " << worth[0] << "$BBloodsail : " << worth[1] << "$BSteamwheedle Cartel : " << worth[2] << "$BTheramore Silk Traders : " << worth[3] << "$BEldoar'norore : " << worth[4]; creature->Whisper(message.str(), LANG_UNIVERSAL, plr); plr->PlayerTalkClass->SendCloseGossip(); OnGossipHello(plr, creature); break; case 3: //MANAGE PORTFOLIO MENU (5-10) plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Helmet_30:30:30:-18:0|tRavenholdt Manor", GOSSIP_SENDER_MAIN, 5); plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Helmet_66:30:30:-18:0|tBloodsail", GOSSIP_SENDER_MAIN, 6); plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Misc_Bomb_03:30:30:-18:0|tSteamwheedle Cartel", GOSSIP_SENDER_MAIN, 7); plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Chest_Cloth_56:30:30:-18:0|tTheramore Silk Traders", GOSSIP_SENDER_MAIN, 8); plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Misc_FireDancer_01:30:30:-18:0|tEldoar'norore", GOSSIP_SENDER_MAIN, 9); plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/Ability_Spy:30:30:-18:0|tBack", GOSSIP_SENDER_MAIN, 10); plr->SEND_GOSSIP_MENU(50002, creature->GetGUID()); break; case 4: //CLOSE GOSSIP plr->PlayerTalkClass->SendCloseGossip(); break; case 5: //MANAGE RAVENHOLDT STOCK stock = 1; plr->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Letter_03:30:30:-18:0|tBuy shares", stock, 0, "How much gold would you like to invest?", 0, true); plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Misc_Coin_16:30:30:-18:0|tSell all shares", stock, 11); plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/Ability_Spy:30:30:-18:0|tBack...", GOSSIP_SENDER_MAIN, 3); plr->SEND_GOSSIP_MENU(50002, creature->GetGUID()); return true; break; case 6: //MANAGE BLOODSAIL STOCK stock = 2; plr->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Letter_03:30:30:-18:0|tBuy shares", stock, 0, "How much gold would you like to invest?", 0, true); plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Misc_Coin_16:30:30:-18:0|tSell all shares", stock, 11); plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/Ability_Spy:30:30:-18:0|tBack...", GOSSIP_SENDER_MAIN, 3); plr->SEND_GOSSIP_MENU(50002, creature->GetGUID()); break; case 7: //MANAGE GOBLIN STOCK stock = 3; plr->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Letter_03:30:30:-18:0|tBuy shares", stock, 0, "How much gold would you like to invest?", 0, true); plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Misc_Coin_16:30:30:-18:0|tSell all shares", stock, 11); plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/Ability_Spy:30:30:-18:0|tBack...", GOSSIP_SENDER_MAIN, 3); plr->SEND_GOSSIP_MENU(50002, creature->GetGUID()); break; case 8: //MANAGE SILKTRADERS STOCK stock = 4; plr->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Letter_03:30:30:-18:0|tBuy shares", stock, 0, "How much gold would you like to invest?", 0, true); plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Misc_Coin_16:30:30:-18:0|tSell all shares", stock, 11); plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/Ability_Spy:30:30:-18:0|tBack...", GOSSIP_SENDER_MAIN, 3); plr->SEND_GOSSIP_MENU(50002, creature->GetGUID()); break; case 9: //MANAGE ELDOAR'NORORE STOCK stock = 5; plr->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Letter_03:30:30:-18:0|tBuy shares", stock, 0, "How much gold would you like to invest?", 0, true); plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Misc_Coin_16:30:30:-18:0|tSell all shares", stock, 11); plr->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/Ability_Spy:30:30:-18:0|tBack...", GOSSIP_SENDER_MAIN, 3); plr->SEND_GOSSIP_MENU(50002, creature->GetGUID()); return true; break; case 11: //TRANSACTION = SELL if (!SellStock(plr, stock, creature)) plr->GetSession()->SendNotification("Error while selling shares... Please contact the administrator."); else { } plr->PlayerTalkClass->SendCloseGossip(); OnGossipHello(plr, creature); break; case 12: //CREATE PLAYER LICENCE ( = ROW IN CHARACTER_STOCKDATA ) if (plr->GetMoney() >= 40*GOLDTOCOPPER) { if (CreateLicence(plr)) { amount = 40*GOLDTOCOPPER; plr->ModifyMoney(-amount); message << "Your licence has been acquired successfully, " << plr->GetName() << "!"; creature->Say(message.str(), LANG_UNIVERSAL, plr); } else plr->GetSession()->SendNotification("Error while registering your licence. Please contact the administrator."); } else { message << "I am afraid you do not have these 40 gold coins, " << plr->GetName() << "..."; creature->Say(message.str().c_str(), LANG_UNIVERSAL, plr); } plr->PlayerTalkClass->SendCloseGossip(); OnGossipHello(plr, creature); break; default: OnGossipHello(plr, creature); break; } return true; } bool OnGossipSelectCode(Player* plr, Creature* creature, uint32 stock, uint32 uiAction, const char* code) override { plr->PlayerTalkClass->ClearMenus(); std::ostringstream message; int32 amount = 0; std::string investment = code; static const char* allowedcharacters = "1234567890"; if (!investment.length() || investment.find_first_not_of(allowedcharacters) != std::string::npos) //If investment was specified incorrectly { plr->GetSession()->SendNotification("Your investment bust be declared using figures.(0123456789)"); } else //If investment was specified properly { //Statements uint32 investmentI = uint32(atol(code)); if (investmentI*GOLDTOCOPPER <= plr->GetMoney()) { QueryResult result1 = WorldDatabase.PQuery("SELECT `OwnedRatio`,`Worth` FROM `stocks` WHERE iD = %u", stock); if (!result1) return false; Field* field = result1->Fetch(); float ownedratio = field[0].GetFloat(); int worth = field[1].GetInt32(); QueryResult result2 = CharacterDatabase.PQuery("SELECT `%u` FROM `character_stockdata` WHERE iD = %u", stock, plr->GetGUIDLow()); if (!result2) return false; field = result2->Fetch(); float initialratio = field[0].GetFloat(); float ratio = static_cast<float>(investmentI) / worth; if (ratio <= (1-ownedratio)) //If enough stocks left { int amount = investmentI*GOLDTOCOPPER; plr->ModifyMoney(-amount); // substract it from player money CharacterDatabase.PExecute("UPDATE `character_stockdata` SET `%u` = %f WHERE `iD` = %u", stock, initialratio + ratio, plr->GetGUIDLow()); WorldDatabase.PExecute("UPDATE `stocks` SET `OwnedRatio` = %f WHERE `iD` = %u", ownedratio + ratio, stock); } else { plr->GetSession()->SendNotification("There are not so many shares for you to acquire, check the remaining shares before trying to invest."); } } else { message << "You do not have so much money, " << plr->GetName() << "."; creature->Say(message.str().c_str(), LANG_UNIVERSAL, plr); } } plr->PlayerTalkClass->SendCloseGossip(); OnGossipHello(plr, creature); return true; } private : bool SendMoneyByMail(ObjectGuid player, uint64 money, int32 stock) { MailSender sender(MAIL_CREATURE, 50038, MAIL_STATIONERY_DEFAULT); std::string stockName; switch (stock) { case 1: stockName = "Ravenholdt Manor"; break; case 2: stockName = "Bloodsail"; break; case 3: stockName = "Steamwheedle Cartel"; break; case 4: stockName = "Theramore Silk Traders"; break; case 5: stockName = "Eldoar'norore"; break; default: return false; } std::ostringstream text; text << "You have requested the General Exchange Hall to sell your shares of the " << stockName << " stock. This has yielded some " << money/GOLDTOCOPPER << " gold coins from which I have deducted " << money/10/GOLDTOCOPPER << " in the sake of various sale and accountancy costs. Enclosed to this letter are " << 9* money/10/GOLDTOCOPPER << " gold coins which come down to you."; MailDraft draft("Share Sale", text.str().c_str()); draft.AddMoney(money * 9 / 10); SQLTransaction letter = CharacterDatabase.BeginTransaction(); draft.SendMailTo(letter, MailReceiver(NULL, player.GetCounter()), sender); CharacterDatabase.CommitTransaction(letter); return true; } bool SellStock(Player* plr, int32 stock, Creature* creature) /*SELL ALL THE SHARES OF THE SPECIFIED STOCK */ { QueryResult result2 = WorldDatabase.PQuery("SELECT `OwnedRatio`,`Worth` FROM `stocks` WHERE iD = %u", stock); if (!result2) return false; QueryResult result1 = CharacterDatabase.PQuery("SELECT `1`, `2`, `3`, `4`, `5` FROM `character_stockdata` WHERE iD = %u", plr->GetGUIDLow()); if (!result1) return false; Field* field = result1->Fetch(); float ratio = field[stock - 1].GetFloat(); if (ratio == 0) { plr->GetSession()->SendNotification("You don't own any share of this stock..."); } else //ONLY IF PLAYER OWNS SOMETHING { Field* field = result2->Fetch(); float newownedratio = field[0].GetFloat()-ratio; int worth = field[1].GetInt32(); if (!SendMoneyByMail(plr->GetGUID(), worth*GOLDTOCOPPER*ratio, stock)) return false; std::ostringstream text; text << "I shall make the arragement for the sale, " << plr->GetName() << ", you will receive your money by mail soon enough."; creature->Say(text.str().c_str(), LANG_UNIVERSAL); CharacterDatabase.PExecute("UPDATE `character_stockdata` SET `%u` = 0 WHERE `iD` = %u", stock, plr->GetGUIDLow()); WorldDatabase.PExecute("UPDATE `stocks` SET `OwnedRatio` = %f WHERE `iD` = %u", newownedratio, stock); } return true; } bool CreateLicence(Player* plr) { SQLTransaction trans = CharacterDatabase.BeginTransaction(); trans->PAppend("REPLACE INTO `character_stockdata` (`iD`, `1`, `2`, `3`, `4`, `5`) VALUES (%u, 0, 0, 0, 0, 0)", plr->GetGUIDLow()); CharacterDatabase.CommitTransaction(trans); return true; } bool StockUpdate(int timeMult) { int32 stockWorth[STOCKNUMBER], newStockWorth[STOCKNUMBER]; int32 stockScale[STOCKNUMBER]; float stockOwnedRatio[STOCKNUMBER]; srand(time(NULL)); // Load stock values from DB for (int itr = 0; itr < STOCKNUMBER; itr++) { QueryResult result = WorldDatabase.PQuery("SELECT `Scale`,`OwnedRatio`,`Worth` FROM `stocks` WHERE iD = %u", itr + 1); if (!result) return false; Field* field = result->Fetch(); stockScale[itr] = field[0].GetInt32(); stockOwnedRatio[itr] = field[1].GetFloat(); stockWorth[itr] = field[2].GetInt32(); } // Dicethrows and Upload values to DB for (int itr = 0; itr < STOCKNUMBER; itr++) { char sign; if (stockWorth[itr] + stockScale[itr]*timeMult > 200000) //Don't go over 200.000 gold coins sign = -1; else if (stockWorth[itr] - stockScale[itr]*timeMult < 0) //Nor below 0 sign = 1; else { int dice = (rand() % 101) + floor(10 * stockOwnedRatio[itr]) - 55; sign = dice / abs(dice); } newStockWorth[itr] = stockWorth[itr] + sign*stockScale[itr]*timeMult; WorldDatabase.PExecute("UPDATE `stocks` SET `worth` = %u WHERE `iD` = %u", newStockWorth[itr], itr + 1); } return true; } }; } void AddSC_Stock() { new CS_StockExchange(); } I know this code ain't perfect but I'm still open for suggestions and critics. Have a nice day.
  23. Welcome to this quick guide. ** DISCLAIMER ** This will NOT downport character models Since many of you have been PMing me desperately asking : "How do you downport this shit man??" Here you go. Enjoy. Tools needed: CascExplorer Adspartan's Multiconverter BfA Listfile (put this in your CascExplorer folder) Thanks to Wungasaurus for the correct listfile ------------------------------------------------------- Enjoy your new models, homeboy
  24. TEXTURE ANIMATION: THE TUTORIAL Hello everyone. In this tutorial I will explain how texture animations work. It's based in WotLK but it's exactly the same for Cata and beyond. We will add a basic texture animation to this test model: (you can download it in the Tools section) This method is quite useful to simulate waterfalls, energy beams, fire and much more. If you want to add an advanced opacity mask, check my other tutorial. TOOLS -PyModelEditor. -My test model. Take in mind that it can be done in 010editor as well, but it's a little more complex. Once you know how texture animations work with PyModelEditor, feel free to explore it a little further creating multiple animation layers with different renderflags or adding them with 010editor. THE TUTORIAL Run PyModelEditor and open the test model (TexAnimPlaneTest.m2). 1- Go to GlobalSequences. 2- Write "1500" (without the quotation marks) and click on "OK". This is the ammount of time our animation will take. 1500 milliseconds is 1,5 seconds. The more milliseconds, the slower the animation will be. 3- Go to Edit UV Animations. 4- Click on "Add" to create a new texture animation. 5- Once the new texture animation is created, go to "Edit Translation". 6- A new window will open. Go to "Add AnimSub". 7- Change the Interpolation to "Linear". 8- Apply the global sequence you just created. 9- Paste this line: 0:{ 0.0 , 0.0 , 0.0 } 1500:{ 0.0 , 1.0 , 0.0 } Now, click on Ok on all the windows you have open to apply the changes. 10- Go to Edit Materials. 11- Select the material of the mesh you want to add the texture animation (in this case, the test model only has one) and assign the texture animation you just created. You can now save your model. If you test the model in-game, you will notice that the texture animation works fine, but there is some kind of dragging bug and it doesn't loop correctly: This happens when the texture is not tiled. To tile the texture, open the model with PyModelEditor, go to Edit Textures and check both "X-Wrap" and "Y-Wrap": This should fix the problem! (you can also do it in 010editor by changing the TextureFlag to "3"). TL;DR VIDEO UNDERSTANDING THE ANIMATION SEQUENCE Now that you managed to make your own texture animation, you may be wondering how to reverse the animation, or move it sidewards instead of upwards. The key is in the animation line we added in PyModelEditor: As you can see, each line has 4 segments: time frame, horizontal movement, vertical movement and an unused stack of data that we will never touch. In frame 0, your texture stays on its default pose (0, 0, 0), but in frame 1500 it moves vertically (0, 1, 0) and goes back to where it started (it loops). "1.0" is the ammount of times the texture loops. If you change it to "0.5", the texture will start moving but will return to its defult state when it has traveled half the texture. If you replace "1.0" with "-1.0", the texture will go downwards instead of upwards. So, basically, "1500:{ 0.0 , 1.0 , 0.0 }" means that in 1.5 seconds your texture will loop vertically once. Another example: "3000:{ 0.0 , -1.0 , 0.0 }" means that in 3 seconds the texture will loop vertically once (but downwards). If you put "1.0" in the horizontal segment instead of the vertical segment, you'll see something like this: And if you want it to move to the corners, you simply need to put "1.0" (or -1.0 if you want it to go to the opposite direction) in both the horizontal and the vertical segment: CONCLUSION Texture animation is quite easy once you know how the numbers work. You just need some practice and experimentation to master it. If your model has many .skin files, PyModelEditor won't manage the texture animations so well. The best tool for those cases is 010editor. I recommend you to start with small models first. This tutorial was requested many times. Hope you find it useful.
  25. Please help with retroporting items from the set I can easily retroport the helmet and shoulder's because they have m2, anim and BLP files, and are not tied to the geogrid of the character model. What do I need to do in order to transfer the rest of the items from the set that are tied to the character's geogrid? Do I have to combine item and character models from WOTLK in Blender?