Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Как пример код wS из урока.
testcallinggg Дата: Понедельник, 21.03.2016, 04:39:12 | Сообщение # 1
Сообщений: 3
Репутация: 0 [ +/- ]
Привет. Есть код:

Код
#include <sourcemod>
#include <sdktools_entoutput>
#include <sdktools_functions>

new Float:wS_Pos[3];

public OnPluginStart()
{
     HookEvent("player_spawn", player_spawn);
}

public OnMapStart()
{
     PrecacheModel("models/props/cs_office/vending_machine.mdl", true);
}

public player_spawn(Handle:event, const String:name[], bool:dontBroadcast)
{
     CreateTimer(1.0, CreateEnt_Timer, GetClientOfUserId(GetEventInt(event, "userid")));
}

public Action:CreateEnt_Timer(Handle:timer, any:i)
{
     GetClientAbsOrigin(i, wS_Pos);

     // Немного изменяем координату 'x', чтобы предмет был создан рядом с игроком, а не на его месте
     wS_Pos[0] += 80.0;

     new index = CreateEntityByName("prop_dynamic");
     if (index > 0)
     {
         SetEntityModel(index, "models/props/cs_office/vending_machine.mdl");
         DispatchKeyValueVector(index, "origin", wS_Pos);

         // Если бы это не сделали, то через предмет можно было проходить (solid 0) и OnTakeDamage не работало бы
         DispatchKeyValue(index, "solid", "6");

         DispatchSpawn(index);
         HookSingleEntityOutput(index, "OnTakeDamage", EntityOutput:OnTakeDamage_Func, false);

         PrintToChat(i, "Стреляйте по предмету");
     }
}

public OnTakeDamage_Func(const String:output[], caller, activator, Float:delay)
{
     if (activator > 0 && activator <= MaxClients && IsClientInGame(activator) && IsPlayerAlive(activator))
     {
         // Добавляем игроку, который нанес повреждение предмету, 1 hp
         new hp = GetClientHealth(activator) + 1;
         SetEntProp(activator, Prop_Send, "m_iHealth", hp);
      
         // Если hp игрока 105 или больше, то..
         if (hp > 104)
         {
             // Перестаем ловить момент, когда предмет получает повреждение
             UnhookSingleEntityOutput(caller, "OnTakeDamage", EntityOutput:OnTakeDamage_Func);

             // Устанавливаем предмету флаг '16 : Break on Touch'
             DispatchKeyValue(caller, "spawnflags", "16");

             // Ловим момент, когда игрок дотрагивается до предмета и он ломается
             HookSingleEntityOutput(caller, "OnBreak", EntityOutput:OnBreak_Func, true);

             // Говорим игроку, чтобы дотронулся до предмета
             PrintToChat(activator, "Теперь дотроньтесь до предмета");
         }
     }
}

public OnBreak_Func(const String:output[], caller, activator, Float:delay)
{
     if (activator > 0 && activator <= MaxClients)
     {
         // Предмет удалился, устанавливаем игроку 1 hp
         SetEntProp(activator, Prop_Send, "m_iHealth", 1);
     }
}


Как сделать так чтоб игрока на стопило когда он качается предмета? - так чтоб он коснулся к ему и даже не почувствовал этого, но OnBreak_Func сработало?
 
RunCrafting Дата: Пятница, 25.03.2016, 12:37:32 | Сообщение # 2
Сообщений: 52
Репутация: 0 [ +/- ]
Можно попонятнее, я не понял предложение. Тебе нужно чтобы не ставилось одно хп? Убери в коде эту строку: SetEntProp(activator, Prop_Send, "m_iHealth", 1);
 
  • Страница 1 из 1
  • 1
Поиск: