nejiko Опубликовано 20 июля, 2013 Жалоба Поделиться Опубликовано 20 июля, 2013 (изменено) Здравствуйте! Хотел узнать как можно реализовать ПВП только на определенных клетках на арене? Как бы что-бы зрителей не могли атаковать и что-бы зрители не дрались,а просто смотрели! Вот что я пытался сделать! Пвп на локе отключено,а по кординатам должно было включаться! Пробовал вместо basilica ставить pvp , pvp_off только значения менять на 0! Сборка: 3ceam Вот что искал нашел по этой теме: Тык и Тык Кто что подскажет? pvp_2v2,1,1,1 script NoPvPDuelArena -1,{end;OnInit:// Можноsetcell "pvp_2v2.gat",41,52,41,39,cell_basilica,1;setcell "pvp_2v2.gat",41,39,62,39,cell_basilica,1;setcell "pvp_2v2.gat",62,39,62,52,cell_basilica,1;setcell "pvp_2v2.gat",62,52,41,52,cell_basilica,1;} Вот схема работы моей идеи! Изменено 20 июля, 2013 пользователем nejiko Ссылка на комментарий Поделиться на другие сайты Поделиться
nejiko Опубликовано 20 июля, 2013 Автор Жалоба Поделиться Опубликовано 20 июля, 2013 ап прошу помощи Ссылка на комментарий Поделиться на другие сайты Поделиться
wl.illusion Опубликовано 21 июля, 2013 Жалоба Поделиться Опубликовано 21 июля, 2013 (изменено) Проблему товарищу решили, сорс модификацию исправили.Готовое решение (большая часть копипаста и исходники там старенькие использовали, но вы без проблем поймёте чего и куда вставлять)://battle.c//find thisint battle_check_target( struct block_list *src, struct block_list *target,int flag)//add this before itbool cell_pk_check(struct block_list *t_bl, struct block_list *s_bl, int m){if(t_bl->type == BL_PC && map[m].cell[s_bl->x+s_bl->y*map[m].xs].pk == true && map[m].cell[t_bl->x+t_bl->y*map[m].xs].pk == true) { int s_party = status_get_party_id(s_bl); int s_guild = status_get_guild_id(s_bl); if( s_party && s_party == status_get_party_id(t_bl) ) { if(map[m].flag.pvp_noparty) return true; else return false; } if( s_guild && s_guild == status_get_guild_id(t_bl) ) { if(map[m].flag.pvp_noguild && map[m].flag.gvg) return true; else return false; } return true;}return false;}//+++++++++++++++++++++++++++++++++////find thiselse if(( sd->duel_group && !((!battle_config.duel_allow_pvp && map[m].flag.p//use this to replaceelse if(( sd->duel_group && !((!battle_config.duel_allow_pvp && map[m].flag.pvp) || (!battle_config.duel_allow_gvg && map_flag_gvg(m))))||( cell_pk_check(t_bl, s_bl, m) == true ))//+++++++++++++++++++++++++++++++++////map.cvoid map_setcell(int m, int x, int y, cell_t cell, bool flag){ int j; if( m < 0 || m >= map_num || x < 0 || x >= map[m].xs || y < 0 || y >= map[m].ys ) return; j = x + y*map[m].xs; switch( cell ) { case CELL_WALKABLE: map[m].cell[j].walkable = flag; break; case CELL_SHOOTABLE: map[m].cell[j].shootable = flag; break; case CELL_WATER: map[m].cell[j].water = flag; break; case CELL_NPC: map[m].cell[j].npc = flag; break; case CELL_BASILICA: map[m].cell[j].basilica = flag; break; case CELL_LANDPROTECTOR: map[m].cell[j].landprotector = flag; break; case CELL_NOVENDING: map[m].cell[j].novending = flag; break; case CELL_NOCHAT: map[m].cell[j].nochat = flag; break; case CELL_PK: map[m].cell[j].pk = flag; break; //<---add this line default: ShowWarning("map_setcell: invalid cell type '%d'\n", (int)cell); break; }}//+++++++++++++++++++++++++++++++++////map.htypedef enum { CELL_WALKABLE, CELL_SHOOTABLE, CELL_WATER, CELL_NPC, CELL_BASILICA, CELL_LANDPROTECTOR, CELL_NOVENDING, CELL_NOCHAT, CELL_MAELSTROM, CELL_ICEWALL, CELL_PK, // <---add this line} cell_t;//+++++++++++++++++++++++++++++++++//struct mapcell{ // terrain flags unsigned char walkable : 1, shootable : 1, water : 1; // dynamic flags unsigned char npc : 1, basilica : 1, landprotector : 1, novending : 1, nochat : 1, pk : 1;//<---add this//+++++++++++++++++++++++++++++++++//// db\const.txtcell_walkable 0cell_shootable 1cell_water 2cell_npc 3cell_basilica 4cell_landprotector 5cell_novending 6cell_nochat 7cell_pk 10 // <---add this line//+++++++++++++++++++++++++++++++++// Изменено 21 июля, 2013 пользователем wl.illusion 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
nejiko Опубликовано 21 июля, 2013 Автор Жалоба Поделиться Опубликовано 21 июля, 2013 Проблему товарищу решили, сорс модификацию исправили.Готовое решение (большая часть копипаста и исходники там старенькие использовали, но вы без проблем поймёте чего и куда вставлять)://battle.c//find thisint battle_check_target( struct block_list *src, struct block_list *target,int flag)//add this before itbool cell_pk_check(struct block_list *t_bl, struct block_list *s_bl, int m){if(t_bl->type == BL_PC && map[m].cell[s_bl->x+s_bl->y*map[m].xs].pk == true && map[m].cell[t_bl->x+t_bl->y*map[m].xs].pk == true) { int s_party = status_get_party_id(s_bl); int s_guild = status_get_guild_id(s_bl); if( s_party && s_party == status_get_party_id(t_bl) ) { if(map[m].flag.pvp_noparty) return true; else return false; } if( s_guild && s_guild == status_get_guild_id(t_bl) ) { if(map[m].flag.pvp_noguild && map[m].flag.gvg) return true; else return false; } return true;}return false;}//+++++++++++++++++++++++++++++++++////find thiselse if(( sd->duel_group && !((!battle_config.duel_allow_pvp && map[m].flag.p//use this to replaceelse if(( sd->duel_group && !((!battle_config.duel_allow_pvp && map[m].flag.pvp) || (!battle_config.duel_allow_gvg && map_flag_gvg(m))))||( cell_pk_check(t_bl, s_bl, m) == true ))//+++++++++++++++++++++++++++++++++////map.cvoid map_setcell(int m, int x, int y, cell_t cell, bool flag){ int j; if( m < 0 || m >= map_num || x < 0 || x >= map[m].xs || y < 0 || y >= map[m].ys ) return; j = x + y*map[m].xs; switch( cell ) { case CELL_WALKABLE: map[m].cell[j].walkable = flag; break; case CELL_SHOOTABLE: map[m].cell[j].shootable = flag; break; case CELL_WATER: map[m].cell[j].water = flag; break; case CELL_NPC: map[m].cell[j].npc = flag; break; case CELL_BASILICA: map[m].cell[j].basilica = flag; break; case CELL_LANDPROTECTOR: map[m].cell[j].landprotector = flag; break; case CELL_NOVENDING: map[m].cell[j].novending = flag; break; case CELL_NOCHAT: map[m].cell[j].nochat = flag; break; case CELL_PK: map[m].cell[j].pk = flag; break; //<---add this line default: ShowWarning("map_setcell: invalid cell type '%d'\n", (int)cell); break; }}//+++++++++++++++++++++++++++++++++////map.htypedef enum { CELL_WALKABLE, CELL_SHOOTABLE, CELL_WATER, CELL_NPC, CELL_BASILICA, CELL_LANDPROTECTOR, CELL_NOVENDING, CELL_NOCHAT, CELL_MAELSTROM, CELL_ICEWALL, CELL_PK, // <---add this line} cell_t;//+++++++++++++++++++++++++++++++++//struct mapcell{ // terrain flags unsigned char walkable : 1, shootable : 1, water : 1; // dynamic flags unsigned char npc : 1, basilica : 1, landprotector : 1, novending : 1, nochat : 1, pk : 1;//<---add this//+++++++++++++++++++++++++++++++++//// db\const.txtcell_walkable 0cell_shootable 1cell_water 2cell_npc 3cell_basilica 4cell_landprotector 5cell_novending 6cell_nochat 7cell_pk 10 // <---add this line//+++++++++++++++++++++++++++++++++//Огромное спасибо данному человеку!! Единственный кто помог в данной проблеме! Ссылка на комментарий Поделиться на другие сайты Поделиться
nejiko Опубликовано 21 июля, 2013 Автор Жалоба Поделиться Опубликовано 21 июля, 2013 Народ подскажите,атаковать можно но только при зажатой клавишей Shift что можно сделать с этой проблемой? /shift не вариант не помогает! Ссылка на комментарий Поделиться на другие сайты Поделиться
SupR1g Опубликовано 4 августа, 2013 Жалоба Поделиться Опубликовано 4 августа, 2013 Народ подскажите,атаковать можно но только при зажатой клавишей Shift что можно сделать с этой проблемой? /shift не вариант не помогает!/nc off, /ns on...Потом refresh....мне помогало. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения