Написание плагинов

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
KosmoStyLe, а что там писать-то?
C-подобный:
public void OnPluginStart()
{
    HookEvent("round_freeze_end", Event_Start, EventHookMode_PostNoCopy);
}

public void Event_Start(Event event, const char[] name, bool dontBroadcast)
{
    for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i))
        SetEntityHealth(i, 10000);
}
Сообщения автоматически склеены:

DENFER, а ничего, что у GetClientTeam()
C-подобный:
Errors
Invalid client index, client not in game, or no mod support.
?
 

DENFER

Пишу плагины за два биг тести и картошку фри..
Сообщения
260
Реакции
289
KosmoStyLe, а что там писать-то?
C-подобный:
public void OnPluginStart()
{
    HookEvent("round_freeze_end", Event_Start, EventHookMode_PostNoCopy);
}

public void Event_Start(Event event, const char[] name, bool dontBroadcast)
{
    for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i))
        SetEntityHealth(i, 10000);
}
Сообщения автоматически склеены:

DENFER, а ничего, что у GetClientTeam()
C-подобный:
Errors
Invalid client index, client not in game, or no mod support.
?
мб там было до < MaxClients, я фиксанул вроде как и да согласен, в игре проверку нужно было сделать.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
я фиксанул вроде как
То, на что я намекал ты так и не исправил: client not in game
Сообщения автоматически склеены:

И да, если используется событие спавна игрока, то код должен выглядеть иначе:
C-подобный:
public void OnPluginStart()
{
    HookEvent("player_spawn", Event_Spawn);
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    if(client && GetClientTeam(client) == 2 && IsPlayerAlive(client))
        SetEntityHealth(client, 10000);
}
Хотя, кмк, проверка индекса и жив ли игрок необязательна.
А вот добавить таймер может быть понадобится (чтобы другие плагины и карта не поменяли количество ХП после этого плагина).
 

KosmoStyLe

Участник
Сообщения
21
Реакции
1
Там если что не так, пиши в лс))000)
KosmoStyLe, а что там писать-то?
C-подобный:
public void OnPluginStart()
{
    HookEvent("round_freeze_end", Event_Start, EventHookMode_PostNoCopy);
}

public void Event_Start(Event event, const char[] name, bool dontBroadcast)
{
    for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i))
        SetEntityHealth(i, 10000);
}
Сообщения автоматически склеены:

DENFER, а ничего, что у GetClientTeam()
C-подобный:
Errors
Invalid client index, client not in game, or no mod support.
?

Спасибо вам огромное. Все работает ♥. Век помнить буду =D.
 

Ammy

Участник
Сообщения
81
Реакции
16
Можно ли подредактировать плагин "[shop] games" так чтобы играя в покер у игроков сначала забирались кредиты после начиналась игра и победителю выдавался выигрыш, а если игроки не собирали комбинацию то им по итогу возвращались их кредиты.
CS:GO
 

Вложения

  • games.zip
    29.7 КБ · Просмотры: 4

🟡differend🟢

Что хочу - то и делаю
Сообщения
975
Реакции
661
Привет! есть стандартный плагин с номинацией карт, мне нужно его переделать, чтобы когда игрок пишет nominate, ему сначала выскакивало меню, где было бы несколько групп :
1. Маленькие карты
2. Стандартные
3. Новые
(как пример)
И в каждую категорию можно было бы указать определенную карту через конфиг.
 

Вложения

  • nominations.sp
    11.6 КБ · Просмотры: 4

Truyn

King of clowns
Сообщения
1,591
Реакции
749
Вопрос теоретического плана можно ли взаимодействовать как то кодов на радар.
К примеру не вшивая в карту радар как то их подменять или всучивать туда свою пикчу
 

KosmoStyLe

Участник
Сообщения
21
Реакции
1
Привет! есть стандартный плагин с номинацией карт, мне нужно его переделать, чтобы когда игрок пишет nominate, ему сначала выскакивало меню, где было бы несколько групп :
1. Маленькие карты
2. Стандартные
3. Новые
(как пример)
И в каждую категорию можно было бы указать определенную карту через конфиг.
Привет, попробуй этот плагин https://hlmod.ru/resources/ultimate-mapchooser.992/
Он вроде идентичен твоему описанию.
У меня на сервере он стоит. Только он сначала выводит группы: Bhop,Deathrun,Mg. А после уже сами кары, выбранной группы.
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
@Truyn, нет, нельзя. Всё определяется на клиенте
Сообщения автоматически склеены:

@Ammy, Оффтоп
 

Мотыга

сила в силе духа ☠️☠️☠️
Сообщения
84
Реакции
49
Errors:
smac_cvars.smx (SMAC: ConVar Checker): Could not find required plugin "basecomm"
Could not establish connection to Steam servers.



Может кто подправить под MA
 

Вложения

  • smac_cvars.sp
    19.9 КБ · Просмотры: 1

babka68

Участник
Сообщения
2,124
Реакции
956
Всем привет,кто может написать плагин подобие этого Не поддерживается - [VIP] Multi Jump
Для меня важен из этого плагина только один пункт,то увеличение высоты прыжка,буду очень благодарен,если кто то напишет
 

s777

Участник
Сообщения
449
Реакции
74
Привет. Нужно написать плагин, который при окончании игры (когда выводится таблица результатов и меняется карта) писал нужное мне сообщение в чат
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
так при отображении таблицы она перекрывает часть чата и не весь текст сообщений видно
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Привет. Нужно написать плагин, который при окончании игры (когда выводится таблица результатов и меняется карта) писал нужное мне сообщение в чат
C-подобный:
public void OnPluginStart()
{
    HookEvent("cs_win_panel_match", Event_CsWinPanelMatch, EventHookMode_Post);
}

public void Event_CsWinPanelMatch(Event event, char[] name, bool dontBroadcast)
{
    PrintToChatAll("Ваш текст");
}
Сообщения автоматически склеены:

@Grey83, чат нормально видно в конце карты, если разрешение не 4:3, а более прямоугольное
 
  • Мне нравится
Реакции: s777

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
iLoco, ты хотел сказать "широкоформатный экран"?
 

teafest

Участник
Сообщения
202
Реакции
34
Добрый день.
Помогите пожалуйста изменить данный плагин. Необходимо, что бы нельзя было приседать только Террористам.
 

xstage

🏹
Сообщения
726
Реакции
754
Добрый день.
Помогите пожалуйста изменить данный плагин. Необходимо, что бы нельзя было приседать только Террористам.
C-подобный:
#include <sourcemod>
#pragma semicolon 1


public Plugin:myinfo =
{
   name = "Nocrouch",
   author = "theY4Kman & McFlurry & Impact123",
   description = "Blocks player crouching",
   version = "1.0",
   url = "http://forums.alliedmods.net/showthread.php?t=173315"
}


public OnPluginStart()
{
}


public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon) {
   if(GetClientTeam(client) == 2)
   {
       buttons &= ~IN_DUCK;
       return Plugin_Changed;
   }     
   return Plugin_Continue;   
}
 

Troyanskaya

Участник
Сообщения
442
Реакции
30
Хочу исправить.доработать плагин.
Игрок зашел если рейты совпадают то ничего не показывает cl_cmdrate\ rate\cl_updaterate\cl_interp.
Если у игрока рейты отличаются,то в начале раунда окошко появляется что нужно исправить.(только в начале раунда)

Добавить проверку рейтов для админа.пишешь в консоль sm_rates и в консоле показывает список игроков их рейты.если можно в список добавить choke loss
Тикет #2507
#include <sdktools>
#include <cstrike>

int punish = 2; //наказание. 1 = не пускать в игру, держать в наблюдателях. 2 = шлепать кажды раунд.

bool bBlock[MAXPLAYERS + 1] = {false, ...}
Handle hQueryCvarsTimer;
int iCmdRate[MAXPLAYERS + 1], iUpdateRate[MAXPLAYERS + 1], iRate[MAXPLAYERS + 1], iCount[MAXPLAYERS + 1];
float fInterp[MAXPLAYERS + 1];

public Plugin myinfo = {
name = "Client Rates Manager",
author = "null",
description = "Rates checker",
}

public void OnPluginStart() {
AddCommandListener(Block, "");
HookEvent("round_start", RoundStart);
}

public void round_start() {
hQueryCvarsTimer = CreateTimer(20.0, OnQueryTimer, _, TIMER_REPEAT);
PrecacheSound("player/damage3.wav", true);
}

public void OnMapEnd() {
delete hQueryCvarsTimer;
}

public Action OnQueryTimer(Handle timer) {
for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && !IsFakeClient(i)) {
QueryCvars(i);
}
}

public void OnClientPutInServer(int client) {
iCount[client] = 0;
QueryCvars(client);
}

public void RoundStart(Event event, const char[] name, bool dontBroadcast) {
if(punish == 2) {
CreateTimer(0.5, DoSlap, _, TIMER_FLAG_NO_MAPCHANGE);
}
}

public Action DoSlap(Handle timer) {
for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && IsPlayerAlive(i) && !IsFakeClient(i) && bBlock) {
Slap(i);
NotifyAdmin(i);
}
}

public Action Block(int client, const char[] command, int argc) {
if(punish == 1 && client > 0 && bBlock[client]) {
return Plugin_Handled;
}
return Plugin_Continue;
}

public void CvarResults(QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvar, const char[] cvarvalue, any value) {
if(result == ConVarQuery_Okay) {
if(cvar[3] == 'c') {
iCmdRate[client] = StringToInt(cvarvalue);
if(StringToInt(cvarvalue) != 66) {
iCount[client]++;
}
}
}
}

public void CvarResults2(QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvar, const char[] cvarvalue, any value) {
if(result == ConVarQuery_Okay) {
if(cvar[3] == 'u') {
iUpdateRate[client] = StringToInt(cvarvalue);
if(StringToInt(cvarvalue) != 66) {
iCount[client]++;
}
}
}
}

public void CvarResults3(QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvar, const char[] cvarvalue, any value) {
if(result == ConVarQuery_Okay) {
if(cvar[3] == 'i') {
fInterp[client] = StringToFloat(cvarvalue);
if(StringToFloat(cvarvalue) < 0.015 || StringToFloat(cvarvalue) > 0.031) {
iCount[client]++;
}
}
}
}


public void CvarResults4(QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvar, const char[] cvarvalue, any value) {
if(result == ConVarQuery_Okay) {
if(cvar[0] == 'r') {
iRate[client] = StringToInt(cvarvalue);
if(StringToInt(cvarvalue) < 30000 || StringToInt(cvarvalue) > 35000) {
iCount[client]++;
}
}
}
if(iCount[client] > 0) BlockClient(client);
else UnBlockClient(client);

iCount[client] = 0;
}

public void RatesPanel(int client) {
Panel panel = new Panel(GetMenuStyleHandle(MenuStyle_Radio));
char cBuffer[64];
panel.DrawItem("Пoжaлyйста cдeлайте cлeдyющие:", ITEMDRAW_RAWLINE);
panel.DrawItem("1.Включите консоль (Настройки > Клавиатура > Дополнительно)", ITEMDRAW_RAWLINE);
panel.DrawItem("2.Перейти в НАБЛЮДЕНИЕ, открыть консоль (нажмите ~ или Ё)", ITEMDRAW_RAWLINE);
panel.DrawItem("3.Напишите туда следующие значение:", ITEMDRAW_RAWLINE);
panel.DrawItem("", ITEMDRAW_SPACER);
if(iCmdRate[client] != 66) {
Format(cBuffer, sizeof(cBuffer), "cl_cmdrate 66", iCmdRate[client]);
panel.DrawItem(cBuffer, ITEMDRAW_RAWLINE);
}
if(iUpdateRate[client] != 66) {
Format(cBuffer, sizeof(cBuffer), "cl_updaterate 66", iUpdateRate[client]);
panel.DrawItem(cBuffer, ITEMDRAW_RAWLINE);
}
if(fInterp[client] < 0.015 || fInterp[client] > 0.031) {
Format(cBuffer, sizeof(cBuffer), "cl_interp 0.015", fInterp[client]);
panel.DrawItem(cBuffer, ITEMDRAW_RAWLINE);
}
if(iRate[client] < 30000 || iRate[client] > 35000) {
Format(cBuffer, sizeof(cBuffer), "rate 30000", iRate[client]);
panel.DrawItem(cBuffer, ITEMDRAW_RAWLINE);
}

panel.DrawItem("", ITEMDRAW_SPACER);
if(punish == 1) {
panel.DrawItem("Поменяйте рейты на эти значении чтобы играть!", ITEMDRAW_RAWLINE);
}
if(punish == 2) {
panel.DrawItem("Пропишите в консоль пожалуйста для комфортной игры.", ITEMDRAW_RAWLINE);
}

panel.SetKeys(1023);
panel.Send(client, MenuHandler_Panel, 10);
delete panel;
}

int MenuHandler_Panel(Menu menu, MenuAction action, int param1, int param2) {
if(action == MenuAction_Select || action == MenuAction_Cancel) {
if(bBlock[param1]) {
return;
}
else delete menu;
}
}

void QueryCvars(int client) {
QueryClientConVar(client, "cl_cmdrate", CvarResults);
QueryClientConVar(client, "cl_updaterate", CvarResults2);
QueryClientConVar(client, "cl_interp", CvarResults3);
QueryClientConVar(client, "rate", CvarResults4);
}

void BlockClient(int client) {
RatesPanel(client);
bBlock[client] = true;
}

void UnBlockClient(int client) {
bBlock[client] = false;
}

void Slap(int client) {
EmitSoundToClient(client, "player/damage3.wav");
}

void NotifyAdmin(int client) {
for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && GetAdminFlag(GetUserAdmin(i), Admin_Ban)) {
PrintToChat(i, "Игрок %N был шлепнут за неправильные рейты", client);
}
}
 
Сверху Снизу