/* * Copyright (C) 2010 - 2015 Eluna Lua Engine * This program is free software licensed under GPL version 3 * Please see the included DOCS/LICENSE.md for more information */ #ifndef GUILDMETHODS_H #define GUILDMETHODS_H namespace LuaGuild { /* GETTERS */ /** * Returns a table with the [Player]s in this [Guild] * * @return table guildPlayers : table of [Player]s */ int GetMembers(Eluna* /*E*/, lua_State* L, Guild* guild) { lua_newtable(L); int tbl = lua_gettop(L); uint32 i = 0; { #ifdef TRINITY boost::shared_lock lock(*HashMapHolder::GetLock()); #else HashMapHolder::ReadGuard g(HashMapHolder::GetLock()); #endif const HashMapHolder::MapType& m = eObjectAccessor->GetPlayers(); for (HashMapHolder::MapType::const_iterator it = m.begin(); it != m.end(); ++it) { if (Player* player = it->second) { if (player->GetSession() && (player->GetGuildId() == guild->GetId())) { ++i; Eluna::Push(L, i); Eluna::Push(L, player); lua_settable(L, tbl); } } } } lua_settop(L, tbl); // push table to top of stack return 1; } /** * Returns the member count of this [Guild] * * @return uint32 memberCount */ int GetMemberCount(Eluna* /*E*/, lua_State* L, Guild* guild) { Eluna::Push(L, guild->GetMemberSize()); return 1; } /** * Finds and returns the [Guild] leader by their GUID if logged in * * @return [Player] leader */ int GetLeader(Eluna* /*E*/, lua_State* L, Guild* guild) { #ifndef TRINITY Eluna::Push(L, eObjectAccessor->FindPlayer(guild->GetLeaderGuid())); #else Eluna::Push(L, eObjectAccessor->FindPlayer(guild->GetLeaderGUID())); #endif return 1; } /** * Returns [Guild] leader GUID * * @return uint64 leaderGUID */ int GetLeaderGUID(Eluna* /*E*/, lua_State* L, Guild* guild) { #ifndef TRINITY Eluna::Push(L, guild->GetLeaderGuid()); #else Eluna::Push(L, guild->GetLeaderGUID()); #endif return 1; } /** * Returns the [Guild]s entry ID * * @return uint32 entryId */ int GetId(Eluna* /*E*/, lua_State* L, Guild* guild) { Eluna::Push(L, guild->GetId()); return 1; } /** * Returns the [Guild]s name * * @return string guildName */ int GetName(Eluna* /*E*/, lua_State* L, Guild* guild) { Eluna::Push(L, guild->GetName()); return 1; } /** * Returns the [Guild]s current Message Of The Day * * @return string guildMOTD */ int GetMOTD(Eluna* /*E*/, lua_State* L, Guild* guild) { Eluna::Push(L, guild->GetMOTD()); return 1; } /** * Returns the [Guild]s current info * * @return string guildInfo */ int GetInfo(Eluna* /*E*/, lua_State* L, Guild* guild) { #ifndef TRINITY Eluna::Push(L, guild->GetGINFO()); #else Eluna::Push(L, guild->GetInfo()); #endif return 1; } /* SETTERS */ #ifndef CATA /** * Sets the leader of this [Guild] * * @param [Player] leader : the [Player] leader to change */ int SetLeader(Eluna* /*E*/, lua_State* L, Guild* guild) { Player* player = Eluna::CHECKOBJ(L, 2); #ifndef TRINITY guild->SetLeader(player->GET_GUID()); #else guild->HandleSetLeader(player->GetSession(), player->GetName()); #endif return 0; } #endif #ifndef CLASSIC /** * Sets the information of the bank tab specified * * @param uint8 tabId : the ID of the tab specified * @param string info : the information to be set to the bank tab */ int SetBankTabText(Eluna* /*E*/, lua_State* L, Guild* guild) { uint8 tabId = Eluna::CHECKVAL(L, 2); const char* text = Eluna::CHECKVAL(L, 3); #ifndef TRINITY guild->SetGuildBankTabText(tabId, text); #else guild->SetBankTabText(tabId, text); #endif return 0; } #endif /* OTHER */ // SendPacketToGuild(packet) /** * Sends a [WorldPacket] to all the [Player]s in the [Guild] * * @param [WorldPacket] packet : the [WorldPacket] to be sent to the [Player]s */ int SendPacket(Eluna* /*E*/, lua_State* L, Guild* guild) { WorldPacket* data = Eluna::CHECKOBJ(L, 2); guild->BroadcastPacket(data); return 0; } // SendPacketToRankedInGuild(packet, rankId) /** * Sends a [WorldPacket] to all the [Player]s at the specified rank in the [Guild] * * @param [WorldPacket] packet : the [WorldPacket] to be sent to the [Player]s * @param uint8 rankId : the rank ID */ int SendPacketToRanked(Eluna* /*E*/, lua_State* L, Guild* guild) { WorldPacket* data = Eluna::CHECKOBJ(L, 2); uint8 ranked = Eluna::CHECKVAL(L, 3); guild->BroadcastPacketToRank(data, ranked); return 0; } /** * Disbands the [Guild] */ int Disband(Eluna* /*E*/, lua_State* /*L*/, Guild* guild) { guild->Disband(); return 0; } /** * Adds the specified [Player] to the [Guild] at the specified rank. * * If no rank is specified, defaults to none. * * @param [Player] player : the [Player] to be added to the guild * @param uint8 rankId : the rank ID */ int AddMember(Eluna* /*E*/, lua_State* L, Guild* guild) { Player* player = Eluna::CHECKOBJ(L, 2); uint8 rankId = Eluna::CHECKVAL(L, 3, GUILD_RANK_NONE); guild->AddMember(player->GET_GUID(), rankId); return 0; } /** * Removes the specified [Player] from the [Guild]. * * @param [Player] player : the [Player] to be removed from the guild * @param bool isDisbanding : default 'false', should only be set to 'true' if the guild is triggered to disband */ int DeleteMember(Eluna* /*E*/, lua_State* L, Guild* guild) { Player* player = Eluna::CHECKOBJ(L, 2); bool isDisbanding = Eluna::CHECKVAL(L, 3, false); #ifndef TRINITY guild->DelMember(player->GET_GUID(), isDisbanding); #else guild->DeleteMember(player->GET_GUID(), isDisbanding); #endif return 0; } /** * Promotes/demotes the [Player] to the specified rank. * * @param [Player] player : the [Player] to be promoted/demoted * @param uint8 rankId : the rank ID */ int SetMemberRank(Eluna* /*E*/, lua_State* L, Guild* guild) { Player* player = Eluna::CHECKOBJ(L, 2); uint8 newRank = Eluna::CHECKVAL(L, 3); guild->ChangeMemberRank(player->GET_GUID(), newRank); return 0; } #ifndef CLASSIC // Move to Player methods int WithdrawBankMoney(Eluna* /*E*/, lua_State* L, Guild* guild) { Player* player = Eluna::CHECKOBJ(L, 2); uint32 money = Eluna::CHECKVAL(L, 3); #ifndef TRINITY if (guild->GetGuildBankMoney() < money) return 0; guild->SetBankMoney(guild->GetGuildBankMoney() - money); #else guild->HandleMemberWithdrawMoney(player->GetSession(), money); #endif return 0; } // Move to Player methods int DepositBankMoney(Eluna* /*E*/, lua_State* L, Guild* guild) { Player* player = Eluna::CHECKOBJ(L, 2); uint32 money = Eluna::CHECKVAL(L, 3); #ifndef TRINITY guild->SetBankMoney(guild->GetGuildBankMoney() + money); #else guild->HandleMemberDepositMoney(player->GetSession(), money); #endif return 0; } #endif }; #endif