Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • 0
Juze

Эффекты на камере игрока. PPEffects

Добрый вечер, я в моддинге недавно, всего несколько месяцев и решил изучить такую вещь как PPEffects. Я создал кастомный эффект, который должен менять цветовой фильтр на экране.

Также у меня есть серверный скрипт на основе радиационной зоны, который здесь выкладывали. В общем я хочу, чтобы в момент получения игроком урона от радиации к нему на экран применялся цветовой фильтр.

Например зеленый. 

				if (RadZone_isGasMask == false)
				{
			
					PPEffects.ModdedlColor();
					RadZone_damage_player	=	RadZone_player.GetHealth("GlobalHealth", "Health");
					RadZone_player.SetHealth("GlobalHealth", "Health", RadZone_damage_player - RadZone_damage_value);
				}

Подскажите пожалуйста, в чем моя ошибка. Может есть готовые примеры, как это сделать?

Изменено пользователем Juze (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

  • 1
10 часов назад, Juze сказал:

Я про то и говорю, что не знаю, как его вызвать. Я совсем еще зеленый в этом всем. Не подскажешь? Весь интернет обыскал, не нашел. 

В scripts дофига примеров

ну и курить  class PPEffects

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах





  • 1

Принцип

На сервере игрок вошел в зону

Код это отработал

И послал RPCSingleParam игроку

На стороне игрока принимаем в override OnRpc и вызываем функцию

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 1

Чисто как пример, для тех кто 'шарит немного'

1. 3_Game\Enums - создаем свой класс, например ERPCs.c с следующим содержимым:

enum My_Custom_RPC: ERPCs
{
	My_Custom_RPC_1,
	My_Custom_RPC_2,
	My_Custom_RPC_3,
}

Где My_Custom_RPC нашек кастомное имя своего класса для комманд вызова клиент-сервер и сервер-клиент, а My_Custom_RPC_1, My_Custom_RPC_2,My_Custom_RPC_3 соответственно id самих вызовов, которые игра сама заполнит как посчитает корректным

2. Моддим класс игрока 4_World\Entities\ManBase\PlayerBase.c на тему обработки вызова:

modded class PlayerBase
{
	// Выполняется после PRC процедуры на клиенте
	override void OnRPC(PlayerIdentity sender, int rpc_type, ParamsReadContext ctx)
	{
		super.OnRPC(sender, rpc_type, ctx); // выполняем родной код, чтобы не сломать ничего
		if (rpc_type == My_Custom_RPC.My_Custom_RPC_1) // сверка id пакета сообщения
		{
			Param1<string> v_ctx_PlayerConnected; // создаем переменную для проверки
			ctx.Read(v_ctx_PlayerConnected); //считывание значения, пересланного от сервера
			private string ReadedParam1_PlayerConnected = v_ctx_PlayerConnected.param1;  //запись в переменную значения, пересланного от сервера
			if(ReadedParam1_PlayerConnected == "true") // проверка записанного значения
			{
				// выполняем свой код
			}
		}
		
	}
	
	void MyCommand() // создаем свою функцию, например, для отправки комманды на клиент
	{
		private PlayerIdentity	v_PlayerIdentity	=	this.GetIdentity();	// получаем идентификатор игрока
		if (v_PlayerIdentity) // проверяем, еть ли идентификатор у игрока (вдруг труп уже или отключен)
		{
			private string control_value = "true";		// формируем переменную для отправки игроку
			private Param1< string  > v_Param = new Param1< string >(control_value );	// записываем переменную для отправки игроку		
			GetGame().RPCSingleParam(this, My_Custom_RPC.My_Custom_RPC_1, v_Param, true, v_PlayerIdentity); // отправляем переменную игроку
		}
	}
	override void OnConnect() // чисто серверная функция
	{
		super.OnConnect();	
		MyCommand(); // вызываем свою комманду на сервере
	}
}

пометки написал. OnConnect выполняется чисто на стороне сервера, на клиенте оно естественно будет чисто просто, чтоб было. Вместо этого можете делать свой вызов из своего скрипта, например, газ зоны

MyCommand - созданная для примера функция, отправляющая от сервера игроку комманду и пересылающая 1 текстовый параметр для примера на клиент игры

OnRPC - функция, обрабатывающая передаваемые значения от сервера на стороне клиента игры, как пример с получаем комманды и проверкой значения.

Изменено пользователем 123new (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 1

My_Custom_RPC_1 - 1

2

3

 

Такие РПЦ уже есть в игре (в смысле с номерами 1 2 и тп)

 

My_Custom_RPC_1 = 890211,

My_Custom_RPC_2 = 890212,

итп

 

Важно что бы не пересеклось с чужими или игровыми

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
PPEffects.ModdedlColor();

Многообещающий вызов, явно никому и ничего не говорящий вообще))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
2 минуты назад, 123new сказал:

PPEffects.ModdedlColor();


PPEffects.ModdedlColor();

Многообещающий вызов, явно никому и ничего не говорящий вообще))

Я про то и говорю, что не знаю, как его вызвать. Я совсем еще зеленый в этом всем. Не подскажешь? Весь интернет обыскал, не нашел. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
9 часов назад, Juze сказал:

Я про то и говорю, что не знаю, как его вызвать. Я совсем еще зеленый в этом всем. Не подскажешь? Весь интернет обыскал, не нашел. 

кого его то? Не совсем понимаю. Для начала что это вообще за вызов такой? Чисто придуманный с потолка или взятый откуда-то? Или может есть какие-то составляющие этого мода в других его файлах не озвученных, о которых не сказано ничего в теме. Исходя из выложенного в теме, я лишь вижу что в классе PPEffects создана какая-то функция с именем ModdedlColor и она вызывается, а что это..... гадалку разве что вызывать...

Более того, если ты хочешь воспользоваться PPEffects - то он скорее всего только на клиентской стороне работать будет, т.е. клиент-серверным модом, поскольку это взаимодействие с интерфейсом и прочими данными игрока.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
9 часов назад, 123new сказал:

кого его то? Не совсем понимаю. Для начала что это вообще за вызов такой? Чисто придуманный с потолка или взятый откуда-то? Или может есть какие-то составляющие этого мода в других его файлах не озвученных, о которых не сказано ничего в теме. Исходя из выложенного в теме, я лишь вижу что в классе PPEffects создана какая-то функция с именем ModdedlColor и она вызывается, а что это..... гадалку разве что вызывать...

Более того, если ты хочешь воспользоваться PPEffects - то он скорее всего только на клиентской стороне работать будет, т.е. клиент-серверным модом, поскольку это взаимодействие с интерфейсом и прочими данными игрока.

Разве человек не просит просто помочь ему с вызовом функции? Какая разница что у него в ModdedlColor ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
39 минут назад, aimlock сказал:

Разве человек не просит просто помочь ему с вызовом функции? Какая разница что у него в ModdedlColor ?

понятия не имею что просит, я это и спрашиваю чтобы понять

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Ааааа

Отмоддил ppeffects и создал там функцию ModdedColors?, так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Кст по поводу этой темы сразу. Есть идеи как можно нормально наложить эффект на экран (на подобие насыщенности от функции SetBloodSaturation) только с цветным фильтром? Наложение через свет гранату очень кривое и конфликтует с другими модификациями с подобными функциями и классами (например тот же самый выброс и пси-излучение). Если есть идеи пишите, как раз сейчас в ppref копаюсь. Пробывал еще через материал делать наложение, то же работает не очень как свет граната короч.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 минуту назад, BorizzK сказал:

Ааааа

Отмоддил ppeffects и создал там функцию ModdedColors?, так?

Да. И хочу, чтобы она применялась на игрока который находится в радиационной зоне. Но понятия не имею, как вызвать ее на конкретного игрока. 

Думал может тут мне помогут. В результате должно получится, что когда игрок в зоне действия, у него эффекты на экране.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Вызывается оно НАКЛИЕНТЕ

А ТАМ ИГРОК ОДИН И ДРУГИХ НЕТ

И нужен rpc с сервера на клиента

Изменено пользователем BorizzK (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
2 минуты назад, Juze сказал:

Да. И хочу, чтобы она применялась на игрока который находится в радиационной зоне. Но понятия не имею, как вызвать ее на конкретного игрока. 

Думал может тут мне помогут. В результате должно получится, что когда игрок в зоне действия, у него эффекты на экране.

При просьбе о помощи нужно предоставлять максимально понятную и открытую тех задачу. С рабочими материалами (например то что ты написал, этого не достаточно). Как говорил 123 ты не раскрыл для нас функцию ModdedColors (что она означает, что ты туда запихнул, как именно ты это запихнул?). Так же 

if (RadZone_isGasMask == false)
				{
			
					PPEffects.ModdedlColor();
					RadZone_damage_player	=	RadZone_player.GetHealth("GlobalHealth", "Health");
					RadZone_player.SetHealth("GlobalHealth", "Health", RadZone_damage_player - RadZone_damage_value);
				}

Это вообще выдернутый фрагмент, который мало о чем говорит для того что бы делать выводы как лучше тебе сделать наложение. Да и наложение которое ты попробывал сделать, даже если и будет накладываться, то после выхода из зоны действия отменяться эффект не будет. Наиболее правильно будет сделать через SymptomBase.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
4 минуты назад, BorizzK сказал:

Вызывается оно НАКЛИЕНТЕ

А ТАМ ИГРОК ОДИН И ДРУГИХ НЕТ

И нужен rpc с сервера на клиента

Я правильно понял, что мне на клиентской стороне, то есть в моде, нужно написать скрип с условием. Что-то на подобие: Если игрок = RadZone_player, то применить фильтр. 

А вот, как работать с RPC? Я много раз видел, что оно применяется, но как с этим работать так и не понял. Есть ли какие-то примеры?

Наверное я спрашиваю банальщину, но я совсем зеленый в вашей теме)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Примеров гора в скриптах

Прям вот готовых

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 минуту назад, BorizzK сказал:

Принцип

На сервере игрок вошел в зону

Код это отработал

И послал RPCSingleParam игроку

На стороне игрока принимаем в override OnRpc и вызываем функцию

Кажется я понял. Спасибо, попробую. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, Juze сказал:

Кажется я понял. Спасибо, попробую. 

понятно что там в рпц извлекаетс параметр и рпц должна иметь уникальный номер

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
2 часа назад, BorizzK сказал:

My_Custom_RPC_1 - 1

2

3

 

Такие РПЦ уже есть в игре (в смысле с номерами 1 2 и тп)

 

My_Custom_RPC_1 = 890211,

My_Custom_RPC_2 = 890212,

итп

 

Важно что бы не пересеклось с чужими или игровыми

им можно номер не задавать вообще, как выше дал, глоотает нормально вроде уже не один патч как

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
5 часов назад, 123new сказал:

им можно номер не задавать вообще, как выше дал, глоотает нормально вроде уже не один патч как

Я же правильно понял, что 

	void MyCommand() // создаем свою функцию, например, для отправки комманды на клиент
	{
		private PlayerIdentity	v_PlayerIdentity	=	this.GetIdentity();	// получаем идентификатор игрока
		if (v_PlayerIdentity) // проверяем, еть ли идентификатор у игрока (вдруг труп уже или отключен)
		{
			private string control_value = "true";		// формируем переменную для отправки игроку
			private Param1< string  > v_Param = new Param1< string >(control_value );	// записываем переменную для отправки игроку		
			GetGame().RPCSingleParam(this, My_Custom_RPC.My_Custom_RPC_1, v_Param, true, v_PlayerIdentity); // отправляем переменную игроку
		}
	}

является серверной частью и это нужно было вписать в серверный скрипт с РАД/ГАЗ зоной? Просто я ее добавил и запустив сервер, во время компиляции задания вылетает ошибка, что 'this' or 'super' outside of class is not valid. Я даже наивно попробовал внести его в modded class PlayerBase прям на серверной части, но разумеется у меня ничего не вышло. Подскажи пожалуйста, как быть.

Я также попробовал писать в серверный скрипт лишь 

	override void OnConnect() // чисто серверная функция
	{
		super.OnConnect();	
		MyCommand(); // вызываем свою комманду на сервере
	}

Но вылетает ошибка, что OnConnect помечен, как override, но здесь нет функции с таким именем в базовых классах. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
4 часа назад, Juze сказал:

Я же правильно понял, что 

void MyCommand() // создаем свою функцию, например, для отправки комманды на клиент { private PlayerIdentity v_PlayerIdentity = this.GetIdentity(); // получаем идентификатор игрока if (v_PlayerIdentity) // проверяем, еть ли идентификатор у игрока (вдруг труп уже или отключен) { private string control_value = "true"; // формируем переменную для отправки игроку private Param1< string > v_Param = new Param1< string >(control_value ); // записываем переменную для отправки игроку GetGame().RPCSingleParam(this, My_Custom_RPC.My_Custom_RPC_1, v_Param, true, v_PlayerIdentity); // отправляем переменную игроку } }


	void MyCommand() // создаем свою функцию, например, для отправки комманды на клиент
	{
		private PlayerIdentity	v_PlayerIdentity	=	this.GetIdentity();	// получаем идентификатор игрока
		if (v_PlayerIdentity) // проверяем, еть ли идентификатор у игрока (вдруг труп уже или отключен)
		{
			private string control_value = "true";		// формируем переменную для отправки игроку
			private Param1< string  > v_Param = new Param1< string >(control_value );	// записываем переменную для отправки игроку		
			GetGame().RPCSingleParam(this, My_Custom_RPC.My_Custom_RPC_1, v_Param, true, v_PlayerIdentity); // отправляем переменную игроку
		}
	}

является серверной частью и это нужно было вписать в серверный скрипт с РАД/ГАЗ зоной? Просто я ее добавил и запустив сервер, во время компиляции задания вылетает ошибка, что 'this' or 'super' outside of class is not valid. Я даже наивно попробовал внести его в modded class PlayerBase прям на серверной части, но разумеется у меня ничего не вышло. Подскажи пожалуйста, как быть.

 

верно понял все. А насчет ошибки - это надо смотреть в том контексте, куда ты это запихнул. Например, this в классе PlayerBase означает персонажа игрока класса PlayerBase, т.е. объект того класса. куда ты функцию впихнул. В другом своем классе этого может вовсе не существовать, т.е. будет корректнее вместо

	void MyCommand() // создаем свою функцию, например, для отправки комманды на клиент
	{
		private PlayerIdentity	v_PlayerIdentity	=	this.GetIdentity();	// получаем идентификатор игрока
		if (v_PlayerIdentity) // проверяем, еть ли идентификатор у игрока (вдруг труп уже или отключен)
		{
			private string control_value = "true";		// формируем переменную для отправки игроку
			private Param1< string  > v_Param = new Param1< string >(control_value );	// записываем переменную для отправки игроку		
			GetGame().RPCSingleParam(this, My_Custom_RPC.My_Custom_RPC_1, v_Param, true, v_PlayerIdentity); // отправляем переменную игроку
		}
	}

использовать такую функцию например

	void MyCommand(PlayerBase player) // создаем свою функцию, например, для отправки комманды на клиент
	{
		private PlayerIdentity	v_PlayerIdentity	=	player.GetIdentity();	// получаем идентификатор игрока
		if (v_PlayerIdentity) // проверяем, еть ли идентификатор у игрока (вдруг труп уже или отключен)
		{
			private string control_value = "true";		// формируем переменную для отправки игроку
			private Param1< string  > v_Param = new Param1< string >(control_value );	// записываем переменную для отправки игроку		
			GetGame().RPCSingleParam(player, My_Custom_RPC.My_Custom_RPC_1, v_Param, true, v_PlayerIdentity); // отправляем переменную игроку
		}
	}

с передачей персонажа игрока в функцию. Надеюсь смысл понят.

4 часа назад, Juze сказал:

Я также попробовал писать в серверный скрипт лишь 

override void OnConnect() // чисто серверная функция { super.OnConnect(); MyCommand(); // вызываем свою комманду на сервере }


	override void OnConnect() // чисто серверная функция
	{
		super.OnConnect();	
		MyCommand(); // вызываем свою комманду на сервере
	}

Но вылетает ошибка, что OnConnect помечен, как override, но здесь нет функции с таким именем в базовых классах. 

это существует лишь в классе PlayerBase, советую изучить структуру оригинального класса игры, а также хотя бы гайд-статью из темы

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.