Их важность = 0. Конфиги пилят команды которые проживут не очень долго и все это по принципу ctrl+c и ctrl+v.Ликбез: любая реализация, где требуется осуществить пользовательские настраиваемые параметры, будет сопровождаться т.н. конфигами. Это нормальная практика, и ставить "смешные смайлики" по этому поводу выглядит глупо.
У любой разработки смотрятся сначала главные аспекты, а не второстепенные которые ну по сути ничего с собой не несут.2. У любой профессиональной разработки, есть план работ (milestones), первый пункт в моем плане - создание базового набора доп. контента в виде расширенного Community Board. Все т.н. сервисы разрабатываются без основы (с нуля), согласно моему пониманию "правильной разработки". Поэтому да, на таймлайне пока вы будете видеть соответствующие коммиты, до завершения этого milestone.
А причем тут это? Я про оформление в кб говорил, но не как сайта. И если так, то можно спокойно оформить и по своему redmine.Я не ориентируюсь на ту часть пользователей, на которую оказывает влияние оформление сайта. Для меня важно - удобство, информативность и соответствие функционала моим требованиям. Но в будущем, специально для пользователей вашего уровня, я обязательно сделаю красивый флеш-сайт и поставлю форум xenforo, а для профессионалов - оставлю мощное средство по управлению проектами Redmine - на котором сейчас работает наш web.
Уважаемый администратор, я объясню свою позицию один раз, если она не укладывается в политику форума, сообщите мне, я прекращу публиковать ход разработки на Вашем форуме.
1. Ликбез: любая реализация, где требуется осуществить пользовательские настраиваемые параметры, будет сопровождаться т.н. конфигами. Это нормальная практика, и ставить "смешные смайлики" по этому поводу выглядит глупо.
2. У любой профессиональной разработки, есть план работ (milestones), первый пункт в моем плане - создание базового набора доп. контента в виде расширенного Community Board. Все т.н. сервисы разрабатываются без основы (с нуля), согласно моему пониманию "правильной разработки". Поэтому да, на таймлайне пока вы будете видеть соответствующие коммиты, до завершения этого milestone.
Я не ориентируюсь на ту часть пользователей, на которую оказывает влияние оформление сайта. Для меня важно - удобство, информативность и соответствие функционала моим требованиям. Но в будущем, специально для пользователей вашего уровня, я обязательно сделаю красивый флеш-сайт и поставлю форум xenforo, а для профессионалов - оставлю мощное средство по управлению проектами Redmine - на котором сейчас работает наш web.
P.S. Это последний раз когда я реагирую на провокации и удовлетворяю юзеров ожидающих такой реакции.
package org.mmocore.gameserver.handler.bbs.custom.privateOffice.services.player.appearance;
import handler.bbs.abstracts.AbstractCommunityBoard;
import org.mmocore.gameserver.handler.bbs.custom.privateOffice.engine.annotations.Init;
import org.mmocore.gameserver.handler.bbs.custom.privateOffice.engine.enums.Services;
import org.mmocore.gameserver.handler.bbs.custom.privateOffice.engine.interfaces.IService;
import org.mmocore.gameserver.handler.bbs.custom.privateOffice.services.player.appearance.enums.EFace;
import org.mmocore.gameserver.handler.bbs.custom.privateOffice.services.player.appearance.enums.ETypes;
import org.apache.commons.lang3.ArrayUtils;
import org.mmocore.gameserver.configuration.config.community.CBasicConfig;
import org.mmocore.gameserver.model.entity.events.impl.SiegeEvent;
import org.mmocore.gameserver.network.lineage.components.CustomMessage;
import org.mmocore.gameserver.object.Player;
import org.mmocore.gameserver.utils.Log;
import java.util.Optional;
/**
* @author Mangol
* @since 29.02.2016
*/
@Init(service = Services.change_face)
public class ChangeFaceService extends AbstractCommunityBoard implements IService
{
@Override
public Services getService()
{
return Services.change_face;
}
@Override
public void content(final Player player, final String bypass, final Object... params)
{
final ETypes[] face = EFace.getFace(player.getPlayerTemplateComponent().getPlayerRace(), player.getPlayerTemplateComponent().getPlayerSex());
String htm = getCache().getHtml(CBasicConfig.BBS_PATH + "/cabinet/service/player/changeFace/changeFace.htm", player);
String table = getCache().getHtml(CBasicConfig.BBS_PATH + "/cabinet/service/player/changeFace/table.htm", player);
String button = getCache().getHtml(CBasicConfig.BBS_PATH + "/cabinet/service/player/changeFace/button.htm", player);
final StringBuilder buttons = new StringBuilder();
for(int correctCount = 0; correctCount <= face.length - 1; )
{
if(face[correctCount].ordinal() == player.getAppearanceComponent().getFace())
{
correctCount++;
continue;
}
String generateButton = button;
generateButton = generateButton.replace("<?face_name?>", String.valueOf(face[correctCount].name().toUpperCase()));
generateButton = generateButton.replace("<?face?>", String.valueOf(face[correctCount].name()));
buttons.append(generateButton);
correctCount++;
}
table = table.replace("<?buttons?>", buttons.toString());
htm = htm.replace("<?tables?>", table);
htm = htm.replace("<?correct_face?>", ETypes.getName(player.getAppearanceComponent().getFace()).toUpperCase());
htm = htm.replace("<?price?>", String.valueOf(getService().getItemCount()));
htm = htm.replace("<?item_name?>", getItemName(player.getLanguage(), getService().getItemId()));
htm = htm.replace("<?price_wear?>", String.valueOf(getService().getWearItemCount()));
htm = htm.replace("<?item_name_wear?>", getItemName(player.getLanguage(), getService().getWearItemId()));
separateAndSend(htm, player);
}
@Override
public void request(final Player player, final String bypass, final Object... params)
{
if(player == null)
{
return;
}
if(bypass.contains("wear"))
{
final String[] wearStr = bypass.split(":");
if(wearStr.length < 6)
{
player.sendPacket(new CustomMessage("bbs.service.changeFace.noCorrectWear"));
useSaveCommand(player);
return;
}
if(player.getEvent(SiegeEvent.class) != null)
{
player.sendPacket(new CustomMessage("bbs.service.changeFace.isEventSiegeWear"));
useSaveCommand(player);
return;
}
if(!player.isInPeaceZone())
{
player.sendPacket(new CustomMessage("bbs.service.changeFace.noIsInPeaceZoneWear"));
useSaveCommand(player);
return;
}
final Optional<ETypes> face = ETypes.value(wearStr[5]);
final ETypes[] faces = EFace.getFace(player.getPlayerTemplateComponent().getPlayerRace(), player.getPlayerTemplateComponent().getPlayerSex());
if(!face.isPresent() || !ArrayUtils.contains(faces, face.get()))
{
player.sendPacket(new CustomMessage("bbs.service.changeFace.noCorrectWear"));
useSaveCommand(player);
return;
}
if(!getCheckAndPick(player, getService().getWearItemId(), getService().getWearItemCount(), true))
{
useSaveCommand(player);
return;
}
wear(player, face.get());
return;
}
final String[] styleStr = bypass.split(":");
if(styleStr.length < 5)
{
player.sendPacket(new CustomMessage("bbs.service.changeFace.noCorrectRequest"));
useSaveCommand(player);
return;
}
if(player.getEvent(SiegeEvent.class) != null)
{
player.sendPacket(new CustomMessage("bbs.service.changeFace.isEventSiege"));
useSaveCommand(player);
return;
}
if(!player.isInPeaceZone())
{
player.sendPacket(new CustomMessage("bbs.service.changeFace.noIsInPeaceZone"));
useSaveCommand(player);
return;
}
final Optional<ETypes> face = ETypes.value(styleStr[4]);
final ETypes[] faces = EFace.getFace(player.getPlayerTemplateComponent().getPlayerRace(), player.getPlayerTemplateComponent().getPlayerSex());
if(!face.isPresent() || !ArrayUtils.contains(faces, face.get()))
{
player.sendPacket(new CustomMessage("bbs.service.changeFace.noCorrect"));
useSaveCommand(player);
return;
}
if(!getCheckAndPick(player, getService().getItemId(), getService().getItemCount(), true))
{
useSaveCommand(player);
return;
}
reply(player, face.get());
}
@Override
public void wear(final Player player, final Object... params)
{
final ETypes types = (ETypes) params[0];
player.getCustomPlayerComponent().setFaceWear(types.ordinal(), true);
player.getCustomPlayerComponent().startRemoveFaceTask();
useCommand(player, getService().getContentBypass());
Log.service("ChangeFaceService", player, "wear face to " + types.name() + ".");
}
@Override
public void reply(final Player player, final Object... params)
{
final ETypes types = (ETypes) params[0];
//Остановить подборку если она есть.
player.getCustomPlayerComponent().stopRemoveFaceTask();
player.getAppearanceComponent().setFace(types.ordinal());
player.broadcastUserInfo(true);
useSaveCommand(player);
player.sendPacket(new CustomMessage("bbs.service.successfully"));
Log.service("ChangeFaceService", player, "changed face to " + types.name() + ".");
}
}
честно говоря, я не люблю критиковать, ибо только творцу ясен замыселКод:package org.mmocore.gameserver.handler.bbs.custom.privateOffice.services.player.appearance; import handler.bbs.abstracts.AbstractCommunityBoard; import org.mmocore.gameserver.handler.bbs.custom.privateOffice.engine.annotations.Init; import org.mmocore.gameserver.handler.bbs.custom.privateOffice.engine.enums.Services; import org.mmocore.gameserver.handler.bbs.custom.privateOffice.engine.interfaces.IService; import org.mmocore.gameserver.handler.bbs.custom.privateOffice.services.player.appearance.enums.EFace; import org.mmocore.gameserver.handler.bbs.custom.privateOffice.services.player.appearance.enums.ETypes; import org.apache.commons.lang3.ArrayUtils; import org.mmocore.gameserver.configuration.config.community.CBasicConfig; import org.mmocore.gameserver.model.entity.events.impl.SiegeEvent; import org.mmocore.gameserver.network.lineage.components.CustomMessage; import org.mmocore.gameserver.object.Player; import org.mmocore.gameserver.utils.Log; import java.util.Optional; /** * @author Mangol * @since 29.02.2016 */ @Init(service = Services.change_face) public class ChangeFaceService extends AbstractCommunityBoard implements IService { @Override public Services getService() { return Services.change_face; } @Override public void content(final Player player, final String bypass, final Object... params) { final ETypes[] face = EFace.getFace(player.getPlayerTemplateComponent().getPlayerRace(), player.getPlayerTemplateComponent().getPlayerSex()); String htm = getCache().getHtml(CBasicConfig.BBS_PATH + "/cabinet/service/player/changeFace/changeFace.htm", player); String table = getCache().getHtml(CBasicConfig.BBS_PATH + "/cabinet/service/player/changeFace/table.htm", player); String button = getCache().getHtml(CBasicConfig.BBS_PATH + "/cabinet/service/player/changeFace/button.htm", player); final StringBuilder buttons = new StringBuilder(); for(int correctCount = 0; correctCount <= face.length - 1; ) { if(face[correctCount].ordinal() == player.getAppearanceComponent().getFace()) { correctCount++; continue; } String generateButton = button; generateButton = generateButton.replace("<?face_name?>", String.valueOf(face[correctCount].name().toUpperCase())); generateButton = generateButton.replace("<?face?>", String.valueOf(face[correctCount].name())); buttons.append(generateButton); correctCount++; } table = table.replace("<?buttons?>", buttons.toString()); htm = htm.replace("<?tables?>", table); htm = htm.replace("<?correct_face?>", ETypes.getName(player.getAppearanceComponent().getFace()).toUpperCase()); htm = htm.replace("<?price?>", String.valueOf(getService().getItemCount())); htm = htm.replace("<?item_name?>", getItemName(player.getLanguage(), getService().getItemId())); htm = htm.replace("<?price_wear?>", String.valueOf(getService().getWearItemCount())); htm = htm.replace("<?item_name_wear?>", getItemName(player.getLanguage(), getService().getWearItemId())); separateAndSend(htm, player); } @Override public void request(final Player player, final String bypass, final Object... params) { if(player == null) { return; } if(bypass.contains("wear")) { final String[] wearStr = bypass.split(":"); if(wearStr.length < 6) { player.sendPacket(new CustomMessage("bbs.service.changeFace.noCorrectWear")); useSaveCommand(player); return; } if(player.getEvent(SiegeEvent.class) != null) { player.sendPacket(new CustomMessage("bbs.service.changeFace.isEventSiegeWear")); useSaveCommand(player); return; } if(!player.isInPeaceZone()) { player.sendPacket(new CustomMessage("bbs.service.changeFace.noIsInPeaceZoneWear")); useSaveCommand(player); return; } final Optional<ETypes> face = ETypes.value(wearStr[5]); final ETypes[] faces = EFace.getFace(player.getPlayerTemplateComponent().getPlayerRace(), player.getPlayerTemplateComponent().getPlayerSex()); if(!face.isPresent() || !ArrayUtils.contains(faces, face.get())) { player.sendPacket(new CustomMessage("bbs.service.changeFace.noCorrectWear")); useSaveCommand(player); return; } if(!getCheckAndPick(player, getService().getWearItemId(), getService().getWearItemCount(), true)) { useSaveCommand(player); return; } wear(player, face.get()); return; } final String[] styleStr = bypass.split(":"); if(styleStr.length < 5) { player.sendPacket(new CustomMessage("bbs.service.changeFace.noCorrectRequest")); useSaveCommand(player); return; } if(player.getEvent(SiegeEvent.class) != null) { player.sendPacket(new CustomMessage("bbs.service.changeFace.isEventSiege")); useSaveCommand(player); return; } if(!player.isInPeaceZone()) { player.sendPacket(new CustomMessage("bbs.service.changeFace.noIsInPeaceZone")); useSaveCommand(player); return; } final Optional<ETypes> face = ETypes.value(styleStr[4]); final ETypes[] faces = EFace.getFace(player.getPlayerTemplateComponent().getPlayerRace(), player.getPlayerTemplateComponent().getPlayerSex()); if(!face.isPresent() || !ArrayUtils.contains(faces, face.get())) { player.sendPacket(new CustomMessage("bbs.service.changeFace.noCorrect")); useSaveCommand(player); return; } if(!getCheckAndPick(player, getService().getItemId(), getService().getItemCount(), true)) { useSaveCommand(player); return; } reply(player, face.get()); } @Override public void wear(final Player player, final Object... params) { final ETypes types = (ETypes) params[0]; player.getCustomPlayerComponent().setFaceWear(types.ordinal(), true); player.getCustomPlayerComponent().startRemoveFaceTask(); useCommand(player, getService().getContentBypass()); Log.service("ChangeFaceService", player, "wear face to " + types.name() + "."); } @Override public void reply(final Player player, final Object... params) { final ETypes types = (ETypes) params[0]; //Остановить подборку если она есть. player.getCustomPlayerComponent().stopRemoveFaceTask(); player.getAppearanceComponent().setFace(types.ordinal()); player.broadcastUserInfo(true); useSaveCommand(player); player.sendPacket(new CustomMessage("bbs.service.successfully")); Log.service("ChangeFaceService", player, "changed face to " + types.name() + "."); } }
А там секрет с валидациями, и кто будет писать все через else if, else ifчестно говоря, я не люблю критиковать, ибо только творцу ясен замысел
но я скажу что я вижу, я вижу попытку посмотреть на тот же уй, только сбоку и сказать что это не уй))) или дайте мне определение вашего понимания "конфиг"
еще я заметил выпендреж в стиле понимания ООП ввиде применения абстрактов и интерфейсов, но профессионалы всегда понимают, где уместно применять методологию ООП, а где нет.
в вашем примере, я считаю, это не уместно, слишком просто, слишком не глубоко
P.S. хотя вы меня можете удивить, показав содержимое IService
выпендреж
понимания ООП
ввиде применения абстрактов и интерфейсов
абстрактов
абстрактов
абстрактов
выпендреж
слишком просто
слишком не глубоко
применять методологию ООП
методологию
Господи Иисусе, что это за говно ?
Не знаю, мб человек не догоняет что они не так просто так лежат, и там скорей всего есть менеджер который всем этим управляет, дабы не дергать instanceOfГосподи Иисусе, что это за говно ?
давайте оставим все как есть) я пытаюсь взывать к философии java, а вы продолжаете мыслить на прикладном уровне.Не знаю, мб человек не догоняет что они не так просто так лежат, и там скорей всего есть менеджер который всем этим управляет, дабы не дергать instanceOf
.
Что такое трейты, и есть ли они в java?давайте оставим все как есть) я пытаюсь взывать к философии java, а вы продолжаете мыслить на прикладном уровне.
да - так можно делать,
да - так будет работать,
но интерфейсы не предназначены для решения задач в таком ключе
это не вопрос правильности, это вопрос философии java
Этим все сказано, гуру ооп явы.а можно почистить тему? а то тут какой-то срач намечается) а я хотел просто публиковать ход разработки(
давайте оставим все как есть) я пытаюсь взывать к философии java, а вы продолжаете мыслить на прикладном уровне.
да - так можно делать,
да - так будет работать,
но интерфейсы не предназначены для решения задач в таком ключе
это не вопрос правильности, это вопрос философии java
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?