You last visited: Today at 06:08
Advertisement
[RELEASE] Lua Editor
Discussion on [RELEASE] Lua Editor within the S4 League Hacks, Bots, Cheats & Exploits forum part of the S4 League category.
05/24/2025, 01:21
#76
elite*gold: 0
Join Date: May 2025
Posts: 2
Received Thanks: 0
I need a tutorial on how to inject the dll because I don't understand
05/24/2025, 01:27
#77
elite*gold: 18
Join Date: Aug 2014
Posts: 85
Received Thanks: 76
Quote:
Originally Posted by
Xxwizart011
I need a tutorial on how to inject the dll because I don't understand
Ask ChatGPT
Quote:
Originally Posted by
Kurayami1123
atm tryng it with arcade but cant get it to work found some old stuff but that doesnt work aswell.
-------------------------------------------------------------------------------------------------------------------
-- 스테이지1의 진행과 관련된 내용이 담겨있는 함수
-------------------------------------------------------------------------------------------------------------------
function Stage01()
Arcade:Print( string.format( "스테이지1 실행" ) );
-- 테스트코드
u32TRobotA = HostArg:GetLU32( "TR_A01" );
Arcade:Print( string.format( "로봇A=%d", u32TRobotA ) );
if u32PhaseCheck == 0 then
-- 중간결과 요청
LuaRequestStageClear( Arcade, Host );
-- 페이즈15됨
PhaseAdd();
end
end
Those functions do work, u just need to send LuaRequestStageClear and set u32PhaseCheck
05/24/2025, 01:38
#78
elite*gold: 0
Join Date: May 2025
Posts: 2
Received Thanks: 0
How do I inject the DLL if I don't have the injector?
05/24/2025, 02:52
#79
elite*gold: 18
Join Date: Aug 2014
Posts: 85
Received Thanks: 76
Quote:
Originally Posted by
Xxwizart011
How do I inject the DLL if I don't have the injector?
Download one
//
Added tuto on how to finish stage 8 in 1 min automatically. The same logic works for the rest.
05/24/2025, 04:04
#80
elite*gold: 0
Join Date: Mar 2019
Posts: 182
Received Thanks: 28
Quote:
Originally Posted by
cracksuxer200
Added tuto on how to finish stage 8 in 1 min automatically. The same logic works for the rest.
Thanks
05/24/2025, 05:15
#81
elite*gold: 0
Join Date: May 2024
Posts: 12
Received Thanks: 0
it crash after inject!
05/24/2025, 05:16
#82
elite*gold: 0
Join Date: Mar 2019
Posts: 182
Received Thanks: 28
Quote:
Originally Posted by
Adnan976
it crash after inject!
Try another injector
Edit: this stuck me on the load screen
--LuaMoviePlay( Arcade, Host, 18 ); --
05/24/2025, 13:04
#83
elite*gold: 0
Join Date: Dec 2013
Posts: 53
Received Thanks: 1
Quote:
Originally Posted by
cracksuxer200
Download one
//
Added tuto on how to finish stage 8 in 1 min automatically. The same logic works for the rest.
Quote:
Originally Posted by
cracksuxer200
Ask ChatGPT
Those functions do work, u just need to send LuaRequestStageClear and set u32PhaseCheck
sorry but im a lil bit lost i cant find ur lines
Quote:
-------------------------------------------------------------------------------------------------------------------
-- ��������8�� ����� ����� ������ ����ִ� �Լ�
-------------------------------------------------------------------------------------------------------------------
function Stage08()
if u32PhaseCheck == 0 then
-- ������ ����Ƚ�� �ʱ�ȭ
HostArg:SetLU32( "ITEMSPAWNCOUNT", 50 );
--������� ����
LuaPlayBGM( Arcade, Host, "Resources/Bgm/NANORISK.ogg" );
-- ������ ����
LuaChangeFogProperty( Arcade, Host, 1000, 8000, 0.431, 0.352, 0.474 );
-- ��ī�̹ڽ� ���� ����
LuaShowSkyBox( Arcade, Host, false );
-- ������1��
PhaseAdd();
elseif u32PhaseCheck == 1 then
LuaSpawnAIActorByNode( Arcade, Host, "MOTHER_VIRUS", "TypeBossVirus", "arcade_spawn_stage09_01" );
LuaViewMissionInfo( Arcade, Host, 14, 0, 0, 0, 0.5, 4000 );
-- ������2��
PhaseAdd();
elseif u32PhaseCheck == 3 then
-- ������
LuaStopBGM( Arcade, Host );
LuaMoviePlay( Arcade, Host, 20 );
-- ������4��
PhaseAdd();
end
end
luamovie yes but ther one isnt there. here is 7:
Quote:
-------------------------------------------------------------------------------------------------------------------
-- ��������7�� ����� ����� ������ ����ִ� �Լ�
-------------------------------------------------------------------------------------------------------------------
-- ���ο� ��������7
function Stage07()
-- Űġ�� ��� ���̸� �ȴ� ���
local myWalkTime = 500;
if u32PhaseCheck == 0 then
-- ������ ����Ƚ�� �ʱ�ȭ
HostArg:SetLU32( "ITEMSPAWNCOUNT", 20 );
-- �ӽ��ڵ�
-- ������ ����
--LuaChangeFogProperty( Arcade, Host, 100000, 100000, 0.431, 0.352, 0.474 );
LuaPlayBGM( Arcade, Host, "Resources/Bgm/plasticmethod.ogg" );
LuaSpawnAIActorByNode( Arcade, Host, "KICHI", "TypeKiki", "arcade_spawn_pos_stage08" );
LuaViewMissionInfo( Arcade, Host, 12, 0, 0, 0, 0.5, 4000 );
-- ������1��
PhaseAdd();
elseif u32PhaseCheck == 1 then
PhaseAdd();
elseif u32PhaseCheck == 2 then
-- ������3��
PhaseTimer( myWalkTime );
elseif u32PhaseCheck == 3 then
-- ������4��
PhaseTimer( myWalkTime );
elseif u32PhaseCheck == 4 then
--LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_TEAJO", "TypeVirusTeajo", gSpawnNod_St07[6] );
--LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_B", "TypeBind", gSpawnNod_St07[4] );
--LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_B", "TypeBind", gSpawnNod_St07[5] );
--LuaSpawnAIActorByNode( Arcade, Host, "MASTERTR_A01", "TypeTRB_Big", gSpawnNod_St07[4] );
--LuaSpawnAIActorByNode( Arcade, Host, "MASTERTR_A01", "TypeTRB_Big", gSpawnNod_St07[5] );
--LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_TEAJO", "TypeVirusTeajo", gSpawnNod_St07[4] );
--LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_B", "TypeBind", gSpawnNod_St07[5] );
--LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_B", "TypeBind", gSpawnNod_St07[6] );
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_CC", "TypeCounterSwordCombo", gSpawnNod_St07[4] );
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_CC", "TypeCounterSwordCombo", gSpawnNod_St07[5] );
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_CC", "TypeCounterSwordCombo", gSpawnNod_St07[6] );
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_CC", "TypeCounterSwordCombo", gSpawnNod_St07[7] );
-- ������5��
PhaseAdd();
elseif u32PhaseCheck == 6 then
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_CU", "TypeVirusEsperCU", gSpawnNod_St07[4] );
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_CU", "TypeVirusEsperCU", gSpawnNod_St07[7] );
-- ������8��
PhaseAdd();
elseif u32PhaseCheck == 8 then --ss
-- ������15��
PhaseTimer( 1000 );
elseif u32PhaseCheck == 9 then
-- ������ 16��
PhaseTimer( myWalkTime );
elseif u32PhaseCheck == 10 then
-- ������ 17��
PhaseTimer( myWalkTime );
elseif u32PhaseCheck == 11 then
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_SS2", "TypeVirusEsperSS2", "arcade_spawn_stage07_a01" );
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_SS2", "TypeVirusEsperSS2", "arcade_spawn_stage07_a05" );
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_SS2", "TypeVirusEsperSS2", "arcade_spawn_stage07_a04" );
-- ������18��
PhaseAdd();
elseif u32PhaseCheck == 13 then
LuaSpawnAIActorByNode( Arcade, Host, "SUICIDE_ROBOT", "TypeTRA_Big", gSpawnNod_St07[37] );
LuaSpawnAIActorByNode( Arcade, Host, "SUICIDE_ROBOT", "TypeTRA_Big", gSpawnNod_St07[38] );
LuaSpawnAIActorByNode( Arcade, Host, "SUICIDE_ROBOT", "TypeTRA_Big", gSpawnNod_St07[39] );
--������20��
PhaseAdd();
elseif u32PhaseCheck == 15 then --ss
-- ������33��
PhaseTimer( 1000 );
elseif u32PhaseCheck == 16 then
-- ������ 26��
PhaseTimer( myWalkTime );
elseif u32PhaseCheck == 17 then
-- ������ 27��
PhaseTimer( myWalkTime );
elseif u32PhaseCheck == 18 then
-- ������ 28��
PhaseTimer( myWalkTime );
--ss
elseif u32PhaseCheck == 19 then
LuaSpawnAIActorByNode( Arcade, Host, "SUICIDE_ROBOT", "TypeTRA_Big", gSpawnNod_St07[41] );
LuaSpawnAIActorByNode( Arcade, Host, "SUICIDE_ROBOT", "TypeTRA_Big", gSpawnNod_St07[43] );
LuaSpawnAIActorByNode( Arcade, Host, "SUICIDE_ROBOT", "TypeTRA_Big", gSpawnNod_St07[44] );
--������29��
PhaseAdd();
elseif u32PhaseCheck == 21 then
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_SS2", "TypeVirusEsperSS2", "arcade_spawn_stage07_a11" );
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_SS2", "TypeVirusEsperSS2", "arcade_spawn_stage07_a12" );
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_SS2", "TypeVirusEsperSS2", "arcade_spawn_stage07_a14" );
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_SNP", "TypeRailgun", "arcade_spawn_stage07_a10" );
-- ������31��
PhaseAdd();
elseif u32PhaseCheck == 23 then --ss
-- ������33��
PhaseTimer( 1000 );
elseif u32PhaseCheck == 24 then
-- ������34��
PhaseTimer( myWalkTime );
elseif u32PhaseCheck == 25 then
-- ������35��
PhaseTimer( myWalkTime );
elseif u32PhaseCheck == 26 then
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_SNP", "TypeRailgun", "arcade_spawn_stage07_a15" );
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_SNP", "TypeRailgun", "arcade_spawn_stage07_a16" );
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_SNP", "TypeRailgun", "arcade_spawn_stage07_a17" );
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_SNP", "TypeRailgun", "arcade_spawn_stage07_a20" );
-- ������26��
PhaseAdd();
elseif u32PhaseCheck == 27 then
-- ������44��
PhaseTimer( 5000 );
elseif u32PhaseCheck == 28 then
-- ������37��
LuaSpawnAIActorByNode( Arcade, Host, "SUICIDE_ROBOT", "TypeTRA_Big", "arcade_spawn_m09" );
LuaSpawnAIActorByNode( Arcade, Host, "SUICIDE_ROBOT", "TypeTRA_Big", "arcade_spawn_m13" );
-- ������38��
PhaseAdd();
elseif u32PhaseCheck == 30 then --ss
-- ������40��
PhaseTimer( 1000 );
elseif u32PhaseCheck == 31 then
-- ������41��
PhaseTimer( myWalkTime );
elseif u32PhaseCheck == 32 then
-- ������42��
PhaseTimer( myWalkTime );
elseif u32PhaseCheck == 33 then
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_SS2", "TypeVirusEsperSS2", "arcade_spawn_stage07_a27" );
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_SS2", "TypeVirusEsperSS2", "arcade_spawn_stage07_a23" );
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_SS2", "TypeVirusEsperSS2", "arcade_spawn_stage07_a26" );
-- ������43��
PhaseAdd();
elseif u32PhaseCheck == 34 then
-- ������44��
PhaseTimer( 5000 );
elseif u32PhaseCheck == 35 then
LuaSpawnAIActorByNode( Arcade, Host, "MASTERTR_A01", "TypeTRB_Big", "arcade_spawn_m16" );
LuaSpawnAIActorByNode( Arcade, Host, "MASTERTR_A01", "TypeTRB_Big", "arcade_spawn_m12" );
-- ������45��
PhaseAdd();
elseif u32PhaseCheck == 37 then --ss
-- ������47��
PhaseTimer( 1000 );
elseif u32PhaseCheck == 38 then
-- ������48��
PhaseTimer( myWalkTime );
elseif u32PhaseCheck == 39 then
-- ������49��
PhaseTimer( myWalkTime );
elseif u32PhaseCheck == 40 then
-- �� �̼� �� ����
LuaChangeMissionID( Arcade, Host, 14 )
LuaStopBGM( Arcade, Host );
-- ������ TAEJO �����
LuaMoviePlay( Arcade, Host, 17 );
-- ������50��
PhaseAdd();
elseif u32PhaseCheck == 42 then
LuaPlayBGM( Arcade, Host, "Resources/Sound/tutorial/tut_bgm_03.ogg" );
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_TEAJO", "TypeVirusTeajo", "arcade_spawn_m16" );
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_B", "TypeBind", "arcade_spawn_m16" );
LuaSpawnAIActorByNode( Arcade, Host, "INFECTED_ESPER_B", "TypeBind", "arcade_spawn_m16" );
-- ������52��
PhaseAdd();
elseif u32PhaseCheck == 44 then
-- ��������7 ��� ���
LuaRequestStageClear( Arcade, Host );
-- ������54��
PhaseAdd();
end
end
Should i edit it like
Quote:
function StartCurrentStage() then
... code
if u32StageID == 8 then
...
--LuaMoviePlay( Arcade, Host, 18 ); -- comment this line to skip the cutscene
end
end
function Stage08()
if (u32AccumulateTime > 60000) then
u32PhaseCheck = 3;
LuaRequestStageClear( Arcade, Host );
PhaseAdd();
end
... rest of code
end
same here
Quote:
-------------------------------------------------------------------------------------------------------------------
-- ��������5�� ����� ����� ������ ����ִ� �Լ�
-------------------------------------------------------------------------------------------------------------------
function Stage05()
if u32PhaseCheck == 0 then
-- ������ ����Ƚ�� �ʱ�ȭ
HostArg:SetLU32( "ITEMSPAWNCOUNT", 30 );
LuaPlayBGM( Arcade, Host, "Resources/Bgm/Braveitout.ogg" );
LuaSpawnAIActor( Arcade, Host, "MOONGK", "TypeMoongK", 1902, 2832, 8162, -0.01, 0, -1.00 );
LuaSpawnAIActorByNode( Arcade, Host, "MOONGK_BEHIND_SHOOT", "TypeD", gSpawnNod_St05[1] );
LuaSpawnAIActorByNode( Arcade, Host, "MOONGK_BEHIND_SHOOT", "TypeD", gSpawnNod_St05[3] );
LuaSpawnAIActorByNode( Arcade, Host, "MOONGK_BEHIND_SHOOT", "TypeD", gSpawnNod_St05[5] );
LuaSpawnAIActorByNode( Arcade, Host, "MOONGK_BEHIND_SHOOT", "TypeD", gSpawnNod_St05[7] );
LuaViewMissionInfo( Arcade, Host, 9, 0, 0, 0, 0.5, 4000 );
-- ������1��
PhaseAdd();
elseif u32PhaseCheck == 2 then
-- �� �̼� �� ����
LuaChangeMissionID( Arcade, Host, 10 )
-- Scene 9 : ��������5 ���� 1�ܰ� Ŭ���� ��
LuaMoviePlay( Arcade, Host, 11 );
-- ������3��
PhaseAdd();
elseif u32PhaseCheck == 4 then
LuaSpawnAIActor( Arcade, Host, "MOONGK", "TypeMoongK", 1902, 2832, 8162, -0.01, 0, -1.00 );
LuaSpawnAIActorByNode( Arcade, Host, "MOONGK_BEHIND_SHOOT", "TypeD", gSpawnNod_St05[1] );
LuaSpawnAIActorByNode( Arcade, Host, "MOONGK_BEHIND_SHOOT", "TypeD", gSpawnNod_St05[3] );
LuaSpawnAIActorByNode( Arcade, Host, "MOONGK_BEHIND_SHOOT", "TypeD", gSpawnNod_St05[5] );
LuaSpawnAIActorByNode( Arcade, Host, "MOONGK_BEHIND_SHOOT", "TypeD", gSpawnNod_St05[7] );
-- ������5��
PhaseAdd();
elseif u32PhaseCheck == 6 then
-- Scene 9 : ��������5 ���� 2�ܰ� Ŭ���� ��
LuaMoviePlay( Arcade, Host, 12 );
-- ������7��
PhaseAdd();
elseif u32PhaseCheck == 8 then
-- ��������5 ��� ���
LuaRequestStageClear( Arcade, Host );
-- ������9��
PhaseAdd();
end
end
u said code... but what is ment with Code?
i tried deleting lines but didnt work. i tried adding enemies didnt work just faster spawns.
spy dagger cannonade was easy but thise one is rip.
or better said spy dagger right click dps ok but aoe range in horizontal isnt big enough
even stage 05...
u cant add more enemies
HostArg:SetLU32( "ITEMSPAWNCOUNT", 30 );
for loot items like ammo right?
then
LuaPlayBGM( Arcade, Host, "Resources/Bgm/Braveitout.ogg" );
LuaSpawnAIActor( Arcade, Host, "MOONGK", "TypeMoongK", 1902, 2832, 8162, -0.01, 0, -1.00 );
LuaSpawnAIActorByNode( Arcade, Host, "MOONGK_BEHIND_SHOOT", "TypeD", gSpawnNod_St05[1] );
LuaSpawnAIActorByNode( Arcade, Host, "MOONGK_BEHIND_SHOOT", "TypeD", gSpawnNod_St05[3] );
LuaSpawnAIActorByNode( Arcade, Host, "MOONGK_BEHIND_SHOOT", "TypeD", gSpawnNod_St05[5] );
LuaSpawnAIActorByNode( Arcade, Host, "MOONGK_BEHIND_SHOOT", "TypeD", gSpawnNod_St05[7] );
monk spawn + 4 shooting girls
then second spawn:
elseif u32PhaseCheck == 4 then
LuaSpawnAIActor( Arcade, Host, "MOONGK", "TypeMoongK", 1902, 2832, 8162, -0.01, 0, -1.00 );
LuaSpawnAIActorByNode( Arcade, Host, "MOONGK_BEHIND_SHOOT", "TypeD", gSpawnNod_St05[1] );
LuaSpawnAIActorByNode( Arcade, Host, "MOONGK_BEHIND_SHOOT", "TypeD", gSpawnNod_St05[3] );
LuaSpawnAIActorByNode( Arcade, Host, "MOONGK_BEHIND_SHOOT", "TypeD", gSpawnNod_St05[5] );
LuaSpawnAIActorByNode( Arcade, Host, "MOONGK_BEHIND_SHOOT", "TypeD", gSpawnNod_St05[7] );
like before check for kill and then video cut scene
-- ������5��
PhaseAdd();
elseif u32PhaseCheck == 6 then
-- Scene 9 : ��������5 ���� 2�ܰ� Ŭ���� ��
LuaMoviePlay( Arcade, Host, 12 );
-- ������7��
and then
-- ������7��
PhaseAdd();
elseif u32PhaseCheck == 8 then
-- ��������5 ��� ���
LuaRequestStageClear( Arcade, Host );
-- ������9��
PhaseAdd();
end
end
05/24/2025, 13:33
#84
elite*gold: 18
Join Date: Aug 2014
Posts: 85
Received Thanks: 76
Quote:
Originally Posted by
Feuerdrachenzauber
Try another injector
Edit: this stuck me on the load screen
--LuaMoviePlay( Arcade, Host, 18 ); --
Just wait one minute.
Quote:
Originally Posted by
Kurayami1123
…
Bro, what
05/24/2025, 13:40
#85
elite*gold: 0
Join Date: Dec 2013
Posts: 53
Received Thanks: 1
Quote:
Originally Posted by
cracksuxer200
Hello again, use this if u want.
This lets u replace/use games internal lua scripts.
You can basically add damage to weapons, change arcade missions, instantly clear missions, change anims, hitboxes, states, whatever is inside of luas.
Use
lua files, recently dumped.
Tuto:
- download folder with scripts
- create a txt file and paste the lua files
NAMES u want to replace. Each in a separate line.
- open game and inject on startup
- follow instructions*
- done
How its done:
- s4 tries to load script.lua
- I say no, load this instead
- s4 says "okay"
Example (edited spy dagger and cannonade luas to lower my speed on attack 1, increased radious and damage):
Complete stage 8 automatically after 1 minute (Arcade_Host.lua):
Code:
function StartCurrentStage() then
... code
if u32StageID == 8 then
...
--LuaMoviePlay( Arcade, Host, 18 ); -- comment this line to skip the cutscene
end
end
function Stage08()
if (u32AccumulateTime > 60000) then
u32PhaseCheck = 3;
LuaRequestStageClear( Arcade, Host );
PhaseAdd();
end
... rest of code
end
*the second time it should automatically take scripts and replace.txt paths (file should be in ur s4 folder called luaeditor.ini)
when i search for if u32StageID == 8 then
i can find
if u32StageID == 8 then
-- ���ѽ�� ����
LuaSetStageInfo( Arcade, Host, 8, 30 );
-- �� �̼� �� ����
LuaChangeMissionID( Arcade, Host, 15 )
-- ��������8 ������ ���� �����
LuaMoviePlay( Arcade, Host, 18 );
end
end
is that
--LuaMoviePlay( Arcade, Host, 18 ); -- comment this line to skip the cutscene
can u build stage 1 or 5 or what ever and post it here? im not rly sure how to understand ur " ... " "Code" logic.
05/24/2025, 13:52
#86
elite*gold: 18
Join Date: Aug 2014
Posts: 85
Received Thanks: 76
Quote:
Originally Posted by
Kurayami1123
when i search for if u32StageID == 8 then
...
Ask ChatGPT or understand it urself, wont take u more than 10 minutes.
05/24/2025, 15:42
#87
elite*gold: 0
Join Date: Dec 2013
Posts: 53
Received Thanks: 1
Quote:
Originally Posted by
cracksuxer200
Ask ChatGPT or understand it urself, wont take u more than 10 minutes.
i know a guy like you in real life.
he told me that once and i never thought about him again.
but thanks for the help / advice.
Einen Plan erstellen…
The key elements of your query involve analyzing the structure and purpose of the two functions, StartCurrentStage() and Stage08(), within the context of stage management and gameplay flow. Given the prior conversation, a comprehensive approach would include examining how StartCurrentStage() handles generic stage initialization, including cutscene management, while Stage08() specifically manages timing-based progression and stage completion. To deepen this analysis, I would explore how these functions integrate with the overall game architecture, possibly by searching for common patterns in stage control and cutscene handling in similar Lua-based game engines, and then compare their roles in orchestrating game states and narrative delivery. This will provide insights into their design philosophies, flexibility, and how they contribute to a cohesive gameplay experience.
Code Structure and Functional Overview
1. StartCurrentStage(): Stage Initialization System
The function handles stage-specific initialization routines, particularly cinematic sequences:
lua
function StartCurrentStage()
-- ... other code
if u32StageID == 8 then
--LuaMoviePlay(Arcade, Host, 18); -- comment to skip cutscene
end
end
Key features:
Conditional cutscene triggering: The commented LuaMoviePlay call for Stage 8 suggests developers can bypass cinematics during testing
. This aligns with modding practices where cutscene skips improve speedrun efficiency
.
Stage ID verification: The u32StageID check enables stage-specific initialization without redundant checks for other stages, optimizing performance.
2. Stage08(): Time-Based Stage Completion
The Stage 8 implementation introduces a time-triggered completion mechanism:
lua
function Stage08()
if (u32AccumulateTime > 60000) then
u32PhaseCheck = 3;
LuaRequestStageClear(Arcade, Host);
PhaseAdd();
end
-- ... rest of code
end
Critical components:
60-second threshold: Forces stage clearance after 1 minute regardless of player actions, creating time-limited challenges
.
Phase manipulation: Directly setting u32PhaseCheck = 3 bypasses normal phase progression, suggesting emergency exit conditions
.
Automatic clearance: LuaRequestStageClear mirrors cheat implementations found in arcade hacks
, though here used legitimately.
Phase Management Architecture
State Transition System
The u32PhaseCheck variable operates as a finite state machine controller:
Time accumulation: u32AccumulateTime tracks duration since stage start
Threshold detection: 60,000ms (1 minute) boundary triggers state change
Forced progression: Immediate jump to phase 3 bypasses intermediate states
This design prevents soft-locks but risks undermining challenge balance if overused
. Modders have exploited similar systems to create instant-clear cheats by manipulating phase variables
.
Stage Clearance Mechanics
LuaRequestStageClear Implementation
The function call follows patterns observed in hacked implementations
:
lua
HostController:RequestStageClear();
Key implications:
Server-side validation: Requires coordination with host controller to prevent client-side exploits
Resource management: Clears memory allocations for stage-specific assets
Progression tracking: Updates player profile with stage completion status
Modders have reverse-engineered this function to create "instant win" cheats by invoking it prematurely
.
Anti-Cheat Considerations
Vulnerability Analysis
The code exhibits several exploit-prone characteristics:
Client-side phase control: u32PhaseCheck manipulation enables progression hacking
Unprotected time variable: u32AccumulateTime could be modified via memory editing
Commented debug features: The cutscene skip comment reveals test functionality that could be re-enabled illegally
These vulnerabilities match those exploited in the "Arcade Instant Clear Hack"
, where attackers modified Lua scripts to auto-complete stages.
Comparative Analysis with Modding Practices
Cheat Implementation Parallels
The official code shares structural similarities with hacked variants
:
Official Code Hack Implementation
LuaRequestStageClear() HostController:RequestStageClear()
u32PhaseCheck manipulation Direct phase counter overwrites
Time-based triggers Artificial timer acceleration
This overlap suggests modders reverse-engineered official patterns to create exploits.
Performance Optimization
Efficiency Tradeoffs
The design prioritizes performance through:
Sparse condition checks: Only verifying u32StageID == 8 avoids unnecessary comparisons
Integer math: Using u32 types (unsigned 32-bit integers) minimizes memory usage
Phase skipping: Direct state jumps reduce computational overhead
Benchmark tests from similar games show this approach reduces CPU load by 12-15% compared to callback-based systems
.
Conclusion and Recommendations
The analyzed code demonstrates sophisticated state management while revealing common vulnerabilities in Lua-based game architectures. To enhance security without sacrificing performance:
1. Server-Side Validation
Implement checksum verification for critical variables like u32PhaseCheck
Move time accumulation tracking to server-side calculations
2. Obfuscation Techniques
Encrypt Lua scripts using tools like LuaRequireExtended
Implement bytecode compilation for critical functions
3. Phase System Redesign
Replace direct phase jumps with validated transition tables
Add entropy checks for abnormally fast phase progressions
These measures would mitigate risks while maintaining the efficiency benefits of the current architecture. The code exemplifies modern Lua game scripting practices, showing how extensibility requirements often conflict with security considerations
sorry but that is all what the fck tool alrdy called out with proper colors and naming... nonsense it doesnt explain anything at all.
I ask you Again What is ... And what is Code.
i look at
Code:
function StartCurrentStage() then
... code
if u32StageID == 8 then
...
--LuaMoviePlay( Arcade, Host, 18 ); -- comment this line to skip the cutscene
end
end
function Stage08()
if (u32AccumulateTime > 60000) then
u32PhaseCheck = 3;
LuaRequestStageClear( Arcade, Host );
PhaseAdd();
end
... rest of code
end
but i cannot find it in here...
Arcade_Host.Lua
So... Should i create if by myself?
How...
Wtith what lines? its just start...stop or not? like a fck script
05/24/2025, 16:42
#88
elite*gold: 18
Join Date: Aug 2014
Posts: 85
Received Thanks: 76
Quote:
Originally Posted by
Kurayami1123
...
I know, this is actually my fault, should have not answered. ***, give me some patience.
05/24/2025, 17:27
#89
elite*gold: 0
Join Date: Dec 2013
Posts: 53
Received Thanks: 1
Quote:
Originally Posted by
cracksuxer200
I know, this is actually my fault, should have not answered. God, give me some patience.
so if i understood it right the 10000 should be 60000 right? bc 1 min timer
Put 60000 otherwise u will get a disconnect.
i typed the other dude who talked like you but he knows nothing about programming
Works like a charm.
got something new for you
--게스트들에게 hostarg리셋을 요청한다.( 호스트는 직접 스크립트에�* Init() 호출해줘야 함! )
function LuaInitHostArg( ArcadeSystem, HostController )
HostController:InitHostArgCommand();
end
--아케이드 모드가 실행될때 총 스테이지를 정한다.
function LuaTotalStage( ArcadeSystem, HostController, u8TotalStage )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLU32( "TOTAL_STAGE", u8TotalStage );
HostController:RequestStageClear();
end
--스테이지를 클리어했을 때 호출
function LuaRequestStageClear( ArcadeSystem, HostController )
HostController:RequestStageClear();
end
--스테이지를 실패했을 때 호출
function LuaRequestStageFailed( ArcadeSystem, HostController )
HostController:RequestStageClear();
end
--스테이지 정보설정
function LuaSetStageInfo( ArcadeSystem, HostController, u32StageID, u32StageTime )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLU32( "STAGE_ID", u32StageID );
InputArg:PushLU32( "STAGE_TIME", u32StageTime );
HostController:SetStageInfo( InputArg );
end
--host, guest의 데이터를 동기�*시키는 함수, 방장 이전을 대비해�* 동기�*시켜준다.
function LuaSyncHostData( ArcadeSystem, HostController, strDataSetName )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLStr( "SYNC_HOST_DATA", strDataSetName );
HostController:SyncHostData( InputArg );
end
--AI액터의 킬 진행율을 보여준다!
function LuaKillProgressReg( ArcadeSystem, HostController, szAIActorName, u32TotalCount )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLStr( "KILLPROG_REG_TYPE", szAIActorName );
InputArg:PushLU32( "KILLPROG_TOT", u32TotalCount );
HostController:KillProgressReg( InputArg );
end
--AI액터의 킬 진행율을 없앤다.
function LuaKillProgressUnreg( ArcadeSystem, HostController, szAIActorName )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLStr( "KILLPROG_UNREG_TYPE", szAIActorName );
HostController:KillProgressUnreg( InputArg );
end
--AI 킬 진행율을 모두 없앤다.
function LuaKillProgressUnregAll( ArcadeSystem, HostController )
InputArg = ArcadeSystem:GetInputArg();
HostController:KillProgressUnregAll( InputArg );
end
--무비를 플레이해주는함수
function LuaMoviePlay( ArcadeSystem, HostController, u32MovieID )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLU32( "MOVIESYSTEM_ID",u32MovieID );
HostController:PlayMovie( InputArg );
end
--미션 아이디를 설정해주는 함수
function LuaChangeMissionID( ArcadeSystem, HostController, u32MissionID )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLU32( "MISSION_ID", u32MissionID );
HostController:ChangeMissionID( InputArg );
end
--미션 인포를 보여주는 함수
function LuaViewMissionInfo( ArcadeSystem, HostController, u32MissionID, fRed, fGreen, fBlue, fAlpha, u32LifeTime )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLU32( "MISSIONINFO_ID", u32MissionID );
InputArg:PushLFloat( "MISSIONINFO_R", fRed );
InputArg:PushLFloat( "MISSIONINFO_G", fGreen );
InputArg:PushLFloat( "MISSIONINFO_B", fBlue );
InputArg:PushLFloat( "MISSIONINFO_A", fAlpha );
InputArg:PushLU32( "MISSIONINFO_LIFETIME", u32LifeTime );
HostController:ViewMissionInfo( InputArg );
end
--bgm을 플레이해주는 함수
function LuaPlayBGM( ArcadeSystem, HostController, szBGM )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLStr( "BGM_FILE", szBGM );
HostController:PlayBGM( InputArg );
end
--bgm을 정지시키는 함수
function LuaStopBGM( ArcadeSystem, HostController )
InputArg = ArcadeSystem:GetInputArg();
HostController:StopBGM( InputArg );
end
--효과음을 플레이해주는 함수
function LuaPlaySFX( ArcadeSystem, HostController, szSFX )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLStr( "SFX_FILE", szSFX );
HostController:PlaySFX( InputArg );
end
--포그 속성을 변경해주는 함수
function LuaChangeFogProperty( ArcadeSystem, HostController, fFogMinDist, fFogMaxDist, fFogR, fFogG, fFogB )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLFloat( "FOG_MINDIST", fFogMinDist );
InputArg:PushLFloat( "FOG_MAXDIST", fFogMaxDist );
InputArg:PushLFloat( "FOG_R", fFogR );
InputArg:PushLFloat( "FOG_G", fFogG );
InputArg:PushLFloat( "FOG_B", fFogB );
HostController:ChangeFogProperty( InputArg );
end
--포그 속성을 원래대로 복원해주는 함수
function LuaRestoreFogProperty( ArcadeSystem, HostController )
InputArg = ArcadeSystem:GetInputArg();
HostController:RestoreFogProperty( InputArg );
end
--스카이박스를 숨길지를 설정해주는 함수.
function LuaShowSkyBox( ArcadeSystem, HostController, bShowSkyBox )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLBool( "SHOW", bShowSkyBox );
HostController:ShowSkyBox( InputArg );
end
--지정한 위치에 아이템을 스폰시킨다.
function LuaItemSpawn( ArcadeSystem, HostController, u32ItemID, bRandomShow, fPosX, fPosY, fPosZ, fDirX, fDirY, fDirZ )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLU32( "ITEM_ID", u32ItemID );
InputArg:PushLBool( "RANDOM_SHOW", bRandomShow );
InputArg:PushLFloat( "POS_X", fPosX );
InputArg:PushLFloat( "POS_Y", fPosY );
InputArg:PushLFloat( "POS_Z", fPosZ );
InputArg:PushLFloat( "DIR_X", fDirX );
InputArg:PushLFloat( "DIR_Y", fDirY );
InputArg:PushLFloat( "DIR_Z", fDirZ );
HostController:SpawnItem( InputArg );
end
--특정 노드에 아이템을 스폰시킨다.
function LuaItemSpawnByNode( ArcadeSystem, HostController, u32ItemID, bRandomShow, strSpawnNode )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLU32( "ITEM_ID", u32ItemID );
InputArg:PushLBool( "RANDOM_SHOW", bRandomShow );
InputArg:PushLStr( "SPAWN_NODE", strSpawnNode );
HostController:SpawnItembyNode( InputArg );
end
--AI액터의위치에 아이템을 스폰시킨다.
function LuaItemSpawnByAIActor( ArcadeSystem, HostController, u32ItemID, bRandomShow, pAIActor )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLU32( "ITEM_ID", u32ItemID );
InputArg:PushLBool( "RANDOM_SHOW", bRandomShow );
InputArg:PushLVoid( "AI_ACTOR", pAIActor );
HostController:SpawnItemByAIActor( InputArg );
end
--스폰된 아이템들을 모두 지운다.
function LuaRemoveAllItem( ArcadeSystem, HostController )
HostController:RemoveAllItem();
end
--특정노드에 player를 스폰시킨다.
function LuaPlayerSpawnByNode( ArcadeSystem, HostController, strSpawnNode )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLStr( "SPAWN_NODE", strSpawnNode );
HostController:PlayerSpawnByNode( InputArg );
end
--특정좌표에 ai를 소환한다.
function LuaSpawnAIActor( ArcadeSystem, HostController, strAITypeName, strActorTypeName, fPosX, fPosY, fPosZ, fDirX, fDirY, fDirZ )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLStr( "AI_TYPE", strAITypeName );
InputArg:PushLStr( "ACTOR_TYPE", strActorTypeName );
InputArg:PushLFloat( "POS_X", fPosX );
InputArg:PushLFloat( "POS_Y", fPosY );
InputArg:PushLFloat( "POS_Z", fPosZ );
InputArg:PushLFloat( "DIR_X", fDirX );
InputArg:PushLFloat( "DIR_Y", fDirY );
InputArg:PushLFloat( "DIR_Z", fDirZ );
HostController:SpawnAIActor( InputArg );
end
--특정노드에 ai를 소환한다.
function LuaSpawnAIActorByNode( ArcadeSystem, HostController, strAITypeName, strActorTypeName, strSpawnNode )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLStr( "AI_TYPE", strAITypeName );
InputArg:PushLStr( "ACTOR_TYPE", strActorTypeName );
InputArg:PushLStr( "SPAWN_NODE", strSpawnNode );
HostController:SpawnAIActorByNode( InputArg );
end
--특정액터의 위치에 ai를 소환한다.
function LuaSpawnAIActorByActorPos( ArcadeSystem, HostController, strAITypeName, strActorTypeName, pActor )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLStr( "AI_TYPE", strAITypeName );
InputArg:PushLStr( "ACTOR_TYPE", strActorTypeName );
InputArg:PushLVoid( "TARGET_ACTOR", pActor );
HostController:SpawnAIActorByActorPos( InputArg );
end
--해당 타입의 모든 ai를 없엔다.
function LuaRemoveAllAIActorByType( ArcadeSystem, HostController, strAITypeName )
InputArg = ArcadeSystem:GetInputArg();
InputArg:PushLStr( "AI_TYPE", strAITypeName );
HostController:RemoveAllAIActorByType( InputArg );
end
--모든 ai를 없엔다.
function LuaRemoveAllAIActor( ArcadeSystem, HostController )
HostController:RemoveAllAIActor();
end
--지정한 액터를 공격
function Command_Attack( pAIActor, pTargetActor, szAttackType, bRotateToTarget, fAimOffset )
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "ATTACK" );
Arg:SetActor( "TARGET_ACTOR", pTargetActor );
Arg:SetLStr( "ATTACK_TYPE", szAttackType );
Arg:SetLBool( "ROTATE_TO_TARGET", bRotateToTarget );
Arg:SetLFloat( "AIM_OFFSET", fAimOffset );
pAIActor:Command();
end
--지정한 위치로 이동하면�* 공격
function Command_MovingAttack_ToPos( pAIActor, u32CommandTime, pTargetActor, szAttackType, bRotateToTarget, fTargetPosX, fTargetPosY, fTargetPosZ, fOffsetPosX, fOffsetPosZ, fAimOffset )
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "MOVINGATTACK_POS" );
Arg:SetLU32( "COMMAND_TIME", u32CommandTime );
Arg:SetActor( "TARGET_ACTOR", pTargetActor );
Arg:SetLStr( "ATTACK_TYPE", szAttackType );
Arg:SetLBool( "ROTATE_TO_TARGET", bRotateToTarget );
Arg:SetLFloat( "TARGETPOS_X", fTargetPosX );
Arg:SetLFloat( "TARGETPOS_Y", fTargetPosY );
Arg:SetLFloat( "TARGETPOS_Z", fTargetPosZ );
Arg:SetLFloat( "COMMON_VALUE_1", fOffsetPosX );
Arg:SetLFloat( "COMMON_VALUE_2", fOffsetPosZ );
Arg:SetLFloat( "AIM_OFFSET", fAimOffset );
pAIActor:Command();
end
--지정한 노드위치로 이동하면�* 공격
function Command_MovingAttack_ToNode( pAIActor, u32CommandTime, pTargetActor, szAttackType, bRotateToTarget, szNode, fOffsetPosX, fOffsetPosZ, fAimOffset )
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "MOVINGATTACK_NODE" );
Arg:SetLU32( "COMMAND_TIME", u32CommandTime );
Arg:SetActor( "TARGET_ACTOR", pTargetActor );
Arg:SetLStr( "ATTACK_TYPE", szAttackType );
Arg:SetLBool( "ROTATE_TO_TARGET", bRotateToTarget );
Arg:SetLStr( "NODE_NAME", szNode );
Arg:SetLFloat( "COMMON_VALUE_1", fOffsetPosX );
Arg:SetLFloat( "COMMON_VALUE_2", fOffsetPosZ );
Arg:SetLFloat( "AIM_OFFSET", fAimOffset );
pAIActor:Command();
end
--지정한 액터를 향해 이동하면�* 공격
function Command_MovingAttack_ToActor( pAIActor, u32CommandTime, pTargetActor, szAttackType, bRotateToTarget, fOffsetPosX, fOffsetPosZ, fAimOffset )
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "MOVINGATTACK_ACTOR" );
Arg:SetLU32( "COMMAND_TIME", u32CommandTime );
Arg:SetActor( "TARGET_ACTOR", pTargetActor );
Arg:SetLStr( "ATTACK_TYPE", szAttackType );
Arg:SetLBool( "ROTATE_TO_TARGET", bRotateToTarget );
Arg:SetLFloat( "COMMON_VALUE_1", fOffsetPosX );
Arg:SetLFloat( "COMMON_VALUE_2", fOffsetPosZ );
Arg:SetLFloat( "AIM_OFFSET", fAimOffset );
pAIActor:Command();
end
--지정한 액터 반대를 향해 이동하면�* 공격
function Command_BackMovingAttack_ToActor( pAIActor, u32CommandTime, pTargetActor, szAttackType, bRotateToTarget, fMoveDist, fOffsetPosX, fOffsetPosZ, fAimOffset )
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "BACKMOVINGATTACK_ACTOR" );
Arg:SetLU32( "COMMAND_TIME", u32CommandTime );
Arg:SetActor( "TARGET_ACTOR", pTargetActor );
Arg:SetLStr( "ATTACK_TYPE", szAttackType );
Arg:SetLBool( "ROTATE_TO_TARGET", bRotateToTarget );
Arg:SetLFloat( "COMMON_VALUE_3", fMoveDist );
Arg:SetLFloat( "COMMON_VALUE_1", fOffsetPosX );
Arg:SetLFloat( "COMMON_VALUE_2", fOffsetPosZ );
Arg:SetLFloat( "AIM_OFFSET", fAimOffset );
pAIActor:Command();
end
--지정한 위치로 이동
function Command_Move_ToPos( pAIActor, u32CommandTime, fTargetPosX, fTargetPosY, fTargetPosZ, fOffsetPosX, fOffsetPosZ )
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "MOVE_POS" );
Arg:SetLU32( "COMMAND_TIME", u32CommandTime );
Arg:SetLFloat( "TARGETPOS_X", fTargetPosX );
Arg:SetLFloat( "TARGETPOS_Y", fTargetPosY );
Arg:SetLFloat( "TARGETPOS_Z", fTargetPosZ );
Arg:SetLFloat( "COMMON_VALUE_1", fOffsetPosX );
Arg:SetLFloat( "COMMON_VALUE_2", fOffsetPosZ );
pAIActor:Command();
end
--지정한 노드위치로 이동
function Command_Move_ToNode( pAIActor, u32CommandTime, szNode, fOffsetPosX, fOffsetPosZ )
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "MOVE_NODE" );
Arg:SetLU32( "COMMAND_TIME", u32CommandTime );
Arg:SetLStr( "NODE_NAME", szNode );
Arg:SetLFloat( "COMMON_VALUE_1", fOffsetPosX );
Arg:SetLFloat( "COMMON_VALUE_2", fOffsetPosZ );
pAIActor:Command();
end
--가까운 공격위치로 이동
function Command_Move_ToAttackArea( pAIActor, u32CommandTime,fOffsetPosX, fOffsetPosZ )
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "MOVE_ATTACKAREA" );
Arg:SetLU32( "COMMAND_TIME", u32CommandTime );
Arg:SetLFloat( "COMMON_VALUE_1", fOffsetPosX );
Arg:SetLFloat( "COMMON_VALUE_2", fOffsetPosZ );
pAIActor:Command();
end
--가까운 수비위치로 이동
function Command_Move_ToDefenseArea( pAIActor, u32CommandTime,fOffsetPosX, fOffsetPosZ )
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "MOVE_DEFENSEAREA" );
Arg:SetLU32( "COMMAND_TIME", u32CommandTime );
Arg:SetLFloat( "COMMON_VALUE_1", fOffsetPosX );
Arg:SetLFloat( "COMMON_VALUE_2", fOffsetPosZ );
pAIActor:Command();
end
--지정한 액터를 향해 이동
function Command_Move_ToActor( pAIActor, u32CommandTime, pTargetActor, fOffsetPosX, fOffsetPosZ )
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "MOVE_ACTOR" );
Arg:SetLU32( "COMMAND_TIME", u32CommandTime );
Arg:SetActor( "TARGET_ACTOR", pTargetActor );
Arg:SetLFloat( "COMMON_VALUE_1", fOffsetPosX );
Arg:SetLFloat( "COMMON_VALUE_2", fOffsetPosZ );
pAIActor:Command();
end
--지정한 액터 반대를 향해 이동
function Command_BackMove_ToActor( pAIActor, u32CommandTime, pTargetActor, fMoveDist, fOffsetPosX, fOffsetPosZ )
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "BACKMOVE_ACTOR" );
Arg:SetLU32( "COMMAND_TIME", u32CommandTime );
Arg:SetActor( "TARGET_ACTOR", pTargetActor );
Arg:SetLFloat( "COMMON_VALUE_3", fMoveDist );
Arg:SetLFloat( "COMMON_VALUE_1", fOffsetPosX );
Arg:SetLFloat( "COMMON_VALUE_2", fOffsetPosZ );
pAIActor:Command();
end
--지정한 노드로 순간 이동
function Command_Teleport_ToNode( pAIActor, szNode )
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "TELEPORT_NODE" );
Arg:SetLStr( "NODE_NAME", szNode );
pAIActor:Command();
end
--현재 위치에�* 대기
function Command_Stop( pAIActor )
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "STOP" );
pAIActor:Command();
end
--죽음
function Command_Death( pAIActor )
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "DEATH" );
pAIActor:Command();
end
--회피
function Command_Dodge( pAIActor, bLeft )
fDodgeDirValue = 1;
if bLeft == false then
fDodgeDirValue = -1;
end
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "DODGE" );
Arg:SetLFloat( "COMMON_VALUE_1", fDodgeDirValue );
pAIActor:Command();
end
--지정한 액터를 정면으로 바라보고 회피
function Command_Dodge_ToActor( pAIActor, pTargetActor, bLeft )
fDodgeDirValue = 1;
if bLeft == false then
fDodgeDirValue = -1;
end
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "DODGE_ACTOR" );
Arg:SetActor( "TARGET_ACTOR", pTargetActor );
Arg:SetLFloat( "COMMON_VALUE_1", fDodgeDirValue );
pAIActor:Command();
end
--지정한 액터에게 바인드스킬을 사용
function Command_SkillBind( pAIActor, pTargetActor, fAimOffset )
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "SKILL_BIND" );
Arg:SetActor( "TARGET_ACTOR", pTargetActor );
Arg:SetLFloat( "AIM_OFFSET", fAimOffset );
pAIActor:Command();
end
--투명�*스킬 온오프
function Command_SkillInvisible( pAIActor, bOnOff )
fOnOffValue = 1;
if bOnOff == false then
fOnOffValue = -1;
end
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "SKILL_INVISIBLE" );
Arg:SetLFloat( "COMMON_VALUE_1", fOnOffValue );
pAIActor:Command();
end
--AI의 HP를 변경
function Command_ChangeHP( pAIActor, fHPRate )
Arg = pAIActor:GetArg();
Arg:SetLStr( "COMMAND", "CHANGE_HP" );
Arg:SetLFloat( "COMMON_VALUE_1", fHPRate );
pAIActor:Command();
end
video:
that is somehow what i want to archieve...
05/24/2025, 19:26
#90
elite*gold: 0
Join Date: Mar 2019
Posts: 182
Received Thanks: 28
If anyone need(Only for stage 8)
Attached Files
Arcade_Host.rar
(13.5 KB, 23 views)
Similar Threads
[Release]Simple Lua Editor[Tool]
05/20/2024 - Elsword - 40 Replies
Hi guys! I have writed a simple tool in vb.net for edit .lua files, have 2 decryptions/encryptions working perfect, and open and save the files well :P
http://i.epvpimg.com/THNDf.png
Download: ElswordLuaEditor
[Selling] ✅ MWII/WZ2.0 AIO✅ CAMO EDITOR✅ 240 FOV✅ PLAYER CHAMS✅ CLAN TAG EDITOR✅ PERK EDITOR✅
12/13/2022 - Call of Duty Trading - 0 Replies
https://sellproduction.s3.eu-west-2.amazonaws.com/ store/3364/listings/bxy3u7qLIACDCaM64ih2KIEas0y2sR MhlUvr820i.gif
AIO Features:
CHAMS (PLAYER OUTLINES LIKE E$P)
FOV Changer
Class Name Editor (Colors & Symbols)
[Request] DB Editor / Client Editor / PK2 Editor.
08/30/2013 - SRO Private Server - 3 Replies
Would like to make some Updates on the Server and need some peoples to make em. - Add me on Skype : Saint.sinner8 ( will be rewarded )
All times are GMT +2. The time now is 06:09 .