/*
* Copyright (C) 2004-2015 L2J Server
*
* This file is part of L2J Server.
*
* L2J Server is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* L2J Server is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
package com.l2jserver.gameserver.network.serverpackets;
import java.util.ArrayList;
import java.util.List;
import com.l2jserver.gameserver.network.NpcStringId;
import com.l2jserver.gameserver.network.SystemMessageId;
/**
* ExShowScreenMessage server packet implementation.
* @author Kerberos
*/
public class ExShowScreenMessage extends L2GameServerPacket
{
private final int _type;
private final int _sysMessageId;
private final int _unk1;
private final int _unk2;
private final int _unk3;
private final boolean _fade;
private final int _size;
private final int _position;
private final boolean _effect;
private final String _text;
private final int _time;
private final int _npcString;
private List _parameters = null;
// Positions
public static final byte TOP_LEFT = 0x01;
public static final byte TOP_CENTER = 0x02;
public static final byte TOP_RIGHT = 0x03;
public static final byte MIDDLE_LEFT = 0x04;
public static final byte MIDDLE_CENTER = 0x05;
public static final byte MIDDLE_RIGHT = 0x06;
public static final byte BOTTOM_CENTER = 0x07;
public static final byte BOTTOM_RIGHT = 0x08;
/**
* Display a String on the screen for a given time.
* @param text the text to display
* @param time the display time
*/
public ExShowScreenMessage(String text, int time)
{
_type = 2;
_sysMessageId = -1;
_unk1 = 0;
_unk2 = 0;
_unk3 = 0;
_fade = false;
_position = TOP_CENTER;
_text = text;
_time = time;
_size = 0;
_effect = false;
_npcString = -1;
}
/**
* Display a NPC String on the screen for a given position and time.
* @param npcString the NPC String Id
* @param position the position on the screen
* @param time the display time
* @param params the String parameters
*/
public ExShowScreenMessage(NpcStringId npcString, int position, int time, String... params)
{
_type = 2;
_sysMessageId = -1;
_unk1 = 0x00;
_unk2 = 0x00;
_unk3 = 0x00;
_fade = false;
_position = position;
_text = null;
_time = time;
_size = 0x00;
_effect = false;
_npcString = npcString.getId();
if (params != null)
{
addStringParameter(params);
}
}
/**
* Display a System Message on the screen for a given position and time.
* @param systemMsg the System Message Id
* @param position the position on the screen
* @param time the display time
* @param params the String parameters
*/
public ExShowScreenMessage(SystemMessageId systemMsg, int position, int time, String... params)
{
_type = 2;
_sysMessageId = systemMsg.getId();
_unk1 = 0x00;
_unk2 = 0x00;
_unk3 = 0x00;
_fade = false;
_position = position;
_text = null;
_time = time;
_size = 0x00;
_effect = false;
_npcString = -1;
if (params != null)
{
addStringParameter(params);
}
}
/**
* Display a Text, System Message or a NPC String on the screen for the given parameters.
* @param type 0 - System Message, 1 - Text, 2 - NPC String
* @param messageId the System Message Id
* @param position the position on the screen
* @param unk1
* @param size the font size 0 - normal, 1 - small
* @param unk2
* @param unk3
* @param showEffect upper effect (0 - disabled, 1 enabled) - _position must be 2 (center) otherwise no effect
* @param time the display time
* @param fade the fade effect (0 - disabled, 1 enabled)
* @param text the text to display
* @param npcString
* @param params the String parameters
*/
public ExShowScreenMessage(int type, int messageId, int position, int unk1, int size, int unk2, int unk3, boolean showEffect, int time, boolean fade, String text, NpcStringId npcString, String params)
{
_type = type;
_sysMessageId = messageId;
_unk1 = unk1;
_unk2 = unk2;
_unk3 = unk3;
_fade = fade;
_position = position;
_text = text;
_time = time;
_size = size;
_effect = showEffect;
_npcString = npcString.getId();
}
/**
* String parameter for argument S1,S2,.. in npcstring-e.dat
* @param params the parameter
*/
public void addStringParameter(String... params)
{
if (_parameters == null)
{
_parameters = new ArrayList<>();
}
for (String param : params)
{
_parameters.add(param);
}
}
@Override
protected void writeImpl()
{
writeC(0xFE);
writeH(0x39);
writeD(_type);
writeD(_sysMessageId);
writeD(_position);
writeD(_unk1);
writeD(_size);
writeD(_unk2);
writeD(_unk3);
writeD(_effect ? 0x01 : 0x00);
writeD(_time);
writeD(_fade ? 0x01 : 0x00);
writeD(_npcString);
if (_npcString == -1)
{
writeS(_text);
}
else
{
if (_parameters != null)
{
for (String s : _parameters)
{
writeS(s);
}
}
}
}
}