L2 MMOLAB (Public Work)

Ликбез: любая реализация, где требуется осуществить пользовательские настраиваемые параметры, будет сопровождаться т.н. конфигами. Это нормальная практика, и ставить "смешные смайлики" по этому поводу выглядит глупо.
Их важность = 0. Конфиги пилят команды которые проживут не очень долго и все это по принципу ctrl+c и ctrl+v.
2. У любой профессиональной разработки, есть план работ (milestones), первый пункт в моем плане - создание базового набора доп. контента в виде расширенного Community Board. Все т.н. сервисы разрабатываются без основы (с нуля), согласно моему пониманию "правильной разработки". Поэтому да, на таймлайне пока вы будете видеть соответствующие коммиты, до завершения этого milestone.
У любой разработки смотрятся сначала главные аспекты, а не второстепенные которые ну по сути ничего с собой не несут.
Я не ориентируюсь на ту часть пользователей, на которую оказывает влияние оформление сайта. Для меня важно - удобство, информативность и соответствие функционала моим требованиям. Но в будущем, специально для пользователей вашего уровня, я обязательно сделаю красивый флеш-сайт и поставлю форум xenforo, а для профессионалов - оставлю мощное средство по управлению проектами Redmine - на котором сейчас работает наш web.
А причем тут это? Я про оформление в кб говорил, но не как сайта. И если так, то можно спокойно оформить и по своему redmine.
Кпд работы над сборкой = 0
 

Now the repository available to view / Изменения исходного кода теперь доступны для просмотра

 
  • Мне нравится
Реакции: kick
Уважаемый администратор, я объясню свою позицию один раз, если она не укладывается в политику форума, сообщите мне, я прекращу публиковать ход разработки на Вашем форуме.
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() + ".");
    }
}
 

Вложения

  • upload_2016-4-22_11-27-37.webp
    upload_2016-4-22_11-27-37.webp
    25,1 КБ · Просмотры: 136
Могу лишь пожелать терпения, не бросайте разработку если уж начали, делайте до конца.
 
Код:
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() + ".");
    }
}
честно говоря, я не люблю критиковать, ибо только творцу ясен замысел
но я скажу что я вижу, я вижу попытку посмотреть на тот же уй, только сбоку и сказать что это не уй))) или дайте мне определение вашего понимания "конфиг"
еще я заметил выпендреж в стиле понимания ООП ввиде применения абстрактов и интерфейсов, но профессионалы всегда понимают, где уместно применять методологию ООП, а где нет.
в вашем примере, я считаю, это не уместно, слишком просто, слишком не глубоко

P.S. хотя вы меня можете удивить, показав содержимое IService
 
честно говоря, я не люблю критиковать, ибо только творцу ясен замысел
но я скажу что я вижу, я вижу попытку посмотреть на тот же уй, только сбоку и сказать что это не уй))) или дайте мне определение вашего понимания "конфиг"
еще я заметил выпендреж в стиле понимания ООП ввиде применения абстрактов и интерфейсов, но профессионалы всегда понимают, где уместно применять методологию ООП, а где нет.
в вашем примере, я считаю, это не уместно, слишком просто, слишком не глубоко

P.S. хотя вы меня можете удивить, показав содержимое IService
А там секрет с валидациями, и кто будет писать все через else if, else if

upload_2016-4-23_22-10-49.webp

upload_2016-4-23_22-11-16.webp

И все это ведет лишь в 1 место.
 

    GenCloud

    Баллов: -22
    Данный пользователь ведет себя не адекватно, и не может общаться с пользователями
Господи Иисусе, что это за говно ?
Не знаю, мб человек не догоняет что они не так просто так лежат, и там скорей всего есть менеджер который всем этим управляет, дабы не дергать instanceOf
.
 
Не знаю, мб человек не догоняет что они не так просто так лежат, и там скорей всего есть менеджер который всем этим управляет, дабы не дергать instanceOf
.
давайте оставим все как есть) я пытаюсь взывать к философии java, а вы продолжаете мыслить на прикладном уровне.

да - так можно делать,
да - так будет работать,
но интерфейсы не предназначены для решения задач в таком ключе
это не вопрос правильности, это вопрос философии java
 
давайте оставим все как есть) я пытаюсь взывать к философии java, а вы продолжаете мыслить на прикладном уровне.

да - так можно делать,
да - так будет работать,
но интерфейсы не предназначены для решения задач в таком ключе
это не вопрос правильности, это вопрос философии java
Что такое трейты, и есть ли они в java?
 
а можно почистить тему? а то тут какой-то срач намечается) а я хотел просто публиковать ход разработки(
 
давайте оставим все как есть) я пытаюсь взывать к философии java, а вы продолжаете мыслить на прикладном уровне.

да - так можно делать,
да - так будет работать,
но интерфейсы не предназначены для решения задач в таком ключе
это не вопрос правильности, это вопрос философии java

Ну так расскажите нам про философию, про правильный подход.
Век живи - век учись.
 
Назад
Сверху Снизу