Рейтинг темы:
  • 1 Голос(ов) - 1 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
не уменьшается EXP при смерти
#1
сборка l2jfrozen INterlude.
проблема такая: когда чар умирает от кого- или чего либо - экспа не спадает ни на сотую долю процента.
безусловно сразу же перекопал все конфиги на предмет делевела, единственный параметр:

# If XP loss (and deleveling) is enabled, default is 'true'
Delevel = true

выставлен в тру, собсна все должно быть нормально.

Перед этим поправил таблицы опыта, в которых выставил макс лвл 78, а не 80.

Вот фаил Expirience.java

Код:
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* http://www.gnu.org/copyleft/gpl.html
*/

package com.l2jfrozen.gameserver.model.base;

import javolution.util.FastMap;

public class Experience
{
    private static FastMap<Integer, Long> experience = new FastMap<Integer, Long>();
    
    public static void setExp(int level, long expr)
    {
        experience.put(level, expr);
        MAX_LEVEL = experience.size() - 1;
    }
    
    public static long getExp(int level)
    {
        return experience.get(level);
    }
    
    /**
     * This is the first UNREACHABLE level.<BR>
     * ex: If you want a max at 80 & 99.99%, you have to put 81.<BR>
     * <BR>
     */
    
    public static int MAX_LEVEL;
    //Default:
    //public static int MAX_LEVEL;
    
    public final static byte MAX_SUBCLASS_LEVEL = 79;
    
    public final static byte MIN_NEWBIE_LEVEL = 6;
    public final static byte MAX_NEWBIE_LEVEL = 39;
}

В нем не делал никаких изменений.
для экспы используется таблица ExtTable.sts, в которой я и закоментил лвл 80 и 81:

Код:
// level 0 (unreachable)
-1
0
68
363
1168
2884
6038
11287
19423
31378
//level 10
48229
71201
101676
141192
191452
254327
331864
426284
539995
675590
//level 20
835854
1023775
1242536
1495531
1786365
2118860
2497059
2925229
3407873
3949727
//level 30
4555766
5231213
5981539
6812472
7729999
8740372
9850111
11066012
12395149
13844879
//level 40
15422851
17137002
18995573
21007103
23180442
25524751
28049509
30764519
33679907
36806133
//level 50
40153995
45524865
51262204
57383682
63907585
70852742
80700339
91162131
102265326
114038008
//level 60
126509030
146307211
167243291
189363788
212716741
237351413
271973532
308441375
346825235
387197529
//level 70
429632402
474205751
532692055
606319094
696376867
804219972
931275828
1151275834
//level 78
1511275834
//level 79
2099275834
//level 80
//4200000000
//level 81
//6300000000

А дальше утопия, по непонятным причинам экспа тупо не спадает, не могу вообще понять в чем может быть косяк. ПомогитеSad
[Изображение: ck.gif]
Ответ
#2
наверное, имело бы смысл посмотреть метод doDie в L2PcInstance или как там оно у фрозенов называется... Smile
Ответ
#3
спасибо, посмотрел, сравнил со чистым - все так же, я его даже и не пытался трогать.(
не пойму в чем причина..=(
clan: Soprano :redlol:
Ответ
#4
С чистым чаром пробовал?
Ответ
#5
На некоторых сборках в конфиге есть какой-то параметр, может отключение опыта, из-за него такая фича вроде.
Ответ
#6
Ну вообще, учитывая, что потери экспы при смерти обрабатываются именно в этом методе (L2PcInstance::doDie()), имеет смысл посмотреть вообще всё, что внутри него вызывается. В одном из таких вызовов и зарыт вампир, скорее всего. В том числе и вариант с конфигом тоже...

Добавлено через 5 минут
Да, желательно указать версию сборки, и сбросить сюда весь файлик L2PcInstance.java. Потому что есть у меня подозрение, что "отъем" экспы может быть вообще нереализован.
Ответ
#7
А в конфиге макс левел выставляться не должен?
Ответ
#8
Цитата:С чистым чаром пробовал?
пробовал, результат тот же(

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

Цитата:А в конфиге макс левел выставляться не должен?
нет

Цитата:Да, желательно указать версию сборки, и сбросить сюда весь файлик L2PcInstance.java. Потому что есть у меня подозрение, что "отъем" экспы может быть вообще нереализован.
реализован, и все было нормально до того момента как я попытался уменьшить макс левел до78. именно по этому мне кажется что косяк где-то в тех местах. даже представить сложно, что на это повлияло.

вот сам DoDie:

Код:
    @Override
    public boolean doDie(L2Character killer)
    {
        if(Config.TW_RESS_ON_DIE)
        {
            int x1,y1,z1;
            x1 = getX();
            y1 = getY();
            z1 = getZ();
            L2TownZone Town;
            Town = TownManager.getInstance().getTown(x1,y1,z1);
            if(Town != null && isinTownWar())
            {
                if(Town.getTownId() == Config.TW_TOWN_ID && !Config.TW_ALL_TOWNS)
                {
                    reviveRequest(this, null, false);
                }
                else if(Config.TW_ALL_TOWNS)
                {
                    reviveRequest(this, null, false);
                }
            }
        }
        // Kill the L2PcInstance
        if(!super.doDie(killer))
            return false;

        Castle castle = null;
        if(getClan() != null)
        {
            castle = CastleManager.getInstance().getCastleByOwner(getClan());
            if(castle != null)
            {
                castle.destroyClanGate();
                castle = null;
            }
        }
        
        if(killer != null)
        {
            L2PcInstance pk = null;

            if(killer instanceof L2PcInstance)
            {
                pk = (L2PcInstance) killer;
                
                /**
                 * Vendetta Event
                 */
                
                boolean ok = true;
                
                if (Config.VENDETTA_ENABLE)
                {
                    synchronized (L2KillerInstance._orderPlayer)
                    {
                    for (String nm : L2KillerInstance._orderPlayer)
                    {
                        if (getName().equals(nm))
                        {
                        if (L2KillerInstance.getPlayerOrder(pk.getName(), getName()))
                        {
                            if (Config.VENDETTA_EXECUTE_PVP)
                            ok = ((getPvpFlag() != 0) || (getKarma() > 0));
                            
                            if (ok)
                            {
                            int reward = L2KillerInstance.getReward(getName());
                            String str = pk.getName() + " completed an order for " + getName();
                            Announcements.getInstance().announceToAll(str);
                            
                            if (Config.VENDETTA_LOGGING_ENABLE)
                                L2KillerInstance.RecordLog(str);
                            
                            pk.getInventory().addItem("", Config.VENDETTA_ITEM_ID, reward, pk, null);
                            pk.sendMessage("You got " + reward + " " + Config.VENDETTA_ITEM_NAME);
                            L2KillerInstance.orderDelete(getName());
                            L2KillerInstance.updateOrderPlayer();
                            }
                        }
                        }
                    }
                    if (Config.VENDETTA_REVENGE_ENABLE)
                    {
                        if (L2KillerInstance.isRevenge(getName(), pk.getName()))
                        {
                        String str = pk.getName() + " punish his client: " + getName();
                        Announcements.getInstance().announceToAll(str);
                        
                        if (Config.VENDETTA_LOGGING_ENABLE)
                            L2KillerInstance.RecordLog(str);
                        
                        if (Config.VENDETTA_REVENGE_PERCENT != 0)
                        {
                            int price = L2KillerInstance.getReward(pk.getName()) / 100 * Config.VENDETTA_REVENGE_PERCENT;
                            getInventory().addItem("", Config.VENDETTA_ITEM_ID, price, pk, null);
                            sendMessage("Returned to you " + Config.VENDETTA_REVENGE_PERCENT + "% price from your order. Order canceled.");
                        }
                        
                        L2KillerInstance.orderDelete(pk.getName());
                        L2KillerInstance.updateOrderPlayer();
                        }
                    }
                    }
                }
                
                if(Config.ENABLE_PK_INFO)
                {
                    doPkInfo(pk);
                }
            }

            if(atEvent && pk != null)
            {
                pk.kills.add(getName());
            }

            if((killer instanceof L2PcInstance && ((L2PcInstance) killer)._inEventTvT) && _inEventTvT)
            {
                if(TvT.is_teleport() || TvT.is_started())
                {
                    if(!(((L2PcInstance) killer)._teamNameTvT.equals(_teamNameTvT)))
                    {
                        PlaySound ps;
                        ps = new PlaySound(0, "ItemSound.quest_itemget", 1, getObjectId(), getX(), getY(), getZ());
                        _countTvTdies++;
                        ((L2PcInstance) killer)._countTvTkills++;
                        ((L2PcInstance)killer).setTitle("Kills: " + ((L2PcInstance)killer)._countTvTkills);
                        ((L2PcInstance) killer).sendPacket(ps);
                        ((L2PcInstance)killer).broadcastUserInfo();
                        TvT.setTeamKillsCount(((L2PcInstance) killer)._teamNameTvT, TvT.teamKillsCount(((L2PcInstance) killer)._teamNameTvT) + 1);
                        ((L2PcInstance)killer).broadcastUserInfo();
                    }
                    else
                    {
                        ((L2PcInstance) killer).sendMessage("You are a teamkiller! Teamkills not counting.");
                    }
                    sendMessage("You will be revived and teleported to team spot in " + Config.TVT_REVIVE_DELAY / 1000 + " seconds!");;
                    ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
                    {
                        public void run()
                        {
                            teleToLocation(TvT._teamsX.get(TvT._teams.indexOf(_teamNameTvT)) + Rnd.get(201) - 100, TvT._teamsY.get(TvT._teams.indexOf(_teamNameTvT)) + Rnd.get(201) - 100, TvT._teamsZ.get(TvT._teams.indexOf(_teamNameTvT)),
                                    false);
                            doRevive();
                        }
                    }, Config.TVT_REVIVE_DELAY);
                }
            }
            else if (_inEventTvT)
            {
                if (TvT.is_teleport() || TvT.is_started())
                {
                    sendMessage("You will be revived and teleported to team spot in " + Config.TVT_REVIVE_DELAY / 1000 + " seconds!");
                    ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
                    {
                        public void run()
                        {
                            teleToLocation(TvT._teamsX.get(TvT._teams.indexOf(_teamNameTvT)), TvT._teamsY.get(TvT._teams.indexOf(_teamNameTvT)), TvT._teamsZ.get(TvT._teams.indexOf(_teamNameTvT)), false);
                            doRevive();
                            broadcastPacket(new SocialAction(getObjectId(), 15));
                        }
                    }, Config.TVT_REVIVE_DELAY);
                }
            }
            else if(_inEventCTF)
            {
                if(CTF.is_teleport() || CTF.is_started())
                {
                    sendMessage("You will be revived and teleported to team flag in 20 seconds!");
                    if(_haveFlagCTF)
                    removeCTFFlagOnDie();
                    ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
                    {
                        public void run()
                        {
                            teleToLocation(CTF._teamsX.get(CTF._teams.indexOf(_teamNameCTF)), CTF._teamsY.get(CTF._teams.indexOf(_teamNameCTF)), CTF._teamsZ.get(CTF._teams.indexOf(_teamNameCTF)), false);
                            doRevive();
                        }
                    }, 20000);
                }
            }
            else if((killer instanceof L2PcInstance && ((L2PcInstance)killer)._inEventDM) && _inEventDM)
            {
                if(DM.is_teleport() || DM.is_started())
                {
                    ((L2PcInstance)killer)._countDMkills++;
                    PlaySound ps;
                    ps = new PlaySound(0, "ItemSound.quest_itemget", 1, getObjectId(), getX(), getY(), getZ());
                    ((L2PcInstance)killer).setTitle("Kills: " + ((L2PcInstance)killer)._countDMkills);
                    ((L2PcInstance) killer).sendPacket(ps);
                    ((L2PcInstance)killer).broadcastUserInfo();
                    
                    if (Config.DM_ENABLE_KILL_REWARD){
                        
                        L2Item reward = ItemTable.getInstance().getTemplate(Config.DM_KILL_REWARD_ID);
                        
                        ((L2PcInstance)killer).getInventory().addItem("DM Kill Reward", Config.DM_KILL_REWARD_ID, Config.DM_KILL_REWARD_AMOUNT, this, null);
                        ((L2PcInstance)killer).sendMessage("You have earned " + Config.DM_KILL_REWARD_AMOUNT + " item(s) of ID " + reward.getName() + ".");
                        reward = null;
                    }
                    
                    sendMessage("You will be revived and teleported to spot in 20 seconds!");
                    ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
                    {
                        public void run()
                        {
                            Location p_loc = DM.get_playersSpawnLocation();
                            teleToLocation(p_loc._x, p_loc._y, p_loc._z, false);
                            doRevive();
                        }
                    }, Config.DM_REVIVE_DELAY);
                }
            }
            else if(_inEventDM)
            {
                if(DM.is_teleport() || DM.is_started())
                {
                    sendMessage("You will be revived and teleported to spot in 20 seconds!");
                    ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
                    {
                        public void run()
                        {
                            Location players_loc = DM.get_playersSpawnLocation();
                            teleToLocation(players_loc._x, players_loc._y, players_loc._z, false);
                            doRevive();
                        }
                    }, 20000);
                }
            }
            
            if(killer instanceof L2PcInstance)
            {
                if(_inEventVIP)
                {
                        if(VIP._started)
                        {
                            if(_isTheVIP && ((L2PcInstance)killer)._inEventVIP)
                            {
                                VIP.vipDied();
                            }
                            else if(_isTheVIP && !((L2PcInstance)killer)._inEventVIP)
                            {
                                Announcements.getInstance().announceToAll("VIP Killed by non-event character. VIP going back to initial spawn.");
                                doRevive();
                                teleToLocation(VIP._startX, VIP._startY, VIP._startZ);
                            }
                            else
                            {
                                sendMessage("You will be revived and teleported to team spot in 20 seconds!");
                                ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
                                {
                                    public void run()
                                    {
                                        doRevive();
                                        if(_isVIP)
                                            teleToLocation(VIP._startX, VIP._startY, VIP._startZ);
                                        else
                                            teleToLocation(VIP._endX, VIP._endY, VIP._endZ);
                                    }
                                }, 20000);
                            }
                        }
                    }
                    broadcastUserInfo();
                }

            // Clear resurrect xp calculation
            setExpBeforeDeath(0);
            
            if(isCursedWeaponEquiped())
            {
                CursedWeaponsManager.getInstance().drop(_cursedWeaponEquipedId, killer);
            }
            else
            {
                if(pk == null || !pk.isCursedWeaponEquiped())
                {
                    //if (getKarma() > 0)
                    onDieDropItem(killer); // Check if any item should be dropped

                    if(!(isInsideZone(ZONE_PVP) && !isInsideZone(ZONE_SIEGE)))
                    {
                        boolean isKillerPc = killer instanceof L2PcInstance;
                        if(isKillerPc && ((L2PcInstance) killer).getClan() != null && getClan() != null && !isAcademyMember() && !((L2PcInstance) killer).isAcademyMember() && _clan.isAtWarWith(((L2PcInstance) killer).getClanId()) && ((L2PcInstance) killer).getClan().isAtWarWith(_clan.getClanId()))
                        {
                            if(getClan().getReputationScore() > 0)
                            {
                                ((L2PcInstance) killer).getClan().setReputationScore(((L2PcInstance) killer).getClan().getReputationScore() + 2, true);
                            }
                            if(((L2PcInstance) killer).getClan().getReputationScore() > 0)
                            {
                                _clan.setReputationScore(_clan.getReputationScore() - 2, true);
                            }
                        }
                        if(Config.ALT_GAME_DELEVEL)
                        {
                            // Reduce the Experience of the L2PcInstance in function of the calculated Death Penalty
                            // NOTE: deathPenalty +- Exp will update karma
                            if(getSkillLevel(L2Skill.SKILL_LUCKY) < 0 || getStat().getLevel() > 9)
                            {
                                //deathPenalty((pk != null && getClan() != null && pk.getClan() != null && pk.getClan().isAtWarWith(getClanId())));
                            }
                        }
                        else
                        {
                            onDieUpdateKarma(); // Update karma if delevel is not allowed
                        }
                    }
                }
            }
            pk = null;
        }

        setPvpFlag(0); // Clear the pvp flag

        // Unsummon Cubics
        if(_cubics.size() > 0)
        {
            for(L2CubicInstance cubic : _cubics.values())
            {
                cubic.stopAction();
                cubic.cancelDisappear();
            }
            _cubics.clear();
        }

        if(_forceBuff != null)
        {
            abortCast();
        }

        for(L2Character character : getKnownList().getKnownCharacters())
            if(character.getTarget() == this) {
                if(character.isCastingNow())
                    character.abortCast();
            }

        if(isInParty() && getParty().isInDimensionalRift())
        {
            getParty().getDimensionalRift().getDeadMemberList().add(this);
        }

        // calculate death penalty buff
        calculateDeathPenaltyBuffLevel(killer);

        stopRentPet();
        stopWaterTask();
        quakeSystem = 0;
        
        //leave war legend aura if enabled
        heroConsecutiveKillCount=0;
        if(Config.WAR_LEGEND_AURA && !_hero && isPVPHero){
            setHeroAura(false);
            this.sendMessage("You leaved War Legend State");
        }
        return true;
    }
