Что не так с этим кодом?

Тема в разделе "Программирование / Скриптинг", создана пользователем iamdss, 4 июл 2015.

  1. iamdss

    iamdss

    Сообщения:
    117
    Симпатии:
    0
    Снова доброго времени. Разбираю плагин EntControl, чтобы реализовать некоторые свои нужды, пока что учусь создавать ракету, летящую и наносящую урон. Для этого я сделал выжимку из кода указанного выше плагина. Ракета успешно создаётся, но не срабатывает действие при столкновении. Я обнаружил, что установленный хук

    Код:
    SDKHook(entity, SDKHook_StartTouch, RocketTouchHook);
    не срабатывает - RocketTouchHook ни разу не вызывается. В результате имеем забавный результат:

    http://www.youtube.com/watch?v=CSgJb58UifY

    (немного дёргает, но так уж записалось)

    Полный код этой злосчастной ракеты можно посмотреть здесь http://pastebin.com/jL15veMa

    Главным образом интересует вопрос - почему таки не срабатывает хук? Расширение на сервере установлено последней версии (то ли 2, то ли 2+). Заранее спасибо за любые подсказки.
     
  2. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    235
    Симпатии:
    568
    Возможно, что этот класс не поддерживает хук на касание. Проверьте через https://sm.alliedmods.net/new-api/sdkhooks/SDKHookEx.
    Код:
    if ( SDKHookEx(entity, SDKHook_StartTouch, RocketTouchHook) ) PrintToServer("hook successful"); else PrintToServer("hook failed");
     
    iamdss нравится это.
  3. iamdss

    iamdss

    Сообщения:
    117
    Симпатии:
    0
    Проверил - "hook successful". К тому же, этот код я взял полностью из того плагина, этот класс был включен для прочих игр, кроме cs и tf. В чём ещё могут быть грабли?
     
  4. iamdss

    iamdss

    Сообщения:
    117
    Симпатии:
    0
    Так какие ещё возможны варианты? Может ли не работать само хукающее расширение?
     
  5. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    235
    Симпатии:
    568
    Код:
    	if (gameMod == CSS || gameMod == CSGO)
    	{
    		entity = CreateEntityByName("hegrenade_projectile");
    	}
    	else if (gameMod == TF)
    	{
    		entity = CreateEntityByName("tf_projectile_rocket");
    	}
    	else if (gameMod == HL2MP || gameMod == OBSIDIAN)
    	{
    		entity = CreateEntityByName("rpg_missile");
    	}
    	else
    	{
    		entity = CreateEntityByName("rpg_missile");
    		//entity = CreateEntityByName("npc_grenade_frag");
    	}
    Код из версии 1.0.8. Видимо, проблема действительно в классе, поэтому его заменили на подходящий для этих целей.

    Хукающее расширение работает, вероятность того, что ошибка в нем, стремится к нулю.
     
    iamdss нравится это.
  6. iamdss

    iamdss

    Сообщения:
    117
    Симпатии:
    0
    Великолепно! Что бы без вас делал! Очередное спасибо!