トップ
新規
一覧
Farm
検索
ヘルプ
RSS
ログイン
Σのsos3_routine.plの編集
#MASTER BARで質問しているΣのルーチン。NPCと遭遇することができずエラーに(泣 # Sub Change Condition # sub change_condition { my $S = shift; my $T = shift; # da,ij,cd my $V = shift; # 状態略字 my $F = shift; # true -> 追加, false -> 削除 if ($F) { if ($T eq 'cd') { $S->{Cd}{$V} = $set::cnd{$V}[1] if $V; } else { $S->{$T} = $V; } } else { if ($T eq 'cd') { undef $S->{Cd}{$V} if $V; } elsif ($T eq 'ij') { undef $S->{ij}; } else { $S->{da} = 'Av'; $S->{Da} = $set::cnd{$S->{da}}[1]; $S->{lf} = 1; &reload_gage('lf','V'); } } return if $S->{id} ne $F{id}; &condition_initial($S,$T,1); } # Sub Condition_initial # sub condition_initial { my $S = shift; my $T = shift; # da,ij,cd my $F = shift; # true -> reload my (@L,$K,$V); if ($T eq 'da') { $S->{Da}{in} = $set::cnd{$S->{da}}[0]; $V = $set::cnd{$S->{da}}[1]; } elsif ($T eq 'ij') { $V = $S->{Ij}{in} = $set::cnd{$S->{ij}}[0]; undef $S->{ij} if !$V; } else { delete $S->{Cd}{in}; while (($K,$V) = each %{$S->{Cd}}) { push(@L,$set::cnd{$K}[0]) if $V; } @L = sort @L; $V = $S->{Cd}{in} = join('・',@L); undef $S->{cd} if !$V; } return if !$F; &reload_data($T,$V); } # Sub Get Equipment # sub get_equipment { my $S = shift; my $E = shift; my @L; @L = split(/\//,$S->{$E}); $E = ucfirst $E; $S->{$E}{nm} = $L[0]; # Name $S->{$E}{cl} = $L[1]; # Class map { $S->{$E}{ql}{$_} = 1 } split(/,/,$L[2]); # Quality $S->{$E}{ef} = $L[3]; # Effect $S->{$E}{db} = $L[4]; # Durability $S->{$E}{im} = $L[5]; # Image $S->{$E}{gd} = $L[6]; # Grade $S->{$E}{pl} = $L[7]; # Plus $S->{$E}{cr} = $L[8]; # Creator $S->{$E}{Im} = &item_image($S->{$E}); # Image with Tag } # Sub Change Status # sub change_status { my $S = shift; my $T = shift; # ステータス略字 my $V = shift; # 増減させる値 my $F = shift; # true -> メッセージを表示する my $X = shift; # Max値が他にある場合 my ($Y,$Z); $V += 1 if $T eq 'vt' && $S->{Cd}{En} && $V < 0; $S->{$T} += $V; $Y = $T eq 'hl' ? 'Mn': $T eq 'ap' ? 'Dt': $T eq 'hy' ? 'En': ''; if ($S->{$T} <= 0) { $S->{$T} = 0; if ($Y && !$S->{Cd}{$Y}) { &change_condition($S,'cd',$Y,1); $Z = "$set::cnd{$Y}[1]になりました。"; } } elsif ($S->{"M$T"} && $S->{$T} >= $S->{"M$T"} && !$X) { $S->{$T} = $S->{"M$T"}; if ($Y && $S->{Cd}{$Y}) { &change_condition($S,'cd',$Y); $Z = "$set::cnd{$Y}[1]が治りました。"; } } elsif ($X && $S->{$T} > $X) { $S->{$T} = $X; } return if !$F; if ($V > 0) { &M("<span class=up>$set::lab{$T}が<span class=alert>$V</span>上昇</span>"); } else { $V = abs($V); &M("<span class=down>$set::lab{$T}が<span class=alert>$V</span>減少</span>"); } &M("<img src=$set::mim_dir/redcross.gif> <span class=sick>$Z</span>") if $Z; } # Sub Item Image # sub item_image { my $V = shift; return "<img src=$set::iim_dir/$V->{im}> " if $V->{im}; } # Sub Sort Item # sub sort_item { my $S = shift; require "$set::dat_dir/sort.cgi"; @{$S->{Bg}} = sort { $SO{$a->{cl}} <=> $SO{$b->{cl}} || $a->{id} cmp $b->{id} || $b->{qn} <=> $a->{qn} } @{$S->{Bg}}; } # Sub Roll Dice # sub roll_dice { my $dice = shift; my $plus; my $roll; my $V; # srand(time|$$) if !$diceflag; return $' if $dice =~ s/^S//; ($dice,$plus) = split(/\+/,$dice); ($roll,$dice) = split(/D/,$dice); if (!$dice) { $dice = $roll; $roll = 1; } if ($dice < 2) { return 1 } while ($roll--) { $V += int(rand($dice)) + 1; } $V += $plus; $V = 1 if $V < 1; # $diceflag = 1; return $V; } # Sub M # sub M { my $M = shift; my $break = shift; # value = 1; $break = $break == 1 ? '' : "<br>\n"; push(@{$I->{M}},"$M$break"); return 1; } # Sub Select Acquisition # sub select_acquisition { my $D = shift; my $i = 1; my (@L,$V); while ($D->{"i$i"}) { push(@L,$D->{"i$i"}); $i++; } $V = &roll_dice($#L + 1) - 1; return $L[$V]; } # Sub Get Item # sub get_item { my $S = shift; my $T = shift; my ($V,$i,$j,@L,@K); $V = $T == 2 ? $S->{op} : $S->{Bg}; @L = map { chomp $_; [split(/<>/)] } @$V; $V = \@set::idt; foreach $i (0 .. $#L) { foreach $j (0 .. $#$V) { $K[$i]{$V->[$j]} = $L[$i][$j]; } map { $K[$i]{Ql}{$_} = 1 } split(/,/,$K[$i]{ql}); } $S->{Bs} = @K if $T == 0; $S->{Bk} = @K if $T == 3; $S->{Bg} = [@K]; } # Sub Set Item # sub set_item { } # Sub Reload Data # sub reload_data { } # Sub Reload Gage # sub reload_gage { } # Sub SOS2 to SOS3 # sub SOS2toSOS3 { my $V = shift || ''; my $S; my $T; my ($i,$MG); my ($Si,$item,$sts,$price,$ipc,$iak,$idd); # 魔法選択 # if (${$V.'sp'} =~ /Mg/) { require "$set::dat_dir/magic.cgi"; for (1 .. $set::ffx) { $i = int(rand ${$V.'ak'}+${$V.'ab'}); $i = $#MG if $i > $#MG; push(@{$MG}, $i); } } $S->{id} = ${$V.'id'}; # ID Identification $S->{nm} = ${$V.'nm'}; # 名前 Name $S->{ps} = ${$V.'ps'}; # パスワード Password $S->{ip} = ${$V.'ht'}; # IP Host IP $S->{im} = ${$V.'ig'}; # イメージ Image $S->{sx} = ${$V.'sx'} || 0; # 性別 Sex $S->{kg} = 'ven'; # 所属国 Kingdom $S->{pl} = 'qui'; # 現在場所 Place $S->{jb} = ${$V.'jb'}; # 職業 Job $S->{sk} = join(',',split(/(?=[A-Z])/,${$V.'sp'})); # スキル Skill $S->{lv} = ${$V.'lv'} || 1; # レベル Level $S->{ex} = ${$V.'ex'}; # 経験値 Experience $S->{gl} = ${$V.'mn'}; # 所持金 Gold $S->{lf} = join('/',${$V.'hp'},${$V.'xp'}); # 生命値(LIF) Life $S->{tc} = ${$V.'dd'}; # 技能(TEC) Technique $S->{st} = ${$V.'ak'}; # 腕力(STR) Strength $S->{dx} = ${$V.'dd'}; # 敏捷/器用さ(DEX) Dexterity $S->{in} = ${$V.'ak'}; # 知性(INT) Intelligence $S->{cn} = ${$V.'dd'}; # 体力(CON) Constitusion $S->{vt} = join('/',${$V.'hp'},${$V.'xp'}); # 気力(VIT) Vitality $S->{hl} = join('/',${$V.'hp'},${$V.'xp'}); # 健康(HEA) Health $S->{ap} = join('/',${$V.'hp'},${$V.'xp'}); # 外見/清潔(APP) Appearance $S->{hy} = join('/',${$V.'hp'},${$V.'xp'}); # 幸福(HAP) Happiness $S->{da} = ${$V.'av'} eq 'dead' ? 'Dd' : ${$V.'av'} eq 'stone' ? 'St' : 'Av'; # 生死 Dead or Alive $S->{ij} = ''; # 怪我 Injury $S->{cd} = ${$V.'av'} eq 'poison' ? 'Ps' : ''; # 状態 Condition $S->{wn} = ${$V.'wn'}; # 勝利数 Win $S->{ls} = ${$V.'lz'}; # 敗北数 Lose $S->{dr} = ${$V.'dr'}; # ドロー数 Draw $S->{kl} = ${$V.'kl'}; # 殺害数 Kill $S->{dt} = ${$V.'dt'}; # 死亡数 Death $S->{rt} = 1500; # 戦闘レート Rate $S->{rw} = ${$V.'rw'}; # 報奨金 Reward $S->{sc} = 1; # スタンス Stance $S->{bg} = ${$V.'xi'}; # 所持(上限) Bag $S->{bs} = ${$V.'bs'}; # 荷物スロット Bag Slot $S->{gu} = ''; # ギルド Guild $S->{fr} = ''; # 友達 Friends $S->{en} = ${$V.'lf'}; # 対戦相手 Enemy $S->{mg} = join(',',@{$MG}); # 魔法 Magic $S->{bt} = 0; # 登録日 Birth $S->{su} = ''; # 状態異常 Status Unusual $S->{tl} = 0; # タイムリミット Time Limit $S->{dd} = 0; # 死亡日 Death Date $S->{li} = !$fg || $fg =~ /B/ ? 'in' : 'out'; # 接続状態 Login $S->{w1} = ${$V.'cm'}; # 自己紹介(簡) Words 1 $S->{ob} = ${$V.'is'}; # オーブ Orb $S->{vx} = ${$V.'xi'}; # 販売上限 Vendor Max $S->{fc} = '#000000'; # 文字色 Font Color $S->{mb} = time + 10; # 手紙の確認時間 Mail Box $S->{px} = join('/',0,${$V.'xi'}); # ペット(上限) Pet Max $S->{co} = ''; # 共にするペット Companion $S->{pc} = ${$V.'xi'}; # パック技能 Packing Skill $S->{lb} = 0; # LevelUpボーナス Level Up Bonus $S->{bk} = ${$V.'xi'}; # 銀行の最大保管数 Bank $S->{ab} = ''; # 乗船 Aboard $S->{vp} = 1; # 対戦受付フラグ Versus Player $S->{dg} = ''; # ダンジョンデータ Dungeon Data map { $S->{Cd}{$_} = $set::cnd{$_}[1] } split(/,/,$S->{cd}); $S->{Da} = $set::cnd{$S->{da}}[1]; $S->{Ij} = $set::cnd{$S->{ij}}[1]; map { $S->{Sk}{$_} = 1 } split(/,/,$S->{sk}); foreach (@set::sdt,@set::gva) { ($S->{$_},$S->{"M$_"}) = split(/\//,$S->{$_},2); } $T = \@set::idt; for (split(/,/,${$V.'bg'})) { ($item,$sts,$price) = split(/△/); $ipc = int(substr($sts,0,4)); $iak = int(substr($sts,2,2)); $idd = int(substr($sts,4,2)); $sts = substr($sts,8); $Si->{nm} = $item; $Si->{ql} = join(',',split(/(?=[A-Z])/,$sts)); $Si->{im} = '_pal.gif'; $Si->{qn} = 1; $Si->{bp} = $ipc; $Si->{gd} = $sts =~ /Li/ ? 2 : 0; $Si->{ef} = "lf=$iak,hl=$idd"; $Si->{db} = $ipc; $Si->{wt} = $ipc; $Si->{cp} = "st=$iak,tc=$idd"; $Si->{eq} = $sts =~ /Qw/ ? 'rh' : $sts =~ /Qs/ ? 'lh' : $sts =~ /Qa/ ? 'bd' : $sts =~ /Qt/ ? 'nk' : ''; $Si->{pl} = $sts =~ /Li/ ? 2 : 0; $Si->{sp} = $price; $S->{$Si->{eq}} = "$Si->{nm}/$Si->{cl}/$Si->{ql}/$Si->{ef}/$Si->{db}/$Si->{im}/$Si->{gd}/$Si->{pl}/$Si->{cr}" if $Si->{eq}; push(@{$S->{Bg}},join('<>',@{$Si}{@set::idt},"\n")); } if (${$V.'bn'}) { $item = ${$V.'bn'}; ($iak) = ${$V.'bp'} =~ /(\d+)/; ($sts) = ${$V.'bp'} =~ /^([A-Za-z]+)/; $Si->{nm} = $item; $Si->{ql} = join(',',split(/(?=[A-Z])/,$sts)); $Si->{im} = '_pal.gif'; $Si->{qn} = 1; $Si->{gd} = $sts =~ /Li/ ? 2 : 0; $Si->{ef} = "lf=$iak,hl=$idd"; $Si->{cp} = "st=$iak,tc=$idd"; $Si->{pl} = $sts =~ /Li/ ? 2 : 0; $Si->{sp} = $price; push(@{$S->{op}},join('<>',@{$Si}{@set::idt},"\n")); } return $S; } # Sub SOS3 to SOS2 # sub SOS3toSOS2 { my $S = shift; my $V = shift || ''; my @L; my ($Si,$new,$i,$Y,$Z,$item,$sts,$price,$ipc,$iak,$idd); ${$V.'lv'} = $S->{lv}; # レベル Level ${$V.'ex'} = $S->{ex}; # 経験値 Experience ${$V.'mn'} = $S->{gl}; # 所持金 Gold ${$V.'hp'} = $S->{lf}; # 生命値(LIF) Life ${$V.'xp'} = $S->{Mlf}; # 生命値(LIF) Life ${$V.'av'} = $S->{da} eq 'Dd' ? 'dead' : $S->{da} eq 'St' ? 'stone' : $S->{Cd}{Ps} ? 'poison' : 'alive'; # 生死 Dead or Alive ${$V.'wn'} = $S->{wn}; # 勝利数 Win ${$V.'lz'} = $S->{ls}; # 敗北数 Lose ${$V.'dr'} = $S->{dr}; # ドロー数 Draw ${$V.'kl'} = $S->{kl}; # 殺害数 Kill ${$V.'dt'} = $S->{dt}; # 死亡数 Death ${$V.'rw'} = $S->{rw}; # 報奨金 Reward for $Si (@{$S->{Bg}}) { for $i (split(/,/,$Si->{ef})) { ($Y,$Z) = split(/=/,$i); $iak = $Y eq 'lf' ? $Z : $Si->{ql} =~ /Rh/ ? $Y : 0; $idd = $Y eq 'hl' ? $Z : $Si->{ql} =~ /Lh|Bd/ ? $Y : 0; $iak =~ tr/a-zA-Z//d; $idd =~ tr/a-zA-Z//d; } $sts = $Si->{cl}; ($sts .= $Si->{ql}) =~ tr/,//d; $item = $Si->{nm}; $sts = sprintf("%04d%02d%02d%s",$Si->{bp},$iak,$idd,$sts); $price = $Si->{sp}; $new = "$item△$sts"; $new .= "$new△$price" if $price; push(@L,$new); } ${$V.'bg'} = join(',',@L); if (!$V) { for (@{$S->{M}}) { s/<br>$//; push(@msg,$_) } } } # Sub Break Item # sub break_item { $Bidice = int(rand($Bidice)); &splititem('i'); if (!$Bidice) { foreach (0 .. $#items) { ($item,$sts,$price) = split(/△/,$items[$_]); if ($sts =~ /Li/ && $Bldice) { next } if ($result == 1 && $sts =~ /Qw/ && $sts !~ /Ie/) { $breakitem = 1 } if ($result == -1 && $sts =~ /Qs/ && $sts !~ /Qw/ && $sts !~ /Ie/) { $breakitem = 1 } elsif ($result == -1 && $sts =~ /Qa/ && $sts !~ /Ie/) { $breakitem = 1 } if ($result == 0 && $sts =~ /Qt/ && $sts !~ /Ie/) { $breakitem = 1 } if ($breakitem) { $ab -= substr($sts,4,2); $db -= substr($sts,6,2); splice(@items,$_,1); &joinitem('i'); $sp =~ s/Qb//g if $sts =~ /Bw/; $sp =~ s/Qk//g if $sts =~ /Kt/; $sp =~ s/Qx//g if $sts =~ /Ax/; $sp =~ s/Qm//g if $sts =~ /Sw/; push (@msg,"$itemが壊れました"); last; } } } } 1; *おかしな箇所があったら指摘して下さい - Σ (2007年05月21日 10時28分35秒)
タイムスタンプを更新しない
添付ファイル
リネーム・コピー
リネーム
メッセージを残してリネーム
コピー
[
ヘルプ
]
Counter 686015
はじめに
SOS2 Wikiの使い方
コンテンツ
SOS2を設置する
SOS2を改造する
困ったときには
コラム
改造&FAQ
リファレンスマニュアル
機能別改造一覧
雑談
BBS
Masters Bar
公式BBS
サポート
サポートBBS
Link
リンク
SIONJamの改造ソース
設置サイトはこちらへ
検索
キーワード
AND
OR
ページ内容も含める
最近更新されたページ
雑談
Script of Saga II Wiki
パーティシステム
D2C風、レアアイテム生成システム
洋ゲー風、拾得アイテム強化プログラム
SOSIIを分割しよう
戦闘関連強化・特技&魔法
SOSII Check Script
乱数ロールプログラム
不具合情報
参照数の多いページ
Script of Saga II Wiki
(74719)
リンク
(16208)
SOS2を設置する
(12427)
雑談
(11884)
SOS2改造利用規約
(9739)