Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- // Timer to control drone packet update
- using System.Timers;
- // Needed Bot core files
- using BattleCore;
- using BattleCore.Events;
- // Custom module for chat
- using BattleCore.PsyOps;
- namespace Drone
- {
- // Add the attribute and the base class
- // You need to load PsyMod.IDBot for self recognition
- [Behavior("Main", "true", "0.02", "PsyOps", "Main drone module.")]
- public class Main:BotEventListener
- {
- //-------------------------------------\\
- // Command Registry |
- //-------------------------------------//
- public Main()
- {
- // Initialization of bot - load all cfgs and needed files
- RegisterTimedEvent("InitBot", 50, InitializeBot);
- RegisterCommand("!dothis", dothis);
- RegisterCommand("!rate", dothat);
- RegisterCommand("!die", doit);
- }
- // Just a shortcut to configuring and sending a message
- PsyChat msg = new PsyChat();
- //-------------------------------------\\
- // Chat Commands |
- //-------------------------------------//
- public void doit(ChatEvent c)
- {
- if (c.ModLevel >= ModLevels.Sysop)
- Drone.Damage(c.PlayerName, 1701);
- }
- public void dothis(ChatEvent c)
- {
- if (c.ModLevel >= ModLevels.Sysop)
- {
- Drone.Damage("PsyOps", 1699);
- Game(msg.pub("*prize #-13"));
- }
- }
- public void dothat(ChatEvent c)
- {
- if (c.ModLevel >= ModLevels.Sysop)
- {
- DroneTimer.Stop();
- Interval = double.Parse(c.Message.Trim().Split(':')[1]);
- //setting variables
- Drone.SetVariables(Settings.Position, Interval, Settings.Range, Settings.DefaultRotation);
- Drone.SetVariables2(Settings.MaxEnergy, Settings.Recharge,Settings.BombAliveTime,Settings.BulletAliveTime,Settings.BombSpeed,Settings.BombThrust,Settings.BulletSpeed);
- DroneTimer.Interval = Interval;
- DroneTimer.Start();
- Game(msg.arena("Packet update rate changed to : [" + Interval + "]ms"));
- }
- }
- //-------------------------------------\\
- // Game Packet Update timer |
- //-------------------------------------//
- // Main game timer -updates player position and anything related
- Timer DroneTimer = new Timer();
- // Drone timer interval in milliseconds
- double Interval = 50;
- bool fired = false;
- public void DroneGameUpdate(object source, ElapsedEventArgs e)
- {
- if (Drone.Alive)
- {
- while (Drone.ExpiredShots.Count > 0)
- {
- WeaponTracker.WeaponFired ExpWep = Drone.ExpiredShots.Dequeue();
- Game(msg.arena("WeaponType[" + ExpWep.Type + "] Shooter[" + ExpWep.PlayerName + "]: just expired."));
- }
- // update drone and send position packet
- Drone.UpdateDrone();
- if (fired)
- {
- Drone.Position.MapPositionX = Drone.LastFired.MapPositionX;
- Drone.Position.MapPositionY = Drone.LastFired.MapPositionY;
- }
- Game(Drone.Position);
- }
- else
- KillDrone();
- }
- //-------------------------------------\\
- // Initialization |
- //-------------------------------------//
- // Main Drone class
- MakeDrone Drone = new MakeDrone();
- // Cfg loading module
- GetSettings Settings = new GetSettings();
- // Initialization of bot - load all cfgs and needed files
- public void InitializeBot()
- {
- // We need bot identifyed to enable us to dig into right directory
- // for loading of cfgs. uses: PsyMod.BotID
- if (Phase1)
- {
- LoadTime = DateTime.Now;
- Phase1 = false;
- Game(msg.chan(1, "Bot Identifyed. ...Loading CFG"));
- Settings.LoadCFG(BotName);
- SendSysRequest();
- Phase2 = true;
- }
- else if (Phase2)
- {
- Phase2 = false;
- Game(msg.chan(1, "CFG loaded. ...Loading Arena Settings"));
- Phase3 = true;
- }
- else if (Phase3)
- {
- string setting = Settings.GetArenaSettings();
- if (setting.Equals("~ARENA_SETTINGS_LOADED~"))
- {
- Phase3 = false;
- Phase4 = true;
- }
- else
- Game(msg.pub(setting));
- }
- else if (Phase4)
- {
- Phase4 = false;
- Game(msg.chan(1,"Arena settings loaded. Applying settings to drone."));
- //setting variables
- Ship = Settings.Ship;
- ShipNum = Settings.ShipNum;
- Drone.SetVariables(Settings.Position,Interval,Settings.Range,Settings.DefaultRotation);
- Drone.SetVariables2(Settings.MaxEnergy, Settings.Recharge, Settings.BombAliveTime,Settings.BulletAliveTime,Settings.BombSpeed,Settings.BombThrust,Settings.BulletSpeed);
- Game(msg.chan(1,"Bot Initialized. Bot:[" + BotName + "] Version:[" + BotVersion + "] Arena:[" + Arena + "] LoadTime:[" + ((DateTime.Now - LoadTime).Milliseconds + 50) + "ms]"));
- RemoveTimedEvent("InitBot");
- // Configure and start main game timer
- DroneTimer.Elapsed += new ElapsedEventHandler(DroneGameUpdate);
- DroneTimer.Interval = Interval;
- DroneTimer.Start();
- BotActivated = true;
- Game(msg.pm(BotName,"*setship " + ShipNum));
- Game(msg.pm(BotName, "*setfreq 999"));
- }
- }
- //-------------------------------------\\
- // BotID Info | [Module] PsyMod.BotID
- //-------------------------------------//
- // All info received from BotID
- string BotName;
- string Arena;
- string Ship;
- byte ShipNum;
- // Bot version
- double BotVersion = 0.02;
- DateTime LoadTime;
- // Phases of initialization
- bool Phase1, Phase2, Phase3, Phase4;
- // Bot activated and rdy
- bool BotActivated = false;
- // Receive and store BotID info
- public void MonitorChat(object sender, ChatEvent c)
- {
- if (c.Message.StartsWith("!returnID:"))
- {
- string[] info = c.Message.Split(':');
- BotName = info[1];
- Arena = info[2];
- Phase1 = true;
- }
- else if (c.Message.Contains(":") && c.Message.Contains("=") && !c.Message.StartsWith("["))
- {
- Settings.SetArenaSettings(c.Message);
- Game(msg.chan(1,"[Arena Setting] " + c.Message));
- }
- }
- //-------------------------------------\\
- // Drone SelfSysop |
- //-------------------------------------//
- // sending player info request
- public void SendSysRequest()
- {
- PlayerInfoEvent send = new PlayerInfoEvent();
- send.Players.Add(BotName);
- SendGameEvent(send);
- }
- // Receive player list, finding itself and giving itself sysop
- public void MakeDroneSys(object sender, PlayerInfoEvent p)
- {
- p.PlayerList.ForEach(delegate(PlayerInfo p2)
- {
- if (p2.PlayerName == BotName)
- {
- p2.ModeratorLevel = ModLevels.Sysop;
- // Create the new listmod event handler
- ListModEvent makesys = new ListModEvent();
- makesys.Moderator = p2;
- SendCoreEvent(makesys);
- }
- });
- }
- //-------------------------------------\\
- // Player Tracking |
- //-------------------------------------//
- public void PlayerMovement(object sender, PlayerPositionEvent p)
- {
- if (BotActivated)
- Drone.NearMovement(p);
- string wep = p.Weapon.Type.ToString().ToLower();
- if (wep.Contains("bullet") || wep.Contains("bomb") || wep.Contains("thor"))
- {
- Game(msg.arena("Weapon[" + p.Weapon.Type + "] Tracked. Shooter[" + p.PlayerName + "]")); fired = true;
- }
- }
- public void RemovePlayer(object sender, PlayerLeftEvent p)
- { if (BotActivated) Drone.RemovePlayer(p.PlayerName); }
- public void RemovePlayer(object sender, PlayerDeathEvent p)
- { if (BotActivated) Drone.RemovePlayer(p.KilledName); }
- public void RemovePlayer(object sender, ShipChangeEvent s)
- { if (BotActivated) Drone.RemovePlayer(s.PlayerName); }
- //-------------------------------------\\
- // Bot Suicide |
- //-------------------------------------//
- // Safety in place to avoid multiple death packets sent by drone before it dies
- bool sent_death_message = false;
- // Drone suicide
- public void KillDrone()
- {
- if (!sent_death_message)
- {
- sent_death_message = true;
- PlayerDeathEvent DroneDie = new PlayerDeathEvent();
- DroneDie.Bounty = Drone.Position.Bounty;
- DroneDie.KillerName = Drone.Killer;
- Game(DroneDie);
- Game(msg.pm(BotName, "!kill"));
- }
- }
- public override void Dispose()
- {
- throw new NotImplementedException();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment