1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563
|
Version 1.13.16 (Build 16) with qirc patch
------------------------------------------
04/23/01 qirc-1.40
- Asynchronus reverse DNS resolving support by utilizing GNU adns library
04/22/01 qirc-1.26
- Ban format changed to free-form wildcard(*,?) format
See: game.ban.example
04/16/00 qirc-1.24
- Fix check_timeout bug which can cause avalanche disconnection
- Separate timeout cycle time for gameplay and suddendeath/custom
This is in turn reduce CPU usage significantly
- Fix bug which allows a player to perform a switch with dead players
- Remove fscanf routine in numerous places and replace with new code
to avoid infinite loop bug for notepad-based server runner
- Ignore csx where x is not 1,2 or 4 in the game with special blocks.
Adjust level update detection parameters for cheat/lag
- Make the program display something when the server start :) to avoid
newbie confusion of seeing nothing
- Fix buffer overflow bug in sendwinlist
03/18/00 qirc-1.23
- Fix buffer overflow in lvprintf()
which happens to all version of tetrix!
- Fix /who in qirc support
- Put the support for /quote set in qirc for basic channel settings
02/06/00 qirc-1.22
- Fix bug in level_increase setting reported by gimp/ekn
- Fix motd bug reported by gimp
01/03/00 qirc-1.21-final
12/05/99 qirc-1.20
- Spectator support for gtetrinet and tspec is now ready
- Major code clean up. Create net_playback_send()
- Rewrite arg part of lvprintf lprintf tprintf net_query_parser()
to use a portable vsnprintf. varargs.h style is obsoleted. Also
fix the buffer overflow potential due to "vsprintf".
- Fix various part in spectator support
- Fix a various minor bugs in irc support
- Block invalid/corrupt field send by clients
- This version will obsolete the qirc-0.5x development. qirc-0.5x
will no longer be maintained
11/07/99 qirc-1.08d *beta release*
- Fix nick/team name check to better detect invalid nick/team name
- Fix spectator support for /move, invalid / command, add /help
- Fix qirc to be more rfc1459 compliant
10/16/99 qirc-1.06m *experimental*
- Game play watch (spectators) / playback support for gtetrinet
and Tspec. (README.qirc.spectators)
- New ban format: See examples in ./bin directory.
This makes it possible to handle both hostname and IP.
- New ban scheme and files: game.(ban, compromise, allow)
Server first checks game.ban (hard banlist) and ban that person
immediately. After a player has logged on (server received
team name), server checks game.ban.compromise and game.allow
the players will be banned if they are in compromise file but
not in game.allow file. Allow file contains nickname/password
which will be allowed as privilledge access. (password = teamname)
i.e You can allow just your close AOL friends to play but not
other AOL users.
- To make new ban/allow list take effect you need to go to an irc
session and type /quote readaccesslist !!!! (This is to reduce
server resource consumption. We don't want to read banfile on
each player join). Restart the server would also do it.
- Add game type "nickonly". Server ignores teamnames when
updating winlist. Players who teamup will not get any points.
- Fix server did not aware of a color in nickname (report by dynweb)
- More aggressive cheat detector especially for PURE! Server counts
no. of pieces drops and analyze it. i.e. you cannot drop only 3
pieces in total and add 1 line to all. This in turn prevents the
lag effect from previous game (have you seen someone playing
previous game while you are playing current game?). Server
detects a bogus message pattern. And detect invalid lvl update
which could cause immediate level increase for all players.
To look for a cheater do "cat game.log |grep Cheating"
- Add broadcast message command "/quote wall" to qirc
- Server now informs qirc clients when a qirc client exits.
- Optimize server CPU usage in many places. Also remove most
lvprintf line (Only important events are logged).
- Fix qirc not to allow same nicknames (irc/player/spectators)
- Fix a minor tetrix typo which made the channel STATE INGAME
even noone is on the channel.
- Change scoring. Winner get 2or3 points runner-up get 0or1 point
- Fix unsafe pline command parsing code in original Tetrix.
- Fix win report on non-playing sockets.
- Add a small code to make it possible for a client
to know that this server is a unix server.
03/10/99 qirc-1.05a
- Patch against attack using EOL in nick or teamname
- Block cheater who uses special in PURE channel
- Support 2 winlists which can be set using winlist_file (1, 2 or -1)
where -1 = no score recorded.
- /winlist #channelname
- Fix /msg bug suggested by ekn
02/15/99 qirc-1.04
- Implement flood control at game start to prevent people
get flooded off
- Implement new timeout control scheme. Timeout is now reset
at net_activity, net_telnet and pline. Each net_t has 2
timeout variables to handle each case.
- Add wlist_cache variable to net_t to possibly reduce the
winlist update time. Also remove readwinlist() at game start
and increase MAXWINLIST to 800. Add net_query_creadwinlist
- Minor change to net_query_cuserhost and cmode
- Bound check strcpy() in various places
02/01/99 qirc-1.03
- Fixed the mysterious access violation bugs =)
01/30/99 qirc-1.02
- Fix pause thingy.
- Bound check /topic (net_query_ctopic)
- Change startgame 0 so that game can be stopped when paused.
- Change MAXWINLIST to 200. suggested by ekn.
01/28/99 qirc-1.01
- add nickname to server chat message :) suggested by ekn
01/26/99 qirc-1.0
- First public release with qirc patch
Version 1.13.16 (Build 16)
--------------------------
Comments:
Treat this as just a version of bug fixes :)
Changes:
* Added better logging
More logging added, and it's easier to understand.
* Eradicated coredump on timeout
* Changed /Priority
Now if you give a channel a priority of 0, no-one will
autojoin it.
* Fixed bug, when play
* Fixed SuddenDeath Addlines
Ok, my addlines didn't look proffesional :). Now it
just adds lines to you, and doesn't say ANYTHING in the
information window. Yep, iAM informed me that TetriNET
for Win95 already had the feature, so I didn't need
to recreate it, thank heavens, since having a line
added to you from <blank> looks pretty suspicious.
* FIXED a bug that used up file handles
game.motd was being opened and never closed. Eventually
the server is killed due to lack of filehandles, or
is hard to log into. Damn this was a bastard to find :P.
* IP column to /who (Suggestion by Hinder - 1/1/1999)
If you are an authenticated OP, and type /who,
there is an additional column, IP, which shows each
players IP. This is added in, with a /ban keyword
in mind for a future version (hopefully the next).
Version 1.13.15 (Build 15)
--------------------------
Comments:
Found a few small bugs in Build 14, so I fixed them, plus I've
decided to be daring and remove as many of the large loops in the
server as I can, since it's chewing CPU time. So now people are
grouped by channels instead of in one huge big list, which really
makes much more sense.
Changes:
* Fixed wierd bug
Commented out about 30 lines of code. What THE HELL was
that doing there :). Should clear a few bugs.
* Group Network sockets by Channels
Eradicate long loops and program overhead
* Fixed preset channels
A small bug in Build 14 made preset channels disapear.
FIXED!
Version 1.13.14 (Build 14)
--------------------------
Comments:
I have discovered something. I program as a kind of stress relief.
During my most happiest days in my life, the last 3 months :), I've
programmed just about zilch. Now that I'm getting extemely worried
about things, IE, very worried for my beautiful girlfriend, who
has certainly changed my life, I program, and boy do I. Many MANY
changes in this version. Ok, probably not very interesting
information to you, but if a physcologist happens to read this,
who knows :P
Changes:
* MORE bug fixes. Oh hell, someone kill me.
* SUDDENDEATH mode (So many people requested this)
After a set number of seconds, the game can go into
suddendeath, where lines start being added to everyones
screen.
* Persistant channels (Requested by so many people)
You can now create preset channels in game.conf, AND
you can even on the tetrinet game, make certain channels
persistant. Added the following commands:
- /persistant <0/1>
Make a channel persistant
- /save
SAVE persistant channels and info
to game.conf. Reasonably intelligent.
- /reset
LOAD all configuration from game.conf
* Updated logging
New game.conf tag: verbose. Setting a value to this
from 0-10, sets how verbose the log is. A good setting
is 4. An extremely noisy setting is 10.
* /SET command
Added a new TetriNET command. /Set.
Type /set help to find out what options there are.
/Set allows you to set the type of configuration, like
percentage of block types on a per channel basis.
If you get a channel just the way you want, AND you
own the server, AND you want to keep that channel for
future use. Just go /persistant to make it persistant, and
then /save to save it :). Saves having to try create
the info manually in game.conf.
Version 1.13.13 (Build 13)
--------------------------
Comments:
My last version was to put it plainly and very very nicely,
horribly horribly buggy. I'm hoping I've managed to quash
every one of those extemely annoying and frustrating bugs.
Introducing channels caused a LOT of problems. However,
things should be ok now.
Changes:
* Bug files galore (Too many to list)
* Update network engine
I found the eggdrop code I originally used a little
bit limiting. So I've heavily modified it to provide
full dynamic allocation of resources. This should
save a stack of memory. Next version, I'll
erradicate the many many loops.
Version 1.13.12 (Build 12)
--------------------------
Comments:
Quite a radical change in this one. Introduction of an IRC type
channel structure, to allow really powerful servers to run
multiple "virtual" tetrinet servers on the same port :) and IP.
Changes:
* Fixed up uninitilisation bugs
WOW, going through my code, I found so many places where
I simply did not initialize important variable because
I'd added them at a later date, and forgot to add
that in. How the previous versions worked, escapes me ;)
* Channel structure (Combined discussion anut, rainbrot, me)
Redesign the server to allow channels or "virtual" servers.
Essentially, when the server is configured to allow more
than just one channel, players may "/join" other channels,
and play on them, just as if they were seperate servers.
Also, When one channel fulls up, new players overflow to
new channels...
* Binding to IP's (Suggestion by [Op] - 2/11/98)
Before, the server listened to ALL IP's on the system.
If you want to run a seperate server on seperate IP's, then
you can now bind the server to specific IP's. Edit
game.conf and modify "bindip", and change it from 0.0.0.0
(All IP's), to that specific IP. Then you can run multiple
instances of the tetrinet server, if and only if they bind
to different IP's (and thus have different game.conf files).
* Added built-in commands:
- /join <#channelname|number>
Join or create a new virtual channel.
- /list
List all virtual channels on the server.
- /priority <Channel priority (1-99)>
Change channel priority. When a new player
connects to the server, they join the lowest
priority channel that is not full.
- /topic <channel topic>
Change topic of channel, showed in /list
- /who
Show ALL logged in players, and what channel
they are in.
* Added game.conf entries:
- bindip [0.0.0.0]
What IP to bind server to, or ALL (0.0.0.0)
- maxchannels [1]
How many virtual channels the server will
allow. The default 1, means no other channels
are available. You probably want to change this.
- command_join
- command_list
- command_priority
- command_topic
- commant_who
Permissions to use these commands.
Version 1.13.11 (Build 11)
--------------------------
Comments:
Geez, I seem to be making new builds daily :) I had to rush this
one out, because of one incredibly serious flaw in Build 10 that
I introduced by mistake. It didn't have a limit on the number of
players allowed to connect, and as soon as 7 players connect, havoc
reigns. Fixed phew.
Changes:
* Fixed max number of players
* Supports AdvancedQuery standard (Added by dds - 13/10/98)
Port 31456 allows the following advanced queries to
be sent to it:
- securequery server_password
Gives back <gameslot> <nick> <team> <host>
of each logged in player.
- killplayer server_password gameslot
Kicks the player occupying gameslot off server.
All the query code was sent in by dds.
* Fixed "playerquery" to count people waiting for teams as well
Whoops, forgot them, not that it would affect many servers.
* Introduced timeout variables in game.conf
Two new tags in game.conf introduced:
- timeout_ingame [60]
- timeout_outgame [1200]
They are the number of seconds of no activity before a
player is considered timed out, and dropped, when a person
is playing a game and when they are not. Note that during
a game, because the fields should update at most intervals
of 30seconds, the timeout for that should be much less,
then for when no game is player, when people do just
tend to sit there quietly (but not surely for 1200 seconds:)
Version 1.13.10 (Build 10)
--------------------------
Changes:
* Introduced timeouts (Suggestion by crazor - 17/9/98)
If no activity from a player, they are eventually
disconnected from the game.
* Updated playerquery (Suggestion by dds - 12/9/98)
Now returns a more accurate figure for number of logged
in players, since it now ONLY counts players that
are properly logged in, NOT ghost connections.
* Updated /msg /kick etc (Suggestion by iAM - 8/10/98)
Now, /msg etc... take for the playernumber argument
multiple playernumbers... IE: To msg players 2,3,5, you'd
write "/msg 235 My message". To kick players 1 and 6, you'd
write "/kick 16 My message"
* Fixed Winlist under TetriNET
I noticed that when someone has colour in their nicks,
and they get onto the winlist, then if the server sends
their nick _in colour_ to TetriNET client winlist, the
next time that person starts TetriNET client, it crashes.
Colour is now stripped out of the data sent to TetriNET
client winlist now.
* Added security levels (Suggestion by dds - 11/10/98)
dds suggested that I introduce a way to prevent /kicks or
/clears from being done by any player who just happens
to get op. So I've introduced security levels. The game.conf
options "command_<command>=number", has now been modified
so that you can have number to be one of the following:
0: disabled (IE:command_kick=0)
1: anyone can use (IE:command_winlist=1)
2: OP by position can use (IE:command_kick=2)
3: OP by "/op" can use (IE:command_clear=3)
This is so you can configure your server so that some
rogue person who happens to get position #1 can't say
/clear your winlist on a ladder server :P
Version 1.13.09 (Build 09)
--------------------------
Changes:
* Added tags to game.conf to allow more customization
stripcolour (Strip colour in gmsg's)
serverannounce (Server announces winner?)
pingintercept (Intercept Pings?)
command_kick (Allow /kick?)
command_msg (Allow /msg?)
command_op (Allow /op?)
command_winlist (Allow /winlist?)
command_help (Allow /help?)
command_clear (Allow /clear?)
* Patched /op command
Doesn't allow /op command while game is going :).
Version 1.13.08 (Build 08)
--------------------------
Comments:
Been about 2 or 3 weeks since I've worked on this, and for the
simple reason that I've completely head over heels fallen in
love :-). But I'm back onto it. Thanks for all those really
nice emails that came in.
Changes:
* Check for invalid winlist files.
If a winlist file is in the wrong format (Say from a
previous version) it is reset. Is there much need for
backwards compatibility here?
* Updated security
I knew I'd find some. Buffer overruns. Fixed.
* Updated /help
Now includes help on the new /msg, /winlist. Also looks
prettier ;)
* Added /op keyword (Suggestion by (jawfx@hotmail.com 21/9/98))
I've added some security functions as well, by popular
request.
In game.secure, if you uncomment the "op_password" tag
and put a password there, then if a player types
"/op <password>", where <password> is what is given
in the game.secure file, then that player will swap
places with the OP player. Yes, it works :)
If you don't have a game.secure file, then run the server
and it will automatically create one for you. Default's
to no password, which disables this feature.
* Made the colour stripping in gmsg less strict
Now only strips exact colour codes, not characters below
ascii 32
* Added /clear keyword (Suggestion by n|ck 6/10/98)
When the OP types /clear, the server will clear
it's internal winlist, and update all the clients.
Version 1.13.07 (Build 07)
--------------------------
Comments:
Oh geez, what a list of bugs ;). I've still not fixed some, but
as soon as I trace what they are, we'll see what can be done.
Please NOTE: This version uses a different format WINLIST file, and
has an extra option in the game.conf file. You will definately
have to delete "game.winlist", and you may want to delete
"game.conf" file. Yeah, I should have a mechanism that detects
corrupt winlist files... I will next version ;), otherwise
TetriNET client literally shits itself when funny winlist values
come through. Don't blame it either.
Changes:
* Fixed Winlist score. (dds reported it 18/9/98)
Fixed a silly error where I used signed numbers for
the winlist score, and thus -1 became some ridiculously
large number.
* Fixed TET_DEBUG entries in code
* Added "/winlist xx" to partyline (crazor 17/9/98)
If a person type "/winlist xx", where xx is the number of
winlist entries they want to display, then a rank
of the top xx entries are displayed, with the players
own team and player name highlighted in red.
* Added "/msg <playernum> <message>" (crazor 17/9/98)
Added a rather crude way to privately message someone
else in the party line. Crude in that the client
does not handle it too well, but hey, it works :)
* Added Hotswap of game.conf and game.winlist (crazor 17/9/98)
Before every game, the game config and winlist are re-read
so that if they are modified, the server does NOT have
to restart.
* Fixed Field Updating incorrectly on-join (iAM 17/9/98)
What a stupid error to make. Took me ages to trace it down.
* Added PID file (jawfx@hotmail.com - Ken Iverson 21/9/98)
Added open "pidfile" to game.conf. The server now writes
its PID to this file.
Version 1.13.06 (Build #6)
--------------------------
Changes:
* Better handling of what to do when a player quits.
In previous versions, when a currently playing player
leaves, my server didn't do a good enough job
of checking to see if only 1 team or 1 player was
left playing. Now it should stop the game and
add score to the winners properly.
* Modified "playerquery\xff" to "playerquery\n"
I thought that if you sent "playerquery\xff" to a real
TetriNET server it would be treated as junk and ignored.
However, it is interpreted and crashes it, so I've
changed it to "playerquery\n", where \n is newline, which
works as it should. What a mistaka to maka.
* Removed all snprintf and vsnprintf (drslum - 17/9/98)
For security reasons, I usually use bounds checking
functions. drslum has notified me that snprintf does not
exist under SUN systems. I now use other methods AND at
the same time fixed some small potential buffer over-run
problems. I would still not recommend the server be run as
root.
* Removed Colour VIOLET from being forced before every action.
This is due to the fact that TetriNET client actually
uses colours like toggles. If the action was already
VIOLET, that is, the player had no colour codes in their
nick, then it became black. I'll fix this by scanning
the nick for colour codes in my next build ;)
Version 1.13.01-1.13.05 (Build #1, #2, #3, #4, #5)
--------------------------------------------------
Consider these version as the "undistributed" versions. They were my private
major changes to the TetriNET server, each time I wanted to add something
in.
At this stage, the server behaves and looks from the client exactly like a
TetriNET Server behaves, with some small exceptions, listed in the
"Features" section.
Features:
* /kick <playernumber>
The "op" of the server can now kick players using this
keyword in the partyline. Normally, unless YOU are the
server, TetriNET won't allow you to kick a player.
* PING-PONG in GameMessage
I got sick of people filling the game message with "t", to
test the speed of the Server. While a completely valid thing
to do, sometimes it scrolled important messages away.
Now, if a player in a game sends "t" to the game message,
the server will reply to them, and only to them "PONG", and
not forward the "t" to the other players.
* Colour Nicks in Game Message
People with color nicks were just about unrecognizable in
game messages, because colour is not parsed there by the
client. Now if a player has colour codes in their nick, and
they send a game message, that message has the colour
codes stripped out of the nick portion.
* Colour Nicks in Party Line
Before every message, a "BLACK" colour code is placed, so
that the colour from the nick doesn't reach the line.
Before every action, a "VIOLET" colour code is placed, so
that the colour from the nick doesn't affect the action.
* game.motd
When a player connects to the server, if there is a
game.motd file, it is sent to them as from "<Server>".
* End of game, annouce winner
Ever wonder who won? At the end of a game, the "<Server>"
will announce the player or team that won.
* /help partyline keyword
If someone types "/help" in the party line, they get a list
of commands that are available, like "/me" and "/kick".
* playerquery
If a client connects to the Server, and instead of sending
their INIT string, sends "playerquery\n", \n is newline
"Number of players logged in: n"
Where n is the number of players logged in. This is
fully compatible with real TetriNET servers, since they
will just disconnect you, whereas mine returns the number
of players before disconnecting you.
* 100 item winlist
Yep, for those incredibly long ladder games, I've extended
the winlist to store the top 100 teams/players. Of course
only the top 10 are shown in the TetriNET winlist, but
now you know you can work you way up :)
|