Jump to content

DrTurk

Inactive Member
  • Posts

    220
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by DrTurk

  1. Does someone know how to fix the problem with Invalid Motion Key in debug mode?

     

    float CActorInstance::GetMotionDuration(DWORD dwMotionKey)
    {
    	CGraphicThing * pMotion;
    	
    	if (!GetMotionThingPointer(dwMotionKey, &pMotion))
    	{
    		Tracenf("CActorInstance::GetMotionDuration - Cannot get motion: %d / %d",
    			GET_MOTION_MODE(dwMotionKey), GET_MOTION_INDEX(dwMotionKey));
    		return 0.0f;
    	}
    
    	if (0 == pMotion->GetMotionCount())
    	{
    #ifdef _DEBUG
    		Tracenf("CActorInstance::GetMotionDuration - Invalid Motion Key : %d, %d, %d",
    				GET_MOTION_MODE(dwMotionKey), GET_MOTION_INDEX(dwMotionKey), GET_MOTION_SUB_INDEX(dwMotionKey));
    #endif
    		return 0.0f;
    	}
    
    	CGrannyMotion * pGrannyMotion = pMotion->GetMotionPointer(0);
    	return pGrannyMotion->GetDuration();
    }

     

    When you just stand ingame doing nothing, this gets spammed.

    CActorInstance::GetMotionDuration - Invalid Motion Key : 1, 1, 0

     

    Or can someone give me a hint where I have to search.

  2. ../../../External/include/cryptopp/secblock.h:91:14: error: 'CheckSize' was not                                                                              declared in this scope, and no declarations were found by argument-dependent loo                                                                             kup at the point of instantiation [-fpermissive]
    ../../../External/include/cryptopp/secblock.h:91:14: note: declarations in depen                                                                             dent base 'CryptoPP::AllocatorBase<unsigned int>' are not found by unqualified l                                                                             ookup
    ../../../External/include/cryptopp/secblock.h:91:14: note: use 'this->CheckSize' 

    just do that thing your compiler says to you

    • Love 1
  3. Whats the correct way to initialize structs/classes?

    I dont want to use memset, so I did it that way:

    class ClientHandleInfo
    	{
    	    public:
    		DWORD	dwHandle = 0;
    		DWORD	account_id = 0;
    		DWORD	player_id = 0;
    		BYTE	account_index = 0;
    		char	login[LOGIN_MAX_LEN + 1] = "";
    		char	safebox_password[SAFEBOX_PASSWORD_MAX_LEN + 1] = "";
    		char	ip[MAX_HOST_LENGTH + 1] = "";

    original:

    class ClientHandleInfo
    	{
    	    public:
    		DWORD	dwHandle;
    		DWORD	account_id;
    		DWORD	player_id;
    		BYTE	account_index;
    		char	login[LOGIN_MAX_LEN + 1];
    		char	safebox_password[SAFEBOX_PASSWORD_MAX_LEN + 1];
    		char	ip[MAX_HOST_LENGTH + 1];

    I'm just using "" instead of "/0" because the +1 should do it already, correct me if i'm wrong, I'm learning by doing I never learned C++

     

    Whats the correct initialize for a struct like that? Can someone show me a example?

    typedef struct SShopItemTable
    {
    	DWORD		vnum = 0;
    	WORD		count = 0;
        TItemPos	pos;
    	long long	price = 0;
    	BYTE		display_pos = 0;
    	long		alSockets[ITEM_SOCKET_MAX_NUM];
    	TPlayerItemAttribute	aAttr[ITEM_ATTRIBUTE_MAX_NUM];
    	DWORD 		price_type = 1;
    	DWORD		price_vnum = 0;
    	SShopItemTable() {
    		memset(&alSockets, 0, sizeof(alSockets));
    		memset(&aAttr, 0, sizeof(aAttr));
    	}
    } TShopItemTable;

     

     

  4. the 300 or 80 in your case is not the drop chance, the dropchance in this quest ist calaculated by the ds_drop flag

    Just use this quest:

     

    define gemstone 30270
    define alchemist 20001
    define reward_box 50255
    define gemstone_need_count 10
    define gemstone_trade_max_per_day 30
    define dragon_soul_can_use_level 30
    define dragon_soul_shop_vnum 131
    
    quest dragon_soul begin
    	state start begin
    		when levelup or letter with pc.level >= dragon_soul_can_use_level begin
    			send_letter(gameforge.dragon_soul._1010_sendLetter)
    			local v = find_npc_by_vnum(alchemist)
    			
    			if 0 != v then
    				target.vid("__TARGET__", v, mob_name(alchemist))
    			end
    		end
    		when info or button begin
    			say(gameforge.dragon_soul._1020_say)
    		end
    
    		when alchemist.chat.gameforge.dragon_soul._1030_npcChat with pc.level >= dragon_soul_can_use_level begin
    			target.delete("__TARGET__")
    
    			say_title(mob_name(alchemist))
    			say(gameforge.dragon_soul._1040_say)
    			set_state(state_learning)
    		end
    	end
    	state state_learning begin
    		when letter begin
    			send_letter(gameforge.dragon_soul._1050_sendLetter)
    		end
    		when info or button begin
    			say(gameforge.dragon_soul._1060_say)
    		end
    		when kill begin
    			if npc.is_pc() then
    				return
    			end
    			
    			if pc.count_item(gemstone) < gemstone_need_count then
    				local drop = number(1, 100)
    				if drop <= 10 then
    					game.drop_item_with_ownership(gemstone, 1, 300)
    				end
    			end
    		end
    		when alchemist.chat.gameforge.dragon_soul._1050_sendLetter begin
    			say_title(mob_name(alchemist))
    			if pc.count_item(gemstone) >= gemstone_need_count then
    				say(gameforge.dragon_soul._1070_say)
    				pc.remove_item(gemstone, gemstone_need_count)
    				ds.give_qualification()
    				char_log(pc.get_player_id(), 'DS_QUALIFICATION', 'SUCCESS')
    				pc.give_item2(reward_box)
    				local today = math.floor(get_global_time() / 86400)
    				pc.setf("dragon_soul", "eye_timestamp", today)
    				pc.setf("dragon_soul", "eye_left", 29)
    				set_state(state_farming)
    			else
    				say(gameforge.dragon_soul._1080_say)
    			end
    		end
    	end
    	state state_farming begin
    		when letter begin
    			send_letter(gameforge.dragon_soul._1090_sendLetter)
    		end
    		when info or button begin
    			say_title("Macht des Drachenauges")
    			say(string.format(gameforge.dragon_soul._1100_say, pc.getf("dragon_soul", "eye_left")))
    		end
    		when kill begin
    			if npc.is_pc() then
    				return
    			end
    			
    			local drop = number(1, 100)
    			if drop <= 10 then
    				local eye_left = pc.getf("dragon_soul", "eye_left")
    				local haved_gemstone_number = pc.count_item(gemstone)
    				
    				if eye_left > haved_gemstone_number / gemstone_need_count then
    					game.drop_item_with_ownership(gemstone, 1, 300)
    				end
    			end
    		end
    		when gemstone.pick begin
    			local eye_left = pc.getf("dragon_soul", "eye_left")
    			if eye_left <= 0 then
    				return
    			end
    
    			if pc.count_item(gemstone) >= gemstone_need_count then
    				pc.setf("dragon_soul", "eye_left", eye_left - 1)
    				pc.remove_item(gemstone, gemstone_need_count)
    				pc.give_item2(reward_box)
    				if 1 == eye_left then
    					notice_multiline(gameforge.dragon_soul._1110_notice, notice)
    					set_state(state_closed_season)
    				end
    			end
    		end
    		when alchemist.chat.gameforge.dragon_soul_refine._010_npcChat with ds.is_qualified() != 0 begin
    			say_title(mob_name(alchemist))
    			say (gameforge.dragon_soul_refine._020_say)
    			ds.open_refine_window()
    		end
    
    		when alchemist.chat.gameforge.dragon_soul._100_npcChat with ds.is_qualified() begin
    			setskin(NOWINDOW)
    			npc.open_shop(dragon_soul_shop_vnum)
    		end
    		when alchemist.chat.gameforge.dragon_soul._1120_npcChat begin
    			say_title(mob_name(alchemist))
    			local today = math.floor(get_global_time() / 86400)
    			if today == pc.getf("dragon_soul", "eye_timestamp") then
    				say(gameforge.dragon_soul._1130_say)
    			else
    				say(gameforge.dragon_soul._1140_say)
    				pc.setf("dragon_soul", "eye_timestamp", today)
    				pc.setf("dragon_soul", "eye_left", 30)
    			end	
    		end
    	end
    	state state_closed_season begin
    		when letter begin
    			send_letter(gameforge.dragon_soul._1150_sendLetter)
    		end
    		when info or button begin
    			say(gameforge.dragon_soul._1160_say)
    			local today = math.floor(get_global_time() / 86400)
    			if today == pc.getf("dragon_soul", "eye_timestamp") then
    				say(gameforge.dragon_soul._1170_say)
    			else
    				say(gameforge.dragon_soul._1180_say)
    			end
    		end
    		
    		when alchemist.chat.gameforge.dragon_soul._1090_sendLetter begin
    			say_title(mob_name(alchemist))
    			local today = math.floor(get_global_time() / 86400)
    			if today == pc.getf("dragon_soul", "eye_timestamp") then
    				say(gameforge.dragon_soul._1130_say)
    			else
    				say(gameforge.dragon_soul._1140_say)
    				pc.setf("dragon_soul", "eye_timestamp", today)
    				pc.setf("dragon_soul", "eye_left", 30)
    				set_state(state_farming)
    			end
    		end
    	end
    	-- deprecated states. so, jump to new state.
    	state state_1 begin
    		when login begin
    			set_state(state_learning)
    		end
    	end
    	state state_2 begin
    		when login begin
    			set_state(state_learning)
    		end
    	end
    	state state_3 begin
    		when login begin
    			set_state(state_closed_season)
    		end
    	end
    end
    

     

    • Love 1
  5. You could do it like that:

     

    		when kill begin
    			if npc.is_pc() then
    				return
    			end
    			
    			if pc.count_item(gemstone) < gemstone_need_count then
    				local drop = number(1, 100)
    				if drop <= 10 then
    					game.drop_item_with_ownership(gemstone, 1, 300)
    				end
    			end
    		end
    
    		when kill begin
    			if npc.is_pc() then
    				return
    			end
    			
    			local drop = number(1, 100)
    			if drop <= 10 then
    				local eye_left = pc.getf("dragon_soul", "eye_left")
    				local haved_gemstone_number = pc.count_item(gemstone)
    				
    				if eye_left > haved_gemstone_number / gemstone_need_count then
    					game.drop_item_with_ownership(gemstone, 1, 300)
    				end
    			end
    		end

     

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