Jump to content
  • 0
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

Proteja seu servidor de ataques DDoS massivos!

VPS EPIC

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...



     



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • This is really helpful for people who do not comprehend the fundamentals of zone system. Nice tutorial.
    • quando coloquei os fakes pra se atacar ficou aparecendo esse erro ai alguem sabe oq é ?   como se eles nao conseguisse dar tovila e voltar
    • Vai em: gameserver\config\customs\SpecialMods.properties # Custom Spawn for news players CustomSpawn = false -> true RandomAreasSpawn = 1 # X, Y, Z custom_spawn1 = 45928, 49912, -3056 (digite /loc e pegue a localização de onde ele vai nascer) custom_spawn2 = 45928, 49912, -3056 custom_spawn3 = 45928, 49912, -3056
    • Nice men ! Amigos como puedo hacer para que mi nuevo player vaya a talking Island en vez de irse a Giran ?
    • Pequena correção para quem pretender usar essa REV e ter jóias boss nos boss... O NPC Gatekeeper of Fire Dragon (npc que abre a porta até o Heart of Volcano) não estava abrindo a porta. Então procurei sobre isso e achei um tópico relacionado a Frozen 1132 mas com a solução definitiva para isso. Caminho para correção na Source: net.sf.l2j.gameserver.scripting.scripts.teleports Procure por:   elif npcId == 31384 : #Gatekeeper of Fire Dragon DoorTable.getInstance().getDoor(24210004).openMe() return elif npcId == 31686 : #Gatekeeper of Fire Dragon DoorTable.getInstance().getDoor(24210006).openMe() return elif npcId == 31687 : #Gatekeeper of Fire Dragon DoorTable.getInstance().getDoor(24210005).openMe() return   E altere os números em vermelho para: 4 5 e 6 respectivamente.   elif npcId == 31384 : #Gatekeeper of Fire Dragon DoorTable.getInstance().getDoor(24210004).openMe() return elif npcId == 31686 : #Gatekeeper of Fire Dragon DoorTable.getInstance().getDoor(24210005).openMe() return elif npcId == 31687 : #Gatekeeper of Fire Dragon DoorTable.getInstance().getDoor(24210006).openMe() return   Correção simples mas que vai ajudar quem queira moldar seu servidor nesse estilo. Créditos pela correção: leozinhobr2    
    • Você está usando a ultima atualização postada? se não baixa e tente novamente, pode resolver seu problema e conserto de alguns bugs já relatados. Se tiver mais alguma dúvida pergunte no forum de duvidas, que responderemos da mesma forma. https://www.l2jbrasil.com/forum/18-dúvidas/
    • Você sabe como resolver esse erro? O gameserver nunca passa disso...
    • Obrigado a todos pela resposta do tvt 2x2 e 4x4 etc, eu não tenho conhecimento desse evento e coisas semelhantes. Show
    • cara esse evento sempre foi assim. não cola o cara participar do evento se n ganhar nada. o servidor entrega a equipe ganhadora uma quantidade que vc configura exe.: 5 Turnamente o perdedor para n ficar triste o server da 1 pra ele. mas é só vc colocar 0 e pronto.
    • acho que eles erraram na descrição, pois como vai tirar um item que eles não tem.. como pode ver na função Reward = Recompensa eu penso assim, equipe vencedora ganha 5 itens e a equipe perdedora ganha 1 = como premio de participação. 
×
×
  • Create New...