Skip to content

Instantly share code, notes, and snippets.

@dekisugi
Last active November 20, 2021 18:09
Show Gist options
  • Save dekisugi/ba0333382b5ea6f52447856a9510934e to your computer and use it in GitHub Desktop.
Save dekisugi/ba0333382b5ea6f52447856a9510934e to your computer and use it in GitHub Desktop.
0ch_random1001.pl

0ch_random1001.pl

ぜろちゃんねるプラス0.7.4専用プラグイン - ランダム1001

Random 1001 - Plugin for ZerochPlus, a Japanese Forum Software

こうすれば本体に手を付けずに1001をランダムにすることができそうだぞ!と思いついたのでメモを書いたのですが、そのまま放出するのも芸がないので実際にこしらえました。

特に0.7.4固有の機能を使っている訳では無いのですが、トリッキーな実装を行っているため、他のバージョンに使用する際は相当な注意を要します。

注意点

  • このプラグインは動作確認を一切行っていませんでしたが、後ほど雑に行いました。
  • サポートはもちろん、使い方についての説明は一切ありません。ソース嫁^^;
  • この電磁的記録は、人の電子計算機における実行に用する目的では供していません。一方で、この電磁的記録を電子計算機において実行することを禁じもしません。

派生元のソフトウェアについて

このプラグインは、ぜろちゃんねるプラス0.7.4(zerochplus_0.7.4.tar.gz)(以下、派生元のアーカイブという)に含まれる、「zerochplus_0.7.4/test/plugin/0ch_templete.pl」をベースに作成しています。

ライセンス

このプラグインのライセンスは、ぜろちゃんねるプラス0.7.4と同一とします。

下記は、派生元のアーカイブに含まれる、「zerochplus_0.7.4/Readme/Readme.txt」からの引用です。 (さらに言えば、それは本家ぜろちゃんねる(test070124.zip)に含まれる、「/readme/readme.txt」からの引用です)

本スクリプトは自由に改造・再配布してもらってかまいません。
また、本スクリプトによって出力されるクレジット表示(バージョン表示)などの表示も消して使用してもらっても構いません。
ただし、作者は本スクリプトと付属ファイルに関する著作権を放棄しません。
また、作者は本スクリプト使用に関して発生したいかなるトラブルにも責任を負いかねますのでご了承ください。

作者

dekisugi

#============================================================================================================
#
# 拡張機能 - ランダム1001
# 0ch_random1001.pl
# ---------------------------------------------------------------------------
# > ・ランダム1001
# > ・$type == 16で
# > ・$sys->_NUM_ >= $sys->RESMAXがtrueならば
# > ・$form->subject = "\n".chomp(1000.txtに相当するデータ)
# > ・$sys->RESMAX += 2
# > ・vara.plのWriteに戻ると…
# > ・$data、$lineを組み立てる時に、いい具合に2行になるはず
# > ・本文のDirectAppend時に、1001も同時に書き込まれるはず
# > ・その後dat実際のレス数を取得するので、subjectのレス数はちゃんとなる
# > ・本来の$sys->RESMAXを1オーバーするが、一時的に+2してあるので、「# datにOVERスレッドレスを書き込む」のブロックは実行されない
# > ・DirectAppendをごにょごにょすればプラグインとして実装できると頭に降ってきた
# > ・vara.plを読みながら書いてみたけど、抜けが無いとも限らないので気をつけて
# 以上、dekisugiのメモより。
# せっかくなので熱が冷めないうちに、今から実装してみる。
#
# あとがき:
# whileを書こうとしてるあたりで飽きてきた^^;
# 一応 perl -cw は通ったよ?
# ---------------------------------------------------------------------------
# 2019.09.29 start
# 2021.11.21 動いてなかったので修正。ついでに余計なところを消しました。
#
#============================================================================================================
use strict;
# use warnings;
package ZPL_random1001;
#------------------------------------------------------------------------------------------------------------
# コンストラクタ
#------------------------------------------------------------------------------------------------------------
sub new
{
my $this = shift;
my ($obj);
$obj = {};
bless $obj, $this;
return $obj;
}
#------------------------------------------------------------------------------------------------------------
# 拡張機能名称取得
# -------------------------------------------------------------------------------------
# @return 名称文字列
#------------------------------------------------------------------------------------------------------------
sub getName
{
my $this = shift;
return 'ランダム1001';
}
#------------------------------------------------------------------------------------------------------------
# 拡張機能説明取得
# -------------------------------------------------------------------------------------
# @return 説明文字列
#------------------------------------------------------------------------------------------------------------
sub getExplanation
{
my $this = shift;
return '1001をランダムにします';
}
#------------------------------------------------------------------------------------------------------------
# 拡張機能タイプ取得
# -------------------------------------------------------------------------------------
# @return 拡張機能タイプ(スレ立て:1, レス:2, read:4, index:8, 書き込み前処理:16)
#------------------------------------------------------------------------------------------------------------
sub getType
{
my $this = shift;
return (16);
}
#------------------------------------------------------------------------------------------------------------
# 拡張機能実行インタフェイス
# -------------------------------------------------------------------------------------
# @param $sys MELKOR
# @param $form SAMWISE
# @param $type 実行タイプ
# @return 正常終了の場合は0
#------------------------------------------------------------------------------------------------------------
sub execute
{
my $this = shift;
my ($sys, $form, $type) = @_;
my $resmax = $sys->Get('RESMAX');
if ($sys->Get('_NUM_') >= $resmax) {
my @list;
while (my $line = <DATA>) {
$line =~ s/\x0d?\x0a?\z//;
$line =~ s/!RESMAX!/$resmax/g;
$line =~ s/!RESMAX1!/$resmax+1/eg;
push @list, $line if ($line);
}
$form->Set('subject', "\n".$list[int(rand @list)]);
$sys->Set('RESMAX', $resmax+2);
}
return 0;
}
#============================================================================================================
# Module END
#============================================================================================================
1;
__DATA__
!RESMAX1!<><>Over !RESMAX! Thread<>このスレッドは!RESMAX!を超えやがりました。<br>これ以上書けないから、新しいスレッドを立てやがってください。<>
!RESMAX1!<><>Over !RESMAX! Thread<>あかりだよぉ~<br>!RESMAX! になったよ~<br>新しいスレッドを立ててねぇ~<>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment