Vice City: Multiplayer

Server Development => Scripting and Server Management => Script Showroom => Topic started by: QUITTED_VCMP on Oct 19, 2025, 04:46 PM

Title: Script for my current client support
Post by: QUITTED_VCMP on Oct 19, 2025, 04:46 PM
After a long fk*n days I made a script with client please tell me dose it work or not
 
SCRIPT MADE BY:=PK=NO






HERE IS IT






package vcmp.client;

import java.io.*;
import java.net.*;
import java.util.*;
import org.json.JSONObject;

public class VCMPClient {
    private Socket socket;
    private BufferedReader reader;
    private PrintWriter writer;
    private String serverHost;
    private int serverPort;
    private boolean connected;
    private String playerName;
    private boolean loggedIn;
    private int playerId;
    private int adminLevel;
    private int money;
    private int kills;
    private int deaths;
   
    private List<VCMPEventListener> listeners;
   
    public VCMPClient(String host, int port, String playerName) {
        this.serverHost = host;
        this.serverPort = port;
        this.playerName = playerName;
        this.connected = false;
        this.loggedIn = false;
        this.adminLevel = 0;
        this.money = 0;
        this.kills = 0;
        this.deaths = 0;
        this.listeners = new ArrayList<>();
    }
   
    public boolean connect() {
        try {
            socket = new Socket(serverHost, serverPort);
            socket.setSoTimeout(30000); // 30 second timeout
            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            writer = new PrintWriter(socket.getOutputStream(), true);
            connected = true;
           
            startMessageListener();
            return true;
           
        } catch (Exception e) {
            System.err.println("Connection failed: " + e.getMessage());
            fireEvent(VCMPEventType.ERROR, "Connection failed: " + e.getMessage());
            return false;
        }
    }
   
    private void startMessageListener() {
        Thread listenerThread = new Thread(() -> {
            try {
                String message;
                while (connected && (message = reader.readLine()) != null) {
                    System.out.println("Received: " + message);
                    processServerMessage(message);
                }
            } catch (SocketTimeoutException e) {
                System.err.println("Socket timeout");
            } catch (IOException e) {
                if (connected) {
                    System.err.println("Connection lost: " + e.getMessage());
                    fireEvent(VCMPEventType.DISCONNECTED, "Connection lost");
                    disconnect();
                }
            }
        });
        listenerThread.setDaemon(true);
        listenerThread.start();
    }
   
    private void processServerMessage(String message) {
        try {
            JSONObject json = new JSONObject(message);
            String messageType = json.getString("type");
           
            switch (messageType) {
                case "welcome":
                    fireEvent(VCMPEventType.CONNECTED, json.getString("message"));
                    break;
                   
                case "login_success":
                    handleLoginSuccess(json);
                    break;
                   
                case "login_failed":
                    fireEvent(VCMPEventType.LOGIN_FAILED, json.getString("message"));
                    break;
                   
                case "player_stats":
                    updatePlayerStats(json);
                    break;
                   
                case "player_join":
                    fireEvent(VCMPEventType.PLAYER_JOIN, json.getString("param1"));
                    break;
                   
                case "player_leave":
                    fireEvent(VCMPEventType.PLAYER_LEAVE, json.getString("param1"));
                    break;
                   
                case "player_kill":
                    fireEvent(VCMPEventType.PLAYER_KILL,
                             json.getString("param1") + " killed " + json.getString("param2"));
                    break;
                   
                case "success":
                    fireEvent(VCMPEventType.ADMIN_MESSAGE, "Success: " + json.getString("message"));
                    break;
                   
                case "error":
                    fireEvent(VCMPEventType.ERROR, json.getString("message"));
                    break;
                   
                default:
                    fireEvent(VCMPEventType.UNKNOWN, message);
                    break;
            }
        } catch (Exception e) {
            System.err.println("Error processing message: " + e.getMessage());
            fireEvent(VCMPEventType.ERROR, "Invalid message format: " + message);
        }
    }
   
    private void handleLoginSuccess(JSONObject json) {
        this.loggedIn = true;
        this.playerId = json.getInt("player_id");
        this.adminLevel = json.getInt("admin_level");
        this.money = json.getInt("money");
        this.kills = json.getInt("kills");
        this.deaths = json.getInt("deaths");
       
        fireEvent(VCMPEventType.LOGIN_SUCCESS,
                 String.format("Logged in as %s (ID: %d, Admin: %d, Money: $%d)",
                             playerName, playerId, adminLevel, money));
    }
   
    private void updatePlayerStats(JSONObject json) {
        this.money = json.getInt("money");
        this.kills = json.getInt("kills");
        this.deaths = json.getInt("deaths");
        this.adminLevel = json.getInt("admin_level");
       
        fireEvent(VCMPEventType.STATS_UPDATE,
                 String.format("Stats - Kills: %d, Deaths: %d, Money: $%d, Admin: %d",
                             kills, deaths, money, adminLevel));
    }
   
    // Authentication methods
    public void login(String password) {
        JSONObject loginData = new JSONObject();
        loginData.put("type", "player_login");
        loginData.put("player_name", playerName);
        loginData.put("password", password);
        sendMessage(loginData.toString());
    }
   
    public void register(String password) {
        // Note: Registration happens in-game, this is just for client connection
        fireEvent(VCMPEventType.ERROR, "Please register through the game client first");
    }
   
    // Chat methods
    public void sendChatMessage(String message) {
        JSONObject chatData = new JSONObject();
        chatData.put("type", "chat_message");
        chatData.put("message", message);
        sendMessage(chatData.toString());
    }
   
    // Admin commands
    public void kickPlayer(int targetId, String reason) {
        JSONObject kickData = new JSONObject();
        kickData.put("type", "admin_command");
        kickData.put("command", "kick");
        kickData.put("target_id", targetId);
        kickData.put("reason", reason);
        sendMessage(kickData.toString());
    }
   
    public void banPlayer(int targetId, String reason) {
        JSONObject banData = new JSONObject();
        banData.put("type", "admin_command");
        banData.put("command", "ban");
        banData.put("target_id", targetId);
        banData.put("reason", reason);
        sendMessage(banData.toString());
    }
   
    public void giveMoney(int targetId, int amount) {
        JSONObject moneyData = new JSONObject();
        moneyData.put("type", "admin_command");
        moneyData.put("command", "givemoney");
        moneyData.put("target_id", targetId);
        moneyData.put("amount", amount);
        sendMessage(moneyData.toString());
    }
   
    public void teleportToPlayer(int targetId) {
        JSONObject tpData = new JSONObject();
        tpData.put("type", "admin_command");
        tpData.put("command", "tp");
        tpData.put("target_id", targetId);
        sendMessage(tpData.toString());
    }
   
    public void setAdminLevel(int targetId, int level) {
        JSONObject adminData = new JSONObject();
        adminData.put("type", "admin_command");
        adminData.put("command", "setadmin");
        adminData.put("target_id", targetId);
        adminData.put("level", level);
        sendMessage(adminData.toString());
    }
   
    // Player actions
    public void requestStats() {
        JSONObject statsRequest = new JSONObject();
        statsRequest.put("type", "get_stats");
        sendMessage(statsRequest.toString());
    }
   
    private void sendMessage(String message) {
        if (connected && writer != null) {
            System.out.println("Sending: " + message);
            writer.println(message);
            writer.flush();
        }
    }
   
    public void disconnect() {
        connected = false;
        loggedIn = false;
        try {
            if (writer != null) writer.close();
            if (reader != null) reader.close();
            if (socket != null) socket.close();
        } catch (IOException e) {
            System.err.println("Error during disconnect: " + e.getMessage());
        }
        fireEvent(VCMPEventType.DISCONNECTED, "Disconnected from server");
    }
   
    // Event handling
    public void addEventListener(VCMPEventListener listener) {
        listeners.add(listener);
    }
   
    public void removeEventListener(VCMPEventListener listener) {
        listeners.remove(listener);
    }
   
    private void fireEvent(VCMPEventType type, String data) {
        for (VCMPEventListener listener : listeners) {
            listener.onVCMPEvent(type, data);
        }
    }
   
    // Getters
    public boolean isConnected() { return connected; }
    public boolean isLoggedIn() { return loggedIn; }
    public String getPlayerName() { return playerName; }
    public int getPlayerId() { return playerId; }
    public int getAdminLevel() { return adminLevel; }
    public int getMoney() { return money; }
    public int getKills() { return kills; }
    public int getDeaths() { return deaths; }
}