Помогите сделать Shift+Click более полным - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Работа со скриптами

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.
Описание темы:касаемо точного отображения шанса дропа/спойла

Ответ
Опции темы
Непрочитано 21.11.2010, 02:28   #1
Новичок

Автор темы (Топик Стартер) Помогите сделать Shift+Click более полным

У меня очень мало познаний в скриптах, прошу помогите построить L2NpcActionShift.java так чтобы отображалось точные шансы дропа той или иной вещи в дроплесте

  1. /*
  2.  * This program is free software: you can redistribute it and/or modify it under
  3.  * the terms of the GNU General Public License as published by the Free Software
  4.  * Foundation, either version 3 of the License, or (at your option) any later
  5.  * version.
  6.  *
  7.  * This program is distributed in the hope that it will be useful, but WITHOUT
  8.  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  9.  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  10.  * details.
  11.  *
  12.  * You should have received a copy of the GNU General Public License along with
  13.  * this program. If not, see <http://www.gnu.org/licenses/>.
  14.  */
  15. package handlers.actionhandlers;
  16.  
  17. import core.l2regeneration.Config;
  18. import core.l2regeneration.gameserver.datatables.ItemTable;
  19. import core.l2regeneration.gameserver.handler.IActionHandler;
  20. import core.l2regeneration.gameserver.model.Elementals;
  21. import core.l2regeneration.gameserver.model.L2DropCategory;
  22. import core.l2regeneration.gameserver.model.L2DropData;
  23. import core.l2regeneration.gameserver.model.L2Object;
  24. import core.l2regeneration.gameserver.model.L2Object.InstanceType;
  25. import core.l2regeneration.gameserver.model.actor.L2Attackable;
  26. import core.l2regeneration.gameserver.model.actor.L2Character;
  27. import core.l2regeneration.gameserver.model.actor.L2Npc;
  28. import core.l2regeneration.gameserver.model.actor.instance.L2MerchantInstance;
  29. import core.l2regeneration.gameserver.model.actor.instance.L2PcInstance;
  30. import core.l2regeneration.gameserver.network.serverpackets.MyTargetSelected;
  31. import core.l2regeneration.gameserver.network.serverpackets.NpcHtmlMessage;
  32. import core.l2regeneration.gameserver.network.serverpackets.StatusUpdate;
  33. import core.l2regeneration.gameserver.skills.BaseStats;
  34. import core.l2regeneration.gameserver.skills.Stats;
  35. import core.l2regeneration.gameserver.templates.item.L2Item;
  36. import core.l2regeneration.util.StringUtil;
  37.  
  38. public class L2NpcActionShift implements IActionHandler
  39. {
  40. /**
  41. * Manage and Display the GM console to modify the L2NpcInstance (GM only).<BR><BR>
  42. *
  43. * <B><U> Actions (If the L2PcInstance is a GM only)</U> :</B><BR><BR>
  44. * <li>Set the L2NpcInstance as target of the L2PcInstance player (if necessary)</li>
  45. * <li>Send a Server->Client packet MyTargetSelected to the L2PcInstance player (display the select window)</li>
  46. * <li>If L2NpcInstance is autoAttackable, send a Server->Client packet StatusUpdate to the L2PcInstance in order to update L2NpcInstance HP bar </li>
  47. * <li>Send a Server->Client NpcHtmlMessage() containing the GM console about this L2NpcInstance </li><BR><BR>
  48. *
  49. * <FONT COLOR=#FF0000><B> <U>Caution</U> : Each group of Server->Client packet must be terminated by a ActionFailed packet in order to avoid
  50. * that client wait an other packet</B></FONT><BR><BR>
  51. *
  52. * <B><U> Example of use </U> :</B><BR><BR>
  53. * <li> Client packet : Action</li><BR><BR>
  54. */
  55. public boolean action(L2PcInstance activeChar, L2Object target, boolean interact)
  56. {
  57. // Check if the L2PcInstance is a GM
  58. if (activeChar.getAccessLevel().isGm())
  59. {
  60. // Set the target of the L2PcInstance activeChar
  61. activeChar.setTarget(target);
  62.  
  63. // Send a Server->Client packet MyTargetSelected to the L2PcInstance activeChar
  64. // The activeChar.getLevel() - getLevel() permit to display the correct color in the select window
  65. MyTargetSelected my = new MyTargetSelected(target.getObjectId(), activeChar.getLevel() - ((L2Character)target).getLevel());
  66. activeChar.sendPacket(my);
  67.  
  68. // Check if the activeChar is attackable (without a forced attack)
  69. if (target.isAutoAttackable(activeChar))
  70. {
  71. // Send a Server->Client packet StatusUpdate of the L2NpcInstance to the L2PcInstance to update its HP bar
  72. StatusUpdate su = new StatusUpdate(target);
  73. su.addAttribute(StatusUpdate.CUR_HP, (int)((L2Character)target).getCurrentHp());
  74. su.addAttribute(StatusUpdate.MAX_HP, ((L2Character)target).getMaxHp());
  75. activeChar.sendPacket(su);
  76. }
  77.  
  78. NpcHtmlMessage html = new NpcHtmlMessage(0);
  79. html.setFile(activeChar.getHtmlPrefix(), "data/html/admin/npcinfo.htm");
  80.  
  81. html.replace("%objid%", String.valueOf(target.getObjectId()));
  82. html.replace("%class%", target.getClass().getSimpleName());
  83. html.replace("%id%", String.valueOf(((L2Npc)target).getTemplate().npcId));
  84. html.replace("%lvl%", String.valueOf(((L2Npc)target).getTemplate().level));
  85. html.replace("%name%", String.valueOf(((L2Npc)target).getTemplate().name));
  86. html.replace("%tmplid%",String.valueOf(((L2Npc)target).getTemplate().npcId));
  87. html.replace("%aggro%", String.valueOf((target instanceof L2Attackable) ? ((L2Attackable) target).getAggroRange() : 0));
  88. html.replace("%hp%", String.valueOf((int)((L2Character)target).getCurrentHp()));
  89. html.replace("%hpmax%", String.valueOf(((L2Character)target).getMaxHp()));
  90. html.replace("%mp%", String.valueOf((int)((L2Character)target).getCurrentMp()));
  91. html.replace("%mpmax%", String.valueOf(((L2Character)target).getMaxMp()));
  92.  
  93. html.replace("%patk%", String.valueOf(((L2Character)target).getPAtk(null)));
  94. html.replace("%matk%", String.valueOf(((L2Character)target).getMAtk(null, null)));
  95. html.replace("%pdef%", String.valueOf(((L2Character)target).getPDef(null)));
  96. html.replace("%mdef%", String.valueOf(((L2Character)target).getMDef(null, null)));
  97. html.replace("%accu%", String.valueOf(((L2Character)target).getAccuracy()));
  98. html.replace("%evas%", String.valueOf(((L2Character)target).getEvasionRate(null)));
  99. html.replace("%crit%", String.valueOf(((L2Character)target).getCriticalHit(null, null)));
  100. html.replace("%rspd%", String.valueOf(((L2Character)target).getRunSpeed()));
  101. html.replace("%aspd%", String.valueOf(((L2Character)target).getPAtkSpd()));
  102. html.replace("%cspd%", String.valueOf(((L2Character)target).getMAtkSpd()));
  103. html.replace("%str%", String.valueOf(((L2Character)target).getSTR()));
  104. html.replace("%dex%", String.valueOf(((L2Character)target).getDEX()));
  105. html.replace("%con%", String.valueOf(((L2Character)target).getCON()));
  106. html.replace("%int%", String.valueOf(((L2Character)target).getINT()));
  107. html.replace("%wit%", String.valueOf(((L2Character)target).getWIT()));
  108. html.replace("%men%", String.valueOf(((L2Character)target).getMEN()));
  109. html.replace("%loc%", String.valueOf(target.getX()+" "+target.getY()+" "+target.getZ()));
  110. html.replace("%dist%", String.valueOf((int)Math.sqrt(activeChar.getDistanceSq(target))));
  111.  
  112. byte attackAttribute = ((L2Character)target).getAttackElement();
  113. html.replace("%ele_atk%", Elementals.getElementName(attackAttribute));
  114. html.replace("%ele_atk_value%", String.valueOf(((L2Character)target).getAttackElementValue(attackAttribute)));
  115. html.replace("%ele_dfire%", String.valueOf(((L2Character)target).getDefenseElementValue(Elementals.FIRE)));
  116. html.replace("%ele_dwater%", String.valueOf(((L2Character)target).getDefenseElementValue(Elementals.WATER)));
  117. html.replace("%ele_dwind%", String.valueOf(((L2Character)target).getDefenseElementValue(Elementals.WIND)));
  118. html.replace("%ele_dearth%", String.valueOf(((L2Character)target).getDefenseElementValue(Elementals.EARTH)));
  119. html.replace("%ele_dholy%", String.valueOf(((L2Character)target).getDefenseElementValue(Elementals.HOLY)));
  120. html.replace("%ele_ddark%", String.valueOf(((L2Character)target).getDefenseElementValue(Elementals.DARK)));
  121.  
  122. if (((L2Npc)target).getSpawn() != null)
  123. {
  124. html.replace("%spawn%", ((L2Npc)target).getSpawn().getLocx()+" "+((L2Npc)target).getSpawn().getLocy()+" "+((L2Npc)target).getSpawn().getLocz());
  125. html.replace("%loc2d%", String.valueOf((int)Math.sqrt(((L2Character)target).getPlanDistanceSq(((L2Npc)target).getSpawn().getLocx(), ((L2Npc)target).getSpawn().getLocy()))));
  126. html.replace("%loc3d%", String.valueOf((int)Math.sqrt(((L2Character)target).getDistanceSq(((L2Npc)target).getSpawn().getLocx(), ((L2Npc)target).getSpawn().getLocy(), ((L2Npc)target).getSpawn().getLocz()))));
  127. html.replace("%resp%", String.valueOf(((L2Npc)target).getSpawn().getRespawnDelay() / 1000));
  128. }
  129. else
  130. {
  131. html.replace("%spawn%", "<font color=FF0000>null</font>");
  132. html.replace("%loc2d%", "<font color=FF0000>--</font>");
  133. html.replace("%loc3d%", "<font color=FF0000>--</font>");
  134. html.replace("%resp%", "<font color=FF0000>--</font>");
  135. }
  136.  
  137. if (((L2Npc)target).hasAI())
  138. {
  139. html.replace("%ai_intention%", "<tr><td><table width=270 border=0 bgcolor=131210><tr><td width=100><font color=FFAA00>Intention:</font></td><td align=right width=170>"+String.valueOf(((L2Npc)target).getAI().getIntention().name())+"</td></tr></table></td></tr>");
  140. html.replace("%ai%", "<tr><td><table width=270 border=0><tr><td width=100><font color=FFAA00>AI</font></td><td align=right width=170>"+((L2Npc)target).getAI().getClass().getSimpleName()+"</td></tr></table></td></tr>");
  141. html.replace("%ai_type%", "<tr><td><table width=270 border=0 bgcolor=131210><tr><td width=100><font color=FFAA00>AIType</font></td><td align=right width=170>"+String.valueOf(((L2Npc)target).getAiType())+"</td></tr></table></td></tr>");
  142. html.replace("%ai_clan%", "<tr><td><table width=270 border=0><tr><td width=100><font color=FFAA00>Clan & Range:</font></td><td align=right width=170>"+String.valueOf(((L2Npc)target).getTemplate().getAIDataStatic().getClan())+" "+String.valueOf(((L2Npc)target).getTemplate().getAIDataStatic().getClanRange())+"</td></tr></table></td></tr>");
  143. html.replace("%ai_enemy_clan%", "<tr><td><table width=270 border=0 bgcolor=131210><tr><td width=100><font color=FFAA00>Enemy & Range:</font></td><td align=right width=170>"+String.valueOf(((L2Npc)target).getTemplate().getAIDataStatic().getEnemyClan())+" "+String.valueOf(((L2Npc)target).getTemplate().getAIDataStatic().getEnemyRange())+"</td></tr></table></td></tr>");
  144. }
  145. else
  146. {
  147. html.replace("%ai_intention%", "");
  148. html.replace("%ai%", "");
  149. html.replace("%ai_type%", "");
  150. html.replace("%ai_clan%", "");
  151. html.replace("%ai_enemy_clan%", "");
  152. }
  153.  
  154. if (target instanceof L2MerchantInstance)
  155. {
  156. html.replace("%butt%","<button value=\"Shop\" action=\"bypass -h admin_showShop "+String.valueOf(((L2Npc)target).getTemplate().npcId)+"\" width=60 height=21 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">");
  157. }
  158. else
  159. {
  160. html.replace("%butt%","");
  161. }
  162.  
  163. activeChar.sendPacket(html);
  164. }
  165. else if (Config.ALT_GAME_VIEWNPC)
  166. {
  167. // Set the target of the L2PcInstance activeChar
  168. activeChar.setTarget(target);
  169.  
  170. // Send a Server->Client packet MyTargetSelected to the L2PcInstance activeChar
  171. // The activeChar.getLevel() - getLevel() permit to display the correct color in the select window
  172. MyTargetSelected my = new MyTargetSelected(target.getObjectId(), activeChar.getLevel() - ((L2Character)target).getLevel());
  173. activeChar.sendPacket(my);
  174.  
  175. // Check if the activeChar is attackable (without a forced attack)
  176. if (target.isAutoAttackable(activeChar))
  177. {
  178. // Send a Server->Client packet StatusUpdate of the L2NpcInstance to the L2PcInstance to update its HP bar
  179. StatusUpdate su = new StatusUpdate(target);
  180. su.addAttribute(StatusUpdate.CUR_HP, (int) ((L2Character)target).getCurrentHp());
  181. su.addAttribute(StatusUpdate.MAX_HP, ((L2Character)target).getMaxHp());
  182. activeChar.sendPacket(su);
  183. }
  184.  
  185. NpcHtmlMessage html = new NpcHtmlMessage(0);
  186. int hpMul = Math.round((float)(((L2Character)target).getStat().calcStat(Stats.MAX_HP, 1, (L2Character)target, null) / BaseStats.CON.calcBonus((L2Character)target)));
  187. if (hpMul == 0)
  188. hpMul = 1;
  189. final StringBuilder html1 = StringUtil.startAppend(
  190. 1000,
  191. "<html><body>" +
  192. "<br><center><font color=\"LEVEL\">[Combat Stats]</font></center>" +
  193. "<table border=0 width=\"100%\">" +
  194. "<tr><td>Max.HP</td><td>",
  195. String.valueOf(((L2Character)target).getMaxHp() / hpMul),
  196. "*",
  197. String.valueOf(hpMul),
  198. "</td><td>Max.MP</td><td>",
  199. String.valueOf(((L2Character)target).getMaxMp()),
  200. "</td></tr>" +
  201. "<tr><td>P.Atk.</td><td>",
  202. String.valueOf(((L2Character)target).getPAtk(null)),
  203. "</td><td>M.Atk.</td><td>",
  204. String.valueOf(((L2Character)target).getMAtk(null, null)),
  205. "</td></tr>" +
  206. "<tr><td>P.Def.</td><td>",
  207. String.valueOf(((L2Character)target).getPDef(null)),
  208. "</td><td>M.Def.</td><td>",
  209. String.valueOf(((L2Character)target).getMDef(null, null)),
  210. "</td></tr>" +
  211. "<tr><td>Accuracy</td><td>",
  212. String.valueOf(((L2Character)target).getAccuracy()),
  213. "</td><td>Evasion</td><td>",
  214. String.valueOf(((L2Character)target).getEvasionRate(null)),
  215. "</td></tr>" +
  216. "<tr><td>Critical</td><td>",
  217. String.valueOf(((L2Character)target).getCriticalHit(null, null)),
  218. "</td><td>Speed</td><td>",
  219. String.valueOf(((L2Character)target).getRunSpeed()),
  220. "</td></tr>" +
  221. "<tr><td>Atk.Speed</td><td>",
  222. String.valueOf(((L2Character)target).getPAtkSpd()),
  223. "</td><td>Cast.Speed</td><td>",
  224. String.valueOf(((L2Character)target).getMAtkSpd()),
  225. "</td></tr>" +
  226. "<tr><td>Race</td><td>",
  227. ((L2Npc)target).getTemplate().getRace().toString(),
  228. "</td><td></td><td></td></tr>" +
  229. "</table>" +
  230. "<br><center><font color=\"LEVEL\">[Basic Stats]</font></center>" +
  231. "<table border=0 width=\"100%\">" +
  232. "<tr><td>STR</td><td>",
  233. String.valueOf(((L2Character)target).getSTR()),
  234. "</td><td>DEX</td><td>",
  235. String.valueOf(((L2Character)target).getDEX()),
  236. "</td><td>CON</td><td>",
  237. String.valueOf(((L2Character)target).getCON()),
  238. "</td></tr>" +
  239. "<tr><td>INT</td><td>",
  240. String.valueOf(((L2Character)target).getINT()),
  241. "</td><td>WIT</td><td>",
  242. String.valueOf(((L2Character)target).getWIT()),
  243. "</td><td>MEN</td><td>",
  244. String.valueOf(((L2Character)target).getMEN()),
  245. "</td></tr>" +
  246. "</table>"
  247. );
  248.  
  249. if (((L2Npc)target).getTemplate().getDropData() != null)
  250. {
  251. StringUtil.append(html1,
  252. "<br><center><font color=\"LEVEL\">[Drop Info]</font></center>" +
  253. "<br>Rates legend: <font color=\"ff0000\">50%+</font> <font color=\"00ff00\">30%+</font> <font color=\"0000ff\">less than 30%</font>" +
  254. "<table border=0 width=\"100%\">"
  255. );
  256. for (L2DropCategory cat : ((L2Npc)target).getTemplate().getDropData())
  257. {
  258. for (L2DropData drop : cat.getAllDrops())
  259. {
  260. final L2Item item = ItemTable.getInstance().getTemplate(drop.getItemId());
  261. if (item == null)
  262. continue;
  263.  
  264. final String color;
  265.  
  266. if (drop.getChance() >= 500000)
  267. color = "ff0000";
  268. else if (drop.getChance() >= 300000)
  269. color = "00ff00";
  270. else
  271. color = "0000ff";
  272.  
  273. StringUtil.append(html1,
  274. "<tr><td><font color=\"",
  275. color,
  276. "\">",
  277. item.getName(),
  278. "</font></td><td>",
  279. (drop.isQuestDrop() ? "Quest" : (cat.isSweep() ? "Sweep" : "Drop")),
  280. "</td></tr>"
  281. );
  282. }
  283. }
  284. html1.append("</table>");
  285. }
  286. html1.append("</body></html>");
  287.  
  288. html.setHtml(html1.toString());
  289. activeChar.sendPacket(html);
  290. }
  291. return true;
  292. }
  293.  
  294. public InstanceType getInstanceType()
  295. {
  296. return InstanceType.L2Npc;
  297. }
  298. }
  299.  
Code: Java

Последний раз редактировалось VISTALL; 21.11.2010 в 16:16.
L2RaxusFerry вне форума Ответить с цитированием
Непрочитано 24.11.2010, 10:59   #2
Пользователь

По умолчанию Re: Помогите сделать Shift+Click более полным

Шанс дропа устанавливает в SQL в БД дроп_лист, коофциенте 1000000 = 100 %, т.е. у тебя будет шифт+клик высвечиваться шанс в процентах.

Возможно, я не так вопрос понял. Если можно тогда более корректней.
niko42 вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[HELP] Помогите сделать серв Cabal online Dony Другие игры / Other games 19 13.11.2010 23:34
помогите сделать патч Соник™ Игровой клиент 12 07.09.2010 17:42
[HELP] Помогите сделать серв Cabal online Dony Другие игры / Other games 4 26.05.2010 17:16
Помогите Общими усилиями Сделать кач. Сервак 2MB Lineage II 13 25.08.2008 03:47


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 04:43. Часовой пояс GMT +3.

Вверх