Команды/Функции, связанные с игроком
| |
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 |
|
Цитата 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 |
|
Попробуй поиграться с этим:
Код 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 |
|
Цитата 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 |
|
В 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 |
|
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 |
|
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 |
|
Цитата 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 |
|
| |
|