Jump to content

pajodex

Members
  • Posts

    436
  • Joined

  • Last visited

  • Days Won

    25

Everything posted by pajodex

  1. If this worked, tick this thread to solved. Also, upvote if you want This will help other players who needs the same solution! Thanks and you're welcome~ PS: This should have been in client support xD
  2. I see, I think you have to edit the client side for this to work. You should be able to know how to use GRF Editor... Then do the ff Find these: data/luafiles514/luafiles/skillonfoz/skillinfolist.lub data/luafiles514/luafiles/skillonfoz/skilldescript.lub and look for this: [SKID.NJ_KUNAI] = { Then edit the max level. Note: Don't forget to compile your grf
  3. You have to check "everything" in your code Its nearly impossible for me to know the problem because your the one who coded it. Try to check from top to bottom, you must have missed a part or you added them in the wrong part of the code.
  4. I tried to take a peek on your request, however, when I reached status.h, I realized that this will be really tedious to do since this requires making a new SC. This will require both server and client mod. Unless you have time and patience, this can be done but I don't since I'm also busy with mine. For example you want to add SC_BLESSING_CASH, You want to create a new sc by copying all SC_BLESSING codes in status.c paste it them to where they belong add _CASH in the end. if(sc->data[SC_BLESSING]) { if(sc->data[SC_BLESSING]->val2) str += sc->data[SC_BLESSING]->val2; else str >>= 1; } // Add this right below if(sc->data[SC_BLESSING_CASH]) { if(sc->data[SC_BLESSING_CASH]->val2) str += sc->data[SC_BLESSING_CASH]->val2; else str >>= 1; } if (status_isimmune(bl)) { switch (type) { case SC_DECREASEAGI: case SC_SILENCE: case SC_COMA: case SC_INCREASEAGI: case SC_BLESSING: case SC_BLESSING_CASH: // add this if(status_has_mode(status,MD_STATUS_IMMUNE) && !(flag&SCSTART_NOAVOID)) { if (type>=SC_COMMON_MIN && type <= SC_COMMON_MAX) return 0; switch (type) { case SC_BLESSING: case SC_BLESSING_CASH: // add this case SC_DECREASEAGI: case SC_PROVOKE: case SC_COMA: // Before overlapping fail, one must check for status cured. switch (type) { case SC_BLESSING_CASH: // add this case SC_BLESSING: // !TODO: Blessing and Agi up should do 1 damage against players on Undead Status, even on PvM // !but cannot be plagiarized (this requires aegis investigation on packets and official behavior) [Brainstorm] if ((!undead_flag && status->race != RC_DEMON) || bl->type == BL_PC) { if (sc->data[SC_STONE] && sc->opt1 == OPT1_STONE) status_change_end(bl, SC_STONE, INVALID_TIMER); if (sc->data[SC_CURSE]) { status_change_end(bl, SC_CURSE, INVALID_TIMER); return 1; // End Curse and do not give stat boost } } if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH) status_change_end(bl, SC_SPIRIT, INVALID_TIMER); break; and repeat the process until all SC_BLESSING Codes are added with custom SC_BLESSING_CASH (NOTE: I DID NOT PUT EVERYTHING YOU NEED TO PUT, YOU HAVE TO DO IT YOURSELF) Then for "_CASH" parts, find all then add your custom _CASH below for example: case SC_2011RWC_SCROLL: status_change_end(bl,SC_FOOD_STR_CASH,INVALID_TIMER); status_change_end(bl,SC_FOOD_AGI_CASH,INVALID_TIMER); status_change_end(bl,SC_FOOD_VIT_CASH,INVALID_TIMER); status_change_end(bl,SC_FOOD_INT_CASH,INVALID_TIMER); status_change_end(bl,SC_FOOD_DEX_CASH,INVALID_TIMER); status_change_end(bl,SC_FOOD_LUK_CASH,INVALID_TIMER); status_change_end(bl,SC_BLESSING_CASH,INVALID_TIMER); // add this break; if(type == 0) { switch (i) { // Type 0: PC killed -> Place here statuses that do not dispel on death. case SC_ELEMENTALCHANGE: // Only when its Holy or Dark that it doesn't dispell on death if( sc->data[i]->val2 != ELE_HOLY && sc->data[i]->val2 != ELE_DARK ) break; case SC_WEIGHT50: ...... case SC_FOOD_STR_CASH: case SC_FOOD_AGI_CASH: case SC_FOOD_VIT_CASH: case SC_FOOD_DEX_CASH: case SC_FOOD_INT_CASH: case SC_FOOD_LUK_CASH: case SC_BLESSING_CASH: // add this You must get my point from here: Then add status ICON (Which will require CLIENT MODS TOO) - I think there is a guide in doing this just use the search engine: StatusIconChangeTable[SC_FOOD_STR_CASH] = SI_FOOD_STR_CASH; StatusIconChangeTable[SC_FOOD_AGI_CASH] = SI_FOOD_AGI_CASH; StatusIconChangeTable[SC_FOOD_VIT_CASH] = SI_FOOD_VIT_CASH; StatusIconChangeTable[SC_FOOD_DEX_CASH] = SI_FOOD_DEX_CASH; StatusIconChangeTable[SC_FOOD_INT_CASH] = SI_FOOD_INT_CASH; StatusIconChangeTable[SC_FOOD_LUK_CASH] = SI_FOOD_LUK_CASH; StatusIconChangeTable[SC_BLESSING_CASH] = SI_BLESSING_CASH; // You need to add status Icon file named as SI_BLESSING_CASH And the SCB effects: StatusChangeFlagTable[SC_FOOD_STR_CASH] |= SCB_STR; StatusChangeFlagTable[SC_FOOD_AGI_CASH] |= SCB_AGI; StatusChangeFlagTable[SC_FOOD_VIT_CASH] |= SCB_VIT; StatusChangeFlagTable[SC_FOOD_DEX_CASH] |= SCB_DEX; StatusChangeFlagTable[SC_FOOD_INT_CASH] |= SCB_INT; StatusChangeFlagTable[SC_FOOD_LUK_CASH] |= SCB_LUK; StatusChangeFlagTable[SC_ATTHASTE_CASH] |= SCB_ASPD; StatusChangeFlagTable[SC_BLESSING_CASH] |= SCB_123123; // aadd this with SCB of SC_BLESSING (im not gonna put it myself) Then find a free spot at status.h This is more than enough to say that this is really tedious. Well, not impossible tho. @Alexandrite
  5. Hi, Here you go, feel free to edit this at your needs. //============= by pajodex ======================// prontera,150,180,4 script Skill Points giver 100,{ If(SkillPoint_r == 1) { mes "You have received your extra skill points"; close2; end; } mes "Hi, I can give you extra skill points"; If(select("Yes:No") == 1 ) { next; mes "Here you go!"; set SkillPoint,SkillPoint+100; // gives 100 extra skill points SkillPoint_r = 1; close; } else { mes "Come back at any time"; close; } } @tathanngudong
  6. View File MVP Ladder only on MVP Maps with announcer Yet another simple MVP Kill reward on MVP Maps Only with an announcer and now with a simple MVP Ladder If player is in a party, the reward will be given randomly to online party members. You can config the script easily at this part: OnInit: setarray .p_rwd, 607,1; // Party reward <item>,<amount> setarray .s_rwd, 607,1; // Solo reward <item>,<amount> .chance = 50; // Drop rate chances % .gm = 10; // Prevents gm level and above to trigger the event // MVP Map list setarray .t_maps$[0],"// <MVP MAPS> This script will also help other in-game players see if an MVP has been slain. I'm open for suggestions, comments, reactions and such for the betterment of this script and my skill. Questions? Q> Why only at MVP Maps? A> Because some server puts MVP Rooms which the reward can be abused. Submitter pajodex Submitted 01/30/2018 Category Utilities Video Content Author pajodex  
  7. If you can wait, I will do it tomorrow. I'm about to sleep now. Or wait for someone to code. Here is the idea " skillpoints = skillpoints + n".. You have to modify the reset npc also. "If(job=ninja) set skillpoints, skillpoints + n" I'm on phone. Too lazy to format
  8. I like the idea. I think this should be moved to src support. Anyways, I will try to produce this one tomorrow and I will let you know. I won't promise but I will try. @Alexandrite
  9. Thanks for the information about the $$ vars. Was totally unaware on it. However, I had some tutorials on discord with script experts and helped me with this. I used ROdex instead of this code. Your help is really appreciated.
  10. Try to Comment the NPCKillEvent line
  11. I love you :* May I ask where did you get those modes? XD
  12. LOL sorry I'm sure now case SA_ELEMENTWATER: case SA_ELEMENTFIRE: case SA_ELEMENTGROUND: case SA_ELEMENTWIND: //if (sd && (!dstmd || status_has_mode(tstatus,MD_STATUS_IMMUNE))) // Only works on monsters (Except status immune monsters). // break; comment it out
  13. try this: From: if (sd && (!dstmd || status_has_mode(tstatus,MD_STATUS_IMMUNE))) to: if (sd && dstmd || status_has_mode(tstatus,MD_STATUS_IMMUNE))
  14. Try this: from: if (getmonsterinfo(killedrid,22)) { to: if (getmonsterinfo(killedrid,22) || strcharinfo(3) == instance_mapname("INSTANCE_MAP") ) { not tested
  15. Hi, I'm getting console error: [Error]: buildin_getcharid: Player with nick '150103' is not found. [Error]: buildin_getcharid: Player with nick '150103' is not found. with this code: OnClock0000: set .prize, 7227; set .amount, 5; query_sql "SELECT `char_id` FROM `char_reg_num` ORDER BY `key` = 'kills' DESC LIMIT 1",$kill$; set if (!isloggedin(getcharid(0, $kill$))) { query_sql "INSERT INTO `inventory` (`char_id`, `nameid`, `amount`, `equip`, `identify` ) VALUES ('" +getcharid(0, $kill$)+ "', '" +.prize+ "', '" +.amount+ "', 0, 1)"; } else getitem .prize, .amount, getcharid(0, $kill$); end; I based it from this post xD Regards~
  16. Did you try editing the skill_cast_db? I added 1 sec cool down 2nd to the last part //-- ASC_BREAKER 379,250,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,0,0,0,1000,0
  17. Well, honestly I'm not a programmer. I just look at the codes and try what happens if I do this and that. I think you have to do something with the scale part. Do the equation and you can get it right: int scale = battle_config.castrate_dex_scale - status_get_agi(bl); specifically this equation: battle_config.castrate_dex_scale = your battle config cast rate dex scale status_get_agi(bl); = your character agi staat
  18. This is so saddening. I'm busy scripting an NPC, so I cant really test it out my self. Revert everything. change scale to your stat desired from: time = time * scale / battle_config.castrate_dex_scale; To this: time = time * 200 / battle_config.castrate_dex_scale; Not that but this xD int scale = battle_config.castrate_dex_scale - status_get_agi(bl); to something like int scale = 200 - status_get_agi(bl);
  19. I'm trying to help, relax. I traced something out. It seems that the fixed 150 variable is coming from here: { "castrate_dex_scale", &battle_config.castrate_dex_scale, 150, 1, INT_MAX, }, Let me help you, do this: find this part: if (battle_config.delay_dependon_agi && !(delaynodex&1)) { // if skill delay is allowed to be reduced by agi int scale = battle_config.castrate_dex_scale - status_get_agi(bl); if (scale > 0) time = time * scale / battle_config.castrate_dex_scale; else //To be capped later to minimum. time = 0; and edit this part: time = time * scale / battle_config.castrate_dex_scale; to this: time = time * scale / 200; // <-- 200, your desired agi stat
  20. Nvm that. try skill.cpp Look for this part: /*========================================== * Does delay reductions based on dex/agi, sc data, item bonuses, ... *------------------------------------------*/ int skill_delayfix(struct block_list *bl, uint16 skill_id, uint16 skill_lv) { int delaynodex = skill_get_delaynodex(skill_id); int time = skill_get_delay(skill_id, skill_lv); struct map_session_data *sd; struct status_change *sc = status_get_sc(bl); nullpo_ret(bl); sd = BL_CAST(BL_PC, bl); if (skill_id == SA_ABRACADABRA || skill_id == WM_RANDOMIZESPELL) return 0; //Will use picked skill's delay. if (bl->type&battle_config.no_skill_delay) return battle_config.min_skill_delay_limit; if (time < 0) time = -time + status_get_amotion(bl); // If set to <0, add to attack motion. // Delay reductions switch (skill_id) { //Monk combo skills have their delay reduced by agi/dex. case MO_TRIPLEATTACK: case MO_CHAINCOMBO: case MO_COMBOFINISH: case CH_TIGERFIST: case CH_CHAINCRUSH: case SR_DRAGONCOMBO: case SR_FALLENEMPIRE: //If delay not specified, it will be 1000 - 4*agi - 2*dex if (time == 0) time = 1000; time -= (4 * status_get_agi(bl) + 2 * status_get_dex(bl)); break; case HP_BASILICA: if (sc && !sc->data[SC_BASILICA]) time = 0; // There is no Delay on Basilica creation, only on cancel break; default: if (battle_config.delay_dependon_dex && !(delaynodex&1)) { // if skill delay is allowed to be reduced by dex int scale = battle_config.castrate_dex_scale - status_get_dex(bl); if (scale > 0) time = time * scale / battle_config.castrate_dex_scale; else //To be capped later to minimum. time = 0; } if (battle_config.delay_dependon_agi && !(delaynodex&1)) { // if skill delay is allowed to be reduced by agi int scale = battle_config.castrate_dex_scale - status_get_agi(bl); if (scale > 0) time = time * scale / battle_config.castrate_dex_scale; else //To be capped later to minimum. time = 0; } } if (sc && sc->data[SC_SPIRIT]) { switch (skill_id) { case CR_SHIELDBOOMERANG: if (sc->data[SC_SPIRIT]->val2 == SL_CRUSADER) time /= 2; break; case AS_SONICBLOW: if (!map_flag_gvg2(bl->m) && !map[bl->m].flag.battleground && sc->data[SC_SPIRIT]->val2 == SL_ASSASIN) time /= 2; break; } } if (!(delaynodex&2)) { if (sc && sc->count) { if (sc->data[SC_POEMBRAGI]) time -= time * sc->data[SC_POEMBRAGI]->val3 / 100; if (sc->data[SC_WIND_INSIGNIA] && sc->data[SC_WIND_INSIGNIA]->val1 == 3 && skill_get_type(skill_id) == BF_MAGIC && skill_get_ele(skill_id, skill_lv) == ELE_WIND) time /= 2; // After Delay of Wind element spells reduced by 50%. } } if (!(delaynodex&4) && sd && sd->delayrate != 100) time = time * sd->delayrate / 100; if (battle_config.delay_rate != 100) time = time * battle_config.delay_rate / 100; //ShowInfo("Delay delayfix = %d\n",time); return max(time,0); } Try playing this part: if (!(delaynodex&4) && sd && sd->delayrate != 100) time = time * sd->delayrate / 100; if (battle_config.delay_rate != 100) time = time * battle_config.delay_rate / 100; maybe double the divider from 100 to 200.. trial and error will help
  21. Version 2.0

    1443 downloads

    Yet another simple MVP Kill reward on MVP Maps Only with an announcer and now with a simple MVP Ladder If player is in a party, the reward will be given randomly to online party members. You can config the script easily at this part: OnInit: setarray .p_rwd, 607,1; // Party reward <item>,<amount> setarray .s_rwd, 607,1; // Solo reward <item>,<amount> .chance = 50; // Drop rate chances % .gm = 10; // Prevents gm level and above to trigger the event // MVP Map list setarray .t_maps$[0],"// <MVP MAPS> This script will also help other in-game players see if an MVP has been slain. I'm open for suggestions, comments, reactions and such for the betterment of this script and my skill. Questions? Q> Why only at MVP Maps? A> Because some server puts MVP Rooms which the reward can be abused.
    Free
  22. I don't know how but try editing this part at skill.cpp if (sd && (!dstmd || status_has_mode(tstatus,MD_STATUS_IMMUNE)))
  23. Sorry, my bad. Go check src/map/battle.cpp Look for these: { "casting_rate", &battle_config.cast_rate, 100, 0, INT_MAX, }, { "delay_rate", &battle_config.delay_rate, 100, 0, INT_MAX, }, { "delay_dependon_dex", &battle_config.delay_dependon_dex, 0, 0, 1, }, { "delay_dependon_agi", &battle_config.delay_dependon_agi, 0, 0, 1, }, Try to explore that part.
  24. Try to disable renewal cast at src/config/renewal.h
×
×
  • Create New...