Пример #1
0
        public void OnCommand(GameClient client, string[] args)
        {
            if (args.Length < 2)
            {
                DisplaySyntax(client);
                return;
            }

            Faction myfaction = (Faction)client.Player.TempProperties.getProperty <object>(TEMP_FACTION_LAST, null);

            switch (args[1])
            {
            case "create":
            {
                if (args.Length < 4)
                {
                    DisplaySyntax(client);
                    return;
                }

                string name      = args[2];
                int    baseAggro = 0;
                try
                {
                    baseAggro = Convert.ToInt32(args[3]);
                }
                catch
                {
                    client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.Create.BAMustBeNumber"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
                    return;
                }

                int max = 0;

                // Log.Info("count:" + FactionMgr.Factions.Count.ToString());
                if (FactionMgr.Factions.Count != 0)
                {
                    // Log.Info("count >0");
                    IEnumerator enumerator = FactionMgr.Factions.Keys.GetEnumerator();
                    while (enumerator.MoveNext())
                    {
                        // Log.Info("max :" + max + " et current :" + (int)enumerator.Current);
                        max = System.Math.Max(max, (int)enumerator.Current);
                    }
                }

                // Log.Info("max :" + max);
                DBFaction dbfaction = new DBFaction();
                dbfaction.BaseAggroLevel = baseAggro;
                dbfaction.Name           = name;
                dbfaction.ID             = max + 1;

                // Log.Info("add obj to db with id :" + dbfaction.ID);
                GameServer.Database.AddObject(dbfaction);

                // Log.Info("add obj to db");
                myfaction = new Faction();
                myfaction.LoadFromDatabase(dbfaction);
                FactionMgr.Factions.Add(dbfaction.ID, myfaction);
                client.Player.TempProperties.setProperty(TEMP_FACTION_LAST, myfaction);
                client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.Create.NewCreated"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
            }

            break;

            case "assign":
            {
                if (myfaction == null)
                {
                    client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.MustSelectFaction"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
                    return;
                }

                GameNPC npc = client.Player.TargetObject as GameNPC;
                if (npc == null)
                {
                    client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.Assign.MustSelectMob"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
                    return;
                }

                npc.Faction = myfaction;
                client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.Assign.MobHasJoinedFact", npc.Name, myfaction.Name), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
            }

            break;

            case "addfriend":
            {
                if (myfaction == null)
                {
                    client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.MustSelectFaction"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
                    return;
                }

                if (args.Length < 3)
                {
                    DisplaySyntax(client);
                    return;
                }

                int id = 0;
                try
                {
                    id = Convert.ToInt32(args[2]);
                }
                catch
                {
                    client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.IndexMustBeNumber"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
                    return;
                }

                Faction linkedfaction = FactionMgr.GetFactionByID(id);
                if (linkedfaction == null)
                {
                    client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.FactionNotLoaded"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
                    return;
                }

                DBLinkedFaction dblinkedfaction = new DBLinkedFaction();
                dblinkedfaction.FactionID       = myfaction.ID;
                dblinkedfaction.LinkedFactionID = linkedfaction.ID;
                dblinkedfaction.IsFriend        = true;
                GameServer.Database.AddObject(dblinkedfaction);
                myfaction.AddFriendFaction(linkedfaction);
            }

            break;

            case "addenemy":
            {
                if (myfaction == null)
                {
                    client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.MustSelectFaction"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
                    return;
                }

                if (args.Length < 3)
                {
                    DisplaySyntax(client);
                    return;
                }

                int id = 0;
                try
                {
                    id = Convert.ToInt32(args[2]);
                }
                catch
                {
                    client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.IndexMustBeNumber"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
                    return;
                }

                Faction linkedfaction = FactionMgr.GetFactionByID(id);
                if (linkedfaction == null)
                {
                    client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.FactionNotLoaded"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
                    return;
                }

                DBLinkedFaction dblinkedfaction = new DBLinkedFaction();
                dblinkedfaction.FactionID       = myfaction.ID;
                dblinkedfaction.LinkedFactionID = linkedfaction.ID;
                dblinkedfaction.IsFriend        = false;
                GameServer.Database.AddObject(dblinkedfaction);
                myfaction.AddEnemyFaction(linkedfaction);
            }

            break;

            case "list":
            {
                foreach (Faction faction in FactionMgr.Factions.Values)
                {
                    client.Player.Out.SendMessage("#" + faction.ID.ToString() + ": " + faction.Name + " (" + faction.BaseAggroLevel + ")", eChatType.CT_Say, eChatLoc.CL_SystemWindow);
                }

                return;
            }

            case "select":
            {
                if (args.Length < 3)
                {
                    DisplaySyntax(client);
                    return;
                }

                int id = 0;
                try
                {
                    id = Convert.ToInt32(args[2]);
                }
                catch
                {
                    client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.IndexMustBeNumber"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
                    return;
                }

                Faction tempfaction = FactionMgr.GetFactionByID(id);
                if (tempfaction == null)
                {
                    client.Player.Out.SendMessage(LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Faction.FactionNotLoaded"), eChatType.CT_Say, eChatLoc.CL_SystemWindow);
                    return;
                }

                client.Player.TempProperties.setProperty(TEMP_FACTION_LAST, tempfaction);
            }

            break;

            default:
            {
                DisplaySyntax(client);
                return;
            }
            }
        }
Пример #2
0
 /// <summary>
 /// load faction from DB
 /// </summary>
 /// <param name="dbfaction"></param>
 public void LoadFromDatabase(DBFaction dbfaction)
 {
     m_name           = dbfaction.Name;
     m_id             = dbfaction.ID;
     m_baseAggroLevel = dbfaction.BaseAggroLevel;
 }