Объявления

Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru.
Я оторву свою задницу от всех дел и обязательно Вас активирую! :smile10:
Добро пожаловать на геройский форум! :smile25:

H3API by RoseKavalier

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1315
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: H3API by RoseKavalier

Сообщение Ben80 » 13 май 2020, 12:12

Поправил свою ошибку и добавил еще одно поле ai_exp_eff_109
Вернуться к началу

offlineas239  
имя: Анатолий
Ветеран
Ветеран
 
Сообщения: 527
Зарегистрирован: 29 дек 2018, 14:17
Пол: Мужчина
Поблагодарили: 38 раз.

Re: H3API by RoseKavalier

Сообщение as239 » 28 май 2020, 17:43

I want to replace the character in the string, but I get crash in the 3rd line:
Код: Выделить всё
   H3String *str = (H3String*)(0x6A7874 + 47 * 4);
   int pos = str->FindFirstOf("10");
   str->Insert(pos, "2");
   str->Insert(pos + 1, "");


The crash is here:
Код: Выделить всё
inline BOOL H3String::Realloc(const int new_size)
{
   return THISCALL_2(BOOL, 0x404B80, this, new_size);
}


pos and string is good.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5547
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2162 раз.

Re: H3API by RoseKavalier

Сообщение AlexSpl » 28 май 2020, 17:49

Там не H3String, а обычная null-terminated строка.

Конструктор H3String:

Код: Выделить всё
_H3API_ H3String::H3String() :
   str(nullptr),
   length(0),
   capacity(0)
{
}
Вернуться к началу

offlineas239  
имя: Анатолий
Ветеран
Ветеран
 
Сообщения: 527
Зарегистрирован: 29 дек 2018, 14:17
Пол: Мужчина
Поблагодарили: 38 раз.

Re: H3API by RoseKavalier

Сообщение as239 » 28 май 2020, 17:51

А как нибудь по простому можно в ней производить замену символов?
Как я понимаю это массив char, но как его считать не зная размера?
Т.е. как тогда вместо H3String в этом примере, получить char *str[]?
Имея массив символов, замену уже сделать не проблема.
Последний раз редактировалось as239 28 май 2020, 17:55, всего редактировалось 1 раз.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5547
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2162 раз.

Re: H3API by RoseKavalier

Сообщение AlexSpl » 28 май 2020, 17:54

Просто прочитайте её в char* и далее стандартные операции со строками.

Размер не нужен. Ведь char* - это указатель на первый байт строки.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5547
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2162 раз.

Re: H3API by RoseKavalier

Сообщение AlexSpl » 28 май 2020, 18:02

Т.е. смотрите: Вы не изменяете оригинальную строку, а подменяете её адрес на адрес собственной строки. А собственную строку уже меняете, как хотите.
Вернуться к началу

offlineas239  
имя: Анатолий
Ветеран
Ветеран
 
Сообщения: 527
Зарегистрирован: 29 дек 2018, 14:17
Пол: Мужчина
Поблагодарили: 38 раз.

Re: H3API by RoseKavalier

Сообщение as239 » 28 май 2020, 18:08

Это я понял.
Я не знаю как работать со строкой char*.
Вот мне удалось ее получить:
Код: Выделить всё
char *str = *(char**)(0x6A7874 + 48 * 4);

И как дальше, например, найти в ней какой-то символ, и потом заменить его.
В данном случае, полностью заменять строку, не самый лучший вариант, т.к. придется еще заморачиваться с локализацией.
Мне нужно только изменить число, а оно одинаково для всех локализаций.
Последний раз редактировалось as239 28 май 2020, 18:15, всего редактировалось 2 раз(а).
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5547
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2162 раз.

Re: H3API by RoseKavalier

Сообщение AlexSpl » 28 май 2020, 18:13

Вернуться к началу

offlineRoseKavalier  
Мастер
Мастер
 
Сообщения: 331
Зарегистрирован: 23 сен 2017, 17:00
Пол: Не указан
Поблагодарили: 234 раз.

Re: H3API by RoseKavalier

Сообщение RoseKavalier » 28 май 2020, 18:13

TextFile takes a big buffer of text, for example:
Код: Выделить всё
This is a string\tThis is a string\tThis is a string\tThis is a string\tThis is a string\tThis is a string\tThis is a string\tThis is a string\tThis is a string\0

and then tokenizes(something like strtok) this buffer into separate null-terminated char*:
Код: Выделить всё
This is a string\0This is a string\0This is a string\0This is a string\0This is a string\0This is a string\0This is a string\0This is a string\0This is a string\0

Finally each start of these strings is assigned to a vector
Код: Выделить всё
This is a string\0This is a string\0This is a string\0This is a string\0This is a string\0This is a string\0This is a string\0This is a string\0This is a string\0
^vec[0]           ^vec[1]           ^vec[2] ...


While you can replace text in the buffer, it's much simpler to change where vec[n] points to:
Код: Выделить всё
This is a string\0This is a string\0This is a string\0This is a string\0This is a string\0This is a string\0This is a string\0This is a string\0This is a string\0
^vec[0]           \/vec[1]          ^vec[2] ...
                   My new text that can be of any length whatsoever is placed here and has nothing to do with original buffer, it can even be longer than the entirety of the original buffer.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5547
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2162 раз.

Re: H3API by RoseKavalier

Сообщение AlexSpl » 28 май 2020, 18:15

RoseKavalier: We are talking about the srting that is already in the memory. It's just a null-terminated string, so you can work with it like with char* strings.
Вернуться к началу

Пред.След.

Вернуться в Общий раздел

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [bot] и гости: 5