Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Запись фракции
#1
Подскажите пожалуйста, куда идет запись фракции и как она записывается в виде букв или цифр? :Olen':
вот код:
[SRC="java"]package l2r.gameserver.gve.model.instances;

import l2r.gameserver.ai.CtrlIntention;
import l2r.gameserver.gve.GveConfig;
import l2r.gameserver.gve.managers.FactionManager;
import l2r.gameserver.model.Player;
import l2r.gameserver.model.base.Experience;
import l2r.gameserver.model.instances.NpcInstance;
import l2r.gameserver.network.serverpackets.NpcHtmlMessage;
import l2r.gameserver.network.serverpackets.components.CustomMessage;
import l2r.gameserver.templates.npc.NpcTemplate;

/**
* @date 29.02.12
* @time 16:37
*/
public class FactionManagerInstance extends NpcInstance
{
public FactionManagerInstance(int objectId, NpcTemplate template)
{
super(objectId, template);
}

private enum Cmd
{
faction_select_good,
faction_select_evil
}

@Override
public void onBypassFeedback(Player player, String command)
{
if (!isInRange(player, INTERACTION_DISTANCE))
{
player.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, this);
player.sendActionFailed();
return;
}

try
{
Cmd cmd = Cmd.valueOf(command);

switch (cmd)
{
case faction_select_evil:
case faction_select_good:

if (player.getFaction() == FactionManager.Faction.ADMIN)
{
if (cmd == Cmd.faction_select_evil)
{
FactionManager.Faction.EVIL.sendHome(player);
}
else
{
FactionManager.Faction.GOOD.sendHome(player);
}

return;
}

// если фракция не является не установленной
if (player.getFaction() != FactionManager.Faction.UNSET)
{
if (player.getAdena() < GveConfig.GveFactionChangePrice)
{
player.sendMessage(new CustomMessage("l2r.gve.fractionmanger.lowadena", player).addNumber(GveConfig.GveFactionChangePrice));
return;
}

if (player.getClan() != null)
{
player.sendMessage(new CustomMessage("l2r.gve.fractionmanger.isinclan", player));
return;
}

if (player.getParty() != null)
{
player.getParty().removePartyMember(player, false);
}

player.reduceAdena(GveConfig.GveFactionChangePrice, true);
}
else
{
// устанавливаем лвл тут, чтобы наверняка избежать эксплойта незареганных чаров.
player.addExpAndSp(Experience.LEVEL[GveConfig.GvePlayerLevel], 0);
}

FactionManager.getInstance().setFaction(player, cmd == Cmd.faction_select_good ? FactionManager.Faction.GOOD : FactionManager.Faction.EVIL);
break;
}
} catch (IllegalArgumentException iae)
{
}
}

@Override
public void showChatWindow(Player player, int val, Object... replace)
{
player.sendPacket(new NpcHtmlMessage(player, this, "faction/manager.htm", val));
}
}
[/SRC]
[SRC="java"]package l2r.gameserver.gve.managers;

import l2r.commons.util.Rnd;
import l2r.gameserver.gve.GveConfig;
import l2r.gameserver.model.Player;
import l2r.gameserver.utils.Location;

public class FactionManager
{
public static final int ITEM_COIN_LV1 = 20977;

private static FactionManager _instance;

public static FactionManager getInstance()
{
return _instance == null ? (_instance = new FactionManager()) : _instance;
}

private FactionManager()
{
}

public void setFaction(Player player, Faction faction)
{
player.setFaction(faction);
player.getFaction().sendHome(player);
player.setTitle(faction == Faction.GOOD ? "Light" : "Dark");
}

public static enum Faction
{
GOOD("Light", GveConfig.GveBaseLight),
EVIL("Dark", GveConfig.GveBaseDarkk),
UNSET("", GveConfig.GveBaseUnset),
ADMIN("[GM]", GveConfig.GveBaseUnset);

private Location[] spawns;
private String name;

Faction(String n, Location... loc)
{
spawns = loc;
name = n;
}

public static Faction getFactionByOrdinal(int i)
{
return values()[i];
}

public Location getLocation()
{
return Location.findAroundPosition(spawns[Rnd.get(spawns.length)], 200, 0);
}

public String getName()
{
return name;
}

public void sendHome(Player player)
{
if (player.getFaction() != this && player.getFaction() != ADMIN)
{
return;
}

player.teleToLocation(getLocation());
}
}

public static enum Rank
{
// название, нужно_очков, потеря_при_смерти, награда_за_убийство, надбавка_к_цене_чара, колво_мест
leader("Военачальник", 360800, 3900, 3806, 15, 1),
commander("Командующий", 321600, 3629, 3171, 10, 3),
general("Генерал", 282700, 2687, 2643, 8, 10),
officer5("Офицер 5-ранга", 244100, 1991, 2203, 5, 30),
officer4("Офицер 4-ранга", 205850, 1475, 1836, 4, 50),
officer3("Офицер 3-ранга", 172250, 1092, 1530, 4, 70),
officer2("Офицер 2-ранга", 139350, 808, 1275, 3, 90),
officer1("Офицер 1-ранга", 107050, 598, 1062, 3, 110),
soldier1("Воин 1-ранга", 75400, 443, 885, 2, -1),
soldier2("Воин 2-ранга", 52800, 281, 632, 2, -1),
soldier3("Воин 3-ранга", 34850, 178, 452, 2, -1),
soldier4("Воин 4-ранга", 21390, 113, 323, 1, -1),
soldier5("Воин 5-ранга", 11750, 72, 231, 1, -1),
soldier6("Воин 6-ранга", 5495, 46, 165, 1, -1),
soldier7("Воин 7-ранга", 2110, 29, 118, 0, -1),
soldier8("Воин 8-ранга", 700, 19, 84, 0, -1),
soldier9("Воин 9-ранга", 0, 12, 60, 0, -1);

public final String _name;
public final int needPoints;
public final int adenaInc, maxCount;
public final int _pointsLoss, _pointsGain;

Rank(String name, int minPoints, int pointsLoss, int pointsGain, int aInc, int mCount)
{
_name = name;
needPoints = minPoints;
adenaInc = aInc;
maxCount = mCount;
_pointsLoss = pointsLoss;
_pointsGain = pointsGain;
}

public static Rank getRankForPlayer(Player player)
{
int factionRatingRank = player.getVarInt("fSpecialRank", -1);

if(factionRatingRank >= 0)
{
return values()[factionRatingRank];
}

for(Rank r : Rank.values())
{
if(player.getFamePoints() >= r.needPoints && r.maxCount < 0)
return r;
}

return soldier9;
}
}
}
[/SRC]
И еще, в чем ошибка, если выбираешь одним персонажем любую фракцию, а потом создаешь нового чара(хоть сколько), они все сразу же без выбора будут за выбранную фракцию?
Ответ
#2
данном коде нет записи фракций в БД, тут есть присвоение фракции объекту которая определена с помощью Enum Faction.

Думаю что она сохраняется в Player.java
Ответ
#3
Благодарю, а что на счет второй проблемы?
Ответ
#4
L2J Написал:Благодарю, а что на счет второй проблемы?

Привязка фракции к аккаунту, а не к персонажу.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
#5
Pointer*Rage Написал:Привязка фракции к аккаунту, а не к персонажу.

Возможно:Olen':
Попозже, протестирую, отпишусь:Olen':
Ответ
#6
или как вариант данные о фракции хранятся в static переменной
Ответ
#7
Gaikotsu Написал:или как вариант данные о фракции хранятся в static переменной

Даже, если бы был статик, то персонажи массово не могли бы выбрать себе фракцию, т.к. все это хранится в Player-модели. Грубо говоря, кто первый успел - у того и тапки.
Вопрос в том - какой идиот додумался сделать привязку фракций к аккаунту... Тем более, доступ к аккаунт данным, это четко разграниченная привилегия логин-сервера. Да уж. В l2j видимо и не такое увидеть можно. Я стал забывать, что такой ужас вообще существует, сколько лет, то уже прошло без этих ваших l2j-еев Big Grin
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
#8
Pointer*Rage Написал:Даже, если бы был статик, то персонажи массово не могли бы выбрать себе фракцию, т.к. все это хранится в Player-модели. Грубо говоря, кто первый успел - у того и тапки.
Вопрос в том - какой идиот додумался сделать привязку фракций к аккаунту... Тем более, доступ к аккаунт данным, это четко разграниченная привилегия логин-сервера. Да уж. В l2j видимо и не такое увидеть можно. Я стал забывать, что такой ужас вообще существует, сколько лет, то уже прошло без этих ваших l2j-еев Big Grin

Смотрим на импорты:
l2r...
Ответ
#9
Моветон Написал:Смотрим на импорты:
l2r...

И что я должен в них увидеть? Святого духа?
Странные юзеры зоны, такие странные.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
#10
Привязка не по аккаунту, создал новый аккаунт, создал опять чара, и он опять за ту же сторону.
:confused:
Ответ


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


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