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

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

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

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

Мануал Система Мероприятий

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

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
PHP:
#include <foreach>
#include <sscanf2>
Ко всем #define:
PHP:
#define COLOR_ORANGE 0xFFA500AA//Цвета
#define COLOR_GREY 0xAFAFAFFF
#define COLOR_GOLD 0xFFD700FF
Ко всем new:
PHP:
new Teleport = 0,
Float:TeleportFloat[3],
TeleportInfo[2];
В public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]):

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;
	}
Ко всем stock:
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));
}
Если Вы используете стандартный командный процессор то в public OnPlayerCommandText(playerid, cmdtext[]):
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;
}
Если DC_CMD то ко всем командам добавьте:
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;
}
Автор доработки: Brain_Voker(#Kalashnikov)
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу