Jump to content

AnnieRuru

Script Developers
  • Content Count

    1677
  • Joined

  • Last visited

  • Days Won

    246

Everything posted by AnnieRuru

  1. 1.1 plugin - found a way to get *recalculatestat working, although its not thread-safe, but meh ~
  2. http://herc.ws/board/topic/4745-emperium-breaker-ladder/ check the diff change into announce strcharinfo(0)+" has break blah blah" EDIT: last hit basis is configure by conf\map\battle\monster.conf // Defines on who the mob npc_event gets executed when a mob is killed. // Type 1: On the player that killed the mob (if killed by a non-player, resorts to type 0) // Type 0: On the player that did the most damage to the mob. // NOTE: This affects who gains the Castle when the Emperium is broken. mob_npc_event_type: 1
  3. split topic from http://herc.ws/board/topic/15934-card-shredder/ @Begin prontera,155,185,4 script Card trader 2_VENDING_MACHINE1,{ mes "[Card trader]"; mes "Please select the card you wish to trade."; getinventorylist; for ( .@i = 0; .@i < @inventorylist_count; ++.@i ) { if ( getiteminfo( @inventorylist_id[.@i], ITEMINFO_TYPE ) == IT_CARD ) { .@menu$ += getitemname( @inventorylist_id[.@i] ) +":"; .@cardid[.@c++] = @inventorylist_id[.@i]; } } .@menu$ += "No Card - Close"; next; .@s = select( .@menu$ ) -1; if ( .@s == .@c ) close; while ( .@cardid[.@s] != .mvpcardid[.@i] && .@i < .mvpcards ) { ++.@i; } if ( .@i < .mvpcards ) .@rate = 3; else .@rate = 1; mes "[Card trader]"; dispbottom countitem( .@cardid[.@s] ) +""; if ( countitem( .@cardid[.@s] ) > 1 ) { mes "Input how many you want to trade ?"; next; input .@amount, 0, countitem( .@cardid[.@s] ); if ( !.@amount ) close; mes "[Card trader]"; mes "Are you sure you want to trade"; mes .@amount +"x "+ getitemname( .@cardid[.@s] ); mes " for "+( .@rate * .@amount )+" Poring Coins ?"; } else { .@amount = 1; mes "Are you sure you want to trade a "+ getitemname( .@cardid[.@s] ) +" for "+ .@rate +" Poring Coins ?"; } next; if ( select ( "Yes.", "No" ) == 2 ) close; delitem .@cardid[.@s], .@amount; getitem Poring_Coin, .@rate * .@amount; close; OnInit: .mvpcards = query_sql("select item_db.id from item_db right join mob_db on item_db.id = mob_db.dropcardid where mexp > 0 and type = 6 group by name_japanese;", .mvpcardid); end; } simple script although I wanted to do page by page ... but when realize MAX_INVENTORY is just 100, while menu string limit is 2047, means need 20 string length of each card item name to crash the client ... so don't need to do page by page
  4. example ? I only tested it with player and npc maybe add another bl check like BL_PC, BL_MOB, BL_HOM, BL_MER, BL_ELEM, BL_PET_, BL_NPC ?
  5. // Prize Settings // Prize Type // 0 = Zeny, 1 = Item, 2 = Zeny&Item .prize = 2; // [0] = Zeny, [1] = Item ID, [2] = Item Amount; setarray .ssm_prize[0],125,501,10; setarray .tsm_prize[0],450,501,30; the script doesn't let you to give more than 1 item in the configuration so can only change 10 red pot or 30 red pot ssm is single slot machine and tsm is triple slot machine
  6. impossible with this script .@var_name$ = "#skilllist_" + #skills_profile[.@pos]; setd .@var_name$ + "_name$", .@profile_name$; setd .@var_name$ + "_count", .@size; setd .@var_name$ + "_class", Class; setd .@var_name$ + "_cost", skillpointcount() - SkillPoint; I see this script use account variable #skilllist_1_name$ something like this to save the profile to make it save into an item needs another system probably using a usable item combine with a plugin for a custom field ... and probably another SQL table for the stored build... something like that big project
  7. L_Coins: if ( $cardid_shredded[ getarg(0) ] < 5 ) return 5; else if ( $cardid_shredded[ getarg(0) ] < 10 ) return 4; else if ( $cardid_shredded[ getarg(0) ] < 15 ) return 3; else if ( $cardid_shredded[ getarg(0) ] < 20 ) return 2; else return 1; I've read the original script, and in that script .... as you can see here the value will decrease the more players shred their cards although I also prefer to have a fix value ... though yes its possible ... but you want a fix value or a descending value ? you know ... if its a fix value ... then sounds like a card trader npc
  8. change this line 103 bg_get_data 'winside, 1; for ( .@i = 0; .@i < $@arenamemberscount; ++.@i ) getitem getvariableofnpc( .rewarditem[0], 'main$ ), getvariableofnpc( .rewarditem[1], 'main$ ), $@arenamembers[.@i]; into bg_get_data 'winside, 1; for ( .@i = 0; .@i < $@arenamemberscount; ++.@i ) getitem 501, 10, $@arenamembers[.@i]; bg_get_data ('winside == 'red)? 'blue:'red, 1; for ( .@i = 0; .@i < $@arenamemberscount; ++.@i ) getitem 501, 5, $@arenamembers[.@i]; btw rathena seems going to get rid of CSV format and going for YAML format https://github.com/rathena/rathena/pull/3163 so just take note of this when instancing doesn't work
  9. @Habilis ahem ... getitembound should do most of the trick although like what you did with Trade permission is ... yeah more painful
  10. @Begin the script was already done with reset at 12am every day however due to the information that meko said ... I'm going to revise this script ... prontera,155,180,5 script Reward NPC 4_F_FAIRYKID4,{ .@date = atoi( gettimestr("%Y%m%d", 20 ) ); mes "["+ strnpcinfo(NPC_NAME) +"]"; if ( #reward_daytime == .@date ) { mes "You have claimed the reward today."; close; } if ( @reward_timestamp && @reward_timestamp + .countdown <= gettimetick(2) ) { mes "Here is the surprise reward"; getitembound Poring_Coin, 1, 1; #reward_daytime = .@date; close; } if ( @reward_timestamp ) { mes "Countdown timer..."; .@timeleft = @reward_timestamp + .countdown - gettimetick(2); mes .@timeleft /3600 +" hour "+ .@timeleft %3600/60 +" min "+ .@timeleft %60 +" sec left"; close; } mes "Hello "+ strcharinfo(PC_NAME) +", I am here to give you a daily Surprise Reward. Do you want to have it?"; next; select "Yes, sure !!"; mes "["+ strnpcinfo(NPC_NAME) +"]"; mes "You can claim the reward in 5 hours time."; close2; addtimer .countdown *1000, strnpcinfo(NPC_NAME) +"::OnClaimReward"; @reward_timestamp = gettimetick(2); end; OnClaimReward: dispbottom "You can claim Daily Login Reward now."; end; OnInit: // .countdown = 5*60*60; // 5 hours .countdown = 5; } no longer use IP address, but use account bound items so that means, this script will give out the reward every day, reset on 12am, and the item give out is account bound .... probably the better way for not abuse the reward than the script I posted earlier
  11. yup you did correct every 00:00 server time and if let's say you start at 11:59pm Wednesday, and claim the reward on the Thursday at 1am, then you can't claim reward anymore on Thursday I actually had experienced this system in some chinese mobile games app ... so I made this script according to the chinese mobile game app I've played
  12. still possible but ... since the previous attempt doesn't work, then has to do something like OnPCUseSkillEvent stuffs every time someone use a skill, it will log the last skill ID used in a player variable instead, because ud->skill_id doesn't seems to work which ... I do admire zephirus sometimes, although his code looks very messy, but he really does put in a lot of effort
  13. https://rathena.org/board/topic/115821-how-can-i-record-specific-npc-announcement/ spot another same topic in rathena both answer provided are different ... maybe you should elaborate more about how you want to do the "record the break announcement" ...
  14. the plugin release rules stated -> you cannot make the release in .dll format this is to prevent some people release stuff .... with stupid things inside that is not in the original source code eg: the source code only has original feature, but the .dll also has feature B that can ruin your server with server crash ... or unintended features not in original source code https://github.com/AnnieRuru/customs/tree/master/plugin download those two koe.dll and koe.pbd file then
  15. I admit its cool idea, reminds me the card trader event I made long time ago http://herc.ws/board/topic/11367-card-collector/ the problem is your script, and you should be glad you have posted on the board let me simplify it ... prontera,155,185,4 script Card Shredder 2_VENDING_MACHINE1,{ mes "[ Card Shredder ]"; mes "You can shred cards to earn premium currency"; mes "would you like to shred any cards? "; next; if ( select ( "Yes.", "No" ) == 2 ) close; mes "[ Card Shredder ]"; mes "Please select the card you wish to shred."; getinventorylist; for ( .@i = 0; .@i < @inventorylist_count; ++.@i ) { if ( getiteminfo( @inventorylist_id[.@i], ITEMINFO_TYPE ) == 6 ) { .@menu$ += getitemname( @inventorylist_id[.@i] ) +" "+ callsub( L_Coins, @inventorylist_id[.@i] ) +" Coins:"; .@cardid[.@c++] = @inventorylist_id[.@i]; } } .@menu$ += "No Card - Close"; next; .@s = select( .@menu$ ) -1; if ( .@s == .@c ) close; mes "[ Card Shredder ]"; mes "are you sure you want to shred a "+ getitemname( .@cardid[.@s] ) +" for "+ callsub( L_Coins, .@cardid[.@s] ) +" coins ?"; next; if ( select ( "Yes.", "No" ) == 2 ) close; delitem .@cardid[.@s], 1; getitem Poring_Coin, callsub( L_Coins, .@cardid[.@s] ); ++$cardid_shredded[ .@cardid[.@s] ]; close; L_Coins: if ( $cardid_shredded[ getarg(0) ] < 5 ) return 5; else if ( $cardid_shredded[ getarg(0) ] < 10 ) return 4; else if ( $cardid_shredded[ getarg(0) ] < 15 ) return 3; else if ( $cardid_shredded[ getarg(0) ] < 20 ) return 2; else return 1; } I made it in a way without using 2 permanent variables also found a bug though ... line 713 if (.@cardval < 1) set cardval,10; if (.@menu == 454) close; why do you set a permanent player variable ... there ? and about the issue about having too many cards in the menu, can be done with page system https://rathena.org/board/topic/74630-help-array/
  16. the script you posted made by me ... sorry as I don't own Gepard, I don't know how it works so I couldn't make this system for you and what meko said was spot on, just reminded the IP address detection method on this script can just bypass by restarting the modem the mac address system though ... sry maybe I was out from RO scene too long ? 2 years ago I heard that mac address is something that is only possible by adding a 3rd party program running in the background ... and this makes me assume that Gepard is also something 3rd party program ... stuffs
  17. that line was .... and you suddenly say you want it can redo every 5 hours make your stand ... 1. you want it to do every 5 hours (5 hours counting + 5 hours cooldown) ... -- OR -- 2. you want it to do 1x per day (reset at 12am ... which was done in the way your posted lines) EDIT: yeah I did it as a daily ...
  18. use *hideonnpc and *hideoffnpc
  19. 1.4 plugin -- fix a rare bug if the user put multiple noitem on the same map, it spam non-sensible error ---- although this will overwrite the previous one without warning this time
  20. a lot of useless information ... kills/deaths ... can be done with scripting dmg vs players ... need OnPCAttackEvent: ... not recommended dmg vs buildings ... need OnPCAttackEvent or mobevent script command ... not implemented... support skills .... no idea what it is Total Healing ... need OnPCHealEvent: ?? Item consumed ... curious, why it doesn't list out ASPD potion like berserk potion or how much white potion used ? need OnPCUseItemEvent: ... I remember Emistry made this before Conclusion: yeah these things just make your server use up a lot more memory just to show a bunch of useless information... not interested
  21. I never play eamod, so I don't know any of the system you even say etc .... this doesn't work you should elaborate more
  22. @Begin prontera,155,180,5 script Reward NPC 4_F_FAIRYKID4,{ // $ip_reward_daytime = 0; mes "["+ strnpcinfo(NPC_NAME) +"]"; if ( $ip_reward_daytime != atoi( gettimestr("%Y%m%d", 20 ) ) ) { $ip_reward_daytime = atoi( gettimestr("%Y%m%d", 20 ) ); deletearray $ip_reward$; } .@size = getarraysize( $ip_reward$ ); while ( getcharip() != $ip_reward$[.@i] && .@i < .@size ) { ++.@i; } if ( .@i < .@size ) { mes "You have claimed the reward with this IP address."; close; } if ( @ip_reward && @ip_reward + .countdown <= gettimetick(2) ) { mes "Here is the surprise reward"; getitem Poring_Coin, 1; $ip_reward$[ getarraysize( $ip_reward$ ) ] = getcharip(); close; } if ( @ip_reward ) { mes "Countdown timer..."; .@timeleft = @ip_reward + .countdown - gettimetick(2); mes .@timeleft /3600 +" hour "+ .@timeleft %3600/60 +" min "+ .@timeleft %60 +" sec left"; close; } mes "Hello "+ strcharinfo(PC_NAME) +", I am here to give you a daily Surprise Reward. Do you want to have it?"; next; select "Yes, sure !!"; mes "["+ strnpcinfo(NPC_NAME) +"]"; mes "You can claim the reward in 5 hours time."; close2; addtimer .countdown *1000, strnpcinfo(NPC_NAME) +"::OnClaimReward"; @ip_reward = gettimetick(2); end; OnClaimReward: dispbottom "You can claim Daily Login Reward now."; end; OnInit: .countdown = 5*60*60; // 5 hours // .countdown = 5; }
  23. sry 1 more time http://upaste.me/eaf049852cf49de5c make for large size server - if total participant more than 15, the chance of getting hit is higher ... so the event progress faster - and if number of rounds exceed 20, the event ends by itself by randomly select a winner
  24. Download: 1.1 script just join the event and then AFK there and wait for the luck ... the last one who has enough patience ... or you are just god damn lucky ... might win this event
×
×
  • Create New...

Important Information

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