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

[Скрипт помощника]


Sanasol

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

Вызывает помощника на разных уровнях разных. На 99 рандомного МвП

14345,Animal_Scroll,Animal Scroll,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ callfunc "support",getcharid(3); },{},{}

function	script	support	{

setarray $arrayofboss[0],1038,1039,1046,1059,1086,1087,1112,1115,1147,1150,1157,1159,1190,1251,1252,1272,1312,1373,1389,1418,1492,1511,1583,1623,1630,1658,1685,1688,1708,1719,1734,1751,1768,1779,1785,1832,1871,1873,1885,1917,2022,2068,2087,2131,2156;
attachrid(getarg(0));
if (called){ dispbottom "Вы не можете призвать помощника в данный момент."; getitem 14345,1; } else {
if (BaseLevel <= 10) { set @supp,1002; }
if (BaseLevel <= 30 && BaseLevel > 10) { set @supp,1100; }
if (BaseLevel <= 50 && BaseLevel > 30) { set @supp,1156; }
if (BaseLevel <= 70 && BaseLevel > 50) { set @supp,1385; }
if (BaseLevel <= 98 && BaseLevel > 70) { set @supp,2085; }
if (BaseLevel >= 99) {
set @supp,$arrayofboss[rand(getarraysize($arrayofboss))]; }
set called,1;
dispbottom "Помошник призван на 30 минут";
summon "Помошник["+strcharinfo(0)+"]",@supp,1800000;
}
}

- script support_system -1,{

OnPcDieEvent:
if (called) { set called,0; getitem 14345,1;}
end;

OnPCLoginEvent:
if(called == 1 || given == 0) {
percentheal 100,0;
set called,0;
getitem 14345,1;
set given,1;
}
end;

OnPCLogoutEvent:
if(called == 1) {
percentheal -100,0;
}
end;



}

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

  • 7 месяцев спустя...

Ocelote =*, Смори а если вне гв вызвал пета?То он получается войдет на гв и бут с петом?

if(agitcheck() || agitcheck2())

{

mes "вы не можете вызвать помощника во время гв";

close;

}

else

{

код..

}

подскажи как сделать чтоб как только вызовут пета человек умерал через 2 сек???А если он не вызвал то ничего не происходило?

С agitcheck(); плохо знаком.

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

хз как именно тебе нужно .

function        script  support {
if(agitcheck() || agitcheck2())
{
initnpctimer "supportDie";
dispbottom "вы вызвали пета во время гв.вы умрете через 2 сек.";
end;
}
setarray $arrayofboss[0],1038,1039,1046,1059,1086,1087,1112,1115,1147,1150,1157,1159,1190,1251,1252,1272,1312,1373,1389,1418,1492,1511,1583,1623,1630,1658,1685,1688,1708,1719,1734,1751,1768,1779,1785,1832,1871,1873,1885,1917,2022,2068,2087,2131,2156;
attachrid(getarg(0));
if (called){ dispbottom "Вы не можете призвать помощника в данный момент."; getitem 14345,1; } else {
if (BaseLevel <= 10) { set @supp,1002; }
if (BaseLevel <= 30 && BaseLevel > 10) { set @supp,1100; }
if (BaseLevel <= 50 && BaseLevel > 30) { set @supp,1156; }
if (BaseLevel <= 70 && BaseLevel > 50) { set @supp,1385; }
if (BaseLevel <= 98 && BaseLevel > 70) { set @supp,2085; }
if (BaseLevel >= 99) {
set @supp,$arrayofboss[rand(getarraysize($arrayofboss))]; }
set called,1;
dispbottom "Помошник призван на 30 минут";
summon "Помошник["+strcharinfo(0)+"]",@supp,1800000;
}
}

- script support_system -1,{

OnPcDieEvent:
if (called) { set called,0; getitem 14345,1;}
end;

OnPCLoginEvent:
if(called == 1 || given == 0) {
percentheal 100,0;
set called,0;
getitem 14345,1;
set given,1;
}
end;

OnPCLogoutEvent:
if(called == 1) {
percentheal -100,0;
}
end;
}

- script supportDie -1,{
OnTimer2000:
atcommand "@die "+strcharinfo(0);
end;
}

function        script  support {
if(agitcheck() || agitcheck2())
{
sleep 2000;
atcommand "@die "+strcharinfo(0);
end;
}
setarray $arrayofboss[0],1038,1039,1046,1059,1086,1087,1112,1115,1147,1150,1157,1159,1190,1251,1252,1272,1312,1373,1389,1418,1492,1511,1583,1623,1630,1658,1685,1688,1708,1719,1734,1751,1768,1779,1785,1832,1871,1873,1885,1917,2022,2068,2087,2131,2156;
attachrid(getarg(0));
if (called){ dispbottom "Вы не можете призвать помощника в данный момент."; getitem 14345,1; } else {
if (BaseLevel <= 10) { set @supp,1002; }
if (BaseLevel <= 30 && BaseLevel > 10) { set @supp,1100; }
if (BaseLevel <= 50 && BaseLevel > 30) { set @supp,1156; }
if (BaseLevel <= 70 && BaseLevel > 50) { set @supp,1385; }
if (BaseLevel <= 98 && BaseLevel > 70) { set @supp,2085; }
if (BaseLevel >= 99) {
set @supp,$arrayofboss[rand(getarraysize($arrayofboss))]; }
set called,1;
dispbottom "Помошник призван на 30 минут";
summon "Помошник["+strcharinfo(0)+"]",@supp,1800000;
}
}

- script support_system -1,{

OnPcDieEvent:
if (called) { set called,0; getitem 14345,1;}
end;

OnPCLoginEvent:
if(called == 1 || given == 0) {
percentheal 100,0;
set called,0;
getitem 14345,1;
set given,1;
}
end;

OnPCLogoutEvent:
if(called == 1) {
percentheal -100,0;
}
end;
}

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

Ocelote =*, Смори а если вне гв вызвал пета?То он получается войдет на гв и бут с петом?

Для этого делаем следующее:

открой файл src/map/script.c, найди функцию 'summon' и добавь в конце перед 'return 0;' script_pushint(st, md->bl.id);

Это будет выглядеть так:

BUILDIN_FUNC(summon)
{
int _class, timeout=0;
const char *str,*event="";
TBL_PC *sd;
struct mob_data *md;
int tick = gettick();

sd=script_rid2sd(st);
if (!sd) return 0;

str =script_getstr(st,2);
_class=script_getnum(st,3);
if( script_hasdata(st,4) )
timeout=script_getnum(st,4);
if( script_hasdata(st,5) ){
event=script_getstr(st,5);
check_event(st, event);
}

clif_skill_poseffect(&sd->bl,AM_CALLHOMUN,1,sd->bl.x,sd->bl.y,tick);

md = mob_once_spawn_sub(&sd->bl, sd->bl.m, sd->bl.x, sd->bl.y, str, _class, event);
if (md) {
md->master_id=sd->bl.id;
md->special_state.ai=1;
if( md->deletetimer != INVALID_TIMER )
delete_timer(md->deletetimer, mob_timer_delete);
md->deletetimer = add_timer(tick+(timeout>0?timeout*1000:60000),mob_timer_delete,md->bl.id,0);
mob_spawn (md); //Now it is ready for spawning.
clif_specialeffect(&md->bl,344,AREA);
sc_start4(&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 60000);
}
script_pushint(st, md->bl.id); // <<< Это добавили
return 0;
}

Далее рекомпилируешь сервер, теперь вместо

summon "Помошник["+strcharinfo(0)+"]",@supp,1800000;

пишешь

setd ".Mob"+getcharid(0),summon("Помошник["+strcharinfo(0)+"]",@supp,1800000);

На локации с вое ставишь мапфлаг loadevent, пример:

prtg_cas03	mapflag	loadevent

В сам скрипт функции 'support' дописываешь:

OnPCLoadMapEvent:
getmapxy(@map$,@x,@y,0);
if(@map$ == "prtg_cas03" && (agitcheck() || agitcheck2())){
dispbottom "Извините, но на Войне за Империум нельзя пользоваться помощником";
unitkill getd(".Mob"+getcharid(0));
set called,0; getitem 14345,1;
}
end;

Думаю суть ясна.

P.S. а вообще рекомендую использовать 11 тип предмета, чтобы каждый раз не давать игроку предмет, проверка и так стоит.

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

Если использовать модификацию срц от Лилит,то можно оптимизировать скрипт.

Сам не тестил..лень ставить мод :mellow:

P.S.Добавил мапфлаги в скрипт.

P.S.S. Обновил.

P.S.S.S. Т.к. срц не знаю...unitkill через модификацию Лилит не работает :huh:

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

Если использовать модификацию срц от Лилит,то можно оптимизировать скрипт.

Сам не тестил..лень ставить мод :mellow:

P.S.Добавил мапфлаги в скрипт.

Не учёл переменные. либо использовать скрипт вместо функции и тогда не разбивать скрипт на функцию support и непися support_system, либо использовать глобальную дин. переменную setd "$Mob"+getcharid(0)

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

Ох... в таком случае можно обойтись и без динамики :)

а-ля set @mob,summon("Помошник["+strcharinfo(0)+"]",@supp,1800000);

Сори, привычка всё усложнять...

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

  • 10 месяцев спустя...

Много пишут про 11 тип предмета, когда скрипт писал я про такой не знал, или такого просто не было тогда :ph34r:

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

  • 6 месяцев спустя...

Вызывает помощника на разных уровнях разных. На 99 рандомного МвП

14345,Animal_Scroll,Animal Scroll,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ callfunc "support",getcharid(3); },{},{}

function	script	support	{

setarray $arrayofboss[0],1038,1039,1046,1059,1086,1087,1112,1115,1147,1150,1157,1159,1190,1251,1252,1272,1312,1373,1389,1418,1492,1511,1583,1623,1630,1658,1685,1688,1708,1719,1734,1751,1768,1779,1785,1832,1871,1873,1885,1917,2022,2068,2087,2131,2156;
attachrid(getarg(0));
if (called){ dispbottom "Вы не можете призвать помощника в данный момент."; getitem 14345,1; } else {
if (BaseLevel <= 10) { set @supp,1002; }
if (BaseLevel <= 30 && BaseLevel > 10) { set @supp,1100; }
if (BaseLevel <= 50 && BaseLevel > 30) { set @supp,1156; }
if (BaseLevel <= 70 && BaseLevel > 50) { set @supp,1385; }
if (BaseLevel <= 98 && BaseLevel > 70) { set @supp,2085; }
if (BaseLevel >= 99) {
set @supp,$arrayofboss[rand(getarraysize($arrayofboss))]; }
set called,1;
dispbottom "Помошник призван на 30 минут";
summon "Помошник["+strcharinfo(0)+"]",@supp,1800000;
}
}

- script support_system -1,{

OnPcDieEvent:
if (called) { set called,0; getitem 14345,1;}
end;

OnPCLoginEvent:
if(called == 1 || given == 0) {
percentheal 100,0;
set called,0;
getitem 14345,1;
set given,1;
}
end;

OnPCLogoutEvent:
if(called == 1) {
percentheal -100,0;
}
end;



}

Какую функцию надо дописать чтоб можно было вызвать второго помошника а не двоих сразу

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

Так попробуй!


function script supportx2 {
setarray $arrayofboss[0],1038,1039,1046,1059,1086,1087,1112,1115,1147,1150,1157,1159,1190,1251,1252,1272,1312,1373,1389,1418,1492,1511,1583,1623,1630,1658,1685,1688,1708,1719,1734,1751,1768,1779,1785,1832,1871,1873,1885,1917,2022,2068,2087,2131,2156;
attachrid(getarg(0));
if (called){ dispbottom "Вы не можете призвать помощника в данный момент."; getitem 14345,1; } else {
if (BaseLevel <= 10) { set @supp,1002; }
if (BaseLevel <= 30 && BaseLevel > 10) { set @supp,1100; }
if (BaseLevel <= 50 && BaseLevel > 30) { set @supp,1156; }
if (BaseLevel <= 70 && BaseLevel > 50) { set @supp,1385; }
if (BaseLevel <= 98 && BaseLevel > 70) { set @supp,2085; }
if (BaseLevel >= 99) {
set @supp,$arrayofboss[rand(getarraysize($arrayofboss))]; }
set called,1;
dispbottom "Помошник призван на 30 минут";
summon "Помошник["+strcharinfo(0)+"]",@supp,1800000;
}
}
- script support_system -1,{
OnPcDieEvent:
if (called) { set called,0; getitem 14345,1;}
end;
OnPCLoginEvent:
if(called == 1 || given == 0) {
percentheal 100,0;
set called,0;
getitem 14345,1;
set given,1;
}
end;
OnPCLogoutEvent:
if(called == 1) {
percentheal -100,0;
}
end;
}

и это!


14345,Animal_Scroll,Animal Scroll,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ callfunc "supportx2",getcharid(3); },{},{}

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



и это!


14345,Animal_Scroll,A[quote name='nejiko' timestamp='1375707113' post='19926']
Так попробуй!
[code]
function script supportx2 {
setarray $arrayofboss[0],1038,1039,1046,1059,1086,1087,1112,1115,1147,1150,1157,1159,1190,1251,1252,1272,1312,1373,1389,1418,1492,1511,1583,1623,1630,1658,1685,1688,1708,1719,1734,1751,1768,1779,1785,1832,1871,1873,1885,1917,2022,2068,2087,2131,2156;
attachrid(getarg(0));
if (called){ dispbottom "Вы не можете призвать помощника в данный момент."; getitem 14345,1; } else {
if (BaseLevel <= 10) { set @supp,1002; }
if (BaseLevel <= 30 && BaseLevel > 10) { set @supp,1100; }
if (BaseLevel <= 50 && BaseLevel > 30) { set @supp,1156; }
if (BaseLevel <= 70 && BaseLevel > 50) { set @supp,1385; }
if (BaseLevel <= 98 && BaseLevel > 70) { set @supp,2085; }
if (BaseLevel >= 99) {
set @supp,$arrayofboss[rand(getarraysize($arrayofboss))]; }
set called,1;
dispbottom "Помошник призван на 30 минут";
summon "Помошник["+strcharinfo(0)+"]",@supp,1800000;
}
}
- script support_system -1,{
OnPcDieEvent:
if (called) { set called,0; getitem 14345,1;}
end;
OnPCLoginEvent:
if(called == 1 || given == 0) {
percentheal 100,0;
set called,0;
getitem 14345,1;
set given,1;
}
end;
OnPCLogoutEvent:
if(called == 1) {
percentheal -100,0;
}
end;
}

14345,Animal_Scroll,Animal Scroll,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ callfunc "supportx2",getcharid(3); },{},{}

Не помогло перестаёт работать вообще)))

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

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