したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |
レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。

改造・制作スレ part8

1名無しさん@桜花爛漫:2016/05/21(土) 22:17:05 ID:1hw1nxVw
改造・オリシナ制作などはこちらで。
過去に似たような質問があるかもしれないので、極力調べてから質問しましょう。

ヴァーレントゥーガまとめwiki シナリオ製作講座
http://www28.atwiki.jp/vahren_ency/pages/411.html


改造・制作スレ
http://jbbs.livedoor.jp/bbs/read.cgi/computer/42292/1250722590/l50
改造・制作スレ part2
http://jbbs.livedoor.jp/bbs/read.cgi/computer/42292/1282244590/l50
改造・制作スレ part3
http://jbbs.livedoor.jp/bbs/read.cgi/computer/42292/1305281909/l50
改造・制作スレ part4
http://jbbs.livedoor.jp/bbs/read.cgi/computer/42292/1331214703/
改造・制作スレ part5
http://jbbs.livedoor.jp/bbs/read.cgi/computer/42292/1350187379/
改造・制作スレ part6
http://jbbs.shitaraba.net/bbs/read.cgi/computer/42292/1372172557/
改造・制作スレ part7
http://jbbs.shitaraba.net/bbs/read.cgi/computer/42292/1396009373/

717名無しさん@寒露:2017/10/30(月) 09:13:56 ID:???
別に嫌ってないけどな
それどころかよくやると感心してたぞ
そういう風に喧嘩売るのやめなよ
そして答えてないのは語ることを持たないから

718名無しさん@寒露:2017/10/30(月) 10:12:58 ID:???
とりあえず一人やたら因縁つけてる奴がいるのは分かった

719名無しさん@寒露:2017/10/30(月) 14:02:17 ID:???
正直、同じレベルの検証ができないからありがとう以上の言葉を持てないんだよ
俺はこうやっていろいろ試して解明してくれてるのは非常に助かってるし嬉しいと思ってる

720名無しさん@寒露:2017/10/30(月) 15:41:24 ID:???
返答なし=嫌われてるってすごい理論だな
wikiって誰でも編集できることに意味があるんだから正しい情報に書き換えるのは別にいいでしょ
前のごたごたも何のことだか分からないし独り言状態ってぽつぽつ反応やお礼があるんだが

721名無しさん@寒露:2017/10/30(月) 16:48:26 ID:???
前のゴタゴタがすぐ上のことなら、自分の気に食わない人を同一人物と決めつけて、それに対する自分の意見を総意とする人がいるのはやだな
このスレは質問も検証も基本的に有意なことだと思うし、是非色々試して欲しい

722名無しさん@寒露:2017/10/30(月) 23:19:36 ID:???
加入ユニットに関して質問です

addUnitを使ってユニット加入イベントを作りたいのですが、領土1・その領土のキャパが1部隊という状態で、スクリプトを使って人材ユニットを陪臣でない状態で部隊に加入させる方法はないでしょうか?
どうしても陪臣でない状態で加入させたいと考えています

723名無しさん@寒露:2017/10/31(火) 04:11:14 ID:hT6ogIMA
>>722
非人材ユニットを領地に追加。これに部隊リーダーだった人材1をメンバーとして追加してさらに人材2を追加。
この部隊のリーダーユニットを削除してやればできるのでは。

724名無しさん@寒露:2017/10/31(火) 21:25:19 ID:???
>>723
addPower(POWER)
addUnit(MASTER,SPOT)
addUnit(DUMMY,POWER)
addUnit(NAKAMA,DUMMY)

storeLeaderOfPower( POWER , @aaa)

set(idx,0)
while(idx<count(@aaa)){

index(@aaa,idx,@aaa_get)
msg(&idx&の&@aaa_get&)
if(isTalent(@aaa_get)==0){
msg(加入)

addUnit(@aaa_get,MASTER)
}

add(idx,1)
}

changeMaster(MASTER)


こんな感じでやりましたが、加入の後のaddUnitが動かないですね
加入は表示されるので、通ってはいるみたいですが
間違ってる部分あったらごめんなさい

725名無しさん@寒露:2017/10/31(火) 21:29:06 ID:???
あ、厳密にはうごいてるみたいですが、DUMMYが人材じゃないためにMASTERの下に別のDUMMYが加入してしまうみたいです(キャパ1なのでよく見えてなかった)

また、そのあとにaddUnit(NAKAMA,MASTER)も試しましたが陪臣になりました

726名無しさん@寒露:2017/10/31(火) 21:57:32 ID:???
DUMMYがclass構造体ならそりゃ別のがaddunitされるよ

addPower(POWER)
addUnit(MASTER,SPOT)
addUnit(DUMMY,POWER)
storeLeaderOfPower( POWER , @aaa)
addUnit(NAKAMA,@aaa)
(以下略)

これでどう

というかそのよくわからないwhileは何ぞ
他のユニットがいるところで弄る想定なの?

727名無しさん@寒露:2017/10/31(火) 21:59:42 ID:???
>>726
unit DUMMY
{
name = 陪臣ダミー
}

こんな感じですね
classではないです
talentじゃないという意味で人材じゃないと言いました

728名無しさん@寒露:2017/10/31(火) 22:00:59 ID:???
whileに関しては別の領地を新しく発生させてみても同じだったので、まあこれでいいかな?って感じです
いじるの自体はどこででもOKです。最終的にSPOTが1つであれば問題ありません

729名無しさん@寒露:2017/10/31(火) 22:03:28 ID:???
連投すいません

addPower(POWER)
addUnit(MASTER,SPOT)
addUnit(DUMMY,POWER)
storeLeaderOfPower( POWER , @aaa)
addUnit(NAKAMA,@aaa)
(以下略)

これも試してみましたが、addUnitの部分で結局別のDUMMYがMASTERの下についちゃいますね

730名無しさん@寒露:2017/10/31(火) 22:06:45 ID:???
じゃあわからないな
ごめんよ

731名無しさん@寒露:2017/10/31(火) 22:11:11 ID:???
いえいえ、ありがとうございます
やってるうちに何かみつかったり、他の方の回答で解決するかもなので、もう少しがんばってみます!

732名無しさん@寒露:2017/10/31(火) 22:24:28 ID:???
>>723の解釈を間違ってないか
DUMMYにMASTERとNAKAMAを追加してDUMMYを消すのでは

733名無しさん@寒露:2017/10/31(火) 22:37:30 ID:???
>>732
DUMMYをMASTERに追加してみましたが、マスターなので追加できないみたいです

changeMasterは念のためやってるだけですね

最終手段はNAKAMAを全部タレント属性抜きにしてそもそも陪臣にならないようにするぐらいですが、その他のデメリットがヤバい感じです

734名無しさん@寒露:2017/10/31(火) 23:05:37 ID:???
やってるうちに不具合っぽいものを見つけたのでご報告

talentでないユニットにマスターをやらせて、そのマスターをそのまま別勢力の人材下に加入させると、何故か陪臣になりました

735名無しさん@寒露:2017/11/01(水) 00:30:01 ID:E6zj026E
人材ユニットを追加する部隊リーダー人材がマスターであるときも考慮しないといけなかったのか。
だとすると、人材ユニットを追加する部隊のリーダーがマスターであった場合は、ダミーの人材ユニットを適当な領地に追加してこれにマスターを引き継がせます。
さらに非人材のダミーユニットを人材ユニットを追加する部隊がいる領地に追加します。
このダミーユニットの部隊にマスターとメンバーにする人材ユニットの順で追加します。
この部隊からリーダーユニットを削除したあとで勢力マスターを元の人材に戻します。
マスターを代行させていたダミーの人材ユニットを適当に邪魔にならない領地に飛ばします。
この方法でいけませんかね。
ただし、ダミーのユニットが処理の過程で発生するのでメンバーが最低二つは空きがないとだめですけど。たしか溢れたメンバーは削除されていたはず。

736名無しさん@寒露:2017/11/01(水) 00:33:06 ID:E6zj026E
>>735訂正
>このダミーユニットの部隊にマスターとメンバーにする人材ユニットの順で追加します。
正しくは
>このダミーユニットの部隊にマスターだった人材とメンバーにする人材ユニットの順で追加します。

>>733
その解釈でアタリです。

737名無しさん@寒露:2017/11/01(水) 00:36:16 ID:E6zj026E
>>736の訂正。
レス番は733ではなく732に対してです。連ミスごめん。

738名無しさん@寒露:2017/11/01(水) 01:20:03 ID:???
>>735
ありがとうございます
早速やってみました

addPower(POWER)
addSpot(DUMMYSPOT,POWER)
addUnit(TALENTDUMMY,DUMMYSPOT)
showSpot(DUMMYSPOT)
changeMaster(TALENTDUMMY)
addUnit(NOTALENTDUMMY,SPOT)
addUnit(MASTER,NOTALENTDUMMY)
addUnit(NAKAMA,NOTALENTDUMMY)
storeUnitOfPower(POWER,@POWER_units)
set(idx,0)
while(idx<count(@POWER_units)){
index(@POWER_units,idx,@POWER_units_get)

if(isTalent(@POWER_units_get)== 0){
//NOTALENTDUMMYのみが該当
eraseUnit(@POWER_units_get)
}

add(idx,1)
}
removeSpot(DUMMYSPOT)
changeMaster(MASTER)


このままだとマスター(マスター)・ナカマ(陪臣)という部隊になります
changeMasterをコメントアウトすると、非人材ダミー・マスター・ナカマという部隊になります
eraseUnitをコメントアウトすると、非人材ダミー・ナカマの部隊とマスターの部隊に分かれました

どうやら非人材部隊に所属した時点で陪臣になっているという問題があるようです

理解が間違ってたらごめんなさい

739名無しさん@寒露:2017/11/01(水) 19:31:47 ID:???
>>715
これは申し訳ありませんでした。
wikiをいじってはいけないとは知らなかったので、情報が不正確なら訂正した方がいいと思ってました。しかし、私は軽率で間違うことが多いので、wikiに関しては慎重な方にお任せします。

その他の閲覧者へ
こういう掲示板のマナーには疎いもので、私の行動を不快に感じた方にはあやまります。他に問題がありましたら、寛容な方は今後ともご指摘ください。
私の実験は、私が試した範囲内での観測結果に過ぎないので、推測や結論が間違ってるかもしれません。実際のゲーム内の動作とは異なる可能性があるので、あくまで参考レベルに留めてください。


スキルを試す為に何度も戦闘させてて感じたのですが、守備側(COM勢力)が、戦闘開始直後から迎撃してくる時と、初期位置で待ち構えてる時があります。実験条件を同じにする為には、毎回どちらか一方に固定したいので、どういう条件で挙動が変わるのかを調べてみました。

まず第一に、マスターの好戦値(kosen)が高いほど迎撃します。(マスターが存在しない勢力なら、その勢力に設定された好戦値)
マスターの kosen 値を指定しない場合、40回攻め込んで、迎撃してきたのは 21回でした。(5割ぐらい)
マスターの kosen = 100 にした場合、40回攻め込んで、迎撃してきたのは 31回でした。(8割ぐらい)
マスターの kosen = 80 にした場合、40回攻め込んで、迎撃してきたのは 26回でした。(6割ぐらい)
マスターの kosen = 50 にした場合、40回攻め込んで、迎撃してきたのは 16回でした。(4割ぐらい)
マスターの kosen = 30 にした場合、40回攻め込んで、迎撃してきたのは 12回でした。(3割ぐらい)
マスターの kosen = 10 にした場合、40回攻め込んで、迎撃してきたのは 3回でした。(1割ぐらい)
サンプル数が少ないのか乱数分布のせいか、うまく比例しませんが、だいたい kosen 値に依存してます。

kosen 値が 100 でも迎撃しないことがあるのは、btl_counter が関係してるみたいです。kosen = 100 にした上で、btl_counter = 80 だと、50回攻め込んで、迎撃してきたのは 41回でした。試しに btl_counter = 50 に減らすと、50回攻め込んで、迎撃してきたのは 30回でした。更に btl_counter = 20 に減らすと、50回攻め込んで、迎撃してきたのは 11回でした。シード値によって乱数にばらつきがあるのか、他にも要因があるのか、試行回数を増やしても正比例しませんが、迎撃する確率に差があるので、第二の条件は btl_counter と言えます。

それなら、btl_counter が高ければ kosen が低くても迎撃するのかと、kosen = 1, btl_counter = 100 でどうなるか試してみましたが、50回攻め込んで、迎撃してきたのは 3回でした。迎撃しやすいのは、kosen と btl_counter の両方が高い場合のようです。それで、kosen = 100, btl_counter = 100 にしたら常に迎撃するようになりました。

740名無しさん@寒露:2017/11/01(水) 19:32:21 ID:???
あと、戦力値も比較してるようで、守備側の戦力値が、攻撃側の半分以下だと、好戦値に関係なく迎撃しません。半分より少しでも上回ると、迎撃するようになります。また、守備側の戦力値が極端に低い場合は、戦闘開始直後に逃げ出します。どのくらい少なければ逃げるかも、マスターの好戦値に依存していて、前衛同士なら、kosen = 100 なら 4.3倍、kosen = 70 なら 3.2倍、kosen = 50 なら 2.2倍、kosen = 30 や 10 なら 2倍、ぐらいの戦力差で開幕逃亡するみたいです。好戦値が極端に低い場合でも、戦力差が2倍以下なら逃げませんが、2倍を少しでも上回ると逃げるようになります。ただ、前衛と後衛で微妙に違うし、判定基準はわかりませんでした。

また、攻撃側の戦力値が、守備側に比べて btl_intercept のパーセント未満なら、kosen に関係なく迎撃します。btl_intercept の値が大きいほど、少しでも戦力差があれば迎撃します。btl_intercept の値が小さいほど、少ない戦力で攻めても待機します。例えば、標準では btl_intercept = 50 なので、攻撃側の戦力が半分未満なら、攻撃側は必ず迎撃してきます。これは戦闘開始後に双方の戦力値が変動した場合も、適用されるみたいで、部隊を少しずつ退却させていくと、攻撃側の戦力値が半分を切った時点で、待機してた守備側が迎撃に転じます。

とりあえず、COM に必ず迎撃してきて欲しい場合は、kosen と btl_counter の値を両方とも 100 にして、攻撃側の戦力値を守備側の4倍以下にすればいいです。逆に、COM にその場で待機しといて欲しい場合は、kosen を -1 にして、攻撃側の戦力値を守備側に対して btl_intercept %以上にすればいいです。kosen を下げると戦力差で逃げ出しやすくなりますが、攻撃側の戦力値を守備側の2倍以下にすれば逃げません。戦力値と逃亡の関係は btl_retreat_coe の2番目の値が怪しいのですが、どういう仕組みなのかわかりませんでした。

btl_counter や btl_intercept は全ての戦いに反映されるので、実験目的以外で変更すると、予想外の影響があるかもしれません。オリシナ作者が勢力に個性を出したい場合は、好戦値で調節するといいです。本家シナリオの設定値を見てると、ななあし様が種族や勢力の特徴をよく考えてるなあ、と感心します。

741名無しさん@寒露:2017/11/01(水) 21:16:13 ID:???
ちゃんと投稿できたか見てたら、内容に書き間違いを発見しました。
(誤) 標準では btl_intercept = 50 なので、攻撃側の戦力が半分未満なら、攻撃側は必ず迎撃してきます。
(正) 標準では btl_intercept = 50 なので、攻撃側の戦力が半分未満なら、守備側は必ず迎撃してきます。
投稿前にもっとよく見直すべきでした。何遍もミスしてすみません。

742名無しさん@寒露:2017/11/02(木) 23:01:25 ID:???
また740番の訂正です。自分で条件を書いといて結論に含めるのを忘れてました。戦力差4倍は逃亡させない条件で、迎撃してもらうには2倍未満にしないといけないんでした。
(誤) COM に必ず迎撃してきて欲しい場合は、kosen と btl_counter の値を両方とも 100 にして、攻撃側の戦力値を守備側の4倍以下にすればいいです。
(正) COM に必ず迎撃してきて欲しい場合は、kosen と btl_counter の値を両方とも 100 にして、攻撃側の戦力値を守備側の2倍未満にすればいいです。
他にもミスしてるかもしれませんが、気付いたら訂正します。

743名無しさん@寒露:2017/11/03(金) 23:03:48 ID:???
今まで不明だったパラメータを検証してもらえるの有り難い

744名無しさん@寒露:2017/11/06(月) 22:53:47 ID:???
うーむ、すごい検証数だ。お疲れ様です

745名無しさん@寒露:2017/11/07(火) 00:16:53 ID:???
ユニットを出し過ぎて大規模戦闘をし過ぎるとクラッシュする対策はないでしょうか
確か死んだユニットにも何かデータ割り当ててたと思うのですが、それを無効にしたりなど出来ませんか

746名無しさん@寒露:2017/11/07(火) 19:49:23 ID:???
参考までに聞きたいのですが、ユニット出しすぎって何体くらいでなりましたか?

747名無しさん@寒露:2017/11/09(木) 20:52:33 ID:???
>>745
自分は本家シナリオや「きのたけ」で召喚しまくっても、ユニット数の制限で出せなくなる事はあっても、クラッシュはしませんでした。それで不思議に思って、召喚しまくる実験をしてみました。

陣営ごとのユニット制限を btl_unitmax = 1000 に増やした上で、敵ユニットに範囲攻撃を使わせて、召喚されたユニットを一気に掃除することで、ユニット数の制限に関わらずに、大量に召喚することができます。(掃除しないと、表示されてるユニット数が制限を越えた時点で、それ以上の召喚ができなくなる。)召喚し続けると Vahren.exe のメモリー消費量が増えて行き、ユニット数が多過ぎるとゲームが落ちました。終了時に OS のエラー通知が無かったので、アプリケーション側で状況を見て自ら正常終了した感じです。

次に実験データを例示し、最後に私の結論を載せます。メモリー消費量はタスクマネージャーの数値ですが、微妙に上下するので厳密ではありません。戦場のオブジェクトやエフェクト、BGM、効果音、顔絵などで、実際のゲームではもっと消費が増えるはずです。スキルやエフェクトによる違いは試してないので、それらがユニット数に影響するかはわかりません。

748名無しさん@寒露:2017/11/09(木) 20:53:27 ID:???
[ 最新の v7.00 2017-10-12版 ]
敵は1ユニット、自軍は8ユニットで 1000 * 8 = 8000ユニット召喚しました。メモリー消費量は、召喚前は 332,748 KB、召喚終了時は 1,315,692 KB でした。(1315692 - 332748) / 8000 = 122.7 なので1ユニット当たり 123 KB ぐらいです。

敵は1ユニット、自軍は8ユニットで 1400 * 8 = 11200ユニット召喚しました。メモリー消費量は、召喚前は 326,152 KB、召喚終了時は 1,701,876 KB でした。ユニットを召喚するたびに増えるメモリー量は 123 KB で一定してます。

敵は1ユニット、自軍は8ユニットで 1440 * 8 = 11520ユニット召喚しました。メモリー消費量は、召喚前は 326,228 KB、召喚終了時は 1,741,600 KB でした。

敵は1ユニット、自軍は8ユニットで 1450 * 8 = 11600ユニット召喚しようとすると、途中で落ちました。召喚できるユニット数の限界は 11500 ぐらいのようです。

敵ユニットを1体から80に増やしてみました。敵は80ユニット、自軍は8ユニットで 1420 * 8 = 11360ユニット召喚しました。メモリー消費量は、召喚前は 336,484 KB、召喚終了時は 1,732,724 KB でした。

敵は80ユニット、自軍は8ユニットで 1430 * 8 = 11440ユニット召喚しようとすると、途中で落ちました。初期配置ユニットが多いと、召喚できるユニット数が減るようです。

味方ユニットも8体から80に増やしてみました。敵は80ユニット、自軍も80ユニットで 141 * 80 = 11280ユニット召喚しました。メモリー消費量は、召喚前は 345,092 KB、召喚終了時は 1,731,812 KB でした。

敵は80ユニット、自軍も80ユニットで 142 * 80 = 11360ユニット召喚しようとすると、途中で落ちました。陣営や召喚かに関係なく、戦場に登場した累計ユニット数に限界があるようです。

[ v7.00 の古い 2017-08-28版 ]
敵は1ユニット、自軍は8ユニットで 1000 * 8 = 8000ユニット召喚しました。メモリー消費量は、召喚前は 326,920 KB、召喚終了時は 558,408 KB でした。古いバージョンの方が、明らかにメモリー消費量が少ないです。

敵は1ユニット、自軍は8ユニットで 1400 * 8 = 11200ユニット召喚しました。メモリー消費量は、召喚前は 326,832 KB、召喚終了時は 650,632 KB でした。(650632 - 326832) / 11200 = 28.9 なので1ユニット当たり 29 KB ぐらいです。

敵は1ユニット、自軍は8ユニットで 1440 * 8 = 11520ユニット召喚しました。メモリー消費量は、召喚前は 326,912 KB、召喚終了時は 659,420 KB でした。古いバージョンでは、ユニットを召喚するたびに増えるメモリー量は 29 KB で一定してます。

敵は1ユニット、自軍は8ユニットで 1450 * 8 = 11600ユニット召喚しようとすると、途中で落ちました。メモリー消費量が少なくても、同じように落ちるので、メモリー不足はクラッシュの原因じゃないです。

敵ユニットを1体から80に増やしてみました。敵は80ユニット、自軍は8ユニットで 1430 * 8 = 11440ユニット召喚しました。メモリー消費量は、召喚前は 330,204 KB、召喚終了時は 660,548 KB でした。新バージョンだと落ちたのに、古いバージョンだと、最後まで召喚できました。

敵は80ユニット、自軍は8ユニットで 1440 * 8 = 11520ユニット召喚しようとすると、途中で落ちました。最大数は微妙に違いますが、古いバージョンでも、累計ユニット数には限界がありました。

味方ユニットも8体から80に増やしてみました。敵は80ユニット、自軍も80ユニットで 142 * 80 = 11360ユニット召喚しました。メモリー消費量は、召喚前は 331,240 KB、召喚終了時は 661,620 KB でした。やはり、古いバージョンの方が少し多くユニットを出せます。

敵は80ユニット、自軍も80ユニットで 143 * 80 = 11440ユニット召喚しようとすると、途中で落ちました。80 + 80 + 11440 = 11600 なので、累計ユニット数は 11500 ぐらいまでみたいです。

[ 開発版の v6.85v 2017-06-16版 ]
敵は1ユニット、自軍は8ユニットで 1440 * 8 = 11520ユニット召喚しました。メモリー消費量は、召喚前は 329,340 KB、召喚終了時は 661,108 KB でした。

敵は1ユニット、自軍は8ユニットで 1450 * 8 = 11600ユニット召喚しようとすると、途中で落ちました。メモリー消費量や限界は 2017-08-28版と同じようです。

[ 正式版の v6.90 2017-03-27版 ]
敵は80ユニット、自軍も80ユニットで 142 * 80 = 11360ユニット召喚しました。メモリー消費量は、召喚前は 331,492 KB、召喚終了時は 662,436 KB でした。

敵は80ユニット、自軍も80ユニットで 143 * 80 = 11440ユニット召喚しようとすると、途中で落ちました。メモリー消費量や限界は 2017-08-28版と同じようです。

749名無しさん@寒露:2017/11/09(木) 20:54:30 ID:???
実験の結果、最新版(2017-10-12) の問題点を発見しました。ユニット・データのメモリー消費量が古いバージョンに比べて4倍もあります。古いバージョンは1ユニットごとに 29 KB ぐらいだけど、最新版では1ユニットごとに 123 KB ぐらいです。したがって、ユニットを大量に出したいなら、最新版(2017-10-12) を使わない方がいいです。64-bit OS ならともかく、メモリー空間が狭い上に共有されてる 32-bit OS では、ユニット数の限界が来る前に、メモリー不足で動かなくなります。古いバージョンでも1ユニットに 29 KB もメモリーを使ってるのは謎です。数値データだけならもっと少ない筈なので、ユニットごとに画像データを保持してるのか、あるいは不要になったスプライトを解放してないのかもしれません。context や class の設定を変えたり、画像の大きさを変えたりしてみましたが、特に違いはありませんでした。

どうも、「死んだユニットにも何かデータ割り当ててる」のではなく、死んでもデータが丸ごと残ってるような気がします。その証拠に、スクリプトでは死亡ユニットのデータも取得できますし、死亡ユニットにスキルを使わせることもできるみたいですし、死体が消えずに残る不具合(沈んだユニット画像の上端が残る)もあります。スクリプトでユニットを取り除いた場合も、単に死亡扱いになるだけで、データは残ってました。ユニット数の限界に関しては、バグでは無いので、開発者に対応してもらうのは難しいように思います。

とりあえず、オリシナ作者ができる大規模戦闘時のクラッシュ対策としては、戦場に登場する累計ユニット数を 11500 ぐらいまでにするしかありません。守備側の初期配置数や援軍、攻撃側の出撃数や増援、それに双方が召喚する、全てのユニット数の合計です。無限召喚スキル(遠隔攻撃から召喚への連鎖)は、召喚数自体は設定できませんが、スキル使用間隔と連射数から、戦闘時間内に出せる数が決まります。予め、どれだけのユニットが戦場に出てくるかを計算して、その合計が限界以内に収まるようにすれば、クラッシュを避けれるでしょう。

750名無しさん@寒露:2017/11/10(金) 06:36:19 ID:???
これはかなり参考になるデータ
ありがたいです

751名無しさん@寒露:2017/11/10(金) 16:13:02 ID:???
メモリ的な限界は予想できてなかったのでうれしい

752名無しさん@寒露:2017/11/10(金) 17:16:04 ID:???
いや、メモリ的な限界が1番考えられただろ
その限界がどこまでかいまいちわからんかったのが問題だったわけで
それにしてもありがてえ検証だ

753名無しさん@寒露:2017/11/14(火) 17:00:11 ID:5622DLwA
setStatus(unit,move,hoge)が上手く動きません
talent=offのユニットだとうまく動かないでしょうか?それともほかの原因がありますか?

754名無しさん@寒露:2017/11/14(火) 17:27:13 ID:5622DLwA
少し気になって実験したのですが

unit notlnt
{
talent = off
name = ノータレ
}

setv(@aaa,notlnt)
msg(&notlnt&)→notlntと出力される

setv(@wanko,notlnt)
//この勢力にnotlntが存在するとする
storeUnitOfPower(pow,@bbb)
set(idx,0)
while(idx<count(@bbb)){
index(@bbb,idx,@bbb_get)

msg(&@bbb_get&)→notlntに当たった場合ノータレと出力される

if(@bbb_get == @wanko){

msg(同じものだよ!)→notlntが存在するはずなのに@wankoに合致するものがない
}

add(idx,1)
}

どういった問題を解決すればいいでしょうか・・・

755名無しさん@寒露:2017/11/14(火) 17:29:42 ID:???
連投すいません
目的としては、データベースとして使用しているtalent=onのユニットのステータスをtalent=offのユニットに移行するという目的です
データベースのmprecの数値でunitの種類を特定し、addUnitして追加したユニットにその他ステータスを落とし込むというのをやりたいと思っています

756名無しさん@寒露:2017/11/14(火) 17:55:36 ID:???
さらにすいません
>>754
誤;msg(&notlnt&)→notlntと出力される
正:msg(&@aaa&)→notlntと出力される
でした

757名無しさん@寒露:2017/11/14(火) 19:54:34 ID:???
unit構造体で定義された人材じゃないユニットを後からスクリプトでどうこうしようとするととんでもなく厄介だった記憶がある
dead_eventに疑似死亡イベント(レベルリセットして隠し領地に移動とか)を仕込んだ人材とかにした方が楽じゃないだろうか

