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

register_touch не отслеживается  [Решено]

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

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

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

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

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

register_touch не отслеживается

Сообщение longwayhome » 24 мар 2017, 16:28

Код: Выделить всё
#include <amxmodx>
#include <amxmisc>

#include <engine>
#include <fakemeta>

#include <float>

#define PLUGIN "1"
#define VERSION "2"
#define AUTHOR "3"

new classnm[] = {"ent_cock"};
new model[] = {"models/chick.mdl"};

public plugin_init() {
    
    register_plugin
(PLUGIN, VERSION, AUTHOR);
    
    register_touch
(classnm, "player", "regtouch");
    
    register_clcmd
("say /cock", "spawnCock");
    register_clcmd("say cock", "spawnCock");
}

public plugin_precache() {
    
    precache_model
(model);
}
 

public spawnCock
(id) {
    
    
// Trying to get spawn position
    new origin[3];
    new Float:forigin[3];
    
    get_user_origin
(id, origin, 4);
    
    forigin
[0] = float(origin[0]);
    forigin[1] = float(origin[1]);
    forigin[2] = float(origin[2]);
    
    
// Creation of entity
    new cock = create_entity("info_target");
    
    if 
(!is_valid_ent(cock)) {
        
        client_print
(0, print_chat, "error");
        return PLUGIN_HANDLED;
    }
    
    entity_set_string
(cock, EV_SZ_classname, classnm);
    
    entity_set_size
(cock, Float:{-250.0,-250.0,-250.0}, Float:{250.0,250.0,250.0});
    entity_set_model(cock, model);
    
    
//entity_set_int(cock, EV_INT_solid, 2);
    entity_set_int(cock, EV_INT_solid, SOLID_TRIGGER);
    entity_set_edict(cock, EV_ENT_owner, id);
    
    entity_set_float
(cock, EV_FL_takedamage, 1.0);
    entity_set_float(cock, EV_FL_max_health, 100.0);
    
    entity_set_origin
(cock, forigin);
    DispatchSpawn(cock);
    
    return PLUGIN_HANDLED
;
}

public regtouch(cock, id) {
    
    client_print
(0, print_chat, "TOUCHED");
    return PLUGIN_HANDLED;
}


Плагин создает курицу в месте выстрела игрока, если тот введет в чат /cock или просто cock. Проблема в том, что тач игрока и курицы не отлавливается, хотя тач weaponbox и игрока отлавливается нормально. В чём может быть проблема?
Аватара пользователя
longwayhome
 
Сообщения: 6
Зарегистрирован: 24 мар 2017, 16:24
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn
C++

Re: register_touch не отслеживается

Сообщение Subb98 » 24 мар 2017, 17:25

Код: Выделить всё
register_touch("player"classnm"regtouch"); 

Код: Выделить всё
public regtouch(idcock) { 
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: register_touch не отслеживается

Сообщение longwayhome » 24 мар 2017, 17:31

Subb98 писал(а):
Код: Выделить всё
register_touch("player", classnm, "regtouch");

Код: Выделить всё
public regtouch(id, cock) {

Все равно не работает. Я уже писал, что с дефолтными энтити работает, но не с созданным. Плюс, некоторые параметры не применяются. Например, SOLID_* не работает, т.е. через курицу можно спокойно пройти.
Аватара пользователя
longwayhome
 
Сообщения: 6
Зарегистрирован: 24 мар 2017, 16:24
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn
C++

Re: register_touch не отслеживается

Сообщение Subb98 » 24 мар 2017, 17:35

longwayhome, значит, проблема в создании entity, что-то делаете не так. Рекомендую посмотреть плагины, которые работают с объектами таким образом.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: register_touch не отслеживается

Сообщение longwayhome » 24 мар 2017, 17:42

Subb98 писал(а):longwayhome, значит, проблема в создании entity, что-то делаете не так. Рекомендую посмотреть плагины, которые работают с объектами таким образом.

Делал по этому туториалу: Вы должны зарегистрироваться, чтобы видеть ссылки.
Еще этот плагин рассматривал: Вы должны зарегистрироваться, чтобы видеть ссылки. ... 27?t=52927
Там еще много подобного есть в сети. Методы создания такие же, как у других людей, с отличием только в том, что у меня это почему-то не работает. Причем многие тоже жаловались на форумах, что тач не ловится.
Аватара пользователя
longwayhome
 
Сообщения: 6
Зарегистрирован: 24 мар 2017, 16:24
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn
C++

Re: register_touch не отслеживается

Сообщение Xelson » 24 мар 2017, 17:46

longwayhome, если курица будет нематериальна, то тач точно не будет ловиться. Покажите код создания курицы
Аватара пользователя
Xelson
 
Сообщения: 365
Зарегистрирован: 06 мар 2016, 14:41
Откуда: Беларусь
Благодарил (а): 16 раз.
Поблагодарили: 46 раз.
Опыт программирования: Больше трех лет

Re: register_touch не отслеживается

Сообщение Subb98 » 24 мар 2017, 17:48

longwayhome, в 2014-м году писал плагин бонусов для сервера, классы там были собственные и использовался этот же форвард, так что этот метод точно рабочий.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: register_touch не отслеживается

Сообщение longwayhome » 24 мар 2017, 17:48

Xelson писал(а):longwayhome, если курица будет нематериальна, то тач точно не будет ловиться. Покажите код создания курицы

Там прям в плагине есть блок с названием // Creation of entity
Аватара пользователя
longwayhome
 
Сообщения: 6
Зарегистрирован: 24 мар 2017, 16:24
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn
C++

Re: register_touch не отслеживается

Сообщение Subb98 » 24 мар 2017, 17:50

Вот функция создания entity. Кстати, я уже предполагаю, в чём вы ошиблись..

Код: Выделить всё
public TaskBonusSpawn()
{
    if((g_iOriginSize = ArraySize(g_aOrigin)) >= ORIGIN_MIN)
    {
        new iItem = random(g_iOriginSize), Float:fOrigin[3], pEnt;
        ArrayGetArray(g_aOrigin, iItem, fOrigin);
        pEnt = create_entity("info_target");
        if(pEnt)
        {
            new i = random_num(0, charsmax(BONUS_LIST));
            entity_set_string(pEnt, EV_SZ_classname, BONUS_LIST[i][Bonus_ClassName]);
            entity_set_model(pEnt, BONUS_LIST[i][Bonus_ModelPath]);
            entity_set_float(pEnt, EV_FL_animtime, get_gametime());
            entity_set_float(pEnt, EV_FL_framerate, 1.0);
            entity_set_int(pEnt, EV_INT_sequence, BONUS_LIST[i][Bonus_AnimationNum]);
            set_rendering(pEnt, kRenderFxGlowShell, BONUS_LIST[i][Bonus_RenderColor][0], BONUS_LIST[i][Bonus_RenderColor][1], BONUS_LIST[i][Bonus_RenderColor][2]);
            entity_set_int(pEnt, EV_INT_solid, SOLID_TRIGGER);
            entity_set_size(pEnt, DEF_MIN_SIZE, DEF_MAX_SIZE);
            entity_set_origin(pEnt, fOrigin);
            drop_to_floor(pEnt);
            emit_sound(pEnt, CHAN_VOICE, SND_SPAWN, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
            ArrayDeleteItem(g_aOrigin, iItem);
        }
    }
}
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: register_touch не отслеживается

Сообщение Xelson » 24 мар 2017, 17:51

longwayhome,
там утечка памяти в строке с созданием ентити. Allocstring надо кешировать в переменную.
Аватара пользователя
Xelson
 
Сообщения: 365
Зарегистрирован: 06 мар 2016, 14:41
Откуда: Беларусь
Благодарил (а): 16 раз.
Поблагодарили: 46 раз.
Опыт программирования: Больше трех лет

След.

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

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

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