Русское сообщество по скриптингу

Помогите с воскрешением игрока

Все вопросы по скриптингу для SourceMod, помощь в редактировании плагинов.
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптингу для SourceMod.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [pawn], в противном случае, если тег [pawn] не отображает ваш код, можно использовать тег [code].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sp плагина.

Помогите с воскрешением игрока

Сообщение 1_fps » 10 окт 2014, 08:30

Здравствуйте, помогите разобраться.
Вот код:
[pawn]
  1.  

  2. public Action:Hook_Player_Death(Handle:event, const String:name[], bool:dontBroadcast)

  3. {

  4.         new id = GetClientOfUserId(GetEventInt(event, "userid"));

  5.        

  6.         if(!IsPlayerAlive(id))

  7.         {

  8.                 decl Float:origin[3], Float:angels[3]

  9.                 GetClientAbsOrigin(id, origin)

  10.                 GetClientAbsAngles(id, angels)

  11.                 CS_RespawnPlayer(id)

  12.                 TeleportEntity(id, origin, NULL_VECTOR, NULL_VECTOR)

  13.                 PrintToChat(id, "\x04Вы были \x03Возро!ждены")

  14.         }

  15.         return Plugin_Handled

  16. }

  17.  
[/pawn]
В чем суть, игрок то вскрешается сразу после смерти на месте где он умер но он не может двигаться, только крутиться на месте, как решить данную проблему?
Аватара пользователя
1_fps
 
Сообщения: 35
Зарегистрирован: 22 июн 2013, 19:20
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6
Counter-Strike: GO

Re: Помогите с воскрешением игрока

Сообщение maks » 13 окт 2014, 18:05

Попробуй
Перенести телепортом немного выше origin[2] += 30;
Подсадить под нужную команду ChangeClientTeam(id, igct); (не факт что это нужно но для теста попробуй)
Дать ему хп SetEntProp(id, Prop_Send, "m_iHealth", 99);
Попробуй еще соспавнить ему пистолет (всякое бывает, может поможет)

Контрою не увлекаюсь и протестировать не могу (в л4д2 по другому производится). О результатах отпиши, еще что нибудь придумаем если не поможет.

[pawn]
  1. public Action:Hook_Player_Death(Handle:event, const String:name[], bool:dontBroadcast)

  2. {

  3.         new id = GetClientOfUserId(GetEventInt(event, "userid"));

  4.  

  5.         if(!IsPlayerAlive(id))

  6.         {

  7.                 decl Float:origin[3];

  8.                 GetClientAbsOrigin(id, origin);

  9.                 origin[2] += 30;

  10.  

  11.                 new igct = GetClientTeam(client);

  12.                 CS_RespawnPlayer(id);

  13.                 ChangeClientTeam(id, igct);

  14.                 if(IsPlayerAlive(id))

  15.                 {

  16.                         SetEntProp(id, Prop_Send, "m_iHealth", 99);

  17.                 }

  18.  

  19.                 TeleportEntity(id, origin, NULL_VECTOR, NULL_VECTOR);

  20.                 PrintToChat(id, "\x04Вы были \x03Возро!ждены");

  21.         }

  22.         return Plugin_Handled;

  23. }

  24.  
[/pawn]
Аватара пользователя
maks
 
Сообщения: 43
Зарегистрирован: 15 сен 2011, 11:04
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Опыт программирования: Около года
Языки программирования: left 4 dead 2

Re: Помогите с воскрешением игрока

Сообщение 1_fps » 14 окт 2014, 08:11

Увы, не помогло. игрок то спавнится но его не видн,о в воздухе висит только нож и все он не является ничем тобиш сквозь эту пустоту где якобы находится возражденный игрок спокойно можно пройти. и в таблице счета он также числится мертвым
Аватара пользователя
1_fps
 
Сообщения: 35
Зарегистрирован: 22 июн 2013, 19:20
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6
Counter-Strike: GO

Re: Помогите с воскрешением игрока

Сообщение maks » 14 окт 2014, 19:11

Попробуй соспавнить с 2 секундной задержкой.

[pawn]
  1. #pragma semicolon 1

  2. #include <sourcemod>

  3. #include <sdktools>

  4. #include <cstrike>

  5.  

  6. public OnPluginStart()

  7. {

  8.         HookEvent("player_death", Hook_Player_Death);

  9. }

  10.  

  11. public Action:TimerDeath(Handle:timer, any:client)

  12. {

  13.         if(client && IsClientInGame(client))

  14.         {

  15.                 if(!IsPlayerAlive(client))

  16.                 {

  17.                         CS_RespawnPlayer(client);

  18.                 }

  19.         }

  20.         return Plugin_Stop;

  21. }

  22.  

  23. public Action:Hook_Player_Death(Handle:event, const String:name[], bool:dontBroadcast)

  24. {

  25.         new id = GetClientOfUserId(GetEventInt(event, "userid"));

  26.  

  27.         if(id && !IsFakeClient(id))

  28.         {

  29.                 CreateTimer(2.0, TimerDeath, id);

  30.         }

  31.         return Plugin_Continue;

  32. }

  33.  

  34.  
[/pawn]
Аватара пользователя
maks
 
Сообщения: 43
Зарегистрирован: 15 сен 2011, 11:04
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Опыт программирования: Около года
Языки программирования: left 4 dead 2

Re: Помогите с воскрешением игрока

Сообщение 1_fps » 15 окт 2014, 02:44

Помогло, спасибо, как-то и не подумал про таймер.
Аватара пользователя
1_fps
 
Сообщения: 35
Зарегистрирован: 22 июн 2013, 19:20
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6
Counter-Strike: GO


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6