PDA

View Full Version : [vJass] หัดเขียน Anti hack map system (มั้ง)



[M]iS-[T]-raL
25-10-2011, 12:54 PM
ก่อนอื่นขออธิบายที่มาก่อนที่จะเขียนก่อนละกัน = =

หลายๆ คนบอกว่าจะเขียนได้ยังไง ในเมื่อ Hack map เป็นโปรแกรมเจาะ TCG
แถมยังเปิดหมอกออกหมดแมพอีกต่างหาก ซึ่งต่างจาก cheat ที่สามารถจับได้ง่ายๆ

จากคำพูดนี้ผมจึุงมีความคิดว่า?
ถ้ามัน hack map หมอกก็ต้องเปิดออกหมดสินะ
แล้วถ้าหมอกเปิดออกหมด ตามหลักความเป็นจริงแล้ว จะสามารถคลิก Unit ฝ่ายศัตรูที่อยู่ในหมอกได้หรือไม่?

ซึ่งจากคำถามต่างๆ ในหัวผมอันไร้สาระจึงบังเกิดความคิดขึ้นว่า
ถ้าสามารถตรวจจับ Unit การคลิกนอกระยะที่ควรจะมองเห็น (คลิกในหมอก) จะตรวจสอบอย่างไร

Note: สคิปนี้ยังเขียนเล่นๆ แต่สามารถใช้งานจริงได้
ไม่แนะนำให้ใช้กับแมพที่มีผู้เล่นมากกว่า 2 ทีม
แผนผังที่แนะนำให้ใช้กับแมพประเภทนี้ > Team 1 /Team 2 /Creep /Npc

อีกอย่างสคิปนี้จะไม่เตะผู้เล่นนะ แต่จะประกาศให้ทั่วแมพเฉยๆ ว่าใครเป็นคนใช้ (สามารถไปปรับแต่งคำสั่งได้ในภายหลัง)
หากใครมีความคิดที่จะต่อยอดก็ฝากด้วยละกันครับ ><

อีเว้นการทำงาน
Event - Selection, Spell, Death
Selection ทำงานเมื่อคลิก unit ฝ่ายศัตรู (Event หลัก)
Spell, Death จะทำการปิดการตรวจ Selection เฉพาะเราตามเวลาที่กำหนดไว้
เพื่อไม่ให้ระบบเข้าใจผิดว่าเรากำลัง hack map (เพราะ่บางสกิลทำให้เปิดหมอกได้ และ
เมื่อเราตายหมอกบริเวณนั้นจะเปิดชั่วคราว)

การติดตั้ง
Copy ส่วน globals แปะให้เสร็จ
Copy ส่วนสคิปไว้ส่วนใดก็ได้ข้างใต้ endglobals
เพิ่มฟังชั่น call ALL_AMH_Event() ใน function main

การตั้งค่า
คุณสามารถกำหนดระยะการตรวจสอบได้ที่
AMH_Radius_Range ของ globals

กำหนดระยะเวลาเมื่อ Unit ตายหรือใช้สกิล ระบบจะไม่สนใจเราชั่วคราวกำหนดเป็นวินาที
AMH_Ignore_Timer ของ globals

และกำหนดผู้เล่นที่ต้องการตรวจสอบได้ที่
AMH_P_Check[0] ถึง AMH_P_Check[15] ที่ ALL_AMH_Event

อธิบายนิด
AMH_P_Check[0] ถึง AMH_P_Check[15]
ใช้สำหรับปิดการตรวจสอบ Unit ของ ผู้เล่นนั้นๆ
ซึ่งแนะนำให้ปิดเฉพาะ Unit ฝ่าย Creep และ NPC
เช่น
set AMH_P_Check[0]=true ผู้เล่นทีม 1
set AMH_P_Check[1]=true ผู้เล่นทีม 1
set AMH_P_Check[2]=true ผู้เล่นทีม 1
set AMH_P_Check[3]=true ผู้เล่นทีม 1
set AMH_P_Check[4]=true ผู้เล่นทีม 1
set AMH_P_Check[5]=true ผู้เล่นทีม 1
set AMH_P_Check[6]=true ผู้เล่นทีม 2
set AMH_P_Check[7]=true ผู้เล่นทีม 2
set AMH_P_Check[8]=true ผู้เล่นทีม 2
set AMH_P_Check[9]=true ผู้เล่นทีม 2
set AMH_P_Check[10]=true ผู้เล่นทีม 2
set AMH_P_Check[11]=true ผู้เล่นทีม 2
set AMH_P_Check[12]=false Creep
set AMH_P_Check[13]=false NPC
set AMH_P_Check[14]=false ไม่มีผู้เล่น
set AMH_P_Check[15]=false ไม่มีผู้เล่น


globals
integer AMH_Radius_Range=1500
real AMH_Ignore_Timer=10.
trigger array AMH_Trigger
integer AMH_Check=0
boolean array AMH_P_Check
boolean array AMH_P_DS
timer array AMH_Timer
unit AMH_Unit=null
endglobals
function AMH_Select_Check takes nothing returns nothing
local unit AMH_L_Unit=GetEnumUnit()
local player AMH_L_P1=GetOwningPlayer(AMH_L_Unit)
local player AMH_L_P2=GetOwningPlayer(AMH_Unit)
if IsPlayerEnemy(AMH_L_P1,AMH_L_P2)then
if AMH_P_Check[GetPlayerId(AMH_L_P1)]then
set AMH_Check=AMH_Check+1
endif
endif
endfunction
function AMH_Select_Action takes nothing returns nothing
local player AMH_L_P1=GetTriggerPlayer()
local force AMH_L_F=bj_FORCE_ALL_PLAYERS
set AMH_Unit=GetTriggerUnit()
set AMH_Check=0
call ForGroupBJ(GetUnitsInRangeOfLocAll(AMH_Radius_Range,GetUnitLoc(AMH_Unit)),function AMH_Select_Check)
if AMH_Check==0then
call DisplayTimedTextToForce(AMH_L_F,60.,"Warning player "+GetPlayerName(AMH_L_P1)+" has use hack map.")
endif
endfunction
function AMH_Select_Condition takes nothing returns boolean
local unit AMH_L_Unit=GetTriggerUnit()
local player AMH_L_P1=GetTriggerPlayer()
local player AMH_L_P2=GetOwningPlayer(AMH_L_Unit)
local integer AMH_L_N=GetPlayerId(AMH_L_P1)
return(IsPlayerEnemy(AMH_L_P2,AMH_L_P1)and(AMH_P_DS[AMH_L_N]))
endfunction
function AMH_Timer_Action takes nothing returns nothing
local unit AMH_L_Unit=GetTriggerUnit()
local player AMH_L_P1=GetOwningPlayer(AMH_L_Unit)
local integer AMH_L_N=GetPlayerId(AMH_L_P1)
call DisableTrigger(AMH_Trigger[AMH_L_N+100])
call PauseTimer(AMH_Timer[AMH_L_N])
set AMH_Timer[AMH_L_N]=CreateTimer()
call StartTimerBJ(AMH_Timer[AMH_L_N],false,AMH_Ignore_Timer)
set AMH_Timer[AMH_L_N]=bj_lastStartedTimer
set AMH_P_DS[AMH_L_N]=false
call EnableTrigger(AMH_Trigger[AMH_L_N+100])
endfunction
function AMH_Timer_Condition takes nothing returns boolean
local unit AMH_L_Unit=GetTriggerUnit()
local player AMH_L_P1=GetOwningPlayer(AMH_L_Unit)
local integer AMH_L_N=GetPlayerId(AMH_L_P1)
return(AMH_L_N<=11)
endfunction
function AMH_Timer_A00 takes nothing returns nothing
call PauseTimer(AMH_Timer[0])
call DisableTrigger(AMH_Trigger[100])
set AMH_P_DS[0]=true
set AMH_Timer[0]=CreateTimer()
endfunction
function AMH_Timer_A01 takes nothing returns nothing
call PauseTimer(AMH_Timer[1])
call DisableTrigger(AMH_Trigger[101])
set AMH_P_DS[1]=true
set AMH_Timer[1]=CreateTimer()
endfunction
function AMH_Timer_A02 takes nothing returns nothing
call PauseTimer(AMH_Timer[2])
call DisableTrigger(AMH_Trigger[102])
set AMH_P_DS[2]=true
set AMH_Timer[2]=CreateTimer()
endfunction
function AMH_Timer_A03 takes nothing returns nothing
call PauseTimer(AMH_Timer[3])
call DisableTrigger(AMH_Trigger[103])
set AMH_P_DS[3]=true
set AMH_Timer[3]=CreateTimer()
endfunction
function AMH_Timer_A04 takes nothing returns nothing
call PauseTimer(AMH_Timer[4])
call DisableTrigger(AMH_Trigger[104])
set AMH_P_DS[4]=true
set AMH_Timer[4]=CreateTimer()
endfunction
function AMH_Timer_A05 takes nothing returns nothing
call PauseTimer(AMH_Timer[5])
call DisableTrigger(AMH_Trigger[105])
set AMH_P_DS[5]=true
set AMH_Timer[5]=CreateTimer()
endfunction
function AMH_Timer_A06 takes nothing returns nothing
call PauseTimer(AMH_Timer[6])
call DisableTrigger(AMH_Trigger[106])
set AMH_P_DS[6]=true
set AMH_Timer[6]=CreateTimer()
endfunction
function AMH_Timer_A07 takes nothing returns nothing
call PauseTimer(AMH_Timer[7])
call DisableTrigger(AMH_Trigger[107])
set AMH_P_DS[7]=true
set AMH_Timer[7]=CreateTimer()
endfunction
function AMH_Timer_A08 takes nothing returns nothing
call PauseTimer(AMH_Timer[8])
call DisableTrigger(AMH_Trigger[108])
set AMH_P_DS[8]=true
set AMH_Timer[8]=CreateTimer()
endfunction
function AMH_Timer_A09 takes nothing returns nothing
call PauseTimer(AMH_Timer[9])
call DisableTrigger(AMH_Trigger[109])
set AMH_P_DS[9]=true
set AMH_Timer[9]=CreateTimer()
endfunction
function AMH_Timer_A10 takes nothing returns nothing
call PauseTimer(AMH_Timer[10])
call DisableTrigger(AMH_Trigger[110])
set AMH_P_DS[10]=true
set AMH_Timer[10]=CreateTimer()
endfunction
function AMH_Timer_A11 takes nothing returns nothing
call PauseTimer(AMH_Timer[11])
call DisableTrigger(AMH_Trigger[111])
set AMH_P_DS[11]=true
set AMH_Timer[11]=CreateTimer()
endfunction
function ALL_AMH_Event takes nothing returns nothing
local integer AMH_L_Loop=0
set AMH_P_Check[0]=true
set AMH_P_Check[1]=true
set AMH_P_Check[2]=true
set AMH_P_Check[3]=true
set AMH_P_Check[4]=true
set AMH_P_Check[5]=true
set AMH_P_Check[6]=true
set AMH_P_Check[7]=true
set AMH_P_Check[8]=true
set AMH_P_Check[9]=true
set AMH_P_Check[10]=true
set AMH_P_Check[11]=true
set AMH_P_Check[12]=false
set AMH_P_Check[13]=false
set AMH_P_Check[14]=false
set AMH_P_Check[15]=false
loop
exitwhen AMH_L_Loop>11
set AMH_P_DS[AMH_L_Loop]=true
set AMH_Timer[AMH_L_Loop]=CreateTimer()
call DisableTrigger(AMH_Trigger[AMH_L_Loop+100])
set AMH_L_Loop=AMH_L_Loop+1
endloop
set AMH_Trigger[1]=CreateTrigger()
call TriggerRegisterPlayerSelectionEventBJ(AMH_Trigger[1],Player(0),true)
call TriggerRegisterPlayerSelectionEventBJ(AMH_Trigger[1],Player(1),true)
call TriggerRegisterPlayerSelectionEventBJ(AMH_Trigger[1],Player(2),true)
call TriggerRegisterPlayerSelectionEventBJ(AMH_Trigger[1],Player(3),true)
call TriggerRegisterPlayerSelectionEventBJ(AMH_Trigger[1],Player(4),true)
call TriggerRegisterPlayerSelectionEventBJ(AMH_Trigger[1],Player(5),true)
call TriggerRegisterPlayerSelectionEventBJ(AMH_Trigger[1],Player(6),true)
call TriggerRegisterPlayerSelectionEventBJ(AMH_Trigger[1],Player(8),true)
call TriggerRegisterPlayerSelectionEventBJ(AMH_Trigger[1],Player(9),true)
call TriggerRegisterPlayerSelectionEventBJ(AMH_Trigger[1],Player(10),true)
call TriggerRegisterPlayerSelectionEventBJ(AMH_Trigger[1],Player(11),true)
call TriggerAddCondition(AMH_Trigger[1],Condition(function AMH_Select_Condition))
call TriggerAddAction(AMH_Trigger[1],function AMH_Select_Action)
set AMH_Trigger[2]=CreateTrigger()
call TriggerRegisterPlayerUnitEventSimple(AMH_Trigger[2],Player(0),EVENT_PLAYER_UNIT_DEATH)
call TriggerRegisterPlayerUnitEventSimple(AMH_Trigger[2],Player(1),EVENT_PLAYER_UNIT_DEATH)
call TriggerRegisterPlayerUnitEventSimple(AMH_Trigger[2],Player(2),EVENT_PLAYER_UNIT_DEATH)
call TriggerRegisterPlayerUnitEventSimple(AMH_Trigger[2],Player(3),EVENT_PLAYER_UNIT_DEATH)
call TriggerRegisterPlayerUnitEventSimple(AMH_Trigger[2],Player(4),EVENT_PLAYER_UNIT_DEATH)
call TriggerRegisterPlayerUnitEventSimple(AMH_Trigger[2],Player(5),EVENT_PLAYER_UNIT_DEATH)
call TriggerRegisterPlayerUnitEventSimple(AMH_Trigger[2],Player(6),EVENT_PLAYER_UNIT_DEATH)
call TriggerRegisterPlayerUnitEventSimple(AMH_Trigger[2],Player(7),EVENT_PLAYER_UNIT_DEATH)
call TriggerRegisterPlayerUnitEventSimple(AMH_Trigger[2],Player(8),EVENT_PLAYER_UNIT_DEATH)
call TriggerRegisterPlayerUnitEventSimple(AMH_Trigger[2],Player(9),EVENT_PLAYER_UNIT_DEATH)
call TriggerRegisterPlayerUnitEventSimple(AMH_Trigger[2],Player(10),EVENT_PLAYER_UNIT_DEATH)
call TriggerRegisterPlayerUnitEventSimple(AMH_Trigger[2],Player(11),EVENT_PLAYER_UNIT_DEATH)
call TriggerRegisterPlayerUnitEvent(AMH_Trigger[2],Player(0),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(AMH_Trigger[2],Player(1),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(AMH_Trigger[2],Player(2),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(AMH_Trigger[2],Player(3),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(AMH_Trigger[2],Player(4),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(AMH_Trigger[2],Player(5),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(AMH_Trigger[2],Player(6),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(AMH_Trigger[2],Player(7),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(AMH_Trigger[2],Player(8),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(AMH_Trigger[2],Player(9),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(AMH_Trigger[2],Player(10),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(AMH_Trigger[2],Player(11),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerAddCondition(AMH_Trigger[2],Condition(function AMH_Timer_Condition))
call TriggerAddAction(AMH_Trigger[2],function AMH_Timer_Action)
set AMH_Trigger[100]=CreateTrigger()
call TriggerRegisterTimerExpireEvent(AMH_Trigger[100],AMH_Timer[0])
call TriggerAddAction(AMH_Trigger[100],function AMH_Timer_A00)
set AMH_Trigger[101]=CreateTrigger()
call TriggerRegisterTimerExpireEvent(AMH_Trigger[101],AMH_Timer[1])
call TriggerAddAction(AMH_Trigger[101],function AMH_Timer_A01)
set AMH_Trigger[102]=CreateTrigger()
call TriggerRegisterTimerExpireEvent(AMH_Trigger[102],AMH_Timer[2])
call TriggerAddAction(AMH_Trigger[102],function AMH_Timer_A02)
set AMH_Trigger[103]=CreateTrigger()
call TriggerRegisterTimerExpireEvent(AMH_Trigger[103],AMH_Timer[3])
call TriggerAddAction(AMH_Trigger[103],function AMH_Timer_A03)
set AMH_Trigger[104]=CreateTrigger()
call TriggerRegisterTimerExpireEvent(AMH_Trigger[104],AMH_Timer[4])
call TriggerAddAction(AMH_Trigger[104],function AMH_Timer_A04)
set AMH_Trigger[105]=CreateTrigger()
call TriggerRegisterTimerExpireEvent(AMH_Trigger[105],AMH_Timer[5])
call TriggerAddAction(AMH_Trigger[105],function AMH_Timer_A05)
set AMH_Trigger[106]=CreateTrigger()
call TriggerRegisterTimerExpireEvent(AMH_Trigger[106],AMH_Timer[6])
call TriggerAddAction(AMH_Trigger[106],function AMH_Timer_A06)
set AMH_Trigger[107]=CreateTrigger()
call TriggerRegisterTimerExpireEvent(AMH_Trigger[107],AMH_Timer[7])
call TriggerAddAction(AMH_Trigger[107],function AMH_Timer_A07)
set AMH_Trigger[108]=CreateTrigger()
call TriggerRegisterTimerExpireEvent(AMH_Trigger[108],AMH_Timer[8])
call TriggerAddAction(AMH_Trigger[108],function AMH_Timer_A08)
set AMH_Trigger[109]=CreateTrigger()
call TriggerRegisterTimerExpireEvent(AMH_Trigger[109],AMH_Timer[9])
call TriggerAddAction(AMH_Trigger[109],function AMH_Timer_A09)
set AMH_Trigger[110]=CreateTrigger()
call TriggerRegisterTimerExpireEvent(AMH_Trigger[110],AMH_Timer[10])
call TriggerAddAction(AMH_Trigger[110],function AMH_Timer_A10)
set AMH_Trigger[111]=CreateTrigger()
call TriggerRegisterTimerExpireEvent(AMH_Trigger[111],AMH_Timer[11])
call TriggerAddAction(AMH_Trigger[111],function AMH_Timer_A11)
endfunction

สำหรับผู้ที่อ่านรู้เรื่องหรือผู้ที่มีความสามารถในการใช้ vJass ช่วยวิจารหน่อยนะครับ = =
เพื่อที่จะได้ปรับปรุงในการเขียนต่อไป

ถึงคนเขียนหน้าใหม่ถึงคุณจะทำ GUI ไม่เป็นแบบผม
แต่ vJass คือสวรรค์ในการออกแบบความคิดสร้างสรรค์ของคุณได้เช่นกัน = =
ไม่ลองเขียนสดๆ บ้างละ สนุกกว่า GUI ที่มีฟังชั่นสำเร็จรูปเยอะเลย *-*

nasnet
25-10-2011, 02:15 PM
cheat ใช้ไม่ได้ชัวร์ เพราะเวลา การส่ง packet แบบ p2p ถ้าไม่เหมือนกัน firewall จะทำงานทันที = = คือ ระบบเกมจะตัดทิ้งไปให้ firewall เช็ค ทำให้หลุดจาก p2p ไปเลยโดยสมบูรณ์

ส่วน anti hackmap นั้นเป็นไปได้ยาก เนื่องจาก เป็นความอ่อนแอ ของ client ที่ ระบบ native เข้าไปไม่ถึง ส่วนนั้น ทำให้ ระบบตัดออกมาจาก ตัวไม่ได้ทำให้ ส่งค่าไปให้ firewall เช็คไม่ได้

เหมือนกับราวว่า received มาอย่างเดียว แต่ไม่ได้ send packet ตรง map ออกไป แต่ระบบ send ไปที่การกระทำของ client ทำให้เกิดผล ไปเตือนแต่ละ client ที่ map แต่ไม่ได้

send โดยตรง แต่เป็นทางอ้อม เลยทำให้จับได้ยาก แต่ถ้าพูดถึง ข้างบน ก็จะช่วยได้ !! แค่บางส่วนเท่านั้น เพราะ ความอ่อน แอ ของ โครงสร้าง ไม่ได้มี hackmap แค่ packet รั่วแบบ มักง่ายๆ ที่สามารถ ใช้ jass จับได้

จะมีลึกกว่านั้น ที่ native ธรรมดา ไม่สามารถ รับรู้ได้ นอกจาก จะเอาตัวเกม ไปโมดิฟาย = = file function dll ข้างใน

buffaloboyz
26-10-2011, 09:24 AM
อยากถามในส่วน ที่แก้ไม่ให้กด Cheat ได้อ่ะ? พอจะมีแนวทางไหม?

nasnet
26-10-2011, 09:49 AM
ถ้า Single น่าจะดัก ถ้าเป็น RPG ดักได้หลายแนว ไม่ให้เล่นคนเดียว เล่นคนเดียว save/load ไม่ได้ แนวๆ นี้ มันก็กันได้แค่ส่วนหนึ่ง แต่ถ้า p2p มากกว่า 1 ละก็ เป็นไปไม่ได้ที่ Cheat จะมีผล
จะหลุดทันที ถ้า กระทำ Cheat พวก gold ต้นไม้ หรืออื่นๆ ที่ ข้อมูลมัน เอามาแชรกันนะ

buffaloboyz
26-10-2011, 12:41 PM
ที่ถามเพราะถ้าทำได้ เราจะได้เปิดโอกาสให้คนเล่น RPG เล่นคนเดียวได้ ไม่งั้นหากใช้วิธ บังคับว่าเล่นคนเดียวไม่ได้ ต้องมาคอยครีเล่นหลายคนตลอด เห็นใจคนอยากเล่นคนเดียว
เพราะ บางครั้ง ครี ไปคนก็มาเล่นกันน้อย อื้ม อยากรู้ว่าจะสามารถดักได้ไหม? ไม่ให้พิม พวก Greedisgood นะ

[M]iS-[T]-raL
26-10-2011, 05:04 PM
^
ใช้พวก event รับคำพูดครับ แต่ต้องมานั่งทำหลายๆคน

เช่น

call TriggerRegisterPlayerChatEvent(trigger,Player(0),"greedisgood",true)
call TriggerRegisterPlayerChatEvent(trigger,Player(1),"greedisgood",true)
call TriggerRegisterPlayerChatEvent(trigger,Player(2),"greedisgood",true)
.
.
.
call TriggerRegisterPlayerChatEvent(trigger,Player(11),"greedisgood",true)

call TriggerRegisterPlayerChatEvent(trigger,Player(0),"greedisgood",true)
call TriggerRegisterPlayerChatEvent(trigger,Player(1),"whosyourdaddy",true)
call TriggerRegisterPlayerChatEvent(trigger,Player(2),"whosyourdaddy",true)
.
.
.
call TriggerRegisterPlayerChatEvent(trigger,Player(11),"whosyourdaddy",true)

ซึ่งคำสั่งพวกนี้จริงอยู่ที่ใช้ loop ช่วยเขียนได้ แต่ปัญหาการใช้ loop คือการ leak ของ map ครับ

buffaloboyz
01-11-2011, 11:39 AM
มันได้หรือ? ไม่เคยลองสมัยก่อน แว่วๆ ว่า พอพิม whosyourdaddy แล้วมันจะกลายเป้น cheatenabled ไปเลยดักไม่ได้นิ? เอหรือว่ากับ Jass ได้แหะ ต้องไปลองๆ

TCG-ZeRo_CooL
08-09-2017, 04:48 PM
Map Anti เราว่าทำมาอะก็ดีแล้วนะแต่พูดจากใจเลยว่า ไม่มีอะไรที่ CheatEngine ทำไม่ได้ต่อให้เช็คด้วยการคลิก Unit ก็ตามเพราะ CE นั้นสามารถหาโมเดลของตัวละครขึ้นมาใหม่ได้ โดยใช้หลักการใช้ d3d แล้วเลือกสีฝั่งตรงข้ามพร้อมใช้ txt บอกชื่อตัวละครว่าตัวไหนกำลังทำอะไรอยู่ในป่า เวลา WW หายตัวแล้วจะเป็นสีอะไร VIP ที่เวลาจบแล้วได้ EXP แค่ 500 เรายังสามารถดักแพ็กเก็ตด้วย CE ส่งเข้าเซิฟเวอร์ เป็น EXP 50,000 ยังได้ DOTA เป็นเกมส์ประมวลผลด้วยเครื่องของพวกเราเองยังไงสะคนที่เก่ง CE เขาตั้งใจจริงๆเขาทำได้หมดแหละแต่ DOTA ไม่ใช่เกมส์ที่มีรายได้ต่อพวกที่เขาจะเขียนโปรแกรมขึ้นมาอีกแล้วเขาเลยไม่ค่อยใส่ใจจะทำกันสักเท่าไหร่

sloperun3az
25-05-2019, 02:27 PM
I have read your article, it is very informative and helpful for me. I admire the valuable information you offer in your articles. Thanks for posting it...
geometry dash (http://geometrydashfree.com/)