home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 February / chip_20022115.iso / amiga / chiputil / amiquiz.lha / amiquiz_pl.rexx < prev    next >
OS/2 REXX Batch file  |  2001-12-17  |  12KB  |  447 lines

  1. /*
  2. NAME:   amiquiz.rexx
  3. AUTHOR: Emers/Appendix (emers@px.pl)
  4. VER:    1.0 (pl, col, WinUAE trojan free)
  5. DATE:   17.12.2001
  6. USAGE:  /rx amirc.rexx in AmIRC window or rx amiquiz.rexx in CLI (recommended)
  7. */
  8.  
  9. /****************************************************************/
  10. /*C O N F I G U R A T I O N*/
  11. series=20
  12. stats_every=10
  13. ircnick='AmiQuiz'
  14. questfile='pytania.scena'
  15. chan='#amiquiz'
  16.  
  17. amircport='AMIRC.2'
  18. viamsg=0
  19. /****************************************************************/
  20. /*DONT EDIT LINES BELOW*/
  21.  
  22. OPTIONS RESULTS
  23.  
  24. IF ~SHOW( 'P', amircport ) THEN DO
  25.     ADDRESS COMMAND 'echo 'amircport' is not active!'
  26.     EXIT 10
  27. END
  28.  
  29. ADDRESS (amircport)
  30.  
  31. plridx=0
  32. running=1
  33. game=0
  34. podpow=0
  35. answersize=0
  36. seekquestion=0
  37.  
  38. text='/join' chan
  39. CALL ToChannelInit
  40. text='/nick' ircnick
  41. CALL ToChannelInit
  42. text='/topic /msg' ircnick '!pomoc'
  43. CALL ToChannelInit
  44. CALL Pause
  45. text=D2C(3)'4,1Witam w 'D2C(3)'8,1amiquiz.rexx 'D2C(3)'11,1(Amiga)'
  46. CALL ToChannel
  47. text=D2C(3)'4,1Wpisz 'D2C(3)'8,1!gra 'D2C(3)'4,1by zaczac quiz lub 'D2C(3)'8,1!pomoc 'D2C(3)'4,1by uzyskac pomoc'
  48. CALL ToChannel
  49. CALL Pause
  50.  
  51. GETMYNICK
  52. ircnick=result
  53. GETSERVERNAME
  54. serv=result
  55. say
  56. say 'My nick is' ircnick' and I am connected to 'serv
  57. say 'Quiz channel is:' chan
  58. say
  59.  
  60. DO WHILE running=1
  61.     DO WHILE game=0
  62.         GetLine
  63.         PARSE VAR line.prefix nick '!' something
  64.         PARSE VAR line.rest ':!' comnd argument
  65.         IF UPPER(comnd)='QUIT' THEN CALL QuitQuiz
  66.         IF UPPER(comnd)='POMOC' THEN CALL PrintHelp
  67.         IF UPPER(comnd)='INFO' THEN CALL ShowInfo
  68.         IF UPPER(comnd)='GRA' THEN DO
  69.             CALL OPEN('questions',questfile,'R')
  70.             text=D2C(3)'4,1Licze pytania w bazie danych...'
  71.             CALL ToChannel
  72.             CALL CountQuestions
  73.             text=D2C(3)'4,1Ilosc pytan w bazie:'D2C(3)'11,1 ' numofquest||'.'
  74.             CALL ToChannel
  75.             game=1
  76.         END
  77.     END
  78.   
  79.     text=D2C(3)'8,1UWAGA 'D2C(3)'4,1- Rozpoczynam nowa gre, seria'D2C(3)'11,1 'series D2C(3)'4,1pytan. Statystyki co'D2C(3)'11,1 ' stats_every D2C(3)'4,1pytan.'
  80.     CALL ToChannel
  81.     CALL NextQuestions
  82.     result.=0
  83.     players=0
  84.    
  85.     DO quest_index=1 TO series
  86.         CALL ClearPlayers
  87.         CALL GetQuestion
  88.         seekquestion=seekquestion+1
  89.         PARSE VAR line_ question ':' answer
  90.         text=D2C(3)'4,8pytanie' quest_index||':'
  91.         CALL Pause
  92.  
  93.         CALL ToChannel
  94.         text=D2C(2)D2C(3)'12'||question
  95.         CALL ToChannel
  96.         Say 'Question was asked'
  97.  
  98.         hint=0
  99.         good_answer=0
  100.             
  101.         DO WHILE good_answer=0
  102.             GetLastLine
  103.             rawline=RESULT
  104.             IF rawline~=oldline THEN DO
  105.                 oldline=rawline
  106.                 ParseLine rawline
  107.  
  108.                 PARSE VAR line.prefix nickstat '!' something
  109.                 PARSE VAR line.rest ':!' comndstat
  110.                 IF UPPER(comndstat)='TOPTEN' THEN CALL DisplayResults
  111.                 IF UPPER(comndstat)='STAT' THEN CALL DisplayStats
  112.  
  113.                 PARSE VAR line.prefix nick '!' something
  114.                 IF UPPER(line.dest)=UPPER(chan) | nick=ircnick THEN DO
  115.                     Say 'Message from' nick
  116.  
  117.                     /* check for commands */
  118.                     PARSE VAR line.rest ':!' comndmsg argument1
  119.                     IF UPPER(comndmsg)='POMOC' THEN CALL PrintHelp
  120.                     IF UPPER(comndmsg)='RELOAD' THEN CALL ReloadQuestions
  121.                     IF UPPER(comndmsg)='STOP' THEN CALL EndQuiz
  122.                     IF UPPER(comndmsg)='INFO' then CALL ShowInfo
  123.                     IF UPPER(comndmsg)='QUIT' THEN CALL QuitQuiz
  124.                     IF UPPER(comndmsg)='NICK' then CALL ChangeNick
  125.                     IF UPPER(comndmsg)='DALEJ' then CALL SkipQuestion
  126.                     IF UPPER(comndmsg)='PODP' then CALL HintAnswer
  127.             
  128.                     IF COMPRESS(UPPER(line.rest),': ')=COMPRESS(UPPER(answer)) THEN DO
  129.  
  130.                         /* find player index */
  131.                         DO plridx=1 TO players
  132.                             IF result.plridx.nickname==nick THEN LEAVE plridx
  133.                         END
  134.  
  135.                         /* check for new players */
  136.                         Say 'index:' plridx 'nick:' nick 'table:' result.plridx.nickname
  137.                         IF result.plridx.nickname~=nick THEN DO
  138.                             players=players+1
  139.                             plridx=players
  140.                             result.plridx.nickname=nick
  141.                             Say 'New player' result.plridx.nickname 'nr' plridx
  142.                         END
  143.            
  144.                         IF result.plridx.correct=0 THEN DO
  145.                             result.plridx.correct=1
  146.                             result.plridx.good=result.plridx.good+1
  147.                                 DO sst=1 TO players
  148.                                     IF result.sst.nickname==nick THEN DO
  149.                                         text=D2C(2)D2C(3)'11,1'nick': 'D2C(3)'6,1DOBRZE! 'D2C(3)'4,1Masz juz'D2C(3)'8,1 'result.sst.good' 'D2C(3)'4,1pkt.'
  150.                                         CALL ToChannel
  151.                                     END
  152.                                 END
  153.                             Say 'Good answer by 'nick
  154.                             good_answer=1
  155.                             CALL SortTable
  156.                         END
  157.                     END
  158.                 END
  159.             END
  160.         END
  161.         text=D2C(2)D2C(3)'12Poprawna odpowiedz to' D2C(3)'4 '||answer||D2C(2)||'.'
  162.         CALL ToChannel
  163.         IF quest_index//stats_every=0 THEN CALL DisplayResults
  164.     END
  165.     text=D2C(3)'4,1Gra zakonczona, zwyciezyl(a)'D2C(3)'11,1 'result.1.nickname||'.'
  166.     CALL ToChannel
  167.     IF quest_index//stats_every~=0 THEN CALL DisplayResults
  168.     CALL Pause
  169.     CALL ClearPlayers
  170.     CALL CLOSE('questions')
  171.     plridx=0
  172.     hint=0
  173.     answersize=0
  174.     numofquest=0
  175.     players=0
  176.     game=0
  177. END
  178. exit 0
  179. /*===========================================================================*/
  180.  
  181. ClearPlayers:
  182.  
  183. DO i=1 TO players
  184.     result.i.correct=0
  185. END
  186. RETURN
  187.  
  188. /*===========================================================================*/
  189.  
  190. CountQuestions:
  191.  
  192. numofquest=0
  193. DO WHILE EOF('questions')=0
  194.     trash=READLN('questions')
  195.     IF trash="" THEN LEAVE
  196.     numofquest=numofquest+1
  197. END
  198. CALL SEEK('questions',0,'B')
  199. RETURN
  200.  
  201. /*===========================================================================*/
  202.  
  203. ChangeNick:
  204.  
  205. IF argument1="" THEN DO
  206.     say 'Nick cannot be changed'
  207.     header='/msg' nick
  208.     text=header 'Zle argumenty! Wpisz !NICK starynick'
  209.     CALL ToChannel
  210. END
  211. ELSE DO
  212.     DO i=1 TO players
  213.     IF UPPER(result.i.nickname)=UPPER(argument1) THEN result.i.nickname=nick
  214.     END
  215.     text=D2C(3)'8,1'argument1||D2C(3)'4,1 jest teraz znany jako 'D2C(3)'11,1'nick
  216.     CALL ToChannel
  217.     say 'Nick changed 'argument1 '->' nick
  218. END
  219. RETURN
  220.  
  221. /*===========================================================================*/
  222.  
  223. SortTable:
  224.  
  225. Say 'Sorting table'
  226. DO i=1 TO players-1
  227.     ii=i+1
  228.     IF result.i.good<result.ii.good THEN DO
  229.         temp=result.ii.nickname
  230.         result.ii.nickname=result.i.nickname
  231.         result.i.nickname=temp
  232.         temp=result.ii.good
  233.         result.ii.good=result.i.good
  234.         result.i.good=temp
  235.         temp=result.ii.correct
  236.         result.ii.correct=result.i.correct
  237.         result.i.correct=temp
  238.     END
  239. END
  240. RETURN
  241.  
  242. /*===========================================================================*/
  243.  
  244. DisplayResults:
  245.  
  246. text=D2C(3)'12,7Pierwsza dycha:'
  247. CALL ToChannel
  248. z=10
  249. IF players<10 THEN z=players
  250. DO i=1 TO z
  251.    text=D2C(2)D2C(3)'6,1 'i||'.' D2C(3)'8,1 'result.i.nickname||':' D2C(3)'11,1 'result.i.good' 'D2C(3)'4,1pkt.'
  252.    CALL ToChannel
  253. END
  254. RETURN
  255.  
  256. /*===========================================================================*/
  257.  
  258. DisplayStats:
  259.  
  260. say nick 'asked for statistics'
  261.  
  262. IF players>0 THEN DO
  263.     DO st=1 TO players
  264.         IF result.st.nickname==nickstat THEN DO
  265.             text=D2C(2)D2C(3)'6,1 'st||'.'D2C(3)'8,1 'result.st.nickname||':'D2C(3)'11,1 'result.st.good' 'D2C(3)'4,1pkt.'
  266.             CALL ToChannel
  267.         END
  268.     END
  269. END
  270. RETURN
  271.  
  272. /*===========================================================================*/
  273.  
  274. Pause:
  275.  
  276. ADDRESS COMMAND
  277. Wait 6
  278. ADDRESS (amircport)
  279. RETURN
  280.  
  281. /*===========================================================================*/
  282.  
  283. ToChannel:
  284. if viamsg=1 then do
  285.     'say /msg' chan text
  286. END
  287. else do
  288.     'Say' text
  289. END
  290. RETURN
  291.  
  292. /*===========================================================================*/
  293.  
  294. ToChannelInit:
  295. 'Say' text
  296. RETURN
  297.  
  298. /*===========================================================================*/
  299.  
  300. PrintHelp:
  301.  
  302. header='/msg' nick
  303. text=header 'Odpowiedzi podajemy na kanale. Kto pierwszy odpowie poprawnie, ten zdobywa punkt'
  304. CALL ToChannelInit
  305. text=header 'Komendy dostepne na kanale: !gra, !pomoc, !stat, !topten, !podp, !info, !nick <stary> (zmienia na liscie stary nick na obecny)'
  306. CALL ToChannelInit
  307. RETURN
  308.  
  309. /*===========================================================================*/
  310.  
  311. EndQuiz:
  312.  
  313. GETMYNICK
  314. ircnick=result
  315. IF nick=ircnick THEN DO
  316.     text=D2C(2)D2C(3)'11,1Quiz przerwany.'
  317.     CALL ToChannel
  318.     CALL ClearPlayers
  319.     good_answer=1
  320.     game=0
  321.     quest_index=series
  322.     CALL CLOSE('questions')
  323.     
  324. END
  325. ELSE DO
  326.     say 'Unauthorized ending by' nick
  327. END
  328. RETURN
  329.  
  330. /*===========================================================================*/
  331.  
  332. QuitQuiz:
  333.  
  334. GETMYNICK
  335. ircnick=result
  336. IF nick=ircnick THEN DO
  337.     text=D2C(2)D2C(3)'11,1Quiz zostal wylaczony'
  338.     CALL ToChannel
  339.     CALL CLOSE('questions')
  340.     running=0
  341.     exit 0
  342. END
  343. ELSE DO
  344.     say 'Unauthorized quiting by' nick
  345. END
  346. RETURN
  347.  
  348. /*===========================================================================*/
  349.  
  350. ReloadQuestions:
  351.  
  352. GETMYNICK
  353. ircnick=result
  354. IF nick=ircnick THEN DO
  355.     CALL CLOSE('questions')
  356.     ADDRESS COMMAND
  357.     'Rename 'questfile' 'questfile'.old'
  358.     'Rename 'questfile'.new 'questfile
  359.     ADDRESS (amircport)
  360.     CALL OPEN('questions','questions','R')
  361.     CALL CountQuestions
  362.     say 'Questions was reloaded'
  363. END
  364. ELSE DO
  365.     say 'Unauthorized reload by' nick
  366. END
  367. RETURN
  368.  
  369. /*===========================================================================*/
  370.  
  371. NextQuestions:
  372.  
  373. IF seekquestion=numofquest THEN DO
  374.     seekquestion=0
  375.     CALL CLOSE('questions')
  376.     CALL OPEN('questions',questfile,'R')
  377.     say 'Questions back to begin'
  378. END
  379. DO ii=1 TO seekquestion
  380.    IF EOF('questions')=1 THEN DO
  381.       CALL SEEK('questions',0,'B')
  382.    END
  383.    trash=READLN('questions')
  384. END
  385. RETURN
  386.  
  387. /*===========================================================================*/
  388.  
  389. ShowInfo:
  390.  
  391. header='/msg' nick
  392. text=header 'amiquiz.rexx v1.0 by Emers/Appendix (emers@px.pl)'
  393. CALL ToChannelInit
  394. RETURN
  395.  
  396. /*===========================================================================*/
  397.  
  398. SkipQuestion:
  399.  
  400. GETMYNICK
  401. ircnick=result
  402. IF nick=ircnick THEN DO
  403.     good_answer=1
  404.     say 'Question skipped'
  405.     text=D2C(2)D2C(3)'4,1Rezygnacja z odpowiedzi'
  406.     CALL ToChannel
  407. END
  408. ELSE DO
  409.     say 'Unauthorized skipping by' nick
  410. END
  411. RETURN
  412.  
  413. /*===========================================================================*/
  414.  
  415. GetQuestion:
  416.  
  417. IF seekquestion=numofquest THEN DO
  418.     seekquestion=0
  419.     CALL CLOSE('questions')
  420.     CALL OPEN('questions',questfile,'R')
  421.     say 'Questions back to begin'
  422. END
  423. line_ = READLN('questions')
  424. RETURN
  425.  
  426. /*===========================================================================*/
  427.  
  428. HintAnswer:
  429.  
  430. answersize=length(answer)
  431. hint=hint+1
  432. if hint<answersize then do
  433.     text=D2C(3)'8,12Podpowiedz:'D2C(3)'11,1 'left(answer,hint)
  434.     DO dots=1+hint TO answersize
  435.         lettertmp=left(answer,dots)
  436.         letter=right(lettertmp,1)
  437.         IF letter~=' ' THEN letter='.'
  438.         text=text||letter
  439.     END
  440.     CALL ToChannel
  441.     say 'Hinted the answer'
  442. END
  443. RETURN
  444.  
  445. /*===========================================================================*/
  446.  
  447. exit 0