758名無しさん@寒露:2017/11/14(火) 20:15:02 ID:???
>>757
talentなユニットだと困ることがあるのであえて外しています
具体的にはaddUnitした際に陪臣になってしまうことがやりたいシステムに致命的な邪魔になってしまうので

先日色々やってみましたが無理だったので、talentを外す方向で対応しました

とりあえずstoreUnitOfPowerとかで取得したユニットとして使えばマトモに使えて、setvで直接文字列突っ込んだのは使えないって感じになってますね

で、ユニットを外して入れ直す際のやり取りが

1・talent=onのダミーユニットを隠しspotに入れる
2・talent=offのユニット(以下メインユニット)のステータスを取得してダミーユニットに性能をコピー
3・メインユニットをeraseUnitで全部消す
4・メインユニットを再び発生させる、この際ダミーユニットを参照
5・ダミーのステータスを取得してメインユニットに反映

で、setLevelがこれまたダミーユニットにうまいこと反映しないみたいで、これはaddLevelを1づつするしかないのかな

759<あぼーん>:<あぼーん>
<あぼーん>

760名無しさん@寒露:2017/11/15(水) 20:42:51 ID:???
>754
unit 構造体の名前(notlnt)と、ユニットの名前(ノータレ)の使い分けが難しいです。

wiki によると、setv は文字変数に文字列を代入します。
>> setv(@wanko,notlnt)
この行では @wanko に構造体の名前として「notlnt」を代入してます。

その一方で、storeUnitOfPower は「ユニットの識別子」を文字変数に代入します。そして、unit/classの識別子における文字変数要素とは name で指定した文字列のようです。
>> index(@bbb,idx,@bbb_get)
この行では @bbb_get にユニット名として「ノータレ」を代入してます。

>> if(@bbb_get == @wanko){
「notlnt」と「ノータレ」は異なるので、この比較で合致しない訳です。setv(@wanko,ノータレ) として、ユニット名で探したらどうでしょうか。

761名無しさん@寒露:2017/11/16(木) 16:52:33 ID:???
>>760
なるほど、全角文字をスクリプトでも使えるのですね
ちょっとそれ念頭においてやってみます

色々目からウロコでした、ありがとうございます〜

762名無しさん@寒露:2017/11/25(土) 21:04:37 ID:???
ユニットが遠隔攻撃しながら前進&後退するのが嫌で、スキルの減速率を大きくしたり(slow_per = 1 で99%減速するはず)、地形の影響を大きくした(consti = 1 で移動力が20%になるはず)のですが、じわじわ動くようにはなりませんでした。

それで不思議に思って調べたのですが、移動速度には最低値があるみたいです。2種類のユニットの移動力をそれぞれ 1 と 50 にしても同じ速さで動きますが、1 と 51 は微妙に違います。移動速度の最低は 50 と思われます。それなら最高値もあるのかと、移動力を上げて試してみました。移動力 1250 と 2000 は同じ速さで動きますが、1240 と 2000 は微妙に違いました。移動速度の最高は 1250 ぐらいです。

まとめると、地形やスキルの影響で変化した後の移動速度は0(完全に停止)か50〜1250の間になるようです。動きが速すぎると当たり判定が難しそうですが、遅すぎるのも駄目とは意外でした。

763名無しさん@寒露:2017/11/29(水) 16:10:18 ID:???
どなたかお知恵をお借りしたいのですが、無敵突進スキルを作る方法ってありませんか?
光の目の「幽鬼の浸透」を流用できればよかったのですが、私の勘違いでなければ、
chargeスキルだとslideしても無敵になってくれない(進路上の攻撃にボコボコにされる)ように見えます
nextでmissileスキルに渡してslideさせたら今度は動いてくれませんし、バフをかけることもできませんし…
charge使いたいのは助走の有無を判定したいからなので、missileでもそちらの代替ができるなら構いません
どなたか解決法をご存知ありませんでしょうか

764名無しさん@寒露:2017/12/01(金) 19:05:50 ID:???
>> 763
chargeスキルで実現する方法をいろいろ考えてみました。

A)高速移動で避ける。
光の目の「幽鬼の浸透」のスクリプトを見ても、どうやって無敵にしてるのか判りませんでした。とりあえず、スライド速度を、敵の発射する魔法・矢・弾よりも速くすれば、スライド中に攻撃されても避けれそうです。ただし、長距離を高速でスライドする必要があるので、思ってる動きと違うかもしれません。

B)バリアーを張る。
本家シナリオのリリスが敵の攻撃を相殺しながらスライド移動します。敵の攻撃に属性を付ければ、遠隔攻撃・魔法攻撃だけなら相殺で無効にできるでしょう。しかし、接近攻撃は防げなさそうです。

C)分身を送り出す。
敵陣をゆっくり往復したいなら、本体はスライドさせずに、攻撃モーションだけ動かす手もあります。「image = @@」にすれば自分のユニット画像になるので、resize_s と resize_s_start で途中から速度をマイナスにして、発射した画像が戻ってくるようにできます。その間、本体は攻撃位置で停止させておけば、分身がスライドしてるように見えそうです。分身は矢・弾と同じ扱いなので、敵に攻撃されません。ただし、本体は普通に攻撃を受けます。

D)回復しまくる。
敵から攻撃されることを前提にして、受けたダメージを直ぐに回復すれば、無敵と同じになります。「attack_us = 7」で自分を命中対象に変えてから healスキルに繋ぐと、敵を攻撃しながら自分を回復できます。ただし、一撃で死ぬような攻撃(即死・大ダメージ)には対処できません。また、回復量の数値がユニットの頭上に湧き上がるのは奇妙に見えるかもしれません。

どの案にも問題がありますが、参考になれば幸いです。

765名無しさん@寒露:2017/12/03(日) 13:06:47 ID:???
>>764
アドバイスありがとうございます。
そうですね、自分も実現可能なのはその4つだと思っています。

しかし、Aだと一瞬で多数のモブを斬り殺すサムラーイみたいな技になっちゃいますし、
Bは自分もやってみましたが、やはり接近攻撃は相殺できませんでした。
Dも思いつきはしましたが…突進よりむしろ全回復が便利な技になっちゃいますからねぇ。

Cなら工夫次第で、例えば自キャラを画面外にスライドさせて、
しばらくして戻ってこさせたら実質無敵に…等と考えましたが、
やはりヴァーレンの仕様を考えると「往復」にどうしてもなってしまうので、
無敵突進(一定距離まで何があっても突き進む)という自分のイメージとはちょっと合いませんでした。
色々すいません。

766名無しさん@寒露:2017/12/06(水) 23:02:12 ID:???
>>765
近接攻撃全部を近接で発動してダメージ判定をMissileにしたらどうですかね
近接後に一瞬だけ判定する小さいMissile攻撃を判定する感じです
ごく特殊なパターン以外でほかのユニットにあたることはないかと

767名無しさん@寒露:2017/12/08(金) 12:05:19 ID:ZVSUzBMM
シナリオを作っていて時折Vahren.exeを立ち上げてもエラーメッセージすら吐かないで消える事があるんだけど何なのかな?

768名無しさん@寒露:2017/12/08(金) 12:32:12 ID:???
datファイル開きながら起動すると落ちるよ
exe起動してからなら開いても大丈夫だけど

769名無しさん@寒露:2017/12/08(金) 14:50:59 ID:???
>>768
それはエディタ次第
terapadだとdat開きながらでも起動できるよ

770名無しさん@寒露:2017/12/08(金) 19:43:07 ID:???
メモ帳最強

771名無しさん@寒露:2017/12/09(土) 01:04:13 ID:J8woA3Go
プレイヤー勢力以外がみんな同盟結んでせめてくるんですがどうすれば解消されますか?
幼稚な質問ですいません。
diplo系を弄くろうとしたんですがコンテンツの解説にもなくて困っています。
hostil設定はしていません。

772名無しさん@寒露:2017/12/09(土) 18:56:34 ID:???
>>771
シナリオ製作講座に「外交について」という、そのものずばりの解説ページがあります。

プレイヤーが最強国になると、残りの敵が同盟を結びやすくなるのですが、その判定を diplo_most_power で調節することができます。最強国じゃないのに仲間外れにされるなら、相性の違いの影響かもしれません。敵同士の相性を悪くするとか、敵マスターの野望を高くして、お互いに争うように仕向ければいいです。

773名無しさん@寒露:2017/12/09(土) 21:52:57 ID:J8woA3Go
ありがとうございます。
できました。

774名無しさん@寒露:2017/12/11(月) 20:57:48 ID:???
RPGツクールなどのように
音楽用のOGGやMIDIをあらかじめ決めたループ地点からループするようにしたいのですが、
どなたか方法や改造の仕方をご存知でしたら教えてください。

775名無しさん@寒露:2017/12/11(月) 21:20:39 ID:???
原曲のファイルとは別にもう一つ、ループ再生用のファイル作っといて、
通常の再生が終わったらそのファイルに繋げるとかどうだろう
再生終了→次ファイルの再生開始がうまいこと繋がるように編集して、2週目以降はループ再生、って感じで

776名無しさん@寒露:2017/12/13(水) 19:50:33 ID:???
ウィンドウ枠の角を丸く表示する方法を見つけました。

RPGツクールVXのウィンドウスキン素材をそのまま使うと、左上のスキン画像がウインドウ全体に引き伸ばされるので、せっかく右上の枠画像を丸っこくしても、背景が四角に表示されて台無しです。(ツクールでは周囲の 2 dot には表示しないけど、ヴァーレントゥーガは全面に表示する為)

解決策は単純で、左上のスキン画像の四隅を枠の丸みに合わせて透明にするだけです。ウィンドウ枠の丸い角の透明部分は、背景画像でも透明になるので、綺麗に表示されます。(スキン画像は拡大されるので、透明部分も大きくなることに注意)

ほんの少しの修正で見栄えが良くなるので、ツクール仕様のウィンドウスキンを導入してる方は、ぜひ試してみてください。

777名無しさん@寒露:2017/12/14(木) 23:24:21 ID:???
>>775
灯方式で初回しか流す気がないイントロ部と、
ループさせたい主演奏部を別ファイルに分割する方が容量は軽くなりそうだな…

778名無しさん@寒露:2017/12/24(日) 19:43:57 ID:vV5Wt982
そういえばVTになってスキルやユニットで大きな画像を使えるようになったけど、スポットや旗だと大きな画像は使えないんだよね。
色々と画像に情報を詰め込もうとすると32×32だと足りない。

779名無しさん@寒露:2017/12/31(日) 17:12:34 ID:???
そういう意味じゃ旗の大きさ変えたり同じ勢力でも違う旗にできる方法があればいいんだけどねぇ

780名無しさん@寒露:2018/01/03(水) 13:31:17 ID:???
>>778
旗は仕様が決まってますが、スポット(領地)の画像は大きさを指定できます。
wiki の「シナリオ製作講座」の「spot構造体(領地の設定)」ページを参考にしてください。画像サイズを指定してやればいいだけです。

更にスクリプトで後から領地画像を変更することもできます。「関数(イベントの設定2)」ページの changeSpotImage です。
内政によって街が発展したり、戦乱で荒廃したりするのを、画像で表現すると面白そうです。

781名無しさん@寒露:2018/01/12(金) 22:16:57 ID:???
質問です

指定勢力の指定一般ユニットを別一般ユニットに変更することはできますか?
レベルによるクラスチェンジは無しで内政コマンドによって上位ユニットが開放されると自動で上位ユニットにクラスチェンジ……
と言うことがしたいのですが、制作講座見てもそれっぽいのがないので……

782名無しさん@寒露:2018/01/13(土) 00:25:52 ID:???
そういうのが有るなら俺も使いたいな
少なくともwikiにも無いしスクリプトで見た覚えも無いから多分無い
内政コマンドのイベント内でwhile使って全員changeclass処理するしかないと思う

783名無しさん@寒露:2018/01/13(土) 09:16:14 ID:???
changeClassにしても特定の勢力の特定の一般ユニットを変数に代入できるのかって問題が……

784名無しさん@寒露:2018/01/13(土) 10:48:32 ID:???
特定の一般ユニットってのがどういう範囲なのか分からないから何とも言えない
特定のクラスならstoreclassofunitで選り分ければいいし、領地ならstoreunitofspotでいい
特定のイベントで加入したユニットとかなると面倒くさいが、加入する時に識別用のスキルでも追加しておけばstoreskillofunitで判別できる

785名無しさん@寒露:2018/01/13(土) 13:35:15 ID:???
while,storeClassOfUnit,changeClassを使えばできる
勢力の標準雇用ユニットも合わせて変えるならerasePowerMerceとaddPowerMerce2でできる
それとクラスチェンジ前後でステータスが変わるならレベルは振り直した方が良いかもしれない

786名無しさん@寒露:2018/01/13(土) 15:33:46 ID:???
event classchange
{
storePowerOfUnit(@PowerAUnit, PowerA)
set(idx, 0)
while(idx < countVar(@PowerAUnit)){
index(@PowerAUnit, idx, @idx_unit)
storeClassOfUnit(@idx_unit, @idx_unit_class)
if (@idx_unit_class == classA){
changeClass(@idx_unit, classB)
pushLevel(@idx_unit, idx_unit_lv)
setLevel(@idx_unit, 1)
sub(idx_unit_lv, 1)
addLevel(@idx_unit, idx_unit_lv)
}
add(idx,1)
}
}

たぶんコレでいける
勢力Aの全ユニットのクラスを調べて、クラスAだった場合クラスBにクラスチェンジさせる
レベルを振り直さないならpushLevel以降はいらない

787名無しさん@寒露:2018/01/13(土) 16:06:22 ID:???
なにこれ凄い

レオーム家のソルジャーをボウマンにすると仮定するならば
まずレオーム家のソルジャー数を数え@PowerAUnitに代入、
レオーム家全ユニットに対してソルジャーかどうか確認しソルジャーならボウマンにクラスチェンジしidxに1加算。idxが@PowerAUnitを越えたら終了

って認識であってますかね……?組み合わせ次第でこんなことも出来るなんて目から鱗です!もっとスクリプト学ばないと……!
(完成するかはともかく)作成中のオリシナにこのスクリプトを改変(する部分が無さそうですが……)使用させて頂いてもよろしいでしょうか?

788名無しさん@寒露:2018/01/13(土) 16:32:53 ID:???
whileループは基礎中の基礎だからこのくらいは改変して使っても何も問題ないよ
シナリオ制作がんばれー

789768:2018/01/14(日) 00:02:02 ID:???
使用する関数が間違っていたので訂正
× storePowerOfUnit
◯ storeUnitOfPower

790名無しさん@寒露:2018/01/14(日) 00:06:50 ID:???
名前を間違ってしまった
もうだめだー

791名無しさん@寒露:2018/01/18(木) 15:01:22 ID:???
event ほにゃらら
{
storeUnitOfSpot(spot1,@s1haitiunit)
//spot1に配置されたユニットの種類を調べる
pushCon(spot1,@s1haitiunit,heisisuu)
//spot1に配置されたユニットの数を調べる(直接配置ユニット数のみを調べる関数は無いらしい?)
if (heisisuu >= 100)
//spot1に配置されたユニット数が100以上ならイベント発動
{
イベント処理
}
}
spot1に100ユニット以上が配置されていてもイベントが発動してくれません
毎ターン読み込まれ、毎ターン100ユニット以上つめこんでいるのでスクリプト自体に問題があるようなのですがどこが問題なのでしょうか?

792名無しさん@寒露:2018/01/18(木) 15:42:09 ID:???
spot1に2種類以上のユニットが配置されてませんか?
一部の関数以外は、複数の要素が入った文字変数は先頭を参照するので、例えばAが10体、Bが100体いて@s1haitiunitの先頭がAなら反応しないはずです
pushCon使ったこと無いけど

793名無しさん@寒露:2018/01/18(木) 15:44:32 ID:???
あ、あとユニットの種類に関係なく100体以上で発生ならcountvar(今はcountだっけ)でもいけると思います

794名無しさん@寒露:2018/01/18(木) 16:33:02 ID:???
ああ、ああ!引数の領地が持つ「全てのユニットの【識別子】」を〜と書いてあったから勘違いしてました!
storeUnitOfSpot(spot1,@s1haitiunit)
if (count(@s1haitiunit) >= 100)
で行けました!ありがとうございます!

795名無しさん@寒露:2018/01/25(木) 14:54:26 ID:???
addPowerMerce2( 勢力 , ユニット , ユニット , ‥)勢力に標準雇用ユニットを追加します。
addPowerMerce( 勢力 , ユニット , ユニット , ‥)こちらはマスター関連のデフォルト雇用情報がリセットされるので非推奨となりました。

とのことですがmerce2を使用すると本来雇用できない様に設定したマスターと同クラスユニットが、追加されるよう設定していないにも関わらず勢力の標準雇用ユニットに追加されます
反面merceを使用した場合その現象は起きず本来追加したいユニットだけが追加され、デフォルト雇用情報は別にリセットされません
これはwikiの情報が古い、或いは間違っているだけで本来はmerceの方を使用すれば良いんでしょうかね?

796名無しさん@寒露:2018/01/27(土) 17:13:02 ID:???
ほぼ愚痴

addLevelでフリーズする。AI勢力ターン開始時にフリーズするのでその勢力開始時に発動する内政スクリプト削除を総当りで試すと何度目かのaddLevelでフリーズすることを確認
AI用内政値をブーストして1ターン目にレベル上げると正常作動。正規挙動の20ターン程度で発動するaddLevelでのみフリーズする。なんで?

797名無しさん@寒露:2018/01/27(土) 17:15:00 ID:???
そのターンで上限超えてたりするんでない?

798名無しさん@寒露:2018/01/27(土) 17:44:44 ID:???
ごめん上限って何の?
ユニットレベルは上限に達しない。AI用内政値は数値変数使ってるけど20ターン時点でせいぜい内政値1000程度。挙動確認に1ターン目に50000打ち込んだ場合問題なし
後何故かaddBaseLevelでレベルを10以上に底上げしてもフリーズする。クラスチェンジ自体には問題ないのは確認済み
スクリプトでクラスチェンジするとフリーズ?って言うのも意味がわからんし数値変数いじれる回数に上限がある?もうやだなにこれいみわかんない

799名無しさん@寒露:2018/01/27(土) 21:04:17 ID:???
ああ、ユニットレベル上限のつもりで言ったよ
それで引っかかった覚えはうっすらとあったんだけど、それじゃないならわからないなぁ
それなりに使う事はあるけどこっちは引っかかった事ないねぇ

800名無しさん@寒露:2018/01/28(日) 09:45:59 ID:???
ホント申し訳ない。特定イベント制御用ユニットのクラスチェンジがおかしくて止まってるだけだった笑えよもうなんでクラスチェンジ設定してんだよいらんだろこんちくしょう
そら1ターン目から追加されるユニットじゃないんだから1ターン目にレベルアップコマンド打ってもバグらないはずだよ死にたいふええ

801名無しさん@寒露:2018/01/28(日) 15:23:33 ID:???
他でやれよと思ったけど意外と愚痴スレとか無いんだな

802名無しさん@寒露:2018/02/06(火) 20:14:04 ID:???
戦闘中イベントの発生についての質問です

scenario s1
{
fight = fight_ev
}
event fight_ev
{
if(inBattle(unitA,unitB) == 1 && isPlayer(unitA) == 0){
event(ev1)
}
}
event ev1
{
msg(テスト1)
if(isAnyDead(unitA) == 1){
}
}
event ev2
{
msg(テスト2)
}

こんな感じで作り、戦闘前に(テスト1)のメッセージが出た後、戦闘中にunitAを倒しても(テスト2)のメッセージが出ませんでした
(テスト2)を出すための条件のif(isAnyDead(unitA) == 1)をif(inBattle(unitA,unitB) == 1 && isPlayer(unitA) == 0)に変えたら(テスト2)のメッセージが戦闘前に出ました
他の条件でも試してみましたが、戦闘開始前に条件を満たせたら(テスト2)のメッセージが出て、
戦闘中に条件を満たす形では(テスト2)のメッセージが出ないようでした

wikiでは戦闘中にイベントを発生させるにはbattleEventを使うと書かれていましたが、
battleEventでイベントを指定すると条件を満たせていてもイベントを読み込めませんでした

間違っている部分があったら教えてください

803802:2018/02/06(火) 20:48:29 ID:???
自己解決しました
スレ汚し申し訳ないです

804名無しさん@寒露:2018/02/08(木) 18:24:26 ID:96zZx1eY
ヴァーレンでリアルな兵站システムって作れる?
自分は分裂した場所を独立させて再併合できるようにするくらいしか思いつかない……

805名無しさん@寒露:2018/02/08(木) 20:05:18 ID:???
どこまでリアルを追求するか、どういう兵站システムを作りたいのかよくわからないけど、遠くの領土ほど兵站の維持が難しく軍隊が多く配置できないって言うなら

ゾーン制使って移動制限、isnext使って本土から離れる土地程setcapaで配置部隊数下げる
ついでにある程度遠い領地にいつユニット数に応じて追加支出す
setcapaでの変更時、配置限界よりユニットが多く配置されてたらマイナス効果部隊スキル付与…とか?

806名無しさん@寒露:2018/02/08(木) 22:49:20 ID:???
質問です
敵の弓兵にこちらのヒーラーを狙わせるAIを作っているのですがうまくいきません
event yumihei_ai
{
rif(isInterval(100) == 1){
if(isDead(healer) == 0 && getDistance(healer,yumihei) <= 670 && isSameArmy(healer,yumihei) == 0){
routine(healer_aim)
} else if(inBattle(eventyou) == 0){
routine(aim_lp)
}
}
}
event healer_aim
{
msg(敵の弓兵が味方のヒーラーを狙います)
aimTroop(yumihei,healer)
}
event aim_lp
{
msg(弓兵の標的位置をリセットします)
aimTroop(yumihei,-1,-1)
}
こんな感じのスクリプトを作ってみました
これだとちゃんとこちらのヒーラーを狙って攻撃してくれて、味方のヒーラーがいなくなったら通常通りの動きをしてくれるようになりました
しかし、こっちの軍に敵と同じクラスの弓兵がいた場合、敵にもこちらと同じクラスのヒーラーがいた場合に処理がおかしくなってしまいます
味方の弓兵をyumiheiA、敵の弓兵をyumiheiB、味方のヒーラーをhealerA、敵のヒーラーをhealerBと分けてやったところ正常動作したので、イベントの処理で敵と味方で同じ一般クラスが居てもそれぞれ区別できる方法があれば教えてください

807名無しさん@寒露:2018/02/09(金) 04:58:48 ID:???
イベント戦闘なら
evhealer:healer
{
}
みたいな同能力別構造体のユニット配置すれば解決しないかな?

808名無しさん@寒露:2018/02/09(金) 12:30:53 ID:???
storeRectUnit&storeBaseClassOfUnitで選別してくとかstoreAliveUnitとかでクラスそのものでなくユニットを対象にするようにすればいけるかもしれないけど
戦闘中のスクリプトって人材にしか効かないのがあったりするから保証はできない
むしろクラス名直接ぶち込んで動いたと聞いてびっくりしたくらいだ

809名無しさん@寒露:2018/02/09(金) 14:54:55 ID:???
>>807
実は通常戦闘なんですよね……
今のところは、他の勢力とクラスが被らないラスボス勢力に限定して使うという事にしました
>>808
「敵」を一発で識別できる何かがあれば楽かな〜と思いますね
ちなみですが>>806でスクリプトでは人材ユニットは対象外のようでした

余談ですが、どうにかして敵と味方の区別をつける方法がないか試行錯誤してた時発見したものがあります
味方のヒーラーと敵のヒーラー、味方の弓兵と敵の弓兵の構造体の名前が違えば正常に動作するなら、
味方のヒーラーと弓兵の構造体名を変えてしまえばいいと思い、
>>786のスクリプトを使わせていただいて味方のヒーラーと弓兵の構造体の名前自体を変えてみました
これで動作するだろうと思ったら、この場合でも正常に動作しませんでした
あれこれ試した結果、どうやら変更前の構造体で判別してるそうです
例えば
ソルジャーをボウマンに変え、その元ソルジャーのボウマンでボウマン用のイベントを起こそうとしても動作せず、
ボウマンをソルジャーに変え、元ボウマンのソルジャーでボウマン用のイベントを起こそうとしたら動作した、と言った感じです
通常戦闘でのみの検証だったため、普通のイベントではどうなるか分かりませんが。
といった報告でした

810名無しさん@寒露:2018/02/10(土) 06:35:45 ID:???
>>804,805
ナチガリアさんの最新作が本国から兵を進軍させる感じになってたはず
ほかに、ふつうのRTSみたいに戦闘シーンで演出する手もあるんちゃうかな
天候ユニットが敵味方問わず移動Debuff、工兵ユニットが道路召喚して移動Buffとか

「リアルな兵站」という言葉からは仕様の定まらなさを感じる
まずは具体的なルールを列挙するところから始めては?

811名無しさん@寒露:2018/02/27(火) 17:51:20 ID:P04AsZwk
プレイヤー勢力では上手く雇用できるのに、NPC勢力がまったくユニットを雇用しないのって何か原因があるものなんでしょうか…

812異界:2018/02/27(火) 18:11:45 ID:???
NPCの雇用には大きく分けて二つがあります。
①リーダーユニットの部下を雇用する
②勢力に新たなリーダーユニットを雇用する

①は人材や複数のクラスを雇用可能な一般ユニットでも行われますが、「同一クラスを雇用する」がONになっていると同じ基底クラスしか雇用しません。
これはNPCの上位雇用をONにした場合、雇用クラスの1段階目の金額で2段階目などのクラスが雇用されます。
NPCに多種多様なクラスを雇用させたい場合は同一クラス雇用をOFFにして、かつ複数のクラスが雇用可能な状態でなければなりません。

②はpower構造体に書かれているmerceから雇用率に合わせてランダムでリーダーを雇用します。
なのでプレイヤーのように「ユニットから雇用」ではそもそもないと思われます。
なのでそのクラスを雇える人材もユニットもいないのにpower構造体に書かれているユニットが雇用されていたりもします。

>>811さんの状態ではおそらく②が行えていない状態ではないかと思いますのでpower構造体を見直してみてください。
staffにクラスが記載してあっても種族が抜けていることやmerceの記入が間違っていることなどが考えられます。

あまりに直らない場合は小物入れに該当するスクリプトをアップロードすれば間違いを見つけてもらえるかもしれませんよ。

813名無しさん@寒露:2018/02/27(火) 18:45:22 ID:???
ありがとうございます!
merceの記入が間違っていたようです。
そのままコピペして勢力を量産してしまっていたので全勢力で雇用していなかったようです

814<あぼーん>:<あぼーん>
<あぼーん>

815名無しさん@寒露:2018/03/04(日) 04:10:37 ID:uyj8PXAk
特定領地から特定クラスのユニットだけを取り出す方法ってありませんか?
どうしてもわからない……

816名無しさん@寒露:2018/03/04(日) 10:18:36 ID:???
こんな感じで行けませんかね
スポットで選ぶ→1ユニットずつクラス判定して文字変数に格納

storeUnitOfSpot(特定領地, @unit_spot)
pushv(@unit_spot, sum_unit_spot)
set(i, 0)
while (i < sum_unit_spot)
{
index(@unit_spot, i, @unit)
storeClassOfUnit(@unit, @class) or storeBaseClassOfUnit
if (equal(@class, 特定クラス))
{
addv(@class, @class_spot)
}
}




掲示板管理者へ連絡 無料レンタル掲示板