home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 56 / CDPowerplay56Disc2.iso / demos / blade / data1.cab / Program_Executable_Files / Lib / NetTraps.py < prev    next >
Encoding:
Python Source  |  2000-10-27  |  5.5 KB  |  213 lines

  1. import netgame
  2. import Bladex
  3. import LavaDefDamage
  4. import Netval
  5. import math
  6. import NetMisc
  7. import dust
  8. import whrandom
  9. import Sounds
  10.  
  11. def rand(time):
  12.     PRIME = 123457
  13.     MULTI = 510510
  14.     
  15.     return (1.0*((MULTI*time)%PRIME))/PRIME
  16.  
  17. def CPrime(min):
  18.     p = [2,3,5,7,11]
  19.     c = 12
  20.     
  21.     while p[len(p)-1]<min:
  22.         c = c + 1
  23.         ip = 1
  24.         for v in p:
  25.             if c % v==0:
  26.                 ip = 0
  27.                 break
  28.         if ip:
  29.             p.append(c)
  30.             print c
  31.             
  32.             
  33. StartTime   = 0.0                     # Variable global que marca el inicio de un round
  34. ListOfTraps = []                    # Lista de trampas en el juego
  35.  
  36. def LeeCadena(id,type,cad):
  37.     global StartTime
  38.     
  39.     if type ==  Netval.NET_GAME_START_TRAPS:
  40.         StartTime = float(cad)
  41.  
  42.     for o in ListOfTraps:
  43.         o.Start()
  44.     
  45.  
  46. NetMisc.LReadUserString.append(LeeCadena)
  47.  
  48. def IniciaRound():
  49.     global StartTime
  50.  
  51.     StartTime           = netgame.GetTime()
  52.     netgame.SendUserString(Netval.NET_GAME_START_TRAPS,`StartTime`)
  53.  
  54.     for o in ListOfTraps:
  55.         o.Start()
  56.  
  57.  
  58. NetMisc.LOnStartRoundFunc.append(IniciaRound)
  59.  
  60. #################### TRAMPA DE LA LAVA ####################
  61. class LavaFlood:
  62.     TimeRound  = 3
  63.     DeltaRound = 5000
  64.     Quake      = 0
  65.     sino       = 0
  66.     
  67.     def QuemarCliente(self,entid):
  68.         namex = entid.Name+"LavaFire"
  69.         wps = Bladex.GetEntity(namex)
  70.         if wps:
  71.             wps.Position = entid.Position[0], self.Surface.Position[1]+1, entid.Position[2]
  72.         else:
  73.             wps=Bladex.CreateEntity(namex, "Entity Particle System D1", entid.Position[0], self.Surface.Position[1]+1, entid.Position[2])
  74.             wps.ParticleType="LargeFire"
  75.             wps.Time2Live=16
  76.             wps.RandomVelocity=10.0
  77.             wps.Velocity=0,-1000,0
  78.             wps.YGravity=0
  79.             wps.PPS=50
  80.         
  81.         wps.DeathTime=Bladex.GetTime()+1.0
  82.  
  83.     def __init__(self,Max,Min,MaxT,MinT):
  84.         global ListOfTraps
  85.         
  86.         self.Max      = Max
  87.         self.Min      = Min
  88.         self.MaxT     = MaxT
  89.         self.MinT     = MinT
  90.         self.Surface  = None
  91.         self.Texture  = "LAVA"
  92.         
  93.         ListOfTraps.append(self)
  94.  
  95.     # check for lava values on lineX
  96.     def TestLavaDamage(self,ent):
  97.         if ent.Position[1]+1500 > self.Surface.Position[1]:
  98.             print ent.Name," se quema de lo lindo."
  99.             self.QuemarCliente(ent)
  100.             return 1
  101.         return 0
  102.  
  103.     def Start(self):
  104.         global StartTime
  105.         
  106.         if not self.Surface:
  107.             self.LavaName     = "Lava"+Bladex.GenerateEntityName()
  108.             print "Creating '"+self.LavaName+"' for fun"
  109.             self.LavaDamage   = LavaDefDamage.LAVA_AREA()
  110.             self.LavaDamage.CreateLava (self.LavaName,self.Position[0],self.Position[1],self.Position[2], self.Texture, 0.01 )
  111.             self.Surface      = Bladex.GetEntity(self.LavaName)
  112.             NetMisc.LOnDamageFunc.append(self.TestLavaDamage)
  113.                         
  114.         
  115.         self.Surface.TimerFunc   = self.floodTimer        
  116.         self.Surface.SubscribeToList("Timer30")
  117.                 
  118.         self.MaxTime = (self.MaxT-self.MinT)*rand(StartTime) + self.MinT
  119.     
  120.     def floodTimer(self,ent, time):
  121.            global StartTime
  122.  
  123.         time = netgame.GetTime()
  124.         
  125.         tetha = (time-StartTime)/self.MaxTime
  126.         
  127.         tetha = abs(((tetha+1)%2)-1)
  128.         
  129.         sino = time/self.TimeRound
  130.         AddSin = math.sin(3.1515*sino)*self.DeltaRound
  131.         
  132.         pos = (self.Max-self.Min)*tetha+self.Min + AddSin
  133.         
  134.         self.Surface.Position = self.Position[0], pos, self.Position[2]
  135.         
  136.         if self.Quake:
  137.             if sino > self.sino+2.0:
  138.                 temblOn(0)
  139.                 self.sino = int(sino/2)*2
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146. #################### Temblores Aleatorios ####################
  147.  
  148. mQuakeTime     = 2
  149. MQuakeTime     = 4
  150.  
  151. mQuakeDelay    = 5
  152. MQuakeDelay    = 10
  153.  
  154. QuakeIntensity = 100
  155.  
  156. Temblon_ = [1,1,1]
  157.  
  158. Temblon_[0]=Sounds.CreateEntitySound("..\\..\\Sounds\\terremoto-piedras.wav","desprendimiento1")
  159. Temblon_[0].Volume=1; Temblon_[0].MinDistance=90000; Temblon_[0].MaxDistance=100000; 
  160.  
  161. Temblon_[1]=Sounds.CreateEntitySound("..\\..\\Sounds\\Rock-floor-collapse.wav","desprendimiento2")
  162. Temblon_[1].Volume=1; Temblon_[1].MinDistance=90000; Temblon_[1].MaxDistance=100000; 
  163.  
  164. Temblon_[2]=Sounds.CreateEntitySound("..\\..\\Sounds\\ground-collapse.wav","desprendimiento3")
  165. Temblon_[2].Volume=1; Temblon_[2].MinDistance=90000; Temblon_[2].MaxDistance=100000; 
  166.  
  167.  
  168. def temblOff():
  169.     cam = Bladex.GetEntity("Camera")
  170.     cam.EarthQuakeFactor = 0
  171.     cam.EarthQuake = 0
  172.  
  173. def temblOn(repeat = 1):
  174.     global mQuakeTime
  175.     global MQuakeTime
  176.     global mQuakeDelay
  177.     global MQuakeDelay
  178.     global QuakeIntensity
  179.     
  180.     cam = Bladex.GetEntity("Camera")
  181.     cam.EarthQuakeFactor = QuakeIntensity
  182.     cam.EarthQuake = 1
  183.     Bladex.AddScheduledFunc(Bladex.GetTime()+whrandom.randint(mQuakeTime, MQuakeTime), temblOff,())
  184.     if repeat:
  185.         Bladex.AddScheduledFunc(Bladex.GetTime()+whrandom.randint(mQuakeDelay,MQuakeDelay), temblOn,())
  186.     char= Bladex.GetEntity("Player1")
  187.     m = whrandom.randint(0,2)
  188.     Temblon_[m].Position = char.Position
  189.     Temblon_[m].PlaySound(1)
  190.     
  191.  
  192.  
  193. ######################[ E J E M P L O S ]######################
  194. """
  195. import NetTraps
  196.  
  197. # Agrega una trampa de lava
  198. lava = NetTraps.LavaFlood(-5000,60000,240,120)    # <limite superior>,<limite inferior>,<maximo de tiempo>,<minimo de tiempo>
  199. lava.Position = (26837, 74000, 4427)        # Posicion donde esta la lava
  200. lava.TimeRound  = 4                # Tiempo de oscilacion
  201. lava.DeltaRound = 3000                # Radio de oscilacion
  202. lava.Quake      = 1                # asigna el evento de temblores a la oscilacion.
  203.  
  204. # Temblores
  205. NetTraps.mQuakeTime     =   2            # Duracion minima del temblores
  206. NetTraps.MQuakeTime     =   4            # Duracion maxima del temblores
  207. NetTraps.mQuakeDelay    =   5            # Retardo minimo entre temblores
  208. NetTraps.MQuakeDelay    =  10            # Retardo maximo entre temblores
  209. NetTraps.QuakeIntensity = 100            # Intensidad del temblor
  210.  
  211. NetTraps.temblOn()                # activa los temblores para siempre (no usar si se asigna a la lava)
  212.  
  213. """