Сообщение отредактировал Vitaliy_55ru: 01 Февраль 2018 - 10:40
#1
Отправлено 01 Февраль 2018 - 10:36
#2
Отправлено 04 Февраль 2018 - 0:38
#pragma semicolon 1 #include <sourcemod> #pragma newdecls required bool block_give; public void OnPluginStart() { HookEvent("player_spawn", EventPlayerSpawn); HookEvent("round_start", Event_Round); HookEvent("round_end", Event_Round); } public void Event_Round(Event event, const char[] name, bool dontBroadcast) { block_give = false; } public void EventPlayerSpawn(Event event, const char[] name, bool dontBroadcast) { if (block_give) { int client = GetClientOfUserId(event.GetInt("userid")); AdminId AId = GetUserAdmin(client); int flags = GetAdminFlags(AId, Access_Effective); if (flags & ADMFLAG_KICK) { if (IsClientInGame(client) && !IsFakeClient(client)) { CreateTimer(2.0, Hmmmm, TIMER_FLAG_NO_MAPCHANGE); block_give = true; } } } return; } public Action Hmmmm(Handle timer) { for(int i = 1; i <= MaxClients; i++) if (IsClientInGame(i) && GetClientTeam(i) == 2) { int flagsgive = GetCommandFlags("give"); SetCommandFlags("give", flagsgive & ~FCVAR_CHEAT); FakeClientCommand(i, "give first_aid_kit"); FakeClientCommand(i, "give pain_pills"); FakeClientCommand(i, "give molotov "); FakeClientCommand(i, "give katana"); FakeClientCommand(i, "give rifle_ak47"); SetCommandFlags("give", flagsgive); } return Plugin_Stop; }
#4
Отправлено 05 Февраль 2018 - 21:07
Спасибо огромное "dr_lex" За отзыв на прозьбу, но плагин не выдаёт ничего.
Пробуй так
#pragma semicolon 1 #include <sourcemod> #pragma newdecls required bool block_give; public void OnPluginStart() { HookEvent("player_spawn", EventPlayerSpawn); HookEvent("round_start", Event_Round); HookEvent("round_end", Event_Round); } public void Event_Round(Event event, const char[] name, bool dontBroadcast) { block_give = false; } public void EventPlayerSpawn(Event event, const char[] name, bool dontBroadcast) { if(block_give)return; { int client = GetClientOfUserId(event.GetInt("userid")); { if (IsClientInGame(client) && !IsFakeClient(client)) { CreateTimer(2.0, Hmmmm, TIMER_FLAG_NO_MAPCHANGE); block_give = true; } } } } public Action Hmmmm(Handle timer) { //int AdminId:id = GetUserAdmin(client); for(int i = 1; i <= MaxClients; i++) if (IsClientInGame(i) && GetClientTeam(i) == 2 && GetUserFlagBits(i) & ADMFLAG_KICK) { int flagsgive = GetCommandFlags("give"); SetCommandFlags("give", flagsgive & ~FCVAR_CHEAT); FakeClientCommand(i, "give first_aid_kit"); FakeClientCommand(i, "give pain_pills"); FakeClientCommand(i, "give molotov "); FakeClientCommand(i, "give katana"); FakeClientCommand(i, "give rifle_ak47"); SetCommandFlags("give", flagsgive); } return Plugin_Stop; }
#5
Отправлено 05 Февраль 2018 - 22:05
Неа, ни выходит ни чего! Спасибо, пахоже с этого не чего не выйдет.
#6
Отправлено 05 Февраль 2018 - 22:21
Неа, ни выходит ни чего! Спасибо, пахоже с этого не чего не выйдет.
Так может ты скинул нерабочий код ?) Сделать очень легко то, что тебе нужно
#7
Отправлено 05 Февраль 2018 - 23:47
Неа, ни выходит ни чего! Спасибо, пахоже с этого не чего не выйдет.
У тебя код не рабочий просто!
Вот мой набросок (не проверял, но должен работать).
#include <sourcemod> #pragma newdecls required public Plugin myinfo = { name = "Round start bonus", author = "dr lex", description = "", version = "0.1", url = "" } public void OnPluginStart() { HookEvent("round_start", Event_RoundStart); } public void OnClientPostAdminCheck(int client) { if (client > 0) { CreateTimer(5.0, TimerRetryRestore, client, TIMER_FLAG_NO_MAPCHANGE); } } public Action Event_RoundStart(Event event, const char[] name, bool dontBroadcast) { int i = 1; while (i <= MaxClients) { if (IsValidEntity(i)) { if (IsClientInGame(i)) { if (GetClientTeam(i) == 2) { CreateTimer(1.0, TimerRetryRestore, i); } } } i += 1; } } public Action TimerRetryRestore(Handle timer, any client) { AdminId AId = GetUserAdmin(client); int flags = GetAdminFlags(AId, Access_Effective); if (flags & ADMFLAG_KICK) { Ec17CHEAT(client, "give", "first_aid_kit"); Ec17CHEAT(client, "give", "pain_pills"); Ec17CHEAT(client, "give", "molotov"); Ec17CHEAT(client, "give", "katana"); Ec17CHEAT(client, "give", "rifle_ak47"); } } public void Ec17CHEAT(int client, char[] sCmd, char[] sArg) { int iFlags = GetCommandFlags(sCmd); SetCommandFlags(sCmd, iFlags & ~FCVAR_CHEAT); FakeClientCommand(client, "%s %s", sCmd, sArg); SetCommandFlags(sCmd, iFlags); }
#8
Отправлено 06 Февраль 2018 - 0:21
У тебя код не рабочий просто!
Вот мой набросок (не проверял, но должен работать).
#include <sourcemod> #pragma newdecls required public Plugin myinfo = { name = "Round start bonus", author = "dr lex", description = "", version = "0.1", url = "" } public void OnPluginStart() { HookEvent("round_start", Event_RoundStart); } public void OnClientPostAdminCheck(int client) { if (client > 0) { CreateTimer(5.0, TimerRetryRestore, client, TIMER_FLAG_NO_MAPCHANGE); } } public Action Event_RoundStart(Event event, const char[] name, bool dontBroadcast) { int i = 1; while (i <= MaxClients) { if (IsValidEntity(i)) { if (IsClientInGame(i)) { if (GetClientTeam(i) == 2) { CreateTimer(1.0, TimerRetryRestore, i); } } } i += 1; } } public Action TimerRetryRestore(Handle timer, any client) { AdminId AId = GetUserAdmin(client); int flags = GetAdminFlags(AId, Access_Effective); if (flags & ADMFLAG_KICK) { Ec17CHEAT(client, "give", "first_aid_kit"); Ec17CHEAT(client, "give", "pain_pills"); Ec17CHEAT(client, "give", "molotov"); Ec17CHEAT(client, "give", "katana"); Ec17CHEAT(client, "give", "rifle_ak47"); } } public void Ec17CHEAT(int client, char[] sCmd, char[] sArg) { int iFlags = GetCommandFlags(sCmd); SetCommandFlags(sCmd, iFlags & ~FCVAR_CHEAT); FakeClientCommand(client, "%s %s", sCmd, sArg); SetCommandFlags(sCmd, iFlags); }
- Используй для round_start - EventHookMode_PostNoCopy
- Валидность Entity не нужно проверять, хватает IsClientInGame
- Лучше делать условие if (client != 0) - немножко повышает быстродействие, так как процессоры лучше работают с точными значениями
- public void Ec17CHEAT(int client, char[] sCmd, char[] sArg) - в данной функции public не нужен, ты же не собираешься данную функцию использовать в других плагинах
- В таймер передавай лучше UserId - GetClientUserId(client), а в самом CallBack уже извлекай его из UserId - client
- #include <sourcemod> - по сути не нужен, компилятор автоматом подключит, если не найдёт #include на <sourcemod>
- Action - в данном типе Event'а - лишнее, правильнее будет тип void
Я бы сделал это вот так:
#pragma semicolon 1 #pragma newdecls required #define TEAM_SURVIVOR 2 #define CMD_NAME "give" public Plugin myinfo = { name = "L4D2 Round Start Bonus", author = "dr lex (edit by Vitamin)", description = "Add Admin with optional flag some Items", version = "1.0", url = "http://gmode.ru" } public void OnPluginStart() { HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy); } public void OnClientPostAdminCheck(int iClient) { if (iClient != 0) { CreateTimer(5.0, TimerHandler_GiveAdminItem, GetClientUserId(iClient), TIMER_FLAG_NO_MAPCHANGE); } } public void Event_RoundStart(Event hEvent, const char[] szName, bool bSilent) { // ============================== // Idea from CS:S RPG C++ Plugin int iClient = MaxClients; while (iClient--) // ============================== { if (IsClientInGame(iClient) && GetClientTeam(iClient) == TEAM_SURVIVOR) { CreateTimer(1.0, TimerHandler_GiveAdminItem, GetClientUserId(iClient), TIMER_FLAG_NO_MAPCHANGE); } } } public Action TimerHandler_GiveAdminItem(Handle hTimer, int iUserId) { int iClient = GetClientOfUserId(iUserId); if (iClient != 0) { AdminId iAdminID = GetUserAdmin(iClient); int iFlags = GetAdminFlags(iAdminID, Access_Effective); if (iFlags & ADMFLAG_KICK) { ClientCheatCommand(iClient, "first_aid_kit"); ClientCheatCommand(iClient, "pain_pills"); ClientCheatCommand(iClient, "molotov"); ClientCheatCommand(iClient, "katana"); ClientCheatCommand(iClient, "rifle_ak47"); } } return Plugin_Continue; } void ClientCheatCommand(int iClient, char[] szArgument) { int iFlags = GetCommandFlags(CMD_NAME); SetCommandFlags(CMD_NAME, iFlags & ~FCVAR_CHEAT); FakeClientCommand(iClient, "%s %s", CMD_NAME, szArgument); SetCommandFlags(CMD_NAME, iFlags); }
Сообщение отредактировал Vitamin: 06 Февраль 2018 - 0:28
- MR.FIX это нравится
#9
Отправлено 06 Февраль 2018 - 0:29
- Используй для round_start -
- Валидность Entity не нужно проверять, хватает IsClientInGame
- Лучше делать условие if (client != 0) - немножко повышает быстродействие, так как процессоры лучше работают с точными значениями
- public void Ec17CHEAT(int client, char[] sCmd, char[] sArg) - в данной функции public не нужен, ты же не собираешься данную функцию использовать в других плагинах
- В таймер передавай лучше UserId - GetClientUserId(client), а в самом CallBack уже извлекай его из UserId - client
- #include <sourcemod> - по сути не нужен, компилятор автоматом подключит, если не найдёт #include на <sourcemod>
У всех свой стиль и взгляды на это.
Сообщение отредактировал dr_lex: 06 Февраль 2018 - 0:30
#10
Отправлено 06 Февраль 2018 - 0:32
А как же такие вещи как "Стандарт", хотя для SourcePawn его как бы нету, но всё же ...
P.S. Очень часто занимаюсь заказами плагинов, и вижу такой ШРОТ в исходниках что ппц ...
А вот насчёт пункта номер 5 - это не стиль, это тебе позволяет сделать "корректную проверку на игрока"
Сообщение отредактировал Vitamin: 06 Февраль 2018 - 0:34
#11
Отправлено 06 Февраль 2018 - 7:01
Код рабочий, без ADMIN_KICK что я просил, компилируется без ошибок и выдаёт всё в начале карты. И ваши коды компилируются тоже отлично но ни происходит ни чего!
Спасибо за коды вечерам приду отпишусь.
#12
Отправлено 06 Февраль 2018 - 10:05
Не реклама ни чё такого. Админестрация не падумайте ничего такого, просто вот ip сервера, и мой плагин там работает на все 100% выдавая всем подряд аптеки, катаны и тд....
Сообщение отредактировал Bastet: 06 Февраль 2018 - 10:25
ip других хостингов выставлять нельзя.
#13
Отправлено 06 Февраль 2018 - 11:56
Код рабочий, без ADMIN_KICK что я просил, компилируется без ошибок и выдаёт всё в начале карты. И ваши коды компилируются тоже отлично но ни происходит ни чего!
Спасибо за коды вечерам приду отпишусь.
Я проверял на тест сервере, все выдаёт если у тебя вписаны права C (кик) в админке. Именно это вы просили насколько я понимаю.
#14
Отправлено 08 Февраль 2018 - 12:18
Я проверял на тест сервере, все выдаёт если у тебя вписаны права C (кик) в админке. Именно это вы просили насколько я понимаю.
Да я прописывал в АДМИНКЕ и © и (A B C D) в общим всё, но ни чего ни происходит!
#15
Отправлено 09 Февраль 2018 - 19:31
Да я прописывал в АДМИНКЕ и © и (A B C D) в общим всё, но ни чего ни происходит!
https://steamuserima...FC9422A763C53D/
#16
Отправлено 11 Февраль 2018 - 11:50
У тебя код не рабочий просто!
Вот мой набросок (не проверял, но должен работать).
#include <sourcemod> #pragma newdecls required public Plugin myinfo = { name = "Round start bonus", author = "dr lex", description = "", version = "0.1", url = "" } public void OnPluginStart() { HookEvent("round_start", Event_RoundStart); } public void OnClientPostAdminCheck(int client) { if (client > 0) { CreateTimer(5.0, TimerRetryRestore, client, TIMER_FLAG_NO_MAPCHANGE); } } public Action Event_RoundStart(Event event, const char[] name, bool dontBroadcast) { int i = 1; while (i <= MaxClients) { if (IsValidEntity(i)) { if (IsClientInGame(i)) { if (GetClientTeam(i) == 2) { CreateTimer(1.0, TimerRetryRestore, i); } } } i += 1; } } public Action TimerRetryRestore(Handle timer, any client) { AdminId AId = GetUserAdmin(client); int flags = GetAdminFlags(AId, Access_Effective); if (flags & ADMFLAG_KICK) { Ec17CHEAT(client, "give", "first_aid_kit"); Ec17CHEAT(client, "give", "pain_pills"); Ec17CHEAT(client, "give", "molotov"); Ec17CHEAT(client, "give", "katana"); Ec17CHEAT(client, "give", "rifle_ak47"); } } public void Ec17CHEAT(int client, char[] sCmd, char[] sArg) { int iFlags = GetCommandFlags(sCmd); SetCommandFlags(sCmd, iFlags & ~FCVAR_CHEAT); FakeClientCommand(client, "%s %s", sCmd, sArg); SetCommandFlags(sCmd, iFlags); }
Вооооооо, СПАСИБО Огромное. Всё заработало!!!
dr_lex, извини за надоедливость, а не мог бы ты тоже самое (ADMIN_KICK) ещё в один плагин прописать? Чтоб тока админ с этим флагом при падении получал (magnum)
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных