Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: [ALL] /god - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ALL] /god Режим бессмертия Оценка: -----

#1
Пользователь офлайн   Sashok_pipe 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Эта команда активирует режим бессмертия игроку и его машине

В начало мода, после инклудов, добавляем:
strtok(const string[], &index)
{
	new length = strlen(string);
	while ((index < length) && (string[index] <= ' '))
	{
		index++;
	}
	new offset = index;
	new result[25];
	while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
	{
		result[index - offset] = string[index];
		index++;
	}
	result[index - offset] = EOS;
	return result;
}



Чуть ниже:
enum AwhilePlayerInfo{ // Сюда можно добавить любую инфу игрока, которое не требует сохранения после выхода
	bool:pGodMod
};
new apInfo[MAX_PLAYERS][AwhilePlayerInfo];
enum Timers_List{
	pGodMod // id таймера
};
new pTimers[MAX_PLAYER_NAME][Timers_List];
forward GodMod(id); //таймер
#define SCM SendClientMessage
#define COLOR_GREEN 0x4CEC0EFF
#define COLOR_GRAY  0xB5B8B1FF



В OnPlayerConnect:
apInfo[playerid][pGodMod] = false;



В OnPlayerCommandText:
// ===Переменные===
new cmd[256];
new giveplayerid, idx;
cmd = strtok(cmdtext, idx);
//===
if(strcmp(cmd, "/god", true) == 0) // режим бога
{
	new tmp[256];
	if(!IsPlayerAdmin(playerid)) return SCM(playerid,COLOR_GRAY,"Вы не уполномочены использовать данную команду!"); //Проверка на админа 
	tmp = strtok(cmdtext, idx);
	giveplayerid = strval(tmp); // В переменную giveplayerid записывается id, который Вы ввели после команды /god id
	if(!strlen(tmp)) // Если вы ничего не указали после команды /god, то сервер будет работать с Вами
	{
		if(apInfo[playerid][pGodMod] == false) //Если у Вас отключен режим бога, то он включится
		{
			pTimers[playerid][pGodMod] = SetTimerEx("GodMod",200,true,"%i",playerid);
			apInfo[playerid][pGodMod] = true;SCM(playerid,COLOR_GRAY,"Режим бога активирован");
		}
		else // Если у Вас включен режим бога, то он отключится
		{
			KillTimer(pTimers[playerid][pGodMod]); SetPlayerHealth(giveplayerid,100);
			apInfo[playerid][pGodMod] = false;SCM(playerid,COLOR_GREEN,"Режим бога деактивирован");
		}
		return 1;
	}
	if(!IsPlayerConnected(giveplayerid)) return SCM(playerid,COLOR_GRAY,"Игрок не был найден"); //Сервер ищет игрока с id, который равен переменной giveplayerid
  	if(apInfo[giveplayerid][pGodMod] == false) // Если у Вас отключен режим бога, то он включится
	{
		pTimers[giveplayerid][pGodMod] = SetTimerEx("GodMod",200,true,"%i",giveplayerid);
		apInfo[giveplayerid][pGodMod] = true;
		if(playerid == giveplayerid) // Если Вы после пробела ввели свой id
		{
			SCM(playerid,COLOR_GRAY,"Режим бога активирован");
		}
		else // Если чужой id
		{
			SCM(playerid,COLOR_GREEN,"Режим бога активирован");
			SCM(giveplayerid,COLOR_GREEN,"Режим бога активирован");
		}
	}
	else// Если у Вас включен режим бога, то он выключится
	{
		KillTimer(pTimers[giveplayerid][pGodMod]);
		SetPlayerHealth(giveplayerid,100);
		apInfo[giveplayerid][pGodMod] = false;
		if(playerid == giveplayerid) //Если Вы после пробела ввели свой id
		{
			SCM(playerid,COLOR_GREEN,"Режим бога деактивирован");
		}
		else // Если чужой id
		{
			SCM(playerid,COLOR_GREEN,"Режим бога деактивирован");
			SCM(giveplayerid,COLOR_GREEN,"Режим бога деактивирован");
		}
	}
	return 1;
}



Теперь в конец мода:
public GodMod(id) // Таймер, отвечающий за Ваше бессмертие
{
	SetPlayerHealth(id,100000);
	RepairVehicle(GetPlayerVehicleID(id)); 
	return 1;
}



Если понравилось, то не пожалей плюсик :biggrin:

Сообщение отредактировал Sashok_pipe: 15 Июнь 2018 - 21:18

0

#2
Пользователь офлайн   Sonic X 

  • Х_X
  • Вставить ник
  • Раскрыть информацию
new bool:god[MAX_PLAYERS];//ещё нужно сделать обнуление переменной

OnPlayerUpdate(playerid)
{
    if(god[playerid])
    {
        SetPlayerHealth(playerid, 10_000.0);
        if(IsPlayerInAnyVehicle(playerid))                           //тут бы я конечно сделал по другому
        {                                                            //можно было бы проверять через переменную
            SetVehicleHealth(GetPlayerVehicleID(playerid), 10_000.0);//а её изменять в OnPlayerStateChange
        }
    }
}

stock PlayerGodMode(playerid)
{
    god[playerid] = !god[playerid];
    return SendClientMessage(playerid, -1, god[playerid] ? (!"Режим вкл") : (!"Режим выкл"));
}

Сообщение отредактировал Sonic X: 14 Июнь 2018 - 16:45

1

#3
Пользователь офлайн   terill 

  • Знаток
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияSonic X (14 Июнь 2018 - 16:44) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

Разве new не обнуляются автоматически?
0

#4
Пользователь офлайн   Sonic X 

  • Х_X
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияterill (14 Июнь 2018 - 17:24) писал:

Разве new не обнуляются автоматически?

Если переменная глобальная, нет
0

#5
Пользователь офлайн   Sashok_pipe 

  • Новичок
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияSonic X (14 Июнь 2018 - 16:44) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]


Тоже хорошо, плюс)
0

#6
Пользователь офлайн   Sonic X 

  • Х_X
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияSashok_pipe (14 Июнь 2018 - 18:18) писал:

Тоже хорошо, плюс)

Я показал менее затратную систему, возможно, и более эффективную. :blush:
0

#7
Пользователь офлайн   terill 

  • Знаток
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияSonic X (14 Июнь 2018 - 17:30) писал:

Если переменная глобальная, нет

Да. Какая разница, глобальная или нет? Как оператор new поймет, насколько вложенный он?
0

#8
Пользователь офлайн   SooBad 

  • Тот, кто засрёт твой код, не показав, как кодить правильно
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияterill (14 Июнь 2018 - 20:03) писал:

Да. Какая разница, глобальная или нет? Как оператор new поймет, насколько вложенный он?

Глобальные и локальные переменные хранятся в разных секрециях памяти (в большинстве случаев, но не всегда), независимо от объявляющего их оператора.
"Динамичные" переменные - это переменные, лежащие на стеке, "статичные" - те, что лежат в куче и сегменте данных.
P.S. Локализация определяется не оператором, а маркерами компилятора.

Сообщение отредактировал SooBad: 15 Июнь 2018 - 01:17

0

#9
Пользователь офлайн   terill 

  • Знаток
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияSooBad (15 Июнь 2018 - 01:13) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

Я тут подумал, может нафиг этот павн? К си намного приятнее вернуться
0

#10
Пользователь офлайн   SooBad 

  • Тот, кто засрёт твой код, не показав, как кодить правильно
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияterill (15 Июнь 2018 - 01:49) писал:

Я тут подумал, может нафиг этот павн? К си намного приятнее вернуться

В си гораздо больше нюансов. Узкофункциональный язык, по типу pawn - это семечки.
Довольно странно, что после изучения си, у юзера возникают проблемы с освоением скриптового яп, написанного на его основе. :huh:
0

Поделиться темой:


  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика