2018-07-06 13:30:00 +00:00
package com.eu.habbo.messages.rcon ;
import com.eu.habbo.Emulator ;
import com.eu.habbo.habbohotel.users.Habbo ;
import com.eu.habbo.habbohotel.users.HabboBadge ;
import com.eu.habbo.messages.outgoing.users.AddUserBadgeComposer ;
import com.google.gson.Gson ;
2020-05-04 22:24:09 +02:00
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
2018-07-06 13:30:00 +00:00
import java.sql.* ;
2019-05-26 21:14:53 +03:00
public class GiveBadge extends RCONMessage < GiveBadge . GiveBadgeJSON > {
2020-05-04 22:24:09 +02:00
private static final Logger LOGGER = LoggerFactory . getLogger ( GiveBadge . class ) ;
2018-07-08 21:32:00 +00:00
2019-05-26 21:14:53 +03:00
public GiveBadge ( ) {
2018-07-06 13:30:00 +00:00
super ( GiveBadgeJSON . class ) ;
}
@Override
2019-05-26 21:14:53 +03:00
public void handle ( Gson gson , GiveBadgeJSON json ) {
if ( json . user_id = = - 1 ) {
2018-07-06 13:30:00 +00:00
this . status = RCONMessage . HABBO_NOT_FOUND ;
return ;
}
2019-05-26 21:14:53 +03:00
if ( json . badge . isEmpty ( ) ) {
2018-07-06 13:30:00 +00:00
this . status = RCONMessage . SYSTEM_ERROR ;
return ;
}
Habbo habbo = Emulator . getGameEnvironment ( ) . getHabboManager ( ) . getHabbo ( json . user_id ) ;
String username = json . user_id + " " ;
2019-05-26 21:14:53 +03:00
if ( habbo ! = null ) {
2018-07-06 13:30:00 +00:00
username = habbo . getHabboInfo ( ) . getUsername ( ) ;
2019-05-26 21:14:53 +03:00
for ( String badgeCode : json . badge . split ( " ; " ) ) {
if ( habbo . getInventory ( ) . getBadgesComponent ( ) . hasBadge ( badgeCode ) ) {
2018-07-06 13:30:00 +00:00
this . status = RCONMessage . STATUS_ERROR ;
this . message + = Emulator . getTexts ( ) . getValue ( " commands.error.cmd_badge.already_owned " ) . replace ( " %user% " , username ) . replace ( " %badge% " , badgeCode ) + " \ r " ;
continue ;
}
HabboBadge badge = new HabboBadge ( 0 , badgeCode , 0 , habbo ) ;
badge . run ( ) ;
habbo . getInventory ( ) . getBadgesComponent ( ) . addBadge ( badge ) ;
habbo . getClient ( ) . sendResponse ( new AddUserBadgeComposer ( badge ) ) ;
this . message = Emulator . getTexts ( ) . getValue ( " commands.succes.cmd_badge.given " ) . replace ( " %user% " , username ) . replace ( " %badge% " , badgeCode ) ;
}
2019-05-26 21:14:53 +03:00
} else {
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ) {
for ( String badgeCode : json . badge . split ( " ; " ) ) {
2021-09-02 00:32:33 +00:00
int numberOfRows = 0 ;
2019-05-26 21:14:53 +03:00
try ( PreparedStatement statement = connection . prepareStatement ( " SELECT COUNT(slot_id) FROM users_badges INNER JOIN users ON users.id = user_id WHERE users.id = ? AND badge_code = ? LIMIT 1 " ) ) {
2018-07-06 13:30:00 +00:00
statement . setInt ( 1 , json . user_id ) ;
statement . setString ( 2 , badgeCode ) ;
2019-05-26 21:14:53 +03:00
try ( ResultSet set = statement . executeQuery ( ) ) {
2021-09-02 00:32:33 +00:00
if ( set . next ( ) ) {
numberOfRows = set . getInt ( 1 ) ;
}
2018-07-06 13:30:00 +00:00
}
}
2021-09-02 00:32:33 +00:00
if ( numberOfRows ! = 0 ) {
2018-07-06 13:30:00 +00:00
this . status = RCONMessage . STATUS_ERROR ;
this . message + = Emulator . getTexts ( ) . getValue ( " commands.error.cmd_badge.already_owns " ) . replace ( " %user% " , username ) . replace ( " %badge% " , badgeCode ) + " \ r " ;
2019-05-26 21:14:53 +03:00
} else {
try ( PreparedStatement statement = connection . prepareStatement ( " INSERT INTO users_badges VALUES (null, (SELECT id FROM users WHERE users.id = ? LIMIT 1), 0, ?) " , Statement . RETURN_GENERATED_KEYS ) ) {
2018-07-06 13:30:00 +00:00
statement . setInt ( 1 , json . user_id ) ;
statement . setString ( 2 , badgeCode ) ;
statement . execute ( ) ;
}
this . message = Emulator . getTexts ( ) . getValue ( " commands.succes.cmd_badge.given " ) . replace ( " %user% " , username ) . replace ( " %badge% " , badgeCode ) ;
}
}
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-04 22:24:09 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
this . status = RCONMessage . STATUS_ERROR ;
this . message = e . getMessage ( ) ;
}
}
}
2019-05-26 21:14:53 +03:00
static class GiveBadgeJSON {
2018-10-06 22:28:00 +00:00
2018-07-06 13:30:00 +00:00
public int user_id = - 1 ;
2018-10-06 22:28:00 +00:00
2018-07-06 13:30:00 +00:00
public String badge ;
}
2021-09-02 00:32:33 +00:00
}