約 4,295,284 件
https://w.atwiki.jp/chimata/pages/15.html
ここでは管理者が知り得たCSSやwiki編集のソースコードについて記載します。 wikiを作成時に検索したのですが、どうも「こうやると便利」とか見やすい・解りやすい「コード一覧」が見当たらなかったので自身で作成しようと考えました。 このページを見て得するのは 「英語は中一レベル以下ですが何か?」 「ソース? おいしいの?」 「でも勘でパソコンやネットの機能を使える」 という巷と同レベルの方々。部分的に不明瞭な箇所もあるでしょうが、そこは持ち前の勘で乗り切って下さい。 @wikiの機能であるCSSカスタマイズ。因みに管理人の基本デザインは『ライス』です。 『ここで設定するCSSは現在選択している基本デザインのCSSを上書きすることができます。』 この文章の『基本デザインのCSS』をクリックするとCSSソースコードが表示されます。 それをコピペして『■ユーザ定義CSS:』に貼り付け、部分的に削除するなりしていじってみましょう。『■基本デザインのCSSを無効化する』にチェック入れるのもお忘れなく。で、変更。 いじりようによってはサイトが大変な事になっているはずです。でも、これが管理者の調べ方。どこをいじるとどう変化するってのが解ると、それは理解につながるってモンです。 で、いくつか解読ったこと。 ※解読はソースコードの上部から順に行っていきます。 『#editmenu{display none;}』 ↑のコードを削ったらサイトの最上部に下記の項目が出現。 なるほど、エディットメニューをディスプレイに表示しない(none)ための記述だったようです。 英語表記なのが気になりますが今は方法が不明ですし、表示する必要もないなぁ。 |NewPage|Search|PageList|RSS | Help@Wiki | Contact Setting Logined ( chimata ) Logout 『#mainpage h2#pagenametop{display none;}』 これは各メインページの名前を上部に表示するか否かでした。 ふと、コードの途中で改行……どうやらコードを中途半端なところ、単語の途中で改行すると無効になるようです。 妙なところにスペースが入っていたりするのは何でだろ? 消しても何にもならないし。見やすくするためか。 h2ってなんだろ。 『#mainpage .pageinfo{display none;}』 ページの最上部に 『EditThisPage Referer(0)』 の2項目が出現。このページを編集する、てのが常に上部にあるのは何かにつけて便利だけど閲覧者には邪魔。 ログインした時のみ表示ってはできるかな。 () ↑この半角カッコには表示数の指定って意味があるみたい。 例えばここの更新履歴を表示するのに 『#recent(5)』 と入力しているんだけど、この中の数字を変えるとその数字に応じて表示してくれる件数が変わった。 同様に日記をつけるときに 『#weblog(1)』 と入力すると最新の日記1件のみが表示された。ページをすっきりしたい、できるだけ多く表示したいという時にはここの数字をいじってみよう。 ソースとは関係ないけど、タブブラウザがオススメ。 まだまだあります。要するに、上2桁がR、中2桁がG、下2桁がBなので、1桁違うだけで微妙に色が変わってきます。ご自分でいろいろ組み合わせてみるのもベター。
https://w.atwiki.jp/jiglet/pages/35.html
ソースコードの構成簡略化 main関数 paint関数 使える関数 ソースコードを考える手順デザインを描いてみる 各画面状態に名前を付ける 完成板簡略ソース ソースコードの構成 一番最初はこの「HelloWorld」が読み込まれています。 これを使って構成を説明します。 import jp.jig.jiglet.*; public class HelloWorld extends Jiglet { public void main() { clearKey(); for (;;) { int key = getKey(); if (key = 0) { return; } repaint(); sleep(10); } } public void paint(boolean allDrawFlag) { setFont(0); setColor(0, 0, 0); drawString("HelloWorld", 10, 20); draw3DButton(100, 100, 20, 100); } } 簡略化 前書き{ main関数{ } paint関数{ } } main関数 制御関係について書く関数です。 携帯電話のこのキーを押すと、こういう動きをする など paint関数 表示関係について書く関数です。 main関数のrepaint()で呼び出されます。 文字を表示する など 使える関数 使える関数は、開発キットにあるAPIを調べる。 とりあえず一通り目を通す必要ありです。 リファレンスとして、このwiki内でもまとめてあります。 これに載っていない関数でも、基本的なjavaの関数は使えるので javaの道などで調べてください。 ソースコードを考える手順 自己流ですが紹介します。 デザインを描いてみる 携帯画面に表示される画面を、実際に描いてみます。(ノートにでも) 起動画面から描きはじめ、キー入力により画面状態が移行するのなら、それも描く。 あらゆるパターンを想像して描く 各画面状態に名前を付ける 描いた画面の絵の1枚1枚に、状態の名前を付けます。 付けた名前を下のように定数として宣言する。 {static final int ○○ = 0; static final int △△ = 1;} 完成板簡略ソース かなり簡略して書くとこんな感じ 前書き{ static final int ○○ = 0; static final int △△ = 1 int state = 0; //状態の保管する変数 main関数{ for(;;) { if (state == ○○) { } else if (state == △△) { } repaint(); sleep(10); } } paint関数{ if (state == ○○) { } else if (state == △△) { } } }
https://w.atwiki.jp/jp_programing/pages/22.html
ソースコード名 表示と実行
https://w.atwiki.jp/patd/pages/28.html
ココは@パーティー改造者がボランティアでソースを公開してくださる場所です。 ソースを快く公開してくださる人がいてくださると嬉しいです。 トップページのソースコード byホイホイ 今回必要なファイル:index.cgi まずindex.cgiを開き p style="width 300px;height 100px;background-color #000;overflow scroll;" 職業公開 br トップページ公開 /p こんな感じのを $contents .= "EOM"; の下に追加 更新内容とか追加したい場合は、 職業公開 br トップページ公開 /p ↓ 時間会得を追加 br 職業公開 br トップページ公開 /p こんな感じで増やしてく。用は br を増やせばいいってこと 宝クジ屋の画面ヘッダー byホイホイ 今回必要なファイル:kuzi.cgi これは宝クジ屋を追加していない人は全く関係ないです。 宝クジ屋を追加したいと思った人はINDEX.htmlから追加してみてください そこで追加したら、上のステータス表示がおかしいと思いませんか?そういうあなたに必要なソースです。 まず、kuzi.cgiの画面ヘッダーを見ます。そこを全て、消して sub header_html { my $nokori = $m{kuzitime} - $m{ltime}; $nokori = 0 if $nokori 0; print qq| div class="mes" 【$this_title】$e2j{money}: b $m{money} /b G $e2j{hp}: b $m{hp} /b / b $m{mhp} /b $e2j{mp}: b $m{mp} /b / b $m{mmp} /b /div |; print qq| b 宝券番号 $m{kuzi} のこり時間$nokori秒 /b | if $m{kuzi}; } に書き換え、すると出来ます 上修正 by聖龍 sub header_html { my $nokori = $m{kuzitime} - $m{ltime}; $nokori = 0 if $nokori 0; print qq| div class="mes" 【$this_title】$e2j{money}: b $m{money} /b G $e2j{hp}: b $m{hp} /b / b $m{mhp} /b $e2j{mp}: b $m{mp} /b / b $m{mmp} /b |; print qq| b 宝券番号 $m{kuzi} のこり時間$nokori秒 /b | if $m{kuzi}; } print qq| /div |; } のほうが正しい 宝くじ景品増やすには by暗黒剣 my $okane1 = int(rand(99)+1); を unless ($m{kuzi}) { $mes = "くじをかっていないじゃないか"; return; } の下に追加 そして$npc_com = に$okane1が金貨賞、を追加 そんでif($m{kuzi} eq $okane1){ $npc_com .= " br / おめでとう!金貨賞だ!1000000Gを君に振り込んでおいた"; $m{money} += 1000000; write_news(qq| span class="tenshon" $mさんが金貨賞に当たりました!おめでとうございます! /span |); } をついかすればOK? このようにいろいろふやしていけばいい^^ @ギルド勢力内でのギルドの表示を上のほうへ by聖龍 my $gid = unpack H* , $gname; $gname = qq| img src="$guilddir/$gid/mark.gif" alt="ギルドマーク" / $gname| if -f "$guilddir/$gid/mark.gif"; のしたの $contents .= qq| table class="table1" width="100%" tr td style="white-space normal;" $count位 span style="color $gcolor;" $gname /span b $gcount /b 人 b $gpoint /b Point $gmes /td /tr \n|; の width="100% を width="77%にする ソースコードじゃない 単純な話だ by聖龍 view_monster.cgiについて # 出現モンスターを確認するためのもの(管理用) # http //自分のURL/party2/_view_monster.cgi?pass=管理者パスワード # ※「自分のURL」とはこのCGIを設置した場所までのアドレス つかねーよと思うかもしれませんが単純に # http //自分のURL/party2/_view_monster.cgi?pass=管理者パスワード じゃなくて # http //自分のURL/party2/view_monster.cgi?pass=管理者パスワード が正しいだけなんです以上w ドロップを2つ設定する byシャナ (既にドロップを設定している方の@パ以外では動作を保証しません) 流れは殆どドロップシステムの追加と同じ。最初にconfig.cgiの変数の所を @battle_datas = (qw/name addr color time ten job sp old_job old_sp mhp hp mmp mp mat at mdf df mag ag hit state tmp get_exp get_money icon wea arm drop drop2/); に変更。(最後にdrop2を追加するだけ。) 次に、battle.cgiの#NPCがプレイヤーを倒した時。または自爆の所を下のように変更 # NPCがプレイヤーを倒した時。または自爆 return if $ms{$m}{color} eq $npc_color || $m eq $y; $com .= qq| br / span class="get" $mたちはそれぞれ $ms{$y}{get_exp} の$e2j{exp}と $ms{$y}{get_money} Gを手に入れた! /span |; if ($ms{$y}{drop}) { if (int(rand(1)) 4) { my $item_name = $ites[$ms{$y}{drop}][1]; if (!$m{ite}) { $npc_com .= "$item_nameを手に入れました!"; $m{ite} = $ms{$y}{drop}; require "./lib/_add_collection.cgi"; add_collection; } elsif ($m{is_full}) { $npc_com .= "$item_name を拾った!!しかし、$mの預かり所はいっぱいだった…。$mはあきらめた"; } else { $npc_com .= "$item_name を拾った!$item_name は預かり所に送られました"; send_item; } }} if ($ms{$y}{drop2}) { if (int(rand(1)) 4) { my $item_name = $ites[$ms{$y}{drop2}][1]; if (!$m{ite}) { $npc_com .= "$item_nameを手に入れました!"; $m{ite} = $ms{$y}{drop2}; require "./lib/_add_collection.cgi"; add_collection; } elsif ($m{is_full}) { $npc_com .= "$item_name を拾った!!しかし、$mの預かり所はいっぱいだった…。$mはあきらめた"; } else { $npc_com .= "$item_name を拾った!$item_name は預かり所に送られました"; send_item; } }} for my $name (@partys) { next if $ms{$name}{hp} = 0; if ($name eq $m) { # 倒した人 $m{exp} += $ms{$y}{get_exp}; $m{money} += $ms{$y}{get_money}; my $par = 3; # 仲間になる確率(自分より弱い) if ( is_strong) { # 自分より強い判定 $win ? $m{kill_p}++ $m{kill_m}++; $par = 1 unless $ms{$m}{job} eq 12 ; # 仲間になる確率(自分より強い) }}} そして、stage○.cgiの1つ1つのモンスターデータの所に drop2 = アイテム番号を入力, を追加。drop2を設定しない場合はそのままでOK。 これで完成です!ドロップするアイテムを武器に変更する場合はbattle.cgiを下に変更 # NPCがプレイヤーを倒した時。または自爆 return if $ms{$m}{color} eq $npc_color || $m eq $y; $com .= qq| br / span class="get" $mたちはそれぞれ $ms{$y}{get_exp} の$e2j{exp}と $ms{$y}{get_money} Gを手に入れた! /span |; if ($ms{$y}{drop}) { if (int(rand(1)) 4) { my $item_name = $ites[$ms{$y}{drop}][1]; if (!$m{ite}) { $npc_com .= "$item_nameを手に入れました!"; $m{ite} = $ms{$y}{drop}; require "./lib/_add_collection.cgi"; add_collection; } elsif ($m{is_full}) { $npc_com .= "$item_name を拾った!!しかし、$mの預かり所はいっぱいだった…。$mはあきらめた"; } else { $npc_com .= "$item_name を拾った!$item_name は預かり所に送られました"; send_item; } }} if ($ms{$y}{drop2}) { if (int(rand(1)) 4) { my $item_name = $weas[$ms{$y}{drop2}][1]; if (!$m{wea}) { $npc_com .= "$item_nameを手に入れました!"; $m{wea} = $ms{$y}{drop2}; require "./lib/_add_collection.cgi"; add_collection; } elsif ($m{is_full}) { $npc_com .= "$item_name を拾った!!しかし、$mの預かり所はいっぱいだった…。$mはあきらめた"; } else { $npc_com .= "$item_name を拾った!$item_name は預かり所に送られました"; send_item; } }} for my $name (@partys) { next if $ms{$name}{hp} = 0; if ($name eq $m) { # 倒した人 $m{exp} += $ms{$y}{get_exp}; $m{money} += $ms{$y}{get_money}; my $par = 3; # 仲間になる確率(自分より弱い) if ( is_strong) { # 自分より強い判定 $win ? $m{kill_p}++ $m{kill_m}++; $par = 1 unless $ms{$m}{job} eq 12 ; # 仲間になる確率(自分より強い) }}} Lvが20以下の人は経験値2倍 byシャナ battle.cgiの経験値・ゴールド習得等の所を以下に変更。 $com .= qq| br / span class="get" $mたちはそれぞれ $ms{$y}{get_exp}×$bonus の$e2j{exp}と $ms{$y}{get_money}×$bonus Gを手に入れた! /span |; for my $name (@partys) { next if $ms{$name}{hp} = 0; if ($name eq $m) { # 倒した人 if ( $m{lv} eq 20 ) { $bonus = 2; } else { $bonus = 1; } $m{exp} += $ms{$y}{get_exp}*$bonus; $m{money} += $ms{$y}{get_money}*$bonus; wikiのバク。謝罪 byホイホイ wikiにバクが発見されましてソースコードの一部が表示されないというのを聞きました。 これはwikiの性質上どうしようもないことです。今まで気がつかずまことに申し訳ありませんでした これからは上のほうの『編集』をクリックし、ここを編集するところからソースコードをお持ちください @パーティーDXのペット選択機能 byシャナ system.cgiとconfig.cgiの変数 p_name p2_name p3_name を削除して pet1 pet2 pet3を追加。(他のものはそのままでOK) 次に、_data.cgiを開いて下記のものを追加。 #================================================= # ペット1(削除/並び変え自由) #================================================= @pet1s = ( #0No 1名前,※2HP,3MP,4力,5守,6素, [0, ---- , 0, 0, 0, 0, 0,], [1, スライム , 3, 2, 4, 2, 3,], ); #================================================= # ペット2(削除/並び変え自由) #================================================= @pet2s = ( #0No 1名前,※2HP,3MP,4力,5守,6素,7転職条件 [0, ---- , 0, 0, 0, 0, 0,], [1, ドラキー , 2, 4, 3, 3, 3,], ); #================================================= # ペット3(削除/並び変え自由) #================================================= @pet3s = ( #0No 1名前,※2HP,3MP,4力,5守,6素,7転職条件 [0, ---- , 0, 0, 0, 0, 0,], [1, フレイム , 5, 1, 4, 4, 1,], ); 次に、new_entry.cgiを開き、全て下にかきかえてください。 #!/usr/bin/perl require config.cgi ; require _side_menu.cgi ; require ./lib/_data.cgi ; #================================================ # 新規登録 Created by Merino #================================================ # 初期で選べる職業(No) my @default_jobs = (1..12); my @default_pet1s = (1); my @default_pet2s = (1); my @default_pet3s = (1); #================================================ decode; access_check; header; error") if $mente_min; $in{mode} eq new_entry ? new_entry new_form; footer; exit; #================================================ # 新規登録フォーム #================================================ sub new_form { my $job_html = qq| select class="select1" name="job" |; for my $i (@default_jobs) { $job_html .= qq| option value="$i" $jobs[$i][1] /option |; } $job_html .= qq| /select |; my $pet1_html = qq| select class="select1" name="pet1" |; for my $i (@default_pet1s) { $pet1_html .= qq| option value="$i" $pet1s[$i][1] /option |; } $pet1_html .= qq| /select |; my $pet2_html = qq| select class="select1" name="pet2" |; for my $i (@default_pet2s) { $pet2_html .= qq| option value="$i" $pet2s[$i][1] /option |; } $pet2_html .= qq| /select |; my $pet3_html = qq| select class="select1" name="pet3" |; for my $i (@default_pet3s) { $pet3_html .= qq| option value="$i" $pet3s[$i][1] /option |; } $pet3_html .= qq| /select |; my $yid = $ENV{ QUERY_STRING }; my $contents = "EOM"; h2 新規登録 /h2 form method="$method" action="new_entry.cgi" input type="hidden" name="mode" value="new_entry" / input type="hidden" name="yid" value="$yid" / ul li 記号(,;" \\/@)や空白は使えません。 /li li ネットマナーを守って楽しく遊びましょう。 /li li b 他人が不愉快になるような書き込みや多重登録は禁止です。見つけ次第削除します。 /b /li /ul table class="table1" tr td プレイヤー名: /td td input type="text" name="name" class="text_box1" / /td /th /tr tr td /td td 全角4(半角8)文字まで /td /tr tr td パスワード: /td td input type="text" name="pass" class="text_box1" / /td /th /tr tr td /td td 半角英数字4~12文字まで /td /tr tr td 職業: /td td $job_html /td /th /tr tr td /td td 職業は重要です。説明書の特徴をよく読み、自分に合った職業を選びましょう /td /tr tr td ペット1: /td td $pet1_html /td /th /tr tr td /td td ペット1は戦闘でとても重要です。説明書の特徴をよく読み、自分に合ったペット1を選びましょう。 /td /tr tr td ペット2: /td td $pet2_html /td /th /tr tr td /td td ペット2は戦闘でとても重要です。説明書の特徴をよく読み、自分に合ったペット2を選びましょう /td /tr tr td ペット3: /td td $pet3_html /td /th /tr tr td /td td ペット3は戦闘でとても重要です。説明書の特徴をよく読み、自分に合ったペット3を選びましょう /td /tr tr td $e2j{sex}: /td td input type="radio" name="sex" value="m" checked="checked" / 男 input type="radio" name="sex" value="f" / 女 /td /tr tr td /td td 性別によって転職できる職業やアイコンが違います /td /tr /table p input type="submit" value="@登録" / /p /form br / EOM side_menu($contents); } #================================================ # 新規登録チェック&完了処理 #================================================ sub new_entry { check_black_list; check_entry; check_registered; create_user; $contents = "EOM"; p 以下の内容で登録しました /p p class="strong" ※プレイヤー名とパスワードはログインするときに必要なので、忘れないように! p table class="table1" tr th プレイヤー /th td $m{name} /td tr th パスワード /th td $m{pass} /td tr th $e2j{sex} /th td $e2j{$m{sex}} /td tr th 職業 /th td $jobs[$m{job}][1] /td tr th $e2j{hp} /th td align="right" $m{hp} /td tr th $e2j{mp} /th td align="right" $m{mp} /td tr th $e2j{at} /th td align="right" $m{at} /td tr th $e2j{df} /th td align="right" $m{df} /td tr th $e2j{ag} /th td align="right" $m{ag} /td tr th ペット1 /th td $m{p1_name} /td tr th $e2j{hp} /th td align="right" $m{p1_hp} /td tr th $e2j{mp} /th td align="right" $m{p1_mp} /td tr th $e2j{at} /th td align="right" $m{p1_at} /td tr th $e2j{df} /th td align="right" $m{p1_df} /td tr th $e2j{ag} /th td align="right" $m{p1_ag} /td tr th ペット2 /th td $m{p2_name} /td tr th $e2j{hp} /th td align="right" $m{p2_hp} /td tr th $e2j{mp} /th td align="right" $m{p2_mp} /td tr th $e2j{at} /th td align="right" $m{p2_at} /td tr th $e2j{df} /th td align="right" $m{p2_df} /td tr th $e2j{ag} /th td align="right" $m{p2_ag} /td tr th ペット3 /th td $m{p3_name} /td tr th $e2j{hp} /th td align="right" $m{p3_hp} /td tr th $e2j{mp} /th td align="right" $m{p3_mp} /td tr th $e2j{at} /th td align="right" $m{p3_at} /td tr th $e2j{df} /th td align="right" $m{p3_df} /td tr th $e2j{ag} /th td align="right" $m{p3_ag} /td /table div 説明書は読みましたか? br / わからないことがある場合は、まず説明書を読みましょう。 /div form method="$method" action="login.cgi" input type="hidden" name="is_cookie" value="1" / input type="hidden" name="login_name" value="$in{name}" / input type="hidden" name="pass" value="$in{pass}" / input type="submit" value="@プレイ" / /form EOM side_menu; } #================================================ # 登録チェック #================================================ sub check_entry { error("不正な登録処理です")if $ENV{QUERY_STRING}; error("プレイヤー名が入力されていません")unless $in{name}; error("パスワードが入力されていません")if $in{pass} eq ; error("$e2j{sex}が入力されていません")if $in{sex} eq ; error("プレイヤー名に不正な文字( ,;\"\ \@ )が含まれています")if $in{name} =~ /[,;\"\ \@]/; error("プレイヤー名に不正な文字( @ )が含まれています")if $in{name} =~ /@/; error("プレイヤー名に不正な空白が含まれています")if $in{name} =~ / |\s/; error("プレイヤー名は全角4(半角8)文字以内です")if length($in{name}) 8; error("パスワードは半角英数字で入力して下さい")if $in{pass} =~ m/[^0-9a-zA-Z]/; error("パスワードは半角英数字4~12文字です")if length $in{pass} 4 || length $in{pass} 12; error("プレイヤー名とパスワードが同一文字列です")if $in{name} eq $in{pass}; error("$e2j{sex}が異常です")unless $in{sex} eq m || $in{sex} eq f ; my $is_ng_job = 1; for my $i (@default_jobs) { if ($i eq $in{job}) { $is_ng_job = 0; last; } } error("職業が異常です") if $is_ng_job; $id = unpack H* , $in{name}; error("その名前はすでに登録されています") if -d "$userdir/$id"; open my $fh, " $logdir/entry.cgi" or error("$logdir/entry.cgiファイルが読み込めません"); my $line = $fh ; close $fh; my($entry_count, $last_addr) = split / /, $line; error("現在定員のため、新規登録は受け付けておりません") if $entry_count = $max_entry; error("多重登録は禁止しています") if $addr eq $last_addr; } #================================================ # 登録処理 #================================================ sub create_user { $id = unpack H* , $in{name}; # フォルダ・ファイル作成 mkdir "$userdir/$id", $mkdir or error("その名前はすでに登録されています"); for my $file_name (qw/collection depot depot_s hanasu home home_member item_send_mes job_master letter letter_log memory money monster monster_book profile recipe reload screen_shot send_item_mes stock user/) { my $output_file = "$userdir/$id/$file_name.cgi"; open my $fh, " $output_file" or error("$output_file ファイルが作れませんでした"); close $fh; chmod $chmod, $output_file; } open my $fh2, " $userdir/$id/collection.cgi" or error("$userdir/$id/collection.cgiファイルが作れませんでした"); print $fh2 ",\n,\n,\n"; close $fh2; %m = (); $m = $m{name} = $in{name}; $m{pass} = $in{pass}; $m{job} = $in{job}; $m{sex} = $in{sex}; $m{money} = 200; $m{mhp} = int(rand(3)) + 30; $m{mmp} = int(rand(3)) + 6; $m{at} = int(rand(3)) + 6; $m{df} = int(rand(3)) + 6; $m{ag} = int(rand(3)) + 6; $m{hp} = $m{mhp}; $m{mp} = $m{mmp}; $m{lv} = 1; $m{icon} = "job/$m{job}_$m{sex}.gif"; $m{color} = $default_color; $m{home} = $m; $m{pass} = $in{pass}; $m{job} = $in{job}; $m{sex} = $in{sex}; $m{money} = 200; $m{p1_name} = $pet1s[$m{pet1}[1]]; $m{p1_mhp} = int(rand(3)) + 30; $m{p1_mmp} = int(rand(3)) + 6; $m{p1_at} = int(rand(3)) + 6; $m{p1_df} = int(rand(3)) + 6; $m{p1_ag} = int(rand(3)) + 6; $m{p1_hp} = $m{p1_mhp}; $m{p1_mp} = $m{p1_mmp}; $m{p1_lv} = 1; $m{p1_icon} = "mon/スライムの画像ファイル.gif"; $m{p1_color} = $default_color; $m{p2_name} = $pet2s[$m{pet2}[1]]; $m{p2_mhp} = int(rand(3)) + 30; $m{p2_mmp} = int(rand(3)) + 6; $m{p2_at} = int(rand(3)) + 6; $m{p2_df} = int(rand(3)) + 6; $m{p2_ag} = int(rand(3)) + 6; $m{p2_hp} = $m{p_mhp}; $m{p2_mp} = $m{p_mmp}; $m{p2_lv} = 1; $m{p2_icon} = "mon/ドラキーの画像ファイル.gif"; $m{p2_color} = $default_color; $m{p3_name} = $pet3s[$m{pet3}[1]]; $m{p3_mhp} = int(rand(3)) + 30; $m{p3_mmp} = int(rand(3)) + 6; $m{p3_at} = int(rand(3)) + 6; $m{p3_df} = int(rand(3)) + 6; $m{p3_ag} = int(rand(3)) + 6; $m{p3_hp} = $m{p_mhp}; $m{p3_mp} = $m{p_mmp}; $m{p3_lv} = 1; $m{p3_icon} = "mon/フレイムの画像ファイル.gif"; $m{p3_color} = $default_color; for my $k (qw/sleep job_lv exp medal coin coupon rare tired sp old_job old_sp wea wea_hp tate atama ude zyou ka asi ite is_full is_get is_eat kill_p kill_m cas_c hero_c mao_c pet1 pet2 pet3 元々の変数など(p1_hp etc...)/) { $m{$k} = 0; } write_user; write_memory("冒険者 b $m /b 誕生!"); write_news(" b $m /b という冒険者が参加しました"); require ./lib/_add_monster_book.cgi ; write_monster_book; plus_entry_count; copy("$htmldir/space.gif", "$userdir/$id/bgimg.gif"); # 紹介ID付なら紹介者に小さなメダル送信 if ($in{yid}) { my $send_name = pack H* , $in{yid}; send_item($send_name, 3, 23, "$m{name}(紹介加入)"); } } #================================================ # 登録者数プラス #================================================ sub plus_entry_count { open my $fh, "+ $logdir/entry.cgi" or error("$logdir/entry.cgiファイルが開けません"); eval { flock $fh, 2; }; my $line = $fh ; my($entry_count, $last_addr) = split / /, $line; ++$entry_count; seek $fh, 0, 0; truncate $fh, 0; print $fh "$entry_count $addr "; close $fh; } #================================================ # ブラックリストのIPと同じかチェック #================================================ sub check_black_list { open my $fh, " $logdir/black_list.cgi" or error("$logdir/black_list.cgiファイルが読み込めません"); my $line = $fh ; close $fh; error("あなたのホストからは登録することが禁止されています") if $line =~ /,$host,/; } #================================================ # 多重登録禁止:全ユーザーのIPアドレスを調べる #================================================ sub check_registered { opendir my $dh, "$userdir" or error("ユーザーディレクトリが開けません"); while (my $dir_name = readdir $dh) { next if $dir_name =~ /\./; my %datas = get_you_datas($dir_name, 1); if ($addr eq $datas{addr}) { # add_black_list; error("多重登録は禁止しています"); } } closedir $dh; } これだけで作動すると思います。他の基本システムと合わない所があるので、そこは改造していって下さい。 知らない人たちのために by聖龍 admin.cgiの #for my $k (qw/recipe/) { #unless (-f "$userdir/$id/$k.cgi") { #open my $fh, " $userdir/$id/$k.cgi"; #close $fh; #chmod $chmod, "$userdir/$id/$k.cgi"; #} #} の使い方 for my $k (qw/入れたいcgi拡張子(cgi抜き)/) { unless (-f "$userdir/$id/$k.cgi") { open my $fh, " $userdir/$id/$k.cgi"; close $fh; chmod $chmod, "$userdir/$id/$k.cgi"; } } に書き換えてadmin.cgiにアクセスするとuserディレクトリーに追加されます以上w ドロップ率を追加! by聖龍 ドロップシステムにドロップ率を入れて見ましょう @battle_datas = (qw/name addr color time ten job sp old_job old_sp mhp hp mmp mp mat at mdf df mag ag hit state tmp get_exp get_money icon wea arm drop/); にdrop_pを追加 次にbattle.cgiの↓ if ($ms{$y}{drop}) { if (int(rand(1)) 4) { my $item_name = $ites[$ms{$y}{drop}][1]; if (!$m{ite}) { $npc_com .= "$item_nameを手に入れました!"; $m{ite} = $ms{$y}{drop}; require "./lib/_add_collection.cgi"; add_collection; } elsif ($m{is_full}) { $npc_com .= "$item_name を拾った!!しかし、$mの預かり所はいっぱいだった…。$mはあきらめた"; } else { $npc_com .= "$item_name を拾った!$item_name は預かり所に送られました"; send_item; } } } を以下のように変更します if ($ms{$y}{drop}) { if ($ms{$y}{drop_p} = int(rand(100))) { my $item_name = $ites[$ms{$y}{drop}][1]; if (!$m{ite}) { $npc_com .= "$item_nameを手に入れました!"; $m{ite} = $ms{$y}{drop}; require "./lib/_add_collection.cgi"; add_collection; } elsif ($m{is_full}) { $npc_com .= "$item_name を拾った!!しかし、$mの預かり所はいっぱいだった…。$mはあきらめた"; } else { $npc_com .= "$item_name を拾った!$item_name は預かり所に送られました"; send_item; } } } んで、ステージのモンスターのドロップ下に drop_p= 20, 見たいな感じにドロップ率を指定してください
https://w.atwiki.jp/ntgrock/pages/79.html
ソースコード一覧(2008年11月26日変更) 基幹プログラム main.cpp ・エントリポイント、全てはここから始まる ・シングルトンGameAppクラスを初期化 ・メインループを呼び出す GameApp.h GameApp.cpp ・ゲーム全体を表現するクラス。 ・メインループから抜けるだけで解放処理はデストラクタがやってくれる ・初期シーンの設定、シーンのnewはここで行われている FPS調整クラス Timer.h Timer.cpp ・タイマーなんてGameAppからしか呼ばないから実体で保持してる ・フレームスキップ機能を持たせるために、前フレームの処理時間が単位時間を超過していた場合 isElapsedFrame()がtrueを返すようにした。さてどうなることやら DXライブラリラッパー関連 DXLFacade.h DXLFacade.cpp ・DXライブラリにあまり依存しないクラスはここから間接参照するようにする ・例えばシーン内の小粒なクラス(キャラクター、ステージなど) ・後にするであろうDXライブラリからの移植を簡単にするため サウンド関連 SoundManager.h SoundManager.cpp ・DXライブラリにおもいっくそ依存してるのでここではDXライブラリの直接使用を許可 ・loadFile(ファイル名)で読み込んで、play(ファイル名,再生方法)で鳴らす ・要らなくなったら解放することシーン最後でreleaseAll()すればおk 入力関連 Input.h? Input.cpp? ・こいつもDXライブラリの直接使用を許可 ・Input instance().player(P1).getInput();でフラグ値を取ってくる ・長いのでインライン関数にするか if(GetInput(P1) INPUT_A){/*Aが押された時の処理~*/} ・キーコンフィグをファイルに吐き出す機能もつけた、が実用に足るかどうかは疑問 Control.h? Control.cpp? ・各プレイヤーの入力に対応するクラス。3人やら4人にも対応可能?めんどくさいからやらないけど ・入力猶予の処理もここでやる。1F,2Fだけ同時押しを待つ。 シーン関連 SceneData.h Scene.h 特定の音が連続して鳴ったら前の音を止める機能をつけたい、利用側の実装待ち
https://w.atwiki.jp/l2j-jp/pages/11.html
ソースコードの編集 ソースコードに手を加えないと実現できないことを書く。 てゆーか、ソースみて思いついたことのメモっぽいw ソースコードの編集マナポーション簡易ハック版 お餅 キャラクター名が3文字未満のキャラが作成できない件 重量制限を100%まで無効にする OEの上昇値の変更 染料の上限撤廃 レイド石化・沈黙解除 装備品のグレードペナルティ廃止 オンラインプレーヤーのリスト表示コマンド追加 マナポーション 使えないので、調べてみた。実装されていなかった。 前の実装は履歴みてないのでよくわからんが、残骸が gameserver/model/L2Potion.java っぽかった。これみると 435 MP回復させるみたい。 1.マナポのスキルを空いているスキルIDに突っ込む。瞬間POTの定義を参考にした datapack_development/data/stats/skills/2500-2599.xml を L2J_JP/data/stats/skills にコピーして編集 最後の行「 /list 」の直前にこれを突っ込む。番号は空いてたので適当につけた。 !--added by gyo-- skill id="2555" levels="1" name="Mana Potion" set name="power" val="435.0"/ set name="target" val="TARGET_SELF"/ set name="skillType" val="MANAHEAL"/ set name="operateType" val="OP_ACTIVE"/ set name="castRange" val="-1"/ set name="effectRange" val="-1"/ set name="isPotion" val="true"/ for /for /skill 2.アイテムハンドラにマナポの動作を定義。これが簡易版の最初の方法 L2J_JP/java/net/sf/l2j/gameserver/handler/itemhandlers/Potion.java ソースのcase文とこで727の次にこれを追記 // added by gyo case 728 // mana_potion, xml 2555 by gyo res = usePotion(activeChar, 2555, 1); break; 簡易ハック版 使えないので、どっちかをやってみる。 L2J_JP/java/net/sf/l2j/gameserver/handler/itemhandlers/Potion.javaソースのcase文とこで727の次にこれを追記。マナポのID 728を「強力マナのハーブ」と同じ扱いにしてみる。 // added by gyo case 728 // mana_potion, xml ? res = usePotion(activeChar, 2279, 2); break; 「超強力マナのハーブ」2279, 3 だとMPが全快しちまった。。。 L2J_JP/java/net/sf/l2j/gameserver/model/L2Potion.java 「setCurrentHpPotion1」とこにある次の記述を、「setCurrentMpPotion1」のブロックにコピペする。これで726の「マナ回復補助ポーション」も使えるのかな? // added by gyo case (728) double nowMp = activeChar.getMaxMp(); nowMp+=435; if (nowMp = activeChar.getMaxMp()) { nowMp = activeChar.getMaxMp(); } activeChar.setCurrentMp(nowMp); break; case (726) _milliseconds = 500; _duration = 15; _effect = 1.5; startPotionMpRegeneration(activeChar); break; これは意味なかった。。。使えないアイテムはhandlerの方で動作を定義するのな お餅 お餅も実装されてないじゃん。 スキルXMLの2136にHP回復だけの定義はあるけど、コアシステムがHPとMP同時回復設定をサポートしてくれないとダメポて書いてある !-- Needs Core support Heal HP 3% heal MP 1% at the same time -- つーことで、本来はショボい代物。本鯖でもそんなもんだった記憶があるし http //www.l2j-jp.info/forum/viewtopic.php?t=365 java/net/sf/l2j/gameserver/handler/itemhandlers/Potions.java いじってなければ171行目、マナポのコードを追加してたら174行目あたりの、case 5591 の直前にこれを突っ込む 参照URLんとこだと、お餅がスペシャルアイテム化しとる。HPMP全回復て。。。ライフキューブやめて、ポーションの最後のパラメータを「1」にすると本来の挙動に近くなるはず。。。せめて「2」くらいにしとかないとつまらん。 // added by gyo case 5283 // Rice Cake //res = usePotion(activeChar, 4338, 1); //Life Cubic For Novice //res |= usePotion(activeChar, 2278, 3); //Superior Herb of Life //res |= usePotion(activeChar, 2279, 3); //Superior Herb of Mana res = true; usePotion(activeChar, 2278, 2); //Greater Herb of Life usePotion(activeChar, 2279, 2); //Greater Herb of Mana break; マナポとお餅のコード追加で、426行目。フォーラムには、お餅を使用済みにするにはif文はこうじゃない?って書いてあったけど、その後変更になったようでハーブ判定の記述はなかったぞ?これはとりあえず見送り。参考までにメモっとく // [L2J_JP EDIT - TSL] if (res || item.getItemType() == L2EtcItemType.HERB || itemId == 5283) ん~、これじゃだめみたいだ。お餅つかえないや。。。こいつはどうかな? // added by gyo case 5283 // Rice Cake res = usePotion(activeChar, 2136, 1); usePotion(activeChar, 2279, 1); break; キャラクター名が3文字未満のキャラが作成できない件 L2_GameServer/net/sf/l2j/gameserver/clientpackets/CharacterCreate.java 107行目 // from http //www.l2j-jp.info/forum/viewtopic.php?t=11 //else if ((_name.length() 3) || (_name.length() 16) || !Util.isAlphaNumeric(_name) || !isValidName(_name)) else if ((_name.length() 1) || (_name.length() 16) || !Util.isAlphaNumeric(_name) || !isValidName(_name)) L2_JPでは適用されてた。。。本家のソースみてた。。。 // [L2J_JP EDIT - TSL] else if ((_name.length() 1) || (_name.length() 16) || !Util.isAlphaNumeric(_name) || !isValidName(_name)) 重量制限を100%まで無効にする java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java 1837行目~ // edit by gyo from http //www.l2j-jp.info/forum/viewtopic.php?t=11 //if (weightproc 500 || _dietMode) if (weightproc 1000 || _dietMode) { newWeightPenalty = 0; } // edit by gyo from http //www.l2j-jp.info/forum/viewtopic.php?t=11 //else if (weightproc 666) //{ //newWeightPenalty = 1; //} //else if ( weightproc 800) //{ //newWeightPenalty = 2; //} //else if (weightproc 1000) //{ //newWeightPenalty = 3; //} else { newWeightPenalty = 4; } OEの上昇値の変更 参考URL:http //eiyouchu.blog69.fc2.com/blog-entry-86.html ソース:java/net/sf/l2j/gameserver/clientpackets/RequestEnchantItem.java 384行目あたり item.setEnchantLevel(item.getEnchantLevel() + 1); この「+ 1」が上昇値。数字を書き換えれば1枚貼るとその数字分OE値が上がるみたい。 てことで、1枚目というか+0に貼ると+30、2枚目以降は+5づつ増えるようにするにはこの行をこう書き換えるといいのかな? // edit by gyo //item.setEnchantLevel(item.getEnchantLevel() + 1); if (item.getEnchantLevel() == 0) {//1枚目 item.setEnchantLevel(30); } else {// 2枚目以降 item.setEnchantLevel(item.getEnchantLevel() + 5); } Nスク、祝スク、クリスクで動作を変えるには、さらに条件を追加しないといかんので、これに置き換える。めんどい。。。 Nスクは1枚目+30で2枚目以降+5づつ、祝スクは1枚目+40で2枚目以降+2づつ、クリスクは1枚目+50で2枚目以降+1づつ、にする例。とにかく + の後の数字を書き換えればやりたいようにできる。 こんなんだから、武器と防具とアクセでさらに変えようとかは思わないほうがよさげw // edit by gyo //item.setEnchantLevel(item.getEnchantLevel() + 1); for (int scrollId ENCHANT_SCROLLS) {// Nスクの動作 if (scroll.getItemId() == scrollId) { if (item.getEnchantLevel() == 0) {//1枚目 item.setEnchantLevel(30); } else {// 2枚目以降 item.setEnchantLevel(item.getEnchantLevel() + 5); } break; } } for (int scrollId BLESSED_SCROLLS) {// 祝スクの動作 if (scroll.getItemId() == scrollId) { if (item.getEnchantLevel() == 0) {//1枚目 item.setEnchantLevel(40); } else {// 2枚目以降 item.setEnchantLevel(item.getEnchantLevel() + 2); } break; } } for (int scrollId CRYSTAL_SCROLLS) {// クリスクの動作 if (scroll.getItemId() == scrollId) { if(item.getEnchantLevel() == 0){//1枚目 item.setEnchantLevel(50); } else {// 2枚目以降 item.setEnchantLevel(item.getEnchantLevel() + 1); } break; } } 染料の上限撤廃 5以上にできるようにしちゃう java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java private void recalcHennaStats() 7536行目~ この6行をコメントアウトしちゃう // edit by gyo //if (_hennaINT 5)_hennaINT=5; //if (_hennaSTR 5)_hennaSTR=5; //if (_hennaMEN 5)_hennaMEN=5; //if (_hennaCON 5)_hennaCON=5; //if (_hennaWIT 5)_hennaWIT=5; //if (_hennaDEX 5)_hennaDEX=5; レイド石化・沈黙解除 レイドよりレベルが8以上高くても石化・沈黙しないようにする java/net/sf/l2j/gameserver/model/L2Character.java 石化対応:protected void onHitTimer(...) 5345行目~ if (level target.getLevel() + 8) の「8」をありえない程高い数字に書き換える。レイドは20からしかいないから80とかでいいかも 沈黙対応:public void callSkill(...) 6408行目~ if ((target.isRaid() getLevel() target.getLevel() + 8) || (target2 instanceof L2Character (((L2Character)target2).isRaid() getLevel() ((L2Character)target2).getLevel() + 8))) の「8」を2つとも80とかに書き換える。 装備品のグレードペナルティ廃止 うまくいくとエキスパーティーズなくてもLv1からS80とか装備できるけど、面白いのか微妙だなぁ L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java refreshExpertisePenalty() で何もしないようにすればできそう 1912行目あたり、メソッドの1行目に追加 return; 以降、メソッド内全部コメントアウトw オンラインプレーヤーのリスト表示コマンド追加 海外サイトで見つけた。たぶん「/online」でシステムメッセージにプレーヤー名をリスト表示させる機能を追加するもの。いらいないけど、参考までに置いておく。 {{ref OnlinePlayers.txt}} ====== Players Online ====== プレーヤー名 ... ======================= パッチだから、最初の4行のファイルパスを書き換えて、patchコマンドを実行するだけ。GNUのWindows版でもあれば使える 名前 コメント
https://w.atwiki.jp/551100/pages/21.html
ソースコードの編集 ソースコードに手を加えないと実現できないこと ソースコードの編集マナポーション簡易ハック版 お餅 キャラクター名が3文字未満のキャラが作成できない件 重量制限を100%まで無効にする OEの上昇値の変更 重量制限による状態異常撤廃 染料の上限撤廃 レイド石化・沈黙解除 装備品のグレードペナルティ廃止 オンラインプレーヤーのリスト表示コマンド追加 マナポーション 使えないので、調べてみた。実装されていなかった。 前の実装は履歴みてないのでよくわからんが、残骸が gameserver/model/L2Potion.java っぽかった。これみると 435 MP回復させるみたい。 1.マナポのスキルを空いているスキルIDに突っ込む。瞬間POTの定義を参考にした datapack_development/data/stats/skills/2500-2599.xml を L2J_JP/data/stats/skills にコピーして編集 最後の行「 /list 」の直前にこれを突っ込む。番号は空いてたので適当につけた。 !--added by gyo-- skill id="2555" levels="1" name="Mana Potion" set name="power" val="435.0"/ set name="target" val="TARGET_SELF"/ set name="skillType" val="MANAHEAL"/ set name="operateType" val="OP_ACTIVE"/ set name="castRange" val="-1"/ set name="effectRange" val="-1"/ set name="isPotion" val="true"/ for /for /skill 2.アイテムハンドラにマナポの動作を定義。これが簡易版の最初の方法 L2J_JP/java/net/sf/l2j/gameserver/handler/itemhandlers/Potion.java ソースのcase文とこで727の次にこれを追記 // added by gyo case 728 // mana_potion, xml 2555 by gyo res = usePotion(activeChar, 2555, 1); break; 簡易ハック版 使えないので、どっちかをやってみる。 L2J_JP/java/net/sf/l2j/gameserver/handler/itemhandlers/Potion.javaソースのcase文とこで727の次にこれを追記。マナポのID 728を「強力マナのハーブ」と同じ扱いにしてみる。 // added by gyo case 728 // mana_potion, xml ? res = usePotion(activeChar, 2279, 2); break; 「超強力マナのハーブ」2279, 3 だとMPが全快しちまった。。。 L2J_JP/java/net/sf/l2j/gameserver/model/L2Potion.java 「setCurrentHpPotion1」とこにある次の記述を、「setCurrentMpPotion1」のブロックにコピペする。これで726の「マナ回復補助ポーション」も使えるのかな? // added by gyo case (728) double nowMp = activeChar.getMaxMp(); nowMp+=435; if (nowMp = activeChar.getMaxMp()) { nowMp = activeChar.getMaxMp(); } activeChar.setCurrentMp(nowMp); break; case (726) _milliseconds = 500; _duration = 15; _effect = 1.5; startPotionMpRegeneration(activeChar); break; これは意味なかった。。。使えないアイテムはhandlerの方で動作を定義するのな お餅 お餅も実装されてないじゃん。 スキルXMLの2136にHP回復だけの定義はあるけど、コアシステムがHPとMP同時回復設定をサポートしてくれないとダメポて書いてある !-- Needs Core support Heal HP 3% heal MP 1% at the same time -- つーことで、本来はショボい代物。本鯖でもそんなもんだった記憶があるし http //www.l2j-jp.info/forum/viewtopic.php?t=365 java/net/sf/l2j/gameserver/handler/itemhandlers/Potions.java いじってなければ171行目、マナポのコードを追加してたら174行目あたりの、case 5591 の直前にこれを突っ込む 参照URLんとこだと、お餅がスペシャルアイテム化しとる。HPMP全回復て。。。ライフキューブやめて、ポーションの最後のパラメータを「1」にすると本来の挙動に近くなるはず。。。せめて「2」くらいにしとかないとつまらん。 // added by gyo case 5283 // Rice Cake //res = usePotion(activeChar, 4338, 1); //Life Cubic For Novice //res |= usePotion(activeChar, 2278, 3); //Superior Herb of Life //res |= usePotion(activeChar, 2279, 3); //Superior Herb of Mana res = true; usePotion(activeChar, 2278, 2); //Greater Herb of Life usePotion(activeChar, 2279, 2); //Greater Herb of Mana break; マナポとお餅のコード追加で、426行目。フォーラムには、お餅を使用済みにするにはif文はこうじゃない?って書いてあったけど、その後変更になったようでハーブ判定の記述はなかったぞ?これはとりあえず見送り。参考までにメモっとく // [L2J_JP EDIT - TSL] if (res || item.getItemType() == L2EtcItemType.HERB || itemId == 5283) ん~、これじゃだめみたいだ。お餅つかえないや。。。こいつはどうかな? // added by gyo case 5283 // Rice Cake res = usePotion(activeChar, 2136, 1); usePotion(activeChar, 2279, 1); break; キャラクター名が3文字未満のキャラが作成できない件 L2_GameServer/net/sf/l2j/gameserver/clientpackets/CharacterCreate.java 107行目 // from http //www.l2j-jp.info/forum/viewtopic.php?t=11 //else if ((_name.length() 3) || (_name.length() 16) || !Util.isAlphaNumeric(_name) || !isValidName(_name)) else if ((_name.length() 1) || (_name.length() 16) || !Util.isAlphaNumeric(_name) || !isValidName(_name)) L2_JPでは適用されてた。。。本家のソースみてた。。。 // [L2J_JP EDIT - TSL] else if ((_name.length() 1) || (_name.length() 16) || !Util.isAlphaNumeric(_name) || !isValidName(_name)) 重量制限を100%まで無効にする java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java 1837行目~ // edit by gyo from http //www.l2j-jp.info/forum/viewtopic.php?t=11 //if (weightproc 500 || _dietMode) if (weightproc 1000 || _dietMode) { newWeightPenalty = 0; } // edit by gyo from http //www.l2j-jp.info/forum/viewtopic.php?t=11 //else if (weightproc 666) //{ //newWeightPenalty = 1; //} //else if ( weightproc 800) //{ //newWeightPenalty = 2; //} //else if (weightproc 1000) //{ //newWeightPenalty = 3; //} else { newWeightPenalty = 4; } OEの上昇値の変更 参考URL:http //eiyouchu.blog69.fc2.com/blog-entry-86.html ソース:java/net/sf/l2j/gameserver/clientpackets/RequestEnchantItem.java 384行目あたり item.setEnchantLevel(item.getEnchantLevel() + 1); この「+ 1」が上昇値。数字を書き換えれば1枚貼るとその数字分OE値が上がるみたい。 てことで、1枚目というか+0に貼ると+30、2枚目以降は+5づつ増えるようにするにはこの行をこう書き換えるといいのかな? // edit by gyo //item.setEnchantLevel(item.getEnchantLevel() + 1); if (item.getEnchantLevel() == 0) {//1枚目 item.setEnchantLevel(30); } else {// 2枚目以降 item.setEnchantLevel(item.getEnchantLevel() + 5); } Nスク、祝スク、クリスクで動作を変えるには、さらに条件を追加しないといかんので、これに置き換える。めんどい。。。 Nスクは1枚目+30で2枚目以降+5づつ、祝スクは1枚目+40で2枚目以降+2づつ、クリスクは1枚目+50で2枚目以降+1づつ、にする例。とにかく + の後の数字を書き換えればやりたいようにできる。 こんなんだから、武器と防具とアクセでさらに変えようとかは思わないほうがよさげw // edit by gyo //item.setEnchantLevel(item.getEnchantLevel() + 1); for (int scrollId ENCHANT_SCROLLS) {// Nスクの動作 if (scroll.getItemId() == scrollId) { if (item.getEnchantLevel() == 0) {//1枚目 item.setEnchantLevel(30); } else {// 2枚目以降 item.setEnchantLevel(item.getEnchantLevel() + 5); } break; } } for (int scrollId BLESSED_SCROLLS) {// 祝スクの動作 if (scroll.getItemId() == scrollId) { if (item.getEnchantLevel() == 0) {//1枚目 item.setEnchantLevel(40); } else {// 2枚目以降 item.setEnchantLevel(item.getEnchantLevel() + 2); } break; } } for (int scrollId CRYSTAL_SCROLLS) {// クリスクの動作 if (scroll.getItemId() == scrollId) { if(item.getEnchantLevel() == 0){//1枚目 item.setEnchantLevel(50); } else {// 2枚目以降 item.setEnchantLevel(item.getEnchantLevel() + 1); } break; } } 重量制限による状態異常撤廃 L2PcInstance.java下の行をコメントアウト if (weightproc 1000 || _dietMode) { newWeightPenalty = 0; } else if (weightproc 666) { newWeightPenalty = 1; } else if ( weightproc 800) { newWeightPenalty = 2; } else if (weightproc 1000) { newWeightPenalty = 3; } else { newWeightPenalty = 4; } 染料の上限撤廃 5以上にできるようにしちゃう java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java private void recalcHennaStats() 7536行目~ この6行をコメントアウトしちゃう // edit by gyo //if (_hennaINT 5)_hennaINT=5; //if (_hennaSTR 5)_hennaSTR=5; //if (_hennaMEN 5)_hennaMEN=5; //if (_hennaCON 5)_hennaCON=5; //if (_hennaWIT 5)_hennaWIT=5; //if (_hennaDEX 5)_hennaDEX=5; レイド石化・沈黙解除 レイドよりレベルが8以上高くても石化・沈黙しないようにする java/net/sf/l2j/gameserver/model/L2Character.java 石化対応:protected void onHitTimer(...) 5345行目~ if (level target.getLevel() + 8) の「8」をありえない程高い数字に書き換える。レイドは20からしかいないから80とかでいいかも 沈黙対応:public void callSkill(...) 6408行目~ if ((target.isRaid() getLevel() target.getLevel() + 8) || (target2 instanceof L2Character (((L2Character)target2).isRaid() getLevel() ((L2Character)target2).getLevel() + 8))) の「8」を2つとも80とかに書き換える。 装備品のグレードペナルティ廃止 うまくいくとエキスパーティーズなくてもLv1からS80とか装備できるけど、面白いのか微妙だなぁ L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java refreshExpertisePenalty() で何もしないようにすればできそう 1912行目あたり、メソッドの1行目に追加 return; 以降、メソッド内全部コメントアウトw オンラインプレーヤーのリスト表示コマンド追加 海外サイトで見つけた。たぶん「/online」でシステムメッセージにプレーヤー名をリスト表示させる機能を追加するもの。いらいないけど、参考までに置いておく。 {{ref OnlinePlayers.txt}} ====== Players Online ====== プレーヤー名 ... ======================= パッチだから、最初の4行のファイルパスを書き換えて、patchコマンドを実行するだけ。GNUのWindows版でもあれば使える 名前 コメント
https://w.atwiki.jp/teamaa/pages/18.html
ソースコード保存(フロント)
https://w.atwiki.jp/lightbox/pages/20.html
PHP ソースコード表示 #codehighlight(php){ ここにPHPソースコードを記述 } ※ #codehilight を使用すると、波型括弧は1つでOK なようです。 ( それでも問題の出る場合は、波型括弧のペアを増やすと良いでしょう ) ※ php を指定すると、関数が php サイトのマニュアルページにリンクされるようです ?php header( "Expires Wed, 31 May 2000 14 59 58 GMT" ); header( "Content-Type text/html; Charset=euc-jp" ); print "PHP version " . phpversion() . " br "; print "OS " . PHP_OS . " br "; print "include_path " . get_include_path() . " br "; print "PEAR_INSTALL_DIR " . PEAR_INSTALL_DIR . " br "; print "get_magic_quotes " . get_magic_quotes_gpc() . " br "; print "セッション保存パス " . session_save_path() . " br "; print "現在の言語 " . mb_language() . " br "; print "内部エンコーディング " . mb_internal_encoding() . " br "; print "リモートファイルの OPEN を許す " . ini_get( allow_url_fopen ) . " br "; $ver = substr(phpversion(),0,1) + 0; if ( $ver == 5 ) { print "リモートファイルの include を許す " . ini_get( allow_url_include ) . " br "; } print "最大実行時間 " . ini_get( max_execution_time ) . " 秒 br "; ? ソースコード表示の CSS 変更 #codehighlight(php){ のように、引数に php を指定していると、HTML に class="php" の PRE 要素が作成されます。 css 設定で、クラスに対して見栄えを調整します .html4strict,.javascript,.php,.css { border-color gray; border-style solid; border-width 1px; font-weight bold; padding 5px; background-color silver; }
https://w.atwiki.jp/yoshishi/pages/123.html
ソースコードモード