Jump to content

Aveline™

Inactive Member
  • Posts

    190
  • Joined

  • Last visited

  • Days Won

    6
  • Feedback

    0%

Posts posted by Aveline™

  1. M2 Download Center

    This is the hidden content, please
    ( Internal )

    Hi guys. Someone still does not know how to add function in source files and if you have source files and you don't know anything about c++, This topic usefull for you :)

     

    Meanwhile thanks imer for codes.

     

     

    If you are ready then let's go ;)

     

    First open questlua_npc.cpp after add these;

    	int npc_get_pid(lua_State* L)
    	{
    		CQuestManager & q = CQuestManager::instance();
    		LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
    		lua_pushnumber(L,npc->GetPlayerID());
    		return 1;
    	}
    
    	int npc_select(lua_State* L)
    	{
    		if(lua_isnumber(L,1))
    		{
    			DWORD vid = lua_tonumber(L,1);
    			LPCHARACTER pc = CQuestManager::instance().GetCurrentCharacterPtr();
    			LPCHARACTER ch = CHARACTER_MANAGER::instance().Find(vid);
    			if(ch)
    			{
    				pc->SetQuestNPCID(vid);
    				lua_pushnumber(L,1);
    				return 1;
    			}
    		}
    		lua_pushnumber(L,0);
    		return 1;
    	}

    Add these ;

    			{ "select",npc_select},
    			{ "get_pid",npc_get_pid},

    After open questlua_item.cpp add these ;

    	int item_get_wearflag(lua_State* L)
    	{
    		LPITEM item = CQuestManager::instance().GetCurrentItem();
    		if(item)
    		{
    			lua_pushnumber(L,item->GetProto()->dwWearFlags);
    			return 1;
    		}
    		lua_pushnumber(L,0);
    		return 1;
    	}
    
    	int item_is_wearflag(lua_State* L)
    	{
    		LPITEM item = CQuestManager::instance().GetCurrentItem();
    		if(item)
    		{
    			lua_pushboolean(L,(item->GetProto()->dwWearFlags & (DWORD)lua_tonumber(L,1)));
    			return 1;
    		}
    		lua_pushnumber(L,0);
    		return 1;
    	}
    
    	int item_get_attr(lua_State* L)
    	{
    		LPITEM item = CQuestManager::instance().GetCurrentItem();
    		
    		if(!lua_isnumber(L,1) || !item)
    		{
    			return 0;
    		}
    
    		int attr_index = lua_tonumber(L,1);
    		
    		if(attr_index < 0 || attr_index > 6)
    		{
    			return 0;
    		}
    
    		TPlayerItemAttribute attr = item->GetAttribute(attr_index);
    		lua_pushnumber(L,attr.bType);
    		lua_pushnumber(L,attr.sValue);
    		return 2;
    	}
    
    	int item_set_attr(lua_State* L)
    	{
    		LPITEM item = CQuestManager::instance().GetCurrentItem();
    		
    		if(!lua_isnumber(L,1) || !lua_isnumber(L,2) || !lua_isnumber(L,3) || !item)
    		{
    			lua_pushboolean(L,false);
    			return 1;
    		}
    
    		int attr_index = lua_tonumber(L,1);
    
    		if(attr_index < 0 || attr_index > 6)
    		{
    			lua_pushboolean(L,false);
    			return 1;
    		}
    
    		item->SetForceAttribute(attr_index,lua_tonumber(L,2),lua_tonumber(L,3));
    		lua_pushboolean(L,true);
    		return 1;
    	}
    
    	int item_equip(lua_State* L)
    	{
    		LPITEM item = CQuestManager::instance().GetCurrentItem();
    		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
    
    		if(!lua_isnumber(L,1) || !item || !ch)
    		{
    			lua_pushboolean(L,false);
    			return 1;
    		}
    
    		int equipcell = lua_tonumber(L,1);
    		
    		LPITEM wear = ch->GetWear(equipcell);
    
    		if(wear)
    		{
    			ch->UnequipItem(wear);
    		}
    		item->EquipTo(ch,equipcell);
    		lua_pushboolean(L,true);
    		return 1;
    	}

    Add these ;

    			{ "get_wearflag", item_get_wearflag},
    			{ "is_wearflag", item_is_wearflag},
    			{ "get_attr", item_get_attr},
    			{ "set_attr", item_set_attr},
    			{ "equip", item_equip},

    How to use these function in my quest? 

    quest examples begin
    	state start begin
    		when 20354.take begin
    			say(item.get_wearflag())
    		end
    		when 20354.take begin
    			local type,value = item.get_attr(1)
    			say("Type : "..type)
    			say("Value : "..value)
    		end
    		when 20354.take begin
    			item.set_attr(1,2,2000)
    		end
    		when kill with npc.is_pc() begin
    			setskin(NOWINDOW)
    			chat(npc.get_pid())
    		end
    		when kill with npc.is_pc() begin
    			local a = npc.select(npc.get_vid())
    			chat(pc.get_name())
    			npc.select(a)
    		end
    	end
    end

    Kind Regards

    HaveBeen

     

    • Metin2 Dev 2
    • Good 1
    • Love 9
  2. Already TEC Interactive has made a few something about this topic. There are big servers and Tec Interactive send petition to owner of the server. If owner of the server not close server, I think there was a suit for damages. Because i have seen these situations in turkey and many people know these situations. But ymir entartaiment is finished at the moment just there Webzen ;)

     

    If webzen want, they can close all servers. Because we're breaking copyright :D

     

    But i am respect ymir entartaiment. Some people got no respect you know :)

     

    What's ever

     

     

    Kind Regards

    HaveBeen

  3. import uiScriptLocale
    
    ROOT_PATH = "d:/ymir work/ui/public/"
    
    TEMPORARY_X = +13
    BUTTON_TEMPORARY_X = 5
    PVP_X = -10
    
    LINE_LABEL_X 	= 30
    LINE_DATA_X 	= 90
    LINE_STEP	= 0
    SMALL_BUTTON_WIDTH 	= 45
    MIDDLE_BUTTON_WIDTH 	= 65
    
    window = {
    	"name" : "GameOptionDialog",
    	"style" : ("movable", "float",),
    
    	"x" : 0,
    	"y" : 0,
    
    	"width" : 300,
    	"height" : 25*11+8,
    
    	"children" :
    	(
    		{
    			"name" : "board",
    			"type" : "board",
    
    			"x" : 0,
    			"y" : 0,
    
    			"width" : 300,
    			"height" : 25*11+8,
    
    			"children" :
    			(
    				## Title
    				{
    					"name" : "titlebar",
    					"type" : "titlebar",
    					"style" : ("attach",),
    
    					"x" : 8,
    					"y" : 8,
    
    					"width" : 284,
    					"color" : "gray",
    
    					"children" :
    					(
    						{ "name":"titlename", "type":"text", "x":0, "y":3, 
    						"text" : uiScriptLocale.GAMEOPTION_TITLE, 
    						"horizontal_align":"center", "text_horizontal_align":"center" },
    					),
    				},
    
    				## 이름색
    				{
    					"name" : "name_color",
    					"type" : "text",
    
    					"x" : LINE_LABEL_X,
    					"y" : 40+2,
    
    					"text" : uiScriptLocale.OPTION_NAME_COLOR,
    				},
    				{
    					"name" : "name_color_normal",
    					"type" : "radio_button",
    
    					"x" : LINE_DATA_X+MIDDLE_BUTTON_WIDTH*0,
    					"y" : 40,
    
    					"text" : uiScriptLocale.OPTION_NAME_COLOR_NORMAL,
    
    					"default_image" : ROOT_PATH + "Middle_Button_01.sub",
    					"over_image" : ROOT_PATH + "Middle_Button_02.sub",
    					"down_image" : ROOT_PATH + "Middle_Button_03.sub",
    				},
    				{
    					"name" : "name_color_empire",
    					"type" : "radio_button",
    
    					"x" : LINE_DATA_X+MIDDLE_BUTTON_WIDTH*1,
    					"y" : 40,
    
    					"text" : uiScriptLocale.OPTION_NAME_COLOR_EMPIRE,
    
    					"default_image" : ROOT_PATH + "Middle_Button_01.sub",
    					"over_image" : ROOT_PATH + "Middle_Button_02.sub",
    					"down_image" : ROOT_PATH + "Middle_Button_03.sub",
    				},
    
    				## 타겟창
    				{
    					"name" : "target_board",
    					"type" : "text",
    
    					"x" : LINE_LABEL_X,
    					"y" : 65+2,
    
    					"text" : uiScriptLocale.OPTION_TARGET_BOARD,
    				},
    				{
    					"name" : "target_board_no_view",
    					"type" : "radio_button",
    
    					"x" : LINE_DATA_X+MIDDLE_BUTTON_WIDTH*0,
    					"y" : 65,
    
    					"text" : uiScriptLocale.OPTION_TARGET_BOARD_NO_VIEW,
    
    					"default_image" : ROOT_PATH + "Middle_Button_01.sub",
    					"over_image" : ROOT_PATH + "Middle_Button_02.sub",
    					"down_image" : ROOT_PATH + "Middle_Button_03.sub",
    				},
    				{
    					"name" : "target_board_view",
    					"type" : "radio_button",
    
    					"x" : LINE_DATA_X+MIDDLE_BUTTON_WIDTH*1,
    					"y" : 65,
    
    					"text" : uiScriptLocale.OPTION_TARGET_BOARD_VIEW,
    
    					"default_image" : ROOT_PATH + "Middle_Button_01.sub",
    					"over_image" : ROOT_PATH + "Middle_Button_02.sub",
    					"down_image" : ROOT_PATH + "Middle_Button_03.sub",
    				},
    
    				
    				## PvP Mode
    				{
    					"name" : "pvp_mode",
    					"type" : "text",
    
    					"x" : LINE_LABEL_X,
    					"y" : 90+2,
    
    					"text" : uiScriptLocale.OPTION_PVPMODE,
    				},
    				{
    					"name" : "pvp_peace",
    					"type" : "radio_button",
    
    					"x" : LINE_DATA_X+SMALL_BUTTON_WIDTH*0,
    					"y" : 90,
    
    					"text" : uiScriptLocale.OPTION_PVPMODE_PEACE,
    					"tooltip_text" : uiScriptLocale.OPTION_PVPMODE_PEACE_TOOLTIP,
    
    					"default_image" : ROOT_PATH + "small_Button_01.sub",
    					"over_image" : ROOT_PATH + "small_Button_02.sub",
    					"down_image" : ROOT_PATH + "small_Button_03.sub",
    				},
    				{
    					"name" : "pvp_revenge",
    					"type" : "radio_button",
    
    					"x" : LINE_DATA_X+SMALL_BUTTON_WIDTH*1,
    					"y" : 90,
    
    					"text" : uiScriptLocale.OPTION_PVPMODE_REVENGE,
    					"tooltip_text" : uiScriptLocale.OPTION_PVPMODE_REVENGE_TOOLTIP,
    
    					"default_image" : ROOT_PATH + "small_Button_01.sub",
    					"over_image" : ROOT_PATH + "small_Button_02.sub",
    					"down_image" : ROOT_PATH + "small_Button_03.sub",
    				},
    				{
    					"name" : "pvp_guild",
    					"type" : "radio_button",
    
    					"x" : LINE_DATA_X+SMALL_BUTTON_WIDTH*2,
    					"y" : 90,
    
    					"text" : uiScriptLocale.OPTION_PVPMODE_GUILD,
    					"tooltip_text" : uiScriptLocale.OPTION_PVPMODE_GUILD_TOOLTIP,
    
    					"default_image" : ROOT_PATH + "small_Button_01.sub",
    					"over_image" : ROOT_PATH + "small_Button_02.sub",
    					"down_image" : ROOT_PATH + "small_Button_03.sub",
    				},
    				{
    					"name" : "pvp_free",
    					"type" : "radio_button",
    
    					"x" : LINE_DATA_X+SMALL_BUTTON_WIDTH*3,
    					"y" : 90,
    
    					"text" : uiScriptLocale.OPTION_PVPMODE_FREE,
    					"tooltip_text" : uiScriptLocale.OPTION_PVPMODE_FREE_TOOLTIP,
    
    					"default_image" : ROOT_PATH + "small_Button_01.sub",
    					"over_image" : ROOT_PATH + "small_Button_02.sub",
    					"down_image" : ROOT_PATH + "small_Button_03.sub",
    				},
    
    				## Block
    				{
    					"name" : "block",
    					"type" : "text",
    
    					"x" : LINE_LABEL_X,
    					"y" : 115+2,
    
    					"text" : uiScriptLocale.OPTION_BLOCK,
    				},
    				{
    					"name" : "block_exchange_button",
    					"type" : "toggle_button",
    
    					"x" : LINE_DATA_X+MIDDLE_BUTTON_WIDTH*0,
    					"y" : 115,
    
    					"text" : uiScriptLocale.OPTION_BLOCK_EXCHANGE,
    
    					"default_image" : ROOT_PATH + "middle_button_01.sub",
    					"over_image" : ROOT_PATH + "middle_button_02.sub",
    					"down_image" : ROOT_PATH + "middle_button_03.sub",
    				},
    				{
    					"name" : "block_party_button",
    					"type" : "toggle_button",
    
    					"x" : LINE_DATA_X+MIDDLE_BUTTON_WIDTH*1,
    					"y" : 115,
    
    					"text" : uiScriptLocale.OPTION_BLOCK_PARTY,
    
    					"default_image" : ROOT_PATH + "middle_button_01.sub",
    					"over_image" : ROOT_PATH + "middle_button_02.sub",
    					"down_image" : ROOT_PATH + "middle_button_03.sub",
    				},
    				{
    					"name" : "block_guild_button",
    					"type" : "toggle_button",
    
    					"x" : LINE_DATA_X+MIDDLE_BUTTON_WIDTH*2,
    					"y" : 115,
    
    					"text" : uiScriptLocale.OPTION_BLOCK_GUILD,
    
    					"default_image" : ROOT_PATH + "middle_button_01.sub",
    					"over_image" : ROOT_PATH + "middle_button_02.sub",
    					"down_image" : ROOT_PATH + "middle_button_03.sub",
    				},
    				{
    					"name" : "block_whisper_button",
    					"type" : "toggle_button",
    
    					"x" : LINE_DATA_X+MIDDLE_BUTTON_WIDTH*0,
    					"y" : 140,
    
    					"text" : uiScriptLocale.OPTION_BLOCK_WHISPER,
    
    					"default_image" : ROOT_PATH + "middle_button_01.sub",
    					"over_image" : ROOT_PATH + "middle_button_02.sub",
    					"down_image" : ROOT_PATH + "middle_button_03.sub",
    				},
    				{
    					"name" : "block_friend_button",
    					"type" : "toggle_button",
    
    					"x" : LINE_DATA_X+MIDDLE_BUTTON_WIDTH*1,
    					"y" : 140,
    
    					"text" : uiScriptLocale.OPTION_BLOCK_FRIEND,
    
    					"default_image" : ROOT_PATH + "middle_button_01.sub",
    					"over_image" : ROOT_PATH + "middle_button_02.sub",
    					"down_image" : ROOT_PATH + "middle_button_03.sub",
    				},
    				{
    					"name" : "block_party_request_button",
    					"type" : "toggle_button",
    
    					"x" : LINE_DATA_X+MIDDLE_BUTTON_WIDTH*2,
    					"y" : 140,
    
    					"text" : uiScriptLocale.OPTION_BLOCK_PARTY_REQUEST,
    
    					"default_image" : ROOT_PATH + "middle_button_01.sub",
    					"over_image" : ROOT_PATH + "middle_button_02.sub",
    					"down_image" : ROOT_PATH + "middle_button_03.sub",
    				},
    
    				## Chat
    				{
    					"name" : "chat",
    					"type" : "text",
    
    					"x" : LINE_LABEL_X,
    					"y" : 165+2,
    
    					"text" : uiScriptLocale.OPTION_VIEW_CHAT,
    				},
    				{
    					"name" : "view_chat_on_button",
    					"type" : "radio_button",
    
    					"x" : LINE_DATA_X,
    					"y" : 165,
    
    					"text" : uiScriptLocale.OPTION_VIEW_CHAT_ON,
    
    					"default_image" : ROOT_PATH + "middle_button_01.sub",
    					"over_image" : ROOT_PATH + "middle_button_02.sub",
    					"down_image" : ROOT_PATH + "middle_button_03.sub",
    				},
    				{
    					"name" : "view_chat_off_button",
    					"type" : "radio_button",
    
    					"x" : LINE_DATA_X+MIDDLE_BUTTON_WIDTH,
    					"y" : 165,
    
    					"text" : uiScriptLocale.OPTION_VIEW_CHAT_OFF,
    
    					"default_image" : ROOT_PATH + "middle_button_01.sub",
    					"over_image" : ROOT_PATH + "middle_button_02.sub",
    					"down_image" : ROOT_PATH + "middle_button_03.sub",
    				},
    
    				## Always Show Name
    				{
    					"name" : "always_show_name",
    					"type" : "text",
    
    					"x" : LINE_LABEL_X,
    					"y" : 190+2,
    
    					"text" : uiScriptLocale.OPTION_ALWAYS_SHOW_NAME,
    				},
    				{
    					"name" : "always_show_name_on_button",
    					"type" : "radio_button",
    
    					"x" : LINE_DATA_X,
    					"y" : 190,
    
    					"text" : uiScriptLocale.OPTION_ALWAYS_SHOW_NAME_ON,
    
    					"default_image" : ROOT_PATH + "middle_button_01.sub",
    					"over_image" : ROOT_PATH + "middle_button_02.sub",
    					"down_image" : ROOT_PATH + "middle_button_03.sub",
    				},
    				{
    					"name" : "always_show_name_off_button",
    					"type" : "radio_button",
    
    					"x" : LINE_DATA_X+MIDDLE_BUTTON_WIDTH,
    					"y" : 190,
    
    					"text" : uiScriptLocale.OPTION_ALWAYS_SHOW_NAME_OFF,
    
    					"default_image" : ROOT_PATH + "middle_button_01.sub",
    					"over_image" : ROOT_PATH + "middle_button_02.sub",
    					"down_image" : ROOT_PATH + "middle_button_03.sub",
    				},
    
    				## Effect On/Off
    				{
    					"name" : "effect_on_off",
    					"type" : "text",
    
    					"x" : LINE_LABEL_X,
    					"y" : 215+2,
    
    					"text" : uiScriptLocale.OPTION_EFFECT,
    				},
    				{
    					"name" : "show_damage_on_button",
    					"type" : "radio_button",
    
    					"x" : LINE_DATA_X,
    					"y" : 215,
    
    					"text" : uiScriptLocale.OPTION_VIEW_CHAT_ON,
    
    					"default_image" : ROOT_PATH + "middle_button_01.sub",
    					"over_image" : ROOT_PATH + "middle_button_02.sub",
    					"down_image" : ROOT_PATH + "middle_button_03.sub",
    				},
    				{
    					"name" : "show_damage_off_button",
    					"type" : "radio_button",
    
    					"x" : LINE_DATA_X+MIDDLE_BUTTON_WIDTH,
    					"y" : 215,
    
    					"text" : uiScriptLocale.OPTION_VIEW_CHAT_OFF,
    
    					"default_image" : ROOT_PATH + "middle_button_01.sub",
    					"over_image" : ROOT_PATH + "middle_button_02.sub",
    					"down_image" : ROOT_PATH + "middle_button_03.sub",
    				},
    
    				## 판매문구
    				{
    					"name" : "salestext_on_off",
    					"type" : "text",
    
    					"x" : LINE_LABEL_X,
    					"y" : 240+2,
    
    					"text" : uiScriptLocale.OPTION_SALESTEXT,
    				},
    				{
    					"name" : "salestext_on_button",
    					"type" : "radio_button",
    
    					"x" : LINE_DATA_X,
    					"y" : 240,
    
    					"text" : uiScriptLocale.OPTION_SALESTEXT_VIEW_ON,
    
    					"default_image" : ROOT_PATH + "middle_button_01.sub",
    					"over_image" : ROOT_PATH + "middle_button_02.sub",
    					"down_image" : ROOT_PATH + "middle_button_03.sub",
    				},
    				{
    					"name" : "salestext_off_button",
    					"type" : "radio_button",
    
    					"x" : LINE_DATA_X+MIDDLE_BUTTON_WIDTH,
    					"y" : 240,
    
    					"text" : uiScriptLocale.OPTION_SALESTEXT_VIEW_OFF,
    
    					"default_image" : ROOT_PATH + "middle_button_01.sub",
    					"over_image" : ROOT_PATH + "middle_button_02.sub",
    					"down_image" : ROOT_PATH + "middle_button_03.sub",
    				},				
    			),
    		},
    	),
    }
    

    Try this py. If you don't know, unpack uiscript.epk after open gameoptiondialog.py after replace to this. after pack and log in game

     

    Kind Regards

    HaveBeen

    • Love 1
  4. SYSERR: Apr 15 00:15:47 :: locale_find: LOCALE_ERROR: "ÀÌ¹Ì µÐ°©ÁßÀÎ »óÅÂÀÔ´Ï´Ù.";

    Just take this text and convert to your language after add it in your locale_string.txt

    SYSERR: Apr 15 01:42:40 :: RunState: LUA_ERROR: [string "balik_tutma_yarismasi"]:78: attempt to call global `mysql_query10' (a nil value)
    SYSERR: Apr 15 01:42:40 :: WriteRunningStateToSyserr: LUA_ERROR: quest balik_tutma_yarismasi.start letter

    I think you don't have mysql_query10 function in your questlib.lua and lua does not know this function. If you don't sure, check it.

    UseMobSkill: No skill hit data for mob BILINMIYOR index 0

    This mob has a skill but it does not using this skill in game. Check your mob_proto if you don't know anything, upload original mob_proto.

    DoRefineWithScroll: REFINE : Unknown refine scroll item. Value0: 1

    Check refine_proto.sql if you don't know anything, upload original refine_proto.sql in your db

    GetMoveMotionSpeed: cannot find motion (name Nakajima race 20364 mode 0)

    Have you got Nakajima .msa files in your data? If you don't sure, check it. it does not exist, take from your client.

    DirectQuery: AsyncSQL::DirectQuery : mysql_query error: Table 'player.change_empire' doesn't exist
    query: SELECT change_count FROM change_empire WHERE account_id = 873

    If you don't have change_empire.sql in your db. Upload change_empire.sql in your db after test it again.

    SYSERR: Apr 16 16:13:40 :: Process: UNKNOWN HEADER: 178, LAST HEADER: 0(0), REMAIN BYTES: 785, fd: 88

    Which you are using binary version and game revision, tell me.

    Kind Regards

    HaveBeen

    • Love 1
×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.