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

Ошибка в register_touch

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

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

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

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

Ошибка в register_touch

Сообщение fixteam » 02 апр 2019, 17:47

Помогите найти ошибку. Нужно чтоб ловило касание энтити и объекта. Через Fm_Touch знаю как можно сделать, но интересует именно register_touch.
Код: Выделить всё
public plugin_init()
{
    register_touch("TESTIM","*","TouchTest")
    register_clcmd("say spawn","CreateTestEnt")
}

public TouchTest(testid,id)
{
    client_print(0,print_chat,"TESTIM touch detected")
    return PLUGIN_HANDLED
}


public CreateTestEnt(id)
{
    //
    //тут беру координаты игрока для спавна энта и тд, но это не важно
    //
    
    new Ent 
= create_entity("info_target")
    entity_set_string(Ent, EV_SZ_classname, "TESTIM")
    entity_set_model(Ent, "models/test.mdl")
    entity_set_origin(Ent, StartOrigin)
    new Float:MinBox[3] = {-10.0, -10.0, -10.0}
    new Float:MaxBox[3] = {10.0, 10.0, 10.0}
    entity_set_vector(Ent, EV_VEC_mins, MinBox)
    entity_set_vector(Ent, EV_VEC_maxs, MaxBox)
    entity_set_int(Ent, EV_INT_solid, 2)
    entity_set_int(Ent, EV_INT_movetype, 5)
    new Float:Velocity[3]
    new myvelocity = 900 
    VelocityByAim
(id, myvelocity, Velocity)
    entity_set_vector(Ent, EV_VEC_velocity, Velocity)


Добавлено спустя 38 секунд:
Вылетает игра постоянно, что не так? Что я только не пробовал, и вместо класснейма в реге тоуча ставил "info_target" - все одно, либо вылет, либо 0 реакции
Последний раз редактировалось fixteam 02 апр 2019, 21:06, всего редактировалось 1 раз.
Аватара пользователя
fixteam
 
Сообщения: 168
Зарегистрирован: 19 фев 2018, 20:08
Откуда: Москва
Благодарил (а): 28 раз.
Поблагодарили: 1 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, C++, Python, Js, Php

Re: Ошибка в register_touch

Сообщение Mistrick » 02 апр 2019, 19:09

register_touch - вызывается в каждом кадре, пока вы в таче с объектом. Вы себе примерно 100+ сообщений в секунду шлете.
Аватара пользователя
Mistrick
Скриптер
 
Сообщения: 2940
Зарегистрирован: 04 ноя 2012, 18:15
Благодарил (а): 43 раз.
Поблагодарили: 1247 раз.
Языки программирования: PAWN
С/С++(few above zero)

Re: Ошибка в register_touch

Сообщение fixteam » 02 апр 2019, 19:40

Но я же приостанавливаю отправку после первого сообщения (return PLUGIN_HANDLED)

Добавлено спустя 2 минуты 46 секунд:
Как исправить тогда, не подскажете?

Добавлено спустя 3 минуты 9 секунд:
Проблема вроде не в этом. Я пробовал сразу удалять энтити при первом контакте remove_entity(testid) и тоже самое. Проблема не в частоте кадров и "перегрузке" сервера
Аватара пользователя
fixteam
 
Сообщения: 168
Зарегистрирован: 19 фев 2018, 20:08
Откуда: Москва
Благодарил (а): 28 раз.
Поблагодарили: 1 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, C++, Python, Js, Php

Re: Ошибка в register_touch

Сообщение Mistrick » 02 апр 2019, 19:47

fixteam, у вас клиент отлетает, а не сервер перегружает.
Но я же приостанавливаю отправку после первого сообщения (return PLUGIN_HANDLED)

Вы ничего не приостанавливаете, вы блочите вызов дальше в движок. А на клиент каждый кадр шлет сообщение.
Аватара пользователя
Mistrick
Скриптер
 
Сообщения: 2940
Зарегистрирован: 04 ноя 2012, 18:15
Благодарил (а): 43 раз.
Поблагодарили: 1247 раз.
Языки программирования: PAWN
С/С++(few above zero)

Re: Ошибка в register_touch

Сообщение xbass13 » 02 апр 2019, 19:57

Это кусок плагина, вопрос: а прекеш "models/test.mdl" в сорце присутствует?

Что есть RocketEnt в entity_set_vector(RocketEnt, EV_VEC_velocity, Velocity)? Спавним одно, запускаем другое. RocketEnt существует?
Аватара пользователя
xbass13
 
Сообщения: 96
Зарегистрирован: 13 июн 2012, 21:20
Благодарил (а): 36 раз.
Поблагодарили: 35 раз.
Опыт программирования: Больше трех лет
Языки программирования: pawn, c++, js, php

Re: Ошибка в register_touch

Сообщение fixteam » 02 апр 2019, 21:22

Исправил* Это я менял код чтоб сюда запостить и было проще и понятнее, поэтому забыл кое-что поменять/упростить

Добавлено спустя 8 минут 7 секунд:
Mistrick писал(а):fixteam, у вас клиент отлетает, а не сервер перегружает.
Но я же приостанавливаю отправку после первого сообщения (return PLUGIN_HANDLED)

Вы ничего не приостанавливаете, вы блочите вызов дальше в движок. А на клиент каждый кадр шлет сообщение.

Я попробовал так
Код: Выделить всё
new n = 0
public TouchTest
(testid,id)
{
    if (n==0){
        n++
        client_print(0,3,"TOUCH!!!")
    }

Тоже вылет, хотя вроде такая конструкция может произвестись только один раз.

Добавлено спустя 7 минут 5 секунд:
Дело явно не в перегрузке клиента

Добавлено спустя 36 секунд:
Может я сам рег задал не верно, или энтити создается какое-то не такое?
Аватара пользователя
fixteam
 
Сообщения: 168
Зарегистрирован: 19 фев 2018, 20:08
Откуда: Москва
Благодарил (а): 28 раз.
Поблагодарили: 1 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, C++, Python, Js, Php

Re: Ошибка в register_touch

Сообщение артист666 » 02 апр 2019, 21:33

Выведи сообщение в консоль сервера.
Последний раз редактировалось артист666 03 апр 2019, 05:44, всего редактировалось 1 раз.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Ошибка в register_touch

Сообщение fixteam » 02 апр 2019, 21:58

артист666 писал(а):Dsdtlb cjj,otybt d rjycjkm cthdthf/

Vivel. Vse ravno viletaet :-D
Аватара пользователя
fixteam
 
Сообщения: 168
Зарегистрирован: 19 фев 2018, 20:08
Откуда: Москва
Благодарил (а): 28 раз.
Поблагодарили: 1 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, C++, Python, Js, Php

Re: Ошибка в register_touch

Сообщение xbass13 » 02 апр 2019, 22:19

В не чищенной версии смотреть надо. все работает
Код: Выделить всё
#define PLUGIN  "TESTIM"
#define VERSION "0.1"
#define AUTHOR  "Xbass13"

#include <amxmodx>
#include <engine>
#include <fakemeta>


public plugin_precache()
{
    
register_plugin(PLUGINVERSIONAUTHOR)

    
precache_model("models/winebottle.mdl")
}

public 
plugin_init()
{
    
register_touch("TESTIM","*","TouchTest")
    
register_clcmd("say spawn","CreateTestEnt")
}

public 
TouchTest(testid,id)
{
    
client_print(0,print_chat,"TESTIM touch detected")
    return 
PLUGIN_HANDLED
}


public 
CreateTestEnt(id)
{
    
//
    //тут беру координаты игрока для спавна энта и тд, но это не важно
    //
    
new Float:StartOrigin[3]
    
//entity_get_origin( id, StartOrigin )
    
pev(id,pev_origin,StartOrigin)


    new 
Ent create_entity("info_target")
    
entity_set_string(EntEV_SZ_classname"TESTIM")
    
entity_set_model(Ent"models/winebottle.mdl")
    
entity_set_origin(EntStartOrigin)
    new 
Float:MinBox[3] = {-10.0, -10.0, -10.0}
    new 
Float:MaxBox[3] = {10.010.010.0}
    
entity_set_vector(EntEV_VEC_minsMinBox)
    
entity_set_vector(EntEV_VEC_maxsMaxBox)
    
entity_set_int(EntEV_INT_solid2)
    
entity_set_int(EntEV_INT_movetype5)
    new 
Float:Velocity[3]
    new 
myvelocity 900 
    VelocityByAim
(idmyvelocityVelocity)
    
entity_set_vector(EntEV_VEC_velocityVelocity)
}
 
Аватара пользователя
xbass13
 
Сообщения: 96
Зарегистрирован: 13 июн 2012, 21:20
Благодарил (а): 36 раз.
Поблагодарили: 35 раз.
Опыт программирования: Больше трех лет
Языки программирования: pawn, c++, js, php

Re: Ошибка в register_touch

Сообщение fixteam » 05 апр 2019, 20:59

Вылетает. Пытался сделать register_touch("player","*","TouchTest"), тоже вылетает.
Аватара пользователя
fixteam
 
Сообщения: 168
Зарегистрирован: 19 фев 2018, 20:08
Откуда: Москва
Благодарил (а): 28 раз.
Поблагодарили: 1 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, C++, Python, Js, Php

След.

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

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

Сейчас этот форум просматривают: Bing [Bot] и гости: 8