b72g

@reloadscriptname

21 сообщение в этой теме

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

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

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

@reloadscriptname [ имя нпц ]

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

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

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

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

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

Изменено пользователем b72g
0

Поделиться сообщением


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

@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

0

Поделиться сообщением


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

@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

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

Спасибо!

0

Поделиться сообщением


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

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

0

Поделиться сообщением


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

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

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

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
0

Поделиться сообщением


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


- 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:

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

0

Поделиться сообщением


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


- 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:

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

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

0

Поделиться сообщением


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


- 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:

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

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

Да
0

Поделиться сообщением


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


- 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:

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

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

0

Поделиться сообщением


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

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

13680905912160.jpeg

1

Поделиться сообщением


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

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

13680905912160.jpeg

xDDD

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 29.03.2014в11:48 AM, Кеник сказал:

Да

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

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
14 минуты назад, Elmiria сказал:

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

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

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

Изменено пользователем Gendalf
1

Поделиться сообщением


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

печаль-беда

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, Elmiria сказал:

печаль-беда

А чо, над под еА?

0

Поделиться сообщением


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

пригодилось бы))  Еще б кто написал @partyleave @partyinvite @partykick )))))

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, Elmiria сказал:

пригодилось бы))  Еще б кто написал @partyleave @partyinvite @partykick )))))

давай эмуль еА, гляну

0

Поделиться сообщением


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

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

PS 

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

че за хня?

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
12 минуты назад, Elmiria сказал:

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

PS 


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

че за хня?

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

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, Gendalf сказал:

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

завтра тогда скину)

0

Поделиться сообщением


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

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас