Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.
Модераторы: Subb98, liFe iS GoOD
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
longwayhome » 24 мар 2017, 16:28
- Код: Выделить всё
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) {
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]);
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, 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++
Subb98 » 24 мар 2017, 17:25
- Код: Выделить всё
register_touch("player", classnm, "regtouch");
- Код: Выделить всё
public regtouch(id, cock) {
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
-
Subb98
-
- Сообщения: 5485
- Зарегистрирован: 24 мар 2011, 19:42
- Откуда: г. Пермь
- Благодарил (а): 1329 раз.
- Поблагодарили: 2343 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: PHP
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++
Subb98 » 24 мар 2017, 17:35
longwayhome, значит, проблема в создании entity, что-то делаете не так. Рекомендую посмотреть плагины, которые работают с объектами таким образом.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
-
Subb98
-
- Сообщения: 5485
- Зарегистрирован: 24 мар 2011, 19:42
- Откуда: г. Пермь
- Благодарил (а): 1329 раз.
- Поблагодарили: 2343 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: PHP
longwayhome » 24 мар 2017, 17:42
Subb98 писал(а):longwayhome, значит, проблема в создании entity, что-то делаете не так. Рекомендую посмотреть плагины, которые работают с объектами таким образом.
Делал по этому туториалу:
Вы должны зарегистрироваться, чтобы видеть ссылки.Еще этот плагин рассматривал:
Вы должны зарегистрироваться, чтобы видеть ссылки. ... 27?t=52927
Там еще много подобного есть в сети. Методы создания такие же, как у других людей, с отличием только в том, что у меня это почему-то не работает. Причем многие тоже жаловались на форумах, что тач не ловится.
-
longwayhome
-
- Сообщения: 6
- Зарегистрирован: 24 мар 2017, 16:24
- Благодарил (а): 2 раз.
- Поблагодарили: 0 раз.
- Опыт программирования: Около 3 месяцев
- Языки программирования: Pawn
C++
Xelson » 24 мар 2017, 17:46
longwayhome, если курица будет нематериальна, то тач точно не будет ловиться. Покажите код создания курицы
-
Xelson
-
- Сообщения: 365
- Зарегистрирован: 06 мар 2016, 14:41
- Откуда: Беларусь
- Благодарил (а): 16 раз.
- Поблагодарили: 46 раз.
- Опыт программирования: Больше трех лет
Subb98 » 24 мар 2017, 17:48
longwayhome, в 2014-м году писал плагин бонусов для сервера, классы там были собственные и использовался этот же форвард, так что этот метод точно рабочий.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
-
Subb98
-
- Сообщения: 5485
- Зарегистрирован: 24 мар 2011, 19:42
- Откуда: г. Пермь
- Благодарил (а): 1329 раз.
- Поблагодарили: 2343 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: PHP
longwayhome » 24 мар 2017, 17:48
Xelson писал(а):longwayhome, если курица будет нематериальна, то тач точно не будет ловиться. Покажите код создания курицы
Там прям в плагине есть блок с названием // Creation of entity
-
longwayhome
-
- Сообщения: 6
- Зарегистрирован: 24 мар 2017, 16:24
- Благодарил (а): 2 раз.
- Поблагодарили: 0 раз.
- Опыт программирования: Около 3 месяцев
- Языки программирования: Pawn
C++
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
Xelson » 24 мар 2017, 17:51
longwayhome,
там утечка памяти в строке с созданием ентити. Allocstring надо кешировать в переменную.
-
Xelson
-
- Сообщения: 365
- Зарегистрирован: 06 мар 2016, 14:41
- Откуда: Беларусь
- Благодарил (а): 16 раз.
- Поблагодарили: 46 раз.
- Опыт программирования: Больше трех лет
Вернуться в Скриптинг
Кто сейчас на конференции
Сейчас этот форум просматривают: Bing [Bot], Google [Bot] и гости: 4