Сообщений: 300
Тем: 92
Зарегистрирован: Oct 2010
Репутация:
-132
сборка 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
А дальше утопия, по непонятным причинам экспа тупо не спадает, не могу вообще понять в чем может быть косяк. Помогите
Сообщений: 92
Тем: 3
Зарегистрирован: Jul 2011
Репутация:
194
наверное, имело бы смысл посмотреть метод doDie в L2PcInstance или как там оно у фрозенов называется...
Сообщений: 74
Тем: 23
Зарегистрирован: Jul 2012
Репутация:
-28
спасибо, посмотрел, сравнил со чистым - все так же, я его даже и не пытался трогать.(
не пойму в чем причина..=(
clan: Soprano :redlol:
Сообщений: 5,862
Тем: 105
Зарегистрирован: Sep 2010
Репутация:
13,014
Сообщений: 106
Тем: 11
Зарегистрирован: Oct 2011
Репутация:
55
На некоторых сборках в конфиге есть какой-то параметр, может отключение опыта, из-за него такая фича вроде.
Сообщений: 92
Тем: 3
Зарегистрирован: Jul 2011
Репутация:
194
08-15-2012, 10:40 PM
(Сообщение последний раз редактировалось: 08-15-2012, 10:46 PM Gubble.)
Ну вообще, учитывая, что потери экспы при смерти обрабатываются именно в этом методе (L2PcInstance::doDie()), имеет смысл посмотреть вообще всё, что внутри него вызывается. В одном из таких вызовов и зарыт вампир, скорее всего. В том числе и вариант с конфигом тоже...
Добавлено через 5 минут
Да, желательно указать версию сборки, и сбросить сюда весь файлик L2PcInstance.java. Потому что есть у меня подозрение, что "отъем" экспы может быть вообще нереализован.
Сообщений: 118
Тем: 4
Зарегистрирован: Jun 2011
Репутация:
469
А в конфиге макс левел выставляться не должен?
Сообщений: 300
Тем: 92
Зарегистрирован: Oct 2010
Репутация:
-132
Цитата:С чистым чаром пробовал?
пробовал, результат тот же(
Цитата:На некоторых сборках в конфиге есть какой-то параметр, может отключение опыта, из-за него такая фича вроде.
вроде бы тут нету, да и дело в том что я не трогал конфигов.
Цитата:А в конфиге макс левел выставляться не должен?
нет
Цитата:Да, желательно указать версию сборки, и сбросить сюда весь файлик 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;
}
Сообщений: 92
Тем: 3
Зарегистрирован: Jul 2011
Репутация:
194
Код: 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*
У вас же закомментирован метод, отъедающий экспу... Уж не знаю, как оно "работало", да и вообще могло работать до ваших изменений, если это - не ваших рук дело
|