Jump to content

GM.PiXeL

Members
  • Content Count

    56
  • Joined

  • Last visited

Posts posted by GM.PiXeL


  1. change

     

    iStatus->get_sc(src)

     

     

    to

     

    status->get_sc(src)

    It lessens the error but still got this:

    1>..srcmapskill.c(6453): error C2065: 'i' : undeclared identifier
    1>..srcmapskill.c(6459): error C2065: 'i' : undeclared identifier
    1>..srcmapskill.c(6485): error C2065: 'i' : undeclared identifier
    1>..srcmapskill.c(6486): error C2065: 'i' : undeclared identifier
     
    @ Line 6452 : ii = i;
     
    @ Line 6459 : if( !i && ( skill_id == RG_STRIPWEAPON || skill_id == RG_STRIPSHIELD || skill_id == RG_STRIPARMOR || skill_id == RG_STRIPHELM ) )
     
    @ Line 6485 : clif->skill_nodamage(src,bl,skill_id,skill_lv,i);
     
    @ Line 6486 : i = 1;

  2. Hi Hercules,
    I wanted to add this patch on my server.
    I tried it doing manually.
     
    http://herc.ws/board/files/file/27-forcibly-strip/
     

    Index: map/skill.c===================================================================--- map/skill.c	(revision 12238)+++ map/skill.c	(working copy)@@ -6397,6 +6397,7 @@ 		case SC_STRIPACCESSARY: { 			unsigned short location = 0; 			int d = 0;+			unsigned char ii = 0;  			//Rate in percent 			if ( skill_id == ST_FULLSTRIP ) {@@ -6450,10 +6451,48 @@ 				break; 			} +			ii = i;+ 			//Attempts to strip at rate i and duration d 			if( (i = skill->strip_equip(bl, location, i, skill_lv, d)) || (skill_id != ST_FULLSTRIP && skill_id != GC_WEAPONCRUSH ) ) 				clif->skill_nodamage(src,bl,skill_id,skill_lv,i); +			if( !i && ( skill_id == RG_STRIPWEAPON || skill_id == RG_STRIPSHIELD || skill_id == RG_STRIPARMOR || skill_id == RG_STRIPHELM ) )+			{+				int idx = sd?pc->search_inventory (sd, 7321):-1;+				if( idx >= 0 )+				{+					struct status_change *sc = iStatus->get_sc(src);+					if( sc->data[SC_SOULLINK] )+					{+						if( sc->data[SC_SOULLINK]->val2 == SL_ROGUE )+						{+							if (rnd()0 >= ii)+							{+								enum sc_type sc_atk;+								if( skill_id == RG_STRIPWEAPON )+									sc_atk = SC_NOEQUIPWEAPON;+								else if( skill_id == RG_STRIPSHIELD )+									sc_atk = SC_NOEQUIPSHIELD;+								else if( skill_id == RG_STRIPARMOR )+									sc_atk = SC_NOEQUIPARMOR;+								else if( skill_id == RG_STRIPHELM )+									sc_atk = SC_NOEQUIPHELM;+								else+									sc_atk = SC_NONE;+								if( sc_atk != SC_NONE )+								{+									sc_start(bl, sc_atk, 100, skill_lv, d);+									clif->skill_nodamage(src,bl,skill_id,skill_lv,i);+									i = 1;+								}+							}+							pc->delitem(sd, idx, 1, 0, 1, LOG_TYPE_NONE);+						}+					}+				}+			}+ 			//Nothing stripped. 			if( sd && !i ) 				clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);

     
    But this are the errors:
     
    1>..srcmapskill.c(6453): error C2065: 'i' : undeclared identifier
    1>..srcmapskill.c(6459): error C2065: 'i' : undeclared identifier
    1>..srcmapskill.c(6464): error C2065: 'iStatus' : undeclared identifier
    1>..srcmapskill.c(6464): error C2223: left of '->get_sc' must point to struct/union
    1>..srcmapskill.c(6485): error C2065: 'i' : undeclared identifier
    1>..srcmapskill.c(6486): error C2065: 'i' : undeclared identifier


  3. HI Hercules,

    This is my second/last topic on SL Modification.

    I want to add an extra effect on Soul Link skill.

    This is the effects i want to add:

     

    • Sage

     - The Sage's HP will also increase by BaseLvl*200 HP and his/her Vit will increase by Int/5 (For example, 255 Int will give you an additional bonus of 255/5 = 51 Vit.

    • Wizard

     - The Wizard's HP will also Increase by BaseLvl*200 HP and his/her Vit will increase by Int/5(For example, 255 Int will give you an additional bonus of 255/5 = 51 Vit.

    • Star Gladiator

     - Enable to use Lvl 10 Parrying. Increase damage on Boss monster and Holy monster by 70%.

    • Rouge

     - You can use Single Strip through Full Chemical Protection by consuming Glistening Coat(Working only when the target has FCP or Full Chemical Protection)

     

    Oh, I found a src code on Sage/Wizard and Star Gladiator on this topic:

    But the problem is, I do not know where to add those.

    http://herc.ws/board/topic/2232-soul-link-modif-request/?p=14962

     

    I also found the one for Rouge, but there is a problem after compiling.

    http://herc.ws/board/files/download/27-forcibly-strip/

    48 Errors and 2 Warnings.

     

    Thanks In Advance.

    (PS: You can post the src mod one by one.)

     

    Status:

    Wizard - Done.

    Sage - Done.

    Star Gladiator - Done.

    Rouge - Not yet Done.


  4.  

    Haven't tested those mods, but they built without any errors.

    Regarding adding one soul skill to blacksmiths you can only mod your databases and it should work, but of course KN_CHARGEATK will stop being a quest skill and'll only work when a character is linked even when he is a knight... I've tried making some changes in the source-code to bypass this issue, but it seems that if the skill is not sent to the client with 0x8 as info it won't be activated when someone is linked. So I bypassed using a quite "unorthodox" way, it's not neat code as I don't like to force the client to do anything, but it works. I think the other modifications worked as they are fairly simple to make, so I haven't tested them in-game just the one that's complex.

    Open src/map/status.c and find:

    			case SC_RAISINGDRAGON:				sce->val2 = st->max_hp / 100;// Officially tested its 1%hp drain. [Jobbie]			break;
    Add below:
    			case SC_SOULLINK:				// This is _not_ the best way to do that ):				if( (sd->class_&MAPID_UPPERMASK) == MAPID_BLACKSMITH )					pc->skill(sd, KN_CHARGEATK, 1, 0);				break;
    Find:
    			case ITEMID_ORC_LOAD_CARD:				clif->sc_end(&sd->bl, sd->bl.id, SELF, SI_MVPCARD_ORCLORD);				break;			}		}		break;
    Add below:
    		case SC_SOULLINK:			// This is _not_ the best way to do that ):			if(/* pc->checkskill(sd, KN_CHARGEATK) && */(sd->class_&MAPID_UPPERMASK) == MAPID_BLACKSMITH)				pc->skill(sd, KN_CHARGEATK, 0, 0);			break;
    Search for:
     	if( require.weapon && !pc_check_weapontype(sd,require.weapon) ) { 		clif->skill_fail(sd,skill_id,USESKILL_FAIL_THIS_WEAPON,0); 		return 0; 	}
    Replace it with:
    	if( require.weapon && !pc_check_weapontype(sd,require.weapon) ) {		// If linked, knights are able to use parrying with one handed swords (type 2)		if( !pc_check_weapontype(sd, 2) &&			!sd->sc.data[SC_SOULLINK] &&			!sd->sc.data[SC_SOULLINK]->val2 == SL_KNIGHT )		{			clif->skill_fail(sd,skill_id,USESKILL_FAIL_THIS_WEAPON,0);			return 0;		}	}
    Open src/map/battle.c and search for:
     				case SM_BASH: 				case MS_BASH: 					skillratio += 30 * skill_lv;
    Add below:
    					// If linked, super novices will have SM_BASH's ratio increased by 50%					if( sd->sc.data[SC_SOULLINK] && sd->sc.data[SC_SOULLINK]->val2 == SL_SUPERNOVICE )						skillratio += 50;
    Search for:
     				case MO_FINGEROFFENSIVE: 					skillratio+= 50 * skill_lv;
    Add below:
    					// If linked, monks will have MO_FINGEROFFENSIVE's ratio increased by 15%					if( sd->sc.data[SC_SOULLINK] && sd->sc.data[SC_SOULLINK]->val2 == SL_MONK )						skillratio += 15;
    Search for:
     				case CG_ARROWVULCAN: 					skillratio += 100 + 100 * skill_lv;
    Add below:
    					// If linked, bards/dancers will have CG_ARROWVULCAN's damage increased by 15%					if( sd->sc.data[SC_SOULLINK] && sd->sc.data[SC_SOULLINK]->val2 == SL_BARDDANCER )						skillratio += 15;
    Finally find:
     		if (md.damage < 0 || md.damage > INT_MAX>>1) 	  	//Overflow prevention, will anyone whine if I cap it to a few billion? 		//Not capped to INT_MAX to give some room for further damage increase.
    Add above:
    		// If linked, alchemists will have 15% increase in CR_ACIDDEMONSTRATION's damage		if( sd->sc.data[SC_SOULLINK] && sd->sc.data[SC_SOULLINK]->val2 == SL_ALCHEMIST )			md.damage += md.damage*15/100;
    Open src/map/pc.c and search for:
    	for (i = 0; i < ARRAYLENGTH(scw_list); i++) {		// Skills requiring specific weapon types		if( scw_list[i] == SC_DANCING && !battle_config.dancing_weaponswitch_fix )			continue;
    Add below:
    		// If linked, knights are able to use parrying with one handed swords (type 2)		if( scw_list[i] == SC_PARRYING && sd->sc.data[SC_SOULLINK] && sd->sc.data[SC_SOULLINK]->val2 == SL_KNIGHT			&& (!pc_check_weapontype(sd,skill->get_weapontype(status->sc2skill(scw_list[i]))) &&				!pc_check_weapontype(sd,2) )				)		{			status_change_end(&sd->bl, scw_list[i], INVALID_TIMER);			continue; // We don't want to fall under the next check		}
    Save all files and build your map-server, test in-game and if you're having any trouble just post and I'll try to answer as quickly as possible c:

     

    Regards.

    Correction:

      if( require.weapon && !pc_check_weapontype(sd,require.weapon) ) {

    clif->skill_fail(sd,skill_id,USESKILL_FAIL_THIS_WEAPON,0);

    return 0;

    }

     

    This is in src/map/skill.c

     

    Errors: All works fine except for the Knight/LK parrying skill using one hand sword.

    I still can't use parrying with one hand sword.

     

    • Alchemist - Done

    • Super Novice - Done

    • Blacksmith - Done

    • Bard / Dancer - Done

    • Monk - Done

    • Knight - Not Yet Done.


  5. HI Hercules,

    I want to add an extra effect on Soul Link skill.

    This is the effects i want to add:

     

    • Alchemist

     - Increase Acid Demonstration Skill by 15%.

    • Knight

     - Enable to use Parrying with one hand sword.

    • Super Novice

     - Boosts Bash by 50%.

    • Blacksmith

     - Enable to use LVL 1 Charge Attack.

    • Bard / Dancer

     - Increase arrow vulcan skill by 15%.

    • Monk

     - Increase Finger Offensive skill by 15%.

     

    Thanks In Advance.

    (PS: You can post the src mod one by one.)

     

    Status:

    • Alchemist - Done

    • Super Novice - Done

    • Blacksmith - Done

    • Bard / Dancer - Done

    • Monk - Done

    • Knight - Done


  6.  

    please follow Hercules Forum Rules

    [*]Posts in the support sections may be bumped with more information no less than 24 hours after the last post; if you have new information within less than 24h, edit your previous post.

    Sorry. I'll never do it again. thanks also for the link of forum rules.

     

     

     

     

    No you don't, if you add that SC_FREEZE will not be started in players that have luk >= 240

    What if I want to add : 220 Luk = 3secs Freeze. it will be : 

     

              // Players that have luk above or equal 260 are immune to Freeze

    if( type == SC_FREEZE && sd->battle_status.luk >= 260 )

    return 0;

    // Players that have luk above or equal 240 have freeze timer reduced to 2s

    if( type == SC_FREEZE && sd->battle_status.luk >= 240 && tick > 2000 )

    tick = 2000; // is in ms

                  return 0;

              // Players that have luk above or equal 220 have freeze timer reduced to 3s

    if( type == SC_FREEZE && sd->battle_status.luk >= 220 && tick > 3000 )

    tick = 3000; // is in ms

     

    Is this correct? only the last one will not have return 0;

     

    No it's not correct, it should be something like:
    			// Players that have luk above or equal 260 are immune to Freeze			if( type == SC_FREEZE && sd->battle_status.luk >= 260 )				return 0;			// Players that have luk above or equal 240 have freeze timer reduced to 2s			if( type == SC_FREEZE && sd->battle_status.luk >= 240 && tick > 2000 )				tick = 2000; // is in ms			if( type == SC_FREEZE && sd->battle_status.luk >= 220 && sd->battle_status.luk < 240 && tick > 3000 )				tick = 3000;
    If you return, the rest of this function won't be read, then it won't activate SC_FREEZE. Note that there are two different checks regarding luk in the third condition

    Thanks mate. /no1


  7. No you don't, if you add that SC_FREEZE will not be started in players that have luk >= 240

    What if I want to add : 220 Luk = 3secs Freeze. it will be : 

     

              // Players that have luk above or equal 260 are immune to Freeze

    if( type == SC_FREEZE && sd->battle_status.luk >= 260 )

    return 0;

    // Players that have luk above or equal 240 have freeze timer reduced to 2s

    if( type == SC_FREEZE && sd->battle_status.luk >= 240 && tick > 2000 )

    tick = 2000; // is in ms

                  return 0;

              // Players that have luk above or equal 220 have freeze timer reduced to 3s

    if( type == SC_FREEZE && sd->battle_status.luk >= 220 && tick > 3000 )

    tick = 3000; // is in ms

     

    Is this correct? only the last one will not have return 0;


  8.  

    I haven't tested those changes in-game, but they should work fine c: otherwise just post and I'll correct any mistakes, ok?

    Open src/map/status.c and search for:

    		case SC_FREEZE:			//Undead are immune to Freeze/Stone			if (undead_flag && !(flag&1))				return 0;
    Add below:
    			// Players that have luk above or equal 260 are immune to Freeze			if( type == SC_FREEZE && sd->battle_status.luk >= 260 )				return 0;			// Players that have luk above or equal 240 have freeze timer reduced to 2s			if( type == SC_FREEZE && sd->battle_status.luk >= 240 && tick > 2000 )				tick = 2000; // is in ms
    Save and rebuild.

     

    Happy new year

    do i have to add return 0; after tick = 2000; // is in ms?


  9. Hi Hercules,

     

    How to make if a player has 240 LUK freeze status will only be 2seconds.

    But if 260 LUK he will never be freeze.

     

    Example:

    High Wizard casts storm gust to 240 LUK player, then after 2 seconds, the freeze will removed.

     

    Another Example:

    High Wizard casts storm gust to 260 LUK player but did not freeze.

     

    Thanks in advanced.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.