首先以 弓箭手大作戰(非正版,廣告一大堆) 游戲為例,用GG修改器搜索到一些需要值的地址,下面是找到的一些數據規律:

弓箭手大作戰
等級和積分,第一個1為等級,80為積分
1;1;25;80;0::24
視野,22為視野
22.0F;3D;0D::12
22.0F;3D;0D;27.5F;33.0F;3.0F::24
攻擊距離,6為攻擊距離
0.5F;30.0F;6.0F;25.0F::16
生命值,第一個為最大生命值,第二個為當前生命值,生命值除以25是視覺人物生命值格數
125F;125F;0D;1D::16
需要注意的是,視野距離和攻擊距離可以在游戲外搜索,生命值,等級和積分需要進游戲搜索,一次不成功需要多次變化后搜索。
下面是lua腳本代碼

gg.clearResults()--清除數據 dengji,jifen="",""--等級,積分地址 shiju=""--視距 gongjijuli=""--攻擊距離 zong,dangqian="",""--總生命中,當前生命中 --顯示浮動按鈕 gg.showUiButton() --無限循環判斷觸發事件 while true do --按鈕點擊事件 if gg.isClickedUiButton() then --調用操作選項 local ret = gg.choice( {'等級和積分', '視距', '生命值', '攻擊距離', "修改", '退出'}) if ret == 1 then--等級積分 ::soso::--定義標簽 dengji,jifen="",""--初始化 local t=gg.prompt({"等級","積分"}, {[1]=1}, {[1]='number',[2]= 'number'}) if t == nil then --gg.alert('取消返回!') else if t[1]=="" or tonumber(t[1])<=0 then gg.alert("等級不能空!") else if t[2]=="" or tonumber(t[2])<=0 then gg.alert("積分不能為空!") else --輸入成功 --gg.clearResults() local str=t[1].."D;1D;25D;"..t[2].."D;0D::24"--聯合搜索字符串 --str="560"--測試 --gg.clearResults()--清除數據 if gg.searchNumber(str, gg.TYPE_DWORD) then local c=gg.getResultsCount() if c==5 then --找到了,提取等級和積分地址 local r=gg.getResults(5) r=gg.getValues(r) dengji=r[1].address jifen=r[4].address --把需要的項寫入表格並保存到列表 local t = {} t[1] = {} t[1].address = dengji t[1].flags = gg.TYPE_DWORD --t[1].freeze = true--凍結 t[1].value = r[1].value t[2] = {} t[2].address = jifen t[2].flags = gg.TYPE_DWORD --t[2].freeze = true--凍結 t[2].value = r[4].value gg.addListItems(t)--把列表添加到保存列表 --gg.setValues(t)--修改列表值 --找到地址添加成功清楚數據 gg.clearResults()--清除數據 else --[[ local ex = gg.alert('未找到,是否再次搜索?', '是', nil, '否') if ex == 1 then--返回1為"是" 3為"否" goto soso--跳轉到標簽 end ]] gg.alert("搜索到"..c.."項,請增加積分或者改變等級后再次搜索!") end end end end end end if ret == 2 then--視距" gg.clearResults()--清除數據 shiju="" if gg.searchNumber("22.0F;3D;0D;27.5F;33.0F;3.0F::24", gg.TYPE_FLOAT) then local c=gg.getResultsCount() if c==6 then --找到了,提取視野地址 local r=gg.getResults(6) r=gg.getValues(r) shiju=r[1].address --把需要的項寫入表格並保存到列表 local t = {} t[1] = {} t[1].address = shiju t[1].flags = gg.TYPE_FLOAT --t[1].freeze = true--凍結 t[1].value = r[1].value gg.addListItems(t)--把列表添加到保存列表 --gg.setValues(t)--修改列表值 --找到地址添加成功清楚數據 gg.clearResults()--清除數據 else gg.alert("搜索到"..c.."項,請手動修改視距!") end end end if ret == 3 then--生命值 zong="" dangqian="" local t=gg.prompt({"總生命值","當前生命值"}, {[1]=5,[2]=5}, {[1]='number',[2]= 'number'}) if t == nil then --gg.alert('取消返回!') else if t[1]=="" or tonumber(t[1])<=0 then gg.alert("總生命值不能空!") else if t[2]=="" or tonumber(t[2])<=0 then gg.alert("當前生命值不能為空!") else local str=(tonumber(t[1])*25).."F;"..(tonumber(t[2])*25).."F;0D;1D::16" if gg.searchNumber(str, gg.TYPE_FLOAT) then local c=gg.getResultsCount() if c==4 then --找到了,提取攻擊距離地址 local r=gg.getResults(4) r=gg.getValues(r) zong=r[1].address dangqian=r[2].address --把需要的項寫入表格並保存到列表 local t = {} t[1] = {} t[1].address = zong t[1].flags = gg.TYPE_FLOAT --t[1].freeze = true--凍結 t[1].value = r[1].value t[2] = {} t[2].address = dangqian t[2].flags = gg.TYPE_FLOAT t[2].freeze = true--凍結 t[2].value = r[2].value gg.addListItems(t)--把列表添加到保存列表 --gg.setValues(t)--修改列表值 --找到地址添加成功清楚數據 gg.clearResults()--清除數據 else gg.alert("搜索到"..c.."項,請手動修改生命值!") end end end end end end if ret == 4 then--攻擊距離 gg.clearResults()--清除數據 gongjijuli="" if gg.searchNumber("0.5F;30.0F;6.0F;25.0F::16", gg.TYPE_FLOAT) then local c=gg.getResultsCount() if c==4 then --找到了,提取攻擊距離地址 local r=gg.getResults(4) r=gg.getValues(r) gongjijuli=r[3].address --把需要的項寫入表格並保存到列表 local t = {} t[1] = {} t[1].address = gongjijuli t[1].flags = gg.TYPE_FLOAT --t[1].freeze = true--凍結 t[1].value = r[3].value gg.addListItems(t)--把列表添加到保存列表 --gg.setValues(t)--修改列表值 --找到地址添加成功清楚數據 gg.clearResults()--清除數據 else gg.alert("搜索到"..c.."項,請手動修改攻擊距離!") end end end if ret == 5 then--其他選項 local td1,td2,td3={},{},{} local ads,tys,vls={},{},{} --dengji="111" -- jifen="555" local i=1 if dengji~="" then td1[i]="等級" gg.clearResults()--清除數據 --根據地址獲取數值 if gg.searchAddress(string.format("%#x",dengji),0xFFFFFFFF,gg.TYPE_DWORD) then local r=gg.getResults(1) r=gg.getValues(r) td2[i]=r[1].value end --td2[i]="" td3[i]="number" ads[i]=dengji tys[i]=gg.TYPE_DWORD vls[i]=false--是否轉換 i=i+1 end if jifen~="" then td1[i]="積分" gg.clearResults()--清除數據 --根據地址獲取數值 if gg.searchAddress(string.format("%#x",jifen),0xFFFFFFFF,gg.TYPE_DWORD) then local r=gg.getResults(1) r=gg.getValues(r) td2[i]=r[1].value end -- td2[i]="" td3[i]="number" ads[i]=jifen tys[i]=gg.TYPE_DWORD vls[i]=false--是否轉換 i=i+1 end if shiju~="" then td1[i]="視距" gg.clearResults()--清除數據 --根據地址獲取數值 if gg.searchAddress(string.format("%#x",shiju),0xFFFFFFFF,gg.TYPE_FLOAT) then local r=gg.getResults(1) r=gg.getValues(r) td2[i]=r[1].value end -- td2[i]="" td3[i]="number" ads[i]=shiju--地址 tys[i]=gg.TYPE_FLOAT--數據類型 vls[i]=false--是否轉換 i=i+1 end if gongjijuli~="" then td1[i]="攻擊距離" gg.clearResults()--清除數據 --根據地址獲取數值 if gg.searchAddress(string.format("%#x",gongjijuli),0xFFFFFFFF,gg.TYPE_FLOAT) then local r=gg.getResults(1) r=gg.getValues(r) td2[i]=r[1].value end -- td2[i]="" td3[i]="number" ads[i]=gongjijuli tys[i]=gg.TYPE_FLOAT vls[i]=false--是否轉換 i=i+1 end if zong~="" then td1[i]="總生命值" gg.clearResults()--清除數據 --根據地址獲取數值 if gg.searchAddress(string.format("%#x",zong),0xFFFFFFFF,gg.TYPE_FLOAT) then local r=gg.getResults(1) r=gg.getValues(r) td2[i]=tonumber(r[1].value)/25 end --td2[i]="" td3[i]="number" ads[i]=zong tys[i]=gg.TYPE_FLOAT vls[i]=true--是否轉換 i=i+1 end if dangqian~="" then td1[i]="當前生命值" gg.clearResults()--清除數據 --根據地址獲取數值 if gg.searchAddress(string.format("%#x",dangqian),0xFFFFFFFF,gg.TYPE_FLOAT) then local r=gg.getResults(1) r=gg.getValues(r) td2[i]=tonumber(r[1].value)/25 end -- td2[i]="" td3[i]="number" ads[i]=dangqian tys[i]=gg.TYPE_FLOAT vls[i]=true--是否轉換 i=i+1 end local t=gg.prompt(td1,td2,td3) if t ~= nil then local tt={} --使用for循環遍歷 --i是數組索引值,v是對應索引的數組元素值。 --ipairs是Lua提供的一個迭代器函數,用來迭代數組。 for i,v in ipairs(t) do tt[i]={} if vls[i] then--轉換 tt[i].value=tonumber(v)*25 else tt[i].value=v end tt[i].address=ads[i] tt[i].flags=tys[i] end --修改列表里的數據 gg.setValues(tt) end end if ret == 6 then--退出 local ex = gg.alert('你是否要退出腳本?', '是', nil, '否') if ex == 1 then--返回1為"是" 3為"否" os.exit()--退出腳本 end end end gg.sleep(100) end
常用函數總結

GG修改器lua腳本常用函數總結: 所有函數參閱官網網站 https://gameguardian.net/help/classgg.html 1.彈一個提示框 gg.alert("輸入不能為空!") local ex = gg.alert('你是否要退出腳本?', '是', nil, '否') if ex == 1 then --返回1為"是" 3為"否" os.exit() --退出腳本 end os.exit()--退出腳本 end 2.彈出一個列表菜單 local t = gg.choice({"第一項","第二項"})--返回選擇項的索引,從1開始 if t == 1 then gg.alert("第一項!") end 3.彈出一個具有編輯互交功能的列表菜單 --gg.prompt(t1, t2, t3) t1代表列表項的菜單名稱,t2代表互交控件的默認值,t3代表需要展示什么控件, 可參閱types: 'number', 'text', 'path', 'file', 'new_file', 'setting', 'speed', 'checkbox',返回值是控件里面值的列表 local t = gg.prompt( {"姓名", "年齡"}, {[1]="張三", [2]=20},--如果沒有默認值寫 nil {[1]="text",[2]="number"})--其中 "[數字]= "可省略 if t == nil then gg.alert("你選擇了取消") else gg.alert("你的姓名:"..t[1].."年齡:"..t[2]) end 4.復選框菜單 local t = gg.multiChoice({'A', 'B', 'C', 'D'}) if t == nil then gg.alert('Canceled') else if t[1] then gg.alert('do A') end if t[2] then gg.alert('do B') end if t[3] then gg.alert('do C') end if t[4] then gg.alert('do D') end end 5.清除搜索列表 gg.clearResults() 6.搜索一個數值[最常用] gg.searchNumber("100", gg.TYPE_DWORD) --第一個參數是要搜索的值,第二個參數是搜索的類型,返回值是是否搜到數據列表,搜索類型為TYPE_AUTO,TYPE_BYTE,TYPE_DOUBLE,TYPE_DWORD,TYPE_FLOAT,TYPE_QWORD,TYPE_WORD,TYPE_XOR 7.將結果加載到結果列表中並將其作為表返回。 local r = gg.getResults(5)--獲取列表前5項數據,返回到列表中,通過r[1].address,r[1].flags,r[1].value訪問,地址是十進制數字 8.獲取項列表的值。 local r = gg.getValues(table t)--可以配合gg.getResults(5)使用,通過r[1].address,r[1].flags,r[1].value訪問 9.獲取找到的結果數。 local c=gg.getResultsCount() 10.編輯所有搜索的結果 在調用此方法之前,必須通過getResults加載結果。值將僅應用於具有指定類型的結果。作用的是搜索結果集 editAll(string value, int type ) 11.設置項列表的值。作用的是自定義列表集 setValues(table values) 如: gg.searchNumber('10', gg.TYPE_DWORD) local r = gg.getResults(5) -- load items r[1].value = '15' gg.setValues(r) 12.添加項到保存列表 gg.addListItems(t)--項有許多約束,可參考官網,最常用的如下 local t = {} t[1] = {} t[1].address = 0x18004030--十六進制 t[1].flags = gg.TYPE_FLOAT--數據類型 t[1].freeze = true--凍結,默認不凍結 t[1].value = "100"--值 gg.addListItems(t)--把列表添加到保存列表 13.根據地址獲取數值 gg.searchAddress("0xA1234567",0xFFFFFFFF,gg.TYPE_FLOAT)--地址可以是完整的地址也可以是某段'0B?0','A20',如果不指定類型則搜索一個地址所有數據類型,地址必須是十六進制地址 14.休眠 gg.sleep(100) 15.其他 a.while循環 while true do--無限循環 --循環體 gg.sleep(100) end b.for循環 local t = {"a","b","c"} for i, v in ipairs(t) do--ipairs是Lua提供的一個迭代器函數,用來迭代數組。 print(v)--輸出每一項的值 end c.字符串轉數字 local n = tonumber("123") d.十進制轉十六進制 local d = string.format("%#x","123456")--十進制數轉十六進制地址有用 e.判斷語句中等於是==,不等於是~= f.條件判斷 if 條件 then 代碼體 end--或者else繼續判斷 g.goto語句 ::label::--定義標簽 代碼體 goto label--跳轉到標簽 16.UI浮動按鈕 gg.showUiButton()--顯示UI按鈕 gg.hideUiButton()--隱藏UI按鈕 gg.isClickedUiButton()--獲取ui按鈕的單擊狀態。如果點擊返回真true