home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 2 (DVD) / XENIADVD2.iso / Patch / Project Nomads / pnomads_patch2_eng.exe / MAINDIR / Run / scripts / client.tcl next >
Encoding:
Text File  |  2002-09-27  |  4.8 KB  |  185 lines

  1. #
  2. # client.tcl
  3. #
  4. # Multiplayer client specific win/loose handling.
  5. #
  6.  
  7.  
  8. # Client looses game
  9. proc client_loose {} {
  10.  
  11.     puts "\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n"
  12.     puts "You loose :(\n"
  13.     puts "\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n"
  14.     
  15.     # Get user clan
  16.     set clan [/world.getuserclan]
  17.     if {$clan == "null"} {
  18.         return
  19.     }
  20.     
  21.     # Remove Handcontrol.
  22.     /world.unsethandcontrol
  23.  
  24.     # Drop artefacts from character's belt.
  25.     set character [$clan.getmaennel]
  26.     if {$character != "null"} {
  27.         drop_artefacts $character
  28.     }
  29.     
  30.     # Release all objects in clan except island
  31.     release_objects $clan
  32.     
  33.     # Make sure there is no empty user clan! (Empty user clans are always
  34.     # trouble...)
  35.     $clan.setasuser false
  36.  
  37.     # Provide overview of level.
  38.     /world.resetviewer
  39.     /world.setviewer2 "/world/viewers/freeviewer"
  40.     /world/viewers/freeviewer.overview
  41.     
  42.     # Open ingame `loose' menu (If menu is open, close it).
  43.     if {[/sys/servers/menuhandler.menuopen] == "true"} {
  44.         /sys/servers/menuhandler.closemenu
  45.     }
  46.     /sys/servers/menuhandler.openmenu "multiplayer_loose"
  47.     /sys/servers/menuhandler.reset
  48. }
  49.  
  50.  
  51. # Client wins game
  52. proc client_win {} {
  53.  
  54.     puts "\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n"
  55.     puts "You win :)\n"
  56.     puts "\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n"
  57.     
  58.     # Remove Handcontrol.
  59.     /game/handler/search.sethaircrossowner "null"
  60.     /world.unsethandcontrol
  61.  
  62.     # Provide overview of level.
  63.     /world.resetviewer
  64.     /world.setviewer2 "/world/viewers/freeviewer"
  65.     /world/viewers/freeviewer.overview
  66.         
  67.     # Open ingame `win' menu (If menu is open, close it).
  68.     if {[/sys/servers/menuhandler.menuopen] == "true"} {
  69.         /sys/servers/menuhandler.closemenu
  70.     }
  71.     /sys/servers/menuhandler.openmenu "multiplayer_win"
  72.     /sys/servers/menuhandler.reset
  73. }
  74.  
  75.  
  76. # Host left game
  77. proc connection_lost {} {
  78.  
  79.     puts "*** CONNECTION LOST! \n"
  80.  
  81.     # Get user clan
  82.     set clan [/world.getuserclan]
  83.     if {$clan == "null"} {
  84.         return
  85.     }
  86.     
  87.     # Remove Handcontrol.
  88.     /world.unsethandcontrol
  89.  
  90.     # Drop artefacts from character's belt.
  91.     set character [$clan.getmaennel]
  92.     if {$character != "null"} {
  93.         drop_artefacts $character
  94.     }
  95.     
  96.     # Release all objects in clan except island
  97.     release_objects $clan
  98.     
  99.     # Make sure there is no empty user clan! (Empty user clans are always
  100.     # trouble...)
  101.     $clan.setasuser false
  102.  
  103.     # Provide overview of level.
  104.     /world.resetviewer
  105.     /world.setviewer2 "/world/viewers/freeviewer"
  106.     /world/viewers/freeviewer.overview
  107.     
  108.     # Session schliessen, damit keine weiteren Messages angenommen werden
  109.     /world.closesession
  110.  
  111.     # Open `connection lost' menu
  112.     if {[/sys/servers/menuhandler.menuopen] == "false"} {
  113.     
  114.         /sys/servers/menuhandler.openmenu "connection_lost"
  115.         /sys/servers/menuhandler.reset
  116.     }
  117. }
  118.  
  119. # Respawn player at character starting position given by own island.
  120. proc respawn_character {} {
  121.     
  122.     set clan [/world.getuserclan]
  123.     if {$clan != "null"} {
  124.     
  125.         set character [$clan.getmaennel]
  126.         set island [$clan.getplayerisland]
  127.         
  128.         if {$character != "null"} {
  129.             if {[$character.getstate] == "gameend"} {
  130.                 if {[$character.isshadow] == "false"} {
  131.                     puts "*** Respawn character $character"
  132.  
  133.                     # Drop players artefacts
  134.                     drop_artefacts $character
  135.                     
  136.                     # Move player back to island.
  137.                     $character.respawn
  138.                     $character.setstate "normal"
  139.                     $character.setenergy 1
  140.                 }
  141.             }
  142.         }
  143.     }
  144. }
  145.  
  146. # Drop all artefacts from character's belt to character's position.
  147. proc drop_artefacts {character} {
  148.  
  149.     set artefacts [$character.artefactlist]
  150.     
  151.     puts "*** Drop artefacts. "
  152.     
  153.     set pos [$character.getposition]
  154.     set env_clan [/world.getenvironmentclan]
  155.     set clan [$character.getclan]
  156.  
  157.     foreach i $artefacts {
  158.         $character.takeoutartefact $i
  159.         $i.setposition [lindex $pos 0] [expr [lindex $pos 1] + 3] [lindex $pos 2]
  160.         
  161.         if {$clan != "null"} {
  162.             if {$env_clan != "null"} {
  163.                 $clan.moveobjecttoclan [$i.getfullname] [$env_clan.getclanid]
  164.             }
  165.         }
  166.     }
  167. }
  168.  
  169. # Release all objects in `clan' except for island.
  170. proc release_objects {clan} {
  171.  
  172.     # Iterate through objects in clan
  173.     for {set i [$clan.gethead]} \
  174.         {$i != "null"} \
  175.         {set i [$i.getsucc]} {
  176.  
  177.         # Look for lighthouse
  178.         if {[$i.isvehicleclass "concret.nature.island"] == "false"} {
  179.  
  180.             $i.setremoveable true
  181.         }
  182.     }
  183. }
  184.  
  185.