etayn

old gzdoom project
git clone git://moonbender.net/etayn
Log | Files | Refs | README

eventhandler.zsc (3379B)


      1 class ETAYNEMOD_EventHandler : EventHandler
      2 {
      3 
      4 	override void WorldTick()
      5 	{
      6 	}
      7 	
      8 	override void WorldLoaded(WorldEvent e)
      9 	{
     10 		let p = players[consoleplayer].mo;
     11 		let bun = DevilbunnyPlayer(p);
     12 		
     13 		bun.bThruActors = false; //otherwise you'll be noncorporeal after you fleche into a level exit
     14 		
     15 		if (bun.hitpoints < 20)
     16 			bun.hitpoints = 20;
     17 			
     18 		bun.targspirit = bun.spirit;
     19 	}
     20 	
     21 	override bool InputProcess(InputEvent e)
     22 	{
     23 		if (e.Type == InputEvent.Type_KeyDown)
     24 		{
     25 			EventHandler.SendNetworkEvent("ETAYNEMOD_KeyDown", e.KeyScan);
     26 		}
     27 		else if (e.Type == InputEvent.Type_KeyUp)
     28 		{
     29 			EventHandler.SendNetworkEvent("ETAYNEMOD_KeyUp", e.KeyScan);
     30 		}
     31 		return false;
     32 	}
     33 	
     34 	override void NetworkProcess (ConsoleEvent e)
     35 	{
     36 		if (e.Player < 0 || !(players[e.Player].mo))
     37 		{
     38 			return;
     39 		}
     40 		
     41 		let p = DevilbunnyPlayer(players[e.Player].mo);
     42 		if (p)
     43 		{
     44 			
     45 		
     46 			int key = Bindings.GetKeysForCommand("ETAYNEMOD_DonArmor");
     47 			if (e.Name ~== "ETAYNEMOD_KeyDown")
     48 			{
     49 				if (key == e.args[0])
     50 					p.inDonArmor = true;
     51 			}
     52 			else if (e.Name ~== "ETAYNEMOD_KeyUp")
     53 			{
     54 				if (key == e.args[0])
     55 					p.inDonArmor = false;
     56 			}
     57 			else if (e.Name ~== "ETAYNEMOD_RemArmorEvent")
     58 			{
     59 				p.TakeOffArmor();
     60 			}
     61 			
     62 		}
     63 	}
     64 
     65 	override void WorldThingDied(WorldEvent e)
     66 	{
     67 		if (!e.thing)
     68 			return;
     69 
     70 		if (e.thing.bIsMonster)
     71 		{
     72 			let a = EtMonsterHandler(e.thing.FindInventory("EtMonsterHandler", true));
     73 			if (a)
     74 			{
     75 				a.isDead = true;
     76 			}
     77 		}
     78 	}
     79 
     80 	override void WorldThingSpawned(WorldEvent e)
     81 	{
     82 		if(!e.thing)
     83 			return;
     84 
     85 		bool monster = e.Thing.bIsMonster;
     86 
     87 		if (e.Thing is "SummonBase")
     88 			return;
     89 
     90 		if(monster && !e.Thing.CountInv("EtMonsterHandler"))
     91 		{
     92 			e.Thing.A_GiveInventory("EtMonsterHandler");
     93 		}
     94 
     95 	}
     96 	
     97 	override void WorldThingRevived(WorldEvent e)
     98 	{
     99 		if (e.Thing)
    100 		{	
    101 			if(e.Thing.GetClassName() == "DevilbunnyPlayer")
    102 			{
    103 				let p = DevilbunnyPlayer(e.Thing.player.mo);
    104 				p.HitPoints = 100;
    105 				return;
    106 			}
    107 			
    108 			if(e.Thing.bIsMonster)
    109 			{	
    110 				let a = EtMonsterHandler(e.thing.FindInventory("EtMonsterHandler", true));
    111 				if (a)
    112 				{
    113 					a.isDead = false;
    114 				}
    115 			}
    116 		}
    117 	}
    118 }
    119 
    120 Class EtMonsterHandler : Inventory 
    121 {
    122 	bool superTicked;
    123 	bool isDead;
    124 
    125 	default
    126 	{
    127 		Inventory.MaxAmount 1;
    128 		+INVENTORY.AUTOACTIVATE
    129 		+INVENTORY.UNDROPPABLE
    130 		+INVENTORY.UNTOSSABLE
    131 	}
    132 
    133 	override void Tick()
    134 	{
    135 		if (!superTicked)
    136 		{
    137 			Super.Tick();
    138 			superTicked = true;
    139 		}
    140 
    141 		if (!owner)
    142 			return;
    143 
    144 		if (isDead)
    145 			return;
    146 
    147 		if (owner.target)
    148 		{
    149 			if (!owner.CheckSight(owner.target))
    150 				return;
    151 
    152 
    153 			if (owner.target.GetClassName() == "DevilbunnyPlayer") 
    154 			{
    155 				let t = DevilbunnyPlayer(owner.target);
    156 
    157 				//prioritize archviles that are flaming all over you
    158 				if (owner.tracer)
    159 				{
    160 					if (owner.tracer.GetClassName() == "ArchvileFire")
    161 					{
    162 						t.PissOffSummons(owner, 150);
    163 					}
    164 				}
    165 
    166 				if (t.targetRange > owner.Distance2D(t))
    167 				{
    168 					t.PissOffSummons(owner, 60);
    169 					return;
    170 				}
    171 			}
    172 			if (owner.target is "SummonBase")
    173 			{
    174 				if (owner.target.master.GetClassName() == "DevilbunnyPlayer")
    175 				{
    176 					let m = DevilbunnyPlayer(owner.target.master);
    177 					m.PissOffSummons(owner, 5);
    178 					return;
    179 				}
    180 			}
    181 		}
    182 	}
    183 }