- Регистрация
- 17 Янв 2014
- Сообщения
- 255
- Лучшие ответы
- 0
- Репутация
- 39
Система визуального подтверждения попадания по игроку или по транспорту.
Возможности
- Изменение цвета хитмаркера при попадании в разные части тела игрока, транспорта, и при полном убийстве игрока.
- Отключение хитмаркера для всех видов оружия, включая спец оружие воздушного транспорта.
- Установка определенного звука при попадании.
- Настройка положение и размера хитмаркера.
- Включение/Выключение индикации попадания по игроку и по транспорту.
- Удалите старую систему если она есть.
- Скачайте архив Hitmarker.zip и разархивируйте его.
- Поместите файл Hitmarker.inc в папку include.
- Откройте ваш мод, и подключите #include <Hitmarker>
Использование
Definition
Тип изменение цвета
Pawn:
#define HITMARKER_KILLSHOTS 0 //При полном убийстве игрока
#define HITMARKER_VEHICLE_DAMAGE 1 //При попадании по транспорту
#define HITMARKER_BODYPART_TORSO 3 //При попадании по торсу
#define HITMARKER_BODYPART_GROIN 4 //При попадании по паху
#define HITMARKER_BODYPART_LEFT_ARM 5 //При попадании по левой руке
#define HITMARKER_BODYPART_RIGHT_ARM 6 //При попадании по правой руке
#define HITMARKER_BODYPART_LEFT_LEG 7 //При попадании по левой ноге
#define HITMARKER_BODYPART_RIGHT_LEG 8 //При попадании по правой ноге
#define HITMARKER_BODYPART_HEAD 9 //При попадании в голову
Pawn:
#define HITMARKER_WEAPON_FIST 0 //Урон получен кулаком
#define HITMARKER_DEATH_UNDER_VEHICLE 50 //Игрок умер под транспортом или от винтов вертолета
#define HITMARKER_ALL_EXPLOSION 51 //Игрок умер от взрыва
#define HITMARKER_AIR_VEHICLE_WEAPON_MINIGUN 52 //Игрок умер от спец оружие воздушного транспорта пулемет
#define HITMARKER_AIR_VEHICLE_WEAPON_ROCKETS 53 //Игрок умер от спец оружие воздушного транспорта ракета
Pawn:
#define HITMARKER_STANDARD_CROSSHAIR 0 //Изменение положение стандартного прицела
* Используется для огнестрельного оружия (ID: 22 - 33, 37 - 38)
#define HITMARKER_CENTRE_CROSSHAIR 1 //Изменение положение прицела по центру
* Используется для холодного оружия включая транспорт
Functions
Pawn:
Включить Hitmarker
HitmarkerEnabled(playerid);
Выключить Hitmarker
HitmarkerDisable(playerid);
Узнать статус хитмаркера
bool:HitmarkerStatus(playerid);
Вернет: false если выключен
Вернет: true если включен
Изменить цвет хитмаркера
HitmarkerColor(playerid, type, color);
Узнать текущий цвет хитмаркера
GetHitmarkerColor(playerid, type);
Выключить хитмаркер для определенного оружия
HitmarkerDisableWeapon(playerid, weaponid, bool:disable);
* При отключении огневого оружия, отключается оружие (ID: 18, 37)
* При отключении взрывного оружия, отключается оружие (ID: 16, 35, 36, 39, 51) Не распространяется на воздушный транспорт.
Узнать статус хитмаркера у определенного оружия
GetHitmarkerDisabledWeapon(playerid, weaponid);
Включить звук попадания
HitmarkerSoundDamage(playerid, soundid);
Узнать текущий звук попадания
GetHitmarkerSoundDamage(playerid);
Изменить положение хитмаркера
HitmarkerPosition(playerid, crosshair_type, Float:x, Float:y, Float:size_x, Float:size_y);
Узнать текущие положение хитмаркера
GetHitmarkerPosition(playerid, crosshair_type, &Float:x, &Float:y, &Float:size_x, &Float:size_y);
Включить индикацию пули по игроку
HitmarkerEnablePlayerDamage(playerid, bool:enable);
* По стандарту включено
Узнать статус индикации пули по игроку
GetHitmarkerEnablePlayerDamage(playerid);
Включить индикацию пули по транспорту
HitmarkerEnableVehicleDamage(playerid, bool:enable);
Узнать статус индикации пули по транспорту
GetHitmarkerEnableVehicleDamage(playerid);
Пример использования
Код:
CMD:Hitmarker(playerid)
{
if(HitmarkerStatus(playerid) == false) // Узнаем состояние хитмаркера
{
// Включаем хитмаркер
HitmarkerEnabled(playerid);
// Устанавливаем нужные цвета попадания
HitmarkerColor(playerid, HITMARKER_BODYPART_TORSO, 0xFFFFFFFF);
HitmarkerColor(playerid, HITMARKER_BODYPART_GROIN, 0x7CFC00FF);
HitmarkerColor(playerid, HITMARKER_BODYPART_LEFT_ARM, 0xFFA500FF);
HitmarkerColor(playerid, HITMARKER_BODYPART_RIGHT_ARM, 0xFFD700FF);
HitmarkerColor(playerid, HITMARKER_BODYPART_LEFT_LEG, 0x00BFFFFF);
HitmarkerColor(playerid, HITMARKER_BODYPART_RIGHT_LEG, 0x00FFFFFF);
HitmarkerColor(playerid, HITMARKER_BODYPART_HEAD, 0xFF00FFFF);
HitmarkerColor(playerid, HITMARKER_KILLSHOTS, 0xFF0000FF);
HitmarkerColor(playerid, HITMARKER_VEHICLE_DAMAGE, 0xB03060FF);
// Включаем индикацию урона по транспорту
HitmarkerEnableVehicleDamage(playerid, true);
// Отключаем индикацию урона оружием (ID: 5) - Бейсбольная бита
HitmarkerDisableWeapon(playerid, WEAPON_BAT, true);
// Отключаем индикацию урона наносимого воздушным транспортом при помощи пулемета
HitmarkerDisableWeapon(playerid, HITMARKER_AIR_VEHICLE_WEAPON_MINIGUN, true);
GameTextForPlayer(playerid, "Hitmarker ~g~~h~On", 1200, 4);
}
else
{
// Выключаем хитмаркер
HitmarkerDisable(playerid);
GameTextForPlayer(playerid, "Hitmarker ~r~~h~Off", 1200, 4);
}
return 1;
}
Готово!
Автор: Bren
Представляю систему Хитмаркера.
Хитмаркер это система визуального подтверждения попадания.
При стрельбе в игрока в прицеле будет отображаться крестик, что сигнализирует о попадание.
Хитмаркер это система визуального подтверждения попадания.
При стрельбе в игрока в прицеле будет отображаться крестик, что сигнализирует о попадание.
Типы отображение
PHP:
AimingCheck[playerid][3]
0 - Выключено
1 - Включено - появляется при попадании
2 - Включено - появляется когда у игрока очень мало ХП
Ну так приступим.
Ко всем new
PHP:
new Text:Aiming[MAX_PLAYERS][2], AimingCheck[MAX_PLAYERS][6], AimingText[11] = {92, 1, 47, 126, 110, 126, 47, 1, 92}, AimingTextR[16] = {126, 114, 126, 126, 104, 126, 92, 1, 47, 126, 110, 126, 47, 1, 92};
В OnPlayerConnect добавляем сам TextDraw
PHP:
AimingCheck[playerid][0] = 0;
AimingCheck[playerid][1] = 0;
AimingCheck[playerid][2] = GetTickCount()+500;//Меньшее значение иногда вызывает залипание маркера. Большое значение вызывает задержку появление маркера
AimingCheck[playerid][3] = 1; // 0 - Выкл | 1 - Вкл тип 1 | 2 Вкл тип 2
AimingCheck[playerid][4] = -1;//цвет (0xFFFF00FF)
AimingCheck[playerid][5] = 0;//проверка на спавн игрока (если у вас есть своя проверка замените на свою)
Aiming[playerid][0] = TextDrawCreate(332.5, 172.5, AimingText);
TextDrawBackgroundColor(Aiming[playerid][0], 0);
TextDrawFont(Aiming[playerid][0], 0);
TextDrawLetterSize(Aiming[playerid][0], 0.33, 0.7);
TextDrawColor(Aiming[playerid][0], AimingCheck[playerid][4]);
TextDrawSetOutline(Aiming[playerid][0], 0);
TextDrawSetProportional(Aiming[playerid][0], 1);
TextDrawSetShadow(Aiming[playerid][0], 1);
TextDrawSetSelectable(Aiming[playerid][0], 0);
Aiming[playerid][1] = TextDrawCreate(310.5, 214.0, AimingText);
TextDrawBackgroundColor(Aiming[playerid][1], 0);
TextDrawFont(Aiming[playerid][1], 0);
TextDrawLetterSize(Aiming[playerid][1], 0.46, 1.0);
TextDrawColor(Aiming[playerid][1], AimingCheck[playerid][4]);
TextDrawSetOutline(Aiming[playerid][1], 0);
TextDrawSetProportional(Aiming[playerid][1], 1);
TextDrawSetShadow(Aiming[playerid][1], 1);
TextDrawSetSelectable(Aiming[playerid][1], 0);
В секундный таймер
PHP:
if(AimingCheck[i][1] >= 1 && AimingCheck[i][3] >= 1)
{
AimingCheck[i][1] --;
if(AimingCheck[i][1] == 0)
{
AimingCheck[i][0] = 0;
AimingCheck[i][1] = 0;
TextDrawHideForPlayer(i, Aiming[i][0]);
TextDrawHideForPlayer(i, Aiming[i][1]);
TextDrawSetString(Aiming[i][0], AimingText);
TextDrawSetString(Aiming[i][1], AimingText);
}
}
В самый вверх OnPlayerKeyStateChange
PHP:
if(AimingCheck[playerid][3] >= 1 && AimingCheck[playerid][0] == 1 && (newkeys & 128 || newkeys & 0 || oldkeys & 132))
{
AimingCheck[playerid][0] = 0;
AimingCheck[playerid][1] = 0;
AimingCheck[playerid][2] = GetTickCount()+300;//Меньшее значение иногда вызывает залипание маркера. Большое значение вызывает задержку появление маркера
TextDrawHideForPlayer(playerid, Aiming[playerid][0]);
TextDrawHideForPlayer(playerid, Aiming[playerid][1]);
TextDrawSetString(Aiming[playerid][0], AimingText);
TextDrawSetString(Aiming[playerid][1], AimingText);
}
В OnPlayerTakeDamage
PHP:
if(issuerid != INVALID_PLAYER_ID && AimingCheck[issuerid][3] >= 1 && AimingCheck[playerid][5] == 1)
{
new Float:Health;
GetPlayerHealth(playerid, Health);
AimingCheck[issuerid][1] = 3;
if(Health-amount < 20.0)
{
AimingCheck[issuerid][0] = 1;
if(AimingCheck[issuerid][3] == 1)
{
if(weaponid == 34) TextDrawSetString(Aiming[issuerid][1], AimingTextR);
else TextDrawSetString(Aiming[issuerid][0], AimingTextR);
}
else
{
if(weaponid == 51 || weaponid == 34)
{
if(weaponid == 51) AimingCheck[issuerid][0] = 0;
TextDrawSetString(Aiming[issuerid][1], AimingTextR);
TextDrawShowForPlayer(issuerid, Aiming[issuerid][1]);
}
else
{
TextDrawSetString(Aiming[issuerid][0], AimingTextR);
TextDrawShowForPlayer(issuerid, Aiming[issuerid][0]);
}
}
}
if(AimingCheck[issuerid][3] == 1 && (weaponid < 22 || weaponid > 34))
{
if(weaponid == 51)
{
AimingCheck[issuerid][0] = 0;
TextDrawShowForPlayer(issuerid, Aiming[issuerid][1]);
}
else
{
AimingCheck[issuerid][0] = 1;
TextDrawShowForPlayer(issuerid, Aiming[issuerid][0]);
}
}
}
В OnPlayerWeaponShot
PHP:
if(AimingCheck[playerid][3] >= 1 && AimingCheck[playerid][2] < GetTickCount())
{
new carmode = GetPlayerCameraMode(playerid);
if((carmode == 7 || carmode == 53 || carmode == 55) && hittype == BULLET_HIT_TYPE_PLAYER && AimingCheck[playerid][0] == 0 && AimingCheck[playerid][3] == 1 && hitid != 65535 && AimingCheck[hitid][5] == 1)
{
AimingCheck[playerid][0] = 1;
AimingCheck[playerid][1] = 2;
if(weaponid == 34) TextDrawShowForPlayer(playerid, Aiming[playerid][1]);
else TextDrawShowForPlayer(playerid, Aiming[playerid][0]);
}
else if(AimingCheck[playerid][0] != 0 && hittype != BULLET_HIT_TYPE_PLAYER)
{
AimingCheck[playerid][0] = 0;
AimingCheck[playerid][1] = 0;
TextDrawHideForPlayer(playerid, Aiming[playerid][0]);
TextDrawHideForPlayer(playerid, Aiming[playerid][1]);
TextDrawSetString(Aiming[playerid][0], AimingText);
TextDrawSetString(Aiming[playerid][1], AimingText);
}
}
В OnPlayerSpawn
PHP:
AimingCheck[playerid][5] = 1;
И в OnPlayerDeath
PHP:
AimingCheck[playerid][5] = 0;
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Автор: Bren
Вложения
-
24.8 KB Просмотры: 3
Последнее редактирование: