Jump to content

AnnieRuru

Script Developers
  • Content Count

    1677
  • Joined

  • Last visited

  • Days Won

    245

Reputation Activity

  1. Like
    AnnieRuru got a reaction from kalabasa in Cluckers npc/custom/events   
    need to stretch my scripting skills a little bit, too long since I done any scripting
     
    https://gist.github.com/AnnieRuru/4a87e0ab7451e671d0e3056aedd2a086
  2. Like
    AnnieRuru got a reaction from IndieRO in Sample Questlog & Achievement script   
    this has nothing to do with stylist script, nor the showscript script command,
    but rather the *setquestinfo script command
    and I reproduce the problem with this topic, so move the post over here
    https://github.com/HerculesWS/Hercules/issues/2431
    and also can only reproduce with "@reloadscript" so it isn't ... too severe I guess,
    because live server shouldn't use "@reloadscript" at all
  3. Upvote
    AnnieRuru got a reaction from kalabasa in NPC with a Promo Code   
    hmm .. then how do the official server actually preventing players from using the SAME promotion code for multiple accounts ?
    because when I was fixing the script on rathena forum... I already noticed this
    1. each account can only clam once
    2. each IP can only claim once <-- not safe
    3. use *getitembound ... ok I have no objection
    so I can abuse the system with,
    1. after I got a promotion code, that can claim 10 times,
    2. login an account, claim once ....
    3. logout the game, restart the modem, shuffle your IP address
    4. login another account, claim again
    repeat 10 times
    ok, let's say generate 100 different codes for 100 different donors... so they can use each code only once (limit 100 times)
    means generating 100 different codes for each player ... this only makes the GMs confused which code has been used b4 ...
    instead give out some gibberish word that you have sure which code is available, why not just give the item to them by let the player click on the npc ?
    unless I can clear out these doubts, I'm not going to make this scripts ... seems exploitable ...
    or maybe someone who actually has used this system b4, know how this system works, release a script for it so I can take a peek ...
    because all the promotion npc on the forum(hercules/rathena) can be exploit in some way
    prontera,155,185,5 script Reward/Compensation 1_F_MARIA,{ if ( #Compensation_June2018 ) { mes "you have claimed compensation"; close; } mes "We apologize for blah blah blah"; mes "so I give you a candy"; if ( !checkweight(Candy,1) ) { mes "hahaha you don't even has enough space to claim a candy hahaha"; close; } getitembound Candy, 1, 1; #Compensation_June2018 = 1; close; OnInit: OnHour00: if ( gettime(GETTIME_MONTH) == JUNE && gettime(GETTIME_DAYOFMONTH) >= 9 && gettime(GETTIME_DAYOFMONTH) <= 15 ) enablenpc strnpcinfo(0); else disablenpc strnpcinfo(0); end; } for me its a simple script ...
    but now you actually struct me with an idea to actually write one that can configure the time and the prize given.......
  4. Upvote
    AnnieRuru got a reaction from kalabasa in Castle Guild Member Limit   
    oh ok, you are partially right when it kick excess guild members
    but it isn't the way you claimed that it count from other guild members
     
    upon close inspection, @astralprojection script has 2 problems which is
    1. if the player has multiple characters from the same account join the same guild, it count multiple times instead of 1, it doesn't extend the isloggedin into $@guildmembercid check
    2. it checks as long as the guild member enter ANY CASTLE map, not that particular castle map
     
    try this one
    https://gist.github.com/AnnieRuru/339e268a8be5370fa7ae1aa2f856ca28
  5. Like
    AnnieRuru got a reaction from futureknight in Dota PVP Ladder   
    yeah I bet everyone still using version 2.9, that outdated version from eathena
    honestly there isn't much change with previous version, version 2.9 still works fine if you know how to fix it
     
    Download: 3.6
    hercules - script
    rathena - script
    soundeffect
     
     
     
    if your server has custom animation sprite, remember to set .fix_custom_sprite to true
     
     
    Questions:
    when people ask to make modification to this script, it always comes down to these 2
     
    1. monthly/weekly reset
    ladder will reset monthly or weekly ... self explain
     
    2. "@dotaannounce" off
    hmm ... after talked to some people, they want the announcement set to global, but then some players want to see who are dead, and some players doesn't bother
    and I also saw this is a custom modification ... can be made into this script but ... nah ... I'll do it when I feel like it
  6. Like
    AnnieRuru got a reaction from Hyroshima in Change Equipment Skin   
    https://rathena.org/board/topic/117831-showcase-weapon-skin/.
    https://github.com/rathena/rathena/issues/1779
    got people ask how to do that ...
    so I write a plugin for it
    Download: 1.1
    plugin
     
    also need to add a file in conf/import/change_equipment_skin.conf
    change_equipment_skin: ( { Type: "LOOK_WEAPON" ItemID: 24001 SkinID: 1238 }, //{ // Type: "LOOK_SHIELD" // ItemID: 24002 // SkinID: 2101 //}, ) When player equip a shadow weapon ID 24001, will show the weapon look 1238, which is Zeny_Knife
    "@reloadequipmentskin" will reload this file ...
     
    Note: yes, the clif->sendlook is extremely messy, I attempt to make this support change shield skin
    but for dunno what reason, equip a shield telling the client changing LOOK_WEAPON ... WTF !!
    if anybody knows how to make it support shield, I'm open to suggestion
     
  7. Like
    AnnieRuru got a reaction from Hyroshima in hosting Hercules on Google Cloud with CentOS 8   
    Over the last few days I have been playing with Google Cloud services
    because Google cloud currently offers $300 free credit upon signing up
    yes, FREE $300 credit
    and thus my journey trying to host hercules server on a VPS has begun
     
    all you need is a valid Debit/Credit card number ...
    of course you have to be an adult to try the hosting service ... right ?
     

     
     
    oh and, don't worry, you can always cancel it anytime

     
    after playing with it, I found the Windows option is too expensive, and thus trying to learn the Linux option
     
    This guide is actually demonstrate by using a trash gmail account that can throw away later
    I don't mind all the credentials are shown in the screenshot, when I click the Open topic button I have deleted this project on Google Cloud
     
     
    Step 1. Download Putty and WinCP
    https://www.putty.org/.
    https://winscp.net/eng/download.php
     
    Step 2. Run Google Cloud
    2.1 login to your Google cloud project
    https://github.com/AnnieRuru/customs/blob/master/server hosting/2.png
     
    2.2 first you need to link your credit card to this google cloud
    https://github.com/AnnieRuru/customs/blob/master/server hosting/3.png.
    https://github.com/AnnieRuru/customs/blob/master/server hosting/4.png
    select the billing option to the debit/credit number you input earlier
    https://github.com/AnnieRuru/customs/blob/master/server hosting/5.png
    this billing information is very important, you need to check this once in a while to stop unwanted services <-- please scroll to the right
     
    2.3 pin these 3
    - billing
    - compute engine
    - VPC network
    https://github.com/AnnieRuru/customs/blob/master/server hosting/6.png
     
    2.4 now time to create a VPS, select Compute Engine
    https://github.com/AnnieRuru/customs/blob/master/server hosting/7.png
    2.4.1
    enter all the necessary information
    1. the Virtual machine name
    2. your nearest location
    3. the spec of the machine
    https://github.com/AnnieRuru/customs/blob/master/server hosting/8.png
     
    PS: I tested the cheapest option, N1 series, f1 micro 614MB memory and E2 micro, 1GB memory
    when compiling hercules later, putty just stop ... I think it run out of memory
    ... hercules should have mention a recommendation needs at least 2GB memory to run
     
    2.4.2
    4. Select Boot Disk as CentOS 8
    https://github.com/AnnieRuru/customs/blob/master/server hosting/9.png
    5. select allow HTTP and HTTPS
    https://github.com/AnnieRuru/customs/blob/master/server hosting/10.png
     
    2.4.3
    6. Click Security tab
    https://github.com/AnnieRuru/customs/blob/master/server hosting/11.png
    needs to 'Enter public SSH key'
     
    run Putty Key Generator and click Generate
    https://github.com/AnnieRuru/customs/blob/master/server hosting/12.png
     
    1. change the 'key comment' as it will become user name
    2. save private key to desktop
    3. copy the field
    https://github.com/AnnieRuru/customs/blob/master/server hosting/13.png
     
    paste into Google cloud
    https://github.com/AnnieRuru/customs/blob/master/server hosting/14.png
     
    2.4.4
    select Networking tab
    https://github.com/AnnieRuru/customs/blob/master/server hosting/15.png
    create a static IP address
    https://github.com/AnnieRuru/customs/blob/master/server hosting/16.png
    choose standard tier
     
    after everything done click [Confirm]
    https://github.com/AnnieRuru/customs/blob/master/server hosting/17.png
    and you get your virtual machine running
    https://github.com/AnnieRuru/customs/blob/master/server hosting/18.png
     
    2.5
    once your server up and running
    run Putty to connect to this server
    https://github.com/AnnieRuru/customs/blob/master/server hosting/19.png
    1. scroll down, expand 'SSH' to select 'Auth',
    2. then load the file you saved earlier by PuttyGen
    https://github.com/AnnieRuru/customs/blob/master/server hosting/20.png
    3. enter the public IP address,
    4. then click open
     
    https://github.com/AnnieRuru/customs/blob/master/server hosting/21.png
    it will prompt you with security alert, just click yes
     
    2.6
    login with your user name
    https://github.com/AnnieRuru/customs/blob/master/server hosting/22.png
     
    The very first command you should run is change the password
    sudo passwd root ok Windows Users, don't freak out like me
    there are no ******** when you input the password, this is Linux not Windows
    just input normally ... and press Enter key, it works that way
    https://github.com/AnnieRuru/customs/blob/master/server hosting/23.png
    then do the same with your username
    sudo passwd annie  
    3. update the OS and install all necessary product
     
    3.1 run all these commands
    sudo yum update sudo yum install gcc make mysql mysql-devel mysql-server pcre-devel git zlib-devel Transaction Summary ================================================================================ Install 89 Packages Total download size: 108 M Installed size: 395 M Is this ok [y/N]: Press 'Y' key
     
    3.2
    in the meantime, while this might take awhile, try login WinCP
    https://github.com/AnnieRuru/customs/blob/master/server hosting/24.png
    click new session, then click advance
    https://github.com/AnnieRuru/customs/blob/master/server hosting/25.png
    select 'Authentication' and load the Putty Gen file again
    https://github.com/AnnieRuru/customs/blob/master/server hosting/26.png
    just another warning
    https://github.com/AnnieRuru/customs/blob/master/server hosting/27.png
     
     
    3.3 Download Hercules
    git clone https://github.com/HerculesWS/Hercules.git ~/Hercules  
    4. SQL
     
    4.1 Start SQL service
    sudo systemctl start mysqld.service  
    4.2 login as root
    mysql -u root -p Enter password, just press enter
    default centOS 8 preinstalled MySQL, root has no password
     
    Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 8.0.21 Source distribution Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 4.3 create database
    CREATE DATABASE hercules; 4.4 select hercules database as default
    USE `hercules`; 4.5 create another user, not recommend to connect as root
    CREATE USER 'annie'@'localhost' IDENTIFIED BY '1234'; 4.6 grant this user privilege
    GRANT SELECT,INSERT,UPDATE,DELETE ON * TO 'annie'@'localhost'; 4.7 then quit
    quit it should show like this
    mysql> quit Bye [annie@centos ~]$ 4.8 goto sql-files directory
    cd /home/annie/Hercules/sql-files/ and run all these
    mysql -u root -p hercules < main.sql mysql -u root -p hercules < logs.sql mysql -u root -p hercules < item_db_re.sql mysql -u root -p hercules < mob_db_re.sql mysql -u root -p hercules < mob_skill_db_re.sql it should show like this
    [annie@centos ~]$ cd /home/annie/Hercules/sql-files/ [annie@centos sql-files]$ mysql -u root -p hercules < main.sql Enter password: [annie@centos sql-files]$ mysql -u root -p hercules < logs.sql Enter password: [annie@centos sql-files]$ mysql -u root -p hercules < item_db_re.sql Enter password: [annie@centos sql-files]$ mysql -u root -p hercules < mob_db_re.sql Enter password: [annie@centos sql-files]$ mysql -u root -p hercules < mob_skill_db_re.sql Enter password: [annie@centos sql-files]$ 4.9 go back login mysql and change inter-server connection password from s1/p1 into qwer/asdf
    mysql -u root -p and
    UPDATE `hercules`.`login` SET `userid` = 'qwer', `user_pass` = 'asdf' WHERE `account_id` = 1;  
    5. Compile Hercules
     
    go back to annie/hercules folder
    cd /home/annie/Hercules/ 5.1 type ./configure
    ./configure  
    OK STOP, many things can go wrong here, I stuck here for a few days and searching on both rathena and hercules forum for answers
    the correct output from putty should be this
    checking mysql.h presence... yes checking for mysql.h... yes checking whether my_bool is supported (MySQL)... no (converting my_bool to bool) checking MySQL library (required)... yes (8.0.21) checking PCRE library... checking pcre.h usability... yes checking pcre.h presence... yes checking for pcre.h... yes checking for library containing pcre_study... -lpcre checking for doxygen... no checking for perl... yes configure: creating ./config.status config.status: creating Makefile config.status: creating src/common/Makefile config.status: creating 3rdparty/mt19937ar/Makefile config.status: creating 3rdparty/libconfig/Makefile config.status: creating 3rdparty/libbacktrace/Makefile config.status: creating 3rdparty/libbacktrace/backtrace-supported.h config.status: creating src/char/Makefile config.status: creating src/login/Makefile config.status: creating src/map/Makefile config.status: creating src/plugins/Makefile config.status: creating src/test/Makefile config.status: creating tools/HPMHookGen/Makefile config.status: creating tools/doxygen/Makefile [annie@centos Hercules]$ if it doesn't show config.status: at the end, open a new topic in Linux support
    if it's the same as mine, then can proceed with
     
    5.2 compile hercules
    make sql finally compile should show like this
    CC party.c CC path.c CC pc.c CC pc_groups.c CC pet.c CC quest.c CC refine.c CC rodex.c CC script.c CC searchstore.c CC skill.c CC status.c CC storage.c CC stylist.c CC trade.c CC unit.c CC vending.c LD map-server make[1]: Leaving directory '/home/annie/Hercules/src/map' building conf/import folder... [annie@centos Hercules]$  
    6. configure Hercules
     
    6.1 start hercules by
    ./athena-start start https://github.com/AnnieRuru/customs/blob/master/server hosting/28.png
    of course the reason why connect to SQL failed is because haven't configure Hercules so ....
    stop it from running for a moment
    ./athena-start stop  
    6.2 login to WinCP
    https://github.com/AnnieRuru/customs/blob/master/server hosting/29.png
    ... I will assume you know how to change your public IP address on hercules
    the file you should change are
    map-server.conf
    - userid: "qwer"
    - passwd: "asdf"
    - map_ip: "35.213.138.42"
    - char_ip: "35.213.138.42" char-server.conf
    - userid: "qwer"
    - passwd: "asdf"
    - login_ip: "35.213.138.42"
    - char_ip: "35.213.138.42" conf\global\sql_connections.conf
    -db_hostname: "localhost"
    - db_port: 3306
    - db_username: "annie"
    - db_password: "1234"
    - db_database: "hercules" conf\network.conf
    .....<let me test this thing again> ....  
    <--- I will assume everyone reading this guide already know how to host an offline server, if not click here -->
     
    now run ./athena-start start again, and this time map-server couldn't connect to char-server
     
    7. Configure firewall
     
    7.1 run these 3 commands
    sudo firewall-cmd --permanent --add-port 6900/tcp sudo firewall-cmd --permanent --add-port 6121/tcp sudo firewall-cmd --permanent --add-port 5121/tcp 7.2 reload the firewall settings
    sudo firewall-cmd --reload 7.3 go back to Google Cloud,
    https://github.com/AnnieRuru/customs/blob/master/server hosting/30.png
    to create firewall
    https://github.com/AnnieRuru/customs/blob/master/server hosting/31.png
    configure the firewall
    https://github.com/AnnieRuru/customs/blob/master/server hosting/32.png
    2. & 3. configure firewall only to this project
    https://github.com/AnnieRuru/customs/blob/master/server hosting/33.png
     
    4. at 'tcp:' tab, only allow these 3 ports
    https://github.com/AnnieRuru/customs/blob/master/server hosting/34.png
     
    7.4
    run ./athena-start start again.
    then goto https://portchecker.co/ and check your port is open
    https://github.com/AnnieRuru/customs/blob/master/server hosting/35.png
    And Finally go to your client edit data/sclientinfo.xml to the WAN IP and

    VIOLA !! DONE !!
    I can connect my client to google cloud
     
    PS: the port checker website only shows Port 6900 is OPEN. only if fulfill these 3 conditions
    1. enable firewall setting on CentOS
    2. enable firewall setting on Google Cloud
    3. run the emulator by ./athena-start
     
     
    Ok now you can start worry about security issue like adding additional user in CentOS
    https://www.digitalocean.com/community/tutorials/how-to-add-and-delete-users-on-a-centos-7-server
    google cloud doesn't seem to allow login that way -> https://stackoverflow.com/questions/52503453/how-to-login-gcp-console-without-ssh
    and mysql root account password change ...
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234'; etc...etc...
    need more research
     
     
    Connect to MySQL in CentOS 8 using Window's MySQL Workbench
     
    1. add another connection
    https://github.com/AnnieRuru/customs/blob/master/server hosting/mysql1.png
     
    2. under 'Connection Method', select 'Standard TCP/IP over SSH'
    https://github.com/AnnieRuru/customs/blob/master/server hosting/mysql2.png
     
    3. configure these fields
    3.1 SSH hostname is the server IP address
    3.2 SSH username is the name you created with PuttyGen
    3.3 SSH keyfile needs a conversion with PuttyGen
    3.4 and Click [Test Connection]
    https://github.com/AnnieRuru/customs/blob/master/server hosting/mysql3.png
     
    4. the SSH keyfile needs to be convert from PuttyGen
    4.1 load existing private key, in this case was 'annie.ppk'
    4.2 click conversion and save as 'annie' without file extension
    https://github.com/AnnieRuru/customs/blob/master/server hosting/mysql4.png
     
    5. if successful it will show like this
    https://github.com/AnnieRuru/customs/blob/master/server hosting/mysql5.png
     
    then you can login into MySQL in CentOS
     
    did I forgot to mention needs to open the port 3306 in CentOS and Google Cloud ? refer back to step 7
     
    Reference: https://stackoverflow.com/questions/21527743/mysql-workbench-version-6-0-8-ssh-authentication-issue
     
     
    After thought :
    Overall I'm very satisfy with Google Cloud service,
    1. free $300 credit to spend
    2. can always register trash gmail account to make the credit infinite
      - of course the IP will always change if you do so
    3. very low latency from Malaysia connect to Singapore - just 30~40ms ping
     
    I haven't try OVH which everybody is recommending, but they doesn't offer immediate free credit for me to test so meh .....
     
    and I notice Hercules's wiki CentOS guide is broken, maybe I'll fix it
    https://github.com/HerculesWS/Hercules/wiki/Installation-(CentOS)
     
    - offtopic -
    over last few days playing with google cloud, when I visit Youtube, all my advertisement become Monday.com etc etc group project stuffs
    google really knows how to collect my data
  8. Like
    AnnieRuru got a reaction from IndieRO in Deprecated Features   
    Related commit: https://github.com/HerculesWS/Hercules/pull/2391
    this is part of *setunitdata script command clean-up
    the UDT_MAPIDXY and UDT_WALKTOXY constant has been deprecated so this script command only dealing with 1 INTEGER value
    now it has been standardize, all (int) has been removed from the documentation
     
    Example 1 : setunitdata UDT_MAPIDXY (old)
    .@mobgid = monster("this", -1,-1, "--ja--", PORING, 1); setunitdata(.@mobgid, UDT_MAPIDXY, "guild_vs2", 50,50); now should be
    .@mobgid = monster("this", -1,-1, "--ja--", PORING, 1); unitwarp(.@mobgid, "guild_vs2", 50,50);  

    Example 2 : getunitdata UDT_MAPIDXY (old)
    .@mobgid = monster("this", -1,-1, "--ja--", PORING, 1); getunitdata(.@mobgid, UDT_MAPIDXY, .@pos); dispbottom(sprintf("%d %d %d", .@pos[0], .@pos[1], .@pos[2])); // apparently we don't have *mapid2name script command ... doesn't matter anymore now should be
    .@mobgid = monster("this", -1,-1, "--ja--", PORING, 1); getmapxy(.@map$, .@x, .@y, UNITTYPE_MOB, .@mobgid); dispbottom(sprintf("%s %d %d", .@map$, .@x, .@y));  

    Example 3 : setunitdata UDT_WALKTOXY (old)
    .@mobgid = monster("this", -1,-1, "--ja--", PORING, 1); setunitdata(.@mobgid, UDT_WALKTOXY, 158,185); now should be
    .@mobgid = monster("this", -1,-1, "--ja--", PORING, 1); unitwalk(.@mobgid, 158, 185);  
  9. Upvote
    AnnieRuru got a reaction from nomade in @market clone   
    Download: 1.9
    plugin
     
    Create a market clone, to leave a message for other players
    while the player can go hunting/questing/events
    @market "<Title>" "<Message>" <Color> create a market clone with a chat room titled -> "<Title>"
    when players tries to join the chat room, it refuse the joining, but instead leave a message -> "<Message>"
    with 1.4 update,
    player can now choose their own favorite color for their AFK message
    the <Color> field is optional
    I was struggling to use array for the color list ...
    but in the end, I guess the simplicity is the best
    so you guys can guess how to add in your own list easily
     
    @marketkill kill the market clone without logging off
     
    when a GM do @killmonster @killmonster2, or *killmonster *kilmonsterall script command will not remove the clone
    but @reloadscript, however, will remove it
     
    feels like I just copy paste from the description
    whatever ...
     
    Credit : remember to rep Dastgir's topic because I mostly copy his codes
     
     
  10. Like
    AnnieRuru got a reaction from evilpuncker in Opening OBB (and any similar consumables)   
    merge all separate topics into one
     
    `@allowobbdrop`
    https://github.com/AnnieRuru/Release/blob/master/plugins/allowobbdrop.c
  11. Like
    AnnieRuru got a reaction from IndieRO in Error when getunitdata from died unit   
    yeah we don't have *unitexists script command like rathena
    although I am also not sure want to implement or not
    because since the monster is set with a variable
    upon the monster died, the event label can reset the variable back to 0
     
    EDIT: ... maybe implement it then,
    with *unitexists script command maybe the .mobid there can become .@mobid
    PS: the script command setunitdata/getunitdata has more than 70% are not functioning,
    https://github.com/HerculesWS/Hercules/compare/stable...AnnieRuru:34-setunitdata
    and its not yet complete
     
  12. Like
    AnnieRuru got a reaction from IndieRO in get mob id on event   
    prontera,155,185,5 script jsdfksdjf 1_F_MARIA,{ if ( .mobid ) end; .mobid = monster( "this", -1, -1, "--ja--", 1002, 1, strnpcinfo(3)+"::Onaaa" ); setunitdata .mobid, UDT_MAXHP, 1000000; setunitdata .mobid, UDT_HP, 1000000; while ( .mobid ) { npctalk "Poring HP is now "+( getunitdata( .mobid, UDT_HP ) / 10000 )+"%"; sleep 2000; } end; Onaaa: .mobid = 0; end; } ... although this script is working but ... my map-server.exe spam error ...
    check the script command in script.c
    ... Line 19671 } break; default: ShowError("buildin_getunitdata: Unknown object!\n"); script_pushint(st, 0); return false; } // end of bl->type switch #undef getunitdata_sub return false; <<----- WTF PUT A RETURN FALSE FOR WHAT REASON !!! }  
  13. Like
    AnnieRuru got a reaction from IndieRO in cell_pvp   
    yeah I forgot to add BCT_ENEMY check in battle_check_target function
     
    1.6 - plugin
    - fix party/guild skill (eg: Magnificat/Gloria) not working with CELL_PVP_SKILL_ALLOW due to missing BCT_ENEMY check
  14. Like
    AnnieRuru got a reaction from IndieRO in @packetfilter   
    PLEASE GIVE ME YOUR COMPILER
    I want my visual studio 2019 also display error like yours
    btw I'm guessing that's CentOS, this happened before on my OnPCUseSkillEvent
     
    0.3 - plugin
    - add missing FILTER_CLAN flag
    - implement block_item type 'I' flag
    - fix FILTER_OTHER not working properly when the player doesn't have a party or guild
    - fix [C]hat type shouldn't able to filter self, since the client always shows you are talking anyway
    - and attempt to fix the above stupid error that doesn't show on Visual Studio
  15. Like
    AnnieRuru got a reaction from evilpuncker in Stylist   
    all right, I post up my custom stylist
     
    Download: 2.1
    script
     
    this one use CSV format
    setd ".@"+ Job_Rune_Knight +"_"+ LOOK_CLOTHES_COLOR +"$[1]", "0-5,11-18,20-23"; setd ".@"+ Job_Summoner +"_"+ LOOK_CLOTHES_COLOR +"$[0]", "0-3"; This means, the ID range for Job_Rune_Knight at bodystyle number (1) is 0,1,2,3,4,5,11,12,13,14,15,16,17,18,20,21,22,23
    2nd line means Summoner job can only use clothing range between 0 to 3, this prevent crash client due to human and doram race doesn't share the same palette
     
    From version 2.0 onwards, now you don't have to scratch your head about missing palette due to different bodystyle
    this script can handle that
     
     
  16. Upvote
    AnnieRuru got a reaction from kalabasa in About the mushroom_event   
    OnMinute40: if (mobcount(.Map$, strnpcinfo(0)+"::OnMobKilled") == 0) end; killmonster .Map$, strnpcinfo(0)+"::OnMobKilled"; announce "All left over mushroom has been removed", bc_all; end;  
    I don't use rAthena but should work
  17. Upvote
    AnnieRuru got a reaction from akbare in [Suggestion] displaybottom & message colors   
    ok, I'm noob
    lilith's post is the correct answer
     
    hercules/rathena already have clif_colormes
    https://github.com/HerculesWS/Hercules/blob/master/src/map/clif.c#L8352
     
    so just need to tweak the script command a little bit and it shall be done
    BUILDIN_FUNC(dispbottom2) { TBL_PC *sd; if ( script_hasdata(st,4) ) { if ( data_isstring( script_getdata(st,4) ) ) sd = map_nick2sd( script_getstr(st,4) ); else sd = map_id2sd( script_getnum(st,4) ); } else sd = script_rid2sd(st); if ( sd ) { unsigned int colorcode; if ( script_hasdata(st,3) ) colorcode = script_getnum(st,3); else colorcode = 0xbbffbb; clif_colormes( sd, colorcode, script_getstr(st,2) ); } return 0;} huh ? why not ? it looks cool ! xD 
     
    I have tried to do message2 which display color message overhead your character
    however I have found no known way to display a color message on top of your own head
    it seems possible for other players to see your color message, but not by your own
     
     
  18. Upvote
    AnnieRuru got a reaction from akbare in [Suggestion] displaybottom & message colors   
    OMFG !!totally forgotten about channel system
    you are right, NO LIMITATION
     
    I used rathena emulator to get this working fine
    BUILDIN_FUNC(dispbottom) { TBL_PC *sd; if ( script_hasdata(st,4) ) { if ( data_isstring( script_getdata(st,4) ) ) sd = map_nick2sd( script_getstr(st,4) ); else sd = map_id2sd( script_getnum(st,4) ); } else sd = script_rid2sd(st); if ( sd ) { const char* msg = script_getstr(st,2); unsigned short msg_len = strlen( msg ) +1; unsigned int colorcode; if ( script_hasdata(st,3) ) colorcode = script_getnum(st,3); else colorcode = 0xbbffbb; WFIFOHEAD( sd->fd, msg_len + 12 ); WFIFOW(sd->fd,0) = 0x2C1; WFIFOW(sd->fd,2) = msg_len + 12; WFIFOL(sd->fd,4) = 0; WFIFOL(sd->fd,8) = colorcode; safestrncpy((char*)WFIFOP(sd->fd,12), msg, msg_len); WFIFOSET( sd->fd, msg_len + 12 ); } return 0;} BUILDIN_DEF(dispbottom,"s??"),it works !prontera,162,180,5 script kjsdfhksdjf 100,{ dispbottom "test color"; dispbottom "test color", 0xff0000; dispbottom "test color", 0x0000ff; dispbottom "test color", 0xffffff; dispbottom "test color", 0xff00ff; end;}
  19. Like
    AnnieRuru got a reaction from Syrisone in R>Old Hunter Job Change Quest   
    my signature ... click on the right heart ...
    old rubbish -> eAthena-TXT-9909[Stable].rar
  20. Upvote
    AnnieRuru got a reaction from bWolfie in @packetfilter   
    No more Work in Progress, Please report if there are any bug
     
    Download: 1.0a [Complete]
    plugin
     
     
    What is `@packetfilter` ?
    `@packetfilter` is a custom mod originate from eamod
    https://github.com/zephyrus-cr/eamod/blob/master/Servers/rAthena/conf/groups.conf#L418-L422
    it can actually reduce lag on your live server during woe depends on how many players activate it
    it totally depends on the player's side, community effort that every player should together turn on the `@packetfilter` to reduce massive lag during woe
     
    this modification is actually very famous and there are members willingly to pay for it
    https://rathena.org/board/topic/121200-packetfilter-battleinfo/
    https://rathena.org/board/topic/123203-battleinfo-packetfilter/
    https://rathena.org/board/topic/111797-packetfilter-zepyhrus-ramod/
    https://rathena.org/board/topic/79995-buy-noactnodelay-partybuff-src-as-it-was-on-pro-ro-or-packetfilter/
     
     
     
    this `@packetfilter` is unlike the one you are having, or that is circulating on rathena forum
     
    this one has been written entirely from scratch and added some other flags that the original don't
    for example,
    `@packetfilter COHM EOHM`
    allow block normal chat and emotion from non-related players, pets, homunculus and monsters
    but this doesn't block normal chat from party/guild members
     
    a full list of flags are
      C = ignore normal Chat, including Dancer's scream, Bard's frost joke, and pet's talk (pet start to talk when intimacy > 900)   E = ignore emotion, including monster and pet emotion (but NOT pet performance)   I = ignore Item use effect   A = ignore normal Attack animation (based on receiving side), your own attack animation are always shown   B = Buffing skill animations (based on receiving side), your own casting animation are always shown   S = Status effect   T = offensive single Target skill/spell animations (based on receiving side), your own casting animation are always shown   G = Ground based skills (eg:storm gust), your own casting animation are always shown   M = Music dance/songs from Bard/Dancer   D = Direction. Recommend filter on Party/Guild type and not enemies. Highly Recommend for supportive type Class. after the Main type, also support additional flags
      S = Self   P = Party   G = Guild   B = Battleground   C = Clan   O = Other players, none of the above   H = Homunculus/pets/elementals/mercenary and player's @summon   M = Monsters  
     
    Why This plugin doesn't block Kaite or Energy Coat ?
     
    2 reasons
     
    No.1 - currently there is a bug with plugin,
    struct packet_spawn_unit *p = (struct packet_spawn_unit*)RBUFP(buf, 0); this line will throw error on Linux
    so no choice, maybe I'll make a bug report
    this bug also has been reported on Dastgir's `@noview`
     
    No.2 - just set p->virtue = 0; isn't really blocking the packet
    this goes against the very principle of this plugin, which is NOT send certain packet to the client
    OPT3 (including OPT3_KAITE | OPT3_ENERGYCOAT | OPT3_SOULLINK) is part of the idle_unitType, unit_walkingType and spawn_unitType function
    and blocking those 3 packet entirely is stupid
     
    in case you don't understand, look under clif_set_unit_walking and clif_set_unit_idle function inside src\map\clif.c file
    p.GUID = g_id; p.GEmblemVer = status->get_emblem_id(bl); p.honor = (sd) ? sd->status.manner : 0; // p.virtue = (sc) ? sc->opt3 : 0; <-- change this line p.virtue = 0; p.isPKModeON = (sd && sd->status.karma) ? 1 : 0; p.sex = vd->sex;  
     
    Note: about [D]irection type packet
     
    try add a ShowDebug inside clif->send
    src/map/clif.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/map/clif.c b/src/map/clif.c index ab3c4422a..9e245f335 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -450,6 +450,7 @@ static bool clif_send(const void *buf, int len, struct block_list *bl, enum send return true; } +ShowDebug("source:%s buf:0x%x send_target:%d\n", (sd != NULL)? sd->status.name : "NULL", RBUFW(buf, 0), type); switch(type) { case ALL_CLIENT: //All player clients. iter = mapit_getallusers(); you will find 0x9c is being send repeatedly on every attack and every skill cast , getting attack etc
    this direction update packet isn't just send by Shift-click, but also including all the actions above
    this packet is very spam-able and I think can be safely block on party/guild/clan/bg flags
    for supportive class, I also think can block all of them since supportive class doesn't need information from enemies
     
     
     
  21. Like
    AnnieRuru got a reaction from o5jees in Lotti Girl   
    There are MANY variations of Lotti Girl script, even me too, have made several of them
    so today I try to gather them all, and make a release with ALL features from all the topics gathered
    Download:
    script
     
    Feature no.1 -> show the percentage chance

    chinese government has a rule that all lottery system must show the percentage chance to the public
    hence the script should show the lottery chance in percent
    Feature no.2 -> Roll Repeatedly
    imagine if you have 500 tickets, and you want to spend them all,
    all other scripts available on rathena board will force the player to spend them 1 by 1
    this script can roll up to 100 times on the fly, effectively save player's time
    Feature no.3 -> Lotti shop
    even if you spend a lot of tickets and still getting all the trash items, you still collecting points, and able buy them in Lotti Shop
    Feature no.4 -> Lotti ladder
    compete with other players and see who has the highest Lotti Rank !
     
    oh and ... HULD compatible == rAthena members can't use this
     
  22. Like
    AnnieRuru got a reaction from IndieRO in Blacksmith Weapon Refine   
    @bOinkz
    @Helena
    @Xanthin
    src/map/skill.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/map/skill.c b/src/map/skill.c index 6eacde8..c246e1f 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -16200,6 +16200,11 @@ void skill_weaponrefine (struct map_session_data *sd, int idx) break; } } + { + char message[CHAT_SIZE_MAX]; + safesnprintf( message, CHAT_SIZE_MAX, "+%d %s Item Obtained.", item->refine, ditem->jname ); + clif->message( sd->fd, message ); + } } else { item->refine = 0; if(item->equip)
  23. Like
    AnnieRuru got a reaction from IndieRO in How to setup OFFLINE server for personal development use   
    Make your (offline) RO server in more than 5 hours - pun intended
    Hercules Link
    This Guide is intended for
    - Windows users
    windows sux, but 90% of the community still using windows, so I am targeting the majority of the members here
    - You want to contribute something back to the community
    if you just want to have fun by yourself, of course it's fine to use that 5 minute instant noodle guide
    BUT if you want to contribute to the community, you have to use LATEST server and software available
    ... which makes this guide outdated very fast
     
    Prelude: Determine your Windows Operating System type
    a. Windows Key -> Right Click on My Computer -> Select Properties
    https://github.com/AnnieRuru/customs/blob/master/server setup/prelude-1.png

    b. Determine your Operating System type
    I'm using Windows 7 Ultimate 64-bit system
    https://github.com/AnnieRuru/customs/blob/master/server setup/prelude-2.png
     
    Step 1: Download and Install TortoiseGit

    1a. Download TortoiseGit
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 1a.png
     
    1b. Installation
    next... next... next.. next... next.. next.. Install !!!
     
    1c. Create 2 new folders
    1 for Hercules, 1 for rAthena
    Right-click -> TortoiseGit -> Clone
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 1c.png
     
    1d. Download git 2.20.1
    you'll get this warning message
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 1d.png
    Open Git for Windows Website, Download it
    next... next... next.. next... next.. next.. Install !!!
     
    1e. Reposition git.exe
    This time go to TortoiseGit -> Settings
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 1e.png
    General tab -> Git.exe path
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 1e2.png
    C:\Program Files\Git\bin  
    1f. Download Hercules and rAthena
    Right Click on the folder, TortoiseGit -> Clone
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 1f.png
    https://github.com/HerculesWS/Hercules https://github.com/rathena/rathena  
    Problems might encounter during Step 1c,
    when it ask for a git.exe, you have to go to that git for windows site, and download that thing
    Problems might encounter during Step 1e,
    sometimes even though you have already install git2.20.1.exe, but it still couldn't find the git.exe file
    to solve it, Right-click -> TortoiseGit -> Settings, you get a warning, Click Ignore, then follow Step 1e
     
    Step 2: Download and Install Microsoft Visual Studio 2017
    Step 2a. Download Microsoft Visual Studio
    https://visualstudio.microsoft.com/downloads/
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 2a.png
     
    Step 2b. Downloading ...
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 2b.png
     
    Step 2c. Click Install Visual Studio Community 2017
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 2c.png
     
    Step 2d. Load Hercules Project
    Double click Hercules-15.sln
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 2d.png
    it says missing Windows 10 SDK 10.0.15063 ...
     
    Step 2e. Install individual component
    you can either let Visual Studio do its magic, or ...
    manually go to visual studio downloader ... click modify
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 2e.png
    then select the component to install manually
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 2e2.png
     
    Step 2f. Load rAthena Project
    Do the same thing by double clicking rAthena.sln,
    but this time rAthena project needs Windows 8.1 SDK and Windows Universal CRT SDK
     
    Both emulator has been compiled
     
    Problems might encounter during Step 2c
    if using Windows 7/8, after the download is complete, it install a windows update that might crash all the programs in your operating system
    this Parasite MUST be remove !!
    To do this, go to Control Panel -> Program and Features
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 2g.png
    Click View Install Update tab
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 2g1.png
    then find KB2882822 and remove this parasite from your computer immediately before restarting your computer
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 2g2.png
    IF you are the unlucky soul and you can't start any .exe file .... there's still a fix
    Restart the computer in Safe Mode ...
    many answer around the Internet tells you to press F8 when Windows Logo shows up, but this doesn't work for me, I have USB keyboard
    so I found another method ... run System Configuration
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 2h.png
    Select the [Boot] tab, then select Safe Mode.
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 2h2.png
    this will make your windows always restart in safe mode until you turn it off
    then follow the above process, uninstall that windows update, deselect safe mode, restart computer again, now it should be back to normal
     
    Problems might encounter during Step 2f
    During compiling, if you see this in your Visual Studio
    fatal error C1083: Cannot open include file: 'corecrt.h': No such file or directory this means you are missing a component Windows Universal CRT SDK
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 2f.png
     
    Step 3: Download and Install MySQL 8.0
    Step 3a: Download MySQL 8.0
    https://dev.mysql.com/downloads/mysql/
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 3a.png
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 3a2.png
    actually, you can just click this -> https://dev.mysql.com/downloads/file/?id=480824
    I have 64-bit operating system, but this 32-bit installer works fine for me
     
    Step 3b. Install MySQL 8.0
    Select Custom
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 3b1.png
    We only need 2 products, MySQL 8.0 and MySQL Workbench
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 3b2.png
    Ready to Install
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 3b3.png
    next... next.. Execute !! next.. next.. next..
    Account and Roles, type "1234" as password
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 3b4.png
    click [Check]... next... next.. next... DONE !!
     
    Step 3c. Run MySQL Workbench
    Welcome to MySQL Workbench
    Double click the icon -> Click Connect
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 3c.png
     
    Step 3d. Create a Schema
    Right click at the left side of the window
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 3d.png
    and create a Database call Hercules. Remember change charset/collation to utf8
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 3d2.png
     
    Step 3e. Install SQL Script for Hercules
    Set Hercules as default Schema
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 3e.png
    load hercules/sql-files/main.sql file
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 3e2.png
    copy into Query field, then Press Execute button
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 3e3.png
    repeat the same process again for log.sql file
     
    Step 3f. Install SQL Script for rAthena
    Set rAthena as default Schema
    install rAthena/sql-files/main.sql and the log.sql
     
    Problems might encounter during Step 3e.
    If you got a warning message that `ipbanlist` table creation failed, this has been reported -> hercules & rAthena
    that's why now we can only use utf8 charset
     
    Step 4: Connect MySQL to Hercules and rAthena
    Step 4a. Connect Hercules to MySQL
    Copy paste the import-tmpl folder, and rename it into import
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 4a.png
    then open each individual files and modify each one of them
    conf/import/char_server.conf
    char_configuration: { // Server name, use alternative character such as ASCII 160 for spaces. // NOTE: Do not use spaces or any of these characters which are not allowed in // Windows filenames \/:*?"<>| // ... or else guild emblems won't work client-side! server_name: "Hercules" // Information related to inter-server behavior inter: { // Server Communication username and password. userid: "qwer" passwd: "asdf" // Login Server IP // The character server connects to the login server using this IP address. // NOTE: This is useful when you are running behind a firewall or are on // a machine with multiple interfaces. login_ip: "127.0.0.1" // Character Server IP // The IP address which clients will use to connect. // Set this to what your server's public IP address is. char_ip: "127.0.0.1" } pincode: { enabled: false } } conf/import/map-server.conf
    map_configuration: { // Information related to inter-server behavior inter: { // Interserver communication passwords, set in the login server database userid: "qwer" passwd: "asdf" // Map Server IP // The IP address which clients will use to connect. // Set this to what your server's public IP address is. map_ip: "127.0.0.1" // Character Server IP // The map server connects to the character server using this IP address. // NOTE: This is useful when you are running behind a firewall or are on // a machine with multiple interfaces. char_ip: "127.0.0.1" } } conf/global/sql_connections.conf
    sql_connection: { // [INTER] You can specify the codepage to use in your mySQL tables here. // (Note that this feature requires MySQL 4.1+) //default_codepage: "" // [LOGIN] Is `userid` in account_db case sensitive? //case_sensitive: false // For IPs, ideally under linux, you want to use localhost instead of 127.0.0.1. // Under windows, you want to use 127.0.0.1. If you see a message like // "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)" // and you have localhost, switch it to 127.0.0.1 db_hostname: "127.0.0.1" db_port: 3306 db_username: "root" db_password: "1234" db_database: "hercules" //codepage:"" }  
    Step 4b. Change s1/p1 inter server connection password
    since hercules server hates you for using s1/p1, I change it into qwer/asdf then
    Here's how to do it ... Open MySQL Workbench, double click your current running MySQL connection
    Type "SELECT * FROM `login`;" , edit the field s1/p1, then click [Apply]
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 4b2.png
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 4b3.png
     
    Step 4c. connect rAthena to MySQL
    Copy paste the import-tmpl folder, and rename it into import
    then open each individual files and modify each one of them
    conf/import/char-conf.txt
    // Server name, use alternative character such as ASCII 160 for spaces. // NOTE: Do not use spaces or any of these characters which are not allowed in // Windows filenames \/:*?"<>| // ... or else guild emblems won't work client-side! server_name: rAthena // Login Server IP // The character server connects to the login server using this IP address. // NOTE: This is useful when you are running behind a firewall or are on // a machine with multiple interfaces. login_ip: 127.0.0.1 // The character server listens on the interface with this IP address. // NOTE: This allows you to run multiple servers on multiple interfaces // while using the same ports for each server. bind_ip: 127.0.0.1 // Character Server IP // The IP address which clients will use to connect. // Set this to what your server's public IP address is. char_ip: 127.0.0.1 // NOTE: Requires client 2011-03-09aragexeRE or newer. // A window is opened before you can select your character and you will have to enter a pincode by using only your mouse. // Default: yes pincode_enabled: no conf/import/inter-conf.txt
    // MySQL Login server login_server_ip: 127.0.0.1 login_server_port: 3306 login_server_id: root login_server_pw: 1234 login_server_db: rathena login_codepage: login_case_sensitive: no ipban_db_ip: 127.0.0.1 ipban_db_port: 3306 ipban_db_id: root ipban_db_pw: 1234 ipban_db_db: rathena ipban_codepage: // MySQL Character server char_server_ip: 127.0.0.1 char_server_port: 3306 char_server_id: root char_server_pw: 1234 char_server_db: rathena // MySQL Map Server map_server_ip: 127.0.0.1 map_server_port: 3306 map_server_id: root map_server_pw: 1234 map_server_db: rathena // MySQL Log Database log_db_ip: 127.0.0.1 log_db_port: 3306 log_db_id: root log_db_pw: 1234 log_db_db: rathena log_codepage: log_login_db: loginlog conf/import/login_conf.txt
    // The login server listens on the interface with this IP address. // NOTE: This allows you to run multiple servers on multiple interfaces // while using the same ports for each server. bind_ip: 127.0.0.1 conf/import/map_conf.txt
    // Character Server IP // The map server connects to the character server using this IP address. // NOTE: This is useful when you are running behind a firewall or are on // a machine with multiple interfaces. char_ip: 127.0.0.1 // The map server listens on the interface with this IP address. // NOTE: This allows you to run multiple servers on multiple interfaces // while using the same ports for each server. bind_ip: 127.0.0.1 // Map Server IP // The IP address which clients will use to connect. // Set this to what your server's public IP address is. map_ip: 127.0.0.1  
    Note: you can do the same for rAthena, change s1/p1 into qwer/asdf. rAthena doesn't *BEEP* when you use s1/p1 though
    simply add this line in both conf/import/char-conf.txt and conf/import/map_conf.txt then change it in MySQL Workbench
    // Server Communication username and password. userid: s1 passwd: p1  
    Read Also: What is Import folder, just scroll down to the bottom and read it
     
     
    Before going into next step, I want to stress enough and make sure you can get your server to connect to MySQL
    so try running run-server.bat to connect your hercules --OR-- rathena server to MySQL
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 4.5.png
    if you can't do it right, Open a New Topic in General Server Support
     
     
    problem might encounter during this step
    [SQL]: Client does not support authentication protocol requested by server; consider upgrading MySQL client This happens if you have previous version of MySQL installed on your computer, and upgrade into MySQL 8.0
    to fix this issue, run MySQL command line Client from start menu
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 4.5a.png
    then run these 2 commands seperately
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234'; FLUSH PRIVILEGES; https://github.com/AnnieRuru/customs/blob/master/server setup/Step 4.5b.png
     
    5. Download latest KRO Client and client translation files
    Step 5a. Download latest KRO from
    http://herc.ws/board/topic/15592-collection-official-full-clients-latest-kro/
    https://rathena.org/board/topic/106413-kro-full-client-2018-08-13-includes-bgm-rsu/ <-- I pick this
     
    // ========== THIS PART IS CONTROVERSIAL ===== BUT IT WORKS FOR ME ========
    Step 5b. Create another 2 folders
    let's name it Asheraf and zackdreaver ... the author of making client translation
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 5b.png
    then download their translation files by git clone them
    https://github.com/Asheraf/Translation https://github.com/zackdreaver/ROenglishRE  
    Step 5c. Download GRF Editor
    http://www.mediafire.com/file/aflylbhblrzpz0h/GRF+Editor+v1.8.2.7.zip <-- author forgot to update in that topic, mediafire link is latest one
     
    Step 5d. Compile GRF Editor
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 5d.png
    double click GRFEditor.sln
     
    Step 5e. Open GRF Editor file
    Navigate to the directory  \GRF Editor Sources v1.8.2.7\GRF Editor\GRFEditor\bin\Release and open GRF Editor.exe
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 5e.png
    I also wondering why the author makes the execution files hide so deep inside
     
    Step 5f. Drag the data folder from Asheraf client translation to new.grf
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 5f.png
    then save it as Asheraf.grf
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 5f2.png
     
    Step 5g. Repeat the process for zackdreaver translation
    Close Grf. New -> Grf, Drag the data folder from zackdreaver/Ragnarok/data to new.grf, then save it as zackdreaver.grf
     
    Now you have learn how to pack your own grf. You should have 2 new grf in client folder
     
    Step 5h. open data.ini in your ragnarok client and edit DATA.INI
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 5h.png
    [Data] 1=Asheraf.grf 2=zackdreaver.grf 3=rdata.grf 4=data.grf  
    Step 5i. Replace Asheraf/system folder into client/system folder
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 5i.png
     
    // ========== CONTROVERSIAL PART ENDS HERE ===== I'm sure many client experts having your doubts why I do like this ========
     
    A lot of problems can appear in this step, these problems also recent and changes with every client
     
    6. Create your own patch client
    Step 6a. Download latest nemo
    create another folder name nemo
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 6a.png
    then git clone from this site
    https://gitlab.com/4144/Nemo  
    Step 6b. Find a suitable client patches
    http://nemo.herc.ws/downloads/
    Since I download KRO 20180813, I chose 2018-06-20eRagexeRe
     
    Step 6c. Open nemo.exe
    Click Browse to select your downloaded client patch, then select Load Client
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 6c.png
     
    Step 6d. Use Recommend Settings
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 6d.png
    1. forget the "Always call SelectKoreaClientInfo" error
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 6d1.png
    2. DATA.INI
    3. system/itemInfo_Sak.lub <--- note: the Capital letter of Info_Sak ... nemo doesn't auto-detect capital letters
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 6d3.png
    4. Always Load Korea ExternalSetting lua files
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 6d4.png
    5. Read Data Folder first
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 6d5.png
    6. Apply Selected
    Step 6e. Copy 2018-06-20eRagexeRE_patched.exe to the KRO client folder
     
     
    By this step, you should be able to load your own hexed client without throwing any error
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 6.5.png
    if you having problem in this Step 5 & 6, Open a New Topic in Client Support
     
    FINAL STEP - change PACKEVER
    #define PACKETVER 20180620  
    Hercules -> src\common\mmo.h
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 7a.png
     
    rAthena ->
    src\config\packets.hpp <--- original directory, don't edit here
    src\custom\defines_pre.hpp
    https://github.com/AnnieRuru/customs/blob/master/server setup/Step 7b.png
     
    Then Compile for a Final time
     
     
    After thought, there are still some minor annoyance and adjustment
    client/data/msgstringtable.txt (unpack it or just put at client/data/ folder)
    line 3262 Smooth# line 3458 There was an error when loading the data account settings. (Please restart to retry.)# change them into just a #
     
    Frequently Asked Question:
    Change Renewal into Pre-Renewal
    Hercules -> src/config/renewal.h
    rAthena -> src/config/renewal.hpp
     
    This guide will be feature and pin only for a few months ... while it last .... I guess
  24. Upvote
    AnnieRuru got a reaction from ljsb in hosting Hercules on Google Cloud with CentOS 8   
    Over the last few days I have been playing with Google Cloud services
    because Google cloud currently offers $300 free credit upon signing up
    yes, FREE $300 credit
    and thus my journey trying to host hercules server on a VPS has begun
     
    all you need is a valid Debit/Credit card number ...
    of course you have to be an adult to try the hosting service ... right ?
     

     
     
    oh and, don't worry, you can always cancel it anytime

     
    after playing with it, I found the Windows option is too expensive, and thus trying to learn the Linux option
     
    This guide is actually demonstrate by using a trash gmail account that can throw away later
    I don't mind all the credentials are shown in the screenshot, when I click the Open topic button I have deleted this project on Google Cloud
     
     
    Step 1. Download Putty and WinCP
    https://www.putty.org/.
    https://winscp.net/eng/download.php
     
    Step 2. Run Google Cloud
    2.1 login to your Google cloud project
    https://github.com/AnnieRuru/customs/blob/master/server hosting/2.png
     
    2.2 first you need to link your credit card to this google cloud
    https://github.com/AnnieRuru/customs/blob/master/server hosting/3.png.
    https://github.com/AnnieRuru/customs/blob/master/server hosting/4.png
    select the billing option to the debit/credit number you input earlier
    https://github.com/AnnieRuru/customs/blob/master/server hosting/5.png
    this billing information is very important, you need to check this once in a while to stop unwanted services <-- please scroll to the right
     
    2.3 pin these 3
    - billing
    - compute engine
    - VPC network
    https://github.com/AnnieRuru/customs/blob/master/server hosting/6.png
     
    2.4 now time to create a VPS, select Compute Engine
    https://github.com/AnnieRuru/customs/blob/master/server hosting/7.png
    2.4.1
    enter all the necessary information
    1. the Virtual machine name
    2. your nearest location
    3. the spec of the machine
    https://github.com/AnnieRuru/customs/blob/master/server hosting/8.png
     
    PS: I tested the cheapest option, N1 series, f1 micro 614MB memory and E2 micro, 1GB memory
    when compiling hercules later, putty just stop ... I think it run out of memory
    ... hercules should have mention a recommendation needs at least 2GB memory to run
     
    2.4.2
    4. Select Boot Disk as CentOS 8
    https://github.com/AnnieRuru/customs/blob/master/server hosting/9.png
    5. select allow HTTP and HTTPS
    https://github.com/AnnieRuru/customs/blob/master/server hosting/10.png
     
    2.4.3
    6. Click Security tab
    https://github.com/AnnieRuru/customs/blob/master/server hosting/11.png
    needs to 'Enter public SSH key'
     
    run Putty Key Generator and click Generate
    https://github.com/AnnieRuru/customs/blob/master/server hosting/12.png
     
    1. change the 'key comment' as it will become user name
    2. save private key to desktop
    3. copy the field
    https://github.com/AnnieRuru/customs/blob/master/server hosting/13.png
     
    paste into Google cloud
    https://github.com/AnnieRuru/customs/blob/master/server hosting/14.png
     
    2.4.4
    select Networking tab
    https://github.com/AnnieRuru/customs/blob/master/server hosting/15.png
    create a static IP address
    https://github.com/AnnieRuru/customs/blob/master/server hosting/16.png
    choose standard tier
     
    after everything done click [Confirm]
    https://github.com/AnnieRuru/customs/blob/master/server hosting/17.png
    and you get your virtual machine running
    https://github.com/AnnieRuru/customs/blob/master/server hosting/18.png
     
    2.5
    once your server up and running
    run Putty to connect to this server
    https://github.com/AnnieRuru/customs/blob/master/server hosting/19.png
    1. scroll down, expand 'SSH' to select 'Auth',
    2. then load the file you saved earlier by PuttyGen
    https://github.com/AnnieRuru/customs/blob/master/server hosting/20.png
    3. enter the public IP address,
    4. then click open
     
    https://github.com/AnnieRuru/customs/blob/master/server hosting/21.png
    it will prompt you with security alert, just click yes
     
    2.6
    login with your user name
    https://github.com/AnnieRuru/customs/blob/master/server hosting/22.png
     
    The very first command you should run is change the password
    sudo passwd root ok Windows Users, don't freak out like me
    there are no ******** when you input the password, this is Linux not Windows
    just input normally ... and press Enter key, it works that way
    https://github.com/AnnieRuru/customs/blob/master/server hosting/23.png
    then do the same with your username
    sudo passwd annie  
    3. update the OS and install all necessary product
     
    3.1 run all these commands
    sudo yum update sudo yum install gcc make mysql mysql-devel mysql-server pcre-devel git zlib-devel Transaction Summary ================================================================================ Install 89 Packages Total download size: 108 M Installed size: 395 M Is this ok [y/N]: Press 'Y' key
     
    3.2
    in the meantime, while this might take awhile, try login WinCP
    https://github.com/AnnieRuru/customs/blob/master/server hosting/24.png
    click new session, then click advance
    https://github.com/AnnieRuru/customs/blob/master/server hosting/25.png
    select 'Authentication' and load the Putty Gen file again
    https://github.com/AnnieRuru/customs/blob/master/server hosting/26.png
    just another warning
    https://github.com/AnnieRuru/customs/blob/master/server hosting/27.png
     
     
    3.3 Download Hercules
    git clone https://github.com/HerculesWS/Hercules.git ~/Hercules  
    4. SQL
     
    4.1 Start SQL service
    sudo systemctl start mysqld.service  
    4.2 login as root
    mysql -u root -p Enter password, just press enter
    default centOS 8 preinstalled MySQL, root has no password
     
    Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 8.0.21 Source distribution Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 4.3 create database
    CREATE DATABASE hercules; 4.4 select hercules database as default
    USE `hercules`; 4.5 create another user, not recommend to connect as root
    CREATE USER 'annie'@'localhost' IDENTIFIED BY '1234'; 4.6 grant this user privilege
    GRANT SELECT,INSERT,UPDATE,DELETE ON * TO 'annie'@'localhost'; 4.7 then quit
    quit it should show like this
    mysql> quit Bye [annie@centos ~]$ 4.8 goto sql-files directory
    cd /home/annie/Hercules/sql-files/ and run all these
    mysql -u root -p hercules < main.sql mysql -u root -p hercules < logs.sql mysql -u root -p hercules < item_db_re.sql mysql -u root -p hercules < mob_db_re.sql mysql -u root -p hercules < mob_skill_db_re.sql it should show like this
    [annie@centos ~]$ cd /home/annie/Hercules/sql-files/ [annie@centos sql-files]$ mysql -u root -p hercules < main.sql Enter password: [annie@centos sql-files]$ mysql -u root -p hercules < logs.sql Enter password: [annie@centos sql-files]$ mysql -u root -p hercules < item_db_re.sql Enter password: [annie@centos sql-files]$ mysql -u root -p hercules < mob_db_re.sql Enter password: [annie@centos sql-files]$ mysql -u root -p hercules < mob_skill_db_re.sql Enter password: [annie@centos sql-files]$ 4.9 go back login mysql and change inter-server connection password from s1/p1 into qwer/asdf
    mysql -u root -p and
    UPDATE `hercules`.`login` SET `userid` = 'qwer', `user_pass` = 'asdf' WHERE `account_id` = 1;  
    5. Compile Hercules
     
    go back to annie/hercules folder
    cd /home/annie/Hercules/ 5.1 type ./configure
    ./configure  
    OK STOP, many things can go wrong here, I stuck here for a few days and searching on both rathena and hercules forum for answers
    the correct output from putty should be this
    checking mysql.h presence... yes checking for mysql.h... yes checking whether my_bool is supported (MySQL)... no (converting my_bool to bool) checking MySQL library (required)... yes (8.0.21) checking PCRE library... checking pcre.h usability... yes checking pcre.h presence... yes checking for pcre.h... yes checking for library containing pcre_study... -lpcre checking for doxygen... no checking for perl... yes configure: creating ./config.status config.status: creating Makefile config.status: creating src/common/Makefile config.status: creating 3rdparty/mt19937ar/Makefile config.status: creating 3rdparty/libconfig/Makefile config.status: creating 3rdparty/libbacktrace/Makefile config.status: creating 3rdparty/libbacktrace/backtrace-supported.h config.status: creating src/char/Makefile config.status: creating src/login/Makefile config.status: creating src/map/Makefile config.status: creating src/plugins/Makefile config.status: creating src/test/Makefile config.status: creating tools/HPMHookGen/Makefile config.status: creating tools/doxygen/Makefile [annie@centos Hercules]$ if it doesn't show config.status: at the end, open a new topic in Linux support
    if it's the same as mine, then can proceed with
     
    5.2 compile hercules
    make sql finally compile should show like this
    CC party.c CC path.c CC pc.c CC pc_groups.c CC pet.c CC quest.c CC refine.c CC rodex.c CC script.c CC searchstore.c CC skill.c CC status.c CC storage.c CC stylist.c CC trade.c CC unit.c CC vending.c LD map-server make[1]: Leaving directory '/home/annie/Hercules/src/map' building conf/import folder... [annie@centos Hercules]$  
    6. configure Hercules
     
    6.1 start hercules by
    ./athena-start start https://github.com/AnnieRuru/customs/blob/master/server hosting/28.png
    of course the reason why connect to SQL failed is because haven't configure Hercules so ....
    stop it from running for a moment
    ./athena-start stop  
    6.2 login to WinCP
    https://github.com/AnnieRuru/customs/blob/master/server hosting/29.png
    ... I will assume you know how to change your public IP address on hercules
    the file you should change are
    map-server.conf
    - userid: "qwer"
    - passwd: "asdf"
    - map_ip: "35.213.138.42"
    - char_ip: "35.213.138.42" char-server.conf
    - userid: "qwer"
    - passwd: "asdf"
    - login_ip: "35.213.138.42"
    - char_ip: "35.213.138.42" conf\global\sql_connections.conf
    -db_hostname: "localhost"
    - db_port: 3306
    - db_username: "annie"
    - db_password: "1234"
    - db_database: "hercules" conf\network.conf
    .....<let me test this thing again> ....  
    <--- I will assume everyone reading this guide already know how to host an offline server, if not click here -->
     
    now run ./athena-start start again, and this time map-server couldn't connect to char-server
     
    7. Configure firewall
     
    7.1 run these 3 commands
    sudo firewall-cmd --permanent --add-port 6900/tcp sudo firewall-cmd --permanent --add-port 6121/tcp sudo firewall-cmd --permanent --add-port 5121/tcp 7.2 reload the firewall settings
    sudo firewall-cmd --reload 7.3 go back to Google Cloud,
    https://github.com/AnnieRuru/customs/blob/master/server hosting/30.png
    to create firewall
    https://github.com/AnnieRuru/customs/blob/master/server hosting/31.png
    configure the firewall
    https://github.com/AnnieRuru/customs/blob/master/server hosting/32.png
    2. & 3. configure firewall only to this project
    https://github.com/AnnieRuru/customs/blob/master/server hosting/33.png
     
    4. at 'tcp:' tab, only allow these 3 ports
    https://github.com/AnnieRuru/customs/blob/master/server hosting/34.png
     
    7.4
    run ./athena-start start again.
    then goto https://portchecker.co/ and check your port is open
    https://github.com/AnnieRuru/customs/blob/master/server hosting/35.png
    And Finally go to your client edit data/sclientinfo.xml to the WAN IP and

    VIOLA !! DONE !!
    I can connect my client to google cloud
     
    PS: the port checker website only shows Port 6900 is OPEN. only if fulfill these 3 conditions
    1. enable firewall setting on CentOS
    2. enable firewall setting on Google Cloud
    3. run the emulator by ./athena-start
     
     
    Ok now you can start worry about security issue like adding additional user in CentOS
    https://www.digitalocean.com/community/tutorials/how-to-add-and-delete-users-on-a-centos-7-server
    google cloud doesn't seem to allow login that way -> https://stackoverflow.com/questions/52503453/how-to-login-gcp-console-without-ssh
    and mysql root account password change ...
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234'; etc...etc...
    need more research
     
     
    Connect to MySQL in CentOS 8 using Window's MySQL Workbench
     
    1. add another connection
    https://github.com/AnnieRuru/customs/blob/master/server hosting/mysql1.png
     
    2. under 'Connection Method', select 'Standard TCP/IP over SSH'
    https://github.com/AnnieRuru/customs/blob/master/server hosting/mysql2.png
     
    3. configure these fields
    3.1 SSH hostname is the server IP address
    3.2 SSH username is the name you created with PuttyGen
    3.3 SSH keyfile needs a conversion with PuttyGen
    3.4 and Click [Test Connection]
    https://github.com/AnnieRuru/customs/blob/master/server hosting/mysql3.png
     
    4. the SSH keyfile needs to be convert from PuttyGen
    4.1 load existing private key, in this case was 'annie.ppk'
    4.2 click conversion and save as 'annie' without file extension
    https://github.com/AnnieRuru/customs/blob/master/server hosting/mysql4.png
     
    5. if successful it will show like this
    https://github.com/AnnieRuru/customs/blob/master/server hosting/mysql5.png
     
    then you can login into MySQL in CentOS
     
    did I forgot to mention needs to open the port 3306 in CentOS and Google Cloud ? refer back to step 7
     
    Reference: https://stackoverflow.com/questions/21527743/mysql-workbench-version-6-0-8-ssh-authentication-issue
     
     
    After thought :
    Overall I'm very satisfy with Google Cloud service,
    1. free $300 credit to spend
    2. can always register trash gmail account to make the credit infinite
      - of course the IP will always change if you do so
    3. very low latency from Malaysia connect to Singapore - just 30~40ms ping
     
    I haven't try OVH which everybody is recommending, but they doesn't offer immediate free credit for me to test so meh .....
     
    and I notice Hercules's wiki CentOS guide is broken, maybe I'll fix it
    https://github.com/HerculesWS/Hercules/wiki/Installation-(CentOS)
     
    - offtopic -
    over last few days playing with google cloud, when I visit Youtube, all my advertisement become Monday.com etc etc group project stuffs
    google really knows how to collect my data
  25. Like
    AnnieRuru got a reaction from IndieRO in @packetfilter   
    No more Work in Progress, Please report if there are any bug
     
    Download: 1.0a [Complete]
    plugin
     
     
    What is `@packetfilter` ?
    `@packetfilter` is a custom mod originate from eamod
    https://github.com/zephyrus-cr/eamod/blob/master/Servers/rAthena/conf/groups.conf#L418-L422
    it can actually reduce lag on your live server during woe depends on how many players activate it
    it totally depends on the player's side, community effort that every player should together turn on the `@packetfilter` to reduce massive lag during woe
     
    this modification is actually very famous and there are members willingly to pay for it
    https://rathena.org/board/topic/121200-packetfilter-battleinfo/
    https://rathena.org/board/topic/123203-battleinfo-packetfilter/
    https://rathena.org/board/topic/111797-packetfilter-zepyhrus-ramod/
    https://rathena.org/board/topic/79995-buy-noactnodelay-partybuff-src-as-it-was-on-pro-ro-or-packetfilter/
     
     
     
    this `@packetfilter` is unlike the one you are having, or that is circulating on rathena forum
     
    this one has been written entirely from scratch and added some other flags that the original don't
    for example,
    `@packetfilter COHM EOHM`
    allow block normal chat and emotion from non-related players, pets, homunculus and monsters
    but this doesn't block normal chat from party/guild members
     
    a full list of flags are
      C = ignore normal Chat, including Dancer's scream, Bard's frost joke, and pet's talk (pet start to talk when intimacy > 900)   E = ignore emotion, including monster and pet emotion (but NOT pet performance)   I = ignore Item use effect   A = ignore normal Attack animation (based on receiving side), your own attack animation are always shown   B = Buffing skill animations (based on receiving side), your own casting animation are always shown   S = Status effect   T = offensive single Target skill/spell animations (based on receiving side), your own casting animation are always shown   G = Ground based skills (eg:storm gust), your own casting animation are always shown   M = Music dance/songs from Bard/Dancer   D = Direction. Recommend filter on Party/Guild type and not enemies. Highly Recommend for supportive type Class. after the Main type, also support additional flags
      S = Self   P = Party   G = Guild   B = Battleground   C = Clan   O = Other players, none of the above   H = Homunculus/pets/elementals/mercenary and player's @summon   M = Monsters  
     
    Why This plugin doesn't block Kaite or Energy Coat ?
     
    2 reasons
     
    No.1 - currently there is a bug with plugin,
    struct packet_spawn_unit *p = (struct packet_spawn_unit*)RBUFP(buf, 0); this line will throw error on Linux
    so no choice, maybe I'll make a bug report
    this bug also has been reported on Dastgir's `@noview`
     
    No.2 - just set p->virtue = 0; isn't really blocking the packet
    this goes against the very principle of this plugin, which is NOT send certain packet to the client
    OPT3 (including OPT3_KAITE | OPT3_ENERGYCOAT | OPT3_SOULLINK) is part of the idle_unitType, unit_walkingType and spawn_unitType function
    and blocking those 3 packet entirely is stupid
     
    in case you don't understand, look under clif_set_unit_walking and clif_set_unit_idle function inside src\map\clif.c file
    p.GUID = g_id; p.GEmblemVer = status->get_emblem_id(bl); p.honor = (sd) ? sd->status.manner : 0; // p.virtue = (sc) ? sc->opt3 : 0; <-- change this line p.virtue = 0; p.isPKModeON = (sd && sd->status.karma) ? 1 : 0; p.sex = vd->sex;  
     
    Note: about [D]irection type packet
     
    try add a ShowDebug inside clif->send
    src/map/clif.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/map/clif.c b/src/map/clif.c index ab3c4422a..9e245f335 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -450,6 +450,7 @@ static bool clif_send(const void *buf, int len, struct block_list *bl, enum send return true; } +ShowDebug("source:%s buf:0x%x send_target:%d\n", (sd != NULL)? sd->status.name : "NULL", RBUFW(buf, 0), type); switch(type) { case ALL_CLIENT: //All player clients. iter = mapit_getallusers(); you will find 0x9c is being send repeatedly on every attack and every skill cast , getting attack etc
    this direction update packet isn't just send by Shift-click, but also including all the actions above
    this packet is very spam-able and I think can be safely block on party/guild/clan/bg flags
    for supportive class, I also think can block all of them since supportive class doesn't need information from enemies
     
     
     
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.