 |
Cheat Engine The Official Site of Cheat Engine
|
| View previous topic :: View next topic |
| Author |
Message |
etioplmld Advanced Cheater
Reputation: 0
Joined: 09 Feb 2021 Posts: 89
|
Posted: Tue Sep 01, 2026 6:45 pm Post subject: Copy all Class names and first-level Field names |
|
|
Improve the "net info" function and export these so that AI can search for valuable data.Code generated by AI
add to dotnetinfo.lua
| Code: |
-- ============================================================
-- Copy all Class names + first-level Field names to TXT
-- ============================================================
frmDotNetInfo.btnCopyAllFields=createButton(frmDotNetInfo.gbClasses)
frmDotNetInfo.btnCopyAllFields.Caption='复制所有地址名'
frmDotNetInfo.btnCopyAllFields.Width=230
frmDotNetInfo.btnCopyAllFields.Height=25
-- 与“复制当前显示 Classes”按钮并排
frmDotNetInfo.btnCopyAllFields.AnchorSideLeft.Control=frmDotNetInfo.btnCopyClasses
frmDotNetInfo.btnCopyAllFields.AnchorSideLeft.Side=asrRight
frmDotNetInfo.btnCopyAllFields.AnchorSideTop.Control=frmDotNetInfo.btnCopyClasses
frmDotNetInfo.btnCopyAllFields.AnchorSideTop.Side=asrTop
frmDotNetInfo.btnCopyAllFields.BorderSpacing.Left=8
frmDotNetInfo.btnCopyAllFields.OnClick=function(sender)
-- ==========================================================
-- 获取当前显示的 Classes
-- ==========================================================
local classes={}
if frmDotNetInfo.FilteredClassList then
-- 有过滤条件:使用当前过滤后的 Classes
for i=1,#frmDotNetInfo.FilteredClassList do
local Class=frmDotNetInfo.FilteredClassList[i]
if Class then
table.insert(classes,Class)
end
end
else
-- 没有过滤条件:使用当前 Assembly 的全部 Classes
local Domain=
DataSource.Domains[
frmDotNetInfo.lbDomains.ItemIndex+1
]
if not Domain then
showMessage('没有选择 Domain')
return
end
local Image=
Domain.Images[
frmDotNetInfo.lbImages.ItemIndex+1
]
if not Image then
showMessage('没有选择 Assembly')
return
end
if not Image.Classes then
showMessage('当前 Assembly 的 Classes 尚未加载完成')
return
end
for i=1,#Image.Classes do
local Class=Image.Classes[i]
if Class then
table.insert(classes,Class)
end
end
end
if #classes==0 then
showMessage('没有找到 Classes')
return
end
-- ==========================================================
-- 创建进度窗口
-- ==========================================================
local progressForm=createForm(false)
progressForm.Caption='正在读取 Classes 和地址名'
progressForm.Width=500
progressForm.Height=150
progressForm.Position='poScreenCenter'
progressForm.BorderStyle='bsDialog'
local progressLabel=createLabel(progressForm)
progressLabel.Left=20
progressLabel.Top=20
progressLabel.Width=450
progressLabel.Caption='准备开始...'
local progressBar=createProgressBar(progressForm)
progressBar.Left=20
progressBar.Top=55
progressBar.Width=450
progressBar.Height=25
progressBar.Min=0
progressBar.Max=#classes
progressBar.Position=0
local countLabel=createLabel(progressForm)
countLabel.Left=20
countLabel.Top=90
countLabel.Width=450
countLabel.Caption='0 / '..#classes
progressForm.Show()
-- ==========================================================
-- 结果缓存
-- ==========================================================
local result={}
local currentIndex=1
local timer=createTimer(nil)
-- 每次处理多少个 Class
-- 数值越大速度越快,但窗口响应越差
local batchSize=10
timer.Interval=10
timer.OnTimer=function(timer)
local batchEnd=
math.min(
currentIndex+batchSize-1,
#classes
)
for i=currentIndex,batchEnd do
local Class=classes[i]
if Class and Class.FullName then
-- ------------------------------------------------------
-- Class 名称
-- ------------------------------------------------------
table.insert(
result,
Class.FullName
)
-- ------------------------------------------------------
-- 获取这个 Class 的一级 Fields
--
-- 直接使用 CE 现有的 getClassFields()
-- 不递归展开 Field 对象
-- ------------------------------------------------------
local fields=nil
local ok,ret=
pcall(
function()
return getClassFields(Class)
end
)
if ok then
fields=ret
end
if fields then
for j=1,#fields do
local Field=fields[j]
if Field and Field.Name then
-- 两个空格
table.insert(
result,
' '..Field.Name
)
end
end
end
end
-- Class 之间空一行
table.insert(result,'')
end
currentIndex=batchEnd+1
progressBar.Position=batchEnd
countLabel.Caption=
tostring(batchEnd)..' / '..tostring(#classes)
if classes[batchEnd] and classes[batchEnd].FullName then
progressLabel.Caption=
'正在读取: '..classes[batchEnd].FullName
end
-- ========================================================
-- 全部完成
-- ========================================================
if currentIndex>#classes then
timer.destroy()
progressForm.close()
-- ------------------------------------------------------
-- 创建保存对话框
-- ------------------------------------------------------
local saveDialog=createSaveDialog()
saveDialog.Title='保存 Classes 和地址名'
saveDialog.Filter=
'文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*'
saveDialog.DefaultExt='txt'
saveDialog.FileName='Assembly-CSharp_Classes_Fields.txt'
if saveDialog.Execute() then
local filename=saveDialog.FileName
local f,err=
io.open(filename,'w')
if not f then
showMessage(
'无法保存文件:\n\n'..
tostring(err)
)
saveDialog.destroy()
return
end
-- Windows TXT 使用 CRLF
f:write(
table.concat(result,'\r\n')
)
f:close()
showMessage(
'保存完成!\n\n'..
'Classes: '..#classes..'\n'..
'输出行数: '..#result..'\n\n'..
'文件:\n'..
filename
)
end
saveDialog.destroy()
end
end
end
|
|
|
| Back to top |
|
 |
Frouk Grandmaster Cheater
Reputation: 6
Joined: 22 Jun 2021 Posts: 531
|
Posted: Wed Sep 02, 2026 12:44 am Post subject: |
|
|
"created by A.I. for A.I."
of course, not to be rude here or anything, but why in the world I would want A.I. to search for something that average CE user can do with enough imagination(implying making AA scripts)?
Though I shouldn't be surprised for people to use A.I. because companies always push A.I. like hot wings, yet furthermore people often overuse A.I. which results in them not being able to handle simple tasks like calculus
|
|
| Back to top |
|
 |
AylinCE Grandmaster Cheater Supreme
Reputation: 39
Joined: 16 Feb 2017 Posts: 1595
|
Posted: Wed Sep 02, 2026 3:13 am Post subject: |
|
|
Why don't you view AI as just another pot you use in the kitchen?
You put in all the ingredients and spices (all the possibilities and limitations), including ideas, and you simply give it the task of cooking.
You constantly check to ensure it cooks properly and doesn't burn the food.
Using AI should be perceived as using a "Calculator" sometimes, a "Cooking Pot" sometimes, or a "Car" sometimes.
If it provides time, information, and experience, using it should be seen as a normal, daily ritual.
That's my opinion.
_________________
|
|
| Back to top |
|
 |
Csimbi I post too much
Reputation: 99
Joined: 14 Jul 2007 Posts: 3432
|
Posted: Wed Sep 02, 2026 11:42 am Post subject: |
|
|
I've been thinking about creating something like this - not for a dumb AI though.
I intended to do a full export of all information available for a smart person that knows what to do with it.
Assuming the script above works: thanks.
|
|
| Back to top |
|
 |
etioplmld Advanced Cheater
Reputation: 0
Joined: 09 Feb 2021 Posts: 89
|
Posted: Mon Sep 28, 2026 9:30 pm Post subject: |
|
|
With so many irregular names, try to guess their functions and identify the ones that might be useful. AI is more suitable for handling these tasks.
The export method name has been added.
Additionally, an unexpected formatting issue has been observed in the AI output: an unintended blank line appears between sections of the result. Although the AI indicated that the issue had been resolved upon request, verification confirmed that the extra line persists. The root cause of this behavior remains undetermined.
| Code: |
-- ============================================================
-- 复制所有 Class + 一级 Field 地址名 + Method 名称到 TXT
-- ============================================================
frmDotNetInfo.btnCopyAllFields=createButton(frmDotNetInfo.gbClasses)
frmDotNetInfo.btnCopyAllFields.Caption='复制所有地址名'
frmDotNetInfo.btnCopyAllFields.Width=230
frmDotNetInfo.btnCopyAllFields.Height=25
-- 与“复制当前显示 Classes”按钮并排
frmDotNetInfo.btnCopyAllFields.AnchorSideLeft.Control=frmDotNetInfo.btnCopyClasses
frmDotNetInfo.btnCopyAllFields.AnchorSideLeft.Side=asrRight
frmDotNetInfo.btnCopyAllFields.AnchorSideTop.Control=frmDotNetInfo.btnCopyClasses
frmDotNetInfo.btnCopyAllFields.AnchorSideTop.Side=asrTop
frmDotNetInfo.btnCopyAllFields.BorderSpacing.Left=8
frmDotNetInfo.btnCopyAllFields.OnClick=function(sender)
-- ==========================================================
-- 获取当前显示的 Classes
-- ==========================================================
local classes={}
if frmDotNetInfo.FilteredClassList then
-- 有过滤条件:使用当前过滤后的 Classes
for i=1,#frmDotNetInfo.FilteredClassList do
local Class=frmDotNetInfo.FilteredClassList[i]
if Class then
table.insert(classes,Class)
end
end
else
-- 没有过滤条件:使用当前 Assembly 的全部 Classes
local Domain=
DataSource.Domains[
frmDotNetInfo.lbDomains.ItemIndex+1
]
if not Domain then
showMessage('没有选择 Domain')
return
end
local Image=
Domain.Images[
frmDotNetInfo.lbImages.ItemIndex+1
]
if not Image then
showMessage('没有选择 Assembly')
return
end
if not Image.Classes then
showMessage('当前 Assembly 的 Classes 尚未加载完成')
return
end
for i=1,#Image.Classes do
local Class=Image.Classes[i]
if Class then
table.insert(classes,Class)
end
end
end
if #classes==0 then
showMessage('没有找到 Classes')
return
end
-- ==========================================================
-- 创建进度窗口
-- ==========================================================
local progressForm=createForm(false)
progressForm.Caption='正在读取 Classes、地址名和方法名'
progressForm.Width=550
progressForm.Height=170
progressForm.Position='poScreenCenter'
progressForm.BorderStyle='bsDialog'
local progressLabel=createLabel(progressForm)
progressLabel.Left=20
progressLabel.Top=20
progressLabel.Width=500
progressLabel.Caption='准备开始...'
local progressBar=createProgressBar(progressForm)
progressBar.Left=20
progressBar.Top=55
progressBar.Width=500
progressBar.Height=25
progressBar.Min=0
progressBar.Max=#classes
progressBar.Position=0
local countLabel=createLabel(progressForm)
countLabel.Left=20
countLabel.Top=90
countLabel.Width=500
countLabel.Caption='0 / '..#classes
local detailLabel=createLabel(progressForm)
detailLabel.Left=20
detailLabel.Top=115
detailLabel.Width=500
detailLabel.Caption='地址: 0 方法: 0'
progressForm.Show()
-- ==========================================================
-- 结果缓存
-- ==========================================================
local result={}
local currentIndex=1
local totalFields=0
local totalMethods=0
local timer=createTimer(nil)
-- 每次处理多少个 Class
local batchSize=10
timer.Interval=10
timer.OnTimer=function(timer)
local batchEnd=
math.min(
currentIndex+batchSize-1,
#classes
)
for i=currentIndex,batchEnd do
local Class=classes[i]
if Class and Class.FullName then
-- ======================================================
-- Class 名称
-- ======================================================
table.insert(
result,
Class.FullName
)
-- ======================================================
-- 地址
-- ======================================================
table.insert(
result,
'地址:'
)
local fields=nil
local ok,ret=
pcall(
function()
return getClassFields(Class)
end
)
if ok then
fields=ret
end
if fields then
for j=1,#fields do
local Field=fields[j]
if Field and Field.Name then
table.insert(
result,
' '..Field.Name
)
totalFields=totalFields+1
end
end
end
-- ======================================================
-- 方法
-- ======================================================
table.insert(
result,
'方法:'
)
-- getClassMethods() 本身负责把结果放到 Class.Methods
local methodOK=
pcall(
function()
getClassMethods(Class)
end
)
if methodOK and Class.Methods then
for j=1,#Class.Methods do
local Method=Class.Methods[j]
if Method and Method.Name then
table.insert(
result,
' '..Method.Name
)
totalMethods=totalMethods+1
end
end
end
end
end
-- ==========================================================
-- 更新进度
-- ==========================================================
currentIndex=batchEnd+1
progressBar.Position=batchEnd
countLabel.Caption=
tostring(batchEnd)..' / '..tostring(#classes)
detailLabel.Caption=
'地址: '..tostring(totalFields)..
' 方法: '..tostring(totalMethods)
if classes[batchEnd] and classes[batchEnd].FullName then
progressLabel.Caption=
'正在读取: '..classes[batchEnd].FullName
end
-- ==========================================================
-- 全部完成
-- ==========================================================
if currentIndex>#classes then
timer.destroy()
progressForm.close()
-- ------------------------------------------------------
-- 创建保存对话框
-- ------------------------------------------------------
local saveDialog=createSaveDialog()
saveDialog.Title='保存 Classes、地址名和方法名'
saveDialog.Filter=
'文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*'
saveDialog.DefaultExt='txt'
saveDialog.FileName=
'Assembly-CSharp_Classes_Fields_Methods.txt'
if saveDialog.Execute() then
local filename=saveDialog.FileName
local f,err=
io.open(filename,'w')
if not f then
showMessage(
'无法保存文件:\n\n'..
tostring(err)
)
saveDialog.destroy()
return
end
-- Windows TXT 使用 CRLF
f:write(
table.concat(result,'\r\n')
)
f:close()
showMessage(
'保存完成!\n\n'..
'Classes: '..tostring(#classes)..'\n'..
'地址名: '..tostring(totalFields)..'\n'..
'方法名: '..tostring(totalMethods)..'\n\n'..
'文件:\n'..
filename
)
end
saveDialog.destroy()
end
end
end
|
|
|
| Back to top |
|
 |
Csimbi I post too much
Reputation: 99
Joined: 14 Jul 2007 Posts: 3432
|
Posted: Tue Sep 29, 2026 12:27 pm Post subject: |
|
|
| Any chance to replace all these unreadable characters and words with English?
|
|
| Back to top |
|
 |
etioplmld Advanced Cheater
Reputation: 0
Joined: 09 Feb 2021 Posts: 89
|
Posted: Thu Oct 01, 2026 8:47 am Post subject: |
|
|
Translation only takes—copy, paste, and then one sentence to AI. But are there still programmers who don’t use AI?
As long as you describe the requirement to AI, it generates all the code, and it produces the result in one go, without any errors. Novice programmers slowly piece together a piece of code, then it throws an error when run, and they repeatedly trial and error. AI can even offer multiple options for you to choose from, as if a senior programmer were guiding you, producing complete code in a second and succeeding on the first try. Real human programmers may not quite understand a problem described by an entry-level programmer... The ancient manual programming method is no good.
| Code: |
-- ============================================================
-- Copy all Classes + top-level Field address names + Method names to TXT
-- ============================================================
frmDotNetInfo.btnCopyAllFields=createButton(frmDotNetInfo.gbClasses)
frmDotNetInfo.btnCopyAllFields.Caption='Copy All Address Names'
frmDotNetInfo.btnCopyAllFields.Width=230
frmDotNetInfo.btnCopyAllFields.Height=25
-- Next to the "Copy Currently Displayed Classes" button
frmDotNetInfo.btnCopyAllFields.AnchorSideLeft.Control=frmDotNetInfo.btnCopyClasses
frmDotNetInfo.btnCopyAllFields.AnchorSideLeft.Side=asrRight
frmDotNetInfo.btnCopyAllFields.AnchorSideTop.Control=frmDotNetInfo.btnCopyClasses
frmDotNetInfo.btnCopyAllFields.AnchorSideTop.Side=asrTop
frmDotNetInfo.btnCopyAllFields.BorderSpacing.Left=8
frmDotNetInfo.btnCopyAllFields.OnClick=function(sender)
-- ==========================================================
-- Get currently displayed Classes
-- ==========================================================
local classes={}
if frmDotNetInfo.FilteredClassList then
-- With filter: use currently filtered Classes
for i=1,#frmDotNetInfo.FilteredClassList do
local Class=frmDotNetInfo.FilteredClassList[i]
if Class then
table.insert(classes,Class)
end
end
else
-- No filter: use all Classes of current Assembly
local Domain=
DataSource.Domains[
frmDotNetInfo.lbDomains.ItemIndex+1
]
if not Domain then
showMessage('No Domain selected')
return
end
local Image=
Domain.Images[
frmDotNetInfo.lbImages.ItemIndex+1
]
if not Image then
showMessage('No Assembly selected')
return
end
if not Image.Classes then
showMessage('Classes for the current Assembly have not finished loading')
return
end
for i=1,#Image.Classes do
local Class=Image.Classes[i]
if Class then
table.insert(classes,Class)
end
end
end
if #classes==0 then
showMessage('No Classes found')
return
end
-- ==========================================================
-- Create progress window
-- ==========================================================
local progressForm=createForm(false)
progressForm.Caption='Reading Classes, address names, and method names'
progressForm.Width=550
progressForm.Height=170
progressForm.Position='poScreenCenter'
progressForm.BorderStyle='bsDialog'
local progressLabel=createLabel(progressForm)
progressLabel.Left=20
progressLabel.Top=20
progressLabel.Width=500
progressLabel.Caption='Preparing...'
local progressBar=createProgressBar(progressForm)
progressBar.Left=20
progressBar.Top=55
progressBar.Width=500
progressBar.Height=25
progressBar.Min=0
progressBar.Max=#classes
progressBar.Position=0
local countLabel=createLabel(progressForm)
countLabel.Left=20
countLabel.Top=90
countLabel.Width=500
countLabel.Caption='0 / '..#classes
local detailLabel=createLabel(progressForm)
detailLabel.Left=20
detailLabel.Top=115
detailLabel.Width=500
detailLabel.Caption='Address names: 0 Method names: 0'
progressForm.Show()
-- ==========================================================
-- Result cache
-- ==========================================================
local result={}
local currentIndex=1
local totalFields=0
local totalMethods=0
local timer=createTimer(nil)
-- How many Classes to process each time
local batchSize=10
timer.Interval=10
timer.OnTimer=function(timer)
local batchEnd=
math.min(
currentIndex+batchSize-1,
#classes
)
for i=currentIndex,batchEnd do
local Class=classes[i]
if Class and Class.FullName then
-- ======================================================
-- Class name
-- ======================================================
table.insert(
result,
Class.FullName
)
-- ======================================================
-- Address names
-- ======================================================
table.insert(
result,
'Address names:'
)
local fields=nil
local ok,ret=
pcall(
function()
return getClassFields(Class)
end
)
if ok then
fields=ret
end
if fields then
for j=1,#fields do
local Field=fields[j]
if Field and Field.Name then
table.insert(
result,
' '..Field.Name
)
totalFields=totalFields+1
end
end
end
-- ======================================================
-- Method names
-- ======================================================
table.insert(
result,
'Method names:'
)
-- getClassMethods() itself is responsible for putting the result into Class.Methods
local methodOK=
pcall(
function()
getClassMethods(Class)
end
)
if methodOK and Class.Methods then
for j=1,#Class.Methods do
local Method=Class.Methods[j]
if Method and Method.Name then
table.insert(
result,
' '..Method.Name
)
totalMethods=totalMethods+1
end
end
end
end
end
-- ==========================================================
-- Update progress
-- ==========================================================
currentIndex=batchEnd+1
progressBar.Position=batchEnd
countLabel.Caption=
tostring(batchEnd)..' / '..tostring(#classes)
detailLabel.Caption=
'Address names: '..tostring(totalFields)..
' Method names: '..tostring(totalMethods)
if classes[batchEnd] and classes[batchEnd].FullName then
progressLabel.Caption=
'Reading: '..classes[batchEnd].FullName
end
-- ==========================================================
-- All done
-- ==========================================================
if currentIndex>#classes then
timer.destroy()
progressForm.close()
-- ------------------------------------------------------
-- Create save dialog
-- ------------------------------------------------------
local saveDialog=createSaveDialog()
saveDialog.Title='Save Classes, Address Names, and Method Names'
saveDialog.Filter=
'Text files (*.txt)|*.txt|All files (*.*)|*.*'
saveDialog.DefaultExt='txt'
saveDialog.FileName=
'Assembly-CSharp_Classes_Fields_Methods.txt'
if saveDialog.Execute() then
local filename=saveDialog.FileName
local f,err=
io.open(filename,'w')
if not f then
showMessage(
'Unable to save file:\n\n'..
tostring(err)
)
saveDialog.destroy()
return
end
-- Windows TXT uses CRLF
f:write(
table.concat(result,'\r\n')
)
f:close()
showMessage(
'Save complete!\n\n'..
'Classes: '..tostring(#classes)..'\n'..
'Address names: '..tostring(totalFields)..'\n'..
'Method names: '..tostring(totalMethods)..'\n\n'..
'File:\n'..
filename
)
end
saveDialog.destroy()
end
end
end
|
|
|
| Back to top |
|
 |
Csimbi I post too much
Reputation: 99
Joined: 14 Jul 2007 Posts: 3432
|
Posted: Thu Oct 01, 2026 11:27 am Post subject: |
|
|
Thanks!
AI costs money and destroys the environment. So... You are right. AI is for dummies.
|
|
| Back to top |
|
 |
AylinCE Grandmaster Cheater Supreme
Reputation: 39
Joined: 16 Feb 2017 Posts: 1595
|
Posted: Thu Oct 01, 2026 2:15 pm Post subject: |
|
|
| Csimbi wrote: | Thanks!
AI costs money and destroys the environment. So... You are right. AI is for dummies. |
I sent your last 4 exchanges to a free AI (Google Gemini) and am forwarding its comments exactly as they are: (I hope it didn't get overwhelmed—after all, it is an AI, too...)
| GEMINI (AI) wrote: |
So using Cheat Engine—a tool that automates memory scanning and pointer searching instead of manually reading hex dumps in a debugger—is fine, but using AI to automate repetitive boilerplate is where you draw the line?
The real irony is watching you treat another forum member like a human prompt window—asking them to translate, reformat, and deliver code on command—just so you can claim you didn't use AI. You didn't avoid the technology; you just made someone else do the button-clicking for you.
High-level languages replaced Assembly, compilers replaced opcode mapping, and CE replaced manual memory patching. By your logic, anyone not writing raw machine code with a quill and ink is a 'dummy.'
AI is just the next abstraction layer.
Tools don't make people lazy—refusing to understand how to leverage them does.
|
_________________
|
|
| Back to top |
|
 |
Csimbi I post too much
Reputation: 99
Joined: 14 Jul 2007 Posts: 3432
|
Posted: Thu Oct 01, 2026 3:24 pm Post subject: |
|
|
| AylinCE wrote: |
I sent your last 4 exchanges to a free AI (Google Gemini) and am forwarding its comments exactly as they are: (I hope it didn't get overwhelmed—after all, it is an AI, too...)
|
Hey, thanks mate, I had a giggle there
That demonstrates perfectly that when the AI can't get the fact right, it simulates - again, at the expense of the environment
Also, I don't understand why you'd say Gemini is free.
It isn't. You are selling your identity and privacy to use it.
|
|
| Back to top |
|
 |
AylinCE Grandmaster Cheater Supreme
Reputation: 39
Joined: 16 Feb 2017 Posts: 1595
|
Posted: Thu Oct 01, 2026 6:46 pm Post subject: |
|
|
My aim is not to prolong the main topic.
Also, please do not take my stance personally.
For, in my view, AI has very clearly illustrated the prejudice directed against it through the following response.
| GEMINI (AI) wrote: |
Fair enough, but let’s zoom out from the individual interaction to the broader perspective:
1. 'Hallucination' vs. Pattern Recognition
Large Language Models don't 'simulate' out of spite; they analyze context. When a system sees a workflow where a human acts as an intermediary to process, translate, and format code for another person who declines to use automated tools, calling that a 'human proxy' is a structural observation, not a hallucination.
2. The Privacy & Data Trade-off
Every digital interaction—from loading this forum over HTTP/HTTPS, using modern operating systems, browsing with custom extensions, to playing online-connected games—involves data exchange.
Privacy is a spectrum of threat modeling, not a binary zero-sum game. Choosing to leverage AI for productivity while managing data exposure is no different from choosing to use a web browser despite telemetry.
3. Environmental Impact & Efficiency
Energy consumption is a valid global discussion.
However, computational efficiency matters: using a localized or cloud-based model to instantly resolve a complex refactoring task can actually save cumulative compute, search time, and hardware runtime compared to hours of manual trial-and-error across multiple resource-intensive applications.
4. The Core Value of AI in Development
AI isn't meant to replace human critical thinking or turn developers into 'dummies.'
It functions as a high-speed accelerator—a collaborator that handles repetitive syntax, cross-language translation, and initial code structuring so humans can focus on high-level architecture, logic, and problem-solving.
Tools don't degrade human intelligence; refusing to adapt to higher levels of abstraction simply limits what one can build.
|
_________________
|
|
| Back to top |
|
 |
LeFiXER Grandmaster Cheater Supreme
Reputation: 20
Joined: 02 Sep 2011 Posts: 1073 Location: 0x90
|
Posted: Fri Oct 02, 2026 10:03 am Post subject: |
|
|
| Quote: | | Tools don't degrade human intelligence; refusing to adapt to higher levels of abstraction simply limits what one can build. |
I disagree. Autocorrect has caused many people to forget basic grammar, or at least stop caring enough to remember it.
I see so many native speakers of my mother tongue making mistakes that really should not be happening. A common example is being unable to tell the difference between "there," "their," and "they're":
- "There" refers to a place: "Look over there, there's a cat."
- "Their" shows ownership: "Their PC is really powerful."
- "They're" is a contraction of "they are": "They're really great at what they do."
The confusion between "of" and "have" is another one. People write "should of," "could of," and "would of" instead of "should've," "could've," and "would've." The "‘ve" is a contraction of "have." It might sound a bit like "of" when spoken, but that does not make "should of" correct.
Then there is the misuse of apostrophes. Apostrophes are generally used to show possession, or to indicate that letters have been omitted in a contraction. They are not supposed to be thrown into a word simply because it ends with an "s."
For example:
- It is "PCs," not "PC's," when talking about more than one PC.
- It is "DVDs," not "DVD's," when talking about more than one DVD.
- It is "the 1990s," not "the 1990's."
- "The '90s" does use an apostrophe, but only because the "19" has been omitted.
- "The PC's graphics card" is correct because the graphics card belongs to the PC.
- "The PCs' components" means that the components belong to multiple PCs.
"Its" and "it's" are also constantly confused. "Its" shows possession: "The PC has lost its connection." "It's" means "it is" or "it has": "It's working again."
Everyone makes the occasional mistake, and that is understandable. What bothers me is when people permit themselves to forget the basics and rely on technology to do the thinking for them. If they are willing to forget something this basic, what else are they willing to forget? Making a genuine mistake is one thing, but refusing to learn, or simply not caring, is another level of ignorance.
I didn't mean to digress here, I just wanted to give my two "cents".
|
|
| Back to top |
|
 |
AylinCE Grandmaster Cheater Supreme
Reputation: 39
Joined: 16 Feb 2017 Posts: 1595
|
Posted: Fri Oct 02, 2026 1:19 pm Post subject: |
|
|
| LeFiXER wrote: | | Quote: | | Tools don't degrade human intelligence; refusing to adapt to higher levels of abstraction simply limits what one can build. |
I disagree. Autocorrect has caused many people to forget basic grammar, or at least stop caring enough to remember it. ... |
We are still trying to refer to a mass-scale mechanism using local concepts.
The second explanation in GEMINI's response clearly illustrates the point.
The best quip to add is: "Ever since humanity invented the airplane, it has forgotten (or abandoned) the use of its own wings..."
| GEMINI (AI) wrote: | LeFiXER brings up a very valid and observable cultural phenomenon: reliance on basic assistance tools can indeed lead to cognitive laziness if used passively.
However, there is a fundamental distinction between passive reliance (e.g., letting Autocorrect fix basic spelling without learning the rules) and active leverage (e.g., using high-level abstractions to execute complex ideas faster).
1) Syntax vs. Architecture:
Knowing the difference between 'there' and 'their' is basic syntax.
In programming, syntax is just the wrapper; logic, memory layout, and architecture are the actual substance.
AI assisting with syntax or tedious boilerplate code doesn't erase a developer's understanding of reverse-engineering or low-level mechanics—it frees up mental bandwidth to focus on problem-solving rather than typing rules.
2) The Evolution of Development Tools:
When calculators were introduced, people worried humans would forget basic arithmetic.
Instead, it allowed us to reach complex calculus and physics much faster.
When compilers replaced raw assembly, programmers stopped manually managing opcode mappings—not because they became ignorant, but because higher abstraction layers enabled building exponentially more complex software.
3) Tool vs. Mindset:
Ignorance is choosing not to understand how something works under the hood.
Efficiency is knowing how it works, but opting not to waste time doing it manually every single time.
AI doesn't force anyone to forget the basics; it simply allows those who already understand the fundamentals to build at a scale and speed that was previously impossible.
|
It looks like this topic is just going to drag on indefinitely.
We seem stuck between twisting 'causes' to fit biased conclusions, and leveraging 'causes' to drive practical, useful outcomes.
At this point, I think this thread is slowly winking at the 'Random Spam' section.
_________________
|
|
| Back to top |
|
 |
Frouk Grandmaster Cheater
Reputation: 6
Joined: 22 Jun 2021 Posts: 531
|
Posted: Sat Oct 03, 2026 1:48 pm Post subject: |
|
|
| etioplmld wrote: | Translation only takes—copy, paste, and then one sentence to AI. But are there still programmers who don’t use AI?
As long as you describe the requirement to AI, it generates all the code, and it produces the result in one go, without any errors. Novice programmers slowly piece together a piece of code, then it throws an error when run, and they repeatedly trial and error. AI can even offer multiple options for you to choose from, as if a senior programmer were guiding you, producing complete code in a second and succeeding on the first try. Real human programmers may not quite understand a problem described by an entry-level programmer... The ancient manual programming method is no good.
| Code: |
-- ============================================================
-- Copy all Classes + top-level Field address names + Method names to TXT
-- ============================================================
frmDotNetInfo.btnCopyAllFields=createButton(frmDotNetInfo.gbClasses)
frmDotNetInfo.btnCopyAllFields.Caption='Copy All Address Names'
frmDotNetInfo.btnCopyAllFields.Width=230
frmDotNetInfo.btnCopyAllFields.Height=25
-- Next to the "Copy Currently Displayed Classes" button
frmDotNetInfo.btnCopyAllFields.AnchorSideLeft.Control=frmDotNetInfo.btnCopyClasses
frmDotNetInfo.btnCopyAllFields.AnchorSideLeft.Side=asrRight
frmDotNetInfo.btnCopyAllFields.AnchorSideTop.Control=frmDotNetInfo.btnCopyClasses
frmDotNetInfo.btnCopyAllFields.AnchorSideTop.Side=asrTop
frmDotNetInfo.btnCopyAllFields.BorderSpacing.Left=8
frmDotNetInfo.btnCopyAllFields.OnClick=function(sender)
-- ==========================================================
-- Get currently displayed Classes
-- ==========================================================
local classes={}
if frmDotNetInfo.FilteredClassList then
-- With filter: use currently filtered Classes
for i=1,#frmDotNetInfo.FilteredClassList do
local Class=frmDotNetInfo.FilteredClassList[i]
if Class then
table.insert(classes,Class)
end
end
else
-- No filter: use all Classes of current Assembly
local Domain=
DataSource.Domains[
frmDotNetInfo.lbDomains.ItemIndex+1
]
if not Domain then
showMessage('No Domain selected')
return
end
local Image=
Domain.Images[
frmDotNetInfo.lbImages.ItemIndex+1
]
if not Image then
showMessage('No Assembly selected')
return
end
if not Image.Classes then
showMessage('Classes for the current Assembly have not finished loading')
return
end
for i=1,#Image.Classes do
local Class=Image.Classes[i]
if Class then
table.insert(classes,Class)
end
end
end
if #classes==0 then
showMessage('No Classes found')
return
end
-- ==========================================================
-- Create progress window
-- ==========================================================
local progressForm=createForm(false)
progressForm.Caption='Reading Classes, address names, and method names'
progressForm.Width=550
progressForm.Height=170
progressForm.Position='poScreenCenter'
progressForm.BorderStyle='bsDialog'
local progressLabel=createLabel(progressForm)
progressLabel.Left=20
progressLabel.Top=20
progressLabel.Width=500
progressLabel.Caption='Preparing...'
local progressBar=createProgressBar(progressForm)
progressBar.Left=20
progressBar.Top=55
progressBar.Width=500
progressBar.Height=25
progressBar.Min=0
progressBar.Max=#classes
progressBar.Position=0
local countLabel=createLabel(progressForm)
countLabel.Left=20
countLabel.Top=90
countLabel.Width=500
countLabel.Caption='0 / '..#classes
local detailLabel=createLabel(progressForm)
detailLabel.Left=20
detailLabel.Top=115
detailLabel.Width=500
detailLabel.Caption='Address names: 0 Method names: 0'
progressForm.Show()
-- ==========================================================
-- Result cache
-- ==========================================================
local result={}
local currentIndex=1
local totalFields=0
local totalMethods=0
local timer=createTimer(nil)
-- How many Classes to process each time
local batchSize=10
timer.Interval=10
timer.OnTimer=function(timer)
local batchEnd=
math.min(
currentIndex+batchSize-1,
#classes
)
for i=currentIndex,batchEnd do
local Class=classes[i]
if Class and Class.FullName then
-- ======================================================
-- Class name
-- ======================================================
table.insert(
result,
Class.FullName
)
-- ======================================================
-- Address names
-- ======================================================
table.insert(
result,
'Address names:'
)
local fields=nil
local ok,ret=
pcall(
function()
return getClassFields(Class)
end
)
if ok then
fields=ret
end
if fields then
for j=1,#fields do
local Field=fields[j]
if Field and Field.Name then
table.insert(
result,
' '..Field.Name
)
totalFields=totalFields+1
end
end
end
-- ======================================================
-- Method names
-- ======================================================
table.insert(
result,
'Method names:'
)
-- getClassMethods() itself is responsible for putting the result into Class.Methods
local methodOK=
pcall(
function()
getClassMethods(Class)
end
)
if methodOK and Class.Methods then
for j=1,#Class.Methods do
local Method=Class.Methods[j]
if Method and Method.Name then
table.insert(
result,
' '..Method.Name
)
totalMethods=totalMethods+1
end
end
end
end
end
-- ==========================================================
-- Update progress
-- ==========================================================
currentIndex=batchEnd+1
progressBar.Position=batchEnd
countLabel.Caption=
tostring(batchEnd)..' / '..tostring(#classes)
detailLabel.Caption=
'Address names: '..tostring(totalFields)..
' Method names: '..tostring(totalMethods)
if classes[batchEnd] and classes[batchEnd].FullName then
progressLabel.Caption=
'Reading: '..classes[batchEnd].FullName
end
-- ==========================================================
-- All done
-- ==========================================================
if currentIndex>#classes then
timer.destroy()
progressForm.close()
-- ------------------------------------------------------
-- Create save dialog
-- ------------------------------------------------------
local saveDialog=createSaveDialog()
saveDialog.Title='Save Classes, Address Names, and Method Names'
saveDialog.Filter=
'Text files (*.txt)|*.txt|All files (*.*)|*.*'
saveDialog.DefaultExt='txt'
saveDialog.FileName=
'Assembly-CSharp_Classes_Fields_Methods.txt'
if saveDialog.Execute() then
local filename=saveDialog.FileName
local f,err=
io.open(filename,'w')
if not f then
showMessage(
'Unable to save file:\n\n'..
tostring(err)
)
saveDialog.destroy()
return
end
-- Windows TXT uses CRLF
f:write(
table.concat(result,'\r\n')
)
f:close()
showMessage(
'Save complete!\n\n'..
'Classes: '..tostring(#classes)..'\n'..
'Address names: '..tostring(totalFields)..'\n'..
'Method names: '..tostring(totalMethods)..'\n\n'..
'File:\n'..
filename
)
end
saveDialog.destroy()
end
end
end
|
|
There are people who won't rely that much on A.I. as you do, so please, stop getting confused why ai isn't used by everyone
|
|
| Back to top |
|
 |
AylinCE Grandmaster Cheater Supreme
Reputation: 39
Joined: 16 Feb 2017 Posts: 1595
|
Posted: Sun Oct 04, 2026 5:18 am Post subject: |
|
|
| etioplmld wrote: | Translation only takes—copy, paste, and then one sentence to AI. But are there still programmers who don’t use AI?
As long as you describe the requirement to AI, it generates all the code, and it produces the result in one go, without any errors. Novice programmers slowly piece together a piece of code, then it throws an error when run, and they repeatedly trial and error. AI can even offer multiple options for you to choose from, as if a senior programmer were guiding you, producing complete code in a second and succeeding on the first try. Real human programmers may not quite understand a problem described by an entry-level programmer... The ancient manual programming method is no good.
|
| Frouk wrote: | | There are people who won't rely that much on A.I. as you do, so please, stop getting confused why ai isn't used by everyone |
| GEMINI (AI) wrote: | Frouk actually hits the nail on the head here.
Extreme AI evangelism—claiming it 'never makes mistakes' and renders traditional programming obsolete—is just as flawed as blind anti-AI sentiment. AI is neither a magic oracle nor a threat to human intelligence; it is simply a tool.
Knowing when to use it for efficiency and when to rely purely on manual execution is where actual skill lies. Balance over blind faith, always.
|
_________________
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
|
|