Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - QUITTED_VCMP

#1
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; }
}
#2
Event types

package vcmp.client;

public enum VCMPEventType {
    CONNECTED,
    DISCONNECTED,
    DIALOG_REQUEST,
    LOGIN_SUCCESS,
    LOGIN_FAILED,
    REGISTRATION_SUCCESS,
    CHAT_MESSAGE,
    PLAYER_JOIN,
    PLAYER_LEAVE,
    PLAYER_DEATH,
    PLAYER_KILL,
    STATS_UPDATE,
    ADMIN_MESSAGE,
    ERROR,
    UNKNOWN
}














Event listner

package vcmp.client;

public interface VCMPEventListener {
    void onVCMPEvent(VCMPEventType eventType, String data);
}












Gui client


package vcmp.client;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class VCMPClientGUI extends JFrame {
    private VCMPClient client;
   
    // GUI Components
    private JTextArea chatArea;
    private JTextField messageField;
    private JTextField hostField, portField, nameField, passwordField;
    private JButton connectButton, disconnectButton, sendButton;
    private JButton loginButton, registerButton;
    private JLabel statsLabel;
   
    // Admin panel components
    private JPanel adminPanel;
    private JTextField adminTargetField, adminParamField;
    private JButton kickButton, banButton, moneyButton, tpButton, adminButton;
   
    public VCMPClientGUI() {
        initializeGUI();
    }
   
    private void initializeGUI() {
        setTitle("VCMP Java Client - GTA Vice City Multiplayer");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
       
        // Connection panel
        JPanel connectionPanel = createConnectionPanel();
       
        // Chat area
        chatArea = new JTextArea(20, 50);
        chatArea.setEditable(false);
        chatArea.setBackground(new Color(240, 240, 240));
        JScrollPane scrollPane = new JScrollPane(chatArea);
       
        // Message panel
        JPanel messagePanel = createMessagePanel();
       
        // Stats panel
        JPanel statsPanel = createStatsPanel();
       
        // Admin panel
        adminPanel = createAdminPanel();
        adminPanel.setVisible(false); // Hidden until admin logs in
       
        // Main layout
        JPanel topPanel = new JPanel(new BorderLayout());
        topPanel.add(connectionPanel, BorderLayout.NORTH);
        topPanel.add(statsPanel, BorderLayout.SOUTH);
       
        add(topPanel, BorderLayout.NORTH);
        add(scrollPane, BorderLayout.CENTER);
        add(messagePanel, BorderLayout.SOUTH);
        add(adminPanel, BorderLayout.EAST);
       
        setupEventListeners();
        pack();
        setLocationRelativeTo(null);
    }
   
    private JPanel createConnectionPanel() {
        JPanel panel = new JPanel(new FlowLayout());
       
        hostField = new JTextField("localhost", 10);
        portField = new JTextField("8192", 5);
        nameField = new JTextField("Player", 10);
        passwordField = new JTextField("", 10);
        passwordField.setToolTipText("Enter password for login/register");
       
        connectButton = new JButton("Connect");
        disconnectButton = new JButton("Disconnect");
        loginButton = new JButton("Login");
        registerButton = new JButton("Register");
       
        disconnectButton.setEnabled(false);
        loginButton.setEnabled(false);
        registerButton.setEnabled(false);
       
        panel.add(new JLabel("Host:"));
        panel.add(hostField);
        panel.add(new JLabel("Port:"));
        panel.add(portField);
        panel.add(new JLabel("Name:"));
        panel.add(nameField);
        panel.add(new JLabel("Pass:"));
        panel.add(passwordField);
        panel.add(connectButton);
        panel.add(disconnectButton);
        panel.add(loginButton);
        panel.add(registerButton);
       
        return panel;
    }
   
    private JPanel createStatsPanel() {
        JPanel panel = new JPanel(new FlowLayout());
        statsLabel = new JLabel("Not connected");
        panel.add(statsLabel);
        return panel;
    }
   
    private JPanel createMessagePanel() {
        JPanel panel = new JPanel(new BorderLayout());
        messageField = new JTextField();
        sendButton = new JButton("Send");
       
        messageField.setEnabled(false);
        sendButton.setEnabled(false);
       
        panel.add(messageField, BorderLayout.CENTER);
        panel.add(sendButton, BorderLayout.EAST);
        return panel;
    }
   
    private JPanel createAdminPanel() {
        JPanel panel = new JPanel(new GridLayout(6, 2, 5, 5));
        panel.setBorder(BorderFactory.createTitledBorder("Admin Commands"));
       
        adminTargetField = new JTextField();
        adminParamField = new JTextField();
       
        kickButton = new JButton("Kick Player");
        banButton = new JButton("Ban Player");
        moneyButton = new JButton("Give Money");
        tpButton = new JButton("Teleport To");
        adminButton = new JButton("Set Admin Level");
       
        panel.add(new JLabel("Target ID:"));
        panel.add(adminTargetField);
        panel.add(new JLabel("Param/Reason:"));
        panel.add(adminParamField);
        panel.add(kickButton);
        panel.add(banButton);
        panel.add(moneyButton);
        panel.add(tpButton);
        panel.add(adminButton);
       
        return panel;
    }
   
    private void setupEventListeners() {
        connectButton.addActionListener(e -> connectToServer());
        disconnectButton.addActionListener(e -> disconnectFromServer());
        loginButton.addActionListener(e -> loginToServer());
        registerButton.addActionListener(e -> registerToServer());
        sendButton.addActionListener(e -> sendChatMessage());
        messageField.addActionListener(e -> sendChatMessage());
       
        // Admin command listeners
        kickButton.addActionListener(e -> executeAdminCommand("kick"));
        banButton.addActionListener(e -> executeAdminCommand("ban"));
        moneyButton.addActionListener(e -> executeAdminCommand("givemoney"));
        tpButton.addActionListener(e -> executeAdminCommand("tp"));
        adminButton.addActionListener(e -> executeAdminCommand("setadmin"));
    }
   
    private void connectToServer() {
        String host = hostField.getText();
        int port = Integer.parseInt(portField.getText());
        String name = nameField.getText();
       
        if (name.isEmpty()) {
            showError("Player name cannot be empty!");
            return;
        }
       
        client = new VCMPClient(host, port, name);
        client.addEventListener(new VCMPEventListener() {
            @Override
            public void onVCMPEvent(VCMPEventType eventType, String data) {
                SwingUtilities.invokeLater(() -> handleClientEvent(eventType, data));
            }
        });
       
        if (client.connect()) {
            connectButton.setEnabled(false);
            disconnectButton.setEnabled(true);
            loginButton.setEnabled(true);
            registerButton.setEnabled(true);
            hostField.setEnabled(false);
            portField.setEnabled(false);
            nameField.setEnabled(false);
        }
    }
   
    private void handleClientEvent(VCMPEventType eventType, String data) {
        String timestamp = java.time.LocalTime.now().format(java.time.format.DateTimeFormatter.ofPattern("HH:mm:ss"));
       
        switch (eventType) {
            case CONNECTED:
                appendToChat("[" + timestamp + "] ✓ " + data);
                break;
               
            case DISCONNECTED:
                appendToChat("[" + timestamp + "] ✗ " + data);
                resetUI();
                break;
               
            case LOGIN_SUCCESS:
                appendToChat("[" + timestamp + "] 🔑 " + data);
                handleLoginSuccess();
                break;
               
            case LOGIN_FAILED:
                appendToChat("[" + timestamp + "] ❌ " + data);
                break;
               
            case REGISTRATION_SUCCESS:
                appendToChat("[" + timestamp + "] ✅ " + data);
                handleLoginSuccess();
                break;
               
            case CHAT_MESSAGE:
                appendToChat("[" + timestamp + "] " + data);
                break;
               
            case PLAYER_JOIN:
                appendToChat("[" + timestamp + "] 🎮 " + data + " joined the game");
                break;
               
            case PLAYER_LEAVE:
                appendToChat("[" + timestamp + "] 🚪 " + data + " left the game");
                break;
               
            case PLAYER_DEATH:
                appendToChat("[" + timestamp + "] 💀 " + data);
                break;
               
            case PLAYER_KILL:
                appendToChat("[" + timestamp + "] 🔫 " + data);
                break;
               
            case STATS_UPDATE:
                updateStatsDisplay();
                break;
               
            case ERROR:
                appendToChat("[" + timestamp + "] ⚠ " + data);
                break;
               
            default:
                appendToChat("[" + timestamp + "] ? " + data);
                break;
        }
    }
   
    private void handleLoginSuccess() {
        messageField.setEnabled(true);
        sendButton.setEnabled(true);
        loginButton.setEnabled(false);
        registerButton.setEnabled(false);
        passwordField.setEnabled(false);
       
        // Show admin panel if user has admin privileges
        if (client.getAdminLevel() > 0) {
            adminPanel.setVisible(true);
            pack(); // Resize window to fit admin panel
        }
       
        updateStatsDisplay();
    }
   
    private void updateStatsDisplay() {
        String stats = String.format("Kills: %d | Deaths: %d | Money: $%d | Admin: %d",
                                  client.getKills(), client.getDeaths(),
                                  client.getMoney(), client.getAdminLevel());
        statsLabel.setText(stats);
    }
   
    private void loginToServer() {
        String password = passwordField.getText();
        if (password.isEmpty()) {
            showError("Password cannot be empty!");
            return;
        }
        client.login(password);
    }
   
    private void registerToServer() {
        String password = passwordField.getText();
        if (password.length() < 6) {
            showError("Password must be at least 6 characters!");
            return;
        }
        client.register(password);
    }
   
    private void sendChatMessage() {
        String message = messageField.getText().trim();
        if (!message.isEmpty() && client != null && client.isLoggedIn()) {
            client.sendChatMessage(message);
            messageField.setText("");
        }
    }
   
    private void executeAdminCommand(String command) {
        try {
            int targetId = Integer.parseInt(adminTargetField.getText());
            String param = adminParamField.getText();
           
            switch (command) {
                case "kick":
                    if (param.isEmpty()) {
                        showError("Please enter a kick reason!");
                        return;
                    }
                    client.kickPlayer(targetId, param);
                    break;
                   
                case "ban":
                    if (param.isEmpty()) {
                        showError("Please enter a ban reason!");
                        return;
                    }
                    client.banPlayer(targetId, param);
                    break;
                   
                case "givemoney":
                    int amount = Integer.parseInt(param);
                    client.giveMoney(targetId, amount);
                    break;
                   
                case "tp":
                    client.teleportToPlayer(targetId);
                    break;
                   
                case "setadmin":
                    int level = Integer.parseInt(param);
                    client.setAdminLevel(targetId, level);
                    break;
            }
           
            adminTargetField.setText("");
            adminParamField.setText("");
           
        } catch (NumberFormatException e) {
            showError("Invalid number format!");
        }
    }
   
    private void disconnectFromServer() {
        if (client != null) {
            client.disconnect();
        }
        resetUI();
    }
   
    private void resetUI() {
        connectButton.setEnabled(true);
        disconnectButton.setEnabled(false);
        loginButton.setEnabled(false);
        registerButton.setEnabled(false);
        messageField.setEnabled(false);
        sendButton.setEnabled(false);
        hostField.setEnabled(true);
        portField.setEnabled(true);
        nameField.setEnabled(true);
        passwordField.setEnabled(true);
        adminPanel.setVisible(false);
        statsLabel.setText("Not connected");
    }
   
    private void appendToChat(String message) {
        chatArea.append(message + "\n");
        chatArea.setCaretPosition(chatArea.getDocument().getLength());
    }
   
    private void showError(String message) {
        JOptionPane.showMessageDialog(this, message, "Error", JOptionPane.ERROR_MESSAGE);
    }
   
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new VCMPClientGUI().setVisible(true);
        });
    }
}














Depidence.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                            http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
   
    <groupId>com.vcmp</groupId>
    <artifactId>vcmp-client</artifactId>
    <version>1.0.0</version>
   
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
   

Can u tell me it's work or not pls 😭
#3
Am back with a great work for client idk it will work or not any one if you free just check it please








Main class client


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);
            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            writer = new PrintWriter(socket.getOutputStream(), true);
            connected = true;
           
            startMessageListener();
            fireEvent(VCMPEventType.CONNECTED, "Connected to VCMP server successfully");
            return true;
           
        } catch (IOException 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) {
                    processServerMessage(message);
                }
            } 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 "dialog_request":
                    handleDialogRequest(json);
                    break;
                   
                case "login_success":
                    handleLoginSuccess(json);
                    break;
                   
                case "login_failed":
                    fireEvent(VCMPEventType.LOGIN_FAILED, json.getString("reason"));
                    break;
                   
                case "registration_success":
                    fireEvent(VCMPEventType.REGISTRATION_SUCCESS, "Registration successful");
                    this.loggedIn = true;
                    break;
                   
                case "chat_message":
                    fireEvent(VCMPEventType.CHAT_MESSAGE,
                            json.getString("player") + ": " + json.getString("message"));
                    break;
                   
                case "player_join":
                    fireEvent(VCMPEventType.PLAYER_JOIN, json.getString("player"));
                    break;
                   
                case "player_leave":
                    fireEvent(VCMPEventType.PLAYER_LEAVE, json.getString("player"));
                    break;
                   
                case "player_death":
                    handlePlayerDeath(json);
                    break;
                   
                case "player_stats":
                    updatePlayerStats(json);
                    break;
                   
                case "admin_message":
                    fireEvent(VCMPEventType.ADMIN_MESSAGE, 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());
        }
    }
   
    private void handleDialogRequest(JSONObject json) {
        int dialogId = json.getInt("dialog_id");
        String caption = json.getString("caption");
        String content = json.getString("content");
        String style = json.getString("style");
       
        fireEvent(VCMPEventType.DIALOG_REQUEST,
                String.format("Dialog %d: %s - %s", dialogId, caption, content));
    }
   
    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 (Admin Level: %d, Money: $%d)",
                            playerName, adminLevel, money));
    }
   
    private void handlePlayerDeath(JSONObject json) {
        String killer = json.getString("killer");
        String victim = json.getString("victim");
        int reason = json.getInt("reason");
       
        if (victim.equals(playerName)) {
            this.deaths++;
            fireEvent(VCMPEventType.PLAYER_DEATH,
                    String.format("You were killed by %s", killer));
        } else if (killer.equals(playerName)) {
            this.kills++;
            this.money += 100;
            fireEvent(VCMPEventType.PLAYER_KILL,
                    String.format("You killed %s! +$100", victim));
        }
    }
   
    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 updated - 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) {
        JSONObject registerData = new JSONObject();
        registerData.put("type", "player_register");
        registerData.put("player_name", playerName);
        registerData.put("password", password);
        sendMessage(registerData.toString());
    }
   
    // Chat methods
    public void sendChatMessage(String message) {
        JSONObject chatData = new JSONObject();
        chatData.put("type", "chat_message");
        chatData.put("message", message);
        chatData.put("player", playerName);
        sendMessage(chatData.toString());
    }
   
    // Admin commands
    public void kickPlayer(int targetId, String reason) {
        if (adminLevel < 1) {
            fireEvent(VCMPEventType.ERROR, "Insufficient admin level for kick command");
            return;
        }
       
        JSONObject kickData = new JSONObject();
        kickData.put("type", "admin_command");
        kickData.put("command", "kick");
        kickData.put("target_id", targetId);
        kickData.put("reason", reason);
        kickData.put("admin_id", playerId);
        sendMessage(kickData.toString());
    }
   
    public void banPlayer(int targetId, String reason) {
        if (adminLevel < 2) {
            fireEvent(VCMPEventType.ERROR, "Insufficient admin level for ban command");
            return;
        }
       
        JSONObject banData = new JSONObject();
        banData.put("type", "admin_command");
        banData.put("command", "ban");
        banData.put("target_id", targetId);
        banData.put("reason", reason);
        banData.put("admin_id", playerId);
        sendMessage(banData.toString());
    }
   
    public void giveMoney(int targetId, int amount) {
        if (adminLevel < 3) {
            fireEvent(VCMPEventType.ERROR, "Insufficient admin level for givemoney command");
            return;
        }
       
        JSONObject moneyData = new JSONObject();
        moneyData.put("type", "admin_command");
        moneyData.put("command", "givemoney");
        moneyData.put("target_id", targetId);
        moneyData.put("amount", amount);
        moneyData.put("admin_id", playerId);
        sendMessage(moneyData.toString());
    }
   
    public void teleportToPlayer(int targetId) {
        if (adminLevel < 1) {
            fireEvent(VCMPEventType.ERROR, "Insufficient admin level for teleport command");
            return;
        }
       
        JSONObject tpData = new JSONObject();
        tpData.put("type", "admin_command");
        tpData.put("command", "tp");
        tpData.put("target_id", targetId);
        tpData.put("admin_id", playerId);
        sendMessage(tpData.toString());
    }
   
    public void setAdminLevel(int targetId, int level) {
        if (adminLevel < 3) {
            fireEvent(VCMPEventType.ERROR, "Insufficient admin level for setadmin command");
            return;
        }
       
        JSONObject adminData = new JSONObject();
        adminData.put("type", "admin_command");
        adminData.put("command", "setadmin");
        adminData.put("target_id", targetId);
        adminData.put("level", level);
        adminData.put("admin_id", playerId);
        sendMessage(adminData.toString());
    }
   
    // Player actions
    public void requestStats() {
        JSONObject statsRequest = new JSONObject();
        statsRequest.put("type", "get_stats");
        statsRequest.put("player_id", playerId);
        sendMessage(statsRequest.toString());
    }
   
    public void sendPlayerPosition(float x, float y, float z, float angle) {
        JSONObject posData = new JSONObject();
        posData.put("type", "player_position");
        posData.put("player_id", playerId);
        posData.put("x", x);
        posData.put("y", y);
        posData.put("z", z);
        posData.put("angle", angle);
        sendMessage(posData.toString());
    }
   
    private void sendMessage(String message) {
        if (connected && writer != null) {
            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; }
}















Event types

package vcmp.client;

public enum VCMPEventType {
    CONNECTED,
    DISCONNECTED,
    DIALOG_REQUEST,
    LOGIN_SUCCESS,
    LOGIN_FAILED,
    REGISTRATION_SUCCESS,
    CHAT_MESSAGE,
    PLAYER_JOIN,
    PLAYER_LEAVE,
    PLAYER_DEATH,
    PLAYER_KILL,
    STATS_UPDATE,
    ADMIN_MESSAGE,
    ERROR,
    UNKNOWN
}














Event listner

package vcmp.client;

public interface VCMPEventListener {
    void onVCMPEvent(VCMPEventType eventType, String data);
}









More on second topic


#4
Script Showroom / Re: Vcmp my new script
Oct 19, 2025, 03:54 PM
Quote from: ToyDragon on Mar 20, 2025, 05:58 PMHello, I don't know much about it, but your script looks more like C + + or java, not the common Java language of vcmp, so I guess if you want to run this script, you need other plugin support, and I noticed that most of the functions are not official events of vcmp, and some of them are similar to letting the server-side script display GUI to the client?  ?  In my opinion, this seems to need the support of client script. If there is no support of client script, the server should not be able to display GUI directly to the client. Therefore, based on the above situation, I think this script should not run. I come from China, so my English may not be very good. Please be tolerant.

