Перейти к содержанию
Авторизация  
P1ckw1ck

Вывобод сообщений на екран при 3 килах и больше

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

Добрый день. есть проблема с отображением сообщения при 3ех и больше смертей.

 

Какие файлы в клиенте отвечают за вывод сообщений через ExShowScreenMessage

 

Скрин

 

post-3072-0-08637300-1430956502_thumb.png в низу в правом углу.

 

 

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


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

Все что касается сообщений должно быть в systemmsg-e.dat
Правда часто делают вывод через 
CustomMessage

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


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

У меня в сборке реализована данная функция полностью. Только у нас пишет по центру экрана + делает анонс. Смотри в разделе о продажах.

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


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

У меня в сборке реализована данная функция полностью. Только у нас пишет по центру экрана + делает анонс. Смотри в разделе о продажах.

Я как бы не спрашивал продает кто-то данную фичу.

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


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

Если не устраивает расположение, то позиция сообщения указывается через ScreenMessageAlign:

public static enum ScreenMessageAlign
	{
		TOP_LEFT, // в верху с лева
		TOP_CENTER, // в верху в центре
		TOP_RIGHT, // в верху с права
		MIDDLE_LEFT, // по центру с лева
		MIDDLE_CENTER, // по центру
		MIDDLE_RIGHT, // по центру с права
		BOTTOM_CENTER, // в низу по центр
		BOTTOM_RIGHT, // в низу с права
	}

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


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

На оборот оно как раз то и нормально стоит, сам текст и размер где можно поменять?

 

 

Если не устраивает расположение, то позиция сообщения указывается через ScreenMessageAlign:

public static enum ScreenMessageAlign
	{
		TOP_LEFT, // в верху с лева
		TOP_CENTER, // в верху в центре
		TOP_RIGHT, // в верху с права
		MIDDLE_LEFT, // по центру с лева
		MIDDLE_CENTER, // по центру
		MIDDLE_RIGHT, // по центру с права
		BOTTOM_CENTER, // в низу по центр
		BOTTOM_RIGHT, // в низу с права
	}

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


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

Нужно смотреть на реализацию, а там уже понятно будет. Не думаю что это сообщение в патче.

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


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

Нужно смотреть на реализацию, а там уже понятно будет. Не думаю что это сообщение в патче.

if (uberKills >= 3)
		{
			// names[] = {"ka raso,uz kiek killu,ar rasys factiono membam"};
			String names[] = {"Rampage,3,0", "Dominating,6,0", "Killing Spree,8,0", "Mmmonsterrr Kill,10,1", "Unstoppable,12,1", "Ultra Kill,14,1",
					"GOD LIKE,16,1", "Wicked Sick,18,1", "Ludicrous Kill,20,1", "HOLY SHIT,25,1", "OH MY GOD,30,1", "Killing Machine,35,1"};
			for (String kill : names)
			{
				if (uberKills == Integer.parseInt(kill.split(",")[1]))
				{
					text = getName() + " : " + kill.split(",")[0] + "!";
					Broadcast.toAllOnlinePlayers(new ExShowScreenMessage(text, 4500, 0x08, 1, false));
					if (kill.split(",")[2].equals("1"))
						Broadcast.sendMessToAllTeamPlayers("Игрок " + getName() + " сделал " + uberKills + " убийств без смертей!", getFactionId());
				}
			}
		}

мне кажется в патче, так как есть ("Игрок " + getName() + " сделал " + uberKills + " убийств без смертей!", getFactionId()) вот это сообщение, а на скрине его нету.

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


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

Он тебе будет выводить такое сообщение пока ты не задашь 1 для "Rampage,3,0", "Dominating,6,0", "Killing Spree,8,0"

text = getName() + " : " + kill.split(",")[0] + "!";  // Вот это будет
Broadcast.toAllOnlinePlayers(new ExShowScreenMessage(text, 4500, 0x08, 1, false));  
for (String kill : names)  // Проходит по массиву names[]
{
if (uberKills == Integer.parseInt(kill.split(",")[1]))  //Если uberKills == (Взять 2 элемент разделенный запятой из "Rampage,3,0" )
{
if (kill.split(",")[2].equals("1"))  // Если 3 элемент разделенный запятой из "Rampage,3,0" равен 1 то выводить так
Broadcast.sendMessToAllTeamPlayers("Игрок " + getName() + " сделал " + uberKills + " убийств без смертей!", getFactionId());
text = getName() + " : " + kill.split(",")[0] + "!";
Broadcast.toAllOnlinePlayers(new ExShowScreenMessage(text, 4500, 0x08, 1, false));


}
}
Изменено пользователем Izonami

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


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

Сделал как вы написали. добавил по 1 в "Rampage,3,1", "Dominating,6,1", "Killing Spree,8,1" и поменял код на ваш.

 

Скрин.

 

post-3072-0-91218800-1430989633_thumb.png

    public void increasePvpKills()
    {
		uberKills++;
		String text = "";

		if (uberKills >= 3)
		{
			// names[] = {"ka raso,uz kiek killu,ar rasys factiono membam"};
			String names[] = {"Rampage,3,1", "Dominating,6,1", "Killing Spree,8,1", "Mmmonsterrr Kill,10,1", "Unstoppable,12,1", "Ultra Kill,14,1",
					"GOD LIKE,16,1", "Wicked Sick,18,1", "Ludicrous Kill,20,1", "HOLY SHIT,25,1", "OH MY GOD,30,1", "Killing Machine,35,1"};
			for (String kill : names)  // Проходит по массиву names[]
			{
			if (uberKills == Integer.parseInt(kill.split(",")[1]))  //Если uberKills == (Взять 2 элемент разделенный запятой из "Rampage,3,0" )
			{
			if (kill.split(",")[2].equals("1"))  // Если 3 элемент разделенный запятой из "Rampage,3,0" равен 1 то выводить так
			Broadcast.sendMessToAllTeamPlayers("Игрок " + getName() + " сделал " + uberKills + " убийств без смертей!", getFactionId());
			text = getName() + " : " + kill.split(",")[0] + "!";
			Broadcast.toAllOnlinePlayers(new ExShowScreenMessage(text, 11500, 0x08, 1, false));

			}
			}
		}

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


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

я код менять не просил =) криво копировал просто. 
если уж переписывать, то лучше так
 

if (kill.split(",")[2].equals("1")) 
{
Broadcast.sendMessToAllTeamPlayers("Игрок " + getName() + " сделал " + uberKills + " убийств без смертей!", getFactionId());
}
else
{
text = getName() + " : " + kill.split(",")[0] + "!";
Broadcast.toAllOnlinePlayers(new ExShowScreenMessage(text, 11500, 0x08, 1, false));
}

да ещё и правильные бродкасты указать, а то Broadcast.toAllOnlinePlayers спамит всем в мире
а вот это Broadcast.sendMessToAllTeamPlayers я даже не знаю куда пишет.

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


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

 

я код менять не просил =) криво копировал просто. 

если уж переписывать, то лучше так

 

лучше через switch тогда будет, чем городить массив, сплитить, а потом ещё и ждать два фора

 

 
public void increasePvpKills()
 {
uberKills++;


switch (uberKills)
{                 
case 3:
Broadcast.sendMessToAllTeamPlayers("Игрок " + getName() + " сделал  TRIPLE kill!", getFactionId());
break;


case 5:
Broadcast.sendMessToAllTeamPlayers("Игрок " + getName() + " сделал PENTA Kill!", getFactionId());
break;


case 7:
Broadcast.sendMessToAllTeamPlayers("Игрок " + getName() + " сделал   MEGA KILL!", getFactionId());
break;


case 9:
Broadcast.sendMessToAllTeamPlayers("Игрок " + getName() + " сделал ULTRA KILL!", getFactionId());
break;


case 11:
Broadcast.sendMessToAllTeamPlayers("Игрок " + getName() + " сделал MONSTER KILL!", getFactionId());
break;


case 15:
Broadcast.sendMessToAllTeamPlayers("Игрок " + getName() + " сделал KILLING SPREE!", getFactionId());
break;
}
 

да ещё и правильные бродкасты указать, а то Broadcast.toAllOnlinePlayers спамит всем в мире

а вот это Broadcast.sendMessToAllTeamPlayers я даже не знаю куда пишет. 

 

понятно, пишет фракции 

правда я так и не дочитал, чей он гетит Id фракции, таргета или игрока

Изменено пользователем Izonami
  • Upvote 1

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


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

правда я так и не дочитал, чей он гетит Id фракции, таргета или игрока

Теперь не пишет на экране что сделал, а только в чате сообщений.

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


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

Это уже реализация данного типа отправки toAllOnlinePlayers в качестве аргумента может принимать пакеты
public static void toAllOnlinePlayers(L2GameServerPacket mov)
и естественно шлет он пакет 
onlinePlayer.sendPacket(mov);
в том что ты скинул, он шлет 
(new ExShowScreenMessage(text, 11500, 0x08, 1, false))

В функции для отправки только своей фракции (ну или чужой, в зависимости от id), принимает строку
public static void sendMessToAllTeamPlayers(String text, int factionId)
и шлет естественно через 
onlinePlayer.sendMessage(text);
которой отправляет в систем чат(?)

Можешь создать функцию с другими аргументами

public static void sendMessToAllTeamPlayers(L2GameServerPacket text, int factionId)
	{
		Collection<L2PcInstance> pls = null;
		if (factionId == 1)
			pls = L2World.getInstance().getAllTeam1().values();
		else if (factionId == 2)
			pls = L2World.getInstance().getAllTeam2().values();
		else if (factionId == 3)
			pls = L2World.getInstance().getAllTeam3().values();
			for (L2PcInstance onlinePlayer : pls)
				if (onlinePlayer.isOnline() == true)
					onlinePlayer.sendPacket(text);
	}

где вместо String он будет у тебя принимать пакет и слать так же пакет, но только придется переделать и в функции

public void increasePvpKills()

Вместо этого

Broadcast.sendMessToAllTeamPlayers("Игрок " + getName() + " сделал  TRIPLE kill!", getFactionId());
 
Вот это
Broadcast.sendMessToAllTeamPlayers(new ExShowScreenMessage("Игрок " + getName() + " сделал  TRIPLE kill!", 11500, 0x08, 1, false), getFactionId());
 
 
"Игрок " + getName() + " сделал  TRIPLE kill!",  - текст который пишем
11500, - время (хз что значит, но подозреваю что продолжительность отображения в мс)
0x08,  - положение на экране
все по той же пресловутой сетке
1 2 3
4 5 6
X 7 8
только в 16 системе
1, - размер текста
false - эффект (не читал дальше, не расскажу что это)
 

?-насчет система не уверен, мб в комбат чат

Изменено пользователем Izonami

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


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

Объясните мне, зачем вы пытаетесь изобрести велосипед?

Предлагаю вам встроить свою систему в вашу сборку без лишнего мозготраха.

Преимущества:
1. Возможность настройки через конфиги наград за каждое убийство в серии (Item, Count).

2. Красивое оформление (Выводит сообщение по центру) + анонс в о каждой серии убийств.

3. Присутствует система таймера как в доте (Если игрок не убивает никого 5 секунд серия обнуляется, если игрок убивает в течении 5 секунд, то отсчёт идёт заново).

4. Когда какой либо игрок прерывает серию убийств другого персонажа - выдаётся награда + пишет анонс.

5. Защита от набивания серий на одних и тех же персонажах / с одного IP.

 

Это как минимум уже готово. Плюс могу вырезать звуки и импортировать их в клиент чтобы проигрывались игроку при серии убийств.

Если интересно - пишите по контактам.

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


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

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

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

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