2.6. Весь код необходимо брать под тег "Код".
Первые мои скрипты моего языка который я щас создаю с помощью нейросети Pawno c+, там смешиваются pawn и c++ вот эти скрипты:
1 скрипт:
2 скрипт:
3 скрипт:
4 скрипт:
5 скрипт:
6 скрипт:
7 скрипт:
8 скрипт:
9 скрипт:
Просите команды, системы выставлю
1 скрипт:
Pawn:
#include <crmp_core>
// Создаем класс фракции с использованием ООП из C++
public class Fraction {
private:
int fractionId;
string fractionName;
// Используем динамический вектор из C++ вместо фиксированных массивов Pawn!
std::vector<int> memberList;
std::vector<int> vehicleList;
public:
// Конструктор фракции
Fraction(int id, string name) {
this->fractionId = id;
this->fractionName = name;
}
// Метод добавления служебного авто (например, Lada Priora УГИБДД)
void AddFractionVehicle(int modelId, Vector3 spawnPos, float rotation, int color1, int color2) {
// Создаем машину через стандартный натив CRMP, но сохраняем её ID в вектор C++
int vehId = CreateVehicle(modelId, spawnPos.x, spawnPos.y, spawnPos.z, rotation, color1, color2, -1);
this->vehicleList.push_back(vehId);
// Устанавливаем 3D текст на машину (фишка Pawno: методы прямо у ID машины!)
Attach3DTextLabelToVehicle(Create3DTextLabel("[Служебный транспорт]", 0xFF0000FF, 0.0, 0.0, 2.0), vehId, 0.0, 0.0, 0.0);
}
// Отправка сообщения всей фракции (в Pawn пришлось бы делать цикл по всем игрокам)
void BroadcastMessage(int color, string text) {
for(int playerId : this->memberList) {
if(IsPlayerConnected(playerId)) {
SendClientMessage(playerId, color, text);
}
}
}
}
// Глобальный объект фракции ДПС
global Fraction Police(1, "УГИБДД по Нижегородской области");
public void OnGameModeInit() {
// Красивый спавн машин фракции при запуске сервера CRMP
// Используем структуру Vector3 из C++
Police.AddFractionVehicle(541, Vector3(-2450.0, 1500.0, 20.0), 90.0, 1, 1); // ДПС авто
Police.AddFractionVehicle(541, Vector3(-2455.0, 1500.0, 20.0), 90.0, 1, 1);
printf("Фракция %s успешно загружена!", Police.fractionName);
}
// Удобная обработка команд в стиле C++ атрибутов
[Command("dps_bonus")]
public void OnPlayerCommand(int playerId, string args) {
if(Police.IsPlayerInFraction(playerId)) {
GivePlayerMoney(playerId, 5000); // Выдаем 5000 рублей на сервере Criminal Russia
SendClientMessage(playerId, 0x00FF00FF, "[УГИБДД] Вы получили премию за дежурство!");
}
}
2 скрипт:
Pawn:
#include <pawno_crmp>
#include <database>
public class PlayerSession {
private:
int id;
string name;
bool isLogged = false;
int level = 1;
int cash = 5000;
public:
PlayerSession(int playerId, string playerName) {
this->id = playerId;
this->name = playerName;
}
void LoadData(QueryResult result) {
this->level = result.GetInt("level");
this->cash = result.GetInt("cash");
this->isLogged = true;
SetPlayerScore(this->id, this->level);
GivePlayerMoney(this->id, this->cash);
SendClientMessage(this->id, 0x00FF00FF, "Вы успешно авторизовались. Добро пожаловать в Нижегородскую область!");
}
void SaveData() {
if (!this->isLogged) return;
string query = format("UPDATE users SET level = %d, cash = %d WHERE name = '%s'",
GetPlayerScore(this->id), GetPlayerMoney(this->id), this->name);
Database.Execute(query);
}
~PlayerSession() {
this->SaveData();
}
}
global std::map<int, PlayerSession*> ActivePlayers;
public void OnPlayerConnect(int playerId) {
string name = GetPlayerName(playerId);
ActivePlayers[playerId] = new PlayerSession(playerId, name);
string query = format("SELECT * FROM users WHERE name = '%s' LIMIT 1", name);
Database.Query(query, [=](QueryResult result) {
if (result.RowsCount > 0) {
ShowPlayerDialog(playerId, 1, DIALOG_STYLE_PASSWORD, "Авторизация", "Введите пароль:", "Войти", "Выход");
} else {
ShowPlayerDialog(playerId, 2, DIALOG_STYLE_PASSWORD, "Регистрация", "Создайте пароль:", "Создать", "Выход");
}
});
}
public void OnPlayerDisconnect(int playerId, int reason) {
if (ActivePlayers.count(playerId)) {
delete ActivePlayers[playerId];
ActivePlayers.erase(playerId);
}
}
3 скрипт:
Pawn:
#include <pawno_crmp>
enum AdminLevels {
ADMIN_NONE = 0,
ADMIN_HELPER = 1,
ADMIN_MODER = 2,
ADMIN_CHIEF = 3
};
// Внутренний макрос транслятора Pawno для валидации админки
#define CHECK_ADMIN(id, level) if(GetPlayerAdminLevel(id) < level) return SendClientMessage(id, 0xFF0000FF, "[Ошибка] Нет доступа!");
[Command("makeadmin", ADMIN_CHIEF)]
public void CmdMakeAdmin(int playerId, string args) {
int targetId, level;
if (sscanf(args, "dd", targetId, level)) {
return SendClientMessage(playerId, 0xFFFFFFFF, "Используйте: /makeadmin [id] [уровень]");
}
SetPlayerAdminLevel(targetId, level);
string msg = format("[Админ] Вы назначили игрока %d админом %d уровня.", targetId, level);
SendClientMessage(playerId, 0x00FF00FF, msg);
}
[Command("veh", ADMIN_MODER)]
public void CmdSpawnVehicle(int playerId, string args) {
int modelId;
if (sscanf(args, "d", modelId)) {
return SendClientMessage(playerId, 0xFFFFFFFF, "Используйте: /veh [modelId]");
}
Vector3 pos;
GetPlayerPos(playerId, &pos.x, &pos.y, &pos.z);
int vehId = CreateVehicle(modelId, pos.x + 2.0, pos.y, pos.z, 0.0, 1, 1, -1);
PutPlayerInVehicle(playerId, vehId, 0);
}
4 скрипт:
Pawn:
#include <pawno_crmp>
public class Organization {
private:
int orgId;
string orgName;
int spawnColor;
std::vector<int> vehicles;
public:
Organization(int id, string name, int color) {
this->orgId = id;
this->orgName = name;
this->spawnColor = color;
}
void AddVehicle(int modelId, Vector3 pos, float rot, string plate) {
int vehId = CreateVehicle(modelId, pos.x, pos.y, pos.z, rot, 1, 1, -1);
SetVehicleNumberPlate(vehId, plate);
string text = format("[%s]\n%s", this->orgName, plate);
Attach3DTextLabelToVehicle(Create3DTextLabel(text, this->spawnColor, 0.0, 0.0, 1.5), vehId, 0.0, 0.0, 0.0);
this->vehicles.push_back(vehId);
}
void RespawnFleet() {
for (int vehId : this->vehicles) {
SetVehicleToRespawn(vehId);
}
}
}
global std::map<int, Organization*> Factions;
public void OnGameModeInit() {
// Инициализация УГИБДД
Factions[1] = new Organization(1, "УГИБДД", 0x0000FFFF);
Factions[1]->AddVehicle(541, Vector3(-2400.5, 1200.1, 15.0), 90.0, "А000РР52");
Factions[1]->AddVehicle(541, Vector3(-2405.5, 1200.1, 15.0), 90.0, "А001РР52");
// Инициализация ЦБ
Factions[2] = new Organization(2, "Центральная Больница", 0xFF0000FF);
Factions[2]->AddVehicle(416, Vector3(-2500.0, 1300.0, 16.0), 180.0, "М111ММ52");
}
5 скрипт:
Pawn:
#include <pawno_crmp>
public class AdminSession {
private:
int id;
int level = 0;
bool isAuthed = false;
string name;
public:
AdminSession(int playerId, int adminLevel) {
this->id = playerId;
this->level = adminLevel;
this->name = GetPlayerName(playerId);
}
bool CheckAccess(int requiredLevel) {
if (!this->isAuthed) {
SendClientMessage(this->id, 0xFF0000FF, "[Защита] Авторизуйся в админ-панели!");
return false;
}
if (this->level < requiredLevel) {
SendClientMessage(this->id, 0xFF0000FF, "[Ошибка] Недостаточно прав!");
return false;
}
return true;
}
void Authenticate(string password) {
if (password == "admin1234") {
this->isAuthed = true;
SendClientMessage(this->id, 0x00FF00FF, "[Админ] Успешный вход.");
} else {
Kick(this->id);
}
}
int GetLevel() { return this->level; }
}
global std::map<int, AdminSession*> AdminList;
public void OnPlayerDisconnect(int playerId, int reason) {
if (AdminList.count(playerId)) {
delete AdminList[playerId];
AdminList.erase(playerId);
}
}
6 скрипт:
Pawn:
#include <pawno_crmp>
#define REQ_ADMIN(id, lvl) if(!AdminList.count(id) || !AdminList[id]->CheckAccess(lvl)) return;
[Command("kick", 1)]
public void CmdKick(int playerId, string args) {
REQ_ADMIN(playerId, 1);
int targetId; string reason;
if (sscanf(args, "ds", targetId, reason)) return SendClientMessage(playerId, -1, "Юзай: /kick [ID] [Причина]");
string msg = format("[Администрация] %s кикнул %s. Причина: %s", GetPlayerName(playerId), GetPlayerName(targetId), reason);
SendClientMessageToAll(0xFF0000FF, msg);
Kick(targetId);
}
[Command("ban", 2)]
public void CmdBan(int playerId, string args) {
REQ_ADMIN(playerId, 2);
int targetId, days; string reason;
if (sscanf(args, "dds", targetId, days, reason)) return SendClientMessage(playerId, -1, "Юзай: /ban [ID] [Дни] [Причина]");
string msg = format("[Администрация] %s забанил %s на %d дней. Причина: %s", GetPlayerName(playerId), GetPlayerName(targetId), days, reason);
SendClientMessageToAll(0xFF0000FF, msg);
string query = format("INSERT INTO bans (name, days, reason) VALUES ('%s', %d, '%s')", GetPlayerName(targetId), days, reason);
Database.Execute(query);
Kick(targetId);
}
[Command("mute", 1)]
public void CmdMute(int playerId, string args) {
REQ_ADMIN(playerId, 1);
int targetId, time; string reason;
if (sscanf(args, "dds", targetId, time, reason)) return SendClientMessage(playerId, -1, "Юзай: /mute [ID] [Минуты] [Причина]");
SetPlayerMuteTime(targetId, time * 60);
string msg = format("[Администрация] %s выдал мут %s на %d мин. Причина: %s", GetPlayerName(playerId), GetPlayerName(targetId), time, reason);
SendClientMessageToAll(0xFF0000FF, msg);
}
7 скрипт:
Pawn:
#include <pawno_crmp>
#define REQ_ADMIN(id, lvl) if(!AdminList.count(id) || !AdminList[id]->CheckAccess(lvl)) return;
[Command("sp", 1)]
public void CmdSpectate(int playerId, string args) {
REQ_ADMIN(playerId, 1);
int targetId;
if (sscanf(args, "d", targetId)) return SendClientMessage(playerId, -1, "Юзай: /sp [ID] (0 - выключить)");
if (targetId == 0) {
TogglePlayerSpectating(playerId, false);
return;
}
TogglePlayerSpectating(playerId, true);
if (IsPlayerInAnyVehicle(targetId)) {
PlayerSpectateVehicle(playerId, GetPlayerVehicleID(targetId));
} else {
PlayerSpectatePlayer(playerId, targetId);
}
}
[Command("tp", 1)]
public void CmdTeleport(int playerId, string args) {
REQ_ADMIN(playerId, 1);
int targetId;
if (sscanf(args, "d", targetId)) return SendClientMessage(playerId, -1, "Юзай: /tp [ID]");
Vector3 pos;
GetPlayerPos(targetId, &pos.x, &pos.y, &pos.z);
SetPlayerPos(playerId, pos.x + 1.0, pos.y + 1.0, pos.z);
SetPlayerInterior(playerId, GetPlayerInterior(targetId));
SetPlayerVirtualWorld(playerId, GetPlayerVirtualWorld(targetId));
}
[Command("tphere", 2)]
public void CmdTeleportHere(int playerId, string args) {
REQ_ADMIN(playerId, 2);
int targetId;
if (sscanf(args, "d", targetId)) return SendClientMessage(playerId, -1, "Юзай: /tphere [ID]");
Vector3 pos;
GetPlayerPos(playerId, &pos.x, &pos.y, &pos.z);
SetPlayerPos(targetId, pos.x + 1.0, pos.y + 1.0, pos.z);
SetPlayerInterior(targetId, GetPlayerInterior(playerId));
SetPlayerVirtualWorld(targetId, GetPlayerVirtualWorld(playerId));
}
[Command("slap", 1)]
public void CmdSlap(int playerId, string args) {
REQ_ADMIN(playerId, 1);
int targetId;
if (sscanf(args, "d", targetId)) return SendClientMessage(playerId, -1, "Юзай: /slap [ID]");
Vector3 pos;
GetPlayerPos(targetId, &pos.x, &pos.y, &pos.z);
SetPlayerPos(targetId, pos.x, pos.y, pos.z + 5.0);
PlayerPlaySound(targetId, 1190, 0.0, 0.0, 0.0);
}
8 скрипт:
Pawn:
#include <pawno_crmp>
#define REQ_ADMIN(id, lvl) if(!AdminList.count(id) || !AdminList[id]->CheckAccess(lvl)) return;
[Command("hp", 1)]
public void CmdSetHealth(int playerId, string args) {
REQ_ADMIN(playerId, 1);
int targetId, hp;
if (sscanf(args, "dd", targetId, hp)) return SendClientMessage(playerId, -1, "Юзай: /hp [ID] [ХП]");
SetPlayerHealth(targetId, float(hp));
}
[Command("setskin", 2)]
public void CmdSetSkin(int playerId, string args) {
REQ_ADMIN(playerId, 2);
int targetId, skinId;
if (sscanf(args, "dd", targetId, skinId)) return SendClientMessage(playerId, -1, "Юзай: /setskin [ID] [Скин]");
SetPlayerSkin(targetId, skinId);
}
[Command("spawn", 1)]
public void CmdSpawnPlayer(int playerId, string args) {
REQ_ADMIN(playerId, 1);
int targetId;
if (sscanf(args, "d", targetId)) return SendClientMessage(playerId, -1, "Юзай: /spawn [ID]");
SpawnPlayer(targetId);
}
9 скрипт:
Pawn:
#include <pawno_crmp>
#define REQ_ADMIN(id, lvl) if(!AdminList.count(id) || !AdminList[id]->CheckAccess(lvl)) return;
public struct ReportTicket {
int senderId;
string text;
}
global std::vector<ReportTicket> ReportQueue;
[Command("rep", 0)]
public void CmdReport(int playerId, string args) {
if (args.empty()) return SendClientMessage(playerId, -1, "Юзай: /rep [Текст]");
ReportTicket ticket = { playerId, args };
ReportQueue.push_back(ticket);
SendClientMessage(playerId, 0xFFFF00FF, "Жалоба отправлена.");
for (auto const& [adminId, session] : AdminList) {
string msg = format("[Репорт] От %s [%d]: %s", GetPlayerName(playerId), playerId, args);
SendClientMessage(adminId, 0xFFFF00FF, msg);
}
}
[Command("pm", 1)]
public void CmdAnsReport(int playerId, string args) {
REQ_ADMIN(playerId, 1);
int ta 1 скрипт:
#include <crmp_core>
// Создаем класс фракции с использованием ООП из C++
public class Fraction {
private:
int fractionId;
string fractionName;
// Используем динамический вектор из C++ вместо фиксированных массивов Pawn!
std::vector<int> memberList;
std::vector<int> vehicleList;
public:
// Конструктор фракции
Fraction(int id, string name) {
this->fractionId = id;
this->fractionName = name;
}
// Метод добавления служебного авто (например, Lada Priora УГИБДД)
void AddFractionVehicle(int modelId, Vector3 spawnPos, float rotation, int color1, int color2) {
// Создаем машину через стандартный натив CRMP, но сохраняем её ID в вектор C++
int vehId = CreateVehicle(modelId, spawnPos.x, spawnPos.y, spawnPos.z, rotation, color1, color2, -1);
this->vehicleList.push_back(vehId);
// Устанавливаем 3D текст на машину (фишка Pawno: методы прямо у ID машины!)
Attach3DTextLabelToVehicle(Create3DTextLabel("[Служебный транспорт]", 0xFF0000FF, 0.0, 0.0, 2.0), vehId, 0.0, 0.0, 0.0);
}
// Отправка сообщения всей фракции (в Pawn пришлось бы делать цикл по всем игрокам)
void BroadcastMessage(int color, string text) {
for(int playerId : this->memberList) {
if(IsPlayerConnected(playerId)) {
SendClientMessage(playerId, color, text);
}
}
}
}
// Глобальный объект фракции ДПС
global Fraction Police(1, "УГИБДД по Нижегородской области");
public void OnGameModeInit() {
// Красивый спавн машин фракции при запуске сервера CRMP
// Используем структуру Vector3 из C++
Police.AddFractionVehicle(541, Vector3(-2450.0, 1500.0, 20.0), 90.0, 1, 1); // ДПС авто
Police.AddFractionVehicle(541, Vector3(-2455.0, 1500.0, 20.0), 90.0, 1, 1);
printf("Фракция %s успешно загружена!", Police.fractionName);
}
// Удобная обработка команд в стиле C++ атрибутов
[Command("dps_bonus")]
public void OnPlayerCommand(int playerId, string args) {
if(Police.IsPlayerInFraction(playerId)) {
GivePlayerMoney(playerId, 5000); // Выдаем 5000 рублей на сервере Criminal Russia
SendClientMessage(playerId, 0x00FF00FF, "[УГИБДД] Вы получили премию за дежурство!");
}
}
Просите команды, системы выставлю
Последнее редактирование: