Jump to content

Nova

Members
  • Posts

    265
  • Joined

  • Last visited

  • Days Won

    8

Everything posted by Nova

  1. Just use setwall and delwall. setwall "<map name>",<x>,<y>,<size>,<dir>,<shootable>,"<wallname>"; Directions are the same as NPC sprite facing directions: 0=north, 1=northwest, 2=west, etc. setwall "schg_cas06",114,48,13,6,0,"EventWall1"; delwall "EventWall1"; Add the delwall to a OnMyMobDead event.
  2. Haha that makes sense, awesome, glad it finally worked!
  3. You missed make server (After make clean)
  4. Edited already :] Tested it on my test server and it worked just fine. And you're very welcome.
  5. Oh sorry, I didn't read that properly. Give me a minute, I'll edit this post. Ctrl+F MvP tomb in your npc.c file to find this segment. // MvP tomb [GreenBox] void run_tomb(struct map_session_data* sd, struct npc_data* nd) { char buffer[200]; char time[10]; strftime(time, sizeof(time), "%H:%M", localtime(&nd->u.tomb.kill_time)); // TODO: Find exact color? snprintf(buffer, sizeof(buffer), msg_txt(sd,657), nd->u.tomb.md->db->name); clif_scriptmes(sd, nd->bl.id, buffer); clif_scriptmes(sd, nd->bl.id, msg_txt(sd,658)); snprintf(buffer, sizeof(buffer), msg_txt(sd,659), time); clif_scriptmes(sd, nd->bl.id, buffer); clif_scriptmes(sd, nd->bl.id, msg_txt(sd,660)); snprintf(buffer, sizeof(buffer), msg_txt(sd,661), nd->u.tomb.killer_name[0] ? nd->u.tomb.killer_name : "Unknown"); clif_scriptmes(sd, nd->bl.id, buffer); clif_scriptclose(sd, nd->bl.id); } Change the line strftime(time, sizeof(time), "%H:%M", localtime(&nd->u.tomb.kill_time)); to strftime(time, sizeof(time), "%H", localtime(&nd->u.tomb.kill_time)); You'll likely want to change the line from map_msg.conf to 659: Hour of Death : ^EE0000%s^000000
  6. From a quick googling it appears it's here: https://github.com/rathena/rathena/blob/master/conf/msg_conf/map_msg.conf // MvP Tomb // Added here so it can be easily translated 656: Tomb 657: [ ^EE0000%s^000000 ] 658: Has met its demise 659: Time of death : ^EE0000%s^000000 660: Defeated by 661: [^EE0000%s^000000] Just make that 659 line a blank.
  7. Rewrote it, check it out :] The only detail is right now there's no function for draws, but I'm sure you can write that part out. Right now, if a draw occurs, it'll give the reward at random to one of the two players with the most.
  8. It's exactly that. addrid(1,0); What kind of event is it? I'll write up a simple example. prontera,150,180,5 script GIVEREWARD -1,{ end; OnWhisperGlobal: addrid(1,0); .count = 0; EventCount = countitem(512); if ( EventCount > .count ) { .count = EventCount; .winner$ = strcharinfo(0); .aid = getcharid(3); } initnpctimer; end; OnTimer100: stopnpctimer; getitem 582,1,.aid; announce "The winner is "+.winner$+"!",bc_all,"0xffff00"; end; } Probably not the cleanest method, but it does the job.
  9. We recently opened up the NovaRO Summer Event and one of our players made a nice YouTube video with a tour of the Festival Grounds, figured I'd share it to showcase the scripts we wrote for it. http://i.imgur.com/BEWjcp9.jpg Some of the Mini-Games are modified versions of rA scripts (Such as Peopleperson49's Dice and Rock Paper Scissors scripts, and a mixup of a ton of Mining scripts) Some took inspiration from other rA threads (Poring Matcher) And others are completely original (Fishing, Crystal Chaos, Poring Stacker, Countdown) Hope you enjoy this little tour, and if you want to see the games close and personal feel free to log on! The Festival Grounds are open to everyone and you can get a free amount of Festival Coins to participate in the Mini-Games every day. More details here And a big thank you to Mawile for making these videos showcasing NovaRO content. Countdown Script: summer01,124,121,6 script Countdown#summ 904,{ if ( .start == 0 ) { .@n$ = "[ ^FF0000Countdown^000000 ]"; mes .@n$; mes "In order to win, you must click me after counting down to 0."; mes "Cost of participation is ^3355FF2 Festival Coins^000000"; mes "If you win, I'll give you ^3355FF35 Coins^000000"; @novacountdown = 0; deltimer "Countdown#summ::OnCountdown"; next; switch(select("Play Countdown:Leave")){ case 1: if (@NovaCount > gettimetick(2)) { .@t = @NovaCount - gettimetick(2); dispbottom "Countdown: You must wait "+.@t+" seconds before playing again."; end; } if (.start == 1) { dispbottom "Countdown: Somebody is already playing. Wait for them to finish."; end; } if(countitem(6767) < 2) { mes .@n$; mes "You don't have enough coins."; end; } initnpctimer; delitem 6767,2; @NovaCount = gettimetick(2) + 60; .start = 1; close2; .player$ = strcharinfo(0); .@timer = rand(8,11); .@r = rand(600,1000); .@timer1 = .@timer*.@r; .@timer2 = .@timer1+.@r; emotion 27; showscript "Countdown: "+.player$+"! Count in your head, and click me again when the timer reaches 0.",.gid$; dispbottom "Countdown: Count in your head, and click me on the NPC again when the timer reaches 0."; sleep2 5000; addtimer .@timer1,"Countdown#summ::OnCountdown"; addtimer .@timer2,"Countdown#summ::OnCountdown2"; .@time$ = .@timer; showscript .@time$,.gid$; sleep2 .@r; .@time$ = .@timer-1; showscript .@time$,.gid$; sleep2 .@r; .@time$ = .@timer-2; showscript .@time$,.gid$; end; case 2: end; } end; } if ( .start == 1 && .player$ == strcharinfo(0) ) { if (@novacountdown == 0) { showscript "Countdown: You went too quickly. You lose.",.gid$; .start = 0; @NovaCount = gettimetick(2) + 30; stopnpctimer; end; } if (@novacountdown == 1) { showscript "Countdown: Nice one. You win this time "+.player$+".",.gid$; .start = 0; getitem 6767,35; @NovaCount = gettimetick(2) + 30; stopnpctimer; end; } if (@novacountdown == 2) { showscript "Countdown: You went too slowly. You lose.",.gid$; .start = 0; @NovaCount = gettimetick(2) + 30; stopnpctimer; end; } end; } else { dispbottom "Somebody is already playing Countdown. Wait for them to finish."; end; } OnInit: .gid$ = getnpcid(0); end; OnCountdown: @novacountdown = 1; end; OnCountdown2: @novacountdown = 2; end; OnTimer30000: stopnpctimer; showscript "Countdown: You went too slowly. You lose.",.gid$; .start = 0; end; }
  10. The msgstringtable will likely need to be changed.
  11. I really liked the concept so I made the base concept a mini-game for my Summer Event: Tokeiburu helped me with the randomizer. :] Though I'm sure it'll be way cooler with the whole points value thing and letting 2 players go against each other.
  12. Nice job! It's refreshing to see rA updating so much recently. Great work as usual Aleos and Cydh. And of course a huge thank you to the people that coded it for Hercules as well. I'll probably hold off on merging this onto my server for a little while though. :]
  13. Reaaaally cool. I've been working on some interactive mini-games recently and this is far cooler than most of what I've made so far.
  14. Or just edit /conf/login_athena.conf // Required account group id to connect to server. // -1: disabled // 0 or more: group id group_id_to_connect: -1 to 10 or whatever GM level you want to be able to login and restart it. Then revert it to -1 when you're done and restart again.
  15. I believe setting the first return 0 to return 1 will do the trick. Or you could just remove the first part leaving /** Specifies if item-type should drop unidentified. * @param nameid ID of item */ char itemdb_isidentified(unsigned short nameid) { } int type=itemdb_type(nameid); switch (type) { case IT_SHADOWGEAR: return 0; default: return 1; } }
  16. Haha aw you beat me to it. function script FN_Tier { .@tier = getarg(0); mes "[^0000ff TIER "+.@tier+" ^000000]"; for( .@i = 1; .@i < getarraysize(getd(".tier" + .@tier)); .@i = .@i + 3 ){ if(getd(".tier" + .@tier + "[.@i+3]") == 1) { mes ""+((getd(".tier" + .@tier + "[.@i+2]") >= 1)?"+"+getd(".tier" + .@tier + "[.@i+2]")+" ":"")+""+getitemname(getd(".tier" + .@tier + "[.@i]"))+" x "+getd(".tier" + .@tier +"[.@i+1]")+""; }else if(getd(".tier" + .@tier + "[.@i+3]") == 2){ mes ""+((getd(".tier" + .@tier + "[.@i+2]") >= 1)?"+"+getd(".tier" + .@tier + "[.@i+2]")+" ":"")+"Costume's "+getitemname(getd(".tier" + .@tier + "[.@i]"))+" x "+getd(".tier" + .@tier +"[.@i+1]")+""; } } mes " "; return; } prontera,150,150,4 script TestingStuff 567,{ for( .@i = 1; .@i < 11; .@i++ ){ callfunc("FN_Tier",.@i); } end; } Didn't test with actual variables.
  17. Just started using this, makes everything so much easier to read.
  18. warpparty instance_mapname("1@uns"),56,263, getcharid(1);
  19. Someone recently requested this from me so I figure I'd share it with the community. Be very careful about randomly throwing this on your own real server please, and warn your players about it. - script PERMANENTDEATH -1,{ end; OnPCDieEvent: set .@deadplayer,getcharid(0); message strcharinfo(0),"Game Over"; atcommand "@kick "+strcharinfo(0); set .@j, getarraysize( .char_delete$ ); for (.@i = 0; .@i < .@j; .@i++) { query_sql("DELETE FROM `"+ .char_delete$[.@i] +"` WHERE `char_id` = '"+ .@deadplayer +"'"); } query_sql "DELETE FROM `party` WHERE `leader_char` = '"+.@deadplayer+"'"; end; OnInit: setarray .char_delete$[0],"bonus_script","char","cart_inventory","elemental","friends","global_reg_value","guild","guild_member","homunculus","hotkey","inventory","memo","mercenary","mercenary_owner","pet","quest","sc_data","skill","skillcooldown"; end; } I was thinking about adding an NPC that would set a character variable to select if they wanted to opt-in to "Hardcore" mode, and give them benefits for doing so, and having people without the character variable not be affected by it, but that should be easy to add. The only detail is I get a "[Error]: chrif_ack_login_req failed - player not online." but I believe it might be because I have other OnPCDieEvent labels that are attempting to run, didn't have time to confirm if this was the problem or not. But the deletion goes through just fine and the server doesn't seem to be affected by it at all. Enjoy! (Yay my first public release) Edit: Thanks to my friend Tokei for making me use better loops. Here's the version for the upgraded script engine: - script PERMANENTDEATH -1,{ end; OnPCDieEvent: set .@deadplayer,getcharid(0); message strcharinfo(0),"Game Over"; atcommand "@kick "+strcharinfo(0); set .@j, getarraysize( .char_delete$ ); for (.@i = 0; .@i < .@j; .@i++) { query_sql("DELETE FROM `"+ .char_delete$[.@i] +"` WHERE `char_id` = '"+ .@deadplayer +"'"); } query_sql "DELETE FROM `party` WHERE `leader_char` = '"+.@deadplayer+"'"; end; OnInit: setarray .char_delete$[0],"bonus_script","char","cart_inventory","elemental","friends","char_reg_str","char_reg_num","guild","guild_member","homunculus","hotkey","inventory","memo","mercenary","mercenary_owner","pet","quest","sc_data","skill","skillcooldown"; end; } Have not tested this one, but it should work fine :]
  20. Great month guys. It's awesome to see the emulator improve.
  21. I was also unable to make units attack each other. I got unitwalk and setunitdata working just fine, so it wasn't the GID being messed up.
  22. That's awesome! Can't wait to see it running.
  23. Guess that opens the door for this: https://rathena.org/board/topic/89657-suggestion-monster-control/ :]
×
×
  • Create New...