Jump to content

Kichi

Members
  • Posts

    509
  • Joined

  • Last visited

  • Days Won

    9

Posts posted by Kichi

  1. if (!mobcount(strnpcinfo(2),"Agit#"+strnpcinfo(2)+"::OnAgitBreak")) {
            monster strnpcinfo(2),.@emproom[0],.@emproom[1],"Emperium",1288,1,"Agit#"+strnpcinfo(2)+"::OnAgitBreak";
    }
    else(!mobcount(strnpcinfo(2),"Agit#"+strnpcinfo(2)+"::OnAgitBreak")){
    monster strnpcinfo(2),.@emproom[2],.@emproom[3],"Emperium",4000,1,"Agi#"+strnpcinfo(2)+"::OnAgitBreak";
        }
        end;

    you can't give an argument to else,

     

    if (!mobcount(strnpcinfo(2),"Agit#"+strnpcinfo(2)+"::OnAgitBreak")) {
    monster strnpcinfo(2),.@emproom[0],.@emproom[1],"Emperium",1288,1,"Agit#"+strnpcinfo(2)+"::OnAgitBreak";
    }

    means, if there are no monster emperium. it will spawn a new one

    else(!mobcount(strnpcinfo(2),"Agit#"+strnpcinfo(2)+"::OnAgitBreak")){
    monster strnpcinfo(2),.@emproom[2],.@emproom[3],"Emperium",4000,1,"Agi#"+strnpcinfo(2)+"::OnAgitBreak";
        }

    and this isn't correct, even correct it will be spawn new emperium event the other emperium still in castle

    • Upvote 1
  2.  

    "Overbrand",

        "MAX Lv : 5",

        "^777777Skill Requirement : Moonslasher 3 / Pinpoint Attack 1  ^000000",

        "Skill Form : ^777777Active / Damage ^000000",

        "Description : ^777777Draws a cross on the ground to cause damage at a range of up to 6x6. Enemies that receive damage are knocked back. If targets are pushed into a wall or obstacles, they receive additional damage.^000000",

        "[Lv 1] : ^777777Piercing Atk 400% / Smashing Atk 300%  ^000000",

        "[Lv 2] : ^777777Piercing Atk 800% / Smashing Atk 600%  ^000000",

        "[Lv 3] : ^777777Piercing Atk 1200% / Smashing Atk 900%  ^000000",

        "[Lv 4] : ^777777Piercing Atk 1600% / Smashing Atk 1200%  ^000000",

        "[Lv 5] : ^777777Piercing Atk 2000% / Smashing Atk 1500%  ^000000"

     

    if you disagree

    you can change the skill become target skill instead of ground skill

  3. change to:

     

    		case BL_PC:
    		{
    			struct map_session_data *sd;
    			struct map_session_data *sds;
    			if( t_bl == s_bl ) break;
    			sd = BL_CAST(BL_PC, t_bl);
    			sds = BL_CAST(BL_PC, s_bl);
    			if( sd->state.monster_ignore && flag&BCT_ENEMY )
    				return 0; // Global inminuty only to Attacks
    			if( sd->status.karma && s_bl->type == BL_PC && ((TBL_PC*)s_bl)->status.karma )
    				state |= BCT_ENEMY; // Characters with bad karma may fight amongst them
    			if( sds->state.killable && sd->state.killable ) {
    				state |= BCT_ENEMY; // Everything can kill it
    				strip_enemy = 0;
    			}
    			break;
    		}
    

    untested

    • Upvote 1
  4. you can learn from

    conf/battle.player.conf

    // Same as max_aspd, but for 3rd classes. (Default 193, Highest allowed 199)
    max_third_aspd: 193
    
    // Maximum walk speed rate (200 would be capped to twice the normal speed)
    max_walk_speed: 300
    

    and edit

    status.c
     

    // ----- ASPD CALCULATION -----
    
    	/// Unlike other stats, ASPD rate modifiers from skills/SCs/items/etc are first all added together, then the final modifier is applied
    
    	// Basic ASPD value
    	i = status_base_amotion_pc(sd,status);
    	status->amotion = cap_value(i,((sd->class_&JOBL_THIRD) ? battle_config.max_third_aspd : battle_config.max_aspd),2000);
    
    
  5. ID,Sprite_Name,kROName,iROName,LV,HP,SP,EXP,JEXP,Range1,ATK1,ATK2,

    DEF,MDEF,STR,AGI,VIT,INT,DEX,LUK,Range2,Range3,Scale,Race,Element,Mode,Speed,aDelay,aMotion,dMotion,

    MEXP,MVP1id,MVP1per,MVP2id,MVP2per,MVP3id,MVP3per,Drop1id,Drop1per,Drop2id,Drop2per,Drop3id,Drop3per,Drop4id,Drop4per,Drop5id,Drop5per,Drop6id,Drop6per,Drop7id,Drop7per,Drop8id,Drop8per,Drop9id,Drop9per,DropCardid,DropCardper

     

    1313,BEELZEBUB_,Beelzebub,Beelzebub,255,10000000,0,6666666,6666666,2,180027,170627,
    0,0,2050,555,355,355,1000,355,20,12,2,6,88,0x37B5,100,111,30,432,
    3333333,10000,0,5500,0,0,0,5000,0,5000,0,2000,20516,05,2000,2000,2702,2000,985,5432,742,5500,0,0,0,0,0,1
     
     
    for  extend mvp drop become 7 you have to edit src and all mob_db.
    i recomend to get the mvp id once mvp killed and give a random chance for 4/5/6/7 items
  6. skill.c

    find:
     

    // New guild skills [Celest]
    	case GD_BATTLEORDER:
    		if(flag&1) {
    			if (status_get_guild_id(src) == status_get_guild_id(bl))
    				sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id, skill_lv));
    		} else if (status_get_guild_id(src)) {
    			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
    			map_foreachinrange(skill_area_sub, src,
    				skill_get_splash(skill_id, skill_lv), BL_PC,
    				src,skill_id,skill_lv,tick, flag|BCT_GUILD|1,
    				skill_castend_nodamage_id);
    			if (sd)
    				guild_block_skill(sd,skill_get_time2(skill_id,skill_lv));
    		}
    		break;
    	case GD_REGENERATION:
    		if(flag&1) {
    			if (status_get_guild_id(src) == status_get_guild_id(bl))
    				sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id, skill_lv));
    		} else if (status_get_guild_id(src)) {
    			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
    			map_foreachinrange(skill_area_sub, src,
    				skill_get_splash(skill_id, skill_lv), BL_PC,
    				src,skill_id,skill_lv,tick, flag|BCT_GUILD|1,
    				skill_castend_nodamage_id);
    			if (sd)
    				guild_block_skill(sd,skill_get_time2(skill_id,skill_lv));
    		}
    		break;
    	case GD_RESTORE:
    		if(flag&1) {
    			if (status_get_guild_id(src) == status_get_guild_id(bl))
    				clif_skill_nodamage(src,bl,AL_HEAL,status_percent_heal(bl,90,90),1);
    		} else if (status_get_guild_id(src)) {
    			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
    			map_foreachinrange(skill_area_sub, src,
    				skill_get_splash(skill_id, skill_lv), BL_PC,
    				src,skill_id,skill_lv,tick, flag|BCT_GUILD|1,
    				skill_castend_nodamage_id);
    			if (sd)
    				guild_block_skill(sd,skill_get_time2(skill_id,skill_lv));
    		}
    		break;
    	case GD_EMERGENCYCALL:
    	case GD_ITEMEMERGENCYCALL:
    		{
    			int8 dx[9] = {-1, 1, 0, 0,-1, 1,-1, 1, 0};
    			int8 dy[9] = { 0, 0, 1,-1, 1,-1,-1, 1, 0};
    			uint8 j = 0, calls = 0, called = 0;
    			struct guild *g;
    			// i don't know if it actually summons in a circle, but oh well. ;P
    			g = sd?sd->guild:guild_search(status_get_guild_id(src));
    			if (!g)
    				break;
    
    			if (skill_id == GD_ITEMEMERGENCYCALL)
    				switch (skill_lv) {
    					case 1:	calls = 7; break;
    					case 2:	calls = 12; break;
    					case 3:	calls = 20; break;
    					default: calls = 0;	break;
    				}
    
    			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
    			for (i = 0; i < g->max_member && (!calls || (calls && called < calls)); i++, j++) {
    				if (j > 8)
    					j = 0;
    				if ((dstsd = g->member[i].sd) != NULL && sd != dstsd && !dstsd->state.autotrade && !pc_isdead(dstsd)) {
    					if (map[dstsd->bl.m].flag.nowarp && !map_flag_gvg2(dstsd->bl.m))
    						continue;
    					if(map_getcell(src->m,src->x+dx[j],src->y+dy[j],CELL_CHKNOREACH))
    						dx[j] = dy[j] = 0;
    					pc_setpos(dstsd, map_id2index(src->m), src->x+dx[j], src->y+dy[j], CLR_RESPAWN);
    					called++;
    				}
    			}
    			if (sd)
    				guild_block_skill(sd,skill_get_time2(skill_id,skill_lv));
    		}
    		break;
    

    replace with :

     

    // New guild skills [Celest]
    	case GD_BATTLEORDER:
    		if(flag&1) {
    			if (status_get_guild_id(src) == status_get_guild_id(bl))
    				sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id, skill_lv));
    		} else if (status_get_guild_id(src)) {
    			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
    			map_foreachinrange(skill_area_sub, src,
    				skill_get_splash(skill_id, skill_lv), BL_PC,
    				src,skill_id,skill_lv,tick, flag|BCT_GUILD|1,
    				skill_castend_nodamage_id);
    			if (sd)
    				skill_blockpc_start(sd, skill_id, time);
    		}
    		break;
    	case GD_REGENERATION:
    		if(flag&1) {
    			if (status_get_guild_id(src) == status_get_guild_id(bl))
    				sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id, skill_lv));
    		} else if (status_get_guild_id(src)) {
    			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
    			map_foreachinrange(skill_area_sub, src,
    				skill_get_splash(skill_id, skill_lv), BL_PC,
    				src,skill_id,skill_lv,tick, flag|BCT_GUILD|1,
    				skill_castend_nodamage_id);
    			if (sd)
    				skill_blockpc_start(sd, skill_id, time);
    		}
    		break;
    	case GD_RESTORE:
    		if(flag&1) {
    			if (status_get_guild_id(src) == status_get_guild_id(bl))
    				clif_skill_nodamage(src,bl,AL_HEAL,status_percent_heal(bl,90,90),1);
    		} else if (status_get_guild_id(src)) {
    			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
    			map_foreachinrange(skill_area_sub, src,
    				skill_get_splash(skill_id, skill_lv), BL_PC,
    				src,skill_id,skill_lv,tick, flag|BCT_GUILD|1,
    				skill_castend_nodamage_id);
    			if (sd)
    				skill_blockpc_start(sd, skill_id, time);
    		}
    		break;
    	case GD_EMERGENCYCALL:
    	case GD_ITEMEMERGENCYCALL:
    		{
    			int8 dx[9] = {-1, 1, 0, 0,-1, 1,-1, 1, 0};
    			int8 dy[9] = { 0, 0, 1,-1, 1,-1,-1, 1, 0};
    			uint8 j = 0, calls = 0, called = 0;
    			struct guild *g;
    			// i don't know if it actually summons in a circle, but oh well. ;P
    			g = sd?sd->guild:guild_search(status_get_guild_id(src));
    			if (!g)
    				break;
    
    			if (skill_id == GD_ITEMEMERGENCYCALL)
    				switch (skill_lv) {
    					case 1:	calls = 7; break;
    					case 2:	calls = 12; break;
    					case 3:	calls = 20; break;
    					default: calls = 0;	break;
    				}
    
    			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
    			for (i = 0; i < g->max_member && (!calls || (calls && called < calls)); i++, j++) {
    				if (j > 8)
    					j = 0;
    				if ((dstsd = g->member[i].sd) != NULL && sd != dstsd && !dstsd->state.autotrade && !pc_isdead(dstsd)) {
    					if (map[dstsd->bl.m].flag.nowarp && !map_flag_gvg2(dstsd->bl.m))
    						continue;
    					if(map_getcell(src->m,src->x+dx[j],src->y+dy[j],CELL_CHKNOREACH))
    						dx[j] = dy[j] = 0;
    					pc_setpos(dstsd, map_id2index(src->m), src->x+dx[j], src->y+dy[j], CLR_RESPAWN);
    					called++;
    				}
    			}
    			if (sd)
    				skill_blockpc_start(sd, skill_id, time);
    		}
    		break;
    

    untested

×
×
  • Create New...