Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Поиск

[ вход ]
[ последние сообщения ]

Форум » SourceMod >> CS:Source >> CSGO » Уроки SourceMod (SourcePawn) Скриптинга » Команды/Функции, связанные с игроком (Список, примеры)
Команды/Функции, связанные с игроком
www22 Дата: Вторник, 16.10.2018, 17:33:41 | Сообщение # 61
Сообщений: 84
Репутация: -1 [ +/- ]
Вопрос , а можно как то запретить выбор определенного Класса/Оружия игроку ?
То есть как отловить момент выбора класса. И уже там запретить ?
Или же всё банально проще можно сделать , откл. и вкл после выбора определенный класс ?


Сообщение отредактировал www22 - Вторник, 16.10.2018, 17:41:24
 
_wS_ Дата: Вторник, 16.10.2018, 19:14:19 | Сообщение # 62
Thanks
Цитата www22 ()
Вопрос , а можно как то запретить выбор определенного Класса/Оружия игроку ?
То есть как отловить момент выбора класса. И уже там запретить ?
Или же всё банально проще можно сделать , откл. и вкл после выбора определенный класс ?

Sorry, за долгое ожидание, добавь в дискорд или скайп, будет проще.
Если ты имел в виду покупку оружия, то так:

Код
public OnPluginStart()
{
    AddCommandListener(OnBuyCmd, "buy");
}

public Action:OnBuyCmd(client, const String:command[], args)
{
    if (client > 0 && args > 0 && IsPlayerAlive(client))
    {
        decl String:weapon[32];
        GetCmdArg(1, weapon, sizeof(weapon));
        if (!strcmp(weapon, "deagle", false))
        {
            PrintToChat(client, "Кольт покупать нельзя!");
            return Plugin_Handled;
        }
    }
    return Plugin_Continue;
}
 
www22 Дата: Вторник, 16.10.2018, 19:47:37 | Сообщение # 63
Сообщений: 84
Репутация: -1 [ +/- ]
_wS_, Ну в додс там только выбор класса, и стоят запреты через квары определенные классы- точнее могут стоят запрет/ограничение на выбор.
Вот и интересно стало , можно ли как то запретить этот класс . Хотя в ДОдс есть вот этот Event - player_changeclass, если я правильно то этот Event ловит смену класса ?!

Цитата _wS_ ()
Sorry, за долгое ожидание, добавь в дискорд или скайп, будет проще.
Да ничего , я все равно не спешу никуда и практикуюсь тоже не постоянно :))
Просто иногда возникают всякие мысли, а там уже и вопросики :))


Сообщение отредактировал www22 - Вторник, 16.10.2018, 19:55:41
 
_wS_ Дата: Вторник, 16.10.2018, 20:07:30 | Сообщение # 64
Thanks
Попробуй поиграться с этим:

Код
public OnPluginStart()
{
    AddCommandListener(MyCmd, "jointeam");
    AddCommandListener(MyCmd, "joinclass");
}

public Action:MyCmd(client, const String:command[], args)
{
    if (client > 0)
    {
        decl String:s[32];
        GetCmdArg(1, s, sizeof(s));
        PrintToChat(client, "%s %s", command, s);
    }
    return Plugin_Continue;
}

Когда определишь нужные запрещенные классы (их цифры), блочь через return Plugin_Handled;
Еще учитывай что команда может вводиться без аргумента (значения), например просто jointeam, и она может сработать, его кинет в какую-то команду.
Поэтому если аргумента нет, можно заблокировать просто (return Plugin_Handled).
 
www22 Дата: Вторник, 16.10.2018, 20:20:05 | Сообщение # 65
Сообщений: 84
Репутация: -1 [ +/- ]
_wS_,
Цитата _wS_ ()
Когда определишь нужные запрещенные классы (их цифры), блочь через return Plugin_Handled;
Да там в игре их всего 6 классов , с оружием тоже - ты помог .. А так понятно .. Попробуем поиграться.

Добавлено (22.10.2018, 17:52:40)
---------------------------------------------
_wS_,
Цитата _wS_ ()
GetClientDeaths(client) - количество смертей
GetClientFrags(client) - фрагов

А вот эти значения, можно изменять через плагин ?
А то с тем плагином КД, он оказывается считывает эти переменные , и потом уже проверяет..
Вообщем нужно еще думать как его изменить ..


Сообщение отредактировал www22 - Понедельник, 22.10.2018, 17:56:34
 
_wS_ Дата: Понедельник, 22.10.2018, 21:16:19 | Сообщение # 66
Thanks
Цитата www22 ()
_wS_,
Цитата _wS_ писал(а):
GetClientDeaths(client) - количество смертей
GetClientFrags(client) - фрагов

А вот эти значения, можно изменять через плагин ?

SetEntProp(client, Prop_Data, "m_iFrags", value);
SetEntProp(client, Prop_Data, "m_iDeaths", value);
 
www22 Дата: Вторник, 27.11.2018, 14:23:04 | Сообщение # 67
Сообщений: 84
Репутация: -1 [ +/- ]
Спасибо !!!

Добавлено (27.11.2018, 20:00:57)
---------------------------------------------
Кстати а как ловить/вызывать вот это :
Код
public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
{
   if (([color=red]StopChain == true[/color] && buttons & IN_USE)
   {
     new String:classname[64];
     GetClientWeapon(client, classname, sizeof(classname));
     if (StrEqual(classname, "weapon_"))
     buttons &= ~IN_USE;
  return Plugin_Handled;
   }
}

Вообщем запретить поднятие любого оружия ..И кстати правильно расписал или опять напортачил - по неопытности :))
А то хотел добавить к тому плагину с отбиванием ..


Сообщение отредактировал www22 - Вторник, 27.11.2018, 20:08:38
 
_wS_ Дата: Вторник, 27.11.2018, 20:11:11 | Сообщение # 68
Thanks
В OnPlayerRunCmd есть уже &weapon, по идее это индекс активного оружия.
В OnPlayerRunCmd не стоит делать new со строками/массивами.

decl String:classname[64];
а лучше static String:classname[64];

Цитата www22 ()
запретить поднятие любого оружия

Смотри Weapon Limit, там запрет через item_pickup событие и там же код для удаления есть.
 
www22 Дата: Вторник, 27.11.2018, 20:13:28 | Сообщение # 69
Сообщений: 84
Репутация: -1 [ +/- ]
ааа , ну я взял отсюда исходник , только тему не помню.. думал он рабочий ..
а вызвать то этот код . или он автоматом будет ?
 
_wS_ Дата: Вторник, 27.11.2018, 20:27:23 | Сообщение # 70
Thanks
OnPlayerRunCmd автоматом кнеш tickrate раз в сек вызывается, 66 раз в сек и тд, 100.
Аккуратнее с ним.
 
www22 Дата: Вторник, 27.11.2018, 21:16:47 | Сообщение # 71
Сообщений: 84
Репутация: -1 [ +/- ]
_wS_,
Цитата _wS_ ()
item_pickup

нет у нас этого .. увидел через SDK как то можно вот тут кусочек http://world-source.ru/forum/102-3077-2, но не знаю как и что с ним ..И пойдет ли у в моей игре ..

Добавлено (01.03.2019, 09:29:36)
---------------------------------------------

Код
#include <sdkhooks>
#include <sdktools_entinput>

public OnPluginStart()
{
HookEventEx("dod_round_win", OnRoundWin)
}

public Action:OnRoundWin(Handle:event, const String:name[], bool:dontBroadcast)
{
    for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i)) OnClientPostAdminCheck(i);
}

public OnClientPostAdminCheck(int client)
{
    if(!IsFakeClient(client)) SDKHook(client, SDKHook_WeaponDropPost, Hook_WeaponDropped);
}

public Hook_WeaponDropped(int client, int weapon)
{
    AcceptEntityInput(weapon, "Kill");
}
Что то понять не могу , почему , этот код "работает" постоянно ?
Хотел бы что он срабатывал в конце победы/раунда. А тут , вон как ..


Сообщение отредактировал www22 - Вторник, 27.11.2018, 21:20:06
 
_wS_ Дата: Суббота, 02.03.2019, 01:46:42 | Сообщение # 72
Thanks
SDKHook_WeaponDropPost делай 1 раз в OnClientPostAdminCheck
глоб вар new bool:g_bRoundEnded;
Код
начало раунда()
{
   g_bRoundEnded = false;
}

конец раунда()
{
   g_bRoundEnded = true;
}


Ну и в Hook_WeaponDropped проверяй g_bRoundEnded, логика.
if (g_bRoundEnded) AcceptEntityInput(weapon, "Kill");
 
www22 Дата: Суббота, 02.03.2019, 09:57:17 | Сообщение # 73
Сообщений: 84
Репутация: -1 [ +/- ]
_wS_, а если в один If всё "сложить" ?
А так да можно попробовать.

Добавлено (02.03.2019, 10:00:35)
---------------------------------------------
Кстати а вот этот OnClientPostAdminCheck , не стандартный вызов. Незнаю как это правильно расписать , вообще не зашитая функция, так наверное ?

Добавлено (02.03.2019, 10:01:40)
---------------------------------------------
Ага точно https://sm.alliedmods.net/new-api/clients/OnClientPostAdminCheck , стандартная. Вот и такое происходит что вызывается каждый раз.

Добавлено (02.03.2019, 10:11:07)
---------------------------------------------
Код
#include <sdkhooks>
#include <sdktools_entinput>

public OnPluginStart()
{
HookEventEx("dod_round_win", OnRoundWin)
}

public Action:OnRoundWin(Handle:event, const String:name[], bool:dontBroadcast)
{
    for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i)&&!IsFakeClient(i)) SDKHook(i, SDKHook_WeaponDropPost, Hook_WeaponDropped);
}

public Hook_WeaponDropped(int client, int weapon)
{
    AcceptEntityInput(weapon, "Kill");
}

А так если расписать ,и вообще правильно расписал. И так не проще ?
Подправил , попробовал скомпилить вроде ошибок нет .
Вроде бы всё ОК..


Сообщение отредактировал www22 - Суббота, 02.03.2019, 10:40:13
 
_wS_ Дата: Суббота, 02.03.2019, 10:42:00 | Сообщение # 74
Thanks
Цитата www22 ()
вроде ошибок нет

Кроме логических.
SDKHook - хукаешь игрока, после чего будет вызываться Hook_WeaponDropped когда он выбрасывает оружие.
Но ты делаешь SDKHook в конце каждого раунда, а значит и вызовов будет столько же, а не 1 = глупо.
Может ты думаешь почему-то что хук сам собой пропадёт после начала нового раунда, но он остается до выхода с сервера.
Я выше описал как правильно логически сделать.
 
www22 Дата: Суббота, 02.03.2019, 10:46:59 | Сообщение # 75
Сообщений: 84
Репутация: -1 [ +/- ]
_wS_,
Цитата _wS_ ()
Может ты думаешь почему-то что хук сам собой пропадёт после начала нового раунда

Ага , это я и думаю .Точно , так и есть ,вот блин :)))


Сообщение отредактировал www22 - Четверг, 09.05.2019, 19:17:35
 
Форум » SourceMod >> CS:Source >> CSGO » Уроки SourceMod (SourcePawn) Скриптинга » Команды/Функции, связанные с игроком (Список, примеры)
Поиск: