Jump to content



novo projeto de remake interlúdio - servidor e cliente C6


mikado

Recommended Posts

NOTA DA ADMINISTRAÇÃO:

Este tópico está sendo atualizando no post abaixo:

 

 

Buenas amigos , hoy les estoy compartiendo algo que empezó como una idea y he logrado materializar acerca de una nueva forma de poder jugar Interlude... un experimento.
que es esto que estoy compartiendo ? , bueno vamos a dividirlo en dos partes :

1) el cliente que les dejo en el enlace , es el cliente Interlude con la particularidad que utilizaremos otro protocolo de comunicación el 216 que nos permitirá poder visualizar otras cosas que antes no podíamos ver porque su System original no nos lo permitía , además le he tenido que hacer un upgrade de algunas texturas y animaciones que nos permitirán visualizar items cosmeticos, mascotas , capas, transformaciones....demás. El  Cliente con estos upgrades pesa 3.41 GB .

2) los archivos del Datapack son originalmente Freya y hay que hacer ajustes aún para llevarlo a Interlude , pero bueno ya tenemos algunas cosas como spawn de mobs y algunas cosas más , aparte de que podríamos utilizar lo que ya está implementado , todas las Fortress, Territory Wars , Seven Signs y otras coasas .

Acá les dejo un breve video de como se ve esto :

 

 

 

Datapack :  

https://disk.yandex.com/d/trQNVVrJOYlcAA]https://disk.yandex.com/d/trQNVVrJOYlcAA

CLiente Interlude upgrade :

https://disk.yandex.com/d/F0e7jsO8UUy5Pg]https://disk.yandex.com/d/F0e7jsO8UUy5Pg

PD: me olvidé de mencionar que podemos utilizar cualquier source que queramos con este cliente simplemente adaptando los protcolos de comunicacion al 216 - si te interesa aqui tienes todos los protocolos : http://netpro.revengineer.eu/protocols/ , por ejemplo adaptar acis o l2jfrozen o cualquier otro o como en este caso hacer un downgrade de crónica . :-X
 


bueno espero que les guste , ya si voy haciendo algún avance en esto lo iré publicando aquí
Un saludo.
 

  • Like 5
  • I love it 3

5GpQKvZ.jpg

Link to comment
Share on other sites

Bons amigos, hoje estou compartilhando algo que começou como uma ideia e consegui me materializar sobre uma nova maneira de poder jogar Interlúdio... uma experiência.
O que é isso que estou compartilhando? , bem, vamos dividi-lo em duas partes:

1) o cliente que os deixou no link, é o cliente Interlude com a particularidade de que usaremos outro protocolo de comunicação no 216 que nos permitirá ser capazes de visualizar outras coisas que não pudemos ver antes porque seu Sistema original não nos permitiu, Também tive que atualizar algumas texturas e animações que nos permitirão visualizar itens cosméticos, animais de estimação, camadas, transformações.
O Cliente com esses upgrades pesa 3,41 GB.

2) Os arquivos Datapack são originalmente Freya e você tem que fazer ajustes ainda para levá-lo ao Interlude, mas bem, já temos algumas coisas como prole de mobs e mais algumas coisas, além disso poderíamos usar o que já está implementado, todos os Fortress, Territory Wars , Seven Signs e outros coasses.

Aqui está um pequeno vídeo de como isso se parece:

Datapack :  

https://disk.yandex.com/d/trQNVVrJOYlcAA]https://disk.yandex.com/d/trQNVVrJOYlcAA

CLiente Interlude upgrade :

https://disk.yandex.com/d/F0e7jsO8UUy5Pg]https://disk.yandex.com/d/F0e7jsO8UUy5Pg

Esqueci de mencionar que podemos usar qualquer fonte que quisermos com este cliente simplesmente adaptando os protocolos de comunicação para o 216 - se você estiver interessado aqui você tem todos os protocolos: http://netpro.revengineer.eu/protocols/ , por exemplo, adapte acis ou l2jfrozen ou qualquer outro ou como neste caso fazer um downgrade crônico.

bem, eu espero que você goste, uma vez que se eu estou fazendo qualquer progresso sobre isso eu vou publicá-lo aqui
Saudações.
 

  • Like 1
  • I love it 2

5GpQKvZ.jpg

Link to comment
Share on other sites

14 minutos atrás, cheewe disse:

Hola no se como poner en l2jfrozen para que admita este cliente, he puesto en dev 216 pero sospecho que no puede ser tan sencillo, me deja loguear pero no entrar al servidor, tampoco me da ningun error la consola

 

esta frozen que usas tanto es una nueva actualizacion? Por que la l2jacis y l2jmobius esta mucho enfrente de ella!

6562656.6.565.95.5.64.8.89....99999588799900

Link to comment
Share on other sites

Creo que lo que has hecho un downgrade de freya a interlude no?

yo estoy usando l2jfrozen 1132 creo queno va a ser posible que conecte ese cliente con este tipo de servidor

los paquetes son muy antiguos

si se te ocurre algo xd me dices, lo mas feo de interlude siempre es la interface xd

La idea que has tenido me parece muy interesante, animo !

Edited by cheewe
Link to comment
Share on other sites

hace 3 horas, cheewe dijo:

Hola no se como poner en l2jfrozen para que admita este cliente, he puesto en dev 216 pero sospecho que no puede ser tan sencillo, me deja loguear pero no entrar al servidor, tampoco me da ningun error la consola

 

hola amigo tiene que cambiar la comunicacion del cliente todos los packets de 746 es posible su caso a 216 , http://netpro.revengineer.eu/protocols/

 

 

hace 2 horas, Hashirama dijo:

Tem a mesma proposta desse tópico! mais usa o cliente H5

Source Rhongominyad 131 - CT0 ~ Interlude 

creo que no ha comprendido , pero no es lo mismo.... 

5GpQKvZ.jpg

Link to comment
Share on other sites

hace 3 horas, cheewe dijo:

Hola no se como poner en l2jfrozen para que admita este cliente, he puesto en dev 216 pero sospecho que no puede ser tan sencillo, me deja loguear pero no entrar al servidor, tampoco me da ningun error la consola

 

hola amigo tiene que cambiar la comunicacion del cliente todos los packets de 746 es posible su caso a 216 , http://netpro.revengineer.eu/protocols/

aunque toma mucho trabajo la compatibilidad le recomiendo hacer un downgrade del datapack Freya , el source que uso para las pruebas es L2jDP

5GpQKvZ.jpg

Link to comment
Share on other sites

Este cliente e files são freya

O mesmo deu downgrade na jogabilidade dos files

E removeu arquivos de conteúdo interlude + do cliente para deixar mais leve no aspecto peso

Não é interlude é freya, é tipo o que o Helios fez a uns anos atras pegou uma rev e cliente goddes e deu downgrade de jogabilidade para high five

Não entendi o por que "rompendo mitos que interlude não funciona capa, sendo que o cliente, não é interlude"

Mas, entretanto a ideia de fazer um interlude baseado no cliente e files freya é interessante, é diferente e é uma inovação querendo ou não. Não sei o que os jogadores achariam disso mas acredito eu que seria bem aceito.

Boa sorte no seu desenvolvimento, está ficando muito bom. 

Servidor High Five Custom PvP

https://www.la2prime.com

High Five 1000x - Tournament, Dressme full, Olympiad, Balance System, Dinamic PvP, Talisman, Bracelete, Sistemas Goddes of Destruction

Link to comment
Share on other sites

hace 10 minutos, Nukea dijo:

Este cliente e files são freya

O mesmo deu downgrade na jogabilidade dos files

E removeu arquivos de conteúdo interlude + do cliente para deixar mais leve no aspecto peso

Não é interlude é freya, é tipo o que o Helios fez a uns anos atras pegou uma rev e cliente goddes e deu downgrade de jogabilidade para high five

Não entendi o por que "rompendo mitos que interlude não funciona capa, sendo que o cliente, não é interlude"

Mas, entretanto a ideia de fazer um interlude baseado no cliente e files freya é interessante, é diferente e é uma inovação querendo ou não. Não sei o que os jogadores achariam disso mas acredito eu que seria bem aceito.

Boa sorte no seu desenvolvimento, está ficando muito bom. 

esta confundido amigo , el cliente es interlude !!  ,  puedo facilitar un system con el que usted, con este datapack puede conectar cualuier cliente interlude , solo que no verá los items porque simplemente no están los static meshes y texturas necesarias .

hace 23 minutos, cheewe dijo:

Hay repositorios de eso? me gustaría poder tener el core si es código abierto me refiero a l2jdb.

L2JPD Private Project Final

si al revés fuera , y alguien busca un system Interlude multicliente , para conectar con cualquier cliente yo lo puedo subir ... pero no tiene nada que ver con este proyecto son 2 cosas distintas.

5GpQKvZ.jpg

Link to comment
Share on other sites

Tá longe de ser um interlude Remake, pessoal deu nessa agora...

É apenas um freya impedido de selecionar a raça kamael pela inteface dessa system, mas se você pegar outra system original do FREYA com mesmo protocolo, você seleciona normal os Kamael.

Postou como se fosse algo pronto, mas ainda está longe de ser o que o post diz.

 

Link to comment
Share on other sites

hace 3 horas, SkyDoidao dijo:

Tá longe de ser um interlude Remake, pessoal deu nessa agora...

É apenas um freya impedido de selecionar a raça kamael pela inteface dessa system, mas se você pegar outra system original do FREYA com mesmo protocolo, você seleciona normal os Kamael.

Postou como se fosse algo pronto, mas ainda está longe de ser o que o post diz.

 

si claro cualquier system freya puede hacer login , pero debe bloquear desde el source en lo packets de creación que no admita la raza kamael .

esto solo le muestra la posibilidad que nos da poder utilizar este método, si le interesa . 

por otro lado creo que ha entendido mal , en ningún momento he dicho que era un trabajo finalizado , solo he dicho que es un experimento y una idea , si su idea era poder tomar un trabajo terminado y bien hecho entiendo su decepción .

 

 

se, naturalmente, qualquer sistema de freya pode fazer login, mas deve bloquear a fonte em que pacotes de criação não suportam a corrida kamael.

isso só mostra a possibilidade de que nos dá usar este método, se você estiver interessado. 

por outro lado eu acho que você entendeu mal, em nenhum momento eu disse que era um trabalho completo, eu só disse que é um experimento e uma ideia, se sua ideia era ser capaz de pegar um trabalho acabado e bem eco eu entendo sua decepção.

public class CharacterCreate implements IClientIncomingPacket
{
	protected static final Logger LOGGER_ACCOUNTING = Logger.getLogger("accounting");
	
	// cSdddddddddddd
	private String _name;
	private byte _sex;
	private int _classId;
	private byte _hairStyle;
	private byte _hairColor;
	private byte _face;
	
	@Override
	public boolean read(GameClient client, PacketReader packet)
	{
		_name = packet.readS();
		packet.readD(); // race
		_sex = (byte) packet.readD();
		_classId = packet.readD();
		packet.readD(); // _int
		packet.readD(); // _str
		packet.readD(); // _con
		packet.readD(); // _men
		packet.readD(); // _dex
		packet.readD(); // _wit
		_hairStyle = (byte) packet.readD();
		_hairColor = (byte) packet.readD();
		_face = (byte) packet.readD();
		return true;
	}
	
	@Override
	public void run(GameClient client)
	{
		// Last Verified: May 30, 2009 - Gracia Final - Players are able to create characters with names consisting of as little as 1,2,3 letter/number combinations.
		if ((_name.length() < 1) || (_name.length() > 16))
		{
			client.sendPacket(new CharCreateFail(CharCreateFail.REASON_16_ENG_CHARS));
			return;
		}
		
		if (Config.FORBIDDEN_NAMES.length > 0)
		{
			for (String st : Config.FORBIDDEN_NAMES)
			{
				if (_name.toLowerCase().contains(st.toLowerCase()))
				{
					client.sendPacket(new CharCreateFail(CharCreateFail.REASON_INCORRECT_NAME));
					return;
				}
			}
		}
		
		if (FakePlayerData.getInstance().getProperName(_name) != null)
		{
			client.sendPacket(new CharCreateFail(CharCreateFail.REASON_INCORRECT_NAME));
			return;
		}
		
		// Last Verified: May 30, 2009 - Gracia Final
		if (!Util.isAlphaNumeric(_name) || !isValidName(_name))
		{
			client.sendPacket(new CharCreateFail(CharCreateFail.REASON_INCORRECT_NAME));
			return;
		}
		
		if ((_face > 2) || (_face < 0))
		{
			LOGGER.warning("Character Creation Failure: Character face " + _face + " is invalid. Possible client hack. " + client);
			client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
			return;
		}
		
		if ((_hairStyle < 0) || ((_sex == 0) && (_hairStyle > 4)) || ((_sex != 0) && (_hairStyle > 6)))
		{
			LOGGER.warning("Character Creation Failure: Character hair style " + _hairStyle + " is invalid. Possible client hack. " + client);
			client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
			return;
		}
		
		if ((_hairColor > 3) || (_hairColor < 0))
		{
			LOGGER.warning("Character Creation Failure: Character hair color " + _hairColor + " is invalid. Possible client hack. " + client);
			client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
			return;
		}
		
		PlayerInstance newChar = null;
		PlayerTemplate template = null;
		
		/*
		 * DrHouse: Since checks for duplicate names are done using SQL, lock must be held until data is written to DB as well.
		 */
		synchronized (CharNameTable.getInstance())
		{
			if ((CharNameTable.getInstance().getAccountCharacterCount(client.getAccountName()) >= Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT) && (Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT != 0))
			{
				client.sendPacket(new CharCreateFail(CharCreateFail.REASON_TOO_MANY_CHARACTERS));
				return;
			}
			else if (CharNameTable.getInstance().doesCharNameExist(_name))
			{
				client.sendPacket(new CharCreateFail(CharCreateFail.REASON_NAME_ALREADY_EXISTS));
				return;
			}
			
			template = PlayerTemplateData.getInstance().getTemplate(_classId);
			if ((template == null) || (ClassId.getClassId(_classId).level() > 0))
			{
				client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
				return;
			}
			
			// Custom Feature: Disallow a race to be created.
			// Example: Humans can not be created if AllowHuman = False in Custom.properties
			switch (template.getRace())
			{
				case HUMAN:
				{
					if (!Config.ALLOW_HUMAN)
					{
						client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
						return;
					}
					break;
				}
				case ELF:
				{
					if (!Config.ALLOW_ELF)
					{
						client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
						return;
					}
					break;
				}
				case DARK_ELF:
				{
					if (!Config.ALLOW_DARKELF)
					{
						client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
						return;
					}
					break;
				}
				case ORC:
				{
					if (!Config.ALLOW_ORC)
					{
						client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
						return;
					}
					break;
				}
				case DWARF:
				{
					if (!Config.ALLOW_DWARF)
					{
						client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
						return;
					}
					break;
				}
				case KAMAEL:
				{
					if (!Config.ALLOW_KAMAEL)
					{
						client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
						return;
					}
					break;
				}
			}
			newChar = PlayerInstance.create(template, client.getAccountName(), _name, new PlayerAppearance(_face, _hairColor, _hairStyle, _sex != 0));
		}
		
		// HP and MP are at maximum and CP is zero by default.
		newChar.setCurrentHp(newChar.getMaxHp());
		newChar.setCurrentMp(newChar.getMaxMp());
		// newChar.setMaxLoad(template.getBaseLoad());
		client.sendPacket(CharCreateOk.STATIC_PACKET);
		
		initNewChar(client, newChar);
		
		LOGGER_ACCOUNTING.info("Created new character, " + newChar + ", " + client);
	}
	
	private boolean isValidName(String text)
	{
		return Config.CHARNAME_TEMPLATE_PATTERN.matcher(text).matches();
	}
	
	private void initNewChar(GameClient client, PlayerInstance newChar)
	{
		World.getInstance().addObject(newChar);
		
		if (Config.STARTING_ADENA > 0)
		{
			newChar.addAdena("Init", Config.STARTING_ADENA, null, false);
		}
		
		final PlayerTemplate template = newChar.getTemplate();
		if (Config.CUSTOM_STARTING_LOC)
		{
			final Location createLoc = new Location(Config.CUSTOM_STARTING_LOC_X, Config.CUSTOM_STARTING_LOC_Y, Config.CUSTOM_STARTING_LOC_Z);
			newChar.setXYZInvisible(createLoc.getX(), createLoc.getY(), createLoc.getZ());
		}
		else if (Config.FACTION_SYSTEM_ENABLED)
		{
			newChar.setXYZInvisible(Config.FACTION_STARTING_LOCATION.getX(), Config.FACTION_STARTING_LOCATION.getY(), Config.FACTION_STARTING_LOCATION.getZ());
		}
		else
		{
			final Location createLoc = template.getCreationPoint();
			newChar.setXYZInvisible(createLoc.getX(), createLoc.getY(), createLoc.getZ());
		}
		newChar.setTitle("");
		
		if (Config.ENABLE_VITALITY)
		{
			newChar.setVitalityPoints(Math.min(Config.STARTING_VITALITY_POINTS, PlayerStat.MAX_VITALITY_POINTS), true);
		}
		if (Config.STARTING_LEVEL > 1)
		{
			newChar.getStat().addLevel((byte) (Config.STARTING_LEVEL - 1));
		}
		if (Config.STARTING_SP > 0)
		{
			newChar.getStat().addSp(Config.STARTING_SP);
		}
		
		final List<PlayerItemTemplate> initialItems = InitialEquipmentData.getInstance().getEquipmentList(newChar.getClassId());
		if (initialItems != null)
		{
			for (PlayerItemTemplate ie : initialItems)
			{
				final ItemInstance item = newChar.getInventory().addItem("Init", ie.getId(), ie.getCount(), newChar, null);
				if (item == null)
				{
					LOGGER.warning("Could not create item during char creation: itemId " + ie.getId() + ", amount " + ie.getCount() + ".");
					continue;
				}
				
				if (item.isEquipable() && ie.isEquipped())
				{
					newChar.getInventory().equipItem(item);
				}
			}
		}
		
		for (SkillLearn skill : SkillTreeData.getInstance().getAvailableSkills(newChar, newChar.getClassId(), false, true))
		{
			newChar.addSkill(SkillData.getInstance().getSkill(skill.getSkillId(), skill.getSkillLevel()), true);
		}
		
		// Register all shortcuts for actions, skills and items for this new character.
		InitialShortcutData.getInstance().registerAllShortcuts(newChar);
		
		if (!Config.DISABLE_TUTORIAL)
		{
			startTutorialQuest(newChar);
		}
		
		EventDispatcher.getInstance().notifyEvent(new OnPlayerCreate(newChar, newChar.getObjectId(), newChar.getName(), client), Containers.Players());
		newChar.setOnlineStatus(true, false);
		Disconnection.of(client, newChar).storeMe().deleteMe();
		
		final CharSelectionInfo cl = new CharSelectionInfo(client.getAccountName(), client.getSessionId().playOkID1);
		client.setCharSelection(cl.getCharInfo());
	}
	
	/**
	 * TODO: Unhardcode it using the new listeners.
	 * @param player
	 */
	public void startTutorialQuest(PlayerInstance player)
	{
		final QuestState qs = player.getQuestState("Q00255_Tutorial");
		Quest q = null;
		if (qs == null)
		{
			q = QuestManager.getInstance().getQuest("Q00255_Tutorial");
		}
		if (q != null)
		{
			q.newQuestState(player).setState(State.STARTED);
		}
	}
}

 

hace 12 horas, mikado dijo:

Si , lo subire a la nube y dejo el enlace .

mas información : Info

source Source

 

 

Edited by mikado

5GpQKvZ.jpg

Link to comment
Share on other sites

 

Newbies.properties

# ---------------------------------------------------------------------------
# Character Races option for creation
# ---------------------------------------------------------------------------
# Disable any race for creation
# Default: False
DisableCreateHuman = False

# Default: False
DisableCreateElf = False

# Default: False
DisableCreateDarkElf = False

# Default: False
DisableCreateOrc = False

# Default: False
DisableCreateDwarf = False

# Default: False
DisableCreateKamael = False

# ---------------------------------------------------------------------------
# Character Races option for sex
# ---------------------------------------------------------------------------
# Disable any sex for creation
# Default: False
DisableCreateMen = False

# Default: False
DisableCreateWomen = False

 

 

package com.l2jserver.gameserver.network.clientpackets;

import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

import com.l2jserver.Config;
import com.l2jserver.gameserver.datatables.CharNameTable;
import com.l2jserver.gameserver.datatables.CharTemplateTable;
import com.l2jserver.gameserver.datatables.SkillTable;
import com.l2jserver.gameserver.datatables.xml.SkillTreesData;
import com.l2jserver.gameserver.idfactory.IdFactory;
import com.l2jserver.gameserver.instancemanager.QuestManager;
import com.l2jserver.gameserver.model.L2ItemInstance;
import com.l2jserver.gameserver.model.L2ShortCut;
import com.l2jserver.gameserver.model.L2SkillLearn;
import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;
import com.l2jserver.gameserver.model.quest.State;
import com.l2jserver.gameserver.network.L2GameClient;
import com.l2jserver.gameserver.network.serverpackets.CharCreateFail;
import com.l2jserver.gameserver.network.serverpackets.CharCreateOk;
import com.l2jserver.gameserver.network.serverpackets.CharSelectionInfo;
import com.l2jserver.gameserver.templates.chars.L2PcTemplate;
import com.l2jserver.gameserver.templates.chars.L2PcTemplate.PcTemplateItem;
import com.l2jserver.gameserver.util.Util;
import com.l2jserver.scripts.quests.Q00255_Tutorial;

@SuppressWarnings("unused")
public final class CharacterCreate extends L2GameClientPacket
{
	private static final String _C__0B_CHARACTERCREATE = "[C] 0B CharacterCreate";
	private static final Logger _log = Logger.getLogger(CharacterCreate.class.getName());
	protected static final Logger _logAccounting = Logger.getLogger("accounting");
	
	// cSdddddddddddd
	private String _name;
	private int _race;
	private byte _sex;
	private int _classId;
	private int _int;
	private int _str;
	private int _con;
	private int _men;
	private int _dex;
	private int _wit;
	private byte _hairStyle;
	private byte _hairColor;
	private byte _face;
	
	// Races Ids
	private final int Human = 0;
	private final int Elf = 1;
	private final int DarkElf = 2;
	private final int Orc = 3;
	private final int Dwarf = 4;
	private final int Kamael = 5;
	
	@Override
	protected void readImpl()
	{
		_name = readS();
		_race = readD();
		_sex = (byte) readD();
		_classId = readD();
		_int = readD();
		_str = readD();
		_con = readD();
		_men = readD();
		_dex = readD();
		_wit = readD();
		_hairStyle = (byte) readD();
		_hairColor = (byte) readD();
		_face = (byte) readD();
	}
	
	@Override
	protected void runImpl()
	{
		
		// Last Verified: May 30, 2009 - Gracia Final - Players are able to create characters with names consisting of as little as 1,2,3 letter/number combinations.
		if ((_name.length() < 1) || (_name.length() > 16))
		{
			if (Config.DEBUG)
			{
				_log.fine("Character Creation Failure: Character name " + _name + " is invalid. Message generated: Your title cannot exceed 16 characters in length. Please try again.");
			}
			
			sendPacket(new CharCreateFail(CharCreateFail.REASON_16_ENG_CHARS));
			return;
		}
		
		if (Config.FORBIDDEN_NAMES.length > 1)
		{
			for (String st : Config.FORBIDDEN_NAMES)
			{
				if (_name.toLowerCase().contains(st.toLowerCase()))
				{
					sendPacket(new CharCreateFail(CharCreateFail.REASON_INCORRECT_NAME));
					return;
				}
			}
		}
		
		// Last Verified: May 30, 2009 - Gracia Final
		if (!Util.isAlphaNumeric(_name) || !isValidName(_name))
		{
			if (Config.DEBUG)
			{
				_log.fine("Character Creation Failure: Character name " + _name + " is invalid. Message generated: Incorrect name. Please try again.");
			}
			
			sendPacket(new CharCreateFail(CharCreateFail.REASON_INCORRECT_NAME));
			return;
		}
		
		if ((_face > 2) || (_face < 0))
		{
			_log.warning("Character Creation Failure: Character face " + _face + " is invalid. Possible client hack. " + getClient());
			
			sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
			return;
		}
		
		if ((_hairStyle < 0) || ((_sex == 0) && (_hairStyle > 4)) || ((_sex != 0) && (_hairStyle > 6)))
		{
			_log.warning("Character Creation Failure: Character hair style " + _hairStyle + " is invalid. Possible client hack. " + getClient());
			
			sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
			return;
		}
		
		if ((_hairColor > 3) || (_hairColor < 0))
		{
			_log.warning("Character Creation Failure: Character hair color " + _hairColor + " is invalid. Possible client hack. " + getClient());
			
			sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
			return;
		}
		
		if (Config.DISABLE_CREATING_HUMAN)
		{
			if (_race == Human)
			{
				sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATE_NOT_ALLOWED));
				return;
			}
		}
		if (Config.DISABLE_CREATING_ELF)
		{
			if (_race == Elf)
			{
				sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATE_NOT_ALLOWED));
				return;
			}
		}
		if (Config.DISABLE_CREATING_DARK_ELF)
		{
			if (_race == DarkElf)
			{
				sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATE_NOT_ALLOWED));
				return;
			}
		}
		if (Config.DISABLE_CREATING_ORC)
		{
			if (_race == Orc)
			{
				sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATE_NOT_ALLOWED));
				return;
			}
		}
		if (Config.DISABLE_CREATING_DWARF)
		{
			if (_race == Dwarf)
			{
				sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATE_NOT_ALLOWED));
				return;
			}
		}
		if (Config.DISABLE_CREATING_KAMAEL)
		{
			if (_race == Kamael)
			{
				sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATE_NOT_ALLOWED));
				return;
			}
		}
		
		if (Config.DISABLE_CREATING_MEN)
		{
			if (_sex == 0)
			{
				sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATE_NOT_ALLOWED));
				return;
			}
		}
		
		if (Config.DISABLE_CREATING_WOMEN)
		{
			if (_sex == 1)
			{
				sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATE_NOT_ALLOWED));
				return;
			}
		}
		
		L2PcInstance newChar = null;
		L2PcTemplate template = null;
		
		/*
		 * DrHouse: Since checks for duplicate names are done using SQL, lock must be held until data is written to DB as well.
		 */
		synchronized (CharNameTable.getInstance())
		{
			if ((CharNameTable.getInstance().accountCharNumber(getClient().getAccountName()) >= Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT) && (Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT != 0))
			{
				if (Config.DEBUG)
				{
					_log.fine("Max number of characters reached. Creation failed.");
				}
				
				sendPacket(new CharCreateFail(CharCreateFail.REASON_TOO_MANY_CHARACTERS));
				return;
			}
			else if (CharNameTable.getInstance().doesCharNameExist(_name))
			{
				if (Config.DEBUG)
				{
					_log.fine("Character Creation Failure: Message generated: You cannot create another character. Please delete the existing character and try again.");
				}
				
				sendPacket(new CharCreateFail(CharCreateFail.REASON_NAME_ALREADY_EXISTS));
				return;
			}
			
			template = CharTemplateTable.getInstance().getTemplate(_classId);
			
			if ((template == null) || (template.classBaseLevel > 1))
			{
				if (Config.DEBUG)
				{
					_log.fine("Character Creation Failure: " + _name + " classId: " + _classId + " Template: " + template + " Message generated: Your character creation has failed.");
				}
				
				sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
				return;
			}
			
			int objectId = IdFactory.getInstance().getNextId();
			newChar = L2PcInstance.create(objectId, template, getClient().getAccountName(), _name, _hairStyle, _hairColor, _face, _sex != 0);
		}
		
		newChar.setCurrentHp(template.baseHpMax);
		newChar.setCurrentCp(template.baseCpMax);
		newChar.setCurrentMp(template.baseMpMax);
		// newChar.setMaxLoad(template.baseLoad);
		
		newChar.getVariables().set("@PARTY_REFUSE", false);
		newChar.getVariables().set("@TRADE_REFUSE", false);
		newChar.getVariables().set("@BUFFS_REFUSE", false);
		newChar.getVariables().set("@PM_REFUSE", false);
		newChar.getVariables().set("@GAIN_XP_SP", true);
		newChar.getVariables().set("@AUTO_LOOT", false);
		newChar.getVariables().set("@AUTO_SS", false);
		newChar.getVariables().set("@RED_SKY_DIE", false);
		newChar.getVariables().set("@AUTO_TOD", false);
		newChar.getVariables().set("@PLAYER_HELP", false);
		
		CharCreateOk cco = new CharCreateOk();
		sendPacket(cco);
		
		initNewChar(getClient(), newChar);
		
		LogRecord record = new LogRecord(Level.INFO, "Created new character");
		record.setParameters(new Object[]
		{
			newChar,
			getClient()
		});
		_logAccounting.log(record);
	}
	
	private boolean isValidName(String text)
	{
		boolean result = true;
		String test = text;
		Pattern pattern;
		try
		{
			pattern = Pattern.compile(Config.CNAME_TEMPLATE);
		}
		catch (PatternSyntaxException e) // case of illegal pattern
		{
			_log.warning("ERROR : Character name pattern of config is wrong!");
			pattern = Pattern.compile(".*");
		}
		Matcher regexp = pattern.matcher(test);
		if (!regexp.matches())
		{
			result = false;
		}
		return result;
	}
	
	private void initNewChar(L2GameClient client, L2PcInstance newChar)
	{
		if (Config.DEBUG)
		{
			_log.fine("Character init start");
		}
		
		L2World.getInstance().storeObject(newChar);
		
		if (Config.STARTING_ADENA > 0)
		{
			newChar.addAdena("Init", Config.STARTING_ADENA, null, false);
		}
		
		newChar.setTitle(Config.NEWBIE_CHAR_TITLE);
		
		final L2PcTemplate template = newChar.getTemplate();
		
		if (Config.SPAWN_CHAR)
		{
			newChar.setXYZInvisible(Config.SPAWN_X, Config.SPAWN_Y, Config.SPAWN_Z);
		}
		else
		{
			newChar.setXYZInvisible(template.spawnX, template.spawnY, template.spawnZ);
		}
		
		if (Config.STARTING_LEVEL > 1)
		{
			newChar.getStat().addLevel((byte) (Config.STARTING_LEVEL - 1));
		}
		if (Config.STARTING_SP > 0)
		{
			newChar.getStat().addSp(Config.STARTING_SP);
		}
		
		L2ShortCut shortcut;
		// add attack shortcut
		shortcut = new L2ShortCut(0, 0, 3, 2, 0, 1);
		newChar.registerShortCut(shortcut);
		// add take shortcut
		shortcut = new L2ShortCut(3, 0, 3, 5, 0, 1);
		newChar.registerShortCut(shortcut);
		// add sit shortcut
		shortcut = new L2ShortCut(10, 0, 3, 0, 0, 1);
		newChar.registerShortCut(shortcut);
		
		for (PcTemplateItem ia : template.getItems())
		{
			L2ItemInstance item = newChar.getInventory().addItem("Init", ia.getItemId(), ia.getAmount(), newChar, null);
			
			if (item == null)
			{
				_log.warning("Could not create item during char creation: itemId " + ia.getItemId() + ", amount " + ia.getAmount() + ".");
				continue;
			}
			
			// add tutbook shortcut
			if (item.getItemId() == 5588)
			{
				shortcut = new L2ShortCut(11, 0, 1, item.getObjectId(), 0, 1);
				newChar.registerShortCut(shortcut);
			}
			
			if (item.isEquipable() && ia.isEquipped())
			{
				newChar.getInventory().equipItem(item);
			}
		}
		
		for (L2SkillLearn skill : SkillTreesData.getInstance().getAvailableSkills(newChar, newChar.getClassId(), false, true))
		{
			newChar.addSkill(SkillTable.getInstance().getInfo(skill.getSkillId(), skill.getSkillLevel()), true);
			if ((skill.getSkillId() == 1001) || (skill.getSkillId() == 1177))
			{
				shortcut = new L2ShortCut(1, 0, 2, skill.getSkillId(), skill.getSkillLevel(), 1);
				newChar.registerShortCut(shortcut);
			}
			if (skill.getSkillId() == 1216)
			{
				shortcut = new L2ShortCut(10, 0, 2, skill.getSkillId(), skill.getSkillLevel(), 1);
				newChar.registerShortCut(shortcut);
			}
			if (Config.DEBUG)
			{
				_log.fine("Adding starter skill:" + skill.getSkillId() + " / " + skill.getSkillLevel());
			}
		}
		
		if (!Config.DISABLE_TUTORIAL)
		{
			startTutorialQuest(newChar);
		}
		
		Config.STARTING_COMMON_ITEMS.forEach((id, count) ->
		{
			newChar.addItem("CharCreate", id, count, null, false);
		});
		
		if (!newChar.getClassId().isMage())
		{
			Config.STARTING_BUFF_MAGIC_FIGHT.forEach((id, level) ->
			{
				SkillTable.getInstance().getSkill(id, level).getEffects(newChar, newChar);
			});
		}
		else
		{
			Config.STARTING_BUFF_MAGIC_MAGE.forEach((id, level) ->
			{
				SkillTable.getInstance().getSkill(id, level).getEffects(newChar, newChar);
			});
		}
		
		newChar.setOnlineStatus(true, false);
		newChar.deleteMe();
		
		CharSelectionInfo cl = new CharSelectionInfo(client.getAccountName(), client.getSessionId().playOkID1);
		client.getConnection().sendPacket(cl);
		client.setCharSelection(cl.getCharInfo());
		
		if (Config.DEBUG)
		{
			_log.fine("Character init end");
		}
	}
	
	public void startTutorialQuest(L2PcInstance player)
	{
		QuestState qs = player.getQuestState(Q00255_Tutorial.class.getSimpleName());
		Quest q = null;
		if (qs == null)
		{
			q = QuestManager.getInstance().getQuest(Q00255_Tutorial.class.getSimpleName());
		}
		if (q != null)
		{
			q.newQuestState(player).setState(State.STARTED);
		}
	}
	
	@Override
	public String getType()
	{
		return _C__0B_CHARACTERCREATE;
	}
}

 

Edited by mikado

5GpQKvZ.jpg

Link to comment
Share on other sites

6 horas atrás, mikado disse:

si claro cualquier system freya puede hacer login , pero debe bloquear desde el source en lo packets de creación que no admita la raza kamael .

esto solo le muestra la posibilidad que nos da poder utilizar este método, si le interesa . 

por otro lado creo que ha entendido mal , en ningún momento he dicho que era un trabajo finalizado , solo he dicho que es un experimento y una idea , si su idea era poder tomar un trabajo terminado y bien hecho entiendo su decepción .

 

 

se, naturalmente, qualquer sistema de freya pode fazer login, mas deve bloquear a fonte em que pacotes de criação não suportam a corrida kamael.

isso só mostra a possibilidade de que nos dá usar este método, se você estiver interessado. 

por outro lado eu acho que você entendeu mal, em nenhum momento eu disse que era um trabalho completo, eu só disse que é um experimento e uma ideia, se sua ideia era ser capaz de pegar um trabalho acabado e bem eco eu entendo sua decepção.

public class CharacterCreate implements IClientIncomingPacket
{
	protected static final Logger LOGGER_ACCOUNTING = Logger.getLogger("accounting");
	
	// cSdddddddddddd
	private String _name;
	private byte _sex;
	private int _classId;
	private byte _hairStyle;
	private byte _hairColor;
	private byte _face;
	
	@Override
	public boolean read(GameClient client, PacketReader packet)
	{
		_name = packet.readS();
		packet.readD(); // race
		_sex = (byte) packet.readD();
		_classId = packet.readD();
		packet.readD(); // _int
		packet.readD(); // _str
		packet.readD(); // _con
		packet.readD(); // _men
		packet.readD(); // _dex
		packet.readD(); // _wit
		_hairStyle = (byte) packet.readD();
		_hairColor = (byte) packet.readD();
		_face = (byte) packet.readD();
		return true;
	}
	
	@Override
	public void run(GameClient client)
	{
		// Last Verified: May 30, 2009 - Gracia Final - Players are able to create characters with names consisting of as little as 1,2,3 letter/number combinations.
		if ((_name.length() < 1) || (_name.length() > 16))
		{
			client.sendPacket(new CharCreateFail(CharCreateFail.REASON_16_ENG_CHARS));
			return;
		}
		
		if (Config.FORBIDDEN_NAMES.length > 0)
		{
			for (String st : Config.FORBIDDEN_NAMES)
			{
				if (_name.toLowerCase().contains(st.toLowerCase()))
				{
					client.sendPacket(new CharCreateFail(CharCreateFail.REASON_INCORRECT_NAME));
					return;
				}
			}
		}
		
		if (FakePlayerData.getInstance().getProperName(_name) != null)
		{
			client.sendPacket(new CharCreateFail(CharCreateFail.REASON_INCORRECT_NAME));
			return;
		}
		
		// Last Verified: May 30, 2009 - Gracia Final
		if (!Util.isAlphaNumeric(_name) || !isValidName(_name))
		{
			client.sendPacket(new CharCreateFail(CharCreateFail.REASON_INCORRECT_NAME));
			return;
		}
		
		if ((_face > 2) || (_face < 0))
		{
			LOGGER.warning("Character Creation Failure: Character face " + _face + " is invalid. Possible client hack. " + client);
			client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
			return;
		}
		
		if ((_hairStyle < 0) || ((_sex == 0) && (_hairStyle > 4)) || ((_sex != 0) && (_hairStyle > 6)))
		{
			LOGGER.warning("Character Creation Failure: Character hair style " + _hairStyle + " is invalid. Possible client hack. " + client);
			client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
			return;
		}
		
		if ((_hairColor > 3) || (_hairColor < 0))
		{
			LOGGER.warning("Character Creation Failure: Character hair color " + _hairColor + " is invalid. Possible client hack. " + client);
			client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
			return;
		}
		
		PlayerInstance newChar = null;
		PlayerTemplate template = null;
		
		/*
		 * DrHouse: Since checks for duplicate names are done using SQL, lock must be held until data is written to DB as well.
		 */
		synchronized (CharNameTable.getInstance())
		{
			if ((CharNameTable.getInstance().getAccountCharacterCount(client.getAccountName()) >= Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT) && (Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT != 0))
			{
				client.sendPacket(new CharCreateFail(CharCreateFail.REASON_TOO_MANY_CHARACTERS));
				return;
			}
			else if (CharNameTable.getInstance().doesCharNameExist(_name))
			{
				client.sendPacket(new CharCreateFail(CharCreateFail.REASON_NAME_ALREADY_EXISTS));
				return;
			}
			
			template = PlayerTemplateData.getInstance().getTemplate(_classId);
			if ((template == null) || (ClassId.getClassId(_classId).level() > 0))
			{
				client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
				return;
			}
			
			// Custom Feature: Disallow a race to be created.
			// Example: Humans can not be created if AllowHuman = False in Custom.properties
			switch (template.getRace())
			{
				case HUMAN:
				{
					if (!Config.ALLOW_HUMAN)
					{
						client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
						return;
					}
					break;
				}
				case ELF:
				{
					if (!Config.ALLOW_ELF)
					{
						client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
						return;
					}
					break;
				}
				case DARK_ELF:
				{
					if (!Config.ALLOW_DARKELF)
					{
						client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
						return;
					}
					break;
				}
				case ORC:
				{
					if (!Config.ALLOW_ORC)
					{
						client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
						return;
					}
					break;
				}
				case DWARF:
				{
					if (!Config.ALLOW_DWARF)
					{
						client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
						return;
					}
					break;
				}
				case KAMAEL:
				{
					if (!Config.ALLOW_KAMAEL)
					{
						client.sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
						return;
					}
					break;
				}
			}
			newChar = PlayerInstance.create(template, client.getAccountName(), _name, new PlayerAppearance(_face, _hairColor, _hairStyle, _sex != 0));
		}
		
		// HP and MP are at maximum and CP is zero by default.
		newChar.setCurrentHp(newChar.getMaxHp());
		newChar.setCurrentMp(newChar.getMaxMp());
		// newChar.setMaxLoad(template.getBaseLoad());
		client.sendPacket(CharCreateOk.STATIC_PACKET);
		
		initNewChar(client, newChar);
		
		LOGGER_ACCOUNTING.info("Created new character, " + newChar + ", " + client);
	}
	
	private boolean isValidName(String text)
	{
		return Config.CHARNAME_TEMPLATE_PATTERN.matcher(text).matches();
	}
	
	private void initNewChar(GameClient client, PlayerInstance newChar)
	{
		World.getInstance().addObject(newChar);
		
		if (Config.STARTING_ADENA > 0)
		{
			newChar.addAdena("Init", Config.STARTING_ADENA, null, false);
		}
		
		final PlayerTemplate template = newChar.getTemplate();
		if (Config.CUSTOM_STARTING_LOC)
		{
			final Location createLoc = new Location(Config.CUSTOM_STARTING_LOC_X, Config.CUSTOM_STARTING_LOC_Y, Config.CUSTOM_STARTING_LOC_Z);
			newChar.setXYZInvisible(createLoc.getX(), createLoc.getY(), createLoc.getZ());
		}
		else if (Config.FACTION_SYSTEM_ENABLED)
		{
			newChar.setXYZInvisible(Config.FACTION_STARTING_LOCATION.getX(), Config.FACTION_STARTING_LOCATION.getY(), Config.FACTION_STARTING_LOCATION.getZ());
		}
		else
		{
			final Location createLoc = template.getCreationPoint();
			newChar.setXYZInvisible(createLoc.getX(), createLoc.getY(), createLoc.getZ());
		}
		newChar.setTitle("");
		
		if (Config.ENABLE_VITALITY)
		{
			newChar.setVitalityPoints(Math.min(Config.STARTING_VITALITY_POINTS, PlayerStat.MAX_VITALITY_POINTS), true);
		}
		if (Config.STARTING_LEVEL > 1)
		{
			newChar.getStat().addLevel((byte) (Config.STARTING_LEVEL - 1));
		}
		if (Config.STARTING_SP > 0)
		{
			newChar.getStat().addSp(Config.STARTING_SP);
		}
		
		final List<PlayerItemTemplate> initialItems = InitialEquipmentData.getInstance().getEquipmentList(newChar.getClassId());
		if (initialItems != null)
		{
			for (PlayerItemTemplate ie : initialItems)
			{
				final ItemInstance item = newChar.getInventory().addItem("Init", ie.getId(), ie.getCount(), newChar, null);
				if (item == null)
				{
					LOGGER.warning("Could not create item during char creation: itemId " + ie.getId() + ", amount " + ie.getCount() + ".");
					continue;
				}
				
				if (item.isEquipable() && ie.isEquipped())
				{
					newChar.getInventory().equipItem(item);
				}
			}
		}
		
		for (SkillLearn skill : SkillTreeData.getInstance().getAvailableSkills(newChar, newChar.getClassId(), false, true))
		{
			newChar.addSkill(SkillData.getInstance().getSkill(skill.getSkillId(), skill.getSkillLevel()), true);
		}
		
		// Register all shortcuts for actions, skills and items for this new character.
		InitialShortcutData.getInstance().registerAllShortcuts(newChar);
		
		if (!Config.DISABLE_TUTORIAL)
		{
			startTutorialQuest(newChar);
		}
		
		EventDispatcher.getInstance().notifyEvent(new OnPlayerCreate(newChar, newChar.getObjectId(), newChar.getName(), client), Containers.Players());
		newChar.setOnlineStatus(true, false);
		Disconnection.of(client, newChar).storeMe().deleteMe();
		
		final CharSelectionInfo cl = new CharSelectionInfo(client.getAccountName(), client.getSessionId().playOkID1);
		client.setCharSelection(cl.getCharInfo());
	}
	
	/**
	 * TODO: Unhardcode it using the new listeners.
	 * @param player
	 */
	public void startTutorialQuest(PlayerInstance player)
	{
		final QuestState qs = player.getQuestState("Q00255_Tutorial");
		Quest q = null;
		if (qs == null)
		{
			q = QuestManager.getInstance().getQuest("Q00255_Tutorial");
		}
		if (q != null)
		{
			q.newQuestState(player).setState(State.STARTED);
		}
	}
}

 

mas información : Info

source Source

 

 

este link nao e da source, voce upou geodata e colocou como se fosse source.

 

54 minutos atrás, mikado disse:

Con este System que dejo aquí se puede conectar cualquier cliente Interlude a un datapack Freya .

Com este sistema que eu deixo aqui você pode conectar qualquer cliente Interlude a um datapack Freya.

System connect Intelude Client with Freya datapack

link source pls

 

j58fx5.gif

Link to comment
Share on other sites

  • 2 months later...
  • 2 weeks later...

Se ha cambiado el proyecto con basa ácis c6 , si algún admin puede borrar este post .
Se da continuación a remake interlude en el siguiente enlace :

 

Altere o projeto com base c6, se algum administrador puder excluir este post.
O remake é então interludido no link a seguir:

https://www.l2jbrasil.com/forums/topic/141229-interlude-acis-base-382-clean-custom-system-cloaks-of-light-cloak-of-dark/

 

5GpQKvZ.jpg

Link to comment
Share on other sites

  • Kelvin locked this topic
Guest
This topic is now closed to further replies.
  • Join now

    Be part of the largest and oldest communities about Lineage2 in Latin America.

×
×
  • Create New...

Important Information

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.