Advertisement
Guest User

Untitled

a guest
Nov 19th, 2017
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.87 KB | None | 0 0
  1. package net.sf.l2j.gameserver.network.clientpackets;
  2.  
  3. import java.util.logging.Logger;
  4. import java.util.regex.Matcher;
  5. import java.util.regex.Pattern;
  6. import java.util.regex.PatternSyntaxException;
  7.  
  8. import net.sf.l2j.Config;
  9. import net.sf.l2j.gameserver.datatables.AugmentationData;
  10. import net.sf.l2j.gameserver.datatables.CharNameTable;
  11. import net.sf.l2j.gameserver.datatables.CharTemplateTable;
  12. import net.sf.l2j.gameserver.datatables.SkillTable;
  13. import net.sf.l2j.gameserver.datatables.SkillTreeTable;
  14. import net.sf.l2j.gameserver.idfactory.IdFactory;
  15. import net.sf.l2j.gameserver.instancemanager.QuestManager;
  16. import net.sf.l2j.gameserver.model.FactionSystem;
  17. import net.sf.l2j.gameserver.model.L2Augmentation;
  18. import net.sf.l2j.gameserver.model.L2ItemInstance;
  19. import net.sf.l2j.gameserver.model.L2ShortCut;
  20. import net.sf.l2j.gameserver.model.L2SkillLearn;
  21. import net.sf.l2j.gameserver.model.L2World;
  22. import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  23. import net.sf.l2j.gameserver.model.actor.stat.PcStat;
  24. import net.sf.l2j.gameserver.model.quest.Quest;
  25. import net.sf.l2j.gameserver.model.quest.QuestState;
  26. import net.sf.l2j.gameserver.network.L2GameClient;
  27. import net.sf.l2j.gameserver.network.serverpackets.CharCreateFail;
  28. import net.sf.l2j.gameserver.network.serverpackets.CharCreateOk;
  29. import net.sf.l2j.gameserver.network.serverpackets.ExVariationResult;
  30. import net.sf.l2j.gameserver.templates.chars.L2PcTemplate;
  31. import net.sf.l2j.gameserver.templates.chars.L2PcTemplate.PcTemplateItem;
  32. import net.sf.l2j.gameserver.util.Util;
  33.  
  34. /**
  35. * This class ...
  36. *
  37. * @version $Revision: 1.9.2.3.2.8 $ $Date: 2005/03/27 15:29:30 $
  38. */
  39. @SuppressWarnings("unused")
  40. public final class CharacterCreate extends L2GameClientPacket
  41. {
  42. private static final String _C__0B_CHARACTERCREATE = "[C] 0B CharacterCreate";
  43. private static Logger _log = Logger.getLogger(CharacterCreate.class.getName());
  44. // cSdddddddddddd
  45. private String _name;
  46. private int _race;
  47. private byte _sex;
  48. private int _classId;
  49. private int _int;
  50. private int _str;
  51. private int _con;
  52. private int _men;
  53. private int _dex;
  54. private int _wit;
  55. private byte _hairStyle;
  56. private byte _hairColor;
  57. private byte _face;
  58. private static int startingx = -149365;
  59. private static int startingy = 255309;
  60. private static int startingz = -86;
  61.  
  62. @Override
  63. protected void readImpl()
  64. {
  65. _name = readS();
  66. _race = readD();
  67. _sex = (byte) readD();
  68. _classId = readD();
  69. _int = readD();
  70. _str = readD();
  71. _con = readD();
  72. _men = readD();
  73. _dex = readD();
  74. _wit = readD();
  75. _hairStyle = (byte) readD();
  76. _hairColor = (byte) readD();
  77. _face = (byte) readD();
  78. }
  79.  
  80. @Override
  81. protected void runImpl()
  82. {
  83. if (_name.length() < 2 || _name.length() > 16)
  84. {
  85. if (Config.DEBUG)
  86. {
  87. _log.fine("charname: " + _name + " is invalid. creation failed.");
  88. }
  89. sendPacket(new CharCreateFail(CharCreateFail.REASON_16_ENG_CHARS));
  90. return;
  91. }
  92. if (!Util.isAlphaNumeric(_name) || !isValidName(_name))
  93. {
  94. if (Config.DEBUG)
  95. {
  96. _log.fine("Character Creation Failure: Character name " + _name + " is invalid. Message generated: Incorrect name. Please try again.");
  97. }
  98. sendPacket(new CharCreateFail(CharCreateFail.REASON_INCORRECT_NAME));
  99. return;
  100. }
  101. L2PcInstance newChar = null;
  102. L2PcTemplate template = null;
  103. /*
  104. * DrHouse: Since checks for duplicate names are done using SQL,
  105. * lock must be held until data is written to DB as well.
  106. */
  107. synchronized (CharNameTable.getInstance())
  108. {
  109. if (CharNameTable.getInstance().accountCharNumber(getClient().getAccountName()) >= Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT && Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT != 0)
  110. {
  111. if (Config.DEBUG)
  112. {
  113. _log.fine("Max number of characters reached. Creation failed.");
  114. }
  115. sendPacket(new CharCreateFail(CharCreateFail.REASON_TOO_MANY_CHARACTERS));
  116. return;
  117. }
  118. else if (CharNameTable.getInstance().doesCharNameExist(_name))
  119. {
  120. if (Config.DEBUG)
  121. {
  122. _log.fine("charname: " + _name + " already exists. creation failed.");
  123. }
  124. sendPacket(new CharCreateFail(CharCreateFail.REASON_NAME_ALREADY_EXISTS));
  125. return;
  126. }
  127. template = CharTemplateTable.getInstance().getTemplate(_classId);
  128. if (Config.DEBUG)
  129. {
  130. _log.fine("charname: " + _name + " classId: " + _classId + " template: " + template);
  131. }
  132. if (template == null || template.classBaseLevel > 1)
  133. {
  134. sendPacket(new CharCreateFail(CharCreateFail.REASON_CREATION_FAILED));
  135. return;
  136. }
  137. int objectId = IdFactory.getInstance().getNextId();
  138. newChar = L2PcInstance.create(objectId, template, getClient().getAccountName(), _name, _hairStyle, _hairColor, _face, _sex != 0);
  139. }
  140. newChar.setCurrentHp(template.baseHpMax + 400);
  141. newChar.setCurrentCp(template.baseCpMax + 400);
  142. newChar.setCurrentMp(template.baseMpMax + 400);
  143.  
  144.  
  145. // send acknowledgement
  146. CharCreateOk cco = new CharCreateOk();
  147. sendPacket(cco);
  148. initNewChar(getClient(), newChar);
  149. }
  150.  
  151. public static boolean isValidName(String text)
  152. {
  153. return isValidName(text, false);
  154. }
  155.  
  156. public static boolean isValidName(String text, boolean fromDonate)
  157. {
  158. boolean result = true;
  159. String test = text;
  160. Pattern pattern;
  161. try
  162. {
  163. if (fromDonate)
  164. {
  165. pattern = Pattern.compile("[A-Za-z0-9]{2,23}");
  166. }
  167. else
  168. {
  169. pattern = Pattern.compile(Config.CNAME_TEMPLATE);
  170. }
  171. }
  172. catch (PatternSyntaxException e) // case of illegal pattern
  173. {
  174. _log.warning("ERROR : Character name pattern of config is wrong!");
  175. pattern = Pattern.compile(".*");
  176. }
  177. Matcher regexp = pattern.matcher(test);
  178. if (!regexp.matches())
  179. {
  180. result = false;
  181. }
  182. return result;
  183. }
  184.  
  185. private void initNewChar(L2GameClient client, L2PcInstance newChar)
  186. {
  187. if (Config.DEBUG)
  188. {
  189. _log.fine("Character init start");
  190. }
  191.  
  192. L2World.getInstance().storeObject(newChar);
  193. L2PcTemplate template = newChar.getTemplate();
  194. newChar.addAdena("Init", Config.STARTING_ADENA, null, false);
  195. newChar.setXYZInvisible(startingx, startingy, startingz);
  196. newChar.setTitle("L2Solstice");
  197. newChar.setVitalityPoints(PcStat.MAX_VITALITY_POINTS, true);
  198. newChar.getStat().addLevel((byte) (1)); // 85 - 1
  199. newChar.setNewbyChar(true);
  200. if (Config.STARTING_SP > 0)
  201. {
  202. newChar.getStat().addSp(Config.STARTING_SP);
  203. }
  204. L2ShortCut shortcut;
  205. for (PcTemplateItem ia : template.getItems())
  206. {
  207. L2ItemInstance item = newChar.getInventory().addItem("Init", ia.getItemId(), ia.getAmount(), newChar, null);
  208. // add wondrous cubic shortcut
  209. if (item.getItemId() == 60000)
  210. {
  211. shortcut = new L2ShortCut(11, 0, 1, item.getObjectId(), 0, 1);
  212. newChar.registerShortCut(shortcut);
  213. }
  214. if (item.isWeapon() || item.isJewelry())
  215. {
  216. item.setEnchantLevel(12);
  217. item.setAugmentation(AugmentationData.getInstance().generateRandomAugmentation(84, 3, item.getItem().getBodyPart(), false));
  218. }
  219. else if (item.isArmor())
  220. {
  221. item.setEnchantLevel(6);
  222. }
  223. if (item.isEquipable() && ia.isEquipped())
  224. {
  225. if (newChar.isMageClass())
  226. {
  227. if (item.getItemId() >= 6379 && item.getItemId() <= 6382 || item.getItemId() == 6583 || item.getItemId() == 6594)
  228. {
  229. continue;
  230. }
  231. }
  232. else
  233. {
  234. if (item.getItemId() >= 6383 && item.getItemId() <= 6386 || item.getItemId() == 6608 || item.getItemId() == 6594)
  235. {
  236. continue;
  237. }
  238. }
  239. newChar.getInventory().equipItemAndRecord(item);
  240. }
  241. }
  242. for (L2SkillLearn skill : SkillTreeTable.getInstance().getAvailableSkills(newChar, newChar.getClassId()))
  243. {
  244. newChar.addSkill(SkillTable.getInstance().getInfo(skill.getId(), skill.getLevel()), true);
  245. if (skill.getId() == 1001 || skill.getId() == 1177)
  246. {
  247. shortcut = new L2ShortCut(1, 0, 2, skill.getId(), skill.getLevel(), 1);
  248. newChar.registerShortCut(shortcut);
  249. }
  250. if (skill.getId() == 1216)
  251. {
  252. shortcut = new L2ShortCut(10, 0, 2, skill.getId(), skill.getLevel(), 1);
  253. newChar.registerShortCut(shortcut);
  254. }
  255. if (Config.DEBUG)
  256. {
  257. _log.fine("Adding starter skill:" + skill.getId() + " / " + skill.getLevel());
  258. }
  259. }
  260. startTutorialQuest(newChar);
  261. L2GameClient.saveCharToDisk(newChar);
  262. newChar.deleteMe(); // release the world of this character and it's inventory
  263. if (Config.DEBUG)
  264. {
  265. _log.fine("Character init end");
  266. }
  267. }
  268.  
  269. public void startTutorialQuest(L2PcInstance player)
  270. {
  271. QuestState qs = player.getQuestState("255_Tutorial");
  272. Quest q = null;
  273. if (qs == null)
  274. {
  275. q = QuestManager.getInstance().getQuest("255_Tutorial");
  276. }
  277. if (q != null)
  278. {
  279. q.newQuestState(player);
  280. }
  281. }
  282.  
  283. /*
  284. * (non-Javadoc)
  285. * @see net.sf.l2j.gameserver.clientpackets.ClientBasePacket#getType()
  286. */
  287. @Override
  288. public String getType()
  289. {
  290. return _C__0B_CHARACTERCREATE;
  291. }
  292. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement