Jump to content

Hunger

Premium
  • Posts

    356
  • Joined

  • Last visited

  • Days Won

    3
  • Feedback

    0%

Posts posted by Hunger

  1. Some dudes from Webzen decided to better send npc’s from a file instead of the server but there are self-named developers like you installing every single system/release from porkmmo just to look better nevermind performance. 
    They didn’t change that just for Penger so he can crack the code they were trying to fix old stupid code. But yes, you are better than Webzen’s developers. He should do as you tell him to because: yes. 

  2. Just now, PetePeter said:

    What are you talking about ? That's just the same packet as the NPC position, just need to add an exception for boss and add the respawn time.
    Like that:

     

    // sectree_manager.h
    struct npc_info
    {
    	BYTE bType;
    	const char* name;
    	long x, y;
    	DWORD dwVnum;
    #ifdef ENABLE_SHOW_BOSS_POS
    	DWORD dwTime;
    	npc_info(BYTE bType, const char* name, long x, long y, DWORD dwVnum, DWORD dwTime) : bType(bType), name(name), x(x), y(y), dwVnum(dwVnum), dwTime(dwTime) {}
    #else
    	npc_info(BYTE bType, const char* name, long x, long y, DWORD dwVnum) : bType(bType), name(name), x(x), y(y), dwVnum(dwVnum) {}
    #endif
    };
    
    // sectree_manager.cpp
    		{
    			np.bType = it->bType;
    			strlcpy(np.name, it->name, sizeof(np.name));
    			np.x = it->x;
    			np.y = it->y;
    			np.dwVnum = it->dwVnum;
    #ifdef ENABLE_SHOW_BOSS_POS
    			np.dwTime = it->dwTime;
    #endif
    			buf.write(&np, sizeof(np));
    		}

     

    That's not a complete code, juste to give you hint about it

    What are you talking about? Npc’s are static. Even Nakajima which is a moving NPC. Are you going to send packages each time a boss moves around the map? Good stuff. Keep up the good work 👍

    • Metin2 Dev 1
  3. I saw this feature on a romanian private server. To avoid the spam you could do a countdown timer to disable the button for 10 seconds or whatever. 
     

    Demo:

    https://metin2.download/picture/GGsif6y94i4wuoP4B241s0rL9GRLq083/.gif
     

    uiinventory.py:

    		self.wndBeltInventoryLayer = None
    		self.wndBeltInventorySlot = None
    		self.expandBtn = None
    		self.minBtn = None
    		##activateall
    		self.UseItemBelt = None
    		
    			self.expandBtn = self.GetChild("ExpandBtn")
    			self.minBtn = self.GetChild("MinimizeBtn")
    			##activateall
    			self.UseItemBelt = self.GetChild("UseBeltItemsButton")
    			
    			self.expandBtn.SetEvent(ui.__mem_func__(self.OpenInventory))
    			self.minBtn.SetEvent(ui.__mem_func__(self.CloseInventory))
    			##activateall
    			self.UseItemBelt.SetEvent(self.ActivateAll)
    			
    		self.wndBeltInventorySlot.RefreshSlot()
    		
    	##activateall
    	def ActivateAll(self):
    		for i in xrange(item.BELT_INVENTORY_SLOT_COUNT):
    			slotNumber = item.BELT_INVENTORY_SLOT_START + i
    			net.SendItemUsePacket(slotNumber)
    		

    Beltinventorywindow.py:

    import uiScriptLocale
    import item
    
    EQUIPMENT_START_INDEX = 90
    BUTTON_ROOT = "d:/ymir work/ui/public/"
    
    window = {
    	"name" : "BeltInventoryWindow",
    
    	## 600 - (width + 오른쪽으로 부터 띄우기 24 px)
    	"x" : SCREEN_WIDTH - 176 - 148,
    	"y" : SCREEN_HEIGHT - 37 - 565 + 209 + 32,
    #	"x" : -148,
    #	"y" : 241,
    	"width" : 148,
    	"height" : 169,
    
    	"type" : "image",
    	"image" : "d:/ymir work/ui/game/belt_inventory/bg.tga",
    	
    
    	"children" :
    	(
    		## Expand Buttons
    		{
    			"name" : "ExpandBtn",
    			"type" : "button",
    
    			"x" : 2,
    			"y" : 15,
    
    			"default_image" : "d:/ymir work/ui/game/belt_inventory/btn_expand_normal.tga",
    			"over_image" : "d:/ymir work/ui/game/belt_inventory/btn_expand_over.tga",
    			"down_image" : "d:/ymir work/ui/game/belt_inventory/btn_expand_down.tga",
    			"disable_image" : "d:/ymir work/ui/game/belt_inventory/btn_expand_disabled.tga",
    		},
    
    		
    		## Belt Inventory Layer (include minimize button)
    		{
    			"name" : "BeltInventoryLayer",
    #			"type" : "board",
    #			"style" : ("attach", "float"),
    
    			"x" : 5,
    			"y" : 0,
    
    			"width" : 148,
    			"height" : 169,
    
    			"children" :
    			(
    				## Minimize Button
    				{
    					"name" : "MinimizeBtn",
    					"type" : "button",
    
    					"x" : 2,
    					"y" : 15,
    
    					"width" : 10,
    
    					"default_image" : "d:/ymir work/ui/game/belt_inventory/btn_minimize_normal.tga",
    					"over_image" : "d:/ymir work/ui/game/belt_inventory/btn_minimize_over.tga",
    					"down_image" : "d:/ymir work/ui/game/belt_inventory/btn_minimize_down.tga",
    					"disable_image" : "d:/ymir work/ui/game/belt_inventory/btn_minimize_disabled.tga",
    				},
    
    				## Real Belt Inventory Board
    				{
    					"name" : "BeltInventoryBoard",
    					"type" : "board",
    					"style" : ("attach", "float"),
    
    					"x" : 10,
    					"y" : 0,
    
    					"width" : 138,
    					"height" : 169,
    
    					"children" :
    					(
    						## Belt Inventory Slots
    						{
    							"name" : "BeltInventorySlot",
    							"type" : "grid_table",
    
    							"x" : 5,
    							"y" : 5,
    
    							"start_index" : item.BELT_INVENTORY_SLOT_START,
    							"x_count" : 4,
    							"y_count" : 4,
    							"x_step" : 32,
    							"y_step" : 32,
    
    							"image" : "d:/ymir work/ui/public/Slot_Base.sub"
    						},
    						##activateall
    						{
    							"name" : "UseBeltItemsButton",
    							"type" : "button",
    							"x" : 0,
    							"y" : 138,
    							"horizontal_align" : "center",
    							"default_image" : BUTTON_ROOT + "AcceptButton00.sub",
    							"over_image" : BUTTON_ROOT + "AcceptButton01.sub",
    							"down_image" : BUTTON_ROOT + "AcceptButton02.sub",
    						},
    					),
    				},
    			)
    		},
    
    	),
    }

    I’m not a python expert so if you can improve the code you are welcome to do so.

    • Metin2 Dev 6
    • Angry 1
    • Sad 1
    • Confused 1
    • Good 8
    • Love 1
    • Love 7
  4. Check if the affect is active then return.

     

    char_item.cpp:

    example:

     

    case APPLY_ATT_SPEED:
    									if (FindAffect(AFFECT_ATT_SPEED, POINT_ATT_SPEED))
    									{
    										ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이미 효과가 걸려 있습니다."));
    										return false;
    									}
    									else
    									{
    										AddAffect(AFFECT_ATT_SPEED, POINT_ATT_SPEED, item->GetValue(2), AFF_ATT_SPEED_POTION, item->GetValue(1), 0, true);
    #ifdef ENABLE_EFFECT_EXTRAPOT	
    										EffectPacket(SE_SPEEDUP_GREEN);
    #endif
    									}
    									break;

     

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