Brain_Voker
Умник
Доброе утро всем, увидел тему про мероприятия от Sammeri http://pawno-info.ru/showthread.php?t=278100
Вот мои примерно комментарии как от новичка:
- Крашит павно.
- ошибка GetDistanceBetweenPlayers
- ошибка foreach
- А у меня командый процесор другой, можешь перевести команды?, И т.д.
Так вот теперь делаем полную версию и оптимальную
Погнали)
Вам надо будет скачать #include foreach и sscanf2
sscanf2(inc для папки pawno):
foreach(inc для папки pawno):
Для работы sscanf2 требуются еще плагины:
sscanf2.so (Для хостинга)
sscanf2.dll (Для ПК)
ВНИМАНИЯ: Пропишите в server.cfg в строке plugins sscanf .so или .dll
К #include
Ко всем #define:
Ко всем new:
В public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]):
Ко всем stock:
Если Вы используете стандартный командный процессор то в public OnPlayerCommandText(playerid, cmdtext[]):
Если DC_CMD то ко всем командам добавьте:
Автор доработки: Brain_Voker(#Kalashnikov)
Вот мои примерно комментарии как от новичка:
- Крашит павно.
- ошибка GetDistanceBetweenPlayers
- ошибка foreach
- А у меня командый процесор другой, можешь перевести команды?, И т.д.
Так вот теперь делаем полную версию и оптимальную
Погнали)
Вам надо будет скачать #include foreach и sscanf2
sscanf2(inc для папки pawno):
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
foreach(inc для папки pawno):
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Для работы sscanf2 требуются еще плагины:
sscanf2.so (Для хостинга)
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
sscanf2.dll (Для ПК)
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
ВНИМАНИЯ: Пропишите в server.cfg в строке plugins sscanf .so или .dll
К #include
PHP:
#include <foreach>
#include <sscanf2>
PHP:
#define COLOR_ORANGE 0xFFA500AA//Цвета
#define COLOR_GREY 0xAFAFAFFF
#define COLOR_GOLD 0xFFD700FF
PHP:
new Teleport = 0,
Float:TeleportFloat[3],
TeleportInfo[2];
PHP:
case 5343:
{
if(!response) return true;
switch(listitem)
{
case 0:
{
new stringmp[128];
if(!Teleport)
{
GetPlayerPos(playerid, TeleportFloat[0], TeleportFloat[1], TeleportFloat[2]);
TeleportInfo[0] = GetPlayerInterior(playerid);
TeleportInfo[1] = GetPlayerVirtualWorld(playerid);
Teleport = 1;
format(stringmp, sizeof(stringmp), "Администратор %s[%d] открыл телепорт для игроков. Чтобы телепортироваться введите: {0abf12}/tpmp", GN(playerid), playerid);
SendClientMessageToAll(COLOR_GOLD, stringmp);
}
else
{
Teleport = 0;
format(stringmp, sizeof(stringmp), "Администратор %s[%d] закрыл телепорт для игроков. Телепортирование {CC0000}запрещено", GN(playerid), playerid);
SendClientMessageToAll(COLOR_GOLD, stringmp);
}
}
case 1: ShowPlayerDialog(playerid, 5346, DIALOG_STYLE_INPUT, "{0CB4D6}Выдача оружия", "{FFFFFF}Введите ID оружия и патроны\nНапример: 31,500\nГде 31 - m4, а 500 патроны", "Выдать", "Назад");
case 2:
{
foreach (new i : Player)
{
if(GetDistanceBetweenPlayers(playerid, i) > 50) continue;
SetPlayerHealth(i, 100.0);//Если у Вас есть АнтиЧит на ХП, укажите вашу выдачу(Для тех кто незнает как, можете найти команду /hp или /sethp и там посмотреть)
SendClientMessage(i, 0xCC0000FF, "[Информация] {FFFFFF}Администратор выдал Вам жизни для участия мероприятии!");
}
ShowPlayerDialog(playerid, 5343, DIALOG_STYLE_LIST, "{FF6F00}Меню создания мероприятия", "{FFFFFF}1. Создать/удалить телепорт\n2. Раздать оружие (в радиусе 50)\n3. Раздать жизни (в радиусе 50)\n4. Обезаружить всех (в радиусе 50)", "Выбрать", "Закрыть");
}
case 3:
{
foreach (new i : Player)
{
if(GetDistanceBetweenPlayers(playerid,i) > 50) continue;
ResetPlayerWeapons(i);
SendClientMessage(i, 0xCC0000FF, "[Информация] {FFFFFF}Администратор забрал у Вас оружие на время мероприятия!");
}
ShowPlayerDialog(playerid, 5343, DIALOG_STYLE_LIST, "{FF6F00}Меню создания мероприятия", "{FFFFFF}1. Создать/удалить телепорт\n2. Раздать оружие (в радиусе 50)\n3. Раздать жизни (в радиусе 50)\n4. Обезоружить всех (в радиусе 50)", "Выбрать", "Закрыть");
}
}
return true;
}
case 5346:
{
if(!response) return ShowPlayerDialog(playerid, 5343, DIALOG_STYLE_LIST, "{0CB4D6}Меню создания мероприятия", "{FFFFFF}1. Создать/удалить телепорт\n2. Раздать оружие (в радиусе 50)\n3. Раздать жизни (в радиусе 50)\n4. Обезоружить всех (в радиусе 50)", "Выбрать", "Закрыть");
new GunMP[2];
if(sscanf(inputtext,"p<,>dd",GunMP[0],GunMP[1])) return ShowPlayerDialog(playerid, 5346, DIALOG_STYLE_INPUT, "{0CB4D6}Выдача оружия", "{FFFFFF}Введите ID оружия и патроны\nПример: 31,500\nГде 31 m4 а 500 патроны", "Выдать", "Назад");
if(GunMP[1] < 1||GunMP[1] > 9999) return ShowPlayerDialog(playerid, 5346, DIALOG_STYLE_INPUT, "{0CB4D6}Выдача оружия", "{FFFFFF}Введите ID оружия и патроны\nПример: 31,500\nГде 31 m4 а 500 патроны\n\n{CC0066}Нельзя меньше 1 или больше 9999 патронов!", "Выдать", "Назад");
if(GunMP[0] < 1 || GunMP[0] > 47 || GunMP[0] == 27 || GunMP[0] == 1 || GunMP[0] == 2 || GunMP[0] == 17 || GunMP[0] == 19 || GunMP[0] == 4
|| GunMP[0] == 20 || GunMP[0] == 21 || GunMP[0] == 35 || GunMP[0] == 36 || GunMP[0] == 39 || GunMP[0] == 40 || GunMP[0] == 44
|| GunMP[0] == 38 || GunMP[0] == 32 || GunMP[0] == 28 || GunMP[0] == 18 || GunMP[0] == 37 || GunMP[0] == 16 || GunMP[0] == 45
|| GunMP[0] == 9) return ShowPlayerDialog(playerid, 5346, DIALOG_STYLE_INPUT, "{0CB4D6}Выдача оружия", "{FFFFFF}Введите ID оружия и патроны\nПример: 31,500\nГде 31 m4 а 500 патроны\n\n{CC0066}Вы указали ID оружие которое запрещено\n(Сообщите скриптеру если считаете что не так)", "Выдать", "Назад");
foreach (new i : Player)
{
if(GetDistanceBetweenPlayers(playerid, i) > 50) continue;
GiveWeapon(i, GunMP[0], GunMP[1]);//Если у Вас есть анти-чит на оружие, укажите вашу выдачу(Для тех кто незнает как, можете найти команду /givegun и там посмотреть)
SendClientMessage(i, 0xCC0000FF, "[Информация] {FFFFFF}Администратор выдал Вам оружие для мероприятия. В случае DM - Варн!");
}
return true;
}
case 3333:
{
if(!response) return true;
SetPlayerPos(playerid, TeleportFloat[0], TeleportFloat[1]+2, TeleportFloat[2]);//
SetPlayerInterior(playerid, TeleportInfo[0]);
SetPlayerVirtualWorld(playerid, TeleportInfo[1]);
SendClientMessage(playerid, COLOR_ORANGE, "Вы были {0abf12}успешно {FFA500}телепортированы на мероприятие");
return true;
}
PHP:
stock Float:GetDistanceBetweenPlayers(playerid,getplayerid) {
new Float:xOne[6];
if(!IsPlayerConnected(playerid) || !IsPlayerConnected(getplayerid)) return -1.00;
GetPlayerPos(playerid,xOne[0],xOne[1],xOne[2]);
GetPlayerPos(getplayerid,xOne[3],xOne[4],xOne[5]);
return floatsqroot(floatpower(floatabs(floatsub(xOne[3],xOne[0])),2)+floatpower(floatabs(floatsub(xOne[4],xOne[1])),2)+floatpower(floatabs(floatsub(xOne[5],xOne[2])),2));
}
PHP:
if(strcmp(cmd, "/mp", true) == 0)
{
if(PlayerInfo[playerid][pAdminLVL] < 4) return SendClientMessage(playerid, COLOR_GREY, "У вас нет прав!");
ShowPlayerDialog(playerid, 5343, DIALOG_STYLE_LIST, "{FF6F00}Меню создания мероприятия", "{FFFFFF}1. Создать/удалить телепорт\n2. Раздать оружие (в радиусе 50)\n3. Раздать жизни (в радиусе 50)\n4. Обезоружить всех (в радиусе 50)", "Выбрать", "Закрыть");
return true;
}
if(strcmp(cmd, "/tpmp", true) == 0)
{
if(!Teleport) return SendClientMessage(playerid, COLOR_GREY, "В данный момент не проводятся мероприятия!");
else ShowPlayerDialog(playerid, 3333, DIALOG_STYLE_MSGBOX, "{FF6F00}Телепортация", "{FFFFFF}Вы уверены, что хотите попасть в место проведения мероприятия?", "Да", "Нет");
return true;
}
PHP:
CMD:mp(playerid)
{
if(PlayerInfo[playerid][pAdminLVL] < 4) return SendClientMessage(playerid, COLOR_GREY, "У вас нет прав!");
ShowPlayerDialog(playerid, 5343, DIALOG_STYLE_LIST, "{FF6F00}Меню создания мероприятия", "{FFFFFF}1. Создать/удалить телепорт\n2. Раздать оружие (в радиусе 50)\n3. Раздать жизни (в радиусе 50)\n4. Обезоружить всех (в радиусе 50)", "Выбрать", "Закрыть");
return true;
}
CMD:tpmp(playerid)
{
if(!Teleport) return SendClientMessage(playerid, COLOR_GREY, "В данный момент не проводятся мероприятия!");
else ShowPlayerDialog(playerid, 3333, DIALOG_STYLE_MSGBOX, "{FF6F00}Телепортация", "{FFFFFF}Вы уверены, что хотите попасть в место проведения мероприятия?", "Да", "Нет");
return true;
}
