Перейти к содержанию

@reloadscriptname


b72g

Рекомендуемые сообщения

Привет всем, вообщем есть задумка о реализации комманды @reloadscriptname. Дело в том что обычный @reloadscript перезагружает все скрипты в афене, всех мобов, нпц и.т.д. Но очень часто нужно перезагрузить всего 1-2 скрипта, тем более если сервер уже рабочий, то перезагрузка всего очень помешает игрокам, тем более все мобы в том числе и МВП заного переродятся на картах.

Вообщем хотел бы узнать, может кто то знает как реализовать такую комманду, которая бы перезагружала 1 скрипт ( ведь он занимает в перезагрузке долю секунды, чем все 800 и более НПЦ )

К примеру, чтобы она перезагружала

@reloadscriptname [ имя нпц ]

или если это проблемотично, то.

@reloadscriptfloder [ и путь папки, с txt для перезагрузки ]

Вообщем если кто знает как сделать подобную комманду напишите пожалуйста, т.к в сорцы я полез совсем недавно и мне еще предстоит многому научиться..

Как всегда идей много , а знаний для реализации не хватает :)

Заранее спасибо :)

Изменено пользователем b72g
Ссылка на комментарий
Поделиться на другие сайты

@loadnpc <path>

Loads an NPC script by path.

Example:

@loadnpc npc/custom/jobmaster.txt

---------------------------------------

@unloadnpc <npc name>

Unloads an NPC.

Example:

@unloadnpc Job Master

---------------------------------------

@unloadnpcfile <path>

Unloads all NPCs in a file.

Example:

@unloadnpcfile npc/custom/jobmaster.txt

Ссылка на комментарий
Поделиться на другие сайты

@loadnpc <path>

Loads an NPC script by path.

Example:

@loadnpc npc/custom/jobmaster.txt

---------------------------------------

@unloadnpc <npc name>

Unloads an NPC.

Example:

@unloadnpc Job Master

---------------------------------------

@unloadnpcfile <path>

Unloads all NPCs in a file.

Example:

@unloadnpcfile npc/custom/jobmaster.txt

Видимо я дурачок :)

Спасибо!

Ссылка на комментарий
Поделиться на другие сайты

Опа =) Первый раз вижу команду @unloadnpcfile.. Давно она есть? А то, помню, в свое время упарился выгружать нпцов по одному, если их несколько в файле было.. А уж дубликаты и вообще вспоминать страшно :D

Ссылка на комментарий
Поделиться на другие сайты

Опа =) Первый раз вижу команду @unloadnpcfile.. Давно она есть? А то, помню, в свое время упарился выгружать нпцов по одному, если их несколько в файле было.. А уж дубликаты и вообще вспоминать страшно :D

https://code.google.com/p/rathena/source/list?path=/trunk/src/map/pc_groups.h&start=16751

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

По сути можно объединить команду @unloadnpcfile и @loadnpc в одну, например в @reloadnpc

Вот мой вариант, который работает, за корректность работы ответственности не несу :rolleyes: :

Открываем ../src/custom/atcommand.inc и добавляем в конце:


ACMD_FUNC(reloadnpc) {
if( !message || !*message ) {
clif_displaymessage(fd, msg_txt(sd,1385)); // Usage: @unloadnpcfile <file name>
return -1;
}
if( npc_unloadfile(message) ){
clif_displaymessage(fd, msg_txt(sd,1386)); // File unloaded. Be aware that mapflags and monsters spawned directly are not removed.
FILE *fp;
if (!message || !*message) {
clif_displaymessage(fd, msg_txt(sd,1132)); // Please enter a script file name (usage: @loadnpc <file name>).
return -1;
}
// check if script file exists
if ((fp = fopen(message, "r")) == NULL) {
clif_displaymessage(fd, msg_txt(sd,261));
return -1;
}
fclose(fp);
// add to list of script sources and run it
npc_addsrcfile(message);
npc_parsesrcfile(message,true);
npc_read_event_script();
clif_displaymessage(fd, msg_txt(sd,262));
return 0;
}
else {
clif_displaymessage(fd, msg_txt(sd,1387)); // File not found.
return -1;
}
return 0;
}

Открываем ../src/custom/atcommand_def.inc и добавляем в конце:


ACMD_DEF(reloadnpc),

Рекомпилим сервер и проверяем, например:

@reloadnpc npc/merchants/advanced_refiner.txt

p.s. Если в скрипте ошибка мапсервер не покажет где она и скрипт не загрузится. Доделаешь сам...

Изменено пользователем SupR1g
Ссылка на комментарий
Поделиться на другие сайты


- script reloadnpc -1,{
OnInit:
bindatcmd "reloadnpc",strnpcinfo(3)+"::OnAtcommand";
end;
OnAtcommand:
if (.@atcmd_numparameters != 1) {
dispbottom "Usage: @reloadnpc npc/path/to/script.txt";
}
atcommand "@unloadnpcfile "+.@atcmd_paramters[0];
atcommand "@loadnpc "+.@atcmd_paramters[0];
dispbottom "Скрипт перезагружен";
end;
}

:lol:

На правах шутки (:

Ссылка на комментарий
Поделиться на другие сайты


- script reloadnpc -1,{
OnInit:
bindatcmd "reloadnpc",strnpcinfo(3)+"::OnAtcommand";
end;
OnAtcommand:
if (.@atcmd_numparameters != 1) {
dispbottom "Usage: @reloadnpc npc/path/to/script.txt";
}
atcommand "@unloadnpcfile "+.@atcmd_paramters[0];
atcommand "@loadnpc "+.@atcmd_paramters[0];
dispbottom "Скрипт перезагружен";
end;
}

:lol:

На правах шутки (:

и так можно? о____О

Ссылка на комментарий
Поделиться на другие сайты


- script reloadnpc -1,{
OnInit:
bindatcmd "reloadnpc",strnpcinfo(3)+"::OnAtcommand";
end;
OnAtcommand:
if (.@atcmd_numparameters != 1) {
dispbottom "Usage: @reloadnpc npc/path/to/script.txt";
}
atcommand "@unloadnpcfile "+.@atcmd_paramters[0];
atcommand "@loadnpc "+.@atcmd_paramters[0];
dispbottom "Скрипт перезагружен";
end;
}

:lol:

На правах шутки (:

и так можно? о____О

Да
Ссылка на комментарий
Поделиться на другие сайты


- script reloadnpc -1,{
OnInit:
bindatcmd "reloadnpc",strnpcinfo(3)+"::OnAtcommand";
end;
OnAtcommand:
if (.@atcmd_numparameters != 1) {
dispbottom "Usage: @reloadnpc npc/path/to/script.txt";
}
atcommand "@unloadnpcfile "+.@atcmd_paramters[0];
atcommand "@loadnpc "+.@atcmd_paramters[0];
dispbottom "Скрипт перезагружен";
end;
}

:lol:

На правах шутки (:

Главное идея, а дальше уже идут варианты (=

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...
14 минуты назад, Elmiria сказал:

погодите, я видно ступила тогда) Это для рА или и для еА тоже?

Открываем ../src/custom/atcommand.inc и добавляем в конце:  <= значит что рА
bindatcmd = rAthena/Hercules

p.s. при @loadnpc не загружаются OnInit, насколько я помню

Изменено пользователем Gendalf
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

тебе весь эмуль скинуть?

PS 

Установлен лимит на отправку нескольких сообщений за определённое время. Пожалуйста, подождите 146 секунд перед отправкой.

че за хня?

Ссылка на комментарий
Поделиться на другие сайты

12 минуты назад, Elmiria сказал:

тебе весь эмуль скинуть?

PS 


Установлен лимит на отправку нескольких сообщений за определённое время. Пожалуйста, подождите 146 секунд перед отправкой.

че за хня?

можно ток папку src

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...
Яндекс.Метрика