The Night Fury

Участник
Сообщения
1,300
Реакции
1,395
Я прекрасно понимаю, что часто названия плагинов можно очень просто забыть. Однако это становится причиной постоянного создания тем рода "помогите найти плагин X".

Так вот, чтобы содержать форум в порядке и чистоте, поступим следующим образом:
  1. В дальнейшем создаваемые темы с "помогите найти плагин" будут удаляться, а авторам — выдаваться предупреждения
  2. Если Вы захотите найти плагин, то сначала воспользуйтесь поиском

Если всё же не удалось найти плагин, заполните следующую форму и ответьте в этой теме:

  • Функции плагина
  • Мод/Игра, которая использует этот плагин

Прежде чем отвечать в теме, воспользуйтесь поиском гугла, который почти всегда находит нужное.

Старые темы будут перемещены в корзину.
 
Последнее редактирование модератором:

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Не нашел ничего особо. Но стало тоже интересно. Такое написал, не проверял. Пробовал без бд, но чет не могу додуматься как отсортировать нормально и листами пробовал, и картами, и обычными разномерными массивами

x:
#include <sourcemod>
int TotalDamage[MAXPLAYERS+1];
Database db;
public void OnPluginStart()
{
    Database.Connect(SQLCB, "topdmground");
    HookEvent("player_hurt", eventHurt);
    HookEvent("round_start", eventStart);
    HookEvent("client_disconnect", eventUpdate);
    HookEvent("player_death", eventUpdate);
    HookEvent("player_spawn", eventSpawn);
}
public void SQLCB(Database dbs, const char[] error, any data)
{
    if(error[0] || dbs == INVALID_HANDLE)
    {
        SetFailState("Fail: %s", error)
        return;
    }
    db = dbs;
    char sQuery[256];
    Format(sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS `topdmground` (\
                                    `index` INTEGER(10) NOT NULL PRIMARY KEY, \
                                    `damage` INTEGER(12) NOT NULL");
    SQL_Query(db, sQuery);
}
public void OnMapStart()
{
    CreateTimer(1.0, TimerRepeat, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}
public void eventStart(Event hEvent, const char[] sEvent, bool bdb)
{
    char sQuery[32];
    Format(sQuery, sizeof(sQuery), "TRUNCATE TABLE `topdmground`");
    SQL_Query(db, sQuery);
}
public void eventHurt(Event hEvent, const char[] sEvent, bool bdb)
{
    int iClient = GetClientOfUserId(hEvent.GetInt("attacker"));
    if(iClient != 0) TotalDamage[iClient] += hEvent.GetInt("dmg_health") + hEvent.GetInt("dmg_armor");
}
public void eventSpawn(Event hEvent, const char[] sEvent, bool bdb)
{
    char sQuery[256];
    int i = GetClientOfUserId(hEvent.GetInt("userid"));
    if(i != 0)
    {
        if(IsClientInGame(i) && !IsFakeClient(i) && IsPlayerAlive(i))
        {
            Format(sQuery, sizeof(sQuery), "INSERT INTO `topdmground` (`index`, `damage`) VALUES ('%i', '%i')", i, TotalDamage[i]);
            SQL_Query(db, sQuery);
        }
    }
}
public void eventUpdate(Event hEvent, const char[] sEvent, bool bdb)
{
    char sQuery[256];
    int i = GetClientOfUserId(hEvent.GetInt("userid"));
    if(i != 0)
    {
        if(IsClientInGame(i) && !IsFakeClient(i) && IsPlayerAlive(i))
        {
            Format(sQuery, sizeof(sQuery), "UPDATE `topdmground` SET `damage`='%i' WHERE `index`='%i'", TotalDamage[i], i);
            SQL_Query(db, sQuery);
        }       
    }
}
public Action TimerRepeat(Handle hTimer)
{
    char sQuery[256], cat[2][16];
    int totalDMG, index, place, dmg, needdmg;
    SetHudTextParams(0.2, 0.80, 1.0, 0, 255, 0, 255, 2, 0.0 , 0.0, 0.0);
    for(int i = 1; i <= MaxClients; i++)
    {
        if(IsClientInGame(i))
        {
            totalDMG += TotalDamage[i];
            Format(sQuery, sizeof(sQuery), "SELECT * FROM `topdmground` ORDER BY `damage` DESC LIMIT %i", i);
            DBResultSet result = SQL_Query(db, sQuery);
            if(result.HasResults && result != INVALID_HANDLE)
            {
                for(int j = 1; j <= i; j++)
                {
                    result.FetchRow()
                }
             
                index = result.FetchInt(0);
                place = i;
                dmg = result.FetchInt(1);
                totalDMG -= dmg;
             
                if(i == 1) needdmg = 0;
                if(i > 1)
                {
                    result.Rewind();
                    for(int j = 1; j < i; j++)
                    {
                        result.FetchRow();
                    }
                    needdmg = result.FetchInt(1) - dmg;
                }
                else return Plugin_Stop;
            }
            delete result;
           
            if(needdmg > 0)
            {
                IntToString(needdmg, cat[0], sizeof(cat));
                StrCat("+", 16, cat[0]);
            }
            if(totalDMG > 0)
            {
                IntToString(totalDMG, cat[1], sizeof(cat));
                StrCat("+", 16, cat[1]);
            }
           
            ShowHudText(index, -1, "#%i (D: %i | N: %s | F: %s)", place, dmg, cat[0], cat[1]);
        }
    } 
 
    return Plugin_Continue;
}
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Palonez, твой код даже не скомпилируется.
Это даже не учитывая те 2 ошибки (в запросе к БД и в цикле по игрокам), что я заметил пролистывая код.
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
@Palonez, твой код даже не скомпилируется.
Это даже не учитывая те 2 ошибки (в запросе к БД и в цикле по игрокам), что я заметил пролистывая код.
Компилируется) Я чет не нахожу ничего такого, мб уже исправил.

UPD: Поделитесь очками,
1658897144229.png
, я не вижу все равно ничего, сплю уже
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
Компилируется) Я чет не нахожу ничего такого, мб уже исправил.

UPD: Поделитесь очками, Посмотреть вложение 100380, я не вижу все равно ничего, сплю уже
Да, ты ту ошибку исправил, из-за которой не скомпилировалось бы.

На 41-й и 46-й строках сначала индекс с нулём сравни.
На 57-й строке 0 на 1 замени.
На 62-й строке sql-запрос я бы составил иначе (тот, что есть разве что для нового игрока бы подошёл).
SetHudTextParams() лучше перед циклом по игрокам сделай, а не внутри него, если для всех игроков одинаковые параметры применяются.
Строковую переменную на сотой строке либо вынеси наружу цикла, либо сделай её static.

И вообще каждую секунду делать цикл по всем игрокам и апдейтить их данные в БД - это мощно. =)

Как домой приду м/б ещё с ПК код гляну.
 

Grey83

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

Только я не понял вообще смысл сохранять урон для ClientID игрока (для SteamID я бы ещё понял).
Если дамаг нужно считать (и хранить) только для одного раунда, то использовать БД и вовсе нет никакого смысла.

Кроме того я смотрю ты нигде не обнуляешь для игрока значение хранимое в переменной TotalDamage[], а только плюсуешь.
Я понимаю, что 2 147 483 647 (емнип, это максимальное положительное значение для 32-битного числа со знаком) дамага набивать долго, но это сделать реально (особенно если только плюсовать дамаг изо дня в день).

В общем я так и не понял что за плагин ты хотел написать.
 

Вложения

  • 1.sp
    3.1 КБ · Просмотры: 10

Ganter1234

Участник
Сообщения
1,149
Реакции
667
Забыл название этого плагина, так что надеюсь подскажите.
Нужно найти плагин, суть его такова что в top message, написана статистика, это топ по урону (за раунд), который показывает мою позицию в топе, мой урон, необходимый урон для следующего места, и необходимый урон до первого места.

Посмотреть вложение 100373
В общем нашел этот плагин, кому надо держите линк: Files · master · CSS / sm-plugins / TopDefenders · GitLab
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Да, ты ту ошибку исправил, из-за которой не скомпилировалось бы.

На 41-й и 46-й строках сначала индекс с нулём сравни.
На 57-й строке 0 на 1 замени.
На 62-й строке sql-запрос я бы составил иначе (тот, что есть разве что для нового игрока бы подошёл).
SetHudTextParams() лучше перед циклом по игрокам сделай, а не внутри него, если для всех игроков одинаковые параметры применяются.
Строковую переменную на сотой строке либо вынеси наружу цикла, либо сделай её static.

И вообще каждую секунду делать цикл по всем игрокам и апдейтить их данные в БД - это мощно. =)

Как домой приду м/б ещё с ПК код гляну.

В общем нашел этот плагин, кому надо держите линк: Files · master · CSS / sm-plugins / TopDefenders · GitLab
А ну так, его то я тоже находил. Думал это не он. Но ведь он работает с боссами или нет?
 

Ganter1234

Участник
Сообщения
1,149
Реакции
667
А ну так, его то я тоже находил. Думал это не он. Но ведь он работает с боссами или нет?
Точно незнаю, он мне для zm нужен, а не ze, а так я понял что это он по тому диалоговому окну, который должен создавать этот плагин
 

DefunCadas

Участник
Сообщения
26
Реакции
4
Вообщем, суть плагина - торговая площадка на паблике, зарабатываешь коины и за них покупаешь скины, ножи, перчатки, агенты и ТД, помогите пожалуйста, названия не знаю а очень нужно
 

Ice_Sochi

Участник
Сообщения
709
Реакции
413
Это один из модулей к WSGK (не бесплатно)
 

DefunCadas

Участник
Сообщения
26
Реакции
4
Это один из модулей к WSGK (не бесплатно)
Как пообщаемся с человеком котор
Это один из модулей к WSGK (не бесплатно)
Есть подобные плагины? Я посмотрел, это не они
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
Привет всем!
Если такой плагин,чтоб поставить ограничение на закупку,?то-есть чтоб раз игрок мог закупится и все.
Или как-то можно сделать,чтоб игрок не мог при респавне,много раз закупать дым?
А то постоянно закидывают все дымом,особенно это за кт команду.
Заранее благодарю!
Версия игры 34
 

KiKiEEKi

🏆 🥇
Сообщения
653
Реакции
513
Привет всем!
Если такой плагин,чтоб поставить ограничение на закупку,?то-есть чтоб раз игрок мог закупится и все.
Или как-то можно сделать,чтоб игрок не мог при респавне,много раз закупать дым?
А то постоянно закидывают все дымом,особенно это за кт команду.
Заранее благодарю!
Версия игры 34
Такой подойдет?
C-подобный:
#pragma semicolon 1
#pragma newdecls required

int iLimitSmoke[MAXPLAYERS+1];
int iCountSmoke = 1; //Кол-во покупаемых смок

public void OnPluginStart()
{
    HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
}

public void Event_RoundStart(Event hEvent, const char[] sEvName, bool bDontBroadcast)
{
    for(int i = 1; i <= MaxClients; ++i)
    {
        iLimitSmoke[i] = iCountSmoke;
    }   
}

public Action CS_OnBuyCommand(int client, const char[] weapon)
{
    if(strcmp(weapon, "smokegrenade") == 0)
    {
        if(iLimitSmoke[client] > 0)
        {
            --iLimitSmoke[client];
            return Plugin_Continue;
        }
        else return Plugin_Handled;
    }
    return Plugin_Continue;
}
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
Такой подойдет?
C-подобный:
#pragma semicolon 1
#pragma newdecls required

int iLimitSmoke[MAXPLAYERS+1];
int iCountSmoke = 1; //Кол-во покупаемых смок

public void OnPluginStart()
{
    HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
}

public void Event_RoundStart(Event hEvent, const char[] sEvName, bool bDontBroadcast)
{
    for(int i = 1; i <= MaxClients; ++i)
    {
        iLimitSmoke[i] = iCountSmoke;
    }  
}

public Action CS_OnBuyCommand(int client, const char[] weapon)
{
    if(strcmp(weapon, "smokegrenade") == 0)
    {
        if(iLimitSmoke[client] > 0)
        {
            --iLimitSmoke[client];
            return Plugin_Continue;
        }
        else return Plugin_Handled;
    }
    return Plugin_Continue;
}
Благодарю!
Протестю
 

zloykif

Участник
Сообщения
156
Реакции
21
Ищу плагин:
Задача следующая, есть сервер csgo+wcs, хочется использовать много скинов, но что-бы при этом первый заход на сервер не был адом.
Существует ли плагин для загрузки, позволяющий разбить на части всё что нужно загрузить? Либо включающий в загрузку только те скины которые в данный момент используются игроками (в случае вкс, можно на спавн расы прописать команду по добавлению её скинов в загрузку)
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Ищу плагин:
Задача следующая, есть сервер csgo+wcs, хочется использовать много скинов, но что-бы при этом первый заход на сервер не был адом.
Существует ли плагин для загрузки, позволяющий разбить на части всё что нужно загрузить? Либо включающий в загрузку только те скины которые в данный момент используются игроками (в случае вкс, можно на спавн расы прописать команду по добавлению её скинов в загрузку)
Ну зайдет он, у него скачаются скины, которые юзаются другими людьми. И какой-нибудь игрок возьмет купит скин какой-нибудь новый, а у этого чела будет еррор
Сообщения автоматически склеены:

Ну зайдет он, у него скачаются скины, которые юзаются другими людьми. И какой-нибудь игрок возьмет купит скин какой-нибудь новый, а у этого чела будет еррор
единственный более менее вариант - выгружать плагины взаимодействующие с файлами и скачивающими их, если плагин особо не нужен на определенной карте/режиме

И что значит CS:GO + WCS

То есть если сервер будет WCS то меня перекинет в варкрафт?

Ну и в конце концов, если хочется чего-то стоящего - придется жертвовать чем-то стоящим.
 
Последнее редактирование:

zloykif

Участник
Сообщения
156
Реакции
21
какой-нибудь игрок возьмет купит скин какой-нибудь новый, а у этого чела будет еррор
Если это не будет ложить сервер, то меня устраивает, для старых игроков это не будет проблемой, а у новых игроков будет возможность зайти на сервер без проблем, и при первом заходе у них не будет никаких ерроров, а если уж заинтересуются и останутся играть то с еррорами разберутся уж)
И что значит CS:GO + WCS
Игра cs:go, мод вкс
Сообщения автоматически склеены:

Ну и в конце концов, если хочется чего-то стоящего - придется жертвовать чем-то стоящим.
Если ты про покупку, то на данный момент не рассматриваю, потому что сервер находится в стадии разработки, и не известно дойдет ли до релиза, решил тряхнуть стариной просто)
 
Последнее редактирование:
Сверху Снизу