05.07.2016, 01:46
Pages: 1 2
05.07.2016, 01:49
Что значит как передать? Передаёшь туда указатели на один отряд и другой. this - скорей всего менеджер битвы. В чём конкретно проблема?
05.07.2016, 01:59
this - это и есть менеджер битвы.
Проблема в том, что на словах я эту функцию прекрасно понимаю, но я не могу написать ее вызов, потому что не знаю как получить и передать в неё эти указатели. Я пытаюсь объяснить, что мне нужнен тупо наглядный пример, шаблон или т.п.
Проблема в том, что на словах я эту функцию прекрасно понимаю, но я не могу написать ее вызов, потому что не знаю как получить и передать в неё эти указатели. Я пытаюсь объяснить, что мне нужнен тупо наглядный пример, шаблон или т.п.
05.07.2016, 02:23
У тебя же есть получение активного отряда. Подставь туда свои числа вместо активной стороны и номера активного отряда и получишь указатель на любой отряд. Берёшь два таких и передаёшь.
А передаются они обычно:
А передаются они обычно:
Code:
BattleStack *s1, *s2;
s1 = ... // получаешь какой-нибудь отряд
s2 = ... // аналогично
if (CompareStackPriority((int)battleManager, s1, s2) == 1)
{
// твои действия
}
05.07.2016, 14:52
Quote:s1 = ... // получаешь какой-нибудь отрядПробовал в таком духе. Не получалось. И поэтому я думал, что передаю не указатель, а занчение по этому адресу.
Code:
NOALIGN struct _BattleStack_ : public _Struct_ // размер 0x548
{
_byte_ already_attack; // +0 ?
И как мне знать, передаю ли я указатель на адрес "X" или значение по этому адресу?
05.07.2016, 15:30
указатели - геморрой, да, сколько я с ними мудохался в десятом классе..
CALL_3(int, __thiscall, 0x464B30, o_BattleMgr_, o_BattleMgr_->stack[side][stack], o_BattleMgr_->stack[side][stack]); вроде, с работы проверить не могу
впрочем, лучше нормально объявить (через указатель на функцию, макросы, всеж, для нереюзаемого кода), но это из дома, если никто до того не поможет
если чо, могу помочь с плагином)
Upd: упс, на самом деле
CALL_3(int, __thiscall, 0x464B30, o_BattleMgr_, &(o_BattleMgr_->stack[side][stack]), &(o_BattleMgr_->stack[side][stack]) );
CALL_3(int, __thiscall, 0x464B30, o_BattleMgr_, o_BattleMgr_->stack[side][stack], o_BattleMgr_->stack[side][stack]); вроде, с работы проверить не могу
впрочем, лучше нормально объявить (через указатель на функцию, макросы, всеж, для нереюзаемого кода), но это из дома, если никто до того не поможет
если чо, могу помочь с плагином)
Upd: упс, на самом деле
CALL_3(int, __thiscall, 0x464B30, o_BattleMgr_, &(o_BattleMgr_->stack[side][stack]), &(o_BattleMgr_->stack[side][stack]) );
05.07.2016, 17:21
feanor Wrote:если чо, могу помочь с плагином)Да. Было бы очень здорово.
Что я делаю не так? Какой инклуд я не подключил? Пишет "o_BattleMgr_: необъявленный идентификатор"
Используемые инклуды: (Click to View)
PHP Code:
#include <windows.h>
#include "BattleFigures_SDK.h"
#include "..\..\include\HotA\homm3.h"
И ещё, могу ли я впихнуть в эту функцию номера стеков не с указанием стороны и стека стороны (0 ... 20 / 0 или 1), а в глобальной нумерации стеков (0 ... 41)?
Spoiler (Click to View)
PHP Code:
// функция получения списка приоритета стеков
int __stdcall GetStackPriority()
{
int a = 0; // переменная которая будет хранить кол-во стеков с HP больше нуля
for (j = 0; j <= 41; j++) // для этого создаем цикл и проходим по всем стекам 0 ... 41
{
// проверка на кол-во монстров в стеке в цикле, и если больше нуля, то записывам номер стека в массив
if (GetBattleStackParam1(j, 76) > 0)
{
// потом тут будут также проверки на ослепление, окаменение и паралич
StackPriority[a] = j; // создаем массив [a] со списком монстров, у которых текущее кол-во больше нуля
a++;
}
}
// теперь создаем список приоритетов из имеющегося массива живых стеков через пузырьковую сортировку
for (i = 0; i <= a - 1; i++)
{
// вызываем функцию приоритетов
// v1 = CALL_3(int, __thiscall, 0x464B30, o_BattleMgr_, &(o_BattleMgr_->stack[side][stack]), &(o_BattleMgr_->stack[side][stack]) );
// если второй стек приоритетнее первого
if (CALL_3(int, __thiscall, 0x464B30, o_BattleMgr_, &(o_BattleMgr_->stack(StackPriority[i])), &(o_BattleMgr_->stack(StackPriority[i + 1])) ) != 1)
// тут будут меняться местами стеки [i] и [i + 1] внути массива StackPriority[a]
}
return 1;
}
05.07.2016, 18:36
Quote:Да. Было бы очень здорово.скинь тогда в личку, ближе к ночи посмотрю
Quote:Что я делаю не так? Какой инклуд я не подключил? Пишет "o_BattleMgr_: необъявленный идентификатор"это я пишу вслепую. o_BattleMgr, без подчеркивания после
Quote:И ещё, могу ли я впихнуть в эту функцию номера стеков не с указанием стороны и стека стороны (0 ... 20 / 0 или 1), а в глобальной нумерации стеков (0 ... 41)?[0][30] должно сработать
05.07.2016, 20:38
(05.07.2016 14:52)igrik Wrote: [ -> ]И как мне знать, передаю ли я указатель на адрес "X" или значение по этому адресу?Если у нас есть BattleStack* foo, то:
foo это указатель на экземпляр BattleStack
*foo это экземпляр BattleStack
&foo это указатель на foo, т.е. значение типа BattleStack**.
Pages: 1 2