2018-07-06 15:30:00 +02:00
package com.eu.habbo.habbohotel.guilds ;
import com.eu.habbo.Emulator ;
import com.eu.habbo.habbohotel.gameclients.GameClient ;
import com.eu.habbo.habbohotel.items.interactions.InteractionGuildFurni ;
import com.eu.habbo.habbohotel.rooms.Room ;
import com.eu.habbo.habbohotel.users.Habbo ;
import com.eu.habbo.messages.outgoing.guilds.GuildJoinErrorComposer ;
import gnu.trove.TCollections ;
import gnu.trove.iterator.TIntObjectIterator ;
import gnu.trove.map.TIntObjectMap ;
import gnu.trove.map.hash.THashMap ;
import gnu.trove.map.hash.TIntObjectHashMap ;
import gnu.trove.set.hash.THashSet ;
import java.sql.* ;
import java.util.ArrayList ;
import java.util.Collection ;
import java.util.List ;
import java.util.NoSuchElementException ;
2019-04-29 06:13:02 +02:00
public class GuildManager {
2018-07-08 23:32:00 +02:00
2018-07-06 15:30:00 +02:00
private final THashMap < GuildPartType , THashMap < Integer , GuildPart > > guildParts ;
private final TIntObjectMap < Guild > guilds ;
2019-04-29 06:13:02 +02:00
public GuildManager ( ) {
2018-07-06 15:30:00 +02:00
long millis = System . currentTimeMillis ( ) ;
2019-04-29 06:13:02 +02:00
this . guildParts = new THashMap < GuildPartType , THashMap < Integer , GuildPart > > ( ) ;
this . guilds = TCollections . synchronizedMap ( new TIntObjectHashMap < Guild > ( ) ) ;
2018-07-06 15:30:00 +02:00
this . loadGuildParts ( ) ;
Emulator . getLogging ( ) . logStart ( " Guild Manager -> Loaded! ( " + ( System . currentTimeMillis ( ) - millis ) + " MS) " ) ;
}
2018-07-08 23:32:00 +02:00
2019-04-29 06:13:02 +02:00
public void loadGuildParts ( ) {
2018-07-06 15:30:00 +02:00
this . guildParts . clear ( ) ;
2019-04-29 06:13:02 +02:00
for ( GuildPartType t : GuildPartType . values ( ) ) {
2019-05-11 00:45:07 +02:00
this . guildParts . put ( t , new THashMap < > ( ) ) ;
2018-07-06 15:30:00 +02:00
}
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ;
Statement statement = connection . createStatement ( ) ;
2019-04-29 06:13:02 +02:00
ResultSet set = statement . executeQuery ( " SELECT * FROM guilds_elements " ) ) {
while ( set . next ( ) ) {
2018-07-06 15:30:00 +02:00
this . guildParts . get ( GuildPartType . valueOf ( set . getString ( " type " ) . toUpperCase ( ) ) ) . put ( set . getInt ( " id " ) , new GuildPart ( set ) ) ;
}
2019-04-29 06:13:02 +02:00
} catch ( SQLException e ) {
2018-07-06 15:30:00 +02:00
Emulator . getLogging ( ) . logSQLException ( e ) ;
}
}
2018-07-08 23:32:00 +02:00
2019-04-29 06:13:02 +02:00
public Guild createGuild ( Habbo habbo , int roomId , String roomName , String name , String description , String badge , int colorOne , int colorTwo ) {
2018-07-06 15:30:00 +02:00
Guild guild = new Guild ( habbo . getHabboInfo ( ) . getId ( ) , habbo . getHabboInfo ( ) . getUsername ( ) , roomId , roomName , name , description , colorOne , colorTwo , badge ) ;
2019-04-29 06:13:02 +02:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ) {
try ( PreparedStatement statement = connection . prepareStatement ( " INSERT INTO guilds (name, description, room_id, user_id, color_one, color_two, badge, date_created) VALUES (?, ?, ?, ?, ?, ?, ?, ?) " , Statement . RETURN_GENERATED_KEYS ) ) {
2018-07-06 15:30:00 +02:00
statement . setString ( 1 , name ) ;
statement . setString ( 2 , description ) ;
statement . setInt ( 3 , roomId ) ;
statement . setInt ( 4 , guild . getOwnerId ( ) ) ;
statement . setInt ( 5 , colorOne ) ;
statement . setInt ( 6 , colorTwo ) ;
statement . setString ( 7 , badge ) ;
statement . setInt ( 8 , Emulator . getIntUnixTimestamp ( ) ) ;
statement . execute ( ) ;
2019-04-29 06:13:02 +02:00
try ( ResultSet set = statement . getGeneratedKeys ( ) ) {
if ( set . next ( ) ) {
2018-07-06 15:30:00 +02:00
guild . setId ( set . getInt ( 1 ) ) ;
}
}
}
2019-04-29 06:13:02 +02:00
try ( PreparedStatement statement = connection . prepareStatement ( " INSERT INTO guilds_members (guild_id, user_id, level_id, member_since) VALUES (?, ?, ?, ?) " , Statement . RETURN_GENERATED_KEYS ) ) {
2018-07-06 15:30:00 +02:00
statement . setInt ( 1 , guild . getId ( ) ) ;
statement . setInt ( 2 , habbo . getHabboInfo ( ) . getId ( ) ) ;
statement . setInt ( 3 , 0 ) ;
statement . setInt ( 4 , Emulator . getIntUnixTimestamp ( ) ) ;
statement . execute ( ) ;
2019-04-29 06:13:02 +02:00
try ( ResultSet set = statement . getGeneratedKeys ( ) ) {
if ( set . next ( ) ) {
2018-07-06 15:30:00 +02:00
guild . increaseMemberCount ( ) ;
//guild.addMember(new GuildMember(habbo.getHabboInfo().getId(), habbo.getHabboInfo().getUsername(), habbo.getHabboInfo().getLook(), Emulator.getIntUnixTimestamp(), 2));
}
}
}
2019-04-29 06:13:02 +02:00
} catch ( SQLException e ) {
2018-07-06 15:30:00 +02:00
Emulator . getLogging ( ) . logSQLException ( e ) ;
}
habbo . getHabboStats ( ) . addGuild ( guild . getId ( ) ) ;
return guild ;
}
2018-07-08 23:32:00 +02:00
2019-04-29 06:13:02 +02:00
public void deleteGuild ( Guild guild ) {
2018-07-06 15:30:00 +02:00
THashSet < GuildMember > members = this . getGuildMembers ( guild ) ;
2019-04-29 06:13:02 +02:00
for ( GuildMember member : members ) {
2018-07-06 15:30:00 +02:00
Habbo habbo = Emulator . getGameEnvironment ( ) . getHabboManager ( ) . getHabbo ( member . getUserId ( ) ) ;
2019-04-29 06:13:02 +02:00
if ( habbo ! = null ) {
2018-07-06 15:30:00 +02:00
habbo . getHabboStats ( ) . removeGuild ( guild . getId ( ) ) ;
2019-04-29 06:13:02 +02:00
if ( habbo . getHabboStats ( ) . guild = = guild . getId ( ) ) {
2018-07-06 15:30:00 +02:00
habbo . getHabboStats ( ) . guild = 0 ;
}
}
}
2019-04-29 06:13:02 +02:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ) {
try ( PreparedStatement deleteFavourite = connection . prepareStatement ( " UPDATE users_settings SET guild_id = ? WHERE guild_id = ? " ) ) {
2018-07-06 15:30:00 +02:00
deleteFavourite . setInt ( 1 , 0 ) ;
deleteFavourite . setInt ( 2 , guild . getId ( ) ) ;
deleteFavourite . execute ( ) ;
}
2019-04-29 06:13:02 +02:00
try ( PreparedStatement statement = connection . prepareStatement ( " DELETE FROM guilds_members WHERE guild_id = ? " ) ) {
2018-07-06 15:30:00 +02:00
statement . setInt ( 1 , guild . getId ( ) ) ;
statement . execute ( ) ;
}
2019-04-29 06:13:02 +02:00
try ( PreparedStatement statement = connection . prepareStatement ( " DELETE FROM guilds WHERE id = ? " ) ) {
2018-07-06 15:30:00 +02:00
statement . setInt ( 1 , guild . getId ( ) ) ;
statement . execute ( ) ;
}
Room room = Emulator . getGameEnvironment ( ) . getRoomManager ( ) . getRoom ( guild . getRoomId ( ) ) ;
2019-04-29 06:13:02 +02:00
if ( room ! = null ) {
2018-07-06 15:30:00 +02:00
room . setGuild ( 0 ) ;
}
2019-04-29 06:13:02 +02:00
} catch ( SQLException e ) {
2018-07-06 15:30:00 +02:00
Emulator . getLogging ( ) . logSQLException ( e ) ;
}
}
2018-07-08 23:32:00 +02:00
2019-04-29 06:13:02 +02:00
public void clearInactiveGuilds ( ) {
List < Integer > toRemove = new ArrayList < Integer > ( ) ;
2018-07-06 15:30:00 +02:00
TIntObjectIterator < Guild > guilds = this . guilds . iterator ( ) ;
2019-04-29 06:13:02 +02:00
for ( int i = this . guilds . size ( ) ; i - - > 0 ; ) {
try {
2018-07-06 15:30:00 +02:00
guilds . advance ( ) ;
2019-04-29 06:13:02 +02:00
} catch ( NoSuchElementException e ) {
2018-07-06 15:30:00 +02:00
break ;
}
2019-04-29 06:13:02 +02:00
if ( guilds . value ( ) . lastRequested < Emulator . getIntUnixTimestamp ( ) - 300 ) {
2018-07-06 15:30:00 +02:00
toRemove . add ( guilds . value ( ) . getId ( ) ) ;
}
}
2019-04-29 06:13:02 +02:00
for ( Integer i : toRemove ) {
2018-07-06 15:30:00 +02:00
this . guilds . remove ( i ) ;
}
}
2018-07-08 23:32:00 +02:00
2019-04-29 06:13:02 +02:00
public void joinGuild ( Guild guild , GameClient client , int userId , boolean acceptRequest ) {
2018-07-06 15:30:00 +02:00
boolean error = false ;
2019-04-29 06:13:02 +02:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ) {
try ( PreparedStatement statement = connection . prepareStatement ( " SELECT COUNT(id) as total FROM guilds_members WHERE user_id = ? " ) ) {
2018-07-06 15:30:00 +02:00
if ( userId = = 0 )
statement . setInt ( 1 , client . getHabbo ( ) . getHabboInfo ( ) . getId ( ) ) ;
else
statement . setInt ( 1 , userId ) ;
2019-04-29 06:13:02 +02:00
try ( ResultSet set = statement . executeQuery ( ) ) {
if ( set . next ( ) ) {
if ( set . getInt ( 1 ) > = 100 ) {
2018-07-06 15:30:00 +02:00
//TODO Add non acceptRequest errors. See Outgoing.GroupEditFailComposer
if ( userId = = 0 )
client . sendResponse ( new GuildJoinErrorComposer ( GuildJoinErrorComposer . GROUP_LIMIT_EXCEED ) ) ;
else
client . sendResponse ( new GuildJoinErrorComposer ( GuildJoinErrorComposer . MEMBER_FAIL_JOIN_LIMIT_EXCEED_NON_HC ) ) ;
error = true ;
}
}
}
}
2019-04-29 06:13:02 +02:00
if ( ! error ) {
try ( PreparedStatement statement = connection . prepareStatement ( " SELECT COUNT(id) as total FROM guilds_members WHERE guild_id = ? AND level_id < 3 " ) ) {
2018-07-06 15:30:00 +02:00
statement . setInt ( 1 , guild . getId ( ) ) ;
2019-04-29 06:13:02 +02:00
try ( ResultSet set = statement . executeQuery ( ) ) {
if ( set . next ( ) ) {
if ( set . getInt ( 1 ) > = 50000 ) {
2018-07-06 15:30:00 +02:00
client . sendResponse ( new GuildJoinErrorComposer ( GuildJoinErrorComposer . GROUP_FULL ) ) ;
error = true ;
}
}
}
}
2019-04-29 06:13:02 +02:00
if ( userId = = 0 & & ! error ) {
if ( guild . getState ( ) = = GuildState . LOCKED ) {
try ( PreparedStatement statement = connection . prepareStatement ( " SELECT COUNT(id) as total FROM guilds_members WHERE guild_id = ? AND level_id = 3 " ) ) {
2018-07-06 15:30:00 +02:00
statement . setInt ( 1 , guild . getId ( ) ) ;
2019-04-29 06:13:02 +02:00
try ( ResultSet set = statement . executeQuery ( ) ) {
if ( set . next ( ) ) {
if ( set . getInt ( 1 ) > = 100 ) {
2018-07-06 15:30:00 +02:00
client . sendResponse ( new GuildJoinErrorComposer ( GuildJoinErrorComposer . GROUP_NOT_ACCEPT_REQUESTS ) ) ;
error = true ;
}
}
}
}
2019-04-29 06:13:02 +02:00
if ( ! error ) {
try ( PreparedStatement statement = connection . prepareStatement ( " SELECT COUNT(id) as total FROM guilds_members WHERE guild_id = ? AND user_id = ? LIMIT 1 " ) ) {
2018-07-06 15:30:00 +02:00
statement . setInt ( 1 , guild . getId ( ) ) ;
statement . setInt ( 2 , client . getHabbo ( ) . getHabboInfo ( ) . getId ( ) ) ;
2019-04-29 06:13:02 +02:00
try ( ResultSet set = statement . executeQuery ( ) ) {
if ( set . next ( ) ) {
if ( set . getInt ( 1 ) > = 1 ) {
2018-07-06 15:30:00 +02:00
error = true ;
}
}
}
}
}
}
2019-04-29 06:13:02 +02:00
if ( ! error ) {
try ( PreparedStatement statement = connection . prepareStatement ( " INSERT INTO guilds_members (guild_id, user_id, member_since, level_id) VALUES (?, ?, ?, ?) " ) ) {
2018-07-06 15:30:00 +02:00
statement . setInt ( 1 , guild . getId ( ) ) ;
statement . setInt ( 2 , client . getHabbo ( ) . getHabboInfo ( ) . getId ( ) ) ;
statement . setInt ( 3 , Emulator . getIntUnixTimestamp ( ) ) ;
statement . setInt ( 4 , guild . getState ( ) = = GuildState . LOCKED ? GuildRank . REQUESTED . type : GuildRank . MEMBER . type ) ;
statement . execute ( ) ;
}
}
2019-04-29 06:13:02 +02:00
} else if ( ! error ) {
try ( PreparedStatement statement = connection . prepareStatement ( " UPDATE guilds_members SET level_id = ?, member_since = ? WHERE user_id = ? AND guild_id = ? " ) ) {
2018-07-06 15:30:00 +02:00
statement . setInt ( 1 , GuildRank . MEMBER . type ) ;
statement . setInt ( 2 , Emulator . getIntUnixTimestamp ( ) ) ;
statement . setInt ( 3 , userId ) ;
statement . setInt ( 4 , guild . getId ( ) ) ;
statement . execute ( ) ;
}
}
2019-04-29 06:13:02 +02:00
if ( userId = = 0 & & ! error ) {
2018-07-06 15:30:00 +02:00
if ( guild . getState ( ) = = GuildState . LOCKED )
guild . increaseRequestCount ( ) ;
2019-04-29 06:13:02 +02:00
else {
2018-07-06 15:30:00 +02:00
guild . increaseMemberCount ( ) ;
client . getHabbo ( ) . getHabboStats ( ) . addGuild ( guild . getId ( ) ) ;
}
}
}
2019-04-29 06:13:02 +02:00
} catch ( SQLException e ) {
2018-07-06 15:30:00 +02:00
Emulator . getLogging ( ) . logSQLException ( e ) ;
}
}
2018-07-08 23:32:00 +02:00
2019-04-29 06:13:02 +02:00
public void setAdmin ( Guild guild , int userId ) {
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " UPDATE guilds_members SET level_id = ? WHERE user_id = ? AND guild_id = ? LIMIT 1 " ) ) {
2018-07-06 15:30:00 +02:00
statement . setInt ( 1 , 1 ) ;
statement . setInt ( 2 , userId ) ;
statement . setInt ( 3 , guild . getId ( ) ) ;
statement . execute ( ) ;
2019-04-29 06:13:02 +02:00
} catch ( SQLException e ) {
2018-07-06 15:30:00 +02:00
Emulator . getLogging ( ) . logSQLException ( e ) ;
}
}
2018-07-08 23:32:00 +02:00
2019-04-29 06:13:02 +02:00
public void removeAdmin ( Guild guild , int userId ) {
if ( guild . getOwnerId ( ) = = userId )
2018-07-06 15:30:00 +02:00
return ;
2019-04-29 06:13:02 +02:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " UPDATE guilds_members SET level_id = ? WHERE user_id = ? AND guild_id = ? LIMIT 1 " ) ) {
2018-07-06 15:30:00 +02:00
statement . setInt ( 1 , 2 ) ;
statement . setInt ( 2 , userId ) ;
statement . setInt ( 3 , guild . getId ( ) ) ;
statement . execute ( ) ;
2019-04-29 06:13:02 +02:00
} catch ( SQLException e ) {
2018-07-06 15:30:00 +02:00
Emulator . getLogging ( ) . logSQLException ( e ) ;
}
}
2018-07-08 23:32:00 +02:00
2019-04-29 06:13:02 +02:00
public void removeMember ( Guild guild , int userId ) {
if ( guild . getOwnerId ( ) = = userId )
2018-07-06 15:30:00 +02:00
return ;
Habbo habbo = Emulator . getGameEnvironment ( ) . getHabboManager ( ) . getHabbo ( userId ) ;
2019-04-29 06:13:02 +02:00
if ( habbo ! = null & & habbo . getHabboStats ( ) . guild = = guild . getId ( ) ) {
2018-07-06 15:30:00 +02:00
habbo . getHabboStats ( ) . removeGuild ( guild . getId ( ) ) ;
habbo . getHabboStats ( ) . guild = 0 ;
habbo . getHabboStats ( ) . run ( ) ;
}
2019-04-29 06:13:02 +02:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " DELETE FROM guilds_members WHERE user_id = ? AND guild_id = ? LIMIT 1 " ) ) {
2018-07-06 15:30:00 +02:00
statement . setInt ( 1 , userId ) ;
statement . setInt ( 2 , guild . getId ( ) ) ;
statement . execute ( ) ;
2019-04-29 06:13:02 +02:00
} catch ( SQLException e ) {
2018-07-06 15:30:00 +02:00
Emulator . getLogging ( ) . logSQLException ( e ) ;
}
}
2018-07-08 23:32:00 +02:00
2019-04-29 06:13:02 +02:00
public void addGuild ( Guild guild ) {
2018-07-06 15:30:00 +02:00
guild . lastRequested = Emulator . getIntUnixTimestamp ( ) ;
this . guilds . put ( guild . getId ( ) , guild ) ;
}
2018-07-08 23:32:00 +02:00
2019-04-29 06:13:02 +02:00
public GuildMember getGuildMember ( Guild guild , Habbo habbo ) {
return getGuildMember ( guild . getId ( ) , habbo . getHabboInfo ( ) . getId ( ) ) ;
2018-07-06 15:30:00 +02:00
}
2018-07-08 23:32:00 +02:00
2019-04-29 06:13:02 +02:00
public GuildMember getGuildMember ( int guildId , int habboId ) {
2018-07-06 15:30:00 +02:00
GuildMember member = null ;
2019-04-29 06:13:02 +02:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " SELECT users.username, users.look, guilds_members.* FROM guilds_members INNER JOIN users ON guilds_members.user_id = users.id WHERE guilds_members.guild_id = ? AND guilds_members.user_id = ? LIMIT 1 " ) ) {
2018-07-06 15:30:00 +02:00
statement . setInt ( 1 , guildId ) ;
statement . setInt ( 2 , habboId ) ;
2019-04-29 06:13:02 +02:00
try ( ResultSet set = statement . executeQuery ( ) ) {
if ( set . next ( ) ) {
2018-07-06 15:30:00 +02:00
member = new GuildMember ( set ) ;
}
}
2019-04-29 06:13:02 +02:00
} catch ( SQLException e ) {
2018-07-06 15:30:00 +02:00
Emulator . getLogging ( ) . logSQLException ( e ) ;
}
return member ;
}
2018-07-08 23:32:00 +02:00
2019-04-29 06:13:02 +02:00
public THashSet < GuildMember > getGuildMembers ( int guildId ) {
2018-07-06 15:30:00 +02:00
return this . getGuildMembers ( this . getGuild ( guildId ) ) ;
}
2018-07-08 23:32:00 +02:00
2019-04-29 06:13:02 +02:00
THashSet < GuildMember > getGuildMembers ( Guild guild ) {
THashSet < GuildMember > guildMembers = new THashSet < GuildMember > ( ) ;
2018-07-06 15:30:00 +02:00
2019-04-29 06:13:02 +02:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " SELECT users.username, users.look, guilds_members.* FROM guilds_members INNER JOIN users ON guilds_members.user_id = users.id WHERE guilds_members.guild_id = ? " ) ) {
2018-07-06 15:30:00 +02:00
statement . setInt ( 1 , guild . getId ( ) ) ;
2019-04-29 06:13:02 +02:00
try ( ResultSet set = statement . executeQuery ( ) ) {
while ( set . next ( ) ) {
2018-07-06 15:30:00 +02:00
guildMembers . add ( new GuildMember ( set ) ) ;
}
}
2019-04-29 06:13:02 +02:00
} catch ( SQLException e ) {
2018-07-06 15:30:00 +02:00
Emulator . getLogging ( ) . logSQLException ( e ) ;
}
return guildMembers ;
}
2018-07-08 23:32:00 +02:00
2019-04-29 06:13:02 +02:00
public ArrayList < GuildMember > getGuildMembers ( Guild guild , int page , int levelId , String query ) {
ArrayList < GuildMember > guildMembers = new ArrayList < GuildMember > ( ) ;
2018-07-06 15:30:00 +02:00
2019-04-29 06:13:02 +02:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " SELECT users.username, users.look, guilds_members.* FROM guilds_members INNER JOIN users ON guilds_members.user_id = users.id WHERE guilds_members.guild_id = ? " + ( rankQuery ( levelId ) ) + " AND users.username LIKE ? ORDER BY level_id, member_since ASC LIMIT ?, ? " ) ) {
2018-07-06 15:30:00 +02:00
statement . setInt ( 1 , guild . getId ( ) ) ;
statement . setString ( 2 , " % " + query + " % " ) ;
statement . setInt ( 3 , page * 14 ) ;
statement . setInt ( 4 , ( page * 14 ) + 14 ) ;
2019-04-29 06:13:02 +02:00
try ( ResultSet set = statement . executeQuery ( ) ) {
while ( set . next ( ) ) {
2018-07-06 15:30:00 +02:00
guildMembers . add ( new GuildMember ( set ) ) ;
}
}
2019-04-29 06:13:02 +02:00
} catch ( SQLException e ) {
2018-07-06 15:30:00 +02:00
Emulator . getLogging ( ) . logSQLException ( e ) ;
}
return guildMembers ;
}
2018-07-08 23:32:00 +02:00
2019-04-29 06:13:02 +02:00
public THashMap < Integer , GuildMember > getOnlyAdmins ( Guild guild ) {
THashMap < Integer , GuildMember > guildAdmins = new THashMap < Integer , GuildMember > ( ) ;
2018-07-06 15:30:00 +02:00
2019-04-29 06:13:02 +02:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " SELECT users.username, users.look, guilds_members.* FROM guilds_members INNER JOIN users ON guilds_members.user_id = users.id WHERE guilds_members.guild_id = ? " + ( rankQuery ( 1 ) ) ) ) {
2018-07-06 15:30:00 +02:00
statement . setInt ( 1 , guild . getId ( ) ) ;
2019-04-29 06:13:02 +02:00
try ( ResultSet set = statement . executeQuery ( ) ) {
while ( set . next ( ) ) {
2018-07-06 15:30:00 +02:00
guildAdmins . put ( set . getInt ( " user_id " ) , new GuildMember ( set ) ) ;
}
}
2019-04-29 06:13:02 +02:00
} catch ( SQLException e ) {
2018-07-06 15:30:00 +02:00
Emulator . getLogging ( ) . logSQLException ( e ) ;
}
return guildAdmins ;
}
2019-04-29 06:13:02 +02:00
private String rankQuery ( int level ) {
switch ( level ) {
case 2 :
return " AND guilds_members.level_id = 3 " ;
case 1 :
return " AND (guilds_members.level_id = 0 OR guilds_members.level_id = 1) " ;
default :
return " AND guilds_members.level_id >= 0 AND guilds_members.level_id <= 2 " ;
2018-07-06 15:30:00 +02:00
}
}
2018-07-08 23:32:00 +02:00
2019-04-29 06:13:02 +02:00
public Guild getGuild ( int guildId ) {
2018-07-06 15:30:00 +02:00
Guild g = this . guilds . get ( guildId ) ;
2019-04-29 06:13:02 +02:00
if ( g = = null ) {
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " SELECT users.username, rooms.name as room_name, guilds.* FROM guilds INNER JOIN users ON guilds.user_id = users.id INNER JOIN rooms ON rooms.id = guilds.room_id WHERE guilds.id = ? LIMIT 1 " ) ) {
2018-07-06 15:30:00 +02:00
statement . setInt ( 1 , guildId ) ;
2019-04-29 06:13:02 +02:00
try ( ResultSet set = statement . executeQuery ( ) ) {
if ( set . next ( ) ) {
2018-07-06 15:30:00 +02:00
g = new Guild ( set ) ;
}
}
2019-04-29 06:13:02 +02:00
if ( g ! = null )
2018-07-06 15:30:00 +02:00
g . loadMemberCount ( ) ;
2019-04-29 06:13:02 +02:00
} catch ( SQLException e ) {
2018-07-06 15:30:00 +02:00
Emulator . getLogging ( ) . logSQLException ( e ) ;
}
}
2019-04-29 06:13:02 +02:00
if ( g ! = null ) {
2018-07-06 15:30:00 +02:00
g . lastRequested = Emulator . getIntUnixTimestamp ( ) ;
2019-04-29 06:13:02 +02:00
if ( ! this . guilds . containsKey ( guildId ) )
2018-07-06 15:30:00 +02:00
this . guilds . put ( guildId , g ) ;
}
return g ;
}
2019-04-29 06:13:02 +02:00
public List < Guild > getGuilds ( int userId ) {
List < Guild > guilds = new ArrayList < Guild > ( ) ;
2018-07-06 15:30:00 +02:00
2019-04-29 06:13:02 +02:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " SELECT guild_id FROM guilds_members WHERE user_id = ? AND level_id <= 2 ORDER BY member_since ASC " ) ) {
2018-07-06 15:30:00 +02:00
statement . setInt ( 1 , userId ) ;
2019-04-29 06:13:02 +02:00
try ( ResultSet set = statement . executeQuery ( ) ) {
while ( set . next ( ) ) {
Guild guild = getGuild ( set . getInt ( " guild_id " ) ) ;
if ( guild ! = null ) {
2018-07-06 15:30:00 +02:00
guilds . add ( guild ) ;
}
}
}
2019-04-29 06:13:02 +02:00
} catch ( SQLException e ) {
Emulator . getLogging ( ) . logSQLException ( e ) ;
2018-07-06 15:30:00 +02:00
}
2019-04-29 06:13:02 +02:00
return guilds ;
}
public List < Guild > getAllGuilds ( ) {
List < Guild > guilds = new ArrayList < Guild > ( ) ;
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " SELECT id FROM guilds ORDER BY id DESC LIMIT 20 " ) ) {
try ( ResultSet set = statement . executeQuery ( ) ) {
while ( set . next ( ) ) {
Guild guild = getGuild ( set . getInt ( " id " ) ) ;
if ( guild ! = null ) {
guilds . add ( guild ) ;
}
}
}
} catch ( SQLException e ) {
2018-07-06 15:30:00 +02:00
Emulator . getLogging ( ) . logSQLException ( e ) ;
}
return guilds ;
}
2019-04-29 06:13:02 +02:00
public boolean symbolColor ( int colorId ) {
for ( GuildPart part : this . getSymbolColors ( ) ) {
if ( part . id = = colorId )
2018-07-06 15:30:00 +02:00
return true ;
}
return false ;
}
2019-04-29 06:13:02 +02:00
public boolean backgroundColor ( int colorId ) {
for ( GuildPart part : this . getBackgroundColors ( ) ) {
if ( part . id = = colorId )
2018-07-06 15:30:00 +02:00
return true ;
}
return false ;
}
2019-04-29 06:13:02 +02:00
public THashMap < GuildPartType , THashMap < Integer , GuildPart > > getGuildParts ( ) {
2018-07-06 15:30:00 +02:00
return this . guildParts ;
}
2019-04-29 06:13:02 +02:00
public Collection < GuildPart > getBases ( ) {
2018-07-06 15:30:00 +02:00
return this . guildParts . get ( GuildPartType . BASE ) . values ( ) ;
}
2019-04-29 06:13:02 +02:00
public GuildPart getBase ( int id ) {
2018-07-06 15:30:00 +02:00
return this . guildParts . get ( GuildPartType . BASE ) . get ( id ) ;
}
2019-04-29 06:13:02 +02:00
public Collection < GuildPart > getSymbols ( ) {
2018-07-06 15:30:00 +02:00
return this . guildParts . get ( GuildPartType . SYMBOL ) . values ( ) ;
}
2019-04-29 06:13:02 +02:00
public GuildPart getSymbol ( int id ) {
2018-07-06 15:30:00 +02:00
return this . guildParts . get ( GuildPartType . SYMBOL ) . get ( id ) ;
}
2019-04-29 06:13:02 +02:00
public Collection < GuildPart > getBaseColors ( ) {
2018-07-06 15:30:00 +02:00
return this . guildParts . get ( GuildPartType . BASE_COLOR ) . values ( ) ;
}
2019-04-29 06:13:02 +02:00
public GuildPart getBaseColor ( int id ) {
2018-07-06 15:30:00 +02:00
return this . guildParts . get ( GuildPartType . BASE_COLOR ) . get ( id ) ;
}
2019-04-29 06:13:02 +02:00
public Collection < GuildPart > getSymbolColors ( ) {
2018-07-06 15:30:00 +02:00
return this . guildParts . get ( GuildPartType . SYMBOL_COLOR ) . values ( ) ;
}
2019-04-29 06:13:02 +02:00
public GuildPart getSymbolColor ( int id ) {
2018-07-06 15:30:00 +02:00
return this . guildParts . get ( GuildPartType . SYMBOL_COLOR ) . get ( id ) ;
}
2019-04-29 06:13:02 +02:00
public Collection < GuildPart > getBackgroundColors ( ) {
return this . guildParts . get ( GuildPartType . BACKGROUND_COLOR ) . values ( ) ;
2018-07-06 15:30:00 +02:00
}
2019-04-29 06:13:02 +02:00
public GuildPart getBackgroundColor ( int id ) {
2018-07-06 15:30:00 +02:00
return this . guildParts . get ( GuildPartType . BACKGROUND_COLOR ) . get ( id ) ;
}
2019-04-29 06:13:02 +02:00
public GuildPart getPart ( GuildPartType type , int id ) {
2018-07-06 15:30:00 +02:00
return this . guildParts . get ( type ) . get ( id ) ;
}
2018-07-08 23:32:00 +02:00
2019-04-29 06:13:02 +02:00
public void setGuild ( InteractionGuildFurni furni , int guildId ) {
2018-07-06 15:30:00 +02:00
furni . setGuildId ( guildId ) ;
2019-04-29 06:13:02 +02:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " UPDATE items SET guild_id = ? WHERE id = ? " ) ) {
2018-07-06 15:30:00 +02:00
statement . setInt ( 1 , guildId ) ;
statement . setInt ( 2 , furni . getId ( ) ) ;
statement . execute ( ) ;
2019-04-29 06:13:02 +02:00
} catch ( SQLException e ) {
2018-07-06 15:30:00 +02:00
Emulator . getLogging ( ) . logSQLException ( e ) ;
}
}
2018-07-08 23:32:00 +02:00
2019-04-29 06:13:02 +02:00
public void dispose ( ) {
2018-07-06 15:30:00 +02:00
TIntObjectIterator < Guild > guildIterator = this . guilds . iterator ( ) ;
2019-04-29 06:13:02 +02:00
for ( int i = this . guilds . size ( ) ; i - - > 0 ; ) {
2018-07-06 15:30:00 +02:00
guildIterator . advance ( ) ;
2019-04-29 06:13:02 +02:00
if ( guildIterator . value ( ) . needsUpdate )
2018-07-06 15:30:00 +02:00
guildIterator . value ( ) . run ( ) ;
guildIterator . remove ( ) ;
}
Emulator . getLogging ( ) . logShutdownLine ( " Guild Manager -> Disposed! " ) ;
}
}