whale
/proger/
- Регистрация
- 20 Сен 2013
- Сообщения
- 1,076
- Лучшие ответы
- 4
- Репутация
- 421
Здравствуйте, уважаемые пользователи портала Pawno-Info.
Хочу представить Вам 2 команды:
— /cuff - надеть наручники на игрока.
— /uncuff - снять наручники с игрока.
ATTENTION: Да, на форуме есть подобные команды, но, по моему мнению, там очень много ненужного кода, да и, не особо оптимизированного.
Я же, в свою очередь, хочу показать Вам мою реализацию данных команд.
P.S Если у Вас есть предложения/замечания по коду и адекватная, объективная критика - буду рад видеть Вас в комментариях.
/cuff:
/uncuff:
Prox.Detector
Хочу представить Вам 2 команды:
— /cuff - надеть наручники на игрока.
— /uncuff - снять наручники с игрока.
ATTENTION: Да, на форуме есть подобные команды, но, по моему мнению, там очень много ненужного кода, да и, не особо оптимизированного.
Я же, в свою очередь, хочу показать Вам мою реализацию данных команд.
P.S Если у Вас есть предложения/замечания по коду и адекватная, объективная критика - буду рад видеть Вас в комментариях.
/cuff:
PHP:
CMD:cuff(playerid, params[])
{
// Сюда ваши проверки на фракции/организации и т.д
// Пример: if(pInfo[playerid][pFraction] != 1) return SendClientMessage(playerid, -1, !"Ошибка: Вам недоступна данная команда!");
extract params -> new player:target; else
return SendClientMessage(playerid, -1, !"Используйте: /cuff [ID игрока/часть NickName]");
if(!IsPlayerConnected(target))
return SendClientMessage(playerid, -1, !"Ошибка: указанного игрока нет на сервере!");
if(target == playerid)
return SendClientMessage(playerid, -1, !"Ошибка: Вы не можете надеть наручники на самого себя!");
if(IsPlayerInAnyVehicle(playerid) || IsPlayerInAnyVehicle(target))
return SendClientMessage(playerid, -1, !"Ошибка: Вы или указанный вами игрок не должны находиться в ТС!");
if(GetPVarInt(target, "status_cuffed"))
return SendClientMessage(playerid, -1, !"Ошибка: указанный игрок уже в наручниках!");
if(0 == PlayerBesideTheOther(8.0, playerid, target))
return SendClientMessage(playerid, -1, !"Ошибка: указанный игрок далеко от Вас!");
new
string[36 + MAX_PLAYER_NAME*2],
playerid_name[MAX_PLAYER_NAME],
target_name[MAX_PLAYER_NAME];
GetPlayerName(playerid, playerid_name, MAX_PLAYER_NAME);
GetPlayerName(target, target_name, MAX_PLAYER_NAME);
format(string, sizeof(string), "Вы надели наручники на %s[%d].", target_name, target);
SendClientMessage(playerid, -1, string);
format(string, sizeof(string), "%s[%d] надел на Вас наручники.", playerid_name, playerid);
SendClientMessage(playerid, -1, string);
format(string, sizeof(string), " * %s[%d] надел наручники на %s[%d].", playerid_name, playerid, target_name, target);
ProxDetector(playerid, 20.0, 0xC2A2DAAA, string);
TogglePlayerControllable(target, 0);
SetPlayerAttachedObject(target, 0, 19418, 6, -0.011000, 0.028000, -0.022000, -15.600012, -33.699977, -81.700035, 0.891999, 1.000000, 1.168000);
SetPlayerSpecialAction(target, SPECIAL_ACTION_CUFFED);
SetPVarInt(target, "status_cuffed", true);
return 1;
}
PHP:
CMD:uncuff(playerid, params[])
{
// Сюда ваши проверки на фракции/организации и т.д
// Пример: if(pInfo[playerid][pFraction] != 1) return SendClientMessage(playerid, -1, !"Ошибка: Вам недоступна данная команда!");
extract params -> new player:target; else
return SendClientMessage(playerid, -1, !"Используйте: /uncuff [ID игрока/часть NickName]");
if(!IsPlayerConnected(target))
return SendClientMessage(playerid, -1, !"Ошибка: указанного игрока нет на сервере!");
if(target == playerid)
return SendClientMessage(playerid, -1, !"Ошибка: Вы не можете снять наручники с самого себя!");
if(IsPlayerInAnyVehicle(playerid) || IsPlayerInAnyVehicle(target))
return SendClientMessage(playerid, -1, !"Ошибка: Вы или указанный вами игрок не должны находиться в ТС!");
if(!GetPVarInt(target, "status_cuffed"))
return SendClientMessage(playerid, -1, !"Ошибка: указанный игрок не в наручниках!");
if(0 == PlayerBesideTheOther(8.0, playerid, target))
return SendClientMessage(playerid, -1, !"Ошибка: указанный игрок далеко от Вас!");
new
string[34 + MAX_PLAYER_NAME*2],
playerid_name[MAX_PLAYER_NAME],
target_name[MAX_PLAYER_NAME];
GetPlayerName(playerid, playerid_name, MAX_PLAYER_NAME);
GetPlayerName(target, target_name, MAX_PLAYER_NAME);
format(string, sizeof(string), "Вы сняли наручники с %s[%d].", target_name, target);
SendClientMessage(playerid, -1, string);
format(string, sizeof(string), "%s[%d] снял с Вас наручники.", playerid_name, playerid);
SendClientMessage(playerid, -1, string);
format(string, sizeof(string), " * %s[%d] снял наручники с %s[%d].", playerid_name, playerid, target_name, target);
ProxDetector(playerid, 20.0, 0xC2A2DAAA, string);
TogglePlayerControllable(target, 1);
RemovePlayerAttachedObject(target, 0);
SetPlayerSpecialAction(target, SPECIAL_ACTION_NONE);
SetPVarInt(target, "status_cuffed", false);
return 1;
}
PHP:
stock ProxDetector(playerid, Float:max_range, color, string[], Float:max_ratio = 1.6)
{
new
Float:pos_x,
Float:pos_y,
Float:pos_z,
Float:range,
Float:range_ratio,
Float:range_with_ratio,
clr_r, clr_g, clr_b,
Float:color_r, Float:color_g, Float:color_b;
if (!GetPlayerPos(playerid, pos_x, pos_y, pos_z)) {
return 0;
}
color_r = float(color >> 24 & 0xFF);
color_g = float(color >> 16 & 0xFF);
color_b = float(color >> 8 & 0xFF);
range_with_ratio = max_range * max_ratio;
#if defined foreach
foreach (new i : Player) {
#else
for (new i = GetPlayerPoolSize(); i != -1; i--) {
#endif
if (!IsPlayerStreamedIn(playerid, i)) {
continue;
}
range = GetPlayerDistanceFromPoint(i, pos_x, pos_y, pos_z);
if (range > max_range) {
continue;
}
range_ratio = (range_with_ratio - range) / range_with_ratio;
clr_r = floatround(range_ratio * color_r);
clr_g = floatround(range_ratio * color_g);
clr_b = floatround(range_ratio * color_b);
SendClientMessage(i, (color & 0xFF) | (clr_b << 8) | (clr_g << 16) | (clr_r << 24), string);
}
SendClientMessage(playerid, color, string);
return 1;
}
Последнее редактирование: