Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
  • 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);
            }
        }
    }
};

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

Share this post


Link to post
Share on other sites

11 answers to this question

Recommended Posts

  • 0

572335173_.png.e08e2a2bc28aae0c5ca91ec8c0e4964a.png

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

Share this post


Link to post
Share on other sites



  • 0

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

 

Edited by Troy1 (see edit history)

Share this post


Link to post
Share on other sites
  • 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, но вызов тот же будет

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites
  • 0

@123new 

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

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

Share this post


Link to post
Share on other sites
  • 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());
	}
};

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

Edited by Troy1 (see edit history)

Share this post


Link to post
Share on other sites
  • 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 не просто так придуман, поиграйся в нем.

Share this post


Link to post
Share on other sites
  • 0

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

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

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

Edited by Troy1 (see edit history)

Share this post


Link to post
Share on other sites
  • 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());
        }
    }
};

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

if (player)  {

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

}

image.png.35c3b8fb90222badde07c6eaeac9a170.png

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.