株式スクリプト 改造について

改造にはある程度のPerlの知識がないと難しいと思います。

株式スクリプト内の株式市場の理念


簡単に言うと「一プレイヤーは一人の株取引をする人」ということにしています。

現在のバージョン(Ver1.01)では買い気配、売り気配を基本としてNPCに取引させています。
()内は解説です
inc-corp.cgiの解説
# CORP config file #----------------------------------------------------------# # データ設定 #----------------------------------------------------------# $CORPname="corp"; $CORPSname="corp-s"; $Cdata_d="$COMMON_URL/$CORPname"; #データディレクトリ $Clog_f="$Cdata_d/log.cgi"; #ログファイル $Cspare1_d="$Cdata_d/s1"; #バックアップディレクトリ1 $Cspare2_d="$Cdata_d/s2"; #バックアップディレクトリ2 $Cspare3_d="$Cdata_d/s3"; #バックアップディレクトリ3 @Cread_f=("01","02"); #データファイル名 @Citem_id=("259","260"); #アイテムNo $Cpath="http://127.0.0.1/akimono/tf3/action.cgi?key=$CORPname"; ($Creff,$Creffex)=split(/\&\&/,"$ENV{'HTTP_REFERER'}"); #後ろの&以下を切り取る $Cst_t=10; #取引開始時間 $Cen_t=22; #取引終了時間 $Ctime=time(); #1970 1/1 00:00:00からの秒数 ($Cs,$Cm,$Ch,$Cd,$Cmo,$Cy,$Cw)=localtime($Ctime); $Crenew=$UPDATE_TIME/180; #一日480回更新を目安にするため(過剰な場合は割り、足りない場合は掛けるで安定化させる) $Cfee_s=1; #購入取引手数料(%) $Cfee=1+($Cfee_s/100); #実際に使うのはこちら $Cplus_s=0.5; #配当の最高%,0で配当なし $Cplus=($Cplus_s/100); #実際に使うのはこちら $CNPCNUM=int($DTpeople/50); #投資に参加するNPC人数 #int($DTpeople/10)で実際の街人口も可能 #増やしすぎると重くなります(foreach(1..$CNPCNUM)として使用するため) $Cmax_day_up=150; #1日に上がる株価の上限(D=150%) $Cmax_day_down=50; #1日に下がる株価の下限(D=50%) #----------------------------------------------------------# # 表示設定 #----------------------------------------------------------# $Cstart="index"; #株式のスタートページ #index or top #株数が多い場合は top がオススメ(株数=株銘柄数) $Ccomment=<<STR; <table><tr> <td class=b>注意事項</td> </tr><tr><td> <li>現在のNPC数は$CNPCNUM人です <li>取引時間は$Cst_t時〜$Cen_t時です <li>購入取引手数料は$Cfee_s%です(予\定) <li>配当(最高配当$Cplus_s%)は自動で配当されます </td></tr></table> STR #----------------------------------------------------------# # 自動更新 #----------------------------------------------------------# sub CAuto{ if($Ch >= $Cst_t && $Ch < $Cen_t){ #取引時間内 $CAutoindexnum=0; foreach(0..$#Cread_f){ #(データファイル名数を使用する) &CDopen("$Cdata_d/$Cread_f[$CAutoindexnum].cgi"); #staNPC売買 $CAutoBuyNum=0; $CAutoSellNum=0; foreach(1..$CNPCNUM){ #買い if($Cdata[10] >= rand(100)){ #買い気配とのランダム要素(0〜100の間の数と買い気配を比較) $CAutoBuyNum+=1; #(もし上回れば一単位株購入する) } if($Cdata[12] > 0){ #(NPC発行が存在するということを確認) #売り if($Cdata[9] >= rand(100)){ #売り気配とのランダム要素(0〜100の間の数と売り気配を比較) $CAutoSellNum+=1; #(もし上回れば一単位株売却する) } } } if($CAutoBuyNum){ #(NPC自動購入数が存在するということを確認) $CAutoBuy_A=$CAutoBuyNum*$Cdata[1]; #自動買い取り数 $Cdata[12]+=$CAutoBuy_A; #対NPC発行量に+ $Cdata[13]+=$CAutoBuy_A*$Cdata[2]; #会社収入+ $Cdata[15]+=$CAutoBuy_A*$Cdata[2]; #会社総資産+ } if($CAutoSellNum){ #(NPC自動売却数が存在するということを確認) $CAutoSell_A=$CAutoSellNum*$Cdata[1]; #自動売却数 if($CAutoSell_A > $Cdata[12]){ #NPC発行と比較(もしNPC自動売却数>NPC発行数の場合は是正) $CAutoSell_A=$Cdata[12]; } $Cdata[12]-=$CAutoSell_A; #対NPC発行量に− $Cdata[14]+=$CAutoSell_A*$Cdata[2]; #会社支出+ $Cdata[15]-=$CAutoSell_A*$Cdata[2]; #会社総資産− } if($CAutoBuyNum > $CAutoSellNum){ #自動買い取り数>自動売却数 $Cdata[2]+=int(rand(3)); #株価0〜2+ }elsif($CAutoBuyNum < $CAutoSellNum){ #自動買い取り数<自動売却数 $Cdata[2]-=int(rand(3)); #株価0〜2− } $Cdata[7]+=($CAutoBuyNum+$CAutoSellNum)*$Cdata[1]; #取引量を+ if($Cdata[13] > $Cdata[14]){ #今期の会社収入>会社支出 $Cdata[2]++; #株価1+ }elsif($Cdata[13] < $Cdata[14]){ #今期の会社収入<会社支出 $Cdata[2]--; #株価1− } #endNPC売買 #sta会社投資 $Ctousi_r=0; #(投資回収用乱数) $Ctousi_p=0; #(投資回収用数値) $Ctousi_m=0; #(投資用数値) if($Cdata[8]>0 && rand(4)<1){ #会社投資状況が+のとき&1/4の確率で発生 $Ctousi_r=(int(rand(171))+30)/100; #0.3〜2.0までの乱数発生←投資成功か失敗か $Ctousi_p=int($Cdata[8]*$Ctousi_r); #資金回収 $Cdata[13]+=$Ctousi_p; #会社収入+ $Cdata[15]+=$Ctousi_p; #会社総資産+ $Cdata[8]=0; if($Ctousi_r > 1){ #投資成功 $Cdata[2]++; #株価1+ }elsif($Ctousi_r < 1){ #投資失敗 $Cdata[2]--; #株価1− } } if(!$Cdata[8] && rand(4)<1){ #会社投資状況なし&1/4で発生 $Ctousi_m=int($Cdata[15]*(rand(1)/100)); #総資産の1%以下で投資を決定 $Cdata[8]=$Ctousi_m; #投資状況=投資 $Cdata[14]+=$Ctousi_m; #会社支出+ $Cdata[15]-=$Ctousi_m; #会社総資産− } #end会社投資 #調整 $Cdata[9]-=int($Cdata[9]**(3/2)*20*$Crenew)/1000; $Cdata[10]-=int($Cdata[10]**(3/2)*20*$Crenew)/1000; #買い気配売り気配自動減衰用関数(これを変化させることにより市場が流動しやすいかどうかを決定させることもできる) $Cdata[9]=int($Cdata[9]*1000)/1000; #0.001以下は切り捨て(買い気配) $Cdata[10]=int($Cdata[10]*1000)/1000; #0.001以下は切り捨て(売り気配) if($Cdata[2] > $Cdata[5]) {$Cdata[5]=$Cdata[2];} if($Cdata[2] < $Cdata[6]) {$Cdata[6]=$Cdata[2];} if($Cdata[9] < 0) {$Cdata[9]=0;} if($Cdata[10] < 0) {$Cdata[10]=0;} if($Cdata[9] > 100) {$Cdata[9]=100;} if($Cdata[10] > 100) {$Cdata[10]=100;} if($Cdata[2] < 1) {$Cdata[2]=1;} #株価上下の一日上限下限 if($Cdata[2] > int($Cdata[4]*$Cmax_day_up/100)) {$Cdata[2]=int($Cdata[4]*$Cmax_day_up/100);} if($Cdata[2] < int($Cdata[4]*$Cmax_day_down/100)) {$Cdata[2]=int($Cdata[4]*$Cmax_day_down/100);} &CDwrite("$Cdata_d/$Cread_f[$CAutoindexnum].cgi") if($Cdata[0]); $CAutoindexnum++; } }else{ #取引時間外=更新 $CAutoindexnum=0; foreach(0..$#Cread_f){ &CDopen("$Cdata_d/$Cread_f[$CAutoindexnum].cgi"); if($Cdata[7] > 0){ $Cdata[3]=$Cdata[2]; if($Cdata[13] > $Cdata[14]){ #(企業収入>支出) $Cdata[4]=int($Cdata[2]+3); #(株価3+) $Cdata[2]=$Cdata[4]; }elsif($Cdata[13] < $Cdata[14]){ #(企業収入<支出) $Cdata[4]=int($Cdata[2]-3); #(株価3−) $Cdata[2]=$Cdata[4]; }else{ $Cdata[4]=$Cdata[2]; #(変動なし) } $Cdata[5]=$Cdata[2]; $Cdata[6]=$Cdata[2]; $Cdata[7]=0; $Chriritu=$Cdata[13]/($Cdata[14]+1); #(企業利益率計算) $Cdata[13]=0; $Cdata[14]=0; $Cdata[17]="$Cdata[3]\→$Cdata[17]"; #sta配当 if($Cplus_s>0){ if($Chriritu>=2){ #(利益率が200%以上) $Cdata[16]=int($Cdata[3]*$Cplus); #(最高配当%) }elsif($Chriritu>1){ #(利益率が100%以上) $Chriritu=($Chriritu-1)*$Cplus; $Cdata[16]=int($Cdata[3]*$Chriritu); }else{ #(利益率が100%未満) $Cdata[16]=0; #(配当なし) } my ($page,$pagestart,$pageend,$pagenext,$pageprev,$pagemax)=GetPage($Q{pg},$TOP_RANKING_PAGE_ROWS,$DTusercount); #(店舗データを読み込む) foreach my $idx ($pagestart..$pageend){ my $DT=$DT[$idx]; $DTgetmoney=int($Cdata[16]*$DT->{item}[$Citem_id[$CAutoindexnum]-1]);#(配当される金額) if($DTgetmoney>0){ $DT->{money}+=$DTgetmoney; $Cmes="$Cdata[0]から株式配当の$DTgetmoney$term[2]が送られてきました。"; PushLog(0,$DT->{id},$Cmes); $Cdata[15]-=$DTgetmoney;#(配当した金額を総資産から減らす) } } }else{ $Cdata[16]=0; } #end配当 &CDwrite("$Cdata_d/$Cread_f[$CAutoindexnum].cgi") if($Cdata[0]); #バックアップ1,2,3 if($Cdata[0] && $Cspare1_d){ $CSPO="$Cspare1_d/$Cread_f[$CAutoindexnum].cgi"; open(SPOO,"+<$CSPO"); @SPOdata=<SPOO>; close(SPOO); open(SPOW,">$CSPO"); print SPOW @CWrite; close(SPOW); if($Cspare2_d){ $CSPT="$Cspare2_d/$Cread_f[$CAutoindexnum].cgi"; open(SPTO,"+<$CSPT"); @SPTdata=<SPTO>; close(SPTO); open(SPTW,">$CSPT"); print SPTW @SPOdata; close(SPTW); if($Cspare3_d){ $CSPH="$Cspare3_d/$Cread_f[$CAutoindexnum].cgi"; open(SPHW,">$CSPH"); print SPHW @SPTdata; close(SPHW); } } } } $CAutoindexnum++; } } } #----------------------------------------------------------# # データ読み込み・書き込み #----------------------------------------------------------# sub CDopen{ open(CDopen,"+<$_[0]"); @Cdata=<CDopen>; close(CDopen); chomp @Cdata; } sub CDwrite{ @CWrite=("$Cdata[0]\n$Cdata[1]\n$Cdata[2]\n$Cdata[3]\n$Cdata[4]\n$Cdata[5]\n$Cdata[6]\n$Cdata[7]\n$Cdata[8]\n$Cdata[9]\n$Cdata[10]\n$Cdata[11]\n$Cdata[12]\n$Cdata[13]\n$Cdata[14]\n$Cdata[15]\n$Cdata[16]\n$Cdata[17]\n"); open(CDwrite,"+>$_[0]"); print CDwrite @CWrite; close(CDwrite); } sub CLwrite{ open(CLopen,"+<$Clog_f"); @Clog=<CLopen>; close(CLopen); @CNlog=("$_[0]\n"); unshift(@Clog,@CNlog); open(CLwrite,"+>$Clog_f"); print CLwrite @Clog; close(CLwrite); } 1;


corp.cgiの解説(表示用ファイル)
DataRead(); CheckUserPass(); RequireFile('inc-html-ownerinfo.cgi'); RequireFile('inc-corp.cgi'); #(corpの設定ファイルを読み込む) $SUB=$Q{mode}; #(modeによって分岐) $disp.=<<STR; <BIG>-株式市場-</BIG><br> STR if($Ch < $Cst_t || $Ch >= $Cen_t){ #(取引時間外) $disp.=<<STR; <table><tr> <td class="b">&nbsp;&nbsp;株式市場&nbsp;&nbsp;</td> </tr></table>$Ccomment<br> 取引時間は「$Cst_t時」から「$Cen_t時」までです。<br> 取引開始までしばらくお待ち下さい。<br><br> <table><tr> <td class="b" align=center>株式名:ID</td> <td class="b" align=center>取引値</td> <td class="b" align=center>総株式発行数</td> <td class="b" align=center>会社総資産額</td> </tr> STR $CORPindexnum=0; foreach(0..$#Cread_f){ #(株式情報出力) &CDopen("$Cdata_d/$Cread_f[$CORPindexnum].cgi"); $Call_ins_num=$Cdata[11]+$Cdata[12]; $disp.=<<STR; <tr><td align=center>$Cdata[0]:$Cread_f[$CORPindexnum]</td> <td align=center><b>$Cdata[2]</b></td> <td align=center><b>$Call_ins_num</b></td> <td align=center><b>$Cdata[15]</b></td> </tr> STR $CORPindexnum++; } $disp.=<<STR; </table><br> STR $disp.=GetMenuTag("$CORPname",'[株式相場再確認]'); #(更新と同じ感じで) }elsif(defined(&$SUB)){ #(modeが確認された場合) &$SUB; }else{ #(mode確認されなかった場合、$Cstartで設定されたものが表示される) &$Cstart; } $disp.="<hr noshade size=1>"; OutSkin(); 1; sub top{ #(株銘柄数が多い場合はinc-corp.cgiの$Cstartを"top"としたほうが良い) $disp.=<<STR; <table><tr> <td class="b">&nbsp;&nbsp;株式市場&nbsp;&nbsp;</td> </tr></table>$Ccomment<br> <table><tr> <td class="b" align=center>株式名:ID(クリックで詳細)</td> <td class="b" align=center>取引値</td> <td class="b" align=center>前日終値</td> <td class="b" align=center>始値</td> <td class="b" align=center>高値</td> <td class="b" align=center>安値</td> <td class="b" align=center>総株式発行数</td> <td class="b" align=center colspan=2>購入</td> <td class="b" align=center colspan=2>売却</td> </tr> STR $CORPindexnum=0; foreach(0..$#Cread_f){ &CDopen("$Cdata_d/$Cread_f[$CORPindexnum].cgi"); $Call_ins_num=$Cdata[11]+$Cdata[12]; $disp.=<<STR; <tr><td align=center><a href="action.cgi?key=$CORPname&&mode=index#$Cread_f[$CORPindexnum]">$Cdata[0]:ID$Cread_f[$CORPindexnum]</a></td> <td align=center><b>$Cdata[2]</b></td> <td align=center><b>$Cdata[3]</b></td> <td align=center><b>$Cdata[4]</b></td> <td align=center><b>$Cdata[5]</b></td> <td align=center><b>$Cdata[6]</b></td> <td align=center><b>$Call_ins_num</b></td> <form action="action.cgi" method="POST"> <input type=hidden name=key value="$CORPSname"> <input type=hidden name=mode value="buy"> <input type=hidden name=Cid value="$Cread_f[$CORPindexnum]"> <td><input type=text name=Cnum size=10 value=1>*$Cdata[1]株</td><td><input type=submit value="購入"></td> </form><form action="action.cgi" method="POST"> <input type=hidden name=key value="$CORPSname"> <input type=hidden name=mode value="sel"> <input type=hidden name=Cid value="$Cread_f[$CORPindexnum]"> <td><input type=text name=Cnum size=10 value=1>*$Cdata[1]株</td><td><input type=submit value="売却"></td> </form></tr> STR $CORPindexnum++; } $disp.=<<STR; </table><br> <a href="action.cgi?key=$CORPname&&mode=index">株式詳細</a><br><br> STR $disp.=GetMenuTag("$CORPname",'[株式相場再確認]'); } sub index{ $disp.=<<STR; <table><tr> <td class="b">&nbsp;&nbsp;株式相場&nbsp;&nbsp;</td> </tr></table>$Ccomment<br> STR $CORPindexnum=0; foreach(0..$#Cread_f){ &CDopen("$Cdata_d/$Cread_f[$CORPindexnum].cgi"); $Cs_t_y=$Cdata[2]-$Cdata[3]; $Cp_t_y=int(($Cdata[2]/$Cdata[3]*100-100)*100)/100; if($Cs_t_y > 0){ $Cs_t_y="+$Cs_t_y"; }elsif($Cs_t_y < 0){ $Cs_t_y=abs($Cs_t_y); $Cs_t_y="−$Cs_t_y"; }else{ $Cs_t_y="±0" } if($Cp_t_y > 0){ $Cp_t_y="+$Cp_t_y"; }elsif($Cp_t_y < 0){ $Cp_t_y=abs($Cp_t_y); $Cp_t_y="−$Cp_t_y"; }else{ $Cp_t_y="±0" } $Call_ins_num=$Cdata[11]+$Cdata[12]; $CallC=$Call_ins_num*$Cdata[2]; $Chave_n=$DT->{item}[$Citem_id[$CORPindexnum]-1]; $Chave_m=$Cdata[2]*$Chave_n; $disp.=<<STR; <a name="$Cread_f[$CORPindexnum]"></a> <table><tr> <td class="b" colspan=7 align=center>$Cdata[0](株式ID:$Cread_f[$CORPindexnum]) 出来高:$Cdata[7]株</td> </tr><tr> <td align=center>取引値<br><b>$Cdata[2]</b></td> <td align=center>前日比<br><b>$Cs_t_y</b>($Cp_t_y%)</td> <td align=center>前日終値<br><b>$Cdata[3]</b></td> <td align=center>始値<br><b>$Cdata[4]</b></td> <td align=center>高値<br><b>$Cdata[5]</b></td> <td align=center>安値<br><b>$Cdata[6]</b></td> <td align=center>配当<br><b>$Cdata[16]</b></td> </tr><tr> <td align=center>単元株数<br><b>$Cdata[1]株</b></td> <td align=center>総株式発行数<br><b>$Call_ins_num株</b></td> <td align=center colspan=5>時価総額<br><b>$CallC$term[2]</b></td> </tr><tr> <td align=center>会社収入<br><b>$Cdata[13]$term[2]</b></td> <td align=center>会社支出<br><b>$Cdata[14]$term[2]</b></td> <td align=center colspan=5>会社総資産額<br><b>$Cdata[15]$term[2]</b></td> </tr><tr><form action="action.cgi" method="POST" target="_blank"> <input type=hidden name=key value="$CORPname"> <input type=hidden name=mode value="chart"> <input type=hidden name=Cid value="$Cread_f[$CORPindexnum]"> <td align=center colspan=7><input type=submit value="株式の変動を見る"></td> </form></tr><tr> <td class="b" colspan=7><img height=1 width=1></td> </tr></table> <table><tr> <td class="b">購入</td><td class="b">売却</td> </tr><tr><form action="action.cgi" method="POST"> <input type=hidden name=key value="$CORPSname"> <input type=hidden name=mode value="buy"> <input type=hidden name=Cch value="$Ctime"> <input type=hidden name=Cid value="$Cread_f[$CORPindexnum]"> <td align=right><input type=text name=Cnum size=10 value=1>*$Cdata[1]株<br><input type=submit value="購入"></td> </form><form action="action.cgi" method="POST"> <input type=hidden name=key value="$CORPSname"> <input type=hidden name=mode value="sel"> <input type=hidden name=Cch value="$Ctime"> <input type=hidden name=Cid value="$Cread_f[$CORPindexnum]"> <td align=right><input type=text name=Cnum size=10 value=1>*$Cdata[1]株<br><input type=submit value="売却"></td> </form></tr></table> 所有株数:$Chave_n株($Chave_m$term[2])<br> STR $disp.="<b>[買い気配あり]</b>" if($Cdata[10] > 1); $disp.="<b>[売り気配あり]</b>" if($Cdata[9] > 1); $disp.="<br><br>"; $CORPindexnum++; } $disp.=GetMenuTag("$CORPname",'[株式相場再確認]'); } sub chart{ &CDopen("$Cdata_d/$Q{Cid}.cgi"); #(チャートを表示するために読み込む) $disp.=<<STR; <table><tr> <td class="b">&nbsp;&nbsp;株式変動チャート&nbsp;&nbsp;</td> </tr></table><br> <table><tr> <td class=b colspan=7>$Cdata[0]株 1週間のデータ</td> </tr><tr> <td>1日前</td><td>2日前</td><td>3日前</td><td>4日前</td><td>5日前</td><td>6日前</td><td>7日前</td> </tr><tr> STR $Cchartnum=0; ($Cone,$Ctwo,$Cthr,$Cfou,$Cfiv,$Csix,$Csev)=split(/\→/,$Cdata[17]); if($Cone){$Cchartnum++;}if($Ctwo){$Cchartnum++;}if($Cthr){$Cchartnum++;}if($Cfou){$Cchartnum++;}if($Cfiv){$Cchartnum++;}if($Csix){$Cchartnum++;}if($Csev){$Cchartnum++;} $Cchartall=$Cone+$Ctwo+$Cthr+$Cfou+$Cfiv+$Csix+$Csev; $Ccharthei=int($Cchartall/$Cchartnum); if($Cone){$disp.="<td>$Cone</td>";} if($Ctwo){$disp.="<td>$Ctwo</td>";} if($Cthr){$disp.="<td>$Cthr</td>";} if($Cfou){$disp.="<td>$Cfou</td>";} if($Cfiv){$disp.="<td>$Cfiv</td>";} if($Csix){$disp.="<td>$Csix</td>";} if($Csev){$disp.="<td>$Csev</td>";} $disp.="</td></tr><tr><td colspan=7>平均:$Ccharthei$term[2]</td></tr></table>"; if($Q{Cchart}){ $disp.="<table width=500><tr><td>"; $disp.="$Cdata[17]"; $disp.="</td></tr></table>"; } }


corp-s.cgiの解説(データ書き込み用ファイル)
Lock(); DataRead(); CheckUserPass(); RequireFile('inc-html-ownerinfo.cgi'); RequireFile('inc-corp.cgi'); $SUB=$Q{mode}; !$SUB && ($SUB='index'); #(modeが設定されていない場合はindexとなる) $disp.=<<STR; <BIG>-株式市場-</BIG><br> STR $CORPSindexnum=0; foreach(0..$#Cread_f){ if($Q{Cid} eq "$Cread_f[$CORPSindexnum]"){ $Cgetnumber=$CORPSindexnum; $CgetOK=1; } $CORPSindexnum++; } if($CgetOK){ #(株式が存在する場合) &CDopen("$Cdata_d/$Cread_f[$Cgetnumber].cgi"); $Cnum=$Cdata[1]*CheckCount($Q{Cnum},0,0,$MAX_MONEY); $Chave=$DT->{item}[$Citem_id[$Cgetnumber]-1]; }else{ #(存在しない場合はindexとなる) $SUB="index"; } if($Ch < $Cst_t || $Ch >= $Cen_t){ $disp.=<<STR; <table><tr> <td class="b">&nbsp;&nbsp;株式市場&nbsp;&nbsp;</td> </tr></table>$Ccomment<br> 取引時間は「$Cst_t時」から「$Cen_t時」までです。<br> 取引開始までしばらくお待ち下さい。 STR }elsif(defined(&$SUB) && $SUB ne "index" && $Cpath eq $Creff && $Q{Cch} > $DT->{lasttime}){ #(購入、売却完了の場合) &$SUB; #高値低値,売り買い気配 調整 $Cdata[7]+=$Cnum; if($Cdata[2] > $Cdata[5]) {$Cdata[5]=$Cdata[2];} if($Cdata[2] < $Cdata[6]) {$Cdata[6]=$Cdata[2];} if($Cdata[9] < 0) {$Cdata[9]=0;} if($Cdata[10] < 0) {$Cdata[10]=0;} if($Cdata[9] > 100) {$Cdata[9]=100;} if($Cdata[10] > 100) {$Cdata[10]=100;} #株価上下の一日上限下限 if($Cdata[2] > int($Cdata[4]*$Cmax_day_up/100)) {$Cdata[2]=int($Cdata[4]*$Cmax_day_up/100);} if($Cdata[2] < int($Cdata[4]*$Cmax_day_down/100)) {$Cdata[2]=int($Cdata[4]*$Cmax_day_down/100);} &CDwrite("$Cdata_d/$Cread_f[$Cgetnumber].cgi") if($Cdata[0]); &CLwrite("$Ctime<>$DT->{shopname}($DT->{id}:$TOWN_CODE)<>$Cdata[0]($Cread_f[$Cgetnumber])<>$Cnum<>$Cdata[2]<>$ENV{'REMOTE_ADDR'}") if($Cdata[0]); $DT->{lasttime}=$Ctime; RenewLog(); DataWrite(); DataCommitOrAbort(); }else{ #($SUB="index"はこちらの場合エラーということになる) &index; &CLwrite("$Ctime<>$DT->{shopname}($DT->{id}:$TOWN_CODE)<>$ENV{'REMOTE_ADDR'}<>ERROR"); } $disp.="<br><br>".GetMenuTag("$CORPname",'[株式市場へ]').GetMenuTag('main', '[自店へ]'); $disp.="<hr noshade size=1>"; OutSkin(); UnLock(); 1; sub index{ $disp.=<<STR; <table><tr> <td class="b">&nbsp;&nbsp;株式市場&nbsp;&nbsp;</td> </tr></table> エラーです。 STR } sub buy{ #(購入処理) $CneedMoney=int($Cnum*$Cdata[2]*$Cfee); if($DT->{money} < $CneedMoney){ $Cnum=int($DT->{money}/$Cdata[2]/$Cfee/$Cdata[1])*$Cdata[1]; $CneedMoney=int($Cnum*$Cdata[2]*$Cfee); } $DT->{money}-=$CneedMoney; $DT->{item}[$Citem_id[$Cgetnumber]-1]+=$Cnum; $CNowHaveNum=$DT->{item}[$Citem_id[$Cgetnumber]-1]; #調整 $Cdata[9]-=0.0002*$Cnum; $Cdata[10]+=0.001*$Cnum; if($Cnum > rand(10000)){ $Cdata[2]=int($Cdata[2]*(1+(int(rand(3))+1)/1000)); } $Cdata[11]+=$Cnum; $Cdata[13]+=$CneedMoney; $Cdata[15]+=$CneedMoney; $disp.=<<STR; <table><tr> <td class="b">&nbsp;&nbsp;株式購入(株式ID:$Q{Cid})&nbsp;&nbsp;</td> </tr></table>$Ccomment<br> <table><tr> <td class="b" align=center>購入:$Cdata[0]株</td> </tr><tr> <td align=center>$Cnum株(残:$CNowHaveNum株)</td> </tr><tr> <td align=center>金:$CneedMoney$term[2]也</td> </tr></table> STR PushLog(0,$DT->{id},"$Cdata[0]株を$Cnum枚購入しました。"); } sub sel{ #(売却処理) if($Chave < $Cnum){ $Cnum=$Chave; } $CgetMoney=$Cnum*$Cdata[2]; $DT->{item}[$Citem_id[$Cgetnumber]-1]-=$Cnum; $DT->{money}+=$CgetMoney; $CNowHaveNum=$DT->{item}[$Citem_id[$Cgetnumber]-1]; #調整 $Cdata[9]+=0.001*$Cnum; $Cdata[10]-=0.0002*$Cnum; if($Cnum > rand(10000)){ $Cdata[2]=int($Cdata[2]/(1+(int(rand(3))+1)/1000)); } $Cdata[11]-=$Cnum; $Cdata[14]+=$CgetMoney; $Cdata[15]-=$CgetMoney; $disp.=<<STR; <table><tr> <td class="b">&nbsp;&nbsp;株式売却(株式ID:$Q{Cid})&nbsp;&nbsp;</td> </tr></table>$Ccomment<br> <table><tr> <td class="b" align=center>売却:$Cdata[0]株</td> </tr><tr> <td align=center>$Cnum株(残:$CNowHaveNum株)</td> </tr><tr> <td align=center>金:$CgetMoney$term[2]也</td> </tr></table> STR PushLog(0,$DT->{id},"$Cdata[0]株を$Cnum枚売却しました。"); }


株価の上昇・下落の金額を一定の割合にしたい場合は、
  • #staNPC投資〜#endNPC投資と#sta会社投資〜#end会社投資を切り取ってください。
  • 1回更新ごとに上下する割合を取引時間内の「&CDwrite("$Cdata_d/$Cread_f[$CAutoindexnum].cgi") if($Cdata[0]);」より前に記述してください。
    (データ内容については、同じフォルダに格納されている#corpdata.cgiをお読みください。)

    その他
  • わからない、設置できない、バグがでた、などの情報は掲示板までお願いします。
  • 個別株式データ割り当てについては#corpdata.cgiをご覧ください。

    株式スクリプト ver-1.01 by taiso(http://w2.abcoroti.com/~taiso/)