ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/ext/login.ext
(Generate patch)

Comparing deliantra/server/ext/login.ext (file contents):
Revision 1.31 by root, Sat Feb 17 23:54:35 2007 UTC vs.
Revision 1.32 by root, Mon Apr 2 18:04:45 2007 UTC

2 2
3# login handling 3# login handling
4 4
5use Fcntl; 5use Fcntl;
6use Coro::AIO; 6use Coro::AIO;
7use List::Util qw(min max);
7 8
8my $PLAYERDIR = sprintf "%s/%s", cf::localdir, cf::playerdir; 9my $PLAYERDIR = sprintf "%s/%s", cf::localdir, cf::playerdir;
9 10
10# paranoia function to overwrite a string-in-place 11# paranoia function to overwrite a string-in-place
11sub nuke_str { 12sub nuke_str {
80} 81}
81 82
82sub addme { 83sub addme {
83 my ($ns) = @_; 84 my ($ns) = @_;
84 85
85 $ns->destroy if $ns->pl; 86 if (!$ns->facecache)
87 {
88 $ns->send_drawinfo (<<EOF, cf::NDI_RED);
89
90
91***
92*** WARNING:
93*** Your client does not support face/image caching,
94*** or it has been disabled. Face caching is mandatory
95*** so please enable it or use a newer client.
96***
97*** Look at your client preferences:
98***
99*** CFPlus: all known versions automatically enable the facecache.
100*** cfclient: use the -cache commandline option.
101*** cfclient: map will not redraw automatically (bug).
102*** gcfclient: use -cache commandline option, or enable
103*** gcfclient: Client=>Configure=>Map & Image=>Cache Images.
104*** jcrossclient: your client is broken, use CFPlus or gcfclient.
105***
106***
107EOF
108 if ($ns->version =~ /jcrossclient/) {
109 # let them, for now
110 } else {
111 $ns->flush;
112 return $ns->destroy;
113 }
114
115 # $ns->facecache = true;
116 }
117
118 $ns->pl and return $ns->destroy;
86 119
87 $ns->async (sub { 120 $ns->async (sub {
88 my ($user, $pass); 121 my ($user, $pass);
89 122
90 $ns->send_packet ("addme_success"); 123 $ns->send_packet ("addme_success");
338 $pl->{unclean_save} = $cf::RUNTIME; 371 $pl->{unclean_save} = $cf::RUNTIME;
339 } 372 }
340 }, 373 },
341); 374);
342 375
376sub setup {
377 my ($ns, $args) = @_;
378
379 # run through the cmds of setup
380 # syntax is setup <cmdname1> <parameter> <cmdname2> <parameter> ...
381 #
382 # we send the status of the cmd back, or a FALSE is the cmd is the server unknown
383 # The client then must sort this out
384
385 my %setup = split / +/, $args;
386 while (my ($k, $v) = each %setup) {
387
388 if ($k eq "sound") {
389 $ns->sound ($v);
390
391 } elsif ($k eq "exp64") {
392 $setup{$k} = 1;
393
394 } elsif ($k eq "spellmon") {
395 $ns->monitor_spells ($v);
396
397 } elsif ($k eq "darkness") {
398 $ns->darkness ($v);
399
400 } elsif ($k eq "map1cmd") {
401 $ns->mapmode (cf::Map1Cmd) if $v > 0;
402
403 } elsif ($k eq "map1acmd") {
404 $ns->mapmode (cf::Map1aCmd) if $v > 0;
405
406 } elsif ($k eq "newmapcmd") {
407 $ns->newmapcmd ($v);
408
409 } elsif ($k eq "mapinfocmd") {
410 $ns->mapinfocmd ($v);
411
412 } elsif ($k eq "extcmd") {
413 $ns->extcmd ($v > 0);
414
415 } elsif ($k eq "extmap") {
416 $ns->extmap ($v);
417
418 } elsif ($k eq "facecache") {
419 $ns->facecache ($v);
420
421 } elsif ($k eq "faceset") {
422 $ns->faceset (0);
423 $setup{$k} = 0;
424 # $ns->image2 (1)
425
426 } elsif ($k eq "itemcmd") {
427 # Version of the item protocol command to use. Currently,
428 # only supported versions are 1 and 2. Using a numeric
429 # value will make it very easy to extend this in the future.
430 $ns->itemcmd ($v) if $v >= 1 && $v <= 2;
431
432 $setup{$k} = $ns->itemcmd;
433
434 } elsif ($k eq "mapsize") {
435 my ($x, $y) = split /x/, $v;
436
437 $ns->mapx ($x = max 9, min cf::MAP_CLIENT_X, $x);
438 $ns->mapy ($y = max 9, min cf::MAP_CLIENT_Y, $y);
439
440 $setup{$k} = "${x}x${y}";
441
442 } elsif ($k eq "extendedMapInfos") {
443 $ns->ext_mapinfos ($v);
444
445 } elsif ($k eq "extendedTextInfos") {
446 $ns->has_readable_type ($v);
447
448 } else {
449 # other commands:
450 # sexp: no idea, probably for oudated servers
451 # tick: more stupidity, server should sned a tick per tick
452
453 $setup{$k} = "FALSE";
454 }
455 }
456
457 $ns->send_packet (join " ", setup => %setup);
458
459 cf::datalog setup =>
460 request => $args,
461 reply => \%setup,
462 client => $ns->version,
463 ;
464}
465
343cf::client->attach ( 466cf::client->attach (
344 on_addme => \&addme, 467 on_addme => \&addme,
468 on_setup => \&setup,
345); 469);
346 470
347############################################################################# 471#############################################################################
348 472
349our $SCHEDULE_INTERVAL = 10; # time the player scheduler sleeps between runs 473our $SCHEDULE_INTERVAL = 10; # time the player scheduler sleeps between runs

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines