https://forum.cheatengine.org/search.php?search_author=%26%2365347%3B%26%2365348%3B%260529ネトゲ廃人@名無し2023/04/17(月) 04:12:40.37ID:??? 開発者に向かってstupidは草 文句だけじゃなくて改善案くらい一緒に書いとけよw 自分で暗に文字列はオブジェクトじゃないとか言っておきながら参照渡しにならないって文句いってるのも草だよな 0530ネトゲ廃人@名無し2023/04/17(月) 05:50:22.94ID:??? ipアドレスばれてるだろうから、日本人アホだと思われてるぞ 0531ネトゲ廃人@名無し2023/04/18(火) 20:41:40.83ID:???>>527 さらに検証して function f2(offset) local o1=offset writeFloat("[game.exe+01016E44]+o1+0x30",v_default[1]+text1.text/1000) end offset_1=0x630 f2(offset_1) →うまくいく
でうまくいきました。マジでなんで。 本当に意味不明ですがとりあえず目的は達成しました。 0532ネトゲ廃人@名無し2023/04/18(火) 22:38:53.42ID:yRvVNGuH function f1(offset,vector) local o1 =offset vector[1]=readFloat("[game.exe+01016E44]+o1+30") end vector1={0, 0, 0} offset1=0x630 f1(offset1,vctor1) →うまくいかない
ためしに下記をしてみると function f2(offset,vector) local o1 =offset vector[1]=readFloat("[game.exe+01016E44]+o1+30") print(vector[1]) print(vector1[1]) end vector1={0, 0, 0} offset1=0x630 f1(offset1,vector1) → 0.086963586509228 0 で(本来参照渡しであるはずなのに)値渡し状態になってることがわかったんですけど これどうすればいいでしょうか。 0533ネトゲ廃人@名無し2023/04/19(水) 04:34:38.04ID:??? コンパイル必要な言語だとf2の中に出てくるvector1って未定義なんでエラーになるんじゃね? luaが未定義だからよろしくやってくれて0にしてるとかじゃね? その書き方だったらf2の前にvector1宣言しとくべきじゃね? 値渡しになってっるってのであれば、f2でreturnして、その値を受け取りゃいいだけじゃね? 0534ネトゲ廃人@名無し2023/04/19(水) 08:05:01.52ID:??? readFloatとwriteFloatは内部で文字列を解釈してる そもそもluaの変数名を入れて動いてる事自体が奇跡 たぶんローカル変数しか解釈できないんじゃないの local address = string.format("[game.exe+0x01016E44]+0x%X+0x30", offset) local result = readFloat(address) こうすれば絶対動く 0535ネトゲ廃人@名無し2023/04/19(水) 09:14:42.42ID:??? 覚えたてのcall by referenceって言いたいだけとか? call by valueだったとすると型がわからないから何をどこまでコピーすればいいかのコストが高そうな気がする 0536ネトゲ廃人@名無し2023/04/19(水) 19:36:16.14ID:???>>534 cheatengineformで >>534 さんの言う通りだと教えてもらいました。 >>534 さんのコードの方が私のより可読性が高いものの行数が増えるなぁどうしようと思っていた所、 function f2(offset) writeFloat(readPointer"game.exe+01016E44"+offset+0x30,v_default[1]+text1.text/1000) end というコードを教えてもらいました。一番シンプルでわかりやすいのでこれでいこうと思います。 0537ネトゲ廃人@名無し2023/04/19(水) 20:39:20.76ID:??? こんな適当なことしか言わない所で聞かずに本家に行ったほうがいいんじゃね? 0538ネトゲ廃人@名無し2023/04/19(水) 21:01:02.50ID:???>>532 この件ですが function f1(offset,vector) vector={0, 0, 0} vector[1]=readFloat(readPointer("game.exe+01016E44")+offset+0x30) end vector1={0, 0, 0} offset1=0x630 f1(offset1,vctor1) →うまくいかない ってのが正しくて試しに function f3(offset,vector) vector[1]=readFloat(readPointer("game.exe+01016E44")+offset+0x30) end vector1={0, 0, 0} offset1=0x630 f1(offset1,vctor1) →うまくいく となりました。
関数内で引数の型指定のためにゼロベクトルを代入していたのを辞めた結果うまくいくようになったのですが、 これはどういうことなんでしょうか。ゼロベクトルを代入した結果、vectorとvector1の関係が切れたと見て いいんでしょうか 0539ネトゲ廃人@名無し2023/04/19(水) 23:25:41.98ID:??? 別オブジェクトの参照で上書きしちゃったんで元オブジェクトが書き変わらないのは当然じゃね? 0540ネトゲ廃人@名無し2023/04/20(木) 19:59:46.88ID:???>>539 ということは function f1(offset,vector) vector[1]=0 vector[2]=0 vector[3]=0 vector[1]=readFloat(readPointer("game.exe+01016E44")+offset+0x30) end vector1={0, 0, 0} offset1=0x630 f1(offset1,vctor1) だとうまくいくということでしょうか。 さらに言えばvector={0, 0, 0}は単純に値を書き換えるという意味ではない何かで vector[1]=0は単純に値を書き換えるという意味でしょうか python辺りだと一括代入できて楽なんだけどめんどくさい感ある 0541ネトゲ廃人@名無し2023/04/20(木) 20:58:24.85ID:??? Python知らんけどLuaでも{0, 0, 0}で初期化された新しいオブジェクト(インスタンス)作ってんじゃねーの? 一括代入っつーなら長さ10くらいの配列に{0, 0, 0}代入して配列の長さ確認してみりゃいいだけじゃね? 0542ネトゲ廃人@名無し2023/04/21(金) 04:48:17.91ID:??? CEだとオブジェクトのアドレス表示できない? アドレス比較はできるのでどんな結果になるか確認してみれば? a={0, 0, 0} b=a if a == b then print("1") end b[1]=1 if a == b then print("2") end b={0, 0, 0} if a == b then print("3") end 0543ネトゲ廃人@名無し2023/04/21(金) 20:41:04.87ID:???>>542 さんのを実行すると 1 2 とでました。また a=0 b=a if a == b then print("1") end b=1 if a == b then print("2") end b=c if a == b then print("3") end を実行すると 1 とでました。ということは基本的に代入すると参照関係が切れるけど 配列の成分に値を入れる場合は特別に参照関係が切れないということで いいんでしょうか。 0544ネトゲ廃人@名無し2023/04/21(金) 22:10:08.66ID:??? ただ単に参照って言いたかっただけで実際は何もわかっていなかった人で草 オブジェクトの変数は簡単に言うとデータが入ってるメモリの先頭アドレス 配列の各要素は先頭アドレスからのオフセットでアクセスする(正確には違うけど) その変数に別データの先頭アドレス入れちゃったらどうなるよ?ってことだよ