clydelion Posted May 31, 2012 Posted May 31, 2012 (edited) Made from the latest rAthena release. This is my own implementation of the item "Scroll of SProtect" of Flyff to Ragnarok. I don't know if you'll find this useful, but I'll release it anyway. Scroll of SProtect item image : Description: Sprotects are used to prevent items from breaking during an upgrade for an item over +4. They are useful for Armor and Weapon Upgrades. You have to use this item script to activate sprotect. sc_start SC_SPROTECT,10000000,0; This is an initial release, there are probably bugs lying around there somewhere. Download v2sprotect2.diff V1 - Initial release V2 - Added the diff for refine npc. Edited May 31, 2012 by clydelion 2 Quote
Syouji Posted May 31, 2012 Posted May 31, 2012 I would like to know more about your item script =). Can you please answer these questions? The set duration of protection is set to 166.67 min. Does this mean you will have upgrade protection for that time period creating as many +10 items (armor/weap) as you want? Does the protection scroll limit you to a single successful upgrade on your armor/weapon? Quote
clydelion Posted May 31, 2012 Author Posted May 31, 2012 1.) No, I wanted it to be there until the user tries to upgrade something. 2.) Yes, after 1 attempt ( either successful or failure). Quote
Syouji Posted May 31, 2012 Posted May 31, 2012 Ah so the user has roughly almost 3 hrs to apply an upgrade to any item (armor or weapon) making it successful. Makes sense. Quote
clydelion Posted May 31, 2012 Author Posted May 31, 2012 Well upon re-checking, once the SC_SPROTECT starts(regardless of time limit), it won't end until the user try to upgrade. Quote
Jhedzkie Posted May 31, 2012 Posted May 31, 2012 (edited) i dont want to be rude or something, but i just want to share that i have a similar src mod with that (i tried to code last year for 3ceam. since +20 refine came out, so i need to find a way to somewhat prevent players hearts from breaking when they fail upgrade +19 to +20 lol, but it is not working pretty well). it also has support for custom status icon previously, but somewhat clients 2011-11- and later cant be hacked to display custom status icons. im a src mod noob and i really appreciate your work. it saved me a lot. and oh right, you might want to add it also to the new function.. BUILDIN_FUNC(downrefitem) Edited May 31, 2012 by Jhedzkie Quote
clydelion Posted May 31, 2012 Author Posted May 31, 2012 (edited) Woah that's cool. I'm not into client-side modifications though. Yes that can easily be done but what's 'downrefitem' for anyway? I really wanted this mod to work exactly like that of Flyff's mechanics. Edited May 31, 2012 by clydelion Quote
Jhedzkie Posted May 31, 2012 Posted May 31, 2012 (edited) Woah that's cool. I'm not into client-side modifications though. Yes that can easily be done but what's 'downrefitem' for anyway? I really wanted this mod to work exactly like that of Flyff's mechanics. try to check your script.c again, (if you have an updated src that is) it is just the next function to failedrefitem.. that's for failed upgrades not to break item (vanish item) but just to downgrade it. like from +17 down to +16. as for the client-side modification, as ive said, you need to incorporate a new status icon to the client, the icon is a 16x16 targa, that needs to be put on the effects folder, after that, you need to add some entries to the lua files as well. ( data\lua files\stateicon\efstids.lua;stateiconinfo.lua) but, then again, its not working anymore for clients 2011-11+ Edited May 31, 2012 by Jhedzkie Quote
clydelion Posted May 31, 2012 Author Posted May 31, 2012 (edited) I added support for 'downrefitem'. I didn't know it until now. Also included the new refine.txt to match up with the new src. Sorry for the shitty dialog though. HAHAHAHA! Updated first post. Edited May 31, 2012 by clydelion Quote
Jhedzkie Posted May 31, 2012 Posted May 31, 2012 (edited) wow. that's a lot of work tho. mine goes like this... //this part is inside the BUILDIN_FUNC(failedrefitem) if (num > 0 && num <= ARRAYLENGTH(equip)) i=pc_checkequip(sd,equip[num-1]); if(i >= 0) { + if(sc->data[sC_UPGRADE_PROTECTION]) // mine's called SC_UPGRADE_PROTECTION anyway. + { + status_change_end(bl, SC_UPGRADE_PROTECTION, INVALID_TIMER); + clif_displaymessage(sd->fd, msg_txt(720)); // conf/msg_athena.conf | 720: Scroll of Upgrade Protection has been used. + } + else + { /* here goes the script that is originally after the if statement. the one that breaks the item and logs it afterwards. */ +} and you dont even have to modify the refiner anymore. it is supposed to be triggered right after a failed attempt, cancels the SC effect, (as well as the status icon, that doesnt work anymore) and displays the message at the bottom of the screen telling, the scroll has been used etc. btw, my script is more than a year ago, when im really a noob in C language, (since i only know java) i just tried to edit it error by error, and i really dont know if i made leaks, overflows whatsoever. im still a noob in C since i dont really read about it, plus, i dont really know what the variables in rAthena are, and what are they for, such as bl, sd, fd and the likes. i did it just by copy pasting and a little trial and error. Edited May 31, 2012 by Jhedzkie Quote
clydelion Posted May 31, 2012 Author Posted May 31, 2012 You don't have to edit the refiner to make this work. It is for the players to have a correct dialog. Without modifying the dialog, the npc will tell the players that the equipment was broken, but in reality it is not, instead the SProtect was used . Quote
Jhedzkie Posted May 31, 2012 Posted May 31, 2012 You don't have to edit the refiner to make this work. It is for the players to have a correct dialog. Without modifying the dialog, the npc will tell the players that the equipment was broken, but in reality it is not, instead the SProtect was used . oh. hm. that's quite really a lot of work. great job anyway. Quote
quesoph Posted June 4, 2012 Posted June 4, 2012 Good Release but ill stick to the script that works exactly like this. good job. Quote
Jhedzkie Posted June 6, 2012 Posted June 6, 2012 Good Release but ill stick to the script that works exactly like this. good job. you might want to share yours if you had the better src mod. Quote
LCDTheOG Posted June 6, 2012 Posted June 6, 2012 so yeah i applied this patch, and nothings happening i put the itemscript inside of an item that is useable as healing, and useable as other and still not working :C. maybe i missed something? Quote
Jhedzkie Posted June 7, 2012 Posted June 7, 2012 (edited) how can i put custom icon on SProtect status? you need to create the icon, and add the icon itself to the client that you are using. i just asked somebody from eAthena to mod the client for me but its a long time ago and i forgot the my account already. =/ so yeah i applied this patch, and nothings happening i put the itemscript inside of an item that is useable as healing, and useable as other and still not working :C. maybe i missed something? it should work for you. i used the same thing and it worked for me. you just really might missout something. EDIT: change sc_start SC_SPROTECT,10000000,0; to sc_start SC_SPROTECT,1,0; 10000000 kinda makes no sense for me. my whole item script goes like this. 22007,Scroll_of_Upgrade_Protection,Scroll of Upgrade Protection,2,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_UPGRADE_PROTECTION,1,0; },{},{} and is working as intended. Edited June 7, 2012 by Jhedzkie Quote
LCDTheOG Posted June 8, 2012 Posted June 8, 2012 (edited) so yeah i got this working, lol now my next problem is, what do i need to put on this per = status_get_refine_chance(ditem->wlv, (int)item->refine); per += (((signed int)sd->status.job_level)-50)/2; //Updated per the new kro descriptions. [skotlex] pc_delitem(sd, i, 1, 0, 0, LOG_TYPE_OTHER); if (per > rnd() % 100) { for it to check if SC_SPROTECT is my current status. lol yeah this is the skill.c file for weaponrefine, but when i activate sprotect, the item still breaks so i'm guessing it needs to go right before pc_delitem(sd...etc, an if( sc_sprotect = 1){ yada yada yada} i'm kind of new to sourceing so yeah if any of u can help it would be great Edited June 8, 2012 by lilcooldude69 Quote
Jhedzkie Posted June 8, 2012 Posted June 8, 2012 where's that part lol? are you sure you are using the latest revision of rAthena? Quote
clydelion Posted June 8, 2012 Author Posted June 8, 2012 (edited) just a quick solution.. skill.c pc_addfame(sd,25); // Success to refine to +10 a lv2 weapon you forged = +25 fame point break; case 3: pc_addfame(sd,1000); // Success to refine to +10 a lv3 weapon you forged = +1000 fame point break; } } } else { + if(sd->sc.data[sC_SPROTECT]) + { + status_change_end(&sd->bl, SC_SPROTECT, INVALID_TIMER); + clif_refine(sd->fd,1,idx,item->refine); + clif_displaymessage(sd->fd,"[ SProtect is no longer in effect ]"); + + } else { item->refine = 0; if(item->equip) pc_unequipitem(sd,idx,3); clif_refine(sd->fd,1,idx,item->refine); pc_delitem(sd,idx,1,0,2, LOG_TYPE_OTHER); clif_misceffect(&sd->bl,2); clif_emotion(&sd->bl, E_OMG); + } } } } please tell if it works. Edited June 8, 2012 by clydelion Quote
LCDTheOG Posted June 8, 2012 Posted June 8, 2012 (edited) omg ty for quick reply , i'll tell u if it does, and @jhedzkie yes lol its hard to find it but its on line 13kish of skill.c i'll edit this post with an update if it works Update: yay it works, one more thing if its not too much trouble, where would i edit to make the skill weapon refine refine past +10 xD? Edited June 8, 2012 by lilcooldude69 Quote
Jhedzkie Posted June 8, 2012 Posted June 8, 2012 (edited) um, i dont really get this part if(sd->sc.data[sC_SPROTECT]) { status_change_end(&sd->bl, SC_SPROTECT, INVALID_TIMER); clif_refine(sd->fd,1,i,sd->status.inventory[i].refine); // what's this line for? clif_displaymessage(sd->fd,"[ SProtect is no longer in effect ]"); } omg ty for quick reply , i'll tell u if it does, and @jhedzkie yes lol its hard to find it but its on line 13kish of skill.c i'll edit this post with an update if it works Update: yay it works, one more thing if its not too much trouble, where would i edit to make the skill weapon refine refine past +10 xD? maybe this part? not sure tho. || item->refine >= 10 // if it's no longer refineable change 10 to 20. Edited June 8, 2012 by Jhedzkie Quote
clydelion Posted June 8, 2012 Author Posted June 8, 2012 (edited) yay it works, one more thing if its not too much trouble, where would i edit to make the skill weapon refine refine past +10 xD? remove this line or change it to 20 || item->refine >= 10 // if it's no longer refineable add this too so the status is removed even if it is a success. pc_delitem(sd, i, 1, 0, 0, LOG_TYPE_OTHER); if (per > rnd() % 100) { + if(sd->sc.data[sC_SPROTECT]) + { + status_change_end(&sd->bl, SC_SPROTECT, INVALID_TIMER); + clif_displaymessage(sd->fd,"[ SProtect is no longer in effect ]"); + } log_pick_pc(sd, LOG_TYPE_OTHER, -1, item); item->refine++; um, i dont really get this part if(sd->sc.data[sC_SPROTECT]) { status_change_end(&sd->bl, SC_SPROTECT, INVALID_TIMER); clif_refine(sd->fd,1,i,sd->status.inventory[i].refine); // what's this line for? clif_displaymessage(sd->fd,"[ SProtect is no longer in effect ]"); } not really necessary, but it is to tell the client that the refine had failed. Edited June 8, 2012 by clydelion Quote
LCDTheOG Posted June 8, 2012 Posted June 8, 2012 hmm i removed that line, and it uhh still doesnt bring it into the menu, i think its probably located in clif.c since thats where it brings up the menu for weapon refine right? after it hits +10 the menu doesnt have it selectable. Quote
Jhedzkie Posted June 8, 2012 Posted June 8, 2012 i thought the whole function is the one that tells the client that the upgrade has failed. ;p i really am a noob. XD anyway, mine's w/o the said line, yet works cool. however, dont you guys think that its a bit like cheating because its already WS_WEAPONREFINE? i mean isn't WS_WEAPONREFINE meant to upgrade weaps a little bit easier perhaps? opinions varies tho. hmm i removed that line, and it uhh still doesnt bring it into the menu, i think its probably located in clif.c since thats where it brings up the menu for weapon refine right? after it hits +10 the menu doesnt have it selectable. yeah, i think its in clif.c right around this part. if(sd->status.inventory[i].nameid > 0 && sd->status.inventory[i].refine < skilllv && sd->status.inventory[i].identify && (wlv=itemdb_wlv(sd->status.inventory[i].nameid)) >=1 && checks if refine < skilllv where ur skilllv probably is max possible lv. 10. i guess multiply it by 2? so that if its max lv 10, x2, it will check if item refinery is less than 20. (i might be wrong tho) Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.