[Изображение: ck.gif]
Ответ
#9
Код:
    if(Config.ALT_GAME_DELEVEL)
                        {
                            // Reduce the Experience of the L2PcInstance in function of the calculated Death Penalty
                            // NOTE: deathPenalty +- Exp will update karma
                            if(getSkillLevel(L2Skill.SKILL_LUCKY) < 0 || getStat().getLevel() > 9)
                            {
                                //deathPenalty((pk != null && getClan() != null && pk.getClan() != null && pk.getClan().isAtWarWith(getClanId())));
                            }
                        }

*facepalm.png*

У вас же закомментирован метод, отъедающий экспу... Уж не знаю, как оно "работало", да и вообще могло работать до ваших изменений, если это - не ваших рук дело Smile
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Не пропадает опыт после смерти игрока Magican 1 1,325 04-07-2020, 06:41 PM
Последний пост: Magican
  Потеря после смерти [Shoot] 20 4,395 05-10-2015, 02:02 AM
Последний пост: Donatte
  Возрождение после смерти Map 12 4,240 06-16-2013, 11:32 AM
Последний пост: L2scripts-Guard
  сахранение бафа после смерти 1megalord1 4 2,420 02-02-2013, 10:50 PM
Последний пост: Zubastic
  [Help] Точка респа после смерти Файна 3 2,501 09-04-2012, 09:42 AM
Последний пост: Ashe
  Баф после смерти Klinz 3 2,474 06-19-2012, 06:30 PM
Последний пост: Klinz
  Возврат не в тот город после смерти. ruslanback 7 2,315 11-30-2011, 08:47 PM
Последний пост: Effas
  Чар невоскрешается после смерти в монастыре Appleseed 0 1,328 03-31-2011, 06:36 AM
Последний пост: Appleseed
  бафф после смерти ATOM 6 3,323 07-13-2008, 03:06 PM
Последний пост: PROGRAMMATOR

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


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