Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 06/23/18 in all areas

  1. Please be aware on who you contact for Gepard purchasing. Gepard can only be purchased by Functor https://rathena.org/board/profile/20454-functor/ Any other "Functor" is not Functor and can ONLY be found on rAthena. No discord, facebook, twitter, or other forms of contact are appropriate. If you are contacted by anyone other than the Functor provided by the link about Gepard it is most likely a scam.
    3 points
  2. Story Time: A lot of players run into problems. They disconnected in an instance, they bought the wrong item, someone is being a nuisance in battlegrounds. After cursing, they usually type `@request`. But alas, none of the GMs you hired are online! You need to dock their pay. The message is lost in the void. Until now. Discord has support for webhooks, which is a way to associate callbacks to HTTP requests. Their developer docs for webhooks can be found here. Basically, you can send a POST to your discord webhook url, and the contents will be printed to the associated channel. "So?" When someone uses `@request`, the message is sent from the map server to the character server, which then sends it back to all map servers, and the map servers send the message to all connected GMs. Because it sends it to the character server, we're able to send the POST request from the character server. This helps performance, since the map server is constantly doing things and the character server generally uses less resources. "That's great! But how do we send this POST request? Do I need a stamp?" If you're on Linux, there's a great command line tool called `curl`. It's mostly used to download files from a server, but it also has support for all other HTTP methods. "Command line? How do we put it in rathena?" Curl also comes with a library called libcurl that we can use in c/c++ programs! "I see, so we use libcurl to send the message to the discord webhook!" Exactly! How it looks: Installation: Two config options are added in this patch: gm_whisp_webhook and gm_whisp_webhook_url This makes a change to configure, and adds a new flag. You need to add --with-lcurl to your arguments. Example: ./configure --enable-prere --enable-vip --enable-packetver=20170614 --with-lcurl Disclaimers: This only works on linux. I don't run rAthena servers on windows, and neither should you. (personal opinion) You need to install libcurl-devel. On some OSes it could be called something else; on Ubuntu, it's libcurl4-openssl-dev. Don't ask me for a lot of help if you can't get it to work. This is supposed to be a showcase, but I'm giving the code out. I made this in a day, it's not the greatest code. Initializing curl and cleaning up on every call is not the greatest, but unless you are getting 100 requests a minute, it should be ok for now. Eventually, I want to add it to src/common or something. But that'll happen in a future weekend. Code: The code is here: https://pastebin.com/Z82M9ssf
    1 point
  3. Hi, At the occasion of the FIFA WORLDCUP in Russia, I wanted to show you my version of a soccer stadium for Ragnarok : It is designed for my Battleground Extended mod (Poring Ball mode). Cloakroom Please rate it ?
    1 point
  4. Let me show you my next map!) Just a map in which I managed to accommodate all the cities of Rune-Midgards to 13.2 episodes and even Kunlun. You will never guess why this location was created (it was just for some kind of Fast Travel...) And I started to draw this even before the game Cuphead appears! Now I think, what if I combine this idea with my map ... .•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•. rm_mini Please rate it ? if the map is good enough
    1 point
  5. its look good, old texture have feel like the grass is withering, i didn't know if its intended or not by the mapper, but your restyling make it more lush from before
    1 point
  6. @Functor should have done it in the first place. After all, he is basically offering a third-party-services. rAthena has been too leniant with him. Its not something new that he often indirectly caused other user being scammed, and the user himself failed to do some research before get scammed by imposters. Its more like the owner doesn't even care anymore. lol Perhaps time for a change/update?
    1 point
  7. download it, read the file, edit the file by removing unwanted stone group & stones
    1 point
  8. struct map_session_data *sd = script_rid2sd(st); should be this struct map_session_data *sd; script_rid2sd(sd); Generally you can't just copy and paste code from other emulators, it won't work.
    1 point
  9. hola langtipe en español es el 17
    1 point
  10. Hi, Here is my last map. Inspirated from this : Screenshots : The center platform is for players to manage their team. Rate it please ?
    1 point
  11. Version 4.2

    5583 downloads

    Support All classes including new Mounts, Oboro, Kagerou and costumes! Yay!. =3 The palettes are ranged from 0 to 35. For this pack to look the best you must use my corrected classes sprites ! These palettes are from my big 700 palette pack ! If you want more clothes dyes, you may consider asking for one of my Paletting services (More than 700 Palettes, Races and Colors! :3). Thank you very much!
    Free
    1 point
  12. hello limit hairstyle like this ? or you want specific range ? //===== rAthena Script ======================================= //= Stylist //===== By: ================================================== //= Euphy //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== //= rAthena Project //===== Description: ========================================= //= Changes your hair style, hair color, and cloth color. //===== Additional Comments: ================================= //= 1.0 Initial script. //= 1.1 Switched to 'getbattleflag', credits to Saithis. [Euphy] //============================================================ ragnarok,68,78,5 script Stylist#custom_stylist 640,{ //cutin "gc_mayssel01",2; mes "^0000FF Stella^000000"; mes "I'm Stylist Stella."; mes "I am happy to serve you Master."; setarray .@Styles[1], getbattleflag("max_cloth_color"), getbattleflag("max_hair_style"), getbattleflag("max_hair_color"); setarray .@Look[1], LOOK_CLOTHES_COLOR, LOOK_HAIR, LOOK_HAIR_COLOR; set .@maxhairstyle,10; // Max Limit for Hairstyle set .@s, select(" ~ Cloth color: ~ Hairstyle: ~ Hair color"); set .@Revert, getlook(.@Look[.@s]); set .@Style,1; switch(.@s){ case 2: mes "MaxHairstyles ^ff0000"+.@maxhairstyle+"^000000"; input .@hairstyle; if (.@hairstyle > .@maxhairstyle) { mes "Please input correctly."; close3; } if (.@hairstyle < 0 || .@hairstyle > .@maxhairstyle) set .@hairstyle,0; { setlook 1,.@hairstyle; close3; } } while(1) { setlook .@Look[.@s], .@Style; message strcharinfo(0),"This is style #"+.@Style+"."; set .@menu$, " ~ Next (^0055FF"+((.@Style!=.@Styles[.@s])?.@Style+1:1)+"^000000): ~ Previous (^0055FF"+((.@Style!=1)?.@Style-1:.@Styles[.@s])+"^000000): ~ Jump to...: ~ Revert to original (^0055FF"+.@Revert+"^000000)"; switch(select(.@menu$)) { case 1: set .@Style, ((.@Style != .@Styles[.@s]) ? .@Style+1 : 1); break; case 2: set .@Style, ((.@Style != 1) ? .@Style-1 : .@Styles[.@s]); break; case 3: message strcharinfo(0),"Choose a style between 1 - "+.@Styles[.@s]+"."; input .@Style,0,.@Styles[.@s]; if (!.@Style) set .@Style, rand(1,.@Styles[.@s]); break; case 4: set .@Style, .@Revert; setlook .@Look[.@s], .@Revert; break; } } close3; } note : you can use close3 instead close2 + cutin.
    1 point
  13. sorry my bad, forgot to translate turbo_room,106,105,5 script Emperium Breaker 1288,{ // What Map will be used set .Map$,"job3_arch01"; // How many Top Breaker will be Recorded set .TopRank,5; // Message to Inform Players while inside the Room setarray .Instruction$[0], "You need a guild to be able to hit the Emperium, create one with the Emperium i have you if you don't have any. Please read carefully.", "This room is to test how quick you can break an Emperium.", "So get prepared, the Emperium will spawn in a few seconds.", "When you enter there, you rill recieve Butterfly Wings so you can return when you finish, be prepared."; while( 1 ){ mes "Emperium Breaker Room to test how quick you destroy it."; mes "You can compare too the records of other players."; next; switch( select( ( getmapusers( .Map$ ) )?"^FF0000No available":"^0000FFAvailable^000000", "Top ^FF0000"+.TopRank+"^000000 Record", ( getgmlevel() < 90 )?"":"^FF0000[GM]^000000 Reset Room", ( getgmlevel() < 90 )?"":"^FF0000[GM]^000000 Reset Ladder" )){ Case 1: if( getmapusers( .Map$ ) ){ mes "There is another player, please wait until the player ends."; next; break; } warp .Map$,0,0; getitem 714,1; // Emperium if they don't have a guild they can easly create one and test on the Emperium Room killmonster .Map$,"All"; // removemapflag .Map$,mf_noskill; donpcevent strnpcinfo(0)+"::OnReady"; end; Case 2: mes "^ED1ADCBest Record^000000 : "+LatestRecord/1000+"."+LatestRecord%1000+" Seconds."; for( set .@i,0; .@i < .TopRank; set .@i,.@i + 1 ){ if( !$TopRankTime[.@i] ) break; mes "^FF0000Top "+( .@i + 1 )+" : ^0000FF"+$TopName$[.@i]+" "; mes "^FF0000Time : ^ED1ADC[ "+$TopRankTime[.@i]/1000+"."+$TopRankTime[.@i]%1000+" Sec. ]^000000 "; } next; break; Case 3: mapannounce .Map$,"El GM reinicio los record del Emperium Breaker.",0,0x00FF00; killmonster .Map$,"All"; sleep2 3000; mapwarp .Map$,"izlude",103,142; mes "Listo, los jugadores que estaban adentro son enviados a fuera."; next; break; Case 4: switch( select( "^0000FFAll Player^000000:^FF0000One Player^000000" ) ){ Case 1: deletearray $TopRankTime[0],getarraysize( $TopRankTime ); deletearray $TopName$[0],getarraysize( $TopName$ ); mes "RESETED WHOLE LADDER."; break; Case 2: mes "Please input the ^FF0000EXACT NAME^000000 of player you want to delete."; input .Name$; for( set .@i,0; .@i < .TopRank; set .@i,.@i + 1 ){ if( .Name$ == $TopName$[.@i] ){ deletearray $TopName$[.@i],1; deletearray $TopRankTime[.@i],1; mes "Removed ^FF0000"+.Name$+"^000000 from the List."; } } } next; break; } } OnReady: sleep2 3000; for( set .@i,0; .@i < getarraysize( .Instruction$ ); set .@i,.@i + 1 ){ mapannounce .Map$,.Instruction$[.@i],0,0x00FF00; sleep2 2500; } for( set .@i,5; .@i > 0; set .@i,.@i - 1 ){ mapannounce .Map$," : "+.@i+" seconds left.",0,0x00FF00; sleep2 1000; } //mapannounce .Map$,"Hit the Emperium Now and Skills Disabled.",0,0x00FF00; setmapflag .Map$,mf_noskill; monster .Map$,29,27,"Breaker Test",1288,1,strnpcinfo(0)+"::OnBreaked"; set .Record,0; sleep2 500; initnpctimer; end; OnTimer600000: if( !mobcount( .Map$,strnpcinfo(0)+"::OnBreaked" ) ) end; mapannounce .Map$,"You spent too much time. i think you are AFK , so you are out.",0,0xED1ADC; sleep2 3000; mapwarp .Map$,"izlude",103,142; stopnpctimer; end; OnBreaked: set .Time,getnpctimer(0); copyarray .@tempName$[0],$TopName$[0],getarraysize( $TopName$ ); copyarray .@tempRecord[0],$TopRankTime[0],getarraysize( $TopRankTime[0] ); set LatestRecord,.Time; for( set .@i,0; .@i < .TopRank; set .@i,.@i + 1 ){ if( .Time < $TopRankTime[.@i] || !$TopRankTime[.@i] ){ set $TopRankTime[.@i],.Time; set $TopName$[.@i],strcharinfo(0); copyarray $TopRankTime[.@i + 1],.@tempRecord[0],getarraysize( .@tempRecord ); copyarray $TopName$[.@i + 1],.@tempName$[0],getarraysize( .@tempName$ ); announce "[ "+strcharinfo(0)+" ] Got the Ranking "+( .@i + 1 )+" on the Emperium Breaker Room with a record of "+.Time/1000+"."+.Time%1000+" seconds !!!",bc_all,0xED1ADC; break; } } stopnpctimer; announce "Time tooked : "+.Time/1000+"."+.Time%1000+" Seconds. ",bc_self,0xED1ADC; // removemapflag .Map$,mf_noskill; sleep2 5000; mapwarp .Map$,"izlude",103,142; //here is the place of the npc end; } job3_arch01 mapflag nocommand 50 job3_arch01 mapflag gvg on job3_arch01 mapflag gvg_castle job3_arch01 mapflag monster_noteleport job3_arch01 mapflag nosave SavePoint was halfasleep z_z (stilll a litle) allright there you go o:
    1 point
×
×
  • Create New...