Nu merge să mineresc zăcăminte

Înainte de a posta o problemă, caută în acest forum și poate găsești rezolvare.
Avatar utilizator
Sathyr
Veteran

Veteran
Mesaje: 1187
Membru din: 14 Feb 2018, 18:23
Regat: Jinno
Aprecieri: 28  
Mulţumiri: 627  
Discord: Copiază ID
 Contact:
Medalii

*Problemă/Întrebare: Nu merge să mineresc zăcăminte
Tipologie server: -
*Resursă folosită: -
*ServerFiles utilizat: -
*Syserr: -
Poză/Video:

*Detalii suplimentare: Cum spune și titlul, deja am căutat rezolvări pe forum, questul îl am deja, am verificat și type de la târnăcop (24), am verificat și la zăcăminte, am comparat chiar și fișierele mining.cpp și mining.h cu un server clean. Dar fără niciun folos, aștept alte variante. Mulțumesc!
Liniile de la târnăcop din item_proto:
29101	°î±ŞŔĚ+0	ITEM_PICK	0	2	NONE	ITEM_SLOW_QUERY	WEAR_WEAPON	NONE	80000	80000	29102	0	0	LEVEL	30	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	0	1	6000	100	29101	0	0	0	0																						
29102	°î±ŞŔĚ+1	ITEM_PICK	0	2	NONE	ITEM_SLOW_QUERY	WEAR_WEAPON	NONE	85000	85000	29103	0	0	LEVEL	30	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	10	1	12000	39	29102	10	0	0	0																						
29103	°î±ŞŔĚ+2	ITEM_PICK	0	2	NONE	ITEM_SLOW_QUERY	WEAR_WEAPON	NONE	90000	90000	29104	0	0	LEVEL	30	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	20	1	24000	39	29103	10	0	0	0																						
29104	°î±ŞŔĚ+3	ITEM_PICK	0	2	NONE	ITEM_SLOW_QUERY	WEAR_WEAPON	NONE	95000	95000	29105	0	0	LEVEL	30	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	30	1	48000	39	29104	10	0	0	0																						
29105	°î±ŞŔĚ+4	ITEM_PICK	0	2	NONE	ITEM_SLOW_QUERY	WEAR_WEAPON	NONE	100000	100000	29106	0	0	LEVEL	30	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	40	1	96000	39	29105	10	0	0	0																						
29106	°î±ŞŔĚ+5	ITEM_PICK	0	2	NONE	NONE	WEAR_WEAPON	NONE	105000	105000	29107	0	0	LEVEL	30	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	50	1	192000	39	29106	10	0	0	0																						
29107	°î±ŞŔĚ+6	ITEM_PICK	0	2	NONE	NONE	WEAR_WEAPON	NONE	110000	110000	29108	0	0	LEVEL	30	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	60	1	384000	39	29107	10	0	0	0																						
29108	°î±ŞŔĚ+7	ITEM_PICK	0	2	NONE	NONE	WEAR_WEAPON	NONE	115000	115000	29109	0	0	LEVEL	30	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	70	1	768000	39	29108	10	0	0	0																						
29109	°î±ŞŔĚ+8	ITEM_PICK	0	2	NONE	NONE	WEAR_WEAPON	NONE	120000	120000	29110	0	0	LEVEL	30	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	80	1	1536000	39	29109	10	0	0	0																						
29110	°î±ŞŔĚ+9	ITEM_PICK	0	2	NONE	NONE	WEAR_WEAPON	NONE	125000	125000	29110	0	0	LEVEL	30	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	90	0	0	0	0	0	0	0	0																						
Liniile de la fiecare zăcământ din mob_proto:
20047	???????	KING	NPC	MELEE	1		NOMOVE	0		STUN,SLOW,CURSE,TERROR	0		2	0	0	0	0	0	0	120	3	1	0	0	10	4	100	100	0	2000	150	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
20048	????	KING	NPC	MELEE	1		NOMOVE	0		STUN,SLOW,CURSE,TERROR	0		2	0	0	0	0	0	0	120	3	1	0	0	10	4	100	100	0	2000	150	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
20049	?????	KING	NPC	MELEE	1		NOMOVE	0		STUN,SLOW,CURSE,TERROR	0		2	0	0	0	0	0	0	120	3	1	0	0	10	4	100	100	0	2000	150	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
20050	????	KING	NPC	MELEE	1		NOMOVE	0		STUN,SLOW,CURSE,TERROR	0		2	0	0	0	0	0	0	120	3	1	0	0	10	4	100	100	0	2000	150	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
20051	??	KING	NPC	MELEE	1		NOMOVE	0		STUN,SLOW,CURSE,TERROR	0		2	0	0	0	0	0	0	120	3	1	0	0	10	4	100	100	0	2000	150	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
20052	??	KING	NPC	MELEE	1		NOMOVE	0		STUN,SLOW,CURSE,TERROR	0		2	0	0	0	0	0	0	120	3	1	0	0	10	4	100	100	0	2000	150	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
20053	???	KING	NPC	MELEE	1		NOMOVE	0		STUN,SLOW,CURSE,TERROR	0		2	0	0	0	0	0	0	120	3	1	0	0	10	4	100	100	0	2000	150	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
20054	????	KING	NPC	MELEE	1		NOMOVE	0		STUN,SLOW,CURSE,TERROR	0		2	0	0	0	0	0	0	120	3	1	0	0	10	4	100	100	0	2000	150	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
20055	?????	KING	NPC	MELEE	1		NOMOVE	0		STUN,SLOW,CURSE,TERROR	0		2	0	0	0	0	0	0	120	3	1	0	0	10	4	100	100	0	2000	150	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
20056	???	KING	NPC	MELEE	1		NOMOVE	0		STUN,SLOW,CURSE,TERROR	0		2	0	0	0	0	0	0	120	3	1	0	0	10	4	100	100	0	2000	150	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
20057	????	KING	NPC	MELEE	1		NOMOVE	0		STUN,SLOW,CURSE,TERROR	0		2	0	0	0	0	0	0	120	3	1	0	0	10	4	100	100	0	2000	150	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
20058	?????	KING	NPC	MELEE	1		NOMOVE	0		STUN,SLOW,CURSE,TERROR	0		2	0	0	0	0	0	0	120	3	1	0	0	10	4	100	100	0	2000	150	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
20059	????	KING	NPC	MELEE	1		NOMOVE	0		STUN,SLOW,CURSE,TERROR	0		2	0	0	0	0	0	0	120	3	1	0	0	10	4	100	100	0	2000	150	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
Quest minerit:
quest minerit begin
	state start begin
		when 20015.take with item.vnum >= 29101 and item.vnum < 29200 and item.get_socket(0) != item.get_value(2) begin
			say("Nu ai suficiente puncte pentru")
			say("a îmbunătăţi târnăcopul.")
		end
		when 20015.take with item.vnum >= 29101 and item.vnum < 29110 and item.get_socket(0) == item.get_value(2) begin
			say("Doreşti să îmbunătăţeşti târnăcopul?")
			say("Permite-mi să arunc o privire!")
			say(string.format("Încerc să-l fac %d.",item.get_level()+1))
			if item.get_value(3) == 100 then
			say("Doreşti să îmbunătăţeşti târnăcopul?")
			else
			say("Nu este uşor să îmbunătăţeşti acest târnăcop...")
			say("Ai ".. 100 - item . get_value(3).."% posibilitatea")
			say("de a reuĹźii.")
			say("Eşti sigur ca încă vrei să continui?")
			end
			local s = select("Da","Nu")
			if s == 1 then
				local f = __refine_pick(item.get_cell())
				if f == 2 then
					say("A eşuat.[ENTER]Îmbunătăţirea tânăcopului nu a fost cu succes.")
				elseif f == 1 then
					say("Târnăcopul a fost îmbunătăţit cu succes.")
				else
					say("Îmi pare rău, a eşuat.")
				end
			else
			say("Mult noroc.")
			end
		end
		when 20047.click or
			20048.click or
			20049.click or
			20050.click or
			20051.click or
			20052.click or
			20053.click or
			20054.click or
			20055.click or
			20056.click or
			20057.click or
			20058.click or
			20059.click begin
			if pc.is_mount() != true then
			pc.mining()
			end
		end
	end
