Назад

Коллективное творчество

Автор: DiS[IP]: Дата: 05.03.2009

Предлагаю знающим и опытным людям заняться коллективным написанием скриптов/сорцев/модификаций...Плюсов в этом деле много..во-первых,это получение немалого опыта в этой сфере деятельности,во-вторых это конечно же общение с адекватными людьми,а не неудами..Сейчас везде все типично и стандартно..взять те же автоэвенты..хочется просто разбавить чем-то новым и уникальным эту ситуацию..Буду рад если найдутся люди,которые вместе со мной будут заниматься этим.

Автор: dimjke: Дата: 03.26.2010

set $mob,200;
monster .@town1$,0,0,"[Event] Poring",1002,$mob,"MonsterSpawn::OnAEDead";
OnAEDead:
bla-bla-bla

Нужно чтобы шёл подсчёт убитых монстров на карте как для всех так и для каждого индивидуально. У кого больше убитых на счету, тот и победил на эвенте. Давно ломаю голову над этим, может кто знает?

Автор: Sanasol: Дата: 03.26.2010

set $trava, $trava - 1;
set @z, @z + 1; // +1 моб
if(@z == 21) {goto prize;
}


http://rus-ea.ru/showthread.php?t=711

Автор: nomn: Дата: 03.26.2010

[COLOR="Indigo"]Sanasol: внимательно читай вопрос. Ты дал ответ не в ту степь.

dimjke: можно вот так:


monster .@town1$,0,0,"[Event] Poring",1002,$mob,"MonsterSpawn::OnAEDead";
end;

OnAEDead:
set mob_Killer, mob_Killer + 1;
callfunc ("Mob_by_nomn",mob_Killer,strcharinfo(0));
end;
}

function script Mob_by_nomn {
set @mob_attak, getarg(0);
set @chname$, getarg(1);

if (@mob_attak > $top1mob)
{
set $top1mob, @mob_attak;
set $top1char$, @chname$;
}
end;
}


При этом, в начале скрипта впиши


OnInit:

set $top1mob, 0;
set $top1char$, 0;
end;



ну а дальше должно быть понятно, что делать, с победителем $top1char$
[/COLOR]

Автор: Мяфк: Дата: 03.26.2010

В общем нужна функция реса, т.е. при использовании итема, человек ресался, в доках порылся нашёл 1 *recovery; Но она при конекте чара ресает. Я вот подумал так:

function script Book_res {
getmapxy(.@mapname$,.@mapx,.@mapy,0,""+strcharinfo(0)+"");
warp "Save",0,0;
....
return;
}

Но при смерти итем не юзается, есть у кого какие соображения?

Автор: nomn: Дата: 03.26.2010

Мяфк: очень просто делается. Создаешь вещь, например "камень жизни", это лут. К примеру он имеет id 20001. Пишешь эвент:


OnPCDieEvent:
if(countitem(20001)<1) {
delitem 20001, 1;
atcommand "@alive "; }
end;


Если хочешь чтоб он не работал на определенной локации, то делаешь такую проверку:


OnPCDieEvent:
getmapxy .@mapdie$,.@xdie,.@ydie,0;
if(countitem(20001)<1 && .@mapdie$ != "map") {

delitem 20001, 1;
atcommand "@alive "; }
end;

Автор: Rectedo: Дата: 03.26.2010

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

через OnClock: пойдет?

Автор: Мяфк: Дата: 03.26.2010

Да не ребят, я знал про команду аливе, и сделал бы через функцию, но не хочу через аткоманд, по этому прошу вашей помощи.

Автор: nomn: Дата: 03.26.2010

[COLOR="Indigo"]Ну и тут-то возникает вопрос: что тебе не нравится в аткоманд? оО
Т.е. тебя устраивает авто рес?
[/COLOR]

Автор: Мяфк: Дата: 03.26.2010

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

Автор: nomn: Дата: 03.26.2010

[COLOR="Indigo"]


// Log GM Commands (set to minimum level of Logged Commands)
log_gm: X



alive: x-1,99


Что касается того, стобы люди сами могли себя ресать,
то можно, как сказал Санасол, написать отдельную @ команду,
которая будет проверять итем, и при его наличии ресать, удаляя итем.[/COLOR]

Автор: dimjke: Дата: 03.27.2010

Цитата Raff;21485:
[COLOR="Indigo"]Sanasol: внимательно читай вопрос. Ты дал ответ не в ту степь.

dimjke: можно вот так:


monster .@town1$,0,0,"[Event] Poring",1002,$mob,"MonsterSpawn::OnAEDead";
end;

OnAEDead:
set mob_Killer, mob_Killer + 1;
callfunc ("Mob_by_nomn",mob_Killer,strcharinfo(0));
end;
}

function script Mob_by_nomn {
set @mob_attak, getarg(0);
set @chname$, getarg(1);

if (@mob_attak > $top1mob)
{
set $top1mob, @mob_attak;
set $top1char$, @chname$;
}
end;
}


При этом, в начале скрипта впиши


OnInit:

set $top1mob, 0;
set $top1char$, 0;
end;



ну а дальше должно быть понятно, что делать, с победителем $top1char$
[/COLOR]


Одно но, пишет анонс как положено т.е у кого больше, а вот приз дают тому кто убил последнего моба)

Автор: nomn: Дата: 03.28.2010

[COLOR="Indigo"]оО тебе полный вариант написать? я думал ты допишешь сам...


monster .@town1$,0,0,"[Event] Poring",1002,$mob,"MonsterSpawn::OnAEDead";
end;

OnAEDead:
set $mob, $mob - 1;
set mob_Killer, mob_Killer + 1;
callfunc ("Mob_by_nomn",mob_Killer,strcharinfo(0));
end;

OnLuckyWinnerLolik:
set @tmp_attach, $top1char$;
attachrid( @tmp_attach );
getitem ID_PRIZ, X;
//ID_PRIZ - айди приза. X - количество..

}

function script Mob_by_nomn {
set @mob_attak, getarg(0);
set @chname$, getarg(1);

if (@mob_attak > $top1mob)
{
set $top1mob, @mob_attak;
set $top1char$, @chname$;
}
if ($mob < 1) { donpcevent "npc_name::OnLuckyWinnerLolik"; }
end;
}
[/COLOR]

Автор: nomn: Дата: 03.28.2010

исправил ошибку, не ту переменную написал ^^

Автор: nomn: Дата: 04.09.2010

[COLOR="Indigo"]Команда @res
Позволяет реснуться, если у вас есть определенный "рес-итем".
На использование требуется 1 итем.[/COLOR]

atcomman.c


/*==========================================
* @alive by eA Dev. Team
* @res edit by [nomn]
*------------------------------------------*/
int atcommand_res(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
int item_id, item_position, type;
nullpo_retr(-1, sd);
// Вместо 19052 вводите нужный вам ID
item_id = 19052;
item_position = pc_search_inventory(sd, item_id);

if (item_position < 1)
{
clif_displaymessage(sd->fd, "Вам необходим 'Камень Воскрешения'.");
return -1;
}

if (!status_revive(&sd->bl, 100, 100))
{
clif_displaymessage(fd, "Ты все еще жив.");
return -1;
}
// Вместо 19052 вводите нужный вам ID
type = pc_search_inventory (sd, 19052);
pc_delitem(sd, type, 1, 0);
clif_skill_nodamage(&sd->bl,&sd->bl,ALL_RESURRECTION,4,1);
clif_displaymessage(sd->fd, "Вы высвободили силу 'Камня Воскрешения'.");
return 0;
}


ниже в atcomman.c

{ "res", 0,99, atcommand_res }, // [eA Dev. Team] upgraded by nomn


atcommand_athena.conf

res: 0,99

Автор: Sanasol: Дата: 04.09.2010

Молодец! Респект))

Автор: nomn: Дата: 04.09.2010

=) спс