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

Отключение спрайта (Луч смерти)  [Решено]

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

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

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

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

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

Отключение спрайта (Луч смерти)

Сообщение Vaas » 26 сен 2017, 14:17

Здравствуйте.
Возникла проблема со спрайтом луча (В просто народе называют "Луч смерти"), не могли бы подсказать, как сделать его отключение, к примеру отдельным форвардом, а лучше конечно переменной (или сделать отключение при убийстве лучом)

Код: Выделить всё
#include <amxmodx>
#include <fun>     
new sprSaber
                
public plugin_init
()
{
register_clcmd("say /luch", "test") 
}  

public plugin_precache
() sprSaber = precache_model("sprites/laserbeam.spr")  


public test
(id)
{
 
if(!is_user_alive(id)) return PLUGIN_HANDLED
  
new tid
[2];
tid[0] = id;
tid[1] = 1;  

set_task
(0.1,"lightsaber",0,tid,2,"a",300);

return PLUGIN_HANDLED                                                                                                        
}     


public lightsaber
(id[])
{
new vec[3];
new aimvec[3];
new lseffvec[3];
new length;                                        
new speed 
= 65;
get_user_origin(id[0],vec,1);
get_user_origin(id[0],aimvec,2);
lseffvec[0]=aimvec[0]-vec[0];
lseffvec[1]=aimvec[1]-vec[1];
lseffvec[2]=aimvec[2]-vec[2];
length=sqrt(lseffvec[0]*lseffvec[0]+lseffvec[1]*lseffvec[1]+lseffvec[2]*lseffvec[2]);
lseffvec[0]=lseffvec[0]*speed/length;
lseffvec[1]=lseffvec[1]*speed/length;
lseffvec[2]=lseffvec[2]*speed/length;  

new vorigin
[3];
new maxpl = get_maxplayers() +1;
new teama[32],teamv[32];
get_user_team(id[0],teama,31);

for(
new a = 1; a < maxpl; a++)
{
 
if(is_user_alive(a) != 0)
{
 
get_user_origin
(a,vorigin);
if (get_distance(vec,vorigin)<100)
{
if(
!= id[0])
{
  
get_user_team
(a,teamv,31);
if(!
equal(teama,teamv,2))
{
if(
id[1] != 0)
{
user_kill(a,id[0]);
new frag = get_user_frags(id[0]);                        
set_user_frags
(id[0], frag + 1); 

}                                                      
}
else if(id[1] == 2)
{
user_kill(a,id[0]);
new frag = get_user_frags(id[0]);
set_user_frags(id[0], frag + 1); 
}
}
}
}
}

// beam effect between point and entity
message_begin( MSG_BROADCAST,SVC_TEMPENTITY);                                                  
write_byte 
( 1 ); //TE_BEAMENTPOINT 1
write_short (id[0]); // ent
write_coord (lseffvec[0]+vec[0]); //end position
write_coord (lseffvec[1]+vec[1]);
write_coord (lseffvec[2]+vec[2]+10);
write_short (sprSaber); // sprite
write_byte (0); // start frame
write_byte (15); // frame rate in 0.1's
write_byte (1); // byte (life in 0.1's
write_byte (20); // line width in 0.1's
write_byte (5); // noise amplitude in 0.01's
write_byte (0); // RGB color
write_byte (200);                                                  
write_byte 
(0);
write_byte (255); // brightness
write_byte (10); // scroll speed in 0.1's
message_end();

return PLUGIN_CONTINUE;
}
      

public sqrt
(num)
{
new div = num;
new result = 1;

while (div > result) // end when div == result, or just below
{
div = (div + result) / 2; // take mean value as new divisor
result = num / div;
}

return div;
}
         


P/s в данном случае проблема в таске, set_task(0.1,"lightsaber",0,tid,2,"a",300); - ибо по окончанию таймера (300) - луч отключается
Последний раз редактировалось Vaas 27 сен 2017, 10:04, всего редактировалось 2 раз(а).
Аватара пользователя
Vaas
 
Сообщения: 47
Зарегистрирован: 25 май 2016, 16:02
Благодарил (а): 12 раз.
Поблагодарили: 8 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pascal
Pawn
Pawno
c++
php
js

Re: Отключение спрайта (Луч смерти)  [Решено]

Сообщение Lethargy » 26 сен 2017, 22:37

Все просто, отлавливаешь события убийства игрока этим лучом и вызываешь ту же функцию что и таск.
И ещё не забыть отключить сам таск.
Lawful evil ]:->

Были бы в языке pawn объекты, было бы круто. Почему нет объектов в павне?
Аватара пользователя
Lethargy
 
Сообщения: 179
Зарегистрирован: 12 мар 2017, 17:25
Благодарил (а): 34 раз.
Поблагодарили: 15 раз.
Языки программирования: За 3-4 часа любой язык

Re: Отключение спрайта (Луч смерти)

Сообщение Vaas » 27 сен 2017, 10:06

Lethargy писал(а):Все просто, отлавливаешь события убийства игрока этим лучом и вызываешь ту же функцию что и таск.
И ещё не забыть отключить сам таск.

Примерно так и сделал, получилось так, как хотел. Благодарю
Аватара пользователя
Vaas
 
Сообщения: 47
Зарегистрирован: 25 май 2016, 16:02
Благодарил (а): 12 раз.
Поблагодарили: 8 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pascal
Pawn
Pawno
c++
php
js


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11