_addSpellToPlayer($spellId, $toGUID, $realm = -1) { global $characters_db, $_DB_LINK_CURRENT, $_DB_realms; $dbLink = $_DB_LINK_CURRENT; if ($realm != -1) $dbLink = $_DB_realms[$realm]; DB_query("REPLACE INTO $characters_db.character_spell (guid, spell) VALUES ($toGUID, $spellId)", $dbLink); } /** * Check if char has spell * * @param int $guid * @param int $spellId * @param int $realmId default is $_CURRENT_REALM_ID * * @return int */ function CHAR_hasSpell($guid, $spellId, $realmId = 0) { global $_CURRENT_REALM_ID, $characters_db; if (!$realmId) $realmId = $_CURRENT_REALM_ID; return DB_numRows(DB_queryRealm("SELECT * FROM $characters_db.character_spell WHERE guid = $guid AND spell = $spellId", $realmId)); } /** * Check if char has item * * @param int $guid * @param int $itemId * @param int $realmId default is $_CURRENT_REALM_ID * * @return int */ function CHAR_hasItem($guid, $itemId, $realmId = 0) { global $_CURRENT_REALM_ID, $characters_db; if (!$realmId) $realmId = $_CURRENT_REALM_ID; return DB_numRows(DB_queryRealm("SELECT * FROM $characters_db.item_instance WHERE owner_guid = $guid AND itemEntry = $itemId", $realmId)); } function CHAR_realmTransfer($guid, $newRealm) { global $_REALMS_COUNT, $_CURRENT_REALM_ID, $realmd_db, $world_db, $userdata; if ($newRealm < 1 || $newRealm > $_REALMS_COUNT || $newRealm == $_CURRENT_REALM_ID) return false; if (DB_resultWowAuth("SELECT numchars FROM $realmd_db.realmcharacters WHERE acctid = {$userdata['user_id']} AND realmid = $newRealm") >= 10) return false; DB_queryCurrent("INSERT INTO $world_db.freakz_pending_realm_transfers (id, guid, name, account, old_realm, new_realm, date) VALUES (0, $guid, '', {$userdata['user_id']}, $_CURRENT_REALM_ID, $newRealm, ".time().")"); return true; } function CHAR_customize($guid) { global $characters_db, $_DB_LINK_CURRENT; DB_queryCurrent("UPDATE $characters_db.characters SET at_login = at_login | " . WOW_AT_LOGIN_CUSTOMIZE . " WHERE guid = $guid"); return mysql_affected_rows($_DB_LINK_CURRENT) == 1; } function CHAR_rename($guid, $newName, $failOnInvalidCharacters = false) { global $_LANG, $characters_db, $world_db, $_CURRENT_REALM_ID, $userdata; if ($failOnInvalidCharacters && strlen(preg_replace('/[^a-zA-Z]/', '', $newName)) != strlen($newName)) return $_LANG['donate_invalid_name_invalid_characters']; $newName = preg_replace('/[^a-zA-Z]/', '', $newName); $newName = ucwords(strtolower($newName)); if (!$newName || strlen($newName) > MAX_CHARACTER_NAME_LENGTH || strlen($newName) < 2) return $_LANG['donate_invalid_name']; $tmpName = strtolower($newName); $lastLetter = ''; $lastCount = 0; for ($i = 0; $i < strlen($tmpName); $i++) { if ($tmpName[$i] == $lastLetter) $lastCount++; else { $lastCount = 0; $lastLetter = $tmpName[$i]; } if ($lastCount >= 2) return $_LANG['donate_three_letters']; } // check if already exists if (mysql_num_rows(DB_queryCurrent("SELECT guid FROM $characters_db.characters WHERE name = '$newName'"))) return $_LANG['donate_name_taken']; // check if reserved name if (_PATCH_CONDITION_Has735WoWDefines) if (DB_resultCurrent("SELECT userId FROM $characters_db.reserved_name WHERE name = '$newName' AND userId <> {$userdata['user_id']}")) return $_LANG['donate_name_reserved']; DB_queryCurrent("UPDATE $characters_db.characters SET name = '$newName' WHERE guid = $guid"); DB_queryCurrent("REPLACE INTO $world_db.freakz_pending_name_update VALUES ($guid, $_CURRENT_REALM_ID)"); return ""; } $_WORGEN_RACIALS = array( 68996, // Two Forms 68992, // Darkflight 68978, // Flayer 68976, // Aberration 68975, // Viciousness ); function CHAR_changeRace($guid) { global $characters_db, $_DB_LINK_CURRENT; DB_queryCurrent("UPDATE $characters_db.characters SET at_login = at_login | " . WOW_AT_LOGIN_CHANGE_RACE . " WHERE guid = $guid"); return mysql_affected_rows($_DB_LINK_CURRENT) == 1; } function CHAR_changeFaction($guid) { global $characters_db, $_DB_LINK_CURRENT; DB_queryCurrent("UPDATE $characters_db.characters SET at_login = at_login | " . WOW_AT_LOGIN_CHANGE_FACTION . " WHERE guid = $guid"); return mysql_affected_rows($_DB_LINK_CURRENT) == 1; } function CHAR_isAtTrade($guid) { return false; $guid = intval($guid); $at_trade = mysql_num_rows(DB_queryMain("SELECT 1 FROM site_stuffs.trade_trades WHERE guid = $guid")) > 0; if (!$at_trade) $at_trade = mysql_num_rows(DB_queryMain("SELECT 1 FROM site_stuffs.trade_transactions WHERE seller_guid = $guid OR buyer_guid = $guid")) > 0; return $at_trade; } function CHAR_getItemLevel($guid, $is_hunter = false, $DEBUG = false, $RETURN_COLORED = false, $realm_id = 0, $charactersDb = "") { global $_DB_realms, $_CURRENT_REALM_ID, $characters_db; $charactersDb = $charactersDb ? $charactersDb : ($characters_db ? $characters_db : "characters"); if (!$realm_id) { $itemLevelTable = $GLOBALS['_PATCH_CONSTANT_Table_CharacterItemLevel']; $itemLevelColumn = $GLOBALS['_PATCH_CONSTANT_Field_CharacterItemLevel_ItemLevel']; $realm_id = $_CURRENT_REALM_ID; } else { $itemLevelTable = $realm_id == REALM_FELSONG ? "freakz_character_itemlevel" : "character_gearscore"; $itemLevelColumn = $realm_id == REALM_FELSONG ? "itemlevel" : "gearscore"; } if (!@count($_DB_realms)) { include("../inc/config.php"); } return DB_resultRealm("SELECT {$itemLevelColumn} FROM $charactersDb.{$itemLevelTable} WHERE guid = $guid", $realm_id); } function CHAR_getItemLevels($guids, $realm_id = 0) { global $_DB_realms, $characters_db, $_CURRENT_REALM_ID; if (!$realm_id) $realm_id = $_CURRENT_REALM_ID; return DB_fetchAllData("SELECT guid, {$GLOBALS['_PATCH_CONSTANT_Field_CharacterItemLevel_ItemLevel']} AS gearscore FROM $characters_db.{$GLOBALS['_PATCH_CONSTANT_Table_CharacterItemLevel']} WHERE guid IN (" . implode(",", $guids) . ")", "guid", true, $_DB_realms[$realm_id]); } function CHAR_getNameByGUID($guid, $DB_LINK = NULL) { global $characters_db; if (!$DB_LINK) $DB_LINK = $GLOBALS['_DB_LINK_CURRENT']; $name = mysql_fetch_row(DB_query("SELECT name FROM $characters_db.characters WHERE guid = " . intval($guid), $DB_LINK)); return $name[0]; } function CHAR_getGUIDByName($name, $DB_LINK = NULL) { global $characters_db; if (!$DB_LINK) $DB_LINK = $GLOBALS['_DB_LINK_CURRENT']; $name = DB_escape($name); return intval(DB_result("SELECT guid FROM $characters_db.characters WHERE name LIKE '$name'", $DB_LINK)); } function CHAR_isBanned($guid, $DB_LINK = NULL) { if (!$DB_LINK) $DB_LINK = $GLOBALS['_DB_LINK_CURRENT']; $accountId = ACCOUNT_getIdByPlayerGUID($guid, $DB_LINK); return ACCOUNT_isBanned($accountId); } /** * Check if a character is online * * @param $guid * @param bool $dieIfOnline stop script execution if character is online * @param null $DB_LINK if not set, current link will be used * * @return bool */ function CHAR_isOnline($guid, $dieIfOnline = false, $DB_LINK = NULL) { global $characters_db, $_LANG; if (!$DB_LINK) $DB_LINK = $GLOBALS['_DB_LINK_CURRENT']; $charOnline = DB_numRows(DB_query("SELECT guid FROM $characters_db.characters WHERE guid = $guid AND online", $DB_LINK)) != 0; if ($charOnline && $dieIfOnline) die_error($_LANG['donate_char_online']); return $charOnline; } /** * Generate character armory link * * @param mixed $guid guid or pre-generated characterData array * @param bool $coloredLink show colored link * @param bool $showRaceClass show race/class icons * @param bool $showOnline show online status icon * @param bool $showLevel show level * @param null $dbLink db link (default: current) * @param bool $showAFK show if AFK * @param bool $showSpec show char spec * * @return string */ function CHAR_generateLink($guid, $coloredLink = false, $showRaceClass = false, $showOnline = false, $showLevel = false, $dbLink = null, $showAFK = false, $showSpec = false) { global $characters_db, $_DB_LINK_CURRENT, $_LINKS_ARMORY_BASE_PROFILE_LINK; if (!$dbLink) $dbLink = $_DB_LINK_CURRENT; if (is_numeric($guid)) $data = DB_result("SELECT name, level, race, gender, class, online, playerFlags, {$GLOBALS['_PATCH_CONSTANT_Field_Characters_ActiveSpec']} AS activeSpec FROM $characters_db.characters WHERE guid = $guid", $dbLink); else $data = $guid; if (!count($data)) return "INVALID_CHAR"; $color = $coloredLink ? "style='color: #".WOW_getColorForClass($data['class']).";'" : ""; $link = "{$data['name']}"; if ($showLevel) $link .= " (".WOW_getLevelColor($data['level']).")"; if ($showSpec) { $specId = WOW_getSpecIdByClass($data['class'], $data['activeSpec']); $specLink = WOW_generateSpecializationHTML($specId, false, true); $link = "{$specLink} $link"; } if ($showRaceClass) { $pos = "style='position: relative; top: 2px;'"; $link = " $link"; } if ($showOnline) { $status = ($data['online'] ? "online" : "offline"); $link = " $link"; } if ($data['online'] && $showAFK && $data['playerFlags'] & 0x02) $link .= " (AFK)"; return $link; } /** * Generate character armory links * * @param array $guids * @param bool $coloredLink show colored link * @param bool $showRaceClass show race/class icons * @param bool $showOnline show online status icon * @param bool $showLevel show level * @param null $dbLink db link (default: current) * @param bool $showSpec show char spec * * @return array */ function CHAR_generateLinks($guids, $coloredLink = false, $showRaceClass = false, $showOnline = false, $showLevel = false, $dbLink = null, $showSpec = false) { global $characters_db, $_DB_LINK_CURRENT; if (!$dbLink) $dbLink = $_DB_LINK_CURRENT; $links = array(); if (!count($guids)) return $links; $guids = implode(",", $guids); $allData = DB_fetchAllData("SELECT guid, name, level, race, gender, class, online, {$GLOBALS['_PATCH_CONSTANT_Field_Characters_ActiveSpec']} AS activeSpec FROM $characters_db.characters WHERE guid IN ($guids)", "", false, $dbLink); foreach ($allData as $data) $links[$data['guid']] = CHAR_generateLink($data, $coloredLink, $showRaceClass, $showOnline, $showLevel, $dbLink, false, $showSpec); return $links; } function CHAR_generateLinksFromArray($array, $field, $coloredLink = false, $showRaceClass = false, $showOnline = false, $showLevel = false, $dbLink = null) { $guids = arrayGetValues($array, $field); return CHAR_generateLinks($guids, $coloredLink, $showRaceClass, $showOnline, $showLevel, $dbLink); } /** * Add a random letter at the end of the name * * @param mixed $nameOrGuid if GUID then $dbLink is no longer optional * @param bool $checkIfExists check if new name already exists * @param null $dbLink if not set it will select current database link * * @return string null if no possible name found */ function CHAR_GenerateNewRandomName($nameOrGuid, $checkIfExists = true, $dbLink = NULL) { global $characters_db; if (!$dbLink) $dbLink = $GLOBALS['_DB_LINK_CURRENT']; if (!is_numeric($nameOrGuid)) $name = $nameOrGuid; else $name = CHAR_getNameByGUID($nameOrGuid, $dbLink); if (!$name) return ""; $tries = 100; do { $let = chr(ord('a') + rand(0, 25)); if (strlen($name) == MAX_CHARACTER_NAME_LENGTH) $name[MAX_CHARACTER_NAME_LENGTH - 1] = $let; else $name = "{$name}{$let}"; // check if already exists if (!$checkIfExists) return $name; if (!DB_valueExists($characters_db, "characters", "name", $name, false, $dbLink)) return $name; } while ($tries--); return ""; } function CHAR_addMaxLevelStuffs($guid, $_LEGION, $charBoost) { global $characters_db, $_WORGEN_RACIALS; $charData = DB_resultCurrent("SELECT race, class FROM $characters_db.characters WHERE guid = $guid"); $race = $charData['race']; $class = $charData['class']; $spellsToAdd = array(); $questsToAdd = array(); $questsToComplete = array(); // horde if (WOW_isHordeRace($race)) { $position = "position_x = 1459.78, position_y = -4419.91, position_z = 25.46, map = 1, zone = 1637"; // orgrimmar $positionBind = "posX = 1568.64, posY = -4401.71, posZ = 16.16, mapId = 1, zoneId = 1637"; // orgrimmar // quests for Pandaria map $questsToAdd[] = 29611; // The Art of War if ($class == CLASS_DEATH_KNIGHT) $questsToComplete[] = 13189; // Saurfang's Blessing (last quest of chain, also activates Adventure Guide) if ($class == CLASS_DEMON_HUNTER) $questsToComplete[] = 39690; // Illidari, We Are Leaving } // alliance else { $position = "position_x = -8866.27, position_y = 671.63, position_z = 97.90, map = 0, zone = 1519"; // stormwind $positionBind = "posX = -8866.27, posY = 671.63, posZ = 97.90, mapId = 0, zoneId = 1519"; // stormwind // quests for Pandaria map $questsToAdd[] = 29547; // The King's Command if ($class == CLASS_DEATH_KNIGHT) $questsToComplete[] = 13188; // Where Kings Walk (last quest of chain, also activates Adventure Guide) if ($class == CLASS_DEMON_HUNTER) $questsToComplete[] = 39689; // Illidari, We Are Leaving // Worgen Racials if ($race == RACE_WORGEN) { foreach ($_WORGEN_RACIALS as $worgen_racial) $spellsToAdd[] = $worgen_racial; // and quests $questsToComplete[] = 14222; // Last Stand } } if ($class == CLASS_DEATH_KNIGHT) { $questsToComplete[] = 12801; // The Light of Dawn (Death Knight quest for Death Gate) $questsToComplete[] = 12619; // The Emblazoned Runeblade (Runeforging) $questsToComplete[] = 12687; // Into the Realm of Shadows (Acherus Deathcharger) } if ($_LEGION) { $questsToAdd[] = 80008; // Blasted Lands Time Walking quest tracker if ($class == CLASS_DEMON_HUNTER) { // class spells $questsToComplete[] = 39495; // Hidden No More (Throw Glaive) $questsToComplete[] = 40253; // Stop Gul'dan! (Vengeful Retreat) $questsToComplete[] = 40254; // Forged in Fire (Chaos Nova) $questsToComplete[] = 39049; // Eye On the Prize (Eye Beam) $questsToComplete[] = 40051; // Fel Secrets (Metamorphosis) $questsToComplete[] = 38766; // Before We're Overrun (Consume Magic) $questsToComplete[] = 39694; // Between Us and Freedom (Blur) $spellsToAdd[] = 218386; // dual specialization } } // quests foreach ($questsToComplete as $questToAdd) { DB_queryCurrent("DELETE FROM $characters_db.character_queststatus WHERE guid = $guid AND quest = $questToAdd"); DB_queryCurrent("REPLACE INTO $characters_db.character_queststatus_rewarded (guid, quest) VALUES ($guid, $questToAdd)"); } foreach ($questsToAdd as $questToAdd) { $now = time(); DB_queryCurrent("REPLACE INTO $characters_db.character_queststatus (guid, quest, status, explored, timer) VALUES ($guid, $questToAdd, 3, 0, $now)"); } // spells foreach ($spellsToAdd as $spellToAdd) DB_queryCurrent("REPLACE INTO $characters_db.character_spell (guid, spell, active, disabled) VALUES ($guid, $spellToAdd, 1, 0)"); // hearthstone DB_queryCurrent("UPDATE $characters_db.character_homebind SET $positionBind WHERE guid = $guid"); // teleport DB_queryCurrent("UPDATE $characters_db.characters SET $position WHERE guid = $guid"); // remove all auras DB_queryCurrent("DELETE FROM $characters_db.character_aura WHERE guid = $guid"); } ?> Sashj'tar Brooch - Item | WoW Freakz
 |
FELSONG
Players: 1915 (Record: 6211)
Uptime: 28m, 56s
download client
Latest fixes from bug report:
Click here for more
    » Planning the Assault (today)
    » The Enemy of My Enemy... (today)
    » The Arcway: Eredar Chaosbringer... (today)
    » Neltharion's Lair: Dargrul the ... (today)
    » Antorus, the Burning Throne: El... (today)
    » Lower Karazhan: Skeletal Usher ... (today)
Select realm

Account:
Password:

ITEMFINDER
REALM: Felsong   (change to )


Use this script if you want to know where does an item drop, where is it bought from or from what
quest you get it as reward.
Data is read directly from the database and is 100% correct only for WoW Freakz server.
More info here
.

NAME or ID:


Sashj'tar Brooch

  • Item Level 680
  • Binds when equipped
  • Unique-Equipped
  • Miscellaneous Trinket
  • <Random enchantment>
  • +253 Intelect

Players can win this item when selecting the following loot specializations:
  » Mage: , ,
  » Priest: , ,
  » Warlock: , ,
  » Monk:
  » Druid: ,
  » Shaman: ,
  » Paladin:


Random Enchantments:
#603
    Critical Strike
#604
    Haste
#605
    Mastery
#607
    Versatility

Quick Facts
  • Cannot be disenchanted
  • Unique equipped
  • Added in 7.0.3

Dropped by (79)Items with same icon (9)
CreatureLevelReactTypeZonePatchSpawnsDrop chance
Anax110A HBeastSuramar7.0.3 110%
Felsworn Chaos-Mage110A HHumanoid The Nighthold7.0.3 71.31%
Bound Energy110A HElemental Court of Stars7.0.3 61.28%
Celestial Acolyte111A HHumanoid The Nighthold7.0.3 241.21%
Duskwatch Battle-Magus111A HHumanoid The Nighthold7.0.3 571.18%
Felguard Raider
<Minion of Rozzeleth>
1A HDemon 7.1.0 01.18%
Felborne Marauder1A HHumanoid 7.1.0 01.14%
Duskwatch Guard110A HHumanoid Court of Stars7.0.3 251.13%
Promenade Guard110A HHumanoid The Nighthold7.0.3 181.06%
Nobleborn Warpcaster111A HHumanoid The Nighthold7.0.3 370.98%
Felsworn Shadowblade110A HHumanoid The Nighthold7.0.3 60.95%
Duskwatch Sentinel111A HHumanoid The Nighthold7.0.3 610.79%
Nighthold Protector110A HMechanical The Nighthold7.0.3 100.73%
Duskwatch Sentry110A HHumanoid Court of Stars7.0.3 70.5%
Chaotoid110A HElemental The Nighthold7.0.3 70.42%
Legion Hound110A HDemon Court of Stars7.0.3 70.39%
Mana Wyrm110A HBeast Court of Stars7.0.3 480.3%
Watchful Inquisitor110A HDemon Court of Stars7.0.3 70.29%
Withered Skulker111A HHumanoid The Nighthold7.0.3 80.28%
Chronowraith111A HElemental The Nighthold7.0.3 130.27%
Pulsauron110A HElemental 7.0.3 00.26%
Eredar Chaosbringer110A HDemon The Arcway7.0.3 220.24%
Chronarch Defender110A HMechanicalSuramar7.0.3 170.24%
Astral Defender111A HHumanoid The Nighthold7.0.3 140.24%
Trained Shadescale111A HBeast The Nighthold7.0.3 340.22%
Acidmaw Scorpid111A HBeast The Nighthold7.0.3 40.19%
Soul Engine Jailer110A HDemonSuramar7.1.0 290.18%
Soul Engine Jailer110A HDemon  00.18%
Guardian Construct110A HMechanical Court of Stars7.0.3 150.17%
Crystalline Scorpid111A HBeast The Nighthold7.0.3 190.17%
Putrid Sludge110A HBeast The Nighthold7.0.3 100.17%
Burning Chaplain110A HDemonSuramar7.0.3 20.16%
Starving Felstalker1A HDemon 7.1.0 00.16%
Fulminant110A HElemental The Nighthold7.0.3 80.14%
Shambling Hungerer111A HHumanoid The Nighthold7.0.3 260.14%
Felweaver Pharamere112A HDemon The Nighthold7.0.3 10.13%
Dreadguard110A HDemon The Nighthold7.0.3 90.13%
Sashj'tar Stormcaller110A HHumanoidSuramar7.0.3 100.12%
Putrid Sludge110A HBeast 7.0.3 00.12%
Vengeful Wrathguard110A HDemonSuramar7.1.0 40.12%
Fel Painmaiden110A HDemonSuramar7.1.0 40.12%
Duskwatch Scryer1A HHumanoid 7.1.0 00.12%
Wrathguard Soulsplitter110A HDemonSuramar7.0.3 100.1%
Duskwatch Subjugator110A HHumanoidSuramar7.1.0 260.1%
Ravenous Magehunter110A HDemonSuramar7.0.3 320.08%
Axetail Basilisk110A HBeastSuramar7.0.3 280.08%
Magisterial Sleuth110A HHumanoidSuramar7.0.3 250.08%
Abyss Watcher110A HDemon The Nighthold7.0.3 90.08%
Volatile Scorpid111A HBeast The Nighthold7.0.3 20.06%
Vile Soulwarden100 - 110A HDemonVal'sharah7.2.0 90.06%
Sashj'tar Reef Runner110A HHumanoidSuramar7.0.3 140.04%
Felfire Basilisk110A HDemonSuramar7.0.3 430.04%
Felsoul Inquisitor110A HDemonSuramar7.0.3 530.04%
Blazing Imp110A HDemon Court of Stars7.0.3 90.04%
Darkfiend Despoiler110A HHumanoidSuramar7.0.3 210.04%
Volatile Leywraith110A HElementalSuramar7.0.3 180.04%
Palace Warden110A HMechanicalSuramar7.1.0 20.04%
Felborne Trapper110A HHumanoidBroken Shore7.2.0 120.04%
Wrathguard Fury110A HDemonSuramar7.0.3 430.02%
Legion Endbringer110A HDemonSuramar7.0.3 620.02%
Myonix
<Manasaber Matron>
110A HBeastSuramar7.0.3 10.02%
Felgaze Doomseer110A HDemonSuramar7.0.3 60.02%
Scathing Felbeast1A HDemon 7.1.0 00.02%
Legion Endbringer110A HDemonSuramar 30.02%
Wrathguard Fury110A HDemonSuramar 20.02%
Nightborne Siegecaster110A HHumanoidSuramar7.0.3 230.01%
Mana Saber110A HBeastSuramar7.0.3 320.01%
Duskwatch Battlemaster110A HHumanoidSuramar7.0.3 110.01%
Vineyard Enforcer110A HHumanoidSuramar7.0.3 740.01%
Apothecary Faldren110A HHumanoidSuramar7.0.3 10.01%
Domesticated Manasaber110A HBeast The Nighthold7.0.3 60.01%
Shal'dorei Archmage110A HHumanoid The Nighthold7.0.3 140.01%
Duskwatch Warden110A HHumanoid The Nighthold7.0.3 140.01%
Terrace Grove-Tender110A HHumanoid The Nighthold7.0.3 430.01%
Shal'dorei Naturalist110A HHumanoid The Nighthold7.0.3 100.01%
Shimmering Manaspine110A HBeast The Nighthold7.0.3 80.01%
Duskwatch Weaver110A HHumanoid The Nighthold7.0.3 90.01%
Duskwatch Orbitist110A HHumanoidSuramar7.0.3 130.01%
Vineyard Enforcer110A HHumanoid  00.01%