Jump to content

Search the Community

Showing results for tags 'Trinity'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • News & Rules
    • News/Announcements
    • Forum Rules
  • General
    • General Chat
    • Introduce Yourself
    • Forum Suggestion/Bug Reporting
  • World of Warcraft Emulation
    • Emulation Releases
    • Support
    • Tutorials
    • Model Editing
    • Emulation Chat
    • Requests
  • World of Warcraft Private Servers
    • Advertise Your Server
    • Recruitment
  • World of Warcraft Emulation Marketplace
    • For Sale
    • Wanted
    • Hosting
  • World of Warcraft General
    • Retail Discussions
    • Class Discussions
    • PVP
    • PVE

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Location


Interests

Found 59 results

  1. ------------------------------|@Edit: leveling up bug FIXED-- |@Edit2: Profession's bug FIXED-|------------------------------|Patch for latest rev. of TrinityCore.Yes, it works in Eluna.Bug of battleground's chat fixed.How to install:Extract the CrossFactionBattlegrounds2.rar, copy and paste in your Source folder;Open Git Bash and navigate to your Source folder;Use the command: patch -p1 <CrossFactionBattlegrounds.patchCompile and enjoy.If you already applied the first patch that I posted, you gonna need it to remove it. Here is the OLD patch.Credits: Lille Carl, Noffearr, PrivateDonut, Quadral and samy27x.
  2. FULL credit goes to Tommy from Emudevs.com for writing this. I'm simply sharing it. #1. Configuration Option Go into World.h and add: CONFIG_CROSSFACTIONBG inside of: Code: enum WorldBoolConfigs Now head into your World.cpp and add: m_bool_configs[CONFIG_CROSSFACTIONBG] = sConfigMgr->GetBoolDefault("MixedBGs", true); Around line #1191 where all the other options are loading. #2. Player source & header file We will be doing the Player files. To start, open up Player.h and Player.cpp. Once you have those opened; Go on line #1061 and above line #1066 add: Code: //CROSSFACION BG START private: bool m_ForgetBGPlayers; bool m_ForgetInListPlayers; public: typedef std::vector<uint64> FakePlayers; void FitPlayerInTeam(bool action); void DoForgetPlayersInList(); void DoForgetPlayersInBG(Battleground* pBattleGround); uint8 GetFakeRaceOrRace(); void SetForgetBGPlayers(bool tralse) { m_ForgetBGPlayers = tralse; } bool ShouldForgetBGPlayers() { return m_ForgetBGPlayers; } void SetForgetInListPlayers(bool tralse) { m_ForgetInListPlayers = tralse; } bool ShouldForgetInListPlayers() { return m_ForgetInListPlayers; } bool SendBattleGroundChat(uint32 msgtype, std::string message); void MorphFit(bool value); bool TeamIsBGTeam() { return GetBGTeam() == GetTeam(); } FakePlayers m_FakePlayers; //CROSSFACION BG END Now go to line #1887 and above that add: Code: TeamId GetBGTeamId() const { return GetBGTeam() == ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE; } That should be all of Player.h. Go to Player.cpp.. I guess on any line under a function of your choice add: (In Player.cpp) Code: /*#################################################################################### ###############################CROSSFACTION BATTLEGROUNDS############################# ####################################################################################*/ void Player::FitPlayerInTeam(bool action) { ChrRacesEntry const* rEntry = sChrRacesStore.LookupEntry(GetFakeRaceOrRace()); if(rEntry && !TeamIsBGTeam() && action) setFaction(rEntry->FactionID); else setFactionForRace(getRace()); if (action) SetForgetBGPlayers(true); else SetForgetInListPlayers(true); MorphFit(action); if (GetBattleground() && action) ChatHandler(GetSession()).PSendSysMessage("You are playing for the %s%s in %s!", GetBGTeam() == ALLIANCE ? "|cff0000FFalliance|r" : "|cffFF0000horde|r", GetBattleground()->GetName()); } uint8 Player::GetFakeRaceOrRace() { if(!TeamIsBGTeam()) return GetBGTeam() == ALLIANCE ? RACE_HUMAN : RACE_BLOODELF; else return getRace(); } void Player::DoForgetPlayersInList() { // m_FakePlayers is filled from a vector within the battleground // they were in previously so all players that have been in that BG will be invalidated. for (FakePlayers::const_iterator itr = m_FakePlayers.begin(); itr != m_FakePlayers.end(); ++itr) { WorldPacket data(SMSG_INVALIDATE_PLAYER, 8); data << *itr; GetSession()->SendPacket(&data); if (Player* pPlayer = ObjectAccessor::FindPlayer(*itr)) GetSession()->SendNameQueryOpcode(*itr); } m_FakePlayers.clear(); } void Player::DoForgetPlayersInBG(Battleground* pBattleGround) { if (!pBattleGround || pBattleGround->isArena()) return; for (Battleground::BattlegroundPlayerMap::const_iterator itr = pBattleGround->GetPlayers().begin(); itr != pBattleGround->GetPlayers().end(); ++itr) { // Here we invalidate players in the bg to the added player WorldPacket data1(SMSG_INVALIDATE_PLAYER, 8); data1 << itr->first; GetSession()->SendPacket(&data1); GetSession()->SendNameQueryOpcode(itr->first); if (Player* pPlayer = ObjectAccessor::FindPlayer(itr->first)) { // Here we invalidate the player added to players in the bg WorldPacket data2(SMSG_INVALIDATE_PLAYER, 8); data2 << GetGUID(); pPlayer->GetSession()->SendPacket(&data2); pPlayer->GetSession()->SendNameQueryOpcode(GetGUID()); } } } bool BattlegroundQueue::CheckCrossFactionMatch(BattlegroundBracketId bracket_id, Battleground* bg) { TC_LOG_DEBUG("misc", "BattleGroundQueue::CheckCrossFactionMatch"); if (bg->isArena()) return false; // Only do this if crossbg's are enabled. // Here we will add all players to selectionpool, later we check if there are enough and launch a bg. FillXPlayersToBG(bracket_id, bg, true); uint8 MPT = bg->GetMinPlayersPerTeam(); if (m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() < MPT || m_SelectionPools[TEAM_HORDE].GetPlayerCount() < MPT) { TC_LOG_DEBUG("misc", "Not enough players. Has: %u Need: %u", m_SelectionPools[TEAM_ALLIANCE].GetPlayerCount() + m_SelectionPools[TEAM_HORDE].GetPlayerCount(), MPT * 2); return false; } return true; } // This function will invite players in the least populated faction, which makes battleground queues much faster. // This function will return true if cross faction battlegrounds are enabled, otherwise return false, // which is useful in FillPlayersToBG. Because then we can interrupt the regular invitation if cross faction bg's are enabled. bool BattlegroundQueue::FillXPlayersToBG(BattlegroundBracketId bracket_id, Battleground* bg, bool start) { if (sWorld->getBoolConfig(CONFIG_CROSSFACTIONBG)) { int32 aliFree = start ? bg->GetMinPlayersPerTeam() : bg->GetFreeSlotsForTeam(ALLIANCE); int32 hordeFree = start ? bg->GetMinPlayersPerTeam() : bg->GetFreeSlotsForTeam(HORDE); // Empty selection pools. They will be refilled from queued groups. m_SelectionPools[TEAM_ALLIANCE].Init(); m_SelectionPools[TEAM_HORDE].Init(); int32 valiFree = aliFree; int32 vhordeFree = hordeFree; int32 diff = 0; TC_LOG_DEBUG("misc", "valiFree: %u vhordeFree: %u", valiFree, vhordeFree); for (GroupsQueueType::iterator itr = m_QueuedGroups[bracket_id][BG_QUEUE_MIXED].begin(); itr != m_QueuedGroups[bracket_id][BG_QUEUE_MIXED].end(); ++itr) { if ((*itr)->IsInvitedToBGInstanceGUID) continue; diff = abs(valiFree - vhordeFree); bool moreAli = valiFree < vhordeFree; if (diff > 0) (*itr)->Team = moreAli ? HORDE : ALLIANCE; bool alliance = (*itr)->Team == ALLIANCE; if (m_SelectionPools[alliance ? TEAM_ALLIANCE : TEAM_HORDE].AddGroup((*itr), alliance ? aliFree : hordeFree)) { uint8 GSize = (*itr)->Players.size(); alliance ? valiFree -= GSize : vhordeFree -= GSize; } } return true; } return false; } bool Player::SendBattleGroundChat(uint32 msgtype, std::string message) { float distance = msgtype == CHAT_MSG_SAY ? sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY) : sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL); if (Battleground* pBattleGround = GetBattleground()) { for (Battleground::BattlegroundPlayerMap::const_iterator itr = pBattleGround->GetPlayers().begin(); itr != pBattleGround->GetPlayers().end(); ++itr) { if (Player* pPlayer = ObjectAccessor::FindPlayer(itr->first)) { if (GetDistance2d(pPlayer->GetPositionX(), pPlayer->GetPositionY()) <= distance) { if (GetBGTeam() == pPlayer->GetBGTeam()) { WorldPacket data; ChatHandler::BuildChatPacket(data, ChatMsg(msgtype), LANG_UNIVERSAL, pPlayer, NULL, message); pPlayer->GetSession()->SendPacket(&data); } else if (msgtype != CHAT_MSG_EMOTE) { WorldPacket data; ChatHandler::BuildChatPacket(data, ChatMsg(msgtype), pPlayer->GetTeam() == ALLIANCE ? LANG_ORCISH : LANG_COMMON, pPlayer, NULL, message); pPlayer->GetSession()->SendPacket(&data); } } } } return true; } else return false; } void Player::MorphFit(bool value) { if (!TeamIsBGTeam() && value) { if (GetBGTeam() == ALLIANCE) { if (getGender() == GENDER_MALE) { SetDisplayId(19723); SetNativeDisplayId(19723); } else { SetDisplayId(19724); SetNativeDisplayId(19724); } } else { if (getGender() == GENDER_MALE) { SetDisplayId(20578); SetNativeDisplayId(20578); } else { SetDisplayId(20579); SetNativeDisplayId(20579); } } } else InitDisplayIds(); } #3. Unit.cpp & Handlers QueryHandler.cpp In QueryHandler.cpp under SendNameQueryOpcode(uint64 guid), change: (On line #51) Code: data << uint8(nameData->m_race); to: Code: data << uint8(player ? player->GetFakeRaceOrRace() : nameData->m_race); MiscHandler.cpp Under void WorldSession::HandleTimeSyncResp(WorldPacket& recvData) add: Code: Battleground* bg = _player->GetBattleground(); if (bg) { if (_player->ShouldForgetBGPlayers()) { _player->DoForgetPlayersInBG(bg); _player->SetForgetBGPlayers(false); } } else if (_player->ShouldForgetInListPlayers()) { _player->DoForgetPlayersInList(); _player->SetForgetInListPlayers(false); } Above or below line: #1418 ChatHandler.cpp Inside of void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) add: Code: if (!GetPlayer()->IsGameMaster()) if (GetPlayer()->SendBattleGroundChat(type, msg)) return; Above line #251 CharacterHandler.cpp Inside of void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) Under line #1031 add: Code: if (sWorld->getBoolConfig(CONFIG_CROSSFACTIONBG)) { float x = pCurrChar->GetPositionX(); float y = pCurrChar->GetPositionY(); float z = pCurrChar->GetPositionZ(); uint32 hm = pCurrChar->m_homebindMapId; float hx = pCurrChar->m_homebindX; float hy = pCurrChar->m_homebindX; float hz = pCurrChar->m_homebindX; if (z+1 < pCurrChar->GetMap()->GetHeight(x, y, MAX_HEIGHT) && pCurrChar->GetMap()->IsOutdoors(x, y, z)) pCurrChar->TeleportTo(hm, hx, hy, hz, 0); } if (pCurrChar->GetBattleground() && !pCurrChar->GetBattleground()->isArena()) pCurrChar->FitPlayerInTeam(true); else pCurrChar->FitPlayerInTeam(false); Unit.cpp Inside of void Unit::RestoreFaction() On line #15921, replace: Code: ToPlayer()->setFactionForRace(getRace()); with Code: ToPlayer()->setFactionForRace(ToPlayer()->GetFakeRaceOrRace()); #4. BattlegroundQueue.cpp & BattlegroundQueue.h Open BattlegroundQueue.h.. Inside of enum BattlegroundQueueGroupTypes under BG_QUEUE_NORMAL_HORDE = 3, add: Code: BG_QUEUE_MIXED = 4 It should look like this now: Code: enum BattlegroundQueueGroupTypes { BG_QUEUE_PREMADE_ALLIANCE = 0, BG_QUEUE_PREMADE_HORDE = 1, BG_QUEUE_NORMAL_ALLIANCE = 2, BG_QUEUE_NORMAL_HORDE = 3, BG_QUEUE_MIXED = 4 }; On line #65 replace #define BG_QUEUE_GROUP_TYPES_COUNT 4 with: (Just change the 4 to a 5) Code: #define BG_QUEUE_GROUP_TYPES_COUNT 5 Now, under line #75 add: Code: bool FillXPlayersToBG(BattlegroundBracketId bracket_id, Battleground* bg, bool start = false);bool CheckCrossFactionMatch(BattlegroundBracketId bracket_id, Battleground* bg); You're done with BattlegroundQueue.h. Open up and go to BattlegroundQueue.cpp.. On line #840, replace: Code: if (CheckNormalMatch(bg_template, bracket_id, MinPlayersPerTeam, MaxPlayersPerTeam)|| (bg_template->isArena() && CheckSkirmishForSameFaction(bracket_id, MinPlayersPerTeam))) with: Code: if (CheckNormalMatch(bg_template, bracket_id, MinPlayersPerTeam, MaxPlayersPerTeam)|| (bg_template->isArena() && CheckSkirmishForSameFaction(bracket_id, MinPlayersPerTeam))|| CheckCrossFactionMatch(bracket_id, bg_template)) On line #747, replace: Code: if (m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].empty() && m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].empty() && m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE].empty() && m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_HORDE].empty()) return; with: Code: if (m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_ALLIANCE].empty() && m_QueuedGroups[bracket_id][BG_QUEUE_PREMADE_HORDE].empty() && m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_ALLIANCE].empty() && m_QueuedGroups[bracket_id][BG_QUEUE_NORMAL_HORDE].empty() && m_QueuedGroups[bracket_id][BG_QUEUE_MIXED].empty()) return; On line #501 add: Code: if (!bg->isArena()) if (FillXPlayersToBG(bracket_id, bg, false)) return; On line #313, replace: Code: for (uint32 j = index; j < BG_QUEUE_GROUP_TYPES_COUNT; j += BG_TEAMS_COUNT) with: Code: for (uint32 j = 0; j < BG_QUEUE_GROUP_TYPES_COUNT; ++j) On line #298, replace: Code: TC_LOG_ERROR("bg.battleground", "BattlegroundQueue: couldn't find player %s (GUID: %u)", playerName.c_str(), GUID_LOPART(guid)); with: Code: TC_LOG_DEBUG("bg.battleground", "BattlegroundQueue: couldn't find player %s (GUID: %u)", playerName.c_str(), GUID_LOPART(guid)); READ CAREFULLY: Inside of GroupQueueInfo* BattlegroundQueue::AddGroup(Player* leader, Group* grp, BattlegroundTypeId BgTypeId, PvPDifficultyEntry const* bracketEntry, uint8 ArenaType, bool isRated, bool isPremade, uint32 ArenaRating, uint32 MatchmakerRating, uint32 arenateamid) On line #143 replace: Code: ginfo->Team = leader->GetTeam(); with: Code: ginfo->Team = leader->GetBGTeam(); Above line #157 add: Code: if (sWorld->getBoolConfig(CONFIG_CROSSFACTIONBG) && ArenaType == 0) index = BG_QUEUE_MIXED; ON LINE #200 replace: Code: if (Battleground* bg = sBattlegroundMgr->GetBattlegroundTemplate(ginfo->BgTypeId)) { char const* bgName = bg->GetName(); uint32 MinPlayers = bg->GetMinPlayersPerTeam(); uint32 qHorde = 0; uint32 qAlliance = 0; uint32 q_min_level = bracketEntry->minLevel; uint32 q_max_level = bracketEntry->maxLevel; GroupsQueueType::const_iterator itr; for (itr = m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_ALLIANCE].begin(); itr != m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_ALLIANCE].end(); ++itr) if (!(*itr)->IsInvitedToBGInstanceGUID) qAlliance += (*itr)->Players.size(); for (itr = m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_HORDE].begin(); itr != m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_HORDE].end(); ++itr) if (!(*itr)->IsInvitedToBGInstanceGUID) qHorde += (*itr)->Players.size(); // Show queue status to player only (when joining queue) if (sWorld->getBoolConfig(CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY)) { ChatHandler(leader->GetSession()).PSendSysMessage(LANG_BG_QUEUE_ANNOUNCE_SELF, bgName, q_min_level, q_max_level, qAlliance, (MinPlayers > qAlliance) ? MinPlayers - qAlliance : (uint32)0, qHorde, (MinPlayers > qHorde) ? MinPlayers - qHorde : (uint32)0); } // System message else { sWorld->SendWorldText(LANG_BG_QUEUE_ANNOUNCE_WORLD, bgName, q_min_level, q_max_level, qAlliance, (MinPlayers > qAlliance) ? MinPlayers - qAlliance : (uint32)0, qHorde, (MinPlayers > qHorde) ? MinPlayers - qHorde : (uint32)0); } } with: Code: if (Battleground* bg = sBattlegroundMgr->GetBattlegroundTemplate(ginfo->BgTypeId)) { if (sWorld->getBoolConfig(CONFIG_CROSSFACTIONBG)) { char const* bgName = bg->GetName(); uint32 MinPlayers = bg->GetMinPlayersPerTeam()*2; uint32 qPlayers = 0; uint32 q_min_level = bracketEntry->minLevel; uint32 q_max_level = bracketEntry->maxLevel; for (GroupsQueueType::const_iterator itr = m_QueuedGroups[bracketId][BG_QUEUE_MIXED].begin(); itr != m_QueuedGroups[bracketId][BG_QUEUE_MIXED].end(); ++itr) if (!(*itr)->IsInvitedToBGInstanceGUID) qPlayers += (*itr)->Players.size(); if (sWorld->getBoolConfig(CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY)) ChatHandler(leader->GetSession()).PSendSysMessage("Queue status for %s (Lvl: %u to %u) Queued players: %u (Need at least %u more)", bgName, q_min_level, q_max_level, qPlayers, MinPlayers - qPlayers); else { std::ostringstream ss; ss << "|cffff0000[BG Queue Announcer]:|r " << bgName << " -- [" << q_min_level << "-" << q_max_level << "]" << qPlayers << "/" << MinPlayers; sWorld->SendGlobalText(ss.str().c_str(), NULL); } } else { char const* bgName = bg->GetName(); uint32 MinPlayers = bg->GetMinPlayersPerTeam(); uint32 qHorde = 0; uint32 qAlliance = 0; uint32 q_min_level = bracketEntry->minLevel; uint32 q_max_level = bracketEntry->maxLevel; GroupsQueueType::const_iterator itr; for (itr = m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_ALLIANCE].begin(); itr != m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_ALLIANCE].end(); ++itr) if (!(*itr)->IsInvitedToBGInstanceGUID) qAlliance += (*itr)->Players.size(); for (itr = m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_HORDE].begin(); itr != m_QueuedGroups[bracketId][BG_QUEUE_NORMAL_HORDE].end(); ++itr) if (!(*itr)->IsInvitedToBGInstanceGUID) qHorde += (*itr)->Players.size(); // Show queue status to player only (when joining queue) if (sWorld->getBoolConfig(CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY)) { ChatHandler(leader->GetSession()).PSendSysMessage(LANG_BG_QUEUE_ANNOUNCE_SELF, bgName, q_min_level, q_max_level, qAlliance, (MinPlayers > qAlliance) ? MinPlayers - qAlliance : (uint32)0, qHorde, (MinPlayers > qHorde) ? MinPlayers - qHorde : (uint32)0); } // System message else { sWorld->SendWorldText(LANG_BG_QUEUE_ANNOUNCE_WORLD, bgName, q_min_level, q_max_level, qAlliance, (MinPlayers > qAlliance) ? MinPlayers - qAlliance : (uint32)0, qHorde, (MinPlayers > qHorde) ? MinPlayers - qHorde : (uint32)0); } } } And that should be it! Enjoy.
  3. Credit goes to Parranoia for this script. This script automatically generates a list of every enchant you are able to use based on your level and the item level of the slot you clicked on. Dynamic pages are also created to allow you to go through the large lists of enchants. As far as I know there aren't any missing enchants that I could see. Note: This script does not enchant things like leg armors or librams, only things that would normally be found in the enchanting profession. http://pastebin.com/G79k5NKj
  4. Thanosdk's Blizzlike Repack 3.3.5a This is a pure TrinityCore Repack, Blizzlike, nothing edited, nothing added, nothing removed. I decided to start this little project, nothing major. This will be updated when I feel like and have some free time. I will not post percents of whats working and not, you can check that within the TrinityCore Commits and the bugtracker as well. I will upload maps & vmaps separately, each time I update this repack i'll update the maps and vmaps if needed as well. For mmaps you can always find the latest on Jeutie's thread or even better extract them yourself, I dont have the time to do that. Enough chit chat, here is the repack: x86 Compile TrinityCore Rev. 0e82890 TDB 335.58 Blizzlike AHBot as part of TrinityCore (Disabled by default) Automatic Databases Update System (Disabled by default) GM Account: admin/admin Mysql Account: root/ascent Repack Download: Repack Maps Download: Maps Vmaps Download: Vmaps Quick How-To Download and extract the repack anywhere you want. Download maps and vmaps and extract them as well, put the extracted folders within the Core folder of the Repack. Open the _Server folder within the Repack and launch Mysql.bat (Apache.bat is optional for accounts) Within the core folder launch authserver and worldserver Set your realmilist to 127.0.0.1 within your client folder by editing realmlist.wtf file in Data/Enxx/ folder with notepad and save. Login with admin/admin Enjoy Enjoy! Credits to Jeutie for the portable mysql/apache. TrinityCore for their hard work over the years.
  5. [Download] TrinityCore 3.3.5 [Dbc, Maps, VMaps, MMaps] Dec 9, 2014 Fresh TrinityCore Dbc, Maps, VMaps, MMaps files for 3.3.5. Rev: c136e4c415bf8e46d71d972353b1d6805c43f045 Date: Dec 9, 2014 Dbc: Download (8.9mb) - source mega.co.nz Maps: Download (153.2mb) - source mega.co.nz VMaps: Download (261.8mb) - source mega.co.nz MMaps: Download (535.6mb) - source mega.co.nz Note: This is for the DBC, Map files, VMap files and MMap files ONLY. This does NOT contain source code.
  6. Hello All, I know a lot of people have problems with applying this script, so I am writing a guide on how to manually add the 1v1 arena script! This will work with the latest version of TrinityCore (335.58). Any problems, just reply in the thread or start a support thread. Enjoy ------------ /src/server/game/Battlegrounds/ArenaTeam.cpp Find: case ARENA_TEAM_2v2: return 0; case ARENA_TEAM_3v3: return 1; case ARENA_TEAM_5v5: return 2; Replace with: case ARENA_TEAM_2v2: return 0; case ARENA_TEAM_3v3: return 1; case ARENA_TEAM_5v5: return 2; case ARENA_TEAM_1v1: return 3; // Custom 1v1 Arena Rated Find: // Type penalties for teams < 5v5 if (Type == ARENA_TEAM_2v2) points *= 0.76f; else if (Type == ARENA_TEAM_3v3) points *= 0.88f; Replace with: // Type penalties for teams < 5v5 if (Type == ARENA_TEAM_2v2) points *= 0.76f; else if (Type == ARENA_TEAM_3v3) points *= 0.88f; else if (Type == ARENA_TEAM_1v1) //Custom 1v1 Arena Rated points *= 0.70f; /src/server/game/Battlegrounds/ArenaTeam.h Find: enum ArenaTeamTypes{ ARENA_TEAM_2v2 = 2, ARENA_TEAM_3v3 = 3, ARENA_TEAM_5v5 = 5}; Replace with: enum ArenaTeamTypes{ ARENA_TEAM_1v1 = 1, //Custom 1v1 Rated Arena ARENA_TEAM_2v2 = 2, ARENA_TEAM_3v3 = 3, ARENA_TEAM_5v5 = 5}; Find: #define MAX_ARENA_SLOT 3 // 0..2 slots Replace with: #define MAX_ARENA_SLOT 4 // 0..3 slots /src/server/game/Battlegrounds/Battleground.cpp Find: // After 1 minute or 30 seconds, warning is signaled else if (GetStartDelayTime() <= StartDelayTimes[BG_STARTING_EVENT_SECOND] && !(m_Events & BG_STARTING_EVENT_2)) { Add before: // 1v1 Arena - Start arena after 15s, when all players are in arena if(GetArenaType() == ARENA_TYPE_1v1 && GetStartDelayTime() > StartDelayTimes[BG_STARTING_EVENT_THIRD] && (m_PlayersCount[0] + m_PlayersCount[1]) == 2) SetStartDelayTime(StartDelayTimes[BG_STARTING_EVENT_THIRD]); /src/server/game/Battlegrounds/Battleground.h Find: enum ArenaType{ ARENA_TYPE_2v2 = 2, ARENA_TYPE_3v3 = 3, ARENA_TYPE_5v5 = 5}; Replace with: enum ArenaType{ ARENA_TYPE_1v1 = 1, ARENA_TYPE_2v2 = 2, ARENA_TYPE_3v3 = 3, ARENA_TYPE_5v5 = 5}; /src/server/game/Battlegrounds/BattlegroundMgr.cpp Find: for (int qtype = BATTLEGROUND_QUEUE_2v2; qtype <= BATTLEGROUND_QUEUE_5v5; ++qtype) Replace with: for (int qtype = BATTLEGROUND_QUEUE_2v2; qtype <= BATTLEGROUND_QUEUE_1v1; ++qtype) Find: uint32 maxPlayersPerTeam = 0; switch (arenaType) { case ARENA_TYPE_2v2: maxPlayersPerTeam = 2; break; case ARENA_TYPE_3v3: maxPlayersPerTeam = 3; break; case ARENA_TYPE_5v5: maxPlayersPerTeam = 5; break; } Replace with: uint32 maxPlayersPerTeam = 0; switch (arenaType) { case ARENA_TYPE_2v2: maxPlayersPerTeam = 2; break; case ARENA_TYPE_3v3: maxPlayersPerTeam = 3; break; case ARENA_TYPE_5v5: maxPlayersPerTeam = 5; break; case ARENA_TYPE_1v1: maxPlayersPerTeam = 1; break; } Find: BattlegroundMgr::BGQueueTypeId(BattlegroundTypeId bgType Scroll down a little until you see the "switch (arenaType)" Find: switch (arenaType) { case ARENA_TYPE_2v2: return BATTLEGROUND_QUEUE_2v2; case ARENA_TYPE_3v3: return BATTLEGROUND_QUEUE_3v3; case ARENA_TYPE_5v5: return BATTLEGROUND_QUEUE_5v5 default: return BATTLEGROUND_QUEUE_NONE; } Replace with: switch (arenaType) { case ARENA_TYPE_2v2: return BATTLEGROUND_QUEUE_2v2; case ARENA_TYPE_3v3: return BATTLEGROUND_QUEUE_3v3; case ARENA_TYPE_5v5: return BATTLEGROUND_QUEUE_5v5; case ARENA_TYPE_1v1: return BATTLEGROUND_QUEUE_1v1; default: return BATTLEGROUND_QUEUE_NONE; } Find: BattlegroundMgr::BGTemplateId(BattlegroundQueueTypeId Scroll down until you see "switch (bgQueueTypeId)" Find: switch (bgQueueTypeId) { case BATTLEGROUND_QUEUE_WS: return BATTLEGROUND_WS; case BATTLEGROUND_QUEUE_AB: return BATTLEGROUND_AB; case BATTLEGROUND_QUEUE_AV: return BATTLEGROUND_AV; case BATTLEGROUND_QUEUE_EY: return BATTLEGROUND_EY; case BATTLEGROUND_QUEUE_SA: return BATTLEGROUND_SA; case BATTLEGROUND_QUEUE_IC: return BATTLEGROUND_IC; case BATTLEGROUND_QUEUE_RB: return BATTLEGROUND_RB; case BATTLEGROUND_QUEUE_2v2: case BATTLEGROUND_QUEUE_3v3: case BATTLEGROUND_QUEUE_5v5: return BATTLEGROUND_AA; default: return BattlegroundTypeId(0); // used for unknown template (it existed and do nothing) } Replace with: switch (bgQueueTypeId) { case BATTLEGROUND_QUEUE_WS: return BATTLEGROUND_WS; case BATTLEGROUND_QUEUE_AB: return BATTLEGROUND_AB; case BATTLEGROUND_QUEUE_AV: return BATTLEGROUND_AV; case BATTLEGROUND_QUEUE_EY: return BATTLEGROUND_EY; case BATTLEGROUND_QUEUE_SA: return BATTLEGROUND_SA; case BATTLEGROUND_QUEUE_IC: return BATTLEGROUND_IC; case BATTLEGROUND_QUEUE_RB: return BATTLEGROUND_RB; case BATTLEGROUND_QUEUE_2v2: case BATTLEGROUND_QUEUE_3v3: case BATTLEGROUND_QUEUE_5v5: case BATTLEGROUND_QUEUE_1v1: return BATTLEGROUND_AA; default: return BattlegroundTypeId(0); // used for unknown template (it existed and do nothing) } Find: BattlegroundMgr::BGArenaType(BattlegroundQueueTypeId Underneath you'll find "switch (bgQueueTypeId)" Find: switch (bgQueueTypeId) { case BATTLEGROUND_QUEUE_2v2: return ARENA_TYPE_2v2; case BATTLEGROUND_QUEUE_3v3: return ARENA_TYPE_3v3; case BATTLEGROUND_QUEUE_5v5: return ARENA_TYPE_5v5; default: return 0; } Replace with: switch (bgQueueTypeId) { case BATTLEGROUND_QUEUE_2v2: return ARENA_TYPE_2v2; case BATTLEGROUND_QUEUE_3v3: return ARENA_TYPE_3v3; case BATTLEGROUND_QUEUE_5v5: return ARENA_TYPE_5v5; case BATTLEGROUND_QUEUE_1v1: return ARENA_TYPE_1v1; default: return 0; } /src/server/game/Entities/Object/Updates/UpdateFields.h Find: PLAYER_FIELD_COMBAT_RATING_1 = UNIT_END + 0x043B, // Size: 25, Type: INT, Flags: PRIVATE PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = UNIT_END + 0x0454, // Size: 21, Type: INT, Flags: PRIVATE PLAYER_FIELD_HONOR_CURRENCY = UNIT_END + 0x0469, // Size: 1, Type: INT, Flags: PRIVATE PLAYER_FIELD_ARENA_CURRENCY = UNIT_END + 0x046A, // Size: 1, Type: INT, Flags: PRIVATE PLAYER_FIELD_MAX_LEVEL = UNIT_END + 0x046B, // Size: 1, Type: INT, Flags: PRIVATE PLAYER_FIELD_DAILY_QUESTS_1 = UNIT_END + 0x046C, // Size: 25, Type: INT, Flags: PRIVATE PLAYER_RUNE_REGEN_1 = UNIT_END + 0x0485, // Size: 4, Type: FLOAT, Flags: PRIVATE PLAYER_NO_REAGENT_COST_1 = UNIT_END + 0x0489, // Size: 3, Type: INT, Flags: PRIVATE PLAYER_FIELD_GLYPH_SLOTS_1 = UNIT_END + 0x048C, // Size: 6, Type: INT, Flags: PRIVATE PLAYER_FIELD_GLYPHS_1 = UNIT_END + 0x0492, // Size: 6, Type: INT, Flags: PRIVATE PLAYER_GLYPHS_ENABLED = UNIT_END + 0x0498, // Size: 1, Type: INT, Flags: PRIVATE PLAYER_PET_SPELL_POWER = UNIT_END + 0x0499, // Size: 1, Type: INT, Flags: PRIVATE PLAYER_END = UNIT_END + 0x049A Replace with: PLAYER_FIELD_COMBAT_RATING_1 = UNIT_END + 0x043B, // Size: 25, Type: INT, Flags: PRIVATE PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = UNIT_END + 0x0454, // Size: 21, Type: INT, Flags: PRIVATE PLAYER_FIELD_HONOR_CURRENCY = UNIT_END + 0x0469, // Size: 1, Type: INT, Flags: PRIVATE PLAYER_FIELD_ARENA_CURRENCY = UNIT_END + 0x046A, // Size: 1, Type: INT, Flags: PRIVATE PLAYER_FIELD_MAX_LEVEL = UNIT_END + 0x046B, // Size: 1, Type: INT, Flags: PRIVATE PLAYER_FIELD_DAILY_QUESTS_1 = UNIT_END + 0x046C, // Size: 25, Type: INT, Flags: PRIVATE PLAYER_RUNE_REGEN_1 = UNIT_END + 0x0485, // Size: 4, Type: FLOAT, Flags: PRIVATE PLAYER_NO_REAGENT_COST_1 = UNIT_END + 0x0489, // Size: 3, Type: INT, Flags: PRIVATE PLAYER_FIELD_GLYPH_SLOTS_1 = UNIT_END + 0x048C, // Size: 6, Type: INT, Flags: PRIVATE PLAYER_FIELD_GLYPHS_1 = UNIT_END + 0x0492, // Size: 6, Type: INT, Flags: PRIVATE PLAYER_GLYPHS_ENABLED = UNIT_END + 0x0498, // Size: 1, Type: INT, Flags: PRIVATE PLAYER_PET_SPELL_POWER = UNIT_END + 0x0499, // Size: 1, Type: INT, Flags: PRIVATE PLAYER_END = UNIT_END + 0x049A /src/server/game/Miscellaneous/SharedDefines.h Find: enum BattlegroundQueueTypeId{ BATTLEGROUND_QUEUE_NONE = 0, BATTLEGROUND_QUEUE_AV = 1, BATTLEGROUND_QUEUE_WS = 2, BATTLEGROUND_QUEUE_AB = 3, BATTLEGROUND_QUEUE_EY = 4, BATTLEGROUND_QUEUE_SA = 5, BATTLEGROUND_QUEUE_IC = 6, BATTLEGROUND_QUEUE_RB = 7, BATTLEGROUND_QUEUE_2v2 = 8, BATTLEGROUND_QUEUE_3v3 = 9, BATTLEGROUND_QUEUE_5v5 = 10, MAX_BATTLEGROUND_QUEUE_TYPES}; Replace with: enum BattlegroundQueueTypeId{ BATTLEGROUND_QUEUE_NONE = 0, BATTLEGROUND_QUEUE_AV = 1, BATTLEGROUND_QUEUE_WS = 2, BATTLEGROUND_QUEUE_AB = 3, BATTLEGROUND_QUEUE_EY = 4, BATTLEGROUND_QUEUE_SA = 5, BATTLEGROUND_QUEUE_IC = 6, BATTLEGROUND_QUEUE_RB = 7, BATTLEGROUND_QUEUE_2v2 = 8, BATTLEGROUND_QUEUE_3v3 = 9, BATTLEGROUND_QUEUE_5v5 = 10, BATTLEGROUND_QUEUE_1v1 = 11, MAX_BATTLEGROUND_QUEUE_TYPES}; That's the manual edits done! Now to add the 1v1.cpp script: http://pastebin.com/xSsrHh88 And add the creature to the DB: REPLACE INTO `creature_template` VALUES (190016, 0, 0, 0, 0, 0, 29348, 0, 0, 0, '1v1 Rated Arena', 'WoW-BB', 'Speak', 50001, 71, 71, 2, 35, 35, 3, 1, 1.14286, 1.25, 1, 124, 256, 0, 783, 1, 2000, 0, 1, 2, 2048, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 138936390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168000, 190000, '', 0, 3, 1, 1.56, 1.56, 1.56, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 'npc_1v1arena', 12340); If you followed these steps completely, you should have a working 1v1 arena script! UPDATE I have updated the entire post. I have replaced the pastebin script with a completely fresh script and have also provided a fresh creature.
  7. This script will allow you to bet an amount of gold when dueling players. The winner will receive the gold amount set at the beginning of the duel. Credit to Rochet2 for editing the script Parranoia for creating it and Faiver for also updating it. // _ ______ _ _____ ___ // | | /| / / __ \ | /| / / _ )/ _ ) ___ _______ _// | |/ |/ / /_/ / |/ |/ / _ / _ |/ _ \/ __/ _ `/// |__/|__/\____/|__/|__/____/____(_)___/_/ \_, /// /___/ // Script shared from WoWBB.org// Blood Money Duels// Original code by Parranoia from AC-web// Updated by Faiver from Emudevs// Edited by Rochet2// Original thread: http://www.ac-web.org/forums/showthread.php?156980-C-Blood-Money-Duels// Set USE_TOKEN to 1 if you want to have it use tokens in place of gold#define USE_TOKEN 0#define TOKEN_ID 29434#include "ScriptPCH.h"class BloodMoney{public: // Read write lock and guards typedef boost::shared_mutex LockType; typedef boost::shared_lock<LockType> ReadGuard; // Lock for read access: ReadGuard guard(_lock); typedef boost::unique_lock<LockType> WriteGuard; // Lock for write access: WriteGuard guard(_lock); typedef boost::upgrade_lock<LockType> RWRead; // Lock for read access before writing: RWRead read(_lock); typedef boost::upgrade_to_unique_lock<LockType> RWWrite; // Lock for write access before writing: RWWrite write(read); // Data definitions struct MoneyInfo { MoneyInfo() : challenger(0), amount(0), accepted(false) { } uint32 challenger; uint32 amount; bool accepted; }; typedef std::list<MoneyInfo> MoneyList; typedef std::unordered_map<uint32, MoneyList> MoneyListMap; // Returns a copy or empty list MoneyList GetMoneyList(uint32 targetGUID) { ReadGuard guard(_lock); MoneyListMap::const_iterator it = _listMap.find(targetGUID); if (it != _listMap.end()) return it->second; return MoneyList(); } // Finds a challenge and removes it, then returns the challenge amount. Otherwise returns 0 and does nothing uint32 GetAndRemoveChallenge(uint32 targetGUID, uint32 challengerGUID) { RWRead read(_lock); MoneyListMap::iterator it = _listMap.find(targetGUID); if (it == _listMap.end()) return 0; MoneyList& list = it->second; for (MoneyList::iterator itr = list.begin(); itr != list.end(); ++itr) { if (itr->challenger != challengerGUID) continue; if (!itr->accepted) return 0; uint32 amount = itr->amount; RWWrite write(read); list.erase(itr); if (list.empty()) _listMap.erase(targetGUID); return amount; } return 0; } bool IsChallenged(uint32 targetGUID) { ReadGuard guard(_lock); return _listMap.find(targetGUID) != _listMap.end(); } bool HasChallenger(uint32 targetGUID, uint32 challengerGUID) { ReadGuard guard(_lock); MoneyListMap::const_iterator it = _listMap.find(targetGUID); if (it == _listMap.end()) return false; const MoneyList& list = it->second; for (MoneyList::const_iterator itr = list.begin(); itr != list.end(); ++itr) if (itr->challenger == challengerGUID) return true; return false; } bool AddChallenger(uint32 targetGUID, uint32 challengerGUID, uint32 amount) { MoneyInfo moneyInfo; moneyInfo.challenger = challengerGUID; moneyInfo.amount = amount; moneyInfo.accepted = false; RWRead read(_lock); if (HasChallenger(targetGUID, challengerGUID)) return false; if (HasChallenger(challengerGUID, targetGUID)) return false; RWWrite write(read); _listMap[targetGUID].push_back(moneyInfo); return true; } bool RemoveChallenger(uint32 targetGUID, uint32 challengerGUID) { RWRead read(_lock); MoneyListMap::iterator it = _listMap.find(targetGUID); if (it == _listMap.end()) return false; MoneyList &list = it->second; for (MoneyList::iterator it = list.begin(); it != list.end(); ++it) { if (it->challenger != challengerGUID) continue; RWWrite write(read); list.erase(it); if (list.empty()) _listMap.erase(targetGUID); return true; } return false; } bool AcceptChallenge(uint32 targetGUID, uint32 challengerGUID) { RWRead read(_lock); MoneyListMap::iterator it = _listMap.find(targetGUID); if (it == _listMap.end()) return false; MoneyList &list = it->second; for (MoneyList::iterator itr = list.begin(); itr != list.end(); ++itr) { if (itr->challenger != challengerGUID) continue; // Already accepted, internal error if (itr->accepted) return false; RWWrite write(read); itr->accepted = true; return true; } return false; } // Used to lock for using GetMap access LockType& GetLock() { return _lock; } // Access map directly, remember to use lock to guard the read and write MoneyListMap& GetMap() { return _listMap; }private: MoneyListMap _listMap; LockType _lock;};static BloodMoney bloodMoney;class npc_blood_money : public CreatureScript{public: npc_blood_money() : CreatureScript("npc_blood_money") { } enum Sender { SENDER_CLOSE, SENDER_CHALLENGE, SENDER_ACCEPT, SENDER_DECLINE, }; bool OnGossipHello(Player* player, Creature* creature) override { player->ADD_GOSSIP_ITEM(GOSSIP_ICON_BATTLE, "Challenge a Player", SENDER_CHALLENGE, 0); if (bloodMoney.IsChallenged(player->GetGUIDLow())) { BloodMoney::MoneyList list = bloodMoney.GetMoneyList(player->GetGUIDLow()); for (BloodMoney::MoneyList::const_iterator it = list.begin(); it != list.end(); ++it) { // Skip accepted entries if (it->accepted) continue; if (Player* plr = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, it->challenger))) {#if(USE_TOKEN == 1) char msg[100]; sprintf(msg, "Accept %s's Challenge of %u tokens", plr->GetName().c_str(), it->amount); player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, msg, SENDER_ACCEPT, it->challenger); sprintf(msg, "Decline %s's Challenge of %u tokens", plr->GetName().c_str(), it->amount); player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, msg, SENDER_DECLINE, it->challenger);#else char msg[100]; sprintf(msg, "Accept %s's Challenge of %ug", plr->GetName().c_str(), it->amount); player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, msg, SENDER_ACCEPT, it->challenger); sprintf(msg, "Decline %s's Challenge of %ug", plr->GetName().c_str(), it->amount); player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, msg, SENDER_DECLINE, it->challenger);#endif } } } player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Nevermind", SENDER_CLOSE, 0); player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID()); return true; } bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) { player->PlayerTalkClass->ClearMenus(); switch (sender) { case SENDER_ACCEPT: if (bloodMoney.AcceptChallenge(player->GetGUIDLow(), action)) { if (Player* challenger = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, action))) creature->Whisper(player->GetName() + " has accepted your challenge!", LANG_UNIVERSAL, challenger, true); } else { player->GetSession()->SendNotification("Internal error, try again"); } break; case SENDER_DECLINE: if (bloodMoney.RemoveChallenger(player->GetGUIDLow(), action)) { if (Player* challenger = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, action))) creature->Whisper(player->GetName() + " has declined your challenge!", LANG_UNIVERSAL, challenger, true); } break; case SENDER_CHALLENGE:#if(USE_TOKEN == 1) player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 5 tokens", GOSSIP_SENDER_MAIN, 5, "", 0, true); player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 10 tokens", GOSSIP_SENDER_MAIN, 10, "", 0, true); player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 15 tokens", GOSSIP_SENDER_MAIN, 15, "", 0, true); player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 25 tokens", GOSSIP_SENDER_MAIN, 25, "", 0, true); player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 50 tokens", GOSSIP_SENDER_MAIN, 50, "", 0, true); player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 100 tokens", GOSSIP_SENDER_MAIN, 100, "", 0, true); player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 150 tokens", GOSSIP_SENDER_MAIN, 150, "", 0, true); player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 200 tokens", GOSSIP_SENDER_MAIN, 200, "", 0, true); player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 250 tokens", GOSSIP_SENDER_MAIN, 250, "", 0, true); player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 500 tokens", GOSSIP_SENDER_MAIN, 500, "", 0, true);#else player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 5g", GOSSIP_SENDER_MAIN, 5, "", 5 * GOLD, true); player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 10g", GOSSIP_SENDER_MAIN, 10, "", 10 * GOLD, true); player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 15g", GOSSIP_SENDER_MAIN, 15, "", 15 * GOLD, true); player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 25g", GOSSIP_SENDER_MAIN, 25, "", 25 * GOLD, true); player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 50g", GOSSIP_SENDER_MAIN, 50, "", 50 * GOLD, true); player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 100g", GOSSIP_SENDER_MAIN, 100, "", 100 * GOLD, true); player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 150g", GOSSIP_SENDER_MAIN, 150, "", 150 * GOLD, true); player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 200g", GOSSIP_SENDER_MAIN, 200, "", 200 * GOLD, true); player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 250g", GOSSIP_SENDER_MAIN, 250, "", 250 * GOLD, true); player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_MONEY_BAG, "Bet 500g", GOSSIP_SENDER_MAIN, 500, "", 500 * GOLD, true);#endif player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID()); return true; default: player->CLOSE_GOSSIP_MENU(); return true; } OnGossipHello(player, creature); return true; } bool OnGossipSelectCode(Player* player, Creature* creature, uint32 sender, uint32 action, const char* code) { player->PlayerTalkClass->ClearMenus(); std::string targetName(code); if (player->GetName() == targetName) { player->GetSession()->SendNotification("You can not challenge yourself"); OnGossipSelect(player, creature, SENDER_CHALLENGE, GOSSIP_ACTION_INFO_DEF); return true; } Player* target = sObjectAccessor->FindPlayerByName(targetName); if (!target) { player->GetSession()->SendNotification("Challenged player not logged in"); OnGossipSelect(player, creature, SENDER_CHALLENGE, GOSSIP_ACTION_INFO_DEF); return true; } if (player->GetGUID() == target->GetGUID()) { player->GetSession()->SendNotification("You can not challenge yourself"); OnGossipSelect(player, creature, SENDER_CHALLENGE, GOSSIP_ACTION_INFO_DEF); return true; } if (target->GetZoneId() != player->GetZoneId()) { player->GetSession()->SendNotification("%s is not in same zone", target->GetName().c_str()); OnGossipSelect(player, creature, SENDER_CHALLENGE, GOSSIP_ACTION_INFO_DEF); return true; }#if (USE_TOKEN == 1) if (!player->HasItemCount(TOKEN_ID, action)) { player->GetSession()->SendNotification("You do not have enough tokens"); OnGossipSelect(player, creature, SENDER_CHALLENGE, GOSSIP_ACTION_INFO_DEF); return true; } if (!target->HasItemCount(TOKEN_ID, action)) { player->GetSession()->SendNotification("%s does not have enough tokens", target->GetName().c_str()); OnGossipSelect(player, creature, SENDER_CHALLENGE, GOSSIP_ACTION_INFO_DEF); return true; }#else if (target->GetMoney() < action * GOLD) { player->GetSession()->SendNotification("%s does not have enough money", target->GetName().c_str()); OnGossipSelect(player, creature, SENDER_CHALLENGE, GOSSIP_ACTION_INFO_DEF); return true; } if (player->GetMoney() < action * GOLD) { player->GetSession()->SendNotification("You do not have enough money"); OnGossipSelect(player, creature, SENDER_CHALLENGE, GOSSIP_ACTION_INFO_DEF); return true; }#endif if (!bloodMoney.AddChallenger(target->GetGUIDLow(), player->GetGUIDLow(), action)) { player->GetSession()->SendNotification("One of you already challenged the other"); OnGossipSelect(player, creature, SENDER_CHALLENGE, GOSSIP_ACTION_INFO_DEF); return true; } creature->Whisper(player->GetName() + " has requested a Blood Money duel with you!", LANG_UNIVERSAL, target, true); player->CLOSE_GOSSIP_MENU(); return true; }};class BloodMoneyReward : public PlayerScript{public: BloodMoneyReward() : PlayerScript("BloodMoneyReward") { } void OnDuelEnd(Player* winner, Player* loser, DuelCompleteType type) { if (type != DUEL_WON) return; // Loser challenged winner uint32 amount = bloodMoney.GetAndRemoveChallenge(winner->GetGUIDLow(), loser->GetGUIDLow()); // Winner challenged loser if (!amount) amount = bloodMoney.GetAndRemoveChallenge(loser->GetGUIDLow(), winner->GetGUIDLow()); // No challenges if (!amount) return;#if (USE_TOKEN == 1) if (!winner->HasItemCount(TOKEN_ID, amount)) { winner->AddAura(15007, winner); // Apply Rez sickness for possible cheating ChatHandler(winner->GetSession()).PSendSysMessage("|cff800C0C[Blood Money] |cffFFFFFFYou have gained Resurrection Sickness for possibly trying to abuse the system."); ChatHandler(loser->GetSession()).PSendSysMessage("|cff800C0C[Blood Money] |cffFFFFFFYour opponent tried to cheat you. Don't worry you did not lose any tokens because of this."); } else if (!loser->HasItemCount(TOKEN_ID, amount)) { loser->AddAura(15007, loser); // Apply Rez sickness for possible cheating ChatHandler(winner->GetSession()).PSendSysMessage("|cff800C0C[Blood Money] |cffFFFFFFYou have gained Resurrection Sickness for possibly trying to abuse the system."); ChatHandler(loser->GetSession()).PSendSysMessage("|cff800C0C[Blood Money] |cffFFFFFFYour opponent tried to cheat you. Don't worry you did not lose any tokens because of this."); } else { winner->AddItem(TOKEN_ID, amount); loser->DestroyItemCount(TOKEN_ID, amount, true); ChatHandler(winner->GetSession()).PSendSysMessage("|cff800C0C[Blood Money] |cffFFFFFFCongratulations on winning %u tokens!", amount); }#else int32 money = amount * GOLD; if (winner->GetMoney() < money) { winner->AddAura(15007, winner); // Apply Rez sickness for possible cheating ChatHandler(winner->GetSession()).PSendSysMessage("|cff800C0C[Blood Money] |cffFFFFFFYou have gained Resurrection Sickness for possibly trying to abuse the system."); ChatHandler(loser->GetSession()).PSendSysMessage("|cff800C0C[Blood Money] |cffFFFFFFYour opponent tried to cheat you. Don't worry you did not lose any money because of this."); } else if (loser->GetMoney() < money) { loser->AddAura(15007, loser); // Apply Rez sickness for possible cheating ChatHandler(winner->GetSession()).PSendSysMessage("|cff800C0C[Blood Money] |cffFFFFFFYour opponent tried to cheat you. He did not have enough money to pay off the bet."); ChatHandler(loser->GetSession()).PSendSysMessage("|cff800C0C[Blood Money] |cffFFFFFFYou have gained Resurrection Sickness for possibly trying to abuse the system."); } else { winner->ModifyMoney(money); loser->ModifyMoney(-money); ChatHandler(winner->GetSession()).PSendSysMessage("|cff800C0C[Blood Money] |cffFFFFFFCongratulations on winning %ug!", amount); }#endif }};void AddSC_npc_blood_money(){ new BloodMoneyReward(); new npc_blood_money();} Enjoy
  8. Hello everyone ! I Am today showing to you how can you change to all items the Item Level . UPDATE item_template SET ItemLevel = 255; Number 255 you can change with withever you want I hope i helped .
  9. Hello! Can anyone tell me how to make 1 script with : First players must to kill mobs and after mobs the boss will be attackable. After it when is the boss dead, to spawn object (like berserking ) and to be spawned there for 5 or 10seconds ? How to make ? ( let's say i want to add it to this script -> )
  10. CURRENT VERSION 2.0 Armor Creator is Auto-Updated Now! TOTAL DOWNLOADS : 197 -- Updated 4/27/2018 Greetings everyone, been long time since i released something.. so in the past few days i was thinking to finish an already "Idea" that i got, which is the 'Armor Creator' as i've seen a lot of items creator around but you need to fill x 40 boxes at least and sometimes it is outdated and could rip your DB.. well i decided to open this project since i got a lot of free time specially this days / months and well i'll not stop here and i'll try to work more on the code and make it better and better and important which is easy to use with few click. As before giving you any information the design is simple as it is since i didn't find a designer, so if you're a designer please feel free to contact me ( the project isn't going to stop here ). Armor Creator is also made by VB.NET Information about the Armor Creator By using Armor Creator you will be able to create a full set in few minutes. Easy Manage. Not complicated to use. Most of needed columns available. No need to know the ID's or any other information. Item name could be eaisly colored. Random DisplayID finder (Offline). Advanced Offline DisplayID finder. Enabling/Disabling Stats. Item Preview. Advanced Mode. Guessing DisplayID(Advanced Mode) ExtendedCost Lookup (Offline) Full SQL Code Preview. Copying SQL. Generate SQL file with the output query. Directly Database Inserting. Edit Items directly from your database. REPLACE Item Directly to your database. UPDATE Items directly to your database. Database information can be saved and reset. Checking database connection. Every log will be saved so you could later check what you've done. New form SQL. You can now insert / delete / update / replace any use most mysql commands directly using SQL. Search items by name and by entry. Paypal form is updated. Auto Updater. Item.DBC Creator + Patch Steps Creator. Logs Managment. Settings Added. Limitation for values. Currently Working on Next Version Credits : JadaDev : Coding everything related to the application. DarkSoke : UI Design. Tok124 : Online Finder. Images Album CLICK HERE Screenshots : Watch Video [V1.1] :
  11. Hi guys, Today I'll be sharing some class trainers I made for TrinityCore version 3.3.5. Here are the ID's:- 80000 = Death Knight Trainer 80001 = Warlock Trainer 80002 = Shaman Trainer 80003 = Mage Trainer 80004 = Paladin Trainer 80005 = Hunter Trainer 80006 = Druid Trainer 80007 = Rogue Trainer 80008 = Warrior Trainer 80009 = Priest Trainer Screenshot:- Download: http://pastebin.com/Ar0a4ybZ Please remember to give credits if sharing.
  12. Full credit goes to Darksoke for this. I'm simply sharing . These scrolls will teach you Dual Wield and Titan's Grip if you right click on them. Spellcharges are -1 so after you rightclick 1 time the scroll will disappear. http://pastebin.com/aAEJSAVB
  13. Developers : cyberpro98 Full Credits to : Cyberpro98 Repack Info : Based on TRINITY/MANGOS Core : TrinityCore Core Revision : BlizzLikeCore Rev: 0000-00-00 00:00:00 +0000 Hash: Archived (Win32,little-endian) DB Version : BDB_20121014 Databases:world;auth;characters Script_version : ACID 2.0.7 - Full Release for BizzLikeCore TBC (2.4.3 Client) Realms: Mental WoW [Level 255] Realm Info : Realm Name: Mental WoW [Level 255] GameBuild: 2.4.3 -- The Burning Crusade (TBC) -- GameType: Normal -- PVP & PVE -- NPStart Level: 255 -- Normal Player Start Level -- PMax Level: 255 -- Impossible to levelup more than 255 -- Most spells and talents are working. Druids are working 99% as intended. Hunters are working 99% as intended. Mages are working 99% as intended. Paladins are working 99% as intended. Priests are working 99% as intended. Rogues are working 99% as intended. Shamans are working 99% as intended. Warlocks are working 99% as intended. Warriors are working 90% as intended. All Rates : Rate.Creature.Aggro = 1 Rate.Corpse.Decay.Looted = 0.5 Rate.Creature.Normal.Damage = 1 Rate.Creature.Elite.Elite.Damage = 1 Rate.Creature.Elite.RAREELITE.Damage = 1 Rate.Creature.Elite.WORLDBOSS.Damage = 1 Rate.Creature.Elite.RARE.Damage = 1 Rate.Creature.Normal.SpellDamage = 1 Rate.Creature.Elite.Elite.SpellDamage = 1 Rate.Creature.Elite.RAREELITE.SpellDamage = 1 Rate.Creature.Elite.WORLDBOSS.SpellDamage = 1 Rate.Creature.Elite.RARE.SpellDamage = 1 Rate.Creature.Normal.HP = 1 Rate.Creature.Elite.Elite.HP = 1 Rate.Creature.Elite.RAREELITE.HP = 1 Rate.Creature.Elite.WORLDBOSS.HP = 1 Rate.Creature.Elite.RARE.HP = 1 Server Rates : Rate.Health = 5 Rate.Mana = 5 Rate.Rage.Income = 20 Rate.Rage.Loss = 1 Rate.Focus = 5 Rate.Energy = 25 Rate.Loyalty = 5 Rate.Skill.Discovery = 100 Rate.Drop.Item.Poor = 100 Rate.Drop.Item.Normal = 90 Rate.Drop.Item.Uncommon = 80 Rate.Drop.Item.Rare = 70 Rate.Drop.Item.Epic = 60 Rate.Drop.Item.Legendary = 1 Rate.Drop.Item.Artifact = 1 Rate.Drop.Item.Referenced = 1 Rate.Drop.Money = 1 Rate.XP.Kill = 100 Rate.XP.Quest = 1 Rate.XP.Explore = 10 Rate.XP.PastLevel70 = 300 Rate.Rest.InGame = 1 Rate.Rest.Offline.InTavernOrCity = 1 Rate.Rest.Offline.InWilderness = 1 Rate.Damage.Fall = 1 Rate.Auction.Time = 1 Rate.Auction.Deposit = 1 Rate.Auction.Cut = 1 Rate.Honor = 1 Rate.Mining.Amount = 1 Rate.Mining.Next = 1 Rate.Talent = 10 Rate.Reputation.Gain = 2 Rate.InstanceResetTime = 1 RANKS : Level 0 - Player Level 1 - VIP Level 2 - GameMaster Level 3 - Administrator Level 4 - Console (OWNER) Login Info: Login Database Info Network type : MySQL ( TCP / IP ) Hostname/IP : Localhost or 127.0.0.1 Port : 3306 User : root password : root Login Ingame Info: UserName & Password : Owner owner -- GMLevel : 4 Repack more info : 700 Custom Item Epic Custom Commands VIP System World Chat System Teleporter NPC Heal NPC KilStreak System On Login Divine shield 8 seconds On creating New character shows - We welcome to our new champion NameofChar Beatmaster NPC Transmogrifier NPC World Trainer Custom Instances / Quests Mount Vendor Welcome Quest Custom Duel Reset Custom Exteneded Cost Mall -- NonPVP Custom Commands : .world channel .vip chat .vip buffs .vip online .vip waterwalk on/off .vip hover .unstuck **ATTENTION** The Databases you will need to add them MANUALY! And files , which are : libeay32.dll , libmysql.dll , libssl32.dll , ssleay32.dll , ace.dll . DOWNLOADS DLL FILES - CLICK HERE DBC/MAPS/VMAPS - CLICK HERE CONFIG FILES , EXE FILES , AND AUTH/WORLD/CHARACTERS DB - CLICK HERE If is anyone Interested to buy the full core + source code PM ME If you want to support me , you can do it by donating for hard work
  14. 4.3.4 NPCBOT REPACK REDUX (out with the old in with the old) I've grabbed Jcarter's last source for the 4.3.4 NPCBOTs and have done a fresh compile with some updates and made a very fun server. Don't ask about percentages lol as it's no where near 100% Here's what I have updated since v7 of Jcarter's Repack: WORKING ON/FIXED -added Auctionhouse Bot to core (older style tested and works for buying and selling) -Worgen (two forms) at lvl 10 and running wild at lvl 20 for now you can learn those from the Druid Trainer "Celeste of the Harvest" outside Stormwind. It's on my fix list to add it to more trainers so any class of Worgen can get it from their class trainer -Hyjal alot of quests (need some scripting fixes on gameobjects and NPC's) -spawned 50,000 missing creatures and NPC's in Cata areas -old areas work well (alot quests work) Have testers reporting issues to my forum. -DK Starting area works all the way through (needs some fixes very hacked) -professions work (no Archeology), flight masters, trainers work -most portals fixed alliance, most transports fixed, quest fixes TO DO -Twilight Highlands (has mobs and NPC's and quests) -tested quite alot working -look at Worgen Starting area (for now Worgens spawn in Elwynn Forest) -Maelstrom (mob and NPC's are there and quests) -not tested -test dungeons and raids (pre Cata ones seem pretty good) -look at Goblin Starting area (for now spawn in Orc area.) -Vashjir (has mobs and NPC's and quests) -not tested -Uldum (has mobs and NPC's and quests) -not tested -Tol Barad (mobs and NPC's and quests) -not tested -look at hack fixes, creature movements -core fixes and much much more DOWNLOAD VERSION 1 HERE: http://www.mediafire.com/download/om...tCore_Redux.7z DOWNLOAD MAPS HERE: http://www.mediafire.com/download/vw...9r918a/maps.7z DOWNLOAD VMAPS HERE: http://www.mediafire.com/download/s7...t62i3/vmaps.7z DOWNLOAD MMAPS HERE: http://www.mediafire.com/download/m4...3qnii/mmaps.7z (put maps,vmaps and mmaps inside 434_BotCore_Redux\434_BotCore folder) (DB error logging disabled as opcodes need fixes yet) (Repack is 32bit but will not work on Windows XP dll's included so will run on 32/64 bit) This is by no means complete and maybe no where near as complete as EMUCOACH or WOWSource 4.3.4 Repacks but is better than before and it has NPCBOTS! I will update when I can (on my spare time) but there won't be daily fixes! Maybe weekly or monthly. (I will post the source with the ahbot included for advanced users as I do this for fun and learning and any help is always welcome! You are welcome to share your fixes and you'll get full credit for them, I want this to be a community Repack all I'm interested is having fun) Use .npcbot helper in chat to bring up NPCBOT Menu main account: admin pw: admin DON'T PLAY WITH AHBOT ACCOUNT OR DELETE IT! THIS IS FOR THE AHBOT Useful npcbot commands (make macros) .npcb (brings up a list of available bot commands) .npcbot helper (brings up bot menu to add remove bots) .npcbot command stay (targeted bot will stay) .npcbot command follow (targeted bot will follow after stay command) .npcbot revive (revives targeted bot) .npcbot distance xx (where xx=distance in meters targeted bot will stay from master) .mt (sets targeted bot to be main tank) credits: Jcarter (original idea and repack I miss you man), Trickerer (NPC bots),Trinity (Core and more), EMUCOACH (creature spawns,smart scripts and fixes), WoWSource (creature spawns,smart scripts and fixes) Jeutie, Tkrokli (encouragement) and me dmanbob (@ $0 per/hour)
  15. Hi there, i am using BlizzLike Core which is based on Mangos/OregonCore i've gone to level0.cpp and added this -> bool ChatHandler::HandleWorldChannelCommand(const char* args) { if (!*args) return false; sWorld.SendWorldText(LANG_WORLD_CHANNEL, m_session->GetPlayer()->GetName(), args); return true; } and after it i've gone to Language.hand added -> LANG_WORLD_CHANNEL = 20019, Gone to -> ctype-gbk.c and added -> 20019, and after it Chat.cppadded - > static ChatCommand WorldChannelCommandTable[] = { { "world channel", SEC_PLAYER, true, &ChatHandler::HandleWorldChannelCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; and after it i've gone to -> Chat.h and added - > bool HandleWorldChannelCommand(const char* args); And it's now working ingame ... i've added and BlizzLike_string in DB And in command table but it's not working it shows ingame There is no such command.Any IDEA ?
  16. The Darkmoon Faire scripts didn't work on my realm, so we made this script for the "Blastenheimer 5000 Ultra Cannon" and "Tonk Controller" I don't know if its bugged on all trinity cores but if you need the fix to get them working, here it is. It's not working with the blizzlike routes for the "Blastenheimer 5000 Ultra Cannon". Just shoots you just a random direction. Besides that it should work fine. Have fun Pastebin: http://pastebin.com/BMUVa881 Full credits go to Sopse.
  17. cyberpro98

    SQL Errors

    Hello ... since i setup my old core i am getting some errors which i don't remember to resolve ... If anyone can help me with this .. ? SQL: SELECT morph FROM character_morph WHERE guid = 1 query ERROR: Table 'characters.character_morph' doesn't exist SQL: SELECT scale FROM character_scale WHERE guid = 1 query ERROR: Table 'characters.character_scale' doesn't exist SQL: REPLACE INTO `character_scale` VALUES (1, 1, 'Default Scale') SQL ERROR: Table 'characters.character_scale' doesn't exist ---> Picture attached
  18. How to Add Multiple Realms Using Repacks First open your server folder, there you will see 2 folders ( core and server or _server) Add a new folder and name core2 for ex, you can name it how you want Go in core folder and copy all files in core2 (your new created folder) Open your worldserver.config file from second core inside look for: RealmID = 1 and change 1 with 2 (RealmID = 2) LoginDatabaseInfo = "127.0.0.1;3306;root;ascent;auth" leave it like this WorldDatabaseInfo = "127.0.0.1;3306;root;ascent;world" change world with world2 ( "127.0.0.1;3306;root;ascent;world2" ) CharacterDatabaseInfo = "127.0.0.1;3306;root;ascent;characters" change characters with characters2 ( "127.0.0.1;3306;root;ascent;characters2") WorldServerPort = 8085 Change 8085 with 8086 (WorldServerPort = 8086) After you are done close and save it Time for Database (mysql) First lets open your mysql server (inside _server or server you have mysql_start.bat, open it and minimize it. Open Your Database editor (i use navicat) Enter your server info. Host : localhost or 127.0.0.1 Port : 3306 (your mysql port) User : root password : ascent Hit ok There in your right part of your screen are your databases: auth - characters - world Duble click on auth and look for realmlist table, open it: Inside are the info of your first ream,lets insert a new record hit the key Insert from your kayboard and enter the next info: Id - 2 Name - the name of your second realm.Insert what you want. address -127.0.0.1 for localhost port - 8086 the rest of info set them like your first realm. Close the table and hit save if ask Now double click on characters database to open, right click and select Dump SQL File... Enter the name characters2 and set the address where you want to save it (lets say on desktop) When its done do the same thing with the world database and name it world2 Now lets create new databases for them: Press right click in the right part of your screen (duh ) and select New Database Enter the name characters2 , duble click on it, right click and select Execute SQL File... go to your desktop and select characters2 Do the same thing with world2 and that's it Go to your core folder and start authserver.exe and worldserver.exe- this will start your first server Go to core2 and start worldserver.exe - the authserver.exe and authserve.config from core2 can be deleted , you dont need them any more. That's all! Credit to †he Ghos†for writing the tutorial.
  19. C++ Remove Player Resurrect Timer and Spawning at GY This is only a small edit, but is handy for those fun servers! This simple core edit removes players resurrect time and also makes players resurrect where they die. Remove Resurrect timer (in seconds): Open > Player.cpp Find (line 145): static uint32 copseReclaimDelay[MAX_DEATH_COUNT] = { 30, 60, 120 }; Replace: static uint32 copseReclaimDelay[MAX_DEATH_COUNT] = { 0 }; Remove resurrecting at GY's: Find (line 5512): TeleportTo(ClosestGrave->map_id, ClosestGrave->x, ClosestGrave->y, ClosestGrave->z, GetOrientation()); Replace: //TeleportTo(ClosestGrave->map_id, ClosestGrave->x, ClosestGrave->y, ClosestGrave->z, GetOrientation());
  20. Use this guide on how to install Boost for Windows: CLICK HERE I make this tutorial since the tutorials I've found is outdated and dosen't really work now, so I decided to make a new one that I'll keep updated. 1. Getting the required programs You will need to prepare all the programs before you even thinking of compiling. Here a download link with all the programs. I took some time and made a ZIP file with all the programs required. CLICK HERE TO DOWNLOAD (586.6MB) 2. Getting the source Of course, you need a source of TrinityCore before you can compile it. To get it there is 2 ways,but we are going to focus on the best one. Open up Git Extentions Choose your language, I recommend using English since this tutorial is in english. Close the first window that will pop up, a new one will appear right after At the links at the left side, press "Clone Repository" Fill out the following data: Repository to clone: https://github.com/TrinityCore/TrinityCore.gitDesination: C:\TrinitySubdirectory to create: SourceBranch: 3.3.5Repository Type: Personal Repository Now, hit Clone and let it get the repository for you All done so far. You are now getting the source of TrinityCore's 3.3.5a. Later on I willmake a guide on how to make a 6.1.2 Server. 3. Cmake Now we are going to build the source we just downloaded. Open up Cmake Fill out the following data: Where is the source code: C:\Trinity\SourceWhere to build the binaries: C:\Trinity\Build Press Configure Locate "Visual Studio 12 2013" in the dropdown list Now select eh option "Use Default Native Compilers (default) Press Finish then let it load When it is finished, there is a bunch of check boxes in the field that was emty, add the checkbox "TOOLS" Press "Generate" 4. Compiling the server Now,we can finally compile the server itself. This part will take some time and slow down your PC, VPS, Dedicated Server w/e. So playing games and such while doing this will not work. Ecept maybe Playing PacMan, but what do I know... Open up the build folder located in C:\Trinity\ Open up the file "TrinityCore.sln At the top navbar of Visual Studio 2013, hit "BUILD" and then "Build Sulotion" Now, let it load for a while. Go and shop some food, drink some water, milk w/e because this willlsow down your PC and take time. Once it's done, go to the folder "bin" in the build folder, then "Release" and there is your server! Now what you need to do is get the right databases. There is tutorials around the web on how you get the databases. Credit to Djundead
  21. Morphs into different races but keeps the gear you wear. Hi, the title explains a lot. :: NPC is supposed to morph the player into racial morphs :: I`ll release my first self made script, it's nothing special but for someone like me who's a bloody noob in C++ it's something cool. Changed WOTLK pastebin: http://pastebin.com/XG0iuWm4 - (Updated & buggs are fixed, everything works fine with the latest TrinityCore, tested: 12/4/2015 2:29) Unchanged Cataclysm pastebin: http://pastebin.com/ErZ2AHH8 - (Updated) For bugg reports please answer to this thread. If the link is outdated answer to this thread. [Trinity] How to add a C++ script to your core. Credit to - Ant i-
  22. I think a lot of people struggle with making their World of Warcraft private server public so that their friends can connect and play with them. This is not as difficult as you think and here are the basic steps to make it public: Step 1 - Assign Your Computer a Static IP Address Follow this URL/Guide on how to do this on different operating system versions. Note: If you don't do this and your LAN IP address changes, people will NOT be able to connect to your server/computer. You need to give your computer a static LAN IP address that never changes (for example 192.168.0.50 or 192.168.1.50 depending on your routers IP). Step 2 - Portforward the Realmlist and Worldserver Ports Follow this URL/Guide on how to do this using different router makes/models. The following ports MUST be forwarded using your new static local IP which you setup in step 1: 3724 - Realmlist port 8085 - Worldserver port Step 3 - Edit your Auth > Realmlist table Visit our sister website IPGetter.com to get your internets IP address. Open your database via HeidiSQL or preferred SQL program, go into the "auth" database and open the "realmlist" table. There, change the address from "127.0.0.1" to the IP address taken from IPGetter.com. Save, close and success! You're done!.
  23. Hi guys, This little script here will give the player a set amount of gold (10 in this example) when they right click the item. It will also send them a little message telling them how much they received. The item will be destroyed after it's used. They cannot use it whilst in combat, bg, arena or whilst flying. Note: The SQL query will replace the following item in the DB - http://www.wowhead.com/item=25419/unmarked-bag-of-gems. This is done so you don't need a custom patch to use it! C++ http://pastebin.com/jiM9ACC4 SQL REPLACE INTO `item_template` VALUES (25419, 15, 0, -1, 'Bag of Gold 10', 2588, 7, 134221824, 0, 1, 0, 1, 0, -1, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1000, 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, 33227, 0, -1, 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, 1, 'A bag containing 10 gold!', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 'bag_of_gold10', 0, 0, 0, 0, 0, 12340);
  24. Here is a script of a Store NPC. It allows you to set several categories and several items in each category. When you talk to the NPC, you will first see how much coins you have and then, below, all the categories. When you click on a cateogory, it will display all the items available in this category on the following form: [price] ItemName (x quantity) Price is the amount of coins required to purchase the item ItemName is the name of the item. When you create your store you just have to put the item entry and it will find its name Quantity is the quantity of the item that the player will receive if it makes the purchase Once its done, the player can click on the item he wants to purchase it. This store is managed through the database so you will have to define items and categories in the database. When you add a new item, you will just have to give its entry and the script will find its name based on that. There is an equipment level constraint that you can apply if you want: for each item, you can set the required average item level for the players. If their item level is below that constraint, they won't see the item. When you add an item in the store, you can choose how much items the player will receive if it makes the purchase. The script and all the details and explainations is available on the Maelstrom-Scripts repo. Posted by BluntShadow so credit to him! Enjoy.
  25. This simple script can make any npc within the specified range, whisper a player on their first login. This is especially useful when it comes to servers with custom starter npcs. The whisper is delayed by 2.5seconds so the npc whispers After the player have joined chat channels, etc etc.. All you need to edit is 89999 & 25.0f in this line: if (Creature* creature = player->FindNearestCreature(89999, 25.0f)) 89999 Being the ID of your npc and 25.0f being the max range to search for your npc. aswell as the whisper message in this line: creature->Whisper("PSSST Hey you!..Yes You! Come to me!", LANG_UNIVERSAL, player); If you wish to delay the whisper more or less than it is now, edit the "2500" in the following line: player->m_Events.AddEvent(this, player->m_Events.CalculateTime(2500)); This time is in Miliseconds, meaning 1000 = 1 second. Full Script: #include "Creature.h"#include "Define.h"#include "EventProcessor.h"#include "Player.h"#include "ScriptMgr.h"#include "SharedDefines.h"class DelayedWhisper : public BasicEvent{public: DelayedWhisper(Player* player) : BasicEvent(), player(player) { player->m_Events.AddEvent(this, player->m_Events.CalculateTime(2500)); } bool Execute(uint64, uint32) override { if (Creature* creature = player->FindNearestCreature(89999, 25.0f)) { creature->Whisper("PSSST Hey you!..Yes You! Come to me!", LANG_UNIVERSAL, player); } return true; } Player* player;};class FirstLogin : public PlayerScript{public: FirstLogin() : PlayerScript("FirstLogin") {} void OnLogin(Player* player, bool firstLogin) override { if (!firstLogin) return; new DelayedWhisper(player); }};void AddSC_FirstLogin(){ new FirstLogin();} Credits: Rochet2 for whisper delay. Coth for idea and original script.
×
×
  • Create New...