И так, забрасывал программку что бы отдохнуть. Сегодня взялся и задумался, а что если найти при каких условиях выскакивает окно об ошибке, может там и есть эта зловредная проверка.
Что я нашел?
Label_1CD3:
if (ffe_0.General_WriteDebugLog && ffe_0.General_DetailedDebugLog)
{
UHe.ee("Trader", "Trading of " + current.string_0 + " disabled in trial mode. Code 3");
}
Class3.he(0x10, "Trader Trial Limitation", "Trial verion of a trader may be used to trade skillbooks only. Purchase full version license to trade: {0}", 0x1e, new object[] { current.string_0 });
return 0x3;
Code: C
Это пример того когда выскакивает ошибка, поднялся на уровни выше, где идет вызов Label_1CD3 и нашел следующие
Label_1C4C:
if (ge != 0x96)
{
goto Label_1CD3;
}
}
Code: C
Попробую убрать эти проверки, но(!), таких файлов 3.
Pe.fje(f5e) : Int32
Pe.fPe(f5e) : Int32
Pe.N3e(ffe) : Int32
эти название в нетрефлекторе. Я бы мог добавить сюда все коды, что в этих файлах, но все кто хотел помочь уже сами давно скачали и извращаются или извращались по своему.
В случае успеха выложу готовый exe либо напишу о провале.
Добавлено через 1 час 58 минут
Вообщем сделал вывод, что разобраться сложно, пошел от обратного.
И так, переписываю пост. Иду от обратных значений вызовов.
Label_1CD3:
if (ffe_0.General_WriteDebugLog && ffe_0.General_DetailedDebugLog)
{
UHe.ee("Trader", "Trading of " + current.string_0 + " disabled in trial mode. Code 3");
}
Class3.he(0x10, "Trader Trial Limitation", "Trial verion of a trader may be used to trade skillbooks only. Purchase full version license to trade: {0}", 0x1e, new object[] { current.string_0 });
return 0x3;Code: C#
Label_1CD3: вызывается в Label_1C4C
Label_1C4C:
if (ge != 0x96)
{
goto Label_1CD3;
}Code: C#
Идём выше по цепочке:
Label_1C1C:
if (pe.ge == 0x0)
{
goto Label_1C4C;
}
ge = pe.ge;Code: C#
Label_1C34:
pe = Class0.Oe.Je(ge);
if (pe != null)
{
goto Label_1C1C;
}Code: C#
И вот тут начинаются выкрутасы:
if (flag)
{
using (List<Nne>.Enumerator enumerator = ffe_0.Trader_CurrentOrders.GetEnumerator())
{
Nne current;
while (enumerator.MoveNext()) // - функция до выхода значения false (т.е. получается если bool flag = false оно должно ниже стать таковым, но ни как не true)
{
nIe.VPe pe; // - это для чего тут?
current = enumerator.Current; // - это более менее понятно
nIe.V5e ve = Class0.Re.Je((int) current.se); // - это не понятно (nIe.V5e ve это равно Class0.Re.Je((int) current.se) этому?
if (ve == null) // - если ve = null, то идет вызов 1C65
{
goto Label_1C65; // - вызов проверки на валидность итема
}
int ge = ve.Int32_1; // - а тут что? int ge равен ve.Int32_1 - этому числу? вынесу в примечание.
goto Label_1C34; // - вызов проверок для вывода окна с ошибкой.
Code: C#
И так, вот тут я не понимаю не черта.
Что это делает и чем занимается? Я понимаю что условия если, что то, то то-то.
Что за значение, откуда берутся и почему сравниваются.
Т.е. мне нужно, как то вернуть значение false. Что бы окно не показывалось с ошибкой, каким образом мне это сделать?
Выставить
nIe.V5e ve = false или
Class0.Re.Je((int) current.se) = false? Если да, то выглядит это проще чем кажется. А если нет, то придется подумать, но что то с логикой у меня плоховато.
Примечание,
goto Label_1C65 это:
Label_1C65:
if (ffe_0.General_WriteDebugLog && ffe_0.General_DetailedDebugLog)
{
UHe.ee("Trader", string.Concat(new object[] { "Item with ID ", (int) current.se, ", Name ", current.string_0, " not found in the database. Code 0" }));
}
return 0x0;
Code: C#
Примечание,
public int Int32_1 это:
public int Int32_1
{
get
{
int num;
try
{
num = (int) base[this.ie.de];
}
catch (InvalidCastException exception)
{
throw new StrongTypingException("The value for column 'marketGroupID' in table 'invtypes' is DBNull.", exception);
}
return num;
}
set
{
base[this.ie.de] = value;
}
}Code: C#