Перейти к содержанию
Авторизация  
zaq1993

Неправильные координаты респа персонажа

Рекомендуемые сообщения

Привет Форум! Очень рассчитываю на вашу помощь, потому что сам уже неделю бьюсь над этой проблемой -(
Постараюсь подробно описать все тонкости и закономерности которые обнаружил пока пытался что то исправить.

Суть проблемы в том, что новый персонаж создается в координатах (0,0,0), а так же после выхода из игры ( без рестарта сервера ) персонаж снова попадает в координаты (0,0,0) вне зависимости от того, где он был до выхода. 

 

Таблица char_templates настроена корректно (рисунок ниже)
hl5cUG3pp6A.jpg

Последнее место расположения персонажа ( координаты ) из таблица characters тоже сохраняются правильно. 

В конфигах так же нету никакого места случайного респа с координатами (0,0,0)

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

Спасайте - не знаю, что делать!

Изменено пользователем zaq1993

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какая жуть как я не люблю фантомные проблемы...

 

Ну понятно что кажись дело в ядре.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какая жуть как я не люблю фантомные проблемы...

 

Ну понятно что кажись дело в ядре.

А где примерно в ядре - может быть ошибка! Там файлов миллион, пробовал править - все без толку. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

возможно сборка пвсофт или ей подобное.... там если не ошибаюсь для каждой рассы отдельно указывается место появления... так вот ...возможно просто у тебя не правильно заданны конфиги!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

открой файл в папке data pc_seting или как то так. и проверь правильность выставления координатов! ....не получиться выдерни с обычной сборки и вставь в свою и заново настрой ...сам где то допустил ошибку.... 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

открой файл в папке data pc_seting или как то так. и проверь правильность выставления координатов! ....не получиться выдерни с обычной сборки и вставь в свою и заново настрой ...сам где то допустил ошибку.... 

Спасибо за попытки помочь, но вы наверное не целиком прочитали описание моей проблемы! Конфиги все в порядке и респ некоторых рас работает - соответственно координаты берутся из таблицы char_templates. Если хуму магу изменить координаты в char_templates, то он появиться в другом месте. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проследил по логам за ошибкой!
Есть у кого мысли как это исправить и что от меня хочет лог
Если загрузить хума мага - ошибки нет. Гружу любого другого - ошибка
5Izy2wkwkKg.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

//del

Изменено пользователем Elione

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

но персонаж создается без стартовых итемов! да и если создать человека мага - который правильно респается, у него тоже нету никаких итемов стартовых 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да понятно, то неверно было. Я удалил пост. содержимое таблицы постом кинь, и пакет чаркреате

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
// 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;


}

Содержимое какой таблицы? Не совсем понял -(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...