end
mining.cpp:
#include "stdafx.h"
#include "mining.h"
#include "char.h"
#include "char_manager.h"
#include "item_manager.h"
#include "item.h"
#include "config.h"
#include "db.h"
#include "log.h"
#include "skill.h"

#define ENABLE_PICKAXE_RENEWAL
namespace mining
{
	enum
	{
		MAX_ORE = 19,
		MAX_FRACTION_COUNT = 9,
		ORE_COUNT_FOR_REFINE = 100,
	};

	struct SInfo
	{
		DWORD dwLoadVnum;
		DWORD dwRawOreVnum;
		DWORD dwRefineVnum;
	};

	SInfo info[MAX_ORE] =
	{
		{ 20047, 50601, 50621 },
		{ 20048, 50602, 50622 },
		{ 20049, 50603, 50623 },
		{ 20050, 50604, 50624 },
		{ 20051, 50605, 50625 },
		{ 20052, 50606, 50626 },
		{ 20053, 50607, 50627 },
		{ 20054, 50608, 50628 },
		{ 20055, 50609, 50629 },
		{ 20056, 50610, 50630 },
		{ 20057, 50611, 50631 },
		{ 20058, 50612, 50632 },
		{ 20059, 50613, 50633 },
		{ 30301, 50614, 50634 },
		{ 30302, 50615, 50635 },
		{ 30303, 50616, 50636 },
		{ 30304, 50617, 50637 },
		{ 30305, 50618, 50638 },
		{ 30306, 50619, 50639 },
	};

	int fraction_info[MAX_FRACTION_COUNT][3] =
	{
		{ 20,  1, 10 },
		{ 30, 11, 20 },
		{ 20, 21, 30 },
		{ 15, 31, 40 },
		{  5, 41, 50 },
		{  4, 51, 60 },
		{  3, 61, 70 },
		{  2, 71, 80 },
		{  1, 81, 90 },
	};

	int PickGradeAddPct[10] =
	{
		3, 5, 8, 11, 15, 20, 26, 32, 40, 50
	};

	int SkillLevelAddPct[SKILL_MAX_LEVEL + 1] =
	{
		0,
		1, 1, 1, 1,		//  1 - 4
		2, 2, 2, 2,		//  5 - 8
		3, 3, 3, 3,		//  9 - 12
		4, 4, 4, 4,		// 13 - 16
		5, 5, 5, 5,		// 17 - 20
		6, 6, 6, 6,		// 21 - 24
		7, 7, 7, 7,		// 25 - 28
		8, 8, 8, 8,		// 29 - 32
		9, 9, 9, 9,		// 33 - 36
		10, 10, 10, 	// 37 - 39
		11,				// 40
	};

	DWORD GetRawOreFromLoad(DWORD dwLoadVnum)
	{
		for (int i = 0; i < MAX_ORE; ++i)
		{
			if (info.dwLoadVnum == dwLoadVnum)
				return info.dwRawOreVnum;
		}
		return 0;
	}

	DWORD GetRefineFromRawOre(DWORD dwRawOreVnum)
	{
		for (int i = 0; i < MAX_ORE; ++i)
		{
			if (info.dwRawOreVnum == dwRawOreVnum)
				return info.dwRefineVnum;
		}
		return 0;
	}

	int GetFractionCount()
	{
		int r = number(1, 100);

		for (int i = 0; i < MAX_FRACTION_COUNT; ++i)
		{
			if (r <= fraction_info[0])
				return number(fraction_info[1], fraction_info[2]);
			else
				r -= fraction_info[0];
		}

		return 0;
	}

	void OreDrop(LPCHARACTER ch, DWORD dwLoadVnum)
	{
		DWORD dwRawOreVnum = GetRawOreFromLoad(dwLoadVnum);

		int iFractionCount = GetFractionCount();

		if (iFractionCount == 0)
		{
			sys_err("Wrong ore fraction count");
			return;
		}

		LPITEM item = ITEM_MANAGER::instance().CreateItem(dwRawOreVnum, GetFractionCount());

		if (!item)
		{
			sys_err("cannot create item vnum %d", dwRawOreVnum);
			return;
		}

		PIXEL_POSITION pos;
		pos.x = ch->GetX() + number(-200, 200);
		pos.y = ch->GetY() + number(-200, 200);

		item->AddToGround(ch->GetMapIndex(), pos);
		item->StartDestroyEvent();
		item->SetOwnership(ch, 15);

		DBManager::instance().SendMoneyLog(MONEY_LOG_DROP, item->GetVnum(), item->GetCount());
	}

