Jump to content

Break

Members
  • Posts

    153
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by Break

  1. Сделал через цикл, вроде бы работает. Осталось теперь разобраться с нечетным кол-вом игроков на карте... И да ув. Lilith просьба пишите под eAthena если вас конечно это не затруднит, а то тот код что вы выложили не работает и его пришлось переписывать под свой эмуль)
  2. За старания конечно спасибо, но к сожалению не работает Вот остальные исходники, может помогут) BUILDIN_FUNC(createparty) { char* nombre; //Genera un warning C4090 int cid; TBL_PC* sd; nombre = script_getstr(st,2); cid = script_getnum(st,3); sd = map_charid2sd(cid); //Obtiene el map_session_data del char_id if( sd == NULL ) { script_pushint(st, -1); return 0; //No estб enganchado a un usuario } if( sd->status.party_id > 0 || sd->party_joining || sd->party_creating ) {// already associated with a party script_pushint(st, 0); return 0; } party_create(sd, nombre, 0, 0); //Manda a crear la Party script_pushint(st, 1); return 0; } BUILDIN_FUNC(inviteparty) { struct script_data* data; int32 id; int32 idx; int32 i; int32 n; int32 arr[256]; struct map_session_data *sd, *tsd; data = script_getdata(st, 2); id = reference_getid(data); idx = reference_getindex(data); n = script_getnum(st, 3); for( i = 0; i < n; ++i ) { arr[i]=(int32)get_val2(st, reference_uid(id, idx + i), reference_getref(data)); script_removetop(st, -1, 0); } sd=map_charid2sd(arr[0]); if (sd == NULL) { return 0; } for( i = 1; i < n; ++i ) { tsd=map_charid2sd(arr[i]); if (tsd == NULL) { continue; } if (party_invite(sd,tsd)) { party_reply_invite(tsd,sd->status.account_id,1); }; } return 0; } BUILDIN_DEF(inviteparty,"ri"), //YXAZA BUILDIN_DEF(createparty,"si"), Кстати возникла ещё одна проблема. Подскажите как правильно проверить принадлежит ли игрок одному из списков, и после этого вычитать его. Мой вариант не хочет работать. Нужный кусок выделил тегом 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") ){ 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; } }
  3. Обьяснить не могу что они выполняют, т.к не я эти скриптовые команды писал, лишь догадки только... Вот сам код, если разберетесь BUILDIN_FUNC(mapusersid) { int m = map_mapname2mapid(script_getstr(st,2)),users = 0; struct s_mapiterator* iter; TBL_PC *sd; if (m < 0) { script_pushint(st,-1); return 0; } iter = mapit_getallusers(); for (sd = (TBL_PC*)mapit_first(iter);mapit_exists(iter);sd = (TBL_PC*)mapit_next(iter)) if ((sd->bl.m == m) && (!pc_isdead(sd))) { mapreg_setreg(add_str("$@mapusersid") + (users<<24), sd->status.char_id); mapreg_setregstr(add_str("$@mapusersname$")+(users<<24),sd->status.name); users++;} mapit_free(iter); return 0; } BUILDIN_FUNC(leaveparty) { struct script_data* data; int32 id; int32 idx; int32 i; int32 n; int32 arr[256]; struct map_session_data *sd; data = script_getdata(st, 2); id = reference_getid(data); idx = reference_getindex(data); n = script_getnum(st, 3); for( i = 0; i < n; ++i ) { arr[i]=(int32)get_val2(st, reference_uid(id, idx + i), reference_getref(data)); script_removetop(st, -1, 0); if (((sd=map_charid2sd(arr[i])) != NULL ) && sd->status.party_id) { party_leave(sd); } } return 0; } BUILDIN_DEF(mapusersid,"s"), //NetherRO BUILDIN_DEF(leaveparty,"ri"), //YXAZA
  4. Что тут непонятного? Распределение игроков на карте идёт по ровну в две пати, если же игроков нечетное кол-во, то один всегда остаётся без пати... Допустим на карте 5 человек, из них 4 распределяет по 2 человека в каждую пати и 1 в пролёте получается =/
  5. Дело в том, что когда нечетное кол-во игроков на карте, то разделение идет между четным кол-вом, а нечетный остается в центре карты не попадая ни в одну из пати, что в таком случае нужно сделать? 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; }
  6. С массивами я особо не дружу, лучше подскажи как без них решить мою проблему, а то я уже много чего перепробывал, а толку никакого либо показывает всех чаров на 3 местах, либо на 2 или показывает вроде бы нормально сначала, но до тех пор пока кто нибудь не тыкнет и не сдаст лут и всё собьется и хрен знает в каком порядке встанет.
  7. Мне подсказали методом переноса сделать позиции, но не фурычит всё равно... Изначально было так: if(loot2>$leaderloot){ set $leaderloot,loot2; set $leaderchar$,strcharinfo(0); } if(loot2>$leaderloot2){ set $leaderloot2,loot2; set $leaderchar2$,strcharinfo(0); } if(loot2>$leaderloot3){ set $leaderloot3,loot2; set $leaderchar3$,strcharinfo(0); }
  8. Написал глобальный эвент, но возникла одна проблема, топ-3 рейтинг чаров сдавших лут не отображает правильно, т.е не так как надо. Подскажите в чём мой косяк? - script gxdcxs -1,{ OnInit: if($ge!=0){end;} set $leaderchar$,0; set $leaderloot,0; set $leaderchar2$,0; set $leaderloot2,0; set $leaderchar3$,0; set $leaderloot3,0; set $ge,1; end; } - script begin -1,{ //OnDay<month><day>: OnDay0705: set $leaderchar$,0; set $leaderloot,0; set $leaderchar2$,0; set $leaderloot2,0; set $leaderchar3$,0; set $leaderloot3,0; set $ge,1; announce "Глобальный эвент начался. Подробности у NPC в пронтере!",0; end; OnDay0712: set $ge,0; set $np,1; announce "Глобальный эвент окончен. Победитель: "+$leaderchar$+", поздравляем его!! Приз у NPC.",0; end; } prontera,162,194,3 script Глобальный эвент 709,{ // 1097,7005,7449, 662 if($ge!=1){ mes "Для тебя у меня сейчас нет задания."; close;} set .item,7449; mes "[Глобальный эвент]"; if(loot2>$leaderloot){ set $leaderloot,loot2; set $leaderchar$,strcharinfo(0);} if($np==1){ if($leaderchar$==strcharinfo(0)){ if(select("Получить приз:Отмена")==2){close;} mes "Держи свой приз."; getitem 20197,1; getitem 7227,3; set $leaderchar$,0; set $leaderloot,0; set $np,0; close; }close;} set loot,countitem(.item); mes "Лидер дня: "+$leaderchar$+". Он сдал - "+$leaderloot+"x "+getitemname(.item)+"."; mes "------------------------"; switch(select("Топ-3","Сдать лут","Ваша Статистика","Задание","Последний срок")){ case 1: if(loot2>$leaderloot){ set $leaderloot3, $leaderloot2; set $leaderloot2, $leaderloot; set $leaderloot,loot2; set $leaderchar3$, $leaderchar2$; set $leaderchar2$, $leaderchar$; set $leaderchar$,strcharinfo(0); } if(loot2>$leaderloot2){ set $leaderloot3, $leaderloot2; set $leaderloot, $leaderloot; set $leaderloot2,loot2; set $leaderchar3$, $leaderchar2$; set $leaderchar$, $leaderchar$; set $leaderchar2$,strcharinfo(0); } if(loot2>$leaderloot3){ set $leaderloot2, $leaderloot2; set $leaderloot, $leaderloot; set $leaderloot3,loot2; set $leaderchar2$, $leaderchar2$; set $leaderchar$, $leaderchar$; set $leaderchar3$,strcharinfo(0); } mes "Место - ник - кол-во"; mes "1. "+$leaderchar$+" "+$leaderloot+""; mes "2. "+$leaderchar2$+" "+$leaderloot2+""; mes "3. "+$leaderchar3$+" "+$leaderloot3+""; close; case 2: if(loot<1){mes "У тебя нет необходимого лута!";close;} delitem .item,loot; set loot2,loot2+loot; close; case 3: mes "Вы уже сдали всего "+loot2+" лута."; close; case 4: mes "Вам необходимо сдавать следующий лут: "+getitemname(.item)+". Игрок, сдавший наибольшее кол-во лута (лидер) - побеждает."; close; case 5: mes "Последний срок сдачи лута - 11 июля. Не опоздайте!"; close; } }
×
×
  • Create New...