Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Баг при осадах креп и артефактов
#1
Сборка AE 276, сейчас её как основу взяли AC!
Возникла проблема =( при захвате крепы или артефакта, гварды своей расы агряться, бьються и при том не хило отвечают! В npc_temlates.xml по ID NPC с такими параметрами npc_type="NON_ATTACKABLE" rank="HERO" race="ELYOS" tribe="GUARD"...я тоже Элиец!Если смотреть в tribe_relations.xml то все ровно должно быть, но нет! Может кто-нибудь знает решение проблемы или направление в котором нудно искать решение проблемы.
[Изображение: image.php?u=1&type=sigpic&dateline=1288895205]
Ответ
#2
Код:
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 час. Советуем вам немного отдохнуть".
Ответ
#3
Спасибо Wolfas за информацию.

Благодаря вашему посту, внес изменения в AE276. Однако как агрились гварды так и агрятся.

Брал уже npc_temlates.xml и tribe_relations.xml от сборок где все нормально, но все безуспешно.

Буду очень признателен, если укажите направления куда теперь копать.
Ответ
#4
Дело не в ядре, а в файле спавна осад, там прописывается спавн для двух режимов в которых может находится крепость:
- осада возможна (тег в файле siege_guard)
- осада невозможна ( тег в файле peace_guard)
Плюс ко всему, все мобы которые спавняться в обоих режимах должны имень тип NON_ATTACKABLE в файле npc_templates.xml, кроме мобов(гвардов) которые спавняться если крепость пренадлежит баллаурам, все гварды баллауров должны быть ATTACKABLE, иначе крепость на захватить.
Как определить кто для какой рассы спавнится:
- тег npcid_dr - спавн гвардов для баллауров
- тег npcid_da - спавн гвардов для асмо
- тег npcid_li - спавн гвардов для элийцев
А также не все мобы подходят для спавна в определённых режимах (хз почему), тут надо опытным путём определить какие мобы подходят.
Вот можете попробовать:
часть кода для крепы Серного дерева
Для проверки сделайте резрвную копию своего файла, потом по id крепы найдите в файле siege_spawns.xml (gameserver\data\static_data\siege) и замените на код. Да и что бы всё работало необходимо как я уже говорил чтобы все гварды кроме гвардов баллауров имели тип NON_ATTACKABLE.
Ответ


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


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