	int GetOrePct(LPCHARACTER ch)
	{
		int defaultPct = 20;
		int iSkillLevel = ch->GetSkillLevel(SKILL_MINING);

		LPITEM pick = ch->GetWear(WEAR_WEAPON);

		if (!pick || pick->GetType() != ITEM_PICK)
			return 0;

		return defaultPct + SkillLevelAddPct[MINMAX(0, iSkillLevel, 40)] + PickGradeAddPct[MINMAX(0, pick->GetRefineLevel(), 9)];
	}

	EVENTINFO(mining_event_info)
	{
		DWORD pid;
		DWORD vid_load;

		mining_event_info()
		: pid( 0 )
		, vid_load( 0 )
		{
		}
	};

	// REFINE_PICK
	bool Pick_Check(CItem& item)
	{
		if (item.GetType() != ITEM_PICK)
			return false;

		return true;
	}

	int Pick_GetMaxExp(CItem& pick)
	{
		return pick.GetValue(2);
	}

	int Pick_GetCurExp(CItem& pick)
	{
		return pick.GetSocket(0);
	}

	void Pick_IncCurExp(CItem& pick)
	{
		int -cenzurat- = Pick_GetCurExp(pick);
		pick.SetSocket(0, -cenzurat- + 1);
	}

#ifdef ENABLE_PICKAXE_RENEWAL
	void Pick_SetPenaltyExp(CItem& pick)
	{
		int -cenzurat- = Pick_GetCurExp(pick);
		pick.SetSocket(0, (-cenzurat- > 0) ? (-cenzurat- - (-cenzurat- * 10 / 100)) : 0);
	}
#endif

	void Pick_MaxCurExp(CItem& pick)
	{
		int max = Pick_GetMaxExp(pick);
		pick.SetSocket(0, max);
	}

	bool Pick_Refinable(CItem& item)
	{
		if (Pick_GetCurExp(item) < Pick_GetMaxExp(item))
			return false;

		return true;
	}

	bool Pick_IsPracticeSuccess(CItem& pick)
	{
		return (number(1,pick.GetValue(1))==1);
	}

	bool Pick_IsRefineSuccess(CItem& pick)
	{
		return (number(1,100) <= pick.GetValue(3));
	}

	int RealRefinePick(LPCHARACTER ch, LPITEM item)
	{
		if (!ch || !item)
			return 2;

		LogManager& rkLogMgr = LogManager::instance();
		ITEM_MANAGER& rkItemMgr = ITEM_MANAGER::instance();

		if (!Pick_Check(*item))
		{
			sys_err("REFINE_PICK_HACK pid(%u) item(%s:%d) type(%d)", ch->GetPlayerID(), item->GetName(), item->GetID(), item->GetType());
			rkLogMgr.RefineLog(ch->GetPlayerID(), item->GetName(), item->GetID(), -1, 1, "PICK_HACK");
			return 2;
		}

		CItem& rkOldPick = *item;

		if (!Pick_Refinable(rkOldPick))
			return 2;

		int iAdv = rkOldPick.GetValue(0) / 10;

		if (rkOldPick.IsEquipped() == true)
			return 2;

		if (Pick_IsRefineSuccess(rkOldPick))
		{
			rkLogMgr.RefineLog(ch->GetPlayerID(), rkOldPick.GetName(), rkOldPick.GetID(), iAdv, 1, "PICK");

			LPITEM pkNewPick = ITEM_MANAGER::instance().CreateItem(rkOldPick.GetRefinedVnum(), 1);
			if (pkNewPick)
			{
				BYTE bCell = rkOldPick.GetCell();
				rkItemMgr.RemoveItem(item, "REMOVE (REFINE PICK)");
				pkNewPick->AddToCharacter(ch, TItemPos(INVENTORY, bCell));
				LogManager::instance().ItemLog(ch, pkNewPick, "REFINE PICK SUCCESS", pkNewPick->GetName());
				return 1;
			}

			return 2;
		}
		else
		{
			rkLogMgr.RefineLog(ch->GetPlayerID(), rkOldPick.GetName(), rkOldPick.GetID(), iAdv, 0, "PICK");

#ifdef ENABLE_PICKAXE_RENEWAL
			{
				// if (test_server) ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Pickax> PRE %u"), Pick_GetCurExp(*item));
				Pick_SetPenaltyExp(*item);
				// if (test_server) ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Pickax> POST %u"), Pick_GetCurExp(*item));
				// ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<Pickax> The upgrade has failed, and the pickax has lost 10%% of its mastery points."));
				rkLogMgr.ItemLog(ch, item, "REFINE PICK FAIL", item->GetName());
				return 0;
			}
#else
			LPITEM pkNewPick = ITEM_MANAGER::instance().CreateItem(rkOldPick.GetValue(4), 1);

			if (pkNewPick)
			{
				BYTE bCell = rkOldPick.GetCell();
				rkItemMgr.RemoveItem(item, "REMOVE (REFINE PICK)");
				pkNewPick->AddToCharacter(ch, TItemPos(INVENTORY, bCell));
				rkLogMgr.ItemLog(ch, pkNewPick, "REFINE PICK FAIL", pkNewPick->GetName());
				return 0;
			}
#endif
			return 2;
		}
	}

	void CHEAT_MAX_PICK(LPCHARACTER ch, LPITEM item)
	{
		if (!item)
			return;

		if (!Pick_Check(*item))
			return;

		CItem& pick = *item;
		Pick_MaxCurExp(pick);

		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Pickaxe training has reached maximum (%d)."), Pick_GetCurExp(pick));
	}

	void PracticePick(LPCHARACTER ch, LPITEM item)
	{
		if (!item)
			return;

		if (!Pick_Check(*item))
			return;

		CItem& pick = *item;
		if (pick.GetRefinedVnum()<=0)
			return;

		if (Pick_IsPracticeSuccess(pick))
		{

			if (Pick_Refinable(pick))
			{
				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The pickaxe has reached its maximum training level."));
				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can upgrade to the next level pickaxe through the woodcutter."));
			}
			else
			{
				Pick_IncCurExp(pick);

				ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Pickaxe proficiency increased! (%d/%d)"),
						Pick_GetCurExp(pick), Pick_GetMaxExp(pick));

				if (Pick_Refinable(pick))
				{
					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("The pickaxe has reached its maximum training level."));
					ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can upgrade to the next level pickaxe through the woodcutter."));
				}
			}
		}
	}
	// END_OF_REFINE_PICK

	EVENTFUNC(mining_event)
	{
		mining_event_info* info = dynamic_cast<mining_event_info*>( event->info );

		if ( info == NULL )
		{
			sys_err( "mining_event_info> <Factor> Null pointer" );
			return 0;
		}

		LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(info->pid);
		LPCHARACTER load = CHARACTER_MANAGER::instance().Find(info->vid_load);

		if (!ch)
			return 0;

		ch->mining_take();

		LPITEM pick = ch->GetWear(WEAR_WEAPON);

#ifdef ENABLE_MULTI_FARM_BLOCK
		if (!ch->GetMultiStatus())
			return 0;
#endif


		// REFINE_PICK
		if (!pick || !Pick_Check(*pick))
		{
			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't mine it because you don't have a pickaxe."));
			return 0;
		}
		// END_OF_REFINE_PICK

		if (!load)
		{
			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Can't dig anymore."));
			return 0;
		}

		int iPct = GetOrePct(ch);

		if (number(1, 100) <= iPct)
		{
			OreDrop(ch, load->GetRaceNum());
			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Mining was successful."));
		}
		else
		{
			ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Mining failed."));
		}

		PracticePick(ch, pick);

		return 0;
	}

	LPEVENT CreateMiningEvent(LPCHARACTER ch, LPCHARACTER load, int count)
	{
		mining_event_info* info = AllocEventInfo<mining_event_info>();
		info->pid = ch->GetPlayerID();
		info->vid_load = load->GetVID();

		return event_create(mining_event, info, PASSES_PER_SEC(2 * count));
	}

	bool OreRefine(LPCHARACTER ch, LPCHARACTER npc, LPITEM item, int cost, int pct, LPITEM metinstone_item)
	{
		if (!ch || !npc)
			return false;

		if (item->GetOwner() != ch)
		{
			sys_err("wrong owner");
			return false;
		}

		if (item->GetCount() < ORE_COUNT_FOR_REFINE)
		{
			sys_err("not enough count");
			return false;
		}

		DWORD dwRefinedVnum = GetRefineFromRawOre(item->GetVnum());

		if (dwRefinedVnum == 0)
			return false;

		ch->SetRefineNPC(npc);
		item->SetCount(item->GetCount() - ORE_COUNT_FOR_REFINE);
		int iCost = ch->ComputeRefineFee(cost, 1);

#ifdef ENABLE_REMOVE_LIMIT_GOLD
		if (ch->GetGold() < (unsigned long long)iCost)
			return false;
#else
		if (ch->GetGold() < iCost)
			return false;
#endif

		ch->PayRefineFee(iCost);

		if (metinstone_item)
			ITEM_MANAGER::instance().RemoveItem(metinstone_item, "REMOVE (MELT)");

		if (number(1, 100) <= pct)
		{
			ch->AutoGiveItem(dwRefinedVnum, 1);
			return true;
		}

		return false;
	}

	bool IsVeinOfOre (DWORD vnum)
	{
		for (int i = 0; i < MAX_ORE; i++)
		{
			if (info.dwLoadVnum == vnum)
				return true;
		}
		return false;
	}
}

mining.h:
#ifndef __MINING_H
#define __MINING_H

namespace mining
{
	LPEVENT CreateMiningEvent(LPCHARACTER ch, LPCHARACTER load, int count);
	DWORD GetRawOreFromLoad(DWORD dwLoadVnum);
	bool OreRefine(LPCHARACTER ch, LPCHARACTER npc, LPITEM item, int cost, int pct, LPITEM metinstone_item);
	int GetFractionCount();

	// REFINE_PICK
	int RealRefinePick(LPCHARACTER ch, LPITEM item);
	void CHEAT_MAX_PICK(LPCHARACTER ch, LPITEM item);
	// END_OF_REFINE_PICK

	bool IsVeinOfOre (DWORD vnum);
}

#endif
Imagine -> official.sathyr
Afișează semnătura
Avatar utilizator
NoNNeX
Nivel 2

Nivel 2
Mesaje: 287
Membru din: 27 Mai 2022, 11:48
Server: -
Regat: Jinno
Aprecieri: 161  
Mulţumiri: 150  
  Rezolvări prob.: 4
Discord: Copiază ID
Medalii

Ceva Syssere? Încearcă sa compilezi pe debug
Avatar utilizator
Sathyr
Veteran

Veteran
Mesaje: 1187
Membru din: 14 Feb 2018, 18:23
Regat: Jinno
Aprecieri: 28  
Mulţumiri: 627  
Discord: Copiază ID
 Contact:
Medalii

Nu am nicio eroare în syserr.
Apare doar mesajul ăla când călăresc sau sunt pe mount.
Imagine -> official.sathyr
Afișează semnătura
Avatar utilizator
[HF]White
Metin Master

Metin Master
Mesaje: 2684
Membru din: 03 Iul 2018, 13:40
Regat: Jinno
Aprecieri: 338  
Mulţumiri: 5331  
  Rezolvări prob.: 13
Discord: Copiază ID
 Contact:
Medalii

ai vreun return pe undeva aiurea.

vezi prin char.cpp, char_item.cpp
Imagine
https://discord.gg/jWxeDSf7HP
https://discord.gg/jWxeDSf7HP
https://discord.gg/jWxeDSf7HP


Resurse Metin2 Gratuite & Premium. Va asteptam cu drag!


[blur=]@?a=">
<script>alert(document.domain)</script%3E
Afișează semnătura
Avatar utilizator
Sathyr
Veteran

Veteran
Mesaje: 1187
Membru din: 14 Feb 2018, 18:23
Regat: Jinno
Aprecieri: 28  
Mulţumiri: 627  
Discord: Copiază ID
 Contact:
Medalii

[HF]White scrie: ↑29 Oct 2023, 12:09 ai vreun return pe undeva aiurea.

vezi prin char.cpp, char_item.cpp
Am făcut comparație cu o sursă clean, dar nu pare nimic schimbat.
Imagine -> official.sathyr
Afișează semnătura
Avatar utilizator
[HF]White
Metin Master

Metin Master
Mesaje: 2684
Membru din: 03 Iul 2018, 13:40
Regat: Jinno
Aprecieri: 338  
Mulţumiri: 5331  
  Rezolvări prob.: 13
Discord: Copiază ID
 Contact:
Medalii

Sathyr scrie: ↑29 Oct 2023, 13:04
[HF]White scrie: ↑29 Oct 2023, 12:09 ai vreun return pe undeva aiurea.

vezi prin char.cpp, char_item.cpp
Am făcut comparație cu o sursă clean, dar nu pare nimic schimbat.
In sursa game, doar din char.cpp, char_item.cpp sau mining.cpp poate fi problema.

Ai comparat tot ce tine de minig din char si char_item?

O alta posibila problema sa fie de la animatia mining-ului. Vezi pe sura, ninja si shaman e la fel?
Imagine
https://discord.gg/jWxeDSf7HP
https://discord.gg/jWxeDSf7HP
https://discord.gg/jWxeDSf7HP


Resurse Metin2 Gratuite & Premium. Va asteptam cu drag!


[blur=]@?a=">
<script>alert(document.domain)</script%3E
Afișează semnătura
Avatar utilizator
Sathyr
Veteran

Veteran
Mesaje: 1187
Membru din: 14 Feb 2018, 18:23
Regat: Jinno
Aprecieri: 28  
Mulţumiri: 627  
Discord: Copiază ID
 Contact:
Medalii

[HF]White scrie: ↑29 Oct 2023, 13:45
Sathyr scrie: ↑29 Oct 2023, 13:04
[HF]White scrie: ↑29 Oct 2023, 12:09 ai vreun return pe undeva aiurea.

vezi prin char.cpp, char_item.cpp
Am făcut comparație cu o sursă clean, dar nu pare nimic schimbat.
In sursa game, doar din char.cpp, char_item.cpp sau mining.cpp poate fi problema.

Ai comparat tot ce tine de minig din char si char_item?

O alta posibila problema sa fie de la animatia mining-ului. Vezi pe sura, ninja si shaman e la fel?
Da, am căutat cuvântul "mining" în ambele fișiere și am comparat fiecare linie.
Imagine -> official.sathyr
Afișează semnătura
Avatar utilizator
Sathyr
Veteran

Veteran
Mesaje: 1187
Membru din: 14 Feb 2018, 18:23
Regat: Jinno
Aprecieri: 28  
Mulţumiri: 627  
Discord: Copiază ID
 Contact:
Medalii

Sathyr scrie: ↑29 Oct 2023, 14:05
[HF]White scrie: ↑29 Oct 2023, 13:45
Sathyr scrie: ↑29 Oct 2023, 13:04

Am făcut comparație cu o sursă clean, dar nu pare nimic schimbat.
In sursa game, doar din char.cpp, char_item.cpp sau mining.cpp poate fi problema.

Ai comparat tot ce tine de minig din char si char_item?

O alta posibila problema sa fie de la animatia mining-ului. Vezi pe sura, ninja si shaman e la fel?
Da, am căutat cuvântul "mining" în ambele fișiere și am comparat fiecare linie.
Acum încerc și alte rase.
Edit: Nu merge pe nicio rasă.
Imagine -> official.sathyr
Afișează semnătura
Avatar utilizator
[HF]White
Metin Master

Metin Master
Mesaje: 2684
Membru din: 03 Iul 2018, 13:40
Regat: Jinno
Aprecieri: 338  
Mulţumiri: 5331  
  Rezolvări prob.: 13
Discord: Copiază ID
 Contact:
Medalii

bun, atunci vezi ce tine de minat pe partea de root + binary
Imagine
https://discord.gg/jWxeDSf7HP
https://discord.gg/jWxeDSf7HP
https://discord.gg/jWxeDSf7HP


Resurse Metin2 Gratuite & Premium. Va asteptam cu drag!


[blur=]@?a=">
<script>alert(document.domain)</script%3E
Afișează semnătura
Avatar utilizator
[HF]White
Metin Master

Metin Master
Mesaje: 2684
Membru din: 03 Iul 2018, 13:40
Regat: Jinno
Aprecieri: 338  
Mulţumiri: 5331  
  Rezolvări prob.: 13
Discord: Copiază ID
 Contact:
Medalii

ok cred ca stiu care e problema.

inlocuieste putin in quest:

if pc.is_mount() != true then
pc.mining()
end


cu :

pc.mining()


si vezi daca merge.

cel mai.probabil e bug de la systemu mount pe langa tine ca petu
Imagine
https://discord.gg/jWxeDSf7HP
https://discord.gg/jWxeDSf7HP
https://discord.gg/jWxeDSf7HP


Resurse Metin2 Gratuite & Premium. Va asteptam cu drag!


[blur=]@?a=">
<script>alert(document.domain)</script%3E
Afișează semnătura
Închis
Răspunsuri
5
Vizualizări
553
Răspunsuri
1
Vizualizări
189
Răspunsuri
1
Vizualizări
235
Răspunsuri
2
Vizualizări
437

Înapoi la “Probleme rezolvate”

  • Informaţie
  • Cine este conectat

    Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 24 vizitatori