[nexuiz-commits] r6358 - in branches/nexuiz-2.0: . data/demos data/maps data/qcsrc/server data/qcsrc/server/tturrets/include data/qcsrc/server/tturrets/system data/qcsrc/server/tturrets/units server server/rcon2irc

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Mon Mar 30 03:41:45 EDT 2009


Author: div0
Date: 2009-03-30 03:41:39 -0400 (Mon, 30 Mar 2009)
New Revision: 6358

Added:
   branches/nexuiz-2.0/data/demos/bench1.dem
Modified:
   branches/nexuiz-2.0/.patchsets
   branches/nexuiz-2.0/data/maps/silvercity.bsp
   branches/nexuiz-2.0/data/maps/silvercity.map
   branches/nexuiz-2.0/data/maps/toxic.bsp
   branches/nexuiz-2.0/data/maps/toxic.map
   branches/nexuiz-2.0/data/qcsrc/server/bots.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets_early.qh
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_main.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_ewheel.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_machinegun.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc
   branches/nexuiz-2.0/server/help.cfg
   branches/nexuiz-2.0/server/rcon2irc/rbiserver.pl
   branches/nexuiz-2.0/server/rcon2irc/rcon2irc-example.conf
   branches/nexuiz-2.0/server/rcon2irc/rcon2irc.pl
Log:
r6349 | mand1nga | 2009-03-28 23:09:54 +0100 (Sat, 28 Mar 2009) | 4 lines
Added facilities for debugging tracewalk visually
Sligthly better water handling for tracewalk
Enable under water waypoint visualization when g_waypointeditor = 1
r6350 | m0rfar | 2009-03-29 13:34:15 +0200 (Sun, 29 Mar 2009) | 1 line
toxic: removed 2 dom points. and only allow 2 teams
r6351 | m0rfar | 2009-03-29 15:10:31 +0200 (Sun, 29 Mar 2009) | 1 line
removed a lot of dom points on silvercity
r6352 | esteel | 2009-03-29 15:53:24 +0200 (Sun, 29 Mar 2009) | 2 lines
fix typos and colored the Help-Nick green
r6353 | esteel | 2009-03-29 15:56:17 +0200 (Sun, 29 Mar 2009) | 2 lines
another typo.. seems i hate then vs than :-]
r6354 | m0rfar | 2009-03-29 21:50:42 +0200 (Sun, 29 Mar 2009) | 1 line
new benchmark demo with new code. called bench1
r6355 | tzork | 2009-03-29 23:47:59 +0200 (Sun, 29 Mar 2009) | 1 line
Fix warnings
r6356 | tzork | 2009-03-30 01:25:46 +0200 (Mon, 30 Mar 2009) | 6 lines
add spawnflags: 
TSF_TERRAINBASE - was already supported but hard coded 
TSF_NO_AMMO_REGEN - Disable ammo regeneration, only makes sense energy based turrets power by a reactor atm.
TSF_NO_PATHBREAK. - Stop moving units from leaving its path to chase targets
make ewheel and walker honor TSF_NO_PATHBREAK.
r6357 | div0 | 2009-03-30 09:38:20 +0200 (Mon, 30 Mar 2009) | 2 lines
new qnet auth


Modified: branches/nexuiz-2.0/.patchsets
===================================================================
--- branches/nexuiz-2.0/.patchsets	2009-03-30 07:38:20 UTC (rev 6357)
+++ branches/nexuiz-2.0/.patchsets	2009-03-30 07:41:39 UTC (rev 6358)
@@ -1,2 +1,2 @@
 master = svn://svn.icculus.org/nexuiz/trunk
-revisions_applied = 1-6039,6044-6347
+revisions_applied = 1-6039,6044-6357

Copied: branches/nexuiz-2.0/data/demos/bench1.dem (from rev 6357, trunk/data/demos/bench1.dem)
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/maps/silvercity.bsp
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/maps/silvercity.map
===================================================================
--- branches/nexuiz-2.0/data/maps/silvercity.map	2009-03-30 07:38:20 UTC (rev 6357)
+++ branches/nexuiz-2.0/data/maps/silvercity.map	2009-03-30 07:41:39 UTC (rev 6358)
@@ -8531,6 +8531,7 @@
 {
 "classname" "dom_team"
 "model" "models/domination/dom_unclaimed.md3"
+"origin" "0.000000 0.000000 -264.000000"
 }
 // entity 90
 {
@@ -8541,6 +8542,7 @@
 "netname" "^4Blue Team^3"
 "noise" "domination/claim.wav"
 "noise1" "domination/claim.wav"
+"origin" "0.000000 0.000000 -232.000000"
 }
 // entity 91
 {
@@ -8551,6 +8553,7 @@
 "netname" "^1Red Team^3"
 "noise" "domination/claim.wav"
 "noise1" "domination/claim.wav"
+"origin" "0.000000 0.000000 -200.000000"
 }
 // entity 92
 {
@@ -8561,6 +8564,7 @@
 "netname" "^6Pink Team^3"
 "noise" "domination/claim.wav"
 "noise1" "domination/claim.wav"
+"origin" "0.000000 0.000000 -176.000000"
 }
 // entity 93
 {
@@ -8571,6 +8575,7 @@
 "netname" "^3Yellow Team^3"
 "noise" "domination/claim.wav"
 "noise1" "domination/claim.wav"
+"origin" "0.000000 0.000000 -144.000000"
 }
 // entity 94
 {
@@ -8581,348 +8586,283 @@
 // entity 95
 {
 "classname" "dom_controlpoint"
-"message" "^3 has captured the ^1Upper Megahealth"
-"origin" "-240.000000 -10.000000 1376.000000"
-}
-// entity 96
-{
-"classname" "dom_controlpoint"
-"angle" "45"
-"message" "^3 has captured a ^1 Platform"
-"origin" "1450.000000 1430.000000 984.000000"
-}
-// entity 97
-{
-"classname" "dom_controlpoint"
-"angle" "-45"
-"message" "^3 has captured a ^1Platform"
-"origin" "1450.000000 -1430.000000 984.000000"
-}
-// entity 98
-{
-"classname" "dom_controlpoint"
-"angle" "45"
-"message" "^3 has captured a ^1Platform"
-"origin" "-1450.000000 -1430.000000 984.000000"
-}
-// entity 99
-{
-"classname" "dom_controlpoint"
-"angle" "-45"
-"message" "^3 has captured a ^1Platform"
-"origin" "-1450.000000 1430.000000 984.000000"
-}
-// entity 100
-{
-"classname" "dom_controlpoint"
 "message" "^3 has captured a ^1Bottom Controlpoint"
 "origin" "1970.000000 -250.000000 -296.000000"
 }
-// entity 101
+// entity 96
 {
 "classname" "dom_controlpoint"
 "angle" "90"
 "message" "^3 has captured the ^1Bottom Mortar"
 "origin" "-1500.000000 -1800.000000 -296.000000"
 }
-// entity 102
+// entity 97
 {
 "classname" "dom_controlpoint"
-"message" "^3 has captured the ^1Rocket Launcher"
-"origin" "330.000000 -220.000000 24.000000"
-}
-// entity 103
-{
-"classname" "dom_controlpoint"
 "angle" "90"
 "message" "^3 has captured the ^1Hallway"
 "origin" "-1500.000000 -225.000000 24.000000"
 }
-// entity 104
+// entity 98
 {
 "classname" "dom_controlpoint"
 "angle" "90"
 "message" "^3 has captured a ^1Middle Controlpoint"
 "origin" "150.000000 1850.000000 24.000000"
 }
-// entity 105
+// entity 99
 {
 "classname" "dom_controlpoint"
-"message" "^3 has captured a ^1Middle Controlpoint"
-"origin" "2000.000000 -230.000000 24.000000"
-}
-// entity 106
-{
-"classname" "dom_controlpoint"
 "message" "^3 has captured the ^1Middle Mortar"
-"origin" "1060.000000 -140.000000 216.000000"
+"origin" "1216.000000 -256.000000 216.000000"
 }
-// entity 107
+// entity 100
 {
-"classname" "dom_controlpoint"
-"angle" "90"
-"message" "^3 has captured a ^1Middle Controlpoint"
-"origin" "-1500.000000 -1800.000000 216.000000"
-}
-// entity 108
-{
-"classname" "dom_controlpoint"
-"message" "^3 has captured a ^1Middle Controlpoint"
-"origin" "-1500.000000 740.000000 216.000000"
-}
-// entity 109
-{
-"classname" "dom_controlpoint"
-"message" "^3 has captured the ^1 1337 Controlpoint"
-"origin" "1337.000000 1190.000000 216.000000"
-}
-// entity 110
-{
 "classname" "light"
 "light" "400"
 "origin" "928 288 72"
 }
-// entity 111
+// entity 101
 {
 "classname" "light"
 "light" "400"
 "origin" "928 -224 72"
 }
-// entity 112
+// entity 102
 {
 "classname" "light"
 "light" "400"
 "origin" "928 -736 72"
 }
-// entity 113
+// entity 103
 {
 "classname" "light"
 "light" "400"
 "origin" "1440 288 72"
 }
-// entity 114
+// entity 104
 {
 "classname" "light"
 "light" "400"
 "origin" "1440 -224 72"
 }
-// entity 115
+// entity 105
 {
 "classname" "light"
 "light" "400"
 "origin" "1440 -736 72"
 }
-// entity 116
+// entity 106
 {
 "classname" "light"
 "light" "400"
 "origin" "416 288 72"
 }
-// entity 117
+// entity 107
 {
 "classname" "light"
 "light" "400"
 "origin" "416 -224 72"
 }
-// entity 118
+// entity 108
 {
 "classname" "light"
 "light" "400"
 "origin" "416 -736 72"
 }
-// entity 119
+// entity 109
 {
 "classname" "light"
 "light" "400"
 "origin" "-1504 288 72"
 }
-// entity 120
+// entity 110
 {
 "classname" "light"
 "light" "400"
 "origin" "-1504 -224 72"
 }
-// entity 121
+// entity 111
 {
 "classname" "light"
 "light" "400"
 "origin" "-1504 -736 72"
 }
-// entity 122
+// entity 112
 {
 "classname" "light"
 "light" "400"
 "origin" "-1504 1824 72"
 }
-// entity 123
+// entity 113
 {
 "classname" "light"
 "light" "400"
 "origin" "-1504 1312 72"
 }
-// entity 124
+// entity 114
 {
 "classname" "light"
 "light" "400"
 "origin" "-1504 800 72"
 }
-// entity 125
+// entity 115
 {
 "classname" "light"
 "light" "400"
 "origin" "1440 800 72"
 }
-// entity 126
+// entity 116
 {
 "classname" "light"
 "light" "400"
 "origin" "1440 1312 72"
 }
-// entity 127
+// entity 117
 {
 "classname" "light"
 "light" "800"
 "origin" "416 -224 -168"
 }
-// entity 128
+// entity 118
 {
 "classname" "light"
 "light" "800"
 "origin" "-96 -736 -168"
 }
-// entity 129
+// entity 119
 {
 "classname" "light"
 "light" "800"
 "origin" "-608 -224 -168"
 }
-// entity 130
+// entity 120
 {
 "classname" "light"
 "light" "800"
 "origin" "-96 288 -168"
 }
-// entity 131
+// entity 121
 {
 "classname" "light"
 "light" "800"
 "origin" "1312 -224 -168"
 }
-// entity 132
+// entity 122
 {
 "classname" "light"
 "light" "800"
 "origin" "864 -736 -168"
 }
-// entity 133
+// entity 123
 {
 "classname" "light"
 "light" "800"
 "origin" "864 288 -168"
 }
-// entity 134
+// entity 124
 {
 "classname" "light"
 "light" "800"
 "origin" "-1504 -224 -168"
 }
-// entity 135
+// entity 125
 {
 "classname" "light"
 "light" "800"
 "origin" "-1056 -736 -168"
 }
-// entity 136
+// entity 126
 {
 "classname" "light"
 "light" "800"
 "origin" "-1056 288 -168"
 }
-// entity 137
+// entity 127
 {
 "classname" "light"
 "light" "400"
 "origin" "-800 -1888 -64"
 }
-// entity 138
+// entity 128
 {
 "classname" "light"
 "light" "400"
 "origin" "-1504 -1760 72"
 }
-// entity 139
+// entity 129
 {
 "classname" "light"
 "light" "400"
 "origin" "-1504 -1760 -248"
 }
-// entity 140
+// entity 130
 {
 "classname" "light"
 "light" "800"
 "origin" "1928 -224 -168"
 }
-// entity 141
+// entity 131
 {
 "classname" "light"
 "light" "800"
 "origin" "-1504 800 -168"
 }
-// entity 142
+// entity 132
 {
 "classname" "light"
 "light" "800"
 "origin" "-1504 1824 -168"
 }
-// entity 143
+// entity 133
 {
 "classname" "light"
 "light" "800"
 "origin" "1312 1824 -168"
 }
-// entity 144
+// entity 134
 {
 "classname" "light"
 "light" "800"
 "origin" "608 1824 -168"
 }
-// entity 145
+// entity 135
 {
 "classname" "light"
 "light" "800"
 "origin" "-608 1824 -168"
 }
-// entity 146
+// entity 136
 {
 "classname" "light"
 "light" "800"
 "origin" "1440 800 -168"
 }
-// entity 147
+// entity 137
 {
 "classname" "light"
 "light" "800"
 "origin" "416 288 -168"
 }
-// entity 148
+// entity 138
 {
 "classname" "light"
 "light" "800"
 "origin" "416 -736 -168"
 }
-// entity 149
+// entity 139
 {
 "classname" "light"
 "light" "800"
 "origin" "-608 288 -168"
 }
-// entity 150
+// entity 140
 {
 "classname" "light"
 "light" "800"
 "origin" "-608 -736 -168"
 }
-// entity 151
+// entity 141
 {
 "classname" "light"
 "light" "800"

Modified: branches/nexuiz-2.0/data/maps/toxic.bsp
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/maps/toxic.map
===================================================================
--- branches/nexuiz-2.0/data/maps/toxic.map	2009-03-30 07:38:20 UTC (rev 6357)
+++ branches/nexuiz-2.0/data/maps/toxic.map	2009-03-30 07:41:39 UTC (rev 6358)
@@ -12646,21 +12646,10 @@
 // entity 254
 {
 "classname" "dom_team"
-"cnt" "12"
-"message" "Yellow team has captured a control point"
-"noise1" "domination/claim.wav"
-"noise" "domination/claim.wav"
-"netname" "^3Yellow Team^3"
-"model" "models/domination/dom_yellow.md3"
-"origin" "672 -648 728"
-}
-// entity 255
-{
-"classname" "dom_team"
 "model" "models/domination/dom_unclaimed.md3"
 "origin" "672 -576 784"
 }
-// entity 256
+// entity 255
 {
 "classname" "dom_team"
 "cnt" "4"
@@ -12669,9 +12658,9 @@
 "noise" "domination/claim.wav"
 "netname" "^1Red Team^3"
 "model" "models/domination/dom_red.md3"
-"origin" "672 -504 728"
+"origin" "672.000000 -576.000000 720.000000"
 }
-// entity 257
+// entity 256
 {
 "classname" "dom_team"
 "cnt" "13"
@@ -12680,73 +12669,50 @@
 "noise" "domination/claim.wav"
 "netname" "^4Blue Team^3"
 "model" "models/domination/dom_blue.md3"
-"origin" "672 -552 728"
+"origin" "672.000000 -576.000000 752.000000"
 }
-// entity 258
+// entity 257
 {
-"classname" "dom_team"
-"cnt" "9"
-"message" "Pink team has captured a control point"
-"noise1" "domination/claim.wav"
-"noise" "domination/claim.wav"
-"netname" "^6Pink Team^3"
-"model" "models/domination/dom_pink.md3"
-"origin" "672 -600 728"
-}
-// entity 259
-{
 "classname" "dom_controlpoint"
 "message" "^3 has captured the ^1rocket launcher"
 "origin" "1280 -728 16"
 }
-// entity 260
+// entity 258
 {
 "classname" "dom_controlpoint"
-"message" "^3 has captured the ^2slime"
-"origin" "-680 -576 320"
-}
-// entity 261
-{
-"classname" "dom_controlpoint"
 "message" "^3 has captured the ^1west side"
-"origin" "760 -96 224"
+"origin" "896.000000 -96.000000 224.000000"
 }
-// entity 262
+// entity 259
 {
 "classname" "dom_controlpoint"
 "message" "^3 has captured the ^1east side"
-"origin" "384 -1048 224"
+"origin" "576.000000 -1048.000000 224.000000"
 }
-// entity 263
+// entity 260
 {
 "classname" "dom_controlpoint"
-"message" "^3 has captured the ^1middle"
-"origin" "576 -576 224"
-}
-// entity 264
-{
-"classname" "dom_controlpoint"
 "message" "^3 has captured the ^1roof"
 "origin" "968 -576 464"
 }
-// entity 265
+// entity 261
 {
 "classname" "item_health_medium"
 "origin" "-688 -696 192"
 }
-// entity 266
+// entity 262
 {
 "classname" "item_health_medium"
 "origin" "-688 -456 192"
 }
-// entity 267
+// entity 263
 {
 "classname" "misc_model"
 "angle" "-90"
 "model" "models/mapobjects/el_wlight/el_wlight.md3"
 "origin" "128 -0.5 96"
 }
-// entity 268
+// entity 264
 {
 "classname" "light"
 "_color" "0.7098 0.6431 0.6039"
@@ -12754,13 +12720,13 @@
 "target" "t36"
 "origin" "576 -936 376"
 }
-// entity 269
+// entity 265
 {
 "classname" "info_null"
 "targetname" "t36"
 "origin" "576 -936 272"
 }
-// entity 270
+// entity 266
 {
 "classname" "light"
 "_color" "0.7098 0.6431 0.6039"
@@ -12768,13 +12734,13 @@
 "target" "t39"
 "origin" "-424 -120 344"
 }
-// entity 271
+// entity 267
 {
 "classname" "info_null"
 "targetname" "t39"
 "origin" "-424 -120 240"
 }
-// entity 272
+// entity 268
 {
 "classname" "light"
 "_color" "0.7098 0.6431 0.6039"
@@ -12782,13 +12748,13 @@
 "target" "t59"
 "origin" "-640 -1032 344"
 }
-// entity 273
+// entity 269
 {
 "classname" "info_null"
 "targetname" "t59"
 "origin" "-640 -1032 240"
 }
-// entity 274
+// entity 270
 {
 "classname" "light"
 "_color" "0.7098 0.6431 0.6039"
@@ -12796,13 +12762,13 @@
 "target" "t56"
 "origin" "-424 -1032 344"
 }
-// entity 275
+// entity 271
 {
 "classname" "info_null"
 "targetname" "t56"
 "origin" "-424 -1032 240"
 }
-// entity 276
+// entity 272
 {
 "classname" "light"
 "origin" "472 -800 376"
@@ -12810,7 +12776,7 @@
 "light" "280"
 "_color" "0.7098 0.6431 0.6039"
 }
-// entity 277
+// entity 273
 {
 "classname" "light"
 "_color" "0.7098 0.6431 0.6039"
@@ -12818,7 +12784,7 @@
 "target" "t72"
 "origin" "472 -696 312"
 }
-// entity 278
+// entity 274
 {
 "classname" "light"
 "origin" "472 -904 312"
@@ -12826,19 +12792,19 @@
 "light" "280"
 "_color" "0.7098 0.6431 0.6039"
 }
-// entity 279
+// entity 275
 {
 "classname" "info_null"
 "targetname" "t72"
 "origin" "472 -800 312"
 }
-// entity 280
+// entity 276
 {
 "classname" "info_null"
 "targetname" "t71"
 "origin" "472 -800 272"
 }
-// entity 281
+// entity 277
 {
 "classname" "light"
 "origin" "-280 -912 344"
@@ -12846,7 +12812,7 @@
 "light" "280"
 "_color" "0.7098 0.6431 0.6039"
 }
-// entity 282
+// entity 278
 {
 "classname" "light"
 "origin" "-280 -1000 280"
@@ -12854,19 +12820,19 @@
 "light" "280"
 "_color" "0.7098 0.6431 0.6039"
 }
-// entity 283
+// entity 279
 {
 "classname" "info_null"
 "targetname" "t74"
 "origin" "-280 -912 280"
 }
-// entity 284
+// entity 280
 {
 "classname" "info_null"
 "targetname" "t73"
 "origin" "-280 -912 240"
 }
-// entity 285
+// entity 281
 {
 "classname" "light"
 "origin" "-280 -912 344"
@@ -12874,7 +12840,7 @@
 "light" "280"
 "_color" "0.7098 0.6431 0.6039"
 }
-// entity 286
+// entity 282
 {
 "classname" "light"
 "_color" "0.7098 0.6431 0.6039"
@@ -12882,7 +12848,7 @@
 "target" "t76"
 "origin" "-280 -824 280"
 }
-// entity 287
+// entity 283
 {
 "classname" "light"
 "origin" "-280 -1000 280"
@@ -12890,96 +12856,96 @@
 "light" "280"
 "_color" "0.7098 0.6431 0.6039"
 }
-// entity 288
+// entity 284
 {
 "classname" "info_null"
 "targetname" "t76"
 "origin" "-280 -912 280"
 }
-// entity 289
+// entity 285
 {
 "classname" "info_null"
 "targetname" "t75"
 "origin" "-280 -912 240"
 }
-// entity 290
+// entity 286
 {
 "classname" "item_health_small"
 "origin" "1184 -32 208"
 }
-// entity 291
+// entity 287
 {
 "classname" "target_speaker"
 "noise" "sound/ambient/machinerydrone01.wav"
 "origin" "1568 392 256"
 }
-// entity 292
+// entity 288
 {
 "classname" "target_speaker"
 "noise" "sound/ambient/sparks.ogg"
 "origin" "1120 -576 410"
 }
-// entity 293
+// entity 289
 {
 "classname" "target_speaker"
 "noise" "sound/ambient/machinerydrone01.wav"
 "origin" "-540 -572 256"
 }
-// entity 294
+// entity 290
 {
 "classname" "target_speaker"
 "noise" "sound/ambient/sparks.ogg"
 "origin" "1408 -840 170"
 }
-// entity 295
+// entity 291
 {
 "classname" "target_speaker"
 "noise" "sound/ambient/sparks.ogg"
 "origin" "1784 -704 306"
 }
-// entity 296
+// entity 292
 {
 "classname" "target_speaker"
 "noise" "sound/ambient/machine4.ogg"
 "origin" "-264 -912 280"
 }
-// entity 297
+// entity 293
 {
 "classname" "target_speaker"
 "noise" "sound/ambient/machine2.wav"
 "origin" "-264 -240 280"
 }
-// entity 298
+// entity 294
 {
 "classname" "target_speaker"
 "noise" "sound/ambient/machine4.ogg"
 "origin" "1608 -352 312"
 }
-// entity 299
+// entity 295
 {
 "classname" "target_speaker"
 "noise" "sound/ambient/machine3.wav"
 "origin" "456 -352 312"
 }
-// entity 300
+// entity 296
 {
 "classname" "target_speaker"
 "noise" "sound/ambient/machine2.wav"
 "origin" "1056 472 244"
 }
-// entity 301
+// entity 297
 {
 "classname" "target_speaker"
 "noise" "sound/ambient/sparks.ogg"
 "origin" "-184 -352 98"
 }
-// entity 302
+// entity 298
 {
 "classname" "target_speaker"
 "noise" "sound/ambient/machine2.wav"
 "origin" "456 -800 312"
 }
-// entity 303
+// entity 299
 {
 "classname" "target_speaker"
 "noise" "sound/ambient/machine2.wav"

Modified: branches/nexuiz-2.0/data/qcsrc/server/bots.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/bots.qc	2009-03-30 07:38:20 UTC (rev 6357)
+++ branches/nexuiz-2.0/data/qcsrc/server/bots.qc	2009-03-30 07:41:39 UTC (rev 6358)
@@ -6,9 +6,61 @@
 float AI_STATUS_OUT_JUMPPAD		= 16;	// Trying to get out of a "vertical" jump pad
 float AI_STATUS_OUT_WATER		= 32;	// Trying to get out of water
 
-.string netname_freeme;
+// utilities for path debugging
+#ifdef DEBUG_TRACEWALK
+
+float DEBUG_NODE_SUCCESS	= 1;
+float DEBUG_NODE_WARNING	= 2;
+float DEBUG_NODE_FAIL		= 3;
+
+vector debuglastnode;
+
+void debugresetnodes()
+{
+	debuglastnode = '0 0 0';
+}
+
+void debugnode(vector node)
+{
+	if not(self.classname=="player")
+		return;
+
+	if(debuglastnode=='0 0 0')
+	{
+		debuglastnode = node;
+		return;
+	}
+
+	te_lightning2(world, node, debuglastnode);
+	debuglastnode = node;
+}
+
+void debugnodestatus(vector position, float status)
+{
+	vector color;
+
+	switch (status)
+	{
+		case DEBUG_NODE_SUCCESS:
+			color = '0 15 0';
+			break;
+		case DEBUG_NODE_WARNING:
+			color = '15 15 0';
+			break;
+		case DEBUG_NODE_FAIL:
+			color = '15 0 0';
+			break;
+		default:
+			color = '15 15 15';
+	}
+
+	te_customflash(position, 40,  2, color);
+}
+
+#endif
+
 // rough simulation of walking from one point to another to test if a path
-// can be traveled, used by havocbot
+// can be traveled, used for waypoint linking and havocbot
 
 vector stepheightvec;
 float navigation_testtracewalk;
@@ -22,14 +74,13 @@
 	local float stepdist;
 	local float yaw;
 	local float ignorehazards;
-	if (navigation_testtracewalk)
-	{
-		if (navigation_testtracewalk > 1)
-			dprint("tracewalk: ");
-		//te_wizspike(start);
-		//te_knightspike(end);
-		//te_lightning2(world, start, end);
-	}
+	local float swimming;
+
+	#ifdef DEBUG_TRACEWALK
+		debugresetnodes();
+		debugnode(start);
+	#endif
+
 	move = end - start;
 	move_z = 0;
 	org = start;
@@ -37,45 +88,49 @@
 	dir = normalize(move);
 	stepdist = 32;
 	ignorehazards = FALSE;
-	//self.angles = vectoangles(dir);
+
+	// Analyze starting point
 	traceline(start, start, MOVE_NORMAL, e);
 	if (trace_dpstartcontents & (DPCONTENTS_SLIME | DPCONTENTS_LAVA))
 		ignorehazards = TRUE;
-	tracebox(start, m1, m2, start, MOVE_NOMONSTERS, e);
-	if (trace_startsolid)
+	else
 	{
-		// failed - bad start
-		if (navigation_testtracewalk)
+		traceline( start, start + '0 0 -65536', MOVE_NORMAL, e);
+		if (trace_dpstartcontents & (DPCONTENTS_SLIME | DPCONTENTS_LAVA))
 		{
-			if (navigation_testtracewalk > 1)
-				dprint("bad-start\n");
-			te_knightspike(start);
+			ignorehazards = TRUE;
+			swimming = TRUE;
 		}
-		return 0;
 	}
+	tracebox(start, m1, m2, start, MOVE_NOMONSTERS, e);
+	if (trace_startsolid)
+	{
+		// Bad start
+		#ifdef DEBUG_TRACEWALK
+			debugnodestatus(start, DEBUG_NODE_FAIL);
+		#endif
+		return FALSE;
+	}
+
+	// Movement loop
 	yaw = vectoyaw(move);
 	move = end - org;
-	while (1)
+	for (;;)
 	{
 		if (boxesoverlap(end, end, org + m1 + '-1 -1 -1', org + m2 + '1 1 1'))
 		{
-			if (navigation_testtracewalk)
-			{
-				if (navigation_testtracewalk > 1)
-					dprint("success\n");
-				te_wizspike(org);
-			}
-			// succeeded
-			return 1;
+			// Succeeded
+			#ifdef DEBUG_TRACEWALK
+				debugnodestatus(org, DEBUG_NODE_SUCCESS);
+			#endif
+			return TRUE;
 		}
+		#ifdef DEBUG_TRACEWALK
+			debugnode(org);
+		#endif
+
 		if (dist <= 0)
 			break;
-		if (navigation_testtracewalk)
-		{
-			//dprint("trying ");
-			//te_gunshot(org);
-			particle(org, '0 0 0', 104, 8);
-		}
 		if (stepdist > dist)
 			stepdist = dist;
 		dist = dist - stepdist;
@@ -84,37 +139,57 @@
 		{
 			if (trace_dpstartcontents & (DPCONTENTS_SLIME | DPCONTENTS_LAVA))
 			{
-				if (navigation_testtracewalk)
-				{
-					if (navigation_testtracewalk > 1)
-						dprint("hazard\n");
-					te_gunshot(org);
-				}
 				// hazards blocking path
-				return 0;
+				#ifdef DEBUG_TRACEWALK
+					debugnodestatus(org, DEBUG_NODE_FAIL);
+				#endif
+				return FALSE;
 			}
 		}
 		if (trace_dpstartcontents & DPCONTENTS_LIQUIDSMASK)
 		{
 			move = normalize(end - org);
 			tracebox(org, m1, m2, org + move * stepdist, movemode, e);
+
+			#ifdef DEBUG_TRACEWALK
+				debugnode(trace_endpos);
+			#endif
+
 			if (trace_fraction < 1)
 			{
-				if (navigation_testtracewalk)
+				swimming = TRUE;
+				org = trace_endpos - normalize(org - trace_endpos) * stepdist;
+				for(; org_z < end_z + self.maxs_z; org_z += stepdist)
 				{
-					if (navigation_testtracewalk > 1)
-						dprint("swimming-hit-something\n");
-					//particle(org, move * 64, 104, 4);
-					te_gunshot(org);
+						#ifdef DEBUG_TRACEWALK
+							debugnode(org);
+						#endif
+				        if(pointcontents(org) == CONTENT_EMPTY)
+							break;
 				}
-				return 0;
+
+				if not (pointcontents(org + '0 0 1') == CONTENT_EMPTY)
+				{
+					#ifdef DEBUG_TRACEWALK
+						debugnodestatus(org, DEBUG_NODE_FAIL);
+					#endif
+					return FALSE;
+				}
+				continue;
+
 			}
-			org = trace_endpos;
+			else
+				org = trace_endpos;
 		}
 		else
 		{
 			move = dir * stepdist + org;
 			tracebox(org, m1, m2, move, movemode, e);
+
+			#ifdef DEBUG_TRACEWALK
+				debugnode(trace_endpos);
+			#endif
+
 			// hit something
 			if (trace_fraction < 1)
 			{
@@ -122,14 +197,9 @@
 				tracebox(org + stepheightvec, m1, m2, move + stepheightvec, movemode, e);
 				if (trace_fraction < 1 || trace_startsolid)
 				{
-					if (navigation_testtracewalk)
-					{
-						if (navigation_testtracewalk > 1)
-							dprint("hit-something\n");
-					//	move = normalize(end - org);
-					//	particle(org, move * 64, 104, 4);
-					//	te_gunshot(org);
-					}
+					#ifdef DEBUG_TRACEWALK
+						debugnodestatus(trace_endpos, DEBUG_NODE_WARNING);
+					#endif
 
 					// check for doors
 					traceline( org, move, movemode, e);
@@ -145,7 +215,12 @@
 						}
 					}
 					else
-						return 0; // failed
+					{
+						#ifdef DEBUG_TRACEWALK
+							debugnodestatus(trace_endpos, DEBUG_NODE_FAIL);
+						#endif
+						return FALSE; // failed
+					}
 				}
 				else
 					move = trace_endpos;
@@ -158,40 +233,28 @@
 			// if that also fails we assume it is a wall
 			// (this is the same logic as the Quake walkmove function used)
 			tracebox(move, m1, m2, move + '0 0 -65536', movemode, e);
-			/*
-			if (trace_startsolid)
+
+			// moved successfully
+			if(swimming)
 			{
-				tracebox(move, m1, m2, move + '0 0 -65536', FALSE, e);
-				if (trace_startsolid)
-				{
-					if (navigation_testtracewalk)
-					{
-						if (navigation_testtracewalk > 1)
-							dprint("hit-something\n");
-						//move = normalize(end - org);
-						//particle(org, move * 64, 104, 4);
-						te_knightspike(org);
-					}
-					// failed
-					return 0;
-				}
+				local float c;
+				c = pointcontents(org + '0 0 1');
+				if not(c == CONTENT_WATER || c == CONTENT_LAVA || c == CONTENT_SLIME)
+					swimming = FALSE;
+				else
+					continue;
 			}
-			*/
-			// moved successfully
-			if (navigation_testtracewalk > 1)
-				dprint("moved ");
+
 			org = trace_endpos;
 		}
 	}
-	if (navigation_testtracewalk)
-	{
-		if (navigation_testtracewalk > 1)
-			dprint("wrong-place\n");
-		te_knightspike(org);
-		//te_gunshot(end);
-	}
+
 	// moved but didn't arrive at the intended destination
-	return 0;
+	#ifdef DEBUG_TRACEWALK
+		debugnodestatus(org, DEBUG_NODE_FAIL);
+	#endif
+
+	return FALSE;
 };
 
 
@@ -1391,9 +1454,6 @@
 };
 
 
-
-
-
 //////////////////////////////////////////////////////////////////////////////
 // general bot functions
 //////////////////////////////////////////////////////////////////////////////
@@ -1403,6 +1463,7 @@
 float skill;
 entity bot_list;
 .entity nextbot;
+.string netname_freeme;
 
 float sv_maxspeed;
 .float createdtime;
@@ -2157,7 +2218,7 @@
 	while (player)
 	{
 		if (!player.isbot)
-		if (player.flags & FL_ONGROUND)
+		if (player.flags & FL_ONGROUND || player.waterlevel > WATERLEVEL_NONE)
 		{
 			//navigation_testtracewalk = TRUE;
 			head = navigation_findnearestwaypoint(player, FALSE);

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets_early.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets_early.qh	2009-03-30 07:38:20 UTC (rev 6357)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets_early.qh	2009-03-30 07:41:39 UTC (rev 6358)
@@ -25,8 +25,18 @@
 /// Used for cvar reloading
 .string cvar_basename;
 
+//.float spawnflags
+/// Spawn a pillar model under the turret to make it look ok on uneven ground surfaces
+#define TSF_TERRAINBASE   2
+/// Disable builtin ammo regeneration
+#define TSF_NO_AMMO_REGEN 4
+/// Dont break path to chase enemys. will still fire at them if possible.
+#define TSF_NO_PATHBREAK  8
+
+
 /// target selection flags
 .float target_select_flags;
+/// target validatoin flags
 .float target_validate_flags;
 /// Dont select a target on its own.
 #define TFL_TARGETSELECT_NO            2

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_main.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_main.qc	2009-03-30 07:38:20 UTC (rev 6357)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_main.qc	2009-03-30 07:41:39 UTC (rev 6358)
@@ -519,13 +519,14 @@
     if(e_turret.turrcaps_flags & TFL_TURRCAPS_HEADATTACHED)
     {
         tvt_thadv = angleofs3(e_turret.tur_head.origin,e_turret.angles + e_turret.tur_head.angles ,e_target);
+        //tvt_thadv = angleofs(e_turret.angles,e_target);
     }
     else
     {
         tvt_thadv = angleofs(e_turret.tur_head,e_target);
     }
 
-    tvt_tadv  = angleofs(e_turret,e_target);
+    tvt_tadv  = shortangle_vxy(angleofs(e_turret,e_target),e_turret.angles);
     tvt_thadf = vlen(tvt_thadv);
     tvt_tadf  = vlen(tvt_tadv);
 
@@ -656,6 +657,7 @@
 #endif
 
     // Handle ammo
+    if not (self.spawnflags & TSF_NO_AMMO_REGEN)
     if (self.ammo < self.ammo_max)
         self.ammo = min(self.ammo + self.ammo_recharge,self.ammo_max);
 
@@ -858,7 +860,7 @@
 
     // Terrainbase spawnflag. This puts a enlongated model
     // under the turret, so it looks ok on uneaven surfaces.
-    if (self.spawnflags & 2)
+    if (self.spawnflags & TSF_TERRAINBASE)
     {
         entity tb;
         precache_model("models/turrets/terrainbase.md3");

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_ewheel.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_ewheel.qc	2009-03-30 07:38:20 UTC (rev 6357)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_ewheel.qc	2009-03-30 07:41:39 UTC (rev 6358)
@@ -71,7 +71,6 @@
             return verb.verb_static_value;
 
         return VS_CALL_NO;
-        break;
 
     case VCM_DO:
         // Do we have a path?
@@ -127,8 +126,6 @@
         else
             return VS_CALL_YES_DONE;
 
-        break;
-
     case VCM_REMOVE:
 
         if (self.pathcurrent)
@@ -137,8 +134,6 @@
         self.pathcurrent = world;
 
         return VS_CALL_YES_DONE;
-
-        break;
     }
 
     return VS_CALL_YES_DONE;
@@ -149,13 +144,17 @@
     switch (eval)
     {
     case VCM_EVAL:
-            if(self.enemy)
-                return verb.verb_static_value;
+        if (self.enemy)
+        {
+            if (self.spawnflags & TSF_NO_PATHBREAK)
+                if (self.pathcurrent)
+                    return VS_CALL_NO;
 
+            return verb.verb_static_value;
+        }
+
         return VS_CALL_NO;
 
-        break;
-
     case VCM_DO:
 
         self.moveto  = self.enemy.origin;
@@ -201,12 +200,15 @@
     switch (eval)
     {
     case VCM_EVAL:
-            if(self.enemy)
-            if(self.health < 50)
+        if (self.spawnflags & TSF_NO_PATHBREAK)
+            if (self.pathcurrent)
+                return VS_CALL_NO;
+
+        if (self.enemy)
+            if (self.health < 50)
                 return verb.verb_static_value;
 
-            return VS_CALL_NO;
-        break;
+        return VS_CALL_NO;
 
     case VCM_DO:
         self.steerto = (steerlib_push(self.enemy.origin) * 0.7) + (steerlib_traceavoid_flat(0.3, 500, '0 0 128') * 0.3);
@@ -217,7 +219,6 @@
 
         return VS_CALL_YES_DOING;
 
-        break;
     }
 
     return VS_CALL_YES_DONE;
@@ -228,17 +229,15 @@
     switch (eval)
     {
     case VCM_EVAL:
-            if(self.enemy)
-                return VS_CALL_NO;
+        if (self.enemy)
+            return VS_CALL_NO;
 
         return verb.verb_static_value;
 
-        break;
-
     case VCM_DO:
         self.moveto = self.origin;
 
-        if(vlen(self.velocity))
+        if (vlen(self.velocity))
             movelib_beak_simple(cvar("g_turrets_unit_ewheel_speed_stop"));
 
         return VS_CALL_YES_DOING;

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_machinegun.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_machinegun.qc	2009-03-30 07:38:20 UTC (rev 6357)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_machinegun.qc	2009-03-30 07:41:39 UTC (rev 6358)
@@ -35,7 +35,7 @@
 
     self.ammo_flags = TFL_AMMO_BULLETS | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
     self.turrcaps_flags = TFL_TURRCAPS_PLAYERKILL;// | TFL_TURRCAPS_MISSILEKILL;
-    self.aim_flags = TFL_AIM_LEAD | TFL_AIM_ZEASE;
+    self.aim_flags = TFL_AIM_LEAD;
 
     if(cvar("g_antilag_bullets"))
         self.turrcaps_flags |= TFL_TURRCAPS_HITSCAN;

Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc	2009-03-30 07:38:20 UTC (rev 6357)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc	2009-03-30 07:41:39 UTC (rev 6358)
@@ -507,7 +507,6 @@
             return verb.verb_static_value;
 
         return VS_CALL_NO;
-        break;
 
     case VCM_DO:
         // Do we have a path?
@@ -569,8 +568,6 @@
         else
             return VS_CALL_YES_DONE;
 
-        break;
-
     case VCM_REMOVE:
 
         if (self.pathcurrent)
@@ -579,8 +576,6 @@
         self.pathcurrent = world;
 
         return VS_CALL_YES_DONE;
-
-        break;
     }
 
     return VS_CALL_YES_DONE;
@@ -592,6 +587,11 @@
     {
     case VCM_EVAL:
 
+        if (self.enemy)
+            if (self.spawnflags & TSF_NO_PATHBREAK)
+                if (self.pathcurrent)
+                    return VS_CALL_NO;
+
         if (self.animflag == ANIM_MEELE)
             return VS_CALL_NO;
 
@@ -603,8 +603,6 @@
 
         return VS_CALL_NO;
 
-        break;
-
     case VCM_DO:
         switch (self.waterlevel)
         {
@@ -628,7 +626,6 @@
         self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95);
 
         return VS_CALL_YES_DOING;
-        break;
     }
 
     return VS_CALL_YES_DONE;
@@ -644,7 +641,6 @@
             return VS_CALL_NO;
 
         return verb.verb_static_value;
-        break;
 
     case VCM_DO:
 
@@ -653,7 +649,6 @@
         self.animflag = ANIM_NO;
 
         return VS_CALL_YES_DOING;
-        break;
     }
 
     return VS_CALL_YES_DONE;
@@ -669,7 +664,6 @@
             return VS_CALL_NO;
 
         return verb.verb_static_value;
-        break;
 
     case VCM_DO:
         if(verb.wait < time)
@@ -716,8 +710,6 @@
         }
 
         return VS_CALL_YES_DOING;
-
-        break;
     }
 
     return VS_CALL_YES_DONE;
@@ -734,8 +726,6 @@
 
         return verb.verb_static_value;
 
-        break;
-
     case VCM_DO:
 
         //if (random() < 0.5)
@@ -744,8 +734,6 @@
         //    verbstack_push(self.walker_verbs_move, walker_moveverb_idle_roam,   WVM_IDLE + WVM_IDLE_UP,  random() * 15);
 
         return VS_CALL_YES_DOING;
-
-        break;
     }
 
     return VS_CALL_YES_DONE;
@@ -776,8 +764,6 @@
 
         return VS_CALL_NO;
 
-        break;
-
     case VCM_DO:
 
         self.moveto   = self.enemy.origin;
@@ -785,8 +771,6 @@
         self.animflag = ANIM_MEELE;
 
         return VS_CALL_YES_DOING;
-
-        break;
     }
 
     return VS_CALL_YES_DONE;
@@ -814,8 +798,6 @@
 
         return verb.verb_static_value;
 
-        break;
-
     case VCM_DO:
 
         entity rv;
@@ -829,8 +811,6 @@
         self.tur_head.attack_finished_single = time + cvar("g_turrets_unit_walker_std_rocket_refire");
 
         return VS_CALL_YES_DONE;
-
-        break;
     }
 
     return VS_CALL_YES_DONE;
@@ -978,8 +958,8 @@
 
     self.damage_flags |= TFL_DMG_DEATH_NOGIBS;
 
-    //self.target_select_flags   = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
-    //self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
+    self.target_select_flags   = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
+    self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
 
     self.iscreature = TRUE;
     self.movetype   = MOVETYPE_WALK;

Modified: branches/nexuiz-2.0/server/help.cfg
===================================================================
--- branches/nexuiz-2.0/server/help.cfg	2009-03-30 07:38:20 UTC (rev 6357)
+++ branches/nexuiz-2.0/server/help.cfg	2009-03-30 07:41:39 UTC (rev 6358)
@@ -8,7 +8,7 @@
 // for manual use: help_inc switches to the next message, help_doit will print the current message, help_next will do both together
 
 // settings
-set help_cfg_nick "Help System"
+set help_cfg_nick "^2Help System"
 set help_cfg_time 300
 
 // help messages
@@ -24,7 +24,7 @@
 set help_msg_8 "In CTF, it's good to move around and get involved in the action. You get fragged quite a bit but you are also most helpful to your team and also learn the map"
 set help_msg_9 "Use the radar to see where your teammates are. Pressing zoom will expand the radar image to give you a better overview"
 set help_msg_10 "Most teammessages display waypoints by default. Use those to guide your teammates. You can also see them and the flagcarrier in the radar"
-set help_msg_11 "Protect your Flagcarrier at all cost! Also save health and armor for him, he might need them more then you!"
+set help_msg_11 "Protect your Flagcarrier at all cost! Also save health and armor for him, he might need them more than you!"
 set help_msg_12 "You can use the laser and most explosive weapons to jump around. Just look 'at your feet' and press fire. If you also jump at the same time you get even higher"
 set help_msg_13 "Be friendly and helpful to other players! Being angry at others' mistakes is understandable, but nobody is perfect. Try to use calm words when telling them how to correct their mistake"
 set help_msg_14 "You can use the zoom key with all guns, only the Nexgun has it as a extra function on mouse2 (default key)"
@@ -33,7 +33,7 @@
 set help_msg_17 "Learn to use the team messages! You find them in the Setting/Input menu. Try changing them to keys you can press easier than the defaults"
 set help_msg_18 "Gaming should be fun! Try to have a nice time, be helpful, mindful and treat others like you want to be treated"
 set help_msg_19 "Some interesting Nexuiz related webpages include the official forum on http://alientrap.org/forum/ , http://nexuizninjaz.com , http://planetnexuiz.de"
-set help_msg_20 "If you already have a good gun, it's a great idea to let your teammates get something better then the shotgun too!"
+set help_msg_20 "If you already have a good gun, it's a great idea to let your teammates get something better than the shotgun too!"
 set help_msg_21 "Press T to chat with others, press Y for messages to your team only, press TAB to see the scores, U for the chat history (default keys)"
 set help_msg_22 "You can use 'suggestmap PART_OF_NAME' to make a map come up at the vote screen after a round was played"
 set help_msg_23 "The console is accessible through the ~ key or by pressing Shift+ESC. It has many more advanced features, use 'cmdlist' and 'cvarlist' to get a full list of available commands/settings"
@@ -56,7 +56,7 @@
 set help_msg_40 "Don't drink and frag"
 set help_msg_41 "Don't shoot at players who are typing/chatting. You recognize those players by the keyboard symbols above their head"
 set help_msg_42 "GG is shorthand for 'Good Game'"
-set help_msg_43 "Players with the perfix '$bot_prefix' in their nick are bots on this server. There is also a clan named [BOT]"
+set help_msg_43 "Players with the prefix '$bot_prefix' in their nick are bots on this server. There is also a clan named [BOT]"
 set help_msg_44 "Read the help messages!"
 set help_msg_45 "Visit the nexuiz ladder at http://planetnexuiz.com/ladder/ You can download demos of matches played by skilled players there. Studying these demos can help you to learn how to play this game"
 set help_msg_46 "Start playing 1on1 if you want to learn fast"

Modified: branches/nexuiz-2.0/server/rcon2irc/rbiserver.pl
===================================================================
--- branches/nexuiz-2.0/server/rcon2irc/rbiserver.pl	2009-03-30 07:38:20 UTC (rev 6357)
+++ branches/nexuiz-2.0/server/rcon2irc/rbiserver.pl	2009-03-30 07:41:39 UTC (rev 6358)
@@ -98,6 +98,10 @@
 			next if $l[9] < time() - 60; # too old
 			print "Cleaning up demos: protecting $_\n";
 			chmod 0444, $_;
+			open my $fh, ">", "$_.nick";
+			printf $fh "%s\n", color_dp2none($store{"playernickraw_byid_$id"});
+			close $fh;
+			chmod 0444, "$_.nick";
 		}
 	}
 	else

Modified: branches/nexuiz-2.0/server/rcon2irc/rcon2irc-example.conf
===================================================================
--- branches/nexuiz-2.0/server/rcon2irc/rcon2irc-example.conf	2009-03-30 07:38:20 UTC (rev 6357)
+++ branches/nexuiz-2.0/server/rcon2irc/rcon2irc-example.conf	2009-03-30 07:41:39 UTC (rev 6358)
@@ -31,6 +31,7 @@
 #dp_status_delay = 30
 #irc_reconnect_delay = 300
 #irc_admin_timeout = 3600
+#irc_admin_quote_re =
 #irc_local = 141.2.16.23
 #irc_ping_delay = 120
 #irc_nickserv_identify = PRIVMSG NickServ :IDENTIFY %2$s

Modified: branches/nexuiz-2.0/server/rcon2irc/rcon2irc.pl
===================================================================
--- branches/nexuiz-2.0/server/rcon2irc/rcon2irc.pl	2009-03-30 07:38:20 UTC (rev 6357)
+++ branches/nexuiz-2.0/server/rcon2irc/rcon2irc.pl	2009-03-30 07:41:39 UTC (rev 6358)
@@ -305,7 +305,7 @@
 		(length($local) ? (LocalAddr => $local) : ()),
 		PeerAddr => $remote,
 		PeerPort => $defaultport
-	) or die "socket $proto/$local/$remote: $!";
+	) or die "socket $proto/$local/$remote/$defaultport: $!";
 	$sock->blocking(0);
 	my $you = {
 		# Mortal fool! Release me from this wretched tomb! I must be set free
@@ -621,7 +621,8 @@
 use strict;
 use warnings;
 use IO::Select;
-use Digest::MD5;
+use Digest::SHA;
+use Digest::HMAC;
 use Time::HiRes qw/time/;
 
 our @handlers = (); # list of [channel, expression, sub to handle result]
@@ -660,6 +661,7 @@
 
 	irc_admin_password => "",
 	irc_admin_timeout => 3600,
+	irc_admin_quote_re => "",
 
 	irc_reconnect_delay => 300,
 
@@ -940,9 +942,13 @@
 	{
 		if(defined $store{irc_quakenet_challenge})
 		{
-			if($store{irc_quakenet_challenge} =~ /^MD5 (.*)/)
+			if($store{irc_quakenet_challenge} =~ /^([0-9a-f]*)\b.*\bHMAC-SHA-256\b/)
 			{
-				out irc => 1, "$config{irc_quakenet_challengeauth} $config{irc_quakenet_authname} " . Digest::MD5::md5_hex("$config{irc_quakenet_password} $1");
+				my $challenge = $1;
+				my $hash1 = Digest::SHA::sha256_hex(substr $config{irc_quakenet_password}, 0, 10);
+				my $key = Digest::SHA::sha256_hex("@{[lc $config{irc_quakenet_authname}]}:$hash1");
+				my $digest = Digest::HMAC::hmac_hex($challenge, $key, \&Digest::SHA::sha256);
+				out irc => 1, "$config{irc_quakenet_challengeauth} $config{irc_quakenet_authname} $digest HMAC-SHA-256";
 			}
 		}
 		else
@@ -1165,6 +1171,21 @@
 			return 0;
 		}
 
+		if($command =~ /^quote (.*)$/)
+		{
+			my ($cmd) = ($1);
+			if($cmd =~ /^(??{$config{irc_admin_quote_re}})$/si)
+			{
+				out irc => 0, $cmd;
+				out irc => 0, "PRIVMSG $nick :executed your command";
+			}
+			else
+			{
+				out irc => 0, "PRIVMSG $nick :permission denied";
+			}
+			return 0;
+		}
+
 		out irc => 0, "PRIVMSG $nick :unknown command (supported: status [substring], kick # id reason, kickban # id bantime mask reason, bans, unban banid)";
 
 		return -1;
@@ -1271,6 +1292,7 @@
 	# chat: Nexuiz server -> IRC channel, nick set
 	[ dp => q{:join:(\d+):(\d+):([^:]*):(.*)} => sub {
 		my ($id, $slot, $ip, $nick) = @_;
+		$store{"playernickraw_byid_$id"} = $nick;
 		$nick = color_dp2irc $nick;
 		$store{"playernick_byid_$id"} = $nick;
 		$store{"playerip_byid_$id"} = $ip;
@@ -1282,6 +1304,7 @@
 	# chat: Nexuiz server -> IRC channel, nick change/set
 	[ dp => q{:name:(\d+):(.*)} => sub {
 		my ($id, $nick) = @_;
+		$store{"playernickraw_byid_$id"} = $nick;
 		$nick = color_dp2irc $nick;
 		my $oldnick = $store{"playernick_byid_$id"};
 		out irc => 0, "PRIVMSG $config{irc_channel} :* $oldnick\017 is now known as $nick";



More information about the nexuiz-commits mailing list