Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Урок Actor's Chat Bubble, как на Аризоне

Статус
В этой теме нельзя размещать новые ответы.

Snape

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

УСТАНОВКА

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);
}
2. Добавляем паблик для очистки
PHP:
forward ClearActorChatBubble(actorid);
public ClearActorChatBubble(actorid) Delete3DTextLabel(ActorInfo[actorid][ActorsText]), KillTimer(ActorInfo[actorid][aTimer]);
3. К переменным
PHP:
enum actor_info //конструкция
{
	Text3D:ActorsText,
	aTimer
}

new
 	AnActors[2], ActorInfo[MAX_ACTORS][actor_info]
;

new
	aPhrases[MAX_ACTOR_PHRASES][] = {

	{"Не бей меня, я сейчас вызову копов"},
	{"Отвали, придурок"},
	{"Какого хрена ты руками машешь?"},
	{"Отстань от меня, а то отхватишь"},
	{"Один прогиб и ты погиб"}

};
4. К макросам
PHP:
#define MAX_ACTOR_PHRASES 5 //максимальное к-лво фраз для ботов
5. В OnGameModeInit
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);
А в OnGameModeExit
PHP:
DestroyActor(AnActors[0]);
DestroyActor(AnActors[1]);
6. В OnPlayerGiveDamageActor
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)
actorid - id актера
text[] - текст
color - цвет
Float:drawdistance - расстояние на котором виден текст
expiretime - время, через которое текст исчезнет

ВИДЕО

ПРИМЕЧАНИЕ
1. SetActorInvulnerable(actorid, false); отключает бессмертие актера, т.к. в противном случае колбек OnPlayerGiveDamageActor не работает
2. Добавляя новые фразы, не забывайте увеличивать размер макроса MAX_ACTOR_PHRASES

СКАЧАТЬ FS ДЛЯ ТЕСТА


Автор я. Комментируйте, обращайтесь. Помогу, чем смогу.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу