home *** CD-ROM | disk | FTP | other *** search
- import netgame
- import Basic_Funcs
- import Damage
- import Actions
- import Netval
- import NetWeapon
- import NetScorer
- import Reference
- import Breakings
- import string
- import NetMisc
- import acts
-
-
- # Estructura de mensajes:
- # 0 (Frags)
- # 1 (Ordenes)
- # 2..10 (Jugador activo)
- #
- PJ = []
-
- OnStartRoundFunc = ""
- OnJoinFunc = ""
-
- CameraName = ""
- CameraChar = ""
- def CameraBreak(Camera,frame):
- global CameraChar
- cam = Bladex.GetEntity("Camera")
- cam.SetPersonView(CameraChar)
- cam.Cut()
- print "Camera breaks to ",CameraChar
-
- def SetCameraData(i,c):
- global CameraName
- global CameraChar
-
- CameraName = "Player"+`i`+".cam"
- CameraChar = c
- NetScorer.SetNetPlayerScorer(c)
-
-
- def StartCamera():
- global CameraName
- global CameraChar
- global CameraFrames
-
- cam = Bladex.GetEntity("Camera")
- cam.SetMaxCamera(CameraName,0,CameraFrames)
- cam.AddCameraEvent( -1,CameraBreak)
- Bladex.SetListenerPosition(1)
- print "Camera goes to ",CameraChar
-
-
- sonido_fight=Bladex.CreateSound("..\\..\\Sounds\\fight.wav","FIGHT")
- sonido_fight.MaxDistance=1000000.0
- sonido_fight.MinDistance=1000000.0
-
- sonido_excelent = Bladex.CreateSound("..\\..\\Sounds\\excelent.wav","EXELENT")
- sonido_excelent.MaxDistance = 1000000.0
- sonido_excelent.MinDistance=1000000.0
- FRAG_LIMIT = 6 # should be modificable
-
- def FreeInventory(EntityName):
- CHAR = Bladex.GetEntity(EntityName)
- INV = CHAR.GetInventory()
- INV.LinkBack("None")
- INV.LinkLeftHand("None")
- INV.LinkRightHand("None")
- INV.CycleShields()
- while INV.GetSelectedShield():
- o = Bladex.GetEntity(INV.GetSelectedShield())
- Actions.RemoveFromInventory(CHAR,o,"")
- o.SubscribeToList("Pin")
- INV.CycleShields()
-
- INV.CycleWeapons()
- while INV.GetSelectedWeapon():
- o = Bladex.GetEntity(INV.GetSelectedWeapon())
- Actions.RemoveFromInventory(CHAR,o,"")
- o.SubscribeToList("Pin")
- INV.CycleWeapons()
-
- l = []
- for i in range(CHAR.GetNChildren()):
- l.append(CHAR.GetChild(i))
-
- CHAR.UnlinkChildren()
- for i in l:
- Bladex.GetEntity(i).SubscribeToList("Pin")
-
-
- def StartWatchMode():
- #Bladex.DeactivateInput() # en modo espera
- i = 0
-
- NetScorer.wStatusGame.SetText("OBSERVER MODE")
- if netgame.GetNetState() == 1:
- for xx in PJ:
- i=i+1
- if xx!="":
- netgame.SetPersonView(xx)
- SetCameraData(i,xx)
- Bladex.GetEntity("Camera").Cut()
- return
- else:
- for xx in PJ:
- i=i+1
- if xx!="":
- if(xx == "Player1"):
- SetCameraData(i,"PlayerX")
- netgame.SetPersonView("PlayerX")
- Bladex.GetEntity("Camera").Cut()
- return
- elif(xx == netgame.GetClientId()):
- SetCameraData(i,"Player1")
- netgame.SetPersonView("Player1")
- Bladex.GetEntity("Camera").Cut()
- return
- else:
- netgame.SetPersonView(xx)
- SetCameraData(i,xx)
- Bladex.GetEntity("Camera").Cut()
- return
-
- def EndWatchMode():
- NetScorer.wStatusGame.SetText("")
- #Bladex.ActivateInput()
- netgame.SetPersonView("Player1")
- Bladex.GetEntity("Camera").Cut()
- if netgame.GetNetState() == 1:
- xx = "Player1"
- else:
- xx = netgame.GetClientId()
-
- for i in range(len(PJ)):
- if PJ[i] == xx:
- SetCameraData(i+1,"Player1")
-
-
-
- def isOnGame(name):
- for i in PJ:
- if i==name:
- return 1
- return 0
-
-
-
-
- if netgame.GetNetState() == 1:
- #--------------------[ \/ Server Kombat module \/ ]--------------------------#
- del Damage.SpecialDamageFuncs['Venom'] # no venom damage here... sorry Enrik
-
- P_KB = 0 # players in kombat
- Combat = 0
- DarBola = 1
- FRAG_LIMIT = NetMisc.FRAGLIMIT
-
- #----------------------------
- def Calculate_P_KB():
- global P_KB
- P_KB = 0 # players in kombat
- for i in PJ:
- if i!="":
- P_KB = P_KB + 1
-
-
-
- def RestartCarnage():
- NetScorer.ShowFragLimit(1)
- for a in PlayersList:
- a[6] = 0
-
- for a in PJ:
- CheckFreeSlot(PlayersList[0][1])
- FillFrags()
-
- def ReadUserString(id,type,cad):
- print `type`+" : "+cad
- if(type==Netval.NET_GAME_CHAT_STRING):
- NetScorer.AddChatString(cad)
- print "chat : "+cad
- elif(type==Netval.NET_GAME_STATUS): # on join!
- Bladex.AddScheduledFunc(Bladex.GetTime()+5.0, CheckFreeSlot,(cad,))
- Bladex.AddScheduledFunc(Bladex.GetTime()+6.0,FillFrags,())
- print "Request for join : "+cad
- else:
- Actions.ServerCallBack(id,type,cad)
- NetMisc.ReadUserString(id,type,cad)
-
- PlayersList=[[-1,char.Name,netdata[0],netdata[1],netdata[2],netdata[3],0]] # Lista de jugadores
- # 0:netid 1:object 2:Name 3:Race 4:Kind 5:Handicap 6:Frags
-
- def qSort(l, r):
- i = l
- j = r
- x = PlayersList[(l+r)/2]
- while(i <= j):
- while (PlayersList[i][6] > x[6] ):
- i=i+1
- while (x[6] > PlayersList[j][6]):
- j=j-1
-
- if (i <= j):
- y = PlayersList[i]
- PlayersList[i] = PlayersList[j]
- PlayersList[j] = y
- i = i + 1
- j = i - 1
-
- if (l < j):
- qSort(l, j)
- if (i < r):
- qSort(i, r)
-
-
- def SearchPlayerDescriptor(entity):
- global PlayersList
- for i in range(len(PlayersList)):
- if PlayersList[i][1] == entity:
- return i
- return -1
-
- def GetPlayerDescriptor(entity):
- global PlayersList
- for i in range(len(PlayersList)):
- if PlayersList[i][1] == entity:
- return PlayersList[i][2]
- return ""
-
- def SearchPlayerId(id):
- global PlayersList
- for i in range(len(PlayersList)):
- if PlayersList[i][0] == id:
- return i
- return -1
-
-
- def ReSpawnPlayer(EntityName):
- ent = Bladex.GetEntity(EntityName)
- ent.Data.ReSpawn(EntityName)
- ent.Level = 0
- ent.PartialLevel = 0
- FreeInventory(EntityName)
- INV = ent.GetInventory()
- i = SearchPlayerDescriptor(EntityName)
-
- handicap = int(PlayersList[i][5])
- if(NetMisc.ARENAHANDICAP < handicap):
- handicap = NetMisc.ARENAHANDICAP
- NetWeapon.AddStandardWeapons2Char(EntityName,PlayersList[i][3],handicap)
- ent.LaunchAnimation("RLX")
-
-
-
-
-
- def FillFrags():
- s=""
- for x in PlayersList:
- s = s+"\n"+x[2]+": "+`x[6]`
- NetScorer.wPlayersFrags.SetText(s)
- NetScorer.wFragList.SetText(s)
- netgame.SendUserString(Netval.NET_GAME_FRAGS,s)
-
- for i in range(len(PJInit)):
- PJ.append("")
-
-
- #inicia el combate
- def StartKombat():
- global Combat
- # update the VS label
- s = ""
- for i in PJ:
- idx = SearchPlayerDescriptor(i)
- if(idx != -1):
- s = s + PlayersList[idx][2] + " VS "
- s = s[0:len(s)-4]
- NetScorer.wPlayersVS.SetText(s)
- netgame.SendUserString(Netval.NET_GAME_IN_COMBAT,s)
-
- if isOnGame("Player1"):
- EndWatchMode()
- netgame.ClearPools()
- sonido_fight.Play(char.Position[0], char.Position[1], char.Position[2], 0)
- Combat = 1
- for i in range(len(PJ)):
- if PJ[i]!="":
- pl = Bladex.GetEntity(PJ[i])
- netgame.SendUserString(Netval.NET_GAME_KOMBATERS+i,PJ[i]+"*"+str(int(pl.Data.NetLevel))+"?"+str(int(pl.Data.NetLife)))
- Bladex.AddScheduledFunc(Bladex.GetTime()+0.5, netgame.SendUserString,(Netval.NET_GAME_STATUS,'F',))
-
-
- for i in range(len(PJ)):
- ent = Bladex.GetEntity(PJ[i])
- ent.Position = PJInit[i][0], PJInit[i][1], PJInit[i][2]
- ent.Angle = PJInit[i][3]
- ent.Wuea = Reference.WUEA_ENDED
- ent.SetTmpAnmFlags(1,1,1,0,5,1,0)
- ent.LaunchAnmType("Rlx")
- ent.SetOnFloor()
-
- Actions.QuickTurnToFaceEntity(PJ[1],PJ[0])
- Bladex.GetEntity(PJ[1]).SetActiveEnemy(Bladex.GetEntity(PJ[0]))
- Actions.QuickTurnToFaceEntity(PJ[0],PJ[1])
- Bladex.GetEntity(PJ[0]).SetActiveEnemy(Bladex.GetEntity(PJ[1]))
-
-
- if(OnStartRoundFunc != ""):
- OnStartRoundFunc()
- NetMisc.OnStartRoundFunc()
- Bladex.AddScheduledFunc(Bladex.GetTime()+0.0, StartCamera,())
-
- def SetAtEndOfQueue(EntityName):
-
- i = SearchPlayerDescriptor(EntityName)
- aux = PlayersList[i]
- PlayersList.remove(PlayersList[i])
- PlayersList.append(aux)
-
-
- # se fija si hay algun lugar libre para ponerlo en modo combate
- def CheckFreeSlot(EntityName):
- global P_KB
- global Combat
-
- print "CheckFreeSlot("+EntityName+")"
-
- Calculate_P_KB()
-
- if Combat == 1:
- return
-
- if isOnGame(EntityName):
- SetAtEndOfQueue(EntityName)
- print "Intento fallido : "+EntityName+" esta luchando"
- return
-
- ent = Bladex.GetEntity(EntityName)
-
- if ent == None:
- return
-
- for i in range(len(PJ)):
- if PJ[i] == "": # Slot libre!
- PJ[i] = EntityName
- ReSpawnPlayer(EntityName)
- netgame.SetObjectState(EntityName,1)
- ent.Position = PJInit[i][0], PJInit[i][1], PJInit[i][2]
- ent.Angle = PJInit[i][3]
- ent.Wuea = Reference.WUEA_ENDED
- ent.SetTmpAnmFlags(1,1,1,0,5,1,0)
- ent.LaunchAnmType("Rlx")
- ent.SetOnFloor()
- P_KB = P_KB+1
- SetAtEndOfQueue(EntityName)
- if P_KB == len(PJ): # Start the Kombat?
- StartKombat()
- return
-
- # just one will survive... Hilander, the inmortal.
- def EndOfKombat():
- global Combat
- global PJ
- global FRAG_LIMIT
- global DarBola
- global P_KB
-
- print "End Of Kombat"
- NetMisc.OnEndRoundFunc()
-
- # assign a round to the player x
- Combat = 0
- xPlayer = ""
- frags = 0
- quecagada = 0
-
- for name in PJ:
- if name!="":
- if(quecagada==0):
- quecagada = 1
- x = SearchPlayerDescriptor(name)
- if(DarBola == 1):
- PlayersList[x][6] = PlayersList[x][6]+1
- frags = PlayersList[x][6]
-
- DarBola = 0
- FillFrags()
- xPlayer = name
- NetScorer.AddChatString(GetPlayerDescriptor(xPlayer)+" gana la batalla!")
- FreePlayerSlot(name,0)
- else:
- name = ""
- print "Algo malo esta pasando..."
- P_KB = 0
-
- CheckFreeSlot(xPlayer)
- if(FRAG_LIMIT<=frags):
- qSort(0,len(PlayersList)-1)
- FillFrags()
- netgame.SendUserString(Netval.NET_GAME_STATUS,'E') # End Of Carnage
- sonido_excelent.Play(char.Position[0], char.Position[1], char.Position[2], 0)
- NetScorer.ShowFragLimit(0)
- Bladex.AddScheduledFunc(Bladex.GetTime()+7.0, NetMisc.ServerNextLevel,())
- else:
- NetScorer.ShowFragLimit(1)
- if(len(PlayersList)<len(PJ)):
- return
-
- while Combat == 0:
- CheckFreeSlot(PlayersList[0][1])
-
-
-
-
- # Some player dies...
- def FreePlayerSlot(EntityName,nactual=1):
- global P_KB
-
- Calculate_P_KB()
-
- print "FreePlayerSlot("+EntityName+", "+`nactual`+")"
- if (EntityName == ""):
- print "Aqui pasa algo raro"
- return
-
- for i in range(len(PJ)):
- if(PJ[i] == EntityName):
- ent = Bladex.GetEntity(EntityName)
- ent.Position = netgame.GetNextPosition()
- ent.Wuea = Reference.WUEA_ENDED
- ent.SetTmpAnmFlags(1,1,1,0,5,1,0)
- ent.LaunchAnmType("Rlx")
- ent.SetOnFloor()
- PJ[i] = ""
-
- netgame.SetObjectState(EntityName,0)
-
- # hey! is me!
- if(EntityName == "Player1"):
- StartWatchMode()
-
- P_KB = P_KB - 1
- FreeInventory(EntityName)
- if nactual:
- if P_KB == 1:
- EndOfKombat()
- elif P_KB == 0:
- CheckFreeSlot(EntityName)
-
-
-
-
-
-
- Bladex.AddScheduledFunc(Bladex.GetTime()+0.0, CheckFreeSlot,("Player1",)) # siempre al inicio el servidor...
- NetScorer.wStatusGame.SetText("OBSERVER MODE")
-
-
- def JoinFunc(id,objname,name,race,weapon,shield):
- PlayersList.insert(0,[ id, objname, name, race, weapon, shield, 0]) # Lo agrega a la lista de jugadores con frags = 0
- NetScorer.AddChatString(name+" entra a la carniceria")
-
- CHAR = Bladex.GetEntity(objname)
- CHAR.Position = netgame.GetNextPosition()
- CHAR.Wuea = Reference.WUEA_ENDED
- CHAR.SetTmpAnmFlags(1,1,1,0,5,1,0)
- CHAR.LaunchAnmType("Rlx")
- CHAR.SetOnFloor()
- CHAR.Level=0
- CHAR.PartialLevel=0
- CHAR.SendTriggerSectorMsgs=1
- CHAR.Data=Basic_Funcs.PlayerPerson(CHAR)
- CHAR.Life = 1000
-
- CHAR.OnStepFunc = SendStepData
-
- netgame.SetObjectState(objname,0)
-
- if(OnJoinFunc != ""):
- OnJoinFunc(id,objname,name,race,weapon,shield)
-
- #Bladex.AddScheduledFunc(Bladex.GetTime()+5.0, CheckFreeSlot,(objname,))
- #Bladex.AddScheduledFunc(Bladex.GetTime()+6.0,FillFrags,())
-
-
-
-
-
- def ByeFunc(i,s):
- global PlayersList
- global DarBola
-
- id = SearchPlayerId(i)
- if id != -1:
- PlayersList.remove(PlayersList[id])
- DarBola = 1
- FreePlayerSlot(s)
- pj = Bladex.GetEntity(s)
- pj.Life = -1
- Bladex.AddScheduledFunc(Bladex.GetTime()+10.0, pj.SubscribeToList,("Pin",))
- Bladex.AddScheduledFunc(Bladex.GetTime()+11.0, FillFrags, ())
- print "Bye Bye "+s
- NetScorer.AddChatString(GetPlayerDescriptor(s)+" escapa cobardemente!")
-
-
- netgame.SetJoinPlayerFunc(JoinFunc)
- netgame.SetByePlayerFunc(ByeFunc)
- netgame.SetStringUserFunc(ReadUserString)
-
- def DecrementOneToPlayers():
- for idx in range(len(PJ)):
- i = SearchPlayerDescriptor(PJ[idx])
- if i != -1:
- PlayersList[i][6]=PlayersList[i][6]-1
- FillFrags()
-
-
- def PlayerHurt( VictimName, AttackerName, Life, prevLife):
- global PlayersList
- global DarBola
-
- print VictimName+" <- "+AttackerName+" Life:"+`Life`+" Previous life:"+`prevLife`
- if Life <= 0:
- if prevLife > 0:
- x = SearchPlayerDescriptor(AttackerName)
- if x != -1:
- NetScorer.AddChatString(GetPlayerDescriptor(VictimName)+" fue destrozado por "+GetPlayerDescriptor(AttackerName))
- DarBola = 1
- Bladex.AddScheduledFunc(Bladex.GetTime()+5.0,FreePlayerSlot,(VictimName,))
- Bladex.GetEntity(VictimName).ImDeadFunc(VictimName)
- else:
- DecrementOneToPlayers()
- if AttackerName == "BigFall":
- NetScorer.AddChatString(GetPlayerDescriptor(VictimName)+" cae al vacio")
- DarBola = 1
- Bladex.AddScheduledFunc(Bladex.GetTime()+0.01,FreePlayerSlot,(VictimName,))
- elif AttackerName == "Fall":
- NetScorer.AddChatString(GetPlayerDescriptor(VictimName)+" se dio contra el suelo")
- Bladex.AddScheduledFunc(Bladex.GetTime()+5.0,FreePlayerSlot,(VictimName,))
- Bladex.GetEntity(VictimName).ImDeadFunc(VictimName)
- elif AttackerName == "Lava":
- NetScorer.AddChatString(GetPlayerDescriptor(VictimName)+" incinerado")
- Bladex.AddScheduledFunc(Bladex.GetTime()+10.0,FreePlayerSlot,(VictimName,))
- Bladex.GetEntity(VictimName).ImDeadFunc(VictimName)
-
- Damage.PlayerHitFunc = PlayerHurt
-
- FillFrags()
- char.SendTriggerSectorMsgs=1
-
- def SendStepData(personaje):
- netgame.CallEventSound(personaje,4)
-
- char.OnStepFunc = SendStepData
- print "Server:Kombat Mode"
- #--------------------[ /\ Server Kombat module /\ ]--------------------------#
- else:
- #--------------------[ \/ Client Kombat module \/ ]--------------------------#
-
- ################################### Pa' todos lo cliente ###################################
- TajoMutilacion=Bladex.CreateSound('..\\..\\sounds\\golpe-arma-escudo.wav', 'TajoMutilacion_Red')
- TajoCortante=Bladex.CreateSound('..\\..\\sounds\\corte-carne-2.wav', 'TajoCortante')
-
- import Blood
- def ClientDamage(EntityName):
-
- en = Bladex.GetEntity(EntityName)
- if NetMisc.OnDamageFunc(en):
- return
-
- Blood.BleedingImpact(en, en.Position[0], en.Position[1], en.Position[2], 0,10000,0, 0, 0,0,0, 0,0,0 )
- TajoCortante.Play( en.Position[0], en.Position[1], en.Position[2], 0)
-
-
- netgame.SetClientDamageFunc(ClientDamage)
-
- def Mutilate(pj_name,obj_name,x,y,z,nx,ny,nz,node):
- en = Bladex.GetEntity(pj_name)
- TajoMutilacion.Play(en.Position[0], en.Position[1], en.Position[2], 0)
- Blood.Mutilate(pj_name,obj_name,x,y,z,nx,ny,nz,node)
-
- netgame.SetMutilaFunc(Mutilate)
-
- def ClientSoundEvent(s,i):
- if i == 4:
- hit_ent = Bladex.GetEntity(s)
- if hit_ent.Name[0:6]=="Player":
- PlayNetStepSound(hit_ent)
- else:
- Reference.DefaultObjectData[hit_ent.Kind][3].Play(hit_ent.Position[0], hit_ent.Position[1], hit_ent.Position[2], 0)
- elif i == 5:
- Breakings.PlayBreakSound(s)
- else:
- print "Error Sound event ",s,i
-
-
- netgame.SetSoundFunc(ClientSoundEvent)
-
- def ByeFunc(i,s):
- NetMisc.Disconnect()
-
- netgame.SetByePlayerFunc(ByeFunc)
-
- ################################### Pa' todos lo cliente ###################################
-
-
- PJ=["","","","","","","","","",""]
-
- class ClientData:
- pass
-
- def ReadUserString(id,type,cad):
- print `type`+" : "+cad
- if (type==Netval.NET_GAME_FRAGS):
- NetScorer.wPlayersFrags.SetText(cad)
- NetScorer.wFragList.SetText(cad)
- elif(type==Netval.NET_GAME_STATUS):
- if cad == "E":
- NetScorer.ShowFragLimit(0)
- sonido_excelent.Play(char.Position[0], char.Position[1], char.Position[2], 0)
- elif cad == "F":
- NetScorer.ShowFragLimit(1)
- netgame.ClearPools()
- sonido_fight.Play(char.Position[0], char.Position[1], char.Position[2], 0)
- if isOnGame(netgame.GetClientId()):
- EndWatchMode()
- else:
- StartWatchMode()
- StartCamera()
- elif(type<=10):
- PJ[type-Netval.NET_GAME_KOMBATERS] = cad[0:string.find(cad,"*")]
- pl = Bladex.GetEntity(NetMisc.GetClientPlayerId(cad[0:string.find(cad,"*")]))
- pl.Data = ClientData()
- pl.Data.last_frwdup = 0
- pl.Data.last_brwdup = 0
- pl.Data.NetLevel = string.atoi(cad[string.find(cad,"*")+1:string.find(cad,"?")])
- pl.Data.NetLife = string.atoi(cad[string.find(cad,"?")+1:])
-
-
- if isOnGame(netgame.GetClientId()):
- EndWatchMode()
- else:
- StartWatchMode()
- elif(type==Netval.NET_GAME_IN_COMBAT):
- NetScorer.wPlayersVS.SetText(cad)
- elif(type==Netval.NET_GAME_CHAT_STRING):
- NetScorer.ChatClientString(cad)
- else:
- Actions.ClientCallBack(id,type,cad)
- NetMisc.ReadUserString(id,type,cad)
-
-
-
- netgame.SendUserString(Netval.NET_GAME_STATUS,netgame.GetClientId()) # FIGHT !
-
- StartWatchMode()
- netgame.SetStringUserFunc(ReadUserString)
- cam = Bladex.GetEntity("Camera")
- cam.PViewType = 0
- print "Client:Kombat Mode"
- #--------------------[ /\ Client Kombat module /\ ]--------------------------#
-
-
- # solo para dos jugadores modo Kombat
- def AhoraSiEncarate(EntityName):
- CHAR = Bladex.GetEntity(EntityName)
- if PJ[0] != EntityName :
- CHAR.SetActiveEnemy(Bladex.GetEntity(PJ[0]))
- else:
- CHAR.SetActiveEnemy(Bladex.GetEntity(PJ[1]))
-
- def Encarate(EntityName="Player1"):
- Bladex.AddScheduledFunc(Bladex.GetTime()+0.125, AhoraSiEncarate,(EntityName,))
-
- def xxxSwitchFragViewer(xx=0,xxx=0,xxxxx=0):
- NetScorer.SwitchFragViewer()
-
- def NetBinds(PlayerName):
- Bladex.AddBoundFunc("Select Enemy",acts.DefArgWrapper (PlayerName, Encarate))
- Bladex.AddBoundFunc("Show Scorer", acts.DefArgWrapper (PlayerName, xxxSwitchFragViewer))
-
- acts.NetBinds = NetBinds
-
- netgame.Bind("Select Enemy", Encarate,0)