-
Content Count
403 -
Joined
-
Last visited
-
Days Won
10
Content Type
Profiles
Forums
Downloads
Staff Applications
Calendar
Everything posted by Winterfox
-
He wants to make a item equipable for a class that normally couldn't equip it as long as you have a certain item in the inventory.
-
@@Alexandria //===== Description: =========================================//= Basic healer script.//===== Additional Comments: =================================//= 1.0 Initial script.//= 1.1 Aligned coordinates with @go.//= 1.2 Fix variables and character stuck at healing//============================================================- script Healer -1,{ if( gettimetick( 2 ) < HEALCD ) { dispbottom "You need wait for " + gettimetick( 2 ) - HEALCD + " seconds."; end; } sc_end SC_STONE; sc_end SC_FREEZE; sc_end SC_STUN; sc_end SC_SLEEP; sc_end SC_POISON; sc_end SC_CURSE; sc_end SC_SILENCE; sc_end SC_CONFUSION; sc_end SC_BLIND; sc_end SC_BLEEDING; percentheal 100,100; specialeffect2 EF_INCAGILITY; sc_start SC_INC_AGI,240000,10; specialeffect2 EF_BLESSING; sc_start SC_BLESSING,240000,10; emotion e_lv; HEALCD = gettimetick( 2 ) + 60; end;}// Duplicates//============================================================alberta,25,240,6 duplicate(Healer) Healer#alb 4_F_ACOLYTE,5,5
-
@@mrlongshen prontera,165,177,3 script PVP Warper 1_M_MOC_LORD,{ if ( !agitcheck() || !agitcheck2() ) { if( gettimetick( 2 ) < PVPCD ) { dispbottom "You need to rest for 5 minutes."; end; } if ( select( "Yes!", "No thanks.") == 2 ) close; warp "guild_vs5",0,0; announce strcharinfo(0) + " has entered the PVP Room.",0; announce "There are ["+getmapusers("guild_vs5")+"/30] players inside.",0; } end; OnPCKillEvent: if ( strcharinfo( PC_MAP ) != "guild_vs5" ) end; if( PVPKilltarget == killedrid ) { PVPTargetKillCount++; } else { PVPKilltarget = killedrid; PVPTargetKillCount = 1; } if( PVPTargetKillCount == 5 ) { PVPCD = gettimetick( 2 ) + 300; PVPKilltarget = 0; PVPTargetKillCount = 0; warp "prontera",0,0; }}
-
@@MikZ Why is it important that there are no guilds / parties? As far as i understand it, you want a all vs all scenario where only the emp breaker gets something. So what is the benefit of beeing in a party / guild? If it is because they could unite to share it afterwards, there is not really a way to prevent it, because they just could leave their guild / party temporary. The only way you could make that atleast a bit uninteresting is to make the item account bound, but since you are handing out tcgs which are account bound by default there is not much sense in limiting it in that way.
-
@@mrlongshen Not sure i mean it actually would require more of a script and less of a item. Maybe its a weird edgecase.
-
@@mrlongshen You are in database support, i guess that is the wrong section for your request.
-
Don't worry others do that to me too. But i think that is good it shows that noone is an island and there is allways space to improve.
-
@@Alexandria prontera,157,190,5 script Login Settings 4_F_JOB_HUNTER,{ .@npcname$ = "["+ strnpcinfo(1) +"]";// dispbottom atcommand_login +""; // debugging mes .@npcname$; mes "Hello, "+strcharinfo(0); mes "What setting do you want to change?"; next; for ( .@i = 0; .@i < .total; .@i++ ) .@menu$ = .@menu$ + .atname$[.@i] +"["+( ( atcommand_login & 1 << .@i )? "^00BB22On^000000" : "^FF2200Off^000000" )+"]:"; .@s = select( .@menu$ ) -1; mes .@npcname$; mes "Status: "+( ( atcommand_login & 1 << .@s )? "^00BB22On^000000" : "^FF2200Off^000000"); next; mes .@npcname$; if ( select( "I want to "+( ( atcommand_login & 1 << .@s )? "^FF2200disable^000000": "^00BB22enable^000000" )+" it", "Nothing" ) == 2 ) { mes "See ya."; close; } if ( atcommand_login & 1 << .@s ) { mes .atname$[.@s] +" is now ^FF2200Off^000000."; atcommand "@"+ .atcommand$[.@s] +" off"; } else { mes .atname$[.@s] +" is now ^00BB22On^000000."; atcommand "@"+ .atcommand$[.@s] +( ( .@s == 1 )? " on": "" ); } atcommand_login = atcommand_login ^ 1 << .@s; close;OnPCLoginEvent: if ( !atcommand_login & 1 << 5 ) { atcommand_login = atcommand_login ^ 1 << 4; atcommand_login = atcommand_login ^ 1 << 5; } for ( .@i = 0; .@i < .total; .@i++ ) { if ( atcommand_login & 1 << .@i ) { atcommand "@"+ .atcommand$[.@i] +( ( .@i == 1 )? " on": "" ); dispbottom .atname$[.@i] +" is now On"; } } end;OnInit: setarray .atname$, "Autoloot ", "Show Zeny ", "Show exp ", "No Ask ", "Main Chat "; setarray .atcommand$, "autoloot", "showzeny", "showexp", "noask", "join #main"; .total = 5; end;}
-
You could make that a bit better like that: - script CashReset -1,{ OnPCLoginEvent: if( #CashReset ) end; #CASHPOINTS = 0; #CashReset = 1;} The table you are searching for is acc_reg_num_db where account_id is the account of the user of course, key is #CASHPOINTS and value is the current amount of cashpoints the user has. If there is no entry for a specific user that means he has 0. The same applies to kafra points you just have to switch the key to #KAFRAPOINTS. Instead of a script you also could use this sql query to delete all cashpoints: DELETE FROM acc_reg_num_db WHERE key = "#CASHPOINTS"
-
@@mrlongshen #CASHPOINTS = 0;
-
Some question about Auriga (Japanese emulator)
Winterfox replied to banana's question in General Server Support
@@banana It seems to be based on Athena based on the config files and scripts atleast. -
@@minx123 readparam doesn't have a name parameter. dispbottom doesn't have a color parameter.
-
@@Pedroooo I might overlook something but i can't see how that is a problem in regards to my post.
-
@@Pedroooo Maybe you should focus on RMS, as far as i know most of the traffic for servers comes from there and most people search there for a new server to play.
-
I recommend you to clarify what you want it is pretty hard to grasp. The only things i personally can read out of your post is, that you are unsatisfied with the curren FluxCP vote system and that you want something without loopholes that allready exists. What loopholes are you talking about? What system did you allready see on servers?
-
@@minx123 You should read the scripting guide more thoroughly things like that are plain wrong: shop: warp "sky_quest" ,45,52; If you want any meaningfull help on your script you should describe what your custom warper shall do exactly. There is something going on about 2 waiting rooms and a warp, but it is pretty ambiguous what the purpose of all this is.
-
prontera,147,183,5 script MOEDAS PORING 4_CAT_DOWN,{ mes "[Negociador]"; mes "^A901DBPosso trocar suas [MOEDAS PORING] por alguns itens úteis~Meow,^000000"; mes "^A901DBestá interessado~Meow?^000000"; next; if ( select( "Claro.:Talvez outra hora." ) == 2 ) { mes "[Negociador]"; mes "^A901DBTudo bem então.^000000"; close; } mes "[Negociador]"; mes "^A901DBFeche a janela para visualizar melhor.^000000"; next; openshop "ENCHANT_SHOP"; close;}- trader ENCHANT_SHOP -1,{ OnInit: setarray .@shopItems, 12214,100,12105,50,12191,50,12708,30,12706,30,12707,30,12236,30,14591,30,714,50,12020,20,1025,10,12028,10,12212,3,985,1,984,1; tradertype( NST_CUSTOM ); for( .@i = 0; .@i < getarraysize( .@shopItems ); .@i += 2 ) sellitem .@shopItems[ .@i ], .@shopItems[ ( .@i + 1 )]; end; OnCountFunds: setcurrency( countitem( 7539 ) ); end; OnPayFunds: if( countitem( 7539 ) < @price ) end; delitem 7539, @price; purchaseok(); end;}
-
@@Alexandria //======Name========================================// Poring Catcher Event//======Version=====================================// 1.0//======Author(s)===================================// Sandbox, Clydelion//======Comments====================================// In loving memory of AstralRO//==================================================prontera,156,184,3 script Poring Catcher Warper 1_SHADOW_NPC,{ if ( getgmlevel() >= .gmsetting ) { if ( !.start ) { mes "start the event ?"; next; if ( select( "Yes", "No" ) == 2 ) close; donpcevent strnpcinfo(0)+"::OnStart"; close; } else { mes "Join or Abort the event ?"; next; if ( select( "Join", "Abort" ) == 1 ) { warp "poring_w03", rand(102,104), 101; end; } .skip = 1; awake strnpcinfo(0); // donpcevent strnpcinfo(0)+"::OnEnd"; close; } } else if ( .start == 1 ) { mes "Do you want to join the Poring Catcher Event?"; select ( "Yes" ); warp "poring_w03", rand(102,104), 101; end; } else if ( .start == 2 ) { mes "Too late, the event has already started"; close; } mes "No Event right now"; close;OnInit: .eventlasting = 30*60; // how many seconds the event will last ? default : 30*60 = 30 minutes .gmsetting = 60; // in which level the GMs can control this event ? .fakes = 3; // the amount of fakes poring * 12 * number of players in the maps setarray .rewardwin, 20003, 10; // edit the reward items here .seconds = 1000; // for debug purpose only, how many mili-second = 1 second ? bindatcmd "poring_catcher", strnpcinfo(0)+"::OnStart", .gmsetting, 100; .rewardwinsize = getarraysize( .rewardwin ); getmapxy .map$, .x, .y, 1; mapwarp "poring_w03", .map$, .x, .y; disablenpc "Poring Catcher Warper";end;OnClock0705: // put all the start timer hereOnClock1105:OnClock1905:OnClock2305:OnStart: .start = 1; enablenpc "Poring Catcher Warper"; announce "Poring Catcher Event: We are going to have a Poring Catcher Event",bc_all,0xFF7F50; sleep 1 * .seconds * !.skip; announce "Poring Catcher Event: For those who want to join, please come to Prontera!",bc_all,0xFF7F50; //Edit to where would you place the warper sleep 1 * .seconds * !.skip; announce "Poring Catcher Event: The Warper would be open for 1 minute",bc_all,0xFF7F50; sleep 30 * .seconds * !.skip; announce "Poring Catcher Event: Last 30 Seconds.",bc_all,0xFF7F50; sleep 30 * .seconds * !.skip; disablenpc "Poring Catcher Warper"; announce "Poring Catcher Event: Warper Closed.",bc_all,0xFF7F50; if ( !getmapusers( "poring_w03" ) ) goto OnEnd; .start = 2; mapannounce "poring_w03","We are about to start the Poring Catcher Event.",bc_blue; sleep 1 * .seconds * !.skip; mapannounce "poring_w03","Rules are simple:",bc_blue; sleep 1 * .seconds * !.skip; mapannounce "poring_w03","In a few seconds I'm going to spawn tons of porings..",bc_blue; sleep 1 * .seconds * !.skip; mapannounce "poring_w03","..All you need to do is kill the Poring with the right name..",bc_blue; sleep 1 * .seconds * !.skip; mapannounce "poring_w03","..Which would be Poring.",bc_blue; sleep 1 * .seconds * !.skip; mapannounce "poring_w03","If you kill the wrong one, you will be freeze for seconds!",bc_blue; sleep 3 * .seconds * !.skip; mapannounce "poring_w03","That's it.. Now let's get this on!",bc_blue; sleep 3 * .seconds * !.skip; mapannounce "poring_w03","Ready...",bc_blue; sleep 1 * .seconds * !.skip; mapannounce "poring_w03","Get Set..",bc_blue; sleep 1 * .seconds * !.skip; mapannounce "poring_w03","Go!",bc_blue; sleep 1 * .seconds * !.skip; areamonster "poring_w03",95,108,113,87,"Poring",1002,1, strnpcinfo(0)+"::OnCorrectKilled"; areamonster "poring_w03",95,108,113,87,"Poking",1002,3*getmapusers("poring_w03"), strnpcinfo(0)+"::OnFakeKilled"; areamonster "poring_w03",95,108,113,87,"Poiring",1002,3*getmapusers("poring_w03"), strnpcinfo(0)+"::OnFakeKilled"; areamonster "poring_w03",95,108,113,87,"Poling",1002,3*getmapusers("poring_w03"), strnpcinfo(0)+"::OnFakeKilled"; areamonster "poring_w03",95,108,113,87,"Porng",1002,3*getmapusers("poring_w03"), strnpcinfo(0)+"::OnFakeKilled"; areamonster "poring_w03",95,108,113,87,"pH0ur1n6",1002,3*getmapusers("poring_w03"), strnpcinfo(0)+"::OnFakeKilled"; areamonster "poring_w03",95,108,113,87,"P0ring",1002,3*getmapusers("poring_w03"), strnpcinfo(0)+"::OnFakeKilled"; areamonster "poring_w03",95,108,113,87,"Porong",1002,3*getmapusers("poring_w03"), strnpcinfo(0)+"::OnFakeKilled"; areamonster "poring_w03",95,108,113,87,"Powing",1002,3*getmapusers("poring_w03"), strnpcinfo(0)+"::OnFakeKilled"; areamonster "poring_w03",95,108,113,87,"Poriing",1002,3*getmapusers("poring_w03"), strnpcinfo(0)+"::OnFakeKilled"; areamonster "poring_w03",95,108,113,87,"Boring",1002,3*getmapusers("poring_w03"), strnpcinfo(0)+"::OnFakeKilled"; areamonster "poring_w03",95,108,113,87,"Lolwut!?",1002,3*getmapusers("poring_w03"), strnpcinfo(0)+"::OnFakeKilled"; areamonster "poring_w03",95,108,113,87,"Kill me to win!",1002,3*getmapusers("poring_w03"), strnpcinfo(0)+"::OnFakeKilled"; sleep .eventlasting * .seconds * !.skip; .skip = 0; if ( getmapusers( "poring_w03" ) ) goto OnEnd; end;OnEnd: announce "No one won the Poring Catcher Event!",bc_all,0xFF7F50; killmonsterall "poring_w03"; mapwarp "poring_w03", .map$, .x, .y; .start = 0; end;OnCorrectKilled: for ( .@i = 0; .@i < .rewardwinsize; .@i += 2 ) getitem .rewardwin[ .@i ], .rewardwin[ .@i +1 ]; announce strcharinfo(0) +" won the Poring Catcher Event!",bc_all,0xFF7F50; killmonsterall "poring_w03"; mapwarp "poring_w03", .map$, .x, .y; .start = 0; awake strnpcinfo(0); end;OnFakeKilled:// dispbottom "You killed the wrong Poring! Yerrrrrrrrrrrr out!";// warp .map$, .x, .y;// if ( !getmapusers( "poring_w03" ) ) goto OnEnd; dispbottom "You killed the wrong Poring!"; sc_start2 SC_FREEZE, 9000,0,10000; // 9 seconds to freeze// sc_start2 SC_STONE, 9000,0,10000;// sc_start2 SC_STUN, 9000,0,10000;// sc_start2 SC_SLEEP, 9000,0,10000; end;}poring_w03 mapflag nopenaltyporing_w03 mapflag nolootporing_w03 mapflag noskillporing_w03 mapflag nowarptoporing_w03 mapflag nowarpporing_w03 mapflag noteleportporing_w03 mapflag nomemoporing_w03 mapflag nosave SavePointporing_w03 mapflag nobranchporing_w03 mapflag nodrop
-
@@frexorie It is more a question of effort to make it compatible to be able to compile to arm architecture and also a question about what you want to achieve. For a test- or small lan server that will be enough, but for broader use it won't really work that good.
-
You are right, well i read on the wiki that it slows the performance of the server since the char variables would be updated with every char save cycle. The thing is even though it would have produced more tables and rows to work with, it would only have to be done on every enter and leave of the vr instead of constantly sending a bunch of data around. But i guess that addresses this: Saving and loading procedures have been improved outstandingly! for instance, previously, if you had 100 char regs but only one had been modified or deleted, map server would need to send all of them and char server would have to re-insert all of them; now only modified or deleted ones are saving, increasing saving speed of both map and char server procedures and decreasing inter-server bandwidth by dinosaur steps. It also finally claryfied why having more than 128 rows with quers_sql works, i wondered about it since the documentation stated it was limited. Seems it was like that because of a restriction of the array size from long ago was lifted. About the crash part, i think if he simulates another world or something he wants the vr to fallback into the ro world after the server gets back on. So there would need to be a system that checks if there was a complete reboot of the server which would revert all vr people back to the ragnarok basics.
-
@@Aeromesi When you switch back to original values you should set the realXXX to 0 so that they get destroyed while they are not used. Also i would recommend to load / save the sao variables manually via mysql up on entering / leaving the vr, since having too many char variables can tax the performance, atleast if you have many players and many of them play in your vr. The only hard part i guess will be how to handle a crash of your server or instance for whatever reason, regardless of method you use to save the values.
-
@@Shikazu Sounds pretty interesting. Did you consider MariaDB instead of MySQL? It is a full open source alternative for MySQL that supports more DB Engines, activly developed and you don't need a Enterprise version for clustering and it is optimized for speed, which seems a important matter for you. https://mariadb.org/
- 3 replies
-
- emulator
- multithread
-
(and 3 more)
Tagged with:
-
@@MikZ In SQL you can get the entries of a specific user by using: SELECT * FROM `atcommandlog` WHERE `account_id` = ( SELECT `account_id` FROM `login` WHERE `userid` = 'USERNAME' )
-
@@Pedroooo It is used to change a password in a another word noone knows to save it in your database so that in case someone retrieves your database doesn't know the passwords of your users. Hashes are a one way encryption so you can't revert it to the original password. The problem is that hashing alone doesn't do that good anymore, the widely used md5 for exampl isn't that safe anymore and there exist big rainbow tables for it that hackes can run against your hashes to get the actual passwords. The recommended way is to salt the hashes. That means to add a unique random string to the password while hashing it and store that random string with the hash. Adding the salt to the hash ensures that every hash is unique even if the same password is used and rainbow tables will be useless since rainbow tables would need to have hashes that are generated with the same salt and password. Given that people are required to use decent passwords in combination with the mentioned salting it will take pretty long to even get even one password not to say all passwords there are in a stolen database.
-
@@minx123 How many top players? Which MVPs? What does reset? The MVP? The Toplist? Both?