Jump to content
  • 0
Sign in to follow this  
Rodox_Mortein

Loop em Macro

Question

Não consegui encontrar nada do gênero
Alguém sabe onde eu acesso a parte de Macros do L2J? Não consigo encontrar no server e nem no cliente = [
Preciso desenvolver um jeito de fazer com que os macros do meu servidor façam Loop.
Com loop eu quero dizer fazer ele se repetir sozinho
ex um macro acessar um segundo macro..
ou igual em um servidor desses novos oficiais.. que o macro funciona igual uma SS onde vc simplesmente aperta com o botão direito nela e ela se reusa sozinha
Alguém tem algo do tipo? ou pode me indicar onde eu encontre isso?

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0
Em 12/01/2020 at 16:16, Rodox_Mortein disse:

Não consegui encontrar nada do gênero
Alguém sabe onde eu acesso a parte de Macros do L2J? Não consigo encontrar no server e nem no cliente = [
Preciso desenvolver um jeito de fazer com que os macros do meu servidor façam Loop.
Com loop eu quero dizer fazer ele se repetir sozinho
ex um macro acessar um segundo macro..
ou igual em um servidor desses novos oficiais.. que o macro funciona igual uma SS onde vc simplesmente aperta com o botão direito nela e ela se reusa sozinha
Alguém tem algo do tipo? ou pode me indicar onde eu encontre isso?

Spoiler
class MacroListWnd extends UICommonAPI;

const MACRO_MAX_COUNT = 48;
const TIMER_ID = 9001;
const TIMER2_ID = 9002;

var WindowHandle Me;

var AnimTextureHandle texAutoUse;

var bool m_bShow;
var ItemID m_DeleteItemID;
var int m_Max;

var bool cycleON;
var int cmdCount;
var int LineCount;
var ItemID CycleID;
var string cmds[12];

function OnRegisterEvent()
{
	RegisterEvent( EV_DialogOK );
	
	RegisterEvent(EV_MacroShowListWnd);
	RegisterEvent(EV_MacroUpdate);
	RegisterEvent(EV_MacroList);
}

function OnLoad()
{
	if(CREATE_ON_DEMAND==0)
		OnRegisterEvent();

	m_bShow = false;
	cycleON = false;
	ClearItemID(m_DeleteItemID);
	ClearItemID(CycleID);
	
	cmdCount = 0;
	LineCount = 0;
	
	Me = GetWindowHandle( "MacroListWnd" );
	
	texAutoUse = GetAnimTextureHandle( "MacroListWnd.texAutoUse" );
	texAutoUse.Stop();
	texAutoUse.HideWindow();
}

function OnEnterState( name a_PreStateName )
{
	class'MacroAPI'.static.RequestMacroList();
}

function OnShow()
{
	m_bShow = true;
}
	
function OnHide()
{
	m_bShow = false;
}

function OnClickButton( string strID )
{	
	switch( strID )
	{
	case "btnHelp":
		OnClickHelp();
		break;
	case "btnAdd":
		OnClickAdd();
		break;
	}
}

function OnEvent(int Event_ID, String param)
{
	if (Event_ID == EV_MacroShowListWnd)
	{
		HandleMacroShowListWnd();
	}
	else if (Event_ID == EV_MacroUpdate)
	{
		HandleMacroUpdate();
	}
	else if (Event_ID == EV_MacroList)
	{
		HandleMacroList(param);
	}
	else if (Event_ID == EV_DialogOK)
	{
		if (DialogIsMine())
		{
			if (IsValidItemID(m_DeleteItemID))
			{
				class'MacroAPI'.static.RequestDeleteMacro(m_DeleteItemID);
				//debug("what?");
				ClearItemID(m_DeleteItemID);
				if(m_Max == 1)	//하나남은 것을 지울 경우 0이 되므로 한번 갱신해준다. 
				{
					HandleMacroList("");// 창을 한번 갱신해준다. //0일경우에만 갱신해주면 됨.
				}
			}
			
		}
	}
}

//매크로의 클릭
function OnClickItem( string strID, int index )
{
	local ItemInfo 	infItem;
	
	if (strID == "MacroItem" && index>-1)
	{
		if (class'UIAPI_ITEMWINDOW'.static.GetItem("MacroListWnd.MacroItem", index, infItem))
		{
			class'MacroAPI'.static.RequestUseMacro(infItem.ID);
		}
			
	}
}

function OnRClickItem( string strID, int index )
{
	local ItemInfo infItem;
	
	if ( !cycleON )
	{
		if (strID == "MacroItem" && index>-1)
		{
			if (class'UIAPI_ITEMWINDOW'.static.GetItem("MacroListWnd.MacroItem", index, infItem))
			{
				CycleID = infItem.ID;
				MacroCycle( CycleID );
				cycleON = true;
				
				texAutoUse.SetAnchor( "MacroListWnd.MacroItem", "TopLeft", "TopLeft", 36 * ( index % 4 ) + 1, 36 * ( ( index - ( index % 4 ) ) / 4 ) + 1 );

				texAutoUse.Stop();
				texAutoUse.HideWindow();
				texAutoUse.SetLoopCount( -1 );
				texAutoUse.Play();
				texAutoUse.ShowWindow();
				//sysDebug( "START CYCLING" );
			}
		}
	}
	else
	{
		//sysDebug( "STOP CYCLING" );
		ClearItemID(CycleID);
		cmdCount = 0;
		Me.KillTimer( TIMER_ID );
		Me.KillTimer( TIMER2_ID );
		cycleON = false;
		texAutoUse.Stop();
		texAutoUse.HideWindow();
	}
	
	
}

function MacroCycle( ItemID cID )
{
	local MacroInfo macroInf;
	local int idx;
	local int TimerDelay;
	local int MacroDelay;
	local string command;
	
	class'UIDATA_MACRO'.static.GetMacroInfo(cID, macroInf);

	LineCount = 0;
	MacroDelay = 0;

	for ( idx = 0; idx < 12; idx++ )
	{
		command = macroInf.CommandList[idx];
		cmds[idx] = command;

		if ( command != "" )
		{
			LineCount += 1;
		}
		
		if ( InStr( command, "/delay" ) > -1 )
		{
			MacroDelay += int( Mid ( command, 7 ) ) * 1000;
		}
	}
	
	//sysDebug( "LineCount: " $ string( LineCount ) );
	//sysDebug( "MacroDelay: " $ string( MacroDelay ) );

	TimerDelay = (250 * LineCount + MacroDelay);
	//sysDebug( "Timer Delay: " $ string( TimerDelay ) );

	ExecuteMacroLine( 0, LineCount );
	Me.KillTimer( TIMER_ID );
	Me.SetTimer( TIMER_ID, TimerDelay + 250 );
}

function ExecuteMacroLine(int idx, int count)
{
	local int ExtraTime;
	
	ExtraTime = 0;
	
	Me.KillTimer( TIMER2_ID );
	if ( InStr( cmds[idx], "/delay" ) > -1 )
	{
		ExtraTime  = int( Mid ( cmds[idx], 7 ) ) * 1000;
		//sysDebug( "EXTRA TIME" $ string( ExtraTime ));
	}
	else
	{
		ExecuteCommand( cmds[idx] );
	}

	cmdCount += 1;
	Me.SetTimer( TIMER2_ID, 250 + ExtraTime );
	if (cmdCount > count)
	{
		cmdCount = 0;
		Me.KillTimer( TIMER2_ID );
	}
	
}

function OnTimer( int TimerID )
{
	if ( TimerID == TIMER_ID )
	{
		Me.KillTimer( TIMER_ID );
		//sysDebug( "NEW CYCLE");
		MacroCycle( CycleID );
	} else if ( TimerID == TIMER2_ID )
	{
		//sysDebug( "NEW LINE");
		ExecuteMacroLine( cmdCount, LineCount );
	}
}

//도움말
function OnClickHelp()
{
	local string strParam;
	ParamAdd(strParam, "FilePath", "..\\L2text\\help_macro.htm");
	ExecuteEvent(EV_ShowHelp, strParam);
}

//추가
function OnClickAdd()
{
	class'UIAPI_MULTIEDITBOX'.static.SetString( "MacroInfoWnd.txtInfo", "");
	ExecuteEvent(EV_MacroShowEditWnd, "");
}

function HandleMacroUpdate()
{
	class'MacroAPI'.static.RequestMacroList();
}

function HandleMacroShowListWnd()
{
	if (m_bShow)
	{
		PlayConsoleSound(IFST_WINDOW_CLOSE);
		class'UIAPI_WINDOW'.static.HideWindow("MacroListWnd");
	}
	else
	{
		
		PlayConsoleSound(IFST_WINDOW_OPEN);	
		class'UIAPI_WINDOW'.static.ShowWindow("MacroListWnd");
		class'UIAPI_WINDOW'.static.SetFocus("MacroListWnd");
	}
}

function Clear()
{
	class'UIAPI_ITEMWINDOW'.static.Clear("MacroListWnd.MacroItem");
}

function HandleMacroList(string param)
{
	local int Idx;
	local int Max;
	
	local string strIconName;
	local string strMacroName;
	local string strDescription;
	local string strTexture;
	local string strTmp;
	
	local ItemInfo	infItem;
		//debug ("파람:"@ param);
	//초기화
	Clear();
	
	ParseInt(param, "Max", Max);
	m_Max = Max;	//글로벌 맥스를 설정 -_-;;
	for (Idx=0; Idx<Max; Idx++)
	{
		strIconName = "";
		strMacroName = "";
		strDescription = "";
		strTexture = "";
		
		ParseItemIDWithIndex(param, infItem.ID, idx);
		ParseString(param, "IconName_" $ Idx, strIconName);
		ParseString(param, "MacroName_" $ Idx, strMacroName);
		ParseString(param, "Description_" $ Idx, strDescription);
		ParseString(param, "TextureName_" $ Idx, strTexture);

		infItem.Name = strMacroName;
		infItem.AdditionalName = strIconName;
		infItem.IconName = strTexture;
		infItem.Description = strDescription;
		infItem.ItemSubType = int(EShortCutItemType.SCIT_MACRO);
		
		//MacroItem에 추가
		class'UIAPI_ITEMWINDOW'.static.AddItem("MacroListWnd.MacroItem", infItem);
	}
	
	//매크로 갯수표시
	if (Max<10)
	{
		strTmp = strTmp $ "0";
	}
	strTmp = strTmp $ Max;
	strTmp = "(" $ strTmp $ "/" $ MACRO_MAX_COUNT $ ")";
	class'UIAPI_TEXTBOX'.static.SetText("MacroListWnd.txtCount", strTmp);
}

//Trash아이콘으로의 DropITem
function OnDropItem( string strID, ItemInfo infItem, int x, int y)
{
	switch( strID )
	{
	case "btnTrash":
		DeleteMacro(infItem);
		break;
	case "btnEdit":
		EditMacro(infItem);
		break;
	}
}

//매크로 삭제
function DeleteMacro(ItemInfo infItem)
{
	local string strMsg;
	
	//매크로가 아니면 패스
	if (infItem.ItemSubType != int(EShortCutItemType.SCIT_MACRO))		
		return;			
	
	strMsg = MakeFullSystemMsg(GetSystemMessage(828), infItem.Name, "");
	m_DeleteItemID = infItem.ID;
	DialogShow(DIALOG_Modalless,DIALOG_Warning, strMsg);
}

//매크로 편집
function EditMacro(ItemInfo infItem)
{
	local string param;
	
	//매크로가 아니면 패스
	if (infItem.ItemSubType != int(EShortCutItemType.SCIT_MACRO))
		return;
	
	ParamAddItemID(param, infItem.ID);
	ExecuteEvent(EV_MacroShowEditWnd, param);
}
defaultproperties
{
}

 

Esse é o script do macro cycle do interface.u H5


spacer.png

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  


⭐ Links Úteis




⚔️ Server Patrocinador



🎁 Ofertas







  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • BOM DIA , BOA TARDE , BOA NOITE - 'Sr's  Olá meus caros amigos da l2jbrasil  venho aqui no forum em busca de um parceiro para entrar na sociedade em meu servidor o servidor é um Hi5 50x já está em fase final apenas falta mudar algumas coisas e ja está pronto para coloca-lo online preciso de uma pessoa responsavel que queira colocar o servidor online comigo.. Precisa ser maior de 18 e que tenha condições de ajudar com os custos do DEDICADO SITE E DEMAIS GASTOS COM DIVULGAÇÃO Caso alguem tenha o real interesse por favor , deixar os dados abaixo aqui '   Nome: Idade: Cidade :   Conte me um pouco sobre sua pessoa , e sua personalidade:                                                                                                    Preciso tambem de pessoas para ajudar com as divulgação do servidor interessadas enviar MP      
    • Bom dia senhores. Nome: Henrique Versão do Servidor: Interlude/Freya,H5/Classic Procuro vaga ou alguém para montar um servidor free to play. Pretendo ser ADM/GM (Evento) ou GM (Divulgador) Tenho experiência com  datapack/custom/texturas do cliente , meu foco sempre foi mexer com essa parte ❤️ Quero entrar em uma equipe para ajudar na montagem e supervisão do servidor. Se alguém tiver interesse, entrar em contato comigo via PM ou discord.
    • do Rise of Darkness ate Valiance
    • edita h5 tbm ou só interlude?
    • Att, apenas com o top da l2jbrasil está acontecendo.
    • https://www.mediafire.com/file/533stb9mi5zjrs7/buffer_Schemer_L2JDream.rar/file
    • Estranho  vou dar uma olhada e depois posto aqui
    • Fiz isso agora e deu certo, configurei mas agora diz não ter votado em todas as opções, deixei apenas o top da l2jbrasil.. Msg: Você não votou em todos os links. Todos os links devem ser votados para receber o premio!
    • Eu já tentei de tudo, desativando o overenchant, o safeadmin e ele continua dando critical error, tentei provar seu system recomendado e também o que você deixou nos comentários, mesmo assim para os caras que eu paso system continua dando critical error ou kickando do serve... em gameserver e loginserver nao da error... aqui meus configuracaos do seu pack... system do serve ta on no meu pc pra testa >https://mega.nz/file/Ok0k2AaI#YRkALtA165Nb8gYoUG9wltOPIKlYX344ZIlCFfK2Qq8< https://mega.nz/file/bs020ADS#-Q9VcUAIuUbIaPL8BTNMkBrxq1kF--5DytzEuEuClkI  
    • Grave um video e poste aqui
×
×
  • Create New...