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

F

FBI

ну если я не ошибаюсь то в ножевом я смогу его отключить, тогда будет один)
@AlmazON,
 

acik_traiks

Что нибудь напишем?)
Сообщения
770
Реакции
627
C-подобный:
public Action:OnShouldBotAttackPlayer(bot, player, &bool:result)
{
    if(!bot || !IsClientInGame(bot) || !IsPlayerAlive(bot) || !player || !IsClientInGame(player) || !IsPlayerAlive(player))
    {
        return Plugin_Continue;
    }
    .....
 

MrEvgen

Участник
Сообщения
117
Реакции
38
В этой теме можете оставлять свои заявки по написанию различных плагинов:


P.S. Некоторые плагины могу пропустить

P.S.S. Буду рад, если кто-то из скриптеров сюда будет заглядывать


Напишешь такой плагин перехода по серверам?

70297f6a3bef41ca8d45b7cc89592ef3.png


94177cbc37884cb788c8e0b25a28195c.png
 

ColdWind

Участник
Сообщения
68
Реакции
29
Привет всем, пользуюсь плагином Army Rank: http://hlmod.ru/threads/army-ranks.34126/Решил изменить его чучуть под себя, убрал коменты где при написании rank в чате выводится статистика. Так вот, он не правильно показывает твою позицию в топе. На стандарте там показывает игрокам всегда единицу, на скрине у меня 45 потому что мы пытались его поправить но не получилось. Может это еще не реализовано, но может кто-нибуть поможет поправить это? Все остальное работает нормально, только твоя позиция в чате не соответствует топу. Почему я пишу суда? Да потому-что автор не отвечает мне уже долгий период времени, может занет, а может нет дела до этого.
ovx0lHpJl-A.jpg

 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@Parker, привёл бы часть кода, который менялся. Может и подсказали что.
 

TotSamiiRodya

Участник
Сообщения
246
Реакции
107
Ищу плагин который убирает с карты оружие/гранаты/броню (убирает только то оружие, которое было сделано к карте, а не то что было выброшенное игроками)
 

[[[[KaZaK]]]]

Участник
Сообщения
107
Реакции
72
В OnMapStart() цикл по всем ентитам, получаешь их имена, проверяешь, находит ли внутри строки с именем ентиты строку weapon_ или просто weapon, без разницы, если находит удаляешь эту энтиту, если оружия создаются картой после OnMapStart, алгоритм сложнее, там нужно учитывать, кто хозяин оружия, если его нет, удалять
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@Parker, я имел в виду сюда процитировал кусок кода, который с изменениями.
Телепаты в отпуске и не могут подсказать что вы там изменили.
 

ColdWind

Участник
Сообщения
68
Реакции
29
@Parker, я имел в виду сюда процитировал кусок кода, который с изменениями.
Телепаты в отпуске и не могут подсказать что вы там изменили.
Я же сказал я просто убрал коменты с этих строчек, я скинул вам плагин и написал на каких строчках я изменил, зачем писать подобную ерунду? Если трудно открыть исход, держи.

if ( SQL_HasResultSet(hQuery) )
{
decl String:sBuffer[256];
Format(sBuffer, sizeof(sBuffer), "%T","show_rank1",iClient,g_sRank[iClient],SQL_GetRowCount(hQuery)+1,g_iTotalPlayers);
Color_PrintToChatEx(iClient,iClient, sBuffer);
Format(sBuffer, sizeof(sBuffer), "%T","show_rank2",iClient,g_iKills[iClient],g_iDeaths[iClient],g_iKills[iClient]);
Color_PrintToChatEx(iClient,iClient, sBuffer);
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@Parker, где тут про то, что убраны только символы комментария?
Решил изменить его чучуть под себя, убрал коменты где при написании rank в чате выводится статистика.
С твоей пунктуацией не поймешь вообще о чём ты хочешь сказать.

Как я сейчас смог понять (после цитирования кода, притом без необходимых тегов форматирования), ты разкомментировал блок в файле ..\army\eventsOnPluginStart.sp
Это так?

И какие же ты внёс изменения?
Твоя цитата не отличается от кода оригинала ничем, кроме отсутствия символов комментирования

И вообще: не лучше было бы поинтересоваться у самого автора плагина в той самой теме?
 
Последнее редактирование:

ColdWind

Участник
Сообщения
68
Реакции
29
@Parker, где тут про то, что убраны только символы комментария?С твоей пунктуацией не поймешь вообще о чём ты хочешь сказать.

Как я сейчас смог понять (после цитирования кода, притом без необходимых тегов форматирования), ты разкомментировал блок в файле ..\army\eventsOnPluginStart.sp
Это так?

И какие же ты внёс изменения?
Твоя цитата не отличается от кода оригинала ничем, кроме отсутствия символов комментирования

И вообще: не лучше было бы поинтересоваться у самого автора плагина в той самой теме?

Да ладно, ты с 3 раза это понял? Я говорил почему пишу суда, потому как автор меня игнорирует. А ты я как понял флеймер и не можешь мне нормально по делу ответить. Я нормально и я понятно написал что "Убрал коменты со строчек где выводится статистика в чате, изначально эти строчки были закоменчены". Где же я писал что изменял как то код? Послушай если оно тебе не нужно, пожалуйста просто проигнорь это сообщение да и все, зачем тратить свое и мое время, я тебя не заставляю мне помогать.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
Где же я писал что изменял как то код?
На стандарте там показывает игрокам всегда единицу, на скрине у меня 45 потому что мы пытались его поправить но не получилось.
--- Добавлено позже ---
автор меня игнорирует.
Ты писал ему в личку или в тему плагина?
 

ColdWind

Участник
Сообщения
68
Реакции
29
--- Добавлено позже ---
Ты писал ему в личку или в тему плагина?
Я скинул суда версию где просто сняты коменты, мой знакомый пытался поправить но не чего не вышло. Я писал ему в личку он читает сообщения но не отвечает, не думаю что если я напишу в тему что-то изменится.
 

Felton

Участник
Сообщения
799
Реакции
59
C-подобный:
#include <sourcemod>
#include <sdkhooks>
#include <smlib>

#define WEAPONNAMESIZE 33

new const String:PLUGIN_NAME[]= "botswat"
new const String: PLUGIN_AUTHOR[]= "Bittersweet"
new const String:PLUGIN_DESCRIPTION[]= "Allows humans to bash teammate BOTs out of their way with their knife.  This is an alternative to 'noblock' type plugins."
new const String: PLUGIN_VERSION[]= "2013.06.15.22.21"

new hooked_clients[MAXPLAYERS]

public Plugin:myinfo =
{
    name = PLUGIN_NAME,
    author = PLUGIN_AUTHOR,
    description = PLUGIN_DESCRIPTION,
    version = PLUGIN_VERSION,
    url = "http://www.sourcemod.net/"
}
public OnPluginStart()
{
    PrintToServer("[%s %s] - Loaded", PLUGIN_NAME, PLUGIN_VERSION)
}
public OnClientPutInServer(client)
{
    if (IsClientConnected(client) && IsFakeClient(client))
    {
        SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
        hooked_clients[client] = true
    }
}
public OnClientDisconnect(client)
{
    if (hooked_clients[client])
    {
        SDKUnhook(client, SDKHook_OnTakeDamage, OnTakeDamage);
        hooked_clients[client] = false
    }
}
public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype, &weapon, Float:damageForce[3], Float:damagePosition[3], damagecustom)
{
    if (victim > MaxClients || attacker > MaxClients) return
    if (!victim || !IsClientConnected(victim) || !IsFakeClient(victim) || !attacker || !IsClientConnected(attacker) || IsFakeClient(attacker) || GetClientTeam(attacker) != GetClientTeam(victim)) return
    new String:bbm_weapon_name[WEAPONNAMESIZE]
    GetClientWeapon(attacker, bbm_weapon_name, sizeof(bbm_weapon_name))
    if (!StrEqual(bbm_weapon_name, "weapon_knife")) return
    decl Float:clientposition[3], Float:targetposition[3], Float:vector[3], Float:bashposition[3]
    GetClientEyePosition(attacker, clientposition)
    GetClientEyePosition(victim, targetposition)
    bashposition[0] = targetposition[0]
    bashposition[1] = targetposition[1]
    bashposition[2] = targetposition[2] + 50.0
    MakeVectorFromPoints(targetposition, bashposition, vector)
    NormalizeVector(vector, vector)
    //600 will work, less than that won't do anything
    new Float:fKnockBackToMake = 400.0
    ScaleVector(vector, fKnockBackToMake)
    TeleportEntity(victim, NULL_VECTOR, NULL_VECTOR, vector)
}
//End of code
Если не трудно сделайте плагин с правами ROOT !
При ударе ножом не важно в какое место в своего товарища по команде он немного подпрыгивал.Или взять за основу этот код и переписать.Сделать попроще а то не компелируется.Игра Counter-Strike Source(старушка)Раранее спасибо!
 

RaayNoff

Участник
Сообщения
135
Реакции
12
Есть свободные люди, которые могут написать не большой плагин? В его функционал должно входить:
1) Ограничение численности террористов не больше трех игроков
2) Автовыбор игроков за Т, каждый раунд (каждый раунд другие три игрока, выбираются рандомно)
3) Вывод ников, кто в данный момент играет за Т "Террористами стали имя, имя, имя"
4) Блокировка входа игрока за команду Т вручную (если игрок пытается зайти за команду Т, его автоматически перебрасывает за КТ)
Если кто-то откликнется, буду очень признателен.
 

Felton

Участник
Сообщения
799
Реакции
59
C-подобный:
//* This plugins is a remake of an Eventscripts plugin //*
//* called CTrun (http://addons.eventscripts.com/addons/view/CTRun) //*

#include <sourcemod>
#include <sdktools>
#include <cstrike>
#include <sdkhooks>

public Plugin:myinfo =
{
    name = "CT-C4",
    author = "rodipm",
    description = "Allows Менты to pickup the c4 and plant it.",
    version = "1.0",
    url = "sourcemod.net"
}

new Handle:g_canplant = INVALID_HANDLE;
new bool:wait;
new bool:holding[MAXPLAYERS+1];

public OnPluginStart()
{
    g_canplant = CreateConVar("ctc4_canplant", "0", "Defines if Менты can plant the bomb. Default = 0");
   
    HookEvent("bomb_dropped", Dropped);
    HookEvent("bomb_pickup", Pickup);
    HookEvent("bomb_planted", Planted);
    HookEvent("bomb_beginplant", Planting);
    HookEvent("round_start", RoundStart);
    HookEvent("round_end", RoundEnd);
   
    //for(new i = 1; i <= MaxClients; i++)
    //{
    //    if(IsClientInGame(i) && IsClientConnected(i))
    //        OnClientPutInServer(i);
    //}
}

public OnClientPutInServer(client)
{
    SDKHook(client, SDKHook_Touch, Touch);
}

public Touch(ent1, ent2)
{
    if(!wait && !holding[ent1])
    {
        if(ent1 > 0 && ent1 <= MaxClients && IsPlayerAlive(ent1) && GetClientTeam(ent1) == CS_TEAM_CT)
        {
            decl String:name[50];
            GetEdictClassname(ent2, name, 50);
           
            if(StrContains(name, "weapon_c4") != -1)
            {
                SetEntProp(ent1, Prop_Send, "m_iTeamNum", 2);
                RemoveEdict(ent2);
                GivePlayerItem(ent1, "weapon_c4");
                SetEntProp(ent1, Prop_Send, "m_iTeamNum", 3);
                holding[ent1] = true;
            }
        }
    }
}

public Dropped(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if(IsClientConnected(client) && IsClientInGame(client) && GetClientTeam(client) == CS_TEAM_CT)
    {
        wait = true;
        CreateTimer(0.5, WaitCheck);
        holding[client] = false;
    }
}

public Pickup(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if(GetClientTeam(client) == CS_TEAM_CT)
        holding[client] = true;
}

public Planted(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if(GetClientTeam(client) == CS_TEAM_CT)
        holding[client] = false;
}


public Planting(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if(GetClientTeam(client) == CS_TEAM_CT && !GetConVarBool(g_canplant))
    {
        PrintToChatAll("\x04[CT-C4 \x04]\x03 Вы не можете ставить бомбу!");
        new weapon = GetEntPropEnt(client, Prop_Data, "m_hActiveWeapon");
       
        RemovePlayerItem(client, weapon);
       
        SetEntProp(client, Prop_Send, "m_iTeamNum", 2);
        GivePlayerItem(client, "weapon_c4");
        SetEntProp(client, Prop_Send, "m_iTeamNum", 3);
        holding[client] = true;
    }
}

public RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
    if(!GetConVarBool(g_canplant))
        PrintToChatAll("\x04[CT-C4 \x04]\x03 Менты Вы можете брать бомбу");
    else
        PrintToChatAll("\x04[CT-C4 \x04]\x03 Менты Вы можете брать и ставить бомбу!");
}

public RoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
{
    for(new i = 1; i <= MaxClients; i++)
    {
        if(IsClientInGame(i) && GetClientTeam(i) == CS_TEAM_CT)
            holding[i] = false;
    }
}
public Action:WaitCheck(Handle:timer)
{
    wait = false;
}
Добавьте этому плагину админские права ROOT.
[CS: Source] - CT-C4 (команда CT могут брать бомбу)
 
Последнее редактирование:
Сверху Снизу