//------------------------------------------------------------------------
//緑文字の記述が追加する記述
//追加行については目安です
//TeraPad秀丸などを用いて必ず全角スペース4つをtabに変換してください
//------------------------------------------------------------------------

 

○GvGSE用の処理を追加
src/lib/mmo.h ~67
#define MAX_GUILDALLIANCE 16
#define MAX_GUILDSKILL 15                    //ギルドスキルの数
//▼▼▼ここから▼▼▼---------------------------------------------------
//GVGSE用の処理を追加
//#define MAX_GUILDCASTLE 20                    //全砦数
#define MAX_GUILDCASTLE 30                    //全砦数
//▲▲▲ここまで▲▲▲---------------------------------------------------

 

src/map/battle.c@battle_damage() ~145
    if(target->type==BL_MOB){    // MOB
        struct mob_data *md=(struct mob_data *)target;
        if(md && md->ud.skilltimer!=-1 && md->ud.state.skillcastcancel)    // 詠唱妨害
            unit_skillcastcancel(target,0);
        mob_damage(bl,md,damage,0);

//▼▼▼ここから▼▼▼---------------------------------------------------
//GVGSE用の処理を追加
//        if(sd && md && md->bl.prev != NULL && !unit_isdead(&md->bl) && flag&(BF_WEAPON|BF_NORMAL) && status_get_class(target) != 1288)
        if(sd && md && md->bl.prev != NULL && !unit_isdead(&md->bl) && flag&(BF_WEAPON|BF_NORMAL) && status_get_class(target) != 1288 &&
         status_get_class(target) != 1905 && status_get_class(target) != 1907 && status_get_class(target) != 1908)
//▲▲▲ここまで▲▲▲---------------------------------------------------
        {
            int mode = status_get_mode(target);

~234
    else if(target->type==BL_HOM){    // HOM
        struct homun_data *hd=(struct homun_data *)target;
        if(hd && hd->ud.skilltimer!=-1 && hd->ud.state.skillcastcancel)    // 詠唱妨害
            unit_skillcastcancel(target,0);
        homun_damage(bl,hd,damage);

//▼▼▼ここから▼▼▼---------------------------------------------------
//GVGSE用の処理を追加
//        if(sd && hd && hd->bl.prev != NULL && !unit_isdead(&hd->bl) && flag&(BF_WEAPON|BF_NORMAL) && status_get_class(target) != 1288)
        if(sd && hd && hd->bl.prev != NULL && !unit_isdead(&hd->bl) && flag&(BF_WEAPON|BF_NORMAL) && status_get_class(target) != 1288 &&
         status_get_class(target) != 1905 && status_get_class(target) != 1907 && status_get_class(target) != 1908)
//▲▲▲ここまで▲▲▲---------------------------------------------------
        {
            int mode = status_get_mode(target);

 

clif.c@clif_mob0078() ~1094
    WBUFW(buf,13)=(unsigned short)md->estate;
    WBUFW(buf,15)=mob_get_viewclass(md->class);
#if PACKETVER >= 20071106
    WBUFW(buf,0)=0x0078;
    WBUFB(buf,2)=0;
    WBUFL(buf,3)=md->bl.id;
    WBUFW(buf,7)=status_get_speed(&md->bl);
    WBUFW(buf,9)=md->bstate;
    WBUFW(buf,11)=md->hstate;
    WBUFW(buf,13)=(unsigned short)md->estate;
    WBUFW(buf,15)=mob_get_viewclass(md->class);
//▼▼▼ここから▼▼▼---------------------------------------------------
//GVGSE用の処理を追加
//    if((md->class == 1285 || md->class == 1286 || md->class == 1287) && md->guild_id){
    if(((md->class >= 1285 && md->class <= 1287) || md->class == 1899 || md->class == 1900) && md->guild_id){
//▲▲▲ここまで▲▲▲---------------------------------------------------
        struct guild *g=guild_search(md->guild_id);
        if(g)
            WBUFL(buf,23)=g->emblem_id;
        WBUFL(buf,27)=md->guild_id;
    }
    WBUFW(buf,43)=md->opt3;
    WBUFPOS(buf,47,md->bl.x,md->bl.y);
    WBUFB(buf,49)|=md->dir&0x0f;
    WBUFB(buf,50)=5;
    WBUFB(buf,51)=5;
    WBUFW(buf,53)=((level = status_get_lv(&md->bl))>99)? 99:level;
#else
    WBUFW(buf,0)=0x0078;
    WBUFL(buf,2)=md->bl.id;
    WBUFW(buf,6)=status_get_speed(&md->bl);
    WBUFW(buf,8)=md->bstate;
    WBUFW(buf,10)=md->hstate;
    WBUFW(buf,12)=(unsigned short)md->estate;
    WBUFW(buf,14)=mob_get_viewclass(md->class);
//▼▼▼ここから▼▼▼---------------------------------------------------
//GVGSE用の処理を追加
//    if((md->class == 1285 || md->class == 1286 || md->class == 1287) && md->guild_id){
    if(((md->class >= 1285 && md->class <= 1287) || md->class == 1899 || md->class == 1900) && md->guild_id){
//▲▲▲ここまで▲▲▲---------------------------------------------------

        struct guild *g=guild_search(md->guild_id);
        if(g)
            WBUFL(buf,22)=g->emblem_id;
        WBUFL(buf,26)=md->guild_id;
    }

 

src/map/clif.c@clif_mob007b() ~1295
    WBUFW(buf,12)=(unsigned short)md->estate;
    WBUFW(buf,14)=mob_get_viewclass(md->class);
    WBUFL(buf,22)=gettick();
//▼▼▼ここから▼▼▼---------------------------------------------------
//GVGSE用の処理を追加
//    if((md->class == 1285 || md->class == 1286 || md->class == 1287) && md->guild_id){
    if(((md->class >= 1285 && md->class <= 1287) || md->class == 1899 || md->class == 1900) && md->guild_id){
//▲▲▲ここまで▲▲▲---------------------------------------------------
        struct guild *g=guild_search(md->guild_id);
        if(g)

 

src/map/mob.c@mob_spawn() ~412
    md->next_walktime = tick+atn_rand()%50+5000;

    md->state.nodrop=0;
    md->state.noexp=0;
    md->state.nomvp=0;
//    md->guild_id = 0;
//▼▼▼ここから▼▼▼---------------------------------------------------
//GVGSE用の処理を追加
//    if(md->class == 1288 || md->class == 1287 || md->class == 1286 || md->class == 1285) {
    if((md->class <= 1288 && md->class >= 1285) || md->class == 1905 || md->class == 1908 || md->class == 1907 || md->class == 1900 || md->class == 1899) {
//▲▲▲ここまで▲▲▲---------------------------------------------------
        struct guild_castle *gc=guild_mapname2gc(map[md->bl.m].name);
        if(gc)
            md->guild_id = gc->guild_id;
    }

@mob_can_reach() ~475
    //=========== guildcastle guardian no search start===========
    //when players are the guild castle member not attack them !
//▼▼▼ここから▼▼▼---------------------------------------------------
//GVGSE用の処理を追加
//    if(md->class == 1285 || md->class == 1286 || md->class == 1287){
    if((md->class >= 1285 && md->class <= 1287) || md->class == 1899 || md->class == 1900){
//▲▲▲ここまで▲▲▲---------------------------------------------------
        struct map_session_data *sd;
        struct guild *g;
        struct guild_castle *gc=guild_mapname2gc(map[bl->m].name);
        if(bl->type == BL_PC){

@mob_gvmobcheck() ~3428
    nullpo_retr(0,sd);
    nullpo_retr(0,bl);

//▼▼▼ここから▼▼▼---------------------------------------------------
//GVGSE用の処理を追加
//    if(bl->type==BL_MOB && (md=(struct mob_data *)bl) &&
//        (md->class == 1288 || md->class == 1287 || md->class == 1286 || md->class == 1285))
//    {
    if(bl->type==BL_MOB && (md=(struct mob_data *)bl) &&
        ((md->class <= 1288 && md->class >= 1285) || md->class == 1905 ||
         md->class == 1908 || md->class == 1907 || md->class == 1900 || md->class == 1899))
    {
//▲▲▲ここまで▲▲▲---------------------------------------------------
        struct guild_castle *gc=guild_mapname2gc(map[sd->bl.m].name);
        struct guild *g=guild_search(sd->status.guild_id);

 

src/map/script.c@buildin_maprespawnguildid_sub() ~7606
    if(sd){
        if(flag&1 && g_id && sd->status.guild_id == g_id)
            pc_setpos(sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,3,0);
        else if(flag&2 && (!g_id || sd->status.guild_id != g_id))
            pc_setpos(sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,3,0);
    }
    if(flag&4 && md){
//▼▼▼ここから▼▼▼---------------------------------------------------
//GVGSE用の処理を追加
//        if(md->class < 1285 || md->class > 1288)
//            unit_remove_map(&md->bl,1,0);
        if(!(md->class >= 1285 || md->class <= 1288) || !(md->class >= 1899 || md->class <= 1900) || !(md->class >= 1907 || md->class <= 1908))
            unit_remove_map(&md->bl,1,0);
//▲▲▲ここまで▲▲▲---------------------------------------------------
    }
    return 0;
}

src/map/skill.c@skill_castend_nodamage_id() ~3604
    case TK_HIGHJUMP://走り高跳び(ノピティギ)
        {
            int x,y,dir = status_get_dir(src);
            x = src->x + dirx[dir]*skilllv*2;
            y = src->y + diry[dir]*skilllv*2;
            clif_skill_nodamage(src,bl,skillid,skilllv,1);
            // 着地地点とその一歩先が移動可能セルでPC,MOB,NPCいずれも居ないなら
//▼▼▼ここから▼▼▼---------------------------------------------------
//GVGSE用の処理を追加
//            if( !map[src->m].flag.pvp && (!map[src->m].flag.noteleport || map[src->m].flag.gvg) &&
//             map_getcell(src->m,x,y,CELL_CHKPASS) && map_getcell(src->m,x+dirx[dir],y+diry[dir],CELL_CHKPASS) &&
//             !map_count_oncell(src->m,x,y,BL_PC|BL_MOB|BL_NPC)
//            ) {
            if( !map[src->m].flag.pvp && (!map[src->m].flag.noteleport || (map[src->m].flag.gvg && !map[src->m].flag.noicewall)) &&
             map_getcell(src->m,x,y,CELL_CHKPASS) && map_getcell(src->m,x+dirx[dir],y+diry[dir],CELL_CHKPASS) &&
             !map_count_oncell(src->m,x,y,BL_PC|BL_MOB|BL_NPC)
            ) {
//▲▲▲ここまで▲▲▲---------------------------------------------------

                unit_movepos(src,x,y,0x11);
            }
        }
        break;

 

 

○守護石へのスキル使用を禁止する(妄想仕様のためお好みでどうぞ タロット禁止だけ入れておくのもいいです)

src/map/battle.c@battle_damage() ~510
if(damage > 0) { //GvG PK
struct guild_castle *gc=guild_mapname2gc(map[bl->m].name);
struct guild *g;

//▼▼▼ここから▼▼▼---------------------------------------------------
//GVGSE用の処理を追加
//        if(class == 1288) {    // 1288:エンペリウム
        if(class == 1288 || class == 1907 || class == 1908) {    // 1288:エンペリウム 1907~1908:守護石
//▲▲▲ここまで▲▲▲---------------------------------------------------
            if(flag&BF_SKILL && skill_num!=PA_PRESSURE && skill_num!=HW_GRAVITATION)//プレッシャー
                return 0;
//▼▼▼ここから▼▼▼---------------------------------------------------
//GVGSE用の処理を追加
            if(class == 1288) {
                if(src->type == BL_PC) {
                    g=guild_search(((struct map_session_data *)src)->status.guild_id);

                    if(g == NULL)
                        return 0;//ギルド未加入ならダメージ無し
                    else if((gc != NULL) && g->guild_id == gc->guild_id)
                        return 0;//自占領ギルドのエンペならダメージ無し
                    else if(guild_checkskill(g,GD_APPROVAL) <= 0)
                        return 0;//正規ギルド承認がないとダメージ無し
                    else if (g && gc && guild_check_alliance(gc->guild_id, g->guild_id, 0) == 1)
                        return 0;    // 同盟ならダメージ無し
                }
                else
                    return 0;
            }
//▲▲▲ここまで▲▲▲---------------------------------------------------

        }
        if(map[bl->m].flag.gvg && skill_num!=PA_PRESSURE && skill_num!=HW_GRAVITATION){

@battle_calc_weapon_attack() 2348~
            }else{
                damage += damage * (150 + sc_data[SC_EDP].val1 * 50) / 100;
            }
            // no_cardfix = 1;
        }
        // サクリファイス
//▼▼▼ここから▼▼▼---------------------------------------------------
//GVGSE用の処理を追加
//        if (sc_data[SC_SACRIFICE].timer != -1 && !skill_num && status_get_class(target)!=1288) {
        if (sc_data[SC_SACRIFICE].timer != -1 && !skill_num && status_get_class(target)!=1288 && status_get_class(target)!=1907 && status_get_class(target)!=1908) {
//▲▲▲ここまで▲▲▲---------------------------------------------------
            int mhp = status_get_max_hp(src);

 

src/map/skill.c@skill_additional_effect() ~1230
//    if(sd && skillid != MC_CARTREVOLUTION && attack_type&BF_WEAPON){    /* カードによる追加効果 */
    if(sd && skillid != WS_CARTTERMINATION && skillid != CR_ACIDDEMONSTRATION){    /* カードによる追加効果 */
        int i;
        int sc_def_card=100;

        for(i=SC_STONE;i<=SC_BLEED;i++){
//▼▼▼ここから▼▼▼---------------------------------------------------
//守護石のスキル無効化
//            if(!dstmd || dstmd->class != 1288){
            if(!dstmd || dstmd->class != 1288 || dstmd->class != 1907 || dstmd->class != 1908){
//▲▲▲ここまで▲▲▲---------------------------------------------------
                if(sd->addeff_range_flag[i-SC_STONE]>2){
                    sd->addeff_range_flag[i-SC_STONE]-=2;    // レンジフラグがあれば元に戻す
                    continue;
                }

~1338
    //殴ってmob変化
//▼▼▼ここから▼▼▼---------------------------------------------------
//守護石のスキル無効化
//    if(sd && dstmd && mob_db[dstmd->class].race != 7 && !map[dstmd->bl.m].flag.nobranch
//        && !(mob_db[dstmd->class].mode&0x20) && attack_type&BF_WEAPON && dstmd->class != 1288 && dstmd->state.special_mob_ai != 1)
//    {
    if(sd && dstmd && mob_db[dstmd->class].race != 7 && !map[dstmd->bl.m].flag.nobranch
        && !(mob_db[dstmd->class].mode&0x20) && attack_type&BF_WEAPON && dstmd->class != 1288 && dstmd->class != 1907 && dstmd->class != 1908 && dstmd->state.special_mob_ai != 1)
    {
//▲▲▲ここまで▲▲▲---------------------------------------------------

        if(atn_rand()%10000 < sd->mob_class_change_rate)
        {
            //clif_skill_nodamage(src,bl,SA_CLASSCHANGE,1,1);
            mob_class_change_randam(dstmd,sd->status.base_level);
        }
    }

    return 0;
}

 

@skill_castend_damage_id() ~2748
    case HVAN_CAPRICE://カプリス
        {
            static int caprice[4] = { MG_COLDBOLT,MG_FIREBOLT,MG_LIGHTNINGBOLT,WZ_EARTHSPIKE};
            battle_skill_attack(BF_MAGIC,src,src,bl,caprice[atn_rand()%4],skilllv,tick,flag);
            clif_skill_nodamage(src,src,skillid,skilllv,1);
        }
        break;
    case CG_TAROTCARD:        /*運命のタロットカード*/
//▼▼▼ここから▼▼▼---------------------------------------------------
//守護石のスキル無効化
//        if(status_get_class(bl) == 1288){    //エンペリウム無効
        if(status_get_class(bl) == 1288 || status_get_class(bl) == 1907 || status_get_class(bl) == 1908){    //エンペリウム無効
//▲▲▲ここまで▲▲▲---------------------------------------------------
            clif_skill_fail(sd,skillid,0,0);
            break;
            }
        else
            skill_tarot_card_of_fate(src,bl,skillid,skilllv,tick,flag,0);
        break;
    case MG_FROSTDIVER:        /* フロストダイバー */

@skill_castend_nodamage_id() ~3113
    if(bl->prev == NULL)
        return 1;
    if(unit_isdead(bl) && skillid != ALL_RESURRECTION)
        return 1;
//▼▼▼ここから▼▼▼---------------------------------------------------
//守護石のスキル無効化
//    if(status_get_class(bl) == 1288)
    if(src != bl && (status_get_class(bl) == 1288 || status_get_class(bl) == 1907 || status_get_class(bl) == 1908))
        return 1;
//▲▲▲ここまで▲▲▲---------------------------------------------------

    sd = BL_DOWNCAST( BL_PC, src );
    md = BL_DOWNCAST( BL_MOB, src );

@skill_check_condition() ~9310
    case SG_HATE:
        {
            struct mob_data *md = map_id2md(sc->target);
//▼▼▼ここから▼▼▼---------------------------------------------------
//守護石のスキル無効化
//            if(md && md->class == 1288) {    // エンペは登録不可
            if(md && (md->class == 1288 || md->class == 1907 || md->class == 1908)) {    // エンペは登録不可
//▲▲▲ここまで▲▲▲---------------------------------------------------

                clif_skill_fail(sd,sc->id,0,0);
                return 0;
            }
        }
        break;
    case SG_FUSION:

 

src/map/unit.c@unit_skilluse_id2() ~1014
    case HP_BASILICA:
        if(sc_data && sc_data[SC_BASILICA].timer != -1)
            casttime = 0;
        break;
    case PA_PRESSURE:
//▼▼▼ここから▼▼▼---------------------------------------------------
//守護石のスキル無効化
//        if(status_get_class(target) == 1288 && src_sd) {
        if((status_get_class(target) == 1288 || status_get_class(target) == 1907 || status_get_class(target) == 1908) && src_sd) {
//▲▲▲ここまで▲▲▲---------------------------------------------------

            clif_skill_fail(src_sd,skill_num,0,0); //エンペリウムには使用不可
            return 0;
        }
        break;