не запускается ГС
Я декомпилил ядро зборки la2base 1.1.6
и в результате ну ЛС не ГС не загружаются пишут ошыбка сразужы.
Вапрос: ЧТо я зделал неправильно ? отпишыте сюда или дайте свою асю
lkarderl: Я декомпилил ядро зборки la2base 1.1.6
и в результате ну ЛС не ГС не загружаются пишут ошыбка сразужы.
Вапрос: ЧТо я зделал неправильно ? отпишыте сюда или дайте свою асю
образно чтобы было понятно
Я разобрал кувалдой машину .. теперь она лежит на дороге запчастями и не ездит .. что я сделал неправильно ?
CKA3KA: образно чтобы было понятно
Я разобрал кувалдой машину .. теперь она лежит на дороге запчастями и не ездит .. что я сделал неправильно ?
ты её разбил)) ну а как ищо можно декомпилить?
ну или раскодировать изминить и обратно закодировать чтобы работало?
lkarderl: ты её разбил)) ну а как ищо можно декомпилить?
ну или раскодировать изминить и обратно закодировать чтобы работало?
никак ...
при де компилировании получается исходный код на 50-90% (% колеблется от метода компиляции с "защитой" от де компила или без) соответствующий даже не оригиналу а смыслу того что было написано и что компилятор потом вообще сможет понять остальные 50-10% компилятор просто тупо не поймет что за мусор написан ...
если тебе нужно изменить 1 файл и изменения не затрагивают остальные классы (ну не модифицируешь радикально функции которые используются в др классах к примеру) то это еще возможно но весьма хитрым способом ..
если больше то это большой гемор и убийство не меренного количества времени ...
так что ищи исходники с ними изменить без проблем
а как изминить 1 фаил,к примеру мне нужно изминить фаилл енчант итем, чтобы когда ломалось чтота при заточьке ано падало не на 0 а на 10.
ну и ты говориш нельзя декомпилировать чтобы ано работало,а как выкладуют исходные коды декомпилированые? и я вот декомпил и вроде всё есть.
lkarderl: ну и ты говориш нельзя декомпилировать чтобы ано работало,а как выкладуют исходные коды декомпилированые? и я вот декомпил и вроде всё есть.
Такого не бывает. Исходный код он на то и исходный, что первоначальный, недекомпилированный.
Как сказал СКАЗКА, с декомпилом ничего не получится.
Возможно, от SF подойдёт.
You can't feeling! No you can't feeling! And you can't feeling!
— People = Shit
lkarderl: а как изминить 1 фаил,к примеру мне нужно изминить фаилл енчант итем, чтобы когда ломалось чтота при заточьке ано падало не на 0 а на 10.
ну и ты говориш нельзя декомпилировать чтобы ано работало,а как выкладуют исходные коды декомпилированые? и я вот декомпил и вроде всё есть.
Возвращаемся к нашему образу с машиной
для того чтобы сделать вначале машину инженеры делают чертежи (в нашем случае исходный код сервера)
затем по чертежам собирают машину ( в нашем случае компилируют готовый сервер)
потом машину взрывают тротилом ( в нашем случае декомпил)
как и после взрыва много частей от машины останутся почти целыми и по ним можно понять как функционируют те или иные узлы , но собрать из этого барахла обратно машину практически невозможно .. если ты конечно не спец и нету фанатизма и желания потратить кучу времени на данный процесс ...
по поводу изменения 1го файла .. я могу рассказать процесс как его можно изменить и подменить в сборке но боюсь твоей квалификации не хватит чтобы понять процесс
lkarderl: у меня хватит, раскажы ))
Чтобы все это сделать нужно разбираться в языке программирования ява !!!
берем нужный класс декомпиленый в java
берем сборку к примеру СФ от той же lineage версии что у нас ( Gracia 2 , interlud или что там у нас)
сравниваем файлы .. если чрезвычайно повезет то они совпадут ( но это маловероятно) и совпадут имеется в виду по функционалу поскольку декомпилятор все равно скорее всего распишит функции немного по своему ..
берем тяжелый случай что у нас очень не совпадает наш декомпил и СФ..
скорее всего разница будет во первых в путях импорта библиотек
к примеру у декомпила имеется
import l2d.Config;
import l2d.game.cache.Msg;
import l2d.game.model.L2Clan;
import l2d.game.model.L2Player;
import l2d.game.model.Warehouse.WarehouseType;
import l2d.game.model.instances.L2ItemInstance.ItemClass;
import l2d.game.serverpackets.NpcHtmlMessage;
import l2d.game.serverpackets.SystemMessage;
import l2d.game.serverpackets.WareHouseDepositList;
import l2d.game.serverpackets.WareHouseWithdrawList;
import l2d.game.templates.L2NpcTemplate;
import l2d.util.Log;
а у СФ
import net.sf.l2j.gameserver.ai.CtrlIntention;
import net.sf.l2j.gameserver.datatables.MapRegionTable;
import net.sf.l2j.gameserver.model.L2World;
import net.sf.l2j.gameserver.model.actor.L2Npc;
import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
import net.sf.l2j.gameserver.network.serverpackets.MyTargetSelected;
import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
import net.sf.l2j.gameserver.network.serverpackets.NpcSay;
import net.sf.l2j.gameserver.network.serverpackets.ValidateLocation;
import net.sf.l2j.gameserver.templates.chars.L2NpcTemplate;
сразу видно что разница в путях состоит в
l2d.game.
и
net.sf.l2j.gameserver
остальное идентично
в эклипсе переименуем пути в СФ с net.sf.l2j.gameserver на l2d.game.
эклипс автоматически переукажет все импорты на новый путь во всем проекте
далее
если в теле декомпиленого класса есть вызовы таких функций (из других классов) которых нету в СФ
мы тупо их эмулируем .. тоесть идем в нужный класс пишем там функцию можно пустую главное чтобы она также называлась и принимала и возвращала те же данные ...
далее проверяем декомпилированый код на ошибки декомпила (тут уже нужно знание ява языка) но если повезет то ошибок практически не будет .. если класс не очень сложный то скорее всего там ошибок не будет или почти не будет ..
меняем то что нужно нам в полученном классе ..
затем компилируем весь проект СФ ...
полученный l2jserver.jad разархивируем winzipом и вытаскиваем наш (уже скомпилированный) класс
затем открываем архивом наш сервер и заменяем старый класс на новый только что полученный
вуаля работает измененный класс и делает то что нам нужно
lkarderl: а как изминить 1 фаил,к примеру мне нужно изминить фаилл енчант итем, чтобы когда ломалось чтота при заточьке ано падало не на 0 а на 10.
ну и ты говориш нельзя декомпилировать чтобы ано работало,а как выкладуют исходные коды декомпилированые? и я вот декомпил и вроде всё есть.
если тебе нужно только заточку изменить)))
скажи на сколько) я сделаю) дабы ты не извращал код
— Жадный...
я так понял что декомпилятор когда раскодирует то всё савподает кроме путей типо:
import l2d.Config;
import l2d.game.cache.Msg;
import l2d.game.model.L2Clan;
import l2d.game.model.L2Player;
import l2d.game.model.Warehouse.WarehouseType;
import l2d.game.model.instances.L2ItemInstance.ItemClass;
import l2d.game.serverpackets.NpcHtmlMessage;
import l2d.game.serverpackets.SystemMessage;
import l2d.game.serverpackets.WareHouseDepositList;
import l2d.game.serverpackets.WareHouseWithdrawList;
import l2d.game.templates.L2NpcTemplate;
import l2d.util.Log;
и всегда так остальное 100% будит везде совпадать?
вот я раскодировал фаил где нужно минять заточьку, в нём всё правильно?
import java.util.Map;
import java.util.logging.Logger;
import net.sf.l2j.Config;
import net.sf.l2j.gameserver.model.Inventory;
import net.sf.l2j.gameserver.model.L2Augmentation;
import net.sf.l2j.gameserver.model.L2ItemInstance;
import net.sf.l2j.gameserver.model.L2ItemInstance.ItemLocation;
import net.sf.l2j.gameserver.model.L2World;
import net.sf.l2j.gameserver.model.PcInventory;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.network.L2GameClient;
import net.sf.l2j.gameserver.network.SystemMessageId;
import net.sf.l2j.gameserver.serverpackets.EnchantResult;
import net.sf.l2j.gameserver.serverpackets.InventoryUpdate;
import net.sf.l2j.gameserver.serverpackets.ItemList;
import net.sf.l2j.gameserver.serverpackets.StatusUpdate;
import net.sf.l2j.gameserver.serverpackets.SystemMessage;
import net.sf.l2j.gameserver.templates.L2Item;
import net.sf.l2j.gameserver.templates.L2WeaponType;
import net.sf.l2j.gameserver.util.Util;
import net.sf.l2j.util.Rnd;
public final class RequestEnchantItem extends L2GameClientPacket
{
protected static final Logger _log = Logger.getLogger(Inventory.class.getName());
private static final String _C__58_REQUESTENCHANTITEM = "[C] 58 RequestEnchantItem";
private static final int[] CRYSTAL_SCROLLS = { 731, 732, 949, 950, 953, 954, 957, 958, 961, 962 };
private int _objectId;
protected void readImpl()
{
this._objectId = readD();
}
protected void runImpl()
{
L2PcInstance activeChar = ((L2GameClient)getClient()).getActiveChar();
if ((activeChar == null) || (this._objectId == 0)) return;
activeChar.cancelActiveTrade();
L2ItemInstance item = activeChar.getInventory().getItemByObjectId(this._objectId);
L2ItemInstance scroll = activeChar.getActiveEnchantItem();
activeChar.setActiveEnchantItem(null);
if ((item == null) || (scroll == null)) { return;
}
if ((item.getItem().getItemType() == L2WeaponType.ROD) || ((item.getItemId() >= 6611) && (item.getItemId() <= 6621)) || (item.isShadowItem()))
{
activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION));
return;
}
if (item.isWear())
{
Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " tried to enchant a weared Item", 2);
return;
}
int itemType2 = item.getItem().getType2();
boolean enchantItem = false;
boolean blessedScroll = false;
boolean blesseddScroll = false;
boolean crystallScroll = false;
int crystalId = 0;
switch (item.getItem().getCrystalType())
{
case 4:
crystalId = 1461;
switch (scroll.getItemId())
{
case 729:
case 731:
case 6569:
if (itemType2 == 0)
enchantItem = true; break;
case 730:
case 732:
case 6570:
if ((itemType2 == 1) || (itemType2 == 2))
enchantItem = true;
}
break;
case 3:
crystalId = 1460;
switch (scroll.getItemId())
{
case 947:
case 949:
case 6571:
if (itemType2 == 0)
enchantItem = true; break;
case 948:
case 950:
case 6572:
if ((itemType2 == 1) || (itemType2 == 2))
enchantItem = true;
}
break;
case 2:
crystalId = 1459;
switch (scroll.getItemId())
{
case 951:
case 953:
case 6573:
if (itemType2 == 0)
enchantItem = true; break;
case 952:
case 954:
case 6574:
if ((itemType2 == 1) || (itemType2 == 2))
enchantItem = true;
}
break;
case 1:
crystalId = 1458;
switch (scroll.getItemId())
{
case 955:
case 957:
case 6575:
if (itemType2 == 0)
enchantItem = true; break;
case 956:
case 958:
case 6576:
if ((itemType2 == 1) || (itemType2 == 2))
enchantItem = true;
}
break;
case 5:
crystalId = 1462;
switch (scroll.getItemId())
{
case 959:
case 961:
case 6577:
if (itemType2 == 0)
enchantItem = true; break;
case 960:
case 962:
case 6578:
if ((itemType2 == 1) || (itemType2 == 2))
enchantItem = true;
}
}
if (!(enchantItem))
{
activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION));
return;
}
if ((scroll.getItemId() >= 6569) && (scroll.getItemId() <= 6578))
{
blesseddScroll = true;
blessedScroll = true;
}
else {
int[] arr$ = CRYSTAL_SCROLLS; int len$ = arr$.length; for (int i$ = 0; i$ < len$; ++i$) { ??? = arr$[i$];
if (scroll.getItemId() == ???)
{
crystallScroll = true;
blessedScroll = true;
break; }
}
}
scroll = activeChar.getInventory().destroyItem("Enchant", scroll, activeChar, item);
if (scroll == null)
{
activeChar.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS));
Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " tried to enchant with a scroll he doesnt have", Config.DEFAULT_PUNISH);
return;
}
int chance = 0;
int maxEnchantLevel = 0;
if (item.getItem().getType2() == 0)
{
if ((item.getEnchantLevel() < 10) && (!(blesseddScroll)) && (!(crystallScroll))) { chance = Config.ENCHANT_CHANCE_WEAPON;
}
else if ((item.getEnchantLevel() < 16) && (item.getEnchantLevel() > 9) && (!(blesseddScroll)) && (!(crystallScroll))) { chance = Config.ENCHANT_CHANCE_WEAPON_1015;
}
else if ((item.getEnchantLevel() > 15) && (!(blesseddScroll)) && (!(crystallScroll))) { chance = Config.ENCHANT_CHANCE_WEAPON_16;
}
else if ((item.getEnchantLevel() < 10) && (blesseddScroll)) { chance = Config.BLESSED_CHANCE_WEAPON;
}
else if ((item.getEnchantLevel() < 16) && (item.getEnchantLevel() > 9) && (blesseddScroll)) { chance = Config.BLESSED_CHANCE_WEAPON_1015;
}
else if ((item.getEnchantLevel() > 15) && (blesseddScroll)) { chance = Config.BLESSED_CHANCE_WEAPON_16;
}
else if ((item.getEnchantLevel() < 10) && (crystallScroll)) { chance = Config.CRYSTAL_CHANCE_WEAPON;
}
else if ((item.getEnchantLevel() < 16) && (item.getEnchantLevel() > 9) && (crystallScroll)) { chance = Config.CRYSTAL_CHANCE_WEAPON_1015;
}
else if ((item.getEnchantLevel() > 15) && (crystallScroll)) chance = Config.CRYSTAL_CHANCE_WEAPON_16;
maxEnchantLevel = Config.ENCHANT_MAX_WEAPON;
if ((Config.ENABLE_MODIFY_ENCHANT_CHANCE_WEAPON) && (!(blesseddScroll)) && (!(crystallScroll)) &&
(Config.ENCHANT_CHANCE_LIST_WEAPON.containsKey(Integer.valueOf(item.getEnchantLe
vel()))))
{
chance = ((Integer)Config.ENCHANT_CHANCE_LIST_WEAPON.get(Integer.valueOf(item.getEnchantL
evel()))).intValue();
}
}
else if (item.getItem().getType2() == 1)
{
if ((item.getEnchantLevel() < 10) && (!(blesseddScroll)) && (!(crystallScroll))) { chance = Config.ENCHANT_CHANCE_ARMOR;
}
else if ((item.getEnchantLevel() < 16) && (item.getEnchantLevel() > 9) && (!(blesseddScroll)) && (!(crystallScroll))) { chance = Config.ENCHANT_CHANCE_ARMOR_1015;
}
else if ((item.getEnchantLevel() > 15) && (!(blesseddScroll)) && (!(crystallScroll))) { chance = Config.ENCHANT_CHANCE_ARMOR_16;
}
else if ((item.getEnchantLevel() < 10) && (blesseddScroll)) { chance = Config.BLESSED_CHANCE_ARMOR;
}
else if ((item.getEnchantLevel() < 16) && (item.getEnchantLevel() > 9) && (blesseddScroll)) { chance = Config.BLESSED_CHANCE_ARMOR_1015;
}
else if ((item.getEnchantLevel() > 15) && (blesseddScroll)) { chance = Config.BLESSED_CHANCE_ARMOR_16;
}
else if ((item.getEnchantLevel() < 10) && (crystallScroll)) { chance = Config.CRYSTAL_CHANCE_ARMOR;
}
else if ((item.getEnchantLevel() < 16) && (item.getEnchantLevel() > 9) && (crystallScroll)) { chance = Config.CRYSTAL_CHANCE_ARMOR_1015;
}
else if ((item.getEnchantLevel() > 15) && (crystallScroll)) chance = Config.CRYSTAL_CHANCE_ARMOR_16;
maxEnchantLevel = Config.ENCHANT_MAX_ARMOR;
if ((Config.ENABLE_MODIFY_ENCHANT_CHANCE_ARMOR) && (!(blesseddScroll)) && (!(crystallScroll)) &&
(Config.ENCHANT_CHANCE_LIST_ARMOR.containsKey(Integer.valueOf(item.getEnchantLev
el()))))
{
chance = ((Integer)Config.ENCHANT_CHANCE_LIST_ARMOR.get(Integer.valueOf(item.getEnchantLe
vel()))).intValue();
}
}
else if (item.getItem().getType2() == 2)
{
if ((item.getEnchantLevel() < 10) && (!(blesseddScroll)) && (!(crystallScroll))) { chance = Config.ENCHANT_CHANCE_JEWELRY;
}
else if ((item.getEnchantLevel() < 16) && (item.getEnchantLevel() > 9) && (!(blesseddScroll)) && (!(crystallScroll))) { chance = Config.ENCHANT_CHANCE_JEWELRY_1015;
}
else if ((item.getEnchantLevel() > 15) && (!(blesseddScroll)) && (!(crystallScroll))) { chance = Config.ENCHANT_CHANCE_JEWELRY_16;
}
else if ((item.getEnchantLevel() < 10) && (blesseddScroll)) { chance = Config.BLESSED_CHANCE_JEWELRY;
}
else if ((item.getEnchantLevel() < 16) && (item.getEnchantLevel() > 9) && (blesseddScroll)) { chance = Config.BLESSED_CHANCE_JEWELRY_1015;
}
else if ((item.getEnchantLevel() > 15) && (blesseddScroll)) { chance = Config.BLESSED_CHANCE_JEWELRY_16;
}
else if ((item.getEnchantLevel() < 10) && (crystallScroll)) { chance = Config.CRYSTAL_CHANCE_JEWELRY;
}
else if ((item.getEnchantLevel() < 16) && (item.getEnchantLevel() > 9) && (crystallScroll)) { chance = Config.CRYSTAL_CHANCE_JEWELRY_1015;
}
else if ((item.getEnchantLevel() > 15) && (crystallScroll)) chance = Config.CRYSTAL_CHANCE_JEWELRY_16;
maxEnchantLevel = Config.ENCHANT_MAX_JEWELRY;
if ((Config.ENABLE_MODIFY_ENCHANT_CHANCE_JEWELRY) && (!(blesseddScroll)) && (!(crystallScroll)) &&
(Config.ENCHANT_CHANCE_LIST_JEWELRY.containsKey(Integer.valueOf(item.getEnchantL
evel()))))
{
chance = ((Integer)Config.ENCHANT_CHANCE_LIST_JEWELRY.get(Integer.valueOf(item.getEnchant
Level()))).intValue();
}
}
if ((item.getEnchantLevel() < Config.ENCHANT_SAFE_MAX) || ((item.getItem().getBodyPart() == 32768) && (item.getEnchantLevel() < Config.ENCHANT_SAFE_MAX_FULL)))
{
chance = 100;
}
if (Rnd.get(100) < chance)
{
synchronized (item)
{
if ((item.getOwnerId() != activeChar.getObjectId()) || ((item.getEnchantLevel() >= maxEnchantLevel) && (maxEnchantLevel != 0)))
{
activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION));
monitorexit; return;
}
if ((item.getLocation() != L2ItemInstance.ItemLocation.INVENTORY) && (item.getLocation() != L2ItemInstance.ItemLocation.PAPERDOLL))
{
activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION));
monitorexit; return;
}
if (item.getEnchantLevel() == 0)
{
sm = new SystemMessage(SystemMessageId.S1_SUCCESSFULLY_ENCHANTED);
sm.addItemName(item.getItemId());
activeChar.sendPacket(sm);
}
else
{
sm = new SystemMessage(SystemMessageId.S1_S2_SUCCESSFULLY_ENCHANTED);
sm.addNumber(item.getEnchantLevel());
sm.addItemName(item.getItemId());
activeChar.sendPacket(sm);
}
item.setEnchantLevel(item.getEnchantLevel() + 1);
item.updateDatabase();
}
}
else
{
if (!(blessedScroll))
{
if (item.getEnchantLevel() > 0)
{
sm = new SystemMessage(SystemMessageId.ENCHANTMENT_FAILED_S1_S2_EVAPORATED);
sm.addNumber(item.getEnchantLevel());
sm.addItemName(item.getItemId());
activeChar.sendPacket(sm);
}
else
{
sm = new SystemMessage(SystemMessageId.ENCHANTMENT_FAILED_S1_EVAPORATED);
sm.addItemName(item.getItemId());
activeChar.sendPacket(sm);
}
}
else
{
sm = new SystemMessage(SystemMessageId.BLESSED_ENCHANT_FAILED);
activeChar.sendPacket(sm);
}
if (!(blessedScroll))
{
int i;
if (item.getEnchantLevel() > 0)
{
sm = new SystemMessage(SystemMessageId.EQUIPMENT_S1_S2_REMOVED);
sm.addNumber(item.getEnchantLevel());
sm.addItemName(item.getItemId());
activeChar.sendPacket(sm);
}
else
{
sm = new SystemMessage(SystemMessageId.S1_DISARMED);
sm.addItemName(item.getItemId());
activeChar.sendPacket(sm);
}
if (item.getAugmentation() != null)
item.getAugmentation().removeBoni(activeChar);
L2ItemInstance[] unequiped = activeChar.getInventory().unEquipItemInSlotAndRecord(item.getEquipSlot());
if (item.isEquipped())
{
InventoryUpdate iu = new InventoryUpdate();
for (int i = 0; i < unequiped.length; ++i)
{
iu.addModifiedItem(unequiped[i]);
}
activeChar.sendPacket(iu);
activeChar.broadcastUserInfo();
}
int i = item.getCrystalCount() - (item.getItem().getCrystalCount() + 1) / 2;
if (i < 1) i = 1;
L2ItemInstance destroyItem = activeChar.getInventory().destroyItem("Enchant", item, activeChar, null);
if (destroyItem == null) return;
L2ItemInstance crystals = activeChar.getInventory().addItem("Enchant", crystalId, i, activeChar, destroyItem);
sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S);
sm.addItemName(crystals.getItemId());
sm.addNumber(i);
activeChar.sendPacket(sm);
if (!(Config.FORCE_INVENTORY_UPDATE))
{
InventoryUpdate iu = new InventoryUpdate();
if (destroyItem.getCount() == 0) iu.addRemovedItem(destroyItem);
else iu.addModifiedItem(destroyItem);
iu.addItem(crystals);
activeChar.sendPacket(iu);
}
else activeChar.sendPacket(new ItemList(activeChar, true));
StatusUpdate su = new StatusUpdate(activeChar.getObjectId());
su.addAttribute(14, activeChar.getCurrentLoad());
activeChar.sendPacket(su);
activeChar.broadcastUserInfo();
L2World world = L2World.getInstance();
world.removeObject(destroyItem);
}
else
{
item.setEnchantLevel(0);
item.updateDatabase();
}
}
SystemMessage sm = null;
StatusUpdate su = new StatusUpdate(activeChar.getObjectId());
su.addAttribute(14, activeChar.getCurrentLoad());
activeChar.sendPacket(su);
su = null;
activeChar.sendPacket(new EnchantResult(item.getEnchantLevel()));
activeChar.sendPacket(new ItemList(activeChar, false));
activeChar.broadcastUserInfo();
}
public String getType()
{
return "[C] 58 RequestEnchantItem";
}
}
//SomeSay : Объемные тексты или части кода необходимо сворачивать в спойлер!
совершенно... НЕ верно...
декомпиль твой:
{
this._objectId = readD();
}
исходный код:
{
_objectId = readD();
}
— Жадный...
Автор читаем правила, ваши сообщения не возможно читать...Для написания сообщений на данном форуме пользуйтесь программами для проверки орфографии.(Например Word или плагины для браузера)
4.18. Создание сообщений, содержащих чрезмерное количество жаргонизмов, грамматических ошибок, транслитерированные сообщения. Установка режима «Только чтение» или Установка режима «Блокировка учетной записи» на срок от 1 до 10 суток.
Блокировка автора на 10 суток + 10%, т.к. вас неоднократно предупреждали.
— рас!11рас!1





