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

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,756
1.Автоудар ножа CS:GO
2. При написании в чат команды: "!knb", либо в консоли "sm_knb" (флаг "z") нож будет сам бить по противнику с расстояния 1.5 метра левой кнопкой мыши. Так же при повторном вводе этой команды автоудар отключается.
PHP:
#include <sdktools_engine>
#include <sdktools_trace>

#define KNIFE_DISTANCE	1.5

new bool:AutoHitKnife[MAXPLAYERS + 1];

public OnPluginStart() RegAdminCmd("sm_knb", AutoKnife, ADMFLAG_ROOT, "Переключатель автоудара ножом.");

public Action:AutoKnife(client, args)
{
	if (client) PrintToChat(client, "\x01\04[AutoKnife] \x01Вы \x03в%sключили \x05автоудар ножом\x01.", (AutoHitKnife[client] = !AutoHitKnife[client]) ? "":"ы");
	return Plugin_Handled;
}

public OnClientDisconnect_Post(client) AutoHitKnife[client] = false;

public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
{
	if (AutoHitKnife[client] && IsPlayerAlive(client))
	{
		static String:classname[13];
		GetClientWeapon(client, classname, sizeof(classname));
		if (strcmp(classname[7], "knife") == 0)
		{
			static Float:origin[3], Float:position[3];
			GetClientEyePosition(client, position);
			TR_TraceRayFilter(position, angles, MASK_SHOT, RayType_Infinite, TraceFilter, client);
			if (TR_GetEntityIndex() > 0)
			{
				TR_GetEndPosition(origin);
				if (GetVectorDistance(position, origin) * 0.01905 < KNIFE_DISTANCE)
				{
					buttons |= IN_ATTACK;
					return Plugin_Changed;
				}
			}
		}
	}
	return Plugin_Continue;
}

public bool:TraceFilter(entity, contentsMask, any:data) return entity != data && entity <= MaxClients;
Включаем автоудар командой !knb, берём нож и просто ловим на прицел противников (своих тоже может бить) - мочарит так, что аж анимация ножа не успевает прорисовываться! :biggrin:
 

8Ahnenerbe8

Участник
Сообщения
113
Реакции
30
@R1KO,
попроб
v3 Оффтоп
PHP:
#include <sourcemod>

public OnPluginStart()
{
    HookUserMessage(GetUserMessageId("HintText"), OnHookUserMessage_HintText, true);
}

public Action:OnHookUserMessage_HintText(UserMsg:iMsg_id, Handle:hPb, const iPlayers[], iPlayersNum, bool:bReliable, bool:bInit)
{
    decl String:szBuffer[32];
    PbReadString(hPb, "text", szBuffer, sizeof(szBuffer));

    if (strcmp(szBuffer, "#SFUI_Notice_YouDroppedWeapon", true) == 0)
    {
        return Plugin_Handled;
    }

    return Plugin_Continue;
}
Не было возможности протетестить вовремя,протестил сегодня,не работает почему-то =/
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
@R1KO,

Не было возможности протетестить вовремя,протестил сегодня,не работает почему-то =/
могу накидать пару вариантов еще)) вечером только если, проверил бы сам, да ксго качать нужн
 

Саша Шеин

Кому костылей?
Сообщения
1,699
Реакции
621
PHP:
#include <sdktools_engine>
#include <sdktools_trace>

#define KNIFE_DISTANCE    1.5

new bool:AutoHitKnife[MAXPLAYERS + 1];

public OnPluginStart() RegAdminCmd("sm_knb", AutoKnife, ADMFLAG_ROOT, "Переключатель автоудара ножом.");

public Action:AutoKnife(client, args)
{
    if (client) PrintToChat(client, "\x01\04[AutoKnife] \x01Вы \x03в%sключили \x05автоудар ножом\x01.", (AutoHitKnife[client] = !AutoHitKnife[client]) ? "":"ы");
    return Plugin_Handled;
}

public OnClientDisconnect_Post(client) AutoHitKnife[client] = false;

public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
{
    if (AutoHitKnife[client] && IsPlayerAlive(client))
    {
        static String:classname[13];
        GetClientWeapon(client, classname, sizeof(classname));
        if (strcmp(classname[7], "knife") == 0)
        {
            static Float:origin[3], Float:position[3];
            GetClientEyePosition(client, position);
            TR_TraceRayFilter(position, angles, MASK_SHOT, RayType_Infinite, TraceFilter, client);
            if (TR_GetEntityIndex() > 0)
            {
                TR_GetEndPosition(origin);
                if (GetVectorDistance(position, origin) * 0.01905 < KNIFE_DISTANCE)
                {
                    buttons |= IN_ATTACK;
                    return Plugin_Changed;
                }
            }
        }
    }
    return Plugin_Continue;
}

public bool:TraceFilter(entity, contentsMask, any:data) return entity != data && entity <= MaxClients;
Включаем автоудар командой !knb, берём нож и просто ловим на прицел противников (своих тоже может бить) - мочарит так, что аж анимация ножа не успевает прорисовываться! :biggrin:

Заливай в ресурсы :)
 

RoadSide Romeo

rest in peace...
Сообщения
1,628
Реакции
1,494
Привет модеры.В плагине Level Ranks присутвсвует команда !knife как её срезать и чтоб плагин имел только ранги.Чтобы вообще ножами не пахло и перчатками.
Чувак а версия ядра то какая у тебя? Небось 1.0.4
 

code++

Участник
Сообщения
367
Реакции
129
Народ может кто переделать данный плагин в ядро дабы в будущем прикреплять к нему модули ?Bloodsucker Mode
 

Lookas

Участник
Сообщения
117
Реакции
9
Поможете убрать массив в плагине ? Мне не надо чтобы текст отображался.... Через Квары не получается, решил убрать массив, намудрил там...
 

Вложения

  • quakesoundsv3.sp
    40.4 КБ · Просмотры: 19

skywalker

Участник
Сообщения
1,164
Реакции
265
Парни помощь нужна,есть ли плагин для кс го блокирующий клан-тег? (многие видели наверно вх,аим меняющийся)AdminTag_russian.smx не справляется
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,756

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
Поможете убрать массив в плагине ? Мне не надо чтобы текст отображался.... Через Квары не получается, решил убрать массив, намудрил там...
самым варварским методом можешь сделать сам, закомментируй (//) строки, которые начинаются на Print (замена в нотепаде PrintTo на //PrintTo), убирается весь текст в принципе, другое дело, если хочешь убрать только по центру закомментируй PrintTextCenter аналогичным способом
 

Mikhaylovich

Участник
Сообщения
42
Реакции
1
Народ кто напишет плагин типо damage info только если в определенном диапазоне хп попал пишет текст типо "почти убил" "ничё че вх?"(когда через стенку убил) "читер полюбому" когда убил в голову с носкопа , для авп , ну и когда с ножа зарезал "парэжу" желательно что бы фразы чередовались
 

Drumanid

Нестандартное звание
Сообщения
1,863
Реакции
1,749
Может кто возьмется... ))

Сделать постоянный HUD (PrintHintText) после смерти (IsPlayerAlive), чтобы отображало:

Есть ли у игрока VAC бан

и

Сколько часов отыграл игрок на сервере.

Считывание базы можно брать с этого плагина:

PHP:
Handle adt_trie;

public void OnPluginStart()
{
    char error[512];
    Database db = SQL_Connect("storage-local", true, error, sizeof(error));

    if(db == INVALID_HANDLE) SetFailState(error);

    char ident[10];
    SQL_ReadDriver(db, ident, sizeof(ident));

    if(!StrEqual(ident, "sqlite")) SetFailState("Support only SQLite");

    char query[512];
    Format(query, sizeof(query), "CREATE TABLE IF NOT EXISTS store_players_time ( steamid VARCHAR(20) NOT NULL , time FLOAT NOT NULL , PRIMARY KEY (steamid), UNIQUE (steamid) ON CONFLICT IGNORE);");

    if(!SQL_FastQuery(db, query))
    {
        SQL_GetError(db, error, sizeof(error));
        CloseHandle(db);

        SetFailState(error);
    }

    CloseHandle(db);

    adt_trie = CreateTrie();

    HookEventEx("player_disconnect", player_disconnect);
    RegConsoleCmd("sm_playtime", sm_playtime, "Display the time played in the server.");
    RegServerCmd("sm_playtime_empty_table", sm_playtime_empty_table, "Clear players times from database");
}

public Action sm_playtime_empty_table(int args)
{
    char error[512];
    Database db = SQL_Connect("storage-local", false, error, sizeof(error));

    if(db == INVALID_HANDLE)
    {
        return;
    }

    SQL_FastQuery(db, "DELETE FROM store_players_time");
    SQL_FastQuery(db, "VACUUM");
    CloseHandle(db);
    ClearTrie(adt_trie);
}

Transaction txn;
bool IsConnecting;

public Action sm_playtime(client, args)
{
    if(client == 0 || !IsClientInGame(client)) return Plugin_Handled;

    char auth[20];

    if(!GetClientAuthId(client, AuthId_Engine, auth, sizeof(auth))) return Plugin_Handled;

    float time;

    if(!GetTrieValue(adt_trie, auth, time))
    {
        char error[512];
        Database db = SQL_Connect("storage-local", false, error, sizeof(error));

        if(db == INVALID_HANDLE)
        {
            ReplyToCommand(client, "Couldn't connect database");
            return Plugin_Handled;
        }

        char query[512];
        Format(query, sizeof(query), "SELECT time FROM store_players_time WHERE steamid = '%s'", auth);

        DBResultSet results = SQL_Query(db, query);

        if(results != INVALID_HANDLE)
        {
            if(SQL_HasResultSet(results) && SQL_FetchRow(results))
            {
                time = SQL_FetchFloat(results, 0);
            }
            CloseHandle(results);
        }
        CloseHandle(db);

        SetTrieValue(adt_trie, auth, time);
    }


    time += GetClientTime(client);

    char buffer[50];
    int itime = RoundToFloor(time);

    Format(buffer, sizeof(buffer), "\x04%i\x01 часа(ов), \x04%i \x01минут(ы)", itime/3600, (itime/60)%60);

    PrintToChatAll("\x01\x07%N\x01 отыграл на сервере - %s", client, buffer);
    return Plugin_Handled;
}

public void player_disconnect(Handle event, const char[] name, bool dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if(IsFakeClient(client)) return;

    char auth[20];
    float time;

    if(!GetClientAuthId(client, AuthId_Engine, auth, sizeof(auth))) return;

    time = GetClientTime(client);

    if(!IsConnecting)
    {
        //PrintToServer("connect");
        IsConnecting = true;
        SQL_TConnect(tconnect, "storage-local");
    }


    if(txn == INVALID_HANDLE) txn = SQL_CreateTransaction();

    char query[512];
    Format(query, sizeof(query), "UPDATE store_players_time SET time=time+%0.2f WHERE steamid = '%s';", time, auth);
    SQL_AddQuery(txn, query);
    //PrintToServer(query);
    Format(query, sizeof(query), "INSERT INTO store_players_time (steamid, time) VALUES ('%s', '%0.2f');", auth, time);
    SQL_AddQuery(txn, query);
    //PrintToServer(query);
    RemoveFromTrie(adt_trie, auth);
   
}

public void tconnect(Handle owner, Handle hndl, const char[] error, any data)
{
    if(hndl == INVALID_HANDLE) SetFailState(error);

    SQL_ExecuteTransaction(hndl, txn, OnSuccess, OnError, _, DBPrio_Low);
    txn = INVALID_HANDLE;
    CloseHandle(hndl);
    IsConnecting = false;
}

public void OnSuccess(Database db, any data, int numQueries, Handle[] results, any[] queryData)
{
    //PrintToServer("success");
}


public void OnError(Database db, any data, int numQueries, const char[] error, int failIndex, any[] queryData)
{
    //PrintToServer(error);
}
 
Сверху Снизу