Snape
Ученик
Пользователи форума интересуются, как сделать, чтобы над головой актера, после удара, появлялась реакция в виде текста. Вот решение.
УСТАНОВКА
1. В любом месте мода, вставляем функцию
2. Добавляем паблик для очистки
3. К переменным
4. К макросам
5. В OnGameModeInit
А в OnGameModeExit
6. В OnPlayerGiveDamageActor
ОПИСАНИЕ ФУНКЦИИ
actorid - id актера
text[] - текст
color - цвет
Float:drawdistance - расстояние на котором виден текст
expiretime - время, через которое текст исчезнет
ВИДЕО
ПРИМЕЧАНИЕ
1. SetActorInvulnerable(actorid, false); отключает бессмертие актера, т.к. в противном случае колбек OnPlayerGiveDamageActor не работает
2. Добавляя новые фразы, не забывайте увеличивать размер макроса MAX_ACTOR_PHRASES
СКАЧАТЬ FS ДЛЯ ТЕСТА
Автор я. Комментируйте, обращайтесь. Помогу, чем смогу.
УСТАНОВКА
1. В любом месте мода, вставляем функцию
PHP:
stock SetActorChatBubble(actorid, text[], color, Float:drawdistance, expiretime) //expiretime в секундах
{
new Float:aPos[3];
GetActorPos(actorid, aPos[0],aPos[1],aPos[2]);
SetActorPos(actorid, aPos[0],aPos[1],aPos[2]); //при желании можно удалить
Delete3DTextLabel(ActorInfo[actorid][ActorsText]), KillTimer(ActorInfo[actorid][aTimer]);
ActorInfo[actorid][ActorsText] = Create3DTextLabel(text, color, aPos[0],aPos[1],aPos[2]+1.1, drawdistance, 0);
ActorInfo[actorid][aTimer] = SetTimerEx("ClearActorChatBubble", expiretime * 1000, false, "d", actorid);
}
PHP:
forward ClearActorChatBubble(actorid);
public ClearActorChatBubble(actorid) Delete3DTextLabel(ActorInfo[actorid][ActorsText]), KillTimer(ActorInfo[actorid][aTimer]);
PHP:
enum actor_info //конструкция
{
Text3D:ActorsText,
aTimer
}
new
AnActors[2], ActorInfo[MAX_ACTORS][actor_info]
;
new
aPhrases[MAX_ACTOR_PHRASES][] = {
{"Не бей меня, я сейчас вызову копов"},
{"Отвали, придурок"},
{"Какого хрена ты руками машешь?"},
{"Отстань от меня, а то отхватишь"},
{"Один прогиб и ты погиб"}
};
PHP:
#define MAX_ACTOR_PHRASES 5 //максимальное к-лво фраз для ботов
PHP:
AnActors[0] = CreateActor(23, -1051.1167,-1152.6777,127.7926,190.4605);
AnActors[1] = CreateActor(22, -1048.6301,-1155.0388,127.8110,180.2261);
SetActorInvulnerable(AnActors[0], false), SetActorInvulnerable(AnActors[1], false);
PHP:
DestroyActor(AnActors[0]);
DestroyActor(AnActors[1]);
PHP:
if(damaged_actorid == AnActors[0] || damaged_actorid == AnActors[1])
{
SetActorChatBubble(damaged_actorid, aPhrases[random(MAX_ACTOR_PHRASES)], 0xCDC673FF, 10.0, 2);
SetActorHealth(damaged_actorid, 255), SetActorHealth(damaged_actorid, 255);
}
PHP:
SetActorChatBubble(actorid, text[], color, Float:drawdistance, expiretime)
text[] - текст
color - цвет
Float:drawdistance - расстояние на котором виден текст
expiretime - время, через которое текст исчезнет
ВИДЕО
ПРИМЕЧАНИЕ
1. SetActorInvulnerable(actorid, false); отключает бессмертие актера, т.к. в противном случае колбек OnPlayerGiveDamageActor не работает
2. Добавляя новые фразы, не забывайте увеличивать размер макроса MAX_ACTOR_PHRASES
СКАЧАТЬ FS ДЛЯ ТЕСТА
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Автор я. Комментируйте, обращайтесь. Помогу, чем смогу.
Последнее редактирование:
