↑ ↓

Aion 5.8 "Heart of Frost" - Original game server

Тема в разделе "Команда M.O.G. Devs Team", создана пользователем Dision, 14 май 2019.

Статус темы:
Закрыта.
  1. TopicStarter Overlay
    Offline

    Dision Ефрейтор Команда форума VIP

    274
    62
    61
    Кредиты:
    $15.415,48
    Репутация:
    7
    [​IMG]

    Описание и компоненты продукта
    Готовый игровой сервер версии 5.8.0.8
    Комплект сервера (Логин сервер, Чат сервер, Игровой сервер)
    У серверов общая библиотека Lib
    Серверы собраны и работают на языке Java 8+
    База данных сервера MySql 8.1
    Оригинальная сборка с официальным контентом.
    Полностью настраиваемый функционал.

    Начинка игрового сервера
    Строение даты схожее со строением клиентской даты.
    Вся дата спарсена специальными парсерами написанными по строению клиента.
    От руки писалась только дата дополнительного контента.
    Все расчетные формулы статов предметов их усиление и дополнительные возможности расположены в дате (считываются с оригинальных листов).
    Полностью рабочий PVE\PVP контент версии.
    Косметическая составляющая на оригинальном уровне (спавны, валкеры, квесты, geo).
    Дроп\лут собран по оригинальной версии и работает на двух движках (индивидуальный и глобальный).
    Оптимизация ядра на высоком уровне (без утечек памяти и траты лишней).
    Так же приведена новая технология разработки кода классов и методов.
    Технология Lambda и Stream API.
    Дополнительный контент не имеет аналогов в мире фри-серверов (Подробности о контенте на форуме).

    Цена сборки без исходного кода: 800$ (Сборка записывается в базу клиентов лицензии)
    Цена сборки за исходный код: 1600$

    Клиентам 50% скидка на API web приложение

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

    Связь
    Skype: djneo0066
    Mail: djneo0066@gmail.com

    Discord: Dision#7358





     
    Последние данные очков репутации:
    AngryBoris: -1 Очки (Удаляет ответы пользователей с описанием багов) 15 июл 2019
    Последнее редактирование: 31 авг 2020
    WeRn нравится это.
  2. TopicStarter Overlay
    Offline

    Dision Ефрейтор Команда форума VIP

    274
    62
    61
    Кредиты:
    $15.415,48
    Репутация:
    7



     
    Последнее редактирование: 14 июл 2019
  3. TopicStarter Overlay
    Offline

    Dision Ефрейтор Команда форума VIP

    274
    62
    61
    Кредиты:
    $15.415,48
    Репутация:
    7

     
  4. TopicStarter Overlay
    Offline

    Dision Ефрейтор Команда форума VIP

    274
    62
    61
    Кредиты:
    $15.415,48
    Репутация:
    7
    Стримы с мастерской

     
    Последнее редактирование: 31 авг 2020
  5. TopicStarter Overlay
    Offline

    Dision Ефрейтор Команда форума VIP

    274
    62
    61
    Кредиты:
    $15.415,48
    Репутация:
    7
    Обновление от 14.08.20

    Полностью переработана система взаимодействия базы данных с серверами.
    Внедрена система управления ОРМ.
    Все запросы работают по трем шаблонам.
    Модель ОРМ разработана по технологиям Java 8+.
    В итоге мы имеем самую быструю работу взаимодействия серверов с базами данных.
    Все сервера работают от одной библиотеки.
    При написании запросов DAO можно напрочь забыть про обработчики try catch finally.

    Пример (Чать запросов из MySQL8ChallengeTasksDAO)
    Код:
    @Override
    	public Map<Integer, ChallengeTask> load(int ownerId, ChallengeType type) {
    		Map<Integer, ChallengeTask> tasks = new ConcurrentHashMap<>();
    	  
    		DB.select(SELECT_QUERY, new ParamReadStH() {
    
    			@Override
    			public void setParams(PreparedStatement st, DAOUtils util) throws SQLException {
    				util.setInt(ownerId);
    				util.setStr(type.toString());
    			}
    
    			@Override
    			public void handleRead(ResultSet rs, DAOUtils util) throws SQLException {
    				while (rs.next()) {
    					int taskId = rs.getInt("task_id");
    					int questId = rs.getInt("quest_id");
    					int completeCount = rs.getInt("complete_count");
    					Timestamp date = rs.getTimestamp("complete_time");
    					ChallengeQuestTemplate template = DataManager.CHALLENGE_DATA.getQuestByQuestId(questId);
    					ChallengeQuest quest = new ChallengeQuest(template, completeCount);
    					quest.setPersistentState(PersistentState.UPDATED);
    				  
    					if (!tasks.containsKey(taskId)) {
    						Map<Integer, ChallengeQuest> quests = new HashMap<>(2);
    						quests.put(quest.getQuestId(), quest);
    						tasks.put(taskId, new ChallengeTask(taskId, ownerId, quests, date));
    					}
    					else {
    						tasks.get(taskId).getQuests().put(questId, quest);
    					}
    				}
    			}
    		});
    		return tasks;
    	}
    
    @Override
    	public void storeTask(ChallengeTask task) {
    		task.getQuests().values().stream().filter(quest -> quest.getPersistentState() == PersistentState.NEW).forEach(quest -> {
    			insertQuestEntry(task, quest);
    		});	
    		task.getQuests().values().stream().filter(quest -> quest.getPersistentState() == PersistentState.UPDATE_REQUIRED).forEach(quest -> {
    			updateQuestEntry(task, quest);
    		});
    	}
    
    private boolean insertQuestEntry(ChallengeTask task, ChallengeQuest quest) {
    		return DB.insertUpdate(INSERT_QUERY, new IUStH() {
    
    			@Override
    			public void handleInsertUpdate(PreparedStatement st, DAOUtils util) throws SQLException {
    				util.setInt(task.getTaskId());
    				util.setInt(quest.getQuestId());
    				util.setInt(task.getOwnerId());
    				util.setStr(task.getTemplate().getType().toString());
    				util.setInt(quest.getCompleteCount());
    				util.setTimestamp(task.getCompleteTime());
    				st.execute();
    				quest.setPersistentState(PersistentState.UPDATED);
    			}
    		});
    	}
     
    WeRn нравится это.
Статус темы:
Закрыта.