#!/usr/bin/perl ##################################################################################################### #Program: # #Comment: # #?dna data # # # #dna,À̸§, # # #¡¤udata # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 # #uid,name,pass,url,mail,sex,ken,IP,access time,open_flg,nid,°£´ÜÇÑ ¼³¸í, ÀÚ¼¼ÇÑ ¼³¸í, album ÃֽŠÆíÁý ½Ã°£,# # 14 15 #bbs ±âÀÔ ½Ã°£, session_id # #¡¤plant data # 0 1 2 3 4 5 6 7 8 #plantID,À̸§, ½ÉÀº ÃÊ, rcreture,¼ºÀå ·¹º§, ¼ºÀå ´Ü°è, ºû°ú ¿Âµµ, ÃÊ, üũÇÑ ÃÊ, # 9 10 11 12 13 14 15 16 17 18 #¼öºÐ, ÃÊ, üũÇÑ ÃÊ, ¿µ¾ç, ÃÊ, üũÇÑ ÃÊ, Àå¼Ò, À¯ÀüÀÚ 1,À¯ÀüÀÚ 2,Æò°¡¾×, uid1,uid2, # 21 22 23 24¡¡¡¡¡¡¡¡¡¡¡¡25 26 27 #pid1,pid2,Ç¥ÁØ ±³¹è·á, ¼³Á¤ ±³¹è·á, ¾Ù¹ü¿¡ º¸Á¸ÇÑ ½Ã°£, item ÀÌ¿ë »óȲ, óÀ½À¸·Î Ç÷¡±× # # #¡¤status data->[0] # 0 1 2 3 4 5 6¡¡¡¡¡¡¡¡7¡¡¡¡¡¡¡¡8 #±Ý¾×, µî·ÏÃÊ, µî·Ï½Ã°£, ±Þ, Çöó¿ö¼ö(total),¼ÒÀ¯Á¾¼ö, ¼ÒÀ¯ÇÒ ¼ö ÀÖ´Â Á¾ÀÇ ¼ö,,¼ÒÀ¯ÇÒ ¼ö ÀÖ´Â È­ºÐÀÇ ¼ö # 9 10 11 12 #,À½¾ÇÀ» ¾ðÁ¦ µè°Ô Çß´ÂÁö, ¾Ù¹ü¿¡ º¸Á¸ÇÒ ¼ö ÀÖ´Â ½Ä¹°¼ö, ¾Ù¹ü¿¡ ÀÖ´Â ½Ä¹°¼ö, Áö±Ý±îÁö °³È­ÇÑ ½Ä¹°ÀÇ ¼ö # # #¡¤seed data # 0 1 2 3 4 5 6 7 8 9 #pid,ÀÌ¿ë °¡´ÉÇÑ°¡, À̸§, À¯ÀüÀÚ 1,À¯ÀüÀÚ 2,°¡°Ý, ÀڽŠuid,»ó´ë uid,ÀڽŠpid,»ó´ë pid #¡Ø°¡°Ý plant dataÀÇ 18°ú´Â ÀÏÄ¡ÇÏÁö ¾Ê´Â °Í¿¡ ÁÖÀÇ # #¡¤mail data # 0 1 2 3 4 #¼Û½Å ¼ö½Åº°, ½Ã°¢, UID,comment,½ÅÂø Flag # #¡¤bbs data # 0 1 2 3 4 #»èÁ¦ Ç÷¡±×, ½Ã°¢, UID,PID,comment # #¡¤¾ÆÀÌÅÛ µ¥ÀÌÅÍ # 0 , 1 2 3 ¡¡¡¡4 5 6¡¡¡¡¡¡¡¡¡¡¡¡7 #iid, name, price, img,ÃÖ´ë ¼ÒÀ¯ °¡´É °³¼ö, ÆǸŰ¡, (±ÞÀ» À§ÇÑ ¿¹ºñ) ,¼³¸í #iid ¾¾16-20 #iid ÀÌ·çÁö ¾Ê¾Æ30-85 # # #¡¤¼öºÐ ½Ä¹°¿Õ # #uid,pid,¼öºÐ ȸ¼ö # #¡¤represent pure data # 0 1 2 3 4 5 #im_id(ÁÙ±â), im_id(ÀÙ), im_id(²É), ÀϹݸí, Çмú¸í, ¼³¸í # #¡¤pure_number # 0 1 2 3 4 5 #°³È­¼ö, UID, PID, user_name, ½Ä¹°¸í, time # #¡¤user_pure_count # 0 1 #UID, ¼ø°è Á¾·ù¼ö # #ºñ¹ýÀ¸·Î, °³È­ÁßÀÇ ²ÉÀ̶ó¸é ŸÀÎÀÇ ²É°úµµ ¼öºÐÇÒ ¼ö ÀÖ½À´Ï´Ù.º¸ÅëÀ¸·Î ÀÌ¿ëÇÏ°í ÀÖ´Â °æ¿ì´Â ÇÒ ¼ö ¾ø½À´Ï´Ù¸¸, , , , , # # Date: 20061202 # #Version: 2.6 # # Author: H.Wakaguri(Gigaho) # ##################################################################################################### use lib'./lib'; use strict; require 'sys_common.cgi'; require 'inc_plant_conf.cgi'; require 'inc_inc.cgi'; my $PNAME = "inc_plant.cgi"; my $VERSION = "¹ÏÀ» ¼ö ¾ø´Â ½Ä¹° Ver.2.6"; #script version my $RDATA = inc_plant_conf::get_rdata(); $RDATA->{target1} ||= "trgt1"; $RDATA->{target2} ||= "trgt2"; #MODE, UID, NAM, PWD, HP, MAIL, OPT, IID... my $PARAM = sys_common::param(); my $JST = 9 * 3600; my $LOCK = my_flock() || error_end(__LINE__, "»çÀÌÆ® ¾ï¼¼½º°¡ °úµµÇÕ´Ï´Ù", "File lock", {no_unlock => 1}); ($LOCK != -1) || error_end(__LINE__, "ÇöÀç, »çÀÌÆ®°¡ Á¡°ËÁßÀÔ´Ï´Ù.", "File lock", {no_unlock => 1}); eval { my $str; put_routine(); if($PARAM->{MODE} eq "reg_check") { $str = get_reg_check_htm(); } elsif($PARAM->{MODE} eq "regist") { $str = get_regist_htm(); } elsif($PARAM->{MODE} eq "reg_start") { $str = get_registration_start_htm(); } elsif($PARAM->{MODE} eq "login") { $str = get_login_htm(); } elsif($PARAM->{MODE} eq "whole_hist") { $str = get_whole_hitory_htm(); } elsif($PARAM->{MODE} eq "album") { $str = get_no_cook_album_htm(); } elsif($PARAM->{MODE} eq "no_cook") { $str = get_no_cook_htm(); } elsif($PARAM->{MODE} eq "score_table") { $str = get_score_table_htm(); } elsif($PARAM->{MODE} eq "i_help") { $str = get_help_htm(); } elsif($PARAM->{MODE} eq "view_parent") { $str = get_parent_album_htm(); } elsif($PARAM->{MODE} eq "view_each") { $str = get_mono_album_htm(); } elsif($PARAM->{MODE} eq "pedia") { $str = get_pedia_htm(); } elsif($PARAM->{MODE} eq "open_bbs") { $str = get_bbs_secure_htm(); } elsif($PARAM->{MODE} eq "server_login") { $str = get_server_login_htm(); } elsif($PARAM->{MODE} eq "server_payment") { $str = get_server_payment_htm(); } elsif($PARAM->{MODE} eq "server_makeseed") { $str = get_server_makeseed_htm(); } elsif(is_cookie_ok()) { #¿©±â¼­ºÎÅÍ ·Î±×ÀÎÇÏÁö ¾ÊÀ¸¸é ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù. if($PARAM->{MODE} eq "main") { $str = get_const_htm(); } elsif($PARAM->{MODE} eq "into_album") { $str = get_into_album_htm(); } elsif($PARAM->{MODE} eq "ch_comment") { $str = get_change_comment_htm(); } elsif($PARAM->{MODE} eq "shop") { $str = get_shop_htm(); } elsif($PARAM->{MODE} eq "shop_sell") { $str = get_shop_htm(); } elsif($PARAM->{MODE} eq "seed_sell") { $str = get_shop_htm(); } elsif($PARAM->{MODE} eq "use_item") { $str = get_use_item_htm(); } elsif($PARAM->{MODE} eq "pollination") { $str = get_pollination_htm(); } elsif($PARAM->{MODE} eq "sow_item") { $str = get_sow_item_htm(); } elsif($PARAM->{MODE} eq "mail") { $str = get_mail_htm(); } elsif($PARAM->{MODE} eq "bbs") { $str = get_bbs_htm(); } elsif($PARAM->{MODE} eq "bbs_sel_album") { $str = get_bbs_sel_album_htm(); } elsif($PARAM->{MODE} eq "reg_change") { $str = get_usr_registration_change_htm(); } elsif($PARAM->{MODE} eq "album_del") { $str = get_plant_delete_check_htm(); } elsif($PARAM->{MODE} eq "album_del_ok") { $str = get_plant_delete_ok_htm(); } elsif($PARAM->{MODE} eq "server_select") { $str = get_server_select_htm(); } else { $str = get_start_htm(); } } else { $str = get_logout_htm(); } my_funlock($LOCK); print_headder(); print($str); exit 0; }; error_end(__LINE__, "¿¹»ó¿ÜÀÇ ¿¡·¯", $@); exit 1; #################################################################################################### ################################################### # input:() # retrun: #comment: ################################################### sub print_headder { #for mac print("Pragma: no-cache\nCache-Control: no-cache\nExpires: Thu, 01 Dec 1994 16:00:00 GMT\n"); return 1; } ################################################### # input:() # retrun: #comment: ################################################### sub put_routine { my @delusr_ids; my $tintim = get_routine_time(); my $time = time; if(!$tintim) {$tintim = $time; put_routine_time($time);} #ÃʱâÈ­ if($time - $tintim >= $RDATA->{term}) { my $rallu = get_all_udata_hash(); while(my ($uid, $rudata) = each(%$rallu)) { my $rplant = get_plant_data($uid); $rplant = get_new_rplant($rudata, $rplant, $time); put_plant_data($uid, $rplant); do_new_event($uid, $tintim, $time); #1°³¿ù ÀÌ»ó ·Î±×ÀÎ ÇÏÁö ¾ÊÀº À¯Àú¸¦ »èÁ¦ if($RDATA->{delete_time} < $time - $rudata->[8]) { push(@delusr_ids, $uid); } } if(@delusr_ids) { foreach (@delusr_ids) {delete($rallu->{"$_"});} put_all_udata($rallu); #ÆÄÀÏ ¿¡·¯ÀÇ È¸º¹À» À§ÇØ ÈÄ¿¡ »èÁ¦ÇÑ´Ù! foreach (@delusr_ids) {delete_regist_user($_);} } #¿¡·¯ÀÇ ÆÇ´ÜÀ» À§ÇØ ¸¶Áö¸·¿¡ ŸÀ̸Ӹ¦ ÀÔ·Â put_routine_time($time - (($time - $tintim) % $RDATA->{term})); } make_uranai_data($time); make_backup_data($time); return 1; } ################################################### # input:() # retrun: #comment: ################################################### sub do_new_event { my ($uid, $tintim, $time) = @_; my $term = $RDATA->{term}; for(my $now_time = $tintim; $now_time < $time; $now_time += $term) { if(rand() < 1 / 144) { my $rseed = get_seed_data($uid); if(keys(%$rseed) == 0) { my $rudata = get_status_data($uid); my $dna1 = get_rundom_dna(); my $dna2 = $dna1; # my $dna2 = get_rundom_dna(); my $rstatus = $rudata->[0]; $rstatus->[5]++; my $new_pid = ++$rstatus->[4]; $rseed->{"$new_pid"} = [$new_pid, 1, "»õ·Î¿î ½Ä¹°($new_pid)", $dna1, $dna2, 0]; put_seed_data($uid, $rseed); put_self_history($uid, "±æ°¡¿¡¼­ ½Ä¹°ÀÇ ¾¾¾ÑÀ» ÁÖ¿ü½À´Ï´Ù", "green", $now_time); put_status_data($uid, $rudata); } } } return 1; } ################################################### # input:() # retrun: #comment: ################################################### sub get_logout_htm { my $str_t = get_start_htm(); my $str = "Set-Cookie: UCK=\n" . $str_t; #cookieÀÇ Á¦°Å¸¦ ¼³Á¤ return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_start_htm { my ($err_str, $uname) = @_; $uname = $PARAM->{NAM} if(!defined($uname)); my $rudata = get_all_udata(); my $u_cnt = @$rudata; my $regist_htm = ($u_cnt < $RDATA->{max_user})? qq{
}: qq{ ÃÖ´ëµî·ÏÀμö¿¡ ´Ù´Þ¾Ò±â ¶§¹®¿¡, ½Å±Ôµî·ÏÀÌ ºÒ°¡´É ÇÕ´Ï´Ù. ¾çÇغÎŹµå¸³´Ï´Ù m(_ _)m
}; my $bbs_str = "/ ½Ä¹°°Ô½ÃÆÇ" if(defined($RDATA->{bbs})); my $pedia_url = $RDATA->{pedia_url} || "$PNAME?MODE=pedia"; my $field_name = $RDATA->{field_name} || "¹ÏÀ» ¼ö ¾ø´Â ½Ä¹°"; my $str = "Content-type: text/html\n\n"; $str .= qq{}; $str .= get_head(); $str .= qq{ $field_name
¡¸$field_name¡¹¿¡ ¾î¼­¿À¼¼¿ä.
À¯Àú À̸§°ú Æнº¿öµå¸¦ ÀÔ·ÂÇÏ¿© ÁÖ¼¼¿ä.
$err_str
´Ð³×ÀÓ Æнº¿öµå
ÃÖ±ÙÀÇ ´º½º / ½Ä¹°µµ°¨ / ½Ä¹°¾Ù¹ü $bbs_str
$regist_htm ($u_cnt ¸í µî·ÏÁß/$RDATA->{max_user} ¸í ±îÁö µî·ÏÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.)
$RDATA->{top_comment}
}; $str .= get_copyright(); $str .= "
"; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_whole_hitory_htm { my $back_url = ($PARAM->{UID})? "$PNAME?MODE=main&UID=$PARAM->{UID}": $RDATA->{home_url}; my $str = "Content-type: text/html\n\n"; $str .= qq{}; $str .= get_head(); $str .= qq{ Àüü ´º½º
ÃÖ±ÙÀÇ ´º½º
(´º½º°¡ µµÂøÇÑ ¼ø¼­´ë·Î Ç¥½ÃµË´Ï´Ù.)
}; $str .= get_whole_history_main_htm(); $str .= qq{
}; $str .= get_copyright(); $str .= "
"; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_seed_cost_from_rdata { my ($rdata) = @_; my $rf_type = get_flower_type_data(); my $seed_cost = get_seed_cost($rf_type, $rdata->[3]); return $seed_cost; } ################################################### # input:() # retrun: #comment: ################################################### sub get_seed_cost { my ($rf_type, $rcreature) = @_; my $max_cost = $RDATA->{max_cost}; my $min_cost = $RDATA->{min_cost}; my $cost; if(!defined($rf_type->{"1"})) {return $min_cost * 4;} for(my $organ_id = 1; $organ_id <= 3; $organ_id++) { my $cnt_max = 2; while(my ($im_id, $im_cnt) = each(%{$rf_type->{"$organ_id"}})) { if($cnt_max < $im_cnt) {$cnt_max = $im_cnt;} } my $val = $rcreature->{"$organ_id"}; my $im_id = $val->{protein}->[$val->{view}->[0]]->{domain}; my $now_cnt = $rf_type->{"$organ_id"}->{"$im_id"} || 1; my $add_cost = ($now_cnt < (1 + $cnt_max) / 4)? int((($min_cost - 3 * $max_cost) * $now_cnt - $min_cost + $max_cost * $cnt_max) / ($cnt_max - 3)): int(((3 * $min_cost - $max_cost) * $now_cnt - $min_cost + $max_cost * $cnt_max) / (3 * $cnt_max - 1)); # my $add_cost = int(($min_cost * $max_cost * $cnt_max * ($cnt_max - 1)) / # (($max_cost - $min_cost * $cnt_max) * $now_cnt ** 2 + # ($min_cost * $cnt_max ** 2 - $max_cost) * $now_cnt)); if($organ_id == 3) {$add_cost *= 2;} $cost += $add_cost; } return $cost; } ################################################### # input:() # retrun: #comment: ################################################### sub get_popular_flower { my (@poptree); if(-e "$RDATA->{data_dir}/popular_flower.cgi") { open(IN, "$RDATA->{data_dir}/popular_flower.cgi") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); while(chomp(my $line = )) { my ($uid, $pid) = split(/\t/, $line); push(@poptree, [$uid, $pid]); } close(IN) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); } return \@poptree; } ################################################### # input:() # retrun: #comment: ################################################### sub put_popular_flower { my ($rpoptree) = @_; open(OUT, ">$RDATA->{data_dir}/popular_flower.cgi") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); my $cnt = 0; my $max_cnt = $RDATA->{popular_plant_cnt} || 500; foreach (@$rpoptree) { print OUT join("\t", @$_) . "\n"; if(++$cnt >= $max_cnt) {last;} } close(OUT) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); return 1; } ################################################### # input:() # retrun: #comment: ################################################### sub get_flower_type_data { my %type_cnt; if(-e "$RDATA->{data_dir}/flower_type.cgi") { open(IN, "$RDATA->{data_dir}/flower_type.cgi") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); while(chomp(my $line = )) { my ($organ_id, $im_id, $dt_cnt) = split(/\t/, $line); $type_cnt{"$organ_id"}->{"$im_id"} = $dt_cnt; } close(IN) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); } return \%type_cnt; } ################################################### # input:() # retrun: #comment: ################################################### sub put_flower_type_data { my ($rf_type) = @_; open(OUT, ">$RDATA->{data_dir}/flower_type.cgi") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); while(my ($organ_id, $rtype) = each(%$rf_type)) { while(my ($im_id, $cnt) = each(%$rtype)) { print OUT "$organ_id\t$im_id\t$cnt\n"; } } close(OUT) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); return 1; } ################################################### # input:() # retrun: #comment: ################################################### sub get_pure_number_data { my @data; if(-e "$RDATA->{data_dir}/pure_number.cgi") { open(IN, "$RDATA->{data_dir}/pure_number.cgi") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); while(chomp(my $line = )) { push(@data, [(split(/\t/, $line))]); } close(IN) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); } return \@data; } ################################################### # input:() # retrun: #comment: ################################################### sub put_pure_number_data { my ($rpure_num) = @_; open(OUT, ">$RDATA->{data_dir}/pure_number.cgi") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); foreach (@$rpure_num) { if(defined($_)) {print OUT join("\t", @$_) . "\n";} else {print OUT "\n";} } close(OUT) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); return 1; } ################################################### # input:() # retrun: #comment: ################################################### sub get_user_pure_count_data { my %data; if(-e "$RDATA->{data_dir}/user_pure_count.cgi") { open(IN, "$RDATA->{data_dir}/user_pure_count.cgi") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); while(chomp(my $line = )) { my ($uid, $pure_cnt) = split(/\t/, $line); $data{"$uid"} = $pure_cnt; } close(IN) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); } return \%data; } ################################################### # input:() # retrun: #comment: ################################################### sub put_user_pure_count_data { my ($rusr_pure) = @_; open(OUT, ">$RDATA->{data_dir}/user_pure_count.cgi") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); while(my ($uid, $pure_cnt) = each(%$rusr_pure)) { print OUT "$uid\t$pure_cnt\n"; } close(OUT) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); return 1; } ################################################### # input:() # retrun: #comment: ################################################### sub delete_pure_data_from_uid { my ($uid) = @_; my $rpunum = get_pure_number_data(); foreach (@$rpunum) { $_->[1] = undef if($_->[1] == $uid); } put_pure_number_data($rpunum); my $rusr_pure = get_user_pure_count_data($uid); delete($rusr_pure->{"$uid"}); put_user_pure_count_data($rusr_pure); return 1; } ################################################### # input:() # retrun: #comment: ################################################### sub get_bbs_sel_album_htm { my $str = (defined($RDATA->{bbs}))? get_album_htm(): get_start_htm(); return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_change_comment_htm { my $alert_str = change_my_comment(); my $str = get_album_htm($alert_str); return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub change_my_comment { my $alert_str; my $uid = $PARAM->{UID}; my $sbj = $PARAM->{SBJ}; my $cmt = $PARAM->{CMT}; if($sbj ne get_safe_htm($sbj, 1)) { $alert_str = "Á¦¸ñ¿¡ ºÒ°¡´ÉÇÑ ¹®ÀÚ°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù."; } if(length($sbj) > 50) { $alert_str = "Á¦¸ñÀÌ ³Ê¹« ±é´Ï´Ù."; } if($cmt ne get_safe_htm($cmt, 2)) { $alert_str = "ÄÚ¸àÆ®¿¡ ºÒ°¡´ÉÇÑ ¹®ÀÚ°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù."; } if(length($cmt) > 800) { $alert_str = "ÄÚ¸àÆ®°¡ ³Ê¹« ±é´Ï´Ù."; } $cmt =~ s/\r\n|\r|\n|\t/
/g; if(!$alert_str) { my $rallu = get_all_udata_hash(); my $ru = $rallu->{"$uid"}; @$ru[11, 12, 13] = ($sbj, $cmt, time); put_all_udata($rallu); $alert_str = "¾Ù¹üÄÚ¸àÆ®°¡ °»½ÅµÇ¾ú½À´Ï´Ù."; } return "$alert_str"; } ################################################### # input:() # retrun: #comment: ################################################### sub get_whole_history_main_htm { my @lines; my $time = time; if(-e "$RDATA->{data_dir}/whole_hist.cgi") { open(UHIST, "$RDATA->{data_dir}/whole_hist.cgi") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); chomp(@lines = ); close(UHIST) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); } my $history = qq{}; foreach (reverse(@lines)) { my ($time, $comm, $color) = split(/\t/, $_); my $time_str = get_time_str($time); if(!$color) {$color = "blue";} $history .= " "; } $history .= qq{
$time_str: $comm
}; return $history; } ################################################### # input:() # retrun: #comment: ################################################### sub get_reg_check_htm { my $str; my $rudata = get_all_udata(); if(@$rudata < $RDATA->{max_user}) { my $ndata = get_regist_err_html(); if(defined($ndata)) { $str = get_usr_registration_htm($ndata); } else { $str = get_usr_registration_check_htm(); } } else { $str = get_start_htm(); } return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_bbs_secure_htm { if(!defined($RDATA->{bbs})) {return get_start_htm();} my $alert_str; my $uid = $PARAM->{UID}; my $rallu = get_all_udata_hash(); my $rsecret = get_secret_data(); my $rbbs = get_bbs_data(); my $str = "Content-type: text/html\n\n"; $str .= qq{}; $str .= get_head(); $str .= qq{ BBSÈ­¸é
}; $str .= get_top_open_bbs_htm(); $str .= get_bbs_table_htm($rbbs, $rallu, $rsecret); $str .= get_copyright(); $str .= "
"; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_bbs_htm { if(!defined($RDATA->{bbs})) {return get_start_htm();} my $alert_str; my $uid = $PARAM->{UID}; my $rallu = get_all_udata_hash(); my $rsecret = get_secret_data(); my ($type, $bbsid) = split(/!/, $PARAM->{OPT}); my $rbbs = get_bbs_data(); if($type == 1) { $alert_str = contributing_bbs($rbbs, $rallu); } elsif($type == 3) { $alert_str = delete_bbs($rbbs); } my $str = "Content-type: text/html\n\n"; $str .= qq{}; $str .= get_head(); $str .= qq{ BBSÈ­¸é
}; $str .= get_bbs_contribute_box_htm($rallu, $rsecret, $alert_str); $str .= get_bbs_table_htm($rbbs, $rallu, $rsecret); $str .= get_copyright(); $str .= "
"; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_top_open_bbs_htm { my $bbs_max = $RDATA->{bbs}->{max} || 100; my $str .= qq{
£¼£¼½ÉÇà °Ô½ÃÆÇ£¾£¾
(${bbs_max} °ÇÀ» ³Ñ¾î°¡¸é ¿À·¡µÈ °Ô½Ã¹°Àº »èÁ¦µË´Ï´Ù.)
°ÔÀÓ¿¡ ·Î±×ÀÎÀ» ÇÏ¸é ±ÛÀ» ¾µ ¼ö ÀÖ½À´Ï´Ù.

}; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_bbs_contribute_box_htm { my ($rallu, $rsecret, $alert_str) = @_; my $uid = $PARAM->{UID}; my $pid = $PARAM->{PID}; my $bbs_max = $RDATA->{bbs}->{max} || 100; my $js = "document.sbm.CMT.value=this.form.cmt.value;"; $js .= "document.sbm.submit();"; my $js2 = "document.sbm.MODE.value='bbs_sel_album';"; $js2 .= "document.sbm.OPT.value='$uid!b';$js"; my $js3 = "document.sbm.PID.value='';"; $js3 .= "document.sbm.OPT.value='';$js"; my $plant_table = qq{

} . get_plant_table_htm($uid, $pid, $rallu, $rsecret) if($pid); my @col_row = ($pid)? (25, 15): (40, 10); my $rpay = $RDATA->{bbs}->{pay}; my $comment = qq{
°Ô½ÃÆÇ¿¡ ±ÛÀ» ÀûÀ» °æ¿ì, ¼ÒÁö±ÝÀÌ $rpay->{max}$RDATA->{monney}¹Ì¸¸ÀÇ USERÀÏ °æ¿ì,
$rpay->{span}ÀÏ¿¡ 1ȸ, Áö¿ø±Ý $rpay->{money}$RDATA->{monney}ÀÌ(°¡) Áö±ÞµË´Ï´Ù. } if($rpay); my $str .= qq{
£¼£¼½ÉÇðԽÃÆÇ£¾£¾
(${bbs_max}°Ç À» ³Ñ´Â ¿À·¡µÈ °Ô½Ã¹°ÀÇ °æ¿ì, »èÁ¦µË´Ï´Ù.) $comment
$alert_str
$plant_table
³»¿ë(¹Ý°¢ 800¹®ÀÚ±îÁö)
}; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_bbs_page_link_htm { my ($bbs_cnt) = @_; my $uid = $PARAM->{UID}; my $pid = $PARAM->{PID}; my $mode = $PARAM->{MODE}; my $pag = $PARAM->{PAGE}; $pag = 1 if($pag <= 0); my $pgf = $RDATA->{bbs}->{page_format} || 10; my $pg_cnt = int(($bbs_cnt - 1 + $pgf) / $pgf); my $bpag = $pag - 1; my $npag = $pag + 1; my $bef = ($bpag == 0)? "£¼": qq{£¼}; my $nex = ($npag > $pg_cnt)? "£¾": qq{£¾}; my $str = qq{ ÇÕ°è $pg_cnt ÆäÀÌÁö£º $bef  }; for(my $pg = 1; $pg <= $pg_cnt; $pg++) { $str .= ($pg != $pag)? qq{ $pg  }: "$pg "; } $str .= qq{ $nex }; return $str; } ################################################### # input:() # retrun: #comment:1¼ö½Å¡¢2¼Û½Å ################################################### sub get_bbs_table_htm { my ($rbbs, $rallu, $rsecret) = @_; my $uid = $PARAM->{UID}; my $pag = $PARAM->{PAGE}; $pag = 1 if($pag <= 0); my $cnt = @$rbbs; my $pgf = $RDATA->{bbs}->{page_format} || 10; my $time = time; my $back = ($PARAM->{MODE} eq "bbs")? "$PNAME?UID=$uid&MODE=main": $RDATA->{home_url}; my $page_str = get_bbs_page_link_htm($cnt); my $bbs_str .= qq{
$page_str
}; for(my $bbs_cnt = ($pag - 1) * $pgf; $bbs_cnt < $pag * $pgf; $bbs_cnt ++) { if(!defined($rbbs->[$bbs_cnt])) {last;} my ($bbsid, $stime, $suid, $spid, $comment) = @{$rbbs->[$bbs_cnt]}; my $uname = ($rallu->{"$suid"}->[1])? qq{ $rallu->{"$suid"}->[1]}: "(¿À·¡µÈ À¯Àú)"; my $del_button = qq{} if($suid == $uid); my $plant_table = get_plant_table_htm($suid, $spid, $rallu, $rsecret) if($spid); my $time_str = get_daytime_str($stime); $time_str .= " New!!" if($time - $stime <= 86400); $bbs_str .= qq{
($bbsid) Åõ°íÀÚ: $uname ($time_str) $del_button
$plant_table
$comment
}; $cnt--; } my $str = qq{
$bbs_str
$page_str
}; return $str; } ################################################### # input:() # retrun: #comment:1¼ö½Å¡¢2¼Û½Å ################################################### sub contributing_bbs { my ($rbbs, $rallu) = @_; my $time = time; my $uid = $PARAM->{UID}; my $pid = $PARAM->{PID}; my $comment = $PARAM->{CMT}; my $mlimit = $RDATA->{bbs}->{limitation} || 2; if(!$comment) {return "¹®ÀÚ°¡ ÀԷµÇÁö ¾Ê¾Ò½À´Ï´Ù.";} if($comment ne get_safe_htm($comment, 2)) { return "ÀÔ·ÂÇÒ ¼ö ¾ø´Â ¹®ÀÚ°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù."; } if(length($comment) > 800) { return "Åõ°íµÈ ³»¿ëÀÌ ³Ê¹« ±é´Ï´Ù."; } $comment = get_safe_htm($comment, 1); my $same_cnt = 0; my $cnt = 0; my $bbsid = 1; foreach (@$rbbs) { my ($mbbsid, $mtime, $msuid, $mspid, $mcomment) = @$_; if($time - $mtime <= 86400 && $cnt < $mlimit) { if($msuid == $uid) { if ($comment eq $mcomment) { return "ÀÌÁßÅõ°í°¡ µÇ¾ú½À´Ï´Ù."; } if($mlimit && ++ $same_cnt == $mlimit) { return "1ÀÏ µ¿¾ÈÀÇ ¿¬¼ÓÅõ°í´Â ${mlimit}°Ç ±îÁö ÀÔ´Ï´Ù."; } } } if($bbsid <= $mbbsid) {$bbsid = $mbbsid + 1;} $cnt ++; } unshift(@$rbbs, [$bbsid, $time, $uid, $pid, $comment]); put_bbs_data($rbbs); pay_bbs($rallu, $time, $uid); my $bbs_max = $RDATA->{bbs}->{max} || 100; if(@$rbbs > $bbs_max) {pop(@$rbbs);} return "Åõ°íÇÏ¿´½À´Ï´Ù"; } ################################################### # input:() # retrun: #comment: ################################################### sub pay_bbs { my ($rallu, $time, $uid) = @_; if(my $rpay = $RDATA->{bbs}->{pay}) { my $rudata = get_status_data($uid); my $bef_time = $rallu->{"$uid"}->[14]; if($rudata->[0]->[0] < $rpay->{max}) { if($bef_time + $rpay->{span} * 86400 <= $time) { $rudata->[0]->[0] += $rpay->{money}; $rallu->{"$uid"}->[14] = $time; put_status_data($uid, $rudata); put_all_udata($rallu); put_self_history($uid, "BBS¿¡ ±ÛÀ» ÀÛ¼ºÇØ Áּż­ °¨»çÇÕ´Ï´Ù. ½Ä¹°¿¬±¸¼Ò¿¡¼­ Áö¿ø±Ý $rpay->{money}$RDATA->{monney}ÀÌ(°¡) Áö±ÞµÇ¾ú½À´Ï´Ù.", "green", $time ); } } } return 1; } ################################################### # input:() # retrun: #comment:1¼ö½Å¡¢2¼Û½Å ################################################### sub delete_bbs { my ($rbbs) = @_; my $time = time; my $uid = $PARAM->{UID}; my $bbsid = (split(/!/, $PARAM->{OPT}))[1]; my $bbs_cnt = @$rbbs; for(my $cnt = 0; $cnt < $bbs_cnt; $cnt ++) { my ($mbbsid, $mtime, $msuid, $mspid, $mcomment) = @{$rbbs->[$cnt]}; if($mbbsid == $bbsid) { if($msuid != $uid) { return "¿ª½Ã, ´Ù¸¥ »ç¶÷ÀÇ ±ÛÀº Áö¿ì¸é ¾ÈµÇ¿ä."; } splice(@$rbbs, $cnt, 1); put_bbs_data($rbbs); return "µî·ÏµÈ ±ÛÀ» »èÁ¦ÇÏ¿´½À´Ï´Ù."; } } return "Åõ°í¸¦ »èÁ¦ÇÒ ¼ö ¾ø¾ú½À´Ï´Ù"; } ################################################### # input:() # retrun: #comment:1¼ö½Å¡¢2¼Û½Å¡¡Lock µÇ¾î ÀÖ½À´Ï´Ù. ################################################### sub get_mail_htm { my $alert_str; my $uid = $PARAM->{UID}; my $rallu = get_all_udata_hash(); my ($type, $op_id) = split(/!/, $PARAM->{OPT}); my $rmail = get_mail_data($uid); if($type == 4) { $alert_str = sending_mail($rmail, $uid); #rmailÀº º¯°æµË´Ï´Ù. if(!$alert_str) { my ($uname, $suname) = ($rallu->{"$uid"}->[1], $rallu->{"$op_id"}->[1]); $alert_str = qq{$suname ¾¾¿¡°Ô ¸ÞÀÏÀ» ¼Û½ÅÇÏ¿´½À´Ï´Ù.}; if($uid != $op_id) {#¿ì¼±, Àڽſ¡°Ô º¸³ÂÀ» °æ¿ì´Â ¼Ò½ÄÀ» º¸³»Áö ¾Ê´Â °ÍÀ¸·Î º¯°æÇß½À´Ï´Ù. put_self_history($uid, $alert_str, "black"); put_self_history($op_id, qq{$uname ¾¾·ÎºÎÅÍ ¸ÞÀÏÀÌ µµÂøÇß½À´Ï´Ù}, "blue"); if(rand() < 0) { put_whole_history("$uname¾¾¿Í $suname¾¾°¡ ·¯ºê·¯ºê¢½¶ó´Â ¼Ò¹®ÀÌ µé¸®°í ÀÖ½À´Ï´Ù.", "pink"); } } } } my $mail_comment = "
µ¿ÀÏÇÑ À¯Àú¿¡°Ô ¼Û½ÅÇÒ ¼ö ÀÖ´Â ¸ÞÀÏÀÇ ¼ö´Â 1ÀÏ $RDATA->{mail_limitation}Åë ±îÁö ÀÔ´Ï´Ù. ´Ù¸¸ »ó´ë°¡ º¸³½ ¸ÞÀÏÀ» »èÁ¦Çϸé, ´õ º¸³¾ ¼ö ÀÖ½À´Ï´Ù. " if($RDATA->{mail_limitation}); my $str = "Content-type: text/html\n\n"; $str .= qq{}; $str .= get_head(); $str .= get_mail_js(); $str .= qq{ ¸ÞÀÏ È­¸é
£¼£¼½ÉÇà ¸ÞÀÏ£¾£¾
(100ÅëÀ» ³ÑÀ¸¸é ¿À·¡µÈ ¸ÞÀϷκÎÅÍ »èÁ¦µË´Ï´Ù) $mail_comment
¼Û½ÅÁö ¡çÇ༱Áö¸¦ À߸øÀûÁö ¾Êµµ·Ï ÁÖÀÇÇÒ°Í!
³»¿ë
$alert_str
}; if($type == 5) { my $mail_cnt = @$rmail; if($mail_cnt - $op_id >= 0) { splice(@$rmail, $mail_cnt - $op_id, 1); put_mail_data($uid, $rmail); } } if($type) {$str .= get_mail_table_htm($type, $rmail, $rallu);} $str .= get_copyright(); $str .= "
"; if($type == 1 || $type == 3) {put_off_mail($uid, $rmail);} return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_selector { my ($uid, $rallu) = @_; my ($str, %ucheck); my ($type, $op_id) = split(/!/, $PARAM->{OPT}); my $rsort = get_mail_sort_data($uid); foreach (@$rsort) { if($rallu->{"$_"}) { my $suname = $rallu->{"$_"}->[1]; my $selected = "selected" if($_ == $op_id); $str .= qq{
}; $str .= get_copyright(); $str .= "
"; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_usr_registration_change_htm { my $str; my $uid = $PARAM->{UID}; my $rallu = get_all_udata_hash(); my $ru = $rallu->{"$uid"}; if($PARAM->{OPT} eq "delete") { delete($rallu->{"$uid"}); put_all_udata($rallu); delete_regist_user($uid); $str = get_start_htm("À¯Àú Á¤º¸¸¦ »èÁ¦Çß½À´Ï´Ù."); } elsif(!$PARAM->{NAM}) { $str = get_usr_registration_change_input_htm($uid, $ru); } elsif(my $err_htm = get_regist_err_html({name_nocheck => 1})) { $str = get_usr_registration_change_input_htm($uid, $ru, $err_htm); } else { my $opn = ($PARAM->{OPN})? 1: 0; my $pwd = get_safe_htm($PARAM->{PWD}); $pwd = get_epass($pwd) if($RDATA->{cipher}); @$ru[2, 3, 4, 5, 6, 9] = ( $pwd, get_safe_htm($PARAM->{HP}), get_safe_htm($PARAM->{MAIL}), get_safe_htm($PARAM->{SEX}), get_safe_htm($PARAM->{KEN}), $opn ); put_all_udata($rallu); $str = get_main_htm($uid, "À¯Àúµî·ÏÁ¤º¸¸¦ °»½ÅÇß½À´Ï´Ù"); } return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_usr_registration_change_input_htm { my ($uid, $ru, $err_str) = @_; my $pwd = $ru->[2] if(!$RDATA->{cipher}); my $str = "Content-type: text/html\n\n"; $str .= qq{}; $str .= get_head(); $str .= get_regist_jscript(); $str .= qq{ À¯Àúµî·ÏÁ¤º¸ º¯°æÈ­¸é
À¯Àúµî·ÏÁ¤º¸ º¯°æÈ­¸é
*Àº ÀÔ·Â Çʼö Ç׸ñÀÔ´Ï´Ù
$err_str
}; $str .= get_reg_tr_htm("$ru->[1]", $pwd, (@$ru)[5, 6, 3, 4, 9]); $str .= qq{

}; $str .= get_copyright(); $str .= "
"; return $str; } ################################################### # input:() # retrun: #comment:MODE°¡ mainÀÇ °æ¿ì¸¸ LockÀÌ ÇÊ¿ä ################################################### sub get_main_htm { my ($uid, $alert_str) = @_; my $rudata = get_status_data($uid); if($PARAM->{MODE} eq "main" && $PARAM->{OPT} eq "u" && $rudata->[1]->[8] == 1) { exec_uranai($rudata, $uid); #rudata³» º¯°æ put_status_data($uid, $rudata); } my $uname = get_uname($uid); my $str = "Content-type: text/html\n\n"; $str .= qq{}; $str .= get_head(); $str .= get_main_js(); $str .= get_hpb_js(); $str .= qq{ $unameÀÇ ¹ÏÀ»¼ö ¾ø´Â ½Ä¹°. }; $str .= get_flower_htm($uid, $rudata); $str .= get_ustatus_htm($uid, $rudata, $alert_str, {property => 1}); $str .= get_copyright(); $str .= "
"; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub exec_uranai { my ($rudata, $uid) = @_; my $u_time = get_uranai_time(); if(int(($rudata->[0]->[9] + $JST) / 86400) < int(($u_time + $JST) / 86400)) { my $hist_str; my $ruranai = get_user_uranai($uid); my ($frt_type, $order_str) = @$ruranai; if($frt_type != 4) { my $rplant = get_plant_data($uid); my $rp = (values(%$rplant))[int(rand() * keys(%$rplant))]; my ($pname, $rcreature, $grow_level, $grow_step, $prom_flg) = (@$rp)[1, 3, 4, 5, 26]; if(0 <= $grow_step && $grow_step <= 4) { my $new_grow_level = $grow_level + (4, 2, 2, 1, 0, -1, -4)[$frt_type]; my $up_point = $RDATA->{next_grow}->[$grow_step] + get_grow_add($grow_step, $rcreature); $up_point /= 2 if($prom_flg & 1); #á³?ʦªÊªÎªÇ $new_grow_level = 0 if($new_grow_level < 0); $new_grow_level = $up_point - 1 if($new_grow_level >= $up_point); $hist_str .= "À½¾ÇÀÌ ¡¸$pname¡¹¿¡°Ô" . ( "²Ï ÁÁ´Ù", "ÁÁ´Ù", "ÁÁ´Ù", "Á¶±Ý ÁÁ´Ù", undef, "Á¶±Ý ³ª»Ú´Ù", "²Ï ³ª»Ú´Ù" )[$frt_type] . "¿µÇâÀ» ÁÖ¾ú½À´Ï´Ù.
"; $rp->[4] = $new_grow_level; put_plant_data($uid, $rplant); } } my $rank_str = "($order_strêÈ)" if($order_str); $hist_str .= "¿À´ÃÀÇ ¿î¼¼´Â ¡¸" . ("ÃÊ´ë±æ", "´ë±æ", "Áß±æ", "¼Ò±æ", "±æ", "Èä", "´ëÈä")[$frt_type] . "$rank_str¡¹ÀÔ´Ï´Ù."; $hist_str .= get_item_change($rudata->[1], $frt_type); $rudata->[0]->[9] = $u_time; put_self_history($uid, $hist_str, "#006666"); } return 1; } ################################################### # input:() # retrun: #comment: ################################################### sub get_item_change { my ($ruitem, $frt_type) = @_; my $hist_str; if($frt_type >= 5) { my $pattern = int(rand() * 6); if($pattern == 0) { $hist_str .= "
¿Àµð¿À ¼¼Æ®°¡ ¸Á°¡Á® ¹ö·È½À´Ï´Ù."; $ruitem->[8] = 0; } elsif($pattern == 1 && $ruitem->[1] > 0) { $hist_str .= "
°Å¸§ÀÌ ³Ê¹« ³¿»õ³ª±â ¶§¹®¿¡ ÆıâÇß½À´Ï´Ù.($ruitem->[1]"; if($frt_type == 5){$ruitem->[1]--;} else {$ruitem->[1] = 0;} $hist_str .= "¡æ$ruitem->[1])"; } elsif($pattern == 2 && $ruitem->[2] > 0) { $hist_str .= "
Åä¾ç°Ë»çÁöÀÇ »öÀÌ º¯»öÇÏ°í ÀÖÀ¸¹Ç·Î ÆıâÇß½À´Ï´Ù.($ruitem->[2]"; if($frt_type == 5){$ruitem->[2]--;} else {$ruitem->[2] = 0;} $hist_str .= "¡æ$ruitem->[2])"; } elsif($pattern == 3 && $ruitem->[3] > 0) { $hist_str .= "
Åä¾ç ºÐ¼® ŶÀÌ ¸Á°¡Á® ÀÖ´ø °Íó·³ º¸¿´À¸¹Ç·Î ÇÑ °³ ¹ö·È½À´Ï´Ù.($ruitem->[3]"; $ruitem->[3]--; $hist_str .= "¡æ$ruitem->[3])"; } elsif($pattern == 4 && $ruitem->[5] > 0) { $hist_str .= "
¼ºÀå ÃËÁøÁ¦ÀÇ ¼Òºñ ±âÇÑÀÌ Áö³ª°í ÀÖ¾úÀ¸¹Ç·Î ÇÑ °³ ¹ö·È½À´Ï´Ù.($ruitem->[5]"; $ruitem->[5]--; $hist_str .= "¡æ$ruitem->[5])"; } elsif($pattern == 5 && $ruitem->[7] > 0) { $hist_str .= "
Ç÷£Æ® ÇϿ콺¸¦ ÇÑ°³ ÀÒ¾î¹ö·È½À´Ï´Ù.($ruitem->[7]"; $ruitem->[7]--; $hist_str .= "¡æ$ruitem->[7])"; } } elsif($frt_type <= 1) { my $pattern = int(rand() * 5); if($pattern == 1 || $pattern == 3) { if($frt_type == 0) { $hist_str .= "
½ÃÀÛÇ°ÀÇ ¼ºÀå ÃËÁøÁ¦¸¦ ÇÑ °³ ¹Þ¾Æ ¿Ô½À´Ï´Ù.(" . ($ruitem->[5] * 1); $ruitem->[5]++; $hist_str .= "¡æ$ruitem->[5])"; } else { $hist_str .= "
¼Õ¼ö °Å¸§À» ¸¸µé¾î º¸¾Ò½À´Ï´Ù. °Å¸§ÀÌ ÇÑ °³ Áõ°¡Çß½À´Ï´Ù. (" . ($ruitem->[1] * 1); $ruitem->[1]++; $hist_str .= "¡æ$ruitem->[1])"; } } elsif($pattern == 2 || $pattern == 4) { if($frt_type == 0) { $hist_str .= "
Åä¾ç ºÐ¼® ŶÀ» Ä£±¸·ÎºÎÅÍ ¹Þ¾Ò½À´Ï´Ù. Åä¾ç ºÐ¼® ŶÀÌ ÇÑ °³ Áõ°¡Çß½À´Ï´Ù.(" . ($ruitem->[3] * 1); $ruitem->[3]++; $hist_str .= "¡æ$ruitem->[3])"; } else { $hist_str .= "
Åä¾ç°Ë»çÁö°¡ ¼­¶ø¿¡¼­ ³ª¿Ô½À´Ï´Ù. Åä¾ç ¸®Æ®¸Ó½ºÁö°¡ ÇÑ °³ Áõ°¡Çß½À´Ï´Ù.(" . ($ruitem->[2] * 1); $ruitem->[2]++; $hist_str .= "¡æ$ruitem->[2])"; } } elsif($pattern == 0) { $hist_str .= "
¿ØÁö Ç÷£Æ® ÇϿ콺°¡ Çϳª ´Ã¾îÀÖ¾ú½À´Ï´Ù.·°Å°!(" . ($ruitem->[7] * 1); $ruitem->[7]++; $hist_str .= "¡æ$ruitem->[7])"; } } return $hist_str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_no_cook_htm { my $suid = $PARAM->{OPT}; my $str; if(defined($suid)) { $str = get_no_cook_main_htm($suid); } else { $str = get_no_cook_user_htm($PARAM->{UID}, $suid); } return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_no_cook_main_htm { my $suid = shift; my $rudata = get_status_data($suid); my $uname = get_uname($suid); my $str = "Content-type: text/html\n\n"; $str .= qq{}; $str .= get_head(); $str .= get_hpb_js(); $str .= qq{ $unameÀÇ ¹ÏÀ»¼ö ¾ø´Â ½Ä¹° }; $str .= get_flower_htm($suid, $rudata); $str .= get_ustatus_htm($suid, $rudata); $str .= get_copyright(); $str .= "
"; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_no_cook_user_htm { my ($uid, $suid) = @_; my $ruids = get_ordered_udata(); my $rc = get_rc_data(); my $search_word = $PARAM->{WORD} if($PARAM->{WORD} eq get_safe_htm($PARAM->{WORD})); $ruids = get_word_cut_udata($ruids) if($search_word); my $href_str = qq{$PNAME?UID=$uid&MODE=no_cook&WORD=$search_word&SORT=}; my $str = "Content-type: text/html\n\n"; $str .= qq{}; $str .= get_head(); $str .= get_hpb_js(); $str .= qq{ ´Ù¸¥ »ç¶÷ÀÇ ¹ÏÀ»¼ö ¾ø´Â ½Ä¹°
½Ä¹°À» º¸°í ½ÍÀº À¯Àú¸¦ ¼±ÅÃÇØ ÁÖ¼¼¿ä
À̸§¿¡ Æ÷ÇԵǴ ¹®ÀÚ·Î °Ë»öÇÒ ¼ö ÀÖ½À´Ï´Ù£º
Çöó¿ö ÆÊ¿¡
}; foreach (@$ruids) { my ($suid, $uname, $nid, $subj, $albtime) = (@$_)[0, 1, 10, 11, 13]; my $albt_str = ($albtime)? get_daytime_str($albtime): "---"; $subj = " " if(!$subj); if($suid != $uid) { $str .= qq{ }; } } $str .= qq{
ID À̸§ ÄÚ¸àÆ®
¾Ù¹ü
°»½Å ÀϽÃ
$nid $uname¾¾ÀÇ ½Ä¹° $subj $albt_str
}; $str .= get_copyright(); $str .= ""; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_rc_data { my @data = (['¡å', 'd'], ['¡å', 'd'], ['¡å', 'd']); my $sort = $PARAM->{SORT}; $data[0] = ['¡ã', 'a'] if($sort eq "id!d"); $data[1] = ['¡ã', 'a'] if($sort eq "al!d"); $data[2] = ['¡ã', 'a'] if($sort eq "ti!d"); return \@data; } ################################################### # input:() # retrun: #comment: ################################################### sub get_sow_item_htm { my $err_str; my $uid = $PARAM->{UID}; my $rseed = get_seed_data($uid); my $old_pid = $PARAM->{OPT}; my $new_pid = $PARAM->{IID}; my $rrseed = $rseed->{"$new_pid"}; if(!$rrseed->[1]) { $err_str = "ÀÌ¿ëÇÒ ¼ö ¾ø´Â Á¾ÀÔ´Ï´Ù"; } else { my $rplant = get_plant_data($uid); my $grow_step = $rplant->{"$old_pid"}->[5]; if ($grow_step != 6 && $grow_step != 10) { $err_str = "±×°÷¿¡ ½ÉÀ» ¼ö ¾ø½À´Ï´Ù"; } else { my $rudata = get_status_data($uid); $rudata->[0]->[5]--; my $time = time; my ($pname, $dna1, $dna2, $uid1, $uid2, $pid1, $pid2) = (@$rrseed)[2, 3, 4, 6, 7, 8, 9]; my $price = get_flower_total($dna1, $dna2); my $rdata = [$new_pid, $pname, $time, "null", 0, 0, 8, $time, $time, 8, $time, $time, 8, $time, $time, 2, $dna1, $dna2, $price, $uid1, $uid2, $pid1, $pid2]; $rplant->{"$new_pid"} = $rdata; make_flower_gif($uid, $rdata); delete($rseed->{"$new_pid"}); delete($rplant->{"$old_pid"}); put_plant_data($uid, $rplant); put_seed_data($uid, $rseed); put_status_data($uid, $rudata); put_self_history($uid, "$pnameÀÇ Á¾À» ½É¾ú½À´Ï´Ù.", "black"); delete_image($uid, $old_pid); } } my $str = get_main_htm($uid, $err_str); return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_use_item_htm { my $alert_str; my $uid = $PARAM->{UID}; my $uname = get_uname($uid); my $rseed = get_seed_data($uid); if($PARAM->{RENAME}) { $alert_str = change_seed_data($rseed, $uid); put_seed_data($uid, $rseed); } my $ritem_shop = get_item_shop(); my $ruser = get_status_data($uid); my $str = "Content-type: text/html\n\n"; $str .= qq{}; $str .= get_head(); $str .= get_use_item_js(); $str .= get_hpb_js(); $str .= qq{ $unameªÎã᪸ªéªìªÊª¤ãÕÚª
}; $str .= get_flower_htm($uid, $ruser); #¾ÆÀÌÅÛ µ¥ÀÌÅÍ°¡ º¯È¯µË´Ï´Ù $str .= "
$alert_str
\n"; $str .= get_user_item_htm($uid, $ritem_shop, $ruser, $rseed); $str .= get_ustatus_htm($uid, $ruser); $str .= get_copyright(); $str .= "
"; put_status_data($uid, $ruser); return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_ustatus_htm { my ($uid, $rudata, $alert_str, $opt) = @_; my $property_str; my $udata = get_udata($uid); my $img_dir = $RDATA->{img_dir}; my $rstatus = $rudata->[0]; my $announc_htm = get_announce_htm($uid, $rstatus) if ($rstatus->[3] <= $RDATA->{hint} && $PARAM->{MODE} ne "no_cook"); my $uname_htm = get_uname_htm($udata); if($opt->{property}) { my $property = get_user_property($uid); $property_str = qq{ Àç»ê£º $property$RDATA->{monney} }; } my $garden_name = ($PARAM->{MODE} eq "pollination")? "¼öºÐ ÀÛ¾÷": ($uid == $PARAM->{UID})? "¸¶ÀÌ °¡µç": "$udata->[1]¾¾ÀÇ °¡µç"; my $level = $RDATA->{level_setting}->[$rstatus->[3]]->[0] || $RDATA->{kyuu}->[$rstatus->[3]]; my $str = qq{
$garden_name
$announc_htm
$property_str }; if($PARAM->{MODE} eq "main" || $PARAM->{MODE} eq "into_album" || $PARAM->{MODE} eq "login" || $PARAM->{MODE} eq "regist" || $PARAM->{MODE} eq "sow_item" || $PARAM->{MODE} eq "reg_change") { $str .= get_self_history_htm($uid); } $str .= qq{
$alert_str
À̸§£º $uname_htm ¼ÒÁö±Ý£º $rstatus->[0]$RDATA->{monney}
·¹º§£º $level
}; if($PARAM->{MODE} eq "use_item") { $str .= qq{ °Å¸§ µî ÇÊ¿äÇÑ °ÍÀ» »ê´Ù µµ±¸»óÀÚ¸¦ Ä¡¿î´Ù }; } elsif($PARAM->{MODE} eq "no_cook") { $str .= qq{ À¯Àú¼±ÅÃÈ­¸éÀ¸·Î µ¹¾Æ°£´Ù ÀÌ »ç¶÷ÀÇ ¾Ù¹üÀ» º»´Ù ÀÌ »ç¶÷¿¡°Ô ¸ÞÀÏÀ» º¸³½´Ù ¸¶ÀÌ °¡µçÀ¸·Î µ¹¾Æ°£´Ù }; } elsif($PARAM->{MODE} eq "pollination") { $str .= qq{ ¸¶ÀÌ °¡µçÀ¸·Î µ¹¾Æ°£´Ù }; } else { my $mid_str = ($rudata->[1]->[8] == 1 && int(($rstatus->[9] + $JST) / 86400) < int((get_uranai_time() + $JST) / 86400))? qq{ ½Ä¹°¿¡°Ô À½¾ÇÀ» µé·ÁÁØ´Ù}: ""; $str .= qq{ }; $str .= qq{ } if(!$RDATA->{pedia_url}); $str .= qq{
¼ø°è ½Ä¹° µµ°¨À» Àд´٠Çöó¿ö ÆÊ¿¡ °¡º»´Ù °Å¸§ µî ÇÊ¿äÇÑ °ÍÀ» »ê´Ù Áö±Ý±îÁö ÇÉ ²ÉÀÇ ¾Ù¹üÀ» º»´Ù °Å¸§µîÀÇ ´Ù¸¥ µµ±¸°¡ µé¾î°¡ ÀÖ½À´Ï´Ù.
}; $str .= qq{ } if(defined($RDATA->{bbs})); $str .= qq{
ÃÖ±ÙÀÇ ´º½º¸¦ º»´Ù ´Ù¸¥ »ç¶÷ÀÇ ¾Ù¹üÀ» º»´Ù ´Ù¸¥ »ç¶÷ÀÌ ±â¸£°í ÀÖ´Â »óŸ¦ º»´Ù °Ô½ÃÆÇÀ» ÀÌ¿ëÇÑ´Ù ´Ù¸¥ À¯Àú¿¡°Ô ¸ÞÀÏÀ» ¼Û½ÅÇÑ´Ù
µî·Ï Á¤º¸¸¦ º¯°æÇÑ´Ù $mid_str ·Î±×¾Æ¿ô ÇÑ´Ù
}; } $str .= qq{
¼ø°è ÄÝ·ºÅÍ ¿Õ ½Ä¹° ÄÝ·ºÅÍ ¿Õ Àç»ê ¿Õ ½Ä¹° Æò°¡ ¿Õ ±³¹è Àα⠿Õ
}; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_uname_htm { my $udata = shift; my $ken; my $uname = "$udata->[1] "; if($udata->[9]) { my ($url, $mail, $sex, $kent) = (@$udata)[3, 4, 5, 6]; $ken = "($kent)" if($kent && $kent ne "---"); $uname .= qq{¸ÞÀÏÀ» º¸³½´Ù\n} if($mail); $uname .= qq{ȨÆäÀÌÁö¸¦ º»´Ù\n} if($url && $url ne "http://"); $uname .= qq{³²¼º\n} if($sex eq "³²"); $uname .= qq{¿©¼º\n} if($sex eq "¿©"); } return "$uname$ken"; } ################################################### # input:() # retrun: #comment: ################################################### sub get_announce_htm { my ($uid, $rstatus) = @_; my ($oji_say); my $kyu = $rstatus->[3]; my $rplant = get_plant_data($uid); my $roji = $RDATA->{oji_say}; foreach (values(%$rplant)) { my ($grow_level, $place_score, $water_score, $nut_score, $place) = (@$_)[5, 6, 9, 12, 15]; if(($grow_level == 10 || $grow_level == 6) && $rstatus->[5] >= 1) { $oji_say .= $roji->{sow_seed} || "µµ±¸»óÀÚ¿¡ ÀÖ´Â Á¾À» »Ñ¸®¸é, ¶Ç ½Ä¹°ÀÌ ÀÚ¶ö°Å¾ß."; } elsif($grow_level <= 5) { if($kyu <= 3 && $place_score < 8 - $kyu) { if($place == 3) { $oji_say .= $roji->{move_in} || "½Ä¹°À» Áý¾È¿¡ À̵¿½ÃÅ°´Â ÆíÀÌ ÁÁÀ» °Í °°Àºµ¥."; } elsif($place == 1) { $oji_say .= $roji->{move_out} || "½Ä¹°À» Áý ¹Û¿¡ À̵¿½ÃÅ°´Â ÆíÀÌ ÁÁÀ» °Í °°Àºµ¥."; } } elsif($place_score <= 7) { $oji_say .= $roji->{anal_item}; if(!$roji->{anal_item}) { $oji_say .= (rand() < 0.7)? " ¡¸Åä¾ç½ÃÇèÁö¡¹³ª ¡¸Åä¾ç ºÐ¼® Ŷ¡¹À» »ç¿ëÇϸé, ½Ä¹°À» Áý¾È¿¡ µÎ¸é ÁÁÀº °ÍÀÎÁö, ¹Û¿¡ ³»´Â ÆíÀÌ ÁÁÀº °ÍÀÎÁö°¡ Á¶»çÇÒ ¼ö ÀÖÁö.
ÇÞ´Ô ´«±ÝÀÌ ¿Ã¶ó ¿À°í ÀÖÀ» ¶§, Àå¼Ò¸¦ ¹Ù²Ù¾î¹ö¸®¸é ¾ÈµÈ´Ù°í.
ÇÞ´Ô ´«±ÝÀÌ ³»·Á°¡±â ½ÃÀÛÇÏ¸é ¹Ù²ãºÁ.
": " ¡¸Åä¾ç½ÃÇèÁö¡¹´Â °á°ú°¡ Á¤È®ÇÏÁöµµ Çϴϱî, °á°ú°¡ ÀÌ»óÇÒ ¶§´Â
¸î ¹øÀΰ¡ ´õ »ç¿ëÇغÁ¼­ Àß È®ÀÎÇØ º¸´Â ÆíÀÌ ÁÁ¾Æ.
"; } } if($kyu <= 3 && $water_score < 8 - $kyu) { $oji_say .= "±×¸®°í, " if ($oji_say); $oji_say .= $roji->{give_water} || "¹°À» ÁÖ´Â ÆíÀÌ ÁÁÀº °Í °°³×"; } if($kyu <= 3 && $nut_score < 8 - $kyu) { $oji_say .= "¶Ç, " if ($oji_say); $oji_say .= $roji->{give_nut} || "¿µ¾çÀÌ ºÎÁ·ÇÑ°Å °°Àºµ¥, Ȩ ¼¾ÅÍ·Î °¡¼­ °Å¸§À» »ç ¿À°í, ¡¸µµ±¸»óÀÚ¡¹¿¡¼­ Áຸµµ·Ï ÇØ."; } } } my $level_s = $RDATA->{level_setting}->[0]->[0] || $RDATA->{kyuu}->[0]; my $level_e = $RDATA->{level_setting}->[$RDATA->{hint}]->[0] || $RDATA->{kyuu}->[$RDATA->{hint}]; my $announce = qq{
${level_s}~${level_e}ÀÇ ºÐµé²², ³óÀåÀÇ ÇҾƹöÁö·Î ºÎÅÍÀÇ ÈùÆ®

$oji_say
} if($oji_say); return $announce; } ################################################### # input:() # retrun: #comment:$cmd = w(¹°À» ÁØ´Ù), p(Àå¼Ò¸¦ À̵¿ÇÑ´Ù) ################################################### sub get_flower_htm { my ($uid, $rudata) = @_; my ($str, $pre_alert_str); my ($action_pid) = $PARAM->{OPT} =~ /^(\d+)!/; my $time = time; my $rstep = $RDATA->{step}; my $rplant = get_plant_data($uid); my $rstatus = $rudata->[0]; if(($PARAM->{MODE} eq "use_item" || $PARAM->{MODE} eq "main") && $rplant->{"$action_pid"}) { $pre_alert_str = change_plant_situation($rudata->[1], $rplant->{"$action_pid"}, $uid); put_plant_data($uid, $rplant); } $str .= qq{
\n}; my $cnt = 0; my @pids = reverse(sort {$a <=> $b} keys(%$rplant)); foreach my $pid (@pids){ my ($item_img, $place_ico, $in_out); my $rdata = $rplant->{"$pid"}; my $alert_str = $pre_alert_str if($pid == $action_pid); my $grow_step = $rdata->[5]; #see change_plant_data if($rdata->[15] <= 1) { $place_ico = "$RDATA->{img_dir}/naka_l.gif"; $in_out = 1; } else { $place_ico = "$RDATA->{img_dir}/soto_l.gif"; $in_out = 2; } my $bgcol = get_time_bgcol($time, $rdata->[15]); $item_img .= "" if($rdata->[26] & 1); $item_img .= "" if($rdata->[26] & 2); $item_img .= "" if($rdata->[26] & 4); $item_img .= "
" if($item_img); $str .= qq{ }; $cnt++; } $str .= qq{
}; $str .= get_top_plant_name_htm($rdata, $pid, $cnt); $str .= qq{
\n}; $str .= get_scale_htm($rdata); $str .= qq{
}; $str .= get_flower_img_htm($uid, $pid, $grow_step, "bgcolor='$bgcol'"); $str .= qq{ $item_img ´Ü°è£º$rstep->[$grow_step]->[0]
Àå¼Ò£º
}; if($PARAM->{MODE} ne "use_item" && $PARAM->{MODE} ne "no_cook") { $str .= qq{
\n} if($grow_step != 5); $str .= qq{
\n}; if($grow_step == 5) { my $rcreature = $rdata->[3]; my $pure_flg = defined(get_represent_flower($rcreature)); my $flower_cnt = $rstatus->[11]; my $flower_max = $rstatus->[10]; my $seed_rest = $rstatus->[6] - $rstatus->[5]; my $add_hint = " ¡ØÃÑÇÕÆò°¡ÀÇ 10¹èÀÇ ±Ý¾×"; $add_hint .= "°ú¡¢${seed_rest}°³ºÐÀÇ Á¾ÀÇ ¸Å¸Å±Ý¾×" if($seed_rest > 0 && !$pure_flg); $add_hint .= "ÀÌ(°¡) ¼Õ¿¡ µé¾î ¿É´Ï´Ù."; my $alb_button = ($flower_cnt >= $flower_max)? qq{¾Ù¹üÀÌ °¡µæÂ÷¼­
º¸Á¸ÇÒ ¼ö ¾ø½À´Ï´Ù
}: qq{}; $str .= ($pure_flg)? qq{
¼öºÐ ÇÒ ¼ö ¾ø´Â ½Ä¹°ÀÔ´Ï´Ù
¾Ù¹ü¿¡ º¸Á¸ÇØ ÁÖ¼¼¿ä


$alb_button
}: qq{

$alb_button
}; my $rstat = get_flower_status_data($rcreature, $pure_flg); $str .= get_flower_status($rstat); $str .= qq{
±³¹è·á: $rdata->[24]/$rdata->[23]
} if(!$pure_flg); } } if($alert_str) { $str .= qq{
$alert_str

\n}; } $str .= qq{
}; return $str; } ################################################### # input:() # retrun: #comment:ÀÚµ¿ÀûÀ¸·Î ³ª¸ÓÁöÀÇ Á¾À» ÀÚ°¡¼öºÐ ½ÃÄÑ ¸ðµÎ ÆȾÒÀ» °æ¿ìÀÇ °¡°ÝÀ» µ¹·ÁÁØ´Ù # ¼ø°è´Â Á¾À» ÀâÈ÷Áö ¾Ê±â ¶§¹®¿¡ 0¿£ ################################################### sub get_auto_seed_sell { my ($pure_flg, $rstatus, $rcreature) = @_; my $rstat = get_flower_status_data($rcreature); my $seed_rest = ($rstatus->[6] - $rstatus->[5]) * ($rstat->[0]->[0] - $RDATA->{plli_plice}); if($pure_flg || $seed_rest <= 0) {return undef;} return $seed_rest; } ################################################### # input:() # retrun: #comment:$cmd = w(¹°À» ÁØ´Ù), p(Àå¼Ò¸¦ À̵¿ÇÑ´Ù) ################################################### sub change_plant_situation { my ($ritems, $rdata, $uid) = @_; my $alert_str; my ($pid, $option, $name) = split(/!/, $PARAM->{OPT}); my $place = $rdata->[15]; my $iid = $PARAM->{IID}; my $num = $PARAM->{NUM} || 1; if(defined($iid)) { if($ritems->[$iid] <= 0) { return "××éĪǪ­ªÊª¤«¢«¤«Æ«àªÇª¹¡£"; # error_end(__LINE__, "ºÎÁ¤ÇÑ ¾ÆÀÌÅÛÀ» »ç¿ëÇÏ·Á°í Çß½À´Ï´Ù", "IID=$iid"); # exit 1; } } if($PARAM->{MODE} eq "use_item") { if($rdata->[5] < 0 || $rdata->[5] > 4) {return undef;} if($iid == 1) { if($rdata->[12] >= 9) {$alert_str = "´õ ÀÌ»ó °Å¸§À» ÁÙ ¼ö ¾ø½À´Ï´Ù.";} else { my $need_cnt = 9 - $rdata->[12]; my $use_max = ($ritems->[1] < $need_cnt)? $ritems->[1]: $need_cnt; my $use_cnt = ($num < $use_max)? $num: $use_max; $rdata->[12] += $use_cnt; $ritems->[1] -= $use_cnt; } } elsif($iid == 2) { my $flag = ($place == 1 || $place == 2)? 1: -1; if(rand() < 0.2) {$flag = -$flag;} my $place_good = ($flag == 1)? "Áý ¹Û¿¡ µÎ´Â ÆíÀÌ ÁÁÀ» °Í °°½À´Ï´Ù.": "Áý¾È¿¡ µÎ´Â ÆíÀÌ ÁÁÀ» °Í °°½À´Ï´Ù."; $alert_str = "Åä¾ç½ÃÇèÁö¸¦ »ç¿ëÇß½À´Ï´Ù.
Áö±Ý ÀÌ ½Ä¹°Àº $place_good"; $ritems->[2]--; } elsif($iid == 3) { my $flag = ($place == 1 || $place == 2)? 1: -1; my $place_good = ($flag == 1)? "Áý ¹Û¿¡ µÎ¾î ÁÖ¼¼¿ä.": "Áý¾È¿¡ µÎ¾î ÁÖ¼¼¿ä."; $alert_str = "Åä¾ç ºÐ¼® ŶÀ» »ç¿ëÇß½À´Ï´Ù.
ÀÌ ½Ä¹°Àº $place_good"; $ritems->[3]--; } elsif($iid == 5) { if(($rdata->[26] & 1) == 0) { $rdata->[26] += 1; $alert_str = "¼ºÀå ÃËÁøÁ¦¸¦ »ç¿ëÇß½À´Ï´Ù."; $ritems->[5]--; } else { $alert_str = "ÀÌ ½Ä¹°¿¡´Â ÀÌ¹Ì ¼ºÀå ÃËÁøÁ¦°¡ »ç¿ëµÇ°í ÀÖ½À´Ï´Ù."; } } elsif($iid == 6) { if(($rdata->[26] & 2) == 0) { $rdata->[26] += 2; $alert_str = "¿µ¾ç/º¸¼öÁ¦Å¶À» »ç¿ëÇß½À´Ï´Ù."; $ritems->[6]--; $rdata->[12] = 9; $rdata->[9] = 9; } else { $alert_str = "ÀÌ ½Ä¹°¿¡´Â ÀÌ¹Ì ¿µ¾ç/º¸¼öÁ¦Å¶ÀÌ »ç¿ëµÇ°í ÀÖ½À´Ï´Ù."; } } elsif($iid == 7) { if(($rdata->[26] & 4) == 0) { $rdata->[26] += 4; $alert_str = "Ç÷£Æ® ÇϿ콺¸¦ »ç¿ëÇß½À´Ï´Ù."; $ritems->[7]--; $rdata->[6] = 9; } else { $alert_str = "ÀÌ ½Ä¹°¿¡´Â ÀÌ¹Ì Ç÷£Æ® ÇϿ콺°¡ »ç¿ëµÇ°í ÀÖ½À´Ï´Ù."; } } } else { $alert_str = change_plant_data($rdata, $uid); #¿©±â¼­$rdataÀÇ º¯°æÀÌ ÀÖÀ¸¹Ç·Î ÁÖÀÇ! if(defined($iid) && !defined($alert_str)) {$ritems->[$iid]--;} } return $alert_str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_top_plant_name_htm { my ($rdata, $pid, $cnt) = @_; my $str; if($PARAM->{MODE} eq "use_item") { my $s_pid = (split(/!/, $PARAM->{OPT}))[0]; my $checked = ((!defined($s_pid) && $cnt == 0) || $s_pid == $pid)? "checked": ""; my $pname = $rdata->[1]; $str .= qq{ $pname }; } elsif($PARAM->{MODE} eq "no_cook") { my $pname = $rdata->[1]; $str .= qq{ $pname }; } else { $str .= qq{ ÀÇ ¸ð½À }; } return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_scale_htm { my $rdata = shift; my $rscore_str = get_score_html($rdata); my $str = qq{ $rscore_str->[0]
$rscore_str->[1]
$rscore_str->[2]
}; return $str; } ################################################### # input:() # retrun: #comment:$place = 1:Áý¹Û, 2:Áý¾È ################################################### sub get_time_bgcol { my ($time, $place) = @_; my $res_col; my $hour = (localtime($time))[2]; if($place <= 1) { if (6 <= $hour && $hour < 17) {$res_col = "#ddeeee";} elsif(17 <= $hour && $hour < 19) {$res_col = "#e3d2b5";} else {$res_col = "#ffffdd";} } else { if (6 <= $hour && $hour < 17) {$res_col = "#ddffff";} elsif(17 <= $hour && $hour < 19) {$res_col = "#ffdd99";} else {$res_col = "#dadada";} } return $res_col; } ################################################### # input:() # retrun: #comment: ################################################### sub get_plant_delete_ok_htm { my $alert_str; my $uid = $PARAM->{UID} * 1; my $pid = $PARAM->{PID} * 1; my $rplant = get_album_data($uid) if($uid); if(my $rdata = $rplant->{"$pid"}) { $alert_str = "¡¸$rdata->[1]¡¹À» ¾Ù¹ü¿¡¼­ »èÁ¦ÇÏ¿´½À´Ï´Ù."; my $rudata = get_status_data($uid); $rudata->[0]->[11] --; put_status_data($uid, $rudata); delete($rplant->{"$pid"}); put_all_album_data($uid, $rplant); foreach my $organ (1, 2, 3) { unlink("$RDATA->{album_img}/u$uid/p5_${organ}_${pid}.gif"); } unlink("$RDATA->{album_img}/u$uid/bg_${pid}.gif"); renew_pure_number_data($uid, $rplant); my @new_pop; my $rpop = get_popular_flower(); foreach (@$rpop) { push(@new_pop, $_) if($_->[0] != $uid || $_->[1] != $pid); } put_popular_flower(\@new_pop); } else { $alert_str = "±× ½Ä¹°Àº »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù"; } my $str = get_album_htm($alert_str); return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_plant_delete_check_htm { my ($alert_str) = @_; my $uid = $PARAM->{UID} * 1; my $pid = $PARAM->{PID} * 1; my $width = ($RDATA->{album_span}) * 227; my $rallu = get_all_udata_hash(); my $rsecret = get_secret_data(); my $rplant = get_album_data($uid); my $rudata = get_status_data($uid); add_album_expression_data($rplant); my $rstatistics_bef = get_plant_statistics($rplant, $uid, $rsecret, $rudata); my $rstatistics_aft = get_plant_statistics($rplant, $uid, $rsecret, $rudata, {"$pid" => 1}); my $str = "Content-type: text/html\n\n"; $str .= qq{}; $str .= get_head(); $str .= qq{ »çÁø ¼Ò°Å È®ÀÎ È­¸é
$alert_str
»èÁ¦ÀüÀÇ Áý°è
}; $str .= get_totals_str($rstatistics_bef); $str .= qq{
»èÁ¦ ÈÄÀÇ Áý°è
\n}; $str .= get_totals_str($rstatistics_aft); $str .= "

