Jump to content

Mabuhay

Members
  • Posts

    446
  • Joined

  • Last visited

  • Days Won

    34

Everything posted by Mabuhay

  1. Not sure but in renewal, i dont think penalty applies? That's why ppl can level up faster if they go kill an MVP rather than killing mobs. If it does, perhaps only a little will be applied?
  2. +/positive when you have the level lower than the target -/negative when you have the level higher than the target. When you have 31 levels higher than the target, you only get 10% of exp. This is only based on how I understand. Maybe someone more knowledgeable might correct me if I am wrong.
  3. /////////////////////////////////////////////////////// // ___________ _____.__ // \__ ___/__.__.________/ ____\__| ____ ____ // | | < | |\_ __ \ __\| |/ \ / ___\ // | | \___ | | | \/| | | | | \/ /_/ > // |____| / ____| |__| |__| |__|___| /\___ / // \/ Scripts \//_____/ // //===================================================== // Name: Race to Max Level // // Description: // This NPC allows for Game Masters to set a reward to // be given to the first player of each 2nd class that // reaches maximum level (base and class). //===================================================== /////////////////////////////////////////////////////// morocc,159,91,5 script Race to Max Level 58,{ set .@gm_level, 99; // GM level required to set the reward set .@maxbase, 99; set .@maxjob, 50; set .@defaultreward, 510; set .@uniqueid$, get_unique_id(); setarray .@rewardablejobs[0], Job_Lord_Knight, Job_High_Priest, Job_High_Wizard, Job_Whitesmith, Job_Sniper, Job_Assassin_Cross, Job_Paladin, Job_Champion, Job_Professor, Job_Stalker, Job_Creator, Job_Clown, Job_Gypsy; Begin: mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Hello, " + ((getgmlevel() >= .@gm_level) ? "master! What do you want to do today?" : "are you here for your reward?"); next; switch(select(((getgmlevel() >= .@gm_level) ? "Set Reward:Restart Race" : ":") + ":YES!:...Reward?:Who was rewarded?:Cancel")) { case 1: goto SetReward; case 2: goto RestartRace; case 3: goto GetReward; case 4: goto ExplainRace; case 5: goto ShowRewarded; default: end; } SetReward: mes "[ ^0099ccRace to Max Level^000000 ]"; if ($reward == 0) set $reward, .@defaultreward; mes "The reward is " + getitemname($reward) + " (ID: " + $reward + ")."; mes "Do you want to change it?"; next; if (select("Yes:No") == 1) { mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Please enter the new reward item ID."; input .@rewardid; mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Set " + getitemname(.@rewardid) + " as the reward?"; next; if(select("Yes:No") == 1) { set $reward, .@rewardid; } } goto Begin; RestartRace: mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Are you sure you want to restart the race?"; next; if (select("Yes:No") == 1) { for (.@i = 0; .@i < getarraysize(.@rewardablejobs); .@i++) { set $rewarded$[.@rewardablejobs[.@i]], ""; } announce "The Race to Max Level has begun! Claim a reward once you reach " + .@maxbase + " base and " + .@maxjob + " class!", bc_all; } goto Begin; GetReward: next; mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Let's see... " + strcharinfo(0) + ", huh?"; next; set .@competitioner, 0; for (.@i = 0; .@i < getarraysize(.@rewardablejobs); .@i++) { if (Class == .@rewardablejobs[.@i]) { set .@competitioner, 1; if ( readparam(bStr) < 300 || readparam(bVit) < 300 || readparam(bInt) < 300 || readparam(bAgi) < 300 || readparam(bLuk) < 300 || readparam(bDex) < 300 ) { mes "You need to have 300 for all Stats."; } else if ($rewarded$[Class] == strcharinfo(0)+":"+.@uniqueid$ ) { mes "You have already claimed your reward."; } else if ($rewarded$[Class] != "") { mes "Too late!"; mes "The reward for " + jobname(Class) + " was already claimed by " + $rewarded$[Class] + "."; } else goto GiveReward; } } if (.@competitioner == 0) mes "[ ^0099ccRace to Max Level^000000 ]"; mes "You need to change your job."; close; GiveReward: set $rewarded$[Class], strcharinfo(0)+":"+.@uniqueid$; mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Congratulations! You were the first " + jobname(Class) + " to reach " + .@maxbase + " base and " + .@maxjob + " class!"; getitem $reward, 1; announce strcharinfo(0) + " (" + jobname(Class) + ") reached Max. Level and received " + getitemname($reward) + "!", bc_all; close; ExplainRace: mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Yes! When you reach the maximum level for your class, talk to me and you'll be rewarded with a special item."; next; goto Begin; ShowRewarded: mes "[ ^0099ccRace to Max Level^000000 ]"; for (.@i = 0; .@i < getarraysize(.@rewardablejobs); .@i++) { explode(.@rewarded$, $rewarded$[.@rewardablejobs[.@i]], ":"); mes jobname(.@rewardablejobs[.@i]) + ": " + (($rewarded$[.@rewardablejobs[.@i]] != "") ? .@rewarded$[0] : "^ff0000Nobody^000000"); } next; goto Begin; } Todo:
  4. ahh i see, didnt read the script. My bad.
  5. <map name>,<x>,<y>,<facing>%TAB%shop%TAB%<NPC Name>%TAB%<sprite id>,<itemid>:<price>{,<itemid>:<price>...} ^ why not use that?
  6. Err this should be the fix for that : Tested and working. poring_catcher_v2.txt
  7. Commenting that part will enable healing to Emp. Not sure why but this might be caused by the WoE maps not showing damage. Meaning, Emp is healing correctly but the values are not exactly shown correctly. I never tried doing this modification.
  8. edit .event_time = .@timer + .event_cd - 1; // deduct 1 sec from current time to .event_time = .@time + .event_cd - 1; // deduct 1 sec from current time poring_catcher_v2.txt
  9. Just a good timing that i am online and not quite busy. ?
  10. // credits to Annieruru - script Stylist -1,{ mes .npc_name$; mes "Eu posso mudar sua aparência."; if( .item_size ){ mes " "; mes "^777777[ TAXAS DO SERVIÇO ]^000000"; for( .@i = 0; .@i < .menu_size; .@i++ ) if( .npc_mode & ( 1 << .@i ) ) if( .item[.@i] ) mes "^0055FF"+.menu_name$[.@i]+" : ^777777"+ .item[.@i] +" x "+getitemname(7420)+"^000000"; else mes "^0055FF"+.menu_name$[.@i]+" : ^777777Free of Charge^000000"; } next; .@style = ( select( .npc_menu$ ) - 1 ); .@style_value = getlook( .look_type[.@style] ); deletearray .@blacklist; switch( .@style ){ Case 0: .@blacklist$ = ","+getd( ".blacklist_hairstyle_"+Sex+"$" )+","; break; Case 1: .@blacklist$ = ","+getd( ".blacklist_haircolor_"+Sex+"$" )+","; break; Case 2: .@blacklist$ = ","+getd( ".blacklist_clothe_"+Sex+"$" )+","; break; default: break; } .@style_number = .min_style[.@style]; do{ next; mes .npc_name$; mes "Current "+.menu_name$[.@style]+" : ^0055FF"+.@style_number+"th^000000"; mes " "; .@removed = 0; if( compare( .@blacklist$,","+.@style_number+"," ) ){ mes "^FF0000NOTE : This style REMOVED^000000"; .@removed = 1; setlook .look_type[.@style],.min_style[.@style]; }else{ setlook .look_type[.@style],.@style_number; if( .item[.@style] ){ mes "Cost : ^777777"+ .item[.@style] +" x "+getitemname(7420)+"^000000"; mes " "; } } .@next = .@style_number + 1; .@prev = .@style_number - 1; if( .@next > .max_style[.@style] ) .@next = .min_style[.@style]; if( .@prev < .min_style[.@style] ) .@prev = .max_style[.@style]; .@select = prompt( "Próximo - [ ^777777"+.@next+"th Style^000000 ]", "Voltar - [ ^777777"+.@prev+"th Style^000000 ]", "Pular para...", ( .@removed )?"":"^0055FFCerto, eu quero esse "+.menu_name$[.@style]+"^000000" ); switch( .@select ){ Case 1: .@style_number = .@next; break; Case 2: .@style_number = .@prev; break; Case 3: mes "Available Style : ^0055FF"+.min_style[.@style]+" ~ "+.max_style[.@style]+"^000000."; input .@style_number,.min_style[.@style],.max_style[.@style]; break; Case 4: if( .@style_value == .@style_number ){ mes "Swt..this is your original hairstyles."; } else if( .item[.@style] && countitem(7420) < .item[.@style] ){ mes "You dont have enough "+getitemname(7420)+" to change this "+.menu_name$[.@style]+"."; }else{ mes "Aproveite seu ^0055FFNEW "+.menu_name$[.@style]+" !!"; if( .item[.@style] ) delitem 7420, .item[.@style]; .@style_value = .@style_number; } default: setlook .look_type[.@style],.@style_value; break; } }while( .@select != 4 && .@select != 255 ); close; OnInit: // NPC name .npc_name$ = "[^0055FF ::: Estilista ::: ^000000]"; // NPC Mode ( Bitmask ) // 1 - Enable Hairstyle // 2 - Enable Hair Color // 4 - Enable Cloth Color .npc_mode = 7; // Menu Name setarray .menu_name$, "Cor do Cabelo", "Cor do Cabelo", "Cor da Roupa"; // Payment (7420) setarray .item, 100000, // Hairstyle 0, // Hair Color 35000; // Cloth Color // Blacklisted Style for each style and each gender. // --- Female --- .blacklist_hairstyle_0$ = "2,4,6"; .blacklist_haircolor_0$ = "1,3,5"; .blacklist_cloth_0$ = "143,188,261"; // --- Male --- .blacklist_hairstyle_1$ = "3,5,7"; .blacklist_haircolor_1$ = "2,4,6"; .blacklist_cloth_1$ = "143,188,261"; // Dont edit setarray .min_style,getbattleflag( "min_hair_style" ),getbattleflag( "min_hair_color" ),getbattleflag( "min_cloth_color" ); setarray .max_style,getbattleflag( "max_hair_style" ),getbattleflag( "max_hair_color" ),getbattleflag( "max_cloth_color" ); .menu_size = getarraysize( .menu_name$ ); .item_size = getarraysize( .item ); setarray .look_type,LOOK_HAIR,LOOK_HAIR_COLOR,LOOK_CLOTHES_COLOR; for( .npc_menu$ = ""; .@i < .menu_size; .@i++ ) .npc_menu$ = .npc_menu$ + ( ( .npc_mode & ( 1 << .@i ) )? .menu_name$[.@i]:"" ) +":"; end; } // NPC Lists prontera,175,202,4 duplicate(Stylist) Estilista#4 878 @IsabelaFernandez Dont forget to edit this part : // Payment (7420) = item amount setarray .item, 100000, // Hairstyle 0, // Hair Color 35000; // Cloth Color
  11. add .start = false; in : } else if( .@players < 1 ) { .@end = true; .start = false; announce "There was no winner on the Dice Event.",bc_all,0x0ceedb; also : mapannounce "There were no winner clear in all of the event. The event is now over.",bc_map,0x0ceedb; edit to: mapannounce "quiz_02","There were no winner clear in all of the event. The event is now over.",bc_map,0x0ceedb; Dice_Event_v2.txt uploading another version in a bit. dl link is this for the update in-case mods cant approve immediately Dice_Event_v2.txt A newer version to fix the timer when event starts. just change `.@timer` to `.@time`
  12. eh, try checking this part: in status.cpp /** * RE MATK Formula (from irowiki:http:// irowiki.org/wiki/MATK) * MATK = (sMATK + wMATK + eMATK) * Multiplicative Modifiers **/ int lv = status_get_lv(bl); status->matk_min = status_base_matk_min(bl, status, lv); status->matk_max = status_base_matk_max(bl, status, lv); switch( bl->type ) { case BL_PC: { int wMatk = 0; int variance = 0; // Any +MATK you get from skills and cards, including cards in weapon, is added here. if (sd) { if (sd->bonus.ematk > 0) status->matk_min += sd->bonus.ematk; if (pc_checkskill(sd, SU_POWEROFLAND) > 0) { if ((pc_checkskill(sd, SU_SV_STEMSPEAR) + pc_checkskill(sd, SU_CN_POWDERING) + pc_checkskill(sd, SU_CN_METEOR) + pc_checkskill(sd, SU_SV_ROOTTWIST) + pc_checkskill(sd, SU_CHATTERING) + pc_checkskill(sd, SU_MEOWMEOW) + pc_checkskill(sd, SU_NYANGGRASS)) > 19) status->matk_min += status->matk_min * 20 / 100; } } edit this part : if (sd) { if (sd->bonus.ematk > 0) status->matk_min += sd->bonus.ematk; if (pc_checkskill(sd, SU_POWEROFLAND) > 0) { if ((pc_checkskill(sd, SU_SV_STEMSPEAR) + pc_checkskill(sd, SU_CN_POWDERING) + pc_checkskill(sd, SU_CN_METEOR) + pc_checkskill(sd, SU_SV_ROOTTWIST) + pc_checkskill(sd, SU_CHATTERING) + pc_checkskill(sd, SU_MEOWMEOW) + pc_checkskill(sd, SU_NYANGGRASS)) > 19) status->matk_min += status->matk_min * 20 / 100; } if (skill=pc_checkskill(sd, SA_DRAGONOLOGY) > 0) // custom MAtk Bonus status->matk_min += status->matk_min * skill / 100; // adds 1% MATK per skill level } However, I presume this will work on renewal only. NVM, this will only work on SCB_MATK.. haha sorry for blindly checking the code. Maybe you can just add custom status effect on Dragonology like in Mindbreaker skill??
  13. try this then give me feed back asap so i can make some updates right away. Quite busy right now so i can't give it a test. find : .@sec = gettime(DT_SECOND)+1; replace with: .@sec = gettime(DT_SECOND)-1; Atm, download is not available because i submitted an update. use this link first. poring_catcher_v2.txt
  14. Ohh i see. Although these modifications are great., it is less likely to be implemented in official rathena since it is not officially in any official ragnarok (iro, kro, etc..) if i am not mistaken. Hoping to see a re-development on this even if it would be an external modification like source patch so we might actually see some new* stuffs around. im sure a lot of ppl could thinK of a great use of these.
  15. I found something.. Add this : base_status->matk_max += base_status->matk_max * skill / 100; base_status->matk_min += base_status->matk_min * skill / 100; here: if((skill=pc_checkskill(sd,SA_DRAGONOLOGY))>0) { #ifdef RENEWAL skill = skill * 2; #else skill = skill * 4; #endif sd->right_weapon.addrace[RC_DRAGON]+=skill; sd->left_weapon.addrace[RC_DRAGON]+=skill; sd->magic_addrace[RC_DRAGON]+=skill; sd->subrace[RC_DRAGON]+=skill;
  16. /** * Adds magic attack modifications based on status changes * @param bl: Object to change matk [PC|MOB|HOM|MER|ELEM] * @param sc: Object's status change information * @param matk: Initial matk * @return modified matk with cap_value(matk,0,USHRT_MAX) */ try putting it here.. im in doubt since it says status changes tho.
  17. I think some of them are already in rathena such as OnAtkCast, AtkElemBoost, etc.. bonus3 bAutoSpell,sk,y,n; Adds a n/10% chance to cast skill sk of level y when attacking bonus2 bMagicAtkEle,e,x; Increases damage of e element magic by x% perhaps most of them are already implemented but just a totally different name as of today.
  18. Try looking at this part at status.cpp : (Im not sure where to put it) // Absolute modifiers from passive skills Try adding this: if((skill=pc_checkskill(sd,SA_DRAGONOLOGY))>0) matk += matk * skill / 100; // adds 1% MATK per skill level Not quite sure but i hope it would help.
  19. Lacking break on strip armor code. int d = 0; // By pass FCP when using single strip skills by 15%(requires Glistening Coat). if ( sd && tsc && sd->sc.data[SC_SPIRIT] && sd->sc.data[SC_SPIRIT]->val2 == SL_ROGUE && rand()%100 < 75 && ( skill_id == RG_STRIPWEAPON && tsc->data[SC_CP_WEAPON] || skill_id == RG_STRIPSHIELD && tsc->data[SC_CP_SHIELD] || skill_id == RG_STRIPARMOR && tsc->data[SC_CP_ARMOR] || skill_id == RG_STRIPHELM && tsc->data[SC_CP_HELM] ) ) { int item_id = 7139; // Glistening Coat int ii; ARR_FIND( 0, MAX_INVENTORY, ii, sd->inventory.u.items_inventory[ii].nameid == item_id ); if ( ii < MAX_INVENTORY ) { pc_delitem( sd, ii, 1, 0, 0, LOG_TYPE_CONSUME); switch ( skill_id ) { case RG_STRIPWEAPON: status_change_end( bl, SC_CP_WEAPON, INVALID_TIMER ); sc_start(src,bl,SC_STRIPWEAPON,100,skill_lv,skill_get_time(skill_id,skill_lv)); break; case RG_STRIPSHIELD: status_change_end( bl, SC_CP_SHIELD, INVALID_TIMER ); sc_start(src,bl,SC_STRIPSHIELD,100,skill_lv,skill_get_time(skill_id,skill_lv)); break; case RG_STRIPARMOR: status_change_end( bl, SC_CP_ARMOR, INVALID_TIMER ); sc_start(src,bl,SC_STRIPARMOR,100,skill_lv,skill_get_time(skill_id,skill_lv)); break; // <-- this part was missing case RG_STRIPHELM: status_change_end( bl, SC_CP_HELM, INVALID_TIMER ); sc_start(src,bl,SC_STRIPHELM,100,skill_lv,skill_get_time(skill_id,skill_lv)); break; } clif_skill_nodamage( src, bl, skill_id, skill_lv, i ); break; } }
  20. Yes it is possible to add percentage on drop. However, it is pointless to do so. It will only complicate this simple event which most probably be ignored by players as your server runs.
  21. I dunno why you used npc timers and stuff for this, from what i understood. This should update the cashpoint of a player when loggin in. This is why you dont use `atcommand` script because it is very inefficient. (personally) - script DonationUpdate -1,{ OnPCLoginEvent: .@aid = getcharid(3); query_sql("SELECT `id`, `status`, `donate` FROM `test_donation` WHERE `account_id` = "+.@aid, .@id, .@status, .@donation); if ( !.@status ) { #CASHPOINTS += .@donation; query_sql("UPDATE `test_donation` SET `status`='1' WHERE `id`='"+.@id+"' AND `account_id`="+.@aid); } end; } Although that is untested, but it should work as how i understood your script. Make sure you use this on a test server first to avoid messing up your data. I believe this should greatly reduce memory usage on your server. Edit : Changed #CASHPOINT to #CASHPOINTS PS: I suggest just let players relog instead of putting timers to avoid any unnecessary memory consumption.
  22. // by Mabuhay // 24 hrs cd // account bound prontera,149,191,5 script Daily Reward 911,{ .@cd = 60*60*24; // 24 hrs .@time = gettimetick(2); if ( #DAILYRENTREWARD+.@cd > .@time ) { mes "Come back again after "+Time2Str(#DAILYRENTREWARD+.@cd)+" for your reward."; close; } mes "Here is your daily reward!"; close2; rentitem 1201, 7200; // <id>, <time in seconds> #DAILYRENTREWARD = .@time; end; } Untested but should work
  23. View File Euphy's Quest Shop with Success Rates In response to this post : I just added success rate function. Enjoy! Original Script is by Euphy and I just added some functions to this. PS : if there are any broken event scripts ( due to old versions ), just DM me the link and I might be interested in updating it. PPS: I will only FIX it and not modify it at all. ? Submitter Mabuhay Submitted 11/10/2019 Category Games, Events, Quests Video Content Author Euphy, Mabuhay  
  24. View File Item Trader - as requested This is a reply from this post : Can trade multiple item with success or fail rates. // < ITEM FOR TRADE >, < AMOUNT >, < ITEM TRADED >, < AMOUNT >, < SUCCESS RATE >.. setarray .@trade, 501, 10, 502, 1, 50, // 10 red potions = 1 orange potion @ 50 % 601, 10, 902, 1, 100, // and so on.. @ 100% 701, 10, 702, 1, 75; // 75% I will fix any old scripts that arent working as of date. Just leave me DM so I can check. I dont attend any modifications unless I am interested to add it myself. I also work for free for the interest of many. If you have any personal request for your own personal work and asking for free fix, i will ignore you right away. Thanks and enjoy! Submitter Mabuhay Submitted 11/10/2019 Category Utilities Video Content Author Mabuhay  
×
×
  • Create New...