XS入門その2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[XS入門]]の続き記事。~
先にそっちを読むことを推奨する。~
この記事の目標は以下の通り。~
-''資源が変更できる''~
-''変数や定数の定義ができるようになる''~
-''簡単な条件分岐ができるようになる''~
#Contents
*資源を変更 [#bcd811d2]
まずは、前回できるようになったであろう、「属性を変更」を...
(資源を変更って何ですかって人は、→[[資源]])~
これは、xsEffectAmountの第一引数に、「cModResource」を記...
↓イメージ~
xsEffectAmount(cModResource, resourceID, operation, valu...
例えば、プレイヤー3が、交易時に交易量の金の50%分の食料...
xsEffectAmount(cModResource, cAttributeTradeFoodPercent,...
復習になるが、全プレイヤーに同様の設定をしたい場合は、最...
xsEffectAmount(cModResource, cAttributeTradeFoodPercent,...
それでは、順に説明していく。~
~
まず、最初の「cModResource」は固定なので、これは資源を変...
次のresourceIDには、変更したい資源について記載する。~
例えば、聖なる箱が生み出す金の量を調整したければ「cAttrib...
これについては例のごとく英語サイト「AoE2DE UGC Guide」か...
第三引数のoperationは、いわゆる「設定する」「足す」といっ...
ここは下記の二パターンだけ覚えればよい。~
-「''設定する''」:''cAttributeSet''
-「''足す''」:''cAttributeAdd''
第四引数の「value」は、効果量を指定する。~
引き算にしたい場合は、cAttributeAddを使用した上で、「-100...
~
注意点としては、元々の「資源を変更」自体、マスクデータや...
ちなみに、未使用のものもいっぱいある。今後のアプデで拡張...
大変申し訳ないが、本wikiの[[資源]]ページも、まだあまり充...
この値をいじってみたらこうなった!というのが分かったら教...
*パラメーターの定義 [#h4625df4]
次に、ちょっとプログラミング的だけど、使えると便利な話。~
[[attributeID]]の定数の話でもしたが、xsEffectAmountなどの...
例えば、以下のようなコードを書いたとする。~
xsEffectAmount(cMulAttribute, 236, cAttackReloadTime, 0....
さて、第二引数の236とは何の事だろうか?~
ほとんど休みなくXSを弄っている人からすれば分かるかもしれ...
「さて、一週間ぶりにxsいじってみるか!」みたいな人からす...
ちなみに正解は、「砲台」である。~
しかし、以下のように記述した場合はどうだろうか。~
const int BombardTower = 236;
xsEffectAmount(cMulAttribute, BombardTower, cAttackReloa...
これなら砲台のリロード速度をいじったんだな、ということが...
それでは、このようなパラメーターについて説明していく。~
まずは最初のconstではなく、次のintから。~
これはデータの「型」を示す。使いそうなものは以下の通り。...
-''string'':''テキストデータなど''
-''int'':''整数''
-''float'':''小数点を含む数''
-''bool'':''真か偽''
例えば、string型は、メッセージの表示、int型はユニット番号...
bool型についてはおいおい。~
次に、BombardTowerの部分。~
ここは実は自分が分かりやすい名前をつければよい。~
ぶっちゃけ、int Pokemonだろうが、int fearだろうがなんだっ...
半角スペースは使えない。半角英数(大文字可能)で命名しよ...
おすすめはちゃんと一目で分かる名前にすること。~
しかる後に、半角イコールを入れて、値を記載し、最後に半角...
注意点としては、string型を使う場合、イコールの後の文字列...
string message = "this is message";
xsChatData(message);
↑こんな感じである。~
**constについて [#uc452931]
これらのパラメーターは、一度宣言(型を表記して名前を付け...
例えば、
int hoge = 1;
と記載した下に、
//型の宣言は、型を変更しない場合、二回目以降は不要
hoge = 2;
とすれば、以降hogeは2になるし、
int piyo = 4;
を更に宣言して、
hoge = 3 + piyo;
とすれば7になる。
-''足す'':''+''
-''引く'':''-''
-''かける'':''*''
-''あまり'':''%''
※ちなみに割るについては、float型で宣言して、小数をかけた...
~
しかし、例えば、先程の砲台の値のようなものは不変であるか...
この場合に、この値は変数ではなく、定数ですよという意味に...
このconstは、つけなければバグるということはないが、定数と...
*条件設定入門① [#u4de48d6]
さて、ここまでの内容を読んだ人であれば、定数や変数を定義...
(できないようであれば、それはこの記事の説明がヘタクソだ...
そうすると、次なる野望というか、興味として、以下のような...
~
自分の文明や、敵の文明おきにパラメーター変えたりできない...
~
プレイヤー毎に設定できるようになってはいるが、文明という...
予め、その文明のユニークユニットについて設定しておくこと...
しかし、文明間で共通のユニットや建物に対し、文明おきに設...
この際に役に立つのが、条件分岐である。~
**情報を取得しよう [#m0bb2514]
ここでは、プレイヤー7の文明が何か判定し、その文明によっ...
あなたは常日頃からAI過大とのバトルを楽しんでいたが、基本...
その中でもどうもブルガリアが物足りない。~
そこで、敵の文明がブルガリアであるときだけにバフをかけら...
そのバフの内容は、城のヒットポイントを一万にすることだと...
城のIDは、AoE2DEのエディターなり、AdvancedGenieEditorなり...
const int Castle = 82;
~
さて、まず、あるプレイヤーの文明を取得するためには、以下...
xsGetPlayerCivilization(playerNumber)
これを使うと、そのプレイヤー番号の文明を、int型の数字で獲...
このため、int型の変数を定義して、プレイヤー7の文明番号を...
int player7Civilization = xsGetPlayerCivilization(7);
当然上の、「player7Civilization」は自分で好きな名前を付け...
ちなみに、文明おきの番号は→[[civilizationID]]に記載してい...
ブルガリアは、32かcBulgariansという定数であることがわかる...
**if文 [#kce0f1f8]
さて、そしたら以下のような文章をプログラミングする。~
''「もし、プレイヤー7の文明がブルガリアだったら、城のヒ...
これは、以下のように記載する。~
if(player7Civilization == cBulgarians){
xsEffectAmount(cSetAttribute, Castle, cHitpoints, 10...
}
~
順に説明しよう。~
まず、もし~ならを示すのが、if()である。~
半角括弧の中が、条件である。条件は色々設定できるがとりあ...
-==:同じなら
-!=:違うなら
つまり、if(player7Civilization == cBulgarians)の部分で、...
次に、間髪入れずに記載されている半角中括弧であるが、これ...
あくまで~するであり、何をするかは括弧の中に記載する。~
ちなみに括弧の中は何行になってもいい。例えばヒットポイン...
if(player7Civilization == cBulgarians){
xsEffectAmount(cSetAttribute, Castle, cHitpoints, 10...
xsEffectAmount(cMulAttribute, Castle, cAttackReloadT...
}
とすればいい。~
さらに言えば、何も記載しなかったとしてもバグらない。何も...
ちなみに、if文の中身は、↑の例のように、半角スペースを使っ...
括弧の記載し忘れや余計に記載することによるバグは極めて発...
もし付け忘れてバグっても、ゲーム開始時に何行目がバグって...
ちなみにテキストエディタではなく、Visual Studio Codeなど...
~
~
ここまでのコードの例をまとめると、こんな感じ。~
const int Castle = 82;
int player7Civilization = xsGetPlayerCivilization(7);
if(player7Civilization == cBulgarians){
xsEffectAmount(cSetAttribute, Castle, cHitpoints, 10...
}
***else if、else [#a78e7732]
あなたが好奇心と創作意欲の塊なら、「いや、俺はブルガリア...
この場合は、これまでの知識を生かして、
//定数は、なるべく頭のほうにまとめておく。
const int Castle = 82;
const int Champion = 567;
int player7Civilization = xsGetPlayerCivilization(7);
if(player7Civilization == cBulgarians){
xsEffectAmount(cSetAttribute, Castle, cHitpoints, 10...
}
if(player7Civilization == cBurmese){
xsEffectAmount(cModResource, cAttributeRelicWoodRate...
}
if(player7Civilization != cBulgarians){
//if文の中に、if文を書くことも可能。ネストとか呼んだ...
if(player7Civilization != cBurmese){
xsEffectAmount(cMulAttribute, Champion, cHitpoin...
}
}
のようにしてくれれば、動く。~
この際、''「同時発生することがありえない」''、''「同時発...
特にネストは、括弧の付け忘れが発生したり、プログラムが横...
※なお、視覚的にひと固まりになるので見やすいという利点以外...
今回の場合、プレイヤー7の文明がブルガリアであると同時に...
そうすると、以下のようになる。~
//定数は、なるべく頭のほうにまとめておく。
const int Castle = 82;
const int Champion = 567;
int player7Civilization = xsGetPlayerCivilization(7);
if(player7Civilization == cBulgarians){
xsEffectAmount(cSetAttribute, Castle, cHitpoints, 10...
}else if(player7Civilization == cBurmese){
xsEffectAmount(cModResource, cAttributeRelicWoodRate...
}else{
xsEffectAmount(cMulAttribute, Champion, cHitpoints, ...
}
※else ifは、一つ前のif文の中括弧が終わってすぐに記載する...
※elseは、上の条件すべてに当てはまらない場合になるので、「...
~
これで、文明おきにバフをかけることができようになるはずだ。~
~
終了行:
[[XS入門]]の続き記事。~
先にそっちを読むことを推奨する。~
この記事の目標は以下の通り。~
-''資源が変更できる''~
-''変数や定数の定義ができるようになる''~
-''簡単な条件分岐ができるようになる''~
#Contents
*資源を変更 [#bcd811d2]
まずは、前回できるようになったであろう、「属性を変更」を...
(資源を変更って何ですかって人は、→[[資源]])~
これは、xsEffectAmountの第一引数に、「cModResource」を記...
↓イメージ~
xsEffectAmount(cModResource, resourceID, operation, valu...
例えば、プレイヤー3が、交易時に交易量の金の50%分の食料...
xsEffectAmount(cModResource, cAttributeTradeFoodPercent,...
復習になるが、全プレイヤーに同様の設定をしたい場合は、最...
xsEffectAmount(cModResource, cAttributeTradeFoodPercent,...
それでは、順に説明していく。~
~
まず、最初の「cModResource」は固定なので、これは資源を変...
次のresourceIDには、変更したい資源について記載する。~
例えば、聖なる箱が生み出す金の量を調整したければ「cAttrib...
これについては例のごとく英語サイト「AoE2DE UGC Guide」か...
第三引数のoperationは、いわゆる「設定する」「足す」といっ...
ここは下記の二パターンだけ覚えればよい。~
-「''設定する''」:''cAttributeSet''
-「''足す''」:''cAttributeAdd''
第四引数の「value」は、効果量を指定する。~
引き算にしたい場合は、cAttributeAddを使用した上で、「-100...
~
注意点としては、元々の「資源を変更」自体、マスクデータや...
ちなみに、未使用のものもいっぱいある。今後のアプデで拡張...
大変申し訳ないが、本wikiの[[資源]]ページも、まだあまり充...
この値をいじってみたらこうなった!というのが分かったら教...
*パラメーターの定義 [#h4625df4]
次に、ちょっとプログラミング的だけど、使えると便利な話。~
[[attributeID]]の定数の話でもしたが、xsEffectAmountなどの...
例えば、以下のようなコードを書いたとする。~
xsEffectAmount(cMulAttribute, 236, cAttackReloadTime, 0....
さて、第二引数の236とは何の事だろうか?~
ほとんど休みなくXSを弄っている人からすれば分かるかもしれ...
「さて、一週間ぶりにxsいじってみるか!」みたいな人からす...
ちなみに正解は、「砲台」である。~
しかし、以下のように記述した場合はどうだろうか。~
const int BombardTower = 236;
xsEffectAmount(cMulAttribute, BombardTower, cAttackReloa...
これなら砲台のリロード速度をいじったんだな、ということが...
それでは、このようなパラメーターについて説明していく。~
まずは最初のconstではなく、次のintから。~
これはデータの「型」を示す。使いそうなものは以下の通り。...
-''string'':''テキストデータなど''
-''int'':''整数''
-''float'':''小数点を含む数''
-''bool'':''真か偽''
例えば、string型は、メッセージの表示、int型はユニット番号...
bool型についてはおいおい。~
次に、BombardTowerの部分。~
ここは実は自分が分かりやすい名前をつければよい。~
ぶっちゃけ、int Pokemonだろうが、int fearだろうがなんだっ...
半角スペースは使えない。半角英数(大文字可能)で命名しよ...
おすすめはちゃんと一目で分かる名前にすること。~
しかる後に、半角イコールを入れて、値を記載し、最後に半角...
注意点としては、string型を使う場合、イコールの後の文字列...
string message = "this is message";
xsChatData(message);
↑こんな感じである。~
**constについて [#uc452931]
これらのパラメーターは、一度宣言(型を表記して名前を付け...
例えば、
int hoge = 1;
と記載した下に、
//型の宣言は、型を変更しない場合、二回目以降は不要
hoge = 2;
とすれば、以降hogeは2になるし、
int piyo = 4;
を更に宣言して、
hoge = 3 + piyo;
とすれば7になる。
-''足す'':''+''
-''引く'':''-''
-''かける'':''*''
-''あまり'':''%''
※ちなみに割るについては、float型で宣言して、小数をかけた...
~
しかし、例えば、先程の砲台の値のようなものは不変であるか...
この場合に、この値は変数ではなく、定数ですよという意味に...
このconstは、つけなければバグるということはないが、定数と...
*条件設定入門① [#u4de48d6]
さて、ここまでの内容を読んだ人であれば、定数や変数を定義...
(できないようであれば、それはこの記事の説明がヘタクソだ...
そうすると、次なる野望というか、興味として、以下のような...
~
自分の文明や、敵の文明おきにパラメーター変えたりできない...
~
プレイヤー毎に設定できるようになってはいるが、文明という...
予め、その文明のユニークユニットについて設定しておくこと...
しかし、文明間で共通のユニットや建物に対し、文明おきに設...
この際に役に立つのが、条件分岐である。~
**情報を取得しよう [#m0bb2514]
ここでは、プレイヤー7の文明が何か判定し、その文明によっ...
あなたは常日頃からAI過大とのバトルを楽しんでいたが、基本...
その中でもどうもブルガリアが物足りない。~
そこで、敵の文明がブルガリアであるときだけにバフをかけら...
そのバフの内容は、城のヒットポイントを一万にすることだと...
城のIDは、AoE2DEのエディターなり、AdvancedGenieEditorなり...
const int Castle = 82;
~
さて、まず、あるプレイヤーの文明を取得するためには、以下...
xsGetPlayerCivilization(playerNumber)
これを使うと、そのプレイヤー番号の文明を、int型の数字で獲...
このため、int型の変数を定義して、プレイヤー7の文明番号を...
int player7Civilization = xsGetPlayerCivilization(7);
当然上の、「player7Civilization」は自分で好きな名前を付け...
ちなみに、文明おきの番号は→[[civilizationID]]に記載してい...
ブルガリアは、32かcBulgariansという定数であることがわかる...
**if文 [#kce0f1f8]
さて、そしたら以下のような文章をプログラミングする。~
''「もし、プレイヤー7の文明がブルガリアだったら、城のヒ...
これは、以下のように記載する。~
if(player7Civilization == cBulgarians){
xsEffectAmount(cSetAttribute, Castle, cHitpoints, 10...
}
~
順に説明しよう。~
まず、もし~ならを示すのが、if()である。~
半角括弧の中が、条件である。条件は色々設定できるがとりあ...
-==:同じなら
-!=:違うなら
つまり、if(player7Civilization == cBulgarians)の部分で、...
次に、間髪入れずに記載されている半角中括弧であるが、これ...
あくまで~するであり、何をするかは括弧の中に記載する。~
ちなみに括弧の中は何行になってもいい。例えばヒットポイン...
if(player7Civilization == cBulgarians){
xsEffectAmount(cSetAttribute, Castle, cHitpoints, 10...
xsEffectAmount(cMulAttribute, Castle, cAttackReloadT...
}
とすればいい。~
さらに言えば、何も記載しなかったとしてもバグらない。何も...
ちなみに、if文の中身は、↑の例のように、半角スペースを使っ...
括弧の記載し忘れや余計に記載することによるバグは極めて発...
もし付け忘れてバグっても、ゲーム開始時に何行目がバグって...
ちなみにテキストエディタではなく、Visual Studio Codeなど...
~
~
ここまでのコードの例をまとめると、こんな感じ。~
const int Castle = 82;
int player7Civilization = xsGetPlayerCivilization(7);
if(player7Civilization == cBulgarians){
xsEffectAmount(cSetAttribute, Castle, cHitpoints, 10...
}
***else if、else [#a78e7732]
あなたが好奇心と創作意欲の塊なら、「いや、俺はブルガリア...
この場合は、これまでの知識を生かして、
//定数は、なるべく頭のほうにまとめておく。
const int Castle = 82;
const int Champion = 567;
int player7Civilization = xsGetPlayerCivilization(7);
if(player7Civilization == cBulgarians){
xsEffectAmount(cSetAttribute, Castle, cHitpoints, 10...
}
if(player7Civilization == cBurmese){
xsEffectAmount(cModResource, cAttributeRelicWoodRate...
}
if(player7Civilization != cBulgarians){
//if文の中に、if文を書くことも可能。ネストとか呼んだ...
if(player7Civilization != cBurmese){
xsEffectAmount(cMulAttribute, Champion, cHitpoin...
}
}
のようにしてくれれば、動く。~
この際、''「同時発生することがありえない」''、''「同時発...
特にネストは、括弧の付け忘れが発生したり、プログラムが横...
※なお、視覚的にひと固まりになるので見やすいという利点以外...
今回の場合、プレイヤー7の文明がブルガリアであると同時に...
そうすると、以下のようになる。~
//定数は、なるべく頭のほうにまとめておく。
const int Castle = 82;
const int Champion = 567;
int player7Civilization = xsGetPlayerCivilization(7);
if(player7Civilization == cBulgarians){
xsEffectAmount(cSetAttribute, Castle, cHitpoints, 10...
}else if(player7Civilization == cBurmese){
xsEffectAmount(cModResource, cAttributeRelicWoodRate...
}else{
xsEffectAmount(cMulAttribute, Champion, cHitpoints, ...
}
※else ifは、一つ前のif文の中括弧が終わってすぐに記載する...
※elseは、上の条件すべてに当てはまらない場合になるので、「...
~
これで、文明おきにバフをかけることができようになるはずだ。~
~
ページ名: