Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Не правильные координаты респа персонажа
#1
При создании персонажа он попадает на координаты 0,0,0
За исключением если это персонаж хум маг или орк маг, они респаются на верных координатах из char_templates. Логи выдают данную ошибку
[Изображение: RdT3HhAshrE.jpg]
Помогите пожалуйста разобраться, все форумы уже облазил Sad

При создании мага хума или орка, ошибки нет.
Ответ
#2
Исходники то есть?
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
#3
Чето ощущение, что Вы пытаетесь персонажу одеть в руку какой-нибудь варниш, при его создании. Либо очень странный баг в коде.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
#4
Pointer*Rage Написал:Чето ощущение, что Вы пытаетесь персонажу одеть в руку какой-нибудь варниш, при его создании. Либо очень странный баг в коде.

В том то и дело, что все персонажи создаются пустые -( Вне зависимости от расы. А и если создать хума мага, он правильно респается и тоже создается пустой.

А еще есть очень странная! Фигня. Уж не знаю какое литературное слово тут найти.
Если в таблице char_templates изменить ClassId и взять id человека мага (10) и поставить этот id магу темного эльфа (DE Mage), а человеку магу поставить id 38 соответственно (id темного мага) ТО! при создании в игре мага человека будет создан маг темный эльфа и заспаунится на координатах корректных для темного эльфа. А если создать темного эльфа мага - получится вообще гномка и попадет на координаты (0,0,0)
[Изображение: hl5cUG3pp6A.jpg]

Вот CharacterCreate из ядра, вроде ничего нету криминального.
Я уже не знаю, где мне помощи искать -(
Неделю бьюсь с этим.
Код:
// Decompiled by DJ v3.12.12.96 Copyright 2011 Atanas Neshkov  Date: 13.11.2015 15:46:45
// Home Page: http://members.fortunecity.com/neshkov/dj.html  http://www.neshkov.com/dj.html - Check often for new version!
// Decompiler options: packimports(3)
// Source File Name:   CharacterCreate.java


package net.sf.l2j.gameserver.network.clientpackets;


import java.util.Iterator;
import java.util.List;
import java.util.logging.Logger;
import java.util.regex.*;
import net.sf.l2j.Config;
import net.sf.l2j.gameserver.LoginServerThread;
import net.sf.l2j.gameserver.datatables.*;
import net.sf.l2j.gameserver.idfactory.IdFactory;
import net.sf.l2j.gameserver.instancemanager.QuestManager;
import net.sf.l2j.gameserver.model.*;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.itemcontainer.PcInventory;
import net.sf.l2j.gameserver.model.quest.Quest;
import net.sf.l2j.gameserver.model.quest.QuestState;
import net.sf.l2j.gameserver.network.L2GameClient;
import net.sf.l2j.gameserver.network.serverpackets.*;
import net.sf.l2j.gameserver.templates.L2PcTemplate;
import net.sf.l2j.gameserver.util.Util;
import org.mmocore.network.MMOConnection;


// Referenced classes of package net.sf.l2j.gameserver.network.clientpackets:
//            L2GameClientPacket


public final class CharacterCreate extends L2GameClientPacket
{


    public CharacterCreate()
    {
    }


    protected void readImpl()
    {
        _name = readS();
        _race = readD();
        _sex = (byte)readD();
        _classId = readD();
        _int = readD();
        _str = readD();
        _con = readD();
        _men = readD();
        _dex = readD();
        _wit = readD();
        _hairStyle = (byte)readD();
        _hairColor = (byte)readD();
        _face = (byte)readD();
    }


    protected void runImpl()
    {
        if(CharNameTable.getInstance().accountCharNumber(((L2GameClient)getClient()).getAccountName()) >= Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT && Config.MAX_CHARACTERS_NUMBER_PER_ACCOUNT != 0)
        {
            if(Config.DEBUG)
                _log.fine("Max number of characters reached. Creation failed.");
            CharCreateFail ccf = new CharCreateFail(1);
            sendPacket(ccf);
            return;
        }
        if(CharNameTable.getInstance().doesCharNameExist(_name))
        {
            if(Config.DEBUG)
                _log.fine((new StringBuilder()).append("charname: ").append(_name).append(" already exists. creation failed.").toString());
            CharCreateFail ccf = new CharCreateFail(2);
            sendPacket(ccf);
            return;
        }
        if(_name.length() < 3 || _name.length() > 16 || !Util.isAlphaNumeric(_name) || !isValidName(_name))
        {
            if(Config.DEBUG)
                _log.fine((new StringBuilder()).append("charname: ").append(_name).append(" is invalid. creation failed.").toString());
            CharCreateFail ccf = new CharCreateFail(3);
            sendPacket(ccf);
            return;
        }
        L2PcTemplate template = CharTemplateTable.getInstance().getTemplate(_classId);
        if(Config.DEBUG)
            _log.fine((new StringBuilder()).append("charname: ").append(_name).append(" classId: ").append(_classId).append(" template: ").append(template).toString());
        if(template == null || template.classBaseLevel > 1)
        {
            CharCreateFail ccf = new CharCreateFail(0);
            sendPacket(ccf);
            return;
        } else
        {
            int objectId = IdFactory.getInstance().getNextId();
            L2PcInstance newChar = L2PcInstance.create(objectId, template, ((L2GameClient)getClient()).getAccountName(), _name, _hairStyle, _hairColor, _face, _sex != 0);
            newChar.setCurrentHp(template.baseHpMax);
            newChar.setCurrentCp(template.baseCpMax);
            newChar.setCurrentMp(template.baseMpMax);
            CharCreateOk cco = new CharCreateOk();
            sendPacket(cco);
            initNewChar((L2GameClient)getClient(), newChar);
            return;
        }
    }


    private boolean isValidName(String text)
    {
        boolean result = true;
        String test = text;
        Pattern pattern;
        try
        {
            pattern = Pattern.compile(Config.CNAME_TEMPLATE);
        }
        catch(PatternSyntaxException e)
        {
            _log.warning("ERROR : Character name pattern of config is wrong!");
            pattern = Pattern.compile(".*");
        }
        Matcher regexp = pattern.matcher(test);
        if(!regexp.matches())
            result = false;
        return result;
    }


    private void initNewChar(L2GameClient client, L2PcInstance newChar)
    {
        if(Config.DEBUG)
            _log.fine("Character init start");
        L2World.getInstance().storeObject(newChar);
        L2PcTemplate template = newChar.getTemplate();
        newChar.addAdena("Init", Config.STARTING_ADENA, null, false);
        newChar.setXYZInvisible(template.spawnX, template.spawnY, template.spawnZ);
        newChar.setTitle("");
        L2ShortCut shortcut = new L2ShortCut(0, 0, 3, 2, -1, 1);
        newChar.registerShortCut(shortcut);
        shortcut = new L2ShortCut(3, 0, 3, 5, -1, 1);
        newChar.registerShortCut(shortcut);
        shortcut = new L2ShortCut(10, 0, 3, 0, -1, 1);
        newChar.registerShortCut(shortcut);
        Iterator i$ = template.getItems().iterator();
        do
        {
            if(!i$.hasNext())
                break;
            net.sf.l2j.gameserver.templates.L2PcTemplate.PcTemplateItem ia = (net.sf.l2j.gameserver.templates.L2PcTemplate.PcTemplateItem)i$.next();
            L2ItemInstance item = newChar.getInventory().addItem("Init", ia.getItemId(), ia.getAmount(), newChar, null);
            if(item.getItemId() == 5588)
            {
                shortcut = new L2ShortCut(11, 0, 1, item.getObjectId(), -1, 1);
                newChar.registerShortCut(shortcut);
            }
            if(item.isEquipable() && ia.isEquipped())
                newChar.getInventory().equipItemAndRecord(item);
        } while(true);
        L2SkillLearn arr$[] = SkillTreeTable.getInstance().getAvailableSkills(newChar, newChar.getClassId());
        int len$ = arr$.length;
        for(int i$ = 0; i$ < len$; i$++)
        {
            L2SkillLearn skill = arr$[i$];
            newChar.addSkill(SkillTable.getInstance().getInfo(skill.getId(), skill.getLevel()), true);
            if(skill.getId() == 1001 || skill.getId() == 1177)
            {
                shortcut = new L2ShortCut(1, 0, 2, skill.getId(), 1, 1);
                newChar.registerShortCut(shortcut);
            }
            if(skill.getId() == 1216)
            {
                shortcut = new L2ShortCut(10, 0, 2, skill.getId(), 1, 1);
                newChar.registerShortCut(shortcut);
            }
            if(Config.DEBUG)
                _log.fine((new StringBuilder()).append("adding starter skill:").append(skill.getId()).append(" / ").append(skill.getLevel()).toString());
        }


        startTutorialQuest(newChar);
        L2GameClient.saveCharToDisk(newChar);
        newChar.deleteMe();
        CharSelectionInfo cl = new CharSelectionInfo(client.getAccountName(), client.getSessionId().playOkID1);
        client.getConnection().sendPacket(cl);
        client.setCharSelection(cl.getCharInfo());
        if(Config.DEBUG)
            _log.fine("Character init end");
    }


    public void startTutorialQuest(L2PcInstance player)
    {
        QuestState qs = player.getQuestState("255_Tutorial");
        Quest q = null;
        if(qs == null)
            q = QuestManager.getInstance().getQuest("255_Tutorial");
        if(q != null)
            q.newQuestState(player);
    }


    public String getType()
    {
        return "[C] 0B CharacterCreate";
    }


    private static final String _C__0B_CHARACTERCREATE = "[C] 0B CharacterCreate";
    private static Logger _log = Logger.getLogger(net/sf/l2j/gameserver/network/clientpackets/CharacterCreate.getName());
    private String _name;
    private int _race;
    private byte _sex;
    private int _classId;
    private int _int;
    private int _str;
    private int _con;
    private int _men;
    private int _dex;
    private int _wit;
    private byte _hairStyle;
    private byte _hairColor;
    private byte _face;


}

P.S.

Добавлено через 13 минут
Zubastic Написал:Исходники то есть?

Это для меня совсем новое занятие, поэтому я не очень уверен в далее сказанном. Ядро сервера - l2jserver. Насколько я понял из литературы это именно оно. Именно его надо править. Оно в формате .jar и если я не ошибаюсь его можно редактировать. Верно?

Это вы спрашивали?
Ответ
#5
Class id привязаны в клиенте к расе, если память меня не подводит, поэтому лучше так не экспериментировать.

Цитата:Это для меня совсем новое занятие, поэтому я не очень уверен в далее сказанном. Ядро сервера - l2jserver. Насколько я понял из литературы это именно оно. Именно его надо править. Оно в формате .jar и если я не ошибаюсь его можно редактировать. Верно?
Все вокруг l2j, даже феникс. А так, ключевой комментарий:
Цитата:// Decompiled
Я очень сомневаюсь, что Вы сможете собрать все назад после правок. В особенности, на классах +10к строк кода, как например L2PcInstance, в который лучше заглянуть, на 2238 строку кода.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Нет агра мобов после респа Kagaku 0 877 03-30-2020, 06:54 PM
Последний пост: Kagaku
  как добавить персонажа в мир kr0n4ik 8 2,555 09-23-2019, 05:55 PM
Последний пост: AfterJob
  Java координаты, различия PTS и Java, какие сборки хороши (iL) varted 5 2,435 09-12-2018, 08:29 AM
Последний пост: varted
  Черный экран, звук есть, после выбора персонажа. Taurus2790 19 5,234 07-12-2016, 11:45 PM
Последний пост: L2scripts-Guard
  зависимость HP/MP от уровня персонажа CABA 5 1,766 07-12-2016, 11:05 PM
Последний пост: FaintSmile
  Ошибки при создании персонажа Zanoza 4 2,481 07-01-2016, 04:58 PM
Последний пост: Zanoza
  Подарки по уровню персонажа Mantra 0 982 02-05-2016, 01:37 AM
Последний пост: Mantra
  Спавен персонажа ? knaif 11 2,603 01-23-2016, 10:45 AM
Последний пост: Narsell
  Координаты телепортации к РБ.L2j-pride Allene 7 2,566 08-31-2015, 10:53 AM
Последний пост: Allene
  координаты из двумерного массива slayer48 4 1,672 08-01-2015, 05:58 PM
Последний пост: KID

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)