Deleted User

Inactive Members
  • Content Count

    87
  • Joined

  • Last visited

Everything posted by Deleted User

  1. Before typing out the rest of this post, I’d like to thank Tatsu of AC Web for posting, and resolving, his issue which taught me about this method of making creatures randomly wander. If you know of any additional information, notice an error, etc.. just comment and I’ll do my best to keep this post updated. In this post I will assume that you know enough to be able to execute SQL queries on your database. Just in case anyone wants to know what I’m running: Windows 8, x64 — HomeDebian 7, x64 — ServerTrinityCore — Latest version as of 20/June/2015WoTLK 3.3.5aNotes: There are four fields in the creature table of the world database that we will be dealing with. The fields are as follows. spawndist – The distance, in yards, in which a creature can wander from it’s spawn point.MovementType – The type of movement of the creature. This should always be set to 1 to specify that the creature should wander randomly.id – The ID of the creature from the creature_template table.guid – The unique ID of a single creature. This can be found by selecting a creature in-game and using the .npc info command.There are two, slightly, different queries which you can use, depending on what you wish to do. The first query will set all creatures, of the specified ID, to wander randomly in the specified spawndist radius. The second query will set a single creature, of the specified GUID, to wander randomly in the specified spawndist radius. To use the queries, just replace 40 and 90201 with whichever values you require. Query #1:. Set all creatures, who share the specified ID, to walk randomly within the circle of spawndist.UPDATE creature SET spawndist = 40, MovementType = 1 WHERE id = 90201; Query #2: Set a single creature, with the specified GUID, to walk randomly within the circle of spawndist.UPDATE creature SET spawndist = 40, MovementType = 1 WHERE guid = 90201;
  2. Before I start typing out this guide, I will admit that I’m no expert on DBC editing and that some of this information may be incorrect. If you know of any additional information, notice an error, etc.. just comment and I’ll do my best to keep this thread updated. There are a few things that you’ll need before editing a DBC file. I’ve seen many different programs, and even more people recommending each program over every other program, but the vast majority either didn’t work or corrupted the DBC files. I’ll only be recommending the programs that work for me. So, before you continue reading, please download this; it contains everything that I use. These programs will only work on Windows. Just in case anyone wants to know what I’m running: Windows 8, x64 — HomeDebian 7, x64 — ServerTrinityCore — Latest version as of 20/June/2015WoTLK 3.3.5aAssuming that you’ve followed my instructions to download the tools that we’ll be using in this tutorial, lets begin! Tip: When editing any files that can be packed into an MPQ file, you can just go into your /Data/enUS/ folder and create a new folder, lets call it “patch-enUS-n.mpq”, and place all of the files that you would place into the MPQ file in there. This is extremely useful if you don’t want to keep on creating a new MPQ file every time you go to test new edits. When you release the edits you should place them into an MPQ file as it hides everything from the average user. Credits to MyLilSuccy for this information. If you already know how to edit DBC files, which I’m going to assume that most of the people reading this don’t, then you can skip to the end of this post and check out my notes on the DBC files. Although I would recommend doing a quick read-through of the tutorial. The rest of this will be a simple explanation of how to alter the Male Human Warrior’s starting gear. Although this example is fairly specific, it does cover everything you’ll need to edit any race, class, and gender combination. Now that you’ve downloaded the tools and have a folder of clean, unedited, DBC files to work with and revert to in-case of any unforeseen errors, lets begin! Go to the folder containing your DBC files, copy the CharStartOutfit.dbc file into the /Tools/DBCUtil/ folder, and then double-click on DBCUtil.exe. Now go to the /Tools/CSVed/ folder, double-click on CSVed.exe, select File then Open… and select /Tools/DBCUtil/CharStartOutfit.dbc.csv. To edit a record in CSVed you simply need to double-click on the row and then click the Apply Changes button in the bottom-left corner of the edit form window. Before we go any further I must mention that the CharStartOutfit.dbc file is an utter mess and because of this I will be writing the rest of this tutorial in the belief that you are changing all of the starting outfits for all of the races and their class/gender combinations. The first thing that you should do in CSVed is to select all of the records, then right-click on a record, and delete all of them. This will allow you to create a simple, easy to read, and easy to edit file to replace the mess that Blizzard has left us with. I will be using some customized gear for this tutorial, as it was written while I was editing the starting gear on my server. To avoid any confusion and to allow you to easily follow this tutorial, here are the queries for the items we will be using: INSERT INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `flagsCustom`, `VerifiedBuild`) VALUES (80001, 0, 0, -1, 'Pesant\'s Vest', 52958, 1, 0, 0, 0, 1, 1, 4, -1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, '', 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0); INSERT INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `flagsCustom`, `VerifiedBuild`) VALUES (80002, 0, 0, -1, 'Pesant\'s Boots', 9929, 1, 0, 0, 0, 1, 1, 8, -1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, '', 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0); INSERT INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `flagsCustom`, `VerifiedBuild`) VALUES (80003, 0, 0, -1, 'Pesant\'s Pants', 14450, 1, 0, 0, 0, 1, 1, 7, -1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, '', 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0);I haven’t tested this query as it’s a direct export from the database on my server, but it should work and if it doesn’t just tell me. Now that you’ve got the three items we’ll be using imported into your database and you have an empty CharStartOutfit.dbc file open in CSVed we can begin inputting our data. The first things we need to enter is a unique row ID in the first column, race ID in the second column, class ID in the third, gender ID in the fourth, and to leave the fifth column as zero. If you’re looking for the race and class IDs you can find them near the end of this post. In this case we will be entering 1, 1, 1, 0, and 0 in each of the first five columns. These numbers mean that this record is the first record which represents a Human Warrior who is Male. For the next three columns we will input 800001, 800003, and 800002. These are the entry IDs of the chestpiece, pants, and boots of the set our Male Human Warrior will start with. These IDs can be in any order, just write down which order you put them in for future reference. Columns nine to twenty-nine will all have -1 as their value as we aren’t going to allow the Male Human Warrior to start with anything other than a chestpiece, pants, and boots. Columns thirty to thirty-two will define which pieces of gear will show up on the character creation screen. Because of this you do not need to list the display ID of every single item the character starts with. Because the Male Human Warrior will start with a chestpiece, pants, and boots we will be listing all three display IDs. I’ve prepared four different queries for you to use with your database to find the display IDs of whichever items you’re using. Pick one of them and where it says to put numbers just input the correct numbers and run the query. /* With the item name: */ SELECT id, name, displayid FROM item_template WHERE entry = putItemEntryIDHere; SELECT id, name, displayid FROM item_template WHERE entry BETWEEN putLowerItemEntryIDHere AND putHigherItemEntryIDHere; /* Without the item name: */ SELECT id, displayid FROM item_template WHERE entry = putItemEntryIDHere; SELECT id, displayid FROM item_template WHERE entry BETWEEN putLowerItemEntryIDHere AND putHigherItemEntryIDHere;Because we’re using the custom items I’ve supplied we will enter 52958, 14450, and 9929 in each of the columns from thirty to thirty-two. The rest of the display ID columns from thirty-three to fifty-three will contain -1 as we have no other display IDs to enter. The final numbers to enter are 4, 7, and 8 in columns fifty-four to fifty-six. These three numbers say that the items in columns six to eight and the display IDs in columns thirty to thirty-two represent a chestpiece, pants, and boots. You can find more information on these values near the end of this post. Now that you’ve finished setting up the Male Human Warrior you can click File and then Save. Now go into /Tools/DBCUtil/, delete CharStartOutfit.dbc if it still exists, and then drag CharStartOutfit.dbc.csv onto DBCUtil.exe to create the new CharStartOutfit.dbc. This file needs to be copied into your /Server/bin/data/dbc/ folder as well as added to a .MPQ file that all of your users should be given. If you require instruction on how to create a new MPQ file you can refer to this tutorial. Your server doesn’t need to be restarted after adding the CharStartOutfit.dbc to the /Server/bin/data/dbc/ folder, but your client will need to be restarted after placing the MPQ file into your /WoW/Data/ folder as far as I know. Below are a few images to show the finished product of all this work: CharStartOutfit.dbc Column Information: Column 1 – This is a unique ID of the row.Column 2 – This is the Race ID.Column 3 – This is the Class ID.Column 4 – This represents either Male (0) or Female (1).Column 5 – Unknown. Leave this as 0.Columns 6 to 29 – The entry IDs of the items this race/class/gender combination will start with.Columns 30 to 53 – The display IDs of the items this race/class/gender combination will start with. This is only used on the character creation screen so you only need to enter the display IDs of the armor/weapons.Columns 54 to 77 – The InventoryType of each item.When entering in the display IDs and InventoryTypes of each item you must write them in the exact same order as the items appear in columns 6 to 29. InventoryTypes: NonEquip = 0Head = 1Neck = 2Shoulders = 3Body = 4Chest = 5Waist = 6Legs = 7Feet = 8Wrists = 9Hands = 10Finger = 11Trinket = 12Weapon = 13Shield = 14Ranged = 15Cloak = 16TwoHandedWeapon = 17Bag = 18Tabard = 19Robe = 20MainHandWeapon = 21OffHandWeapon = 22Holdable = 23Ammo = 24Thrown = 25RangedRight = 26Quiver = 27Relic = 28Class IDs: Warrior = 1Paladin = 2Hunter = 3Rogue = 4Priest =5Deathknight = 6Shaman = 7Mage = 8Warlock = 9Druid = 11Race IDs: Human = 1Dwarf = 2Night Elf = 3Undead = 4Tauren = 5Gnome = 6Troll =7Blood Elf =8Draenei =10Orc = 11
  3. The links in the tutorial above may be out of date. If they are, then you can most-likely find an up-to-date link to the blog here.
  4. Before you decide to make a vendor there are a few important things that you need to figure out. These important bits of information include: What items will the vendor sell.Are any of the items rare or available in limited quantity?If any of the items are rare or available in limited quantity, how often should the vendor restock those items?In what order should the items be displayed in the vendor panel?Are any of the items being sold custom?Although these are all quite obvious, the last point did manage to throw me for a loop momentarily. If you’re using custom items and you’ve edited the item.dbc file, placed it within an MPQ in your data folder, and they still show up as red question marks in the vendor panel; then you need to upload the item.dbc file into /bin/data/dbc/ on your server and restart worldserver. Just in case anyone wants to know what I’m running: Windows 8, x64 — HomeDebian 7, x64 — ServerTrinityCore — Latest version as of 20/June/2015WoTLK 3.3.5a Assuming that you already have both the NPC you’ll be using as a vendor and the items that the vendor will be selling created and ready-to-use, we can begin. You will first need to run SELECT * FROM creature_template WHERE entry = vendorNPCEntryID; on your database to view the data for the vendor NPC. Now that the record for the vendor NPC is up, you only need to edit the npcflag field and set it to 128. The NPC will now be recognized as a vendor. Now use the following query to add an item to the vendor NPC’s vendor panel. /* To insert a single item into the vendor's vendor panel use this query.*/ INSERT INTO npc_vendor (entry, slot, item, maxcount, incrtime, ExtendedCost) VALUES (0, 0, 0, 0, 0);/* To insert multiple items at once, just chain the values together as seen below. This example allows for two items to be added to the vendor's vendor panel. */ INSERT INTO npc_vendor (entry, slot, item, maxcount, incrtime, ExtendedCost) VALUES (0, 0, 0, 0, 0, 0, 0), (0, 0, 0, 0, 0, 0);Now that you’ve created a vendor NPC and populated it’s vendor panel with items to sell, you’ll need to restart worldserver then you’re ready to go! Field Explanations: entry – The entry ID of the vendor NPC. This is under the entry field of the creature_template table.slot – The position in the vendor panel where this item will be located. As you can see in the image below, the slots are numbered left-to-right and top-to-bottom. This pattern repeats over all pages, but the numbers will continue incrementing. item – The entry ID of the item being sold. This is under the entry field of the item_template table.maxcount – The maximum number of items carried by the vendor at any time. If you want the vendor to carry an unlimited number of the item then set this to 0 else set it to any positive number. In the image below the maxcount value is circled. incrtime – The time, in seconds (not milliseconds!), between restocks. As an example of how this is used… If maxcount is set to 4, incrtime set to 30, and the BuyCount field on the item in the item_template table is set to 2 then the vendor restocks 2 of the item every 30 seconds up to a total of 4 items.ExtendedCost – The value here corresponds to the ID in ItemExtendedCost.dbc and that ID controls the item’s non monetary price, be it honor points, arena points, different types of badges or any combination of the above. (Taken from the TrinityCore documentation)
  5. The links in the tutorial above may be out of date. If they are, then you can most-likely find an up-to-date link to the blog here.
  6. Before I start typing out this guide, I will admit that I’m no expert on SAI and that some of this information may be incorrect. If you know of any additional information, notice an error, etc.. just comment and I’ll do my best to keep this post updated. In this tutorial I will assume that you know enough to be able to insert a new record(row) into a database table and how to edit that row. If anything seems unclear or incorrect, just post below and I’ll look into it. There are a few things that you’ll need before creating and editing your smart scripts. I’ve seen a handful of different programs for editing smart scripts, but only one of them seems to be updated and does everything that I require. So, before you continue reading, please download this; this is the SAI editor which I’ve found to work best. Just in case anyone wants to know what I’m running: Windows 8, x64 — HomeDebian 7, x64 — ServerTrinityCore — Latest version as of 20/June/2015WoTLK 3.3.5aCreating the Event: Assuming that you’ve opened up whichever program you prefer to use when editing your database, open the game_events table of the world database and insert a new record. When filling out the record you can refer to the bullet points below for a brief description of each of the fields. When filling out the start_time and end_time you can’t use zero for the month or day, it needs to be at least the first day of the first month. entry – A unique ID for the record.start_time – The date and time when the event will first run. The event will always run continuously from start_time to end_time.end_time – The date and time when the event will stop running. The event will never run after this date/time is reached.occurrence – How often the event will occur, in minutes. If this is set to, for example, 6 then the event will run every 6 minutes.length – How long the event will run for, in minutes. As far as I know, this doesn’t really matter for SAI so set this to 1.holiday – The ID of a Holiday from the Holiday.dbc file. This is sent to the client to update the in-game calendar. As far as I know, this doesn’t really matter for SAI so set this to 0.description – A description of the event.world_event – I’m not entirely sure how this is used, but it doesn’t matter for SAI as far as my tests have shown. Set this to 0.Example of a completed record: INSERT INTO `game_event` VALUES (1, '2014-01-01 00:00:00', '2020-01-01 00:00:00', 2, 1, 0, 'Pastor Moore - Speech', 0, 0); Creating the Script: After creating the record in game_event you’ll need to open up the SAI-Editor to create the SAI script. Before we continue I’ll mention my preferred settings: Valkryst’s SAI-Editor Preferences: Lock smart_scripts.id — CHECKEDList actionlists too — CHECKEDUse phase colors — CHECKEDShow basic information — CHECKEDAllow changing static info — UN-CHECKEDUse permanent tooltips — CHECKEDNow that you have successfully created a record in the game_event table for the event, you’re ready to setup a script that runs off of the event. You’ll first need to open SAI-Editor and, in the field labeled Entry or guid:, type the entry ID of whichever NPC you want to test and then press ENTER. An error box should pop-up, but you only need to click OK. Now click the New line button, set the Event drop-down menu to EVENT_GAME_EVENT_START, set the Action drop-down menu to ACTION_PLAY_EMOTE, and set the Target drop-down menu to TARGET_SELF. On the right-hand side of the screen you’ll see a section three tabs which we will now fill-out. In the Event tab set the Event field to whatever the entry of your event is and in the Action tab set the Emote Id field to 11 so that the NPC will play the laugh emote when the event occurs. Now click the Generate comments button and then the Generate SQL button and then execute the script. Anytime you create a script you’ll need to restart worldserver before you can go in-game and test the script. If you’re updating an existing script then you can use the .reload smart_scripts command, but I personally restart no-matter what just to be on the safe side. After worldserver is restarted you’ll need to go in-game, spawn the NPC you’re testing, and type .event start eventID. If you’ve done everything correctly, then the NPC should laugh after you run the command. Before I end this tutorial I feel it best to mention that any complex questions you have should be asked in this thread on the official Trinity forums. I also suggest that you always use this page as a reference when creating any and all of your SAI scripts.
  7. The links in the tutorial above may be out of date. If they are, then you can most-likely find an up-to-date link to the blog here.
  8. Although this is quite simple, I felt that I should release it for those who may not have the time required to be able to setup something like this. I cannot fully support any questions regarding php as I only know enough to get by, but I can answer most questions regarding HTML and CSS and some Bash questions. If anyone notices an error in this guide or even some piece of code that can be optimized/changed, just comment and I’ll do my best to keep this thread updated. Special thanks to my friend Tiq for helping me with all of the, admittedly, stupid errors and bugs that I encountered. Windows 8, x64 — HomeDebian 7, x64 — ServerTrinityCore — Latest version as of 25/Febuary/2015WoTLK 3.3.5aAs this guide is quite a bit more advanced than the simple DBC editing guides I’ve written before, I’m going to assume that anyone reading this has at least a basic knowledge of HTML, CSS, Bash, Linux have a web server up and running with php, are running MySQL for your servers database, and have a webpage already ready for the code I’m going to supply you with. I will not be going too in-depth with this guide as it only requires a few simple steps. Before we go any further I must note that this tutorial is for Trinity only. The first thing you should do is navigate to, or create, a folder where you’ll be storing both the script to gather the information required and the PHP file generated by the script. In this case I’ll be using /path/to/valks/files/. Wherever you see /path/to/valks/files/, you’ll need to replace it with the path to the directory you’re using. I suggest saving the script file as UpdateStatistics.sh. The generated PHP file will be named currentStatistics.php. #!/bin/bash # Set the MySQL login info for ease of use: mysqlUsername="putMySQLUsernameHere"; mysqlPassword="putMySQLPasswordHere"; # Get the total number of, currently online, players and then get the total number of players. onlinePlayers=$(mysql --user=$mysqlUsername --password=$mysqlPassword --database=auth --skip-column-names --execute="SELECT COUNT(online) FROM account WHERE online = 1;"); totalPlayers=$(mysql --user=$mysqlUsername --password=$mysqlPassword --database=auth --skip-column-names --execute="SELECT COUNT(id) FROM account;"); # Get the unix time of when the server was last launched, and then get how many seconds the server # has been online for, and then get the current unix time. starttime=$(mysql --user=$mysqlUsername --password=$mysqlPassword --database=auth --skip-column-names --execute="SELECT MAX(starttime) FROM uptime;"); uptime=$(mysql --user=$mysqlUsername --password=$mysqlPassword --database=auth --skip-column-names --execute="SELECT uptime FROM uptime WHERE starttime = (SELECT MAX(starttime) FROM auth.uptime);"); currentUnixTime=$(date +%s); ##############################################################################33 # Create a string for the current number of online players. stringA="There are currently $onlinePlayers / $totalPlayers players online."; # Calculate the last time when the server was online based on starttime + uptime. # Then subtract that from the current time and then decide whether or not to say # if the server is online. tempInt=$((starttime + uptime)); tempInt=$((currentUnixTime - tempInt)); tempInt=$((tempInt / 60)); # If the server was online less than 1 minutes ago then say that it's online. # The uptime field of the uptime table updates every 10 minutes normally, but # you can change that in worldserver.conf. Mine is set to update every minute. stringB="Server Status: <span style=\"color: "; if [ $tempInt -gt 2 ] then stringB+="#FF0000\">Offline</span>"; # The hex value is for the color to display the word "Offline" as. else stringB+="#00FF00\">Online</span>"; # The hex value is for the color to display the word "Online" as. fi # Construct the final String to be displayed on the webpage. stringC="<p style=\"color:#FFCC00;text-align:center\">$stringA || $stringB</p>"; # Output the constructed HTML into the specified php file. echo "$stringC" > /path/to/valks/files/currentStatistics.phpAfter you’ve finished creating your UpdateStatistics.sh file, you’ll need to do chmod a+x UpdateStatistics.sh to give it the necessary permissions to run. Now type crontab -e and enter the following line at the bottom of the file and save, but remember to change the path to point to your UpdateStatistics.sh file. The cronjob line below will run once per-minute, but you can change that to your liking. * * * * * /path/to/valks/files/UpdateStatistics.sh The next step is to get the generated string to appear on your webpage. Just enter the following line into your PHP webpage wherever you want the string to show up. If you have any issues with it not showing up then try removing the first slash at the beginning of the path. <?php include("/path/to/valks/files/currentStatistics.php"); ?> Now for the final step. Open up your worldserver.conf file and set UpdateTimeInterval to 1. This will make sure that the script always has the latest data as-of a minute ago. # # UpdateUptimeInterval # Description: Update realm uptime period (in minutes). # Default: 10 - (10 minutes) # 1+ UpdateUptimeInterval = 1 After you’ve finished everything above, you should have a string that looks something like the following picture. If you wish to edit the colors of the text then just edit the hex color-values in the Bash script.
  9. The links in the tutorial above may be out of date. If they are, then you can most-likely find an up-to-date link to the blog here.
  10. Although this issue has been discovered, discussed, and solved, there seems to only be one tutorial, which I’m unable to locate anymore, that detailed a permanent fix to the old red question mark bug on custom items. This tutorial will pretty-much be a rewrite of that tutorial, but I’ll be, hopefully, describing the process a bit more clearly. This bug is always present and causes all custom items to appear with a red question mark icon instead of their proper icon and stops the player from being able to properly use the item in most cases. In this tutorial I will be explaining, step-by-step, how to grab the necessary data from your database and add it into the Item.dbc file. This tutorial assumes that you know enough to pack the finished DBC file into an MPQ, but if you don’t know how to do it then you can refer to this tutorial. It also assumes that you know enough SQL to be able to edit the provided queries to select your custom items. The final thing that this tutorial assumes is that you use HeidiSQL and know how to use it. The first step to fixing the red question mark bug is to open up HeidiSQL, log into your server’s MySQL and select the world database. Now run a query similar to the ones provided below. Your query needs to select the same fields, in the same order, as I have done. SELECT entry, class, subclass, SoundOverrideSubclass, Material, displayid, InventoryType, sheath FROM item_template WHERE entry BETWEEN 80000 AND 100000;After the query finishes running and all of the result data is shown, click on one of the rows and press CTRL + A. Now that all of the rows are selected, right-click on any of the rows and select Export grid rows, then make sure your options are as follows. Output target – Copy to clipboardOutput format – Delimited textRow selection – CompleteOptions – Uncheck the “Include column names” box.Options – Set “Field separator” to be a comma.Options – Set the “Encloser” to nothing. Just leave the field blank.Options – Set the “Line terminator” to “\r\n”, without the quotation marks.Options – Set the “NULL value” to “\N”, without the quotation marks.When you’ve finished setting the correct options, click the OK button. Now, place your Item.dbc file into /Tools/DBCUtil/ and double-click on DBCUtil.exe. This will convert the Item.dbc file into CSV format and output a file named Item.dbc.csv, this is the file that we will be editing. Proceed to the /Tools/CSVed/ folder and double-click CSVed.exe. After the program opens, press CTRL + O, and open the Item.dbc.csv file. When the file opens, scroll to the bottom, right-click on the last record, and select Paste Record(s) below Cursor Pos, and then press CTRL + S and exit the program. The final step, as I am omitting the MPQ portion of the tutorial as previously stated, is to go into /Tools/DBCUtil/, delete Item.dbc, and drag Item.dbc.csv onto DBCUtil.exe to convert it back into a new Item.dbc file with all of your changes.
  11. The links in the tutorial above may be out of date. If they are, then you can most-likely find an up-to-date link to the blog here.
  12. Before I start typing out this guide, I will admit that I’m no expert on SAI and that some of this information may be incorrect. If you know of any additional information, notice an error, etc.. just comment and I’ll do my best to keep this post updated. There are a few things that you’ll need before creating and editing your smart scripts. I’ve seen a handful of different programs for editing smart scripts, but only one of them seems to be updated and does everything that I require. I’ll only be recommending the programs that work for me. So, before you continue reading, please download this and this; the first link contains the majority of programs which I most commonly use, and the second is the latest version of the SAI editor which I’ve found to work best. These programs will only work on Windows as far as I know. Just in case anyone wants to know what I’m running: Windows 8, x64 — HomeDebian 7, x64 — ServerTrinityCore — Latest version as of 20/June/2015WoTLK 3.3.5aIn this tutorial I will assume that you have knowledge of how to view the contents of both the Emotes.dbc and EmotesText.dbc files which we will be using. If you do not know how to do this you may view these converted files. The Emotes.dbc file contains all of the emotes for player characters and the EmotesText.dbc file contains all of the emotes for non-player characters, keep this in mind when working with emotes and SAI! Assuming that you have opened up SAI-Editor, logged in, and are ready to edit a human NPC, using the id 80000, which you have already created, lets begin. Valkryst’s SAI-Editor Preferences: Lock smart_scripts.id — CHECKEDList actionlists too — CHECKEDUse phase colors — CHECKEDShow basic information — CHECKEDAllow changing static info — UN-CHECKEDUse permanent tooltips — CHECKEDThe first thing you should do is set the Source type: to SCRIPT_TYPE_CREATURE and then type in the ID of the NPC we’re working with, which is 80000, into the Entry or guid: field. This tells the program and script that this script should apply to all creatures that have the ID 80000. The next step is to set the event, action, and target, but before you do this you need to click the New Line button to create a new script piece. In the case of this tutorial we will be using EVENT_RECEIVE_EMOTE, ACTION_PLAY_EMOTE, and TARGET_SELF. These are all fairly obviouss, but I will note that the third one tells the NPC to do the action, ACTION_PLAY_EMOTE, on itself. Now that we have our Dynamic script information: set, we can move onto the script Parameters. As you can see there are three tabs under the parameters section and each handles a separate piece of the script. In the Event tab you will set the Emote id to whatever emote you want the NPC to respond to. The ID for this emote can be found in the EmotesText.dbc file, but for this tutorial just put in 5 for the Emote id. The next two fields, RepeatMin & RepeatMax, can be set to 5000. I haven’t fiddled around too much with the repeat fields, but my best guess is that they control the amount of time, in milliseconds, until the NPC will respond to the emote again. If my guess it true, then setting this too low and having a lot of players interacting with the NPC through emotes may cause some lag on your server. Now switch to the Action tab and enter 66 for the Emote id. You can find the proper IDs for the Emote id field of the Action tab in the Emotes.dbc file. Because the target is set to TARGET_SELF, we don’t need to worry about the Target tab. One last thing to note before we finish up this SAI entry… If you use the Generate comments button with an emote script such as this, it will only comment something along the lines of “Receive emote 5 – Play emote 66”. Because of this I strongly recommend using your own comment writing convention. For this sort of SAI entry I would write “NPC NAME – Received Emote APPLAUD – Play Emote SALUTE”. After you write up your comment just click the Generate SQL button, then Execute script, and finally click Ok and exit the program. Tip: When creating a new SAI entry, I believe you need to restart world for it to be used. After that you can edit the entry all you like and then use the .reload smart_scripts command to test your edits. If something doesn’t seem to work after using the .reload command, just to a server restart and it may begin working again. If you wish to add another emote response just follow the tutorial, but remember to leave the Link to: and Link from: fields of the Dynamic script information section as it’s default value and None respectively. This just says that each SAI entry can be triggered without requiring the previous SAI entry being executed. Before I end this tutorial I feel it best to mention that any complex questions you have should be asked in this thread on the official Trinity forums. I also suggest that you always use this page as a reference when creating any and all of your SAI scripts.
  13. The links in the tutorial above may be out of date. If they are, then you can most-likely find an up-to-date link to the blog here.
  14. The links in the tutorial above may be out of date. If they are, then you can most-likely find an up-to-date link to the blog here.
  15. Before typing out the rest of this post, I will note that this is about removing gameobjects which have the same displayId as one another from the database. Not everyone will have a good reason to do this, so if you’re not very experienced in editing the database, then do not attempt to remove the duplicate gameobjects. If you know of any additional information, notice an error, etc.. just comment and I’ll do my best to keep this post updated. In this post I will assume that you know enough to be able to execute SQL queries on your database. Just in case anyone wants to know what I’m running: Windows 8, x64 — HomeDebian 7, x64 — ServerTrinityCore — Latest version as of 20/June/2015WoTLK 3.3.5aAfter using a slightly slower version of the query below, I’ve come up with an improved form that will do all of the work that had previously needed to be done manually. Simply execute the set of queries below as many times as you want and for any objects, where two or more objects use the same displayId, all duplicate objects will be deleted and all reference to those objects in the gameobjects table will be set to use the remaining gameobject. Don’t worry about objects disappearing in the game world, the query replaces all objects that use the same displayId with the object whose entry and displayId you are entering into the set of queries. This is really only useful for a highly customized server as any normal server would find a lot of the in-game objects broken or not working properly after deleting the duplicates as many of them have slightly different sets of data which may leave chairs unusable unless manually fixed, objects unusable unless manually fixed, etc… SELECT @entry := entry, name, @display := displayId FROM gameobject_template WHERE displayId = (SELECT displayId FROM gameobject_template GROUP BY displayId ORDER BY COUNT(*) DESC LIMIT 1); UPDATE gameobject JOIN gameobject_template ON gameobject.id = gameobject_template.entry SET gameobject.id = @entry WHERE gameobject_template.entry != @entry AND gameobject_template.displayId = @display; DELETE FROM gameobject_template WHERE displayId = @display AND entry != @entry;You will need to run the three queries above a few thousand times to eliminate all of the duplicate objects in the database. I simple copy-pasted the three queries over and over and over until I felt there were enough and then ran them all at once. It took a few minutes, but all of the duplicate objects were removed.
  16. The links in the tutorial above may be out of date. If they are, then you can most-likely find an up-to-date link to the blog here.
  17. Because so many people have requested a script to announce logins and logouts over the years, and due to a lack of simple scripts that I could find, I’ve written up a very simple script that announces whenever a player logs on or off. I’ll assume that anyone looking at this already knows how to add a Lua script to their server, so here’s the script. local function OnEnterWorld(event, player) local isHorde = player:IsHorde() local playerName = player:GetName() if(player:IsGM()) then SendWorldMessage("|Hplayer:" .. playerName .. ":1:WHISPER:" .. string.upper(playerName) .. "|h[" .. playerName .. " - GM]|h has logged in.") elseif(isHorde == true) then SendWorldMessage("|Hplayer:" .. playerName .. ":1:WHISPER:" .. string.upper(playerName) .. "|h[" .. playerName .. " - Horde]|h has logged in.") elseif(isHorde == false) then SendWorldMessage("|Hplayer:" .. playerName .. ":1:WHISPER:" .. string.upper(playerName) .. "|h[" .. playerName .. " - Alliance]|h has logged in.") end end local function OnExitWorld(event, player) local isHorde = player:IsHorde() local playerName = player:GetName() if(player:IsGM()) then SendWorldMessage("[" .. playerName .. " - GM] has logged out." ) elseif(isHorde == true) then SendWorldMessage("[" .. playerName .. " - Horde] has logged out." ) elseif(isHorde == false) then SendWorldMessage("[" .. playerName .. " - Alliance] has logged out." ) end end RegisterPlayerEvent(3, OnEnterWorld) RegisterPlayerEvent(4, OnExitWorld)There is definitely some room for improvement on the script, so if you have any suggestions, just leave a comment below.
  18. The links in the tutorial above may be out of date. If they are, then you can most-likely find an up-to-date link to the blog here.
  19. Hey, After a few days spent working on this program for use by my server’s development team, I’ve got it to the point where I’m ready to release it. All of the features that I’ve planned to add to the program are currently working, as far as I’ve tested. If you have any problems during the setup, have suggestions for the program, find a bug, etc… then just comment below.Rough Description This tool allows for easy insertion and updating of both the creature_template_outfits table used by Rochet2’s DressNPCs core modification which enables the creation of custom NPCs and the creature_equip_template table. The program allows for a quick workflow to insert, or update, as many NPCs as you desire. An earlier method also works, but it’s much slower compared to using this program.How to SetupLuckily there is very little, if any, setup required to get this program running. The three requirements are as follows. RequirementsYou must have Java 8 installed to launch the program.You must have access to an account with nearly full permissions to the creature_template_outfits and creature_equip_template tables of the world database.You must have Rochet2’s DressNPCs core modification compiled into your core and setup on your database.. You can download the tool from here and I highly recommend that you read my basic tutorial on how to create a DressNPC here. The post currently only covers the old method of creating the DressNPCs using a stored procedure/query, but you can follow that tutorial and just enter the values into the program instead of the SQL query. Your server does not require the stored procedure linked in that tutorial. The Interface Because the program is still being worked on and fixed up here-and-there, the interface may undergo some changes as development progresses. At the moment it contains all initially conceived features. In the image below you can see the initial interface of the DressNPCs Screen. The File dropdown menu allows you to save, or load, the currently entered data. You also have the option of loading data from the database with the Import option. Please be warned that you cannot save your data unless it contains no errors. This was an intentional feature and is not a bug. The Function dropdown menu allows you to switch to the second part of the DressNPCs Handler tool which allows you to create or update equipment sets for any NPCs that you create. I won’t go into detail on how equipment sets work, but you can learn more here. In the Weapon Handler Screen you can edit up to four equipment sets at once. For more information on how this and the rest of the program works, please read the readme file included with the program. The Function dropdown menu allows you to switch back to the DressNPCs Screen. The Settings File Within the settings file you’ll find the saved server address, MySQL port, characters database name, MySQL username, and the interface language. All of these values can be manually edited and it’s perfectly fine to just delete the settings file and select everything again through the interface when you launch the program. The only value in the settings which cannot be changed through the GUI after selecting it is the language. If you wish to change the GUI language, then you’ll need to either delete the settings file and launch the program to select it again or change it in the settings file. Supported Languages If you wish to contribute a translation in your native language, then please contact me on Skype for the latest files to be translated. It will take at-least an hour of your time to translate everything required. EnglishGermanExamples of Three Settings Files serverAddress=example.com port=3306 databaseName=characters username=root language=EnglishserverAddress=127.0.0.1 port=3306 databaseName=serverA_characters username=root language=EnglishserverAddress=123.456.78.9 port=1704 databaseName=characters username=trinity language=German Misc InformationThe program should support any version that Rochet2’s DressNPCs core modification, but I have only ever tested it on 3.3.5a and I’m not even sure if he has added support for other core versions. The current program version is 1.3.CreditsRenan ~ Helped to test an earlier version of the program and made a few suggestions on how to better the interface design.Kaev ~ Supplied the German translation for the program.
  20. The links in the tutorial above may be out of date. If they are, then you can most-likely find an up-to-date link to the blog here.
  21. Before I start typing out this guide, I must note that this tutorial is only on how to use the patch to create new NPCs and that it requires the use of the stored procedure found here. I will not be explaining how to compile the DressNPCs patch into your core. If you know of any additional information, notice an error, etc.. just comment and I’ll do my best to keep this post updated. In this tutorial I will assume that you know enough to be able to use WoWModelViewer and to execute a query on your database. If anything seems unclear or incorrect, just post below and I’ll look into it. Just in case anyone wants to know what I’m running: Windows 8, x64 — HomeDebian 7, x64 — ServerTrinityCore — Latest version as of 20/June/2015WoTLK 3.3.5aNow that you have WMV downloaded and open, begin by selecting a playable race (it may work for unplayable races, but I haven’t tested) and customizing the look and equipment. When choosing skins, hair, faces, etc… you may only use those which are available for players to use, this is the first limitation of the DressNPCs patch. The second limitation is that you may only use weapons that have both a displayID and an equipmentID listed as the weapons cannot work if you use a displayID. After creating your NPC, take the query from here and copy-paste it into your text editor of choice. You simply need to copy the values from WMV into the query and execute the query onto your world database. As an example of how to fill out the file… Query to create Scarlet Valkryst. /* You can use either the displayID of the item or the spawnID of the item. The majority of good looking items will not have a spawnID, so just use the displayID in almost every case. When using a displayID, you need to make the displayID negative. When using a spawnID, you do not make the spawnID negative. To use this query, just type in the numbers and execute it into the world datbase. */ SET @NPC_ENTRY_ID := 80000, @NPC_RACE_ID := 1, @GENDER := 1, -- 0 = male 1 = female @SKIN_ID := 0, @FACE_ID := 0, @HAIR_COLOR_ID := 9, -- Applies to head and facial hair. @HAIR_ID := 5, @FACIAL_FEATURE_ID := 1, -- Beards, earrings, etc... @HEAD := 0, @SHOULDERS := -5316, @BODY := -32362, -- This is for shirts. @CHEST := 36076, @WAIST := -37348, @LEGS := -27289, @FEET := -51992, @WRISTS := -28382, @HANDS := -15816, @BACK := -28693, @TABARD := 7725, @MAIN_HAND := 24034, @OFF_HAND := 31200, @RANGED := 0; CALL createNPCModel( @NPC_ENTRY_ID, @NPC_RACE_ID, @GENDER, @SKIN_ID, @FACE_ID, @HAIR_ID, @HAIR_COLOR_ID, @FACIAL_FEATURE_ID, @HEAD, @SHOULDERS, @BODY, @CHEST, @WAIST, @LEGS, @FEET, @WRISTS, @HANDS, @BACK, @TABARD, @MAIN_HAND, @OFF_HAND, @RANGED ); When the query above is executed onto the database, you will need to restart your server for the display to be usable, but before restarting the server, you need to apply the display to a creature.A creature can use up to four displays which can include either all custom displays, all pre-existing displays, or a mix of the two. A creature can also have just a single display. When entering the display ID onto creature a creature in world.creature_template, we will use the display -80000 and place it into the column modelid1. All custom displays made using the process in this tutorial must be the negative of the value that is used as the display ID in the query above. The ID in the query does not need to be the same as the ID of the creature it is being applied to, this is just a convention that I’ve grown to use. Once the query has been executed, the display ID set, and the server restarted; the finished model should looks like the following. I do realize that the shield is different than the WMV preview. I’ve edited the model on my server since that preview. The query in this post also uses the shield in the image above. Additional Notes: As you may already know, you can save and load created NPCs in WMV through Character -> Save Character and Character -> Load Character. When you load a character, the values for skin color, face, hair, etc… will be wrong, so you’ll need to change one of these values and then change it back to get the correct values. You can see the difference in the image below if you compare it to the almost identical image near the beginning of this post.
  22. The links in the tutorial above may be out of date. If they are, then you can most-likely find an up-to-date link to the blog here.
  23. 1920x1080 Could be. I generally never delete my cache.
  24. Download Paint.NET and use the Hue-Saturation panel after careful selection. It works well enough, in most cases, for things like this. Edit: Damn, my microphone sounds like shit in this video.
  25. Weird, it's working like that now, but most of the time when I'm on the site it'll stick around.