home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 56 / CDPowerplay56Disc2.iso / demos / blade / data1.cab / Program_Executable_Files / Scripts / kombat.py < prev    next >
Encoding:
Text File  |  2000-10-27  |  18.3 KB  |  687 lines

  1. import netgame
  2. import Basic_Funcs
  3. import Damage
  4. import Actions
  5. import Netval
  6. import NetWeapon
  7. import NetScorer
  8. import Reference
  9. import Breakings
  10. import string
  11. import NetMisc
  12. import acts
  13.  
  14.  
  15. #    Estructura de mensajes:
  16. #  0     (Frags)
  17. #  1     (Ordenes)
  18. #  2..10 (Jugador activo)
  19. #
  20. PJ = []
  21.  
  22. OnStartRoundFunc = ""
  23. OnJoinFunc       = ""
  24.  
  25. CameraName = ""
  26. CameraChar = ""
  27. def CameraBreak(Camera,frame):
  28.     global CameraChar
  29.     cam = Bladex.GetEntity("Camera")
  30.     cam.SetPersonView(CameraChar)
  31.     cam.Cut()
  32.     print "Camera breaks to ",CameraChar
  33.  
  34. def SetCameraData(i,c):
  35.     global CameraName
  36.     global CameraChar
  37.     
  38.     CameraName = "Player"+`i`+".cam"
  39.     CameraChar = c
  40.     NetScorer.SetNetPlayerScorer(c)
  41.     
  42.     
  43. def StartCamera():
  44.     global CameraName
  45.     global CameraChar
  46.     global CameraFrames
  47.     
  48.     cam = Bladex.GetEntity("Camera")
  49.     cam.SetMaxCamera(CameraName,0,CameraFrames)
  50.     cam.AddCameraEvent( -1,CameraBreak)
  51.     Bladex.SetListenerPosition(1)
  52.     print "Camera goes to ",CameraChar
  53.  
  54.  
  55. sonido_fight=Bladex.CreateSound("..\\..\\Sounds\\fight.wav","FIGHT")
  56. sonido_fight.MaxDistance=1000000.0
  57. sonido_fight.MinDistance=1000000.0
  58.  
  59. sonido_excelent             = Bladex.CreateSound("..\\..\\Sounds\\excelent.wav","EXELENT")
  60. sonido_excelent.MaxDistance = 1000000.0
  61. sonido_excelent.MinDistance=1000000.0
  62. FRAG_LIMIT = 6 # should be modificable
  63.  
  64. def FreeInventory(EntityName):
  65.     CHAR = Bladex.GetEntity(EntityName)
  66.     INV = CHAR.GetInventory()
  67.     INV.LinkBack("None")
  68.     INV.LinkLeftHand("None")
  69.     INV.LinkRightHand("None")    
  70.     INV.CycleShields()
  71.     while INV.GetSelectedShield():
  72.         o = Bladex.GetEntity(INV.GetSelectedShield())
  73.         Actions.RemoveFromInventory(CHAR,o,"")
  74.         o.SubscribeToList("Pin")
  75.         INV.CycleShields()
  76.  
  77.     INV.CycleWeapons()
  78.     while INV.GetSelectedWeapon():
  79.         o = Bladex.GetEntity(INV.GetSelectedWeapon())
  80.         Actions.RemoveFromInventory(CHAR,o,"")
  81.         o.SubscribeToList("Pin")
  82.         INV.CycleWeapons()
  83.     
  84.     l = []
  85.     for i in range(CHAR.GetNChildren()):
  86.         l.append(CHAR.GetChild(i))
  87.     
  88.     CHAR.UnlinkChildren()
  89.     for i in l:
  90.         Bladex.GetEntity(i).SubscribeToList("Pin")
  91.  
  92.  
  93. def StartWatchMode():    
  94.     #Bladex.DeactivateInput() # en modo espera
  95.     i = 0
  96.  
  97.     NetScorer.wStatusGame.SetText("OBSERVER MODE")
  98.     if netgame.GetNetState() == 1:
  99.         for xx in PJ:
  100.             i=i+1
  101.             if xx!="":
  102.                 netgame.SetPersonView(xx)
  103.                 SetCameraData(i,xx)
  104.                 Bladex.GetEntity("Camera").Cut()
  105.                 return
  106.     else:
  107.         for xx in PJ:
  108.             i=i+1
  109.             if xx!="":
  110.                 if(xx == "Player1"):
  111.                     SetCameraData(i,"PlayerX")
  112.                     netgame.SetPersonView("PlayerX")
  113.                     Bladex.GetEntity("Camera").Cut()
  114.                     return    
  115.                 elif(xx == netgame.GetClientId()):
  116.                     SetCameraData(i,"Player1")
  117.                     netgame.SetPersonView("Player1")
  118.                     Bladex.GetEntity("Camera").Cut()
  119.                     return
  120.                 else:
  121.                     netgame.SetPersonView(xx)
  122.                     SetCameraData(i,xx)
  123.                     Bladex.GetEntity("Camera").Cut()
  124.                     return
  125.  
  126. def EndWatchMode():
  127.     NetScorer.wStatusGame.SetText("")
  128.     #Bladex.ActivateInput()
  129.     netgame.SetPersonView("Player1")
  130.     Bladex.GetEntity("Camera").Cut()
  131.     if netgame.GetNetState() == 1:
  132.         xx = "Player1"
  133.     else:
  134.         xx = netgame.GetClientId()        
  135.  
  136.     for i in range(len(PJ)):
  137.         if PJ[i] == xx:
  138.             SetCameraData(i+1,"Player1")
  139.  
  140.  
  141.  
  142. def isOnGame(name):
  143.     for i in PJ:
  144.         if i==name:
  145.             return 1
  146.     return 0
  147.  
  148.  
  149.  
  150.  
  151. if netgame.GetNetState() == 1:
  152.     #--------------------[ \/ Server Kombat module \/ ]--------------------------#
  153.     del Damage.SpecialDamageFuncs['Venom'] # no venom damage here... sorry Enrik
  154.     
  155.     P_KB = 0 # players in kombat
  156.     Combat = 0
  157.     DarBola = 1
  158.     FRAG_LIMIT = NetMisc.FRAGLIMIT
  159.  
  160.     #----------------------------
  161.     def Calculate_P_KB():
  162.         global P_KB
  163.         P_KB = 0 # players in kombat
  164.         for i in PJ:
  165.             if i!="":
  166.                 P_KB = P_KB + 1
  167.         
  168.  
  169.     
  170.     def RestartCarnage():
  171.         NetScorer.ShowFragLimit(1)
  172.         for a in PlayersList:
  173.             a[6] = 0
  174.         
  175.         for a in PJ:
  176.             CheckFreeSlot(PlayersList[0][1])
  177.         FillFrags()
  178.     
  179.     def ReadUserString(id,type,cad):
  180.         print `type`+" : "+cad
  181.         if(type==Netval.NET_GAME_CHAT_STRING):            
  182.             NetScorer.AddChatString(cad)
  183.             print "chat : "+cad
  184.         elif(type==Netval.NET_GAME_STATUS): # on join!            
  185.             Bladex.AddScheduledFunc(Bladex.GetTime()+5.0, CheckFreeSlot,(cad,))
  186.             Bladex.AddScheduledFunc(Bladex.GetTime()+6.0,FillFrags,())
  187.             print "Request for join : "+cad
  188.         else:
  189.             Actions.ServerCallBack(id,type,cad)
  190.             NetMisc.ReadUserString(id,type,cad)
  191.     
  192.     PlayersList=[[-1,char.Name,netdata[0],netdata[1],netdata[2],netdata[3],0]] # Lista de jugadores
  193.     #                    0:netid    1:object   2:Name    3:Race       4:Kind      5:Handicap     6:Frags
  194.  
  195.     def qSort(l, r):
  196.         i = l
  197.         j = r
  198.         x = PlayersList[(l+r)/2]
  199.         while(i <= j):
  200.             while (PlayersList[i][6]  >  x[6]   ):
  201.                 i=i+1
  202.             while (x[6]     >  PlayersList[j][6]):
  203.                 j=j-1
  204.                 
  205.             if (i <= j):
  206.                 y = PlayersList[i]
  207.                 PlayersList[i] = PlayersList[j]
  208.                 PlayersList[j] = y
  209.                 i = i + 1
  210.                 j = i - 1
  211.         
  212.         if (l < j): 
  213.             qSort(l, j)
  214.         if (i < r):
  215.             qSort(i, r)
  216.     
  217.  
  218.     def SearchPlayerDescriptor(entity):
  219.         global PlayersList
  220.         for i in range(len(PlayersList)):
  221.             if PlayersList[i][1] == entity:
  222.                 return i
  223.         return -1
  224.  
  225.     def GetPlayerDescriptor(entity):
  226.         global PlayersList
  227.         for i in range(len(PlayersList)):
  228.             if PlayersList[i][1] == entity:
  229.                 return PlayersList[i][2]
  230.         return ""
  231.     
  232.     def SearchPlayerId(id):
  233.         global PlayersList
  234.         for i in range(len(PlayersList)):
  235.             if PlayersList[i][0] == id:
  236.                 return i
  237.         return -1
  238.     
  239.  
  240.     def ReSpawnPlayer(EntityName):
  241.         ent = Bladex.GetEntity(EntityName) 
  242.         ent.Data.ReSpawn(EntityName)
  243.         ent.Level        = 0
  244.         ent.PartialLevel = 0
  245.         FreeInventory(EntityName)
  246.         INV = ent.GetInventory()
  247.         i = SearchPlayerDescriptor(EntityName)
  248.  
  249.         handicap = int(PlayersList[i][5]) 
  250.         if(NetMisc.ARENAHANDICAP < handicap):
  251.             handicap = NetMisc.ARENAHANDICAP
  252.         NetWeapon.AddStandardWeapons2Char(EntityName,PlayersList[i][3],handicap)
  253.         ent.LaunchAnimation("RLX")
  254.  
  255.         
  256.         
  257.         
  258.         
  259.     def FillFrags():
  260.         s=""
  261.         for x in PlayersList:
  262.             s = s+"\n"+x[2]+": "+`x[6]`
  263.         NetScorer.wPlayersFrags.SetText(s)
  264.         NetScorer.wFragList.SetText(s)
  265.         netgame.SendUserString(Netval.NET_GAME_FRAGS,s)
  266.         
  267.     for i in range(len(PJInit)):
  268.         PJ.append("")
  269.     
  270.     
  271.     #inicia el combate
  272.     def StartKombat():
  273.         global Combat
  274.         # update the VS label
  275.         s = ""
  276.         for i in PJ:
  277.             idx = SearchPlayerDescriptor(i)
  278.             if(idx != -1):
  279.                 s = s +  PlayersList[idx][2] + " VS "
  280.         s = s[0:len(s)-4]
  281.         NetScorer.wPlayersVS.SetText(s)
  282.         netgame.SendUserString(Netval.NET_GAME_IN_COMBAT,s)
  283.             
  284.         if isOnGame("Player1"):
  285.             EndWatchMode()
  286.         netgame.ClearPools()
  287.         sonido_fight.Play(char.Position[0], char.Position[1], char.Position[2], 0)
  288.         Combat = 1        
  289.         for i in range(len(PJ)):
  290.             if PJ[i]!="":
  291.                 pl = Bladex.GetEntity(PJ[i])
  292.                 netgame.SendUserString(Netval.NET_GAME_KOMBATERS+i,PJ[i]+"*"+str(int(pl.Data.NetLevel))+"?"+str(int(pl.Data.NetLife)))
  293.         Bladex.AddScheduledFunc(Bladex.GetTime()+0.5, netgame.SendUserString,(Netval.NET_GAME_STATUS,'F',))        
  294.         
  295.         
  296.         for i in range(len(PJ)):
  297.             ent          = Bladex.GetEntity(PJ[i])
  298.             ent.Position = PJInit[i][0], PJInit[i][1], PJInit[i][2]
  299.             ent.Angle    = PJInit[i][3]
  300.             ent.Wuea = Reference.WUEA_ENDED
  301.             ent.SetTmpAnmFlags(1,1,1,0,5,1,0)
  302.             ent.LaunchAnmType("Rlx")
  303.             ent.SetOnFloor()
  304.         
  305.         Actions.QuickTurnToFaceEntity(PJ[1],PJ[0])
  306.         Bladex.GetEntity(PJ[1]).SetActiveEnemy(Bladex.GetEntity(PJ[0]))
  307.         Actions.QuickTurnToFaceEntity(PJ[0],PJ[1])
  308.         Bladex.GetEntity(PJ[0]).SetActiveEnemy(Bladex.GetEntity(PJ[1]))
  309.  
  310.         
  311.         if(OnStartRoundFunc != ""):
  312.             OnStartRoundFunc()
  313.         NetMisc.OnStartRoundFunc()
  314.         Bladex.AddScheduledFunc(Bladex.GetTime()+0.0, StartCamera,())
  315.         
  316.     def SetAtEndOfQueue(EntityName):
  317.     
  318.         i = SearchPlayerDescriptor(EntityName)
  319.         aux = PlayersList[i]
  320.         PlayersList.remove(PlayersList[i])
  321.         PlayersList.append(aux)
  322.         
  323.     
  324.     # se fija si hay algun lugar libre para ponerlo en modo combate
  325.     def CheckFreeSlot(EntityName):
  326.         global P_KB
  327.         global Combat
  328.         
  329.         print "CheckFreeSlot("+EntityName+")"
  330.  
  331.         Calculate_P_KB()
  332.         
  333.         if Combat == 1:
  334.             return
  335.  
  336.         if isOnGame(EntityName):
  337.             SetAtEndOfQueue(EntityName)
  338.             print "Intento fallido : "+EntityName+" esta luchando"
  339.             return
  340.             
  341.         ent = Bladex.GetEntity(EntityName)
  342.         
  343.         if ent == None:
  344.             return
  345.         
  346.         for i in range(len(PJ)):
  347.             if PJ[i] == "": # Slot libre!
  348.                 PJ[i] = EntityName
  349.                 ReSpawnPlayer(EntityName)
  350.                 netgame.SetObjectState(EntityName,1)
  351.                 ent.Position = PJInit[i][0], PJInit[i][1], PJInit[i][2]
  352.                 ent.Angle    = PJInit[i][3]                
  353.                 ent.Wuea = Reference.WUEA_ENDED
  354.                 ent.SetTmpAnmFlags(1,1,1,0,5,1,0)
  355.                 ent.LaunchAnmType("Rlx")
  356.                 ent.SetOnFloor()
  357.                 P_KB = P_KB+1
  358.                 SetAtEndOfQueue(EntityName)
  359.                 if P_KB == len(PJ): # Start the Kombat?
  360.                     StartKombat()
  361.                 return
  362.  
  363.     # just one will survive... Hilander, the inmortal. 
  364.     def EndOfKombat():
  365.         global Combat
  366.         global PJ
  367.         global FRAG_LIMIT
  368.         global DarBola
  369.         global P_KB
  370.         
  371.         print "End Of Kombat"
  372.         NetMisc.OnEndRoundFunc()
  373.  
  374.         # assign a round to the player x
  375.         Combat = 0
  376.         xPlayer = ""
  377.         frags = 0
  378.         quecagada = 0
  379.         
  380.         for name in PJ:
  381.             if name!="":
  382.                 if(quecagada==0):
  383.                     quecagada = 1
  384.                     x = SearchPlayerDescriptor(name)
  385.                     if(DarBola == 1):
  386.                         PlayersList[x][6] = PlayersList[x][6]+1
  387.                     frags = PlayersList[x][6]
  388.                     
  389.                     DarBola = 0
  390.                     FillFrags()
  391.                     xPlayer = name
  392.                     NetScorer.AddChatString(GetPlayerDescriptor(xPlayer)+" gana la batalla!")
  393.                     FreePlayerSlot(name,0)
  394.                 else:
  395.                     name = ""
  396.                     print "Algo malo esta pasando..."
  397.         P_KB = 0
  398.         
  399.         CheckFreeSlot(xPlayer)
  400.         if(FRAG_LIMIT<=frags):
  401.             qSort(0,len(PlayersList)-1)
  402.             FillFrags()
  403.             netgame.SendUserString(Netval.NET_GAME_STATUS,'E') # End Of Carnage
  404.             sonido_excelent.Play(char.Position[0], char.Position[1], char.Position[2], 0)
  405.             NetScorer.ShowFragLimit(0)
  406.             Bladex.AddScheduledFunc(Bladex.GetTime()+7.0, NetMisc.ServerNextLevel,())
  407.         else:
  408.             NetScorer.ShowFragLimit(1)
  409.             if(len(PlayersList)<len(PJ)):
  410.                 return
  411.             
  412.             while Combat == 0:
  413.                 CheckFreeSlot(PlayersList[0][1])
  414.         
  415.  
  416.         
  417.     
  418.     # Some player dies...
  419.     def FreePlayerSlot(EntityName,nactual=1):
  420.         global P_KB
  421.  
  422.         Calculate_P_KB()
  423.         
  424.         print "FreePlayerSlot("+EntityName+", "+`nactual`+")"
  425.         if (EntityName == ""):
  426.             print "Aqui pasa algo raro"
  427.             return        
  428.             
  429.         for i in range(len(PJ)):
  430.             if(PJ[i] == EntityName):
  431.                 ent = Bladex.GetEntity(EntityName)
  432.                 ent.Position = netgame.GetNextPosition()
  433.                 ent.Wuea = Reference.WUEA_ENDED
  434.                 ent.SetTmpAnmFlags(1,1,1,0,5,1,0)
  435.                 ent.LaunchAnmType("Rlx")
  436.                 ent.SetOnFloor()
  437.                 PJ[i] = ""
  438.                 
  439.                 netgame.SetObjectState(EntityName,0)
  440.                 
  441.                 # hey! is me!
  442.                 if(EntityName == "Player1"):
  443.                     StartWatchMode()
  444.                 
  445.                 P_KB = P_KB - 1                
  446.                 FreeInventory(EntityName)
  447.                 if nactual:
  448.                     if P_KB == 1:
  449.                         EndOfKombat()
  450.                     elif P_KB == 0:
  451.                         CheckFreeSlot(EntityName)
  452.                     
  453.  
  454.  
  455.  
  456.  
  457.  
  458.     Bladex.AddScheduledFunc(Bladex.GetTime()+0.0, CheckFreeSlot,("Player1",))  # siempre al inicio el servidor...    
  459.     NetScorer.wStatusGame.SetText("OBSERVER MODE")
  460.         
  461.     
  462.     def JoinFunc(id,objname,name,race,weapon,shield):
  463.         PlayersList.insert(0,[ id, objname, name, race, weapon, shield, 0])     # Lo agrega a la lista de jugadores con frags = 0
  464.         NetScorer.AddChatString(name+" entra a la carniceria")
  465.         
  466.         CHAR = Bladex.GetEntity(objname)
  467.         CHAR.Position = netgame.GetNextPosition()
  468.         CHAR.Wuea = Reference.WUEA_ENDED
  469.         CHAR.SetTmpAnmFlags(1,1,1,0,5,1,0)
  470.         CHAR.LaunchAnmType("Rlx")
  471.         CHAR.SetOnFloor()
  472.         CHAR.Level=0
  473.         CHAR.PartialLevel=0
  474.         CHAR.SendTriggerSectorMsgs=1
  475.         CHAR.Data=Basic_Funcs.PlayerPerson(CHAR)
  476.         CHAR.Life = 1000
  477.  
  478.         CHAR.OnStepFunc = SendStepData
  479.  
  480.         netgame.SetObjectState(objname,0)
  481.  
  482.         if(OnJoinFunc != ""):
  483.             OnJoinFunc(id,objname,name,race,weapon,shield)
  484.  
  485.         #Bladex.AddScheduledFunc(Bladex.GetTime()+5.0, CheckFreeSlot,(objname,))
  486.         #Bladex.AddScheduledFunc(Bladex.GetTime()+6.0,FillFrags,())
  487.             
  488.         
  489.  
  490.     
  491.     
  492.     def ByeFunc(i,s):
  493.         global PlayersList
  494.         global DarBola
  495.         
  496.         id = SearchPlayerId(i)
  497.         if id != -1:
  498.             PlayersList.remove(PlayersList[id])
  499.             DarBola = 1
  500.             FreePlayerSlot(s)            
  501.             pj = Bladex.GetEntity(s)
  502.             pj.Life = -1            
  503.             Bladex.AddScheduledFunc(Bladex.GetTime()+10.0, pj.SubscribeToList,("Pin",))            
  504.             Bladex.AddScheduledFunc(Bladex.GetTime()+11.0, FillFrags,         ())
  505.             print "Bye Bye "+s
  506.             NetScorer.AddChatString(GetPlayerDescriptor(s)+" escapa cobardemente!")
  507.         
  508.         
  509.     netgame.SetJoinPlayerFunc(JoinFunc)
  510.     netgame.SetByePlayerFunc(ByeFunc)
  511.     netgame.SetStringUserFunc(ReadUserString)
  512.     
  513.     def DecrementOneToPlayers():
  514.         for idx in range(len(PJ)):
  515.             i = SearchPlayerDescriptor(PJ[idx])
  516.             if i != -1:
  517.                 PlayersList[i][6]=PlayersList[i][6]-1
  518.         FillFrags()
  519.     
  520.         
  521.     def PlayerHurt( VictimName, AttackerName, Life, prevLife):
  522.         global PlayersList
  523.         global DarBola
  524.  
  525.         print VictimName+" <- "+AttackerName+" Life:"+`Life`+" Previous life:"+`prevLife`
  526.         if Life <= 0:
  527.             if prevLife > 0:                
  528.                 x = SearchPlayerDescriptor(AttackerName)
  529.                 if x != -1:
  530.                     NetScorer.AddChatString(GetPlayerDescriptor(VictimName)+" fue destrozado por "+GetPlayerDescriptor(AttackerName))
  531.                     DarBola = 1
  532.                     Bladex.AddScheduledFunc(Bladex.GetTime()+5.0,FreePlayerSlot,(VictimName,))
  533.                     Bladex.GetEntity(VictimName).ImDeadFunc(VictimName)
  534.                 else:
  535.                     DecrementOneToPlayers()
  536.                     if AttackerName == "BigFall":                        
  537.                         NetScorer.AddChatString(GetPlayerDescriptor(VictimName)+" cae al vacio")
  538.                         DarBola = 1
  539.                         Bladex.AddScheduledFunc(Bladex.GetTime()+0.01,FreePlayerSlot,(VictimName,))
  540.                     elif AttackerName == "Fall":
  541.                         NetScorer.AddChatString(GetPlayerDescriptor(VictimName)+" se dio contra el suelo")
  542.                         Bladex.AddScheduledFunc(Bladex.GetTime()+5.0,FreePlayerSlot,(VictimName,))
  543.                         Bladex.GetEntity(VictimName).ImDeadFunc(VictimName)
  544.                     elif AttackerName == "Lava":
  545.                         NetScorer.AddChatString(GetPlayerDescriptor(VictimName)+" incinerado")
  546.                         Bladex.AddScheduledFunc(Bladex.GetTime()+10.0,FreePlayerSlot,(VictimName,))
  547.                         Bladex.GetEntity(VictimName).ImDeadFunc(VictimName)
  548.     
  549.     Damage.PlayerHitFunc = PlayerHurt
  550.     
  551.     FillFrags()
  552.     char.SendTriggerSectorMsgs=1    
  553.     
  554.     def SendStepData(personaje):
  555.         netgame.CallEventSound(personaje,4)
  556.     
  557.     char.OnStepFunc = SendStepData
  558.     print "Server:Kombat Mode"
  559.     #--------------------[ /\ Server Kombat module /\ ]--------------------------#
  560. else:
  561.     #--------------------[ \/ Client Kombat module \/ ]--------------------------#
  562.  
  563.     ################################### Pa' todos lo cliente ###################################
  564.     TajoMutilacion=Bladex.CreateSound('..\\..\\sounds\\golpe-arma-escudo.wav', 'TajoMutilacion_Red')
  565.     TajoCortante=Bladex.CreateSound('..\\..\\sounds\\corte-carne-2.wav', 'TajoCortante')
  566.     
  567.     import Blood
  568.     def ClientDamage(EntityName):
  569.                 
  570.         en = Bladex.GetEntity(EntityName)
  571.         if NetMisc.OnDamageFunc(en):
  572.             return
  573.         
  574.         Blood.BleedingImpact(en, en.Position[0], en.Position[1], en.Position[2], 0,10000,0,  0,   0,0,0,   0,0,0  )
  575.         TajoCortante.Play(       en.Position[0], en.Position[1], en.Position[2], 0)
  576.         
  577.         
  578.     netgame.SetClientDamageFunc(ClientDamage)
  579.     
  580.     def Mutilate(pj_name,obj_name,x,y,z,nx,ny,nz,node):
  581.         en = Bladex.GetEntity(pj_name)
  582.         TajoMutilacion.Play(en.Position[0], en.Position[1], en.Position[2], 0)
  583.         Blood.Mutilate(pj_name,obj_name,x,y,z,nx,ny,nz,node)
  584.     
  585.     netgame.SetMutilaFunc(Mutilate)
  586.     
  587.     def ClientSoundEvent(s,i):        
  588.         if i == 4:
  589.             hit_ent = Bladex.GetEntity(s)
  590.             if hit_ent.Name[0:6]=="Player":
  591.                 PlayNetStepSound(hit_ent)
  592.             else:
  593.                 Reference.DefaultObjectData[hit_ent.Kind][3].Play(hit_ent.Position[0], hit_ent.Position[1], hit_ent.Position[2], 0)
  594.         elif i == 5:
  595.             Breakings.PlayBreakSound(s)
  596.         else:
  597.             print "Error Sound event ",s,i
  598.             
  599.  
  600.     netgame.SetSoundFunc(ClientSoundEvent)
  601.     
  602.     def ByeFunc(i,s):
  603.         NetMisc.Disconnect()
  604.         
  605.     netgame.SetByePlayerFunc(ByeFunc)
  606.         
  607.     ################################### Pa' todos lo cliente ###################################
  608.  
  609.  
  610.     PJ=["","","","","","","","","",""]
  611.     
  612.     class ClientData:
  613.         pass
  614.     
  615.     def ReadUserString(id,type,cad):
  616.         print `type`+" : "+cad
  617.         if  (type==Netval.NET_GAME_FRAGS):
  618.             NetScorer.wPlayersFrags.SetText(cad)
  619.             NetScorer.wFragList.SetText(cad)
  620.         elif(type==Netval.NET_GAME_STATUS):
  621.             if   cad == "E":
  622.                 NetScorer.ShowFragLimit(0)
  623.                 sonido_excelent.Play(char.Position[0], char.Position[1], char.Position[2], 0)
  624.             elif cad == "F":
  625.                 NetScorer.ShowFragLimit(1)
  626.                 netgame.ClearPools()
  627.                 sonido_fight.Play(char.Position[0], char.Position[1], char.Position[2], 0)
  628.                 if isOnGame(netgame.GetClientId()):
  629.                     EndWatchMode()
  630.                 else:
  631.                     StartWatchMode()
  632.                 StartCamera()
  633.         elif(type<=10):
  634.             PJ[type-Netval.NET_GAME_KOMBATERS] =     cad[0:string.find(cad,"*")]
  635.             pl = Bladex.GetEntity(NetMisc.GetClientPlayerId(cad[0:string.find(cad,"*")]))
  636.             pl.Data = ClientData()
  637.             pl.Data.last_frwdup = 0
  638.             pl.Data.last_brwdup = 0
  639.             pl.Data.NetLevel = string.atoi(cad[string.find(cad,"*")+1:string.find(cad,"?")])
  640.             pl.Data.NetLife  = string.atoi(cad[string.find(cad,"?")+1:])
  641.                                 
  642.                                 
  643.             if isOnGame(netgame.GetClientId()):
  644.                 EndWatchMode()
  645.             else:
  646.                 StartWatchMode()
  647.         elif(type==Netval.NET_GAME_IN_COMBAT):
  648.             NetScorer.wPlayersVS.SetText(cad)
  649.         elif(type==Netval.NET_GAME_CHAT_STRING):
  650.             NetScorer.ChatClientString(cad)
  651.         else:
  652.             Actions.ClientCallBack(id,type,cad)
  653.             NetMisc.ReadUserString(id,type,cad)
  654.  
  655.  
  656.     
  657.     netgame.SendUserString(Netval.NET_GAME_STATUS,netgame.GetClientId()) # FIGHT !            
  658.             
  659.     StartWatchMode()
  660.     netgame.SetStringUserFunc(ReadUserString)
  661.     cam = Bladex.GetEntity("Camera")
  662.     cam.PViewType = 0
  663.     print "Client:Kombat Mode"
  664.     #--------------------[ /\ Client Kombat module /\ ]--------------------------#
  665.     
  666.  
  667. # solo para dos jugadores modo Kombat
  668. def AhoraSiEncarate(EntityName):    
  669.     CHAR = Bladex.GetEntity(EntityName)
  670.     if PJ[0] != EntityName :
  671.         CHAR.SetActiveEnemy(Bladex.GetEntity(PJ[0]))
  672.     else:
  673.         CHAR.SetActiveEnemy(Bladex.GetEntity(PJ[1]))
  674.  
  675. def Encarate(EntityName="Player1"):
  676.     Bladex.AddScheduledFunc(Bladex.GetTime()+0.125, AhoraSiEncarate,(EntityName,))
  677.  
  678. def xxxSwitchFragViewer(xx=0,xxx=0,xxxxx=0):
  679.     NetScorer.SwitchFragViewer()
  680.  
  681. def NetBinds(PlayerName):
  682.     Bladex.AddBoundFunc("Select Enemy",acts.DefArgWrapper (PlayerName, Encarate))
  683.     Bladex.AddBoundFunc("Show Scorer", acts.DefArgWrapper (PlayerName, xxxSwitchFragViewer))
  684.  
  685. acts.NetBinds = NetBinds
  686.  
  687. netgame.Bind("Select Enemy",   Encarate,0)