; TDCC v0.6 by Tritian ; A subscript of PimpIRC by Tritian ; 4-18-98 ; ; mailto:Tritian@PlanetQuake.com ; http://www.pimpin.net/~tritian/ ; ; Ok, all them XiRCON users keep bragging about TDCC support ; in XiRCON.. but hey, who can blaim em? It's about twice as ; fast on average then normal DCC. I've gotten 3.2kps TDCC ; transfers with this script on a 33.6, and i've never dropped ; below 2kps. With normal DCC i get around 0.6kps to 1.4kps ; ; So i sat down one day and wanted to bring the world of TDCC ; to all mIRC users everywhere. Maybe now those XiRCON'ers ; will shut up eh? Then again... probably not, but it's worth ; a try. ; ; This script was written as an additional DCC protocal as if ; Khaled wrote it in mIRC himself (which he should). Currently ; this script tries it's best to imitate the current DCC setup ; but due to some hard coded limitation in mIRC, i cannot ; completely recreate some ways that normal DCC behaves (namely ; the DCC ACCEPT dialog boxes) ; ; This script does come pretty damn close to recreated a DCC ; GET/SEND progress window. I did take some liberty in adding ; a KPS indicator instead of the traditional CPS indicator. ; CPS is dead anyway, it died with the days of the BBS, let it ; rest in piece. I also used $duration to get the hour/min/secs ; to look how i feel it should look. Currently Khaled uses some ; wack HR:MN:SC format thing which is just wierd and i never ; really liked it. ; ; Just do a /tdcc SEND or use the nicklist popups ; The next version should have resume. I know it's a tad ; clunky now but hey, atleast it works (for the most part) ; ; Thanks to luser for all his help with the math (a subject that ; I am less then remarkable in.) menu nicklist { TDCC Send:/tdcc send $1 $dir="Choose a file" *.* } menu menubar { TDCC Send:/tdcc send $?="Enter nickname" $dir="Choose a file" *.* } menu query { TDCC Send:/tdcc send $active $dir="Choose a file" *.* } alias TDCC { if $1 == ACCEPT { set %tdcc.sent.rcvd Rcvd set %tdcc.session Get tdcc_w %tdcc.rcvd.file = $sdir="Select Save Location" *.* $+ %tdcc.send.file set %tdcc.progress.elapsed 0 set %tdcc.last.ctime $ctime set %tdcc.send.pos 0 drawrect -fn @TDCC $colour(back) $colour(back) 5 25 1000 15 drawtext @TDCC $colour(norm) Fixedsys 9 5 25 From: $+ %tdcc.send.nick drawrect -fn @TDCC $colour(back) $colour(back) 5 40 1000 15 drawtext @TDCC $colour(norm) Fixedsys 9 5 40 File: $+ %tdcc.send.file drawrect -fn @TDCC $colour(back) $colour(back) 5 55 1000 20 drawtext @TDCC $colour(norm) Fixedsys 9 5 55 Size: $+ %tdcc.send.size bytes drawrect -fn @TDCC $colour(back) $colour(back) 200 75 1000 15 drawtext @TDCC $colour(info) Fixedsys 9 200 75 Sent: $+ %tdcc.send.pos sockopen TDCC_RECIEVE $longip(%tdcc.send.longip) %tdcc.send.port } if $1 == SEND { if $3 != $null { if $exists($3) { if ($2 != $me) set %tdcc.send.nick $2 else { echo $colour(ctcp) -s *** Error: Sending files to yourself may cause mIRC to crash! | halt } set %tdcc.last.ctime $ctime set %tdcc.progress.elapsed 0 set %tdcc.sent.rcvd Sent set %tdcc.session Send tdcc_w set %tdcc.send.port $rand(2510,2550) drawrect -fn @TDCC $colour(back) $colour(back) 5 25 1000 15 drawtext @TDCC $colour(norm) Fixedsys 9 21 25 To: $+ %tdcc.send.nick set %tdcc.send.file $3 drawrect -fn @TDCC $colour(back) $colour(back) 5 40 1000 15 drawtext @TDCC $colour(norm) Fixedsys 9 5 40 File: $+ %tdcc.send.file set %tdcc.send.size $lof($3) drawrect -fn @TDCC $colour(back) $colour(back) 5 55 1000 20 drawtext @TDCC $colour(norm) Fixedsys 9 5 55 Size: $+ %tdcc.send.size bytes set %tdcc.send.pos 0 drawrect -fn @TDCC $colour(back) $colour(back) 200 75 1000 15 drawtext @TDCC $colour(info) Fixedsys 9 200 75 Sent: $+ %tdcc.send.pos socklisten TDCC_SEND_TEMP %tdcc.send.port .raw privmsg $2 : $+ $chr(1) $+ DCC TSEND $nopath(%tdcc.send.file) $longip($ip) %tdcc.send.port %tdcc.send.size $+ $chr(1) draw.progress } else { echo $colour(ctcp) -s *** Error: Unable to access file $chr(91) $+ $3 $+ $chr(93) } else { echo 9 -a *** TDCC Syntax: /TDCC } } } } ctcp 1:DCC:*: { if $2 == TSEND { if %tdcc.send.file == $null { echo $colour(ctcp) -ai2 *** Incoming TDCC SEND from $nick of $3 (Type /TDCC ACCEPT to accept) set %tdcc.send.nick $nick set %tdcc.send.file $3 set %tdcc.rcvd.file $3 set %tdcc.send.size $6 set %tdcc.send.port $5 set %tdcc.send.longip $4 beep } else { notice $nick Sorry, i already have 1 TDCC session open already } } } alias tdcc_w { window -ap +snt @TDCC 200 200 350 200 drawtext @TDCC $colour(notice) Fixedsys 9 5 5 TDCC %tdcc.session session ; drawtext @TDCC $colour(norm) Fixedsys 9 5 25 From:n/a ; drawtext @TDCC $colour(norm) Fixedsys 9 5 40 File:n/a ; drawtext @TDCC $colour(norm) Fixedsys 9 5 55 Size:n/a drawtext @TDCC $colour(info2) Fixedsys 9 5 75 Time:n/a drawtext @TDCC $colour(info2) Fixedsys 9 5 90 Left:n/a drawtext @TDCC $colour(info) Fixedsys 9 200 75 %tdcc.sent.rcvd $+ : $+ n/a drawtext @TDCC $colour(info) Fixedsys 9 208 90 Kps:n/a drawtext @TDCC $colour(notice) Fixedsys 9 5 110 Transmitting request... drawtext @TDCC $colour(notice) Fixedsys 9 5 125 Waiting for connection... set %tdcc.window.w $window(@TDCC).w drawrect -f @TDCC 16 2 5 145 331 20 drawtext -c @TDCC 4 Fixedsys 9 10 148 $calc(%tdcc.window.w - 19) 20 0% drawrect @TDCC 1 1 5 145 331 20 } alias draw.info { set %tdcc.progress.elapsed $calc($ctime - %tdcc.last.ctime + %tdcc.progress.elapsed) drawrect -fn @TDCC $colour(back) $colour(back) 5 75 181 15 drawtext @TDCC $colour(info2) Fixedsys 9 5 75 Time: $+ $duration(%tdcc.progress.elapsed) set %tdcc.progress.temp1 $calc(%tdcc.progress.elapsed * %tdcc.send.size / %tdcc.send.sent) set %tdcc.progress.left $calc(%tdcc.progress.temp1 - %tdcc.progress.elapsed) drawrect -fn @TDCC $colour(back) $colour(back) 5 90 181 15 drawtext @TDCC $colour(info2) Fixedsys 9 5 90 Left: $+ $duration(%tdcc.progress.left) set %tdcc.progress.kps $calc(%tdcc.send.sent / %tdcc.progress.elapsed / 1024) drawrect -fn @TDCC $colour(back) $colour(back) 208 90 1000 15 drawtext @TDCC $colour(info) Fixedsys 9 208 90 Kps: $+ $round(%tdcc.progress.kps,2) set %tdcc.last.ctime $ctime } alias draw.progress { set %tdcc.window.w $window(@TDCC).w set %tdcc.progress.temp2 $calc(%tdcc.send.sent / %tdcc.send.size) set %tdcc.progress.percent $calc(%tdcc.progress.temp2 * 100) set %tdcc.progress.barstart 3 set %tdcc.progress.barend $calc(%tdcc.window.w - 19) set %tdcc.progress.bartemp1 $calc(5 + %tdcc.progress.barend) set %tdcc.progress.bartemp2 $calc(%tdcc.progress.percent / 100) set %tdcc.progress.barmove $calc(%tdcc.progress.bartemp1 * %tdcc.progress.bartemp2 - 5) set %tdcc.progress.bartext $calc(%tdcc.progress.barmove + 5) drawrect -nf @TDCC 16 10 5 145 $calc(%tdcc.window.w - 19) 20 drawrect -rf @TDCC $rgb(88,88,240) 10 5 145 %tdcc.progress.barmove 20 drawtext -nc @TDCC 4 Fixedsys 9 $calc(%tdcc.progress.bartext + 5) 148 $calc(%tdcc.window.w - 19) 20 $int(%tdcc.progress.percent) $+ % drawrect -f @TDCC $colour(back) 10 $calc(%tdcc.window.w - 14) 145 60 20 drawrect @TDCC 1 1 5 145 $calc(%tdcc.window.w - 19) 20 titlebar @TDCC - $int(%tdcc.progress.percent) $+ % Completed } on 1:socklisten:TDCC_SEND_TEMP:{ drawrect -fn @TDCC $colour(back) $colour(back) 5 110 1000 15 drawtext @TDCC $colour(notice) Fixedsys 9 5 110 Connection accepted drawrect -fn @TDCC $colour(back) $colour(back) 5 125 1000 15 drawtext @TDCC $colour(notice) Fixedsys 9 5 125 Transfering file, standby... .timerTDCC 0 1 draw.info sockaccept TDCC_SEND tdcc.send.packet } alias tdcc.send.packet { bread %tdcc.send.file %tdcc.send.pos 4096 &data sockwrite -n TDCC_SEND &data inc %tdcc.send.pos 4096 if (%tdcc.send.sent => %tdcc.send.size) { sockclose TDCC_SEND sockclose TDCC_SEND_TEMP .timerTDCC off drawrect -fn @TDCC $colour(back) $colour(back) 5 110 1000 15 drawtext @TDCC $colour(notice) Fixedsys 9 5 110 Connection closed drawrect -fn @TDCC $colour(back) $colour(back) 5 125 1000 15 drawtext @TDCC $colour(notice) Fixedsys 9 5 125 Transfer completed drawrect -fn @TDCC $colour(back) $colour(back) 200 75 1000 15 drawtext @TDCC $colour(info) Fixedsys 9 200 75 Sent: $+ %tdcc.send.size if ($round(%tdcc.progress.kps,2) == $null) { set %tdcc.done.kps n/a | set %tdcc.done.time n/a) } else { set %tdcc.done.kps $round(%tdcc.progress.kps,2) | set %tdcc.done.time $duration(%tdcc.progress.elapsed) } echo $colour(ctcp) -s TDCC Send of %tdcc.send.file to %tdcc.send.nick completed ( $+ %tdcc.done.time %tdcc.done.kps $+ kps $+ ) } } on 1:sockwrite:TDCC_SEND:{ set %tdcc.send.sent $sock($sockname).sent drawrect -fn @TDCC $colour(back) $colour(back) 200 75 1000 15 drawtext @TDCC $colour(info) Fixedsys 9 200 75 Sent: $+ %tdcc.send.sent draw.progress tdcc.send.packet } on 1:sockclose:TDCC_SEND:{ echo 9 -a TDCC: Transfer complete! sockclose TDCC_SEND unset %tdcc.* .timerTDCC off if (%tdcc.send.sent != %tdcc.send.size) { echo $colour(ctcp) -s TDCC Send of %tdcc.send.file to %tdcc.send.nick incomplete (Connection terminated) } } on 1:CLOSE:@TDCC: { unset %tdcc.* .timerTDCC off sockclose TDCC* } on 1:sockopen:TDCC_RECIEVE:{ .timerTDCC 0 1 draw.info } on 1:sockread:TDCC_RECIEVE:{ :np sockread &data bwrite [ " $+ [ %tdcc.rcvd.file ] $+ " ] -1 &data set %tdcc.send.sent $sock($sockname).rcvd drawrect -fn @TDCC $colour(back) $colour(back) 200 75 1000 15 drawtext @TDCC $colour(info) Fixedsys 9 200 75 Rcvd: $+ %tdcc.send.sent draw.progress if ($sock(rf).rq > 0) goto np } on 1:sockclose:TDCC_RECIEVE:{ drawrect -fn @TDCC $colour(back) $colour(back) 5 110 1000 15 drawtext @TDCC $colour(notice) Fixedsys 9 5 110 Connection closed drawrect -fn @TDCC $colour(back) $colour(back) 5 125 1000 15 drawtext @TDCC $colour(notice) Fixedsys 9 5 125 Transfer completed drawrect -fn @TDCC $colour(back) $colour(back) 200 75 1000 15 drawtext @TDCC $colour(info) Fixedsys 9 200 75 Rcvd: $+ %tdcc.send.size sockclose TDCC unset %tdcc.* .timerTDCC off }