-
Content Count
403 -
Joined
-
Last visited
-
Days Won
10
Posts posted by Winterfox
-
-
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; }}
mrlongshen reacted to this -
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.
-
Not sure i mean it actually would require more of a script and less of a item. Maybe its a weird edgecase.
-
-
Always out-witting me @@Winterfox
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.
-
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;}
-
Here's a script @@mrlongshen.
- script CashReset -1,{OnPCLoginEvent: if( !#CashReset ) { #CASHPOINTS = 0;#CashReset++;} elseend;}
That way when they login the next time Cash Points will be 0'd out.
I'm curious what happened? Some abuse of Cash Point script?
You could make that a bit better like that:
- script CashReset -1,{ OnPCLoginEvent: if( #CashReset ) end; #CASHPOINTS = 0; #CashReset = 1;}
@@Aeromesi there are no such table for cash point..
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"
-
-
-
-
-
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?
-
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;}
-
//======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
-
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.
-
yeah I forgot to reset the variables ... always a mistake for me. +1
update the script in my previous post
if you gonna save them in SQL, how many columns are you going to make ?
if the player has about 50 skills learned, make 50+ columns ?
isn't this is the one gonna lag the server ?
and the info about saving too many variables will hit the performance
this is outdated info for eathena
hercules has already use new method
http://herc.ws/board/topic/3886-hercules-1st-2014-megapatch/
previously it was limited to 128 elements because it was using array in the source to simulate it
but now hercules are using pointer to store array
in theory, this should allow server to make as many variable as possible until server run out of RAM
there shouldn't be a performance hit unless when the player having over 500,000 variables
-during player login and sql retrieve too many rows
crash ? no such thing ...
if it happens, post in bug report
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.
-
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.
-
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.
-
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' )
-
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.
-
-
You can define what groups to log separatly in /conf/groups.conf via log_commands.
<log_commands>Boolean value. If true then all commands used by the group will be logged toatcommandlog. If setting is omitted in a group definition, false is assumed.Requires 'log_commands' to be enabled in 'conf/logs.conf'.
Healer small edition
in Script Requests
Posted
@@Alexandria