protected override bool Process(Player player, RealmTime time, string args) { Command[] cmds = player.Manager.Commands.Commands.Values .Where(x => x.HasPermission(player)) .ToArray(); int curPage = (args != "") ? Convert.ToInt32(args) : 1; double maxPage = Math.Floor((double) cmds.Length/10); if (curPage > maxPage + 1) curPage = (int) maxPage + 1; if (curPage < 1) curPage = 1; var sb = new StringBuilder(string.Format("Commands <Page {0}/{1}>: \n", curPage, maxPage + 1)); int y = (curPage - 1) * 10; int z = y + 10; int commands = cmds.Length; if (z > commands) { z = commands; } for (int i = y; i < z; i++) { sb.Append(string.Format("[/{0}{1}]{2}", cmds[i].CommandName, (cmds[i].CommandUsage != "" ? " " + cmds[i].CommandUsage : null), (cmds[i].CommandDesc != "" ? ": " + cmds[i].CommandDesc : null)) + "\n"); } player.SendHelp(sb.ToString()); return true; }
protected override bool Process(Player player, RealmTime time, string args) { if (player.Guild != "") try { var saytext = string.Join(" ", args); if ((from w in player.Manager.Worlds let world = w.Value where w.Key != 0 from i in world.Players.Where(i => i.Value.Guild == player.Guild) select world).Any()) { if (saytext.Equals(" ") || saytext == "") { player.SendHelp("Usage: /guild <text>"); return false; } player.Manager.Chat.SayGuild(player, saytext.ToSafeText()); return true; } } catch(Exception e) { player.SendError(e.ToString()); player.SendInfo("Cannot guild chat!"); return false; } else player.SendInfo("You need to be in a guild to use guild chat!"); return false; }
protected override bool Process(Player player, RealmTime time, string args) { if (args.Length == 0) { player.SendHelp("Usage: /announce <saytext>"); return false; } foreach (var client in player.Manager.Clients.Values) client.Player.SendText("@Announcement", args); return true; }
public override void Buy(Player player) { if (!player.Guild.IsDefault) { if (player.Guild[player.AccountId].Rank >= 30) { using (var db = new Database()) { if (db.GetGuild(db.GetGuildId(player.Guild[player.AccountId].Name)).GuildFame >= Price) { var cmd = db.CreateQuery(); cmd.CommandText = "UPDATE guilds SET level=level+1, guildFame=guildFame-@price WHERE name=@guildName"; cmd.Parameters.AddWithValue("@guildName", player.Guild.Name); cmd.Parameters.AddWithValue("@price", Price); if (cmd.ExecuteNonQuery() == 1) { player.Client.SendPacket(new BuyResultPacket { Message = "{\"key\":\"server.sale_succeeds\"}", Result = BuyResult.Success }); player.SendInfo("Please leave the Guild Hall, we need some minutes to update the Guild Hall."); player.Guild.UpdateGuildHall(); } } else { player.SendHelp("F**K"); player.Client.SendPacket(new BuyResultPacket { Message = "{\"key\":\"server.not_enough_fame\"}", Result = BuyResult.NotEnoughFame }); } } } else { player.Client.SendPacket(new BuyResultPacket { Message = "Founder or Leader rank required.", Result = 0 }); } } }
private static void Handle(Player player) { var cli = player.Client; if (cli.Account.RaidToken < 1) { player.SendError("You do not have an Alert to launch."); return; } if (cli.Account.Credits < 1000) { player.SendError("You do not have the required amount of gold to launch an Alert."); return; } var rnd = new Random(); cli.Manager.Database.UpdateAlertToken(cli.Account, -1); player.AlertToken--; player.ForceUpdate(player.AlertToken); player.SendHelp("Launching Alert... Good luck!"); var alertArea = player.Owner.Manager.Resources.Worlds[AlertAreas[rnd.Next(AlertAreas.Length)]]; DynamicWorld.TryGetWorld(alertArea, player.Client, out var world); world = player.Owner.Manager.AddWorld(world ?? new World(alertArea)); player.Owner.Timers.Add(new WorldTimer(8000, (w, t) => { player.Client.Reconnect(new Reconnect { Host = "", Port = 2050, GameId = world.Id, Name = world.SBName, IsFromArena = false }); })); }
public override void Buy(Player player) { player.Manager.Data.AddPendingAction(db => { if (db.GetGuild(db.GetGuildId(player.Guild)).GuildFame >= Price) { player.Client.SendPacket(new BuyResultPacket { Message = "Upgrade successful! Please leave the Guild Hall to have it upgraded", Result = 0 }); } else { player.SendHelp("F**K"); player.Client.SendPacket(new BuyResultPacket { Message = "Not enough Guild Fame!", Result = 9 }); } }); base.Buy(player); }
protected override bool Process(Player player, RealmTime time, string args) { if (args.Length == 0) { player.SendHelp("Usage: /eff <effectid>"); return false; } ConditionEffectIndex effect; if (!Enum.TryParse(args, true, out effect)) { player.SendError("Invalid effect!"); return false; } if ((player.ConditionEffects & (ConditionEffects)(1 << (int)effect)) != 0) { //remove player.ApplyConditionEffect(new ConditionEffect() { Effect = effect, DurationMS = 0 }); } else { //add player.ApplyConditionEffect(new ConditionEffect() { Effect = effect, DurationMS = -1 }); } return true; }
protected override bool Process(Player player, RealmTime time, string args) { if (args.Length == 0) { player.SendHelp("Usage: /summon <playername>"); return false; } foreach (var i in player.Owner.Players) { if (i.Value.Name.EqualsIgnoreCase(args)) { i.Value.Teleport(time, player.Id); player.SendInfo("Player summoned!"); return true; } } player.SendError(string.Format("Player '{0}' could not be found!", args)); return false; }
protected override bool Process(Player player, RealmTime time, string args) { if (args.Length == 0) { player.SendHelp("Usage: /spawn <objectname>"); return false; } int index = args.IndexOf(' '); int num; string name = args; if (args.IndexOf(' ') > 0 && int.TryParse(args.Substring(0, args.IndexOf(' ')), out num)) //multi name = args.Substring(index + 1); else num = 1; ushort objType; if (!player.Manager.GameData.IdToObjectType.TryGetValue(name, out objType) || !player.Manager.GameData.ObjectDescs.ContainsKey(objType)) { player.SendError("Unknown entity!"); return false; } for (int i = 0; i < num; i++) { var entity = Entity.Resolve(player.Manager, objType); entity.Move(player.X, player.Y); player.Owner.EnterWorld(entity); } return true; }
protected override bool Process(Player player, RealmTime time, string args) { if (args.Length == 0) { player.SendHelp("Usage: /setpiece <piecename>"); return false; } ISetPiece piece = (ISetPiece)Activator.CreateInstance(Type.GetType( "wServer.realm.setpieces." + args, true, true)); piece.RenderSetPiece(player.Owner, new IntPoint((int)player.X + 1, (int)player.Y + 1)); return true; }
protected override bool Process(Player player, RealmTime time, string args) { if (args.Length == 0) { player.SendHelp("Usage: /oryxSay <saytext>"); return false; } player.Manager.Chat.Oryx(player.Owner, args); return true; }
protected override bool Process(Player player, RealmTime time, string args) { if (args.Length == 0) { player.SendHelp("Usage: /killPlayer <playername>"); return false; } foreach (var i in player.Manager.Clients.Values) { if (i.Account.Name.EqualsIgnoreCase(args)) { i.Player.HP = 0; i.Player.Death("Moderator"); player.SendInfo("Player killed!"); return true; } } player.SendError(string.Format("Player '{0}' could not be found!", args)); return false; }
protected override bool Process(Player player, RealmTime time, string args) { int index = args.IndexOf(' '); int num; string stat = args; if (args.IndexOf(' ') > 0 && int.TryParse(args.Substring(index), out num)) stat = args.Substring(0, args.IndexOf(' ')); else num = 1; switch (stat) { case "hp": player.Stats[0] = num; player.UpdateCount++; break; case "mp": player.Stats[1] = num; player.UpdateCount++; break; case "att": player.Stats[2] = num; player.UpdateCount++; break; case "def": player.Stats[3] = num; player.UpdateCount++; break; case "spd": player.Stats[4] = num; player.UpdateCount++; break; case "vit": player.Stats[5] = num; player.UpdateCount++; break; case "wis": player.Stats[6] = num; player.UpdateCount++; break; case "dex": player.Stats[7] = num; player.UpdateCount++; break; case "all": player.Stats[2] = num; player.Stats[3] = num; player.Stats[4] = num; player.Stats[5] = num; player.Stats[6] = num; player.Stats[7] = num; player.UpdateCount++; break; default: player.SendHelp("Usage: /stats <stat name> <amount>"); break; } player.SendInfo("Successfully updated " + stat); return true; }
protected override bool Process(Player player, RealmTime time, string args) { if (args.Length == 0) { player.SendHelp("Usage: /trade <username>"); return true; } Player plr = player.Manager.FindPlayer(args); if (plr != null && plr.Owner == player.Owner) { player.RequestTrade(time, new RequestTradePacket { Name = plr.Name }); return true; } return false; }
protected override bool Process(Player player, RealmTime time, string args) { if (args.Length == 0) { player.SendHelp("Usage: /tpPos <X> <Y>"); return false; } string[] coordinates = args.Split(' '); if (coordinates.Length != 2) { player.SendError("Invalid coordinates!"); return false; } int x, y; if (!int.TryParse(coordinates[0], out x) || !int.TryParse(coordinates[1], out y)) { player.SendError("Invalid coordinates!"); return false; } player.Move(x + 0.5f, y + 0.5f); player.SetNewbiePeriod(); player.UpdateCount++; player.Owner.BroadcastPacket(new GotoPacket() { ObjectId = player.Id, Position = new Position() { X = player.X, Y = player.Y } }, null); return true; }
protected override bool Process(Player player, RealmTime time, string args) { if (args.Length == 0) { player.SendHelp("Usage: /gimme <Itemname>"); return false; } ushort objType; if (!player.Manager.GameData.IdToObjectType.TryGetValue(args, out objType)) { player.SendError("Unknown item type!"); return false; } for (int i = 0; i < player.Inventory.Length; i++) if (player.Inventory[i] == null) { player.Inventory[i] = player.Manager.GameData.Items[objType]; player.UpdateCount++; player.SaveToCharacter(); player.SendInfo("Success!"); return true; } player.SendError("Not enough space in inventory!"); return false; }
protected override bool Process(Player player, RealmTime time, string args) { if (args.Trim() != "") { string cmd = args.Split(' ')[0]; string left = args.Split(' ').Length > 1 ? string.Join(" ", args.Split(' ').Skip(1)) : ""; bool inParty = player.Party != null; bool leader = inParty && player.Party.Leader == player; switch (cmd) { case "join": if (left == "") { player.SendInfo("Usage: /party join <username>"); return false; } Player target = player.Owner.GetUniqueNamedPlayer(left); if(target == null) { player.SendInfo("Player not found."); return false; } if(target.Party == null) { player.SendInfo("Player is not in a party."); return false; } if(target.Party.Leader != target) { player.SendInfo("You can only join the leader of the party."); return false; } if(!target.Party.Invitations.Contains(player.AccountId)) { player.SendInfo("You must be invited to join a party."); return false; } if (player.Party != null) if (player.Party.Leader == player) player.Party.Disband(); else player.Party.RemoveMember(player); target.Party.AddMember(player); break; case "invite": if (left == "") { player.SendInfo("Usage: /party invite <username>"); return false; } if(inParty && !leader) { player.SendInfo("You must be the leader of a party to invite others."); return false; } if(!inParty) { player.Party = new Party(player); player.UpdateCount++; inParty = true; } Player target2 = player.Owner.GetUniqueNamedPlayer(left); if (target2 == null) { player.SendInfo("Player not found."); return false; } if(target2.Client == null) { player.SendError("Player no longer exists!"); return false; } if(target2.Party == player.Party) { player.SendInfo("Player is already in your party."); return false; } if (!player.Party.Invitations.Contains(target2.AccountId)) player.Party.Invitations.Add(target2.AccountId); player.Party.SendPacket(new TextPacket { BubbleTime = 0, Stars = -1, Name = "", Recipient = "*Party*", Text = target2.Name + " was invited to the party" }, null); target2.Client.SendPacket(new InvitedToPartyPacket { Name = player.Name, PartyID = player.Party.ID }); break; case "kick": if(left == "") { player.SendInfo("Usage: /party kick <username>"); return false; } if(!inParty || !leader) { player.SendInfo("You must be the leader of a party to kick others."); return false; } Player target3 = player.Owner.GetUniqueNamedPlayer(left); if (target3 == null) { player.SendInfo("Player not found."); return false; } if (target3.Party != player.Party) { player.SendInfo("Player must be in your party."); return false; } player.Party.SendPacket(new TextPacket { BubbleTime = 0, Stars = -1, Name = "", Recipient = "*Party*", Text = target3.Name + " was kicked from the party" }, null); player.Party.RemoveMember(target3); break; case "disband": case "leave": if(!inParty) { player.SendInfo("You are not in a party."); return false; } if (player.Party.Leader == player) player.Party.Disband(); else player.Party.RemoveMember(player); break; case "chat": if(left.Trim() == "") { player.SendInfo("Usage: /party chat <message> or /p <message>"); return false; } if(!inParty) { player.SendInfo("You are not in a party."); return false; } player.Manager.Chat.SayParty(player, left.ToSafeText()); break; case "help": player.SendHelp("Party commands:\n[/party join <username>]: accept a party invite\n[/party invite <username>]: invite a player to your party (leader only)\n[/party kick <username>]: kick a user from your party (leader only)\n[/party leave]: leave your current party\n[/party chat <message>]: send a message to your party"); break; default: player.SendInfo("Invalid command!"); player.SendInfo("Type \"/party help\" for commands."); break; } } else { if(player.Party == null) { player.SendInfo("You are not in a party!"); player.SendInfo("Type \"/party help\" for commands."); return false; } player.SendInfo("Party Leader:\n " + player.Party.Leader.Name); var members = player.Party.Members.Select(i => i.Name).ToList(); player.SendInfo("Party Members:\n " + (members.Count > 0 ? string.Join(", ", members.ToArray()) : "None")); player.SendInfo("Type \"/party help\" for commands."); } return true; }