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

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

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

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

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

Спасайте! - Приконнекте к серверу, проигрование мелодии и приветствие в чат.

Всем привет.
Суть задачи. Когда игрок коннектится к серверу, нужно что-бы у игрока проиграла мелодия и написало приветственное сообщение.

У меня проблема, что приконнекте игрока, у всех играет мелодия и всем пишет приветственное сообщение)))

Вот код:

modded class PlayerBase extends ManBase
{
	private EffectSound m_SoC_Sound;
	void OnConnectWelcome(player)
	{ 
		if(m_SoC_Sound && m_SoC_Sound.IsSoundPlaying()) m_SoC_Sound.SoundStop();
		player.PlaySoundSet( m_SoC_Sound, "SoC_Sound_Quick_Event_SoundSet", 0, 0);
		player.MessageAction("Добро пожаловать на сервер - [RU]Shadow of Chernarus PVE! Приятной игры!");
	}
};

Вызывал вот так: 

modded class MissionServer extends MissionBase
{
    void InvokeOnConnect(PlayerBase player, PlayerIdentity identity)
    {
        super.InvokeOnConnect(player,identity);
        if (player)
        {
			GetGame().RPCSingleParam( player, SOC_SSM_RPCs.SOC_SSM, NULL, true);
        }
    }
}
class PluginSound : PluginBase {

 void PluginSound() {
        GetDayZGame().Event_OnRPC.Insert(OnRPC);
    }
    
    void ~PluginSound() {
        GetDayZGame().Event_OnRPC.Remove(OnRPC);
    }
    
    void OnRPC(PlayerIdentity sender, Object target, int rpc_type, ParamsReadContext ctx) {
        if (rpc_type == SOC_SSM_RPCs.SOC_SSM) {
            PlayerBase player = PlayerBase.Cast(g_Game.GetPlayer());
            if(player) {
                player.OnConnectWelcome(player);
            }
        }
    }
};

Куда копать ? Спасайте)))
За ранние благодарочка!

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


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

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

  • 0

572335173_.png.e08e2a2bc28aae0c5ca91ec8c0e4964a.png

если NULL то шлет от клиента серверу, либо всем игрокам (общий вызов)

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


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

@123new Так а как реализовать что бы именно игроку который коннектится прилетало сообщение ииграла мелодия только у него?

 

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

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


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

@123new Так а как реализовать что бы именно игроку который коннектится прилетало сообщение ииграла мелодия только у него?

 

та как бэ тупо так

modded class MissionServer extends MissionBase
{
    void InvokeOnConnect(PlayerBase player, PlayerIdentity identity)
    {
        super.InvokeOnConnect(player,identity);
        if (player)
        {
			GetGame().RPCSingleParam( player, SOC_SSM_RPCs.SOC_SSM, NULL, true,identity);
        }
    }
}

А еще можно это напрямую из PlayerBase вызывать из OnConnect, но вызов тот же будет

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

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


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

@123new 

Я пробовал вот так, на клиент не чего не приходит. sender пустой.

GetGame().RPCSingleParam( player, SOC_SSM_RPCs.SOC_SSM, NULL, true, PlayerIdentity identity);

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


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

@123new 
Сделал как ты показал и вот ответ: 

SCRIPT       : Пришёл ответ с MissionServer. sender Подключился игрок с ником - NULL
SCRIPT       : Пришёл ответ с MissionServer. player.GetName() Подключился игрок с ником - 
SCRIPT       : Пришёл запрос с PluginSound. Подключился игрок с ником - 

Вызвал вот так:
 

modded class MissionServer extends MissionBase
{
    void InvokeOnConnect(PlayerBase player, PlayerIdentity identity)
    {
        super.InvokeOnConnect(player,identity);
        if (player)
        {
			GetGame().RPCSingleParam( player, SOC_SSM_RPCs.SOC_SSM, NULL, true, identity);
        }
    }
}

Пришло сюда:
 

class PluginSound : PluginBase {
	
	void PluginSound() {
		GetDayZGame().Event_OnRPC.Insert(OnRPC);
	}
	
	void ~PluginSound() {
        GetDayZGame().Event_OnRPC.Remove(OnRPC);
	}
	
	void OnRPC(PlayerIdentity sender, Object target, int rpc_type, ParamsReadContext ctx) {
		if (rpc_type == SOC_SSM_RPCs.SOC_SSM) {
			
			PlayerBase player = PlayerBase.Cast(g_Game.GetPlayer());
			
			Print("Пришёл ответ с MissionServer. sender.GetName() Подключился игрок с ником - " + sender);
			
			if(player) {
				Print("Пришёл ответ с MissionServer. player.GetName() Подключился игрок с ником - " + player.GetName());
				
				player.OnConnectWelcome(player);
			}
		}
	}
};

Далее идёт вызов player.OnConnectWelcome(player); в PlayerBase

modded class PlayerBase extends ManBase
{
	void OnConnectWelcome(PlayerBase player)
	{
		if(m_SoC_Sound && m_SoC_Sound.IsSoundPlaying()) m_SoC_Sound.SoundStop();
		player.PlaySoundSet( m_SoC_Sound, "SoC_Sound_Quick_Event_SoundSet", 0, 0);
		player.MessageAction("Добро пожаловать на сервер - [RU]Shadow of Chernarus PVE! Приятной игры!");
		Print("Пришёл запрос с PluginSound. Подключился игрок с ником - " + player.GetName());
	}
};

Мелодия проигрывается при коннекте, но только у всех игроков. Я думаю надо как то по другому думать. Как получить данные с клиента, а не с сервера при коннекте игрока к серверу.
Только как это сделать? Ну или ещё какие варики есть?

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

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


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

@123new 
Сделал как ты показал и вот ответ: 

SCRIPT : Пришёл ответ с MissionServer. sender Подключился игрок с ником - NULL SCRIPT : Пришёл ответ с MissionServer. player.GetName() Подключился игрок с ником - SCRIPT : Пришёл запрос с PluginSound. Подключился игрок с ником -


SCRIPT       : Пришёл ответ с MissionServer. sender Подключился игрок с ником - NULL
SCRIPT       : Пришёл ответ с MissionServer. player.GetName() Подключился игрок с ником - 
SCRIPT       : Пришёл запрос с PluginSound. Подключился игрок с ником - 

Вызвал вот так:
 

modded class MissionServer extends MissionBase { void InvokeOnConnect(PlayerBase player, PlayerIdentity identity) { super.InvokeOnConnect(player,identity); if (player) { GetGame().RPCSingleParam( player, SOC_SSM_RPCs.SOC_SSM, NULL, true, identity); } } }


modded class MissionServer extends MissionBase
{
    void InvokeOnConnect(PlayerBase player, PlayerIdentity identity)
    {
        super.InvokeOnConnect(player,identity);
        if (player)
        {
			GetGame().RPCSingleParam( player, SOC_SSM_RPCs.SOC_SSM, NULL, true, identity);
        }
    }
}

Пришло сюда:
 

class PluginSound : PluginBase { void PluginSound() { GetDayZGame().Event_OnRPC.Insert(OnRPC); } void ~PluginSound() { GetDayZGame().Event_OnRPC.Remove(OnRPC); } void OnRPC(PlayerIdentity sender, Object target, int rpc_type, ParamsReadContext ctx) { if (rpc_type == SOC_SSM_RPCs.SOC_SSM) { PlayerBase player = PlayerBase.Cast(g_Game.GetPlayer()); Print("Пришёл ответ с MissionServer. sender.GetName() Подключился игрок с ником - " + sender); if(player) { Print("Пришёл ответ с MissionServer. player.GetName() Подключился игрок с ником - " + player.GetName()); player.OnConnectWelcome(player); } } } };


class PluginSound : PluginBase {
	
	void PluginSound() {
		GetDayZGame().Event_OnRPC.Insert(OnRPC);
	}
	
	void ~PluginSound() {
        GetDayZGame().Event_OnRPC.Remove(OnRPC);
	}
	
	void OnRPC(PlayerIdentity sender, Object target, int rpc_type, ParamsReadContext ctx) {
		if (rpc_type == SOC_SSM_RPCs.SOC_SSM) {
			
			PlayerBase player = PlayerBase.Cast(g_Game.GetPlayer());
			
			Print("Пришёл ответ с MissionServer. sender.GetName() Подключился игрок с ником - " + sender);
			
			if(player) {
				Print("Пришёл ответ с MissionServer. player.GetName() Подключился игрок с ником - " + player.GetName());
				
				player.OnConnectWelcome(player);
			}
		}
	}
};

Далее идёт вызов player.OnConnectWelcome(player); в PlayerBase

modded class PlayerBase extends ManBase { void OnConnectWelcome(PlayerBase player) { if(m_SoC_Sound && m_SoC_Sound.IsSoundPlaying()) m_SoC_Sound.SoundStop(); player.PlaySoundSet( m_SoC_Sound, "SoC_Sound_Quick_Event_SoundSet", 0, 0); player.MessageAction("Добро пожаловать на сервер - [RU]Shadow of Chernarus PVE! Приятной игры!"); Print("Пришёл запрос с PluginSound. Подключился игрок с ником - " + player.GetName()); } };


modded class PlayerBase extends ManBase
{
	void OnConnectWelcome(PlayerBase player)
	{
		if(m_SoC_Sound && m_SoC_Sound.IsSoundPlaying()) m_SoC_Sound.SoundStop();
		player.PlaySoundSet( m_SoC_Sound, "SoC_Sound_Quick_Event_SoundSet", 0, 0);
		player.MessageAction("Добро пожаловать на сервер - [RU]Shadow of Chernarus PVE! Приятной игры!");
		Print("Пришёл запрос с PluginSound. Подключился игрок с ником - " + player.GetName());
	}
};

Мелодия проигрывается при коннекте, но только у всех игроков. Я думаю надо как то по другому думать. Как получить данные с клиента, а не с сервера при коннекте игрока к серверу.
Только как это сделать? Ну или ещё какие варики есть?

playerbase.OnConnect не просто так придуман, поиграйся в нем.

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


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

@123new Через super.OnConnect();?

Я просто ещё мало об этом знаю)))

Лучше примерчиком, что бы лучше запоминалось))))

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

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


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

@123new Через super.OnConnect();?

Я просто ещё мало об этом знаю)))

Лучше примерчиком, что бы лучше запоминалось))))

modded class PlayerBase extends ManBase
{
    void OnConnectWelcome(PlayerBase player)
    {
        if(m_SoC_Sound && m_SoC_Sound.IsSoundPlaying()) m_SoC_Sound.SoundStop();
        player.PlaySoundSet( m_SoC_Sound, "SoC_Sound_Quick_Event_SoundSet", 0, 0);
        player.MessageAction("Добро пожаловать на сервер - [RU]Shadow of Chernarus PVE! Приятной игры!");
        Print("Пришёл запрос с PluginSound. Подключился игрок с ником - " + player.GetName());
    }
    
    override void OnConnect()
    {
        super.OnConnect();
        if (player)
        {
            GetGame().RPCSingleParam( player, SOC_SSM_RPCs.SOC_SSM, NULL, true, player.GetIdentity());
        }
    }
};

а так в целом слышно у всех или проигрывается у всех?

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


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

@123new Последний варик не проверял, так как не с кем проверить, чел спать ушёл. До этого было слышно у всех и в чат писало всем приветственное сообщение, когда подключался игрок.

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


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

if (player)  {

                  GetGame().RPCSingleParam( player, SOC_SSM_RPCs.SOC_SSM, NULL, true, player.GetIdentity());

}

image.png.35c3b8fb90222badde07c6eaeac9a170.png

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


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

player на this замени.
А вообще логируй что попадает в комманды и на каких игроков, поможет понять что происходит. Магия вне хогвартса вещь антинаучная, так что ЛСД не злоупотребляем ?

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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

Поддержка