|
Серверная часть Обсуждения вопросов по установке и настройке эмулятора Aion-Emu, для совершенно новой и необыкновенно красивой игры - Aion. |
Опции темы |
11.01.2011, 10:26 | #1 |
Пользователь
|
Баг при осадах креп и артефактов
Сборка AE 276, сейчас её как основу взяли AC!
Возникла проблема =( при захвате крепы или артефакта, гварды своей расы агряться, бьються и при том не хило отвечают! В npc_temlates.xml по ID NPC с такими параметрами npc_type="NON_ATTACKABLE" rank="HERO" race="ELYOS" tribe="GUARD"...я тоже Элиец!Если смотреть в tribe_relations.xml то все ровно должно быть, но нет! Может кто-нибудь знает решение проблемы или направление в котором нудно искать решение проблемы. |
17.01.2011, 08:52 | #2 |
Пользователь
|
Re: Баг при осадах креп и артефактов
Код:
Index: main/java/com/aionemu/gameserver/controllers/MonsterController.java =================================================================== --- main/java/com/aionemu/gameserver/controllers/MonsterController.java (revision 267) +++ main/java/com/aionemu/gameserver/controllers/MonsterController.java (working copy) @@ -16,19 +16,8 @@ */ package com.aionemu.gameserver.controllers; -import com.aionemu.gameserver.model.alliance.PlayerAlliance; -import com.aionemu.gameserver.model.gameobjects.AionObject; import com.aionemu.gameserver.model.gameobjects.Monster; -import com.aionemu.gameserver.model.gameobjects.player.Player; -import com.aionemu.gameserver.model.group.PlayerGroup; -import com.aionemu.gameserver.questEngine.QuestEngine; -import com.aionemu.gameserver.questEngine.model.QuestEnv; -import com.aionemu.gameserver.services.AllianceService; import com.aionemu.gameserver.services.DropService; -import com.aionemu.gameserver.services.GroupService; -import com.aionemu.gameserver.utils.stats.StatFunctions; -import com.aionemu.gameserver.world.World; -import com.aionemu.gameserver.world.WorldType; /** * @author ATracer, Sarynth @@ -36,58 +25,6 @@ public class MonsterController extends NpcController { @Override - public void doReward() - { - AionObject winner = getOwner().getAggroList().getMostDamage(); - - if(winner == null) - return; - - // TODO: Split the EXP based on overall damage. - - if (winner instanceof PlayerAlliance) - { - AllianceService.getInstance().doReward((PlayerAlliance)winner, getOwner()); - } - else if (winner instanceof PlayerGroup) - { - GroupService.getInstance().doReward((PlayerGroup)winner, getOwner()); - } - else if (((Player)winner).isInGroup()) - { - GroupService.getInstance().doReward(((Player)winner).getPlayerGroup(), getOwner()); - } - else - { - super.doReward(); - - Player player = (Player)winner; - - // Exp reward - long expReward = StatFunctions.calculateSoloExperienceReward(player, getOwner()); - player.getCommonData().addExp(expReward); - - // DP reward - int currentDp = player.getCommonData().getDp(); - int dpReward = StatFunctions.calculateSoloDPReward(player, getOwner()); - player.getCommonData().setDp(dpReward + currentDp); - - // AP reward - WorldType worldType = World.getInstance().getWorldMap(player.getWorldId()).getWorldType(); - if(worldType == WorldType.ABYSS) - { - int apReward = StatFunctions.calculateSoloAPReward(player, getOwner()); - player.getCommonData().addAp(apReward); - } - - QuestEngine.getInstance().onKill(new QuestEnv(getOwner(), player, 0 , 0)); - - // Give Drop - DropService.getInstance().registerDrop(getOwner() , player, player.getLevel()); - } - } - - @Override public void onRespawn() { super.onRespawn(); Index: main/java/com/aionemu/gameserver/controllers/NpcController.java =================================================================== --- main/java/com/aionemu/gameserver/controllers/NpcController.java (revision 267) +++ main/java/com/aionemu/gameserver/controllers/NpcController.java (working copy) @@ -30,6 +30,8 @@ import com.aionemu.gameserver.model.ChatType; import com.aionemu.gameserver.model.EmotionType; import com.aionemu.gameserver.model.TaskId; +import com.aionemu.gameserver.model.alliance.PlayerAlliance; +import com.aionemu.gameserver.model.gameobjects.AionObject; import com.aionemu.gameserver.model.gameobjects.Creature; import com.aionemu.gameserver.model.gameobjects.Npc; import com.aionemu.gameserver.model.gameobjects.Summon; @@ -38,6 +40,7 @@ import com.aionemu.gameserver.model.gameobjects.player.RequestResponseHandler; import com.aionemu.gameserver.model.gameobjects.state.CreatureState; import com.aionemu.gameserver.model.gameobjects.stats.NpcGameStats; +import com.aionemu.gameserver.model.group.PlayerGroup; import com.aionemu.gameserver.model.templates.TradeListTemplate; import com.aionemu.gameserver.network.aion.serverpackets.SM_ATTACK; import com.aionemu.gameserver.network.aion.serverpackets.SM_ATTACK_STATUS; @@ -53,8 +56,11 @@ import com.aionemu.gameserver.questEngine.QuestEngine; import com.aionemu.gameserver.questEngine.model.QuestEnv; import com.aionemu.gameserver.restrictions.RestrictionsManager; +import com.aionemu.gameserver.services.AllianceService; import com.aionemu.gameserver.services.CraftSkillUpdateService; import com.aionemu.gameserver.services.CubeExpandService; +import com.aionemu.gameserver.services.DropService; +import com.aionemu.gameserver.services.GroupService; import com.aionemu.gameserver.services.ItemService; import com.aionemu.gameserver.services.LegionService; import com.aionemu.gameserver.services.RespawnService; @@ -63,7 +69,9 @@ import com.aionemu.gameserver.services.WarehouseService; import com.aionemu.gameserver.utils.MathUtil; import com.aionemu.gameserver.utils.PacketSendUtility; +import com.aionemu.gameserver.utils.stats.StatFunctions; import com.aionemu.gameserver.world.World; +import com.aionemu.gameserver.world.WorldType; /** * This class is for controlling Npc's @@ -103,6 +111,58 @@ } @Override + public void doReward() + { + AionObject winner = getOwner().getAggroList().getMostDamage(); + + if(winner == null) + return; + + // TODO: Split the EXP based on overall damage. + + if (winner instanceof PlayerAlliance) + { + AllianceService.getInstance().doReward((PlayerAlliance)winner, getOwner()); + } + else if (winner instanceof PlayerGroup) + { + GroupService.getInstance().doReward((PlayerGroup)winner, getOwner()); + } + else if (((Player)winner).isInGroup()) + { + GroupService.getInstance().doReward(((Player)winner).getPlayerGroup(), getOwner()); + } + else + { + super.doReward(); + + Player player = (Player)winner; + + // Exp reward + long expReward = StatFunctions.calculateSoloExperienceReward(player, getOwner()); + player.getCommonData().addExp(expReward); + + // DP reward + int currentDp = player.getCommonData().getDp(); + int dpReward = StatFunctions.calculateSoloDPReward(player, getOwner()); + player.getCommonData().setDp(dpReward + currentDp); + + // AP reward + WorldType worldType = World.getInstance().getWorldMap(player.getWorldId()).getWorldType(); + if(worldType == WorldType.ABYSS) + { + int apReward = StatFunctions.calculateSoloAPReward(player, getOwner()); + player.getCommonData().addAp(apReward); + } + + QuestEngine.getInstance().onKill(new QuestEnv(getOwner(), player, 0 , 0)); + + // Give Drop + DropService.getInstance().registerDrop(getOwner() , player, player.getLevel()); + } + } + + @Override public void onRespawn() { super.onRespawn(); Index: main/java/com/aionemu/gameserver/services/AllianceService.java =================================================================== --- main/java/com/aionemu/gameserver/services/AllianceService.java (revision 267) +++ main/java/com/aionemu/gameserver/services/AllianceService.java (working copy) @@ -29,7 +29,7 @@ import com.aionemu.gameserver.model.alliance.PlayerAllianceEvent; import com.aionemu.gameserver.model.alliance.PlayerAllianceMember; import com.aionemu.gameserver.model.gameobjects.Creature; -import com.aionemu.gameserver.model.gameobjects.Monster; +import com.aionemu.gameserver.model.gameobjects.Npc; import com.aionemu.gameserver.model.gameobjects.player.Player; import com.aionemu.gameserver.model.gameobjects.player.RequestResponseHandler; import com.aionemu.gameserver.model.group.PlayerGroup; @@ -580,7 +580,7 @@ * @param winner * @param owner */ - public void doReward(PlayerAlliance alliance, Monster owner) + public void doReward(PlayerAlliance alliance, Npc owner) { // TODO: Merge with group type do-reward. (Near identical to GroupService doReward code.) // Plus complete rewrite of drop system and exp system. Index: main/java/com/aionemu/gameserver/services/GroupService.java =================================================================== --- main/java/com/aionemu/gameserver/services/GroupService.java (revision 267) +++ main/java/com/aionemu/gameserver/services/GroupService.java (working copy) @@ -259,7 +259,7 @@ * * @param player */ - public void doReward(PlayerGroup group, Monster owner) + public void doReward(PlayerGroup group, Npc owner) { // Find Group Members and Determine Highest Level List<Player> players = new ArrayList<Player>(); Index: main/java/com/aionemu/gameserver/world/WorldMapType.java =================================================================== --- main/java/com/aionemu/gameserver/world/WorldMapType.java (revision 267) +++ main/java/com/aionemu/gameserver/world/WorldMapType.java (working copy) @@ -20,6 +20,7 @@ { // Asmodea PANDAEMONIUM(120010000), + MARCHUTAN(120020000), ISHALGEN(220010000), MORHEIM(220020000), ALTGARD(220030000), @@ -28,14 +29,21 @@ // Elysia SANCTUM(110010000), + KAISINEL(110020000), POETA(210010000), VERTERON(210030000), ELTNEN(210020000), HEIRON(210040000), THEOMOBOS(210060000), + + // Balaurea + INGGISON(210050000), + GELKMAROS(220070000), + SILENTERA_CANYON(600010000), // Prison PRISON(510010000), + DF_PRISON(520010000), RESHANTA(400010000), @@ -60,7 +68,27 @@ DRAUPNIR_CAVE(320080000), FIRE_TEMPLE(320100000), ALQUIMIA(320110000), - ADMA_STRONGHOLD(320130000); + ADMA_STRONGHOLD(320130000), + TEMPLE_UP(300150000), + TEMPLE_LOW (300160000), + CATACOMBS(300170000), + ELIM (300190000), + NOVICE(300200000), + DREDGION_02(300210000), + DEBRIS_OF_ABYSS(300220000), + CROMEDE(300230000), + ABPROD3(320140000), + DF1B(320060000), + SPACE(320070000), + DC1_ARENA(320090000), + DC1_ARENA_3F(320120000), + + //Test Map + TEST_BASIC(900020000), + TEST_SERVER(900030000), + TEST_GIANTMONSTER(900100000), + HOUSING_BARRACK(900110000); + private final int worldId; Index: main/java/com/aionemu/gameserver/world/WorldType.java =================================================================== --- main/java/com/aionemu/gameserver/world/WorldType.java (revision 267) +++ main/java/com/aionemu/gameserver/world/WorldType.java (working copy) @@ -24,6 +24,7 @@ { ASMODAE, ELYSEA, + BALAUREA, ABYSS, PRISON, NONE Но разобрать можно Консоль GameServer не советует:"Вы настраивайте сервер уже 1 час. Советуем вам немного отдохнуть". |
22.01.2011, 19:24 | #3 |
Пользователь
|
Re: Баг при осадах креп и артефактов
Спасибо Wolfas за информацию.
Благодаря вашему посту, внес изменения в AE276. Однако как агрились гварды так и агрятся. Брал уже npc_temlates.xml и tribe_relations.xml от сборок где все нормально, но все безуспешно. Буду очень признателен, если укажите направления куда теперь копать. |
22.01.2011, 21:08 | #4 |
Пользователь
|
Re: Баг при осадах креп и артефактов
Дело не в ядре, а в файле спавна осад, там прописывается спавн для двух режимов в которых может находится крепость:
- осада возможна (тег в файле siege_guard) - осада невозможна ( тег в файле peace_guard) Плюс ко всему, все мобы которые спавняться в обоих режимах должны имень тип NON_ATTACKABLE в файле npc_templates.xml, кроме мобов(гвардов) которые спавняться если крепость пренадлежит баллаурам, все гварды баллауров должны быть ATTACKABLE, иначе крепость на захватить. Как определить кто для какой рассы спавнится: - тег npcid_dr - спавн гвардов для баллауров - тег npcid_da - спавн гвардов для асмо - тег npcid_li - спавн гвардов для элийцев А также не все мобы подходят для спавна в определённых режимах (хз почему), тут надо опытным путём определить какие мобы подходят. Вот можете попробовать: часть кода для крепы Серного дерева:Свернуть ↑
Свернуть ↑Развернуть ↓
PHP код:
Для проверки сделайте резрвную копию своего файла, потом по id крепы найдите в файле siege_spawns.xml (gameserver\data\static_data\siege) и замените на код. Да и что бы всё работало необходимо как я уже говорил чтобы все гварды кроме гвардов баллауров имели тип NON_ATTACKABLE. |
Сказали спасибо: |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Лаги на осадах | SunnyX | Lineage II | 33 | 28.11.2010 10:18 |
Гварды на осадах просто стоят | Jao | Работа со скриптами | 3 | 21.05.2009 15:09 |