Автор: michail666777: Дата: 01.29.2011
Есть ли возможность расставлять НПС не по координатам, а что бы они расставлялись сами рандомно после запуска сервера?
Автор: sam3000: Дата: 01.29.2011
Есть варианты как предложили выше. OnInit и генерить рандомных НПСей.
А можно исходник поправить :)
Автор: michail666777: Дата: 01.29.2011
- script random -1,{
Oninit:
monster "prontera",0,0,"Нажми на меня",2341,23,"Idiot::tymudak";
end;
}
- script Idiot -1,{
tymudak:
mes "Ты нахрена на меня нажал?";
close;
}
Автор: Мяфк: Дата: 01.29.2011
Да, так же сделать его не подвижным и с 1 всех стат.
Автор: michail666777: Дата: 01.29.2011
А можно исходник поправить
Автор: michail666777: Дата: 01.29.2011
Огромное спасибо Olga с eA форума.
Вот предложенный ей вариант:
Открываем .../src/map/npc.c
В функции npc_parse_script меняем:
int i;
int i=0;
{// no OnTouch area
class_ = atoi(w4);
nd->u.scr.xs = -1;
nd->u.scr.ys = -1;
}
if( x==-1 && y==-1)
do{
x=rand()%(map[m].xs-2)+1;
y=rand()%(map[m].ys-2)+1;
}while(map_getcell(m,x,y,CELL_CHKNOPASS) && (i++)<1000 );
izlude,-1,-1,4 script SomeNPC 56,{
Автор: Renegade: Дата: 01.29.2011
зачем если можно заставить нпц постоянно ходить в рендомном направлении? те он просто гуляет по локации.
Автор: michail666777: Дата: 01.29.2011
Я изначально хотел не задавать координаты потому, что мне нужно что бы на карте появлялись NPC в количестве 500+ штук. И расставлять для каждого координаты было бы до глупости утомительно. Поэтому и хотелось задав координаты рандома - заставить их появляться в любом месте (не важно каком).
То биш если заставить NPC появляться и гулять по всей локации они появлялись бы из одного места, а это не то, чего бы мне хотелось.
Автор: sam3000: Дата: 01.29.2011
Стоит еще добавить проверку, вдруг на клетке уже НПСя, хотя если они ходить будут, думаю это лишнее.
А есть какой-нибудь гайд и желательно поближе к моей теме? Или это слишком для скромного юзера со средненькими знаниями?)))
Автор: Мяфк: Дата: 01.29.2011
Молодец, может мне в будущем пригодиться. Эх ввели бы в еА это всё официально, полезно же...
Автор: michail666777: Дата: 01.29.2011
хотя если они ходить будут, думаю это лишнее.
Автор: sam3000: Дата: 01.30.2011
+ int h, m;
+ char output[256];
+ bool temp_check = false;
+ struct npc_data *nd = NULL;
+ int min_distance_npc = 3; // минимальное расстояние до НПЦ, 1 - соседняя клетка
+ m = sd->bl.m;
+ // Дополнительные проверки при открытии магазина [KarLaeda]
+ for (h = 0; h < map[m].npc_num; h++) {
+ nd = map[m].npc[h];
+ if (abs(sd->bl.x - nd->bl.x) < min_distance_npc && abs(sd->bl.y - nd->bl.y) < min_distance_npc) {
+ sprintf(output, "Расстояние до НПЦ меньше минимального (%d)", min_distance_npc);
+ clif_displaymessage (sd->fd, output);
+ return;
+ }
+ }
Автор: michail666777: Дата: 01.30.2011
OnInit:
do {
set .@x, rand(400);
set .@y, rand(400);
}
while (!checkcell("prontera",.@x,.@y,cell_chkpass));
movenpc strnpcinfo(0),.@x,.@y;
end;
Автор: sam3000: Дата: 01.30.2011
Цитата michail666777;32032:
Это решение всех проблем!! Огромное спасибо eA форуму!))