Мошенник Написание и Редактирование плагина (Бесплатно)

Статус
В этой теме нельзя размещать новые ответы.

AlexPa1

Участник
Сообщения
289
Реакции
53
Здравствуйте, мне нужно портфолио так что сделаю ваш заказ бесплатно!

Игры:
CSSv34, CSS, CSGO, TF2

Напишу лёгкий плагин для сервера
+Редактирую и изменю имеющий плагин
-За большие плагины не возьмусь


P.s После оказание помощи желательно оставить отзыв.
 

September

Чиню сервера подорожником
Команда форума
Сообщения
4,379
Реакции
1,966
Буду первым.

Респавн вновь зашедших игроков на сервер.
Но без абуза перезаходом на сервер

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

Игра ксго
 

Marcus26

Участник
Сообщения
119
Реакции
25
Bround - Можно добавить сюда раунды на Ak-47, Ssg08, Usp-s и подобные
 

Helk

Вечно молодой
Сообщения
431
Реакции
205
Менял карту и добавлял на нее такие вот ворота через которые нельзя пройти, возможно ли такое вот поле силовое поставить в плагин блок пост ? и когда игроков было бы 5 на 5 то эти ворота бы пропускали игроков, но не пропадали. И трудно ли это реализовать?
 

Вложения

Paranoiiik

хачю клиентмод
Сообщения
1,201
Реакции
722
Показ ассистов на основе этого примера.
CS:S v34
SM 1.9
Оффтоп
 

StormX

Участник
Сообщения
582
Реакции
133
Простой плагин для DM

Описание: террористы теряют бомбу на базе кт и не могу до нее добраться.
Выводится автоматическое голосование "Вернуть бомбу террористам" "Да или Нет".

SM 1.9
CSS V34
 

Mr_panica

Участник
Сообщения
656
Реакции
267
@AlexPa1, работаешь с тф значит?
Прям вот разбираешься в ней? Если да, то могу сотрудничать с тобой (брать заказы), мало сейчас тех, кто с тф работает.
 

AlexPa1

Участник
Сообщения
289
Реакции
53
Простой плагин для DM

Описание: террористы теряют бомбу на базе кт и не могу до нее добраться.
Выводится автоматическое голосование "Вернуть бомбу террористам" "Да или Нет".

SM 1.9
CSS V34
Pawn:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools_functions>

public void OnPluginStart()
{
    HookEvent("bomb_dropped", Event_OnBombDropped, EventHookMode_Post);
}
public Action Event_OnBombDropped(Handle event, const char[] name, bool dontBroadcast)
{
    DoVoteMenu(name);
    return Plugin_Handled;
}

public Handle_VoteMenu(Handle:menu, MenuAction:action, param1, param2)
{
    if (action == MenuAction_End)
    {
        // Вызывается после VoteEnd
        CloseHandle(menu);
    }

    else if (action == MenuAction_VoteEnd)
    {
        // 0=да, 1=нет
        if (param1 == 0)
        {
            new String:GiveC4[64];
            GetMenuItem(menu, param1, GiveC4, sizeof(GiveC4));
        }
    }
}
 
DoVoteMenu(const String:GiveC4[])
{
    if (IsVoteInProgress())
    {
        return;
    }

    new Handle:menu = CreateMenu(Handle_VoteMenu);
    SetMenuTitle(menu, "Отдать бомбу Т?", GiveC4);
    AddMenuItem(menu, GiveC4, "Да");
    AddMenuItem(menu, "no", "Нет");
    SetMenuExitButton(menu, false);
    VoteMenuToAll(menu, 20);
}

public GiveC4(Handle:event, const String:name[], bool:silent)
{
    new random_client = GiveC42();
    if (random_client > 0)
    {
        // случайный игрок выбран, что-то делаем
        new client = GetClientOfUserId(GetEventInt(event, "userid"));
        if (GetClientTeam(client) == 2)
        GivePlayerItem(client, "weapon_c4");
    }
}

GiveC42()
{
    new indexes[MaxClients+1], players = 0;
    for (new i = 1; i <= MaxClients; i++)
    {
        if (IsClientInGame(i)) indexes[players++] = i;
    }
    if (players > 0) return indexes[GetRandomInt(0, players-1)];
    return 0;
}
Сообщения автоматически склеены:

Менял карту и добавлял на нее такие вот ворота через которые нельзя пройти, возможно ли такое вот поле силовое поставить в плагин блок пост ? и когда игроков было бы 5 на 5 то эти ворота бы пропускали игроков, но не пропадали. И трудно ли это реализовать?
Можно сделать так, ставить ворота на карту и ставить в это же место невидимый блок и убирать его при достижении 10 игроков.
Можно ещё редактировать карту, так же поставить ворота и невидимый блок и открывать проход при достижении 10 игроков
 
Последнее редактирование:

Саша Шеин

Кому костылей?
Сообщения
1,653
Реакции
505
C++:
GiveC42()
{
    new indexes[MaxClients+1], players = 0;
    for (new i = 1; i <= MaxClients; i++)
    {
        if (IsClientInGame(i)) indexes[players++] = i;
    }
    if (players > 0) return indexes[GetRandomInt(0, players-1)];
    return 0;
}
C4 может получить только Т игрок. Если это проверить дальше, то в случае выпадения КТ, бомба так и не вернется.:blush:
Сообщения автоматически склеены:

C++:
new String:GiveC4[64];
GetMenuItem(menu, param1, GiveC4, sizeof(GiveC4));
Возможно я что-то упускаю, но зачем это? И где вообще вызывается функция GiveC4 ?:blink:
 

Grey83

Ленивая и невнимательная жопа
Сообщения
4,157
Реакции
2,430
AlexPa1, у тебя в событии никак не определяется местонахождение бомбы
И что за событие с каллбэком GiveC4?
У тебя код вообще нерабочий.
Что за хрень я только что смотрел? Сделайте мне развидеть это!

Если никто не поднимет брошенную бомбу в течение времени, установленном кваром sm_c4_return_vote, то будет создано голосование.
Если к этому времени раунд или карта завершится, то голосование не будет создано.
Если после окончания голосования бомба уже будет поднята или же раунд или карта будет завершёны, то ничего не произойдёт.
C++:
#pragma semicolon 1
#pragma newdecls required

#include <cstrike>
#include <sdktools_functions>

Handle hTimer;
bool bDropped;
int iTime;

public void OnPluginStart()
{
    ConVar cvar;
    (cvar = CreateConVar("sm_c4_return_vote", "15", "The time after which a vote will be created if a bomb is not raised from the ground", _, true)).AddChangeHook(CVarChanged);
    iTime = cvar.IntValue;

    HookEvent("bomb_dropped", Event_Bomb);
    HookEvent("bomb_pickup", Event_Bomb);
}

public void CVarChanged(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    iTime = cvar.IntValue;
}

public Action CS_OnTerminateRound(float& delay, CSRoundEndReason& reason)
{
    OnMapEnd();
}

public void OnMapEnd()
{
    bDropped = false;
    if(hTimer) delete hTimer;
}

public void Event_Bomb(Event event, const char[] name, bool dontBroadcast)
{
    bDropped = name[5] == 'd';
    if(bDropped) hTimer = CreateTimer((iTime + 0.0), Timer_Vote);
    else OnMapEnd();
}

public Action Timer_Vote(Handle timer)
{
    if(IsVoteInProgress()) return;    // голосование ещё идёт

    Menu menu = new Menu(Handle_VoteMenu);
    menu.SetTitle("Отдать бомбу Т?");
    menu.AddItem("yes", "Да");
    menu.AddItem("no", "Нет");
    menu.ExitButton = false;
    menu.DisplayVoteToAll(15);
    hTimer = null;
}

public int Handle_VoteMenu(Menu menu, MenuAction action, int param1, int param2)
{
    if(action == MenuAction_End) delete menu;
    else if(action == MenuAction_VoteEnd && !bDropped && !param1)
    {
        int clients[MAXPLAYERS+1], num;
        for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i))
            clients[num++] = i;
        if(num) GivePlayerItem(GetRandomInt(0, num-1), "weapon_c4");
    }
}
 

Вложения

Последнее редактирование:

StormX

Участник
Сообщения
582
Реакции
133
AlexPa1, у тебя в событии никак не определяется местонахождение бомбы
И что за событие с каллбэком GiveC4?
У тебя код вообще нерабочий.
Что за хрень я только что смотрел? Сделайте мне развидеть это!

Если никто не поднимет брошенную бомбу в течение времени, установленном кваром sm_c4_return_vote, то будет создано голосование.
Если к этому времени раунд или карта завершится, то голосование не будет создано.
Если после окончания голосования бомба уже будет поднята или же раунд или карта будет завершёны, то ничего не произойдёт.
C++:
#pragma semicolon 1
#pragma newdecls required

#include <cstrike>
#include <sdktools_functions>

Handle hTimer;
bool bDropped;
int iTime;

public void OnPluginStart()
{
    ConVar cvar;
    (cvar = CreateConVar("sm_c4_return_vote", "15", "The time after which a vote will be created if a bomb is not raised from the ground", _, true)).AddChangeHook(CVarChanged);
    iTime = cvar.IntValue;

    HookEvent("bomb_dropped", Event_Bomb);
    HookEvent("bomb_pickup", Event_Bomb);
}

public void CVarChanged(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    iTime = cvar.IntValue;
}

public Action CS_OnTerminateRound(float& delay, CSRoundEndReason& reason)
{
    OnMapEnd();
}

public void OnMapEnd()
{
    bDropped = false;
    if(hTimer) delete hTimer;
}

public void Event_Bomb(Event event, const char[] name, bool dontBroadcast)
{
    bDropped = name[5] == 'd';
    if(bDropped) hTimer = CreateTimer((iTime + 0.0), Timer_Vote);
    else OnMapEnd();
}

public Action Timer_Vote(Handle timer)
{
    if(IsVoteInProgress()) return;    // голосование ещё идёт

    Menu menu = new Menu(Handle_VoteMenu);
    menu.SetTitle("Отдать бомбу Т?");
    menu.AddItem("yes", "Да");
    menu.AddItem("no", "Нет");
    menu.ExitButton = false;
    menu.DisplayVoteToAll(15);
    hTimer = null;
}

public int Handle_VoteMenu(Menu menu, MenuAction action, int param1, int param2)
{
    if(action == MenuAction_End) delete menu;
    else if(action == MenuAction_VoteEnd && !bDropped && !param1)
    {
        int clients[MAXPLAYERS+1], num;
        for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i))
            clients[num++] = i;
        if(num) GivePlayerItem(GetRandomInt(0, num-1), "weapon_c4");
    }
}
А по итогу плагин не у кого не работает адекватно.
Что автор топика писал, что здесь без разницы.)))
Плагин попросту не учитывает голоса. Стоит какая мифическая цифра в 13 и все.
Не важно, что положительных голос больше "все равно бомбу Т не отдам" т.к. надо каких то там 13 голосов)).
Играю с ботами, бомба оказалось на базе КТ, через какое то время выводится голосование за бомбу - естественно нажимаю Да, а по итогу "хрен вам, а не бомбу" надо там чего то 13 и все)))))))).
Извиняюсь за сарказм).
 

Grey83

Ленивая и невнимательная жопа
Сообщения
4,157
Реакции
2,430
Плагин попросту не учитывает голоса.
Обновил код:
1) теперь голосование будет отсылаться только живым спецам, если они не боты;
2) добавлен квар sm_c4_return_votes, который устанавливает какой процент из проголосовавших (от 5 до 100, дефолт - 60) должен быть за, чтобы голосование считалось успешным;
* квар sm_c4_return_vote переименован в sm_c4_return_time
3) в конце голосования будет извещение о его результатах
4) если квар sm_c4_return_time установлен в 0, то голосование не будет создаваться (т.е. плагин выключен)
C++:
#pragma semicolon 1
#pragma newdecls required

#include <cstrike>
#include <sdktools_functions>

Handle hTimer;
bool bDropped;
int iTime,
    iLimit;

public void OnPluginStart()
{
    ConVar cvar;
    (cvar = CreateConVar("sm_c4_return_time", "15", "The time after which a vote will be created if a bomb is not raised from the ground. 0 - plugin disabled", _, true)).AddChangeHook(CVarChanged_Time);
    iTime = cvar.IntValue;

    (cvar = CreateConVar("sm_c4_return_votes", "60", "Percent required for successful C4 return vote.", _, true, 5.0, true, 100.0)).AddChangeHook(CVarChanged_Votes);
    iLimit = cvar.IntValue;

    HookEvent("bomb_dropped", Event_Bomb);
    HookEvent("bomb_pickup", Event_Bomb);

    LoadTranslations("basevotes.phrases");
}

public void CVarChanged_Time(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    iTime = cvar.IntValue;
}

public void CVarChanged_Votes(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    iLimit = cvar.IntValue;
}

public Action CS_OnTerminateRound(float& delay, CSRoundEndReason& reason)
{
    OnMapEnd();
}

public void OnMapEnd()
{
    bDropped = false;
    if(hTimer) delete hTimer;
}

public void Event_Bomb(Event event, const char[] name, bool dontBroadcast)
{
    bDropped = iTime && name[5] == 'd';
    if(bDropped) hTimer = CreateTimer((iTime + 0.0), Timer_Vote);
    else OnMapEnd();
}

public Action Timer_Vote(Handle timer)
{
    if(IsVoteInProgress()) return;

    Menu menu = new Menu(Handle_VoteMenu);
    menu.SetTitle("Отдать бомбу Т?");
    menu.AddItem("1", "Да");
    menu.AddItem("0", "Нет");
    menu.ExitButton = false;

    int clients[MAXPLAYERS+1], num;
    for(int i = 1; i <= MaxClients; i++) if(IsClientValid(i, 3)) clients[num++] = i;
    menu.DisplayVote(clients, num, 15);
    hTimer = null;
}

public int Handle_VoteMenu(Menu menu, MenuAction action, int param1, int param2)
{
    if(action == MenuAction_End) delete menu;
    else if(action == MenuAction_VoteEnd && !bDropped && !param1)
    {
        char item[4];
        int num, i, votes;
        GetMenuVoteInfo(param2, i, votes);
        menu.GetItem(param1, item, sizeof(item));
        if(item[0] == '0' && param1 == 1) i = votes - i;
        num = 100 * i / votes;
        if((item[0] == '1' && num < iLimit && param1 == 0) || (item[0] == '0' && param1 == 1))
            PrintToChatAll("[SM] %t", "Vote Failed", iLimit, num, votes);
        else
        {
            PrintToChatAll("[SM] %t", "Vote Successful", num, votes);
            int clients[MAXPLAYERS+1];
            for(i = 1, num = 0; i <= MaxClients; i++) if(IsClientValid(i, 2, true))
                clients[num++] = i;
            if(num) GivePlayerItem(GetRandomInt(0, num-1), "weapon_c4");
        }
    }
}

stock bool IsClientValid(int client, int team, bool bots = false)
{
    return IsClientInGame(client) && GetClientTeam(client) == team && IsPlayerAlive(client) && (bots || !IsFakeClient(client));
}
 

Вложения

Последнее редактирование:

ALSHiN

Участник
Сообщения
221
Реакции
11
Вставлю тоже свои 5 копеек Xd
Игра CS:GO , плагин, который будет проверь инвентарь игрока (хилка, тег граната, основное оружие, второе оружие, оружие ближнего боя и т.д.) если при старте что-то из этого пропадает, то он выдает заново
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху