-
Posts
2044 -
Joined
-
Last visited
-
Days Won
51
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Posts posted by AnnieRuru
-
-
Rejoice ~~ I just recently stop playing a MMORPG game called - 斗仙2 - a chinese-made MMOPRG game that is heavily PK focused
of course team PK / guild PK / party PK / Battleground and so on are the main strong points on this game.
Previously I don't understand why members want this feature,
as I always told them -> players can always multi-client at the last moment join the winning team to catch the reward
only after I play a battleground for real on a real MMORPG, now I can understand why this is important
so, there are actually some/several protection to prevent players to rip the reward at the last minute, well ... from my experience playing that game
1. although I can multi-client this game with a sandboxie program so all my 4 in-game characters can party up to finish my daily quest faster,
interestingly, I cannot bring 2 characters at the same time to join a same battleground ID
in other words, I cannot register 2 characters on Battleground A, but I can multi-client to have character A join Battleground A, and character B join Battleground B
2. lets say this Battleground is a 10vs10, but Blue team only has 4 players joined, and Red team has 7 players
( this happened frequently ... I heard some people using company computers to register, but only his main character join the battleground)
the Red team registration is stopped, only the Blue team application is still open
at least this is what happened to the game that I just play, cannot have more than 3 players in differences
3. there is a "Vote to kick a player" option in the battleground window
I can right-click on a noob player that keep feeding the enemy team -> means always give points to the enemy / probably a spy from the enemy team
and if 1/2 of our total team members select "Yes" to kick, that player is immediately out from the team ... and ...
4. there is a 5 minute delay from rejoining the same battleground ID
which usually means, if I am somehow gets kick out (happens to me when I having bad internet connection speed),
I usually just register a new Battleground rather than rejoin an existing one, since people always fill up the existing battleground 1st to rip the reward
conclusion, this is not as simple as you might think
I can probably do this, but the modification on this script will be very heavy
especially for case no.1 ... do rathena support MAC address in the 1st place ?
-
1
-
-
I saw your post in another topic says
On 3/30/2018 at 1:04 AM, celeron0134 said:im still new and still learning how to script.
ok, so I just provide a topic link and let you figure out yourself 1st
-
ah ... found a bug
I forgotten the loadevent can be use from another script
if you install another script with loadevent mapflag
will cause this script to warp out other players indiscriminately
1 more time
http://upaste.me/06e6495427daded7f
EDIT: Jesus ... I made mistake too many times, really lost touch with scripting
yeah ... atm, not a godlike scripter yet XD
btw, did you guys mentioned wrong person ??
I am @AnnieRuru not @Annie Ruru
-
1
-
2
-
-
hmm ... nvm ...
let me try this myself then
of course I tested on my test server b4 posting
EDIT: stupid forum IPB3 .... IPB1 is far superior than IPB3
-
1
-
-
@emistry
.@map$ = strcharinfo(3); for (.@i = 0; .@i < .map_size; .@i++) { if (.@map$ == .map$[.@i]) { if (getcharid(2) != .guild_id[.@i] && .guild_id[.@i] > 0) warp "SavePoint",0,0; end; } }
just 1 glance and I can tell this is wrong
since you are comparing 2 different kinds of information -> .@map$ == .map$[.@i] and getcharid(2) == .guild_id[.@i]
shouldn't the 2nd one fall into another loop with .@j index?
for(.@j = 0; .@j < guild_id_size; .@j++) <<--- something like this ?
-
5 years ago, @Olrox claimed he was bored, and ask someone to make this script ..... yes, he started it !
3 years ago, @Olrox said he wants to remake the map
then suddenly 2 years ago, @Olrox say he don't want to do it anymore !
Good job !
ok enough this bullshit
You need 2 things for this battleground script to run
Download:
1. the map !
https://rathena.org/board/topic/104326-arathi-map/2. and the script !
wow_domi_1.4r.txtyes, this is a free release as @Olrox said
thanks to @Olrox for giving nice idea anyways XD
Spoiler1.2
wow_domi_1.2r.txt
setbgid_20160103r.diff1.3
http://upaste.me/1b3249619f23c7755
- fix this script no longer need my patch
- add showdigit (along with the stupid bug)
- add .maxplayer2join and .imbalance_team_prevent1.4
wow_domi_1.4r.txt
- fix server crash because rathena love introducing new bugsPS: why this wow_domi_1.2r.txt keep appear below even though I tried to remove it several times
-
3
-
1
-
-
db/skill_require.db.txt
152,0,0,2,0,0,0,99,0,0,none,0,0,7049,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //TF_THROWSTONE
...7049,1... change to 0,0-
1
-
-
you didn't do anything wrong ...
why ? because Emistry script isn't working ...
try this, full complete script
function script timeleft__ { if ( ( .@left = getarg(0) ) <= 0 ) return getarg(0); .@day = .@left / 86400; .@hour = .@left % 86400 / 3600; .@min = .@left % 3600 / 60; .@sec = .@left % 60; if ( .@day ) return .@day +" day "+ .@hour +" hour"; else if ( .@hour ) return .@hour +" hour "+ .@min +" min"; else if ( .@min ) return .@min +" min "+ .@sec +" sec"; else return .@sec +" sec"; } - shop vipshop#7 -1,501:100 - shop vipshop#30 -1,501:100 - script vipnpc FAKE_NPC,{ OnInit: bindatcmd "vipshop", strnpcinfo(0)+"::Onvipshop"; end; Onvipshop: if ( #vipshop == 1 ) callshop "vipshop#7", 1; else if ( #vipshop == 2 ) callshop "vipshop#30", 1; else { mes "which vip status do you want to buy ?"; mes "vip 7 days = 10 Cash points"; mes "vip 30 days = 20 Cash points"; next; if ( select ( "Vip 7 Days", "Vip 30 Days" ) == 1 ) { if ( #CASHPOINTS < 10 ) { mes "you don't have enough Cash points"; close; } mes "Thanks for purchasing !"; #vipshop = 1; #CASHPOINTS -= 10; addtimer 7*24*60*60*1000, strnpcinfo(0)+"::OnTimeUp"; #viptimeleft = 7*24*60*60 + gettimetick(2); close; } else { if ( #CASHPOINTS < 20 ) { mes "you don't have enough Cash points"; close; } mes "Thanks for purchasing !"; #vipshop = 2; #CASHPOINTS -= 20; // addtimer 30*24*60*60*1000, strnpcinfo(0)+"::OnTimeUp"; // over integer limit #viptimeleft = 30*24*60*60 + gettimetick(2); close; } } dispbottom "You currently have "+ #CASHPOINTS +" Cash points .Expire in "+ callfunc( "timeleft__", #viptimeleft - gettimetick(2) )+"."; end; OnPCLoginEvent: if ( #viptimeleft < gettimetick(2) ) addtimer 1, strnpcinfo(0)+"::OnTimeUp"; // sometimes doevent doesn't work else if ( #viptimeleft - gettimetick(2) < 2147483 ) // don't execute addtimer if over integer limit addtimer ( #viptimeleft - gettimetick(2) )*1000, strnpcinfo(0)+"::OnTimeUp"; end; OnTimeUp: #viptimeleft = #vipshop = 0; end; } - script vipnpc#7 FAKE_NPC,{ OnInit: function addshopitem { npcshopdelitem "vipshop#7", 501; .@count = getargcount(); for ( .@i = 0; .@i < .@count; .@i++ ) { if ( .@i % 2 == 0 ) .itemid[ .@i /2 ] = getarg( .@i ); else { .itemcost[ .@i /2 ] = getarg( .@i ); npcshopadditem "vipshop#7", .itemid[ .@i /2 ], .itemcost[ .@i /2 ]; } } } addshopitem // adds shop items here for vip#7 501,10, 502,20, 503,30, 504,40, 505,50; npcshopattach "vipshop#7"; .@itemsize = getarraysize( .itemid ); for ( .@i = 0; .@i < .@itemsize; .@i++ ) .itemcost[ .itemid[.@i] ] = .itemcost[.@i]; end; OnBuyItem: if ( !@bought_quantity ) end; .@size = getarraysize( @bought_nameid ); for ( .@i = 0; .@i < .@size; .@i++ ) .@itemcost += .itemcost[ @bought_nameid[.@i] ] * @bought_quantity[.@i]; if ( .@itemcost > #CASHPOINTS ) { mes "you don't have enough Cash points"; close; } if ( !checkweight2( @bought_nameid, @bought_quantity ) ) { mes "you can't carry all these items !"; close; } #CASHPOINTS -= .@itemcost; for ( .@i = 0; .@i < .@size; .@i++ ) getitem @bought_nameid[.@i], @bought_quantity[.@i]; end; } - script vipnpc#30 FAKE_NPC,{ OnInit: function addshopitem { npcshopdelitem "vipshop#30", 501; .@count = getargcount(); for ( .@i = 0; .@i < .@count; .@i++ ) { if ( .@i % 2 == 0 ) .itemid[ .@i /2 ] = getarg( .@i ); else { .itemcost[ .@i /2 ] = getarg( .@i ); npcshopadditem "vipshop#30", .itemid[ .@i /2 ], .itemcost[ .@i /2 ]; } } } addshopitem // adds shop items here for vip#30 501,5, 502,10, 503,15, 504,20, 505,25; npcshopattach "vipshop#30"; .@itemsize = getarraysize( .itemid ); for ( .@i = 0; .@i < .@itemsize; .@i++ ) .itemcost[ .itemid[.@i] ] = .itemcost[.@i]; end; OnBuyItem: if ( !@bought_quantity ) end; .@size = getarraysize( @bought_nameid ); for ( .@i = 0; .@i < .@size; .@i++ ) .@itemcost += .itemcost[ @bought_nameid[.@i] ] * @bought_quantity[.@i]; if ( .@itemcost > #CASHPOINTS ) { mes "you don't have enough Cash points"; close; } if ( !checkweight2( @bought_nameid, @bought_quantity ) ) { mes "you can't carry all these items !"; close; } #CASHPOINTS -= .@itemcost; for ( .@i = 0; .@i < .@size; .@i++ ) getitem @bought_nameid[.@i], @bought_quantity[.@i]; end; }
-
1
-
1
-
-
monster .Map$,0,0,"[ Farm Zone ] Resident",rand( 2400,2405 ),80,strnpcinfo(0)+"::OnNormalKill"; monster .Map$,0,0,"[ Farm Zone ] Guardian",rand( 2400,2405 ),5,strnpcinfo(0)+"::OnBossKill";
nope, also the same, it will show up the same mobhas to use arrays in the case,
and ... @emistry your script needs to be cleaner
What the hell is this ???
set .Hunter[getarraysize( .Hunter )],strcharinfo(0);
..
try this
prontera,155,185,5 script Farm Zone 1_F_MARIA,{ while ( true ) { mes "How can i help you ?"; switch( select( "Information:Farm Items" )) { case 1: mes "This is a Farm Zone."; mes "You are able to Hunt Monster inside this Room."; mes "Every Monster will award you random items."; next; mes "But there is some Condition.."; mes "You can only go in ^FF0000once every "+.RoomCleanMin+" minutes for 1 times.^000000"; mes "And Maximum of ^FF0000"+.MaxPlayers+" Players per "+.RoomCleanMin+" Minutes.^000000"; mes "Maximum Hunting Limit ^FF0000"+.MaxItemLimit+"^000000"; next; mes "There will be a ^FF0000Room Cleaning^000000 from time to time..."; mes "All players will be kicked out, it is your bad luck if you meet this."; mes "Delay will still apply even though you just go in for 1 Seconds.."; next; break; case 2: // #HuntRoomDelay = 0; if ( #HuntRoomDelay + .DelayMin * 60 > gettimetick(2) ) { mes "Wait for ^FF0000"+( ( ( #HuntRoomDelay + .DelayMin * 60 ) - gettimetick(2) )/60 )+" Minutes^000000."; close; } else if ( getarraysize( .Hunter ) >= .MaxPlayers ) { mes "Currently the Room is Full. Please try again later."; close; } else { warp .Map$,0,0; set .Hunter[getarraysize( .Hunter )], getcharid(3); set #HuntRoomDelay, gettimetick(2); // please don't set the deny variable into the future, if admin adjust the setting to decrease the value, player will experience long deny set #FarmHunt,0; end; } } } close; OnNormalKill: monster .Map$,0,0,"--ja--",.normal_mob[rand(.normal_mob_size)],1,strnpcinfo(0)+"::OnNormalKill"; getitem .farm_normal[rand(.farm_normal_size)], 1; goto L_kill; OnBossKill: monster .Map$,0,0,"--ja--",.boss_mob[rand(.boss_mob_size)],1,strnpcinfo(0)+"::OnBossKill"; getitem .farm_boss[rand(.farm_boss_size)], 1; L_kill: #FarmHunt++; dispbottom "[ Farm Zone ] : Farmed "+ #FarmHunt +" / "+.MaxItemLimit+" Items"; if ( #FarmHunt >= .MaxItemLimit ) { message strcharinfo(0),"Limit Reach , you may join again later."; sleep2 2000; warp "prontera",155,181; } end; OnInit: // Maximum Player can join per X Minutes. set .MaxPlayers,5; // Adding X Minutes of Delay before can go in again. set .DelayMin,15; // Maximum Hunt Limit per round inside the Zone. set .MaxItemLimit,1000; // Map that will be used in thos Zone. set .Map$,"moc_fild19"; // Clear Map Every X Minutes. set .RoomCleanMin,15; // Mapflag Initialization setmapflag .Map$, mf_nomobloot; setmapflag .Map$, mf_nomvploot; setmapflag .Map$, mf_nowarpto; setmapflag .Map$, mf_nochat; setmapflag .Map$, mf_novending; setmapflag .Map$, mf_nocommand,60; setmapflag .Map$, mf_nojobexp; setmapflag .Map$, mf_nobaseexp; setarray .farm_normal, 501,502,503,504,505; // farm 1 of these items when kill normal mobs setarray .farm_boss, 506,507,508,509,510; // farm 1 of these items when kill boss monsters setarray .normal_mob, 2401,2402,2403,2404; setarray .boss_mob, 1388, 1096, 1120; .farm_normal_size = getarraysize(.farm_normal); .farm_boss_size = getarraysize(.farm_boss); .boss_mob_size = getarraysize(.boss_mob); .normal_mob_size = getarraysize(.normal_mob); while ( true ) { killmonster .Map$, "All"; cleanmap .Map$; // you also forgot about this command mapwarp .Map$,"prontera",155,181; for ( .@i = 0; .@i < 80; .@i++ ) monster .Map$,0,0, "[ Farm Zone ] Resident", .normal_mob[ rand( .normal_mob_size ) ], 1, strnpcinfo(0)+"::OnNormalKill"; for ( .@i = 0; .@i < 5; .@i++ ) monster .Map$,0,0, "[ Farm Zone ] Guardian", .boss_mob[ rand( .boss_mob_size ) ], 1, strnpcinfo(0)+"::OnBossKill"; deletearray .Hunter; announce "[ Farm Zone ] : Farming Zone has been Cleaned up, another 5 Players may go in now.", bc_blue; sleep ( .RoomCleanMin * 60000 ); mapannounce .Map$,"[ Farm Zone ] : Room Clean Up now...All Users will be warped Out.", bc_map; killmonster .Map$, "All"; sleep 3000; } end; }
-
yes, you can do some sort of trick, though, running query_sql repeatedly might eats your server resources
I don't really recommend though
- script kdhfksfjs FAKE_NPC,{ OnInit: query_sql "create table if not exists disconnect_char( account_id int(11) primary key, char_id int(11), name varchar(23) ) engine = innodb;"; while ( true ) { .@nb = query_sql( "select * from disconnect_char", .@aid, .@cid, .@name$ ); for ( .@i = 0; .@i < .@nb; .@i++ ) { if ( .@aid[.@i] ) { if ( isloggedin( .@aid[.@i] ) ) { atcommand "@kick "+ rid2name( .@aid[.@i] ); debugmes "the player AID "+ .@aid[.@i] +" has been kick."; } else debugmes "the player AID "+ .@aid[.@i] +" is not online"; query_sql "delete from disconnect_char where account_id = "+ .@aid[.@i]; } else if ( .@cid[.@i] ) { if ( query_sql( "select account_id from `char` where char_id = "+ .@cid[.@i], .@taid ) ) { if ( isloggedin( .@taid ) ) { atcommand "@kick "+ rid2name( .@taid ); debugmes "the player CID "+ .@cid[.@i] +" has been kick."; } else debugmes "the player CID "+ .@cid[.@i] +" is not online"; } else debugmes "the player CID "+ .@cid[.@i] +" doesn't exist"; query_sql "delete from disconnect_char where char_id = "+ .@cid[.@i]; } else if ( .@name$[.@i] ) { if ( query_sql( "select account_id from `char` where name = '"+ escape_sql(.@name$[.@i]) +"'", .@taid ) ) { if ( isloggedin( .@taid ) ) { atcommand "@kick "+ rid2name( .@taid ); debugmes "the player name "+ .@name$[.@i] +" has been kick."; } else debugmes "the player name "+ .@name$[.@i] +" is not online"; } else debugmes "the player name "+ .@name$[.@i] +" doesn't exist"; query_sql "delete from disconnect_char where name = '"+ escape_sql(.@name$[.@i]) +"'"; } } sleep 5000; } }
..
its inside `vendings` tableOne last question, Do you know where I can find the sql to see the autotrade players? or any sql to see the buffs from each player. Or it's a kind of custom table?
and the buffs is `sc_data`
-
1
-
-
ok both of you please stop ...
if I actually see this in hercules, I'll invisible the post, and send a group PM to both of you to settle this issue privately ...
both of you are respectable scripters in rathena, along with Capuche, Euphy , Brian ... and some others
despite the difference in emulator we are using, there is no need to create whatever drama that can raise the tension between all of us
anyway ..
I just found this in the source code ... its a TODO
https://github.com/rathena/rathena/blob/master/src/map/npc.c#L780
try report this issue to get this fix
EDIT:
and this is gettimetick(0) method, which will go negative on 24th day and may create bug
prontera,158,185,5 script kjhfksdjf 100,{ if ( @timeon ) { dispbottom "time used -> "+( gettimetick(0) - @start ) +" mili-seconds"; @start = 0; // clear the var } else @start = gettimetick(0); @timeon ^= 1; end; }
-
1
-
-
ok, abusing SQL query
https://rathena.org/board/topic/73478-requesting-card-seller-script/?p=154617
prontera,155,185,5 script Card collector 1_F_MARIA,{ mes "["+ strnpcinfo(0) +"]"; if ( !.start ) { mes "I'm not looking for any card right now."; close; } mes "Hi, I'm looking for "+ getitemname(.look4card) +", do you have it ?"; next; .@count = countitem(.look4card); if ( !.@count ) { mes "["+ strnpcinfo(0) +"]"; mes "Unfortunately you don't have the card I'm looking for"; close; } input .@give, 0, .@count; mes "["+ strnpcinfo(0) +"]"; if ( !.@give ) { mes "You are not giving me ? ... sob.."; close; } mes "Thank You !!"; delitem .look4card, .@give; collector_points += ( 5 + .checkmvp * 5 )* .@give; close; OnMinute00: if ( gettime(3) % 1 ) end; OnStart: .look4card = .allcardid[ rand( .allcards ) ]; announce "["+ strnpcinfo(0) +"] I'm looking for "+ getitemname( .look4card ) +" !!!", bc_all; while ( .mvpcardid[.@i] != .look4card && .@i < .mvpcards ) .@i++; .checkmvp = ( .@i < .mvpcards )? 1 : 0; .start = true; sleep 30000; // last 30 seconds .start = false; announce "["+ strnpcinfo(0) +"] Thank you everyone for the participation.", bc_all; end; OnInit: .@mobdb$ = checkre(0)? "mob_db_re" : "mob_db"; .@itemdb$ = checkre(0)? "item_db_re" : "item_db"; .allcards = query_sql("select "+ .@itemdb$ +".id from "+ .@itemdb$ +" right join "+ .@mobdb$ +" on "+ .@itemdb$ +".id = "+ .@mobdb$ +".dropcardid where type = 6 group by name_japanese", .allcardid); .mvpcards = query_sql("select "+ .@itemdb$ +".id from "+ .@itemdb$ +" right join "+ .@mobdb$ +" on "+ .@itemdb$ +".id = "+ .@mobdb$ +".dropcardid where mexp > 0 and type = 6 group by name_japanese;", .mvpcardid); // bindatcmd "test", strnpcinfo(0)+"::OnStart", 99, 100; // bindatcmd "value", strnpcinfo(0)+"::OnValue", 99, 100; end; OnValue: dispbottom "Your currently collector points is "+ collector_points; if ( .start ) dispbottom "looking for ID "+ .look4card; end; }
... have to use codebox because this rathena script doesn't compatible with hercules ...ok I stop play here for today, might come back here some other day again
EDIT: yeah Emistry ...
OnMinute00: if ( gettime(3) % 2 ) OnInit: .card_id = rand( 4001,4500 );
you know that, you missing the curly bracket right ?this means ... it will trigger every hour, always read the line below this
but the rand only execute when Hour is 1,3,5,7,9,11
on other hour time, it doesn't random change the card ID
EDIT: when I was about to publish in hercules forum, I found I mess up @count and @give, fixed
-
if you are writing something like algorithm script, you can just use gettimetick(0)
.@start = gettimetick(0); callfunc "F_SomeAlgorithm"; dispbottom "time used -> "+( gettimetick(0) - .@start ) +" mili-seconds";
you can find various algorithm like sorting algorithm in this topic
http://herc.ws/board/topic/4321-help-me-improve-this-merge-sort-algorithm/
or shuffle algorithm in this topic
https://github.com/HerculesWS/Hercules/pull/872
but if you are just to check how much time it click on the npc, gettimetick(0) cannot be use here because it will go negative at 24th day
has to use npctimer
*check and see properly did I use rathena test server ? OK*
I think there is a bug, yes, both hercules and rathena, I tested both
prontera,158,185,5 script dfgdgdfg 1_F_MARIA,{ attachnpctimer; // comment this line, it shows the timer initnpctimer; sleep2 1000; stopnpctimer; dispbottom getnpctimer(0); end; }
if the attachnpctimer is leave on, the timer always show 0, but when I remove it, which makes it attach to npc, the timer will start showing ...
for the time being, stick to gettimetick(0) ...
-
1
-
-
don't know why, but I feel the urge to answer this particular topic
... hmph ... some of them actually rip off my source code actually...
1st thing that you need to know is, this rathena unit controller script command is based on mob controller script commands
which you can find them here
case UMOB_MASTERAID: md->master_id = value; break;
the master GID of the monster
the original mob controller system has *mobattach script command, which is missing in rathena
means, yes, if you attach a monster to a player, you can use this constant to check this particular monster belongs to which player
for example, in that script I link the to, pet vs pet system
if AI_ACTION_TYPE_ATTACK is triggered, that mob controller system doesn't have a RID attached
so have to check the target it was killed with AI_ACTION_TAR, which push the GID of the unit it killed
then we can use UMOB_MASTERAID of the AI_ACTION_TAR to know the winner of the duel
if you don't understand, don't worry, I haven't code mobevent script command yet
once I did it, rathena will going to have it anyway, so you can play with it later
so, this is currently useless until I make the mobevent script command
case UMOB_AI: md->special_state.ai = (enum mob_ai)value; break;
the special_state ai is defined, in rathena, here
https://github.com/rathena/rathena/blob/master/src/map/map.h#L385
... seriously this should go inside mob.h ...
from the PM you talk to me earlier, you should be able to read the source code to understand how to search these AI_ constants ...
case UMOB_SCOPTION: md->sc.option = (unsigned short)value; break;
similar to player's setoption
https://github.com/rathena/rathena/blob/master/doc/script_commands.txt#L3451
in theory, if you setoption it with OPTION_HIDE, the monster will hide permanently until it dead
(unsigned short) .. ? LOL this is funny XDcase UMOB_SLAVECPYMSTRMD: md->state.copy_master_mode = value > 0 ? 1 : 0; if (value > 0) { TBL_MOB *md2 = map_id2md(md->master_id); md->status.mode = md2->status.mode; } break;
this is currently useless, mobattach script command can attach to the player, and can also attach to another mob
yes, attach to another mob, then copy the master's mode, which is master's UMOB_MODE
without mobattach script command, this is useless
case UMOB_DMGIMMUNE: md->ud.immune_attack = (bool)value > 0 ? 1 : 0; break;
immune attack should be self explain
you can find the responsible line here
https://github.com/rathena/rathena/blob/master/src/map/battle.c#L7413
if the battle_check_target function return 0; you know what it means right ?-
1
-
-
LOL ... ok I release my patch
http://upaste.me/f8a021974df57fd43<--- sad ... nobody buying, but meh
hercules use status.rhw.atk for physical and status.rhw.atk2 for magical
https://github.com/HerculesWS/Hercules/blob/master/src/config/const.h#L60
and minimum and maximum damage is retrieve by function
but rathena is something else,
md->status.rhw.atk is minimum attack
md->status.rhw.atk2 is maximum attack
md->status.matk_min is minimum magical attack
md->status.matk_max is maximum magical attack
good job for copy paste my stuff XD
-
I'm using 20140115 and I don't see anywhere the client having this feature thoughFor your information,
if you're using newer client .ex 2013. You dont even need a source mod to enable this feature.
-
use your imagination when apply the effects
prontera,155,174,5 script sdhfdjskf 100,{ mes "select left, center or right"; next; .@s = select( "left", "center", "right" ); mes "now firing"; close2; specialeffect EF_BEGINSPELL3; sleep 1000; donpcevent "#meteorstorm"+ .@s +"::OnEffect"; end; } - script meteorstorm -1,{ end; OnEffect: specialeffect EF_METEORSTORM; sleep 1000; getmapxy .@map$, .@x, .@y, 1; addrid 4, .@map$, .@x-2, .@y-2, .@x+2, .@y+2; announce strcharinfo(0) +" has been hit by the catapult", bc_map; // add this for adding shame percentheal -100, 0; end; } prontera,148,167,5 duplicate(meteorstorm) #meteorstorm1 100,{} prontera,156,167,5 duplicate(meteorstorm) #meteorstorm2 100,{} prontera,163,167,5 duplicate(meteorstorm) #meteorstorm3 100,{}
with your post count and the difficulty of this question is,I assumed the countitem and getcastledata check is not a problem for you
EDIT: added shame announcement
-
1
-
-
so sick of hearing this same request again and again
-
1
-
-
http://rathena.org/board/topic/97602-annierurus-bg-emp-edit-request/#entry267419
I don't see what's so hard about it
just download the patch
[paste=7207eo0p96gx]
then put rand__ function somewhere
then install the script
-
[paste=1w0niwopbpdt]
not that hard to write
man ... its been months since I last use a rathena test server to write a script, all the while using hercules
and just debugging this script alone with the extensive use of @reloadscript, my clean rathena test server can crashed 3 times
I don't recall my hercules test server can crash so many times in 1 single day
-
block movement
pcblockmove getcharid(3), 1;
..
there is no block skill command, but the nearest I would go with setoption, option_xmas, which also blocked attack
-
1
-
-
its possible to do this but based on my past experience, when a team is certainly going to lose
all the player in the losing team will logout and then join the winning team, taking the most benefit of the reward
if you played counter-strike you should know this
players just want to enjoy winning the game and don't want to be in the losing team
-
so you mean you just want a ladder script that shows top 5 killer for killing other players in bat_b01 map ?What i am requesting is i wanna add a Battle Ground Ladder. ( Top 5 Battle Ground Ladder )
I thought this system allows everyone to join ?and a system that will allow anyone to join while the system is running and minimum player to start with is 5 vs 5.
when a round is over, those 2 register npc will show up, click on the chat room to join
minimum player to start
.minplayer2start = 1; // minimum player to start
change to 5, will becomes 5vs5 -
http://en.wikipedia.org/wiki/Blackjack
split ...
possible, but need to add another callsub stuffs
and I saw allow splitting multiple times ? omg rather only stick to once only
.... just feel lazy to do ...
insurance ...
very easy to add in this script but pointless
insurance only advantage to those doing card counting, but this script simply randomized a number
heck, it can even random 5 times of the same cards, when there are only 4 of them possible with different color suits
EDIT:
oh wait ...
http://entertainment.howstuffworks.com/how-to-play-blackjack.htm
A practical system for counting cards in blackjack to gain an edge over the casino was made available to the public in the early 1960s. As it happened, few players ever really learned to beat the dealer. Furthermore, playing conditions have changed since then. Some tables use more than one deck at a time or cut a percentage of the cards out of play so that a card counter never sees them.
BG_PVP countdown
in Scripting Support
Posted
I want to say, this kind of stuff should be discourage
on the MMORPG I played, I really do encounter people hiding in a corner of the map killing his/her own alt character to farm battleground points
I left it there 1st, but in time you'll take it out too when your players start abuse this system
hmm ...
... I tested in-game and it says "Score 0 rounds to win !"
you just copy-paste it from my other battleground script don't you ?
... there is no way Euphy revise my script and still have the 0 over there ... he would have changed it to bc_map
anyway ... yup, you did correctly
if you want to have ... multiple rounds to finish the battleground ... try this topic
t