罪と罰++二律背反

* 称号のレベルで1になっても現状維持を押すとレベルが消える [#l683c4f5]

- ページ: [[罪罰改造板3]]
- 投稿者: [[trool]]
- 優先順位: 緊急
- 状態: 提案
- カテゴリー: 設置できません
- 投稿日: 2008-01-30 (水) 02:20:45
- バージョン: 

** メッセージ [#m3a73864]

s
	close(IN);

	%DAT = '';
#	chop $dat[0];
	my @prats = split(/,/,$dat[0]);
	foreach (0 .. $#prats){
		my($key,$v) = split(/;/,$prats[$_]);
		$DAT{$key} = $v;
	}
	&error("パスワードが間違っています",1) if($pw ne $DAT{'pw'} && $admin_pass ne $pw);

	&hash_data;

	# 行動セッションリセット
	$act_cnt=0	if($time-$la>3600*24);

}

# ハッシュ割り当て
sub hash_data{
        foreach(0..$#sogo_p){
  $sogo_lv[$_]=$DAT{"sglv$_"};
}
        $pw			= $DAT{'pw'};		# パスワード
        $sogo = $DAT{'sogo'};
        $sogo3 = $DAT{'sogo3'};
        $soko_cnt= $DAT{'soko_cnt'}; # 倉庫の収納数
        $soko_lst= $DAT{'soko_lst'}; # 倉庫の収納品
	$gold		= $DAT{'gold'};		# お金
	$nm			= $DAT{'nm'};		# 名前
	$nai_cnt			= $DAT{'nai_cnt'};		# 内政カウント
	$wua_cnt			= $DAT{'wua_cnt'};		# 武器強化カウント
	$ten_cnt			= $DAT{'ten_cnt'};		# 転生カウント
	$gun_cnt			= $DAT{'gun_cnt'};		# 軍事カウント
        $war_cnt			= $DAT{'war_cnt'};		# 戦争カウント
        $s_g		= $DAT{'s_g'};		# 統一ボーナス
	$lv			= $DAT{'lv'};		# レベル
	$sei		= $DAT{'sei'};		# 性別
	$hp			= $DAT{'hp'};		# 体力
	$max_hp		= $DAT{'max_hp'};	# 最大体力
	$mp			= $DAT{'mp'};		# 魔力
	$max_mp		= $DAT{'max_mp'};	# 最大魔力
	$ua			= $DAT{'ua'};		# 攻撃力
	$ud			= $DAT{'ud'};		# 防御力
	$lr			= $DAT{'lr'};		# 指揮力
	$ag			= $DAT{'ag'};		# 敏捷力
	$exe		= $DAT{'exe'};		# 経験値
	$rank		= $DAT{'rank'};		# 階級
	$rank_exe	= $DAT{'rank_exe'};	# 貢献値
	$camp		= $DAT{'camp'};		# 所属国
	$sol		= $DAT{'sol'}; 		# 部隊数
	$sol_lv		= $DAT{'sol_lv'};	# 部隊訓練度
	$nation		= $DAT{'nation'};	# 対象国
	$we			= $DAT{'we'};		# 討伐 回数
	$dg_a		= $DAT{'dg_a'};		# 武具
	$dg_cnt		= $DAT{'dg_cnt'};	# 武具 回数
	$df_a		= $DAT{'df_a'};		# 防具
	$df_cnt		= $DAT{'df_cnt'};	# 防具 回数
	$di_a		= $DAT{'di_a'};		# 道具
	$di_cnt		= $DAT{'di_cnt'};	# 道具 回数
	$sogo		= $DAT{'sogo'};		# 称号
        $sogo2		= $DAT{'sogo2'};		# 称号2
        $sogo3		= $DAT{'sogo3'};		# 称号3
	$type		= $DAT{'type'};		# 行動判定(行動フラグ)
	$tm			= $DAT{'tm'};		# 行動判定(行動フラグ)
	$bt			= $DAT{'bt'};		# 戦闘時敵キャラ判別(行動フラグ)
	$bst		= $DAT{'bst'};		# 技による能力上昇の判定
	$ck			= $DAT{'ck'};		# 戦闘判定(行動フラグ)
	$pr			= $DAT{'pr'};		# 拘束時間 残り(行動フラグ)
	$la			= $DAT{'la'};		# 更新時間
	$roku		= $DAT{'roku'};		# 前回給料が払われた時間(仕官した時間)
	$mes		= $DAT{'mes'};		# メッセージ
	$tnm		= $DAT{'tnm'};		# 名前 敵
	$tid		= $DAT{'tid'};		# ID 敵
	$thp		= $DAT{'thp'};		# 体力 敵
	$thp_max	= $DAT{'thp_max'};	# 最大体力 敵
	$tmp		= $DAT{'tmp'};		# 魔力 敵
	$tlv		= $DAT{'tlv'};		# レベル 敵
	$tua		= $DAT{'tua'};		# 攻撃力 敵
	$tud		= $DAT{'tud'};		# 防御力 敵
	$tlr		= $DAT{'tlr'};		# 指揮力 敵
	$tag		= $DAT{'tag'};		# 敏捷力 敵
	$tdf_a		= $DAT{'tdf_a'};	# 防具 敵
	$tdg_a		= $DAT{'tdg_a'};	# 武器 敵
	$tcp		= $DAT{'tcp'};		# 所属国 敵
	$tsol		= $DAT{'tsol'};		# 部隊数 敵
	$tsg		= $DAT{'tsg'};		# 称号 敵
	$tsol_lv	= $DAT{'tsol_lv'};	# 敵部隊訓練度
	$b_n		= $DAT{'b_n'};		# 戦闘限界ターン
	$b_v		= $DAT{'b_v'};		# 現在のターン数
	# 配列インデックス

	$act_cnt	= $DAT{'act_cnt'};	# 行動セッション値
	$age_time	= $DAT{'age_time'};	# 前回のレベルアップ < time式
	$info_mes	= $DAT{'info_mes'};	# 情報時に表示されるコメント

	$pr			-= $time-$la;
	$pr			= 0 if($pr<0);
}


# 国データ&キャラデータ書き込み
sub write_data{
	&cdat_write;
	&dat_write;


# キャラデータ書き込み
sub dat_write{

	&error("open error no such a file!",1) if(!$nm || !$id);

	$dat[0] = "la;$time,nm;$nm,nai_cnt;$nai_cnt,dat_sogo_lv;$dat_sogo_lv,ten_cnt;$ten_cnt,gun_cnt;$gun_cnt,war_cnt;$war_cnt,pw;$pw,id;$id,sei;$sei,type;$type,age_time;$age_time,act_cnt;$act_cnt,hp;$hp,max_hp;$max_hp,lv;$lv,mp;$mp,max_mp;$max_mp,rank;$rank,ua;$ua,ud;$ud,lr;$lr,ag;$ag,ck;$ck,tm;$tm,bt;$bt,bst;$bst,exe;$exe,rank_exe;$rank_exe,sol;$sol,sol_lv;$sol_lv,nation;$nation,we;$we,camp;$camp,pr;$pr,tnm;$tnm,tid;$tid,thp;$thp,tlr;$tlr,tag;$tag,tsol;$tsol,tsg;$tsg,tsol_lv;$tsol_lv,b_n;$b_n,b_v;$b_v,thp_max;$thp_max,tlv;$tlv,tdg_a;$tdg_a,tdf_a;$tdf_a,tua;$tua,tud;$tud,tmp;$tmp,tcp;$tcp,gold;$gold,roku;$roku,dg_a;$dg_a,dg_cnt;$dg_cnt,df_a;$df_a,df_cnt;$df_cnt,di_a;$di_a,di_cnt;$di_cnt,sogo;$sogo,sogo2;$sogo2, sogo3;$sogo3,soko_cnt;$soko_cnt,soko_lst;$soko_lst,wua_cnt;$wua_cnt,mes;$mes,s_g;$s_g,info_mes;$info_mes,\n";foreach(0..$#sogo_p){
  $dat_sogo_lv.="sglv$_;$sogo_lv[$_]," if($sogo_lv[$_]);
}
	$dat[1] = "$date<>$addr<>$host<>$agent<>\n";
if($sogo!=$sogo3){$sogo_lv[$sogo]++; $sogo3=$sogo; }
$dat_sogo_lv = "sogo3;$sogo3,";

	open (OUT,">$usrdata$id\.cgi") || &error("open error:$usrdata$id\.cgi",1);
	print OUT @dat;
	close(OUT)		or die "Can't close   : $!";


# 称号の取得部分
sub get_sogo(){       
    $sogo3=$sogo2;   # 3つめの称号
    $sogo2=$sogo;
    $sogo = @_[0];    

    # 称号取得時の効果
    # たとえば、3回連続 覇者なら10万G
    # if($sogo==1&&$sogo==$sogo2&&$sogo2==$sogo3){
    #    $gold+=100000;       
    # }

    # 称号レベルアップ
    $sogo_lv[$sogo]++;
}




1;#削除不可

丸ごと張るのはよくないのは知っていますがperl checkerに掛けるときに
厄介なので許して下さい 
称号のレベルで1になっても現状維持を押すとレベルが消える
おそらく,称号レベルの保存が上手くいってないですが,どこをどうすればいいのか
わかりません,また称号2と3はいらないのですがどこを消せば良いにか分からなくて,困っています
詳しく教えて頂けると幸いです
ちなみにこのサイトの称号の切り替えと称号レベルをやったつもりです 
--------
- 丸ごと貼るのがよくないとわかってるなら貼らないでください^^見る側が苦労します。~
更新毎に消えるのなら sub dat_write がおかしいんじゃないですかね?~
私は実装してないんでよく知らないですけど。 -- [[six]] &new{2008-01-30 (水) 13:38:10};
- よく考えればtxt形式で張ればよかった,ごめんなさい -- [[trool]] &new{2008-01-30 (水) 17:29:29};
- sub dat_write みてもどこが違うのかわからないです -- [[trool]] &new{2008-01-30 (水) 17:38:50};
- $dat[0] = "la;$time........の文が【\n";】←ここで完了していているので、その後ろのforeach(0..$#sogo_p){.....の命令は書き込まれてないのでは??ウチも実装してないんでよくしらないですけど。 -- [[je]] &new{2008-02-01 (金) 01:49:36};
- $dat[0] = "la;$time........の文が【\n";】の所も何回も挑戦しましたがやはり出来ません助けて下さい -- [[trool]] &new{2008-02-01 (金) 19:35:53};
- $dat[0] = "la;$time........の文が【\n";】の所も何回も挑戦しましたがやはり出来ません助けて下さい -- [[trool]] &new{2008-02-01 (金) 19:35:54};
- 利用規約に抵触する恐れがあるので、よくないのが分かっているのなら消した方が良くないですか?>system~
>>「どこをどう変えたのか」を整理して書き出せば、自分でも分かりやすくなりますし、~
レスする人が増えると思いますが。。 -- [[三毛猫]] &new{2008-02-01 (金) 20:52:30};
- いらない所を消しました -- [[trool]] &new{2008-02-01 (金) 23:10:31};
- 上に書いたのを具体的に書くと、例えば...$dat[0] = "la;$time,nm;$nm,foreach(0..$#sogo_p){$dat_sogo_lv.='sglv$_;$sogo_lv[$_],'if($sogo_lv[$_])}  nai_cnt;$nai_cnt,dat_sogo_lv;$dat_sogo_lv,ten_cnt;$ten_cnt,gun_cnt;$gun_cnt,war_cnt;$war_cnt,pw;$pw,id;$id,sei;$sei,type;$type,age_time;$age_time,act_cnt;$act_cnt,hp;$hp,max_hp;$max_hp,lv;$lv,mp;$mp,max_mp;$max_mp,rank;$rank,ua;$ua,ud;$ud,lr;$lr,ag;$ag,ck;$ck,tm;$tm,bt;$bt,bst;$bst,exe;$exe,rank_exe;$rank_exe,sol;$sol,sol_lv;$sol_lv,nation;$nation,we;$we,camp;$camp,pr;$pr,tnm;$tnm,tid;$tid,thp;$thp,tlr;$tlr,tag;$tag,tsol;$tsol,tsg;$tsg,tsol_lv;$tsol_lv,b_n;$b_n,b_v;$b_v,thp_max;$thp_max,tlv;$tlv,tdg_a;$tdg_a,tdf_a;$tdf_a,tua;$tua,tud;$tud,tmp;$tmp,tcp;$tcp,gold;$gold,roku;$roku,dg_a;$dg_a,dg_cnt;$dg_cnt,df_a;$df_a,df_cnt;$df_cnt,di_a;$di_a,di_cnt;$di_cnt,sogo;$sogo,sogo2;$sogo2,sogo3;$sogo3,soko_cnt;$soko_cnt,soko_lst;$soko_lst,wua_cnt;$wua_cnt,mes;$mes,s_g;$s_g,info_mes;$info_mes,\n"; にしては?という意味でしたが、それでも、無理でしたか。。。~実装してないだけにあてずっぽうになって申し訳ないです(汗) -- [[je]] &new{2008-02-02 (土) 01:00:33};
  1: # キャラデータ書き込み
  2: sub dat_write{
  3: 
  4:	&error("open error no such a file!",1) if(!$nm || !$id);
  5: 
  6:	$dat[0] = "la;$time,nm;$nm,nai_cnt;$nai_cnt,dat_sogo_lv;$dat_sogo_lv,ten_cnt;$ten_cnt,gun_cnt;$gun_cnt,war_cnt;$war_cnt,pw;$pw,id;$id
  7:		,sei;$sei,type;$type,age_time;$age_time,act_cnt;$act_cnt,hp;$hp,max_hp;$max_hp,lv;$lv,mp;$mp,max_mp;$max_mp,rank;$rank,ua;$ua
  8:		,ud;$ud,lr;$lr,ag;$ag,ck;$ck,tm;$tm,bt;$bt,bst;$bst,exe;$exe,rank_exe;$rank_exe,sol;$sol,sol_lv;$sol_lv,nation;$nation,we;$we
  9:		,camp;$camp,pr;$pr,tnm;$tnm,tid;$tid,thp;$thp,tlr;$tlr,tag;$tag,tsol;$tsol,tsg;$tsg,tsol_lv;$tsol_lv,b_n;$b_n,b_v;$b_v,thp_max;$thp_max
 10:		,tlv;$tlv,tdg_a;$tdg_a,tdf_a;$tdf_a,tua;$tua,tud;$tud,tmp;$tmp,tcp;$tcp,gold;$gold,roku;$roku,dg_a;$dg_a,dg_cnt;$dg_cnt,df_a;$df_a
 11:		,df_cnt;$df_cnt,di_a;$di_a,di_cnt;$di_cnt,sogo;$sogo,sogo2;$sogo2, sogo3;$sogo3,soko_cnt;$soko_cnt,soko_lst;$soko_lst,wua_cnt;$wua_cnt
 12:		,mes;$mes,s_g;$s_g,info_mes;$info_mes,\n";
 13:	
 14:	foreach(0..$#sogo_p){
 15:		$dat_sogo_lv.="sglv$_;$sogo_lv[$_]," if($sogo_lv[$_]);
 16:	}
 17:	$dat[1] = "$date<>$addr<>$host<>$agent<>\n";
 18:	if ( $sogo != $sogo3 ) {
 19:		$sogo_lv[$sogo]++;
 20:		$sogo3=$sogo; 
 21:	}
 22:	$dat_sogo_lv = "sogo3;$sogo3,";
 23:	
 24:	open (OUT,">$usrdata$id\.cgi") || &error("open error:$usrdata$id\.cgi",1);
 25:	print OUT @dat;
 26:	close(OUT)		or die "Can't close   : $!";


+まず、訳わからなくなるので、うまくいってないと思われるキャラデータ書き込みのところを抜粋しました。更に見やすくなるように変更したところは、以下の点です。
++見辛くなるため、$dat[0]の行を改行してます。ここままだとプログラムは動かないので注意!この部分は、1行で書く必要があります。
++頭に空白・タブを入れました。{ }でセットなので、{ }の内側の段落を下げて見やすくています。
++あとプログラム的な1行の終わりは、;なのでそれに合わせて改行しています。これは、プログラム的には影響を与えず、動作自体に変化はありません
++説明する為に行番号を付けました
+おおきな流れでいくと、
++6行目から、12行目は、変数$dat[0]にファイルに書き込むデータを準備しているところ。たとえば、キャラ名の部分は、「nm;$nm,」→「nm;あくあ,」のように$nm変数に入っている「あくあ」に変換されて$datに格納されます。
++次に14行目から、$dat_sogo_lvという変数に称号1がレベル3の場合「sglv$_;$sogo_lv[$_],」→「sglv1;3,」のようになります。
++foreach(0..$#sogo_p)の部分は、その後続く{ }の中を$sogo_pの数だけ、$_は、カウンタで、自動的に1ずつ増えていきながら、繰り返す事になります。つまり、称号1LV3、称号4LV2の時は、「sglv1;3,sglv4;2,」のようになるわけです。
++その下は、18〜21行までは、称号を取ったときにレベルが上昇する部分です。
++24行から26行は、ファイル保存の部分です。$datに保存された文字データを保存します。
+以上が現状ですが、$datの中に3番目のデータを作った称号レベルの$dat_sogo_lvはどこにいったのでしょうか?
-保存されるのは$dat変数の中身だけだということ
-$dat_sogo_lv変数の中身をdatの中に加えてあげる必要がある
- datの中とはdat0の中の事でしょうか? -- [[trool]] &new{2008-02-02 (土) 21:37:59};
- sub dat_writeが「何をしているのか」を理解すると良いかもです。。。 -- [[三毛猫]] &new{2008-02-02 (土) 23:32:57};

#comment

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS