То сообщение было отредактировано модератором.Может и мне написать "WTF?", может и мне репы подкинут?:clapping:
Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
То сообщение было отредактировано модератором.Может и мне написать "WTF?", может и мне репы подкинут?:clapping:
Апну еще раз, чтобы человек не забывал об этом факте.С точки зрения ява-машины - ничего страшного, но нужно было оставить вторую проверку - выполнение кода не пошло бы хоть так, хоть эдак, никаких потерь по времениКод:/** * * @author Visor123 * L2Emu Enterprise Server */ public class L2ManagementEventGroupEngine extends L2EventGroupEngine { public L2ManagementEventGroupEngine(String name, String command) { super(name, command); } @Override public boolean useAdminCommand(L2PcInstance player, String command) { if (Config.ENT_TESTEVENTS) _log.info("L2ManagementEventGroupEngine "+getName()+" useAdminCommand player="+player.getName()+" command="+command); if (command.equalsIgnoreCase(getCommand())) { showMainPage(player); } else if (command.startsWith(getCommand()+"_show") || command.startsWith(getCommand()+"_status") || command.startsWith(getCommand()+"_edit") || command.startsWith(getCommand()+"_save") || command.startsWith(getCommand()+"_load") || command.startsWith(getCommand()+"_schedule") || command.startsWith(getCommand()+"_totaliser") || command.startsWith(getCommand()+"_join") || command.startsWith(getCommand()+"_start") || command.startsWith(getCommand()+"_teleport") || command.startsWith(getCommand()+"_abort") || command.startsWith(getCommand()+"_finish") || command.startsWith(getCommand()+"_auto") || command.startsWith(getCommand()+"_sit") || command.startsWith(getCommand()+"_stand") || command.startsWith(getCommand()+"_kick") ) { String eventName = command.substring(getCommand().length()+6); if (command.startsWith(getCommand()+"_schedule") || command.startsWith(getCommand()+"_teleport")) eventName = command.substring(getCommand().length()+10); else if (command.startsWith(getCommand()+"_finish") || command.startsWith(getCommand()+"_status")) eventName = command.substring(getCommand().length()+8); else if (command.startsWith(getCommand()+"_start") || command.startsWith(getCommand()+"_abort") || command.startsWith(getCommand()+"_stand")) eventName = command.substring(getCommand().length()+7); else if (command.startsWith(getCommand()+"_sit")) eventName = command.substring(getCommand().length()+5); else if (command.startsWith(getCommand()+"_totaliser")) eventName = command.substring(getCommand().length()+11); try { String[] params = eventName.split(" "); if (Config.ENT_TESTEVENTS) _log.info("L2ManagementEventEngine "+getName()+" show/edit... eventName="+params[0]+" params.length="+params.length); if (_eventInstances.containsKey(params[0])) _eventInstances.get(params[0]).useAdminCommand(player, command, params); else { player.sendMessage("Event instance with name="+params[0]+" not found"); showMainPage(player); } return true; } catch (Exception e) { _log.warn(e.getMessage()); } } else if (command.startsWith(getCommand()+"_del")) { try { String eventName = command.substring(getCommand().length()+5); String[] params = eventName.split(" "); if (Config.ENT_TESTEVENTS) _log.info(getName()+" eventName="+params[0]+" params.length="+params.length); if (_eventInstances.containsKey(params[0]) && params.length > 1 && params[1].equalsIgnoreCase("y")) { L2EventGroupEngineInstance event = _eventInstances.remove(params[0]); event.deleteData(); saveData(); player.sendMessage(getName()+" data saved to DB"); } else if (params.length <= 1 || !params[1].equalsIgnoreCase("y")) player.sendMessage("For delete event instance need enter character `y`"); showMainPage(player); return true; } catch (Exception e) { _log.warn(e.getMessage()); } } else if (command.startsWith(getCommand()+"_create")) { try { String eventName = command.substring(getCommand().length() + 8); if (Config.ENT_TESTEVENTS) _log.info(getName()+"eventName="+eventName); if (!eventName.isEmpty() && eventName.length() > 0 && !eventName.contains(" ") && eventName.length() <= 16) createEventInstance(eventName); else if (!eventName.isEmpty() && eventName.contains(" ")) player.sendMessage("Name event need without spaces"); else if (!eventName.isEmpty() && eventName.length() > 16) player.sendMessage("Name event need have 1-16 characters"); showMainPage(player); } catch (Exception e) { _log.warn(e.getMessage()); } } return super.useAdminCommand(player, command); } protected void showMainPage(L2PcInstance player) { NpcHtmlMessage adminReply = new NpcHtmlMessage(5); TextBuilder replyMSG = new TextBuilder("<html><title>"+getName()+"</title><body>"); replyMSG.append("<table width=\"292\" bgcolor=\"666666\"><tr><td><font color=\"LEVEL\">[ "+getName()+" ]</font></td>" +"<td><button value=\"Back\" action=\"bypass -h " + "admin_events"+"\" width=75 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" +"</tr></table>"); replyMSG.append("<br><center>Engine instances</center>"); replyMSG.append("<table width=\"292\">"); for (L2EventGroupEngineInstance event : _eventInstances.values()) { replyMSG.append("<tr><td><font color=\"LEVEL\">"+event.getName()+"</font></td>" +"<td><button value=\"Show\" action=\"bypass -h " + getCommand()+"_show "+event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" +"<td><button value=\"Edit\" action=\"bypass -h " + getCommand()+"_edit "+event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" +"<td><button value=\"Delete\" action=\"bypass -h " + getCommand()+"_del "+event.getName()+" $name" + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>" ); } replyMSG.append("</table>"); replyMSG.append("<table width=\"292\"><tr><td><edit var=\"name\" width=\"125\"></td>"); replyMSG.append("<td><button value=\""+"Create New Event"+"\" action=\"bypass -h " + getCommand()+"_create $name" + "\" width=125 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"); replyMSG.append("</table>"); replyMSG.append("</body></html>"); adminReply.setHtml(replyMSG.toString()); player.sendPacket(adminReply); // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet player.sendPacket(ActionFailed.STATIC_PACKET); } }
Но с точки зрения написания - ***ец
Чет герычем попахивает, мдам.......
command.substring(getCommand().length()+5); еще меня особенно умиляет)
Берем строку, режем ее, вычленяем остаток - вуаля, команда!
Апну еще раз, чтобы человек не забывал об этом факте.
getCommand() возвращает различные строки, в зависимости от конкретной инстансы движка. Если ты этого не знал - то это твоя проблема.
Человек обосрался весьма эпично, хотел нагадить на других, а обгадился сам.
Давай, обсыкайся, попробуй переврать такой факт.
Факт состоит в том, что неадекват GenCloud обосрался и эта тема это доказывает и подтверждает. Обоврать этот факт он не может.Посмотри в сторону thymeleaf, velocity на досуге.
Я к теме не имею никакого отношения, я по поводу разных реплейсов и остального аппенда срингов. То что я назвал можно поюзать, хорошие фреймы.Факт состоит в том, что неадекват GenCloud обосрался и эта тема это доказывает и подтверждает. Обоврать этот факт он не может.
А на досуге, то конечно спасибо за советы.
Ты пишешь, что к теме не имеешь отношения, но влез в нее давать советы. Итак.Я к теме не имею никакого отношения, я по поводу разных реплейсов и остального аппенда срингов. То что я назвал можно поюзать, хорошие фреймы.
Я не Мангол, но все таки форум и открытый дискас, поэтому напишу.Что ты собрался аппендить в этом классе? Или где ты и как поюзаешь хорошие фреймы? И почему ты думаешь, что нужно соединять какие-то строки в этом конкретном классе? Проще говоря - в чем по твоему говнокод?
Но следует учесть оптимизацию времени создания объекта и учесть специфику времени выполнения. Или какая цель в аппенде строк и применении хороших фреймов?
Прямо пример.
<html><head><title>Get zones</title></head>
<body><center>
<br>#color("LEVEL" "Список текущих зон")
<table width=260>
<tr>
<td>#color("cccc99" "ID")</td>
<td>#color("cccc99" "Name")</td>
<td>#color("cccc99" "Type")</td>
<td>#color("cccc99" "Flags")</td>
<td>#color("cccc99" "Danger type")</td>
</tr>
#set($flags = $ZoneFlags.values())
#set($zones = $target.getZones())
#foreach($zone in $zones)
<tr>
<td>$zone.getId()</td>
<td>$zone.getName()</td>
<td>$zone.getImplName()</td>
<td>
#set($zoneFlags = $zone.getFlags())
#foreach($flag in $flags)
#if($flag.isFlag(zoneFlags))
$flag.name()
#end
#end
</td>
<td>
#set($dangerType = $zone.getDangerType())
$dangerType.name()
</td>
</tr>
#end
</table>
<br>#color("LEVEL" "Текущие флаги:")
</center>
<table width=260>
<tr>
<td>#color("cccc99" "Name")</td>
<td>#color("cccc99" "Count")</td>
</tr>
#set($zoneCounters = $target.getZoneFlagCounters())
#set($i = 0)
#foreach($counter in $zoneCounters)
#set($color = "ffffff")
#if($counter == 0)
#set($color = "999999")
#end
<tr>
<td><font color=$color>$flags[$i].name()</font></td>
<td><font color=$color>$counter</color></td>
</tr>
#set($i = $i + 1)
#end
</table>
</body>
</html>
Дока вело и тима есть в свободном доступе. Так же там есть примеры.Ты пишешь, что к теме не имеешь отношения, но влез в нее давать советы. Итак.
Я так понимаю, что ты не понял почему я не просто так написал, что дегенерат, который кидается на людей, обосрался и что этот факт нельзя изменить.
Что ты собрался аппендить в этом классе? Или где ты и как поюзаешь хорошие фреймы? И почему ты думаешь, что нужно соединять какие-то строки в этом конкретном классе? Проще говоря - в чем по твоему говнокод?
Но следует учесть оптимизацию времени создания объекта и учесть специфику времени выполнения. Или какая цель в аппенде строк и применении хороших фреймов?
Прямо пример.
protected void showMainPage(L2PcInstance player)
{
NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
TextBuilder replyMSG = new TextBuilder("<html><title>"+getName()+"</title><body>");
replyMSG.append("<table width=\"292\" bgcolor=\"666666\"><tr><td><font color=\"LEVEL\">[ "+getName()+" ]</font></td>"
+"<td><button value=\"Back\" action=\"bypass -h " + "admin_events"+"\" width=75 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"
+"</tr></table>");
replyMSG.append("<br><center>Engine instances</center>");
replyMSG.append("<table width=\"292\">");
for (L2EventGroupEngineInstance event : _eventInstances.values())
{
replyMSG.append("<tr><td><font color=\"LEVEL\">"+event.getName()+"</font></td>"
+"<td><button value=\"Show\" action=\"bypass -h " + getCommand()+"_show "+event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"
+"<td><button value=\"Edit\" action=\"bypass -h " + getCommand()+"_edit "+event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"
+"<td><button value=\"Delete\" action=\"bypass -h " + getCommand()+"_del "+event.getName()+" $name" + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"
);
}
replyMSG.append("</table>");
replyMSG.append("<table width=\"292\"><tr><td><edit var=\"name\" width=\"125\"></td>");
replyMSG.append("<td><button value=\""+"Create New Event"+"\" action=\"bypass -h " + getCommand()+"_create $name" + "\" width=125 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>");
replyMSG.append("</table>");
replyMSG.append("</body></html>");
adminReply.setHtml(replyMSG.toString());
player.sendPacket(adminReply);
// Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
player.sendPacket(ActionFailed.STATIC_PACKET);
}
Какую желчь, ты видишь кто эту тему создал?Дока вело и тима есть в свободном доступе. Так же там есть примеры.
Так же такой код можно будет собирать куда лучшим способомКод:protected void showMainPage(L2PcInstance player) { NpcHtmlMessage adminReply = new NpcHtmlMessage(5); TextBuilder replyMSG = new TextBuilder("<html><title>"+getName()+"</title><body>"); replyMSG.append("<table width=\"292\" bgcolor=\"666666\"><tr><td><font color=\"LEVEL\">[ "+getName()+" ]</font></td>" +"<td><button value=\"Back\" action=\"bypass -h " + "admin_events"+"\" width=75 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" +"</tr></table>"); replyMSG.append("<br><center>Engine instances</center>"); replyMSG.append("<table width=\"292\">"); for (L2EventGroupEngineInstance event : _eventInstances.values()) { replyMSG.append("<tr><td><font color=\"LEVEL\">"+event.getName()+"</font></td>" +"<td><button value=\"Show\" action=\"bypass -h " + getCommand()+"_show "+event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" +"<td><button value=\"Edit\" action=\"bypass -h " + getCommand()+"_edit "+event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" +"<td><button value=\"Delete\" action=\"bypass -h " + getCommand()+"_del "+event.getName()+" $name" + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>" ); } replyMSG.append("</table>"); replyMSG.append("<table width=\"292\"><tr><td><edit var=\"name\" width=\"125\"></td>"); replyMSG.append("<td><button value=\""+"Create New Event"+"\" action=\"bypass -h " + getCommand()+"_create $name" + "\" width=125 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"); replyMSG.append("</table>"); replyMSG.append("</body></html>"); adminReply.setHtml(replyMSG.toString()); player.sendPacket(adminReply); // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet player.sendPacket(ActionFailed.STATIC_PACKET); }
Но я понел что таким как ты лучше вообще ничего не советовать. Тебе лишь бы свою желчь вылить на ровном месте, и не важно несешь ты полную херню или нет, главное что ты всегда прав.
П.С. Хочу увидеть где я сказал говнокод. Данный случай это случай когда не совсем удобно работать с таким кодом, я бы даже сказал совсем не удобно с ним работать, когда есть фреймы которые могут облегчить жизнь и читаемость данного кода.
Денегерат, ты настолько тупой, что взял неиспользуемый в гейм-сервере классС точки зрения ява-машины - ничего страшного, но нужно было оставить вторую проверку - выполнение кода не пошло бы хоть так, хоть эдак, никаких потерь по времени
Но с точки зрения написания - ***ец
Чет герычем попахивает, мдам.......
command.substring(getCommand().length()+5); еще меня особенно умиляет)
Берем строку, режем ее, вычленяем остаток - вуаля, команда!
Начнем с начала.Дока вело и тима есть в свободном доступе. Так же там есть примеры.
Так же такой код можно будет собирать куда лучшим способом
Но я понел что таким как ты лучше вообще ничего не советовать. Тебе лишь бы свою желчь вылить на ровном месте, и не важно несешь ты полную херню или нет, главное что ты всегда прав.
П.С. Хочу увидеть где я сказал говнокод. Данный случай это случай когда не совсем удобно работать с таким кодом, я бы даже сказал совсем не удобно с ним работать, когда есть фреймы которые могут облегчить жизнь и читаемость данного кода.
А чем отличается TextBuilder от StringBuilder ?Дока вело и тима есть в свободном доступе. Так же там есть примеры.
Так же такой код можно будет собирать куда лучшим способомКод:protected void showMainPage(L2PcInstance player) { NpcHtmlMessage adminReply = new NpcHtmlMessage(5); TextBuilder replyMSG = new TextBuilder("<html><title>"+getName()+"</title><body>"); replyMSG.append("<table width=\"292\" bgcolor=\"666666\"><tr><td><font color=\"LEVEL\">[ "+getName()+" ]</font></td>" +"<td><button value=\"Back\" action=\"bypass -h " + "admin_events"+"\" width=75 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" +"</tr></table>"); replyMSG.append("<br><center>Engine instances</center>"); replyMSG.append("<table width=\"292\">"); for (L2EventGroupEngineInstance event : _eventInstances.values()) { replyMSG.append("<tr><td><font color=\"LEVEL\">"+event.getName()+"</font></td>" +"<td><button value=\"Show\" action=\"bypass -h " + getCommand()+"_show "+event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" +"<td><button value=\"Edit\" action=\"bypass -h " + getCommand()+"_edit "+event.getName() + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>" +"<td><button value=\"Delete\" action=\"bypass -h " + getCommand()+"_del "+event.getName()+" $name" + "\" width=60 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>" ); } replyMSG.append("</table>"); replyMSG.append("<table width=\"292\"><tr><td><edit var=\"name\" width=\"125\"></td>"); replyMSG.append("<td><button value=\""+"Create New Event"+"\" action=\"bypass -h " + getCommand()+"_create $name" + "\" width=125 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"); replyMSG.append("</table>"); replyMSG.append("</body></html>"); adminReply.setHtml(replyMSG.toString()); player.sendPacket(adminReply); // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet player.sendPacket(ActionFailed.STATIC_PACKET); }
Но я понел что таким как ты лучше вообще ничего не советовать. Тебе лишь бы свою желчь вылить на ровном месте, и не важно несешь ты полную херню или нет, главное что ты всегда прав.
П.С. Хочу увидеть где я сказал говнокод. Данный случай это случай когда не совсем удобно работать с таким кодом, я бы даже сказал совсем не удобно с ним работать, когда есть фреймы которые могут облегчить жизнь и читаемость данного кода.
Тем что TextBuilder можно положить в кеш через рекукл.А чем отличается TextBuilder от StringBuilder ?
Не имею дел с еволюшеном.А чем отличается TextBuilder от StringBuilder ?
Начнем с начала.
Ты парой сообщений выше вылез подпрягаться за неадеквата, которого ты не знаешь и не знаешь прав ли он вообще. Ты просто увидел код и слова дегенерата.
Ты видимо решил, что денегерат - это жертва, а я на него нападаю? Нет - дегенерат это не жертва, это гниль - которая из него лезет до сих пор, как только я тыкнул в него куканом. Я не пишу гадости нормальным людям, но получается, что ты себя ассоциировал с этим недоумком, который выложил неиспользованный гейм-сервером класс пытаясь нагадить мне.
Пример - вот вы накинулись на анциента, "выгнать его, выгнать", потому что что? Так анциент это просто мелкий жулик, обман которого лежит на "поверхности", а есть действительно неприятные псевдо-личности. Но групповой инстинкт сработал и ты причислил себя к группе с этим дегенератом GenCloud - это и есть твоя ошибка. Далее ты уже пытался всячески лезть ко мне с советами, пытаясь предметно так подгадить чистую насадку на кукан дегенерата, который это заслужил.
Выводы: не ассоциируйте себя в группу с людьми, которых вы не знаете. Чаще всего типа яркие знатоки могут оказаться весьма неприятными и крайне ненадежными. Первое, что сделают такие псевдо-личности - это будут использовать вас по мелочам.
Выродки не случайно так себя ведут, они этому учатся еще с детского сада, как манипулировать другими. Понимают интуитивно, насколько у других людей сильно чувство группы, желание быть частью сильной группы.
Если вы "чувствуете", что что-то "мутное", лучше дождаться, когда "муть" пройдет, а в данном случае денегерат будет раскрыт и насажен на кукан.
Проблема выродков в том, что я не пытаюсь искать группу, чтобы быть частью сильной группы, и поэтому быстро замечаю их. Возможность эта в том, что я не обременяю себя мыслями, что незнакомый мне человек может написать на форуме правду. И конечно достаточно большой жизненный опыт в офисных интригах. Выродки хорошо имитируют обычных людей, кривляются, умничают и т.д.
Смотрите критически на то, что вам говорят и пишут, не полагайтесь на псевдо-экспертов - часто это могут оказаться дегенераты, подсовывающие вам очередную порцию вранья.
Обосрался, так рот закрой и не воняй. Уже показано какое-ты гнилое.И да, питушок ты наш - завалился бы и дальше сидел бы с кокс нюхал, как обычно ты и делаешь.
P.S. тронешь говно, вонять будет -> тронешь визора.... нутыпонел
Бозечьки, бозечьки. Воняет твоя немытая жопа после получасового дрыстания дерьма.Обосрался, так рот закрой и не воняй. Уже показано какое-ты гнилое.
Да с твоей жопой явно что-то не такБозечьки, бозечьки. Воняет твоя немытая жопа после получасового дрыстания дерьма.
P.S. "какое-ты" это пишется без дефиса.
getCommand() - команда может быть разной, я писал выше. Ее нельзя явно указать, это класс модели. Напиши пример кеширования команды, которая неизвестна на момент времени написания. То есть минимум 2 пункта поста выше - это бред.На самом деле, там действительно говно код.
Доказательства:
1. Много конкатенаций и вызовов getCommand(). Результат вызова надо закэшировать. Да и в принципе лучше явно команду указать, а не конкатенировать.
2. Вместо этого: "getCommand().length()+6" намного лучше получить длину строки с ЯВНОЙ команды, а не с этого.
3. Вместо 3-х вызовов eventName.isEmpty() намного логичнее сделать 1 и закешировать.
4. Конкатенация в TextBuilder - е
Итого: код имеет излишнюю нагрузку и почти не читаемый. Вывод - это говнокод.
НО! Лучше иметь работающий говнокод чем ненаписанный идеал.