мисси ессенса на майн

  • Автор темы Автор темы Dev_mod
  • Дата начала Дата начала

Dev_mod

Пляшущий с бубном
Участник
Сообщения
64
Розыгрыши
0
Решения
3
Репутация
5
Реакции
20
Баллы
240
Хроники
  1. Master Class
Исходники
Присутствуют
Сборка
L2scripts
все привет. хотел бы узнать что нужно чтобы перетянуть ежедневные мисси кланна с ессенса на майн у меня 520 протокол
на северной части я реализовал все пакеты вот они
Java:
package org.mmocore.gameserver.serverpackets.dailymission;

import org.mmocore.gameserver.data.xml.holder.MissionLevelHolder;
import org.mmocore.gameserver.model.DailyMissionLevel;
import org.mmocore.gameserver.model.Player;
import org.mmocore.gameserver.model.enums.MissionLevelState;
import org.mmocore.gameserver.model.enums.MissionLevelType;
import org.mmocore.gameserver.serverpackets.L2GameServerPacket;
import org.mmocore.gameserver.templates.item.data.ItemData;

import java.util.Calendar;

public class ExMissionLevelRewardList extends L2GameServerPacket
{
    private Player _player;
    private int _year;
    private int _month;
    private int _key;
    private ItemData[] _baseItems;

    public ExMissionLevelRewardList(Player player)
    {
        _player = player;

        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(System.currentTimeMillis());
        _year = cal.get(Calendar.YEAR);
        _month = cal.get(Calendar.MONTH) + 1;

        _key = MissionLevelHolder.getInstance().getCurrentSeasonKey();
        _baseItems = MissionLevelHolder.getInstance().getBaseItems(_key);
    }

    @Override
    protected void writeImpl()
    {
        if (_baseItems == null)
            return;

        DailyMissionLevel ml = _player.getMissionLevel();

        int level    = ml.getLevel();
        int received = ml.getReceived();
        int receivedS= ml.getReceivedS();
        int maxLevel = ml.getLevelMax();

        MissionLevelHolder holder = MissionLevelHolder.getInstance();
        ItemData itemSpec  = holder.getSpecialItem(_key);
        ItemData itemExtra = holder.getExtraItem(_key);
        
        int extra = (itemSpec != null ? 1 : 0) + (receivedS >= 1 && itemExtra != null ? 1 : 0);
        if (received < maxLevel)
            extra = 0;
        
        Calendar end = Calendar.getInstance();
        end.set(Calendar.HOUR_OF_DAY, 6);
        end.set(Calendar.MINUTE, 30);
        end.set(Calendar.SECOND, 0);
        end.set(Calendar.MILLISECOND, 0);
        end.set(Calendar.DAY_OF_MONTH, 1);
        end.add(Calendar.MONTH, 1);
        if (end.getTimeInMillis() < System.currentTimeMillis())
            end.add(Calendar.MONTH, 1);
        long remain = end.getTimeInMillis() - System.currentTimeMillis();
        
        writeD(_baseItems.length + extra);
        for (int i = 0; i < _baseItems.length; i++)
        {
            writeD(MissionLevelType.BASE.getId());
            writeD(i + 1);
            if (received < (i + 1))
            {
                if (level >= (i + 1))
                    writeD(MissionLevelState.AVAILABLE.getId());
                else
                    writeD(MissionLevelState.UNAVAILABLE.getId());
            }
            else
                writeD(MissionLevelState.RECEIVED.getId());
        }
        
        int availableS = 0;
        if (extra > 0)
        {
            if (itemSpec != null)
            {
                writeD(MissionLevelType.SPECIAL.getId());
                writeD(_baseItems.length + 1);
                if (receivedS >= 1)
                {
                    writeD(MissionLevelState.RECEIVED.getId());
                }
                else if (level == maxLevel)
                {
                    availableS = 1;
                    writeD(MissionLevelState.AVAILABLE.getId());
                }
                else
                {
                    writeD(MissionLevelState.UNAVAILABLE.getId());
                }
            }

            if (receivedS >= 1 && itemExtra != null)
            {
                writeD(MissionLevelType.EXTRA.getId());
                writeD(_baseItems.length + 2);
                if (receivedS >= 2)
                {
                    writeD(MissionLevelState.RECEIVED.getId());
                }
                else if (level == maxLevel)
                {
                    availableS = 1;
                    writeD(MissionLevelState.AVAILABLE.getId());
                }
                else
                {
                    writeD(MissionLevelState.UNAVAILABLE.getId());
                }
            }
        }

        writeD(level);                          // текущий уровень
        writeD(ml.getPointPercent());           // % заполнения текущего уровня
        writeD(_year);
        writeD(_month);

        writeD(level - received);               // сколько наград можно забрать
        writeD(availableS);                     // доступен ли special/extra
        writeD((int)(remain / 1000));           // секунд до конца сезона

        boolean jumpEnabled  = true;//Config.ALT_MISSION_LEVEL_JUMP todo
        boolean canJump      = _player.canMissionLevelJump();
        writeC(!jumpEnabled ? 0x01 : canJump ? 0x00 : 0x01);
    }
}
Java:
package org.mmocore.gameserver.serverpackets.newPacket;

import org.mmocore.commons.time.cron.SchedulingPattern;
import org.mmocore.gameserver.model.Player;
import org.mmocore.gameserver.model.actor.instances.player.DailyMission;
import org.mmocore.gameserver.serverpackets.L2GameServerPacket;
import org.mmocore.gameserver.templates.dailymissions.DailyMissionTemplate;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;

import java.util.List;

public class ExOneDayReceiveRewardList extends L2GameServerPacket
{
    private static final SchedulingPattern DAILY_REUSE_PATTERN = new SchedulingPattern("30 6 * * *");
    private static final SchedulingPattern WEEKLY_REUSE_PATTERN = new SchedulingPattern("30 6 * * 1");
    private static final SchedulingPattern MONTHLY_REUSE_PATTERN = new SchedulingPattern("30 6 1 * *");

    private final int _dayRemainTime;
    private final int _weekRemainTime;
    private final int _monthRemainTime;
    private final int _classId;
    private final int _dayOfWeek;
    private final List<DailyMission> _missions = new ArrayList<DailyMission>();

    public ExOneDayReceiveRewardList(Player player)
    {
        _dayRemainTime = (int) ((DAILY_REUSE_PATTERN.next(System.currentTimeMillis()) - System.currentTimeMillis()) / 1000L);
        _weekRemainTime = (int) ((WEEKLY_REUSE_PATTERN.next(System.currentTimeMillis()) - System.currentTimeMillis()) / 1000L);
        _monthRemainTime = (int) ((MONTHLY_REUSE_PATTERN.next(System.currentTimeMillis()) - System.currentTimeMillis()) / 1000L);
        _classId = player.getBaseClassId();
        _dayOfWeek = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);

        for(DailyMissionTemplate missionTemplate : player.getDailyMissionList().getAvailableMissions())
        {
            DailyMission mission = player.getDailyMissionList().get(missionTemplate);
            if(!mission.isFinallyCompleted())
                _missions.add(mission);
        }
        Collections.sort(_missions);
    }

    public ExOneDayReceiveRewardList()
    {
        _dayRemainTime = (int) ((DAILY_REUSE_PATTERN.next(System.currentTimeMillis()) - System.currentTimeMillis()) / 1000L);
        _weekRemainTime = (int) ((WEEKLY_REUSE_PATTERN.next(System.currentTimeMillis()) - System.currentTimeMillis()) / 1000L);
        _monthRemainTime = (int) ((MONTHLY_REUSE_PATTERN.next(System.currentTimeMillis()) - System.currentTimeMillis()) / 1000L);
        _classId = 0;
        _dayOfWeek = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
    }

    @Override
    protected void writeImpl()
    {
        writeD(_dayRemainTime);
        writeD(_weekRemainTime);
        writeD(_monthRemainTime);
        writeC(0x17);
        writeD(_classId);
        writeD(_dayOfWeek);
        writeD(_missions.size());
        for(DailyMission mission : _missions)
        {
            writeH(mission.getId());
            writeC(mission.getStatus().ordinal());
            writeC(0x01);
            writeD(mission.getCurrentProgress());
            writeD(mission.getRequiredProgress());
        }
    }
}
в клиентской части явзял дат файлик missionlevel класик и просто взял и удалилв названии классик слышал что так возможно сработает
но по итогу не чего не отображает
кто-то мог бы подсказать что я пропустил или что не сделал
1782562236284.webp
 
Назад
Сверху Снизу