#!/usr/bin/perl #use CGI::Carp qw(fatalsToBrowser); #------------------------------------------ # FFXI Member Registration System # Version 0.712(10/07/20) # script by seno 2002-2008 # webmaster@senobeya.com # Update by elder@DaZarvtra 2009-2010 # http://www9.atpages.jp/elder/gmem/ # 著作権表示は消すなとかしょうもないことは # 言わないのですヨ。好きにしてよし! #------------------------------------------ #壁紙画像サンプルは #フリー素材集 壁紙工房 Giggurat/Information #http://www.chaldea.ne.jp/atelier/ #のものを使用させていただいております。 #BBSPainterは #ば科学的愛情(http://www.geocities.co.jp/SiliconValley-SanJose/8609/) #のJAVAアプレットです。 # #各種サブルーチンファイル #keitai.pl 携帯対応ルーチン #master.pl マスターモード #table.pl 表出力ルーチン #設定類(0.5より各種の設定はsetup.cgiに移動しました) $ENV{'TZ'} = "JST-9"; # $lockdir=""; とすることで、ファイルロックをしません。 # ただしデータ消滅の危険度は飛躍的に高くなります。 # バックアップを取るなどの対応をしてください。 $lockdir="lock"; #バージョン番号。いじらないでネ。改造した場合は適当にどうぞ。 $version="Version 0.712"; #このスクリプトのなまえ。ファイル名を変更したときはここも変更してください。 $script="guildmember.cgi"; $script2="admin.cgi"; #設定ファイル読み出し require "setup.cgi"; # 各種リストの生成(日本語) if($language ne "English"){ # 装備部位 @equipslot = ( '頭', # 0 '胴', # 1 '手', # 2 '脚', # 3 '足', # 4 '首', # 5 '背', # 6 '腰', # 7 '指', # 8 '耳', # 9 '武', # 10 '副', # 11 '遠', # 12 '弾' # 13 ); @synergytech = ( '燃料の投入', 'たたく', '圧力ハンドル調整', '安全レバー操作', '結界メンテナンス', '燃えがら清掃' ); # メリポ関連 @mpointword=( '基本', 'グループ1', 'グループ2', '総消費メリットポイント', 'カテゴリ上限' ); # アサルト関連 @assaultword=( '移送の幻灯', '傭兵ランク', 'Leujaom', 'MammolJa', 'Leberos', 'Perqia', 'Ilrusi', 'Nyzul', '二', '一', '上', '長', '伍', '軍', '曹', '特', '少', '中', '大'); # アルタナミッション @allist=( '', '忘らるる口', 'はじまりの刻', 'ケット・シー、馳せる', '舞姫、来たりて', '玉冠の獣、ふたたび', '梢の胡蝶', '紫電、劈く', '天涯の娘', '踊り子の憂慮', '白い涙、黒い泪', '彼の世に至る病', '国務、携えし', '威風凛凛', 'ジュノ、擾乱', '宙の座', '砂の記憶', '娘、北進して', '紫雲か、暗雲か', '黒き奸計の尾', '盤上の罠', '勇胆の証', '衝突、会戦の序', '囚われの迷宮で', '禁断の口', '喰らわれし未来', '傾ぐ天秤', '死闘の萌芽', '現世と隠世と', '勇鷹の墓標', '決戦、ザルカバード', '雪上の嵐:翠', '雪上の嵐:藍', '闇の牙城', '殲撃、響きて', '獅子たちの帰還', '鉄鷹、旋回す', '黒天、閃電', 'さようなら、リリゼット', ); # カンパニエ叙勲 @alrank=( '', '二級連合従軍章', '一級連合従軍章', '連合白兵章', '連合突撃章', '青銅剣勲章', '白銀剣勲章', '霊銀剣勲章', '黄金剣勲章', '二級戦功水晶章', '一級戦功水晶章', '騎士戦功水晶章', '聖騎士戦功水晶章', '二級勲功翼章', '一級勲功翼章', '名誉勲功翼章', '殊勲翼章', '暁星勲章', '暁月勲章', '暁光勲章', '暁女神勲章',); # アトルガンミッション @amlist=( '', '聖蛇の国',"不滅の防人",'山猫の社長',"黄金の騎士",'王子の告白','東風','西風','傭兵のつとめ', '聖跡の巡視','星気の笛音','双蛇の謀','無手の傀儡師','亡国の墳墓','海豚の紋章','漆黒の柩', '幽冥の海賊','賓客の資格','泡沫の宝冠','遇人の内懐','茶屋の厄難','千古の渦紋','特使の御楯', '宴遊の終幕','悪魔と悪鬼と','運命の歯車','魔蛇の封蝋','貴人の失踪','古寺の所縁','少女の傀儡', '海賊の利','暗雲の去来','逢魔が時','砂上の楼閣','山猫の皮算用','亡国の遺産','天狗の慧眼', '修羅の道','戦乱の兆し','連合の混迷','紐解ける理','審判の光','巨人の懐へ','蒼獅子の最期','少女の決意', 'ラグナロク','戴冠の儀','大団円','永遠の傭兵'); # アサルト関連 @aslist=( '傭兵ランク', 'ルジャワン霊窟開通','マムージャ兵訓練所開通','レベロス風穴開通','ペリキア開通','イルルシ環礁開通', 'ル二等:ルジャワン掃討作戦','ル一等:オリハルコン鉱脈調査','ル上等:クラボエール男爵警護', 'マ二等:皇国エージェント救出作戦','マ一等:秘密訓練所急襲作戦','マ上等:賢哲王暗殺作戦', 'レ二等:土竜作戦','レ一等:レベロス補給作戦','レ上等:落ち武者追撃戦', 'ペ二等:海猫護送作戦','ペ一等:レクイエム作戦','ペ上等:ライアーフ捜索作戦', 'イ二等:黄金の遺産収集作戦','イ一等:ラミア13号討伐作戦','イ上等:蠱物駆除作戦', 'ル兵長:シャナーハ草保護作戦 ','ル伍長:黒羊買付作戦', 'マ兵長:慰問物資強奪作戦 ','マ伍長:二重スパイ捕縛作戦', 'レ兵長:土筆作戦 ','レ伍長:傭兵軍師狙撃作戦', 'ペ兵長:黒い男爵撃墜作戦','ペ伍長:ペリキア架橋作戦', 'イ兵長:イルルシ掃海作戦','イ伍長:シーラット送迎作戦 ', 'ル軍曹:補給物資奪還指令 ','ル曹長:青の治験', 'マ軍曹:魔宝石回収指令 ','マ曹長:謝鱗祭襲撃作戦', 'レ軍曹:アプカル繁殖指令 ','レ曹長:ワモーラファーム襲撃作戦', 'ペ軍曹:ブラッドバス計画抑止作戦 ','ペ曹長:地雷原処理作戦', 'イ軍曹:アプカル捕獲指令戦 ','イ曹長:指輪捜索指令 ', 'ル特務:オグマ奪取指令','マ特務:マーリドガーデン作戦','レ特務:ハンターキラー作戦','ペ特務:双頭の蛇作戦','イ特務:脱走兵武装解除指令', 'ル少尉:不滅隊・魔滅隊合同演習','マ少尉:青の症例','レ少尉:ブラックパール作戦','ペ少尉:人形の目覚め作戦','イ少尉:鱆号作戦', 'ル中尉:ヘルシング作戦','マ中尉:スサノオ作戦','レ中尉:ヘラクレス作戦','ペ中尉:キラーロード作戦','イ中尉:ベレロフォン作戦'); # ナイズル開通 @nzlist=( '未開通', '0','6','11','16','21','26','31','36','41','46','51','56','61','66','71','76','81','86','91','96','100'); # アサルト階級 @asrank=( '','二等傭兵','一等傭兵','上等傭兵','傭兵長','伍長','軍曹','曹長','特務曹長','少尉','中尉','大尉'); # 追加シナリオ # 石の見る夢 @addcplist=( '', '石の見る夢','よみがえりし原初の意志','神の歌の残響が呼ぶ その1','神の歌の残響が呼ぶ その2', '廃墟で待つ者は その1','廃墟で待つ者は その2','廃墟で待つ者は その3', '再会 時に引き裂かれし絆','残響を打ち消す者','天よ聴け 魂の返歌','石の見る夢<完>'); # 戦慄!モグ祭りの夜 @addmklist=( '', "戦慄!モグ祭りの夜", "ぴちょん!始まりは一滴の雨漏り", "いざゆけ!出張モグハウス", "ようこそ!スウィート・モグリハウス", "恐怖!呪われし悪霊の部屋", "走れ!解呪の品を求めて", "愕然!今日から借金王", "モグ金!ご利用は計画的に", "焦燥!愛しいあの子はいずこ", "吠えよ!やとわれ用心棒", "帰還!ふたりの家路", "歓喜!モグ祭りへの招待状", "めざせ!超モグボナンザ抽選会", "砕け!邪なる者の野望", "戦慄!モグ祭りの夜<完>" ); # シャントット帝国の陰謀 @addsslist=( '', 'シャントット帝国の陰謀', '不吉な予感', '謎の召集令状', '甘美なる指令', 'アルド暗殺計画 その1', 'アルド暗殺計画 その2', '甘美なる企み', '囚われのシャントット', 'くじけ!甘美なる陰謀', 'クローン・タルタル部隊', 'ふたりがちからを合わせたら', 'ストップ!ダブル・シャントット', '呪われる世界', '悪夢去りし後……', 'シャントット帝国の陰謀<完>', ); # プロマシアミッション @pmlist=( '','1-1:命の洗礼','1-2:楼閣の下に','1-3:母なる石', '2-1:西への誘い','2-2:忘却の町','2-3:隔たれし信仰','2-4:とこしえに響く歌','2-5:誓いの雄叫び', '3-1:龍王の導き','3-2:主のなき都', '3-3-1-1:2つの道-瑠璃色の川','3-3-1-2:流転','3-3-1-3:累家の末流','3-3-1-4:ルーヴランスという者', '3-3-2-1:2つの道-をとめの記憶','3-3-2-2:をかしき祖国','3-3-2-3:をかしき再会','3-3-2-4:をかしき旅立ち', '3-4:戦慄き','3-5:神を名乗りて', '4-1:よりしろ','4-2:猛き者たちよ','4-3:礼拝の意味','4-4:そしりを受けつつも', '5-1:鍔音やむことなく','5-2:願わくば闇よ', '5-3-1-1:みっつの道-汝の罪は','5-3-1-2:南方の伝説','5-3-1-3:名捨て人ふたり','5-3-1-4:なにゆえにその子は','5-3-1-5:永いお別れ', '5-3-2-1:みっつの道-楽園を求めるは','5-3-2-2:螺旋','5-3-2-3:烙印ありて','5-3-2-4:礼賛者','5-3-2-5:羅針の示すもの', '5-3-3-1:みっつの道-群れ立つ使者は','5-3-3-2:結び目','5-3-3-3:向かい風','5-3-3-4:迎え火', '6-1:歌うは誰がため','6-2:ゐぬる場所','6-3:望むはあらゆる答え','6-4:畏れよ、我を', '7-1:鎖と絆','7-2:闇に炎','7-3:眦決して','7-4:決別の前','7-5:武士道とは', '8-1:古代の園','8-2:選ばれし死','8-3:天使達の抗い','8-4:暁', 'さらばでござる','究極魔法の起源','悠久の名を求め','メーガスの名は永遠に','澪標', '呪縛ほどけるとき','日輪を担いて','亡者の影','世界に在りて君は何を想うのか?','すべての終わりが閉ざされん' ); # ジラートミッション @jmlist=( '','新たなる世界','海賊の巣窟ノーグ','カザム族長','ウガレピ寺院','古代石碑巡礼','流砂洞を越えて','神託の間','デルクフの塔再び', 'ロ・メーヴ','聖地ジ・タ〜滅びの神殿','神々の間','ミスラとクリスタル','神の扉トゥー・リア', 'アーク・ガーディアン','閉ざされし門','宿星の座','1万年の夢の終わりに','すべての終わりが閉ざされん'); # サンドリアミッション @smlist=('-','1-1:オークの斥候を倒せ','1-2:コウモリ退治','1-3:子供の救助', '2-1:救助訓練','2-2:ダボイ調査報告','2-3:他国を回れ', '3-1:ダボイ潜入計画','3-2:クリスタルの泉','3-3:ジュノ大使館へ赴任', '4:魔晶石を奪え','5-1:廃墟フェ・イン','5-2:闇の王を討て!', '6-1:ローテ王妃の遺言','6-2:龍王の眠る場所', '7-1:教皇の威信','7-2:獣人兵器の秘密', '8-1:成人の儀','8-2:聖剣探索', '9-1:厚き壁','9-2:光の継承者', '10:全ミッション終了'); # バストゥークミッション @bmlist=('-','1-1:ツェールン鉱山からの報告','1-2:彼の名はシド','1-3:終わらぬ戦い', '2-1:クリスタルライン','2-2:涸れ谷の怪物','2-3バストゥークを離れて', '3-1:四銃士','3-2:忘れられた鉱山にて','3-3:ジュノへ', '4:魔晶石を奪え','5-1:闇、再び','5-2:ザルカバードに眠る真実', '6-1:語り部現る!?','6-2:海賊たちの唄', '7-1:完成品のイメージ','7-2:それぞれの行方', '8-1:流砂の鎖','8-2:その記憶を紡ぐ者', '9-1:最後の幻想','9-2:双刃の邂逅', '10:全ミッション終了'); # ウィンダスミッション @wmlist=('-','1-1:ホルトト遺跡の大実験','1-2:カーディアンの心 ','1-3:平和のために', '2-1:白き書','2-2:試験の行方','2-3:三大強国', '3-1:それぞれの正義','3-2:星読み','3-3:新たなる旅立ち', '4:魔晶石を奪え','5-1:最後の護符','5-2:最果てにて君を待つ闇', '6-1:満月の泉','6-2:聖者の招待', '7-1:第6の院','7-2:蘇る神々', '8-1:ヴェイン','8-2:王と道化師', '9-1:死者の人形','9-2:月詠み', '10:全ミッション終了'); #デュナミス用 @maru=('×','○'); # ミッション一覧 @mlist=( 'プロマシア', # 0 @pmlist 'ジラート', # 1 @jmlist "サンドリア", # 2 @smlist 'バストゥーク', # 3 @bmlist 'ウインダス', # 4 @wmlist "デュナミス-サンドリア", # 5 'デュナミス-バストゥーク', # 6 'デュナミス-ウインダス', # 7 'デュナミス-ジュノ', # 8 'デュナミス-ボスディン', # 9 'デュナミス-ザルカバード', # 10 'デュナミス-バルクルム', # 11 'デュナミス-ブブリム', # 12 'デュナミス-クフィム', # 13 'デュナミス-タブナジア', # 14 'アトルガン', # 15 @amlist 'アサルト', # 16 @aslist,@asrank 'ナイズル', # 17 @nzlist 'アルタナ', # 18 @allist '石の見る夢', # 19 @addcplist '戦慄!モグ祭りの夜', # 20 @addmklist 'シャントット帝国の陰謀', # 21 @addsslist 'カンパニエ叙勲' # 22 @alrank ); # クエストWS、ミシックWS一覧 # 対応スキル,WS名,習得得種別,ジョブ条件,スキル条件, # 習得種別: 0→クエスト、1→ミシック # # 戦 モ 白 黒 赤 シ ナ 暗 狩 吟 獣 竜 召 忍 侍 青 コ か 踊 学 # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 格闘 短剣 片手剣 両手剣 片手斧 両手斧 両手鎌 両手槍 片手刀 両手刀 片手棍 両手棍 弓術 射撃 # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 @mwslist = ( '0,夢想阿修羅拳,0,1,250', # 格闘  クエスト モ '0,アスケーテンツォルン,1,1,', # 格闘  ミシック モ '0,連環六合圏,1,17,', # 格闘  ミシック か '1,エヴィサレーション,0,0/4/5/8/9/10/13/16/18,230', # 短剣  クエスト 戦赤シ狩吟獣忍コ踊 '1,マンダリクスタッブ,1,5,', # 短剣  ミシック シ '1,モーダントライム,1,9,', # 短剣  ミシック 吟 '1,ピリッククレオス,1,18', # 短剣  ミシック 踊 '2,サベッジブレード,0,0/4/6/7/15/16,240', # 片手剣 クエスト 戦赤ナ暗青コ '2,ロズレーファタール,1,4,', # 片手剣 ミシック 赤 '2,ロイエ,1,6,', # 片手剣 ミシック ナ '2,エクスピアシオン,1,15,', # 片手剣 ミシック 青 '3,グラウンドストライク,0,0/6/7,250', # 両手剣 クエスト 戦ナ暗 '4,デシメーション,0,0/7/8/10,240', # 片手斧 クエスト 戦暗狩獣 '4,プライマルレンド,1,10,', # 片手斧 ミシック 獣 '5,スチールサイクロン,0,0/7,240', # 両手斧 クエスト 戦暗 '5,キングズジャスティス,1,0,', # 両手斧 ミシック 戦 '6,スパイラルヘル,0,0/7/10,240', # 両手鎌 クエスト 戦暗獣 '6,インサージェンシー,1,7,', # 両手鎌 ミシック 暗 '7,インパルスドライヴ,0,0/11/14,240', # 両手槍 クエスト 戦侍竜 '7,雲蒸竜変,1,11,', # 両手槍 ミシック 竜 '8,空,0,13,250', # 片手刀 クエスト 忍 '8,カムハブリ,1,13,', # 片手刀 ミシック 忍 '9,九之太刀・花車,0,14,250', # 両手刀 クエスト 侍 '9,十之太刀・乱鴉,1,14,', # 両手刀 ミシック 侍 '10,ブラックヘイロー,0,0/1/2/3/6/12/15/19,230', # 片手棍 クエスト 戦モ白黒ナ召青学 '10,ミスティックブーン,1,2,', # 片手棍 ミシック 白 '11,レトリビューション,0,0/1/2/3/6/9/11/12/19,230', # 両手棍 クエスト 戦モ白黒ナ吟竜召学 '11,ヴィゾフニル,1,3,', # 両手棍 ミシック 黒 '11,ガーランドオブブリス,1,12,', # 両手棍 ミシック 召 '11,オムニシエンス,1,19,', # 両手棍 ミシック 学 '12,エンピリアルアロー,0,8,250', # 弓術  クエスト 狩 '13,デトネーター,0,8/16,250', # 射撃  クエスト 狩コ '13,トゥルーフライト,1,8,', # 射撃  ミシック 狩 '13,レデンサリュート,1,16,' # 射撃  ミシック コ ); # WS一覧 # 対応スキル,習得スキル,利用条件,WS名,攻撃回数,TP100補正,TP200補正,TP300補正,連携属性,ステータス補正 # 参考:FINAL FANTASY XI Wiki http://ff11wiki.rdy.jp/ # 参考:Studio Gobli http://www32.atwiki.jp/studiogobli/ # ・・・・これの英語版どうすんの?w 誰が作るの?氏ぬの?w @wslist = ( '0,5,,コンボ,3,,,ダメージ,1,1.5,2,衝撃,STR20% DEX20%', '0,40,,タックル,2,スタン,,追加発動確率,1,,,振動 / 衝撃,VIT30% ', '0,75,EX,短勁,2,,,防御カット率,1,,,収縮,VIT40% ', '0,100,,バックハンドブロー,2,,,CRT率,1,,,炸裂,STR30% DEX30%', '0,125,EX,乱撃,5,,,ダメージ,1,1.5,2,衝撃,STR20% DEX20%', '0,150,,スピンアタック,2,,範囲,攻撃範囲,1,,,溶解 / 衝撃,STR35% ', '0,200,SP,空鳴拳,2,,,ダメージ,2.5,2.75,3,貫通 / 衝撃,STR20% VIT50%', '0,225,SP,双竜脚,2,,,ダメージ,2,2.75,3.5,分解,STR50% VIT50%', '0,250,ク,夢想阿修羅拳,8,,,命中,1,,,重力 / 溶解,STR10% VIT10%', '0,ミ,ミ,アスケーテンツォルン,2,,,CRT率,1,,,核熱 / 貫通,STR50% VIT50%', '0,ミ,ミ,連環六合圏,6,,,CRT率,0.75,,,重力 / 溶解,STR+VIT70%', '0,300,,闘魂旋風脚,2,,,ダメージ,1,,,硬化 / 炸裂 / 衝撃,?', '1,5,,ワスプスティング,1,毒(-1HP/3sec),,追加継続時間,1,,,切断, ', '1,40,EX,ガストスラッシュ,風,,魔法:風,ダメージ,1,2,2.5,炸裂,DEX20% INT20%', '1,70,,シャドーステッチ,1,バインド,,追加発動確率,1,,,振動,CHR30% ', '1,100,EX,バイパーバイト,1,毒(-3HP/3sec),攻撃力2.00,追加継続時間,1,,,切断, ', '1,125,EX,サイクロン,風,,魔法:風、範囲,ダメージ,1,2.375,2.875,炸裂 / 衝撃,DEX30% INT25%', '1,150,,エナジースティール,,,MP吸収,MP吸収量,,,,−, ', '1,175,EX,エナジードレイン,,,MP吸収,MP吸収量,,,,−, ', '1,200,SP,ダンシングエッジ,5,,,命中,1.1875,,,切断 / 炸裂,DEX30% CHR40%', '1,225,SP,シャークバイト,2,,,ダメージ,2,2.5,3,分解,DEX50% ', '1,230,ク,エヴィサレーション,5,,,CRT率,1,,,重力 / 貫通,DEX30% ', '1,ミ,ミ,マンダリクスタッブ,1,,攻撃力1.66,ダメージ,2,2.125,2.5,核熱 / 収縮,DEX30% ', '1,ミ,ミ,モーダントライム,2,移動速度-(60秒),,追加発動確率,3,,,分解 / 湾曲,DEX30% CHR50%', '1,ミ,ミ,ピリッククレオス,4,回避-,,追加継続時間,1.5,,,湾曲 / 切断,DEX50% ', '1,290,,イオリアンエッジ,風,,魔法:風、範囲,ダメージ,2,2.5,3,炸裂 / 切断 / 衝撃,DEX30% INT25%', '2,5,,ファストブレード,2,,,ダメージ,1,1.5,2,切断,STR20% DEX20%', '2,30,,バーニングブレード,火,,魔法:火,ダメージ,1,2,2.5,溶解,STR20% INT20%', '2,50,EX,レッドロータス,火,,魔法:火,ダメージ,1,2.375,3,溶解 / 炸裂,STR30% INT20%', '2,75,,フラットブレード,1,スタン,,追加発動確率,1,,,衝撃,STR30% ', '2,100,,シャインブレード,光,,魔法:光,ダメージ,1,2,2.5,切断,STR20% MND20%', '2,125,EX,セラフブレード,光,,魔法:光,ダメージ,1,2.5,3,切断,STR30% MND30%', '2,150,,サークルブレード,1,,範囲,攻撃範囲,1,,,振動 / 衝撃,STR35% ', '2,175,,スピリッツウィズイン,,,ダメージ=HP×倍率,ダメージ,4/32,6/32,15/32,−, ', '2,200,EX,ボーパルブレード,4,,,CRT率,1,,,切断 / 衝撃,STR30% ', '2,225,SP,スウィフトブレード,3,,,命中,1.5,,,重力,STR30% MND30%', '2,240,ク,サベッジブレード,2,,,ダメージ,1,1.75,3.5,分解 / 切断,STR30% MND50%', '2,300,,サンギンブレード,?,,魔法:?、HP吸収,吸収量(50%〜100%),2,2,2,?,STR30% MND50% ', '2,ミ,ミ,ロズレーファタール,3,魔法回避率ダウン(60秒),,追加発動確率,1.125,,,分解 / 湾曲,STR30% MND50%', '2,ミ,ミ,ロイエ,2,,敵対心比例 最大750,ダメージ,,,,核熱 / 振動, ', '2,ミ,ミ,エクスピアシオン,2,,,ダメージ,1.5,2,2.5,湾曲 / 切断,STR30% INT30%', '3,5,,ハードスラッシュ,1,,,ダメージ,1.5,1.75,2,切断,STR30% ', '3,30,,パワースラッシュ,1,,,CRT率,1,,,貫通,STR20% VIT20%', '3,70,,フロストバイト,氷,,魔法:氷,ダメージ,1,2,2.5,硬化,STR20% INT20%', '3,100,EX,フリーズバイト,氷,,魔法:氷,ダメージ,1,1.5,3,硬化 / 炸裂,STR30% INT30%', '3,150,,ショックウェーブ,1,睡眠,,追加継続時間,1,,,振動,STR30% MND30%', '3,175,,クレセントムーン,1,,,ダメージ,1,1.75,2.5,切断,STR35% ', '3,200,SP,シックルムーン,2,,,ダメージ,1.5,2,2.75,切断 / 衝撃,STR20% AGI20%', '3,225,SP,スピンスラッシュ,1,,,ダメージ,2.5,3,3.5,分解,STR30% INT30%', '3,250,ク,グラウンドストライク,1,,,ダメージ,1.5,1.75,3,分解 / 湾曲,STR50% INT50%', '3,290,,ヘラクレススラッシュ,氷,麻痺,,追加継続時間,2.25,,,硬化 / 炸裂 / 衝撃,VIT60%', '4,5,,レイジングアクス,2,,,ダメージ,1,1.5,2,炸裂 / 衝撃,STR30% ', '4,40,,スマッシュ,1,スタン,,追加発動確率,1,,,硬化 / 振動,STR30% ', '4,70,,ラファールアクス,1,チョーク,,追加発動確率,1,,,炸裂,STR30% ', '4,100,,アバランチアクス,1,,,ダメージ,1.5,2,2.5,切断 / 衝撃,STR30% ', '4,150,EX,スピニングアクス,1,,,ダメージ,2,2.5,3,溶解 / 切断 / 衝撃,STR35% ', '4,175,,ランページ,5,,,CRT率,0.5,,,切断,STR30% ', '4,200,SP,カラミティ,1,,,ダメージ,1,1.5,4,切断 / 衝撃,STR32% VIT32%', '4,225,SP,ミストラルアクス,1,,遠隔、射程短,ダメージ,2.5,3,3.5,核熱,STR50% ', '4,240,ク,デシメーション,3,,,命中,1,,,核熱 / 振動,STR50% ', '4,ミ,ミ,プライマルレンド,光,,魔法:光,ダメージ,3.8125,4.0625,4.5625,重力 / 振動,DEX30% CHR40%', '4,290,,ボーラアクス,1,バインド,,追加発動確率,1,,,炸裂 / 切断,DEX60%', '5,5,,シールドブレイク,1,回避-40(3分〜5分),,追加継続時間,1,,,衝撃,STR20% VIT20%', '5,40,,アイアンテンペスト,1,,,攻撃力,1,,,切断,STR30% ', '5,70,EX,シュトルムヴィント,2,,,攻撃力,1,,,振動 / 切断,STR30% ', '5,100,,アーマーブレイク,1,防御-25%(3分〜5分),,追加継続時間,1,,,衝撃,STR20% VIT20%', '5,150,,キーンエッジ,1,,,CRT率,1,,,収縮,STR35% ', '5,175,,ウェポンブレイク,1,攻撃-25%(3分〜5分),,追加継続時間,1,,,衝撃,STR32% VIT32%', '5,200,SP,レイジングラッシュ,3,,,ダメージ,1,,,硬化 / 振動,STR35% ', '5,225,SP,フルブレイク,1,命中回避-20 攻撃防御-12.5%(3分〜5分),,追加継続時間,1,,,湾曲,STR50% VIT50%', '5,240,ク,スチールサイクロン,1,,,ダメージ,1.5,1.75,3,湾曲 / 炸裂,STR50% VIT50%', '5,ミ,ミ,キングズジャスティス,3,,,ダメージ,1,1.25,1.5,分解 / 切断,STR50% ', '5,300,,フェルクリーヴ,1,,範囲,攻撃範囲,2,,,炸裂 / 切断,STR60%', '6,5,,スライス,1,,,ダメージ,1,1.5,2,切断,STR30% ', '6,30,,ダークハーベスト,闇,,魔法:闇,ダメージ,1,2,2.5,振動,STR20% INT20%', '6,70,EX,シャドーオブデス,闇,,魔法:闇,ダメージ,1,2.5,3,硬化 / 振動,STR30% INT30%', '6,100,,ナイトメアサイス,1,暗闇,,追加継続時間,1,,,収縮 / 切断,STR30% MND50%', '6,125,,スピニングサイス,1,,範囲,攻撃範囲,1,,,振動 / 切断,STR30% ', '6,150,,ボーパルサイス,1,,,CRT率,1,,,貫通 / 切断,STR35% ', '6,200,SP,ギロティン,4,静寂,,追加継続時間,0.875,,,硬化,STR25% MND25%', '6,225,SP,クロスリーパー,2,,,ダメージ,2,2.25,2.5,湾曲,STR30% MND30%', '6,240,ク,スパイラルヘル,1,,,ダメージ,1.375,1.875,3.625,湾曲 / 切断,STR50% INT50%', '6,ミ,ミ,インサージェンシー,4,,,ダメージ,0.5,0.75?,1,核熱 / 収縮,STR20% INT20%', '6,300,,インファナルサイズ,闇,攻撃-??%(?分〜?分),魔法:闇,追加継続時間,2.5,,,収縮 / 振動,STR32% INT32%', '7,5,,ダブルスラスト,2,,,ダメージ,1,1.5,2,貫通,STR30% ', '7,30,,サンダースラスト,雷,,魔法:雷,ダメージ,1.5,2,2.5,貫通 / 衝撃,STR20% INT20%', '7,70,EX,ライデンスラスト,雷,,魔法:雷,ダメージ,1,2,3,貫通 / 衝撃,STR30% INT30%', '7,100,,足払い,1,スタン,長めのスタン,追加発動確率,1,,,衝撃,STR30% ', '7,150,,ペンタスラスト,5,,,命中,1,,,収縮,STR20% DEX20%', '7,175,,ボーパルスラスト,1,,,CRT率,1,,,振動 / 貫通,STR20% AGI20%', '7,200,SP,スキュアー,3,,,命中,1,,,貫通 / 衝撃,STR35% ', '7,225,SP,大車輪,1,,,防御カット率,1.75,,,核熱,STR50% ', '7,240,ク,インパルスドライヴ,2,,,ダメージ,1,1.5,2.5,重力 / 硬化,STR50% ', '7,ミ,ミ,雲蒸竜変,4,,,CRT率,1,,,核熱 / 貫通,STR50% ', '7,300,,ソニックスラスト,1,,範囲,ダメージ,3,,,貫通 / 切断,STR30% DEX30%', '8,5,,臨,1,,,CRT率,1,,,貫通,STR20% DEX20%', '8,30,,烈,2,麻痺,,追加継続時間,1,,,切断,STR20% DEX20%', '8,70,,滴,1,,物理:水,ダメージ,0.5,0.75,1,振動,STR20% INT20%', '8,100,,凍,1,,物理:氷,ダメージ,0.5,0.75,1,硬化 / 炸裂,STR30% INT30%', '8,150,,地,2,,物理:土,ダメージ,0.5,0.75,1,貫通 / 衝撃,STR20% INT20%', '8,170,,影,闇,,魔法:闇,ダメージ,1,1.5,2,収縮,STR30% INT30%', '8,200,SP,迅,3,,,CRT率,1,,,炸裂 / 衝撃,STR30% DEX30%', '8,225,SP,天,1,,,ダメージ,2.5,2.75,3,重力,STR30% DEX30%', '8,250,ク,空,5,,,命中,1,,,重力 / 貫通,STR10% DEX10%', '8,ミ,ミ,カムハブリ,1,命中-10(60秒〜120秒),,追加継続時間,1,,,分解 / 収縮,STR50% INT50%', '8,290,,湧,水,毒,,追加継続時間,,,,? / ?,?', '9,5,,壱之太刀・燕飛,2,,,ダメージ,1,1.5,2,貫通 / 切断,STR30% ', '9,30,,弐之太刀・鋒縛,1,スタン,,追加発動確率,1,,,硬化,STR30% ', '9,70,,参之太刀・轟天,1,,物理:雷,ダメージ,0.5,0.75,1,貫通 / 衝撃,STR30% ', '9,100,,四之太刀・陽炎,1,,物理:火,ダメージ,0.5,0.75,1,溶解,STR50% ', '9,150,,五之太刀・陣風,2,,物理:風,ダメージ,0.5,0.75,1,切断 / 炸裂,STR30% ', '9,175,,六之太刀・光輝,1,,物理:光,ダメージ,0.5,0.75,1,振動 / 衝撃,STR30% MND50%', '9,200,SP,七之太刀・雪風,1,暗闇,,ダメージ,1.5625,1.875,2.5,硬化 / 炸裂,STR75% ', '9,225,SP,八之太刀・月光,1,沈黙,,ダメージ,1.5625,1.875,2.5,湾曲 / 振動,STR75% ', '9,250,ク,九之太刀・花車,1,麻痺,,ダメージ,1.5625,1.875,2.5,核熱 / 収縮,STR75% ', '9,ミ,ミ,十之太刀・乱鴉,3,,,命中,1,,,重力 / 硬化,STR35% ', '9,300,,十一之太刀・鳳蝶,1,防御-??%(?分),,追加発動確率,,.,,収縮 / 切断,? ', '10,5,,シャインストライク,光,,魔法:光,ダメージ,1,1.75,2.5,衝撃,STR20% MND20%', '10,40,EX,セラフストライク,光,,魔法:光,ダメージ,1,2,3,衝撃,STR30% MND30%', '10,70,,ブレインシェイカー,1,スタン,,追加発動確率,1,,,振動,STR30% ', '10,100,,スターライト,,,MP回復,回復量,1,2,3,−, ', '10,125,EX,ムーンライト,,,MP回復、範囲,回復量,1,1.5,2,−, ', '10,150,,スカルブレイカー,1,INT-,,追加発動確率,1,,,硬化 / 振動,STR35% ', '10,175,,トゥルーストライク,1,,,命中,1,,,炸裂 / 衝撃,STR50% ', '10,200,EX,ジャッジメント,1,,,ダメージ,2,2.5,4,衝撃,STR32% MND32%', '10,220,SP,ヘキサストライク,6,,,CRT率,1,,,核熱,STR20% MND20%', '10,230,ク,ブラックヘイロー,2,,,ダメージ,1.5,2.5,3,分解 / 収縮,STR30% MND50%', '10,ミ,ミ,ミスティックブーン,1,,ダメージMP変換,ダメージ,1,1.5,2,−,STR30% MND50%', '10,280,,フラッシュノヴァ,光,フラッシュ,魔法:光,追加発動確率,,,,振動 / 硬化,?', '11,5,,ヘヴィスイング,1,,,ダメージ,1,1.25,2.25,衝撃,STR30% ', '11,40,,ロッククラッシャー,土,,魔法:土,ダメージ,1,2,2.5,衝撃,STR20% INT20%', '11,70,EX,アースクラッシャー,土,,魔法:土、範囲,ダメージ,1,2.3125,3.625,炸裂 / 衝撃,STR30% INT30%', '11,100,,スターバースト,光/闇,,魔法:光or闇,ダメージ,1,2,2.5,収縮 / 振動,なし ', '11,150,EX,サンバースト,光/闇,,魔法:光or闇,ダメージ,1,2.5,4,収縮 / 振動,なし ', '11,175,,シェルクラッシャー,1,防御-25%,,追加継続時間,1,,,炸裂,STR35% ', '11,200,,フルスイング,1,,,ダメージ,1,3,5,溶解 / 衝撃,STR50% ', '11,215,,スピリットテーカー,1,,ダメージMP変換,ダメージ,1,1.5,2,−,INT50% MND50%', '11,230,ク,レトリビューション,1,,,ダメージ,2,2.5,3,重力 / 振動,STR30% MND50%', '11,ミ,ミ,ヴィゾフニル,闇,魔防-10(60秒〜180秒),魔法:闇,追加継続時間,1.75,,,分解 / 湾曲,INT30% ', '11,ミ,ミ,ガーランドオブブリス,光,防御-12.5%,魔法:光,追加継続時間,,,,核熱 / 振動, ', '11,ミ,ミ,オムニシエンス,闇,魔攻-,魔法:闇,追加継続時間,2,,,重力 / 貫通,MND30% ', '11,270,,カタクリスム,闇,,魔法:闇,ダメージ,,,,? / ?,?', '12,5,EX,フレイミングアロー,1,,物理:火,ダメージ,0.5,0.75,1,溶解 / 貫通,STR16% AGI25%', '12,40,EX,ピアシングアロー,1,,カット率0%〜50%,防御カット率,1,,,振動 / 貫通,STR16% AGI25%', '12,80,EX,ダリングアロー,1,INT-,,CRT率,1,,,溶解 / 貫通,STR16% AGI25%', '12,175,EX,サイドワインダー,1,,命中低,命中,5,,,振動 / 貫通 / 炸裂,STR16% AGI25%', '12,200,SP,ブラストアロー,1,,射程短,命中,2,,,硬化 / 貫通,STR16% AGI25%', '12,225,SP,アーチングアロー,1,,,CRT率,3.5,,,核熱,STR16% AGI25%', '12,250,ク,エンピリアルアロー,1,,,ダメージ,1.5,2,2.5,核熱 / 貫通,STR16% AGI25%', '12,290,,リフルジェントアロー,1,2倍撃,,ダメージ,3,4.25,5,振動 / 貫通,STR60% ', '13,5,EX,ホットショット,1,,物理:火,ダメージ,0.5,0.75,1,溶解 / 貫通,AGI30% ', '13,40,EX,スプリットショット,1,,カット率0%〜50%,防御カット率,1,,,振動 / 貫通,AGI30% ', '13,80,EX,スナイパーショット,1,INT-,,CRT率,1,,,溶解 / 貫通,AGI30% ', '13,175,EX,スラッグショット,1,,命中低,命中,5,,,振動 / 貫通 / 炸裂,AGI30% ', '13,200,SP,ブラストショット,1,,射程短,命中,2,,,硬化 / 貫通,AGI30% ', '13,225,SP,ヘヴィショット,1,,,CRT率,3.5,,,核熱,AGI30% ', '13,250,ク,デトネーター,1,,,ダメージ,1.5,2,2.5,核熱 / 貫通,AGI30% ', '13,ミ,ミ,トゥルーフライト,光,,魔法:光,ダメージ,3.89,4.39,4.89,分解 / 切断,AGI30% ', '13,ミ,ミ,レデンサリュート,闇,,魔法:闇,ダメージ,4,4.25,4.75,重力 / 貫通,AGI30% ', '13,290,,ナビングショット,1,麻痺(60秒〜180秒),,追加継続時間,,,,硬化 / 炸裂 / 衝撃,AGI30% ', ); # SP技使用可能ジョブ一覧 # 戦 モ 白 黒 赤 シ ナ 暗 狩 吟 獣 竜 召 忍 侍 青 コ か 踊 学 # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 @spjoblist = ( '1,17', # 格闘 モか '5,18', # 短剣 シ踊 '6', # 片手剣 ナ '6,7', # 両手剣 ナ暗 '0,10', # 片手斧 戦獣 '0', # 両手斧 戦 '7', # 両手鎌 暗 '11', # 両手槍 竜 '13', # 片手刀 忍 '14', # 両手刀 侍 '2', # 片手棍 白 '', # 両手棍 なし '8', # 弓術 狩 '8' # 射撃 狩 ); # 利用可能WS一覧表 項目名 @wsparam = ( 'スキル値', '種別', '名前', '回','追加効果','効果等','TP','ダメージ補正','連携属性','ステータス補正'); } else { @equiplist = ( 'Head', 'Body', 'Hands', 'Legs', 'Feet', 'Neck', 'Back', 'Waist', 'Ring', 'Ear', 'Main', 'Sub', 'Range', 'Ammo' ); @mpointword=('General','Job Group1','Job group2','Total merit point use','Category Limit'); @assaultword=('RunicPortal','Mercenary Rank','Leujaom','MammolJa','Leberos','Perqia','Ilrusi','Nyzul','PSC','PFC','SP','LC','C','SER','SMJ','CS','SL'); @addcplist=('','A Crystalline Prophecy','The Echo Awakens','Gatherer of Light (I)','Gatherer of Light (II)','Those Who Lurk in Shadows (I)','Those Who Lurk in Shadows (II)','Those Who Lurk in Shadows (III)','Remember Me in Your Dreams','Born of Her Nightmares','Banishing the Echo','Ode of Life Bestowing','A Crystalline Prophecy (Fin.)'); @addmklist=( '', "A Moogle Kupo d'Etat", "Drenched! It Began with a Raindrop", "Hasten! In a Jam in Jeuno?", "Welcome! To My Decrepit Domicile", "Curses! A Horrifically Harrowing Hex", "An Errand! The Professor's Price", "Shock! Arrant Abuse of Authority", "Lender Beware! Read the Fine Print", "Rescue! A Moogle's Labor of Love", "Roar! A Cat Burglar Bares Her Fangs", "Relief! A Triumphant Return", "Joy! Summoned to a Fabulous Fete", "A Challenge! You Could Be a Winner", "Smash! A Malevolent Menace", "A Moogle Kupo d'Etat (Fin.)" ); @addsslist=( '', 'A Shantotto Ascension', 'Burgeoning Dread', 'That Which Curdles Blood', 'Sugar-coated Directive', 'Enemy of the Empire (I)', 'Enemy of the Empire (II)', 'Sugar-coated Subterfuge', 'Shantotto in Chains', 'Fountain of Trouble', 'Battaru Royale', 'Romancing the Clone', 'Sisters in Arms', 'Project: Shantottofication', 'An Uneasy Peace', 'A Shantotto Ascension (Fin)', ); @allist=( '', 'Cavernous Maws', 'Back to the Beginning', 'Cait Sith', 'The Queen of the Dance', 'While the Cat is Away', 'A Timeswept Butterfly', 'Purple, The New Black', 'In the Name of the Father', 'Dancers in Distress', 'Daughter of a Knight', 'A Spoonful of Sugar', 'Affairs of State', 'Borne by the Wind', 'A Nation on the Brink', 'Crossroads of Time', 'Sandswept Memories', 'Northland Exposure', 'Traitor in the Midst', 'Betrayal at Beaucedine', 'On Thin Ice', 'Proof of Valor', 'A Sanguinary Prelude', 'Dungeons and Dancers', 'Distorter of Time', 'The Will of the World','Fate in Haze', 'The Scent of Battle', 'Another World', 'A Hawk in Repose', 'The Battle of Xarcabard', 'Prelude to a Storm', "Storm's Crescendo", "Into the Beast's Maw", 'The Hunter Ensnared', 'Flight of the Lion', 'Fall of the Hawk', 'Darkness Descends', 'Adieu, Lilisette', ); @amlist=("","Land of Sacred Serpents","Immortal Sentries","President Salaheem","Knight of Gold","Confessions of Royalty","Easterly Winds","Westerly Winds","A Mercenary Life",'Undersea Scouting','Astral Waves','Imperial Schemes','Royal Puppeteer','Lost Kingdom','The Dolphin Crest','The Black Coffin','Ghosts of the Past','Guests of the Empire','Passing Glory','Sweets for the Soul','Teahouse Tumult','Finders Keepers','Shield of Diplomacy','Social Graces','Foiled Ambition','Playi,g the Part','Seal of the Serpent','Misplaced Nobility','Bastion of Knowledge','Puppet in Peril','Prevalence of Pirates','Shades of Vengeance','In the Blood',"Sentinels' Honor",'Testing the Waters','Legacy of the Lost','Gaze of the Saboteur','Path of Blood','Stirrings of War','Allied Rumblings','Unraveling Reason','Light of Judgment','Path of Darkness','Fangs of the Lion',"Nashmeira's Plea",'Ragnarok','Imperial Coronation','The Empress Crowned','Eternal Mercenary' ); @alrank=( '', 'Bronze Ribbon of Service','Brass Ribbon of Service','Allied Ribbon of Bravery','Allied Ribbon of Glory', 'Bronze Star','Sterling Star','Mythril Star','Golden Star', 'Copper Emblem of Service','Iron Emblem of Service','Steelknight Emblem','Holyknight Emblem', 'Brass Wings of Service','Mythril Wings of Service','Wings of Integrity','Wings of Honor', 'Starlight Medal','Moonlight Medal','Dawnlight Medal','Medal Of Altana' ); @aslist=('Mercenary Rank','RunicPortal:Leujaoam','RunicPortal:Mamool Ja','RunicPortal:Lebros','RunicPortal:Periqia','RunicPortal:Ilrusi','LeuPSC:Leujaoam Cleansing','LeuPFC:Orichalcum Survey','LeuSP:Escort Professor Clavauert','MamPSC:Imperial Agent Rescue','MamPFC:Preemptive Strike','MamSP:Sagelord Elimination','LebPSC:Excavation Duty','LebPFC:Lebros Supplies','LebSP:Troll Fugitives','PerPSC:Seagull Grounded','PerPFC:Requiem','PerSP:Saving Private Ryaaf','IlrPSC:Golden Salvage','IlrPFC:Lamia No.13','IlrSP:Extermination','LeuLC:Shanarha Grass Conservation ','LeuC:Counting Sheep','MamLC:Breaking Morale ','MamC:The Double Agent','LebLC:Evade and Escape','LebC:Siegemaster Assassination','PerLC:Shooting Down the Baron','PerC:Building Bridges','IlrLC:Demolition Duty','IlrC:Searat Salvation','LeuSER:Supplies Recovery','LeuSMJ:Azure Experiments','MamSER:Imperial Treasure Retrieval','MamSMJ:Blitzkrieg','LebSER:Apkallu Breeding','LebSMJ:Wamoura Farm Raid','PerSER:Stop the Bloodshed','PerSMJ:Defuse the Threat','IlrSER:Apkallu Seizure','IlrSMJ:Lost and Found','LeuCS:Imperial Code','MamCS:Marids in the Mist','LebCS:Egg Conservation','PerCS:Operation: Snake Eyes','IlrCS:Deserter','LeuSL:Red Versus Blue','MamSL:Azure Ailments','LebSL:Operation: Black Pearl','PerSL:Wake the Puppet','IlrSL:Desperately Seeking Cephalopods','LeuFL:Bloody Rondo','MamFL:The Susanoo Shuffle','LebFL:Better than One','PerFL:The Price Is Right',"IlrFL:Bellerophon's Bliss"); @asrank=('','PSC','PFC','SP','LC','C','SER','SMJ','CS','SL','FL','CAP'); #@asrank=('','Private Second Class','Private First Class','Superior Private','LanceCorporal','Corporal','Sergent','SergentMajor','ChiefSergent','SecondLieutenant','FirstLieutenant','Captain'); @nzlist=('-','0','6','11','16','21','26','31','36','41','46','51','56','61','66','71','76','81','86','91','96','100'); @pmlist=('','1-1:The Rites of Life','1-2:Below the Arks','1-3:The Mothercrystals', '2-1:An Invitation West','2-2:The Lost City','2-3:Distant Beliefs','2-4:An Eternal Melody','2-5:Ancient Vows', '3-1:The Call of the Wyrmking','3-2:A Vessel Without a Captain', '3-3-1-1:The Road Forks-Emerald Waters','3-3-1-2:Vicissitudes','3-3-1-3:Descendents of Line Lost','3-3-1-4:Louverance', '3-3-2-1:The Road Forks-Memories of a Maiden','3-3-2-2:Comedy of Errors','3-3-2-3:Comedy of Errors','3-3-2-4:Exit Stage Left', '3-4:Tending Aged Wounds','3-5:Darkness Named', '4-1:Sheltering Doubt','4-2:The Savage','4-3:The Secrets of Worship','4-4:Slanderous Utterings', '5-1:The Enduring Tumult of War','5-2:Desires of Emptiness', '5-3-1-1:Three Forks-Past Sins','5-3-1-2:Southern Legend','5-3-1-3:Partners Without Fame','5-3-1-4:A Century of Hardship','5-3-1-5:Departures', '5-3-2-1:Three Forks-The Pursuit of Paradise','5-3-2-2:Spiral','5-3-2-3:Branded','5-3-2-4:Pride and Honor','5-3-2-5:And the Compass Guides', '5-3-3-1:Three Forks-Where Messengers Gather','5-3-3-2:Enlanglement','5-3-3-3:Head Wind','5-3-3-4:Flames for the Dead', '6-1:For Whom the Verse is Sung','6-2:A Place to Return','6-3:More Questions than Answers','6-4:One to be Feared', '7-1:Chains and Bonds','7-2:Flames in the Darkness','7-3:Fire in the Eyes of Men','7-4:Calm Before the Storm',"7-5:The Warrior's Path", '8-1:Garden of Antiquity','8-2:A Fate Decided','8-3:When Angels Fall','8-4:Dawn',"Storms of Fate","Shadows of the Departed","Apocalypse Nigh",'The Last Verse' ); @jmlist=('',"The New Frontier","Welcome t'Norg","Kazham's Chieftainness","The Temple of Uggalepih","Headstone Pilgrimage","Through the Quicksand Caves","The Chamber of Oracles","Return to Delkfutt's Tower","Ro'Maeve","The Temple of Desolation","The Hall of the Gods","The Mithra and the Crystal","The Gate of the Gods","Ark Angels","The Sealed Shrine","The Celestial Nexus","Awakening",'The Last Verse'); @smlist=('-',"Smash the Orcish Scouts ","Bat Hunt","Save the Children ","The Rescue Drill ","The Davoi Report ","Journey Abroad ","Infiltrate Davoi ","The Crystal Spring ","Appointment to Jeuno ","Magicite ","The Ruins of Fei'Yin ","The Shadow Lord ","Leaute's Last Wishes ","Ranperre's Final Rest ","Prestige of the Papsque ","The Secert Weapon ","Coming of Age ","Lightbringer ","Breaking Barriers ","The Heir to the Light ","RANK10"); @bmlist=('-',"The Zeruhn Report ","A Geological Survey ","Fetichism","The Crystal Line ","Wading Beasts ","The Emissary ","The Four Musketeers ","To the Forsaken Mines ","Jeuno ","Magicite ","Darkness Rising ","Xarcabard, Land of Truths ","Return of the Talekeeper ","The Pirates' Cove ","The Final Image ","On My Way ","The Chains that Bind Us ","Enter the Talekeeper ","The Salt of the Earth ","Where Two Paths Converge ","RANK10"); @wmlist=('-',"The Horuroro Ruins Experiment ","The Heart of the Matter ","The Price of Peace ","Lost for Words ","A Testing Time ","The Three Kingdoms ","To Each His Own Right ","Written in the Stars ","A New Journey ","Magicite ","The Final Seal ","The Shadow Awaits ","Full Moon Fountain ","Saintly Invitation ","The Sixth Ministry ","Awakening of the Gods ","Vain ","The Jester Who'd Be King ","Doll of the Dead ","Moon Reading ","RANK10"); #For Dynamis @maru=('-','Fin'); @mlist=( 'Promathia', # 0 'Zilart', # 1 "Sand'Oria", # 2 'Bastok', # 3 'Windurst', # 4 "Dynamis-Sand'Oria", # 5 'Dynamis-Bastok', # 6 'Dynamis-Windurst', # 7 'Dynamis-Jeuno', # 8 'Dynamis-Beaucedine', # 9 'Dynamis-Xarcabard', # 10 'Dynamis-Valkurm', # 11 'Dynamis-Buburimu', # 12 'Dynamis-Qufim', # 13 'Dynamis-Tavnazia', # 14 "Aht Urhgan", # 15 "Assault", # 16 'Nyzlu', # 17 'Altana', # 18 'A Crystalline Prophecy', # 19 "A Moogle Kupo d'Etat", # 20 'A Shantotto Ascension', # 21 'Campaign Medal' # 22 ); # クエストWS、ミシックWS一覧 @mwslist = ( '0,Asuran Fists,0,1,250', # 格闘  クエスト モ "0,Ascetic's Fury,1,1,", # 格闘  ミシック モ '0,Stringing Pummel,1,17,', # 格闘  ミシック か '1,Evisceration,0,0/4/5/8/9/10/12/13/16/18,230', # 短剣  クエスト 戦赤シ狩吟獣召忍コ踊 '1,Mandalic Stab,1,5,', # 短剣  ミシック シ '1,Mordant Rime,1,9,', # 短剣  ミシック 吟 '1,Pyrrhic Kleos,1,18', # 短剣  ミシック 踊 '2,Savage Blade,0,0/4/6/7/15/16,240', # 片手剣 クエスト 戦赤ナ暗青コ '2,Death Blossom,1,4,', # 片手剣 ミシック 赤 '2,Atonement,1,6,', # 片手剣 ミシック ナ '2,Expiacion,1,15,', # 片手剣 ミシック 青 '3,Ground Strike,0,0/6/7,250', # 両手剣 クエスト 戦ナ暗 '4,Decimation,0,0/7/8/10,240', # 片手斧 クエスト 戦暗狩獣 '4,Primal Rend,1,10,', # 片手斧 ミシック 獣 '5,Steel Cyclone,0,0/7,240', # 両手斧 クエスト 戦暗 "5,King's Justice,1,0,", # 両手斧 ミシック 戦 '6,Spiral Hell,0,0/7/10,240', # 両手鎌 クエスト 戦暗獣 '6,Insurgency,1,7,', # 両手鎌 ミシック 暗 '7,Impulse Drive,0,0/11/14,240', # 両手槍 クエスト 戦侍竜 '7,Drakesbane,1,11,', # 両手槍 ミシック 竜 '8,Blade: Ku,0,13,250', # 片手刀 クエスト 忍 '8,Blade: Kamu,1,13,', # 片手刀 ミシック 忍 '9,Tachi: Kasya,0,14,250', # 両手刀 クエスト 侍 '9,Tachi: Rana,1,14,', # 両手刀 ミシック 侍 '10,Black Halo,0,0/1/2/3/6/12/15/19,230', # 片手棍 クエスト 戦モ白黒ナ召青学 '10,Mystic Boon,1,2,', # 片手棍 ミシック 白 '11,Retribution,0,0/1/2/3/6/9/11/12/19,230', # 両手棍 クエスト 戦モ白黒ナ吟竜召学 '11,Vidohunir,1,3,', # 両手棍 ミシック 黒 '11,Garland of Bliss,1,12,', # 両手棍 ミシック 召 '11,Omniscience,1,19,', # 両手棍 ミシック 学 '12,Empyreal Arrow,0,8,250', # 弓術  クエスト 狩 '13,Detonator,0,8/16,250', # 射撃  クエスト 狩コ '13,Trueflight,1,8,', # 射撃  ミシック 狩 '13,Leaden Salute,1,16,' # 射撃  ミシック コ ); @wslist = ( '0,5,,Combo,3,,,Damage,1,1.5,2,Impaction,STR20% DEX20%', '0,40,,Shoulder Tackle,2,Stuns,,Chance,1,,,Reverberation / Impaction,VIT30% ', '0,75,EX,One Inch Punch,2,,,Ignore defense,1,,,Compression,VIT40% ', '0,100,,Backhand Blow,2,,,CRT,1,,,Detonation,STR30% DEX30%', '0,125,EX,Raging Fists,5,,,Damage,1,1.5,2,Impaction,STR20% DEX20%', '0,150,,Spinning Attack,2,,Area,Radius,1,,,Liquefaction / Impaction,STR35% ', '0,200,SP,Howling Fist,2,,,Damage,2.5,2.75,3,Transfixion / Impaction,STR20% VIT50%', '0,225,SP,Dragon Kick,2,,,Damage,2,2.75,3.5,Fragmentation,STR50% VIT50%', '0,250,Quest,Asuran Fists,8,,,Accuracy,1,,,Gravitation / Liquefaction,STR10% VIT10%', '0,Myth,Myth,Ascetic'."'".'s Fury,2,,,CRT,1,,,Fusion / Transfixion,STR50% VIT50%', '0,Myth,Myth,Stringing Pummel,6,,,CRT,0.75,,,Gravitation / Liquefaction,STR+VIT70%', '1,5,,Wasp Sting,1,Poison(-1HP/3sec),,Duration,1,,,Scission, ', '1,40,EX,Gust Slash,Wind,,Magic:Wind,Damage,1,2,2.5,Detonation,DEX20% INT20%', '1,70,,Shadowstitch,1,Binds,,Chance,1,,,Reverberation,CHR30% ', '1,100,EX,Viper Bite,1,Poison(-3HP/3sec),double,Duration,1,,,Scission, ', '1,125,EX,Cyclone,Wind,,Magic:Wind Area,Damage,1,2.375,2.875,Detonation / Impaction,DEX30% INT25%', '1,150,,Energy Steal,,,Steals MP,Amount,,,,, ', '1,175,EX,Energy Drain,,,Steals MP,Amount,,,,, ', '1,200,SP,Dancing Edge,5,,,Accuracy,1.1875,,,Scission / Detonation,DEX30% CHR40%', '1,225,SP,Shark Bite,2,,,Damage,2,2.5,3,Fragmentation,DEX50% ', '1,230,Quest,Evisceration,5,,,CRT,1,,,Gravitation / Transfixion,DEX30% ', '1,Myth,Myth,Mandalic Stab,1,,1.66 times,Damage,2,2.125,2.5,Fusion / Compression,DEX30% ', '1,Myth,Myth,Mordant Rime,2,Low move speed(60sec),,Chance,3,,,Fragmentation / Distortion,DEX30% CHR50%', '1,Myth,Myth,Pyrrhic Kleos,4,ACC-,,Duration,1.5,,,Distortion / Scission,DEX50% ', '2,5,,Fast Blade,2,,,Damage,1,1.5,2,Scission,STR20% DEX20%', '2,30,,Burning Blade,Fire,,Magic:Fire,Damage,1,2,2.5,Liquefaction,STR20% INT20%', '2,50,EX,Red Lotus Blade,Fire,,Magic:Fire,Damage,1,2.375,3,Liquefaction / Detonation,STR30% INT20%', '2,75,,Flat Blade,1,Stuns,,Chance,1,,,Impaction,STR30% ', '2,100,,Shining Blade,Light,,Magic:light,Damage,1,2,2.5,Scission,STR20% MND20%', '2,125,EX,Seraph Blade,Light,,Magic:Light,Damage,1,2.5,3,Scission,STR30% MND30%', '2,150,,Circle Blade,1,,Area,Radius,1,,,Reverberation / Impaction,STR35% ', '2,175,,Spirits Within,,,Damage=HP*Correct,Damage,4/32,6/32,15/32,, ', '2,200,EX,Vorpal Blade,4,,,CRT,1,,,Scission / Impaction,STR30% ', '2,225,SP,Swift Blade,3,,,Accuracy,1.5,,,Gravitation,STR30% MND30%', '2,240,Quest,Savage Blade,2,,,Damage,1,1.75,3.5,Fragmentation / Scission,STR30% MND50%', '2,Myth,Myth,Death Blossom,3,Low MAG-ACC(60s),,Chance,1.125,,,Fragmentation / Distortion,STR30% MND50%', '2,Myth,Myth,Atonement,2,, Max 750,Damage,,,,Fusion / Reverberation, ', '2,Myth,Myth,Expiacion,2,,,Damage,1.5,2,2.5,Distortion / Scission,STR30% INT30%', '3,5,,Hard Slash,1,,,Damage,1.5,1.75,2,Scission,STR30% ', '3,30,,Power Slash,1,,,CRT,1,,,Transfixion,STR20% VIT20%', '3,70,,Frostbite,Ice,,Magic:Ice,Damage,1,2,2.5,Induration,STR20% INT20%', '3,100,EX,Freezebite,Ice,,Magic:Ice,Damage,1,1.5,3,Induration / Detonation,STR30% INT30%', '3,150,,Shockwave,1,Sleep,,Duration,1,,,Reverberation,STR30% MND30%', '3,175,,Crescent Moon,1,,,Damage,1,1.75,2.5,Scission,STR35% ', '3,200,SP,Sickle Moon,2,,,Damage,1.5,2,2.75,Scission / Impaction,STR20% AGI20%', '3,225,SP,Spining Slash,1,,,Damage,2.5,3,3.5,Fragmentation,STR30% INT30%', '3,250,Quest,Ground Strike,1,,,Damage,1.5,1.75,3,Fragmentation / Distortion,STR50% INT50%', '4,5,,Raging Axe,2,,,Damage,1,1.5,2,Detonation / Impaction,STR30% ', '4,40,,Smash Axe,1,Stuns,,Chance,1,,,Induration / Reverberation,STR30% ', '4,70,,Gale Axe,1,Chokes,,Chance,1,,,Detonation,STR30% ', '4,100,,Avalanche Axe,1,,,Damage,1.5,2,2.5,Scission / Impaction,STR30% ', '4,150,EX,Spining Axe,1,,,Damage,2,2.5,3,Liquefaction / Scission / Impaction,STR35% ', '4,175,,Rampage,5,,,CRT,0.5,,,Scission,STR30% ', '4,200,SP,Calamity,1,,,Damage,1,1.5,4,Scission / Impaction,STR32% VIT32%', '4,225,SP,Mistral Axe,1,,Range short-ranged,Damage,2.5,3,3.5,Fusion,STR50% ', '4,240,Quest,Decimation,3,,,Accuracy,1,,,Fusion / Reverberation,STR50% ', '4,Myth,Myth,Primal Rend,Light,,Magic:Light,Damage,3.8125,4.0625,4.5625,Gravitation / Reverberation,DEX30% CHR40%', '5,5,,Shield Break,1,ACC-40(3m-5m),,Duration,1,,,Impaction,STR20% VIT20%', '5,40,,Iron Tempest,1,,,Atack,1,,,Scission,STR30% ', '5,70,EX,Sturmwind,2,,,Atack,1,,,Reverberation / Scission,STR30% ', '5,100,,Armor Break,1,DEF-25%(3m-5m),,Duration,1,,,Impaction,STR20% VIT20%', '5,150,,Keen Edge,1,,,CRT,1,,,Compression,STR35% ', '5,175,,Weapon Break,1,ATK-25%(3m-5m),,Duration,1,,,Impaction,STR32% VIT32%', '5,200,SP,Raging Rush,3,,,Damage,1,,,Induration / Reverberation,STR35% ', '5,225,SP,Full Break,1,EVA/ACC-20 ATK/DEF-12.5%(3m-5m),,Duration,1,,,Distortion,STR50% VIT50%', '5,240,Quest,Steel Cyclone,1,,,Damage,1.5,1.75,3,Distortion / Detonation,STR50% VIT50%', '5,Myth,Myth,King'."'".'s Justice,3,,,Damage,1,1.25,1.5,Fragmentation / Scission,STR50% ', '6,5,,Slice,1,,,Damage,1,1.5,2,Scission,STR30% ', '6,30,,Dark Harvest,Darkness,,Magic:Darkness,Damage,1,2,2.5,Reverberation,STR20% INT20%', '6,70,EX,Shadow of Death,Darkness,,Magic:Darkness,Damage,1,2.5,3,Induration / Reverberation,STR30% INT30%', '6,100,,Nightmare Scythe,1,Blinds,,Duration,1,,,Compression / Scission,STR30% MND50%', '6,125,,Spining Scythe,1,,Area,Radius,1,,,Reverberation / Scission,STR30% ', '6,150,,Vorpal Scythe,1,,,CRT,1,,,Transfixion / Scission,STR35% ', '6,200,SP,Guillotine,4,Silences,,Duration,0.875,,,Induration,STR25% MND25%', '6,225,SP,Cross Reaper,2,,,Damage,2,2.25,2.5,Distortion,STR30% MND30%', '6,240,Quest,Spiral Hell,1,,,Damage,1.375,1.875,3.625,Distortion / Scission,STR50% INT50%', '6,Myth,Myth,Insurgency ,4,,,Damage,0.5,0.75?,1,Fusion / Compression,STR20% INT20%', '7,5,,Double Thrust,2,,,Damage,1,1.5,2,Transfixion,STR30% ', '7,30,,Thunder Thrust,Lightning,,Magic:Lightning,Damage,1.5,2,2.5,Transfixion / Impaction,STR20% INT20%', '7,70,EX,Raiden Thrust,Lightning,,Magic:Lightning,Damage,1,2,3,Transfixion / Impaction,STR30% INT30%', '7,100,,Leg Sweep,1,Stuns,Long Stuns,Chance,1,,,Impaction,STR30% ', '7,150,,Penta Thrust,5,,,Accuracy,1,,,Compression,STR20% DEX20%', '7,175,,Vorpal Thrust,1,,,CRT,1,,,Reverberation / Transfixion,STR20% AGI20%', '7,200,SP,Skewer,3,,,Accuracy,1,,,Transfixion / Impaction,STR35% ', '7,225,SP,Wheeling Thrust,1,,,Ignore defense,1.75,,,Fusion,STR50% ', '7,240,Quest,Impulse Drive,2,,,Damage,1,1.5,2.5,Gravitation / Induration,STR50% ', '7,Myth,Myth,Drakesbane ,4,,,CRT,1,,,Fusion / Transfixion,STR50% ', '8,5,,Blade:Rin,1,,,CRT,1,,,Transfixion,STR20% DEX20%', '8,30,,Blade:Retsu,2,Paralyzes,,Duration,1,,,Scission,STR20% DEX20%', '8,70,,Blade:Teki,1,,Physical:Water,Damage,0.5,0.75,1,Reverberation,STR20% INT20%', '8,100,,Blade:To,1,,Physical:Ice,Damage,0.5,0.75,1,Induration / Detonation,STR30% INT30%', '8,150,,Blade:Chi,2,,Physical:Earth,Damage,0.5,0.75,1,Transfixion / Impaction,STR20% INT20%', '8,170,,Blade:Ei,Darkness,,Magic:Darkness,Damage,1,1.5,2,Compression,STR30% INT30%', '8,200,SP,Blade:Jin,3,,,CRT,1,,,Detonation / Impaction,STR30% DEX30%', '8,225,SP,Blade:Ten,1,,,Damage,2.5,2.75,3,Gravitation,STR30% DEX30%', '8,250,ク,Blade:Ku,5,,,Accuracy,1,,,Gravitation / Transfixion,STR10% DEX10%', '8,Myth,Myth,Blade:Kamu,1,Accuracy-10(60s-1202),,Duration,1,,,Fragmentation / Compression,STR50% INT50%', '9,5,,Tachi:Enpi,2,,,Damage,1,1.5,2,Transfixion / Scission,STR30% ', '9,30,,Tachi:Hobaku,1,Stuns,,Chance,1,,,Induration,STR30% ', '9,70,,Tachi:Goten,1,,Physical;Lightning,Damage,0.5,0.75,1,Transfixion / Impaction,STR30% ', '9,100,,Tachi:Kagero,1,,Physical:Fire,Damage,0.5,0.75,1,Liquefaction,STR50% ', '9,150,,Tachi:Jinpu,2,,Physical:Wind,Damage,0.5,0.75,1,Scission / Detonation,STR30% ', '9,175,,Tachi:Koki,1,,Physical:Light,Damage,0.5,0.75,1,Reverberation / Impaction,STR30% MND50%', '9,200,SP,Tachi:Yukikaze,1,Blinds,,Damage,1.5625,1.875,2.5,Induration / Detonation,STR75% ', '9,225,SP,Tachi:Gekko,1,Mutes,,Damage,1.5625,1.875,2.5,Distortion / Reverberation,STR75% ', '9,250,Quest,Tachi:Hanaguruma,1,Paralizes,,Damage,1.5625,1.875,2.5,Fusion / Compression,STR75% ', '9,Myth,Myth,Tachi:Rana,3,,,Accuracy,1,,,Gravitation / Induration,STR35% ', '10,5,,Shining Strike,Light,,Magic:Light,Damage,1,1.75,2.5,Impaction,STR20% MND20%', '10,40,EX,Seraph Strike,Light,,Magic:Light,Damage,1,2,3,Impaction,STR30% MND30%', '10,70,,Brainshaker,1,Stuns,,Chance,1,,,Reverberation,STR30% ', '10,100,,Starlight,,,Restore MP,Amount,1,2,3,, ', '10,125,EX,Moonlight,,,Restore MP Area,Amount,1,1.5,2,, ', '10,150,,Skullbreaker,1,Low INT,,Chance,1,,,Induration / Reverberation,STR35% ', '10,175,,True Strike,1,,,Accuracy,1,,,Detonation / Impaction,STR50% ', '10,200,EX,Judgment,1,,,Damage,2,2.5,4,Impaction,STR32% MND32%', '10,220,SP,Hexa Strike,6,,,CRT,1,,,Fusion,STR20% MND20%', '10,230,Quest,Black Halo,2,,,Damage,1.5,2.5,3,Fragmentation / Compression,STR30% MND50%', '10,Myth,Myth,Mystic Boon,1,,Damage transfer MP,Damage,1,1.5,2,,STR30% MND50%', '11,5,,Heavy Swing,1,,,Damage,1,1.25,2.25,Impaction,STR30% ', '11,40,,Rock Crusher,Earth,,Magic;Earth,Damage,1,2,2.5,Impaction,STR20% INT20%', '11,70,EX,Earth Crusher,Erath,,Magic:Earth、Area,Damage,1,2.3125,3.625,Detonation / Impaction,STR30% INT30%', '11,100,,Starburst,Light/Darkness,,Magic:Light or Darkness,Damage,1,2,2.5,Compression / Reverberation,なし ', '11,150,EX,Sunburst,Light/Darkness,,Magic:Light or Darkness,Damage,1,2.5,4,Compression / Reverberation,なし ', '11,175,,Shell Crusher,1,DEF-25%,,Duration,1,,,Detonation,STR35% ', '11,200,,Full Swing,1,,,Damage,1,3,5,Liquefaction / Impaction,STR50% ', '11,215,,Spirit Taker,1,,Damage transfer MP,Damage,1,1.5,2,,INT50% MND50%', '11,230,Quest,Retribution,1,,,Damage,2,2.5,3,Gravitation / Reverberation,STR30% MND50%', '11,Myth,Myth,Vidohunir,Darkness,low MAG-DEF -10(60m-180m),Magic:Darkness,Duration,1.75,,,Fragmentation / Distortion,INT30% ', '11,Myth,Myth,Garland of Bliss,Light,Low DE F-12.5%,Magic:Light,Duration,,,,Fusion / Reverberation, ', '11,Myth,Myth,Omniscience,Darkness,Low MAG-ATK,Magic:Darkness,Duration,2,,,Gravitation / Transfixion,MND30% ', '12,5,EX,Flaming Arrow,1,,Physical:Fire,Damage,0.5,0.75,1,Liquefaction / Transfixion,STR16% AGI25%', '12,40,EX,Piercing Arrow,1,,0%-50%,Ignore defense,1,,,Reverberation / Transfixion,STR16% AGI25%', '12,80,EX,Dulling Arrow,1,Low INT,,CRT,1,,,Liquefaction / Transfixion,STR16% AGI25%', '12,175,EX,Sidewinder,1,,Low Accuracy,Accuracy,5,,,Reverberation / Transfixion / Detonation,STR16% AGI25%', '12,200,SP,Blast Arrow,1,,short-ranged,Accuracy,2,,,Induration / Transfixion,STR16% AGI25%', '12,225,SP,Arching Arrow,1,,,CRT,3.5,,,Fusion,STR16% AGI25%', '12,250,Quest,Empyreal Arrow,1,,,Damage,1.5,2,2.5,Fusion / Transfixion,STR16% AGI25%', '13,5,EX,Hot Shot,1,,Physical:Fire,Damage,0.5,0.75,1,Liquefaction / Transfixion,AGI30% ', '13,40,EX,Split Shot,1,,0%-50%,Ignore defense,1,,,Reverberation / Transfixion,AGI30% ', '13,80,EX,Sniper Shot,1,Low INT,,CRT,1,,,Liquefaction / Transfixion,AGI30% ', '13,175,EX,Slug Shot,1,,Low Accuracy,Accuracy,5,,,Reverberation / Transfixion / Detonation,AGI30% ', '13,200,SP,Blast Shot,1,,short-ranged,Accuracy,2,,,Induration / Transfixion,AGI30% ', '13,225,SP,Heavy Shot,1,,,CRT,3.5,,,Fusion,AGI30% ', '13,250,Quest,Detonator,1,,,Damage,1.5,2,2.5,Fusion / Transfixion,AGI30% ', '13,Myth,Myth,Trueflight,Light,,Magic:Light,Damage,3.89,4.39,4.89,Fragmentation / Scission,AGI30% ', '13,Myth,Myth,Leaden Salute,Darkness,,Magic:Darkness,Damage,4,4.25,4.75,Gravitation / Transfixion,AGI30% ' ); @spjoblist = ( '1,17', # 格闘 モか '5,18', # 短剣 シ踊 '6', # 片手剣 ナ '6,7', # 両手剣 ナ暗 '0,10', # 片手斧 戦獣 '0', # 両手斧 戦 '7', # 両手鎌 暗 '11', # 両手槍 竜 '13', # 片手刀 忍 '14', # 両手刀 侍 '2', # 片手棍 白 '', # 両手棍 なし '8', # 弓術 狩 '8' # 射撃 狩 ); @wsparam = ( 'Skill', 'Type', 'Name', 'Times','Additional','Effect','TP','Damage Correct','Skill Chain','Status Correct' ); @synergytech = ( 'Feed fewell', 'Thwack furnace', 'Operate pressure handle', 'Operate safety lever', 'Repair furnace', 'Recycle strewn fewell' ); } ########################## # data.cgi 保存形式:Tab Separated Format # 0 $no 登録番号 # 1 $name 名前 # 2 $pass パスワード(平文) # 3 $anon 表示/非表示 # 4 $race 種族、性別 → 参考 setup.cgi @racelist # 5 $relm 所属国 # 6 $mainjob メインジョブ ジョブはlev[]のインデックス # 7 $supportjob サポートジョブ ジョブはlev[]のインデックス # 8 $prof プロフィール公開 # 9 $handle ハンドル # 10 $polhn POL内ハンドル # 11 $mail メールアドレス # 12 $home ホームページURL # 13 $comment2 プロフィール用コメント (プロフィール参照時用) # 14 $point 個人戦績 # 15 $class 称号 # 16 $timenow 更新日付 # 17 $comment コメント (一覧表示用) # 18 $mrank ミッションランク # 19 $etc[0] フェイスタイプ → 参考 setup.cgi @facetypelist # 20 $etc[1] 合成スキルランク  Commna Separated Format #  → 参考 $prod[0]〜$prod[]、setup.cgi @rankilist # 20 $etc[2] 戦闘スキル(武器、防御、魔法) Commna Separated Format #  → 参考 setup.cgi @skilllist 格闘〜青魔法 # 22 $prod[0] 鍛冶スキル # 23 $prod[1] 裁縫スキル # 24 $prod[2] 錬金スキル # 25 $prod[3] 木工スキル # 26 $prod[4] 彫金スキル # 27 $prod[5] 革細工スキル # 28 $prod[6] 骨細工スキル # 29 $prod[7] 釣りスキル # 30 $prod[8] 調理スキル # 31 $prod[9] 練成スキル Comma Separated Format #  → 練成スキル,各練成テクニックレベル # 32 $prod[10] 装備 Commna Separrated Format 中身はequip.pl # 33 $prod[11] カスタムフィールド Commna Separrated Format # 34 $prod[12] メリポ(表示用) # 35 $prod[13] メリポ # 36 $prod[14] プロフィール画像 # 37 $prod[15] ミッション進行 Commna Separeted Format #  → 参考 @mlist:プロマシア〜カンパニエ叙勲 #    $mlist[16]はアサルト @aslist参考 ただしナイズルは$mlist[17] # 38 $lev[0] 戦のレベル # 39 $lev[1] モのレベル # 40 $lev[2] 白のレベル # 41 $lev[3] 黒のレベル # 42 $lev[4] 赤のレベル # 43 $lev[5] シのレベル # 44 $lev[6] ナのレベル # 45 $lev[7] 暗のレベル # 46 $lev[8] 狩のレベル # 47 $lev[9] 吟のレベル # 48 $lev[10] 獣のレベル # 49 $lev[11] 竜のレベル # 50 $lev[12] 召のレベル # 51 $lev[13] 忍のレベル # 52 $lev[14] 侍のレベル # 53 $lev[15] 青のレベル # 54 $lev[16] コのレベル # 55 $lev[17] かのレベル # 56 $lev[18] 踊のレベル # 57 $lev[19] 学のレベル ######################### # triggerlist.cgi 保存形式 Tab Separeted Format # 0 $no 登録番号 # 1 $trtype トリガー種別 # 2 $admmem トリガー管理者指定 # data.cgiの$nameをCommma Separeted Formatでリスト化したもの # 3 $entmem トリガーコンテンツ参加者 # データ形式は$admmemと同じ # 4 @triggers 保持トリガー情報 # $nameと保持しているトリガー情報を,で接続したもの必要な人数分繰り返す #日本語らいぶらり require './jcode.pl'; #画像らいぶらり require('image_getsize.pl'); #セッションらいぶらり require './session.pl'; $color[0]=$color0; $color[1]=$color1; $color[2]=$color2; $color[3]=$color3; $color[4]=$color4; $color[5]=$color5; $color[6]=$color6; $color[7]=$color7; $color[8]=$color8; $color[9]=$color9; $color[10]=$color10; #スキルランク # from FFXI skill capture(http://www.ausystem.org/~aushacho/gbox/ff/skill.html) #skilllist*** ='格短片両片両両両片両片両弓射投ガ回盾受神回強弱精暗歌弦管忍召青'); #skilllist*** ='闘剣剣剣斧斧鎌槍刀刀棍棍術撃擲ド避盾流聖復化体霊黒唱楽楽術喚魔'); $skillrank[0] ='D B-B B+A A+B+B-_ _ B-B D D D _ C C+C-_ _ _ _ _ _ _ _ _ _ _ _ '; #戦 $skillrank[1] ='A+_ _ _ _ _ _ _ _ _ C+B _ _ E A B+_ E _ _ _ _ _ _ _ _ _ _ _ _ '; #モ $skillrank[2] ='_ _ _ _ _ _ _ _ _ _ B+C+_ _ E _ E D _ A A+C+C _ _ _ _ _ _ _ _ '; #白 $skillrank[3] ='_ D _ _ _ _ E _ _ _ C+B-_ _ D _ E _ _ _ _ E C+A+A _ _ _ _ _ _ '; #黒 $skillrank[4] ='_ B B _ _ _ _ _ _ _ D _ D _ F _ D F E E C-B+A+C+E _ _ _ _ _ _ '; #赤 $skillrank[5] ='E A D _ _ _ _ _ _ _ E _ C-C+D _ A+F A _ _ _ _ _ _ _ _ _ _ _ _ '; #シ $skillrank[6] ='_ C-A+B _ _ _ E _ _ A A _ _ _ _ C A+C B+C D _ _ _ _ _ _ _ _ _ '; #ナ $skillrank[7] ='_ C B-A B-B-A+_ _ _ C-_ _ E _ _ C _ E _ _ _ C B+A _ _ _ _ _ _ '; #暗 $skillrank[8] ='_ B-D _ B-_ _ _ _ _ E _ A A C-_ E _ _ _ _ _ _ _ _ _ _ _ _ _ _ '; #狩 $skillrank[9] ='_ B-C-_ _ _ _ _ _ _ D C+_ _ E _ D _ E _ _ _ _ _ _ C C C _ _ _ '; #吟 $skillrank[10]='_ C+E _ A _ B-_ _ _ D _ _ _ _ _ C E C-_ _ _ _ _ _ _ _ _ _ _ _ '; #獣 $skillrank[11]='_ E C-_ _ _ _ A+_ _ E B-_ _ _ _ C-_ C-_ _ _ _ _ _ _ _ _ _ _ _ '; #竜 $skillrank[12]='_ E _ _ _ _ _ _ _ _ C+B _ _ _ _ E _ _ _ _ _ _ _ _ _ _ _ _ A _ '; #召 $skillrank[13]='E C+C _ _ _ _ _ A C-E _ E C A _ A _ A _ _ _ _ _ _ _ _ _ A _ _ '; #忍 $skillrank[14]='_ E C+_ _ _ _ B-_ A+E _ C+_ C+_ B+_ A _ _ _ _ _ _ _ _ _ _ _ _ '; #侍 $skillrank[15]='_ _ A _ _ _ _ _ _ _ B-_ _ _ _ _ C-_ D _ _ _ _ _ _ _ _ _ _ _ A+'; #青 $skillrank[16]='_ B+B-_ _ _ _ _ _ _ _ _ _ B C+_ D _ A _ _ _ _ _ _ _ _ _ _ _ _ '; #コ $skillrank[17]='B+C-_ _ _ _ _ _ _ _ D _ _ _ C+B B _ D _ _ _ _ _ _ _ _ _ _ _ _ '; #か $skillrank[18]='D B+D _ _ _ _ _ _ _ _ _ _ _ C+_ B+_ B _ _ _ _ _ _ _ _ _ _ _ _ '; #踊 $skillrank[19]='_ D _ _ _ _ _ _ _ _ C+C+_ _ D _ E _ E D D D D D D _ _ _ _ _ _ '; #学 #keyword read if(!open(IN,"$keyfile")){$key_avail=0;} @keyword=; close IN; # # MAIN ROUTINEs # $agent=$ENV{'HTTP_USER_AGENT'}; &form_read; &ip_ban; &get_cookie; if($session_id eq "" && $c_session_id ne ""){$session_id=$c_session_id}; #print "function : $function, mode = $mode, limit = $limit, table[limit] = $table[$limit]
\n"; if($ktai eq "off"){ $brawser="PC"; $method="post"; } else { if( $agent =~ /J-PHONE/){ $ktai="on"; @user_agent = split(/\//,$ENV{'HTTP_USER_AGENT'}); if ($user_agent[1] >= 3) { $method="post"; } else { $method="get"; } } elsif($agent =~ /DoCoMo/ || $agent =~ /Vodafone/ || $agent =~ /UP.Browser/ || $agent =~ /SoftBank/){ $ktai="on"; $method="post"; } else { $brawser="PC"; # $method="post enctype='multipart/form-data' "; $method="post"; } } if($function eq "rss"){ &rss_write; &header; &list; } if($ktai eq "on"){&keitai;} if($function eq $button[0]){ #PROFED &set_cookie; &login; } elsif($function eq 'meritpoint' && $mpoint == 1){ &set_cookie; require("mpoint.pl"); &main_mpoint; } elsif($function eq 'customfield'){ &set_cookie; &custom_field; } elsif($function eq 'regist_word' && $key_avail == 1){ &set_cookie; ®ist_word; } elsif($function eq 'send' && $mes_avail == 1){ &set_cookie; &send_message; } elsif($function eq 'check' && $mes_avail == 1){ &set_cookie; &check_message; } elsif($function eq "new"){ #NEWREG &set_cookie; &header; &new_regist; } elsif($function eq $button[1]){ #DWRITE &set_cookie; &write_diary; } elsif($function eq "editdiary"){ #DMODIF &set_cookie; &edit_diary; } elsif($function eq "resdiary"){ #RESDIA &res_diary; } elsif($function eq "faq"){ &header; &faq; } elsif($function eq "prof" || $function eq "profdetail" || $function eq "profdetail2"){ &c_check; $topic="Profile:$name -$topic"; &header; if($c_match){ &prof;} else { print "ログイン状態でないので、閲覧することはできません。"; } } elsif($function eq "master"){ &header; require("master.pl"); &master; } else { &c_check; &header; &list; } &footer; # # SUB ROUTINE # # regist_word:単語登録 sub regist_word{ if(!open(IN,"$datafile")){&header; &error_message('datafile error/system','data file access failed.');} @all=; close IN; $match=""; foreach $i(@all){ ($r_no,$r_name,$r_pass,$r_dummy)=split(/\t/,$i); if($r_name eq $name && $pass eq $r_pass){ $match=$i; } } if($match eq ""){&header; &error_message('id/pass error','access failed.');} if($mode ne "regist"){ &header; print <<"EOM";
キーワード追加

ワード追加(確認なしで激しく追加)
キーワード
ふりがな
説明
Go Top
進行状況

新規日記および日記修正時にキーワードに自動リンク

キーワードページにはヒストリが追加されます。
レスには非対応というかわざと対応してない。

今後の予\定
キーワード内容追加
ヒストリ件数制御

キーワードリスト
EOM foreach $i(@keyword){ ($km,$kno)=split(/\t/,$i); print "$km
"; } } else { #ワード登録 if($title eq ""){&header; &error_message('no dat 385','data file access failed.');} $maxno=$#keyword+2; push(@keyword,"$title\t$maxno\t\n"); if(!open(OUT,">$keyfile")){ &header; &error_message('datafile error/system','data file access failed.'); } print OUT @keyword; close OUT; $htmlfile="$keydir$maxno.html"; if(!open(OUT,">$htmlfile")){ &header; &error_message('datafile error/system','data file access failed.'); } print OUT << "EOM"; $guild_name Keyword-[ $title ]
$guild_name Keyword
$title ($comment)

$body

・このキーワードが使われた日記

Script by senobeya.com
FF11 Member Registration System $version
EOM close OUT; chmod 0666,$htmlfile; &reload_header; print "
キーワード登録完了
"; print "新規キーワード[ $title ]を追加しました。自動的にトップページに戻ります
"; } } # END regist_word:単語登録 # login:登録ユーザーログイン sub login { if(!open(IN,"$datafile")){&header; &error_message('datafile error/system','data file access failed.');} @all=; close IN; $match=""; foreach $i(@all){ ($r_no,$r_name,$r_pass,$r_dummy)=split(/\t/,$i); if($r_name eq $name && $pass eq $r_pass){ $match=$i; } } if($match eq ""){ &header; &error_message('id/pass error','access failed.'); } if($session_check){ $session_id=&gmr_ses::new_session($name); } if ($mode eq "login"){ &set_cookie; &header; &login_enter; } elsif($mode eq "menu"){ &set_cookie; &header; &login_menu; } elsif($mode eq "modify"){ if( ( $all eq 'triggernew' ) or ( $all eq 'triggeredit' ) ){ require("trigger.pl"); &login_modify_trigger; } elsif( $all eq 'triggerdel' ){ require("trigger.pl"); &login_modify_trigger_del; } else{ &login_modify; } } else { &set_cookie; &header; &login_enter; } } # END login:登録ユーザーログイン # new_regist:メンバー新規登録 sub new_regist{ if(($gpass ne $reg_pass && $reg_mode==0)){ &error_message('illegal login','password is not correct.'); } if($mode eq "regist"){ &new_regist_regist; } else { &new_regist_normal; } } # END new_regist:メンバー新規登録 # list:リスト表示 sub list{ if(!open(IN,"$datafile")){ &error_message('datafile error578','data file access failed.'); } @all=; close IN; if($sort ne "" && $limit != 8){ &sort_table; } print "
"; $vmode="Mode: $modelist[$limit]"; if($limit==1){ if($level==1){ $vmode="$vmode / Level"; } else { $vmode="$vmode / Job"; } } print ""; &make_salt; #メニュー表示 if($pulldown_menu == 1){ print ""; print ""; } else { print ""; } #メニュー表示おわり print <<"EOM";
$guild_name Member List$vmode
$menux[3]$menux[1] / "; print "$menux[2] / "; print ""; print "\n"; if($bbspage){ print " / $menux[0]"; } print "
$menux[3]$menux[1] / "; print "$menux[2] / "; for($j=0;$j<$#menu+1;$j++){ if($tablelevel[$j] eq ""){ $tablelevel[$j]=$level; } print "$menu[$j] "; } if($bbspage){ print " / $menux[0]"; } print "
Login : name pass EOM if(!$diaryallow){ print ""; } if($key_avail){ print ""; } if($mpoint ==1){ print ""; } if($mes_avail){ #新規メッセージチェック print "
"; if (-e "$mesdir$c_name.cgi") { if(!open(IN,"$mesdir$c_name.cgi")){&error_message('datafile error490','data file access failed.');} @mes=; close IN; $k=0; for $i(@mes){ ($j,$dummy)=split(/\t/,$i); $k=$k+$j; } if($k>0){ print "$k 件の新しいメッセージがあります。"; } } print "Message :"; } print <<"EOM";
EOM if($reg_mode==0){ print ""; } print ""; print "

"; if(!open(IN,"message.tbl")){ $osirase="no" } else { $osirase=; $osirase =~ s/\n//g; $osirase =~ s/\r//g; $osirasebody=; close IN; if($osirase ne "no" && $osirase ne ""){ print "
$osirase
$osirasebody
"; } } $members=$#all+1; if($language ne "English"){ print "\n"; } else { print "
現在の登録メンバー数:$members
\n"; } print "
Now Registed member:$members people"; if($level==1){ print ""; for($i=0;$i<$#color+1;$i++){ $ls=$i*10; $le=$i*10+9; print ""; } print ""; } else { print ""; } print "
 Lv$ls-$le   
 main job    support job 
"; $call=$tablelist[$limit]; if( ( $call eq 'table_weapons' ) or ( $call eq 'table_armor1' ) or ( $call eq 'table_armor2' ) or ( $call eq 'table_armor3' ) or ( $call eq 'table_armor4' ) or ( $call eq 'table_armor5' ) ){ require( 'equip.pl' ); } else { require('table.pl'); } # print "calling $call
\n"; if($c_match){ &$call; } else { print 'ログインができていない状態です。まずログインしてください。'; } print <<"EOM";
EOM } # END list:リスト表示 # faq:使い方表示 sub faq { if($reg_mode == 0){ $message="あらかじめ設定されているマスターパスワードを下のフォームに入力し、"; } print <<"EOM";
使い方
メンバーの新規登録
 メンバーの新規登録には$message新規登録ボタンを押します。
 新規登録モードに入りますので、次に新規メンバーの名前、パスワード他のデータを入れる画面が出てくるので、  必要事項を入力してください。
 ここで入れるパスワードは、そのメンバー専用のパスワードとなります。

メンバーのデータ修正
 メンバーは登録したnameとパスワードを入れることでそのデータを随時修正することができます。
 必要なデータを入力して、修正ボタンを押してください。

メンバーの削除
 マスターモードを用いて行います。

閲覧方法
タイトル右上に表\示モードが出ています。

表\のモード
Simple:表\示内容を制限したもので表\示します。
Job /Job:ジョブ情報の表\示。メイン・サポートのジョブの背景色が変わります
Job /Level:ジョブ情報の表\示。レベルによって色分けされた背景色となります
Production:生産スキルに関する情報を表\示します
Status:その他さまざまな情報を表\示します
Full:一覧性の高い表\で登録内容を表\示します。
Full2:プロフィールを除く登録内容を表\示します。
Profile:プロフィールと日記の閲覧モードです

プロフィールと日記
名前をクリックするとプロフィールを閲覧することができます。日記アイコン()が出ている場合は、その人の日記も閲覧できます。
UPアイコン()が出ている場合は24時間以内に日記が更新された事を示します。
EOM if($diaryres ==1){ print "日記の下にコメントをつけることが可能\になっています。
"; } print "
[登録システム入り口][使い方][ホームページへ戻る]
"; } # END faq:使い方表示 # form_read:汎用サブルーチン。使いまわし&パクり。そしてだんだんと汎用でなくなってくるという様子 sub form_read { @upfiles = (); # METHODがPOSTの時の処理 if ($ENV{'REQUEST_METHOD'} eq "POST" && $ENV{'CONTENT_TYPE'} =~ m#^multipart/form-data#) { $buffer1 = ""; $qs = ""; $buffer2 = $ENV{'CONTENT_LENGTH'}; binmode(STDIN); while ($buffer2) { $buffer2 -= sysread(STDIN, $buffer1, $buffer2); $qs .= $buffer1; } $delimita = $1 if $qs =~ /^([^\r\n]*)/; foreach (split(/$delimita/,$qs)){ if ($_ =~ / name=\"(\w*)\"\r\n/){ $key = $1; } elsif ($_ =~ / name=\"(\w*)\"; filename=\"(.+)\"\r\n/i){ ($key,$upfile)=($1,$2); $upct = $1 if $_ =~ /Content-Type: ?(.*)\r\n/i; } else{ next; } $value = (split(/\r\n\r\n/,$_,2))[1]; $value =~ s/[\r\n]+$//g; # $value =~ s/\r\n$//g; if ($key =~ /^upfile[1-9]*/ && $upfile ne ""){ push(@upfiles, $upfile); $upfile{$upfile} = $value; $upct{$upfile} = lc($upct); if($key eq "upfile"){ $in{'upfile'}=$value; $in{'upfilename'}=$upfile; $in{'upct'}=lc($upct); } } else { &jcode::convert(\$value,'sjis'); # 入力値の無害化 $value =~ s//>/g; $value =~ s/\t//g; $value =~ s/\r\n/
/g; $value =~ s/\n/
/g; $value =~ s/\r/
/g; # $value =~ s/\,//g; # $value =~ s/'/’/g; $FORM{$key} = $value; } } } else { # METHODがGETの場合の処理 if($ENV{'REQUEST_METHOD'} eq 'GET' || $ENV{'REQUEST_METHOD'} eq 'HEAD') { $buffer = $ENV{'QUERY_STRING'}; } elsif ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); # 入力値の無害化 $value =~ s//>/g; $value =~ s/\n//g; $value =~ s/\t//g; $value =~ s/\r/
/g; # $value =~ s/\,//g; $FORM{$name} = $value; } } $no=$FORM{'no'}; $trino=$FORM{'trino'}; $name=$FORM{'name'}; $name2=$FORM{'name2'}; $pass=$FORM{'pass'}; $gpass=$FORM{'gpass'}; $function=$FORM{'function'}; $mode=$FORM{'mode'}; $all=$FORM{'all'}; $anon=$FORM{'anon'}; $race=$FORM{'race'}; $relm=$FORM{'relm'}; $mainjob=$FORM{'mainjob'}; $supportjob=$FORM{'supportjob'}; $lev[0]=$FORM{'lev0'}; $lev[1]=$FORM{'lev1'}; $lev[2]=$FORM{'lev2'}; $lev[3]=$FORM{'lev3'}; $lev[4]=$FORM{'lev4'}; $lev[5]=$FORM{'lev5'}; $lev[6]=$FORM{'lev6'}; $lev[7]=$FORM{'lev7'}; $lev[8]=$FORM{'lev8'}; $lev[9]=$FORM{'lev9'}; $lev[10]=$FORM{'lev10'}; $lev[11]=$FORM{'lev11'}; $lev[12]=$FORM{'lev12'}; $lev[13]=$FORM{'lev13'}; $lev[14]=$FORM{'lev14'}; $lev[15]=$FORM{'lev15'}; $lev[15]=~ s/\n//g; #ジョブ追加対策(応急措置) $lev[16]=~ s/\n//g; #ジョブ追加対策(応急措置) $lev[16]=$FORM{'lev16'}; $lev[17]=$FORM{'lev17'}; $lev[18]=$FORM{'lev18'}; $lev[19]=$FORM{'lev19'}; $prod[0]="$FORM{'prod0'}"; $prod[1]="$FORM{'prod1'}"; $prod[2]="$FORM{'prod2'}"; $prod[3]="$FORM{'prod3'}"; $prod[4]="$FORM{'prod4'}"; $prod[5]="$FORM{'prod5'}"; $prod[6]="$FORM{'prod6'}"; $prod[7]="$FORM{'prod7'}"; $prod[8]="$FORM{'prod8'}"; # $prod[9]="$FORM{'prod9'}"; $prod[14]=$FORM{'profimage'}; #プロフ画像に転用 $prod[11]="$FORM{'prod11'}"; #カスタムフィールドデータ $prod[12]="$FORM{'prod12'}"; #メリポデータ(表示用) $prod[13]="$FORM{'prod13'}"; #生メリポデータ $prod[12] =~ s/<//g; for ($j=1;$j<$#custom_field+1;$j++){ $custom[$j]=$FORM{"custom$j"}; $custom[$j] =~ s/,/‚/g; } # prod[9]は練成、prod[11]はカスタムフィールド、prod[12]とprod[13]はメリポに使用。 $prod[9] = $FORM{'syn'}; for ($j=0; $j<=$#synergytech; $j++){ $prod[9] .= "," . $FORM{"synt$j"}; } #&conv_zenkaku; $ktai=$FORM{'ktai'}; for ($j=0;$j<10;$j++){ $prod_r[$j]=$FORM{"prod_r$j"}; } $etc[1]=join(",", @prod_r); for ($j=0;$j<$#skilllist+1;$j++){ $skill[$j]=$FORM{"skill$j"}; } $etc2skill = join(",", @skill); # #習得WS追加対応 $etc2ws = ""; for ($j=0;$j<=$#mwslist;$j++){ $etc2ws .= $FORM{"ws$j"}; } # $etc[2]=join( '/', join(",", @skill), $ws ); # 取得装備対応 if( ( ($all eq 'equip') and ($mode eq "modify") ) or ($function eq "master") ){ require("equip.pl"); &def_equip_list(); # temp変数ばっかで読みにくい・・・ $prod[10] = ""; # 0〜3 は武器リスト for( $i=0; $i<=3; $i++ ){ @templist = @{$equipdeflist[$i]}; $tempstr = ""; for( $j=0; $j<=$#templist; $j++ ){ $fstr = $equiplistname[$i] . '_' . $j; $tempstr .= $FORM{$fstr}; } $prod[10] .= "$tempstr,"; } # 4〜12は防具リスト for( $i=4; $i<=12; $i++ ){ @templist = @{$equipdeflist[$i]}; $tempstr = ""; for( $j=0; $j<$#templist; $j++ ){ $tempstr2=""; @templist2 = split( /\,/, $templist[$j+1]); for( $k=0; $k<=$#templist2; $k++ ){ $fstr = $equiplistname[$i] . '_' . $j . '_' . $k; $tempstr2 .= $FORM{$fstr}; } $tempstr .= "$tempstr2/"; } $prod[10] .= "$tempstr,"; } } if( $all eq 'triggeredit') { require("trigger.pl"); &def_trigger_list(); if( !open( IN, "$triggerfile" ) ){ &header; &error_message( 'datafie error/system', 'trigger file access failed'); } my ( $t_no, $t_type, $t_adm, $t_ent, @t_tris, @t_adm_list, @t_ent_list, @trigger ); foreach my $r ( ){ if( $r =~ /^#/ ){ next; } ($t_no, $t_type, $t_adm, $t_ent, @t_tris) = split( /\t/,$r ); if( $trino == $t_no ){ $t_tri = $r; } } close IN; ($t_no, $t_type, $t_adm, $t_ent, @t_tris) = split( /\t/, $t_tri ); @entlist = split( /\,/, $t_ent); @triggerset = @{$triggerdeflist[$t_type]}; $listlength1 = $#triggerset; $t_tri = ""; foreach $i ( sort @entlist ){ $tempstr1 = "$i,"; for( $j = 0; $j<$#triggerset; $j++ ){ $tempstr2 = "", @triggername = split( /\,/, $triggerset[0] ); @triggerlist = split( /\,/, $triggerset[$j+1] ); $listlength2[$j] = $#triggerlist+1; for( $k = 0; $k < $listlength2[$j]; $k++ ){ $fstr = 'tri_' . $i . '_'. $j . '_' . $k; $tempstr2 .= sprintf( "%1d", $FORM{$fstr} ); } $tempstr1 .= $tempstr2 . "/"; } chop( $tempstr1 ); $t_tri = $t_tri . $tempstr1 ."\t"; } chop( $t_tri ); } if( $all eq 'triggernew') { my @namelist; @namelist = split( /\,/ ,$FORM{'namelist'} ); $type = $FORM{'type'}; foreach $i ( sort @namelist ){ $str = 'cond_' . $i; $status = $FORM{ $str }; if( $status == 2 ){ push( @admlist, $i ); push( @entlist, $i ); } elsif( $status == 1){ push( @entlist, $i ); } } } if($ktai eq "on" && $function ne "mission"){ $prod[15]="$FORM{'prod15'}"; } else { for ($j=0;$j<$#mlist+2;$j++){ $mission[$j]=$FORM{"mission$j"}; } $FORM{"assault0"}=sprintf("%x",$FORM{"assault0"}); for($j=0;$j<$#aslist+1;$j++){ $mission[16]=$mission[16].$FORM{"assault$j"}; } $prod[15]=join(",", @mission); #進行度フラグに転用 } $ietc=$FORM{'ietc'}; $etc1=$FORM{'etc1'}; $mrank=$FORM{'mrank'}; $prof=$FORM{'prof'}; $handle=$FORM{'handle'}; $polhn=$FORM{'polhn'}; $mail=$FORM{'mail'}; $home=$FORM{'home'}; $comment2=$FORM{'comment2'}; $point=$FORM{'point'}; $class=$FORM{'class'}; $comment=$FORM{'comment'}; $sort=$FORM{'sort'}; $level=$FORM{'level'}; $limit=$FORM{'limit'}; $body=$FORM{'body'}; $body2=$FORM{'body2'}; $title=$FORM{'title'}; $page=$FORM{'page'}; $etc[0]=$FORM{'ftype'}; $imgdel=$FORM{'imgdel'}; $session_id=$FORM{'sesid'}; if($page eq ""){$page=1;} if($level eq "" ){$level=$level_mode;} if($limit eq ""){$limit=$limit_table;} #ソート条件未指定時標準ソート条件設定 if( $default_sort != 0 && $limit==13 && $sort eq "" && $function eq ""){ $mode=$default_mode; $sort=$default_sort; $function=$default_function; $no=$default_no; } if( $default_sort==16 && $sort eq "" && $function eq ""){ $mode=$default_mode; $sort=$default_sort; } $ln=$FORM{'ln'}; if($ln ne ""){$language=$ln;} # 現在日時を取得し成形 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); @wday_array = ('日','月','火','水','木','金','土'); $mon++; $year=$year-100; if($year<10){ $year="0$year"; } if($mon<10){ $mon="0$mon"; } if($mday<10){ $mday="0$mday"; } if($hour<10){ $hour="0$hour"; } if($min<10){ $min="0$min"; } $rsstime="20$year-$mon-$mday"."T$hour:$min:00+09:00"; $timenow="$year/$mon/$mday/$hour$min"; $today = "$mon/$mday"; $today2= "$year/$mon/$mday $hour:$min"; $rh = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; } ################# #-- 以下スキル表示機能で追加した部分 # ============================================================================= # # スキルキャップ計算 # ============================================================================= # # スキルキャップを計算する # 引数0 ジョブ # 引数1 スキル # 引数2 レベル # $skill_rank <- スキルランク # $skill_cap <- スキルキャップ # add by Pensil # 2003.03.02 Modified by Hally sub expr_skillcap { # ランクをチェック $skill_rank = substr( $skillrank[$_[0]], ($_[1]) * 2, 1 ); $skill_detail = substr( $skillrank[$_[0]], ($_[1]) * 2, 2 ); if ($skill_rank eq "_") { $skill_cap = 0; } else { # -50 if ($_[2] < 51) { if ($skill_rank eq "A") { $skill_cap = ($_[2] - 1) * 3.0 + 6; } if ($skill_rank eq "B") { $skill_cap = ($_[2] - 1) * 2.9 + 5; } if ($skill_rank eq "C") { $skill_cap = ($_[2] - 1) * 2.8 + 5; } if ($skill_rank eq "D") { $skill_cap = ($_[2] - 1) * 2.7 + 4; } if ($skill_rank eq "E") { $skill_cap = ($_[2] - 1) * 2.5 + 4; } if ($skill_rank eq "F") { $skill_cap = ($_[2] - 1) * 2.3 + 4; } # -60 } elsif ($_[2] < 61) { if ($skill_rank eq "A") { $skill_cap = ($_[2] - 50) * 5.0 + 153; } if ($skill_rank eq "B") { $skill_cap = ($_[2] - 50) * 4.9 + 147; } if ($skill_rank eq "C") { $skill_cap = ($_[2] - 50) * 4.8 + 142; } if ($skill_rank eq "D") { $skill_cap = ($_[2] - 50) * 4.7 + 136; } if ($skill_rank eq "E") { $skill_cap = ($_[2] - 50) * 4.5 + 126; } if ($skill_rank eq "F") { $skill_cap = ($_[2] - 50) * 4.3 + 116; } # -70 } elsif ($_[2] < 71) { if ($skill_detail eq "A+") { $skill_cap = ($_[2] - 60) * 4.85 + 203; } if ($skill_detail eq "A ") { $skill_cap = ($_[2] - 60) * 4.10 + 203; } if ($skill_detail eq "B+") { $skill_cap = ($_[2] - 60) * 3.70 + 196; } if ($skill_detail eq "B ") { $skill_cap = ($_[2] - 60) * 3.23 + 196; } if ($skill_detail eq "B-") { $skill_cap = ($_[2] - 60) * 2.70 + 196; } if ($skill_detail eq "C+") { $skill_cap = ($_[2] - 60) * 2.50 + 190; } if ($skill_detail eq "C ") { $skill_cap = ($_[2] - 60) * 2.25 + 190; } if ($skill_detail eq "C-") { $skill_cap = ($_[2] - 60) * 2.00 + 190; } if ($skill_rank eq "D" ) { $skill_cap = ($_[2] - 60) * 1.85 + 183; } if ($skill_rank eq "E" ) { $skill_cap = ($_[2] - 60) * 1.95 + 171; } if ($skill_rank eq "F" ) { $skill_cap = ($_[2] - 60) * 2.00 + 159; } # -73 } elsif ($_[2] < 74) { if ($skill_detail eq "A+") { $skill_cap = ($_[2] - 70) * 5.00 + 251; } if ($skill_detail eq "A ") { $skill_cap = ($_[2] - 70) * 5.00 + 244; } if ($skill_detail eq "B+") { $skill_cap = ($_[2] - 70) * 4.34 + 233; } if ($skill_detail eq "B ") { $skill_cap = ($_[2] - 70) * 4.00 + 228; } if ($skill_detail eq "B-") { $skill_cap = ($_[2] - 70) * 3.00 + 223; } if ($skill_detail eq "C+") { $skill_cap = ($_[2] - 70) * 3.00 + 215; } if ($skill_detail eq "C ") { $skill_cap = ($_[2] - 70) * 2.50 + 212; } if ($skill_detail eq "C-") { $skill_cap = ($_[2] - 70) * 2.00 + 210; } if ($skill_rank eq "D" ) { $skill_cap = ($_[2] - 70) * 2.00 + 201; } if ($skill_rank eq "E" ) { $skill_cap = ($_[2] - 70) * 2.00 + 190; } if ($skill_rank eq "F" ) { $skill_cap = ($_[2] - 70) * 2.00 + 179; } # -75 } elsif ($_[2] < 76) { if ($skill_detail eq "A+") { $skill_cap = ($_[2] - 73) * 5.00 + 266; } if ($skill_detail eq "A ") { $skill_cap = ($_[2] - 73) * 5.00 + 259; } if ($skill_detail eq "B+") { $skill_cap = ($_[2] - 73) * 5.00 + 246; } if ($skill_detail eq "B ") { $skill_cap = ($_[2] - 73) * 5.00 + 240; } if ($skill_detail eq "B-") { $skill_cap = ($_[2] - 73) * 4.00 + 232; } if ($skill_detail eq "C+") { $skill_cap = ($_[2] - 73) * 3.00 + 224; } if ($skill_detail eq "C ") { $skill_cap = ($_[2] - 73) * 3.00 + 219; } if ($skill_detail eq "C-") { $skill_cap = ($_[2] - 73) * 2.00 + 216; } if ($skill_rank eq "D" ) { $skill_cap = ($_[2] - 73) * 1.50 + 207; } if ($skill_rank eq "E" ) { $skill_cap = ($_[2] - 73) * 2.00 + 196; } if ($skill_rank eq "F" ) { $skill_cap = ($_[2] - 73) * 2.00 + 185; } } # -81 elsif ($_[2] < 81) { if ($skill_detail eq "A+") { $skill_cap = ($_[2] - 75) * 5.00 + 276; } if ($skill_detail eq "A ") { $skill_cap = ($_[2] - 75) * 5.00 + 269; } if ($skill_detail eq "B+") { $skill_cap = ($_[2] - 75) * 5.00 + 256; } if ($skill_detail eq "B ") { $skill_cap = ($_[2] - 75) * 5.00 + 250; } if ($skill_detail eq "B-") { $skill_cap = ($_[2] - 75) * 5.00 + 240; } if ($skill_detail eq "C+") { $skill_cap = ($_[2] - 75) * 5.00 + 230; } if ($skill_detail eq "C ") { $skill_cap = ($_[2] - 75) * 5.00 + 225; } if ($skill_detail eq "C-") { $skill_cap = ($_[2] - 75) * 5.00 + 220; } if ($skill_rank eq "D" ) { $skill_cap = ($_[2] - 75) * 4.00 + 210; } if ($skill_rank eq "E" ) { $skill_cap = ($_[2] - 75) * 3.00 + 200; } if ($skill_rank eq "F" ) { $skill_cap = ($_[2] - 75) * 2.00 + 189; } } $skill_cap = int($skill_cap); } $_ = $skill_cap; #print "($_[0],$_[1],$_[2],$skill_rank,$skill_detail,$skill_cap)"; } #必要経験値を計算する # 引数0 レベル # thx for えるさん sub expr_needexp { local($lv) = @_; if ( $lv < 1 ) { $_ = 0; } elsif ( $lv < 8 ) { $_ = $lv * 250 + 250; } elsif ( $lv < 23 ) { $_ = $lv * 200 + 600; } elsif ( $lv < 51 ) { $_ = $lv * 100 + 2800; } elsif ( $lv < 62 ) { $_ = ($lv - 51) * 1200 + 8000; } elsif ( $lv < 70 ) { $_ = ($lv - 61) * 1500 + 20000; } elsif ( $lv < 76 ) { $_ = ($lv - 69) * 2000 + 32000; } else { $_ = ($lv - 75) * 500 + 44000; } } #これまでの獲得経験値を計算する # 引数0 レベル # thx for えるさん sub expr_exp { $lv = $_[0]; if ($lv < 2) { $_ = 0; return; } $lv = $lv -1; if ( $lv < 8 ) { $_ = 125.0 * ($lv * $lv + $lv * 3); } elsif ( $lv < 23 ) { $_ = 100.0 * $lv * $lv + 700.0 * $lv - 1050.0; } elsif ( $lv < 51 ) { $_ = 50.0 * $lv * $lv + 2850.0 * $lv - 24150.0; } elsif ( $lv < 62 ) { $_ = 600.0 * $lv * $lv - 52600.0 * $lv + 1373350.0; } elsif ( $lv < 70 ) { $_ = 750.0 * $lv * $lv - 70750.0 * $lv + 1922350.0; } elsif ( $lv < 76 ) { $_ = 1000.0 * $lv * $lv - 105000.0 * $lv + 3095350.0; } else { $_ = 250.0 * $lv * $lv + 6750.0 * $lv - 1067150.0; } } # writehist:更新履歴への書き込み sub writehist { local($histtype,$histdata) = @_; @outhist = (); push(@outhist, "$histtype\t$timenow\t$ENV{REMOTE_ADDR}\t$histdata"); if(!open(OUT,">>$historyfile")){ &header; &error_message('datafile error726','history file access failed.'); } print OUT @outhist; close OUT; } #-- スキル表示機能で追加した部分ここまで ################# # header:HTMLヘッダの出力 sub header { print "Content-type: text/html\n\n"; print "$topic\n"; if($language ne "English"){ print ''; } else { print ''; } print "\n"; if($bgimg eq ""){ print "\n\n"; } else { print "\n\n"; } if(!open(IN,"header.html")){ $header=""; } else { $headerbody=; close IN; print $headerbody; } } # reload_header:自動リロード用HTMLヘッダ出力 sub reload_header { print "Content-type: text/html\n\n"; print "$topic\n"; if($language ne "English"){ print ''; } else { print ''; } print ""; print '"; print "\n\n"; } # reload_header2:自動リロード用HTMLヘッダ出力 sub reload_header2 { print "Content-type: text/html\n\n"; print "$topic\n"; if($language ne "English"){ print ''; } else { print ''; } print ""; print '"; print "\n\n"; } # footer:フッタ出力 sub footer { print "
"; if($language ne "English"){ print '
Original Script by senobeya.com ver.0.05-0.683
'; print '
Update by elder@DaZarvtra ver.0.69-
'; } else { print '
Script by senobeya.com/ff/e/ ver.0.05-0.683
'; print '
Update by elder@DaZarvtra ver.0.69-
'; } print "
FF11 Member Registration System $version
\n"; if($iconurl ne ""){ print "
Icon by $iconhp
\n"; } print "
Copyright (C) 2002- SQUARE ENIX CO., LTD. All Rights Reserved.
\n"; print ""; } # error_message:エラーメッセージ出力 sub error_message { print "

$_[0]

\n"; print "

$_[1]

\n"; if($language ne "English"){ print "ブラウザの[戻る]ボタンを押して前の画面に移動してください.

\n"; } else { print "Push [back]button to move former page.

\n"; } &footer; exit; } # get_cookie:クッキー値取得 sub get_cookie { @pairs = split(/\;/,$ENV{'HTTP_COOKIE'}); foreach $pair (@pairs) { local($name, $value) = split(/\=/, $pair); $name =~ s/ //g; $DUMMY{$name} = $value; } @pairs = split(/\,/,$DUMMY{'BODD'}); foreach $pair (@pairs) { local($name, $value) = split(/\:/, $pair); $COOKIE{$name} = $value; } $c_name = $COOKIE{'name'}; $c_pass = $COOKIE{'pass'}; $c_session_id = $COOKIE{'sess'}; } # set_cookie:クッキー値設定 sub set_cookie { ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 60*24*60*60); $yearg += 1900; if ($secg < 10) { $secg = "0$secg"; } if ($ming < 10) { $ming = "0$ming"; } if ($hourg < 10) { $hourg = "0$hourg"; } if ($mdayg < 10) { $mdayg = "0$mdayg"; } $mong = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep', 'Oct','Nov','Dec') [$mong]; $youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday', 'Friday','Saturday') [$wdayg]; $date_gmt = "$youbi, $mdayg\-$mong\-$yearg $hourg:$ming:$secg GMT"; $ENV{'TZ'} = "JST-9"; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); @wday_array = ('日','月','火','水','木','金','土'); $mon++; $year=$year-100; if($year<10){ $year="0$year"; } if($mon<10){ $mon="0$mon"; } if($mday<10){ $mday="0$mday"; } if($hour<10){ $hour="0$hour"; } if($min<10){ $min="0$min"; } $timenow="$year/$mon/$mday/$hour$min"; $cook="name\:$name\,pass\:$pass,sess\:$session_id"; print "Set-Cookie: BODD=$cook; expires=$date_gmt\n"; } sub sort_table { $sort=$sort/1; @temp=(); foreach $i (@all){ ($t[0],$t[1],$t[2],$t[3],$t[4],$t[5],$t[6],$t[7],$t[8],$t[9],$t[10], $t[11],$t[12],$t[13],$t[14],$t[15],$t[16],$t[17],$t[18],$t[19],$t[20], $t[21],$t[22],$t[23],$t[24],$t[25],$t[26],$t[27],$t[28],$t[29],$t[30], $t[31],$t[32],$t[33],$t[34],$t[35],$t[36],$t[37],$t[38],$t[39],$t[40], $t[41],$t[42],$t[43],$t[44],$t[45],$t[46],$t[47],$t[48],$t[49],$t[50], $t[51],$t[52],$t[53],$t[54],$t[55],$t[56],$t[57]) = split(/\t/,$i); #for($j=38;$j<$job_max+38;$j++){ # if($t[$j]<10){$t[$j]="0$t[$j]";} #} #for($j=22;$j<$prod_max+22;$j++){ # if($t[$j]<10){$t[$j]="0$t[$j]";} #} for($j=38;$j<$job_max+38;$j++){ $t[$j]=sprintf("%3d",$t[$j]); } for($j=22;$j<$prod_max-1+22;$j++){ $t[$j]=sprintf("%3d",$t[$j]); } #ミッションソート用 sort=37 function=[ミッション種別] page=アサルト用キー if($sort ==37){ @mission = split(/,/,$t[37]); if($function == 16){ @assault = split (//,$mission[16]); $assault[0]=hex($assault[0]); $missionkey=sprintf("%2d",$assault[$page]); } else { $missionkey=sprintf("%2d",$mission[$function]); } $t[37]="$missionkey"."T"."$t[37]"; } #カスタムフィールドソート用 sort=33 function番号、 ソートモード=no if($sort ==33){ @custom = split(/,/,$t[33]); if($no==1){ $missionkey=sprintf("%10d",$custom[$function]); } else { $missionkey=sprintf("%-10s",$custom[$function]); } $t[33]="$missionkey"."_T_"."$t[33]"; } if( $sort == 31 ){ @synt = split( /,/, $t[31] ); $t[31] = sprintf("%02d", $synt[$function+1] ) . "_T_" . $t[31]; } $t_temp=$t[0]; $t[0]=$t[$sort]; $t[$sort]=$t_temp; push(@temp,"$t[0]\t$t[1]\t$t[2]\t$t[3]\t$t[4]\t$t[5]\t$t[6]\t$t[7]\t$t[8]\t$t[9]\t$t[10]\t$t[11]\t$t[12]\t$t[13]\t$t[14]\t$t[15]\t$t[16]\t$t[17]\t$t[18]\t$t[19]\t$t[20]\t$t[21]\t$t[22]\t$t[23]\t$t[24]\t$t[25]\t$t[26]\t$t[27]\t$t[28]\t$t[29]\t$t[30]\t$t[31]\t$t[32]\t$t[33]\t$t[34]\t$t[35]\t$t[36]\t$t[37]\t$t[38]\t$t[39]\t$t[40]\t$t[41]\t$t[42]\t$t[43]\t$t[44]\t$t[45]\t$t[46]\t$t[47]\t$t[48]\t$t[49]\t$t[50]\t$t[51]\t$t[52]\t$t[53]\t$t[54]\t$t[55]\t$t[56]\t$t[57]\t\n"); } @temp=sort(@temp); if($mode eq "r"){ @temp=reverse(@temp); } @all=(); foreach $i (@temp){ ($t[0],$t[1],$t[2],$t[3],$t[4],$t[5],$t[6],$t[7],$t[8],$t[9],$t[10], $t[11],$t[12],$t[13],$t[14],$t[15],$t[16],$t[17],$t[18],$t[19],$t[20], $t[21],$t[22],$t[23],$t[24],$t[25],$t[26],$t[27],$t[28],$t[29],$t[30], $t[31],$t[32],$t[33],$t[34],$t[35],$t[36],$t[37],$t[38],$t[39],$t[40], $t[41],$t[42],$t[43],$t[44],$t[45],$t[46],$t[47],$t[48],$t[49],$t[50], $t[51],$t[52],$t[53],$t[54],$t[55],$t[56],$t[57]) = split(/\t/,$i); #ミッションソート用 sort=37 function=[ミッション種別] if($sort ==37){ ($dummy,$t[0]) = split(/T/,$t[0]); } #カスタムフィールドソート用 sort=33 function=[項目番号] if($sort ==33){ ($dummy,$t[0]) = split(/_T_/,$t[0]); } if( $sort == 31 ){ ($dummy,$t[0]) = split(/_T_/,$t[0]); } $t_temp=$t[0]; $t[0]=$t[$sort]; $t[$sort]=$t_temp; for($j=38;$j<$job_max+38;$j++){ $t[$j]=$t[$j]/1; } for($j=22;$j<$prod_max-1+22;$j++){ $t[$j]=$t[$j]/1; } push(@all,"$t[0]\t$t[1]\t$t[2]\t$t[3]\t$t[4]\t$t[5]\t$t[6]\t$t[7]\t$t[8]\t$t[9]\t$t[10]\t$t[11]\t$t[12]\t$t[13]\t$t[14]\t$t[15]\t$t[16]\t$t[17]\t$t[18]\t$t[19]\t$t[20]\t$t[21]\t$t[22]\t$t[23]\t$t[24]\t$t[25]\t$t[26]\t$t[27]\t$t[28]\t$t[29]\t$t[30]\t$t[31]\t$t[32]\t$t[33]\t$t[34]\t$t[35]\t$t[36]\t$t[37]\t$t[38]\t$t[39]\t$t[40]\t$t[41]\t$t[42]\t$t[43]\t$t[44]\t$t[45]\t$t[46]\t$t[47]\t$t[48]\t$t[49]\t$t[50]\t$t[51]\t$t[52]\t$t[53]\t$t[54]\t$t[55]\t$t[56]\t$t[57]\t\n"); } } sub new_regist_regist { if(!open(IN,"$datafile")){ &error_message('datafile error1791','data file access failed.'); } @all=; close IN; if( !($pass =~ /^[A-Za-z0-9_]+$/) ){ if($language ne "English"){ &error_message('そのパスワードは登録に利用できません。','パスワードは半角英数字で登録してください。'); } else { &error_message('That password is unsuitable.','Password must use a-z and 0-9 letters.'); } } if( !($name =~ /^[A-Za-z0-9_]+$/) ){ if($language ne "English"){ &error_message('その名前は使えません。','名前は半角英数字で登録してください。'); } else { &error_message('That name is unsuitable.','Name must use a-z and 0-9 letters.'); } } if($language ne "English"){ if($mainjob == $supportjob){ &error_message('main/job error','メインとサポートは同一のジョブにはできません'); } } else { if($mainjob == $supportjob){ &error_message('main/job error',"Support job can not set as main's one."); } } $max_no=0; foreach $i (@all){ ($r_no,$r_user,$dummy)=split(/\t/,$i); if($max_no<$r_no){ $max_no=$r_no; } if($r_user eq $name){ &error_message('already registed',"'$name' has already registed."); } } $no=($max_no+1)/1; if($no<10){ $no="0$no"; } if($no<100){ $no="0$no"; } push(@all,"$no\t$name\t$pass\t$anon\t$race\t$relm\t$mainjob\t$supportjob\t$prof\t$handle\t$polhn\t$mail\t$home\t$comment2\t$point\t$class\t$timenow\t$comment\t$mrank\t$etc[0]\t$etc[1]\t$etc[2]\t$prod[0]\t$prod[1]\t$prod[2]\t$prod[3]\t$prod[4]\t$prod[5]\t$prod[6]\t$prod[7]\t$prod[8]\t$prod[9]\t$prod[10]\t$prod[11]\t$prod[12]\t$prod[13]\t$prod[14]\t$prod[15]\t$lev[0]\t$lev[1]\t$lev[2]\t$lev[3]\t$lev[4]\t$lev[5]\t$lev[6]\t$lev[7]\t$lev[8]\t$lev[9]\t$lev[10]\t$lev[11]\t$lev[12]\t$lev[13]\t$lev[14]\t$lev[15]\t$lev[16]\t$lev[17]\t$lev[18]\t$lev[19]\t\n"); &dirlock; if(!open(OUT,">$datafile")){ &error_message('datafile error1819','data file access failed.'); } print OUT @all; close OUT; rmdir($lockdir); #RSS用履歴ファイル作成 $historybase="NEWREG\t$name\tNewMember\t$rsstime\t$no\t$rh\t\t$addr\t\n"; &add_history; if($language ne "English"){ print "新規メンバー'$name'($no)の登録を完了しました。"; print "


[登録システム入り口][使い方][ホームページへ戻る]
"; } else { print "New Member '$name'($no) is registed."; print "
[Entrance][usage][Back to Homepage]
"; } } sub new_regist_normal { if($language ne "English"){ print "
新規メンバー登録
\n新規メンバーを登録します。必要事項を入力してください。\n"; } else { print "
New Member Regist
\nFor registration, fill your information.\n"; } print <<"EOM"; EOM if($class_edit){ print "\n"; } else { print ""; } print <<"EOM"; EOM print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; for($i=0;$i<$job_max;$i++){ print "\n"; } for($i=0;$i<$prod_max;$i++){ print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; $comment2 =~ s/
/\r/g; print "\n"; if($language ne "English"){ print "\n
$field[0]
$field[1]
$field[2]
$field[3]
$field[4]
$field[5] ($field[18])
$field[6]
$field[7]
$field[8]
$joblist[$i]
$prodlist[$i]"; print "
$field[9]
$field[10]
$field[11]

$field[12]
$field[13]
$field[14]
$field[15]
$field[16]
$field[17]
"; print "
[登録システム入り口][使い方][ホームページへ戻る]
"; } else { print "\n"; print "
[Entrance][Usage][Back to homepage]
"; } } sub custom_field{ #カスタムフィールド if(!open(IN,"$datafile")){&header; &error_message('datafile error/system','data file access failed.');} @all=; close IN; $match=""; foreach $i(@all){ ($r_no,$r_name,$r_pass,$r_dummy)=split(/\t/,$i); if($r_name eq $name && $pass eq $r_pass){ $match=$i; } } if($match eq ""){ &header; &error_message('id/pass error','access failed.'); } $match =~ s/"/"/g; #オペレーター入力 if($mode eq "operatorlogin"){ &header; print "
$custom_field[0]の修正 オペレーターモード
"; print "MemberList Top
"; print "
"; print "
"; for($j=1;$j<$#custom_field+1;$j++){ if($custom_control[$j] eq $name){ print "\n"; $count=0; foreach $i(@all){ ($no,$rname,$dummy,$anon,$race,$relm,$mainjob,$supportjob,$prof,$handle,$polhn,$mail,$home,$comment2,$point,$class,$time,$comment,$mrank,$etc[0],$etc[1],$etc[2],$prod[0],$prod[1],$prod[2],$prod[3],$prod[4],$prod[5],$prod[6],$prod[7],$prod[8],$prod[9],$prod[10],$prod[11],$dummy)=split(/\t/,$i); @custom=split(/,/,$prod[11]); if($custom_pulldown[$j] == 1){ print ""; } else { print ""; } $count++; } print ""; print "
$rname
$rname
加算対象
\n"; } else { print "\n"; } } #積算フィールド指定はここですることに print "
"; } elsif($mode eq "operatormodify"){ &dirlock; @out=(); $count=0; foreach $i(@all){ ($no,$rname,$rpass,$anon,$race,$relm,$mainjob,$supportjob,$prof,$handle,$polhn,$mail,$home,$comment2,$point,$class,$time,$comment,$mrank,$etc[0],$etc[1],$etc[2],$prod[0],$prod[1],$prod[2],$prod[3],$prod[4],$prod[5],$prod[6],$prod[7],$prod[8],$prod[9],$prod[10],$prod[11],$prod[12],$prod[13],$prod[14],$prod[15],$lev[0],$lev[1],$lev[2],$lev[3],$lev[4],$lev[5],$lev[6],$lev[7],$lev[8],$lev[9],$lev[10],$lev[11],$lev[12],$lev[13],$lev[14],$lev[15],$lev[16],$lev[17],$lev[18],$lev[19])=split(/\t/,$i); @custom=split(/,/,$prod[11]); for($j=1;$j<$#custom_field+1;$j++){ if($custom_control[$j] eq $name){ $custom[$j]=$FORM{"custom$count"."_$j"}; if($FORM{"custom0"} != 0){ $custom[$FORM{"custom0"}] += $FORM{"custom$count"."_$j"}; } } } $prod[11]=join(",", @custom); $prod[12] =~ s/"/"/g; $newdat="$no\t$rname\t$rpass\t$anon\t$race\t$relm\t$mainjob\t$supportjob\t$prof\t$handle\t$polhn\t$mail\t$home\t$comment2\t$point\t$class\t$time\t$comment\t$mrank\t$etc[0]\t$etc[1]\t$etc[2]\t$prod[0]\t$prod[1]\t$prod[2]\t$prod[3]\t$prod[4]\t$prod[5]\t$prod[6]\t$prod[7]\t$prod[8]\t$prod[9]\t$prod[10]\t$prod[11]\t$prod[12]\t$prod[13]\t$prod[14]\t$prod[15]\t$lev[0]\t$lev[1]\t$lev[2]\t$lev[3]\t$lev[4]\t$lev[5]\t$lev[6]\t$lev[7]\t$lev[8]\t$lev[9]\t$lev[10]\t$lev[11]\t$lev[12]\t$lev[13]\t$lev[14]\t$lev[15]\t$lev[16]\t$lev[17]\t$lev[18]\t$lev[19]\t\n"; push(@out,$newdat); $count++; } if(!open(OUT,">$datafile")){ &header; &error_message('datafile error1560','data file access failed.'); } print OUT @out; close OUT; rmdir($lockdir); #custom_field[0]のcustom0名称変更処理 #編集項目更新処理 for($i=1;$i<$#custom_field+1;$i++){ $custom_field[$i]=$FORM{"customf$i"}; } @list=( 'custom_field', ); &dirlock; if(!open(IN,"setup.cgi")){ &error_message('config file error','data file access failed.'); } @all=; close IN; foreach $item(@list){ $match=0; for($i=0;$i<$#all+1;$i++){ if($all[$i] =~ /^\@$item=(.*);(.*)/){ $match=1; $temp=$2; $arr="\@$item=("; for($j=0;$j<$#$item+1;$j++){ if ($$item[$j] =~ /.*\\$/){ $$item[$j].="\\"; } $$item[$j] =~ s/'//g; $arr.="'$$item[$j]',"; } $arr.=");$2\n"; $all[$i]=$arr; } } if($match==0){ $arr="\@$item=("; for($j=0;$j<$#$item+1;$j++){ if ($$item[$j] =~ /.*\\$/){ $$item[$j].="\\"; } $$item[$j] =~ s/'//g; $arr.="'$$item[$j]',"; } $arr.=");\n\n"; push(@all,$arr); } } @out=@all; &check_out; if(!open(OUT,">setup.cgi")){ &error_message('config file error','data file access failed.'); } print OUT @out; close OUT; rmdir($lockdir); &reload_header; print "
オペレーターによる$custom_field[0]の修正を行いました。
"; print "自動的に戻ります。
"; print "MemberList Top
"; } elsif($mode eq "modify"){ #書き込み ($no,$name,$pass,$anon,$race,$relm,$mainjob,$supportjob,$prof,$handle,$polhn,$mail,$home,$comment2,$point,$class,$time,$comment,$mrank,$etc[0],$etc[1],$etc[2],$prod[0],$prod[1],$prod[2],$prod[3],$prod[4],$prod[5],$prod[6],$prod[7],$prod[8],$prod[9],$prod[10],$dummy,$prod[12],$prod[13],$prod[14],$prod[15],$lev[0],$lev[1],$lev[2],$lev[3],$lev[4],$lev[5],$lev[6],$lev[7],$lev[8],$lev[9],$lev[10],$lev[11],$lev[12],$lev[13],$lev[14],$lev[15],$lev[16],$lev[17],$lev[18],$lev[19])=split(/\t/,$match); $prod[11]=join(",", @custom); &dirlock; if(!open(IN,"$datafile")){ &error_message('datafile error612i','data file access failed.'); } @all=; close IN; @out=(); foreach $i(@all){ ($r_no,$r_name,$r_pass,$r_dummy)=split(/\t/,$i); if($r_name eq $name && $pass eq $r_pass){ $pastdat=$i; $prod[12] =~ s/"/"/g; $newdat="$r_no\t$name\t$pass\t$anon\t$race\t$relm\t$mainjob\t$supportjob\t$prof\t$handle\t$polhn\t$mail\t$home\t$comment2\t$point\t$class\t$timenow\t$comment\t$mrank\t$etc[0]\t$etc[1]\t$etc[2]\t$prod[0]\t$prod[1]\t$prod[2]\t$prod[3]\t$prod[4]\t$prod[5]\t$prod[6]\t$prod[7]\t$prod[8]\t$prod[9]\t$prod[10]\t$prod[11]\t$prod[12]\t$prod[13]\t$prod[14]\t$prod[15]\t$lev[0]\t$lev[1]\t$lev[2]\t$lev[3]\t$lev[4]\t$lev[5]\t$lev[6]\t$lev[7]\t$lev[8]\t$lev[9]\t$lev[10]\t$lev[11]\t$lev[12]\t$lev[13]\t$lev[14]\t$lev[15]\t$lev[16]\t$lev[17]\t$lev[18]\t$lev[19]\t\n"; push(@out,$newdat); } else { push(@out,$i); } } if(!open(OUT,">$datafile")){ &header; &error_message('datafile error1560','data file access failed.'); } print OUT @out; close OUT; rmdir($lockdir); #RSS用履歴ファイル作成 &compare_history; $historybase="CUSTED\t$name\t$name profile modify\t$rsstime\t$no\t$message\t$rh\t$addr\t\n"; &add_history; &reload_header; print "
$custom_field[0]を修正しました。
"; print "MemberList Top
自動的に戻ります。"; } else { &header; #入力リスト表示 ($no,$name,$pass,$anon,$race,$relm,$mainjob,$supportjob,$prof,$handle,$polhn,$mail,$home,$comment2,$point,$class,$time,$comment,$mrank,$etc[0],$etc[1],$etc[2],$prod[0],$prod[1],$prod[2],$prod[3],$prod[4],$prod[5],$prod[6],$prod[7],$prod[8],$prod[9],$prod[10],$prod[11],$prod[12],$prod[13],$prod[14],$prod[15],$lev[0],$lev[1],$lev[2],$lev[3],$lev[4],$lev[5],$lev[6],$lev[7],$lev[8],$lev[9],$lev[10],$lev[11],$lev[12],$lev[13],$lev[14],$lev[15],$lev[16],$lev[17],$lev[18],$lev[19])=split(/\t/,$match); @custom=split(/,/,$prod[11]); print "
$custom_field[0]を登録修正します。
"; print "MemberList Top
"; print "
"; print "
"; print ""; for ($i=1;$i<$#custom_field+1;$i++){ if($custom_pulldown[$i]==0){ if($custom_control[$i] eq "0"){ print ""; } else { print ""; } } else { if($custom_control[$i] eq "0"){ print ""; } else { print ""; } } } print "
$custom_field[$i]
$custom_field[$i]
"; print "
"; } } ###################### #login_menu ###################### sub login_menu{ if($language ne "English"){ print "
登録データ修正
"; print "MemberList Top
"; print "'$name' さんのデータを修正します。
\n"; } else { print "
Modify Registed information
"; print "MemberList Top
"; print "Modyfying : '$name' information.
\n"; } print "modifying=$all
"; ($no,$name,$pass,$anon,$race,$relm,$mainjob,$supportjob,$prof,$handle,$polhn,$mail,$home,$comment2,$point,$class,$time,$comment,$mrank,$etc[0],$etc[1],$etc[2],$prod[0],$prod[1],$prod[2],$prod[3],$prod[4],$prod[5],$prod[6],$prod[7],$prod[8],$prod[9],$prod[10],$prod[11],$prod[12],$prod[13],$prod[14],$prod[15],$lev[0],$lev[1],$lev[2],$lev[3],$lev[4],$lev[5],$lev[6],$lev[7],$lev[8],$lev[9],$lev[10],$lev[11],$lev[12],$lev[13],$lev[14],$lev[15],$lev[16],$lev[17],$lev[18],$lev[19])=split(/\t/,$match); @prod_r = split(/,/,$etc[1]); @mp=split(/,/,$prod[13]); @mission = split(/,/,$prod[15]); @assault=split( //,$mission[16]); $assault[0]=hex($assault[0]); ($syn,@synt) = split( /,/, $prod[9]); #################共通フォーム if($language ne "English"){ @templabel=("No. $no : '$name' 修正"); } else { @templabel=("Modifying No. $no : '$name' "); } print "
"; if($all ne "triggerlist" ){ print "$templabel[0]
"; } ####################ジョブ・合成スキル if($all eq "m_level"){ print ""; print ""; print "\n"; print "\n"; print ""; print "\n"; print ""; for($i=0;$i<$prod_max-1;$i++){ print "\n"; } print "\n"; print ""; print "\m"; print "
$field[7]
$field[8]

"; for($i=0;$i<10;$i++){ print ""; } print "\n"; for($i=0;$i<10;$i++){ print ""; } print "\n"; for($i=10;$i<$job_max;$i++){ print ""; } print "\n"; for($i=10;$i<$job_max;$i++){ print ""; } print "\n
$joblist[$i]
$joblist[$i]

$prodlist[$i]\n"; print "
$prodlist[9]

\n"; for($i=0;$i<=$#synergytech;$i++){ print ""; print "\n"; } print "
$synergytech[$i]
\n"; } ######################プロフィール if($all eq "m_prof"){ print ""; print ""; print "\n"; } else { print "\n"; } print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; $comment2 =~ s/
/\r/g; print "\n"; if($language ne "English"){ print "\n"; print "\n"; } else { print "\n"; print "\n"; } print "
New password
Old password"; if($class_edit){ print "
$field[0]
$field[3]
$field[4]
$field[5] ($field[18])
$field[6]
$field[9]
$field[10]
$field[11]

$field[12]
$field[13]
$field[14]
$field[15]
$field[16]
$field[17]
プロフ画像
プロフ画像の削除
Profile Photo
photo mode
"; } ######################武器魔法スキル if($all eq "m_skill"){ print ""; ($tempskill,$tempws)=split( /\//,$etc[2]); @skill = split( /\,/, $tempskill ); # @skill = split(/,/,$etc[2]); if ($skill_visible) { print "\n"; for($i=0;$i<16;$i++){ print "\n"; } print ""; for($i=0;$i<16;$i++){ print "\n"; } print ""; print "\n"; for($i=16;$i<$#skilllist+1;$i++){ print "\n"; } print ""; for($i=16;$i<$#skilllist+1;$i++){ print "\n"; } print "
$skilllist[$i]
$skilllist[$i]
\n"; } else { print "skill function is not available.
"; } } #######################カスタムフィールド if($all eq "custom"){ print ""; @custom=split(/,/,$prod[11]); for ($i=1;$i<$#custom_field+1;$i++){ if($custom_pulldown[$i]==0){ if($custom_control[$i] eq "0"){ print "$custom_field[$i]
"; } else { print ""; } } else { if($custom_control[$i] eq "0"){ print "$custom_field[$i]
"; } else { print ""; } } } } ######################装備 if( $all eq "equip" ){ require("equip.pl"); print ""; @elist = split(/\,/, $prod[10]); print ""; print "
\n"; print "\n"; &def_equip_list(); # 武器リストのフォーム表示ループ for ( $e=0; $e<=3; $e++ ){ # 武器リストを取得 @templist = @{$equipdeflist[$e]}; # 取得済みの武器リストを取得 @equips = split( //, $elist[$e] ); $itemnum = $#templist+1; print "\n"; print ""; for( $i=0; $i<$itemnum; $i++ ){ if( $i != 0 ){ print ""; } $fstr = $equiplistname[$e] . '_' . $i ; print "\n"; } print "\n"; } print "
$equiplist[$e]
$equiplist[$e]
$templist[$i]"; } else{ print ""; } print "
 
\n
\n"; # 防具リストのフォーム表示ループ for ( $e=4; $e<=9; $e++ ){ next if $e == 6; @templist = @{$equipdeflist[$e]}; @equipset = split( /\//, $elist[$e] ); @setname = split( /\,/, $templist[0] ); print "\n"; for( $i = 0; $i<$#templist; $i++ ){ @equips = split( //, $equipset[$i] ); @templist2 = split( /\,/, $templist[$i+1]); $itemnum = $#templist2+1; if( $e == 10 ){ ($jobnumber,$eqname) = split( /\//, $setname[$i] ); print ""; } else{ print ""; } for( $j=0; $j<=$#templist2;$j++){ ($eqslot, $eqname) = split( /\//, $templist2[$j] ); $fstr = $equiplistname[$e] . '_' . $i . '_' . $j; if( $j != 0 ){ print ""; } print "\n"; } } print "\n"; if( ($e==8) ){ print "
$equiplist[$e]
$joblist[$jobnumber]/$eqname
$setname[$i]
$eqname ($equipslot[$eqslot])"; } else{ print ""; } print "
 
\n
\n"; } } # レリック(AF2)の前に花鳥を免罪の下に出すよ $e = 11; { @templist = @{$equipdeflist[$e]}; @equipset = split( /\//, $elist[$e] ); @setname = split( /\,/, $templist[0] ); print "\n"; for( $i = 0; $i<$#templist; $i++ ){ @equips = split( //, $equipset[$i] ); @templist2 = split( /\,/, $templist[$i+1]); $itemnum = $#templist2+1; if( $e == 10 ){ ($jobnumber,$eqname) = split( /\//, $setname[$i] ); print ""; } else{ print ""; } for( $j=0; $j<=$#templist2;$j++){ ($eqslot, $eqname) = split( /\//, $templist2[$j] ); $fstr = $equiplistname[$e] . '_' . $i . '_' . $j; if( $j != 0 ){ print ""; } print "\n"; } } print "\n"; print "
$equiplist[$e]
$joblist[$jobnumber]/$eqname
$setname[$i]
$eqname ($equipslot[$eqslot])"; } else{ print ""; } print "
 
\n
\n"; } $e = 10; { @templist = @{$equipdeflist[$e]}; @equipset = split( /\//, $elist[$e] ); @setname = split( /\,/, $templist[0] ); print "\n"; for( $i = 0; $i<$#templist; $i++ ){ @equips = split( //, $equipset[$i] ); @templist2 = split( /\,/, $templist[$i+1]); $itemnum = $#templist2+1; if( $e == 10 ){ ($jobnumber,$eqname) = split( /\//, $setname[$i] ); print ""; } else{ print ""; } for( $j=0; $j<=$#templist2;$j++){ ($eqslot, $eqname) = split( /\//, $templist2[$j] ); $fstr = $equiplistname[$e] . '_' . $i . '_' . $j; if( $j != 0 ){ print ""; } print "\n"; } } print "\n"; if( ($e==8) or ($e==9) or ($e==10) ){ print "
$equiplist[$e]
$joblist[$jobnumber]/$eqname
$setname[$i]
$eqname ($equipslot[$eqslot])"; } else{ print ""; } print "
 
\n
\n"; } } #サル装備と素材はここから。要望対応。見にくいと思うんだけどな・・・ $e = 6; { @templist = @{$equipdeflist[$e]}; @equipset = split( /\//, $elist[$e] ); @setname = split( /\,/, $templist[0] ); print "\n"; for( $i = 0; $i<$#templist; $i++ ){ @equips = split( //, $equipset[$i] ); @templist2 = split( /\,/, $templist[$i+1]); $itemnum = $#templist2+1; if( $e == 10 ){ ($jobnumber,$eqname) = split( /\//, $setname[$i] ); print ""; } else{ print ""; } for( $j=0; $j<=$#templist2;$j++){ ($eqslot, $eqname) = split( /\//, $templist2[$j] ); $fstr = $equiplistname[$e] . '_' . $i . '_' . $j; if( $j != 0 ){ print ""; } print "\n"; } } print "\n"; # if( ($e==8) or ($e==9) or ($e==10) ){ # print "
$equiplist[$e]
$joblist[$jobnumber]/$eqname
$setname[$i]
$eqname ($equipslot[$eqslot])"; } else{ print ""; } print "
 
\n
\n"; # } } $e = 12; { @templist = @{$equipdeflist[$e]}; @equipset = split( /\//, $elist[$e] ); @setname = split( /\,/, $templist[0] ); print "\n"; for( $i = 0; $i<$#templist; $i++ ){ @equips = split( //, $equipset[$i] ); @templist2 = split( /\,/, $templist[$i+1]); $itemnum = $#templist2+1; if( $e == 10 ){ ($jobnumber,$eqname) = split( /\//, $setname[$i] ); print ""; } else{ print ""; } for( $j=0; $j<=$#templist2;$j++){ ($eqslot, $eqname) = split( /\//, $templist2[$j] ); $fstr = $equiplistname[$e] . '_' . $i . '_' . $j; if( $j != 0 ){ print ""; } print "\n"; } } print "\n"; # if( ($e==8) or ($e==9) or ($e==10) ){ # print "
$equiplist[$e]
$joblist[$jobnumber]/$eqname
$setname[$i]
$eqname ($equipslot[$eqslot])"; } else{ print ""; } print "
 
\n
\n"; # } } print "
\n
\n"; } ######################WS習得 if( $all eq "ws" ){ print ""; print ""; print ""; ($tempskill,$tempws)=split( /\//,$etc[2]); @skill = split( /\,/, $tempskill ); @ws = split( //, $tempws ); $nskill = -1; $count = 0; # 対象となるWSについてそれぞれ処理 for ($i=0;$i<=$#mwslist;$i++){ ( $wskill, $wname, $wtype, $wjob, $wcond ) = split( /,/, $mwslist[ $i ] ); if( $ws[ $i ] ){ # 既に習得済みのものは、条件チェックせずに表示させる print ""; print "\n"; } else{ # 未習得の場合は、クエストかミシックか判断して習得条件のチェック if( $wtype == 0 ){ # クエストWSの場合 →対象レベルが71以上でスキルが条件を満たすかチェック @wsjoblist = split( /\//, $wjob ); $jobok = 0; if( $skill[ $wskill] >= $wcond ){ foreach $j ( @wsjoblist ){ if( $lev[$j] > 70 ){ $jobok = 1; } } } if( $jobok ){ # 習得条件を満たす場合には選択肢を表示 print ""; print "\n"; } else{ # 習得条件を満たさない場合には強制で未習得 print "\n"; } } elsif( $wtype == 1 ){ # ミシックWSの場合 →対象ジョブが75かチェック if( $lev[$wjob] >= 75 ){ print ""; print "\n"; } else{ print "\n"; } } } } print "
Weapon Skill
$wname
$wname
$wname
\n"; } ######################ミッションアサルト if($all eq "mission"){ print ""; print ""; print ""; # 石の見る夢 print ""; print "\n"; # 戦慄!モグ祭りの夜 print ""; print "\n"; # シャントット帝国の陰謀 print ""; print "\n"; # アルタナミッション print ""; print "\n"; # カンパニエ叙勲 print ""; print "\n"; # アトルガンミッション print ""; print "\n"; # プロマシアミッション print ""; print "\n"; # ジラートミッション print ""; print "\n"; # 三国ミッション print ""; print "\n"; print ""; print "\n"; print ""; print "\n"; print ""; print ""; print "\n"; print ""; print ""; print ""; print "\n"; print ""; print "
Mission
$mlist[19]
$mlist[20]
$mlist[21]
$mlist[18]
$mlist[22]
$mlist[15]
$mlist[0]
$mlist[1]
$mlist[2]
$mlist[3]
$mlist[4]

Dynamis
"; print ""; for($k=5;$k<11;$k++){ print ""; } print ""; for($k=5;$k<11;$k++){ print ""; } print ""; print ""; for($k=11;$k<15;$k++){ print ""; } print ""; for($k=11;$k<15;$k++){ print ""; } print ""; print "
$mlist[$k]
$mlist[$k]
\n

Assault
$aslist[0]
"; for($j=2;$j<8;$j++){ print ""; } print ""; for($j=1;$j<6;$j++){ print ""; } #ナイズル print "\n"; print ""; for($j=6;$j<19;$j=$j+3){ print ""; } print ""; for($j=6;$j<19;$j=$j+3){ print ""; } print ""; for($j=7;$j<20;$j=$j+3){ print ""; } print ""; for($j=7;$j<20;$j=$j+3){ print ""; } print ""; for($j=8;$j<21;$j=$j+3){ print ""; } print ""; for($j=8;$j<21;$j=$j+3){ print ""; } print ""; for($j=21;$j<30;$j=$j+2){ print ""; } print ""; for($j=21;$j<30;$j=$j+2){ print ""; } print ""; for($j=22;$j<31;$j=$j+2){ print ""; } print ""; for($j=22;$j<31;$j=$j+2){ print ""; } print ""; for($j=31;$j<40;$j=$j+2){ print ""; } print ""; for($j=31;$j<40;$j=$j+2){ print ""; } print ""; for($j=32;$j<41;$j=$j+2){ print ""; } print ""; for($j=32;$j<41;$j=$j+2){ print ""; } print ""; for($j=41;$j<46;$j++){ print ""; } print ""; for($j=41;$j<46;$j++){ print ""; } print ""; for($j=46;$j<51;$j++){ print ""; } print ""; for($j=46;$j<51;$j++){ print ""; } print ""; for($j=51;$j<56;$j++){ print ""; } print ""; for($j=51;$j<56;$j++){ print ""; } print "
$assaultword[0]
$assaultword[$j]
$aslist[$j]
$aslist[$j]
$aslist[$j]
$aslist[$j]
$aslist[$j]
$aslist[$j]
$aslist[$j]
$aslist[$j]
$aslist[$j]
$aslist[$j]
"; } ######################トリガー一覧 if($all eq "triggerdisp"){ print ""; print ""; if( $language ne "English" ){ print ""; } else{ print ""; } print "
トリガーメニューTrigger management menu
\n"; print ""; if( $language ne "English" ){ print "\n"; } else{ print "\n"; } print "
\n"; require("trigger.pl"); &def_trigger_list(); if( !open( IN, "$triggerfile" ) ){ &header; &error_message( 'datafie error/system', 'trigger file access failed'); } my ( $t_no, $t_type, $t_adm, $t_ent, @t_tris, @t_adm_list, @t_ent_list, @trigger ); foreach my $r ( ){ if( $r =~ /^#/){ next; } ($t_no, $t_type, $t_adm, $t_ent, @t_tris) = split( /\t/, $r ); @t_adm_list = split( /\,/ , $t_adm ); @t_ent_list = split( /\,/ , $t_ent ); foreach my $t_t ( @t_ent_list ){ if( $name eq $t_t ){ push( @trigger, $r ); last; } } } close IN; foreach my $t_tri ( @trigger ){ print "
\n"; ($t_no, $t_type, $t_adm, $t_ent, @t_tris) = split( /\t/, $t_tri ); print "\n"; @t_adm_list = split( /\,/ , $t_adm ); @t_ent_list = split( /\,/ , $t_ent ); print "
No.$t_no : $triggerdefname[$t_type]
\n"; $str1 = "\n\n"; $str2 = ""; @triggerset = @{$triggerdeflist[$t_type]}; $listlength1 = $#triggerset; for( $i = 0; $i < $#triggerset; $i++ ){ (@triggername) = split( /\,/, $triggerset[0] ); ( @triggerlist ) = split( /\,/, $triggerset[$i+1] ); $listlength2[$i] = $#triggerlist+1; $str1 .= ""; foreach my $j ( @triggerlist ){ $str2 .= "\n"; } } $str1 .= ""; $str2 .= ""; print "$str1\n$str2\n"; foreach my $i ( @t_ent_list ){ $t_flag{ $i } = ""; } foreach my $i ( @t_tris ){ if( $i ){ ( $t_name, $t_tri_flag ) = split( /\,/, $i ); $t_flag{ $t_name } = $t_tri_flag; } } my $count = 0; foreach my $i ( sort @t_ent_list ){ if( $name eq $i ){ $bgn = " bgcolor=$mydata"; } else{ $bgn = " bgcolor=$otherdata"; } if( $count == $c_max ){ print "\n$str1\n$str2\n"; $count = 0; } print ""; @tri_flag_set = split( /\//, $t_flag{ $i } ); for( $j = 0; $j < $listlength1; $j++ ){ @tri_flag = split( //, $tri_flag_set[$j] ); for( $k = 0; $k < $listlength2[$j]; $k++ ){ print "\n"; } } $count ++; print "\n"; } print "
$index[2]
$triggername[$i]$j
$i$maru[ $tri_flag[ $k ] ]
\n"; $admin_flag = 0; foreach my $i ( split( /\,/, $t_adm ) ){ if( $name eq $i ){ $admin_flag = 1; last; } } if( $admin_flag ){ my ( $value1, $value2, $value3 ); if( $language ne "English" ){ $value1 = "トリガー保持情報更新"; $value2 = "メンバー更新"; $value3 = "グループ削除"; } else{ $value1 = "Update trigger info"; $value2 = "Update group member"; $value3 = "Delete group"; } print "
"; print "
"; print "\n"; print "
"; print "
   "; print "
"; print "\n"; print "
"; print "
   "; print "
"; print "\n"; print "
"; print "
\n"; } print ""; } } ######################トリガーメンバー編集 if($all eq "triggernew"){ print ""; require("trigger.pl"); &def_trigger_list(); $t_tri = ""; if( $trino != -1 ){ if( !open( IN, "$triggerfile" ) ){ &header; &error_message( 'datafie error/system', 'trigger file access failed'); } my ( $t_no, $t_type, $t_adm, $t_ent, @t_tris, @t_adm_list, @t_ent_list, @trigger ); $max_no = 0; foreach( ){ next if /^#/; ($t_no, $t_type, $t_adm, $t_ent, @t_tris) = split( /\t/ ); if( $t_no > $max_no ){ $max_no = $t_no; } if( $trino == $t_no ){ $t_tri = $_; } } close IN; } if( ! $t_tri ){ $t_no = -1; $t_type = -1; $t_adm = $name; $t_ent = $name; } else{ ($t_no, $t_type, $t_adm, $t_ent, @t_tris) = split( /\t/, $t_tri ); } @admlist = split( /\,/, $t_adm); @entlist = split( /\,/, $t_ent); if( $language ne "English" ){ print "
トリガーメンバー編集
\n"; print "トリガー種別: "; } else{ print "
Edit tirgger member
\n"; print "Trigger type:  "; } if( $t_no == -1 ){ print "\n"; } else{ print "$triggerdefname[$t_type]\n"; print "\n"; } print "\n"; $count = 0; print "\n"; if( $language ne "English" ){ $str1 = ""; } else{ $str1 = ""; } print "$str1\n"; $namelist = ""; foreach $i (@all){ ($r_no,$r_name,@r_others)=split(/\t/,$i); if( $count == $c_max ){ print "$str1\n"; $count = 0; } if( $name eq $r_name ){ $bgn = " bgcolor=$mydata"; } else{ $bgn = " bgcolor=$otherdata"; } $namelist .= "$r_name,"; print "\n"; print "\n"; } chop( $namelist ); print "\n"; print "
$index[8]状態
$index[8]Status
$r_name
\n"; } ######################トリガー一覧編集 if($all eq "triggeredit"){ if( $language ne "English" ){ print "
トリガー所有者更新
\n"; } else{ print "
Edit trigger holder
\n"; } print ""; print "\n"; require("trigger.pl"); &def_trigger_list(); if( !open( IN, "$triggerfile" ) ){ &header; &error_message( 'datafie error/system', 'trigger file access failed'); } my ( $t_no, $t_type, $t_adm, $t_ent, @t_tris, @t_adm_list, @t_ent_list, @trigger ); foreach( ){ next if /^#/; ($t_no, $t_type, $t_adm, $t_ent, @t_tris) = split( /\t/ ); if( $trino == $t_no ){ $t_tri = $_; } } close IN; ($t_no, $t_type, $t_adm, $t_ent, @t_tris) = split( /\t/, $t_tri ); @admlist = split( /\,/, $t_adm); @entlist = split( /\,/, $t_ent); print "\n"; print "
No.$t_no : $trrigerdefname[$t_type]
\n"; $str1 = "\n\n"; $str2 = ""; my $count = 0; @triggerset = @{$triggerdeflist[$t_type]}; $listlength1 = $#triggerset; for( $i = 0; $i < $#triggerset; $i++ ){ @triggername = split( /\,/, $triggerset[0] ); # $triggername = $triggerset[0][$i-1]; ( @triggerlist ) = split( /\,/, $triggerset[$i+1] ); $listlength2[$i] = $#triggerlist+1; $str1 .= ""; foreach my $j ( @triggerlist ){ $str2 .= "\n"; } } $str1 .= ""; $str2 .= ""; print "$str1\n$str2\n"; foreach my $i ( @t_tris ){ ( $t_name, $t_tri_flag ) = split( /\,/, $i ); $t_flag{ $t_name } = $t_tri_flag; } foreach my $i ( sort( @entlist ) ){ if( $name eq $i ){ $bgn = " bgcolor=$mydata"; } else{ $bgn = " bgcolor=$otherdata"; } if( $count == $c_max ){ print "\n$str1\n$str2\n"; $count = 0; } print "\n"; @tri_flag_set = split( /\//, $t_flag{ $i } ); for( $j = 0; $j < $listlength1; $j++ ){ @tri_flag = split( //, @tri_flag_set[$j] ); for( $k = 0; $k < $listlength2[$j]; $k++ ){ $sname = "tri_" . $i. "_" . $j . "_" . $k; print "\n"; } } $count ++; } print "
$index[2]
$triggername[$i]$j
$i
\n"; } ####################共通部フッタ if( ($all ne "triggerlist" ) and ($all ne "triggerdisp" ) ){ print "
"; } } ###################### #login_enter & login_modify ###################### sub login_enter{ if($language ne "English"){ print "
ログインメニュー
"; } else { print "
Login Menu
"; } print "MemberList Top
"; print "'$name' LoginMenu
"; print ""; if(!$diaryallow){ print ""; print ""; if($language ne "English"){ print "\n"; } else { print "\n"; } if($oekaki ==1){ if($language ne "English"){ $temp='お絵描き日記'; } else { $temp='Paint Diary'; } print "\n"; } } if($language ne "English"){ print "\n"; print "\n"; } else { print "\n"; print "\n"; } print "\n"; if($language ne "English"){ @templabel=('プロフィール変更','レベル・合成スキル変更','武器魔法スキル変更','ミッション進行度変更','メリットポイント変更','習得WS変更','取得装備','トリガー管理'); } else { @templabel=('Modify Profile','Level,Synthesis Skill','Weapon,Magic Skill','Mission Progress','Merit Points','Weapon Skill','Equip','Trigger Mng'); } #prof print ""; #levelf print ""; #skill print ""; #mission print ""; #ws print ""; #equip print ""; #trigger print ""; if($mpoint ==1){ print "\n"; } if($custom_field[0] ne ""){ print "\n"; } $match=0; for($i=0;$i<$#custom_field+1;$i++){ if($custom_control[$i] eq $name){ $match=1; } } if($custom_field[0] ne "" && $match==1){ print "\n"; } print "
新しい日記を書く
Write New Diary
"; print ""; print "
日記を修正・削除する記事番号
Modify or Delete ArticleArticle Number

$templabel[0]
$templabel[1]
$templabel[2]
$templabel[3]
$templabel[5]
$templabel[6]
$templabel[7]
$templabel[4]
"; print ""; print "
$custom_field[0]
"; print ""; print "
担当$custom_field[0]一括入力
"; print ""; print ""; print "
"; } sub login_modify{ #最初に$allをチェックしてマッチファイルから元データを上書きする。 if($all eq "m_prof"){ ($no,$name,$pass,$dummy,$dummy,$dummy,$mainjob,$supportjob,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$etc[1],$etc[2],$prod[0],$prod[1],$prod[2],$prod[3],$prod[4],$prod[5],$prod[6],$prod[7],$prod[8],$prod[9],$prod[10],$prod[11],$prod[12],$prod[13],$prod[14],$prod[15],$lev[0],$lev[1],$lev[2],$lev[3],$lev[4],$lev[5],$lev[6],$lev[7],$lev[8],$lev[9],$lev[10],$lev[11],$lev[12],$lev[13],$lev[14],$lev[15],$lev[16],$lev[17],$lev[18],$lev[19])=split(/\t/,$match); } elsif ($all eq "m_level"){ ($no,$name,$pass,$anon,$race,$relm,$dummy,$dummy,$prof,$handle,$polhn,$mail,$home,$comment2,$point,$class,$time,$comment,$mrank,$etc[0],$dummy,$etc[2],$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$prod[10],$prod[11],$prod[12],$prod[13],$prod[14],$prod[15],$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy,$dummy)=split(/\t/,$match); } elsif ($all eq "m_skill"){ ($no,$name,$pass,$anon,$race,$relm,$mainjob,$supportjob,$prof,$handle,$polhn,$mail,$home,$comment2,$point,$class,$time,$comment,$mrank,$etc[0],$etc[1],$dummyetc2,$prod[0],$prod[1],$prod[2],$prod[3],$prod[4],$prod[5],$prod[6],$prod[7],$prod[8],$prod[9],$prod[10],$prod[11],$prod[12],$prod[13],$prod[14],$prod[15],$lev[0],$lev[1],$lev[2],$lev[3],$lev[4],$lev[5],$lev[6],$lev[7],$lev[8],$lev[9],$lev[10],$lev[11],$lev[12],$lev[13],$lev[14],$lev[15],$lev[16],$lev[17],$lev[18],$lev[19])=split(/\t/,$match); ($tempskill, $tempws) = split( /\//, $dummyetc2 ); $etc[2] = "$etc2skill/$tempws"; } elsif ($all eq "ws"){ ($no,$name,$pass,$anon,$race,$relm,$mainjob,$supportjob,$prof,$handle,$polhn,$mail,$home,$comment2,$point,$class,$time,$comment,$mrank,$etc[0],$etc[1],$dummyetc2,$prod[0],$prod[1],$prod[2],$prod[3],$prod[4],$prod[5],$prod[6],$prod[7],$prod[8],$prod[9],$prod[10],$prod[11],$prod[12],$prod[13],$prod[14],$prod[15],$lev[0],$lev[1],$lev[2],$lev[3],$lev[4],$lev[5],$lev[6],$lev[7],$lev[8],$lev[9],$lev[10],$lev[11],$lev[12],$lev[13],$lev[14],$lev[15],$lev[16],$lev[17],$lev[18],$lev[19])=split(/\t/,$match); ($tempskill, $tempws) = split( /\//, $dummyetc2 ); $etc[2] = "$tempskill/$etc2ws"; } elsif ($all eq "equip" ){ ($no,$name,$pass,$anon,$race,$relm,$mainjob,$supportjob,$prof,$handle,$polhn,$mail,$home,$comment2,$point,$class,$time,$comment,$mrank,$etc[0],$etc[1],$etc[2],$prod[0],$prod[1],$prod[2],$prod[3],$prod[4],$prod[5],$prod[6],$prod[7],$prod[8],$prod[9],$dummy,$prod[11],$prod[12],$prod[13],$prod[14],$prod[15],$lev[0],$lev[1],$lev[2],$lev[3],$lev[4],$lev[5],$lev[6],$lev[7],$lev[8],$lev[9],$lev[10],$lev[11],$lev[12],$lev[13],$lev[14],$lev[15],$lev[16],$lev[17],$lev[18],$lev[19])=split(/\t/,$match); } elsif ($all eq "custom"){ ($no,$name,$pass,$anon,$race,$relm,$mainjob,$supportjob,$prof,$handle,$polhn,$mail,$home,$comment2,$point,$class,$time,$comment,$mrank,$etc[0],$etc[1],$etc[2],$prod[0],$prod[1],$prod[2],$prod[3],$prod[4],$prod[5],$prod[6],$prod[7],$prod[8],$prod[9],$prod[10],$prod[11],$prod[12],$prod[13],$prod[14],$prod[15],$lev[0],$lev[1],$lev[2],$lev[3],$lev[4],$lev[5],$lev[6],$lev[7],$lev[8],$lev[9],$lev[10],$lev[11],$lev[12],$lev[13],$lev[14],$lev[15],$lev[16],$lev[17],$lev[18],$lev[19])=split(/\t/,$match); for($j=1;$j<$#custom_field+1;$j++){ if($custom_control[$j] eq $name){ $custom[$j]=$FORM{"custom$count"."_$j"}; if($FORM{"custom0"} != 0){ $custom[$FORM{"custom0"}] += $FORM{"custom$count"."_$j"}; } } } $prod[11]=join(",", @custom); } elsif ($all eq "mission"){ ($no,$name,$pass,$anon,$race,$relm,$mainjob,$supportjob,$prof,$handle,$polhn,$mail,$home,$comment2,$point,$class,$time,$comment,$mrank,$etc[0],$etc[1],$etc[2],$prod[0],$prod[1],$prod[2],$prod[3],$prod[4],$prod[5],$prod[6],$prod[7],$prod[8],$prod[9],$prod[10],$prod[11],$prod[12],$prod[13],$prod[14],$prod[15],$lev[0],$lev[1],$lev[2],$lev[3],$lev[4],$lev[5],$lev[6],$lev[7],$lev[8],$lev[9],$lev[10],$lev[11],$lev[12],$lev[13],$lev[14],$lev[15],$lev[16],$lev[17],$lev[18],$lev[19])=split(/\t/,$match); # @mission=split(/,/,$prod[15]); $mission[2]=$FORM{"mission2"}; $mission[3]=$FORM{"mission3"}; $mission[4]=$FORM{"mission4"}; for($i=5;$i<15;$i++){ $mission[$i]=$FORM{"mission$i"}; } $mission[1]=$FORM{"mission1"}; $mission[0]=$FORM{"mission0"}; $mission[15]=$FORM{"mission15"}; $mission[16]=$FORM{"assault0"}; for($j=1;$j<$#aslist+1;$j++){ $mission[16]=$mission[16].$FORM{"assault$j"}; } $prod[15]=join(",",@mission); } elsif ($all eq "mpoint"){ ##ここmpoint.plに行くから意味ないっぽ ($no,$name,$pass,$anon,$race,$relm,$mainjob,$supportjob,$prof,$handle,$polhn,$mail,$home,$comment2,$point,$class,$time,$comment,$mrank,$etc[0],$etc[1],$etc[2],$prod[0],$prod[1],$prod[2],$prod[3],$prod[4],$prod[5],$prod[6],$prod[7],$prod[8],$prod[9],$prod[10],$prod[11],$prod[12],$prod[13],$prod[14],$prod[15],$lev[0],$lev[1],$lev[2],$lev[3],$lev[4],$lev[5],$lev[6],$lev[7],$lev[8],$lev[9],$lev[10],$lev[11],$lev[12],$lev[13],$lev[14],$lev[15],$lev[16],$lev[17],$lev[18],$lev[19])=split(/\t/,$match); &list_mpoint_i; @mp=split(/,/,$prod[13]); if($all eq "mpoint1"){ for($i=0;$i<28;$i++){ $mp[$i]=$FORM{"mp$i"} } } if($all eq "mpoint2"){ for($i=28;$i<45;$i++){ $mp[$i]=$FORM{"mp$i"} } } if($all eq "mpoint3"){ for($i=45;$i<141;$i++){ $mp[$i]=$FORM{"mp$i"} } } if($all eq "mpoint4"){ for($i=141;$i<211;$i++){ $mp[$i]=$FORM{"mp$i"} } } $prod[13]=""; $mptotal=0; for($i=0;$i<211;$i++){ $prod[13]=$prod[13].$mp[$i].","; if($mp[$i]>0){ for($j=0;$j<$mp[$i];$j++){ $mptotal= $mptotal + substr($m_needpoint[$i],$j,1); } } } #layout style2 $j=99; #現在カテゴリ $prod[12]="基本グループ1グループ2"; for($i=0;$i<45;$i++){ #基本 if($mp[$i]>0){ if($j !=$m_categorycode[$i]){ $prod[12]=$prod[12]."
$m_categoryname[$m_categorycode[$i]](カテゴリ上限$m_categorymax[$m_categorycode[$i]])
"; $j=$m_categorycode[$i]; } $prod[12]=$prod[12]."$m_name[$i] :".$mp[$i]."/$m_max[$i]
"; } } $prod[12]=$prod[12].""; for($i=45;$i<141;$i++){ #ジョブカテゴリ1 if($mp[$i]>0){ if($j !=$m_categorycode[$i]){ $prod[12]=$prod[12]."
$m_categoryname[$m_categorycode[$i]](カテゴリ上限$m_categorymax[$m_categorycode[$i]])
"; $j=$m_categorycode[$i]; } $prod[12]=$prod[12]."$m_name[$i] :".$mp[$i]."/$m_max[$i]
"; } } $prod[12]=$prod[12].""; for($i=141;$i<211;$i++){ #ジョブカテゴリ2 if($mp[$i]>0){ if($j !=$m_categorycode[$i]){ $prod[12]=$prod[12]."
$m_categoryname[$m_categorycode[$i]](カテゴリ上限$m_categorymax[$m_categorycode[$i]])
"; $j=$m_categorycode[$i]; } $prod[12]=$prod[12]."$m_name[$i] :".$mp[$i]."/$m_max[$i]
"; } } $prod[12]=$prod[12].""; if($mptotal>0){ $prod[12]=$prod[12]."総消費メリットポイント$mptotal"; } } else { ($no,$name,$pass,$anon,$race,$relm,$mainjob,$supportjob,$prof,$handle,$polhn,$mail,$home,$comment2,$point,$class,$time,$comment,$mrank,$etc[0],$etc[1],$etc[2],$prod[0],$prod[1],$prod[2],$prod[3],$prod[4],$prod[5],$prod[6],$prod[7],$prod[8],$prod[9],$prod[10],$prod[11],$prod[12],$prod[13],$prod[14],$prod[15],$lev[0],$lev[1],$lev[2],$lev[3],$lev[4],$lev[5],$lev[6],$lev[7],$lev[8],$lev[9],$lev[10],$lev[11],$lev[12],$lev[13],$lev[14],$lev[15],$lev[16],$lev[17],$lev[18],$lev[19])=split(/\t/,$match); } #error_check if( !($name2 =~ /^[A-Za-z0-9_]+$/) && $name2 != ""){ if($language ne "English"){ &header;&error_message('そのパスワードは登録に利用できません。','パスワードは半角英数字で登録してください。'); } else { &header;&error_message('That password is unsuitable.','Password must use a-z and 0-9 letters.'); } } if($language ne "English"){ if($mainjob == $supportjob){ &header; &error_message('main/job error','メインとサポートは同一のジョブにはできません'); } } else { if($mainjob == $supportjob){ &header; &error_message('main/job error',"Support job can not set as main's one."); } } &prof_image; if($imgexist){ ($type,$h,$w) = &image_getsize("$imgdir$imgfile"); $prod[14]="$h,$w,$imgfile"; } if($imgdel){ ($h,$w,$imgfile) = split(/\,/ , $prod[14]); unlink("$imgdir$imgfile"); $prod[14]=""; } &dirlock; if(!open(IN,"$datafile")){ &error_message('datafile error612i','data file access failed.'); } @all=; close IN; @out=(); foreach $i(@all){ ($r_no,$r_name,$r_pass,$r_dummy)=split(/\t/,$i); if($r_name eq $name && $pass eq $r_pass){ if($name2 ne ""){ $pass=$name2; } $pastdat=$i; $newdat="$r_no\t$name\t$pass\t$anon\t$race\t$relm\t$mainjob\t$supportjob\t$prof\t$handle\t$polhn\t$mail\t$home\t$comment2\t$point\t$class\t$timenow\t$comment\t$mrank\t$etc[0]\t$etc[1]\t$etc[2]\t$prod[0]\t$prod[1]\t$prod[2]\t$prod[3]\t$prod[4]\t$prod[5]\t$prod[6]\t$prod[7]\t$prod[8]\t$prod[9]\t$prod[10]\t$prod[11]\t$prod[12]\t$prod[13]\t$prod[14]\t$prod[15]\t$lev[0]\t$lev[1]\t$lev[2]\t$lev[3]\t$lev[4]\t$lev[5]\t$lev[6]\t$lev[7]\t$lev[8]\t$lev[9]\t$lev[10]\t$lev[11]\t$lev[12]\t$lev[13]\t$lev[14]\t$lev[15]\t$lev[16]\t$lev[17]\t$lev[18]\t$lev[19]\t\n"; push(@out,$newdat); } else { push(@out,$i); } } if(!open(OUT,">$datafile")){ &header; &error_message('datafile error627i','data file access failed.'); } print OUT @out; close OUT; rmdir($lockdir); #RSS用履歴ファイル作成 &compare_history; $historybase="PROFED\t$name\t$name profile modify\t$rsstime\t$no\t$message\t$rh\t$addr\t\n"; &add_history; &set_cookie; &reload_header; if($language ne "English"){ print "
修正終了
"; print "MemberList Top
"; print "修正を行いました。自動的にトップページへ戻ります。
"; } else { print "
Information modified
"; print "Automatically move top page.
"; } } ###################### #login_enter & login_modify ###################### sub prof_skill{ if(($anon ne "on") || ($anon_mode != 1 )){ ################# #-- 以下、スキル表示機能で追加した部分 if ($skill_visible) { ($tempskill,$tempws)=split( /\//,$etc[2]); @skill = split( /\,/, $tempskill ); # @skill = split(/,/,$etc[2]); for ($j=0;$j<$#skilllist+1;$j++){ $skillmax[$j] = -1; for ($k=0;$k<$job_max;$k++){ if (int($lev[$k]) > 0) { $askill = expr_skillcap($k, $j, $lev[$k]); if ($askill > $skillmax[$j]) { $skillmax[$j] = $askill; $skillmaxjob[$j] = $k; } } } } if ($FORM{'skilldetail'} eq "") { print ""; for ($j=0;$j<$#skilllist+1;$j++){ print ""; } print ""; print ""; for ($j=0;$j<$#skilllist+1;$j++){ if ($skillmax[$j] > int($skill[$j])) { print ""; } else { print ""; } } print ""; print ""; for ($j=0;$j<$#skilllist+1;$j++){ print ""; } print ""; print ""; for ($j=0;$j<$#skilllist+1;$j++){ print ""; } if($language ne "English"){ print "
$skilllist[$j]
Now$skill[$j]$skill[$j]
Cap"; print $skillmax[$j]; print "
Job"; print $joblist[$skillmaxjob[$j]]; print "
ジョブごとの詳細キャップを表\示する。
"; } else { print "Show skill limit detail
"; } } elsif ($FORM{'skilldetail'} eq "true") { print ""; for ($j=0;$j<$#skilllist+1;$j++){ print ""; } print ""; print ""; for ($j=0;$j<$#skilllist+1;$j++){ if ($skillmax[$j] > int($skill[$j])) { print ""; } else { print ""; } } print ""; for ($k=0;$k<$job_max;$k++){ if (int($lev[$k]) > 0) { print ""; for ($j=0;$j<$#skilllist+1;$j++){ if ($skillmaxjob[$j] == $k) { print ""; } print ""; } } if($language ne "English"){ print "
$skilllist[$j]
Now$skill[$j]$skill[$j]
$joblist[$k]"; } else { print ""; } $skillcap = expr_skillcap($k, $j, $lev[$k]); if ($skillcap > 0) { if ($skillcap > int($skill[$j])) { print $skillcap; } else { print "$skillcap"; } } print "
詳細キャップ表\示をやめる。  スキルランクを表\示する。
"; } else { print "Exit detail info  Show skill rank
"; } } elsif ($FORM{'skilldetail'} eq "rank") { print ""; for ($j=0;$j<$#skilllist+1;$j++){ print ""; } print ""; print ""; for ($j=0;$j<$#skilllist+1;$j++){ if ($skillmax[$j] > int($skill[$j])) { print ""; } else { print ""; } } print ""; for ($k=0;$k<$job_max;$k++){ if (int($lev[$k]) > 0) { print ""; for ($j=0;$j<$#skilllist+1;$j++){ $skillrank = substr($skillrank[$k],$j * 2, 2); print ""; } print ""; } } if($language ne "English"){ print "
$skilllist[$j]
Now$skill[$j]$skill[$j]
$joblist[$k]"; if ($skillrank eq "_ ") { print "\ "; } else { print "$skillrank"; } print "
ランク表\示をやめる。
"; } else { print "Exit rank info
"; } } } #-- スキル表示機能で追加した部分ここまで ################# } } sub prof_meritpoint{ ##メリポ表示(仮) mpoint.plで$prod[12]に表示用データを作成している if($language ne "English"){ print "
"; } else { print "
メリットポイント
"; } print "$prod[12]\n"; print "
Merit point
"; ##メリポ表示ここまで } sub prof_customfield{ ##カスタムフィールド @custom=split(/,/,$prod[11]); print ""; for($j=1;$j<$#custom_field+1;$j++){ print ""; } print ""; for($j=1;$j<$#custom_field+1;$j++){ if($custom_pulldown[$j]==0){ print ""; } else { print ""; } } print "
$custom_field[$j]
$custom[$j]".${"custom_list$j"}[$custom[$j]]."
\n"; } sub prof_levelbox{ #ジョブレベル合成スキル表示 if(($anon ne "on") || ($anon_mode != 1 )){ if($class_edit==0){ $class =~ s/<//g; } if($job_max>$prod_max){ $maxcell=$job_max; } else { $maxcell=$prod_max; } print ""; for ($j=0;$j<$maxcell;$j++){ $jn=$j+38; if($j<$job_max){ print ""; } else { print ""; } } print ""; for ($j=0;$j<$maxcell;$j++){ $jn=$j+22; if($j<$prod_max){ print ""; } elsif ($j == $prod_max) { print ""; } } print ""; print ""; if($name eq $c_name){ $bgn=" bgcolor=$mydata"; } else { $bgn=" bgcolor=$otherdata"; } if($class eq ""){ $class=" "; } if($point eq ""){ $point=0; } print ""; if(($anon ne "on") || ($anon_mode != 1 )){ if($lev[$mainjob]<10){ $main_level="0$lev[$mainjob]"; } else { $main_level=$lev[$mainjob]; } if($supportjob <99){ $mod_level=int($lev[$mainjob]/2); if($mod_level==0){ $mod_level=1; } if($mod_level>$lev[$supportjob]){ $mod_level=$lev[$supportjob]; } if($mod_level<10){ $mod_level="0$mod_level"; } print ""; } else { print ""; } $totalexp = 0; for ($j=0;$j<$maxcell;$j++){ $bg=""; if($j<$job_max){ $totalexp += expr_exp($lev[$j]); if($level ==1){ $bg=" bgcolor=$color[int($lev[$j]/10)]"; } else { if($j == $mainjob){ $bg=" bgcolor=$maincolor"; } if($j == $supportjob){ $bg=" bgcolor=$supportcolor"; } } print "$lev[$j]"; } else { print ""; } } } else { for ($j=0;$j<$maxcell+1;$j++){ print""; } } $date=substr($time,0,8); print ""; if(($anon ne "on") || ($anon_mode != 1 )){ if($prod[12] =~m /イント<\/TD>"; } if($j==$prod_max-1){ ($syn,@synt)=split(/\,/, $prod[9] ); $temprank = sprintf( "%d", $syn / 10 ); $bg=" bgcolor=$color[$temprank]"; print "$syn"; } elsif ($j == $prod_max) { print ""; } } } else { for ($j=0;$j<$maxcell+1;$j++){ print""; } } print ""; print ""; print "
$index[0]$index[1]$index[2]$index[3]$index[4]$index[5]$index[6]$index[7]$joblist[$j]
$prodlist[$j]Next ExpTotal Exp.
$index[9]
$no$class$name"; if($iconuse eq "yes"){ print ""; } else { print "$racelist[$race]"; } print "$relmlist[$relm]$point$mrank$joblist[$mainjob]$main_level/$joblist[$supportjob]$mod_level$joblist[$mainjob]$main_level -
([0-9]+)<\/TD>/ ){ $mpointexp = $1*10000; } if($prod[12] =~m /use<\/TD>([0-9]+)<\/TD>/ ){ $mpointexp = $1*10000; } if($mpointexp>0){ if($mexpmode == 1){ $totalexp=$totalexp+$mpointexp; } else { $totalexp="$totalexp+".$mpointexp; } } for ($j=0;$j<$maxcell;$j++){ if($j<$prod_max-1){ $bg=" bgcolor=$color[$prod_r[$j]]"; print "$prod[$j]".expr_needexp($lev[$mainjob])." ".$totalexp." -
$comment
"; } # anon mode on #ジョブレベル合成スキル表示部終了 } sub prof_box{ ##プロフィールBOX if($prof ne "off"){ if($language ne "English"){ print ""; if($prod[14]){ ($h,$w,$prod[14])=split(/\,/,$prod[14]); if($h>$w){ if($h>200){ $w=int($w/$h*200); $h=200; } } else { if($w>200){ $h=int($h/$w*200); $w=200; } } print ""; } else { print ""; } print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
$name さんのプロフィール
ハンドル$handle
POLハンドル$polhn
e-mail$mail
ホームページ$home
コメント$comment2
"; } else { print ""; if($prod[14]){ ($h,$w,$prod[14])=split(/\,/,$prod[14]); if($h>$w){ if($h>200){ $w=int($w/$h*200); $h=200; } } else { if($w>200){ $h=int($h/$w*200); $w=200; } } print ""; } else { print ""; } print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
$name 's profile
Handlename$handle
POL Handlename$polhn
e-mail$mail
Homepage$home
Comment$comment2
"; } } else { if($language ne "English"){ print "
$name さんのプロフィールは非公開となっています。
"; } else { print "
$name 's profile is closed.
"; } } ##プロフィールBOXここまで } #個人プロフ・日記表示メイン # prof_box プロフィールBOX # prof_detail 詳細プロフィール # prof_levelbox レベル関連表示 # show_dairy 日記表示 sub prof { print ""; print "
"; print ""; &make_salt; print ""; print <<"EOM";
$guild_name Member ListProfile : $name
$menux[3]$menux[1] / "; print "$menux[2] / "; print "$menux[4] / "; if($bbspage){ print " $menux[0]"; } print "
Login : name pass EOM if(!$diaryallow){ print ""; } if($key_avail){ print ""; } if($mes_avail){ print "
Message : to '$name'"; } print <<"EOM";
EOM if($reg_mode==0){ print ""; } print ""; print "

"; if(!open(IN,"$datafile")){ &error_message('datafile error2098','data file access failed.'); } @all=; close IN; $match=""; foreach $i(@all){ ($r_no,$r_name,$r_pass,$r_dummy)=split(/\t/,$i); if($r_name eq $name){ $match=$i; } } if($match eq ""){ &header; &error_message('id/pass error','access failed.'); } ($no,$name,$pass,$anon,$race,$relm,$mainjob,$supportjob,$prof,$handle,$polhn,$mail,$home,$comment2,$point,$class,$time,$comment,$mrank,$etc[0],$etc[1],$etc[2],$prod[0],$prod[1],$prod[2],$prod[3],$prod[4],$prod[5],$prod[6],$prod[7],$prod[8],$prod[9],$prod[10],$prod[11],$prod[12],$prod[13],$prod[14],$prod[15],$lev[0],$lev[1],$lev[2],$lev[3],$lev[4],$lev[5],$lev[6],$lev[7],$lev[8],$lev[9],$lev[10],$lev[11],$lev[12],$lev[13],$lev[14],$lev[15],$lev[16],$lev[17],$lev[18],$lev[19])=split(/\t/,$match); @prod_r = split(/,/,$etc[1]); if($function eq "profdetail"){ if($language ne "English"){ @templabel=('日記を読む','レベル・合成スキル','プロフィール','ミッション進行度','武器・魔法スキル','メリットポイント','↑'); } else { @templabel=('Read Diary','Level,Synthesis','Profile','Mission Progress','Weapon,Magic Skill','Meritpoint','[top]'); } if($name eq $c_name){ $bgn=" bgcolor=$mydata"; } else { $bgn=" bgcolor=$otherdata"; } print "
$templabel[0]
"; print "$templabel[1] $templabel[2] $templabel[3],$custom_field[0] $templabel[4] $templabel[5]"; if($name eq $c_name){ $bgn=" bgcolor=$mydata"; } print "
$templabel[1]"; &prof_levelbox; print "
$templabel[2]"; &prof_box; print "
$templabel[3],$custom_field[0]"; &prof_mission2; print "
$templabel[4]"; &prof_skill; print "$templabel[5]"; &prof_meritpoint; } else { #prof if($language ne "English"){ print " 詳細なプロフィールを確認する
"; } else { print " Show Detail Profile
"; } &show_diary; } } #end of sub prof sub write_images{ $fnt=""; $imgno="1"; foreach $upfilename (@upfiles){ $shortupfilename = $1 if $upfilename =~ /[\\|\/]?([0-9a-zA-Z_\.]+)$/; if($language ne "English"){ if( length($upfile{$upfilename}) > $maxsize){ &header; &error_message("ファイルサイズが大きすぎます。",""); } } else { if( length($upfile{$upfilename}) > $maxsize){ &header; &error_message("Too mach file size.",""); } } ($filename,$fileexst) = ($1,$2) if $shortupfilename =~ /(.*)\.(\w+)$/; $fileexst=lc($fileexst); $a1=0; foreach(@permitup){ if ($_ eq $fileexst){ $a1=1;last; } } if($language ne "English"){ if(!($a1)) { &header; &error_message("拡張子 $fileexst はアップが許可されていません($in{'upct'})。",""); } } else { if(!($a1)) { &header; &error_message("extension $fileexst is not allowed to upload($in{'upct'}).",""); } } open(IMGOUT,">$imgdir$name$maxno\_$imgno.$fileexst"); binmode(IMGOUT); print IMGOUT $upfile{$upfilename}; close(IMGOUT); push(@fnt,"$name$maxno\_$imgno.$fileexst"); $imgexist=1; $imgno++; } $fnt=join(",", @fnt); } sub write_diary{ $diaryfile="$diarydir$name.$diaryletter"; $imgexist=0; if(!open(IN,"$datafile")){ &header; &error_message('datafile error2249','data file access failed.'); } @all=; close IN; $match=""; foreach $i(@all){ ($r_no,$r_name,$r_pass,$r_dummy)=split(/\t/,$i); if($r_name eq $name && $pass eq $r_pass){ $match=$i; } } if($match eq ""){ &header; &error_message('id/pass error','access failed.'); } if ($mode eq "write"){ if($language ne "English"){ if($body eq ""){ &header; &error_message('本文がありません',''); } } else { if($body eq ""){ &header; &error_message('Message is blank.',''); } } if (!open(DB,"$diaryfile")) { @lines=(); } @lines = ; close(DB); ($maxno,$dummy1,$dummy2,$dummy3)=split(/\t/,$lines[0]); $maxno++; #あげ対策 $maxno=time(); &write_images; #キーワード対応、新規日記 if($key_avail){ &jcode'convert(*body,'euc'); $count=1; $mcount=0; foreach $i(@keyword){ ($km,$keyno)=split(/\t/,$i); &jcode'convert(*km,'euc'); $body =~ s/$km/$km<\/a>/g; if($& eq $km){ $mes=''; &update_keyword; } $count++; } &jcode'convert(*body,'sjis'); } #キーワード対応ここまで追加 @lines=reverse(@lines); push(@lines,"$maxno\t$today2\t$title\t$body\t$fnt\t\t\n"); @lines=reverse(@lines); @out=(); $count=0; foreach $i(@lines){ if($count<$diarymax){ push(@out,$i); $count++; } } if (!open(OUT,">$diaryfile")) { &header; &error_message('filesystem error','access failed.'); } print OUT @out; close(OUT); chmod 0666,$diaryfile; if(!open(IN,"$datafile")){ &error_message('datafile error2315','data file access failed.'); } @all=; close IN; @out=(); foreach $i(@all){ ($no,$r_name,$pass,$anon,$race,$relm,$mainjob,$supportjob,$prof,$handle,$polhn,$mail,$home,$comment2,$point,$class,$time,$comment,$mrank,$etc[0],$etc[1],$etc[2],$prod[0],$prod[1],$prod[2],$prod[3],$prod[4],$prod[5],$prod[6],$prod[7],$prod[8],$prod[9],$prod[10],$prod[11],$prod[12],$prod[13],$prod[14],$prod[15],$lev[0],$lev[1],$lev[2],$lev[3],$lev[4],$lev[5],$lev[6],$lev[7],$lev[8],$lev[9],$lev[10],$lev[11],$lev[12],$lev[13],$lev[14],$lev[15],$lev[16],$lev[17],$lev[18],$lev[19])=split(/\t/,$i); $lev[15] =~ s/\n//g; $lev[16] =~ s/\n//g; if($r_name eq $name){ push(@out,"$no\t$r_name\t$pass\t$anon\t$race\t$relm\t$mainjob\t$supportjob\t$prof\t$handle\t$polhn\t$mail\t$home\t$comment2\t$point\t$class\t$timenow\t$comment\t$mrank\t$etc[0]\t$etc[1]\t$etc[2]\t$prod[0]\t$prod[1]\t$prod[2]\t$prod[3]\t$prod[4]\t$prod[5]\t$prod[6]\t$prod[7]\t$prod[8]\t$prod[9]\t$prod[10]\t$prod[11]\t$prod[12]\t$prod[13]\t$prod[14]\t$prod[15]\t$lev[0]\t$lev[1]\t$lev[2]\t$lev[3]\t$lev[4]\t$lev[5]\t$lev[6]\t$lev[7]\t$lev[8]\t$lev[9]\t$lev[10]\t$lev[11]\t$lev[12]\t$lev[13]\t$lev[14]\t$lev[15]\t$lev[16]\t$lev[17]\t$lev[18]\t$lev[19]\t\n"); } else { push(@out,$i); } } if(!open(OUT,">$datafile")){&header; &error_message('datafile error2329','data file access failed.');} print OUT @out; close OUT; #RSS用履歴ファイル作成 $historybase="DWRITE\t$name\t$title\t$rsstime\t$maxno\t$body\t$rh\t$addr\t\n"; &add_history; &reload_header; if($language ne "English"){ print "
書き込み終了
"; print "
MemberList Top
"; print "日記を書き込みました。自動的にトップページに戻ります
"; } else { print "
Writing finished.
"; print "Writing diray is done. Go back to top page.
"; } } elsif ($mode eq "oekaki"){ &header; if($language ne "English"){ print "
日記を書き込みます
"; } else { print "
Diary Writing Mode
"; } print "Go Top
"; print <<"EOM";
BBS Painter by ば科学的愛情
EOM } else { &header; if($language ne "English"){ print "
日記を書き込みます
"; } else { print "
Diary Writing Mode
"; } print "Go Top
"; print "
\ntitle

body

"; if($language ne "English"){ if($imgallow == 1){ for ($i=1; $i <= $imgmax; $i++){ print "画像$i
"; } } } else { if($imgallow == 1){ for ($i=1; $i <= $imgmax; $i++){ print "Image$i
"; } } } print"
"; } } sub show_diary { $diaryfile="$diarydir$name.$diaryletter"; if($diarybg ne ""){ $dbg=" bgcolor=$diarybg"; } if (!open(DB,"$diaryfile")) { if($language ne "English"){ print "
$name さんの日記はありません。
"; } else { print "
$name 's diray doesn't exist.
"; } } else { @lines = ; close(DB); if($language ne "English"){ print "
Diary Index
$name さんの日記。($showmax件表\示)

"; } else { print "
Diary Index
$name 's diary($showmax articles)

"; } if($page ne "all"){ print ""; $min=($page-1)*$showmax-1; $max=$page*$showmax; $count=0; foreach $i (@lines){ ($rno,$today2,$title,$body,$imgexist,$res)=split(/\t/,$i); if( ($mode eq "" && $count>$min && $count<$max )|| ($mode ne "" && $mode == $rno) ){ if(($name eq $c_name) && ($pass eq $c_pass)){ if($language ne "English"){ print ""; } else { print ""; } } else { print ""; } $body =~ s/(https?|ftp|gopher|telnet|whois|news)\:([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/$1\:$2<\/a>/ig; print "
"; if($imgexist ne ""){ print "
$title (open) [修正・削除]$today2($rno)
$title (open) [edit/delete]$today2($rno)
$title(open)$today2($rno)
"; @imgfiles = split(/,/,$imgexist); foreach $imgfile(@imgfiles){ ($type,$h,$w) = &image_getsize("$imgdir$imgfile"); if($h>$w){ if($h>200){ $w=int($w/$h*200);$h=200; } } else { if($w>200){ $h=int($h/$w*200);$w=200; } } print "クリックで拡大
"; } print "
$body

"; } else { print "$body
"; } if($res ne ""){ print "$res
"; } if($diaryres){ if($language ne "English"){ print "名前"; } else { print "Name"; } } print ""; } $count++; } if($mode eq ""){ if($page>1){ $flag++; $bpage=$page-1; if($language ne "English"){ $before="
前のページ"; } else { $before="former page"; } } if($count>$max){ $flag++; $page++; if($language ne "English"){ $after="次のページ"; } else { $after="next page"; } } if($flag){ print " "; print "$before "; print "$after"; } } print ""; } #page=all else { @all=""; foreach $i (@lines){ ($rno,$today2,$title,$body,$imgexist,$res)=split(/\t/,$i); if($today2 =~ /^[0-9][0-9]\/[0-9][0-9]\s(.*)/){ $today2=" $today2"; } push(@all,"$today2\t$rno\t$title\t$body\t$imgexist\t$res\n"); } @lines=reverse(sort(@all)); foreach $i (@lines){ ($rno,$today2,$title,$body,$imgexist,$res)=split(/\t/,$i); if($rno ne ""){ print "$title($rno)
\n"; } } } } } sub res_diary{ if($language ne "English"){ if($body eq ""){ &header; &error_message('本文がありません',''); } if($name eq ""){ &header; &error_message('名前がありません',''); } if ($body !~ /[\x81-\x9A]/ && $denyeng){ &header; &error_message('アルファベットのみの書き込みは禁止されています。',''); } } else { if($body eq ""){ &header; &error_message('no text',''); } if($name eq ""){ &header; &error_message('no name',''); } } &word_ban; if( $body =~ /
/) { $body="
$body
"; } $diaryfile="$diarydir$name2.$diaryletter"; &dirlock; if (!open(DB,"$diaryfile")) { &header; if($language ne "English"){ print "
$name さんの日記はありません。
"; } else { print "
$name's diary is not exist.
"; } } else { @lines = ; close(DB); foreach $i(@lines){ ($r_no,$r_today,$r_title,$r_body,$r_img,$r_res)=split(/\t/,$i); if($no !=$r_no){ push(@out,$i); } else { $r_res =~ s/\n//g; $r_res.="$name > $body ($today2)
"; $r_body =~ s/\n//g; #旧バージョン対策 if($sage == 0){ push(@out,"$r_no\t$r_today\t$r_title\t$r_body\t$r_img\t$r_res\t\n"); } else { $ageline="$r_no\t$r_today\t$r_title\t$r_body\t$r_img\t$r_res\t\n"; } } } if($sage !=0){ unshift(@out,$ageline); } if (!open(OUT,">$diaryfile")) { &header; &error_message('filesystem error','access failed.'); } print OUT @out; close(OUT); #RSS用履歴ファイル作成 $rsstime="20$year-$mon-$mday"."T$hour:$min:00+09:00"; $historybase="RESDIA\t$name $name2\t$timenow\t$rsstime\t$no\t$body\t$rh\t$addr\t\n"; &add_history; if(!open(IN,"$datafile")){&error_message('datafile error2480','data file access failed.');} @all=; close IN; @out=(); foreach $i(@all){ ($no,$r_name,$pass,$anon,$race,$relm,$mainjob,$supportjob,$prof,$handle,$polhn,$mail,$home,$comment2,$point,$class,$time,$comment,$mrank,$etc[0],$etc[1],$etc[2],$prod[0],$prod[1],$prod[2],$prod[3],$prod[4],$prod[5],$prod[6],$prod[7],$prod[8],$prod[9],$prod[10],$prod[11],$prod[12],$prod[13],$prod[14],$prod[15],$lev[0],$lev[1],$lev[2],$lev[3],$lev[4],$lev[5],$lev[6],$lev[7],$lev[8],$lev[9],$lev[10],$lev[11],$lev[12],$lev[13],$lev[14],$lev[15],$lev[16],$lev[17],$lev[18],$lev[19])=split(/\t/,$i); $lev[15] =~ s/\n//g; $lev[16] =~ s/\n//g; if($r_name eq $name2){ push(@out,"$no\t$r_name\t$pass\t$anon\t$race\t$relm\t$mainjob\t$supportjob\t$prof\t$handle\t$polhn\t$mail\t$home\t$comment2\t$point\t$class\t$timenow\t$comment\t$mrank\t$etc[0]\t$etc[1]\t$etc[2]\t$prod[0]\t$prod[1]\t$prod[2]\t$prod[3]\t$prod[4]\t$prod[5]\t$prod[6]\t$prod[7]\t$prod[8]\t$prod[9]\t$prod[10]\t$prod[11]\t$prod[12]\t$prod[13]\t$prod[14]\t$prod[15]\t$lev[0]\t$lev[1]\t$lev[2]\t$lev[3]\t$lev[4]\t$lev[5]\t$lev[6]\t$lev[7]\t$lev[8]\t$lev[9]\t$lev[10]\t$lev[11]\t$lev[12]\t$lev[13]\t$lev[14]\t$lev[15]\t$lev[16]\t$lev[17]\t$lev[18]\t$lev[19]\t\n"); } else { push(@out,$i); } } if(!open(OUT,">$datafile")){ &header; &error_message('datafile error2494','data file access failed.'); } print OUT @out; close OUT; rmdir($lockdir); &reload_header2; if($language ne "English"){ print "
書き込み終了
"; print "MemberList Top
"; print "自動的に戻ります
"; } else { print "
Writing finished.
"; print "Automatically back former page.
"; } } } sub edit_diary{ $diaryfile="$diarydir$name.$diaryletter"; if(!open(IN,"$datafile")){ &header; &error_message('datafile error2511','data file access failed.'); } @all=; close IN; $match=""; foreach $i(@all){ ($r_no,$r_name,$r_pass,$r_dummy)=split(/\t/,$i); if($r_name eq $name && $pass eq $r_pass){ $match=$i; } } if($match eq ""){ &header; &error_message('id/pass error','access failed.'); } if ($mode eq "del"){ &dirlock; if (!open(DB,"$diaryfile")) { &header; print "
$name さんの日記はありません。
"; rmdir($lockdir); } else { @lines = ; close(DB); foreach $i(@lines){ ($r_no,$r_today,$r_title,$r_body,$r_imgexist,$r_res)=split(/\t/,$i); if($no !=$r_no){ push(@out,$i); } else { unlink("$imgdir$r_imgexist"); } } if (!open(OUT,">$diaryfile")) { &header; &error_message('filesystem error','access failed.'); } print OUT @out; close(OUT); if(!open(IN,"$datafile")){ &error_message('datafile error2549','data file access failed.'); } @all=; close IN; @out=(); foreach $i(@all){ ($no,$r_name,$pass,$anon,$race,$relm,$mainjob,$supportjob,$prof,$handle,$polhn,$mail,$home,$comment2,$point,$class,$time,$comment,$mrank,$etc[0],$etc[1],$etc[2],$prod[0],$prod[1],$prod[2],$prod[3],$prod[4],$prod[5],$prod[6],$prod[7],$prod[8],$prod[9],$prod[10],$prod[11],$prod[12],$prod[13],$prod[14],$prod[15],$lev[0],$lev[1],$lev[2],$lev[3],$lev[4],$lev[5],$lev[6],$lev[7],$lev[8],$lev[9],$lev[10],$lev[11],$lev[12],$lev[13],$lev[14],$lev[15],$lev[16],$lev[17],$lev[18],$lev[19])=split(/\t/,$i); $lev[15] =~ s/\n//g; $lev[16] =~ s/\n//g; if($r_name eq $name){ push(@out,"$no\t$r_name\t$pass\t$anon\t$race\t$relm\t$mainjob\t$supportjob\t$prof\t$handle\t$polhn\t$mail\t$home\t$comment2\t$point\t$class\t$timenow\t$comment\t$mrank\t$etc[0]\t$etc[1]\t$etc[2]\t$prod[0]\t$prod[1]\t$prod[2]\t$prod[3]\t$prod[4]\t$prod[5]\t$prod[6]\t$prod[7]\t$prod[8]\t$prod[9]\t$prod[10]\t$prod[11]\t$prod[12]\t$prod[13]\t$prod[14]\t$prod[15]\t$lev[0]\t$lev[1]\t$lev[2]\t$lev[3]\t$lev[4]\t$lev[5]\t$lev[6]\t$lev[7]\t$lev[8]\t$lev[9]\t$lev[10]\t$lev[11]\t$lev[12]\t$lev[13]\t$lev[14]\t$lev[15]\t$lev[16]\t$lev[17]\t$lev[18]\t$lev[19]\t\n"); } else { push(@out,$i); } } if(!open(OUT,">$datafile")){ &header; &error_message('datafile error2563','data file access failed.'); } print OUT @out; close OUT; rmdir($lockdir); #RSS用履歴ファイル作成 $historybase="DERASE\t$name\t$title\t$rsstime\t$no\t$body\t$rh\t$addr\t\n"; &add_history; &reload_header; print "
削除終了
"; print "MemberList Top
"; print "記事No.$noを削除しました。自動的にトップページに戻ります
"; if(-z $diaryfile){ print "日記が全て削除されました。
"; unlink($diaryfile); } } } elsif ($mode eq "modify"){ if (!open(DB,"$diaryfile")) { &header; print "
$name さんの日記はありません。
"; rmdir($lockdir); } else { @lines = ; close(DB); $imgexist=0; if ($in{'upfile'} ne ""){ $in{'upfilename'} = $1 if $in{'upfilename'} =~ /[\\|\/]?([0-9a-zA-Z_\.]+)$/; if( length($in{'upfile'}) > $maxsize){ &header; &error_message("ファイルサイズが大きすぎます。",""); } ($filename,$fileexst) = ($1,$2) if $in{'upfilename'} =~ /(.*)\.(\w+)$/; $fileexst=lc($fileexst); $a1=0; foreach(@permitup){ if ($_ eq $fileexst){$a1=1;last;} } if(!($a1)) { &header; &error_message("拡張子 $fileexst はアップが許可されていません($in{'upct'})。",""); } $newname = "$name$no.$fileexst"; if (-e "$imgdir$newname") { $fileno = 2; while (-e "$imgdir$name${no}_$fileno.$fileexst"){ $fileno++; } $newname = "$name${no}_$fileno.$fileexst"; } open(IMGOUT,">$imgdir$newname"); binmode(IMGOUT); print IMGOUT $in{'upfile'}; close(IMGOUT); $imgexist=1; } #キーワード対応(修正) if($key_avail){ &jcode'convert(*body,'euc'); $count=1; $mcount=0; foreach $i(@keyword){ ($km,$keyno)=split(/\t/,$i); &jcode'convert(*km,'euc'); $body =~ s/$km/$km<\/a>/g; if($& eq $km){ $maxno=$no;$mes='(update)'; &update_keyword; } $count++; } &jcode'convert(*body,'sjis'); } #キーワード対応(ここまで) #レス修正時に$body2の後部に
がない場合は追記する if($body2 ne "" && !($body2 =~ /
$/)){ $body2 ="$body2
"; } foreach $i(@lines){ ($r_no,$r_today,$r_title,$r_body,$r_imgexist,$r_res)=split(/\t/,$i); if($no==$r_no){ $body =~ s/\n//g; $body2 =~ s/\n//g; $deleteimg = $FORM{'deleteimg'}; @imgexists_n = (); @imgexists = split(/,/,$r_imgexist); foreach $imgfile (@imgexists) { if ($deleteimg eq $imgfile && $comment eq "delete") { unlink("$imgdir$deleteimg"); } else { push(@imgexists_n, $imgfile); } } if ($imgexist) { push(@imgexists_n, $newname); } $r_imgexist = join(",", @imgexists_n); push(@out,"$no\t$today2\t$title\t$body\t$r_imgexist\t$body2\t\n"); } else { push(@out,$i); } } if (!open(OUT,">$diaryfile")) { &header; &error_message('filesystem error','access failed.'); } print OUT @out; close(OUT); rmdir($lockdir); #RSS用履歴ファイル作成 $historybase="DMODIF\t$name\t$title\t$rsstime\t$no\t$body\t$rh\t$addr\t\n"; &add_history; &reload_header; print "
修正終了
"; print "
MemberList Top
"; print "日記を修正しました。自動的にトップページに戻ります
"; } } else { &header; if (!open(DB,"$diaryfile")) { print "
$name さんの日記はありません。
"; } else { @lines = ; close(DB); foreach $i (@lines){ ($r_no,$r_today,$r_title,$r_body,$r_imgexist,$r_res)=split(/\t/,$i); if($no==$r_no){ $hit=$i;} } if($hit eq ""){ &header; &error_message('no such number','access failed.'); } ($r_no,$r_today,$r_title,$r_body,$r_imgexist,$r_res)=split(/\t/,$hit); print "
日記の修正・削除を行います
"; print "Go Top
"; $r_body =~ s/
/\n/g; $r_body =~ s/<//g; $r_body =~ s/]*>//g; $r_body =~ s/<\/a>//g; print "
\n"; print "記事No. $no
\n"; print "title
\n"; print "
\n"; print "body
\n"; print "
\n"; print "res
\n"; $r_res =~ s/
/\n/g; $r_res =~ s/<//g; $r_res =~ s/]*>//g; $r_res =~ s/<\/a>//g; print "
"; foreach $imgexist (split(/,/,$r_imgexist)) { print "クリックで拡大選択
"; } if($r_imgexist ne ""){ print "選択した画像の消去
"; } print "画像を追加

"; print ""; print ""; print ""; print ""; } } } sub dirlock { if($lockdir eq ""){return;} if((-M $lockdir)>0.001){ #1分半ほどlockdirが存在している場合は強制的に削除 rmdir($lockdir); } for ($i = 0; $i <= 20; $i++) { if (mkdir($lockdir, 0755)) { last; } else { sleep(1); } } $SIG{'TERM'} = $SIG{'PIPE'} = $SIG{'HUP'} = "sigexit"; if($i == 20){ &error_message('busy','now busy, please access later.'); } } sub sigexit { rmdir($lockdir); exit(1); } sub keitai { &make_salt; require('keitai.pl'); &header_i; print ""; print "$guild_name List
"; if($function eq "$button[0]"){ &login_i; } elsif($function eq "mission"){ &login_i; } elsif($function eq "prof"){ &prof_i; } elsif($function eq "$button[1]"){ if(!$diaryallow){ &write_diary_i; } } elsif($function eq "new"){ &new_regist_i; } elsif($function eq "diary"){ &diary_i; } elsif($function eq "resdiary"){ &res_diary_i; &diary_i; } elsif($function eq 'send' && $mes_avail == 1){ &send_message_i; } elsif($function eq 'check' && $mes_avail == 1){ &check_message_i; } elsif($function eq 'history'){ &history_i; } else { &list_i; } &footer_i; exit; } sub make_salt{ srand(); $xx = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" . "abcdefghijklmnopqrstuvwxyz" . "0123456789."; $salt = substr($xx, int(rand(63)), 1); $salt .= substr($xx, int(rand(63)), 1); $salt .= substr($xx, int(rand(63)), 1); $salt .= substr($xx, int(rand(63)), 1); } sub conv_zenkaku{ for($j=0;$j<20;$j++){ $lev[$j]=~ s/0/0/g; $lev[$j]=~ s/1/1/g; $lev[$j]=~ s/2/2/g; $lev[$j]=~ s/3/3/g; $lev[$j]=~ s/4/4/g; $lev[$j]=~ s/5/5/g; $lev[$j]=~ s/6/6/g; $lev[$j]=~ s/7/7/g; $lev[$j]=~ s/8/8/g; $lev[$j]=~ s/9/9/g; } for($j=0;$j<9;$j++){ $prod[$j]=~ s/0/0/g; $prod[$j]=~ s/1/1/g; $prod[$j]=~ s/2/2/g; $prod[$j]=~ s/3/3/g; $prod[$j]=~ s/4/4/g; $prod[$j]=~ s/5/5/g; $prod[$j]=~ s/6/6/g; $prod[$j]=~ s/7/7/g; $prod[$j]=~ s/8/8/g; $prod[$j]=~ s/9/9/g; } } sub rss_write { if(!open(IN,"$historyfile")){ &header; &error_message('datafile error2449','data file access failed.'); } @list=; close IN; @list=reverse(@list); $items=""; $item=""; $count=0; foreach $i(@list){ if($count <10){ ($dummy,$rname,$rtitle,$rtime,$rmaxno,$rbody)=split(/\t/,$i); $rbody =~ s/&/&/g; $rbody =~ s/"/"/g; $rbody =~ s/'/'/g; $rbody =~ s/&lt;/</g; $rbody =~ s/&gt;/>/g; if($dummy eq "DWRITE"){ $rstitle="$rtitle : $rname さんの日記[$rmaxno]更新"; $rsource="$rname/diary/$rmaxno"; $link="$site$script?function=prof&name=$rname&mode=$rmaxno"; } if($dummy eq "NEWREG"){ $rstitle="$rtitle : $rname さん[$rmaxno]新規登録"; $rsource="$rname/newreg/$rmaxno"; $link="$site$script?function=profdetail&name=$rname"; } if($dummy eq "DMODIF"){ $rstitle="$rtitle : $rname さんの日記[$rmaxno]修正"; $rsource="$rname/dmodif/$rmaxno"; $link="$site$script?function=prof&name=$rname&mode=$rmaxno&mod"; } if($dummy eq "PROFED"){ $rstitle="$rname さんプロフィール変更"; $rsource="$rname/profed/$rmaxno"; $link="$site$script?function=profdetail&name=$rname"; $rbody =~ s/\//
/g; } if($dummy eq "DERASE"){ $rstitle="$rname さんの日記[$rmaxno]が削除"; $rsource="$rname/derase/$rmaxno"; $link="$site$script?function=prof&name=$rname&del"; $rbody="deleted"; } if($dummy eq "RESDIA"){ ($n1,$n2)=split(/ /,$rname); $rstitle="$n2 さんの日記[$rmaxno]に$n1さんがレス"; $rsource="$n1$n2$rtitle/resdia/$rmaxno"; $link="$site$script?function=prof&name=$n2&no=$rmaxno&$rtitle"; } if($dummy eq "MERIED"){$rstitle="$rname さんメリットポイント変更"; $rsource="$rname/profed/$rmaxno"; $link="$site$script?function=profdetail&name=$rname"; $rbody =~ s/\//
/g; } if($dummy eq "CUSTED"){$rstitle="$rname さん$custom_field[0]変更"; $rsource="$rname/profed/$rmaxno"; $link="$site$script?function=profdetail&name=$rname"; $rbody =~ s/\//
/g; } #DWRITE\t$name\t$title\t$rsstime\t$maxno\t$body\t\n #NEWREG\t$name\tNewMember\t$rsstime\t$no\t\t\n #DMODIF\t$name\t$title\t$rsstime\t$no\t$body\t\n #PROFED\t$name\tPROFED\t$rsstime\t$no\t\t\n #DERASE\t$name\t$title\t$rsstime\t$no\t$body\t\n #RESDIA\t$name $name2\t$title\t$rsstime\t$no\t$body\t\n $rbodyrdf = $rbody; $rbodyrdf =~ s/
/\n/g; $items .=" \n"; $item .="\n$rstitle\n $link\n $rtitle $rbodyrdf\n $rtime\n\n"; $rbodyatom = $rbody; $rbodyatom =~ s/
/\n/g; $atom_item .= <<"EOM"; $rstitle $rsource $rtime $rname $rstitle \n $rbodyatom\n ]]> EOM } $count++; } if( $rdfname ne '' ){ if(!open(OUT,">$rdfname")){ &header; &error_message('datafile error2422','data file access failed.'); } print OUT <<"EOM"; $topic $site$script $rsstime $topic $items $item EOM close OUT; chmod 0666,$rdfname; } if( $atomname ne '' ){ if(!open(OUT,">$atomname")){ &header; &error_message('datafile error2422','data file access failed.'); } print OUT <<"EOM"; $topic $rsstime guildmember.cgi $guild_name $guild_name $site$script $site$script $atom_item EOM close OUT; chmod 0666,$rdfname; } } sub update_keyword{ $htmlfile="$keydir$keyno\.html"; if(!open(IN,$htmlfile)){ &header; &error_message('datafile error2626','data file access failed.'); } @html=; close IN; @outhtml=(); foreach $i(@html){ if($i =~ /