Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

Retail V21 (SetLevelUpGift)

Inactive
Joined
Jan 20, 2009
Messages
1,015
Reaction score
1,830
This is from the retail source and has been converted.

Replace the entire function of:
Code:
CEventLua::SetLevelUpGift

With:
Code:
#ifdef __EVENTLUA_GIFT
void CEventLua::SetLevelUpGift(CUser* pUser, int nLevel)
{
	if (!IsPossible())
		return;

	if (m_Lua.GetLuaFunction("GetLevelUpGift"))
	{
		m_Lua.PushNumber(nLevel);
		m_Lua.PushString(pUser->m_playAccount.lpszAccount);
		m_Lua.PushNumber(pUser->GetLegendChar());
		m_Lua.PushNumber(pUser->GetJob());
		m_Lua.CallLuaFunction(4, 1);

		if (m_Lua.IsNil(-1))
		{
			m_Lua.Pop(0);
			return;
		}

		m_Lua.PushNil();
		while (m_Lua.TableLoop(-2))
		{
			DWORD dwItemId = CScript::GetDefineNum(m_Lua.GetFieldToString(-1, "strItemId"));
			int	nItemNum = (int)m_Lua.GetFieldToNumber(-1, "nItemNum");

			if (!prj.GetItemProp(dwItemId))
			{
				Error("CEventLua::SetLevelUpGift() - ItemProp is NULL. ItemId = \"%s\"", m_Lua.GetFieldToString(-1, "strItemId"));
				m_Lua.Pop(1);
				continue;
			}

			CItemElem itemElem;
			itemElem.m_dwItemId = dwItemId;
			itemElem.m_nItemNum = nItemNum;
			itemElem.SetFlag(static_cast<BYTE>(m_Lua.GetFieldToNumber(-1, "byFlag")));
			itemElem.SetSerialNumber();

			LogItemInfo aLogItem;
			aLogItem.Action = "E";
			aLogItem.SendName = pUser->GetName();
			aLogItem.WorldId = pUser->GetWorld()->GetID();
			aLogItem.Gold = aLogItem.Gold2 = pUser->GetGold();

			if (pUser->CreateItem(&itemElem))
			{
				aLogItem.RecvName = "EVENT_LEVELUP_GIFT";
				g_DPSrvr.OnLogItem(aLogItem, &itemElem, nItemNum);
			}
			else
			{
				g_dpDBClient.SendQueryPostMail(pUser->m_idPlayer, 0, itemElem, 0, "", "");
				aLogItem.RecvName = "EVENT_LEVELUP_GIFT_POST";
				g_DPSrvr.OnLogItem(aLogItem, &itemElem, nItemNum);
			}

			pUser->AddDefinedText(TID_GAME_EVENT_LEVELUP_GIFT, "\"%s\"", itemElem.GetName());
			m_Lua.Pop(1);
		}
	}
	m_Lua.Pop(0);
}
#endif

EventFunc.lua
Below:
Code:
ITEM = 4
MONSTER = 5

Add:
Code:
LEGEND_CLASS_NORMAL		= 0
LEGEND_CLASS_MASTER		= 1
LEGEND_CLASS_HERO		= 2
LEGEND_CLASS_LEGENDHERO	= 3

JOB_VAGRANT			= 0
JOB_MERCENARY			= 1
JOB_ACROBAT			= 2
JOB_ASSIST			= 3
JOB_MAGICIAN			= 4
JOB_PUPPETEER			= 5
JOB_KNIGHT			= 6
JOB_BLADE			= 7
JOB_JESTER			= 8
JOB_RANGER			= 9
JOB_RINGMASTER			= 10
JOB_BILLPOSTER			= 11
JOB_PSYCHIKEEPER		= 12
JOB_ELEMENTOR			= 13
JOB_GATEKEEPER			= 14
JOB_DOPPLER			= 15
JOB_KNIGHT_MASTER		= 16
JOB_BLADE_MASTER		= 17
JOB_JESTER_MASTER		= 18
JOB_RANGER_MASTER		= 19
JOB_RINGMASTER_MASTER		= 20
JOB_BILLPOSTER_MASTER		= 21
JOB_PSYCHIKEEPER_MASTER		= 22
JOB_ELEMENTOR_MASTER		= 23
JOB_KNIGHT_HERO			= 24
JOB_BLADE_HERO			= 25
JOB_JESTER_HERO			= 26
JOB_RANGER_HERO			= 27
JOB_RINGMASTER_HERO		= 28
JOB_BILLPOSTER_HERO		= 29
JOB_PSYCHIKEEPER_HERO		= 30
JOB_ELEMENTOR_HERO		= 31
JOB_LORDTEMPLER_HERO		= 32
JOB_STORMBLADE_HERO		= 33
JOB_WINDLURKER_HERO		= 34
JOB_CRACKSHOOTER_HERO		= 35
JOB_FLORIST_HERO		= 36
JOB_FORCEMASTER_HERO		= 37
JOB_MENTALIST_HERO		= 38
JOB_ELEMENTORLORD_HERO		= 39
JOB_MAX				= 40

Replace entire function:
Code:
SetLevelUpGift

With:
Code:
function SetLevelUpGift( nLevel, strAccount, strItemId, nItemNum, byFlag, nLegendClass, nJob )
    local nEventId = #tEvent
    local nSize = #tEvent[nEventId].Gift
  
    tEvent[nEventId].Gift[nSize+1] = {}
    tEvent[nEventId].Gift[nSize+1].nLevel = nLevel
    tEvent[nEventId].Gift[nSize+1].strAccount = strAccount
    tEvent[nEventId].Gift[nSize+1].strItemId = strItemId
    tEvent[nEventId].Gift[nSize+1].nItemNum = nItemNum
    tEvent[nEventId].Gift[nSize+1].byFlag = byFlag
    tEvent[nEventId].Gift[nSize+1].nLegendClass = nLegendClass
    tEvent[nEventId].Gift[nSize+1].nJob = nJob
end

Replace entire function:
Code:
GetLevelUpGift

With:
Code:
function GetLevelUpGift( nLevel, strAccount, nLegendClass, nJob )
	local nCount = 1
	local tGiftList = {}
	local tList = GetEventList()
	for i in pairs(tList) do
		local tGift = tEvent[tList[i]].Gift
		for j in pairs(tGift) do
			local nTemp = string.find( strAccount, tGift[j].strAccount )
			if( (tGift[j].strAccount == "all") or (nTemp ~= nil) ) then 
				if( (tGift[j].nJob == JOB_MAX ) or ( tGift[j].nJob == nJob ) ) then
					if( tGift[j].nLevel == nLevel and tGift[j].nLegendClass == nLegendClass ) then
						tGiftList[nCount] = {}
						tGiftList[nCount].strItemId = tGift[j].strItemId
						tGiftList[nCount].nItemNum = tGift[j].nItemNum
						tGiftList[nCount].byFlag = tGift[j].byFlag
						nCount = nCount + 1
					end
				end
			end
		end
	end
	
	return tGiftList
end

Event.lua
Replace:
Code:
---- 11. SetLevelUpGift( nLevel, "all", ItemId, nNum, byFlag ) -- 레벨업 선물( nLevel달성시 아이템 지급, "all" 부분에 특정 계정 지정 가능(예. "__bu" - 버디, "__an" - 엔젤 )

With:
Code:
---- 11. SetLevelUpGift( nLevel, "all", ItemId, nNum, byFlag, nLegendClass, nJob ) -- 레벨업 선물( nLevel달성시 아이템 지급, "all" 부분에 특정 계정 지정 가능(예. "__bu" - 버디, "__an" - 엔젤 ), nJob으로 직업지정(JOB_MAX 기입시 모든 직업)

You then are able to do events like this:
Code:
AddEvent( "JOB EVENT TEST" )
--{
    SetTime( "2007-06-08 14:23", "2099-06-08 16:11" )
    SetLevelUpGift( 60, "all", "II_SYS_SYS_SCR_BX_PET_LAWOLF7", 1, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT )
    SetLevelUpGift( 80, "all", "II_SYS_SYS_SCR_BX_PET_LAWOLF7", 1, 2, LEGEND_CLASS_MASTER, JOB_KNIGHT_MASTER )
    SetLevelUpGift( 125, "all", "II_SYS_SYS_SCR_BX_PET_LAWOLF7", 1, 2, LEGEND_CLASS_HERO, JOB_KNIGHT_HERO)
    SetLevelUpGift( 140, "all", "II_SYS_SYS_SCR_BX_PET_LAWOLF7", 1, 2, LEGEND_CLASS_LEGEND_HERO, JOB_LORDTEMPLER_HERO )    
--}

Thanks to Hyellow for reporting a missing piece.
 
Last edited:
Initiate Mage
Joined
Feb 15, 2020
Messages
45
Reaction score
8
Forgot this

Replace Entire function:
Code:
GetLevelUpGift

With:
Code:
function GetLevelUpGift( nLevel, strAccount, nLegendClass, nJob )    local nCount = 1    local tGiftList = {}    local tList = GetEventList()    for i in pairs(tList) do        local tGift = tEvent[tList[i]].Gift        for j in pairs(tGift) do            local nTemp = string.find( strAccount, tGift[j].strAccount )            if( (tGift[j].strAccount == "all") or (nTemp ~= nil) ) then                 if( (tGift[j].nJob == JOB_MAX ) or ( tGift[j].nJob == nJob ) ) then                    if( tGift[j].nLevel == nLevel and tGift[j].nLegendClass == nLegendClass ) then                        tGiftList[nCount] = {}                        tGiftList[nCount].strItemId = tGift[j].strItemId                        tGiftList[nCount].nItemNum = tGift[j].nItemNum                        tGiftList[nCount].byFlag = tGift[j].byFlag                        nCount = nCount + 1                    end                end            end        end    end        return tGiftListend
 
Last edited:
Inactive
Joined
Jan 20, 2009
Messages
1,015
Reaction score
1,830
Forgot this

Replace Entire function:
Code:
GetLevelUpGift

With:
Code:
function GetLevelUpGift( nLevel, strAccount, nLegendClass, nJob )    local nCount = 1    local tGiftList = {}    local tList = GetEventList()    for i in pairs(tList) do        local tGift = tEvent[tList[i]].Gift        for j in pairs(tGift) do            local nTemp = string.find( strAccount, tGift[j].strAccount )            if( (tGift[j].strAccount == "all") or (nTemp ~= nil) ) then                 if( (tGift[j].nJob == JOB_MAX ) or ( tGift[j].nJob == nJob ) ) then                    if( tGift[j].nLevel == nLevel and tGift[j].nLegendClass == nLegendClass ) then                        tGiftList[nCount] = {}                        tGiftList[nCount].strItemId = tGift[j].strItemId                        tGiftList[nCount].nItemNum = tGift[j].nItemNum                        tGiftList[nCount].byFlag = tGift[j].byFlag                        nCount = nCount + 1                    end                end            end        end    end        return tGiftListend

Thanks for spotting this! I updated the main post with it.
 
Joined
May 23, 2009
Messages
19
Reaction score
3
Hello and good day! Can someone help me check my event cause its not working, i followed this guide step by step.. when i reach the said levels, my character receives nothing..

PHP:
AddEvent( "Gift!" )
--{
	SetTime( "2022-07-27 06:00", "2022-12-31 23:59" )
	SetLevelUpGift( 15, "all", "II_SYS_SYS_SCR_BX_PET_LAWOLF7", 1, 2 )
	SetLevelUpGift( 2, "all", "II_SYS_SYS_SCR_BXLVUP20", 1, 2 )
	SetLevelUpGift( 2, "all", "II_SYS_SYS_EVE_BALLOON", 1, 2 )
	SetLevelUpGift( 5, "all", "II_CHP_RED", 100 )
	SetLevelUpGift( 6, "all", "II_CHP_RED", 100 )
	SetLevelUpGift( 7, "all", "II_CHP_RED", 100 )
	SetLevelUpGift( 8, "all", "II_CHP_RED", 100 )
	SetLevelUpGift( 9, "all", "II_CHP_RED", 100 )
	SetLevelUpGift( 10, "all", "II_CHP_RED", 100 )
	SetLevelUpGift( 11, "all", "II_CHP_RED", 100 )
	SetLevelUpGift( 12, "all", "II_CHP_RED", 100 )
	SetLevelUpGift( 13, "all", "II_CHP_RED", 100 )
	SetLevelUpGift( 14, "all", "II_CHP_RED", 100 )
	SetLevelUpGift( 15, "all", "II_CHP_RED", 100 )
	SetLevelUpGift( 31, "all", "II_SYS_SYS_SCR_BXLVUP40", 1, 2 )
	SetLevelUpGift( 41, "all", "II_SYS_SYS_SCR_BXLVUP60", 1, 2 )
	SetLevelUpGift( 61, "all", "II_SYS_SYS_SCR_BXLVUP80", 1, 2 )
--}
 
Initiate Mage
Joined
Nov 6, 2015
Messages
11
Reaction score
2
Hello and good day! Can someone help me check my event cause its not working, i followed this guide step by step.. when i reach the said levels, my character receives nothing..

PHP:
AddEvent( "Gift!" )
--{
    SetTime( "2022-07-27 06:00", "2022-12-31 23:59" )
    SetLevelUpGift( 15, "all", "II_SYS_SYS_SCR_BX_PET_LAWOLF7", 1, 2 )
    SetLevelUpGift( 2, "all", "II_SYS_SYS_SCR_BXLVUP20", 1, 2 )
    SetLevelUpGift( 2, "all", "II_SYS_SYS_EVE_BALLOON", 1, 2 )
    SetLevelUpGift( 5, "all", "II_CHP_RED", 100 )
    SetLevelUpGift( 6, "all", "II_CHP_RED", 100 )
    SetLevelUpGift( 7, "all", "II_CHP_RED", 100 )
    SetLevelUpGift( 8, "all", "II_CHP_RED", 100 )
    SetLevelUpGift( 9, "all", "II_CHP_RED", 100 )
    SetLevelUpGift( 10, "all", "II_CHP_RED", 100 )
    SetLevelUpGift( 11, "all", "II_CHP_RED", 100 )
    SetLevelUpGift( 12, "all", "II_CHP_RED", 100 )
    SetLevelUpGift( 13, "all", "II_CHP_RED", 100 )
    SetLevelUpGift( 14, "all", "II_CHP_RED", 100 )
    SetLevelUpGift( 15, "all", "II_CHP_RED", 100 )
    SetLevelUpGift( 31, "all", "II_SYS_SYS_SCR_BXLVUP40", 1, 2 )
    SetLevelUpGift( 41, "all", "II_SYS_SYS_SCR_BXLVUP60", 1, 2 )
    SetLevelUpGift( 61, "all", "II_SYS_SYS_SCR_BXLVUP80", 1, 2 )
--}


SetLevelUpGift( 5, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 6, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 7, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 8, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 9, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 10, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 11, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 12, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 13, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 14, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 15, "all", "II_CHP_RED", 100 )

change it to

SetLevelUpGift( 5, "all", "II_CHP_RED", 100, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT)
SetLevelUpGift( 6, "all", "II_CHP_RED", 100, 2 , LEGEND_CLASS_NORMAL, JOB_KNIGHT)
SetLevelUpGift( 7, "all", "II_CHP_RED", 100, 2 , LEGEND_CLASS_NORMAL, JOB_KNIGHT)
SetLevelUpGift( 8, "all", "II_CHP_RED", 100, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT )
SetLevelUpGift( 9, "all", "II_CHP_RED", 100, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT )
SetLevelUpGift( 10, "all", "II_CHP_RED", 100, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT )
SetLevelUpGift( 11, "all", "II_CHP_RED", 100, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT )
SetLevelUpGift( 12, "all", "II_CHP_RED", 100, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT )
SetLevelUpGift( 13, "all", "II_CHP_RED", 100, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT )
SetLevelUpGift( 14, "all", "II_CHP_RED", 100, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT )
SetLevelUpGift( 15, "all", "II_CHP_RED", 100, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT )

change 2 to 1 or 0 i think if you want to to be tradable. change also the job and class. if you want the rewards to job/class specific.
 
Joined
May 23, 2009
Messages
19
Reaction score
3
SetLevelUpGift( 5, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 6, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 7, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 8, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 9, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 10, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 11, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 12, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 13, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 14, "all", "II_CHP_RED", 100 )
SetLevelUpGift( 15, "all", "II_CHP_RED", 100 )

change it to

SetLevelUpGift( 5, "all", "II_CHP_RED", 100, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT)
SetLevelUpGift( 6, "all", "II_CHP_RED", 100, 2 , LEGEND_CLASS_NORMAL, JOB_KNIGHT)
SetLevelUpGift( 7, "all", "II_CHP_RED", 100, 2 , LEGEND_CLASS_NORMAL, JOB_KNIGHT)
SetLevelUpGift( 8, "all", "II_CHP_RED", 100, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT )
SetLevelUpGift( 9, "all", "II_CHP_RED", 100, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT )
SetLevelUpGift( 10, "all", "II_CHP_RED", 100, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT )
SetLevelUpGift( 11, "all", "II_CHP_RED", 100, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT )
SetLevelUpGift( 12, "all", "II_CHP_RED", 100, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT )
SetLevelUpGift( 13, "all", "II_CHP_RED", 100, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT )
SetLevelUpGift( 14, "all", "II_CHP_RED", 100, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT )
SetLevelUpGift( 15, "all", "II_CHP_RED", 100, 2, LEGEND_CLASS_NORMAL, JOB_KNIGHT )

change 2 to 1 or 0 i think if you want to to be tradable. change also the job and class. if you want the rewards to job/class specific.

Thanks for your kind reply, but how about the other gift boxes? my characters doesnt receive it also, and what about if i like all jobs to receive this gifts.
 
Back
Top