_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"); } ?> Stone Keeper - NPC | WoW Freakz
 |
FELSONG
Players: 1941 (Record: 6211)
Uptime: 29m, 40s
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:

NPCFINDER
REALM: Felsong   (change to )

Looking for an NPC but don't know where he is? Use NPC Finder! Informations are read directly from the WoW Freakz database

NAME or ID  Search in subname too

Stone Keeper
Quick Facts
  • Level: 40
  • Classification: Elite
  • Health: 23,760
  • Armor: 210 (-28% dmg)
  • React: A H
  • Damage: 307 - 461
  • Type: Elemental
  • Drops: ~37
  • Added in 1.11.1

  • Screenshot

Immunities:

Uldaman (4, full)
(Total spawns: 4)



Loot (197)Abilities (2) Comments (New!) (4) Screenshots (New!) (1)
ItemLevelTypeCountChance
1 1100%
35Metal/Stone1 - 2100%
40Leather1100%
1 159.43%
46Shield12.78%
46Ring12.78%
45Feet (Plate)12.78%
49Hands (Mail)12.78%
44Chest (Mail)12.78%
44Two-Hand Sword12.78%
48Gun12.78%
45Dagger12.78%
49Two-Hand Axe12.78%
47Axe12.78%
47Robe12.78%
48Staff12.78%
45 10.87%
50Jewelcrafting10.53%
43Blacksmithing10.34%
55Bow10.26%
40Jewelcrafting10.26%
42Waist (Cloth)10.26%
46Feet (Cloth)10.26%
44Wrists (Cloth)10.26%
47Back (Cloth)10.26%
48Hands (Cloth)10.26%
45Legs (Cloth)10.26%
49Shoulders (Cloth)10.26%
43Chest (Cloth)10.26%
44Waist (Leather)10.26%
48Feet (Leather)10.26%
43Wrists (Leather)10.26%
46Back (Cloth)10.26%
49Hands (Leather)10.26%
42Legs (Leather)10.26%
47Shoulders (Leather)10.26%
45Chest (Leather)10.26%
48Shield10.26%
42Shield10.26%
44Waist (Mail)10.26%
46Feet (Mail)10.26%
48Wrists (Mail)10.26%
49Back (Cloth)10.26%
47Hands (Mail)10.26%
43Legs (Mail)10.26%
42Shoulders (Mail)10.26%
45Chest (Mail)10.26%
46Sword10.26%
42Two-Hand Sword10.26%
48Axe10.26%
49Two-Hand Axe10.26%
46Mace10.26%
50Two-Hand Mace10.26%
44Dagger10.26%
47Staff10.26%
45Bow10.26%
43Gun10.26%
45Jewelcrafting10.26%
43Head (Cloth)10.26%
42Head (Leather)10.26%
44Head (Mail)10.26%
47Blacksmithing10.17%
43Ring10.12%
43Ring10.12%
42Ring10.12%
42Neck10.12%
42Chest (Cloth)10.12%
42Robe10.12%
43Legs (Cloth)10.12%
43Shoulders (Cloth)10.12%
42Feet (Cloth)10.12%
43Hands (Cloth)10.12%
43Back (Cloth)10.12%
42Head (Cloth)10.12%
42Legs (Cloth)10.12%
43Wrists (Cloth)10.12%
42Back (Cloth)10.12%
43Waist (Cloth)10.12%
42Feet (Leather)10.12%
43Legs (Leather)10.12%
42Feet (Mail)10.12%
43Head (Mail)10.12%
43Legs (Mail)10.12%
43Shoulders (Mail)10.12%
43Shield10.12%
43Head (Leather)10.12%
42Chest (Leather)10.12%
43Waist (Leather)10.12%
43Wrists (Leather)10.12%
42Back (Cloth)10.12%
42Dagger10.12%
43Two-Hand Sword10.12%
42Head (Leather)10.12%
42Waist (Leather)10.12%
43Hands (Leather)10.12%
43Shoulders (Leather)10.12%
42Wrists (Leather)10.12%
43Chest (Mail)10.12%
43Shield10.12%
42Head (Mail)10.12%
42Shoulders (Mail)10.12%
42Wrists (Mail)10.12%
42Hands (Mail)10.12%
43Wrists (Mail)10.12%
43Back (Cloth)10.12%
42Waist (Mail)10.12%
42Holdable10.12%
43Head (Mail)10.12%
42Two-Hand Axe10.12%
45Bag Bag10.12%
42Head (Cloth)10.12%
45Bag Bag10.12%
42Wrists (Cloth)10.12%
43Feet (Cloth)10.12%
42Wrists (Leather)10.12%
43Hands (Leather)10.12%
43Shoulders (Cloth)10.12%
42Waist (Cloth)10.12%
42Waist (Leather)10.12%
42Back (Cloth)10.12%
43Wrists (Mail)10.12%
43Hands (Cloth)10.12%
43Feet (Leather)10.12%
43Head (Leather)10.12%
42Head (Cloth)10.12%
42Hands (Cloth)10.12%
42Shoulders (Cloth)10.12%
43Legs (Leather)10.12%
42Head (Leather)10.12%
42Feet (Leather)10.12%
42Shoulders (Leather)10.12%
43Legs (Mail)10.12%
42Head (Mail)10.12%
42Feet (Mail)10.12%
43Shoulders (Mail)10.12%
43Shield10.12%
43Mace10.12%
43Sword10.12%
42Staff10.12%
43Chest (Cloth)10.12%
43Holdable10.12%
42Legs (Cloth)10.12%
43Robe10.12%
43Chest (Leather)10.12%
42Legs (Leather)10.12%
42Chest (Mail)10.12%
42Shield10.12%
42Legs (Mail)10.12%
43Back (Cloth)10.12%
43Wrists (Cloth)10.12%
43Back (Cloth)10.12%
43Feet (Mail)10.12%
42Wrists (Mail)10.12%
43Hands (Mail)10.12%
43Waist (Mail)10.12%
51Head (Cloth)10.1%
51Hands (Cloth)10.1%
51Shoulders (Cloth)10.1%
51Feet (Mail)10.1%
51Head (Mail)10.1%
51Wrists (Mail)10.1%
51Wrists (Plate)10.1%
51Waist (Plate)10.1%
51Neck10.1%
51Robe10.1%
51Chest (Cloth)10.1%
51Legs (Cloth)10.1%
51Waist (Cloth)10.1%
51Feet (Cloth)10.1%
51Hands (Cloth)10.1%
51Back (Cloth)10.1%
51Feet (Leather)10.1%
51Hands (Leather)10.1%
51Shoulders (Leather)10.1%
51Legs (Plate)10.1%
51Chest (Plate)10.1%
51Shield10.1%
51Feet (Plate)10.1%
51Waist (Plate)10.1%
51Wand10.1%
51Bow10.1%
51Shield10.1%
51Chest (Mail)10.1%
51Legs (Mail)10.1%
51Waist (Mail)10.1%
51Wrists (Mail)10.1%
51Back (Cloth)10.1%
51Holdable10.1%
51Holdable10.1%
51Chest (Cloth)10.1%
51Robe10.1%
51Chest (Leather)10.1%
51Chest (Mail)10.1%
51Wrists (Cloth)10.1%
51Waist (Cloth)10.1%
51Back (Cloth)10.1%
51Legs (Leather)10.1%