Редактирование [CS:GO] REDIE (скин и возможность умереть).

Steammer

Участник
Сообщения
443
Реакции
187
Сам плагин: [CS:GO] Redie

Может кто сделает:
- чтобы "призраки" видели друг-друга (но живые игроки их не видели);
- была возможность поставить скин для "призрака" (скин видять только "призраки")
- чтобы "призрак" не был бессмертным, а когда он достигнет 1 хп - выполнялась команда "sm_redie", которая телепортирует его на место спавна.

И если возможно:
- телепорт через стену(на которую наведен прицел), либо реализовать это выдачей "noclip'a" на 1 секунду (желательно реализовать командой, чтобы была возможность сделать серверный бинд).

Буду благодарен всем за помощь.
 

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
- была возможность поставить скин для "призрака" (скин видять только "призраки")

Куда нибудь вверх после #include напиши следующее:

PHP:
#define GHOST "Путь к модели" // Путь к mdl скина.

public OnMapStart()
{
   new Handle:file = OpenFile("addons/sourcemod/configs/Redie/downloads.txt", "r");
   if(file == INVALID_HANDLE) SetFailState("Failed to open addons/sourcemod/configs/Redie/downloads.txt"); // Создай папку Redie в configs и файл downloads.txt, туда впиши пути модели для быстрой загрузки.
   decl String:path[PLATFORM_MAX_PATH];
   while(!IsEndOfFile(file) && ReadFileLine(file, path, PLATFORM_MAX_PATH))
   {
       TrimString(path);
       if(IsCharAlpha(path[0])) AddFileToDownloadsTable(path);
   }
   CloseHandle(file);

   PrecacheModel(GHOST); // Кеширование модели
}


Замени:
PHP:
public Action:Event_Player_Spawn(Handle:event, const String:name[], bool:dontBroadcast)
{
   new client = GetClientOfUserId(GetEventInt(event, "userid"));
   SDKHook(client, SDKHook_SetTransmit, Hook_SetTransmit);
   if(g_IsGhost[client])
   {
       g_IsGhost[client] = false;
   }
}
На >>
PHP:
public Action:Event_Player_Spawn(Handle:event, const String:name[], bool:dontBroadcast)
{
   new client = GetClientOfUserId(GetEventInt(event, "userid"));
   SDKHook(client, SDKHook_SetTransmit, Hook_SetTransmit);
   if(g_IsGhost[client])
   {
       g_IsGhost[client] = false;
       SetEntityModel(client, GHOST); // Выдаем модель игроку(призраку)
   }
}

По идеи должно работать.
 

Steammer

Участник
Сообщения
443
Реакции
187
Скина у "призрака" нет, не работает, скомплил и указал все верно, видно ли его - сказать тоже не могу, ибо нет скина.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
SetEntityModel(client, GHOST); // Выдаем модель игроку(призраку)
@Steammerr, это добавь после 187 и 239 строки (они идентичны):
C-подобный:
PrintToChat(client, "\x01[\x03Redie\x01] %t", "You are now a ghost");
PrecacheModel(GHOST); // Кеширование модели
PHP:
PrecacheModel(GHOST, true);
 

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
По-моему, это просто сброс состояния "призрака" в обычное. Так что, скин появится у "зомби".
А если поставить перед g_IsGhost[client] = false;

Вот так:

PHP:
SetEntityModel(client, GHOST);
g_IsGhost[client] = false;


Решил сам затестить... Скин выдается, но остается когда вы возрождаетесь.
̶П̶о̶ч̶е̶м̶у̶ ̶-̶ ̶п̶о̶н̶я̶т̶и̶я̶ ̶н̶е̶ ̶и̶м̶е̶ю̶.̶ ̶Т̶а̶м̶ ̶ж̶е̶ ̶в̶р̶о̶д̶е̶ ̶к̶а̶к̶ ̶с̶т̶о̶и̶т̶ ̶п̶р̶о̶в̶е̶р̶к̶а̶ ̶н̶а̶ ̶п̶р̶и̶з̶р̶а̶к̶а̶,̶ ̶т̶о̶г̶д̶а̶ ̶п̶о̶ч̶е̶м̶у̶?̶)̶
- Я понял. Режим призрака при возрождение убивали, чтобы в новом раунде его не было.
Тогда почему это не сделали в событии "конец раунда" - WTF?!

Решение:

̶П̶р̶и̶н̶у̶д̶и̶т̶е̶л̶ь̶н̶о̶ ̶в̶ы̶д̶а̶в̶а̶т̶ь̶ ̶с̶т̶а̶н̶д̶а̶р̶т̶н̶ы̶й̶ ̶с̶к̶и̶н̶ ̶и̶г̶р̶о̶к̶а̶м̶ ̶н̶е̶ ̶и̶м̶е̶ю̶щ̶и̶х̶ ̶п̶р̶и̶з̶р̶а̶к̶а̶ ̶п̶р̶и̶ ̶с̶п̶а̶в̶н̶е̶ ̶и̶г̶р̶о̶к̶а̶.̶

Ну или вместо этого..

PHP:
public Action:Event_Player_Spawn(Handle:event, const String:name[], bool:dontBroadcast)
{
   new client = GetClientOfUserId(GetEventInt(event, "userid"));
   SDKHook(client, SDKHook_SetTransmit, Hook_SetTransmit);
   if(g_IsGhost[client])
   {
       g_IsGhost[client] = false;
       SetEntityModel(client, GHOST);
   }
}

Делать это:

PHP:
public Action:Event_Player_Spawn(Handle:event, const String:name[], bool:dontBroadcast)
{
   new client = GetClientOfUserId(GetEventInt(event, "userid"));
   SDKHook(client, SDKHook_SetTransmit, Hook_SetTransmit);
   if(g_IsGhost[client])
   {
       g_IsGhost[client] = false;
   }
 
   if(!IsPlayerAlive(client))
   {
       SetEntityModel(client, GHOST);
   }
}

@AlmazON
PHP:
if(g_IsGhost[entity] && !g_IsGhost[client])
Не вижу я игроков... Не себя, не других(призраков).

Не знаю, у меня и без "true" всегда работало. Может так правильнее, вам виднее.
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Тогда почему это не сделали в событии "конец раунда" - WTF?!
Предусмотрительность для режимов, типа DM. Оффтоп
Не вижу я игроков
Там на этот случай отдельный баг. Функция невидимости хукается с каждым спавном... Да и ещё одна чаще положенного, как минимум. Короче, сервер грузится этой канителью. Вообще не стоит ставить такой мусор, а то лагов подбавит, если есть постоянные игроки и долгая карта.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
нафига такой плагин на дм?
Да даже через VIP-ку или или другой плагин возрождаешься на паблике - нужна видимость и "материальность".
Там разбираться надо, но написано с мыслью, как у тебя в подписи. Так что, на дополнения рассчитывать не приходится.
 

marafon4k

Участник
Сообщения
242
Реакции
19
Что в итоге нужно сделать, чтобы призраков видели тиммейты и живые и мертвые и модельку им можно было свою поставить или стандартная отображалась?
 
Сверху Снизу