Про100Максим TWC

Пользователь
  • Публикации

    36
  • Зарегистрирован

  • Посещение

Все публикации пользователя Про100Максим TWC

  1. Про100Максим TWC

    Блеснуть ? та пожалуиста , кратко говоря sp это второй компонент smx , например плагин [L4D2] Defib using bots.smx - позволяет ботам , да да , Ботам, ресать с помощбю дефибрилятора а sp . это доп компонент к smx который позволяет этому плагину работать, скомпилировать ? ща #pragma semicolon 1 #include <sourcemod> #include <sdktools> #define PLUGIN_VERSION "1.5" #define STARTSHOOTING 1 #define STOPSHOOTING 0 static shoot[MAXPLAYERS + 1] = 0; static Handle:MedsArray = INVALID_HANDLE; public Plugin:myinfo = { name = "[L4D2] Defib using bots", author = "DeathChaos25", description = "Allows bots to use Defibrillators in L4D2", version = PLUGIN_VERSION, url = "https://forums.alliedmods.net/showthread.php?t=261566" }; public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max) { decl String:s_GameFolder[32]; GetGameFolderName(s_GameFolder, sizeof(s_GameFolder)); if (!StrEqual(s_GameFolder, "left4dead2", false)) { strcopy(error, err_max, "This plugin is for Left 4 Dead 2 Only!"); return APLRes_Failure; } return APLRes_Success; } public OnPluginStart() { CreateConVar("sm_defib_bots_version", PLUGIN_VERSION, "Defib Bots Version", FCVAR_PLUGIN | FCVAR_SPONLY | FCVAR_REPLICATED | FCVAR_NOTIFY); CreateTimer(1.0, BotsDefib, _, TIMER_REPEAT); CreateTimer(3.0, CheckForPickUps, _, TIMER_REPEAT); MedsArray = CreateArray(); HookEvent("defibrillator_used_fail", Event_DefibFailed); HookEvent("defibrillator_interrupted", Event_DefibFailed); HookEvent("defibrillator_used", Event_DefibUsed); RegAdminCmd("sm_resetbots", ResetSurvivorAI, ADMFLAG_ROOT, "Completely Resets Survivor AI"); RegAdminCmd("sm_regroup", RegroupBots, ADMFLAG_ROOT, "Commands Survivor Bots to move to your location"); RegAdminCmd("sm_attack", AttackSI, ADMFLAG_ROOT, "Orders Survivor Bots to Attack the SI you are aiming at"); RegAdminCmd("sm_retreat", RunAway, ADMFLAG_ROOT, "Orders Survivor Bots to retreat from the SI you are aiming at"); } public OnEntityCreated(entity, const String:classname[]) { if (entity <= 0 || entity > 2048 || classname[0] != 'w')return; CreateTimer(2.0, CheckEntityForGrab, entity); } // checking for Defibs for the defib pickup public OnEntityDestroyed(entity) { if (entity <= 0 || entity > 2048)return; if (MedsArray != INVALID_HANDLE) { for (new i = 0; i <= GetArraySize(MedsArray) - 1; i++) { if (entity == GetArrayCell(MedsArray, i)) { RemoveFromArray(MedsArray, i); } } } } // Timer based functions public Action:CheckForPickUps(Handle:Timer) { // trying to account for late loading and unexpected // or unreported weapons (stripper created weapons dont seem to fire OnEntityCreated) if (!IsServerProcessing()) { return; } for (new entity = 0; entity < 2048; entity++) { if (!IsValidEntity(entity)) { continue; } new String:classname[128]; GetEntityClassname(entity, classname, sizeof(classname)); if (StrEqual(classname, "weapon_defibrillator", false) || StrEqual(classname, "weapon_defibrillator_spawn", false) || StrEqual(classname, "weapon_first_aid_kit", false) || StrEqual(classname, "weapon_first_aid_kit_spawn", false)) { if (!IsDefibOwned(entity)) { for (new i = 0; i <= GetArraySize(MedsArray) - 1; i++) { if (entity == GetArrayCell(MedsArray, i)) { return; } } PushArrayCell(MedsArray, entity); } } } } public Action:CheckEntityForGrab(Handle:timer, any:entity) { if (IsValidEntity(entity) && MedsArray != INVALID_HANDLE) { new String:classname[128]; GetEntityClassname(entity, classname, sizeof(classname)); if (StrEqual(classname, "weapon_defibrillator", false) || StrEqual(classname, "weapon_defibrillator_spawn", false) || StrEqual(classname, "weapon_first_aid_kit", false) || StrEqual(classname, "weapon_first_aid_kit_spawn", false)) { if (!IsDefibOwned(entity)) { for (new i = 0; i <= GetArraySize(MedsArray) - 1; i++) { if (entity == GetArrayCell(MedsArray, i)) { return; } } PushArrayCell(MedsArray, entity); } } } } public Action:BotsDefib(Handle:timer) { if (!IsServerProcessing()) { return Plugin_Continue; } decl Float:Origin[3], Float:TOrigin[3]; new i = -1; while ((i = FindEntityByClassname(i, "survivor_death_model")) != INVALID_ENT_REFERENCE) { GetEntPropVector(i, Prop_Send, "m_vecOrigin", Origin); for (new j = 1; j <= MaxClients; j++) { if (IsSurvivor(j) && IsFakeClient(j) && IsPlayerAlive(j) && !IsIncapacitated(j) && !IsPlayerHeld(j) && !IsAssistNeeded() && ClientHasFewThreats(j)) { GetEntPropVector(j, Prop_Send, "m_vecOrigin", TOrigin); new Float:distance = GetVectorDistance(TOrigin, Origin); new String:defib[32]; if (IsValidEdict(GetPlayerWeaponSlot(j, 3))) { GetEdictClassname(GetPlayerWeaponSlot(j, 3), defib, sizeof(defib)); if (distance > 100 && distance < 800) { if (StrEqual(defib, "weapon_defibrillator")) { ScriptCommand(j, "script", "CommandABot({cmd=1,pos=Vector(%f,%f,%f),bot=GetPlayerFromUserID(%i)})", Origin[0], Origin[1], Origin[2], GetClientUserId(j)); break; } } else if (distance < 100) { if (StrEqual(defib, "weapon_defibrillator") && ChangePlayerWeaponSlot(j, 3)) { decl Float:EyePos[3], Float:AimOnDeadSurvivor[3], Float:AimAngles[3]; GetClientEyePosition(j, EyePos); MakeVectorFromPoints(EyePos, Origin, AimOnDeadSurvivor); GetVectorAngles(AimOnDeadSurvivor, AimAngles); TeleportEntity(j, NULL_VECTOR, AimAngles, NULL_VECTOR); CreateTimer(0.2, AllowDefib, GetClientUserId(j), TIMER_FLAG_NO_MAPCHANGE); break; } } } } } break; } return Plugin_Continue; } // Bot AI Manipulations Functions public Action:RegroupBots(client, args) { decl Float:Origin[3]; GetClientAbsOrigin(client, Origin); for (new i = 1; i <= MaxClients; i++) { if (IsSurvivor(i) && IsPlayerAlive(i) && !IsIncapacitated(i) && !IsAssistNeeded() && ClientHasFewThreats(i)) { ScriptCommand(i, "script", "CommandABot({cmd=1,pos=Vector(%f,%f,%f),bot=GetPlayerFromUserID(%i)})", Origin[0], Origin[1], Origin[2], GetClientUserId(i)); } } } public Action:AttackSI(client, args) { if (!IsSurvivor(client)) return; new target = GetClientAimTarget(client); if (!IsInfected(target)) return; for (new i = 1; i <= MaxClients; i++) { if (IsSurvivor(i) && IsPlayerAlive(i) && !IsIncapacitated(i) && !IsAssistNeeded()) { ScriptCommand(i, "script", "CommandABot({cmd=0,bot=GetPlayerFromUserID(%i),target=GetPlayerFromUserID(%i)})", GetClientUserId(i), GetClientUserId(target)); } } } public Action:RunAway(client, args) { if (!IsSurvivor(client)) return; new target = GetClientAimTarget(client); if (!IsInfected(target)) return; for (new i = 1; i <= MaxClients; i++) { if (IsSurvivor(i) && IsPlayerAlive(i) && !IsIncapacitated(i) && !IsAssistNeeded()) { ScriptCommand(i, "script", "CommandABot({cmd=2,bot=GetPlayerFromUserID(%i),target=GetPlayerFromUserID(%i)})", GetClientUserId(i), GetClientUserId(target)); } } } // This only fires if we have Left4Downtown2! public Action:L4D2_OnFindScavengeItem(client, &item) { if (!item) { decl Float:Origin[3], Float:TOrigin[3]; if (MedsArray != INVALID_HANDLE) { new iWeapon = GetPlayerWeaponSlot(client, 3); if (iWeapon > MaxClients) { new String:weapon[32]; if (IsValidEdict(GetEdictClassname(GetPlayerWeaponSlot(client, 3), weapon, sizeof(weapon)))) { if (StrEqual(weapon, "weapon_defibrillator") || StrEqual(weapon, "weapon_first_aid_kit")) { return Plugin_Continue; } } } for (new i = 0; i <= GetArraySize(MedsArray) - 1; i++) { GetEntPropVector(GetArrayCell(MedsArray, i), Prop_Send, "m_vecOrigin", Origin); GetEntPropVector(client, Prop_Send, "m_vecOrigin", TOrigin); new Float:distance = GetVectorDistance(TOrigin, Origin); if (distance < 300) { item = GetArrayCell(MedsArray, i); return Plugin_Changed; } } } } return Plugin_Continue; } // Functions to allow the Bot to use Defibs public Action:AllowDefib(Handle:Timer, any:userid) { new client = GetClientOfUserId(userid); shoot[client] = STARTSHOOTING; } public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon) { if (IsSurvivor(client) && IsPlayerAlive(client) && IsFakeClient(client)) { new defib = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon"); if (IsValidEntity(defib)) { decl String:classname[128]; GetEntityClassname(defib, classname, sizeof(classname)); if (defib == GetPlayerWeaponSlot(client, 3) && StrEqual(classname, "weapon_defibrillator")) { if (shoot[client] == STARTSHOOTING) { buttons |= IN_ATTACK; } else if (shoot[client] == STOPSHOOTING) { buttons &= ~IN_ATTACK; } } } } return Plugin_Continue; } // Event Hooks so we can reset bots and prevent them from being stuck in the trying to defib state public Action:Event_DefibUsed(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); if (IsSurvivor(client) && IsFakeClient(client)) { shoot[client] = STOPSHOOTING; CreateTimer(0.4, ResetBotAI, GetClientUserId(client)); } } public Action:Event_DefibFailed(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); if (IsSurvivor(client) && IsFakeClient(client)) { shoot[client] = STOPSHOOTING; CreateTimer(6.0, ResetBotAI, GetClientUserId(client)); } } public Action:ResetSurvivorAI(client, args) { for (new i = 1; i <= MaxClients; i++) { if (IsSurvivor(i) && IsPlayerAlive(i) && !IsIncapacitated(i) && !IsAssistNeeded() && ClientHasFewThreats(i)) { ScriptCommand(i, "script", "CommandABot({cmd=3,bot=GetPlayerFromUserID(%i)})", GetClientUserId(i)); } } } public Action:ResetBotAI(Handle:Timer, any:userid) { new client = GetClientOfUserId(userid); if (IsSurvivor(client) && IsFakeClient(client)) { shoot[client] = STOPSHOOTING; ScriptCommand(client, "script", "CommandABot({cmd=3,bot=GetPlayerFromUserID(%i)})", GetClientUserId(client)); } } // Stock functions, bools, etc stock bool:IsIncapacitated(client) { if (GetEntProp(client, Prop_Send, "m_isIncapacitated", 1) > 0) return true; return false; } stock bool:ChangePlayerWeaponSlot(Client, weaponslot) { new iWeapon = GetPlayerWeaponSlot(Client, weaponslot); if (iWeapon > MaxClients) { new String:weapon[32]; if (IsValidEdict(GetEdictClassname(GetPlayerWeaponSlot(Client, 3), weapon, sizeof(weapon)))) { if (StrEqual(weapon, "weapon_defibrillator")) { FakeClientCommand(Client, "use weapon_defibrillator"); return true; } } } return false; } stock bool:IsPlayerHeld(client) { new jockey = GetEntPropEnt(client, Prop_Send, "m_jockeyAttacker"); new charger = GetEntPropEnt(client, Prop_Send, "m_pummelAttacker"); new hunter = GetEntPropEnt(client, Prop_Send, "m_pounceAttacker"); new smoker = GetEntPropEnt(client, Prop_Send, "m_tongueOwner"); if (jockey > 0 || charger > 0 || hunter > 0 || smoker > 0) { return true; } return false; } stock bool:IsAssistNeeded() { for (new i = 1; i <= MaxClients; i++) { if (IsSurvivor(i)) { if (IsIncapacitated(i) || IsPlayerHeld(i)) { return true; } } } return false; } stock bool:IsDefibOwned(defib) { for (new i = 1; i <= MaxClients; i++) { if (IsSurvivor(i)) { if (GetPlayerWeaponSlot(i, 3) == defib) { return true; } } } return false; } stock bool:ClientHasFewThreats(client) { if (IsSurvivor(client)) { new threats = GetEntProp(client, Prop_Send, "m_hasVisibleThreats"); if (threats <= 0) { return true; } } return false; } stock ScriptCommand(client, const String:command[], const String:arguments[], any:...) { new String:vscript[PLATFORM_MAX_PATH]; VFormat(vscript, sizeof(vscript), arguments, 4); new flags = GetCommandFlags(command); SetCommandFlags(command, flags^FCVAR_CHEAT); FakeClientCommand(client, "%s %s", command, vscript); SetCommandFlags(command, flags | FCVAR_CHEAT); } stock bool:IsSurvivor(client) { if (client > 0 && client <= MaxClients && IsClientInGame(client) && GetClientTeam(client) == 2) { return true; } return false; } stock bool:IsInfected(client) { if (client > 0 && client <= MaxClients && IsClientInGame(client) && GetClientTeam(client) == 3) { return true; } return false; }
  2. Про100Максим TWC

    Как понял я и думаю согласен со мной саинт, Нужно убрать команду !team чтобы всякие школьники , да и не школьники, многие хорошие игроки Всм не хотят играть либо за выживших так и иза заразу, постоянно дисбаланс как то раз вообще было напротяжений пол карты центра , я и 2 плэй бсма против 9 игроков lol
  3. Про100Максим TWC

    Хохохо, как смешно и глупо, не соображаешь в серверах , не лезь, я хоть и не постоянно контролирую свои серверы и не держу их, хотя раньше было такое, но по плагинам знаю всё
  4. Про100Максим TWC

    Согласен С Лёхой, все его слова чистая правда, а ты приколист держал бы рот на замке , ты вообще играешь на версусах ? мне кажется нет , и не решай за Буллета что ему делать , сам решит убирать !model или нет , если ты на коопе отвисаешь то на версусы не лезь, всё что ты там можешь это показать какой ты вип или нуб, випки согласен украшают нуба, но всё равно этот человек с випкой остается нубом, по скелету мне тоже сначала казалось что он просто випарский нуб, но когда я посмортел за его игрой, оказалось всё иначе, короче Приколист сиди и помалкивай
  5. Про100Максим TWC

    С нововедениемц Стиля HS , а Именно вместо аптечек , таблетки, а вместо всех оружий, только узи , хром дробовики и 1 снапа, Сервера стали себя странно вести,цЗахожу на версус 6 на 6 , работает, выхожу из убеги, Диссконект, и на 10 на 10 тоже самое , как и 8 на 8 , пожалуиста исправьте, думаю с этим цсталкисваюсь не только я
  6. Про100Максим TWC

    Перезапустите сервер 10 на 10, он выдаеёт STeam Validation rejected ,
  7. Про100Максим TWC

    Эмм, а Статистику зачем было отключать ?)) Спасибо Буллет что прочитали Чат Где я сказал, почему бы не отключить пару серверов для стабильной работы :lol3:
  8. Про100Максим TWC

    Не могу найти на форуме даже по поиску нормальный рабочий Autoupdater для игры, скиньте кто нибудь, будьте добры :thx:
  9. Про100Максим TWC

    я тоже готов:)
  10. Про100Максим TWC

    ммм весьма интересно)
  11. Про100Максим TWC

    :thx:
  12. Про100Максим TWC

    l4dafkfix.smx l4dafkfix.sp , Влад, может эти плагины помогут вам с дефибами ? :lol3: :|
  13. Про100Максим TWC

    :wink: - или же можно выполнить чтото типо такого :wink: ЛУчших думаю предостаточно :lol3:
  14. Про100Максим TWC

    Спасибо, но , чтото оно не хочет запускатся, запустил я его, но он пишет error while reading patchlst , сделал ещё кое кто, зашёл в папку с игрой , папка left 4 dead 2 , документ steam , и вписал вместо patchversion 2.1.0.8 , 2.1.3.7 , но меня выкидиывает из игры, вобщем чтото updater не работает
  15. Про100Максим TWC

    Удачки всем :good2: , скиньте потом хоть видосик ) , позырькаю на досуге :wink:
  16. Про100Максим TWC

    1, играю под ником (ocg) Fataly_Fox 2 87.117.16.243 3 нечаянно написал в чат завипать, видимо в слове випать, скрытый мат <цензура>, 4, буду знать, больше не буду, снимите пожалуиста
  17. Про100Максим TWC

    влезаешь куда ненадо , Катя
  18. Про100Максим TWC

    Видимо убрали, потому что многих бесит как разрывные патры,их заглушают )
  19. Про100Максим TWC

    ему уже давали перманент, хз че он там сделал, заплатил или поныл..скоро еще один получит. ой ой . не хочу показаться неадыкватом но , Диана засунь свое мнение .себе подальше
  20. Про100Максим TWC

    Cервера BCM – это, прежде всего, общество честных в игре и уважающих друг друга людей. Те, кто не принадлежат к вышеописанному обществу, отправляются в бан (лишаются доступа к серверам). ты вообще не встревай в эти дела .
  21. Про100Максим TWC

    и ты вообще игрок сервера афтер лайф, ты оочень редко нам всме, так что нефиг судить то вчём ты даже не участвовала
  22. Про100Максим TWC

    ну , извини меня, держать компьютеры включёнными из года в год тоже не полезно для них, особенно если оперативка или чтото другое , слабенькое, да согласен ,лагать может 3-4- может 7 дней,потом становится всё ном, но всё же, компам или компу держащиму сервер, тоже свойственно перегреватся, из за ежедневной работы
  23. Про100Максим TWC

    даа, я тоже вчера стал жертвой мута, точнее мы с огумом, и дело было так На Всм Versus 5 ом, 2 день подряд страшно лагает, и огум задал такой вопрос, почему мол лагает, я начал некоторые обьяснения , пару сообщений, и на тебе , и загфлянув в мут лист,оо опять приколист lol обьясни друг мой где мы нафлудили с огумом :censored: то ?