久久久,被高潮,国精产品一线二线三线av,久久精品一区二区东京热,久久精品国产99国产电影网,久久97精品久久久久久久不卡

游戲工作室建立三步曲2019:腳本、防封與人工智

  很高興的說一句,目前為止,前兩篇文章《第一篇,成本與防封號(hào)》,《第二篇,手動(dòng)模式的選擇》收到諸多好評(píng)與贊揚(yáng),各位做游戲工作室的朋友對(duì)我的認(rèn)可更是令我驚訝,所以呢,這第三篇結(jié)尾文章就多說點(diǎn),希望對(duì)大家有點(diǎn)用。

  第三章主要說“腳本的注意事項(xiàng)”, “腳本入門的一些通用模塊”,“圖色與算法”,“人工智能”。其中會(huì)穿插一些很實(shí)用的代碼,能看懂的更好,看不懂的可以百度。

  寫之前呢,說一下本人:

  我還是個(gè)寶寶,真的!還是個(gè)任性的寶寶,從小愛數(shù)學(xué),于是高考數(shù)學(xué)146.從小不大喜歡語(yǔ)文,所以語(yǔ)文91.考了個(gè)全國(guó)排名前60的大學(xué)的數(shù)學(xué)系?;炝怂哪辏瑢?duì),你沒聽錯(cuò),混!畢業(yè)后,突然喜歡上編程,自學(xué)了計(jì)算機(jī),學(xué)了數(shù)據(jù)庫(kù)管理,java。

  工作第二年的時(shí)候,工資拿到一萬(wàn)多。然后,懶得做網(wǎng)頁(yè)了,辭職了。自學(xué)了c#和Windows編程。每天自?shī)首詷?,開心得很。

  最近呢,尤其2019年上半年,公司大量倒閉,企業(yè)大量裁員,看到了好多人迷迷茫茫,哭哭啼啼。總覺得做點(diǎn)什么好,就決定寫幾篇文章。不求播撒光明于天下,只是不想眾多窮苦黎民泯滅于黑暗。好好看,仔細(xì)想,多問多學(xué)。保住一日三餐,足夠。

  前兩篇教大家如何在游戲里賺錢,這篇教大家一些簡(jiǎn)單的腳本知識(shí)。個(gè)人有三個(gè)建議:

  第一,科技,服務(wù)于人民。不要拿去禍害社會(huì)。

  第二,多學(xué)知識(shí),少搞游戲。本事學(xué)成,進(jìn)正規(guī)公司,做個(gè)軟件工程師不好?能行走于陽(yáng)光之下,何必潛行于黑夜之間。

  第三,只要能保住溫飽,永遠(yuǎn)不要停止學(xué)習(xí)。

  如果有人想學(xué)腳本,想學(xué)編程,告訴大家三個(gè)原則,如果你滿足不了,建議你別做。

  第一:技術(shù)員永遠(yuǎn)走在科技的前沿,哪怕迎著失敗和嘲笑。

  第二:技術(shù)員永遠(yuǎn)保持著最冷靜的心態(tài)和最淡泊的耐心。

  第三:保持終生學(xué)習(xí),并且,學(xué)會(huì)的一定要教別人。當(dāng)然,這些都是題外話,不過也是真心話。

  下面開始正文。

  先建立一個(gè)前提,本文所說的腳本,是這樣定義的:

  一個(gè)角色攻擊力1,一個(gè)boss血量1000,所以,這個(gè)角色想殺了這個(gè)boss,需要攻擊1000次。目前市場(chǎng)上有兩種替代人工的辦法:

  第一種,將人物的攻擊修改成999999,殺這個(gè)boss,一刀。

  第二種,模擬鍵盤鼠標(biāo),讓鼠標(biāo)自動(dòng)點(diǎn)擊這個(gè)boss1000下。

  第一種屬于作弊,會(huì)對(duì)游戲產(chǎn)生大量傷害,尤其是點(diǎn)卡游戲,我們說的腳本不包括這些。

  第二種,不修改游戲內(nèi)存數(shù)據(jù),甚至不讀取游戲的內(nèi)存數(shù)據(jù),做到玩家怎么干,電腦就怎么干,我們稱為腳本。

  如果這套思路做成的軟件,不用在游戲上,用在自動(dòng)化辦公上或者工廠機(jī)械上,我們稱為機(jī)械自動(dòng)化或人工智能。

  腳本的注意事項(xiàng)。

  為什么這個(gè)先說,因?yàn)槟軐懩_本的畢竟是少數(shù),大部分的人都是買腳本用。這個(gè)模塊,也可以告訴大家,什么樣的腳本最好別買,什么樣的腳本比較容易封號(hào)。所有的游戲腳本,都要有一個(gè)原則:“低調(diào)”。本來就是灰色產(chǎn)業(yè),能多低調(diào)就多低調(diào),越不引人注意越好,又不是相親當(dāng)英雄,搞得那么光明堂皇干嘛?

  下面分10點(diǎn)詳細(xì)說明。

  第一個(gè)注意事項(xiàng):腳本界面。

  拿網(wǎng)易某個(gè)游戲來說,很多腳本的界面上有什么買鬼切草,巫醫(yī)等和游戲有關(guān)的字符或圖片。如果我是網(wǎng)易的程序員,在隨便一個(gè)時(shí)間點(diǎn),對(duì)電腦桌面截個(gè)圖。Windows的底層函數(shù):CopyFromScreen(new Point(X, Y), new Point(0, 0), bit.Size); 很容易就能做到。一旦看到你在用腳本,遲早封你!

  第二個(gè)注意事項(xiàng):腳本名稱。

  如果一個(gè)腳本的exe名字就叫網(wǎng)易xxx腳本,即使打開后界面上沒有相關(guān)字符也沒用,因?yàn)閑xe名稱決定了你的程序在任務(wù)管理器里面的進(jìn)程名稱。而一臺(tái)電腦的所有當(dāng)前進(jìn)程名稱,也是很容易獲得的,這個(gè)代碼行數(shù)較多,就不貼出來,有興趣的朋友可以百度。當(dāng)然,也有隱藏進(jìn)程的方法,但是exe名稱改掉不是更好嗎?

  第三個(gè)注意事項(xiàng):調(diào)用一些需要釋放的函數(shù)或者類時(shí),一定要記得釋放。

  比如聲明一個(gè)bitmap。Bitmap bit = new Bitmap(width, height, PixelFormat.Format24bppRgb);用完之后,一定記得寫上bit.Dispose();把它釋放掉。不然,就會(huì)越積累越多。游戲變卡不說,很多檢測(cè)程序都會(huì)注意這塊。你內(nèi)存一直飆升的話,別說反腳本程序,360都會(huì)檢測(cè)出來并且提醒你。

  第四個(gè)注意事項(xiàng):調(diào)用的第三方插件一定要有講究。

  很多初學(xué)者學(xué)腳本的時(shí)候,喜歡用按鍵精靈+大漠插件,還不加外殼。對(duì)此,我只能說,自己寫個(gè)程序練練手是可以的,用這種腳本進(jìn)入市場(chǎng),除了封號(hào)還是封號(hào)!為什么?因?yàn)橹腊存I精靈的人都知道,按鍵是用來干嘛的?寫腳本的。大漠插件是用來干嘛的?提供公用函數(shù),方便寫腳本的。那大點(diǎn)的游戲公司會(huì)不知道?不封你,只是想把你養(yǎng)肥了再殺而已。這里,不是說不能用按鍵和大漠,用的時(shí)候麻煩寫復(fù)雜點(diǎn),加點(diǎn)保護(hù),加點(diǎn)外殼,大漠還可以修改自身的特征碼呢。

  第五個(gè)注意事項(xiàng):寫模擬按鍵都是要寫延遲的。

  如果真的想把腳本用起來,建議延遲改成隨機(jī)數(shù)。模擬點(diǎn)擊1000下,每次間隔都是一秒,你的手有那么準(zhǔn)?一查就知道是腳本再點(diǎn)啊。

  第六個(gè)注意事項(xiàng):少用多線程。

  很簡(jiǎn)單的道理,正常人就一個(gè)腦子一雙手,不可能多線程操作,一查就知道是腳本。對(duì)于有些游戲,卻是必須多開,比如夢(mèng)幻的新手任務(wù),一般都是多開做,但是就算多開,也可以不用多線程啊,通過圖色分析每個(gè)界面進(jìn)行到哪一步了,建立一個(gè)優(yōu)先級(jí)別,先操作哪個(gè)后操作哪個(gè),絕對(duì)來得及,就算慢點(diǎn)吧,慢點(diǎn)咋了?能慢幾分鐘?封組號(hào),重新練得多久?

  以上6點(diǎn)說的是增加被封幾率。下面說幾個(gè)坑定被封的,建議碰都別去碰。

  第一個(gè):修改內(nèi)存,其實(shí)呢,這個(gè)可以不說,因?yàn)榇蠹一径疾桓蛇@種傻事。

  第二個(gè):截獲數(shù)據(jù)包。違法,違法,違法。重要的事情說三遍。并且很容易被查到。

  第三個(gè);后臺(tái)模擬,目前后臺(tái)模擬有兩種api,一種是sendMessage,一種是postMessage。Vb,vc,C++和c#是可以直接調(diào)用這兩個(gè)api的,易語(yǔ)言和大漠插件是把這兩個(gè)api封裝了下。這兩種api都是利用了Windows的通信機(jī)制,消息傳遞。很遺憾的是,幾年前,csdn論壇上就有人寫了一個(gè)帖子,講述了正常的按鍵和后臺(tái)按鍵的檢測(cè),并且方法不難,代碼不多,所以游戲公司也能很容易掌握。

  第四個(gè):虛擬機(jī),尤其是服務(wù)器上裝虛擬機(jī)。這玩意,以前搞誅仙3的時(shí)候用的很爽,天龍八部也很爽,地下城有些時(shí)間也很爽。但是吧,我有個(gè)同學(xué),在愛奇藝,年薪三四十萬(wàn),技術(shù)比我高那么一點(diǎn)點(diǎn)。直接對(duì)我說,你要是搞游戲,虛擬機(jī)別碰,具體為什么沒對(duì)我說,但是既然有大神說了,還是別碰比較好。

  這4點(diǎn)為什么說坑定封呢?因?yàn)楦愕锰珖虖埩耍瑖虖埖饺绻闶怯螒虻倪\(yùn)維人員,你也忍受不了。一般人,搞個(gè)幾十臺(tái)電腦,慢悠悠賺點(diǎn)小錢,對(duì)游戲本身影響真心不大,人家也就睜一只眼,閉一只眼了。腳本一旦用了這4點(diǎn),相當(dāng)于你想把別人的游戲一鍋端了,你把別人往死里搞,別人不把你往死里搞?

  腳本入門的一些通用模塊。

  不管你選擇什么語(yǔ)言,只要你在Windows上做,你必然要用到一些api函數(shù),很多新手覺得很難,找又找不到,用又不會(huì)用,然后放棄了寫代碼,繼續(xù)跑去板磚。

  最近抖音流行一句話:你若墮落,神仙也救不了你,你若堅(jiān)強(qiáng),絕處也能逢生。學(xué)編程,本身必須要有堅(jiān)強(qiáng)的意志。當(dāng)然,沒人教確實(shí)很容易絕望,所以這里貼出一些代碼,希望能幫到一些在沒有足夠條件下,卻真心想學(xué)編程的小朋友和大朋友。

  以下所有的api函數(shù),只提供名稱,具體應(yīng)用,自己去百度,都能百度到。

  第一步:獲得游戲焦點(diǎn),專業(yè)的說法,是獲取句柄,百度上有各種方法,我給大家說兩種最簡(jiǎn)單的。對(duì)于單窗口WindowFromPoint(int xPoint,int yPoint);返回參數(shù)是指定坐標(biāo)的窗口句柄。對(duì)于多窗口,首先獲取桌面句柄,GetDesktopWindow();然后遍歷桌面的子句柄,EnumChildWindows(IntPtr hWndParent, CallBack lpfn, int lParam);通過名稱篩選。

  第二步,由句柄得出窗口的四角坐標(biāo),也就是界面的位置。先自定義結(jié)構(gòu)體,public struct RECT

  {

  public int Left; //最左坐標(biāo)

  public int Top; //最上坐標(biāo)

  public int Right; //最右坐標(biāo)

  public int Bottom; //最下坐標(biāo)

  }

  然后獲取坐標(biāo)GetWindowRect(hWnd, ref lpRect);這樣你就能知道界面在屏幕的哪個(gè)位置,然后可以計(jì)算出鼠標(biāo)的點(diǎn)擊位置和找圖的區(qū)域。

  第三步,截圖。分前臺(tái)和后臺(tái),不建議大家用后臺(tái)取色,所以這里只說前臺(tái)。.CopyFromScreen(new Point(X, Y), new Point(0, 0), bit.Size);截屏函數(shù)。

  第四步,模擬鼠標(biāo)鍵盤。也是說前臺(tái)。鼠標(biāo)移動(dòng),SetCursorPos(int X, int Y);鼠標(biāo)點(diǎn)擊mouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo);鍵盤:keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);延遲函數(shù):Thread.Sleep(1000);

  其他:讀取文件,ReadLine()。隨機(jī)數(shù),Random()。窗口最大最小化SetForegroundWindow(IntPtr hWnd);注冊(cè)熱鍵,RegisterHotKey();

  有了這些函數(shù),入門就簡(jiǎn)單的多了。但是這些只是基礎(chǔ),想寫出完整的腳本,還需要很多。

  圖色與算法。

  知道怎么讓鼠標(biāo)點(diǎn)擊,卻不知道點(diǎn)哪里,也沒用。所以,判斷信息對(duì)腳本很重要,說成最重要也不為過。常用的3種方法,截獲數(shù)據(jù)包,讀取內(nèi)存,圖色分析。

  第一種方法,已經(jīng)講過,強(qiáng)烈不建議。

  第二種方法,讀取內(nèi)存,現(xiàn)在的主流方式?;玖鞒叹褪钦一罚抑羔?,然后通過函數(shù)ReadProcessMemory讀取數(shù)據(jù)。這種方式蠻好的,但是呢,每次游戲跟新就要更新代碼,就要重新找基址。對(duì)于一個(gè)團(tuán)隊(duì),到?jīng)]什么,對(duì)于散人來說,增加了不少工作量。并且,游戲?qū)?nèi)存保護(hù)這塊越來越嚴(yán)厲,動(dòng)不動(dòng)來個(gè)十幾級(jí)的偏移。所以這里說一下圖色分析,圖色分析好多腳本都用到了,但是極少有腳本全程用圖色分析,大部分都是一半圖色,一半內(nèi)存。

  我寫腳本,就喜歡全圖色,為啥呢?寫好之后基本不用更新,除非游戲界面發(fā)生變化。并且,全圖色的,基本不封號(hào)。因?yàn)槲覀儾蛔x取內(nèi)存,不碰后臺(tái),不碰多線程,全局鼠鍵模擬。不是說檢測(cè)不到我們,只是我們很低調(diào)。但是全圖色很難寫,因?yàn)橛行┑胤?,確實(shí),人都不好分辨,怎么去分析?這里,我們引進(jìn)算法,相信很多人多多少少聽過算法,但是不熟悉。

  簡(jiǎn)單的來說,算法就是比較復(fù)雜的數(shù)學(xué)公式。區(qū)別是,公式是針對(duì)所有問題的,算法有很多是針對(duì)單個(gè)問題的。比如地下城,哪個(gè)怪離你最近?怎么選擇最近的路線去接近這個(gè)怪?怎么單個(gè)消滅能達(dá)到最快?這些就可以用算法。再比如夢(mèng)幻的新手任務(wù),如果使用前臺(tái)模擬,必然要用到優(yōu)先度算法,確保完成任務(wù)的平均時(shí)間差不多。關(guān)于算法,往往涉及到核心問題的解決方案,這里不好多說,有興趣的可以多研究研究??梢赃@么說吧,圖色分析加算法,應(yīng)該是未來幾年高質(zhì)量腳本的趨勢(shì)。

  人工智能。

  個(gè)人認(rèn)為,好的游戲腳本,就應(yīng)該像人一樣去操作,甚至像人一樣去分析。反過來說,游戲的制作宗旨,是為了給玩家用,而不是為了反腳本。模擬人工,你永遠(yuǎn)能立于不敗之地。那么我們先來討論下人的分析思維。人的大腦是根據(jù)聽覺視覺嗅覺味覺觸覺等獲取信息的。

  對(duì)游戲而言,只有視覺和聽覺。對(duì)于腳本而言,99%的信息靠視覺。我們重點(diǎn)談?wù)撘曈X,人的大腦,剛出生的時(shí)候,沒辦法分析文字,因?yàn)闆]有概念。至于視頻,本身就是圖片,只不過幀數(shù)比較快而已。所以,大腦分析最多的是圖片。一張圖片,并不是全部的信息有用。或者說,并不是每一塊信息同等重要。

  舉個(gè)很污的例子,你在看片,更多的是在注意女主角,而不是男主,更多的是在注意女主的某些部位,而不是手指頭發(fā)。那你為什么會(huì)養(yǎng)成這種分析習(xí)慣呢?因?yàn)槲覀兊拇竽X,在長(zhǎng)期的分析中,提取了很多模型。所以你知道一棵樹是什么樣,你知道一條狗是什么樣。同樣,在腳本中,我們也需要模型(鑒于商業(yè)機(jī)密和只是產(chǎn)權(quán),這里只說建立模型的思路,不能寫具體步驟)。

  這個(gè)模型,可能是某一個(gè)對(duì)話框,也有可能是某個(gè)字。對(duì)于字庫(kù),是必須的,甚至是首要的,大漠插件有自己的字庫(kù),百度識(shí)別也有自己的字庫(kù),都可以直接去調(diào)用。但是我建議,大家建立自己的字庫(kù),雖然時(shí)間比較長(zhǎng),但是建成后,真心很好用。至于有多好用,參照第二章寫商人的利潤(rùn)的那段。

  當(dāng)然,僅僅有字庫(kù),是遠(yuǎn)遠(yuǎn)不夠的,還需要很多別的模型,比如npc和怪物。你的角色,如何知道身邊有哪些怪物,大部分的作者用的是基址遍歷。這種方法談不上好與不好,我的評(píng)價(jià)是兩個(gè)字:能用。除了基址遍歷,我們可以用建模型的辦法,每個(gè)npc都有特征,不然玩家怎么分辨?把這些特征抓住,轉(zhuǎn)化成特征值,通過特征值,照樣能知道身邊有哪些npc。知道了界面上的字和npc,你還需要知道鼠標(biāo)在哪里。

  很多游戲的鼠標(biāo)都有自己的樣子,但是這些樣子幾乎是不變的,或者小范圍變化。否則,玩家怎么識(shí)別?既然人能一眼看出來,那說明,這個(gè)模型不難建立。

  建立模型,一般從找色開始,圖片的像素,有像素值,有些地方是固定的,有些地方是規(guī)律變化的,抓住這些,也就抓住了建立模型的關(guān)鍵。有了模型,你就能讓你的腳本像人一樣,通過女主的表情就知道男主用了多大力。有了分析,還需要操作。人的操作,是有血肉的,而不是機(jī)械的,是休閑式的,而不是拼命式的。

  有些人寫腳本,一丁點(diǎn)時(shí)間都不浪費(fèi),讓游戲里的角色一直打打打,殺殺殺,跑跑跑。還很自以為是的認(rèn)為利潤(rùn)最大化了。嘻嘻,反正我不這么想,不封號(hào)才是利潤(rùn)最大化。所以我的腳本,跑跑停停,偶爾還故意點(diǎn)錯(cuò),跑路偶爾跑偏,然后修正一下,打怪偶爾放錯(cuò)技能,然后多一回合。哎,我的利潤(rùn)真心沒多大,就是比較省心,因?yàn)楹苌俜馓?hào)。

  講個(gè)笑話,以前有個(gè)游戲的某個(gè)道具可以連續(xù)吃,而我呢,吊兒郎當(dāng)?shù)膶懘a,導(dǎo)致偶爾會(huì)同時(shí)吃掉兩個(gè),把一些客戶心疼的,不要不要的,然后讓我改,我懶得改。然后有兩個(gè)客戶跑去用別人的腳本了,臨走前還罵我一頓,說我垃圾,不負(fù)責(zé),不為客戶找想,不當(dāng)家不知道柴米油鹽貴。但是,過了半個(gè)月,就回來了。原因估計(jì)大家也能猜到。所以啊,人嘛,總是會(huì)犯錯(cuò)的,所以啊,腳本呢,也是需要偶爾犯錯(cuò)滴。

  游戲這行,本來就是細(xì)水長(zhǎng)流,想一夜暴富,還是去抄大蒜比較好。

  2019年,游戲工作室建立三步曲,寫了3篇,用了3天時(shí)間,你說你們要是不回復(fù),對(duì)得起我大冬天敲鍵盤的手嗎?

  好了,寫完了,明天又要敲代碼了,至于這些文章能幫到多少人,盡人事,聽天命吧。寫首歪事送給大家,寫完去給老婆洗碗。。。

  勸君窮時(shí)少飲酒,一杯能解幾斤愁?勸君閑時(shí)多上進(jìn),來日方長(zhǎng)不可停。