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

Стенка бг мод


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

БГ уже не актуально...

Что делать, если персонажей на карте нечетное кол-во? А то один всегда в пролёте получается =/

function	script	nashest36	{
mapusersid("pvp_n_1-5");
leaveparty($@mapusersid[0],getarraysize($@mapusersid));
set $@sns_member,(getmapusers("pvp_n_1-5")/2);
copyarray $@sns_group1[0],$@mapusersid[0],$@sns_member;
copyarray $@sns_group2[0],$@mapusersid[$@sns_member],$@sns_member;

sleep 2000;

set $@random,rand(1,100);
createparty("Blue "+$@random,$@sns_group1);
set $@sns_pt1,getarraysize($@sns_group1);
createparty("Red "+$@random,$@sns_group2);
set $@sns_pt2,getarraysize($@sns_group2);

sleep 2000;

if(getmapusers("pvp_n_1-5")>2 && getmapusers("pvp_n_1-5")<4) {
inviteparty($@sns_group2[0],$@sns_member);}

else if (getmapusers("pvp_n_1-5")>3) {
inviteparty($@sns_group1[0],$@sns_member);
inviteparty($@sns_group2[0],$@sns_member);}

for (set .i, 0; .i < $@sns_member; set .i, .i+1) {
warpchar "pvp_n_1-5",66,100,$@sns_group1[.i];
warpchar "pvp_n_1-5",136,100,$@sns_group2[.i];}
pvpon "pvp_n_1-5";
}

pvp_n_1-5,99,103,5 script Stenka_test 800,{
callfunc "nashest36";
close;
}

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

Возникла ещё одна проблема. Подскажите как правильно проверить в данном случае персонажа при смерти и после этого вычитать его из общего кол-ва при условии, что он состоит в одной из групп(пати) Мой вариант не хочет работать :(

Нужный кусок выделил тегом

prontera,0,0,0	script	pvpLadder2	-1,{
OnPCDieEvent:
if (getmapxy($@killer_map$,@mapx,@mapy,0,strcharinfo(0))!=0) end;
if ( ($@killer_map$=="pvp_n_1-5") && ($@MeveSNS==2) ){
attachrid(killedrid);
warp "prontera",180,160;
[b]if($@sns_group1[0]){
set $@sns_pt1,$@sns_pt1-1;}
if($@sns_group2[0]){
set $@sns_pt2,$@sns_pt2-1;}[/b]
if($@sns_pt1 == 0 && $@sns_pt2 == 0) {
mapannounce "pvp_n_1-5","[Стенка на Стенку] бой завершен!!!",17;
enablenpc "SNS Prize";
set $@MeveSNS, 0;
cleararray $@mapusersid[0],0,getarraysize($@mapusersid);
cleararray $@sns_group1[0],0,getarraysize($@sns_group1);
cleararray $@sns_group2[0],0,getarraysize($@sns_group2);
set $@sns_member,0;
end;
}
mapannounce "pvp_n_1-5","Выживших - Команда Синих: "+$@sns_pt1+" Команда Красных: "+$@sns_pt2,1;
end;
}
}

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

Проверять принадлежит ли игрок списку нужно через цикл

Зачем аттачиться к убитому в событии OnPCDie? Масло с маслом

Спасибо! Помогло)

Осталось теперь только разобраться с нечетным кол-во игроков на карте...

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

Дак вы скажите точно, что вам нужно: кикать лишнего или засунуть его в какую-нибудь из команд?

Лучше засунуть в одну из команд

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

mapusersid("pvp_n_1-5");
leaveparty($@mapusersid[0],getarraysize($@mapusersid));
set $@sns_member,(getmapusers("pvp_n_1-5")/2);
copyarray $@sns_group1[0],$@mapusersid[0],$@sns_member;
copyarray $@sns_group2[0],$@mapusersid[$@sns_member],$@sns_member;

на

mapusersid("pvp_n_1-5");
leaveparty($@mapusersid[0],getarraysize($@mapusersid));
set .@flag, getmapusers("pvp_n_1-5")%2;
set $@sns_member,(getmapusers("pvp_n_1-5")/2);
copyarray $@sns_group1[0],$@mapusersid[0], ((.@flag)?($@sns_member+rand(2)):$@sns_member);
copyarray $@sns_group2[0],$@mapusersid[getarraysize($@sns_group1)], getmapusers("pvp_n_1-5") - getarraysize($@sns_group1);

Только у меня ощущение, что я сделал слишком сложно (=

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

mapusersid("pvp_n_1-5");
leaveparty($@mapusersid[0],getarraysize($@mapusersid));
set $@sns_member,(getmapusers("pvp_n_1-5")/2);
copyarray $@sns_group1[0],$@mapusersid[0],$@sns_member;
copyarray $@sns_group2[0],$@mapusersid[$@sns_member],$@sns_member;

на

mapusersid("pvp_n_1-5");
leaveparty($@mapusersid[0],getarraysize($@mapusersid));
set .@flag, getmapusers("pvp_n_1-5")%2;
set $@sns_member,(getmapusers("pvp_n_1-5")/2);
copyarray $@sns_group1[0],$@mapusersid[0], ((.@flag)?($@sns_member+rand(2)):$@sns_member);
copyarray $@sns_group2[0],$@mapusersid[getarraysize($@sns_group1[0])], getmapusers("pvp_n_1-5") - getarraysize($@sns_group1[0]);

Только у меня ощущение, что я сделал слишком сложно (=

3 человека на карте, 1 закинуло в пати и варпнуло, 2 остальных остались по центру без изменений

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

if(getmapusers("pvp_n_1-5")>2 && getmapusers("pvp_n_1-5")<4) {
inviteparty($@sns_group2[0],$@sns_member);}

А изначально же скрипт обрабатывал ситуацию, когда 3 человека. Тоже не работает?

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

if(getmapusers("pvp_n_1-5")>2 && getmapusers("pvp_n_1-5")<4) {
inviteparty($@sns_group2[0],$@sns_member);}

А изначально же скрипт обрабатывал ситуацию, когда 3 человека. Тоже не работает?

Неа

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

Сильно не вникал в скрипт, если проблема все еще в том что остается в центре последний игрок, попробуй так:

if(getarraysize($@mapusersid)%2>0)

{

и тут уже делаешь с этим игроком ($@mapusersid[getarraysize($@mapusersid-1)]), что хочешь

}

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

Сильно не вникал в скрипт, если проблема все еще в том что остается в центре последний игрок, попробуй так:

if(getarraysize($@mapusersid)%2>0)

{

и тут уже делаешь с этим игроком ($@mapusersid[getarraysize($@mapusersid-1)]), что хочешь

}

Допустим его нужно добавить в одну из пати, как правильно записать? мои варианты не катят(

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

как вариант из первого поста замени строку

copyarray $@sns_group2[0],$@mapusersid[$@sns_member],$@sns_member;

на

copyarray $@sns_group2[0],$@mapusersid[$@sns_member],(getarraysize($@mapusersid)%2>0?($@sns_member+1):$@sns_member);

если я правильно понял команду inviteparty.

В этом случае будет последнего игрока всегда добавлять в $@sns_group2

В твоем первом посте всегда последний игрок отметался, потому как при делении в афине округление идет в меньшую сторону, т.е. 5/2 будет 2.

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

Предлагаю проверить будет ли сумма двух массивов: $@sns_group2 и $@sns_group1 равна размеру массива $@mapusersid, когда количество игроков не четное.

В этом куске ты наверное не изменил ничего?


for (set .i, 0; .i < $@sns_member; set .i, .i+1) {
warpchar "pvp_n_1-5",66,100,$@sns_group1[.i];
warpchar "pvp_n_1-5",136,100,$@sns_group2[.i];}
pvpon "pvp_n_1-5";
}

не проще ли варпать командой warpparty раз ты уже всех раскидал по пати?

А также тут внимательно посмотри


if(getmapusers("pvp_n_1-5")>2 && getmapusers("pvp_n_1-5")<4) {
inviteparty($@sns_group2[0],$@sns_member);}

else if (getmapusers("pvp_n_1-5")>3) {
inviteparty($@sns_group1[0],$@sns_member);
inviteparty($@sns_group2[0],$@sns_member);}

думаю лучше будет писать типа такого:

inviteparty($@sns_group2[0],getarraysize($@sns_group2));

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

Спасибо, помогло. Правда теперь 1 нюанс появился, когда убиваешь этого игрока, то статистика его не учитывает и эвент криво работает, ну я думаю разберусь, если что не получится то еще отпишусь ;)

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

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