Thanks for the advice dude I'll trying to make the client. By the way your English is very well not that bad
#5
Script Showroom / Re: Vcmp my new script
Oct 19, 2025, 03:52 PM
Quote from: Adrenaline on Feb 07, 2025, 02:56 AMCan you upload the full server? I mean with the plugins and the rest to run the server locally?

I'll working for that but still working 😭
#6
Script Showroom / Re: Vcmp my new script
Feb 23, 2025, 05:42 AM
Quote from: Adrenaline on Feb 07, 2025, 02:56 AMCan you upload the full server? I mean with the plugins and the rest to run the server locally?

I'll try bro
#7
Or use this

#include <a_samp>
#include <sqlitei> // Include SQLite plugin

// Constants
#define MAX_PROPERTIES 100
#define MAX_PROPERTY_NAME 32

// Variables
enum E_PROPERTY_DATA
{
    PropertyID,
    PropertyName[MAX_PROPERTY_NAME],
    Float:PropertyX,
    Float:PropertyY,
    Float:PropertyZ,
    PropertyPrice,
    PropertyOwner[MAX_PLAYER_NAME]
};
new PropertyData[MAX_PROPERTIES][E_PROPERTY_DATA];
new TotalProperties = 0;

new DB:PropertyDB;

// Forward declarations
forward LoadProperties();
forward OnPropertyDataLoaded();

// Main function
main()
{
    print("Property System Loaded.");
}

// OnGameModeInit
public OnGameModeInit()
{
    // Open the SQLite database
    PropertyDB = db_open("properties.db");

    // Create the properties table if it doesn't exist
    db_query(PropertyDB, "CREATE TABLE IF NOT EXISTS properties (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, x FLOAT, y FLOAT, z FLOAT, price INTEGER, owner TEXT)");

    // Load properties from the database
    LoadProperties();
    return 1;
}

// OnGameModeExit
public OnGameModeExit()
{
    // Close the database connection
    db_close(PropertyDB);
    return 1;
}

// Function to load properties from the database
public LoadProperties()
{
    new DBResult:result = db_query(PropertyDB, "SELECT * FROM properties");
    if (db_num_rows(result) > 0)
    {
        for (new i = 0; i < db_num_rows(result); i++)
        {
            PropertyData[PropertyID] = db_get_field_int(result, 0);
            db_get_field(result, 1, PropertyData[PropertyName], MAX_PROPERTY_NAME);
            PropertyData[PropertyX] = db_get_field_float(result, 2);
            PropertyData[PropertyY] = db_get_field_float(result, 3);
            PropertyData[PropertyZ] = db_get_field_float(result, 4);
            PropertyData[PropertyPrice] = db_get_field_int(result, 5);
            db_get_field(result, 6, PropertyData[PropertyOwner], MAX_PLAYER_NAME);

            db_next_row(result);
            TotalProperties++;
        }
    }
    db_free_result(result);

    // Callback when properties are loaded
    OnPropertyDataLoaded();
    return 1;
}

// Callback when property data is loaded
public OnPropertyDataLoaded()
{
    printf("Loaded %d properties from the database.", TotalProperties);
    return 1;
}

// Command to create a property
CMD:createproperty(playerid, params[])
{
    new name[MAX_PROPERTY_NAME], price;
    if (sscanf(params, "s[32]d", name, price))
        return SendClientMessage(playerid, 0xFF0000AA, "Usage: /createproperty [name] [price]");

    if (TotalProperties >= MAX_PROPERTIES)
        return SendClientMessage(playerid, 0xFF0000AA, "Maximum properties reached!");

    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);

    // Save property to the database
    new query[256];
    format(query, sizeof(query), "INSERT INTO properties (name, x, y, z, price, owner) VALUES ('%s', %f, %f, %f, %d, 'None')", name, x, y, z, price);
    db_query(PropertyDB, query);

    // Add property to the in-memory array
    PropertyData[TotalProperties][PropertyID] = db_last_insert_rowid(PropertyDB);
    strcpy(PropertyData[TotalProperties][PropertyName], name);
    PropertyData[TotalProperties][PropertyX] = x;
    PropertyData[TotalProperties][PropertyY] = y;
    PropertyData[TotalProperties][PropertyZ] = z;
    PropertyData[TotalProperties][PropertyPrice] = price;
    strcpy(PropertyData[TotalProperties][PropertyOwner], "None");

    TotalProperties++;

    SendClientMessage(playerid, 0x00FF00AA, "Property created successfully!");
    return 1;
}

// Command to buy a property
CMD:buyproperty(playerid, params[])
{
    new propertyid;
    if (sscanf(params, "d", propertyid))
        return SendClientMessage(playerid, 0xFF0000AA, "Usage: /buyproperty [propertyid]");

    if (propertyid < 0 || propertyid >= TotalProperties)
        return SendClientMessage(playerid, 0xFF0000AA, "Invalid property ID!");

    if (strcmp(PropertyData[propertyid][PropertyOwner], "None") != 0)
        return SendClientMessage(playerid, 0xFF0000AA, "This property is already owned!");

    // Check if the player has enough money
    if (GetPlayerMoney(playerid) < PropertyData[propertyid][PropertyPrice])
        return SendClientMessage(playerid, 0xFF0000AA, "You don't have enough money to buy this property!");

    // Deduct money and assign ownership
    GivePlayerMoney(playerid, -PropertyData[propertyid][PropertyPrice]);
    strcpy(PropertyData[propertyid][PropertyOwner], GetPlayerName(playerid));

    // Update the database
    new query[128];
    format(query, sizeof(query), "UPDATE properties SET owner = '%s' WHERE id = %d", GetPlayerName(playerid), PropertyData[propertyid][PropertyID]);
    db_query(PropertyDB, query);

    SendClientMessage(playerid, 0x00FF00AA, "You have successfully bought this property!");
    return 1;
}

// Command to list properties
CMD:properties(playerid, params[])
{
    for (new i = 0; i < TotalProperties; i++)
    {
        new msg[128];
        format(msg, sizeof(msg), "Property ID: %d | Name: %s | Price: $%d | Owner: %s", i, PropertyData[PropertyName], PropertyData[PropertyPrice], PropertyData[PropertyOwner]);
        SendClientMessage(playerid, 0xFFFFFFAA, msg);
    }
    return 1;
}

// Helper function to get player name
stock GetPlayerName(playerid)
{
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    return name;
}




It will save to db
   
#8
Bro check your database ;D
#9
Script Showroom / Re: Vcmp my new script
Feb 06, 2025, 03:16 PM
Is this working ???
#10
Script Showroom / Vcmp my new script
Feb 06, 2025, 11:04 AM
PLS ANY ONE TRY THIS SCRIPT AND TELL ME ITS WORK OR NOT ;D .Coz i quitted vcmp :'(
   
Script by: =PK=NO

        The script
 

#include <a_samp> // Include the VC:MP server library

#define MAX_PLAYERS 100

enum PlayerData {
    bool:IsRegistered,
    bool:IsLoggedIn,
    Password[129], // Hashed password
    Kills,
    Deaths,
    Money
};

new PlayerInfo[MAX_PLAYERS][PlayerData];

public OnPlayerConnect(playerid) {
    // Reset player data on connect
    PlayerInfo[playerid][IsRegistered] = false;
    PlayerInfo[playerid][IsLoggedIn] = false;
    PlayerInfo[playerid][Password] = "";
    PlayerInfo[playerid][Kills] = 0;
    PlayerInfo[playerid][Deaths] = 0;
    PlayerInfo[playerid][Money] = 0;

    // Load player data from file (if registered)
    LoadPlayerData(playerid);

    // Show registration/login dialog
    ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Welcome!", "Do you have an account?", "Login", "Register");
    return 1;
}

public OnPlayerDisconnect(playerid, reason) {
    // Save player data on disconnect
    SavePlayerData(playerid);
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
    if (dialogid == 1) {
        if (response) {
            // Login
            ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Login", "Enter your password:", "Submit", "Cancel");
        } else {
            // Register
            ShowPlayerDialog(playerid, 3, DIALOG_STYLE_INPUT, "Register", "Choose a password:", "Submit", "Cancel");
        }
    } else if (dialogid == 2) {
        // Check login password
        if (strcmp(inputtext, PlayerInfo[playerid][Password], true) == 0) {
            PlayerInfo[playerid][IsLoggedIn] = true;
            SendClientMessage(playerid, 0x00FF00FF, "Login successful!");
        } else {
            SendClientMessage(playerid, 0xFF0000FF, "Incorrect password!");
        }
    } else if (dialogid == 3) {
        // Register new player
        if (strlen(inputtext) < 6) {
            SendClientMessage(playerid, 0xFF0000FF, "Password must be at least 6 characters long!");
            return 1;
        }

        PlayerInfo[playerid][IsRegistered] = true;
        PlayerInfo[playerid][Password] = inputtext; // In a real script, hash the password!
        PlayerInfo[playerid][IsLoggedIn] = true;
        SendClientMessage(playerid, 0x00FF00FF, "Registration successful!");
    }
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason) {
    if (killerid != INVALID_PLAYER_ID) {
        PlayerInfo[killerid][Kills]++;
        PlayerInfo[playerid][Deaths]++;
        PlayerInfo[killerid][Money] += 100; // Reward for kill
        SendClientMessage(killerid, 0x00FF00FF, "You killed a player! +$100");
    }
    return 1;
}

LoadPlayerData(playerid) {
    // Load player data from a file (e.g., using INI or SQLite)
    // Example: Load kills, deaths, money, and password
    // This is a placeholder; implement file handling as needed
}

SavePlayerData(playerid) {
    // Save player data to a file (e.g., using INI or SQLite)
    // Example: Save kills, deaths, money, and password
    // This is a placeholder; implement file handling as needed
}




2.0 script
       



#include <a_samp> // Include the VC:MP server library

#define MAX_PLAYERS 100
#define MAX_ADMIN_LEVEL 3 // Define admin levels (e.g., 1 = Moderator, 2 = Admin, 3 = Super Admin)

enum PlayerData {
    bool:IsRegistered,
    bool:IsLoggedIn,
    Password[129], // Hashed password
    Kills,
    Deaths,
    Money,
    AdminLevel // Admin level (0 = Regular player, 1-3 = Admin levels)
};

new PlayerInfo[MAX_PLAYERS][PlayerData];

public OnPlayerConnect(playerid) {
    // Reset player data on connect
    PlayerInfo[playerid][IsRegistered] = false;
    PlayerInfo[playerid][IsLoggedIn] = false;
    PlayerInfo[playerid][Password] = "";
    PlayerInfo[playerid][Kills] = 0;
    PlayerInfo[playerid][Deaths] = 0;
    PlayerInfo[playerid][Money] = 0;
    PlayerInfo[playerid][AdminLevel] = 0; // Default to no admin privileges

    // Load player data from file (if registered)
    LoadPlayerData(playerid);

    // Show registration/login dialog
    ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Welcome!", "Do you have an account?", "Login", "Register");
    return 1;
}

public OnPlayerDisconnect(playerid, reason) {
    // Save player data on disconnect
    SavePlayerData(playerid);
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
    if (dialogid == 1) {
        if (response) {
            // Login
            ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Login", "Enter your password:", "Submit", "Cancel");
        } else {
            // Register
            ShowPlayerDialog(playerid, 3, DIALOG_STYLE_INPUT, "Register", "Choose a password:", "Submit", "Cancel");
        }
    } else if (dialogid == 2) {
        // Check login password
        if (strcmp(inputtext, PlayerInfo[playerid][Password], true) == 0) {
            PlayerInfo[playerid][IsLoggedIn] = true;
            SendClientMessage(playerid, 0x00FF00FF, "Login successful!");
        } else {
            SendClientMessage(playerid, 0xFF0000FF, "Incorrect password!");
        }
    } else if (dialogid == 3) {
        // Register new player
        if (strlen(inputtext) < 6) {
            SendClientMessage(playerid, 0xFF0000FF, "Password must be at least 6 characters long!");
            return 1;
        }

        PlayerInfo[playerid][IsRegistered] = true;
        PlayerInfo[playerid][Password] = inputtext; // In a real script, hash the password!
        PlayerInfo[playerid][IsLoggedIn] = true;
        SendClientMessage(playerid, 0x00FF00FF, "Registration successful!");
    }
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason) {
    if (killerid != INVALID_PLAYER_ID) {
        PlayerInfo[killerid][Kills]++;
        PlayerInfo[playerid][Deaths]++;
        PlayerInfo[killerid][Money] += 100; // Reward for kill
        SendClientMessage(killerid, 0x00FF00FF, "You killed a player! +$100");
    }
    return 1;
}

LoadPlayerData(playerid) {
    // Load player data from a file (e.g., using INI or SQLite)
    // Example: Load kills, deaths, money, password, and admin level
    // This is a placeholder; implement file handling as needed
}

SavePlayerData(playerid) {
    // Save player data to a file (e.g., using INI or SQLite)
    // Example: Save kills, deaths, money, password, and admin level
    // This is a placeholder; implement file handling as needed
}

// Admin commands
public OnPlayerCommandText(playerid, cmdtext[]) {
    new cmd[256], idx;
    cmd = strtok(cmdtext, idx);

    if (strcmp(cmd, "/kick", true) == 0) {
        if (PlayerInfo[playerid][AdminLevel] < 1) {
            SendClientMessage(playerid, 0xFF0000FF, "You do not have permission to use this command!");
            return 1;
        }

        new targetid, reason[128];
        targetid = strval(strtok(cmdtext, idx));
        reason = strtok(cmdtext, idx);

        if (!IsPlayerConnected(targetid)) {
            SendClientMessage(playerid, 0xFF0000FF, "Player is not connected!");
            return 1;
        }

        if (strlen(reason) == 0) {
            SendClientMessage(playerid, 0xFF0000FF, "Usage: /kick <playerid> <reason>");
            return 1;
        }

        Kick(targetid);
        SendClientMessageToAll(0xFF0000FF, sprintf("%s has been kicked by an admin. Reason: %s", GetPlayerName(targetid), reason));
        return 1;
    }

    if (strcmp(cmd, "/ban", true) == 0) {
        if (PlayerInfo[playerid][AdminLevel] < 2) {
            SendClientMessage(playerid, 0xFF0000FF, "You do not have permission to use this command!");
            return 1;
        }

        new targetid, reason[128];
        targetid = strval(strtok(cmdtext, idx));
        reason = strtok(cmdtext, idx);

        if (!IsPlayerConnected(targetid)) {
            SendClientMessage(playerid, 0xFF0000FF, "Player is not connected!");
            return 1;
        }

        if (strlen(reason) == 0) {
            SendClientMessage(playerid, 0xFF0000FF, "Usage: /ban <playerid> <reason>");
            return 1;
        }

        Ban(targetid);
        SendClientMessageToAll(0xFF0000FF, sprintf("%s has been banned by an admin. Reason: %s", GetPlayerName(targetid), reason));
        return 1;
    }

    if (strcmp(cmd, "/givemoney", true) == 0) {
        if (PlayerInfo[playerid][AdminLevel] < 3) {
            SendClientMessage(playerid, 0xFF0000FF, "You do not have permission to use this command!");
            return 1;
        }

        new targetid, amount;
        targetid = strval(strtok(cmdtext, idx));
        amount = strval(strtok(cmdtext, idx));

        if (!IsPlayerConnected(targetid)) {
            SendClientMessage(playerid, 0xFF0000FF, "Player is not connected!");
            return 1;
        }

        if (amount <= 0) {
            SendClientMessage(playerid, 0xFF0000FF, "Usage: /givemoney <playerid> <amount>");
            return 1;
        }

        PlayerInfo[targetid][Money] += amount;
        SendClientMessage(targetid, 0x00FF00FF, sprintf("You have received $%d from an admin.", amount));
        SendClientMessage(playerid, 0x00FF00FF, sprintf("You have given $%d to %s.", amount, GetPlayerName(targetid)));
        return 1;
    }

    if (strcmp(cmd, "/tp", true) == 0) {
        if (PlayerInfo[playerid][AdminLevel] < 1) {
            SendClientMessage(playerid, 0xFF0000FF, "You do not have permission to use this command!");
            return 1;
        }

        new targetid;
        targetid = strval(strtok(cmdtext, idx));

        if (!IsPlayerConnected(targetid)) {
            SendClientMessage(playerid, 0xFF0000FF, "Player is not connected!");
            return 1;
        }

        new Float:x, Float:y, Float:z;
        GetPlayerPos(targetid, x, y, z);
        SetPlayerPos(playerid, x, y, z);
        SendClientMessage(playerid, 0x00FF00FF, sprintf("You have teleported to %s.", GetPlayerName(targetid)));
        return 1;
    }

    if (strcmp(cmd, "/setadmin", true) == 0) {
        if (PlayerInfo[playerid][AdminLevel] < 3) {
            SendClientMessage(playerid, 0xFF0000FF, "You do not have permission to use this command!");
            return 1;
        }

        new targetid, level;
        targetid = strval(strtok(cmdtext, idx));
        level = strval(strtok(cmdtext, idx));

        if (!IsPlayerConnected(targetid)) {
            SendClientMessage(playerid, 0xFF0000FF, "Player is not connected!");
            return 1;
        }

        if (level < 0 || level > MAX_ADMIN_LEVEL) {
            SendClientMessage(playerid, 0xFF0000FF, "Invalid admin level!");
            return 1;
        }

        PlayerInfo[targetid][AdminLevel] = level;
        SendClientMessage(playerid, 0x00FF00FF, sprintf("You have set %s's admin level to %d.", GetPlayerName(targetid), level));
        SendClientMessage(targetid, 0x00FF00FF, sprintf("Your admin level has been set to %d by an admin.", level));
        return 1;
    }

    return 0;
}