「hsp天道の解説」の編集履歴(バックアップ)一覧はこちら
hsp天道の解説 - (2010/03/03 (水) 23:10:40) の1つ前との変更点
追加された行は緑色になります。
削除された行は赤色になります。
#areaedit()
|>|>|CENTER:BGCOLOR(pink):&font(b,180%,white){hsp天道}|
|&nicovideo(sm9225202){320}&br()&nicovideo2(sm9225202,320,240)|CENTER:BGCOLOR(#F0F8FF):使用ゲーム|信長の野望・天道|
|~|CENTER:BGCOLOR(#F0F8FF):シナリオ・担当勢力|-|
|~|CENTER:BGCOLOR(#F0F8FF):シナリオの設定|-|
|~|CENTER:BGCOLOR(#F0F8FF):動画形態|-|
|~|CENTER:BGCOLOR(#F0F8FF):登録武将|-|
|~|CENTER:BGCOLOR(#F0F8FF):史実武将の扱い|-|
|~|CENTER:BGCOLOR(#F0F8FF):縛り|-|
|~|CENTER:BGCOLOR(#F0F8FF):投稿時期|-|
|~|CENTER:BGCOLOR(#F0F8FF):投稿者名|tamura|
|~|CENTER:BGCOLOR(#F0F8FF):マイリスト|[[hsp天道>>http://www.nicovideo.jp/mylist/16100594]]|
|~|CENTER:BGCOLOR(#F0F8FF):関連タグ|[[【hsp天道】>http://www.nicovideo.jp/tag/hsp%E5%A4%A9%E9%81%93]]|
|~|CENTER:BGCOLOR(#F0F8FF):ニコニコ大百科||
|~|CENTER:BGCOLOR(#F0F8FF):関連サイト|-|
|~|CENTER:BGCOLOR(#F0F8FF):ニコ証|-|
|~|CENTER:BGCOLOR(#F0F8FF):関連動画|[[その時幻想郷が動いた>>その時幻想郷が動いた解説]]|
|~|CENTER:BGCOLOR(#F0F8FF):備考|-|
#areaedit(end)
#areaedit()
*簡単な解説
一人の動画製作者が、謎の技術に挑む!!
ひなやぼでおなじみ、『覚醒システム』を、
全く関係のないうp主が天道で作ろうとするが果たして?
うp主はプログラミングには疎いので、ここはこうしたら?、とかあったら御遠慮なく。
#areaedit(end)
#areaedit()
*注意事項
①信仲の野望・天道の、シナリオ『群雄割拠』でないと使えません。
②蠣崎季広の統率・武勇・知略・政治を変更しないでください!
どうしてもという方は中華ツールで蠣崎さんを死亡の状態にしておき、
登録武将として第二の蠣崎季広さんを作っておくといいと思います。
③蠣崎さんの統率のアドレスはPC環境によって変わります。
使用者が独自にプロセスメモリエディタで調べないといけません。
シナリオ開始日時も同様です。
しかも、シナリオ開始日時は、下4ケタも変動する事が分かってきました。
今のところ、この現象が起きたら、35F0を変更しないといけません。
④使用言語はHSPです。HSPのホームページなどから入手してください。
⑤NoDVD化していないと使用できません。
⑥使用は自己責任で! 問題が起こってもこちらでは責任を負えません。
使い方
天道を起動中して、シナリオを選ぶか、セーブデータをロードしてから、スクリプトを起動してください。
追記
・アドレスが一時的に大きく変動して、日付がサーチできないときがあるようです。その時はPCを再起動してみてください。
#areaedit(end)
#areaedit()
*ソースコード
#region(close,長いので閉じられるようにしました。)
#uselib "user32.dll"
#func SetTimer "SetTimer" int,int,int,int
#func KillTimer "KillTimer" int,int
#uselib "kernel32.dll"
#cfunc CreateToolhelp32Snapshot "CreateToolhelp32Snapshot" int,int
#cfunc Process32First "Process32First" int,sptr
#cfunc Process32Next "Process32Next" int,sptr
#func CloseHandle "CloseHandle" int
#cfunc OpenProcess "OpenProcess" int,int,int
#func ReadProcessMemory "ReadProcessMemory" int,int,var,int,int
#func WriteProcessMemory "WriteProcessMemory" int,int,var,int,int
#define WM_TIMER 0x0113
#define TIMER_ID 1 ; タイマーID
sdim strBuf,25000;あとで使う変数。
gsel 0,-1;起動時に現れるなんとかというウィンドウを消す。
;ウィンドウの表示、およびあれこれ設定。
screen 2,300,400,4
hMainWnd=hwnd
onexit goto *exit
title "test"
button gosub "戦法+$90",*test_kakizaki_sennpou_hennkou
; メッセージ処理の登録、タイマーメッセージが来たら*OnTimerラベルへ飛ぶ。
oncmd gosub *OnTimer,WM_TIMER
; タイマーを設定(1秒間隔)
SetTimer hwnd,TIMER_ID,1000,0
if stat==0 {
dialog "タイマーの設定に失敗しました。", 1, "エラー"
end
}
;乱数の準備
randomize
;ハンドル取得に使う変数を準備。
sdim ProcName,260
dim PROCESSENTRY32,74
ProcName="NOBU13.exe"
;スナップショットを調べて、天道のハンドルという情報を探す。
*GetProc
GameWndPID=0
hSnap=CreateToolhelp32Snapshot($F,0)
if hSnap==-1:dialog "CreateToolhelp32Snapshot error",1,"スナップショットなし":stop
PROCESSENTRY32.0=296
if Process32First(hSnap,varptr(PROCESSENTRY32)){
do
getstr strBuf,PROCESSENTRY32,36,'\0'
if strBuf==ProcName:GameWndPID=PROCESSENTRY32.2:_break
until Process32Next(hSnap,varptr(PROCESSENTRY32))==0
if GameWndPID==0{
CloseHandle hSnap
error="天道は起動していますか?\nEXEはNOBU13.exeですか?"
switch MessageBoxA(hMainWnd,error,"エラー",$15)
case 2
end
case 4
goto *GetProc
swend
}
}else{
CloseHandle hSnap
dialog "Process32First error",1,"想定外のエラー"
end
}
CloseHandle hSnap
hGameWndProc=OpenProcess($1F0FFF,0,GameWndPID)
;サーチ用変数。
NowSearchA=0
NowSearchB=0
NowSearchC=0
NowSearchD=0
adr_today=$110036A8;35F0;36A8
k=$200001DC
adr_ootutu_jump=$12004BB0
adr_sisetu_top=$2000004C
adr_yakusyoku_top=$1200EF34
adr_kakizaki_sennpou=$12005800
;ゲーム内の日付を検索する。
*Search_today
ReadProcessMemory hGameWndProc,int(adr_today),NowSearchA,4,0
ReadProcessMemory hGameWndProc,int(adr_today+4),NowSearchB,4,0
ReadProcessMemory hGameWndProc,int(adr_today+16),NowSearchC,4,0
ReadProcessMemory hGameWndProc,int(adr_today+20),NowSearchD,4,0
if NowSearchA==$61D&NowSearchB==$3 {;群雄割拠の開始日付を探す。
;if NowSearchA==$62E&NowSearchB==$1 {;夢幻の如くの開始日付を探す。
if NowSearchA<=NowSearchC{
mes "日付を発見しました!"
adr_today=adr_today+16;現在の年号のアドレスを入力しておく。
goto *Search_kaki
} else {
adr_today=adr_today+$10000
goto *Search_today
}
} else {
if adr_today>$14000000 {
if adr_today==$140036A8{
adr_today=$110035F0
goto *Search_today
} else {
dialog "日付が見つかりません。\n天道を再起動してみてください。"
end
}
} else {
adr_today=adr_today+$10000
goto *Search_today
}
}
stop
;蠣崎季広のデータを検索する。
*Search_kaki
ReadProcessMemory hGameWndProc,int(k),NowSearchA,4,0
ReadProcessMemory hGameWndProc,int(k)+4,NowSearchB,4,0
ReadProcessMemory hGameWndProc,int(k)+8,NowSearchC,4,0
ReadProcessMemory hGameWndProc,int(k)+12,NowSearchD,4,0
;NowSearchXは、はじめに4バイトで使ったので、後はずっと4バイトで使用する。
if NowSearchA=$44&NowSearchB=$31&NowSearchC=$4C&NowSearchD=$4F {
mes "蠣崎季広のデータを見つけました!"
goto *Search_ootutu_taiA
} else {
if k>$220001DC {
dialog "季広のデータが見つかりません\n天道を再起動してみてください。"
stop
}
k=k+$10000
goto *Search_kaki
}
stop
;大筒隊のアドレスを取得する。
*Search_ootutu_taiA
ReadProcessMemory hGameWndProc,int(adr_ootutu_jump),NowSearchA,4,0
ReadProcessMemory hGameWndProc,int(NowSearchA),NowSearchB,4,0
if NowSearchB==$D31D5C {
mes "大筒隊のデータを発見しました!"
goto *Search_sisetu_top
ReadProcessMemory hGameWndProc,int(adr_ootutu_jump),adr_ootutu,4,0
} else {
if adr_ootutu_jump>$13000000 {
adr_ootutu_jump=$12003CC0
goto *Search_ootutu_taiB
} else {
adr_ootutu_jump=adr_ootutu_jump+$10000
goto *Search_ootutu_taiA
}
}
stop
*Search_ootutu_taiB
ReadProcessMemory hGameWndProc,int(adr_ootutu_jump),NowSearchA,4,0
ReadProcessMemory hGameWndProc,int(NowSearchA),NowSearchB,4,0
if NowSearchB==$D31D5C {
mes "大筒隊のデータを発見しました!"
ReadProcessMemory hGameWndProc,int(adr_ootutu_jump),adr_ootutu,4,0
goto *Search_sisetu_top
} else {
if adr_ootutu_jump>$13000000 {
dialog "大筒のデータが見つかりません\n天道を再起動してみてください。"
} else {
adr_ootutu_jump=adr_ootutu_jump+$10000
goto *Search_ootutu_taiB
}
}
stop
;施設データの先頭を検索する。よくよく調べたらkから特定可能だった。
*Search_sisetu_top
ReadProcessMemory hGameWndProc,int(adr_sisetu_top),NowSearchA,4,0
if NowSearchA==$D2FDC8 {
mes "施設データの先頭を発見しました!"
goto *Search_yakusyoku_top
} else {
adr_sisetu_top=adr_sisetu_top+$10000
if adr_sisetu_top>$22000000 {
dialog "施設データが見つかりません。\n天道を再起動してみてください。"
end
}
goto *Search_sisetu_top
}
stop
;役職データの先頭を検索する。征夷大将軍のデータの先頭を探す。
*Search_yakusyoku_top
ReadProcessMemory hGameWndProc,int(adr_yakusyoku_top),NowSearchA,4,0
if NowSearchA==$D33600 {
mes "役職データの先頭を発見しました!"
goto *Search_kakizaki_sennpou
} else {
adr_yakusyoku_top=adr_yakusyoku_top+$10000
if adr_yakusyoku_top>$13000000 {
dialog "役職データが見つかりません。\n天道を再起動してみてください。"
end
}
goto *Search_yakusyoku_top
}
stop
;蠣崎季広の戦法を検索する。
*Search_kakizaki_sennpou
ReadProcessMemory hGameWndProc,int(adr_kakizaki_sennpou),NowSearchA,4,0
ReadProcessMemory hGameWndProc,int(NowSearchA+$8),NowSearchB,4,0
NowSearchC=k-$11BE68
if NowSearchB==NowSearchC {
mes "蠣崎季広の戦法を発見しました!"
adr_kakizaki_sennpou=NowSearchA+$8;adr_kakizaki_sennpouに蠣崎季広の戦法のアドレスを入力。
dialog "準備よし。"
goto *main_system_ready
} else {
adr_kakizaki_sennpou=adr_kakizaki_sennpou+$10000
if adr_yakusyoku_top>$13000000 {
dialog "蠣崎季広の戦法が見つかりません。\n天道を再起動してみてください。"
end
}
goto *Search_kakizaki_sennpou
}
stop
*main_system_ready
;ここでmain_systemで使う変数の準備。
kaguya_kyotenn_taikyuu=0
sanae_syutuzinn=0;早苗が出陣しているかどうかのフラグ
kanako_syutuzinn=0;神奈子が出陣しているかどうかのフラグ
dim kimokeene_kani_toukyuu,300
dim orin_yakusyoku_toukyuu,300
dim syou_kahou_toukyuu,400
dim daityan_zuikou_izyou_zizoku,5;大ちゃんの能力で使用。
dim iku_zuikou_siki,5;永江衣玖の能力で使用。
;分割したファイルのインクルード
#include "gennsoukyou.hsp"
#include "koumakyou.hsp"
#include "koumakann.hsp"
#include "youyoumu.hsp"
#include "eiyasyou.hsp"
#include "huuzinnroku.hsp"
#include "kaeizuka.hsp"
#include "hisoutennsoku.hsp"
#include "seirensen.hsp"
#include "month.hsp"
#include "ten_day.hsp"
#include "koumakann_member_count.hsp"
#include "koumakann_syuppon.hsp"
stop ;OnTimerに行く前にstopで止めないとエラー。
*OnTimer
;タイマーメッセージの処理
if wparam==TIMER_ID : gosub *main_system
return 0;gosubで呼びだしたラベルの最後はreturnでないとスタック領域がオーバーフローしましたというエラーがでる。
*main_system
cls
ReadProcessMemory hGameWndProc,int(adr_today+8),day_now,4,0
mes "今"+day_now+"日"
ReadProcessMemory hGameWndProc,int(adr_today+4),now_month,4,0
mes "今月は"+now_month+""
;毎月2~5日の間に一回だけ呼び出すサブルーチン。
if day_now>1&day_now<=5&month_system_still_done==0 {
gosub *koumakann_member_count
gosub *main_system_month
month_system_still_done=1;フラグをONにし、今月はこれ以上実行しない。
}
if day_now>6&month_system_still_done==1 {;フラグをOFFにする。
month_system_still_done=0
}
;毎月5~10、15~20、25~30の間に呼びだすサブルーチン。
;毎月5~10日
if day_now>=5&day_now<=10&ten_day_system_still_doneA==0 {
gosub *main_system_ten_day
gosub *koumakann_syuppon
ten_day_system_still_doneA=1;フラグをONにし、今月はこれ以上実行しない。
}
if day_now>10&ten_day_system_still_doneA==1 {;フラグをOFFにする。
ten_day_system_still_doneA=0
}
;毎月15~20日
if day_now>=15&day_now<=20&ten_day_system_still_doneB==0 {
gosub *main_system_ten_day
gosub *koumakann_syuppon
ten_day_system_still_doneB=1;フラグをONにし、今月はこれ以上実行しない。
}
if day_now>20|day_now<15 {;フラグをOFFにする。
if ten_day_system_still_doneB==1 {
ten_day_system_still_doneB=0
}
}
;毎月25~30日
if day_now>25&day_now<=30&ten_day_system_still_doneC==0 {
gosub *main_system_ten_day
gosub *koumakann_syuppon
ten_day_system_still_doneC=1;フラグをONにし、今月はこれ以上実行しない。
}
if day_now<25&ten_day_system_still_doneC==1 {;フラグをOFFにする。
ten_day_system_still_doneC=0
}
;毎秒呼び出すサブルーチン。
gosub *main_system_gensoukyou
gosub *main_system_koumakyou
gosub *main_system_koumakann
gosub *main_system_youyoumu
gosub *main_system_eiyasyou
gosub *main_system_huuzinnroku
gosub *main_system_hisoutennsoku
gosub *main_system_seirensen
return 0
*test_kakizaki_sennpou_hennkou
ReadProcessMemory hGameWndProc,int(adr_kakizaki_sennpou),ValueWA,4,0
ValueWA=ValueWA+$90
WriteProcessMemory hGameWndProc,int(adr_kakizaki_sennpou),ValueWA,4,0
mes "蠣崎季広の戦法変更"
return 0
*exit
KillTimer hwnd,TIMER_ID ;タイマーを破棄
CloseHandle hGameWndProc
end
#endregion
#areaedit(end)
#areaedit()
*旧コード(現在はインクルードファイルに移動)
#region(close,06回 早苗 バグが発見されたので公開停止)
#endregion
#region(close,06回 神奈子)
;神奈子が攻撃中の相手に、毎秒特定の打撃を与える。
ReadProcessMemory hGameWndProc,int(k+$63A90-$40),AdrBuf,4,0
ReadProcessMemory hGameWndProc,int(AdrBuf),Value,4,0;神奈子の現在地を調べる。
if Value==$D32FE0{;出陣中
ReadProcessMemory hGameWndProc,int(AdrBuf+$10),ValueB,4,0
ReadProcessMemory hGameWndProc,int(ValueB),ValueC,4,0
if ValueC==$D32FE0||ValueC==$D30120 {;目標は敵部隊、もしくは拠点
ReadProcessMemory hGameWndProc,int(ValueB+$28),ValueWA,4,0
ValueWA=ValueWA-100
ReadProcessMemory hGameWndProc,int(ValueB+$2C),ValueWB,4,0
ValueWB=ValueWB+100
if ValueWA<0 {
ValueWB=ValueWB+ValueWA
ValueWA=0
}
WriteProcessMemory hGameWndProc,int(ValueB+$28),ValueWA,4,0
WriteProcessMemory hGameWndProc,int(ValueB+$2C),ValueWB,4,0
}
if ValueC==$D2FDC8 {;目標は敵施設。
ReadProcessMemory hGameWndProc,int(ValueB+$C),ValueWA,4,0
ValueWA=ValueWA-100
if ValueWA<0 {
ValueWA=0
}
WriteProcessMemory hGameWndProc,int(ValueB+$C),ValueWA,4,0
}
}
#endregion
#region(close,06回 諏訪子)
;諏訪子の戦法が発動した瞬間のみ、備え系戦法効果時間を5倍にする。
suwako_tousi_pre=suwako_tousi_now
ReadProcessMemory hGameWndProc,int(k+$51DC0-$40),Value,4,0
AdrBuf=Value;AdrBuf=現在地のポインタ
ReadProcessMemory hGameWndProc,int(AdrBuf),Value,4,0
if Value==$D32FE0 {;出陣中
ReadProcessMemory hGameWndProc,int(AdrBuf+$78),Value,4,0;Value=軍勢のポインタ。
if Value==$0 {;諏訪子の部隊が単独である。
ReadProcessMemory hGameWndProc,int(AdrBuf+$4C),suwako_tousi_now,4,0;部隊の闘志取得
ReadProcessMemory hGameWndProc,int(AdrBuf+$10),ValueB,4,0
ReadProcessMemory hGameWndProc,int(ValueB+$28),suwako_vs_heiryoku_now,4,0;対戦相手の兵力
} else {;諏訪子の部隊が軍勢に含まれる。
ReadProcessMemory hGameWndProc,int(Value+$4C),suwako_tousi_now,4,0;軍勢の闘志
ReadProcessMemory hGameWndProc,int(Value+$10),ValueB,4,0
ReadProcessMemory hGameWndProc,int(ValueB+$28),suwako_vs_heiryoku_now,4,0;対戦相手の兵力
}
if suwako_tousi_now!=0&&suwako_tousi_now<suwako_tousi_pre {;闘志の減少を確認。
ValueWA=100
WriteProcessMemory hGameWndProc,int($E90E08),ValueWA,4,0
}
if suwako_tousi_now>suwako_tousi_pre||suwako_tousi_now==0 {;闘志が減少したら、値を元に戻す。
ValueWA=20
WriteProcessMemory hGameWndProc,int($E90E08),ValueWA,4,0
}
} else {;出陣中に非ず
ReadProcessMemory hGameWndProc,int($E90E08),Value,4,0
if Value>20 {
ValueWA=20
WriteProcessMemory hGameWndProc,int($E90E08),ValueWA,4,0;パラメータを元に戻す。
}
}
#endregion
#region(close,08回 雛)
;雛(武将No3)の撃破兵数を知る。
ReadProcessMemory hGameWndProc,int(k+$91500),HinaKill,4,0;ヒナキルの呼び出し。
ReadProcessMemory hGameWndProc,int(k+$91500-$F0),HinaLV_pre,4,0;雛レベルの呼び出し。
ReadProcessMemory hGameWndProc,int(k+$5D0-$40),Value,4,0
ReadProcessMemory hGameWndProc,int(Value),ValueB,4,0
if ValueB==$D32FE0 {;雛が出陣中。
hina_mokuhyou_pre=hina_mokuhyou_now
hina_mokuhyou_heiryoku_pre=hina_mokuhyou_heiryoku_now
hina_syouhei_pre=hina_syouhei_now
ReadProcessMemory hGameWndProc,int(Value+$10),hina_mokuhyou_now,4,0;攻撃目標
ReadProcessMemory hGameWndProc,int(hina_mokuhyou_now),ValueB,4,0;目標の種類取得
ReadProcessMemory hGameWndProc,int(hina_mokuhyou_now+$28),hina_mokuhyou_heiryoku_now,4,0;目標兵数
ReadProcessMemory hGameWndProc,int(hina_mokuhyou_now+$2C),hina_syouhei_now,4,0;目標兵数
if ValueB==$D32FE0||ValueB==$D30120 {
if hina_mokuhyou_pre==hina_mokuhyou_now{;目標が健在。
gennsyou=hina_mokuhyou_heiryoku_pre-hina_mokuhyou_heiryoku_now;兵数減少。
zouka_syouhei=hina_syouhei_now-hina_syouhei_pre
ValueD=gennsyou*0.3
if gennsyou>=0&&zouka_syouhei>ValueD {;兵力が減少しており、傷兵がそれに見合うだけ増えている。
HinaKill=HinaKill+gennsyou
WriteProcessMemory hGameWndProc,int(k+$91500),HinaKill,4,0;ヒナキルの保管。
}
}
}
}
cls
;雛のレベルアップ
HinaLV_now=HinaKill/10000
if HinaLV_now>HinaLV_pre {;レベルがさっきまでと違う
ReadProcessMemory hGameWndProc,int(k+$5D0),ValueWA,4,0
ValueWA=ValueWA+1
WriteProcessMemory hGameWndProc,int(k+$5D0),ValueWA,4,0
ReadProcessMemory hGameWndProc,int(k+$5D0+$8),ValueWA,4,0
ValueWA=ValueWA+1
WriteProcessMemory hGameWndProc,int(k+$5D0+$8),ValueWA,4,0
HinaLV_pre=HinaLV_pre+1
WriteProcessMemory hGameWndProc,int(k+$91500-$F0),HinaLV_pre,4,0
mes "LVUP"
}
mes "目標前"+hina_mokuhyou_pre+""
mes "目標今"+hina_mokuhyou_now+""
mes "兵力前"+hina_mokuhyou_heiryoku_pre+""
mes "兵力今"+hina_mokuhyou_heiryoku_now+""
mes "減少値"+gennsyou+""
mes "ヒナキル"+HinaKill+""
mes "雛レベル"+HinaLV_pre+""
mes "雛レベル"+HinaLV_now+""
#endregion
#region(close,9回 にとり)
;にとり(No247)が岩付城東の匠ノ町3を支配していれば、そこの技術を三段構えに変える。
ReadProcessMemory hGameWndProc,int(adr_today+$8),Value,4,0
if Value>1&&Value<10 {;2~9日の間で、以下の判定がまだ。
if nitori_gizyutu_hantei==0 {
for i,1,364,1;全国の町並みを調べ、三段構えを研究している場所が無いか調査。
AdrBuf=k-$AE684+i*$8C
ReadProcessMemory hGameWndProc,int(AdrBuf),Value,4,0
ValueB=k-$116BB4
if Value==ValueB {;三段構えが研究済み
nitori_gizyutu_kakikae=20;書き換え実行せず。
}
next
nitori_gizyutu_hantei=1;判定済み
if nitori_gizyutu_kakikae==0 {
ReadProcessMemory hGameWndProc,int(k+$1DE90-$74),ValueC,4,0;にとりの勢力
ReadProcessMemory hGameWndProc,int(k-$AB3A8-$10),Value,4,0;該当匠ノ町3の支配拠点
ReadProcessMemory hGameWndProc,int(Value+$108),ValueB,4,0;その拠点の勢力
if ValueC==ValueB {;該当匠ノ町3をにとりの勢力が支配
ReadProcessMemory hGameWndProc,int(k-$AB3A8),Value,4,0;技術を取得
if Value!=0 {;なんらかの技術が研究されている。
nitori_gizyutu_kakikae=1;書き換え開始
}
}
}
}
} else {
nitori_gizyutu_hantei=0
}
if nitori_gizyutu_kakikae>=1&&nitori_gizyutu_kakikae<10 {
nitori_gizyutu_kakikae=nitori_gizyutu_kakikae+1
Value=10-nitori_gizyutu_kakikae
mes ""+Value+"秒以内に岩付城を画面外に!!"
}
if nitori_gizyutu_kakikae==10 {
ValueWA=01
WriteProcessMemory hGameWndProc,int(k-$116BB4+$58),ValueWA,4,0
ValueWA=k-$116BB4
WriteProcessMemory hGameWndProc,int(k-$AB3A8),ValueWA,4,0
nitori_gizyutu_kakikae=0
}
#endregion
#region(close,10回 聖;非常に深刻なバグを発見したので公開停止)
#endregion
#areaedit(end)
*コメント欄
- 修正してくれた方、ありがとうございました! -- tamura (2010-01-16 23:24:54)
- メインのソースコードをUPしました。 -- tamura (2010-03-01 14:22:55)
#comment
#areaedit()
|>|>|CENTER:BGCOLOR(pink):&font(b,180%,white){hsp天道}|
|&nicovideo(sm9225202){320}&br()&nicovideo2(sm9225202,320,240)|CENTER:BGCOLOR(#F0F8FF):使用ゲーム|信長の野望・天道|
|~|CENTER:BGCOLOR(#F0F8FF):シナリオ・担当勢力|-|
|~|CENTER:BGCOLOR(#F0F8FF):シナリオの設定|-|
|~|CENTER:BGCOLOR(#F0F8FF):動画形態|-|
|~|CENTER:BGCOLOR(#F0F8FF):登録武将|-|
|~|CENTER:BGCOLOR(#F0F8FF):史実武将の扱い|-|
|~|CENTER:BGCOLOR(#F0F8FF):縛り|-|
|~|CENTER:BGCOLOR(#F0F8FF):投稿時期|-|
|~|CENTER:BGCOLOR(#F0F8FF):投稿者名|tamura|
|~|CENTER:BGCOLOR(#F0F8FF):マイリスト|[[hsp天道>>http://www.nicovideo.jp/mylist/16100594]]|
|~|CENTER:BGCOLOR(#F0F8FF):関連タグ|[[【hsp天道】>http://www.nicovideo.jp/tag/hsp%E5%A4%A9%E9%81%93]]|
|~|CENTER:BGCOLOR(#F0F8FF):ニコニコ大百科||
|~|CENTER:BGCOLOR(#F0F8FF):関連サイト|-|
|~|CENTER:BGCOLOR(#F0F8FF):ニコ証|-|
|~|CENTER:BGCOLOR(#F0F8FF):関連動画|[[その時幻想郷が動いた>>その時幻想郷が動いた解説]]|
|~|CENTER:BGCOLOR(#F0F8FF):備考|-|
#areaedit(end)
#areaedit()
*簡単な解説
一人の動画製作者が、謎の技術に挑む!!
ひなやぼでおなじみ、『覚醒システム』を、
全く関係のないうp主が天道で作ろうとするが果たして?
うp主はプログラミングには疎いので、ここはこうしたら?、とかあったら御遠慮なく。
#areaedit(end)
#areaedit()
*注意事項
①信仲の野望・天道の、シナリオ『群雄割拠』でないと使えません。
②蠣崎季広の統率・武勇・知略・政治を変更しないでください!
どうしてもという方は中華ツールで蠣崎さんを死亡の状態にしておき、
登録武将として第二の蠣崎季広さんを作っておくといいと思います。
③蠣崎さんの統率のアドレスはPC環境によって変わります。
使用者が独自にプロセスメモリエディタで調べないといけません。
シナリオ開始日時も同様です。
しかも、シナリオ開始日時は、下4ケタも変動する事が分かってきました。
今のところ、この現象が起きたら、35F0を変更しないといけません。
④使用言語はHSPです。HSPのホームページなどから入手してください。
⑤NoDVD化していないと使用できません。
⑥使用は自己責任で! 問題が起こってもこちらでは責任を負えません。
使い方
天道を起動中して、シナリオを選ぶか、セーブデータをロードしてから、スクリプトを起動してください。
追記
・アドレスが一時的に大きく変動して、日付がサーチできないときがあるようです。その時はPCを再起動してみてください。
#areaedit(end)
#areaedit()
*ソースコード
#region(close,長いので閉じられるようにしました。)
#uselib "user32.dll"
#func SetTimer "SetTimer" int,int,int,int
#func KillTimer "KillTimer" int,int
#uselib "kernel32.dll"
#cfunc CreateToolhelp32Snapshot "CreateToolhelp32Snapshot" int,int
#cfunc Process32First "Process32First" int,sptr
#cfunc Process32Next "Process32Next" int,sptr
#func CloseHandle "CloseHandle" int
#cfunc OpenProcess "OpenProcess" int,int,int
#func ReadProcessMemory "ReadProcessMemory" int,int,var,int,int
#func WriteProcessMemory "WriteProcessMemory" int,int,var,int,int
#define WM_TIMER 0x0113
#define TIMER_ID 1 ; タイマーID
sdim strBuf,25000;あとで使う変数。
gsel 0,-1;起動時に現れるなんとかというウィンドウを消す。
;ウィンドウの表示、およびあれこれ設定。
screen 2,300,400,4
hMainWnd=hwnd
onexit goto *exit
title "test"
button gosub "戦法+$90",*test_kakizaki_sennpou_hennkou
; メッセージ処理の登録、タイマーメッセージが来たら*OnTimerラベルへ飛ぶ。
oncmd gosub *OnTimer,WM_TIMER
; タイマーを設定(1秒間隔)
SetTimer hwnd,TIMER_ID,1000,0
if stat==0 {
dialog "タイマーの設定に失敗しました。", 1, "エラー"
end
}
;乱数の準備
randomize
;ハンドル取得に使う変数を準備。
sdim ProcName,260
dim PROCESSENTRY32,74
ProcName="NOBU13.exe"
;スナップショットを調べて、天道のハンドルという情報を探す。
*GetProc
GameWndPID=0
hSnap=CreateToolhelp32Snapshot($F,0)
if hSnap==-1:dialog "CreateToolhelp32Snapshot error",1,"スナップショットなし":stop
PROCESSENTRY32.0=296
if Process32First(hSnap,varptr(PROCESSENTRY32)){
do
getstr strBuf,PROCESSENTRY32,36,'\0'
if strBuf==ProcName:GameWndPID=PROCESSENTRY32.2:_break
until Process32Next(hSnap,varptr(PROCESSENTRY32))==0
if GameWndPID==0{
CloseHandle hSnap
error="天道は起動していますか?\nEXEはNOBU13.exeですか?"
switch MessageBoxA(hMainWnd,error,"エラー",$15)
case 2
end
case 4
goto *GetProc
swend
}
}else{
CloseHandle hSnap
dialog "Process32First error",1,"想定外のエラー"
end
}
CloseHandle hSnap
hGameWndProc=OpenProcess($1F0FFF,0,GameWndPID)
;サーチ用変数。
NowSearchA=0
NowSearchB=0
NowSearchC=0
NowSearchD=0
adr_today=$110036A8;35F0;36A8
k=$200001DC
adr_ootutu_jump=$12004BB0
adr_sisetu_top=$2000004C
adr_yakusyoku_top=$1200EF34
adr_kakizaki_sennpou=$12005800
;ゲーム内の日付を検索する。
*Search_today
ReadProcessMemory hGameWndProc,int(adr_today),NowSearchA,4,0
ReadProcessMemory hGameWndProc,int(adr_today+4),NowSearchB,4,0
ReadProcessMemory hGameWndProc,int(adr_today+16),NowSearchC,4,0
ReadProcessMemory hGameWndProc,int(adr_today+20),NowSearchD,4,0
if NowSearchA==$61D&NowSearchB==$3 {;群雄割拠の開始日付を探す。
;if NowSearchA==$62E&NowSearchB==$1 {;夢幻の如くの開始日付を探す。
if NowSearchA<=NowSearchC{
mes "日付を発見しました!"
adr_today=adr_today+16;現在の年号のアドレスを入力しておく。
goto *Search_kaki
} else {
adr_today=adr_today+$10000
goto *Search_today
}
} else {
if adr_today>$14000000 {
if adr_today==$140036A8{
adr_today=$110035F0
goto *Search_today
} else {
dialog "日付が見つかりません。\n天道を再起動してみてください。"
end
}
} else {
adr_today=adr_today+$10000
goto *Search_today
}
}
stop
;蠣崎季広のデータを検索する。
*Search_kaki
ReadProcessMemory hGameWndProc,int(k),NowSearchA,4,0
ReadProcessMemory hGameWndProc,int(k)+4,NowSearchB,4,0
ReadProcessMemory hGameWndProc,int(k)+8,NowSearchC,4,0
ReadProcessMemory hGameWndProc,int(k)+12,NowSearchD,4,0
;NowSearchXは、はじめに4バイトで使ったので、後はずっと4バイトで使用する。
if NowSearchA=$44&NowSearchB=$31&NowSearchC=$4C&NowSearchD=$4F {
mes "蠣崎季広のデータを見つけました!"
goto *Search_ootutu_taiA
} else {
if k>$220001DC {
dialog "季広のデータが見つかりません\n天道を再起動してみてください。"
stop
}
k=k+$10000
goto *Search_kaki
}
stop
;大筒隊のアドレスを取得する。
*Search_ootutu_taiA
ReadProcessMemory hGameWndProc,int(adr_ootutu_jump),NowSearchA,4,0
ReadProcessMemory hGameWndProc,int(NowSearchA),NowSearchB,4,0
if NowSearchB==$D31D5C {
mes "大筒隊のデータを発見しました!"
goto *Search_sisetu_top
ReadProcessMemory hGameWndProc,int(adr_ootutu_jump),adr_ootutu,4,0
} else {
if adr_ootutu_jump>$13000000 {
adr_ootutu_jump=$12003CC0
goto *Search_ootutu_taiB
} else {
adr_ootutu_jump=adr_ootutu_jump+$10000
goto *Search_ootutu_taiA
}
}
stop
*Search_ootutu_taiB
ReadProcessMemory hGameWndProc,int(adr_ootutu_jump),NowSearchA,4,0
ReadProcessMemory hGameWndProc,int(NowSearchA),NowSearchB,4,0
if NowSearchB==$D31D5C {
mes "大筒隊のデータを発見しました!"
ReadProcessMemory hGameWndProc,int(adr_ootutu_jump),adr_ootutu,4,0
goto *Search_sisetu_top
} else {
if adr_ootutu_jump>$13000000 {
dialog "大筒のデータが見つかりません\n天道を再起動してみてください。"
} else {
adr_ootutu_jump=adr_ootutu_jump+$10000
goto *Search_ootutu_taiB
}
}
stop
;施設データの先頭を検索する。よくよく調べたらkから特定可能だった。
*Search_sisetu_top
ReadProcessMemory hGameWndProc,int(adr_sisetu_top),NowSearchA,4,0
if NowSearchA==$D2FDC8 {
mes "施設データの先頭を発見しました!"
goto *Search_yakusyoku_top
} else {
adr_sisetu_top=adr_sisetu_top+$10000
if adr_sisetu_top>$22000000 {
dialog "施設データが見つかりません。\n天道を再起動してみてください。"
end
}
goto *Search_sisetu_top
}
stop
;役職データの先頭を検索する。征夷大将軍のデータの先頭を探す。
*Search_yakusyoku_top
ReadProcessMemory hGameWndProc,int(adr_yakusyoku_top),NowSearchA,4,0
if NowSearchA==$D33600 {
mes "役職データの先頭を発見しました!"
goto *Search_kakizaki_sennpou
} else {
adr_yakusyoku_top=adr_yakusyoku_top+$10000
if adr_yakusyoku_top>$13000000 {
dialog "役職データが見つかりません。\n天道を再起動してみてください。"
end
}
goto *Search_yakusyoku_top
}
stop
;蠣崎季広の戦法を検索する。
*Search_kakizaki_sennpou
ReadProcessMemory hGameWndProc,int(adr_kakizaki_sennpou),NowSearchA,4,0
ReadProcessMemory hGameWndProc,int(NowSearchA+$8),NowSearchB,4,0
NowSearchC=k-$11BE68
if NowSearchB==NowSearchC {
mes "蠣崎季広の戦法を発見しました!"
adr_kakizaki_sennpou=NowSearchA+$8;adr_kakizaki_sennpouに蠣崎季広の戦法のアドレスを入力。
dialog "準備よし。"
goto *main_system_ready
} else {
adr_kakizaki_sennpou=adr_kakizaki_sennpou+$10000
if adr_yakusyoku_top>$13000000 {
dialog "蠣崎季広の戦法が見つかりません。\n天道を再起動してみてください。"
end
}
goto *Search_kakizaki_sennpou
}
stop
*main_system_ready
;ここでmain_systemで使う変数の準備。
kaguya_kyotenn_taikyuu=0
sanae_syutuzinn=0;早苗が出陣しているかどうかのフラグ
kanako_syutuzinn=0;神奈子が出陣しているかどうかのフラグ
dim kimokeene_kani_toukyuu,300
dim orin_yakusyoku_toukyuu,300
dim syou_kahou_toukyuu,400
dim daityan_zuikou_izyou_zizoku,5;大ちゃんの能力で使用。
dim iku_zuikou_siki,5;永江衣玖の能力で使用。
;分割したファイルのインクルード
#include "gennsoukyou.hsp"
#include "koumakyou.hsp"
#include "koumakann.hsp"
#include "youyoumu.hsp"
#include "eiyasyou.hsp"
#include "huuzinnroku.hsp"
#include "kaeizuka.hsp"
#include "hisoutennsoku.hsp"
#include "seirensen.hsp"
#include "month.hsp"
#include "ten_day.hsp"
#include "koumakann_member_count.hsp"
#include "koumakann_syuppon.hsp"
stop ;OnTimerに行く前にstopで止めないとエラー。
*OnTimer
;タイマーメッセージの処理
if wparam==TIMER_ID : gosub *main_system
return 0;gosubで呼びだしたラベルの最後はreturnでないとスタック領域がオーバーフローしましたというエラーがでる。
*main_system
cls
ReadProcessMemory hGameWndProc,int(adr_today+8),day_now,4,0
mes "今"+day_now+"日"
ReadProcessMemory hGameWndProc,int(adr_today+4),now_month,4,0
mes "今月は"+now_month+""
;毎月2~5日の間に一回だけ呼び出すサブルーチン。
if day_now>1&day_now<=5&month_system_still_done==0 {
gosub *koumakann_member_count
gosub *main_system_month
month_system_still_done=1;フラグをONにし、今月はこれ以上実行しない。
}
if day_now>6&month_system_still_done==1 {;フラグをOFFにする。
month_system_still_done=0
}
;毎月5~10、15~20、25~30の間に呼びだすサブルーチン。
;毎月5~10日
if day_now>=5&day_now<=10&ten_day_system_still_doneA==0 {
gosub *main_system_ten_day
gosub *koumakann_syuppon
ten_day_system_still_doneA=1;フラグをONにし、今月はこれ以上実行しない。
}
if day_now>10&ten_day_system_still_doneA==1 {;フラグをOFFにする。
ten_day_system_still_doneA=0
}
;毎月15~20日
if day_now>=15&day_now<=20&ten_day_system_still_doneB==0 {
gosub *main_system_ten_day
gosub *koumakann_syuppon
ten_day_system_still_doneB=1;フラグをONにし、今月はこれ以上実行しない。
}
if day_now>20|day_now<15 {;フラグをOFFにする。
if ten_day_system_still_doneB==1 {
ten_day_system_still_doneB=0
}
}
;毎月25~30日
if day_now>25&day_now<=30&ten_day_system_still_doneC==0 {
gosub *main_system_ten_day
gosub *koumakann_syuppon
ten_day_system_still_doneC=1;フラグをONにし、今月はこれ以上実行しない。
}
if day_now<25&ten_day_system_still_doneC==1 {;フラグをOFFにする。
ten_day_system_still_doneC=0
}
;毎秒呼び出すサブルーチン。
gosub *main_system_gensoukyou
gosub *main_system_koumakyou
gosub *main_system_koumakann
gosub *main_system_youyoumu
gosub *main_system_eiyasyou
gosub *main_system_huuzinnroku
gosub *main_system_hisoutennsoku
gosub *main_system_seirensen
return 0
*test_kakizaki_sennpou_hennkou
ReadProcessMemory hGameWndProc,int(adr_kakizaki_sennpou),ValueWA,4,0
ValueWA=ValueWA+$90
WriteProcessMemory hGameWndProc,int(adr_kakizaki_sennpou),ValueWA,4,0
mes "蠣崎季広の戦法変更"
return 0
*exit
KillTimer hwnd,TIMER_ID ;タイマーを破棄
CloseHandle hGameWndProc
end
#endregion
#areaedit(end)
#areaedit()
*インクルードファイル huuzinnroku.hsp
#region(close,雛・にとり・早苗・神奈子・諏訪子)
stop
*main_system_huuzinnroku
;雛の撃破兵数を知る。
ReadProcessMemory hGameWndProc,int(k+$91500),HinaKill,4,0;ヒナキルの呼び出し。
ReadProcessMemory hGameWndProc,int(k+$91500-$F0),HinaLV_pre,4,0;雛レベルの呼び出し。
ReadProcessMemory hGameWndProc,int(k+$5D0-$40),hina_syozai_adr,4,0
ReadProcessMemory hGameWndProc,int(hina_syozai_adr),hina_syozai_value,4,0
if hina_syozai_value==$D32FE0 {;雛が出陣中。
hina_mokuhyou_pre=hina_mokuhyou_now
hina_mokuhyou_heiryoku_pre=hina_mokuhyou_heiryoku_now
hina_syouhei_pre=hina_syouhei_now
ReadProcessMemory hGameWndProc,int(hina_syozai_adr+$10),hina_mokuhyou_now,4,0;攻撃目標
ReadProcessMemory hGameWndProc,int(hina_mokuhyou_now),hina_mokuhyou_value,4,0;目標の種類取得
ReadProcessMemory hGameWndProc,int(hina_mokuhyou_now+$28),hina_mokuhyou_heiryoku_now,4,0;目標兵数
ReadProcessMemory hGameWndProc,int(hina_mokuhyou_now+$2C),hina_syouhei_now,4,0;目標兵数
if hina_mokuhyou_value==$D32FE0||hina_mokuhyou_value==$D30120 {
if hina_mokuhyou_pre==hina_mokuhyou_now{;目標が健在。
gennsyou=hina_mokuhyou_heiryoku_pre-hina_mokuhyou_heiryoku_now;兵数減少。
zouka_syouhei=hina_syouhei_now-hina_syouhei_pre
hina_syouhei_hanntei=gennsyou*0.3
if gennsyou>=0&&zouka_syouhei>hina_syouhei_hanntei {;兵力が減少しており、傷兵がそれに見合うだけ増えている。
HinaKill=HinaKill+gennsyou
WriteProcessMemory hGameWndProc,int(k+$91500),HinaKill,4,0;ヒナキルの保管。
}
}
}
}
;雛のレベルアップ
HinaLV_now=HinaKill/10000
if HinaLV_now>HinaLV_pre {;レベルがさっきまでと違う
ReadProcessMemory hGameWndProc,int(k+$5D0),hina_write,4,0
hina_write=hina_write+1
WriteProcessMemory hGameWndProc,int(k+$5D0),hina_write,4,0
ReadProcessMemory hGameWndProc,int(k+$5D0+$8),hina_write,4,0
hina_write=hina_write+1
WriteProcessMemory hGameWndProc,int(k+$5D0+$8),hina_write,4,0
HinaLV_pre=HinaLV_pre+1
WriteProcessMemory hGameWndProc,int(k+$91500-$F0),HinaLV_pre,4,0;雛レベルの保管。
mes "LVUP"
}
mes "ヒナキル"+HinaKill+""
mes "雛レベル"+HinaLV_now+""
;にとり(No247)が岩付城東の匠ノ町3を支配していれば、そこの技術を三段構えに変える。
;変数修正・動作確認済み。
ReadProcessMemory hGameWndProc,int(adr_today+$8),nitori_today,4,0
if nitori_today>1&&nitori_today<10 {;2~9日の間で、以下の判定がまだ。
if nitori_gizyutu_hantei==0 {
for i,1,364,1;全国の町並みを調べ、三段構えを研究している場所が無いか調査。
nitori_matinami=k-$AE684+i*$8C
ReadProcessMemory hGameWndProc,int(nitori_matinami),nitori_matinami_gizyutu,4,0
sanndanngamae=k-$116BB4
if nitori_matinami_gizyutu==sanndanngamae {;三段構えが研究済み
nitori_gizyutu_kakikae=20;書き換え実行せず。
}
next
nitori_gizyutu_hantei=1;判定済み
if nitori_gizyutu_kakikae==0 {
ReadProcessMemory hGameWndProc,int(k+$1DE90-$74),nitori_gunndan,4,0;にとりの勢力
ReadProcessMemory hGameWndProc,int(k-$AB3A8-$10),nitori_takumi_sihai_kyotenn,4,0;該当匠ノ町3の支配拠点
ReadProcessMemory hGameWndProc,int(nitori_takumi_sihai_kyotenn+$108),nitori_takumi_sihai_gunndann,4,0;その拠点の勢力
if nitori_gunndan==nitori_takumi_sihai_gunndann {;該当匠ノ町3をにとりの勢力が支配
ReadProcessMemory hGameWndProc,int(k-$AB3A8),nitori_takumi_gizyutu,4,0;技術を取得
if nitori_takumi_gizyutu!=0 {;なんらかの技術が研究されている。
nitori_gizyutu_kakikae=1;書き換え開始
}
}
}
}
} else {
nitori_gizyutu_hantei=0
}
if nitori_gizyutu_kakikae>=1&&nitori_gizyutu_kakikae<10 {
nitori_gizyutu_kakikae=nitori_gizyutu_kakikae+1
nitori_count=10-nitori_gizyutu_kakikae
mes ""+nitori_count+"秒以内に岩付城を画面外に!!"
}
if nitori_gizyutu_kakikae==10 {
ValueWA=1
WriteProcessMemory hGameWndProc,int(k-$116BB4+$58),ValueWA,4,0
ValueWA=k-$116BB4
WriteProcessMemory hGameWndProc,int(k-$AB3A8),ValueWA,4,0
nitori_gizyutu_kakikae=0
}
;早苗の部隊の兵力が1000以下の時、兵力を+1000~5000。代償として、士気-10。
;変数変更・動作確認済み。
ReadProcessMemory hGameWndProc,int(k+$67E60-$40),sanae_syozai_Adr,4,0
ReadProcessMemory hGameWndProc,int(sanae_syozai_Adr),sanae_gennzaiti_Value,4,0;早苗の現在地を取得
if sanae_gennzaiti_Value==$D32FE0 {;早苗が出陣している
ReadProcessMemory hGameWndProc,int(sanae_syozai_Adr+$28),sanae_heiryoku,4,0;早苗部隊の兵力。
if sanae_heiryoku<=1000&&sanae_heiryoku==0 {
rand_value=rnd(5)+1;1~5
ValueWA=ValueWA+rand_value*1000;兵力を1000~5000補給。
WriteProcessMemory hGameWndProc,int(sanae_syozai_Adr+$28),ValueWA,4,0
;ValueWA=0;インチキ出来ないよう、傷兵0、と思ったが、別にいいかな?
;WriteProcessMemory hGameWndProc,int(sanae_syozai_Adr+$2C),ValueWA,4,0
ReadProcessMemory hGameWndProc,int(sanae_syozai_Adr+$48),ValueWA,4,0;代償として士気-10
ValueWA=ValueWA-10
WriteProcessMemory hGameWndProc,int(sanae_syozai_Adr+$48),ValueWA,4,0
}
}
;【毎秒】神奈子が攻撃中の相手に、毎秒特定の打撃を与える。
;変数変更・動作確認済み。
ReadProcessMemory hGameWndProc,int(k+$63A90-$40),kanako_syozai_adr,4,0
ReadProcessMemory hGameWndProc,int(kanako_syozai_adr),kanako_syozai_adr_value,4,0;神奈子の現在地を調べる。
if kanako_syozai_adr_value==$D32FE0{;出陣中
ReadProcessMemory hGameWndProc,int(kanako_syozai_adr+$10),kanako_kougeki,4,0
ReadProcessMemory hGameWndProc,int(kanako_kougeki),kanako_kougeki_value,4,0
if kanako_kougeki_value==$D32FE0||kanako_kougeki_value==$D30120 {;目標は敵部隊、もしくは拠点
ReadProcessMemory hGameWndProc,int(kanako_kougeki+$28),kanako_write_A,4,0
kanako_write_A=kanako_write_A-100
ReadProcessMemory hGameWndProc,int(kanako_kougeki+$2C),kanako_write_B,4,0
kanako_write_B=kanako_write_B+100
if kanako_write_A<0 {
kanako_write_B=kanako_write_B+kanako_write_A
kanako_write_A=0
}
WriteProcessMemory hGameWndProc,int(kanako_kougeki+$28),kanako_write_A,4,0
WriteProcessMemory hGameWndProc,int(kanako_kougeki+$2C),kanako_write_B,4,0
}
if kanako_kougeki_value==$D2FDC8 {;目標は敵施設。
ReadProcessMemory hGameWndProc,int(kanako_kougeki+$C),kanako_write_A,4,0
kanako_write_A=kanako_write_A-100
if kanako_write_A<0 {
kanako_write_A=0
}
WriteProcessMemory hGameWndProc,int(kanako_kougeki+$C),kanako_write_A,4,0
}
}
;【毎秒・戦法発動後10秒持続】諏訪子の戦法が発動した瞬間のみ、備え系戦法効果時間を5倍にする。
;変数変更・動作確認済み。
suwako_tousi_pre=suwako_tousi_now
ReadProcessMemory hGameWndProc,int(k+$51DC0-$40),suwako_syozai_adr,4,0
ReadProcessMemory hGameWndProc,int(suwako_syozai_adr),suwako_syozai_adr_value,4,0
if suwako_syozai_adr_value==$D32FE0 {;出陣中
ReadProcessMemory hGameWndProc,int(suwako_syozai_adr+$78),suwako_gunzei,4,0;Value=軍勢のポインタ。
if suwako_gunzei==$0 {;諏訪子の部隊が単独である。
ReadProcessMemory hGameWndProc,int(suwako_syozai_adr+$4C),suwako_tousi_now,4,0;部隊の闘志取得
} else {;諏訪子の部隊が軍勢に含まれる。
ReadProcessMemory hGameWndProc,int(suwako_gunzei+$4C),suwako_tousi_now,4,0;軍勢の闘志
}
if suwako_tousi_now<suwako_tousi_pre {;闘志の減少を確認。
suwako_write=100
WriteProcessMemory hGameWndProc,int($E90E08),suwako_write,4,0
swako_sennpou_kyouka=1
mes "書き込み実施"
}
if swako_sennpou_kyouka>=1&&swako_sennpou_kyouka<=9 {
swako_sennpou_kyouka=swako_sennpou_kyouka+1
}
if swako_sennpou_kyouka>=10 {
suwako_write=20
WriteProcessMemory hGameWndProc,int($E90E08),suwako_write,4,0
swako_sennpou_kyouka=0
}
} else {;出陣中に非ず
ReadProcessMemory hGameWndProc,int($E90E08),suwako_senpou_zizokuzikann,4,0
if suwako_senpou_zizokuzikann>20 {
suwako_write=20
WriteProcessMemory hGameWndProc,int($E90E08),suwako_write,4,0;パラメータを元に戻す。
}
swako_sennpou_kyouka=0
}
return 0
#endregion
#areaedit(end)
*コメント欄
- 修正してくれた方、ありがとうございました! -- tamura (2010-01-16 23:24:54)
- メインのソースコードをUPしました。 -- tamura (2010-03-01 14:22:55)
#comment