Jump to content

AnnieRuru

Members
  • Posts

    2044
  • Joined

  • Last visited

  • Days Won

    51

Everything posted by AnnieRuru

  1. well that's just like you said, my mission board is more optimized than his ... his script runs 1 callfunc("leaderwarp#g1" ... and also runs doevent strnpcinfo(0)+"::OnGCount"; this will run 2 timers on both players, the guild master and the caller the caller side runs a countdown 10,9,8,7,6 ... with sleep2 990; and the guild master runs gettimetick(2) timer and nope, IT DOES reattached back the sense of this script tells me, he is very experienced scripter like me its the script engine update breaks his script if ( (getd (".guildinfo"+.@i+"[0]") & (pow(2,13))) == 0) { dispbottom "test 2"; // doevent strnpcinfo(0)+"::OnGCount"; addtimer 1, strnpcinfo(0)+"::OnGCount"; dispbottom "test 3"; } dispbottom "test 1"; callfunc("leaderwarp#g1", getd(".guildinfo"+.@i+"$[0]"), getd (".guildinfo"+.@i+"[0]"), getd (".guildinfo"+.@i+"[1]") ); break; I already tested, callfunc("leaderwarp ... works but doevent doesn't want to run after change to addtimer, it works ... yeah its weird, ... our script engine sux sometimes ...
  2. LOL you both xD I think the problem is not on the script if that guy is able to script something like this standard, I trust his script should be bug-less problem is the script engine updates, our doevent script command is now under queue just like OnPCLoginEvent this script has a countdown on both side, the caller and the guild master the caller side runs a countdown 10,9,8,7,6 ... and the guild master runs gettimetick(2) timer there's a trick, if doevent doesn't work, can also use addtimer this trick taught to me by Yhn in this topic post #7 on Line 2480 change doevent strnpcinfo(0)+"::OnGCount"; into addtimer 1, strnpcinfo(0)+"::OnGCount";
  3. damn it ... >__< ... your script is more sexy than mine ! gives you a rep up prontera,160,183,5 script kdfh123ksdfj2s55 100,{ while (1) { .@pick = select( .menu$[ .@currentpage ] ) -1; if ( !.@pick ) .@currentpage--; else if ( .@pick == .itemperpage +1 ) .@currentpage++; else break; } .@index = .@currentpage * .itemperpage + .@pick -1; dispbottom "selected :"+ .itemid[.@index] +" : "+ .itemname$[.@index]; close; OnInit: setarray .itemid, 4001,4002,4003,4004,4005,4006,4007,4008,4009; .itemperpage = 3; .@itemsize = getarraysize( .itemid ); .@maxpage = .@itemsize / .itemperpage + ( .@itemsize % .itemperpage > 0 ); while ( .@i < .@maxpage ) { .menu$[ .@i ] = ( .@i )? "Previous Page:" : ":"; .@j = 1; while ( .@j < .itemperpage +1 ) { .itemname$[ .@k ] = getitemname( .itemid[ .@k ] ); .menu$[ .@i ] = .menu$[ .@i ] + .itemname$[ .@k ] +":"; .@j++; .@k++; } .menu$[ .@i ] = .menu$[ .@i ] +( ( .@i < .@maxpage -1 )? "Next Page" : "" ); .@i++; } end; } but seriously ... we've gone way too ... hahaha XD
  4. wow ! as I thought this guy seriously has replicated my script features (almost similar to how I did) want to give him some rep up for cracking my script ... the more I read the script, the more that I get amaze... EDIT: LOL GmOcean why we can say the same things XD
  5. OMFG !!! no wonder I felt like I never supported this guy before ( I searched his topic list and indeed I never supported him in eathena forum before ) @GmOcean, yeah you are right I can only dig out several topics like this http://www.eathena.w...opic=262880&hl= <-- he is trying to use *explode to uncompress data http://www.eathena.w...opic=263081&hl= <-- attachrid the guild/party to message someone wants to join in party/guild http://www.eathena.w...opic=263142&hl= http://www.eathena.w...opic=260695&hl= http://www.eathena.w...opic=260718&hl= <-- simulating 3 dimension array and this person has cracked my mission board script ! look at the video, and compare to the features in my script, its almost the same ( the way that he choose menu -> Modify/delete/cancel <-- and also -> turn on as [Green], turn off as [Red] <-- ) in other words, this is also a very high level algorithm type script, can be as messy as my mission board script @GmOcean, you want to try challenge this script ? this script DOESN'T use any query_sql at all, my mission board script also didn't have a single query_sql command so I think ... you are already confident enough to try to challenge this level of script that has same features like mine and yeah, I got the idea how to start this kind of script ( totally rip off my script features ... )
  6. prontera,156,179,5 script kdfhksdfjs 100,{ while (1) { deletearray .@tmp$; if ( .@currentpage ) .@tmp$[0] = "Previous Page"; copyarray .@tmp$[1], .itemname$[ .@currentpage * .itemperpage ], .itemperpage; if ( .@currentpage != .maxpage ) .@tmp$[ .itemperpage +1 ] = "Next Page"; .@pick = select( implode( .@tmp$, ":" ) ) -1; if ( !.@pick ) .@currentpage--; else if ( .@pick == .itemperpage +1 ) .@currentpage++; else break; } .@index = .@currentpage * .itemperpage + .@pick -1 ; dispbottom "selected :"+ .itemid[.@index] +" : "+ .itemname$[.@index]; close; OnInit: setarray .itemid, 4001,4002,4003,4004,4005,4006,4007,4008,4009; .itemperpage = 4; .@itemsize = getarraysize( .itemid ); .maxpage = .@itemsize / .itemperpage + ( .@itemsize % .itemperpage > 0 ) -1; while ( .@i < .@itemsize ) { .itemname$[.@i] = getitemname( .itemid[.@i] ); .@i++; } end; } I almost getting nosebleed ... xD
  7. probably a GM can create/manipulate account in-game ... completely possible by hijacking SQL but feel very lazy to write this kind of things ... need to read a lot in the source
  8. heh ... fun XD prontera,156,179,5 script kdfhksdfjs 100,{ while (1) { .@menu$ = ( .@currentpage )? "Previous Page:" : ":"; copyarray .@tmp$, .itemname$[ .@currentpage * .itemperpage ], .itemperpage; .@menu$ = .@menu$ + implode( .@tmp$, ":" ); .@menu$ = .@menu$ + ( ( .@currentpage == .maxpage )? "" : ":Next Page" ); .@pick = select( .@menu$ ) -1; if ( !.@pick ) .@currentpage--; else if ( .@pick == .itemperpage +1 ) .@currentpage++; else break; } .@index = .@currentpage * .itemperpage + .@pick -1 ; dispbottom "selected :"+ .itemid[.@index] +" : "+ .itemname$[.@index]; close; OnInit: setarray .itemid, 4001,4002,4003,4004,4005,4006,4007,4008,4009; .itemperpage = 3; .@itemsize = getarraysize( .itemid ); .maxpage = .@itemsize / .itemperpage + !!( .@itemsize % .itemperpage ) -1; // meh ... while ( .@i < .@itemsize ) { .itemname$[.@i] = getitemname( .itemid[.@i] ); .@i++; } end; } still, its a script based on toasty's EDIT: damn it ... (!!(<condition>)) doesn't work ! ok it works ... but toasty's line is more efficient
  9. I dunno what kind of formula you're trying to make but your @coinid variable is never set, and it result in 0 ... ?
  10. this is script request section lol - script ksdhfkshf -1,{ OnPCLoadMapEvent: while (1) { sleep2 5 * 1000; mes "test"; next; if ( select ( "I am a bot", "I'm not a bot" ) == 1 ) atcommand "@kick "+ strcharinfo(0); mes "bye"; close2; } } prontera mapflag loadevent
  11. prontera,156,180,5 script Name2 100,{ getinventorylist; while ( .@i < @inventorylist_count ) { .@menu$ = .@menu$ + @itemname2_info$ + callfunc("getitemname2", @inventorylist_id[.@i], @inventorylist_identify[.@i], @inventorylist_refine[.@i], @inventorylist_attribute[.@i], @inventorylist_card1[.@i], @inventorylist_card2[.@i], @inventorylist_card3[.@i], @inventorylist_card4[.@i]) +"; "+ @inventorylist_amount[.@i] +" ea.:"; .@i++; } .@menu = select(.@menu$) -1; if ( !checkweight( @inventorylist_id[.@menu], @inventorylist_amount[.@menu] *2 ) ) dispbottom "Overweight !"; else if ( !rand(3) ) getitem2 @inventorylist_id[.@menu], @inventorylist_amount[.@menu] *2, @inventorylist_identify[.@menu], @inventorylist_refine[.@menu], @inventorylist_attribute[.@menu], @inventorylist_card1[.@menu], @inventorylist_card2[.@menu], @inventorylist_card3[.@menu], @inventorylist_card4[.@menu]; else delitem2 @inventorylist_id[.@menu], @inventorylist_amount[.@menu], @inventorylist_identify[.@menu], @inventorylist_refine[.@menu], @inventorylist_attribute[.@menu], @inventorylist_card1[.@menu], @inventorylist_card2[.@menu], @inventorylist_card3[.@menu], @inventorylist_card4[.@menu]; close; } just add in delitem2 at the end, not that hard though
  12. @buda, though script request section is a place ask for a script, but we usually don't make this kind of simple edit I strongly suggest you should hire a scripter by posting in this area, so you can assign someone to help organize your server here you go ... simple edit - script itemall -1,{ OnMinute00: OnMinute15: OnMinute30: OnMinute45: freeloop 1; while ( getusers(1) > .@count ) { .@nb = query_sql("select account_id from `char` where online = 1 limit 128 offset "+ .@count, .@aid ); .@i = 0; while ( .@i < .@nb ) { if ( attachrid(.@aid[.@i]) ) if ( !checkvending() ) getitem "Yggdrasilberry_Box", 1; .@i++; } .@count += 128; } freeloop 0; end; } EDIT: for below... suddenly feel lazy to do this request ... x.x
  13. you've gone off-topic LMAO changing the map and changing the system ... its already like requesting a new script already so ... topic 1 topic 2 topic 3 pick 1 that closest to your need, then I edit from there
  14. its been sometime someone able to criticize my scripts ... hehehe ... however I think your method is more efficient - script itemall -1,{ OnInit: for ( .@i = 2000004; .@i >= 2000000; .@i-- ) { query_sql "select name from `char` where account_id = "+ .@i +" limit 1", .@name$; announce checkvending( .@name$ ) +" "+ readparam(bVit, .@name$), 0; // success to loop through even offline getitem 501, 1, .@i; // also success to loop through even offline } } certain kinds of script commands that can optionally specify a player name field these kinds of script commands can continue to loop through even if the player is offline if specified a player name/account_id field EDIT: on 2nd thought ... now I think mine more efficient ... because its from the source if(script_hasdata(st,2)) sd = map_nick2sd(script_getstr(st,2)); else sd = script_rid2sd(st); I used attachrid already, so it just called out script_rid2sd but your map_nick2sd has to search through every online player with a specified name... I mean, my script just attachrid once and script_rid2sd 3 times ( checkchatting() checkvending() getitem ) but your script parse map_nick2sd 3 times in the source ...
  15. prontera,156,180,5 script Name2 100,{ getinventorylist; while ( .@i < @inventorylist_count ) { .@menu$ = .@menu$ + @itemname2_info$ + callfunc("getitemname2", @inventorylist_id[.@i], @inventorylist_identify[.@i], @inventorylist_refine[.@i], @inventorylist_attribute[.@i], @inventorylist_card1[.@i], @inventorylist_card2[.@i], @inventorylist_card3[.@i], @inventorylist_card4[.@i]) +"; "+ @inventorylist_amount[.@i] +" ea.:"; .@i++; } .@menu = select(.@menu$) -1; if ( !checkweight( @inventorylist_id[.@menu], @inventorylist_amount[.@menu] *2 ) ) dispbottom "Overweight !"; else if ( !rand(3) ) getitem2 @inventorylist_id[.@menu], @inventorylist_amount[.@menu] *2, @inventorylist_identify[.@menu], @inventorylist_refine[.@menu], @inventorylist_attribute[.@menu], @inventorylist_card1[.@menu], @inventorylist_card2[.@menu], @inventorylist_card3[.@menu], @inventorylist_card4[.@menu]; close; } and my getitemname2 function very simple script actually ... dunno why nobody can make ... 1. you didn't say delitem ... so I just triple them out without delete them 2. I not sure you want to "triple" them or "set them to 3" ... I do triple though EDIT: always forgotten checkweight script command ...
  16. - script itemall -1,{ OnMinute00: OnMinute15: OnMinute30: OnMinute45: freeloop 1; while ( getusers(1) > .@count ) { .@nb = query_sql("select account_id from `char` where online = 1 limit 128 offset "+ .@count, .@aid ); .@i = 0; while ( .@i < .@nb ) { if ( attachrid(.@aid[.@i]) ) if ( !checkvending() && !checkchatting() ) getitem "Yggdrasilberry_Box", 1; .@i++; } .@count += 128; } freeloop 0; end; }
  17. wrong prontera,155,182,5 script djfhkshfks 100,{ announce "test 1: current rate "+ getbattleflag("item_drop_common_min") ,0; // original value setbattleflag "item_drop_common_min",10000; atcommand "@reloadmobdb"; announce "test 2: current rate "+ getbattleflag("item_drop_common_min") ,0; // correct sleep 3000; // after 3 seconds setbattleflag "item_drop_common_min", getbattleflag("item_drop_common_min"); atcommand "@reloadmobdb"; announce "test 3: current rate "+ getbattleflag("item_drop_common_min") ,0; // WRONG ! it doesn't set to original value atcommand "@reloadbattleconf"; atcommand "@reloadmobdb"; announce "test 4: current rate "+ getbattleflag("item_drop_common_min") ,0; // now this is original value end; } if you want to reset the value to original value, you have to do @reloadbattleconf + @reloadmobdb
  18. sword_1-1,223,243,4 script Drawing Room 483,{ OnInit: // disablenpc "Drawing Room"; // comment out this line waitingroom "Drawing Room",20,"Drawing Room::OnStartArena",1; enablewaitingroomevent; end; weird though ... its something made by developers ... EDIT: http://rathena.org/b...ra-quest-stuck/ reported in bug report EDIT2: WTF !!!! why suddenly so many staff members viewing this topic ???
  19. mapannounce "bat_a01", "Round "+ .round++ +" start!", 0; is mapannounce "bat_a01", "Round "+( set( .round, .round +1 ) )+" start!", 0; for ( .@i = 5; .@i > 0; .@i-- ) { mapannounce "bat_a01", .@i +"", 0; is for ( set .@i, 5; .@i > 0; set .@i, .@i -1 ) { mapannounce "bat_a01", .@i +"", 0; you probably not using rathena ... perhaps ?
  20. @Euphy ... @Terenas I tested the script working fine in my test server the only reason that I can think of is probably because you use 1288 as npc ID ? try change to 123 can show us some screenshot ?
  21. @Omnipotent yeah you can do it that way, but the mvp will summon slave and will cast teleport when they are in low hp and also, doing by script allows players to kill the mvp, because it is summon by scripts a mvp summon by GMs disallow casting summon slave or teleporting, and of course, players can only watch the show, without KS the MVP
  22. event script and algorithm type script is quite high level scripting ( that's why emistry is currently challenging this ) this is an algorithm type script you can't just simply look at a few lines and you think the script is work like script_commands.txt said you have to look at the whole script to understand the tricks and the mechanics behind it the mechanics behind this script is to whenever a player join a channel -> 1. produce add into a list of .IRC_Room_1$[ getarraysize( .IRC_Room_1$ ) ]; 2. the script produce a @IRC temporary player variable 1. when a player say something with npc:IRC on (read whisper system) it will loop through all players with .IRC_Room_1$ array with announce "", bc_self;, with attachrid while( .@i < .@size ){ if( attachrid( getcharid( 3,getd( ".IRC_Room_"+.@channel+"$["+.@i+"]" ) ) ) ) announce ( ( .DisplayTime )?"[ "+gettimestr("%H:%M",7)+" ] ":"" ) + .@message$,bc_self,.@colour$; .@i++; } 2. the purpose of @IRC player variable is to double check the player is already inside a channel room or not so if someone send an invitation, the script checks for @IRC player variable with attachrid if @IRC is 0, means the player is free to join in a channel room if @IRC is not 0, means the player is already joined an existing channel well ... the rest are custom features ... and emistry is exactly following my script format, I can read this script like someone else doing this for me XD
  23. AnnieRuru

    PVP Ladder

    btw this seems like a request rather than a support *move*
  24. @emistry yeah, you can use for-loop in any other kind of scripts but for algorithm scripts which usually process high amount of loops, its better to use while-loop instead EDIT: you can see that my script also uses while-loop, at the end of the file @LopakTikey impossible with our current script engine though, its possible to change its font size smaller *announce "<text>",<flag>{,<fontColor>{,<fontType>{,<fontSize>{,<fontAlign>{,<fontY>}}}}}; eamod uses source modification, but this script uses script engine to simulate
  25. the monster shouldn't be teleporting because if the mobs has a master ID, it wont cast summon_slave or al_teleport which I already pointed out in unit.c in my previous post atcommand.c ACMD_FUNC(summon) { ....... int duration = 0; ....... if (duration < 1) duration =1; else if (duration > 60) duration =60; ..... md->deletetimer=add_timer(tick+(duration*60000),mob_timer_delete,md->bl.id,0); I just found out, the duration is int type variable, and per-existing code limited the duration by 60*60000 = 360000 mili-seconds = 1 hour I think its long enough for them to kill each other already make sure you summon the mvp by @summon 1916 60 and not by @summon 1916 because if you didn't specify a number in duration field, it will automatically disappear itself in 1 minute
×
×
  • Create New...