+ Reply to Thread
Results 1 to 8 of 8
  1. #1
    Junior Member
    Join Date
    Sep 2011
    Posts
    29

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

    ก่อนอื่นขออธิบายที่มาก่อนที่จะเขียนก่อนละกัน = =

    หลายๆ คนบอกว่าจะเขียนได้ยังไง ในเมื่อ 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 ไม่มีผู้เล่น

    Code:
    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 ที่มีฟังชั่นสำเร็จรูปเยอะเลย *-*
    Last edited by [M]iS-[T]-raL; 25-10-2011 at 01:16 PM.

  2. #2
    Senior Member
    Join Date
    Jul 2011
    Posts
    83
    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 ข้างใน

  3. #3
    Senior Member
    Join Date
    Jul 2011
    Posts
    186
    อยากถามในส่วน ที่แก้ไม่ให้กด Cheat ได้อ่ะ? พอจะมีแนวทางไหม?

  4. #4
    Senior Member
    Join Date
    Jul 2011
    Posts
    83
    ถ้า Single น่าจะดัก ถ้าเป็น RPG ดักได้หลายแนว ไม่ให้เล่นคนเดียว เล่นคนเดียว save/load ไม่ได้ แนวๆ นี้ มันก็กันได้แค่ส่วนหนึ่ง แต่ถ้า p2p มากกว่า 1 ละก็ เป็นไปไม่ได้ที่ Cheat จะมีผล
    จะหลุดทันที ถ้า กระทำ Cheat พวก gold ต้นไม้ หรืออื่นๆ ที่ ข้อมูลมัน เอามาแชรกันนะ

  5. #5
    Senior Member
    Join Date
    Jul 2011
    Posts
    186
    ที่ถามเพราะถ้าทำได้ เราจะได้เปิดโอกาสให้คนเล่น RPG เล่นคนเดียวได้ ไม่งั้นหากใช้วิธ บังคับว่าเล่นคนเดียวไม่ได้ ต้องมาคอยครีเล่นหลายคนตลอด เห็นใจคนอยากเล่นคนเดียว
    เพราะ บางครั้ง ครี ไปคนก็มาเล่นกันน้อย อื้ม อยากรู้ว่าจะสามารถดักได้ไหม? ไม่ให้พิม พวก Greedisgood นะ

  6. #6
    Junior Member
    Join Date
    Sep 2011
    Posts
    29
    ^
    ใช้พวก 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 ครับ

  7. #7
    Senior Member
    Join Date
    Jul 2011
    Posts
    186
    มันได้หรือ? ไม่เคยลองสมัยก่อน แว่วๆ ว่า พอพิม whosyourdaddy แล้วมันจะกลายเป้น cheatenabled ไปเลยดักไม่ได้นิ? เอหรือว่ากับ Jass ได้แหะ ต้องไปลองๆ

  8. #8

    Join Date
    Jul 2011
    Posts
    2
    Map Anti เราว่าทำมาอะก็ดีแล้วนะแต่พูดจากใจเลยว่า ไม่มีอะไรที่ CheatEngine ทำไม่ได้ต่อให้เช็คด้วยการคลิก Unit ก็ตามเพราะ CE นั้นสามารถหาโมเดลของตัวละครขึ้นมาใหม่ได้ โดยใช้หลักการใช้ d3d แล้วเลือกสีฝั่งตรงข้ามพร้อมใช้ txt บอกชื่อตัวละครว่าตัวไหนกำลังทำอะไรอยู่ในป่า เวลา WW หายตัวแล้วจะเป็นสีอะไร VIP ที่เวลาจบแล้วได้ EXP แค่ 500 เรายังสามารถดักแพ็กเก็ตด้วย CE ส่งเข้าเซิฟเวอร์ เป็น EXP 50,000 ยังได้ DOTA เป็นเกมส์ประมวลผลด้วยเครื่องของพวกเราเองยังไงสะคนที่เก่ง CE เขาตั้งใจจริงๆเขาทำได้หมดแหละแต่ DOTA ไม่ใช่เกมส์ที่มีรายได้ต่อพวกที่เขาจะเขียนโปรแกรมขึ้นมาอีกแล้วเขาเลยไม่ค่อยใส่ใจจะทำกันสักเท่าไหร่

Facebook Comments


Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •