-
Posts
2044 -
Joined
-
Last visited
-
Days Won
51
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Everything posted by AnnieRuru
-
query_sql("DELETE FROM `mapreg` WHERE `str` = '$LOGINCOUNT'"); [sql]: DB error - Unknown column 'str' in 'where clause' [Debug]: at d:\eathena\rathena sql 16819\src\map\script.c:14509 - DELETE FROM `m apreg` WHERE `str` = '$LOGINCOUNT' [Debug]: Source (NPC): LOGIN (invisible/not on a map) you didn't even test this, I doubt it and all query_sql executing like this probably not going to work out for online players perhaps using attachrid on all accounts method for online players and for mapreg, do set $LOGINCOUNT, 0; [Error]: buildin_checkweight: Invalid item '0'. [Debug]: Source (NPC): LOGIN (invisible/not on a map) if(#DRewardCon*2 > getarraysize(.Rewards)){ set .@p,.Reward[getarraysize(.Reward)-1]; set .@q,.Reward[getarraysize(.Reward)]; } else { set .@p,.Reward[#DRewardCon*2]; set .@q,.Reward[#DRewardCon*2+1]; } if(.@p && !checkweight(.@p,.@q)){ dispbottom "You cant carry your daily reward, put some items away and log in again"; if #DRewardCon is less than getarraysize(.Rewards), .@p is not set wrong logic also hmm, but nice try though
-
you sure ?however my result is getting more lengthy variable instead of shorter prontera,155,180,5 script ksdfhksfjs 100,{ .@a$ = "32767"; mes .@a$ +" = ["+ getstrlen(.@a$) +"]"; mes axtoi(.@a$) +" = ["+ getstrlen( axtoi(.@a$) ) +"]"; close; } I start to doubt this also after change value[1000]and use this script prontera,155,180,5 script ksdfhksfjs 100,{ for ( .@i = 0; .@i < 20; .@i++ ) a$ = a$ +"#"+ .@i; dispbottom getstrlen(a$) +""; end; } I still getting the limit at 255 char and my SQL query also getting a very weird result ALTER TABLE `ragnarok`.`global_reg_value` MODIFY COLUMN `value` text NOT NULL; getting same result I've found this method though http://rathena.org/board/topic/73223-bitshifting-data/#entry151036 prontera,155,180,5 script ksdfhksfjs 100,{ .@a = 32767; query_sql "select unhex("+ .@a +")", .@b$; dispbottom .@b$; query_sql "select hex('"+ escape_sql(.@b$) +"')", .@c; dispbottom .@c +""; end; }
-
yeah,I remember there was a client mod call xray ... which has been discontinue for quite some time its goal was not displaying any gravity error while having unlimited viewID nope, its different this is actually do-able with source modification ... but might be more practical to do with client hexing, I guess
-
@ToiletMaster has been banned for peeping the GM having intercourse with a female player
-
change setnpcdisplay "Disguise Event" into setnpcdisplay strnpcinfo(0) when compare to original script, seems like you have change the npc name Disguise Event into Disguise [Event] yeah maybe can make a bug report
-
if they have error with gravity error, then its completely client issue, the server side couldn't detect the player's client having error or not its not same, I guessunknown item as apple is detected with item_db.txt file or `item_db` table if SQL as the server itself has no known way to detect a client side error the only way that I can think of doing this with source modification is control partially with scripts a menu pop-up with OnPCLoginEvent let the player choose to which version their client file is and anything above the revision, temper with clif.c file send an exclusive default packet to those outdated clients
-
https://rathena.svn.sourceforge.net/svnroot/rathena/trunk/conf/mapflag/gvg.txt
-
updating script on that topic post#10 prontera,153,189,5 script dksfjdsk 100,{ .@t = gettime(4); mes "Hi, today is "+ .week$[.@t]; mes "The Daily Quest for today is ..."; mes getitemname( getd( ".req_item"+ .@t ) ); next; mes "The Items that needed are :"; .@size = getarraysize( getd( ".req_item"+ .@t ) ); for ( .@i = 1; .@i < .@size; .@i += 2 ) mes getd( ".req_item"+ .@t +"["+( .@i +1 )+"]" ) +"x "+ getitemname( getd( ".req_item"+ .@t +"["+ .@i +"]" ) ); next; if ( select ( "I want this Item", "Just walk around" ) == 2 ) { mes "OK, please come again"; close; } else if ( gettime(4) != .@t ) { mes "I'm sorry, today is a brand new day"; close; } for ( .@i = 1; .@i < .@size; .@i += 2 ) { if ( countitem( getd( ".req_item"+ .@t +"["+ .@i +"]" ) ) < getd( ".req_item"+ .@t +"["+( .@i +1 )+"]" ) ) { setarray .@not_enough[.@c], getd( ".req_item"+ .@t +"["+ .@i +"]" ), getd( ".req_item"+ .@t +"["+( .@i +1 )+"]" ) - countitem( getd( ".req_item"+ .@t +"["+ .@i +"]" ) ); .@c += 2; } } if ( .@c ) { mes "You didn't bring enough items"; for ( .@i = 0; .@i < .@c; .@i += 2 ) mes .@not_enough[ .@i +1 ] +"x "+ getitemname( .@not_enough[ .@i ] ); close; } for ( .@i = 1; .@i < .@size; .@i += 2 ) delitem getd( ".req_item"+ .@t +"["+ .@i +"]" ), getd( ".req_item"+ .@t +"["+( .@i +1 )+"]" ); getitem getd( ".req_item"+ .@t ), 1; mes "Congratulations for getting"; mes getitemname( getd( ".req_item"+ .@t ) ); close; OnInit: setarray .week$, "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"; setarray .req_item0, 501, 501,1, 502,1; setarray .req_item1, 501, 501,10, 502,20, 503,30, 504, 40; setarray .req_item2, 501, 501,1, 502,1; setarray .req_item3, 501, 501,1, 502,1; setarray .req_item4, 501, 501,1, 502,1; setarray .req_item5, 501, 501,1, 502,1; setarray .req_item6, 501, 501,1, 502,1; end; } @icabit you should've seen the script, or read the topic if use freeloop, entire server will hang
-
original topic from eAthena http://www.eathena.ws/board/index.php?s=&showtopic=20183&view=findpost&p=915619 I have no idea this script so famous <.< I rewrite this script again devil_square_1.2a.txt well, no need description I guess to activate this event, login a GM99 account and type @devilsquare in game Archive
-
getitem callfunc( "F_RandMes", 3, 607,608,609 ), 1; much faster
-
prontera,156,185,5 script kjdhfkdjsf 100,{ mes "wanna sign up"; if ( select( "yes", "no" ) == 2 ) close; else if ( .signup_count == 128 ) { mes "Sorry the whole queue is full"; close; } while ( .signup_aid[.@i] != getcharid(3) && .@i < .signup_count ) .@i++; if ( .@i < .signup_count ) { mes "you have already sign up in this event"; close; } .signup_aid[ .signup_count ] = getcharid(3); .signup_count++; mes "You are now signed to the BG event"; // .@i = 0; // DEBUG // while ( .signup_aid[.@i] ) { // .@signup_name$[.@i] = rid2name( .signup_aid[.@i] ); // .@i++; // } // mes "[Debug] Currently have "+ .signup_count +" sign-in and they are "+ implode( .@signup_name$, "," ); close2; L_start: if ( .signup_count < .min2start ) end; for ( .@i = 0; .@i < .signup_count; .@i++ ) { if ( attachrid( .signup_aid[.@i] ) ) { if ( getmapflag( strcharinfo(3), mf_nowarp ) ) { // player has went into another event deletearray .signup_aid[.@i], 1; .signup_count--; .@i--; } } else { deletearray .signup_aid[.@i], 1; .signup_count--; .@i--; } } if ( .start || .signup_count < .min2start ) end; for ( .@i = 0; .@i < .signup_count; .@i++ ) unitwarp .signup_aid[.@i], "guild_vs3", 50,50; deletearray .signup_aid, .min2start; .signup_count -= .min2start; end; OnInit: .min2start = 2; // how many players to start the event while (1) { if ( !( .start = getmapusers( "guild_vs3" ) > 0 ) ) goto L_start; sleep 5000; } end; // shouldn't reach } for battleground script, I don't think using while-loop is the correct way if you want to make battleground script without using waitingroom here's the source modification http://rathena.org/board/topic/72571-battleground-system-without-waitingroom/#entry146937 prontera,156,185,5 script kjdhfkdjsf 100,{ mes "wanna sign up"; if ( select( "yes", "no" ) == 2 ) close; else if ( .signup_count == 128 ) { mes "Sorry the whole queue is full"; close; } while ( .signup_aid[.@i] != getcharid(3) && .@i < .signup_count ) .@i++; if ( .@i < .signup_count ) { mes "you have already sign up in this event"; close; } .signup_aid[ .signup_count ] = getcharid(3); .signup_count++; mes "You are now signed to the BG event"; // .@i = 0; // DEBUG // while ( .signup_aid[.@i] ) { // .@signup_name$[.@i] = rid2name( .signup_aid[.@i] ); // .@i++; // } // mes "[Debug] Currently have "+ .signup_count +" sign-in and they are "+ implode( .@signup_name$, "," ); close2; L_start: if ( .signup_count < .min2start ) end; for ( .@i = 0; .@i < .signup_count; .@i++ ) { if ( attachrid( .signup_aid[.@i] ) ) { if ( getmapflag( strcharinfo(3), mf_nowarp ) ) { // player has went into another event deletearray .signup_aid[.@i], 1; .signup_count--; .@i--; } } else { deletearray .signup_aid[.@i], 1; .signup_count--; .@i--; } } if ( .start || .signup_count < .min2start ) end; announce "event started", 0; .start = 1; for ( .@i = 0; .@i < .signup_count; .@i++ ) setbgid ( .@i %2 )? .red : .blue, .signup_aid[.@i]; deletearray .signup_aid, .min2start; bg_warp .red, "guild_vs3", 13,50; bg_warp .blue, "guild_vs3", 86,50; bg_updatescore "guild_vs3", 0,0; sleep .eventlasting * 1000; if ( .start == 1 ) { if ( .score[1] == .score[2] ) mapannounce "guild_vs3", "Draw !", 0; else if ( .score[1] > .score[2] ) { mapannounce "guild_vs3", " Red side wins !", 0; callsub L_reward, .red; } else if ( .score[1] < .score[2] ) { mapannounce "guild_vs3", " Blue side wins !", 0; callsub L_reward, .blue; } } bg_warp .red, "prontera", 155,182; bg_warp .blue, "prontera", 158,182; bg_kickall .red; bg_kickall .blue; .start = .score[1] = .score[2] = 0; goto L_start; L_reward: getbgusers getarg(0); for ( .@i = 0; .@i < $@arenamembersnum; .@i++ ) getitem 501, 1, $@arenamembers[.@i]; // item reward return; Onredout: callsub L_out, 2; Onblueout: callsub L_out, 1; L_out: announce strcharinfo(0) +" is out from the match !", 1; bg_leave; warp "SavePoint", 0,0; .score[ getarg(0) ]++; bg_updatescore "guild_vs3", .score[1], .score[2]; if ( .score[ getarg(0) ] == .min2start /2 ) awake strnpcinfo(0); end; OnInit: .eventlasting = 30 * 60; // how long would the event last or it auto-reset. 30 *60 = 30 mins .min2start = 2; // minimum player to start .red = createbgid( "guild_vs3", 13,50, strnpcinfo(0)+"::Onredout", strnpcinfo(0)+"::Onredout" ); .blue = createbgid( "guild_vs3", 86,50, strnpcinfo(0)+"::Onblueout", strnpcinfo(0)+"::Onblueout" ); end; } btw I saw you make some post in plankt's queue system, which I think, its useless if you want to use other member's algorithm function, its better that you duplicate out their script and write them again with your own scripting style and I found using queue system is not really practical choice ... most people here prefer to not to use source modification ... dunno why
-
your script is not a stable script http://rathena.org/board/topic/75089-emperium-top5-breaker/#entry160694 use this one woe_pvp_ladder_0.1.txt
-
almost 10 hours wasted on this single topic update this script http://www.eathena.ws/board/index.php?s=&showtopic=177319&view=findpost&p=975591 setvar_0.2.txt about setc\getc I don't recommend to set/retrieve value from an offline char because it needs to read the value from SQL table its not thread safe, and needs memory allocations I can try to code, but seems noob x.x setc.getc_17101.diff setc works great but getc got problem prontera,155,185,5 script jdfhksdfjhksdj 100,{ setc #abcd$, "12345", 2000000; // setc @abcd$, "54321", 2000001; // set @abcd$, ""; dispbottom #abcd$; // dispbottom getc( @abcd$, 2000000 ) +""; // dispbottom getc( @abcd$, 2000001 ); dispbottom getc( #abcd$ ) +""; // dispbottom getcharid( 3, "AnnieRuru" ) +""; end; } [Warning]: Found more arguments than necessary. unexpected arg type C_STR [Debug]: Function: dispbottom [Debug]: Source (NPC): jdfhksdfjhksdj at prontera (155,185) [Error]: Memory manager: args of aFree 0x1071CD50 is overflowed pointer d:\rathena\src\map\script.c line 2944
-
as the discussion turns out I have to agree with Lighta and Kisuka now rather than placing #ifdef RENEWAL all over the place its better to create a fork using github @Kisuka change the topic title into -> branch pre-renewal using github something like that or people keep misunderstanding =/
-
Quest Script [Using QUest Log Display System]
AnnieRuru replied to GM Takumirai's question in Script Requests
http://www.eathena.ws/board/index.php?s=&showtopic=269839&view=findpost&p=1481667 -
LOL !! you wanna revolutionize the script commands ? there are TONS of them that needed optional parameter like checkweight, countitem, countitem2 <- getitem/delitem/getitem2/delitem2 has optional parameter for account ID getvariableofpc <- we got getvariableofnpc, why not make another getvariableofpc which read pc variable XD etc etc BUILDIN_FUNC(getgmlevel) { TBL_PC* sd = NULL; if ( script_hasdata(st,2) ) { if ( data_isstring( script_getdata(st,2) ) ) sd = map_nick2sd( script_getstr(st,2) ); else sd = map_id2sd( script_getnum(st,2) ); } else sd = script_rid2sd(st); if ( sd ) script_pushint( st, pc_get_group_level(sd) ); else script_pushint( st, 0 ); return 0; } BUILDIN_DEF(getgmlevel,"?"), tested with - script kjdhfksdjhf -1,{ OnPCKillEvent: if ( !getgmlevel() && getgmlevel(killedrid) && strcharinfo(3) == "prontera" ) announce rid2name( killedrid ) +" has been killed by "+ strcharinfo(0), 0; end; }
-
if(##Gpack == 1) goto L_AG; .... set ##Gpack, 1; ..... L_AG: mes "^616D7EYou Already Given a Package"; close; seriously ... its already in the script ...
-
noitem mapflag prontera mapflag noitem 4,5 item type 4 (weapon) and item type 5 (armor) can't equip in prontera map since this is SVN discussion, I dunno this modification should add into SVN or not because this question also frequently asked in database/script request section
-
An NPC were i can make a Code for the players to claim TCG Card
AnnieRuru replied to Leinadz's question in Script Requests
http://rathena.org/board/topic/76176-coupons-something-new/#entry170878 wait a moment, think I need to modify a little bit all right I misunderstood your question, or rather I'm confuse is this an utility script or event script ? utility script -> set another option to let the player can claim this TCG and a list of players which can claim ( multiple times ? ) event script -> the quantity is global, and after player input the password(make code) correctly, the event ends -
I know, 5 years ago I also used OnPCDieEvent in pvp scripts http://www.eathena.ws/board/index.php?showtopic=155874 later only I change it into OnPCKillEvent ( dunno where the topic went ) just to make it a habit as you can see in your script, you attachrid twice, and I only did once XD
-
OnPCDieEvent is only use when you are killed by monsters example like pvm event scripts OnPCDieEvent: announce strcharinfo(0)+" has been killed (by monster)",0; warp "SavePoint",0,0; something like this ... otherwise, pvp script should always use OnPCKillEvent - script kjdhfksdjhf -1,{ OnPCKillEvent: if ( !getgmlevel() && strcharinfo(3) == "prontera" ) { set .@name$, strcharinfo(0); attachrid killedrid; if ( getgmlevel() ) announce strcharinfo(0) +" has been killed by "+ .@name$, 0; } end; } somehow Capuche script is working fine in my test server though
-
this script sux big time use mine http://rathena.org/board/topic/72927-the-prize-is-not-given-to-players/#entry149317 update this script - script AutoFunEvent -1,{ OnInit: while (1) { freeloop 1; .@rand = rand(2000000000); .@count = 0; while ( getusers(1) > .@count ) { .@nb = query_sql("select account_id from `char` where online = 1 order by rand("+ .@rand +") limit 128 offset "+ .@count, .@aid ); .@i = 0; while ( .@i < .@nb ) { if ( attachrid(.@aid[.@i]) ) { if ( getgmlevel() < 60 && !checkvending() ) { // only normal players and non-vending players announce strcharinfo(0) +" won 500 Cash in Lucky Pick Event", 0,0x00FF00; #cashpoints = #cashpoints + 500; dispbottom "you got 500 cash point"; break; } } .@i++; } if ( .@i < .@nb ) break; .@count += 128; } freeloop 0; sleep 3600000 + rand(3600000); // 1 hour + random minutes within 1 hour } end; }
-
LOL !!I also wrote one 5 years ago before I became scripting moderator in eathena forum just almost the same as your script anyways, I just rewrite another one from scratch - script jlsfsdkjfhsd -1,{ OnInit: bindatcmd "mapflag", strnpcinfo(0)+"::Onaaa", 99, 100; // only GM99 can use setarray .mapflag, mf_nomemo, mf_noteleport, mf_nosave, mf_nobranch, mf_nowarp, mf_nowarpto; // put in more as needed setarray .mapflag$, "nomemo", "noteleport", "nosave", "nobranch", "nowarp", "nowarpto"; .size = getarraysize( .mapflag ); end; Onaaa: .@map$ = strcharinfo(3); while (1) { mes "Current map -> ^0000FF"+ .@map$ +"^000000"; for ( .@i = 0; .@i < .size; .@i++ ) mes .mapflag$[.@i] +" -> "+( ( getmapflag( .@map$, .mapflag[.@i] ) )? "^00CC00On" : "^FF0000Off" )+"^000000"; next; .@menu$ = "Current map -> ^0000FF"+ .@map$ +"^000000"; for ( .@i = 0; .@i < .size; .@i++ ) .@menu$ = .@menu$ +":"+ .mapflag$[.@i] +" -> "+( ( getmapflag( .@map$, .mapflag[.@i] ) )? "^00CC00On" : "^FF0000Off" )+"^000000"; .@s = select( .@menu$ ) -2; if ( .@s == -1 ) { if ( !input( .@tmp$, 2, 12 ) ) { if ( getmapusers(.@tmp$) != -1 ) { .@map$ = .@tmp$; } } } else if ( getmapflag( .@map$, .mapflag[.@s] ) ) removemapflag .@map$, .mapflag[.@s]; else setmapflag .@map$, .mapflag[.@s]; } close; // shouldn't reach }
-
Requesting 3v3 Event (Semi BG Type [Blue Team vs Red Team])
AnnieRuru replied to Aya's question in Script Requests
bg_pvp_random_0.3.txt for this particular topic, Aya requested the team generated randomly and this one require source modification and shuffling algorithmsource modification http://rathena.org/board/topic/72571-battleground-system-without-waitingroom/ shuffling algorithm function script rand__ { .@range = getarg(0); .@count = getarg(2, 0); if ( !.@count || .@count > .@range ) .@count = .@range; else if ( .@count > 128 ) .@count = 128; while ( .@i < .@count ) { .@r = .@save = rand( .@i, .@range -1 ) ; if ( !getd( ".@tmp1_"+ .@i ) ) { .@r = ( getd(".@tmp1_"+ .@r ) )? getd( ".@tmp2_"+ .@r ) : .@r; setd ".@tmp2_"+ .@i, .@r; setd ".@tmp2_"+ .@save , .@i; setd ".@tmp1_"+ .@save , 1; set getelementofarray( getarg(1), .@i ), .@r; if ( .@save < .@count ) set getelementofarray( getarg(1), .@save ), .@i; } .@i++; } return .@count; } there are a few other battleground script that doesn't need source modification, you can try search around -
Request A~Z Headgear Quest Script for High Rate Server
AnnieRuru replied to mrfizi's question in Script Requests
http://rathena.org/board/topic/74896-help-hat-maker-quest/#entry162085