home *** CD-ROM | disk | FTP | other *** search
/ Game.EXE 2001 January / Game.EXE_01_2001.iso / demos / Blade of Darkness / data1.cab / Program_Executable_Files / Scripts / kombat.py < prev    next >
Encoding:
Text File  |  2000-11-16  |  19.2 KB  |  709 lines

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