- 0
-
Quem Está Navegando
- Nenhum usuário registrado visualizando esta página.
-
Posts
-
Boa Noite Galera o @Mr.Kadu postou o link do projeto mas eu fiz um erro e estarei postando a correção. aqueles que baixou o projeto e tentou ligar e deu erro e por causa do java que foi copilado eu copilei no java 22 e o projeto e no java 17 vou postar o link aqui para vcs, vai incluso a Geodata O conteúdo está oculto, favor efetuar login ou se cadastrar! Entre ou Cadastre-se
-
Nova Revisão com AutoFarm e .Menu O conteúdo está oculto, favor efetuar login ou se cadastrar! Entre ou Cadastre-se
-
alguem tambem esta tendo problemas com email ? quando vc loga com a conta e nao tem email cadastrado. eu levo erro 500
-
muito bom meu amigo. vou começar os testes........
-
@Mr.Kadu VOU COMEÇA OS TESTES AGORA MESMO. VOU VER SE COLOCO UM PROJETO ONLINE. USANDO SUA BASE, AI SERÁ MUITO BOM PRA REPORTAR. abraços mano e muito boa iniciativa com esse projeto, que muitos usaram.
-
Por Gabrieljdb · Postado
Falta arquivo "armorgrp.dat" alguém poderia postar. Grato! -
Também to querendo só a textura do drop no chão, se alguém tiver.
-
Opa Obrigado amigo e aguarde que vamos tentar por todas as quests 99,9% funcional principalemnte porque projeto acis nao vi ate agora com quest 90%
-
O conteúdo está oculto, favor efetuar login ou se cadastrar! Entre ou Cadastre-se Nova Revisão 1.0 O conteúdo está oculto, favor efetuar login ou se cadastrar! Entre ou Cadastre-se
-
Pergunta
Divulgador Project IL
ola boa noite queria saber se alguem pode me ajudar a repassar para acis 398
~~~~~~~CODE~~~~~~~~~~
Index: java/net/sf/l2j/gameserver/model/CharSelectInfoPackage.java
===================================================================
--- java/net/sf/l2j/gameserver/model/CharSelectInfoPackage.java (revision 3)
+++ java/net/sf/l2j/gameserver/model/CharSelectInfoPackage.java (working copy)
@@ -51,6 +51,8 @@
private int _y = 0;
private int _z = 0;
private int _accessLevel = 0;
+ private int _customClassSkin = -1;
+ private int _customRaceSkin = -1;
public CharSelectInfoPackage(int objectId, String name)
{
@@ -353,4 +355,24 @@
{
_z = z;
}
+
+ public void setCustomClassSkin(int valor)
+ {
+ _customClassSkin = valor;
+ }
+
+ public void setCustomRaceSkin(int valor)
+ {
+ _customRaceSkin = valor;
+ }
+
+ public int getCustomClassSkin()
+ {
+ return _customClassSkin;
+ }
+
+ public int getCustomRaceSkin()
+ {
+ return _customRaceSkin;
+ }
}
\ No newline at end of file
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2ChangeSkinManagerInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2ChangeSkinManagerInstance.java (revision 0)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2ChangeSkinManagerInstance.java (revision 0)
@@ -0,0 +1,143 @@
+/*
+ * This program 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.
+ *
+ * This program 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 <http://www.gnu.org/licenses/>.
+ */
+package net.sf.l2j.gameserver.model.actor.instance;
+
+import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
+import net.sf.l2j.gameserver.model.base.ClassId;
+
+/**
+ * @author execanciani & Toxico
+ */
+public class L2ChangeSkinManagerInstance extends L2NpcInstance
+{
+ public enum Races
+ {
+ FIGHTER(net.sf.l2j.gameserver.model.base.Race.Human, ClassId.fighter),
+ MAGE(net.sf.l2j.gameserver.model.base.Race.Human, ClassId.mage),
+ ELVENFIGHTER(net.sf.l2j.gameserver.model.base.Race.Elf, ClassId.elvenFighter),
+ ELVENMAGE(net.sf.l2j.gameserver.model.base.Race.Elf, ClassId.elvenMage),
+ DARKFIGHTER(net.sf.l2j.gameserver.model.base.Race.DarkElf, ClassId.darkFighter),
+ DARKMAGE(net.sf.l2j.gameserver.model.base.Race.DarkElf, ClassId.darkMage),
+ ORCFIGHTER(net.sf.l2j.gameserver.model.base.Race.Orc, ClassId.orcFighter),
+ ORCMAGE(net.sf.l2j.gameserver.model.base.Race.Orc, ClassId.orcMage),
+ DWARVEN(net.sf.l2j.gameserver.model.base.Race.Dwarf, ClassId.dwarvenFighter);
+
+ private net.sf.l2j.gameserver.model.base.Race races;
+ private ClassId classId;
+
+ private Races(net.sf.l2j.gameserver.model.base.Race races, ClassId classid)
+ {
+ this.races = races;
+ this.classId = classid;
+ }
+
+ public int getRaceId()
+ {
+ return races.ordinal();
+ }
+
+ public int getClassId()
+ {
+ return classId.getId();
+ }
+ }
+
+
+ public L2ChangeSkinManagerInstance(int objectId, NpcTemplate template)
+ {
+ super(objectId, template);
+
+ }
+
+ @Override
+ public void onBypassFeedback(L2PcInstance player, String command)
+ {
+ Races races = null;
+ if (command.startsWith("HumanFighter"))
+ {
+ races = Races.FIGHTER;
+ }
+
+ else if (command.startsWith("HumanMage"))
+ {
+ races = Races.MAGE;
+ }
+
+ else if (command.startsWith("ElfFighter"))
+ {
+ races = Races.ELVENFIGHTER;
+ }
+
+ else if (command.startsWith("ElfMage"))
+ {
+ races = Races.ELVENMAGE;
+ }
+
+ else if (command.startsWith("DarkElfFighter"))
+ {
+ races = Races.DARKFIGHTER;
+ }
+
+ else if (command.startsWith("DarkElfMage"))
+ {
+ races = Races.DARKMAGE;
+ }
+
+ else if (command.startsWith("OrcFighter"))
+ {
+ races = Races.ORCFIGHTER;
+ }
+
+ else if (command.startsWith("OrcMage"))
+ {
+ races = Races.ORCMAGE;
+ }
+
+ else if (command.startsWith("Dwarven"))
+ {
+ races = Races.DWARVEN;
+
+ }
+ else if (command.startsWith("BackMainSkin"))
+ {
+ player.setCustomClassSkin(-1);
+ player.setCustomRaceSkin(-1);
+ }
+ setRaceCustomSkin(player, races);
+
+ player.broadcastCharInfo();
+ player.broadcastUserInfo();
+
+ }
+
+ @Override
+ public String getHtmlPath(int npcId, int val)
+ {
+ String filename = "";
+ if (val == 0)
+ filename = "" + npcId;
+ else
+ filename = npcId + "-" + val;
+
+ return "data/html/mods/ChangeSkin/" + filename + ".htm";
+ }
+
+ private static void setRaceCustomSkin(L2PcInstance player, Races valor)
+ {
+ if ((player == null) || (valor == null))
+ {
+ return;
+ }
+ player.setCustomRaceSkin(valor.getRaceId());
+ player.setCustomClassSkin(valor.getClassId());
+ }
+}
\ No newline at end of file
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 3)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (working copy)
@@ -313,8 +313,8 @@
private static final String DELETE_SKILL_SAVE = "DELETE FROM character_skills_save WHERE char_obj_id=? AND class_index=?";
private static final String INSERT_CHARACTER = "INSERT INTO characters (account_name,obj_Id,char_name,level,maxHp,curHp,maxCp,curCp,maxMp,curMp,face,hairStyle,hairColor,sex,exp,sp,karma,pvpkills,pkkills,clanid,race,classid,deletetime,cancraft,title,accesslevel,online,isin7sdungeon,clan_privs,wantspeace,base_class,nobless,power_grade,last_recom_date) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
- private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=? WHERE obj_id=?";
- private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, punish_level, punish_timer, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level FROM characters WHERE obj_id=?";
+ private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?, custom_race_skin=?, custom_class_skin=? WHERE obj_id=?";
+ private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, expBeforeDeath, sp, karma, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, punish_level, punish_timer, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level,custom_race_skin,custom_class_skin FROM characters WHERE obj_id=?";
private static final String RESTORE_CHAR_SUBCLASSES = "SELECT class_id,exp,sp,level,class_index FROM character_subclasses WHERE char_obj_id=? ORDER BY class_index ASC";
private static final String ADD_CHAR_SUBCLASS = "INSERT INTO character_subclasses (char_obj_id,class_id,exp,sp,level,class_index) VALUES (?,?,?,?,?,?)";
@@ -601,7 +601,10 @@
private final SummonRequest _summonRequest = new SummonRequest();
private final GatesRequest _gatesRequest = new GatesRequest();
-
+
+ private int _customClassSkin = -1;
+ private int _customRaceSkin = -1;
+
protected class ShortBuffTask implements Runnable
{
@Override
@@ -611,6 +614,7 @@
setShortBuffTaskSkillId(0);
}
}
+
protected static class SummonRequest
{
@@ -5581,6 +5585,9 @@
CursedWeaponsManager.getInstance().checkPlayer(player);
+ player.setCustomRaceSkin(rset.getInt("custom_race_skin"));
+ player.setCustomClassSkin(rset.getInt("custom_class_skin"));
+
player.setAllianceWithVarkaKetra(rset.getInt("varka_ketra_ally"));
player.setDeathPenaltyBuffLevel(rset.getInt("death_penalty_level"));
@@ -5922,7 +5929,9 @@
statement.setLong(47, getClanCreateExpiryTime());
statement.setString(48, getName());
statement.setLong(49, getDeathPenaltyBuffLevel());
- statement.setInt(50, getObjectId());
+ statement.setInt(50, getCustomRaceSkin());
+ statement.setInt(51, getCustomClassSkin());
+ statement.setInt(52, getObjectId());
statement.execute();
statement.close();
@@ -10705,4 +10714,30 @@
break;
}
}
+
+ public void setCustomClassSkin(int valor)
+ {
+ _customClassSkin = valor;
+ }
+
+ public void setCustomRaceSkin(int valor)
+ {
+ _customRaceSkin = valor;
+ }
+
+ public int getCustomClassSkin()
+ {
+ return _customClassSkin;
+ }
+
+ public int getCustomRaceSkin()
+ {
+ return _customRaceSkin;
+ }
+
+ public PcTemplate getCustomSkinTemplate()
+ {
+ return CharTemplateTable.getInstance().getTemplate(getCustomClassSkin());
+ }
+
}
\ No newline at end of file
Index: java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java
===================================================================
--- java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java (revision 3)
+++ java/net/sf/l2j/gameserver/network/serverpackets/CharInfo.java (working copy)
@@ -68,13 +68,22 @@
writeD(_heading);
writeD(_activeChar.getObjectId());
writeS(_activeChar.getName());
- writeD(_activeChar.getRace().ordinal());
+
+ if (_activeChar.getCustomRaceSkin() == -1)
+ writeD(_activeChar.getRace().ordinal());
+ else
+ writeD(_activeChar.getCustomRaceSkin());
+
writeD(_activeChar.getAppearance().getSex() ? 1 : 0);
- if (_activeChar.getClassIndex() == 0)
+ // if ((_activeChar.getClassIndex() == 0)
+ // {
+ if (_activeChar.getCustomClassSkin() == -1)
writeD(_activeChar.getClassId().getId());
else
- writeD(_activeChar.getBaseClass());
+ writeD(_activeChar.getCustomClassSkin());
+ // else
+ // writeD(_activeChar.getBaseClass());
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIRALL));
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
@@ -140,8 +149,17 @@
}
else
{
- writeF(_activeChar.getBaseTemplate().getCollisionRadius());
- writeF(_activeChar.getBaseTemplate().getCollisionHeight());
+ if (_activeChar.getCustomRaceSkin() == -1)
+ {
+ writeF(_activeChar.getBaseTemplate().getCollisionRadius());
+ writeF(_activeChar.getBaseTemplate().getCollisionHeight());
+ }
+ else
+ {
+ writeF(_activeChar.getCustomSkinTemplate().getCollisionRadius());
+ writeF(_activeChar.getCustomSkinTemplate().getCollisionHeight());
+ }
+
}
writeD(_activeChar.getAppearance().getHairStyle());
Index: java/net/sf/l2j/gameserver/network/serverpackets/CharSelectInfo.java
===================================================================
--- java/net/sf/l2j/gameserver/network/serverpackets/CharSelectInfo.java (revision 3)
+++ java/net/sf/l2j/gameserver/network/serverpackets/CharSelectInfo.java (working copy)
@@ -88,12 +88,16 @@
writeD(0x00); // ??
writeD(charInfoPackage.getSex());
- writeD(charInfoPackage.getRace());
+ if (charInfoPackage.getCustomRaceSkin() == -1)
+ writeD(charInfoPackage.getRace());
+ else
+ writeD(charInfoPackage.getCustomRaceSkin());
- if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId())
+ if ((charInfoPackage.getCustomClassSkin() == -1) && (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId()))
writeD(charInfoPackage.getClassId());
else
- writeD(charInfoPackage.getBaseClassId());
+ // writeD(charInfoPackage.getBaseClassId());
+ writeD(charInfoPackage.getCustomClassSkin());
writeD(0x01); // active ??
@@ -178,7 +182,7 @@
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
- PreparedStatement statement = con.prepareStatement("SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, sp, karma, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, accesslevel, online, char_slot, lastAccess, base_class FROM characters WHERE account_name=?");
+ PreparedStatement statement = con.prepareStatement("SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, sp, karma, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, accesslevel, online, char_slot, lastAccess, base_class,custom_race_skin,custom_class_skin FROM characters WHERE account_name=?");
statement.setString(1, loginName);
ResultSet charList = statement.executeQuery();
@@ -267,11 +271,17 @@
charInfopackage.setSp(chardata.getInt("sp"));
charInfopackage.setClanId(chardata.getInt("clanid"));
- charInfopackage.setRace(chardata.getInt("race"));
+ final int customRaceSkin = chardata.getInt("custom_race_skin");
+
+ if (customRaceSkin == -1)
+ charInfopackage.setRace(chardata.getInt("race"));
+ else
+ charInfopackage.setCustomRaceSkin(customRaceSkin);
+ final int customClassSkin = chardata.getInt("custom_class_skin");
final int baseClassId = chardata.getInt("base_class");
final int activeClassId = chardata.getInt("classid");
-
+
charInfopackage.setX(chardata.getInt("x"));
charInfopackage.setY(chardata.getInt("y"));
charInfopackage.setZ(chardata.getInt("z"));
@@ -313,10 +323,17 @@
/*
* Check if the base class is set to zero and alse doesn't match with the current active class, otherwise send the base class ID. This prevents chars created before base class was introduced from being displayed incorrectly.
*/
- if (baseClassId == 0 && activeClassId > 0)
- charInfopackage.setBaseClassId(activeClassId);
+ if (customClassSkin == -1)
+ if (baseClassId == 0 && activeClassId > 0)
+ charInfopackage.setBaseClassId(activeClassId);
+ else
+ charInfopackage.setBaseClassId(baseClassId);
else
- charInfopackage.setBaseClassId(baseClassId);
+ charInfopackage.setCustomClassSkin(customClassSkin);
+ // if (baseClassId == 0 && activeClassId > 0)
+ // charInfopackage.setBaseClassId(activeClassId);
+ // else
+ // charInfopackage.setBaseClassId(baseClassId);
charInfopackage.setDeleteTimer(deletetime);
charInfopackage.setLastAccess(chardata.getLong("lastAccess"));
Index: java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java
===================================================================
--- java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java (revision 3)
+++ java/net/sf/l2j/gameserver/network/serverpackets/UserInfo.java (working copy)
@@ -66,13 +66,21 @@
}
writeS(name);
- writeD(_activeChar.getRace().ordinal());
+ if (_activeChar.getCustomRaceSkin() == -1)
+ writeD(_activeChar.getRace().ordinal());
+ else
+ writeD(_activeChar.getCustomRaceSkin());
+ // writeD(_activeChar.getRace().ordinal());
writeD(_activeChar.getAppearance().getSex() ? 1 : 0);
- if (_activeChar.getClassIndex() == 0)
+ // if ((_activeChar.getClassIndex() == 0)
+ // {
+ if (_activeChar.getCustomClassSkin() == -1)
writeD(_activeChar.getClassId().getId());
else
- writeD(_activeChar.getBaseClass());
+ writeD(_activeChar.getCustomClassSkin());
+ // else
+ // writeD(_activeChar.getBaseClass());
writeD(_activeChar.getLevel());
writeQ(_activeChar.getExp());
@@ -198,8 +206,17 @@
}
else
{
- writeF(_activeChar.getBaseTemplate().getCollisionRadius());
- writeF(_activeChar.getBaseTemplate().getCollisionHeight());
+ if (_activeChar.getCustomRaceSkin() == -1)
+ {
+ writeF(_activeChar.getBaseTemplate().getCollisionRadius());
+ writeF(_activeChar.getBaseTemplate().getCollisionHeight());
+ }
+ else
+ {
+ writeF(_activeChar.getCustomSkinTemplate().getCollisionRadius());
+ writeF(_activeChar.getCustomSkinTemplate().getCollisionHeight());
+ }
+
}
writeD(_activeChar.getAppearance().getHairStyle());
~~~~~~~~~~~~~SQL ~~~~~~~~~~
`custom_race_skin` smallint(5) NOT NULL DEFAULT '0',
`custom_class_skin` smallint(5) NOT NULL DEFAULT '0',
~~~~~~~~~~~~~HTML~~~~~~~~~~
<html><body><center><button value="Human Fighter" action="bypass -h npc_%objectId%_HumanFighter" width=204 height=20 back="sek.cbui75" fore="sek.cbui76"><br1>
<button value="Human Mage" action="bypass -h npc_%objectId%_HumanMage" width=204 height=20 back="sek.cbui75" fore="sek.cbui76"><br1>
<button value="Elf Fighter" action="bypass -h npc_%objectId%_ElfFighter" width=204 height=20 back="sek.cbui75" fore="sek.cbui76"><br1>
<button value="Elf Mage" action="bypass -h npc_%objectId%_ElfMage" width=204 height=20 back="sek.cbui75" fore="sek.cbui76"><br1>
<button value="Dark Elf Fighter" action="bypass -h npc_%objectId%_DarkElfFighter" width=204 height=20 back="sek.cbui75" fore="sek.cbui76"><br1>
<button value="Dark Elf Mage" action="bypass -h npc_%objectId%_DarkElfMage" width=204 height=20 back="sek.cbui75" fore="sek.cbui76"><br1>
<button value="Orc Fighte" action="bypass -h npc_%objectId%_OrcFighter" width=204 height=20 back="sek.cbui75" fore="sek.cbui76"><br1>
<button value="Orc Mage" action="bypass -h npc_%objectId%_OrcMage" width=204 height=20 back="sek.cbui75" fore="sek.cbui76"><br1>
<button value="Dwarven" action="bypass -h npc_%objectId%_Dwarven" width=204 height=20 back="sek.cbui75" fore="sek.cbui76"><br1>
SI NO QUERES MAS TU CAMBIO DE SKIN<br1>
CON LA SIGUIENTE OPCION PUEDES<br1>
VOLVER A TENER TU CUERPO ANTERIOR<br1>
<button value="Back Main Skin" action="bypass -h npc_%objectId%_BackMainSkin" width=204 height=20 back="sek.cbui75" fore="sek.cbui76">
</center></body></html>
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts recomendados
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.