Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 02/01/13 in all areas

  1. Hi there! This is a converter that allow users convert their fbx files to rsm format with a better conversion You can get this result easily: Screenshot: Notice: * The converter DOESNT convert scaling animations since rsm doesn't includes these informations. * The converter would ONLY convert the first node of the scene, you have to set the parent-child relationship. * The texture wrap mode of official client is clamping, this means that UV will be valid only between 0.0 - 1.0. * The converter WONT handle skeleton animation, it only handle node animation. * Use 2013.3 version of fbx file is recommended. * 'Smooth Shading' is smooth group shading, the converter can also convert smooth groups. * The converter would automatically convert all opaque textures to BMP, and convert all transparent textures to TGA. * Make sure the dimension of your textures is power of two (256x256, 512x512, 256x512, ...), otherwise the client will resize them without scaling. History: 1.4: * Fixed texture name codepage problem. 1.3: * Fxed texture name case problem. 1.2: * Animation speed more customizable. 1.1: * Fixed animation length problem. * Added animation speed setting. 1.0: * Fixed UV flipping problem. * Fixed texture name locale problem. * Added Rsm to Fbx conversion method. beta 1: * Initial release. Download: RsmConverter 1.4: http://www.mediafire.com/download/ba1xsxgpvkh44wc/RsmConverter20130724.zip Enjoy!
    2 points
  2. The reason it got removed was because it was hardly ever used and probably wasn't maintained either.
    2 points
  3. Agree. And true. Seems this point is somewhat omitted... what a mistake. This recalls me those times when we had "stable and trunk" branches in eA. IMO separating Pre-RE on its own branch, is, a better -suitable- way of saying that you are gonna kill it. Guys these* are not the best times to do -radical changes- like the one you are discussing here (About Pre-RE. I'm not refering about GIT move). Remember that there is another emu option now that is preserving Pre-RE. The only difference for now, between each projects is: a strong community backing here, that you surely will put on the fence with this move. So I will say it simple. You want to take the risk and loose your "consumers", for a better "way of coding"?, then, sure do it =P. Not a good idea for me.
    2 points
  4. I never really understood how there could be so much political trouble in emulator projects. You don't even need to do many coding decisions as you already have a clear definition on how it should be (= like official servers). That devs are lazy, well that's a different story, an open source project always depends on how many people are willing to work for it. You can't really blame devs for doing nothing. Want more work done? Then join the project instead of doing the fixes just for your own server.
    2 points
  5. @Antares: We're a group of volunteers. We're not paid, and we're not machines. If you have the time and drive to contribute, you are welcome to do so. Otherwise your post is incredibly disrespectful.
    2 points
  6. Peopleperson49's Script Collection Please enjoy my work. If you have any suggestions or find any issues/bugs please let me know! If you like or download my work please click the "Vote this post up" button to the right of the post and check out my server Ragnarok Underground. My scripts are written as I would use it for my Ragnarok Underground server, you might need to configure them before use. My scripts are written to work with the rAthena emulator. When reporting and bug/error/suggestion in this topic please give the emulator version, version of the script your using, and the issue in detail! Super Magnifier Identifys all unidientified items a player is holding at once. I made this a long time ago for my server, but I added here for Nipsino after reading a post he left. Function_SuperMagnifier.txt Rock, Paper, Scissors Roulette This was one of my first scripts I ever made. I learned to script by breaking these type of scripts down and recreating them from scratch. This script was recreated in this same way. It is very similar to the original in design. Allows the player to play roulette with a 5 chamber pistol. Only one bullet is loaded at a time. The script will continue to loop until somebody is shot. Version 2.0: rpsroulette.txt BlackJack Scratchcard Blackjack script that designed to work like a scratchcard. It is based on using eight decks or cards and both numbers and suits determine winning hands. Buster prize for scoring a 30 or 31, which can only be done if you already have a 20 or 21 adding one more element of gambling to it. Item data is included at the bottom of the script. Version 3.3: Scratchcard_BlackJack.txt Powerball Lottery This was one of my first scripts I ever made. I learned to script by breaking these type of scripts down and recreating them from scratch. This script was recreated in this same way. It is very similar to the original in design. Powerball lottery picks 5 miniballs and 1 powerball. Different pay amount based on type of matches made. Version 1.7: lottery.txt Advanced Banker This was one of my first scripts I ever made. I learned to script by breaking these type of scripts down and recreating them from scratch. This script was recreated in this same way. It is very similar to the original in design. Bank with varying account and interest based directly on balance. Also has trustfund which pays out only when the character reaches BaseLevel 150. Most of my scripts give trustfund bonuses and also 1% of any zeny spent goes toward the trustfund. Version 1.4: bank.txt Heads Or Tails This was one of my first scripts I ever made. I learned to script by breaking these type of scripts down and recreating them from scratch. I remember making this one, but I'm not sure if I based it off of another script or not. Player starts by betting 500z and then flips a coin. If heads their money is disabled, if tails they loose all their money. Version 2.4: hot.txt Jackpot Leon This was one of my first scripts I ever made. I learned to script by breaking these type of scripts down and recreating them from scratch. This script was recreated in this same way. It is very similar to the original in design, however I'm not sure where to find that script anymore. The script picks a number between 1 and 100. The player pays 10,000z to make a guess. Each guess increases the size of the Jackpot by 9,000z until somebody wins. Version 2.3: jackpot.txt Double Dice Roll Very simple dice gambling game created for my custom Comodo casino package. You bet various amounts of zeny and roll two dice. The winner is the one with the highest total score. This was created from scratch as part of my casino package and had nothing to do with the rolladice script. Version 2.1: roll_a_dice.txt Saving Angel This script was written for my lovely wife after we were player and our whole party was wiped out in majos. It allows a character to resurrect another character anywhere in the server for a fee. Version 1.8: Saving_Angel.txt Magic 8 Ball Custom script that works just like using a magic 8 ball. Version 2.2: MagicEightball.txt Wishing Well Custom script that allows a player to throw zeny into the wishing well and make a wish. The wish is then sent to any online GM using @request. It is restricted to one use per day to help prevent annoying the crap out of the GM's! Version 1.7: WishingWell.txt Arch Bishop Job Quest This script was written for MelMel on rAthena.org. It is a compltely new version of the third job change quest for an Arch Bishop. I did not use any other scripts as a base. It allows a Priest/High Priest to gather items and then change jobs to an Arch Bishop. The Sub-scripts can be completed in any order and all work off of each other. Version 1.1: Job_AB.txt Guillotine Cross Job Quest This script was written to supplement the fact that the Guillotine Cross still has no official script release on rAthena.org. It is a compltely new version of the third job change quest for a Guillotine Cross. I did not use any other scripts as a base. It allows a Assassin/Assassin Cross to gather items and then change jobs to a Guillotine Cross. Version 1.2: Job_GC.txt Monster Of The Day Another Monster Of The Day script. I made this one from scratch to be very simple and work automatically. Uses almost the full list of monsters from the mob_branch. I included the dispbottom here when players login, but I actually perfer to use a login script with this in it. Version 1.4: MOTD.txt Security Manager Allows a player to set up a password to help protect their account. It uses a simple OnWhisperGlobal function. I nolonger support the use of the whisper system in my Security Manager script after version 1.3. I will still provide support for other issues that might be discovered in scripts prior to v1.4, but they will be fixed in a version that now uses bindatcmd. Version 1.5: Security_Manager.txt GM Headquarters Allows access to a part of the sec_in01 map that doesn't have any warps anyway. This is a nice areas to setup special NPC's or events. Whatever anybody wants to do with it. However the secutiry code is fun for everybody to try to crack. This script currently has shops that be used once a day as a reward for cracking code. It's my intent to eventually add a full warper script that can be used once a day also. Version 1.3: GMHeadquarters.txt Monster Hunter This script was written for vgrebirth on rAthena.org. It allows one party at a time to do the Monster Hunter event. If any member is killed the entire party looses and are warped out. If you kill all the mini-boss monsters the boss monster is spawned. Version 2.7: Monster_Hunter.txt
    1 point
  7. Hello there, It's been a long time since the last time I posted something here. (to the point) Here, I have repacked an updated Miruku Client, dated on 9th of January, 2013. Client was updated through normal patches, repacked using WinRAR (sorry, I still haven't learnt NSIS since the last time (http://rathena.org/board/topic/70753-miruku-07-09-2012-7th-september-2012/'>Miruku 07-09-2012 (7th September 2012)) I updated. Parts are uploaded to Mediafire. Enjoy and have a nice day~ http://www.mediafire.com/?8owj579z85ncb'>Miruku 09-01-2013 *PS: please let me know if something happens. If there is (are) missing files / problems / etc, please don't forget to PM me. Sorry, the files on my Mediafire have been deleted~ UPDATE: As I heard so much problems encountered when downloading the file (yes, I admit it is all because of my account), I have made a mirror from filecloud.io with the links below: http://filecloud.io/k2mwt8ra'>BGM http://filecloud.io/j1g6adbw'>Part 1 http://filecloud.io/djntzwpa'>Part 2 http://filecloud.io/n6chkj78'>Part 3 http://filecloud.io/5akyl0jc'>Part 4 http://filecloud.io/bdf4t8ep'>Part 5 http://filecloud.io/s82eo4fm'>Part 6 http://filecloud.io/h0xmbu71'>Part 7 http://filecloud.io/prwqiaxd'>Part 8 http://filecloud.io/hidfu2wz'>Part 9 http://filecloud.io/yu4r2qf6'>Part 10 http://filecloud.io/2y86nvum'>Part 11 UPDATE 2: Instead of sharing these files like that, I am giving you the credentials of my Mediafire. Well, I ask for all of you to be nice to all other as well as me. Not much, I am just asking you NOT to delete / damage the any of the files inside the account, as well changing the password. So, here it is: Mediafire e-mail: [email protected] password: freeforfriends Have a nice day! UPDATE 3: Now available on GDrive! https://docs.google.com/folder/d/0B4GIW--OnyUETlNPcEZhdEU0YkE/edit?usp=sharing'>https://docs.google....dit?usp=sharing Have a nice day! UPDATE 4: A mirror has been added, http://star-o.net/miruku/'>http://star-o.net/miruku/(Thank to Snow) !!! Re-hosting and re-mirrorring is NOT allowed without permission from the owner of the file !!!
    1 point
  8. January Digest 2013 The following digest covers the month of January, 2013. Things have been settling down since the last digest, at long last. Here is a summary of what's taken place over the past month. Administration Maki has been reinstated as Administrator. Development Team Lemongrass has joined as Script / DB Developer. Daegaladh has rejoined as Script / DB Developer. Kenpachi has been moved to Community Contributors. Ind has been moved to Community Contributors. Cookie has been moved to Community Contributors. Development Highlights Updated all Renewal cast delays for non-third job skills. (r17069) Implemented official walk path dealing with obstacles. (r17091) Implemented Unique Item IDs for non-stackable items, switched off by default. (r17080, r17081, r17086) Added and updated many Renewal item scripts. (r17103, r17104, r17105). Implemented Sealed MVP cards. (r17104, r17105). Reduced default and minimum value of skill_amotion_leniency. (r17072) Distinguished main database from log database SQL upgrade files. (r17102) Misc. Stats During the period there were 47 commits. Of these 47 commits 34 included bug-fixes.
    1 point
  9. Who the hell cares what the project is? I'm loyal to the code, not the name. Also posting to add legend to the thread.
    1 point
  10. File Name: Mercenary Ranking for FluxCP File Submitter: Daegaladh File Submitted: 01 Feb 2013 File Category: Web Resources Content Author: Daegaladh Description Ranking of players loyal to each mercenary guild, for your FluxCP Features Configurable quantity of ranked characters of each mercenary guild. Compatibility Xantara's FluxCP - http://fluxcp-ra.googlecode.com/ CalciumKid's FluxCP RE - http://rathena.org/b...athena-support/ ByteFlux's FluxCP 1.0 - https://code.google.com/p/fluxcp/ Demo (Soon) Installation Extract the 'merc_ranking' folder into the 'addons' folder of your FluxCP installation. If you're using a custom theme, rename the 'default' folder in 'merc_ranking/themes' to your custom theme name. Policy All purchases are non-refundable. Do not redistribute or resell anything from this work, this also includes modified versions of anything I've made. Do not steal the credit of this work. Do not remove or replace license text, images, etc. Support If you find any bug or need support, please contact me: rAthena: http://rathena.org/b.../468-daegaladh/ email: [email protected] Skype: daegaladh License Copyright © 2012-2013 Daegaladh. All rights Reserved. Click here to download this file
    1 point
  11. Use this gettime(8) Your players will get the points everyday, unless he doesn't logged in for a year in the exact day
    1 point
  12. Here are my thoughts thus far. We are very likely moving to GIT. The majority of our developers are fine with the move; pull requests are a big plus; merging is automated; and it certainly opens the possibility of doing something with branching in the future. If possible, there will be a read-only SVN mirror. Switching to GIT requires a clean checkout for users, so we'd upkeep an SVN repository that users can SVN Relocate to instead. Also, revision numbers will stay intact this way. If we do branch, we would have three: Pre-Renewal, Renewal, and mixed (most likely the master branch). It's certainly more work to maintain, but it'd satisfy everyone. The dev team has not agreed on this yet, though.
    1 point
  13. It's more like a script request.. whatever here for you. prontera,155,155,5 script Guild manager 56,{ //- Limit 128 guild names //- NPC name .@npc$ = "[ Guild manager ]"; //-------------------------------------- L_list: // Delete variables // ---------------- .@m = 0; .@cast_owned$ = ""; setarray .@var$, ".@guild_id", ".@name$", ".@master$", ".@guild_lv", ".@connect_member", ".@max_member", ".@name_m$", ".@castle_id"; for( .@i = 0; .@i < getarraysize( .@var$ ); .@i++ ) deletearray getd( .@var$[ .@i ] ), getarraysize( getd( .@var$[ .@i ] ) ); // Count guild // ----------- query_sql( "SELECT COUNT(`guild_id`) FROM `guild`", .@count ); mes .@npc$; mes " "; mes "Total: ^FF0000"+ .@count +"^000000 guild"+ ( .@count -1 ? "s." : "." ); mes "Select a guild for more informations."; next; // Menu display name guild // ----------------------- query_sql( "SELECT `guild_id`, `name`, `master`, `guild_lv` FROM `guild` ORDER BY `guild_id` ASC limit 128", .@guild_id, .@name$, .@master$, .@guild_lv ); .@s = select( implode( .@name$, ":" ) ) -1; .@c = query_sql( "SELECT `castle_id` FROM `guild_castle` WHERE `guild_id` = '"+ .@guild_id[ .@s ] +"'", .@castle_id ); for( .@i = 0; .@i < .@c; .@i++ ) .@cast_owned$ = .@cast_owned$ + .castle$[ .@castle_id[ .@i ] ] + ( .@i == .@c -1 ? "" : ", " ); .@size = query_sql( "SELECT `name` FROM `guild_member` WHERE `guild_id`= '"+ .@guild_id[ .@s ] +"' ORDER BY `position` ASC", .@name_m$ ); for( .@i = 0; .@i < .@size; .@i++ ) if( getcharid( 0,.@name_m$[ .@i ] ) ) .@m++; mes .@npc$; mes "Guild name: ^FF0000"+ .@name$[ .@s ] +"^000000", "Master name: ^FFCC00"+ .@master$[ .@s ] +"^000000", "Guild lvl: ^FF00CC"+ .@guild_lv[ .@s ] +"^000000", "Members Online: ^0000FF"+ .@m +"^000000", "Castle owned: ^CC00CC"+ ( .@c ? .@cast_owned$ : "None" ) +"^000000"; // Menu members // ------------ switch( select( "~ ^777777Informations members^000000", "~ ^777777Cancel^000000", "~ ^777777Choose another guild^000000" ) ) { case 1: next; break; case 2: next; mes .@npc$; mes " "; mes "See you soon ^-^"; close; case 3: next; goto L_list; } deletearray .@name_m$, getarraysize( .@name_m$ ); .@size = query_sql( "SELECT `name` FROM `guild_member` WHERE `guild_id`= '"+ .@guild_id[ .@s ] +"' ORDER BY `position` ASC", .@name_m$ ); mes .@npc$; mes "Members of ^0000FF"+ .@name$[ .@s ] +"^000000 guild.", "- Red: currently ^FF0000offline^000000.", "- Green: currently ^00C957online^000000.", " "; for( .@i = 0; .@i < .@size; .@i++ ) mes "-> "+ ( getcharid( 0,.@name_m$[ .@i ] ) ? "^00C957" : "^FF0000" ) + .@name_m$[ .@i ] +"^000000"; next; goto L_list; OnInit: deletearray .castle$, getarraysize( .castle$ ); //- prevent duplicate setarray .castle$, "Neuschwanstein", "Hohenschwangau", "Nuernberg", "Wuerzburg", "Rothenburg", "Repherion", "Eeyolbriggar", "Yesnelph", "Bergel", "Mersetzdeitz", "Bright Arbor", "Scarlet Palace", "Holy Shadow", "Sacred Altar", "Bamboo Grove Hill", "Kriemhild", "Swanhild", "Fadhgridh", "Skoegul", "Gondul", "Earth", "Air", "Water", "Fire", "Himinn", "Andlangr", "Viblainn", "Hljod", "Skidbladnir", "Mardol", "Cyr", "Horn", "Gefn", "Bandis"; end; } Display : - Number of guild (total) - when you select a guild -- display guild name, guild master, guild lvl, member online and castle owned by the guild -- display all member name and check if they are online/offline Works on rAthena only. Edit including comment of nanakiwurtz
    1 point
  14. INSERT INTO `explore_achievement` (`achievement_id`,`map1`,`map2`,`map3`,`map4`,`map5`) VALUES (1,'morroc','','','','') It's morocc, not morroc.
    1 point
  15. Added a note to trunk/conf/battle/party.conf in r17115.
    1 point
  16. atcommand.c Below ACMD_FUNC(who) Search and replace (multiple) if (pc_get_group_id(pl_sd) > 0) // Player title, if exists to if (pc_get_group_id(pl_sd) > 1) // Player title, if exists Then recompile. All players with group ID 0 or 1 wouldn't have title, so you could play with your player group ID 1 with all command. @nanakiwurtz @who display title when using adjgroup even if it's in the session.
    1 point
  17. Splitting PRE-RE and RE in 2 branches is double work for us devs, that's why we merge the scripts and created the checkre() command.
    1 point
  18. Yes, there is a fork of a fork and yes, there has been A LOT of things that happened behind the scenes. There is no limitations on who can create a fork and who can't; whatever their reasons may be. But does this really all matter, as long as there is an emulator out there for the community to use? And like Yuki said, it's in the past now. There is no need to waste time in dealing with these things as they've already happened. It is definitely better to focus on the present and the future. The best that each project can do now is to improve their own project and hope for some collaboration between the two.
    1 point
  19. @AppleGirl: You don't know nothing about their reasons so stop your stupid comments please. If you'd know what happens behind the scenes of rA you would not post shit like this. (Actually you could have noticed it by yourself when looking at the amount of staff members who quit in the last weeks.)
    1 point
  20. Maybe it would be good to insert a note at the bottom of the file /conf/battle/party.conf like: Would not hurt anyone and would clear things up if someone is looking for it deperately.
    1 point
  21. Reads like a get rich quick scheme. Just needs the "Normally this all would cost $199, but today only you can have it for the reduced price of $99..." at the end. "Trust me!" "I have tons of data in the form of spreadsheets!" "Of course, I can't show you any of it." No, but seriously, it sounds nice. But I've been in RO since late 2003 and I've seen many a project come and go. Staff selection is one of the hardest things to do as a server owner. You think some of these ideas are original but they aren't. There are several servers that pay their staff and still end up with terrible staff. While there is no shortage of people lining up to be GM, there is a shortage of quality people. Most quality GM's get sick of the same thing and go on to be server owners and run into that very same problem themselves. What most of us would call a "good server" rarely takes off. A lot of people get confused by this. They do everything right, they get in balanced custom items, some don't take donations of any sort. You name it, it's been tried. But they never take off. Why? If you paid any attention at all you'd realize most RO players are drama queens. They like the drama. Sure, they say they don't and they might even think they don't -- but they do. Look at the largest record holding RO servers around today. Most, if not all, of them either have had massive drama or still do. Drama makes the world go 'round. But to be fair, making commands public won't do anything but cause drama. GM A needs to reimburse Player 1, who happens to be a guild leader, for his item that was lost due to a bug and does so. The logs show that it happened but not why it happened. Player 2, of a rival guild, sees this and immediately starts a conspiracy theory that GM A is favoring Player 1 and his guild. His guild will think this no matter what you say from that point on. Even if you put why, people won't believe it if they don't want to. As I said, people like drama and where there isn't drama they will make it. You could blank out names from commands, sure, but then the information is useless and you might as well not do it to begin with. You'd be better off limiting in game powers completely. Binding GMs to their own "world" (map) and limiting their influence to this area. Do support over the web site most of the time, only interacting in game when required. In fact, some of the things I've been working on will nearly remove the need for GMs to have in game powers to start with. When have you ever seen a GM in any other game you've played? I've never seen a GM in another game. I've talked to them over the support system, sure... but never seen them. I've never had a problem where they needed to actually be there in front of me. If GMs can show off in front of other players and you keep it all work and no play, there's less of a reason for people to want to be GM for the wrong reasons. When we instituted this on a server I worked for most of the staff quit -- all of them later found to be corrupt. The current staff has no known or suspected corruption. Some food for thought. P.S. I've said this before.
    1 point
  22. !!!!!!!!!! XARPLE thanks!!! thanks for this tool I knew you were busy to continue developing it and thanks for replying back the email I sent to you about this! GUYS NOW we can do animated RSM Models with this!!! This man is amazing!!! Before I did a video about your GND/RSW to FBX tool. I will do a video about this new tool too, so people will know how to use it! Edit: Xarple can you upload the FBX original file you converted and the rsm result, for a reference to us?
    1 point
  23. *scrolling this page "oh fk yeah too long dem lazy to read"* .... *hits back button*
    1 point
  24. Its a source code ofcourse, I will make it 2hours later(will reach home in 2 hours), if someone makes a patch before me its good, otherwise wait for me. Here's my Source Code: 1) Battle.c Add This { "castrate_dex_scale2", &battle_config.castrate_dex_scale2, 150, 1, INT_MAX, }, Below { "mob_size_influence", &battle_config.mob_size_influence, 0, 0, 1, }, Around 5800 line. 2) Battle.h Add this int castrate_dex_scale2; // added by [Dastgir Pojee] Below int castrate_dex_scale; // added by [MouseJstr] Line 348 3) Skill.c Find // calculate base cast time (reduced by dex) if( !(skill_get_castnodex(skill_id, skill_lv)&1) ) { Replace the if contents with if( !(skill_get_castnodex(skill_id, skill_lv)&1) ) { int scale; if (sd->status.class_ >= 4054 && sd->status.class_ <= 4112){scale = battle_config.castrate_dex_scale2 - status_get_dex(bl);} else{scale = battle_config.castrate_dex_scale - status_get_dex(bl);} if( scale > 0 ) // not instant cast if (sd->status.class_ >= 4054 && sd->status.class_ <= 4112){time = time * scale / battle_config.castrate_dex_scale2;} else{time = time * scale / battle_config.castrate_dex_scale;} else return 0; // instant cast } Line 13690 Then Find default: if (battle_config.delay_dependon_dex && !(delaynodex&1)) Replace two If Contents with (there is if condition below this one also.) if (battle_config.delay_dependon_dex && !(delaynodex&1)) { // if skill delay is allowed to be reduced by dex int scale; if (sd->status.class_ >= 4054 && sd->status.class_ <= 4112){scale = battle_config.castrate_dex_scale2 - status_get_dex(bl);} else{ scale = battle_config.castrate_dex_scale - status_get_dex(bl);} if (scale > 0) if (sd->status.class_ >= 4054 && sd->status.class_ <= 4112){time = time * scale / battle_config.castrate_dex_scale2;} else{time = time * scale / battle_config.castrate_dex_scale;} else //To be capped later to minimum. time = 0; } if (battle_config.delay_dependon_agi && !(delaynodex&1)) { // if skill delay is allowed to be reduced by agi int scale = battle_config.castrate_dex_scale - status_get_agi(bl); if (sd->status.class_ >= 4054 && sd->status.class_ <= 4112){int scale = battle_config.castrate_dex_scale2 - status_get_agi(bl);} else{ int scale = battle_config.castrate_dex_scale - status_get_agi(bl);} if (scale > 0) if (sd->status.class_ >= 4054 && sd->status.class_ <= 4112){time = time * scale / battle_config.castrate_dex_scale2;} else{time = time * scale / battle_config.castrate_dex_scale;} else //To be capped later to minimum. time = 0; } Add castrate_dex_scale2: 180 in skill.conf Diff File:3rd Job Castrate.diff
    1 point
×
×
  • Create New...