"; $str .= get_plant_table_htm($uid, $pid, $rallu, $rsecret) if($pid); $str .= qq{

ÀÌ ½Ä¹°À» »èÁ¦Çմϱî?
}; $str .= get_copyright(); $str .= "
"; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_no_cook_album_htm { my $str = get_album_htm(undef, is_cookie_ok()); return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_album_htm { my ($alert_str, $cook_flg) = @_; my $logo; my $uid = $PARAM->{UID}; my ($suid, $mtype) = split(/!/, $PARAM->{OPT}); if($suid == 1) { make_flower_shop(); #¼­µÑ·¯ ²ÉÁýÀ» Áغñ $logo = ""; } else { # $logo = "inc_plant.gif"; } my $rplant = get_album_data($suid) if($suid); add_album_expression_data($rplant); if((my $pcost = int($PARAM->{CST})) && $uid == $suid && $cook_flg) { if(my $rdata = $rplant->{"$PARAM->{PID}"}) { my $max_pcost = $rdata->[23]; if($RDATA->{plli_plice} <= $pcost && $pcost <= $max_pcost) { $rdata->[24] = $pcost; put_all_album_data($uid, $rplant); $alert_str = "$rdata->[1]ÀÇ ±³¹è·á¸¦ $pcost$RDATA->{monney}·Î º¯°æÇß½À´Ï´Ù"; } else { $alert_str = "$rdata->[1]ÀÇ ±³¹è·á´Â $RDATA->{plli_plice}-$max_pcost$RDATA->{monney}·Î ¼³Á¤ÇÏ¿© ÁֽʽÿÀ."; } } } my $str = "Content-type: text/html\n\n"; $str .= qq{}; $str .= get_head(); $str .= qq{ ½Ä¹° ¾Ù¹ü
$logo $alert_str
}; if($suid) { $str .= get_album_flower_htm($uid, $suid, $mtype, $rplant, $cook_flg); } else { $str .= get_album_user_htm($mtype); } $str .= get_copyright(); $str .= "
"; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_album_flower_htm { my ($uid, $suid, $mtype, $rplant, $cook_flg) = @_; my ($str, @totals); my $rsecret = get_secret_data(); my $time = time; my $property = get_user_property($uid) if($mtype eq "p"); my $mode = ($mtype eq "c")? "no_cook": ($mtype eq "a" || $mtype eq "p")? "album": ($mtype eq "b")? "bbs": "main"; my $href = "$PNAME?MODE=$mode&UID=$uid&PID=$PARAM->{PID}"; $href .= "&OPT=!p" if($mtype eq "p"); my $button_str = ($PARAM->{BT})? qq{}: qq{}; $str .= get_sort_link_htm($uid, $suid, $button_str); my $rfpid = get_filtered_pid($rplant, $suid); my $page_tr = get_page_link_htm($uid, scalar(keys(%$rfpid))); $str .= $page_tr; my $rpid = get_sort_pid($rplant); my $rpid_ok = get_cut_ok_pid($rpid, $rfpid); my $rudata = get_status_data($suid); my $span = $RDATA->{album_span}; my $rstatistics = get_plant_statistics($rplant, $suid, $rsecret, $rudata); my $cnt = 0; foreach my $pid (@$rpid_ok) { my $rdata = $rplant->{"$pid"}; my ($rcreature, $big_cost, $set_cost) = (@$rdata)[3, 23, 24]; my $pure_flg = (-e "$RDATA->{album_img}/u$suid/bg_${pid}.gif")? 1: 0; my $rstat = get_flower_status_data($rcreature, $pure_flg); my $is_secret = get_secret_type($rsecret, $rcreature); my $seed_cost = ($uid == $suid)? $RDATA->{plli_plice}: $set_cost; my $bgcol = get_flower_bgcolor($rcreature); my $tr = ($cnt % $span == 0)? "": ""; my $etr = ($cnt % $span == $span - 1)? "": ""; my $pname = $rdata->[1]; my ($bg_view, $icon_img); if($pure_flg) { $bg_view = "background='$RDATA->{album_img}/u$suid/bg_${pid}.gif'"; $icon_img = ""; } else { $bg_view = "bgcolor='$bgcol'"; } $icon_img .= "" if($is_secret); $icon_img .= "
\n" if($icon_img); $str .= qq{ $tr
$pname
}; $str .= get_flower_img_htm($suid, $pid, $rdata->[5], $bg_view); $str .= qq{ $icon_img }; $str .= get_flower_status($rstat); $str .= "
ÃÔ¿µÀÏ:
" . get_day_str($rdata->[25]) . "

\n" if($suid != 1); if($mtype eq "p") { my $href = "$PNAME?MODE=pollination&UID=$uid&PID=$PARAM->{PID}&OPT=$suid!$pid"; $str .= ($pure_flg)? qq{
¼öºÐÇÒ ¼ö ¾ø½À´Ï´Ù }: qq{
±³¹è·á£º $set_cost/$big_cost
±³¹è·á£º$seed_cost$RDATA->{monney}

}; } elsif($mtype eq "b") { my $href = "$PNAME?MODE=bbs&UID=$uid&PID=$pid"; $str .= qq{
±³¹è·á: $set_cost/$big_cost
} if(!$pure_flg); $str .= qq{}; } elsif($uid == $suid && $cook_flg) { my $href = "$PNAME?UID=$uid&PID=$pid"; $str .= ($pure_flg)? qq{
}: qq{
±³¹è·á: /$big_cost
}; $str .= qq{ } } else { $str .= ($pure_flg)? qq{
}: qq{
±³¹è·á: $set_cost/$big_cost
}; } $str .= qq{
$etr }; $cnt++; } for(my $tr_cnt = 0; $tr_cnt < ($span - 1) - (($cnt - 1) % $span); $tr_cnt++) { $str .= ""; } my $total_str = qq{
} if($uid == $suid); $total_str .= qq{
"; $total_str .= $str; $total_str .= qq{
}; $total_str .= get_album_top_htm($uid, $suid, $mtype, $cook_flg) if($suid != 1 && $PARAM->{MODE} ne 'bbs_sel_album'); $total_str .= get_totals_str($rstatistics); $total_str .= "
$page_tr
$button_str
}; return $total_str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_album_top_htm { my ($uid, $suid, $mtype, $cook_flg) = @_; my ($alb_subj, $alb_cmnt); my $udata = get_udata($suid); my $uname = $udata->[1]; if(!$cook_flg || $uid != $suid || $mtype eq "a" || $mtype eq "p") { $alb_subj = "
$udata->[11]
" if ($udata->[11]); $alb_cmnt = "$udata->[12]" if ($udata->[12]); } else { my $js = "document.sbm.SBJ.value=this.form.sbj.value;"; $js .= "document.sbm.CMT.value=this.form.cmt.value;"; $js .= "document.sbm.submit();"; my $comment = $udata->[12]; $comment =~ s/
/\n/g; $alb_subj = qq{

¡çÇ¥Á¦(¹Ý°¢ 50 ¹®ÀÚ±îÁö)
}; $alb_cmnt = qq{

¡çÄÚ¸àÆ®(¹Ý°¢ 800 ¹®ÀÚ±îÁö)
}; } my $albt_str = "°»½Å ÀϽÃ: " . get_daytime_str($udata->[13]) . "" if ($udata->[13]); my $str = qq{

$uname¾¾ÀÇ ¾Ù¹ü
$alb_subj
$alb_cmnt

$albt_str
}; return $str; } ################################################### # input:() # retrun: #comment: # $rstat->[0] = [total_score, rep_id] # ->[1] = [score, im_id] # . # . # . # # $rtotals->[0]->[organ]->{im_id or rep_id} = 1 # ->[1]->[organ] = [total_score, min, max] # ->[2] = total_big_cost # ->[3] = total_set_cost # ->[4] = plant_total_count # ->[5] = ºñ¹Ð¼ö ################################################### #sub add_totals #{ # my ($rtotals, $rstat, $big_cost, $set_cost) = @_; # # for(my $cnt = 0; $cnt <= 3; $cnt++) { # $rtotals->[0]->[$cnt]->{"$rstat->[$cnt]->[1]"} = 1; # my $score = $rstat->[$cnt]->[0]; # $rtotals->[1]->[$cnt]->[0] += $score; # my $min = $rtotals->[1]->[$cnt]->[1]; # $rtotals->[1]->[$cnt]->[1] = $score if(!$min || $min > $score); # my $max = $rtotals->[1]->[$cnt]->[2]; # $rtotals->[1]->[$cnt]->[2] = $score if(!$max || $max < $score); # } # $rtotals->[2] += $big_cost; # $rtotals->[3] += $set_cost; # $rtotals->[4]++; # # return 1; #} ################################################### # input:() # retrun: #comment: ################################################### sub get_plant_statistics { my ($rplant, $uid, $rsecret, $rudata, $rcut_pid) = @_; my (%sec_counter, @im_counter, @score); my ($plant_cnt, $big_total_cost, $set_total_cost, $pure_cnt) = (0, 0, 0, 0); while(my ($pid, $rdata) = each(%$rplant)) { if(defined($rcut_pid) && $rcut_pid->{"$pid"}) {next;} $plant_cnt ++; my ($rcreature, $big_cost, $set_cost) = (@$rdata)[3, 23, 24]; my $sec_type = get_secret_type($rsecret, $rcreature); $sec_counter{"$sec_type"} = 1 if($sec_type); my $pure_flg = (-e "$RDATA->{album_img}/u$uid/bg_${pid}.gif")? 1: 0; my $rstat = get_flower_status_data($rcreature, $pure_flg); if($pure_flg) { $pure_cnt ++; } else { $big_total_cost += $big_cost; $set_total_cost += $set_cost; } for(my $cnt = 0; $cnt <= 3; $cnt++) { my $im_id = $rstat->[$cnt]->[1]; $im_counter[$cnt]->{"$im_id"} = 1 if(defined($im_id)); my $each_score = $rstat->[$cnt]->[0]; $score[$cnt]->{total} += $each_score; my $min = $score[$cnt]->{min}; $score[$cnt]->{min} = $each_score if(!$min || $min > $each_score); my $max = $score[$cnt]->{max}; $score[$cnt]->{max} = $each_score if(!$max || $max < $each_score); } } if($plant_cnt == 0) {return {};} #¼ø°è¸¸ ³²¾ÒÀ» °æ¿ì 0À¸·Î ³ª´©Áö ¾Ê°Ô 1À» ´ëÀÔ my $pures = $plant_cnt - $pure_cnt || 1; return { plant_cnt => $plant_cnt, plant_total => ($uid == 1)? undef: $rudata->[0]->[12], plant_max => ($uid == 1)? undef: $rudata->[0]->[10], secret_cnt => scalar(keys(%sec_counter)), pure_cnt => scalar(keys(%{$im_counter[0]})), stem_cnt => scalar(keys(%{$im_counter[1]})), leaf_cnt => scalar(keys(%{$im_counter[2]})), flower_cnt => scalar(keys(%{$im_counter[3]})), set_ave_cst => int($set_total_cost / $pures + 0.5), max_ave_cst => int($big_total_cost / $pures + 0.5), total_score => { max => $score[0]->{max}, min => $score[0]->{min}, ave => int($score[0]->{total} / $plant_cnt + 0.5), }, strng_score => { max => $score[1]->{max}, min => $score[1]->{min}, ave => int($score[1]->{total} / $plant_cnt + 0.5), }, smell_score => { max => $score[2]->{max}, min => $score[2]->{min}, ave => int($score[2]->{total} / $plant_cnt + 0.5), }, beaut_score => { max => $score[3]->{max}, min => $score[3]->{min}, ave => int($score[3]->{total} / $plant_cnt + 0.5), }, }; } ################################################### # input:() # retrun: #comment:album.cgiÀ» ¿ÀÇ ################################################### sub get_pure_count { my ($rplant) = @_; my %counter; foreach (values(%$rplant)) { my $rcreature = get_expression_data((@$_)[16, 17]); if(defined(my $rep_id = get_represent_flower($rcreature))) { $counter{"$rep_id"} = 1; } } my $pure_count = keys(%counter); return $pure_count; } ################################################### # input:() # retrun: #comment:album.cgiÀ» ¿ÀÇ ################################################### sub renew_pure_number_data { my ($uid, $rplant) = @_; my $pure_cnt = get_pure_count($rplant); my $rusr_pure = get_user_pure_count_data(); $rusr_pure->{"$uid"} = $pure_cnt; put_user_pure_count_data($rusr_pure); return 1; } ################################################### # input:() # retrun: #comment: # $rtotals->[0]->[organ]->{im_id or rep_id} = 1 # ->[1]->[organ] = [total_score, min, max] # ->[2] = total_big_cost # ->[3] = total_set_cost # ->[4] = plant_total_count ################################################### sub get_totals_str { my ($rstatis) = @_; my $str; my $plant_cnt = $rstatis->{plant_cnt}; # my ($rim, $rscore, $big_cst, $set_cst, $pln_cnt, $seq_num) # = @$rtotals; if(!$plant_cnt) {return "";} # $seq_num = 0 if(!$seq_num); $str .= qq{
}; my $plant_max = "/$rstatis->{plant_max}" if($rstatis->{plant_max}); my $plant_total = "´©°è: $rstatis->{plant_total}»Ñ¸®
" if($rstatis->{plant_total}); $str .= qq{ }; for(my $asc = 0; $asc <= 3; $asc++) { my $cnt_typ = ("pure_cnt", "flower_cnt", "leaf_cnt", "stem_cnt")[$asc]; my $sta_typ = ("total_score", "beaut_score", "smell_score", "strng_score")[$asc]; $str .= qq{\n}; my $av_score = $rstatis->{$sta_typ}->{ave}; my $min_score = $rstatis->{$sta_typ}->{min}; my $max_score = $rstatis->{$sta_typ}->{max}; $str .= qq{ }; } $str .= qq{ }; $str .= "
½Ä¹°¼ö ºñ¹Ð ¼ø°è¼ö Á¾ÇÕ Æò°¡ ²É ¾Æ¸§´Ù¿ò ÀÙ Çâ±â ÁÙ±â Æ°Æ°ÇÔ Æò±Õ±³¹è·á
$plant_total º¸Á¸: $plant_cnt$plant_max »Ñ¸® $rstatis->{secret_cnt}Á¾$rstatis->{$cnt_typ}Á¾ ÃÖ°í: $max_score
Æò±Õ: $av_score
ÃÖÀú: $min_score
¼³Á¤: $rstatis->{set_ave_cst}$RDATA->{monney}
ÃÖ´ë: $rstatis->{max_ave_cst}$RDATA->{monney}
"; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_sort_link_htm { my ($uid, $suid, $button_str) = @_; my (@selected, @selcut); my $bt = $PARAM->{BT}; my $opt = $PARAM->{OPT}; my $pid = $PARAM->{PID}; my $sort = $PARAM->{SORT}; my $cut = $PARAM->{CUT}; my $md = $PARAM->{MODE}; my $mode = ($md eq "ch_comment" || $md eq "album_del_ok")? "album": $PARAM->{MODE}; my $num = 0; foreach ('picday!1!', 'tscore!1!', 'dtype!3!', 'dtype!2!', 'dtype!1!') { $selected[$num] = "selected" if($sort =~ /^$_/); $num++; } $num = 1; foreach ('p', 's') { $selcut[$num] = "selected" if($cut eq $_); $num++; } my $add_str = qq{ } if($uid != 1 && $suid != 1); my $href_str = qq{'$PNAME?MODE=$mode&UID=$uid&OPT=$opt&BT=$bt&PID=$pid&CUT='}; $href_str .= qq{+this.form.filter.options[this.form.filter.selectedIndex].value}; $href_str .= qq{+'&SORT='+this.form.pat.options[this.form.pat.selectedIndex].value}; my $col_span = $RDATA->{album_span}; my $str = qq{
   À»(¸¦)  ·Î ³ª¶õÈ÷ Á¤·Ä $button_str  
}; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_page_link_htm { my ($uid, $plant_cnt) = @_; my $md = $PARAM->{MODE}; my $bt = $PARAM->{BT}; my $opt = $PARAM->{OPT}; my $sort = $PARAM->{SORT}; my $cut = $PARAM->{CUT}; my $pid = $PARAM->{PID}; #±³¹è½Ã¿¡ ÇÊ¿ä my $mode = ($md eq "ch_comment" || $md eq "album_del_ok")? "album": $PARAM->{MODE}; my $suid = (split(/!/, $PARAM->{OPT}))[0]; my $pag = $PARAM->{PAGE}; $pag = 1 if($pag <= 0); my $pgf = $RDATA->{album_span} * $RDATA->{album_step}; my $pg_cnt = int(($plant_cnt - 1 + $pgf) / $pgf); my $bpag = $pag - 1; my $npag = $pag + 1; my $bef = ($bpag == 0)? "£¼": qq{£¼}; my $nex = ($npag > $pg_cnt)? "£¾": qq{£¾}; my $str = qq{ ÇÕ°è $pg_cnt ÆäÀÌÁö£º $bef  }; for(my $pg = 1; $pg <= $pg_cnt; $pg++) { $str .= ($pg != $pag)? qq{ $pg  }: "$pg "; } $str .= qq{ $nex }; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_filtered_pid { my ($rplant, $uid) = @_; my %new_pid; my $cut_type = $PARAM->{CUT}; if($cut_type eq "p") { foreach my $pid (keys(%$rplant)) { if(-e "$RDATA->{album_img}/u$uid/bg_${pid}.gif") { $new_pid{"$pid"} = 1; } } } elsif($cut_type eq "s") { my $rsecret = get_secret_data(); while(my ($pid, $rp) = each(%$rplant)) { if(get_secret_type($rsecret, $rp->[3])) { $new_pid{"$pid"} = 1; } } } else { foreach my $pid (keys(%$rplant)) { $new_pid{"$pid"} = 1; } } return \%new_pid; } ################################################### # input:() # retrun: #comment: ################################################### sub get_sort_pid { my $rplant = shift; my @pids; my ($sort_type, $opt, $sort_ad) = split(/!/, $PARAM->{SORT}); if($sort_type) { my %sorter; if($sort_type eq "tscore") { foreach (values(%$rplant)) { push(@{$sorter{"$_->[18]"}}, $_->[0]); } } elsif($sort_type eq "dtype") { foreach (values(%$rplant)) { my $val = $_->[3]->{"$opt"}; my $im_id = $val->{protein}->[$val->{view}->[0]]->{domain}; push(@{$sorter{"$im_id"}}, $_->[0]); } } else { foreach (values(%$rplant)) { push(@{$sorter{"$_->[25]"}}, $_->[0]); } } if($sort_ad eq "a") { foreach (sort {$a <=> $b} keys(%sorter)) { foreach (@{$sorter{"$_"}}) { push(@pids, $_); } } } else { foreach (reverse(sort {$a <=> $b} keys(%sorter))) { foreach (@{$sorter{"$_"}}) { push(@pids, $_); } } } } else { if($sort_ad eq "a") { @pids = sort {$a <=> $b} keys(%$rplant); } else { @pids = reverse(sort {$a <=> $b} keys(%$rplant)); } } return \@pids; } ################################################### # input:() # retrun: #comment: ################################################### sub get_cut_ok_pid { my ($rpid, $rfpid) = @_; my @ok_pid; my $pag = $PARAM->{PAGE}; $pag = 1 if($pag <= 0); my $pgf = $RDATA->{album_span} * $RDATA->{album_step}; my $cnt = 0; foreach (@$rpid) { if(!$rfpid->{"$_"}) {next;} if($cnt >= $pgf * ($pag - 1)) { if($cnt >= $pgf * $pag) {last;} push(@ok_pid, $_); } $cnt++; } return \@ok_pid; } ################################################### # input:() # retrun: #comment: ################################################### sub get_album_user_htm { my $mtype = $_[0] || "a"; my $str; my $uid = $PARAM->{UID}; my $pid = $PARAM->{PID}; my $ruids = get_ordered_udata(); my $rc = get_rc_data(); my $search_word = $PARAM->{WORD} if($PARAM->{WORD} eq get_safe_htm($PARAM->{WORD})); $ruids = get_word_cut_udata($ruids) if($search_word); my $time = time; my $href_str = qq{$PNAME?OPT=!$mtype&MODE=album&UID=$uid&PID=$pid&WORD=$search_word&SORT=}; my $add_url = "$PNAME?UID=$uid&MODE=main"; $str .= qq{
À¯Àú ¾Ù¹üÀ» ¼±ÅÃÇØ ÁÖ¼¼¿ä
À̸§¿¡ Æ÷ÇԵǴ ¹®ÀÚ·Î °Ë»öÇÒ ¼ö ÀÖ½À´Ï´Ù£º
Çöó¿ö ÆÊ¿¡
}; foreach (@$ruids) { my ($suid, $uname, $ac_time, $nid, $subj, $albtime) = (@$_)[0, 1, 8, 10, 11, 13]; my $albt_str = ($albtime)? get_daytime_str($albtime): "---"; my $rm_time = get_remove_time($ac_time, $time); $subj = " " if(!$subj); $str .= " "; } $str .= qq{
ID À̸§ ÄÚ¸àÆ®
¾Ù¹ü
°»½Å ÀϽÃ
³ª¸ÓÁö
$nid $uname¾¾ $subj $albt_str $rm_time
}; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_remove_time { my ($ac_time, $time) = @_; my $rm_time; my $left_time = $RDATA->{delete_time} - ($time - $ac_time); if($left_time < 0) { my $till_rm = $RDATA->{term} - ($time - get_routine_time()); $rm_time = "»èÁ¦±îÁö ${till_rm}ÃÊ"; } elsif($left_time < 60) { $rm_time = "${left_time}ÃÊ"; } elsif($left_time < 3600) { $rm_time = int($left_time / 60) . "ºÐ"; } elsif($left_time < 86400) { $rm_time = int($left_time / 3600) . "½Ã°£"; } else { $rm_time = int($left_time / 86400) . "ÀÏ"; } return $rm_time; } ################################################### # input:() # retrun: #comment: ################################################### sub get_flower_bgcolor { my ($rcreature) = @_; my ($total, @rbg); while(my ($organ_id, $val) = each(%$rcreature)) { if($organ_id == 3) {$total += $val->{power} / 2;} else {$total += $val->{power} / 4;} $rbg[$organ_id - 1] = sprintf("%x", (substr($val->{power} / 13, -1, 1) * 10 + substr($val->{power} / 17, -2, 1)) % 52 + 204); } $total = int($total); if($total <= 150) {return "#ccffff";} # my $tmax_power = 255 / $RDATA->{max_power}; # while(my ($organ_id, $val) = each(%$rcreature)) { # $rbg[$organ_id - 1] # = sprintf("%x", int(255 - $val->{power} * $tmax_power)); # } return "#$rbg[0]$rbg[1]$rbg[2]"; } ################################################### # input:() # retrun: #comment: #plantID,À̸§, ½ÉÀº ÃÊ, null,¼ºÀå ·¹º§, ¼ºÀå ´Ü°è, ºû°ú ¿Âµµ, ÃÊ, üũÇÑ ÃÊ, #¼öºÐ, ÃÊ, üũÇÑ ÃÊ, ¿µ¾ç, ÃÊ, üũÇÑ ÃÊ, Àå¼Ò, À¯ÀüÀÚ 1,À¯ÀüÀÚ 2 ################################################### sub make_flower_gif { my ($uid, $rdata) = @_; my $flower; my $next_grow_step = $rdata->[5]; my $rcreature = get_expression_data((@$rdata)[16, 17]); cp_flower_img($uid, $rdata->[0], $rcreature, $next_grow_step); return 1; } ################################################### # input:() # retrun: #comment: ################################################### sub change_flower_type_data { my $rdata = shift; my $rcreature = $rdata->[3]; my $rf_type = get_flower_type_data(); while(my ($organ_id, $val) = each(%$rcreature)) { my $im_id = $val->{protein}->[$val->{view}->[0]]->{domain}; $rf_type->{"$organ_id"}->{"$im_id"}++; } put_flower_type_data($rf_type); return 1; } ################################################### # input:() # retrun: #comment: ################################################### sub get_shop_htm { my $uid = $PARAM->{UID}; my $rseed = get_seed_data($uid); my $ritem_shop = get_item_shop(); my $ruser = get_status_data($uid); my $rstatus = $ruser->[0]; my $err_str = change_about_item($uid, $ruser, $ritem_shop, $rseed); my $uname = get_uname($uid); my $img_dir = $RDATA->{img_dir}; put_status_data($uid, $ruser); my $level = $RDATA->{level_setting}->[$rstatus->[3]]->[0] || $RDATA->{kyuu}->[$rstatus->[3]]; my $str = "Content-type: text/html\n\n"; $str .= qq{}; $str .= get_head(); $str .= qq{ ¾ÆÀÌÅÛ ¼¥
}; $str .= get_item_htm($uid, $ritem_shop, $ruser, $err_str); $str .= get_user_item_htm($uid, $ritem_shop, $ruser, $rseed); $str .= qq{
À¯ÀúÁ¤º¸
À̸§£º $uname ¼ÒÁö±Ý£º $rstatus->[0]$RDATA->{monney}
·¹º§£º $level
}; $str .= get_copyright(); $str .= "
"; return $str; } ################################################### # input:() # retrun: #comment:[[iid, À̸§, °¡°Ý, È­»ó], ,,,] ################################################### sub change_about_item { my ($uid, $ruser, $ritem_shop, $rseed) = @_; my ($err_str); my ($rstatus, $ritems) = @$ruser; my $iid = $PARAM->{IID}; my $num = int($PARAM->{NUM}); $num = 1 if($num <= 0); if($iid) { if($PARAM->{MODE} eq "shop_sell") { my ($e_name, $s_price) = (@{$ritem_shop->[0]->{"$iid"}})[1, 5]; if($ritems->[$iid] <= 0) { $err_str = "$e_name À»(¸¦) °¡Áö°í ÀÖÁö ¾Ê±â ¶§¹®¿¡ ÆÈÁö ¾Ê½À´Ï´Ù
\n"; } if(!defined($err_str) && $s_price >= 0) { $rstatus->[0] += $s_price; $ritems->[$iid] --; $err_str = "$e_nameÀ»(¸¦) $s_price$RDATA->{monney}·Î ÆȾҽÀ´Ï´Ù
\n"; } } elsif($PARAM->{MODE} eq "seed_sell") { if(!$rseed->{"$iid"}) { $err_str = "ÆÈ¾Æ ¹ö¸° Á¾, ¶Ç´Â ¾ø´Â Á¾À» ÆÈ·Á°í Çß½À´Ï´Ù"; } else { my ($sell_flg, $p_name, $s_price) = (@{$rseed->{"$iid"}})[1, 2, 5]; if($sell_flg) { $rstatus->[0] += $s_price; $rstatus->[5]--; delete($rseed->{"$iid"}); $err_str = "$p_name ÀÇ Á¾À» $s_price$RDATA->{monney} ·Î ÆȾҽÀ´Ï´Ù
n"; put_seed_data($uid, $rseed); } else { $err_str = "¾Ù¹ü¿¡ µî·ÏÇÑ ÈÄ¿¡ ÆÈ¾Æ ÁÖ¼¼¿ä.
URL ÀμöÀÇ ºÎÁ¤ Á¶ÀÛÀº ±ÝÁöÇØ ÁֽʽÿÀ."; } } } else { my ($e_name, $e_price, $buy_max, $permit_kyu) = (@{$ritem_shop->[0]->{"$iid"}})[1, 2, 4, 6]; if($rstatus->[3] < $permit_kyu) {$err_str = "±¸ÀÔÇÒ ¼ö ¾ø´Â ¾ÆÀÌÅÛÀÔ´Ï´Ù.";} if(!$buy_max) {$buy_max = 10;} if($e_price * $num > $rstatus->[0]) { $err_str = "$e_name À»(¸¦) »ç±â¿¡´Â ¼ÒÁö±ÝÀÌ ÃæºÐÇÏÁö ¾Ê½À´Ï´Ù
\n"; } elsif($iid != 4 && $buy_max < $ritems->[$iid] + $num) { $err_str = "$e_name Àº(´Â) ´õ ÀÌ»ó °¡Áú ¼ö ¾ø½À´Ï´Ù
\n"; } elsif($iid >= 11 && $iid <= 13) { if($iid == 11 || $ritems->[$iid - 1]) { my $next_cnt = $RDATA->{album_max}->[$iid - 10]; $rstatus->[10] = $next_cnt if($rstatus->[10] < $next_cnt); } else { $err_str = "±¸ÀÔÇÒ ¼ö ¾ø´Â ¾Ù¹üÀÔ´Ï´Ù."; } } elsif($iid == 4) { $buy_max = $rstatus->[8]; my $rplant = get_plant_data($uid); my $plant_cnt = keys(%$rplant); if($buy_max <= $plant_cnt) { $err_str = "ÀÌ ·¹º§¿¡¼­´Â $e_nameÀº ÀÌ ÀÌ»ó °¡Áú ¼ö ¾ø½À´Ï´Ù
\n"; } else { $rplant->{"-$plant_cnt"} = [-$plant_cnt, "»õ·Î¿î È­ºÐ", "null", "null", 0, 6, 9, "null", "null", 9, "null", "null", 9, "null", "null", 0, "null", "null", 0]; put_plant_data($uid, $rplant); } } if(!defined($err_str)) { $rstatus->[0] -= $e_price * $num; $ritems->[$iid] += $num; $err_str = "$e_name À»(¸¦) ±¸ÀÔÇß½À´Ï´Ù.
\n"; if($iid == 4 && $ritems->[4] == 1) { $err_str .= "
[ÈùÆ®]
»õ·Î¿î È­ºÐ¿¡ Á¾À» ½ÉÀ» ¶§, ¹°À»"; $err_str .= "ÁÙ ¶§´Â
½Ä¹°¸íÀÇ ÁÂÃøÀ¸·Î ¶óµð¿À ¹öÆ°ÀÌ ³ªÅ¸³³´Ï´Ù."; $err_str .= "
ÀÌ°ÍÀ» ¼±ÅÃÇÒ ¼ö ÀÖ½À´Ï´Ù!

"; } } } } return $err_str; } ################################################### # input:() # retrun: #comment:[[iid, À̸§, °¡°Ý, È­»ó], ,,,] ################################################### sub get_item_htm { my ($uid, $ritem_shop, $ruser, $alert_str) = @_; my $str; my ($rstatus, $ritems) = @$ruser; my $kyu = $rstatus->[3]; $str .= qq{
»óÇ° ¸®½ºÆ®
$alert_str }; foreach (@{$ritem_shop->[1]}) { my $add_button; my $ri = $ritem_shop->[0]->{"$_"}; if($kyu < $ri->[6]) {next;} my $buy_max = $ri->[4] || 10; if($_ == 4) { $buy_max = $rstatus->[8]; my $rplant = get_plant_data($uid); if($buy_max <= keys(%$rplant)) {next;} } else { if($buy_max <= $ritems->[$_]) {next;} } if($_ == 1 || $_ == 2) { my $num_rest = $buy_max - $ritems->[$_]; $add_button = qq{}; } $str .= qq{ }; } $str .= qq{
$ri->[1] ($buy_max) $ri->[2]$RDATA->{monney} $add_button
}; return $str; } ################################################### # input:() # retrun: #comment:[[iid, À̸§, °¡°Ý, È­»ó, ÆǸŰ¡], ,,,] ################################################### sub get_user_item_htm { my ($uid, $ritem_shop, $ruser, $rseed) = @_; my $str; my ($rstatus, $ritems) = @$ruser; $str .= qq{
¼ÒÀ¯ ¾ÆÀÌÅÛ
}; $str .= get_shop_uitem_htm($uid, $ritem_shop, $ritems); $str .= get_seed_uitem_htm($uid, $rseed, $rstatus); $str .= qq{
}; return $str; } ################################################### # input:() # retrun: #comment:[[iid, À̸§, °¡°Ý, È­»ó, ÆǸŰ¡], ,,,] ################################################### sub get_shop_uitem_htm { my ($uid, $ritem_shop, $ritems) = @_; my $str; $str .= qq{ }; for(my $iid = 1; $iid < @$ritems; $iid++) { if($iid == 4 || ($iid >= 11 && $iid <= 13)) {next;} my $icnt = $ritems->[$iid] || 0; if($icnt >= 1 || $iid == 1) { my $ri = $ritem_shop->[0]->{"$iid"}; $str .= qq{ }; if($PARAM->{MODE} eq "use_item") { my $full_str = qq{} if($iid == 1); $str .= qq{ } if($iid != 8 && $icnt >= 1); } else { $str .= qq{ } if($icnt >= 1); } $str .= qq{ }; } } my $albm_iid = ($ritems->[13])? 13: ($ritems->[12])? 12: ($ritems->[11])? 11: 0; if($albm_iid) { my $ri = $ritem_shop->[0]->{"$albm_iid"}; $str .= qq{}; } $str .= qq{
$ri->[1] $ri->[5]$RDATA->{monney} $icnt °³ $full_str
$ri->[1] ---1 °³

}; return $str; } ################################################### # input:() # retrun: #comment: #?seed data # 0 1 2 3 4 5 6 7 8 9 #pid,ÀÌ¿ë °¡´ÉÇÑ°¡, À̸§, À¯ÀüÀÚ 1,À¯ÀüÀÚ 2,°¡°Ý, ÀڽŠuid,»ó´ë uid,ÀڽŠpid,»ó´ë pid ################################################### sub get_seed_uitem_htm { my ($uid, $rseed, $rstatus) = @_; my $str; my $level = $RDATA->{level_setting}->[$rstatus->[3]]->[0] || $RDATA->{kyuu}->[$rstatus->[3]]; $str .= qq{ ¡¸${level}¡¹ÀÌ °¡Áú ¼ö ÀÖ´Â Á¾ÀÇ ¼ö´Â $rstatus->[6]°³ ±îÁö ÀÔ´Ï´Ù. }; foreach (sort {$a <=> $b} keys(%$rseed)) { my $rs = $rseed->{"$_"}; my $text = ($PARAM->{MODE} eq "use_item")? qq{ÀÇ Á¾}: qq{$rs->[2]ÀÇ Á¾}; $str .= qq{ }; if($PARAM->{MODE} eq "use_item" && $rs->[1] == 1) { my $text = qq{} if ($PARAM->{MODE} eq "use_item"); $str .= qq{ }; } elsif(($PARAM->{MODE} eq "shop" || $PARAM->{MODE} eq "seed_sell" || $PARAM->{MODE} eq "shop_sell") && $rs->[1] == 1) { $str .= qq{ }; } $str .= qq{ }; } $str .= qq{
$text $rs->[5]$RDATA->{monney}$text
}; return $str; } ################################################### # input:() # retrun: $items[0]->{iid} = [iid, name, price, img, urine] # [1]->[n] = iid #comment: ################################################### sub get_item_shop { my @items; open(SHOP, "$RDATA->{sys_dir}/shop.cgi") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); while(chomp(my $line = )) { my @e_item = split(/\t/, $line); my $iid = $e_item[0]; #V2.2 ÀÌÀü ȣȯÀ̱⠶§¹®¿¡ if(($iid == 11 || $iid == 12 || $iid == 13) && !defined($RDATA->{album_max}->[$iid - 10])) {next;} $items[0]->{"$iid"} = \@e_item; push(@{$items[1]}, $iid); } close(SHOP) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); return \@items; } ################################################### # input:() # retrun: #comment: ################################################### sub get_score_html { my $rdata = shift; my @res_htms; my @score = (@$rdata)[6, 9, 12]; my @gif_d = ( [ ["bw", "bw", "bw", "bw", "bw", "bw", "yw", "yw", "rw"], ["bw", "bw", "bw", "bw", "bw", "bw", "yw", "yw", "rr"], ["bw", "bw", "bw", "bw", "bw", "bw", "yw", "yy", "rr"], ["bw", "bw", "bw", "bw", "bw", "bw", "yy", "yy", "rr"], ["bw", "bw", "bw", "bw", "bw", "bb", "yy", "yy", "rr"], ["bw", "bw", "bw", "bw", "bb", "bb", "yy", "yy", "rr"], ["bw", "bw", "bw", "bb", "bb", "bb", "yy", "yy", "rr"], ["bw", "bw", "bb", "bb", "bb", "bb", "yy", "yy", "rr"], ["bw", "bb", "bb", "bb", "bb", "bb", "yy", "yy", "rr"], ["bb", "bb", "bb", "bb", "bb", "bb", "yy", "yy", "rr"], ], [ ["bw", "bw", "bw", "bw", "yw", "yw", "yw", "yw", "rw"], ["bw", "bw", "bw", "bw", "yw", "yw", "yw", "yw", "rr"], ["bw", "bw", "bw", "bw", "yw", "yw", "yw", "yy", "rr"], ["bw", "bw", "bw", "bw", "yw", "yw", "yy", "yy", "rr"], ["bw", "bw", "bw", "bw", "yw", "yy", "yy", "yy", "rr"], ["bw", "bw", "bw", "bw", "yy", "yy", "yy", "yy", "rr"], ["bw", "bw", "bw", "bb", "yy", "yy", "yy", "yy", "rr"], ["bw", "bw", "bb", "bb", "yy", "yy", "yy", "yy", "rr"], ["bw", "bb", "bb", "bb", "yy", "yy", "yy", "yy", "rr"], ["bb", "bb", "bb", "bb", "yy", "yy", "yy", "yy", "rr"], ], [ ["bw", "bw", "bw", "bw", "yw", "yw", "yw", "yw", "rw"], ["bw", "bw", "bw", "bw", "yw", "yw", "yw", "yw", "rr"], ["bw", "bw", "bw", "bw", "yw", "yw", "yw", "yy", "rr"], ["bw", "bw", "bw", "bw", "yw", "yw", "yy", "yy", "rr"], ["bw", "bw", "bw", "bw", "yw", "yy", "yy", "yy", "rr"], ["bw", "bw", "bw", "bw", "yy", "yy", "yy", "yy", "rr"], ["bw", "bw", "bw", "bb", "yy", "yy", "yy", "yy", "rr"], ["bw", "bw", "bb", "bb", "yy", "yy", "yy", "yy", "rr"], ["bw", "bb", "bb", "bb", "yy", "yy", "yy", "yy", "rr"], ["bb", "bb", "bb", "bb", "yy", "yy", "yy", "yy", "rr"], ], ); for(my $cnt = 0; $cnt < @score; $cnt++) { my $each_score = $score[$cnt]; foreach (@{$gif_d[$cnt]->[$each_score]}) { $res_htms[$cnt] .= qq{
\n}; } } return \@res_htms; } ################################################### # input:() # retrun: #comment: ################################################### sub get_regist_jscript { my $str .= qq{ }; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_main_js { my $str = qq{ }; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_hpb_js { my $img_dir = $RDATA->{img_dir}; my $str = qq{ }; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_mail_js { my $str .= qq{ }; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_use_item_js { my $str = qq{ }; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub add_album_expression_data { my $rplant = shift; foreach (values(%$rplant)) { $_->[3] = get_expression_data($_->[16], $_->[17]); } return 1; } ################################################### # input:() # retrun: #comment: # $->{"organ_id"}->{protein}->[n] = quality # ->{view} = [n,...] # ->{power} = total_strength ################################################### sub get_expression_data { my ($dna1, $dna2) = @_; my %creature; inc_inc::add_translated_gene_data(\%creature, $dna1); inc_inc::add_translated_gene_data(\%creature, $dna2); inc_inc::add_expression_data(\%creature); return \%creature; } ################################################### # input:() # retrun: #comment: # $->{"organ_id"}->{protein}->[n] = quality # ->{view} = [n,...] # ->{power} = total_strength ################################################### sub get_flower_status { my ($rstat) = @_; my $str; my @organ = ("ÃÑÇÕÆò°¡", "Æ°Æ°ÇÔ(ÁÙ±â)", "Çâ±â(ÀÙ)", "¾Æ¸§´Ù¿ò(²É)"); $str .= ""; for(my $asc = 0; $asc <= 3; $asc++) { my $cnt = (0, 3, 2, 1)[$asc]; my $add_str = "$organ[$cnt]: $rstat->[$cnt]->[0]
\n"; $add_str = "$add_str" if($cnt == 0); $str .= $add_str; } $str .= "
\n"; return $str; } ################################################### # input:() # retrun: $->[0] = [total_score, rep_id] # ->[1] = [score, im_id] # ... #comment: # $->{"organ_id"}->{protein}->[n] = quality # ->{view} = [n,...] # ->{power} = total_strength # # pure_flg´Â Æ®¸®Å° ÀÔ´Ï´Ù. ################################################### sub get_flower_status_data { my ($rcreature, $pure_flg) = @_; my ($total, @temp); while(my ($organ_id, $val) = each(%$rcreature)) { $temp[$organ_id - 1] = [$val->{power}, $val->{protein}->[$val->{view}->[0]]->{domain}]; if($organ_id == 3) {$total += $val->{power} / 2;} else {$total += $val->{power} / 4;} } $total = int($total); $total *= $RDATA->{rep_rate} if($pure_flg); for(my $cnt = 2; $cnt >= 0; $cnt--) { $temp[$cnt]->[0] *= $RDATA->{rep_rate} if($pure_flg); } my $rep_id = get_represent_flower($rcreature) if($pure_flg); return [[$total, $rep_id], @temp]; } ################################################### # input:() # retrun:[$dna1, $dna2, $total] #comment: ################################################### sub get_new_dna { my ($uid1, $pid1, $uid2, $pid2) = @_; my (%creature); my $rdna1 = get_new_haploid($uid1, $pid1, 0); if(!$rdna1) {return undef;} my ($dna1, $rdata1) = @$rdna1; inc_inc::add_translated_gene_data(\%creature, $dna1); my $rdna2 = get_new_haploid($uid2, $pid2, 1); if(!$rdna2) {return undef;} my ($dna2, $rdata2) = @$rdna2; inc_inc::add_translated_gene_data(\%creature, $dna2); inc_inc::add_expression_data(\%creature); if($creature{"1"}->{power} * $creature{"2"}->{power} * $creature{"3"}->{power}) { my $cost1 = $rdata1->[18]; # my $cost2 = $rdata2->[18]; my $total = $cost1; #ÃÖ´ë ±³¹è·á´Â ÀÚ½ÅÀÇ ½Ä¹°ÀÇ Æò°¡¿¡ ÀÇÇÑ´Ù return [$dna1, $dna2, $total]; } return undef; } ################################################### # input:() # retrun: #comment: ################################################### sub get_new_haploid { my ($uid, $pid, $alb_flg) = @_; my ($new_dna); my $rplant = get_album_data($uid) if($alb_flg); $rplant = get_plant_data($uid) if(!$alb_flg || !defined($rplant->{"$pid"})); my $rdata = $rplant->{"$pid"}; if($rdata->[5] != 5) {return undef;} my ($dna1, $dna2) = (@$rdata)[16, 17]; my $rcreature = get_expression_data($dna1, $dna2); if(defined(get_represent_flower($rcreature))) { return undef; } else { my $rchrom = inc_inc::get_chromosome_stracture([$dna1, $dna2]); $new_dna = inc_inc::get_nbody_from_rchrom($rchrom); } return [$new_dna, $rdata]; } ################################################### # input:() # retrun: #comment: ################################################### sub get_user_property { my ($uid) = @_; my $property; my $ritem_shop = get_item_shop(); my $ruser = get_status_data($uid); my $rseed = get_seed_data($uid); my ($rstatus, $ritems) = @$ruser; my $rshop = $ritem_shop->[0]; for(my $iid = 1; $iid < @$ritems; $iid++) { my $icnt = $ritems->[$iid]; my $sell_price = $rshop->{"$iid"}->[5]; if($icnt >= 1 && $sell_price >= 1) { $property += $sell_price * $icnt; } } foreach (values(%$rseed)) { $property += $_->[5]; } $property += $rstatus->[0]; return $property; } ################################################### # input:() # retrun: #comment: ################################################### sub get_all_user_property { my (@res, %table); my $ruids = get_all_udata(); foreach (@$ruids) { my $property = get_user_property($_->[0]); push(@{$table{"$property"}}, $_) if($property > $RDATA->{init_cash}); } my $order = 1; my @sorter = sort { $a <=> $b } keys(%table); foreach my $property (reverse(@sorter)) { foreach (@{$table{"$property"}}) { my $suid = $_->[0]; my $rtag = get_tags($suid, $order); push(@res, [$suid, "$rtag->[2] $rtag->[0]$orderÀ§ $rtag->[1]", "$rtag->[0]$_->[1]¾¾ $rtag->[1]", "$rtag->[0]$property$RDATA->{monney}$rtag->[1]" ]); } if(++$order > 50) {last;} } return ["Àç»ê¿Õ", ["¼øÀ§", "À̸§", "Àç»ê"], \@res]; } ################################################### # input:() # retrun: #comment: ################################################### sub get_all_user_flower_collection { my (@res, %table); my $ruids = get_all_udata(); foreach (@$ruids) { my %hana; my $cnt = 0; my $uid = $_->[0]; my $rplant = get_album_data($uid); foreach (values(%$rplant)) { my $rcreature = get_expression_data((@$_)[16, 17]); my $rhana = $rcreature->{"3"}; my $flower = $rhana->{protein}->[$rhana->{view}->[-1]]->{domain}; if(!$hana{"$flower"}) {$hana{"$flower"} = 1; $cnt++;} } push(@{$table{"$cnt"}}, $_); } my $order = 1; my @sorter = sort { $a <=> $b } keys(%table); foreach my $property (reverse(@sorter)) { if($property == 0) {next;} foreach (@{$table{"$property"}}) { my $suid = $_->[0]; my $rtag = get_tags($suid, $order); push(@res, [$_->[0], "$rtag->[2] $rtag->[0]$orderÀ§ $rtag->[1]", "$rtag->[0]$_->[1]¾¾ $rtag->[1]", "$rtag->[0]$property Á¾·ù $rtag->[1]" ]); } if(++$order > 50) {last;} } return ["½Ä¹° ÄÝ·ºÅÍ¿Õ(º¸°ü À¯ÁöÇÏ°í ÀÖ´Â'²É'ÀÇ Á¾·ùÀÇ ¼øÀ§ÀÔ´Ï´Ù.)", ["¼øÀ§", "À̸§", "Àç¹è ½Ä¹°"], \@res]; } ################################################### # input:() # retrun: #comment: ################################################### sub get_all_user_collection { my (@res, %table); my $ruids = get_all_udata(); foreach (@$ruids) { my %hana; my $rudata = get_status_data($_->[0]); my $cnt = $rudata->[0]->[12]; push(@{$table{"$cnt"}}, $_); } my $order = 1; my @sorter = sort { $a <=> $b } keys(%table); foreach my $property (reverse(@sorter)) { if($property == 0) {next;} foreach (@{$table{"$property"}}) { my $rtag = get_tags($_->[0], $order); push(@res, [$_->[0], "$rtag->[2] $rtag->[0]$orderÀ§ $rtag->[1]", "$rtag->[0]$_->[1]¾¾ $rtag->[1]", "$rtag->[0]${property}»Ñ¸®$rtag->[1]" ]); } if(++$order > 50) {last;} } return ["½Ä¹° ÄÝ·ºÅÍ¿Õ", ["¼øÀ§", "À̸§", "Àç¹è ½Ä¹°"], \@res]; } ################################################### # input:() # retrun: #comment: ################################################### sub get_all_plant_score { my (@res, %table); my $ruids = get_all_udata(); foreach (@$ruids) { my $uid = $_->[0]; my $rplant = get_album_data($uid); foreach my $rrplant (values(%$rplant)) { my ($pid, $pname, $pcost) = (@$rrplant)[0, 1, 18]; push(@{$table{"$pcost"}}, [(@$_)[0, 1], $pid, $pname]); } } my $order = 1; my @sorter = sort { $a <=> $b } keys(%table); foreach my $property (reverse(@sorter)) { foreach (@{$table{"$property"}}) { my ($suid, $pid) = (@$_)[0, 2]; my $rtag = get_tags($suid, $order); my ($tags, $tage, $img) = @$rtag; push(@res, [$suid, "$img $tags$orderÀ§ $tage", " $tags$_->[1]$tage${tags}¾¾ÀÇ $tage $tags$_->[3]$tage ", "$tags$propertyïÃ$tage" ]); } if(++$order > 50) {last;} } return ["½Ä¹° Á¾ÇÕ Æò°¡¿Õ", ["¼øÀ§", "½Ä¹°ÀÇ À̸§", "Á¾ÇÕ Æò°¡"], \@res]; } ################################################### # input:() # retrun: #comment: ################################################### sub get_all_plant_score_no_pure { my (@res, %table); my $ruids = get_all_udata(); foreach (@$ruids) { my $uid = $_->[0]; my $rplant = get_album_data($uid); foreach my $rrplant (values(%$rplant)) { my ($pid, $pname, $pcost) = (@$rrplant)[0, 1, 18]; push(@{$table{"$pcost"}}, [(@$_)[0, 1], $pid, $pname]); } } my $order = 1; my @sorter = sort { $a <=> $b } keys(%table); foreach my $property (reverse(@sorter)) { my $order_flg = 0; foreach (@{$table{"$property"}}) { my ($suid, $pid) = (@$_)[0, 2]; next if(-e "$RDATA->{album_img}/u$suid/bg_${pid}.gif"); $order_flg = 1; my $rtag = get_tags($suid, $order); my ($tags, $tage, $img) = @$rtag; push(@res, [$suid, "$img $tags$orderÀ§ $tage", " $tags$_->[1]$tage${tags}¾¾ÀÇ $tage $tags$_->[3]$tage ", "$tags$propertyÁ¡ $tage" ]); } if($order_flg) {if(++$order > 50) {last;}} } return ["½Ä¹° Á¾ÇÕ Æò°¡¿Õ(¼ø°è ½Ä¹°À» Á¦¿ÜÇÑ Æò°¡ÀÇ ¼øÀ§ÀÔ´Ï´Ù.)", ["¼øÀ§", "½Ä¹°ÀÇ À̸§", "Á¾ÇÕ Æò°¡"], \@res]; } ################################################### # input:() # retrun: #comment:ÆÄÀÏ ¾×¼¼½º¸¦ Ãà¼ÒÇϱâ À§ÇØ ÀåȲÇÏ´Ù ################################################### sub get_all_popular_plant { my (%pops, %counter, %tmp, %table, @res); my $rpop = get_popular_flower(); my $rallu = get_all_udata_hash(); foreach (@$rpop) { $pops{"$_->[0],$_->[1]"} ++; } while(my ($upid, $count) = each(%pops)) { push(@{$counter{"$count"}}, $upid); } my @sorter = sort { $a <=> $b } keys(%counter); #ÆÄÀÏ ¾×¼¼½º Ãà¼Ò¸¦ À§ÇÑ ´Ã¾î³õ¾Æ ´ëü my $order = 1; foreach (@sorter) { my $rupid = $counter{"$_"}; foreach my $upid (@$rupid) { my ($uid, $pid) = split(/,/, $upid); push(@{$tmp{"$uid"}}, [$pid, $_]); } if(++$order > 50) {last;} } while(my ($uid, $rpicnt) = each(%tmp)) { my $rplant = get_album_data($uid); foreach (@$rpicnt) { my $uname = $rallu->{"$uid"}->[1]; $uname .= ($uname)? "¾¾": "Çöó¿ö ÆÊ"; push(@{$table{"$_->[1]"}}, [$uid, $uname, $_->[0], $rplant->{"$_->[0]"}->[1]]); } } my $order = 1; my @sorter = sort { $a <=> $b } keys(%table); foreach my $pop_cnt (reverse(@sorter)) { foreach (@{$table{"$pop_cnt"}}) { my $suid = $_->[0]; my $rtag = get_tags($suid, $order); push(@res, [$_->[0], "$rtag->[2] $rtag->[0]$orderÀ§$rtag->[1]", "$rtag->[0]$_->[1]ÀÇ$_->[3]$rtag->[1]", "$rtag->[0]$pop_cntÈñ$rtag->[1]" ]); } $order ++; } return ["±³¹è Àα⠽Ĺ°¿Õ(ÃÖ±Ù ÀαⰡ ÀÖ´Â ½Ä¹°ÀÇ ¼øÀ§ÀÔ´Ï´Ù.)", ["¼øÀ§", "½Ä¹°ÀÇ À̸§", "±³¹è ȸ¼ö"], \@res]; } ################################################### # input:() # retrun: #comment: ################################################### sub get_all_pure_collector { my (@res, %table); my $rusr_pure = get_user_pure_count_data(); my $rallu = get_all_udata_hash(); while(my ($uid, $pure_cnt) = each(%$rusr_pure)) { push(@{$table{"$pure_cnt"}}, $uid); } my $order = 1; my @sorter = sort { $a <=> $b } keys(%table); foreach my $pure_cnt (reverse(@sorter)) { if($pure_cnt == 0) {next;} foreach (@{$table{"$pure_cnt"}}) { my $rtag = get_tags($_, $order); my $uname = $rallu->{"$_"}->[1]; push(@res, [$_, "$rtag->[2] $rtag->[0]$orderÀ§ $rtag->[1]", "$rtag->[0]$uname¾¾ $rtag->[1]", "$rtag->[0]${pure_cnt}Á¾·ù$rtag->[1]" ]); } if(++$order > 50) {last;} } return ["¼ø°è ½Ä¹° Ä÷ºÅÍ¿Õ", ["¼øÀ§", "À̸§", "¼ø°èÀÇ Á¾·ù"], \@res]; } ################################################### # input:() # retrun: #comment: ################################################### sub get_tags { my ($suid, $order) = @_; my ($col, $tag_s, $tag_e, $imm); if($PARAM->{UID} == $suid) {$col='red';} if($order == 1) { if(!defined($col)) {$col = '#999900';} $imm = ""; $tag_s = ""; $tag_e = ""; } elsif($order == 2) { if(!defined($col)) {$col = '#553355';} $imm = ""; $tag_s = ""; $tag_e = ""; } elsif($order == 3) { if(!defined($col)) {$col = '#990000';} $imm = ""; $tag_s = ""; $tag_e = ""; } elsif($col) { $tag_s = ""; $tag_e = ""; } return [$tag_s, $tag_e, $imm]; } ##################################################################################################### ################################################### # input:() # retrun: #comment: ################################################### sub delete_image { my ($uid, $pid) = @_; foreach my $g_step (0, 1, 2, 3, 4, 6, 10) { foreach my $organ (1, 2, 3) { unlink("$RDATA->{album_img}/u$uid/p${g_step}_${organ}_${pid}.gif"); } } return 1; } ################################################### # input:() # retrun: #comment: # $->{"organ_id"}->{protein}->[n] = quality # ->{view} = [n,...] # ->{power} = total_strength # #$grow_step£º0:Á¾,1:½Ï,2:º»¿±,3:Ç®,4:ºÀ¿À¸®Á®,5:²É,6:¼öÈ®,10: #$organ_id: 1:°æ,2:ÀÙ,3:²É ################################################### sub cp_flower_img { my ($uid, $pid, $rcreature, $grow_step) = @_; while(my ($organ_id, $val) = each(%$rcreature)) { my $im_id = $val->{protein}->[$val->{view}->[0]]->{domain}; cp_image($uid, $pid, $grow_step, $organ_id, $im_id); } return 1; } ################################################### # input:() # retrun: #comment: # #$grow_step£º0:Á¾,1:½Ï,2:º»¿±,3:Ç®,4:ºÀ¿À¸®Á®,5:²É,6:¼öÈ®,10: #$organ_id: 1:°æ,2:ÀÙ,3:²É ################################################### sub cp_image { my ($uid, $pid, $grow_step, $organ_id, $im_id) = @_; my $cp_file = "$RDATA->{album_img}/u$uid/p${grow_step}_${organ_id}_${pid}.gif"; if(!(-e $cp_file)) { my $file_path = "$RDATA->{plant_img}/o$grow_step/o${organ_id}_${im_id}.gif"; if(!(-e $file_path)) { $file_path = "$RDATA->{plant_img}/o$grow_step/o${organ_id}_1.gif"; } open(IN, "$file_path") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", "$!($file_path)"); binmode(IN); open(OUT, ">$cp_file") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", "$!($cp_file)"); binmode(OUT); my $buffer; while(read(IN, $buffer, 1024)) { print OUT $buffer; } close(OUT) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); close(IN) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); return 1; } return 0; } ################################################### # input:() # retrun: #comment: ################################################### sub cp_bg_img { my ($uid, $pid, $rep_id) = @_; my $cp_file = "$RDATA->{album_img}/u$uid/bg_${pid}.gif"; my $file_path = "$RDATA->{plant_img}/obg/o$rep_id.gif"; open(IN, "$file_path") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); binmode(IN); open(OUT, ">$cp_file") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); binmode(OUT); my $buffer; while(read(IN, $buffer, 1024)) { print OUT $buffer; } close(OUT) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); close(IN) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); # system("cp $file_path $cp_file"); return 1; } ################################################### # input:() # retrun: #comment: ################################################### sub cp_pedia_img { my ($rep_id) = @_; my $file_path = "$RDATA->{plant_img}/opure/o$rep_id.gif"; my $cp_file = "$RDATA->{album_img}/u0/o$rep_id.gif"; if(!(-e $cp_file)) { open(IN, "$file_path") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); binmode(IN); open(OUT, ">$cp_file") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); binmode(OUT); my $buffer; while(read(IN, $buffer, 1024)) { print OUT $buffer; } close(OUT) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); close(IN) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); # system("cp $file_path $cp_file"); } return 1; } ################################################### # input:() # retrun: #comment: #plantID,À̸§, ½ÉÀº ÃÊ, null,¼ºÀå ·¹º§, ¼ºÀå ´Ü°è, ºû°ú ¿Âµµ, ÃÊ, üũÇÑ ÃÊ, #¼öºÐ, ÃÊ, üũÇÑ ÃÊ, ¿µ¾ç, ÃÊ, üũÇÑ ÃÊ, Àå¼Ò, À¯ÀüÀÚ 1,À¯ÀüÀÚ 2 ################################################### sub get_flower_img_htm { my ($uid, $pid, $grow_step, $bg_view) = @_; my $img_dir = $RDATA->{img_dir}; my $alb_dir = $RDATA->{album_img}; my ($htm_h, $htm_t); for(my $organ_id = 1; $organ_id <= 3; $organ_id++) { $htm_h .= qq{
} if($pid >= 0); $htm_t .= qq{
} if($pid >= 0); } return ($uid <= 1)? qq{
$htm_h $htm_t
}: qq{
$htm_h ÀÌ ½Ä¹°ÀÇ ¼±Á¶¸¦ º»´Ù $htm_t
}; } ################################################### # input:() # retrun: #comment: ################################################### sub get_help_htm { my $ritem_shop = get_item_shop(); my $str = "Content-type: text/html\n\n"; $str .= qq{}; $str .= get_head(); $str .= qq{ ¾ÆÀÌÅÛ ÇïÇÁ


}; foreach (@{$ritem_shop->[1]}) { my $ri = $ritem_shop->[0]->{"$_"}; my $sold_plice = ($ri->[5] >= 0)? "$ri->[5]$RDATA->{monney}": "ÆÈÁö ¾Ê½À´Ï´Ù."; my $buy_max = ($ri->[0] == 4)? "---": $ri->[4] || 10; my $level = ($ri->[0] == 4)? "---": ($RDATA->{level_setting}->[$ri->[6]]->[0] || $RDATA->{kyuu}->[$ri->[6]]); $str .= qq{ }; } $str .= qq{
¾ÆÀÌÅÛÀ̸§ ¸ÅÀÔ°¡/ÆǸŰ¡ ÃÖ´ë º¸À¯¼ö ±¸ÀÔ ·¹º§ ¼³¸í

$ri->[1]
$ri->[2]$RDATA->{monney}/$sold_plice $buy_max $level $ri->[7]
}; $str .= get_copyright(); $str .= qq{
}; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_parent_album_htm { my ($alert_str, $uid1, $uid2, $pid1, $pid2, $my_plant); my ($uid, $pid) = ($PARAM->{UID}, $PARAM->{PID}); my $rsecret = get_secret_data(); my $rallu = get_all_udata_hash(); my $rseed = get_seed_data($uid); my $rdata = $rseed->{"$pid"}; if(!defined($rdata)) { my $rplant = get_plant_data($uid); $rdata = $rplant->{"$pid"}; if(!defined($rdata)) { my $ralbum = get_album_data($uid); $rdata = $ralbum->{"$pid"} || error_end(__LINE__, "±× ½Ä¹°Àº Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù", "(uid, pid) = ($uid, $pid)", {file => "no"}); } ($uid1, $uid2, $pid1, $pid2) = (@$rdata)[19, 20, 21, 22]; $my_plant = $rdata->[1]; } else { ($uid1, $uid2, $pid1, $pid2) = (@$rdata)[6, 7, 8, 9]; $my_plant = $rdata->[2]; } my $bk_btn_str = qq{   } if($PARAM->{BK}); my $str = "Content-type: text/html\n\n"; $str .= qq{}; $str .= get_head(); $str .= qq{ ãÕڪʫͧ?

}; foreach ([$uid1, $pid1], [$uid2, $pid2]) { my ($suid, $spid) = @$_; my ($pname, $bg_view, $flower_img, $flower_stat, $flower_pol, $icon_img); my $find_flg = 0; my $uname = ($suid == 1)? "Çöó¿ö ÆÊ": qq{$rallu->{"$suid"}->[1]¾¾}; if(-e "$RDATA->{data_dir}/u$suid/album.cgi") { my $ralbum = get_album_data($suid); my $rdata_e = $ralbum->{"$spid"}; if(!defined($rdata_e)) { my $rplant = get_plant_data($suid); $rdata_e = $rplant->{"$spid"}; } if(defined($rdata_e)) { $find_flg = 1; my $rcreature = get_expression_data((@$rdata_e)[16, 17]); my $bgcol = get_flower_bgcolor($rcreature); $pname = qq{¡¸$uname¡¹ÀÇ
¡¡¡¡¡¸$rdata_e->[1]¡¹
}; my $pure_flg = (-e "$RDATA->{album_img}/u$suid/bg_${spid}.gif")? 1: 0; if($pure_flg) { $bg_view = "background='$RDATA->{album_img}/u$suid/bg_${spid}.gif'"; $icon_img = ""; } else { $bg_view = "bgcolor='$bgcol'"; } $icon_img .= "" if(get_secret_type($rsecret, $rcreature)); $icon_img .= "
\n" if($icon_img); $flower_img = get_flower_img_htm($suid, $spid, $rdata_e->[5], $bg_view); my $rstat = get_flower_status_data($rcreature); $flower_stat = get_flower_status($rstat); $flower_pol .= "
ÃÔ¿µÀÏ:
" . get_day_str($rdata_e->[25]) . "

\n"; $flower_pol .= "
±³¹è·á: $rdata_e->[24]/$rdata_e->[23]
" if(!$pure_flg); } } if(!$find_flg){ $pname = "¼±Á¶ µ¥ÀÌÅÍ°¡ ¹ß°ßµÇÁö ¾Ê½À´Ï´Ù"; $flower_img = qq{
¡¸$rallu->{"$uid"}->[1]¾¾¡¹ÀÇ¡¸$my_plant¡¹ÀÇ ºÎ¸ð´Ôµé
}; } $str .= qq{
$pname
$flower_img $icon_img $flower_stat $flower_pol
}; } $str .= qq{
$bk_btn_str
}; $str .= get_copyright(); $str .= qq{
}; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_mono_album_htm { my ($pname, $bg_view, $flower_img, $flower_stat, $flower_pol, $icon_img); my ($uid, $pid) = ($PARAM->{UID}, $PARAM->{PID}); my $rsecret = get_secret_data(); my $rallu = get_all_udata_hash(); my $alb_table_str = get_plant_table_htm($uid, $pid, $rallu, $rsecret); my $str = "Content-type: text/html\n\n"; $str .= qq{}; $str .= get_head(); $str .= qq{ ½Ä¹°ÀÇ Ç¥½Ã

$alb_table_str
}; $str .= get_copyright(); $str .= qq{
}; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_plant_table_htm { my ($uid, $pid, $rallu, $rsecret) = @_; my ($pname, $bg_view, $flower_img, $flower_stat, $flower_pol, $icon_img); my $ralbum = get_album_data($uid); my $rdata = $ralbum->{"$pid"}; my $my_plant = $rdata->[1]; my $uname = ($uid == 1)? "Çöó¿ö ÆÊ": qq{$rallu->{"$uid"}->[1]¾¾}; if(defined($rdata->[1])) { my $rcreature = get_expression_data((@$rdata)[16, 17]); my $bgcol = get_flower_bgcolor($rcreature); $pname = qq{¡¸} . qq{$uname¡¹ªÎ
¡¡¡¡¡¸$rdata->[1]¡¹
}; my $pure_flg = (-e "$RDATA->{album_img}/u$uid/bg_${pid}.gif")? 1: 0; if($pure_flg) { $bg_view = "background='$RDATA->{album_img}/u$uid/bg_${pid}.gif'"; $icon_img = ""; } else { $bg_view = "bgcolor='$bgcol'"; } $icon_img .= "" if(get_secret_type($rsecret, $rcreature)); $icon_img .= "
\n" if($icon_img); $flower_img = get_flower_img_htm($uid, $pid, $rdata->[5], $bg_view); my $rstat = get_flower_status_data($rcreature, $pure_flg); $flower_stat = get_flower_status($rstat); $flower_pol .= "
ÃÔ¿µÀÏ:
" . get_day_str($rdata->[25]) . "

\n"; $flower_pol .= "
±³¹è·á: $rdata->[24]/$rdata->[23]
" if(!$pure_flg); } else { $pname = "---"; $flower_img = qq{ÀÌ ½Ä¹°Àº »èÁ¦µÇ¾ú½À´Ï´Ù.}; } my $str; $str .= qq{
$pname
$flower_img $icon_img $flower_stat $flower_pol
}; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_head { return qq{ }; } ##################################################################################################### ################################################### # input:() # retrun: #comment: ################################################### sub get_epass { my ($h_pass) = @_; my @seeds = ( "A".."Z", "a".."z", "0".."9", ".", "/" ); my $seed = $seeds[int(rand(64))] . $seeds[int(rand(64))]; my $epasswd = crypt($h_pass, $seed); return $epasswd; } ################################################### # input:() # retrun: #comment: ################################################### sub get_user_uranai { my ($uid) = @_; my ($frt_type, $user_id, $fortune, $order_str); if(-e "$RDATA->{data_dir}/uranai.cgi") { open(IN, "$RDATA->{data_dir}/uranai.cgi") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); ; #skip while(chomp(my $line = )) { ($user_id, $fortune, $order_str) = split(/\t/, $line); if($user_id == $uid) {last;} } close(IN) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); } if($user_id != $uid) { $fortune = rand(); $order_str = undef; } if($fortune < 1 / 30) {$frt_type = 6;} #´ëÈä elsif($fortune < 3 / 30) {$frt_type = 5;} #Èä elsif($fortune < 10 / 30) {$frt_type = 4;} #±æ elsif($fortune < 20 / 30) {$frt_type = 3;} #¼Ò±æ elsif($fortune < 25 / 30) {$frt_type = 2;} #Áß ±æ elsif($fortune < 29 / 30) {$frt_type = 1;} #´ë±æ else {$frt_type = 0;} #ÃÊ´ëÇü±æ return [$frt_type, $order_str]; } ################################################### # input:() # retrun: #comment: ################################################### sub make_uranai_data { my ($time) = @_; my $btime = get_uranai_time(); if(!defined($btime) || int(($btime + $JST) / 86400) < int(($time + $JST) / 86400)) { my %ft; my $rallu = get_all_udata_hash(); my $num = 0; foreach (values(%$rallu)) { $num ++; my $fortune = rand(); push(@{$ft{"$fortune"}}, $_); } my $order = $num; open(OUT, ">$RDATA->{data_dir}/uranai.cgi") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); print OUT "$time\n"; foreach my $fortune (sort {$a <=> $b} keys(%ft)) { foreach (@{$ft{"$fortune"}}) { print OUT "$_->[0]\t$fortune\t$order/$num\n"; $order--; } } close(OUT) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); } return 1; } ################################################### # input:() # retrun: #comment: ################################################### sub get_uranai_time { my $btime; if(-e "$RDATA->{data_dir}/uranai.cgi") { open(IN, "$RDATA->{data_dir}/uranai.cgi") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); chomp($btime = ); close(IN) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); } return $btime; } ################################################### # input:() # retrun: #comment: ################################################### sub make_backup_data { my ($time) = @_; if((my $backup_dir = $RDATA->{backup}->{dir}) && (my $time_span = $RDATA->{backup}->{span} * 60)) { if(!(-e $backup_dir)) {return 0;} my $btime = get_backup_time(); if(!defined($btime) || $btime + $time_span <= $time) { unless(fork){ close(STDOUT); my @data_time; my $tar = $RDATA->{backup}->{tar} || "tar"; my $cmd1 = "$tar -czf $backup_dir/data$time.tgz $RDATA->{data_dir}"; my $cmd2 = "$tar -czf $backup_dir/img$time.tgz $RDATA->{album_img}"; system($cmd1); system($cmd2); opendir(DIR, $backup_dir) || error_end(__LINE__, "opendir ¿¡·¯", $!); while (my $dir = readdir(DIR)) { if(my ($dtime) = $dir =~ /^data(\d+)/) { push(@data_time, $dtime); } } closedir(DIR) || error_end(__LINE__, "closedir ¿¡·¯", $!); my @ftime = reverse(sort {$a <=> $b} @data_time); for(my $cnt = 0; $cnt < @ftime; $cnt ++) { if($RDATA->{backup}->{count} <= $cnt) { unlink("$backup_dir/data$ftime[$cnt].tgz"); unlink("$backup_dir/img$ftime[$cnt].tgz"); } } exit 0; } open(OUT, ">$RDATA->{data_dir}/backup.cgi") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); print OUT "$time\n"; close(OUT) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); } } return 1; } ################################################### # input:() # retrun: #comment: ################################################### sub get_backup_time { my $btime; if(-e "$RDATA->{data_dir}/backup.cgi") { open(IN, "$RDATA->{data_dir}/backup.cgi") || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); chomp($btime = ); close(IN) || error_end(__LINE__, "ÆÄÀÏ ¿¡·¯", $!); } return $btime; } ##################################################################################################### ################################################### # input:() # retrun: #comment: ################################################### sub get_server_select_htm { my $rserver = get_server_data(); my $uid = $PARAM->{UID}; my $pid = $PARAM->{PID}; my $site_url = "http://$ENV{HTTP_HOST}$ENV{SCRIPT_NAME}"; $site_url =~ s/\/\Q$PNAME\E//; # my $uname = get_uname($uid); my $ses_id = get_session_id($uid); my $str = "Content-type: text/html\n\n"; $str .= qq{}; $str .= get_head(); $str .= qq{ ¹ÏÀ» ¼ö ¾ø´Â ½Ä¹° ¼­¹ö ¼±ÅÃ
}; foreach (values(%$rserver)) { my ($url, $key, $serv_name) = @$_; $serv_name = "$url/inc_plant_server.cgi" if(!$serv_name); $str .= qq{ } } $str .= qq{
¼­¹ö ¼±Åà ȭ¸é
$serv_name
}; $str .= get_copyright(); $str .= "
"; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_server_login_htm { my ($res_str); my $err_type = -1; my $uid = $PARAM->{UID}; my $ses_id = get_session_id($uid); if(!defined($ses_id) || $ses_id != $PARAM->{SESID}) { $err_type = 1; } else { my $charge = $PARAM->{CHARGE}; my $ruser = get_status_data($uid); my ($rstatus, $ritems) = @$ruser; if($charge > $rstatus->[0]) { $err_type = 2; $res_str = "¼ÒÁö±ÝÀÌ ÃæºÐÇÏÁö ¾Ê½À´Ï´Ù"; } elsif($rstatus->[5] >= $rstatus->[6]) { $err_type = 3; $res_str = "´õ ÀÌ»ó Á¾À» °¡Áú ¼ö ¾ø½À´Ï´Ù"; } else { $rstatus->[0] -= $charge; put_status_data($uid, $ruser); put_self_history($uid, qq{´Ù¸¥ Çʵå¿Í ±³¹è¸¦ ½Ç½ÃÇß½À´Ï´Ù. ±³¹è·á¿Í Áß°è·áÀÇ ÇÕ°è $charge$RDATA->{monney}(À»)¸¦ ÁöºÒÇß½À´Ï´Ù}, "green" ); } } my $str = "Content-type: text/plain\n\n"; $str .= "$err_type\n$res_str"; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_server_payment_htm { my (%creature, $res_str); my $err_type = -1; my $rserver = get_server_data(); my $serv_key = $rserver->{"$PARAM->{URL}"}->[1]; my ($uid, $pid) = ($PARAM->{UID}, $PARAM->{PID}); my $rdna = get_new_haploid($uid, $pid, 1); if(!$serv_key || $serv_key ne $PARAM->{KEY}) { $err_type = 5; $res_str = "Á¤»óÀûÀÎ ¼­¹ö Á¤º¸¸¦ ¾òÀ» ¼ö ¾ø¾ú½À´Ï´Ù"; } elsif(!$rdna) { $err_type = 4; $res_str = "¼öºÐÇÒ ¼ö ¾ø´Â Á¾ÀÔ´Ï´Ù"; #¼ø°èÀÇ °æ¿ì µî } else { my $sizerr_flg = 0; my ($dna, $rdata) = @$rdna; inc_inc::add_translated_gene_data(\%creature, $dna); foreach (values(%creature)) { foreach (@{$_->{protein}}) { my $organ_id = $_->{organ}; my $im_id = $_->{domain}; my $tcript = $_->{transcript}; my $size = get_file_size($organ_id, $im_id); if($size == 0) {$sizerr_flg = 1; last;} $res_str .= "$tcript,$size|"; } } if($sizerr_flg) { $err_type = 7; $res_str = "À̹ÌÁö µ¥ÀÌÅÍ°¡ ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù."; } else { my $charge = $PARAM->{CHARGE}; my $rsplant = get_album_data($uid); $rsplant = get_plant_data($uid) if(!defined($rsplant->{"$pid"})); my ($pname, $def_seed_cost) = (@{$rsplant->{"$pid"}})[1, 24]; if($charge == $def_seed_cost) { write_new_popflower($uid, $pid); my $ruser = get_status_data($uid); my ($rstatus, $ritems) = @$ruser; $rstatus->[0] += $charge; put_status_data($uid, $ruser); put_self_history($uid, qq{$PARAM->{FNAM}ÀÇ} . qq{$PARAM->{NAM}¾¾·ÎºÎÅÍ $pnameÀÇ ±³¹è·á $charge$RDATA->{monney}(À»)¸¦ ¹Þ¾Ò½À´Ï´Ù}, "green" ); } else { $err_type = 6; $res_str = "±³¹è·á°¡ ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù."; } } } my $str = "Content-type: text/plain\n\n"; $str .= "$err_type\n$res_str"; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_server_makeseed_htm { my ($err_type, $res_str); my ($uid, $pid) = ($PARAM->{UID}, $PARAM->{PID}); my $new_dna = get_outer_dna_data(); my $rserver = get_server_data(); my $serv_key = $rserver->{"$PARAM->{URL}"}->[1]; if(!$serv_key || $serv_key ne $PARAM->{KEY}) { $err_type = 5; $res_str = "Á¤»óÀûÀÎ ¼­¹ö Á¤º¸¸¦ ¾òÀ» ¼ö ¾ø¾ú½À´Ï´Ù"; } elsif(length($new_dna) != 53 * 5) { $err_type = 8; $res_str = "ÇʵåÀÇ ÈëÀÌ ¸ÂÁö ¾Ê´Â °Í °°½À´Ï´Ù.
¼öºÐ¿¡ ½ÇÆÐÇØ ¹ö·È½À´Ï´Ù."; } elsif(my $rnew_dna = get_new_dna2($uid, $pid, $new_dna)) { my $ruser = get_status_data($uid); my $rstatus = $ruser->[0]; $rstatus->[5]++; my $new_pid = ++$rstatus->[4]; my $rseed = get_seed_data($uid); $rseed->{"$new_pid"} = [$new_pid, 0, "»õ·Î¿î ½Ä¹°($new_pid)", @$rnew_dna, $uid, undef, $pid, undef]; put_seed_data($uid, $rseed); put_status_data($uid, $ruser); $err_type = -1; $res_str = "¼öºÐ¿¡ ¼º°øÇØ, Á¾À» ¾òÀ» ¼ö ÀÖ¾ú½À´Ï´Ù."; } else { $err_type = 9; $res_str = "¼öºÐ¿¡ ½ÇÆÐÇØ ¹ö·È½À´Ï´Ù."; } my $str = "Content-type: text/plain\n\n"; $str .= "$err_type\n$res_str\n"; return $str; } ################################################### # input:() # retrun: #comment: ################################################### sub get_outer_dna_data { my (@cres, $new_dna); my $ok_cnt = 0; foreach (split(/\|/, $PARAM->{HAPLOID})) { my (%tmp_cre); my ($tcript, $size) = split(/,/, $_); inc_inc::add_translated_gene_data(\%tmp_cre, $tcript); push(@cres, [\%tmp_cre, $size]); } my $rdnas = get_dna_data(); OUTER: foreach (@$rdnas) { my %creature; inc_inc::add_translated_gene_data(\%creature, $_->[0]); foreach my $rcre (@cres) { my ($rtmp_cre, $size) = @$rcre; if(!$rtmp_cre) {next;} my ($organ_id) = keys(%$rtmp_cre); my $rrd = $rtmp_cre->{"$organ_id"}; foreach my $rd (@{$rrd->{protein}}) { foreach (@{$creature{"$organ_id"}->{protein}}) { if($rd->{domain} == $_->{domain} && $rd->{reaction} == $_->{reaction} && $size == get_file_size($organ_id, $_->{domain})) { $new_dna .= $_->{transcript}; $rcre->[0] = undef; $ok_cnt ++; last; } } if($ok_cnt == 5) {last OUTER;} } } } return $new_dna; } ################################################### # input:() # retrun:[$dna1, $dna2, $total] #comment: ################################################### sub get_new_dna2 { my ($uid1, $pid1, $dna2) = @_; my (%creature); my $rdna1 = get_new_haploid($uid1, $pid1, 0); if(!$rdna1) {return undef;} my ($dna1, $rdata1) = @$rdna1; inc_inc::add_translated_gene_data(\%creature, $dna1); inc_inc::add_translated_gene_data(\%creature, $dna2); inc_inc::add_expression_data(\%creature); if($creature{"1"}->{power} * $creature{"2"}->{power} * $creature{"3"}->{power}) { #ÃÖ´ë ±³¹è·á´Â ÀÚ½ÅÀÇ ½Ä¹°ÀÇ Æò°¡¿¡ ÀÇÇÑ´Ù return [$dna1, $dna2, $rdata1->[18]]; } return undef; } ################################################### # input:() # retrun: #comment: ################################################### sub get_file_size { my ($organ_id, $im_id) = @_; my $file_path = "$RDATA->{plant_img}/o5/o${organ_id}_${im_id}.gif"; if(!(-e $file_path)) { $file_path = "$RDATA->{plant_img}/o5/o${organ_id}_1.gif"; } my $size = -s $file_path; return $size; } ##################################################################################################### ################################################### # input:() # retrun: #comment: ################################################### sub get_copyright { my $str = "
\n"; $str .= "\n"; # $str .= "\n"; $str .= "\n"; foreach (@{$RDATA->{copyright}}) { $str .= "\n"; } $str .= "\n"; return $str; } ################################################### # input:($type, $comment, $point) # retrun:exit 1 #comment:¿¡·¯ ¼­ºê ·çƾ ################################################### sub error_end { my ($point, $type, $comment, $opt) = @_; $comment =~ s/\n/ /g; my_funlock($LOCK) if(!defined($opt) || !$opt->{no_unlock}); my $file = (defined($opt) && $opt->{file})? $opt->{file}: "$RDATA->{'data_dir'}/cgi.err"; sys_common::error_htm("$PNAME($VERSION)", $point, $type, $comment, {file => $file}); exit 1; } ################################################### # input:() # retrun: #comment:http://www.bayashi.net/st/pdmemo/filelock.html # ¿¡¼­ Â÷¿ë # lockfile ÀÚü°¡ ¾ø´Â °æ¿ì-1À» µ¹·ÁÁÖ¾î, ÀÌ °æ¿ì ¸àÅ×ÁßÀ» ÀǹÌÇÕ´Ï´Ù. ################################################### sub my_flock { my $lock; my $times = 10; my $break_time = $RDATA->{break_time} || 100; my $lock_dir = $RDATA->{lock_dir}; my $filename; opendir(LOCKDIR, $lock_dir); while ($filename = readdir(LOCKDIR)) { if($filename =~ /lockfile/) {last;} } closedir(LOCKDIR); if(!defined($filename)) {return -1;} my $lock_name = "$lock_dir/lockfile"; if ($filename =~ /^lockfile(\d+)/) { return $lock if (time - $1 > $break_time && rename("$lock_name$1", $lock = $lock_name . time)); } for (my $i = 0; $i < $times; $i++, sleep 1) { return $lock if (rename($lock_name, $lock = $lock_name . time)); } return undef; } sub my_funlock { my $lock = shift; if(!rename($lock, "$RDATA->{lock_dir}/lockfile")) { sys_common::write_log("$PNAME($VERSION)", "unlock", "ÆÄÀÏ ÆļÕÀÇ °¡´É¼º. break_time ÀÇ °ªÀ» Å©°Ô ÇØ ÁÖ¼¼¿ä.", {file => "$RDATA->{'data_dir'}/cgi.err", return => 1} ); } } ################################################### # input:() # retrun: #comment:HTMLÀÇ À̽ºÄÉÀÌÇÁ ################################################### sub get_safe_htm { my ($str, $flg) = @_; $str =~ s/&/&/g; $str =~ s//>/g; $str =~ s/\r\n|\r|\n|\t/
/g if($flg != 2); $str =~ s/ / /g if(!$flg); $str =~ s/"/"/g; $str =~ s/'/'/g; return $str; } ################################################## #input : #return : #comment: ################################################## sub is_cookie_ok { my $uid = $PARAM->{UID}; my $rcook = get_cookie(); if($uid && $rcook->{UCK} eq "$uid\@" . get_session_id($uid)) {return 1;} return 0; } ################################################## #input : #return : #comment: ################################################## sub get_cookie { my $cookie_str = $ENV{'HTTP_COOKIE'}; my (%data, @cookie); @cookie = split(/ /, $cookie_str); foreach (@cookie) { my ($name, $val) = split(/=/); $val =~ s/;$//; $data{$name} = $val; } return \%data; } ################################################### # input:() # retrun: #comment: ################################################### sub get_cpu_time { my @cpu = times(); return int(($cpu[0] + $cpu[1]) * 1000) / 1000; } ################################################### # input:() # retrun: #comment: ################################################### sub get_taken_time { return time - $^T; } ################################################## #input : #return : #comment: ################################################## sub get_time_str { my $time = shift; my ($min, $hour, $mday, $mon) = (localtime($time))[1, 2, 3, 4]; $min = sprintf("%02d", $min); $hour = sprintf("%02d", $hour); $mday = sprintf("%02d", $mday); $mon = $mon + 1; my $time_str = "$mon¿ù$mdayÀÏ$hour½Ã$minºÐ"; return $time_str; } ################################################## #input : #return : #comment: ################################################## sub get_day_str { my $time = shift; my ($mday, $mon, $year) = (localtime($time))[3, 4, 5]; $mday = sprintf("%02d", $mday); $mon = sprintf("%02d", $mon + 1); my $time_str = ($year + 1900) . "³â$mon¿ù$mdayÀÏ" ; return $time_str; } ################################################## #input : #return : #comment: ################################################## sub get_daytime_str { my $time = shift; my ($sec, $min, $hour, $mday, $mon, $year) = (localtime($time))[0, 1, 2, 3, 4, 5]; $sec = sprintf("%02d", $sec); $min = sprintf("%02d", $min); $hour = sprintf("%02d", $hour); $mday = sprintf("%02d", $mday); $mon = sprintf("%02d", $mon + 1); my $time_str = ($year + 1900) . "/$mon/$mday $hour:$min:$sec" ; return $time_str; } #################################################################################################### 1;