wl.illusion Опубликовано 17 января, 2013 Жалоба Поделиться Опубликовано 17 января, 2013 (изменено) [src] Запоминаем значение @autolootХотелось бы дать пояснение для всех, кто начнёт разводить холивар, что мод не мой. Своё авторство доказывать даже не думаю, т.к. не смогу, мод писался несколько лет назад (3 года назад, если быть точным), но из-за смерти eA все мои моды на форуме были потёрты, но мод после оживления форума начал появляться в английской ветке форума без указания авторства (да и нужно ли оно? Пользуйтесь!).ОписаниеЭлементарное и изящное решение для запоминания значения указанного при использовании команды autoloot.УстановкаПравить нужно два файла. Первым правим src/map/atcommand.с, находим функцию команды:ACMD_FUNC(autoloot)В конце функции после: clif_displaymessage(fd, msg_txt(1188)); // Autoloot is now off.Добавляем: pc_setglobalreg(sd, add_str("char_autoloot"), sd->state.autoloot);Теперь правим второй файл src/map/pc.с, находим:void pc_reg_received(struct map_session_data *sd){ uint8 i; sd->vars_ok = true;Добавляем после: sd->state.autoloot = pc_readglobalreg(sd, add_str("char_autoloot"));Всё, пользуемся на здоровье.Принцип работыПринцип работы очень прост, при использовании команды autoloot значение заносится в глобальные переменные персонажа (текстовый файл или база SQL — как у вас настроен сервер). Для этого используется переменная char_autoloot, впринципе, вы можете получить к ней доступ из ваших скриптов: mes "Значение команды @autoloot персонажа: ^3355FF"+char_autoloot+"^000000";Практической пользы в скриптах в этом нет, но если интересно, то можно запрещать использование команды игрокам и создавать NPC с обработкой установки значения команды (но зачем?). Изменено 26 ноября, 2015 пользователем wl.illusion 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
JustHateMe Опубликовано 17 января, 2013 Жалоба Поделиться Опубликовано 17 января, 2013 Спасибо, полезная информация. Ссылка на комментарий Поделиться на другие сайты Поделиться
Leprechaun Опубликовано 26 ноября, 2015 Жалоба Поделиться Опубликовано 26 ноября, 2015 Много варнингов при компиляции на последней рАтене( CC atcommand.catcommand.c: In function 'atcommand_autoloot':atcommand.c:5934:3: warning: passing argument 2 of 'pc_setregistry' makes integer from pointer without a cast [enabled by default] pc_setglobalreg(sd,"char_autoloot",sd->state.autoloot); ^In file included from channel.h:7:0, from atcommand.c:20:pc.h:1053:5: note: expected 'int64' but argument is of type 'char *'int pc_setregistry(struct map_session_data *sd, int64 reg, int val); ^и CC pc.cpc.c: In function 'pc_reg_received':pc.c:1341:2: warning: passing argument 2 of 'pc_readregistry' makes integer from pointer without a cast [enabled by default] sd->state.autoloot = pc_readglobalreg(sd,"char_autoloot"); ^In file included from channel.h:7:0, from pc.c:20:pc.h:1052:5: note: expected 'int64' but argument is of type 'char *' int pc_readregistry(struct map_session_data *sd, int64 reg); ^ Ссылка на комментарий Поделиться на другие сайты Поделиться
Functor Опубликовано 26 ноября, 2015 Жалоба Поделиться Опубликовано 26 ноября, 2015 меняем:pc_setglobalreg(sd,"char_autoloot",sd->state.autoloot);на:pc_setglobalreg(sd, add_str("char_autoloot"), sd->state.autoloot);меняем:sd->state.autoloot = pc_readglobalreg(sd,"char_autoloot");на:sd->state.autoloot = pc_readglobalreg(sd, add_str("char_autoloot")); 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
wl.illusion Опубликовано 26 ноября, 2015 Автор Жалоба Поделиться Опубликовано 26 ноября, 2015 меняем:Поправил. 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Leprechaun Опубликовано 26 ноября, 2015 Жалоба Поделиться Опубликовано 26 ноября, 2015 (изменено) Есть проблема.... чара при заходе автоматически отключает от сервера... он загружается, но не видно ни НПЦ и не может ходить.ВОт что с консоли сервера:[Error]: pc_readregistry: Trying to read reg char_autoloot before it's been loaded![info]: Character 'Leprechaun' logged off.Зато скомпилировалось без проблем)))Походу он считывает при заходе какой % автолут выставлен, но так как он совсем не выставлен, даже не 0, он не может считать и дисконектит. Я думаю что как-то так))) Изменено 26 ноября, 2015 пользователем Leprechaun Ссылка на комментарий Поделиться на другие сайты Поделиться
Functor Опубликовано 26 ноября, 2015 Жалоба Поделиться Опубликовано 26 ноября, 2015 Попробуйте добавить строку:sd->state.autoloot = pc_readglobalreg(sd, add_str("char_autoloot"));в функции pc_reg_received после:sd->vars_ok = true;а не после:int i,j; 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Leprechaun Опубликовано 26 ноября, 2015 Жалоба Поделиться Опубликовано 26 ноября, 2015 Да! Теперь все хорошо работает! Думаю нужно обновить первый пост, выправить то, чтоsd->state.autoloot = pc_readglobalreg(sd, add_str("char_autoloot"));нужно вставлять после void pc_reg_received(struct map_session_data *sd){uint8 i;sd->vars_ok = true; Ссылка на комментарий Поделиться на другие сайты Поделиться
wl.illusion Опубликовано 26 ноября, 2015 Автор Жалоба Поделиться Опубликовано 26 ноября, 2015 в функции pc_reg_received после:sd->vars_ok = true;Это с какой ревизии пошло? У меня такого нет, хотя я пару месяцев не обновлялся. Ссылка на комментарий Поделиться на другие сайты Поделиться
Leprechaun Опубликовано 26 ноября, 2015 Жалоба Поделиться Опубликовано 26 ноября, 2015 Не могу сказать с какой пошло)) Если взять самую последнию... sd->vars_ok = true;такой код присутствует. Ссылка на комментарий Поделиться на другие сайты Поделиться
wl.illusion Опубликовано 26 ноября, 2015 Автор Жалоба Поделиться Опубликовано 26 ноября, 2015 Не могу сказать с какой пошло)) Если взять самую последнию... sd->vars_ok = true;такой код присутствует.Последнюю я уже посмотрел, да там всё переделали, просто интересно с какой версии, чтобы понять зачем такие глобальные изменения. Ссылка на комментарий Поделиться на другие сайты Поделиться
Functor Опубликовано 26 ноября, 2015 Жалоба Поделиться Опубликовано 26 ноября, 2015 Это с какой ревизии пошло? У меня такого нет, хотя я пару месяцев не обновлялся.11 июня 2015 годаScript Engine Upgrade* Upgraded the script engine variables to no longer be limited.* Increased array limit from 127 to 2 billion.* Improvement in overall speed and storage size.* All variable types now support arrays.- Merge from HerculesWS/Hercules@82b583b. Thanks to those who worked on it.https://github.com/r...3064e578e338c60 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Leprechaun Опубликовано 2 июня, 2016 Жалоба Поделиться Опубликовано 2 июня, 2016 Давайте снова поднимем эту тему. Я понимаю что Геркулес от рА несколько изменен, но что именно нужно изменить чтобы применить эту идею в Геркулесе? Ссылка на комментарий Поделиться на другие сайты Поделиться
Leprechaun Опубликовано 2 июня, 2016 Жалоба Поделиться Опубликовано 2 июня, 2016 Если в atcommand.c прописать так: pc_setglobalreg (sd, script->add_str("char_autoloot"), sd->state.autoloot); ерроров нету. Проблема осталась с файлом pc.c, на код: sd->state.autoloot = pc_readglobalreg(sd, script->add_str("char_autoloot"); или на код: sd->state.autoloot = pc_readglobalreg(sd,"char_autoloot"); Ссылка на комментарий Поделиться на другие сайты Поделиться
Functor Опубликовано 3 июня, 2016 Жалоба Поделиться Опубликовано 3 июня, 2016 sd->state.autoloot = pc_readglobalreg(sd, script->add_str("char_autoloot")); 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Leprechaun Опубликовано 4 июня, 2016 Жалоба Поделиться Опубликовано 4 июня, 2016 Спасибо! Я забыл закрыть одну дужку. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения