Cr1meful
Ученик
Ангары (GalaxY)
Описание: Ангары служат для сбора/скопления игроков и проведения чего-либо в ангарах. Каждый ангар имеет персональный интерьер.
Скришоты:
Первое, ко всем new:
HangarNumbe - С помощью этого, у нас будет статус о ангаре, закрыт он или открыт / всего ангаров 6.
Hangar - информация о игроке, в ангаре он или нет.
pickuphangar - из названия все понятно.
Добавляем к OnPlayerConnect:
Обнуление переменной при заходе игрока.
Добавляем к GameModeInit:
Создаем пикапы для входа в ангар и 3D тексты поверх пикапа.
Теперь, добавляем сами ангары, добавляем к OnPlayerPickUpPickup:
SetPlayerPos - установка позиции для игрока.
SetPlayerInterior - установка интерьера для игрока.
SetPlayerVirtualWorld - установка виртуального мира.
SendClientMessage - вывод сообщения.
SetCameraBehindPlayer - установка камеры.
Hangar[playerid] - устанавливаем проверку ангара для игрока. (/hkick, /exit)
Добавляем команду для открытия/закрытия ангара.
Далее, добавляем команду для выхода из ангара:
И добавляем команду, что-бы репортер мог выгнать игрока с ангара:
Ко всем stock:
Эта функция для получения информации, в какой фракции состоит игрок, немного удобная функция чем писать каждый раз pMember != 11 || pLeader != 11.
RusToGame - позволяет писать через GameTextForPlayer русскими буквами, по примеру:
Аналог SendClientMessage, только немного лучше.
Думаю всем и так будет понятно, что это.
Ошибки которые могут возникнуть:
Цвета которые используются:
P.S Говно код ван лав.
Ангары
Идея слизана с GY
Нам нужно: sscanf и командный процессор DC_CMD (или похожий, шапку сами замените)
Идея слизана с GY
Нам нужно: sscanf и командный процессор DC_CMD (или похожий, шапку сами замените)
Описание: Ангары служат для сбора/скопления игроков и проведения чего-либо в ангарах. Каждый ангар имеет персональный интерьер.
Скришоты:
Итак начнём.
Первое, ко всем new:
PHP:
new pickups;
new HangarNumber[6] = 0;
new Hangar[MAX_PLAYERS];
new pickuphangar[6];
Hangar - информация о игроке, в ангаре он или нет.
pickuphangar - из названия все понятно.
Добавляем к OnPlayerConnect:
PHP:
Hangar[playerid] = 0;
Добавляем к GameModeInit:
PHP:
pickuphangar[0] = CreatePickup(19132, 23, 901.3920,-1202.6172,16.9832, 0); pickups++;
Create3DTextLabel("Ангар №1.",-1,901.3920,-1202.6172,16.9832,15.0,0,0);
pickuphangar[1] = CreatePickup(19132, 23, 867.2936,-1202.6172,16.9766, 0); pickups++;
Create3DTextLabel("Ангар №2.",-1,867.2936,-1202.6172,16.9766,15.0,0,0);
pickuphangar[2] = CreatePickup(19132, 23, 831.2269,-1202.6172,16.9766, 0); pickups++;
Create3DTextLabel("Ангар №3.",-1,831.2269,-1202.6172,16.9766,15.0,0,0);
pickuphangar[3] = CreatePickup(19132, 23, 860.8140,-1245.1157,14.7578, 0); pickups++;
Create3DTextLabel("Ангар №4.",-1,860.8140,-1245.1157,14.7578,15.0,0,0);
pickuphangar[4] = CreatePickup(19132, 23, 860.8186,-1255.4730,14.7578, 0); pickups++;
Create3DTextLabel("Ангар №5.",-1,860.8186,-1255.4730,14.7578,15.0,0,0);
pickuphangar[5] = CreatePickup(19132, 23, 845.5270,-1293.2771,13.6510, 0); pickups++;
Create3DTextLabel("Ангар №6."-1,845.5270,-1293.2771,13.6510,15.0,0,0);
___________________________________________________________
Теперь, добавляем сами ангары, добавляем к OnPlayerPickUpPickup:
PHP:
if(pickupid == pickuphangar[0])
{
if(HangarNumber[0] == 0) return GameTextForPlayer(playerid, RusToGame("~r~ЗАКРЫТО"), 5000, 1);
SetPlayerPos(playerid, -1465.268676,1557.868286,1052.531250);
SetPlayerInterior(playerid, 14);
SetPlayerVirtualWorld(playerid, 1);
SendClientMessage(playerid, COLOR_OOC, "Покинуть ангар - {33AA33}/exit{33AA33}.");
Hangar[playerid] = 1;
SetCameraBehindPlayer(playerid);
}
if(pickupid == pickuphangar[1])
{
if(HangarNumber[1] == 0) return GameTextForPlayer(playerid, RusToGame("~r~ЗАКРЫТО"), 5000, 1);
SetPlayerPos(playerid, 963.418762,2108.292480,1011.030273);
SetPlayerInterior(playerid, 1);
SetPlayerVirtualWorld(playerid, 1);
SendClientMessage(playerid, COLOR_OOC, "Покинуть ангар - {33AA33}/exit{33AA33}.");
Hangar[playerid] = 2;
SetCameraBehindPlayer(playerid);
}
if(pickupid == pickuphangar[2])
{
if(HangarNumber[2] == 0) return GameTextForPlayer(playerid, RusToGame("~r~ЗАКРЫТО"), 5000, 1);
SetPlayerPos(playerid, 384.808624,173.804992,1008.382812);
SetPlayerInterior(playerid, 3);
SetPlayerVirtualWorld(playerid, 1);
SendClientMessage(playerid, COLOR_OOC, "Покинуть ангар - {33AA33}/exit{33AA33}.");
Hangar[playerid] = 3;
SetCameraBehindPlayer(playerid);
}
if(pickupid == pickuphangar[3])
{
if(HangarNumber[3] == 0) return GameTextForPlayer(playerid, RusToGame("~r~ЗАКРЫТО"), 5000, 1);
SetPlayerPos(playerid, -975.975708,1060.983032,1345.671875);
SetPlayerInterior(playerid, 10);
SetPlayerVirtualWorld(playerid, 1);
SendClientMessage(playerid, COLOR_OOC, "Покинуть ангар - {33AA33}/exit{33AA33}.");
Hangar[playerid] = 4;
SetCameraBehindPlayer(playerid);
}
if(pickupid == pickuphangar[4])
{
if(HangarNumber[4] == 0) return GameTextForPlayer(playerid, RusToGame("~r~ЗАКРЫТО"), 5000, 1);
SetPlayerPos(playerid, -1398.103515,937.631164,1036.479125);
SetPlayerInterior(playerid, 15);
SetPlayerVirtualWorld(playerid, 1);
SendClientMessage(playerid, COLOR_OOC, "Покинуть ангар - {33AA33}/exit{33AA33}.");
Hangar[playerid] = 5;
SetCameraBehindPlayer(playerid);
}
if(pickupid == pickuphangar[5])
{
if(HangarNumber[5] == 0) return GameTextForPlayer(playerid, RusToGame("~r~ЗАКРЫТО"), 5000, 1);
SetPlayerPos(playerid, 1267.663208,-781.323242,1091.906250);
SetPlayerInterior(playerid, 5);
SetPlayerVirtualWorld(playerid, 1);
SendClientMessage(playerid, COLOR_OOC, "Покинуть ангар - {33AA33}/exit{33AA33}.");
Hangar[playerid] = 6;
SetCameraBehindPlayer(playerid);
}
SetPlayerInterior - установка интерьера для игрока.
SetPlayerVirtualWorld - установка виртуального мира.
SendClientMessage - вывод сообщения.
SetCameraBehindPlayer - установка камеры.
Hangar[playerid] - устанавливаем проверку ангара для игрока. (/hkick, /exit)
___________________________________________________________
Добавляем команду для открытия/закрытия ангара.
PHP:
CMD:hopen(playerid, params[])
{
if(GetPlayerFraction(playerid) != 9) return SendClientMessage(playerid, COLOR_GRAD1, "Ты не репортер.");
if(IsPlayerInRangeOfPoint(playerid, 5.0, 901.3920,-1202.6172,16.9832) || Hangar[playerid] == 1)
{
switch(HangarNumber[0])
{
case 0:
{
format(stringone, sizeof(stringone), "** %s[%d] открыл ангар №1.",PlayerInfo[playerid][pName], playerid);
SendRadioMessage(9, TEAM_AZTECAS_COLOR, stringone);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Ты открыл ангар №1.");
HangarNumber[0] = 1;
}
case 1:
{
format(stringone, sizeof(stringone), "** %s[%d] закрыл ангар №1.",PlayerInfo[playerid][pName], playerid);
SendRadioMessage(9, TEAM_AZTECAS_COLOR, stringone);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Ты закрыл ангар №1.");
HangarNumber[0] = 0;
}
}
return 1;
}
if(IsPlayerInRangeOfPoint(playerid, 5.0, 867.2936,-1202.6172,16.9766) || Hangar[playerid] == 2)
{
switch(HangarNumber[1])
{
case 0:
{
format(stringone, sizeof(stringone), "** %s[%d] открыл ангар №2.",PlayerInfo[playerid][pName], playerid);
SendRadioMessage(9, TEAM_AZTECAS_COLOR, stringone);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Ты открыл ангар №2.");
HangarNumber[1] = 1;
}
case 1:
{
format(stringone, sizeof(stringone), "** %s[%d] закрыл ангар №2.",PlayerInfo[playerid][pName], playerid);
SendRadioMessage(9, TEAM_AZTECAS_COLOR, stringone);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Ты закрыл ангар №2.");
HangarNumber[1] = 0;
}
}
}
if(IsPlayerInRangeOfPoint(playerid, 5.0, 831.2269,-1202.6172,16.9766) || Hangar[playerid] == 3)
{
switch(HangarNumber[2])
{
case 0:
{
format(stringone, sizeof(stringone), "** %s[%d] открыл ангар №3.",PlayerInfo[playerid][pName], playerid);
SendRadioMessage(9, TEAM_AZTECAS_COLOR, stringone);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Ты открыл ангар №3.");
HangarNumber[2] = 1;
}
case 1:
{
format(stringone, sizeof(stringone), "** %s[%d] закрыл ангар №3.",PlayerInfo[playerid][pName], playerid);
SendRadioMessage(9, TEAM_AZTECAS_COLOR, stringone);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Ты закрыл ангар №3.");
HangarNumber[2] = 0;
}
}
return 1;
}
if(IsPlayerInRangeOfPoint(playerid, 5.0, 860.8140,-1245.1157,14.7578) || Hangar[playerid] == 4)
{
switch(HangarNumber[3])
{
case 0:
{
format(stringone, sizeof(stringone), "** %s[%d] открыл ангар №4.",PlayerInfo[playerid][pName], playerid);
SendRadioMessage(9, TEAM_AZTECAS_COLOR, stringone);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Ты открыл ангар №4.");
HangarNumber[3] = 1;
}
case 1:
{
format(stringone, sizeof(stringone), "** %s[%d] закрыл ангар №4.",PlayerInfo[playerid][pName], playerid);
SendRadioMessage(9, TEAM_AZTECAS_COLOR, stringone);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Ты закрыл ангар №4.");
HangarNumber[3] = 0;
}
}
return 1;
}
if(IsPlayerInRangeOfPoint(playerid, 5.0, 860.8186,-1255.4730,14.7578) || Hangar[playerid] == 5)
{
switch(HangarNumber[4])
{
case 0:
{
format(stringone, sizeof(stringone), "** %s[%d] открыл ангар №5.",PlayerInfo[playerid][pName], playerid);
SendRadioMessage(9, TEAM_AZTECAS_COLOR, stringone);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Ты открыл ангар №5.");
HangarNumber[4] = 1;
}
case 1:
{
format(stringone, sizeof(stringone), "** %s[%d] закрыл ангар №5.",PlayerInfo[playerid][pName], playerid);
SendRadioMessage(9, TEAM_AZTECAS_COLOR, stringone);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Ты закрыл ангар №5.");
HangarNumber[4] = 0;
}
}
return 1;
}
if(IsPlayerInRangeOfPoint(playerid, 5.0, 845.5270,-1293.2771,13.6510) || Hangar[playerid] == 6)
{
switch(HangarNumber[5])
{
case 0:
{
format(stringone, sizeof(stringone), "** %s[%d] открыл ангар №6. ",PlayerInfo[playerid][pName], playerid);
SendRadioMessage(9, TEAM_AZTECAS_COLOR, stringone);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Ты открыл ангар №6.");
HangarNumber[5] = 1;
}
case 1:
{
format(stringone, sizeof(stringone), "** %s[%d] закрыл ангар №6.",PlayerInfo[playerid][pName], playerid);
SendRadioMessage(9, TEAM_AZTECAS_COLOR, stringone);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Ты закрыл ангар №6.");
HangarNumber[5] = 0;
}
}
return 1;
}
else SendClientMessage(playerid, COLOR_GRAD1, "Ты далеко от ангаров.");
return 1;
}
PHP:
CMD:exit(playerid, params[0])
{
if(Hangar[playerid] < 1) return SendClientMessage(playerid, COLOR_GRAD1, "Ты не в ангаре.");
SetPlayerPos(playerid, 910.7144,-1230.8871,16.9766);
SetPlayerInterior(playerid, 0);
SetPlayerVirtualWorld(playerid, 0);
SendClientMessage(playerid, -1, "Ты самостоятельно покинул ангар.");
Hangar[playerid] = 0;
SetCameraBehindPlayer(playerid);
return 1;
}
PHP:
CMD:hkick(playerid, params[0])
{
if(GetPlayerFraction(playerid) != 9) return SendClientMessage(playerid, COLOR_GRAD1, "Ты не репортер.");
if(sscanf(params, "us", params[0], params[1])) return SendClientMessage(playerid, COLOR_GREY, "Использование: /hkick [ид игрока/часть ника] [причина]");
if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, COLOR_GRAD1, "Игрок не найден.");
if(gPlayerLogged[params[0]] == 0) return SendClientMessage(playerid, COLOR_GRAD1, "Игрок не авторизован.");
if(Hangar[playerid] < 1) return SendClientMessage(playerid, COLOR_GRAD1, "Ты не в ангаре.");
if(Hangar[params[0]] < 1) return SendClientMessage(playerid, COLOR_GRAD1, "Игрок не в ангаре.");
if(Hangar[params[0]] != Hangar[playerid]) return SendClientMessage(playerid, COLOR_GRAD1, "Данный игрок не в твоём ангаре.");
SendFormattedMessage(playerid, COLOR_LIGHTBLUE, "Ты выгнал с ангара %s[%d]. Причина: %s.", PlayerInfo[params[0]][pName], params[0], params[1]);
SendFormattedMessage(params[0], COLOR_LIGHTBLUE, "Репортер %s[%d] выгнал тебя с ангара. Причина: %s.", PlayerInfo[playerid][pName], playerid, params[1]);
SetPlayerPos(params[0], 910.7144,-1230.8871,16.9766); SetPlayerInterior(params[0], 0); SetPlayerVirtualWorld(params[0], 0); Hangar[params[0]] = 0; SetCameraBehindPlayer(params[0]);
return 1;
}
PHP:
stock GetPlayerFraction(playerid)
{
if(PlayerInfo[playerid][pMember] != 0) return PlayerInfo[playerid][pMember];
else if(PlayerInfo[playerid][pLeader] != 0) return PlayerInfo[playerid][pLeader];
else return 0;
}
___________________________________________________________
PHP:
stock RusToGame(string[])
{
new result[256];
for(new i;i<256;i++)
{
switch(string[i])
{
case 'а':result[i] = 'a';case 'А':result[i] = 'A';
case 'б':result[i] = '—';case 'Б':result[i] = 'Ђ';
case 'в':result[i] = 'ў';case 'В':result[i] = '‹';
case 'г':result[i] = '™';case 'Г':result[i] = '‚';
case 'д':result[i] = 'љ';case 'Д':result[i] = 'ѓ';
case 'е':result[i] = 'e';case 'Е':result[i] = 'E';
case 'ё':result[i] = 'e';case 'Ё':result[i] = 'E';
case 'ж':result[i] = '›';case 'Ж':result[i] = '„';
case 'з':result[i] = 'џ';case 'З':result[i] = '€';
case 'и':result[i] = 'њ';case 'И':result[i] = '…';
case 'й':result[i] = 'ќ';case 'Й':result[i] = '…';
case 'к':result[i] = 'k';case 'К':result[i] = 'K';
case 'л':result[i] = 'ћ';case 'Л':result[i] = '‡';
case 'м':result[i] = 'Ї';case 'М':result[i] = 'M';
case 'н':result[i] = '®';case 'Н':result[i] = '*';
case 'о':result[i] = 'o';case 'О':result[i] = 'O';
case 'п':result[i] = 'Ј';case 'П':result[i] = 'Њ';
case 'р':result[i] = 'p';case 'Р':result[i] = 'P';
case 'с':result[i] = 'c';case 'С':result[i] = 'C';
case 'т':result[i] = '¦';case 'Т':result[i] = 'Џ';
case 'у':result[i] = 'y';case 'У':result[i] = 'Y';
case 'ф':result[i] = '';case 'Ф':result[i] = 'Ѓ';
case 'х':result[i] = 'x';case 'Х':result[i] = 'X';
case 'ц':result[i] = ' ';case 'Ц':result[i] = '‰';
case 'ч':result[i] = '¤';case 'Ч':result[i] = 'Ќ';
case 'ш':result[i] = 'Ґ';case 'Ш':result[i] = 'Ћ';
case 'щ':result[i] = 'Ў';case 'Щ':result[i] = 'Љ';
case 'ь':result[i] = '©';case 'Ь':result[i] = '’';
case 'ъ':result[i] = 'ђ';case 'Ъ':result[i] = '§';
case 'ы':result[i] = 'Ё';case 'Ы':result[i] = '‘';
case 'э':result[i] = 'Є';case 'Э':result[i] = '“';
case 'ю':result[i] = '«';case 'Ю':result[i] = '”';
case 'я':result[i] = '¬';case 'Я':result[i] = '•';
default:result[i]=string[i];
}
}
return result;
}
PHP:
GameTextForPlayer(playerid, RusToGame("~r~Ваш текст"), 5000, 1);
______________________________________________________________________
PHP:
stock SendFormattedMessage(playerid, color, fstring[], {Float, _}:...)
{
static const
STATIC_ARGS = 3,
BYTES_PER_CELL = cellbits / 8;
new
n = (numargs() - STATIC_ARGS) * BYTES_PER_CELL;
if (n)
{
new message[128],arg_start,arg_end;
#emit CONST.alt fstring
#emit LCTRL 5
#emit ADD
#emit STOR.S.pri arg_start
#emit LOAD.S.alt n
#emit ADD
#emit STOR.S.pri arg_end
do
{
#emit LOAD.I
#emit PUSH.pri
arg_end -= BYTES_PER_CELL;
#emit LOAD.S.pri arg_end
}
while (arg_end > arg_start);
#emit PUSH.S fstring
#emit PUSH.C 128
#emit PUSH.ADR message
n += BYTES_PER_CELL * 3;
#emit PUSH.S n
#emit SYSREQ.C format
n += BYTES_PER_CELL;
#emit LCTRL 4
#emit LOAD.S.alt n
#emit ADD
#emit SCTRL 4
return SendClientMessage(playerid, color, message);
}
else
{
return SendClientMessage(playerid, color, fstring);
}
}
___________________________________________________________
PHP:
stock SendRadioMessage(member, color, string[]) { foreach(new i : Player) if(PlayerInfo[i][pMember] == member || PlayerInfo[i][pLeader] == member) SendClientMessage(i, color, string); }
___________________________________________________________
Ошибки которые могут возникнуть:
PHP:
PlayerInfo[playerid][pName] - меняйте на свою функцию получения ника игрока.
PHP:
#define COLOR_LIGHTBLUE 0x33CCFFAA
#define COLOR_GREY 0xC3C3C3AA
#define COLOR_GRAD1 0xB4B5B7FF
#define TEAM_AZTECAS_COLOR 0x01FCFFC8
Последнее редактирование:
