Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 05/27/20 in all areas

  1. Gravity finally released the 4th class job sprites! Their maximum level is 250 and they will add new "status points" Some animations can be found in their youtube video. original post : https://divine-pride.net/
    1 point
  2. Version 1.0.3

    648 downloads

    What Included : a small map for the system the script what you should put in the instance db (you are free to change the id!) Description: if you play Tree Of Savior , you might know The Other Dimension. The main idea is the player can join The Other Dimension it's a solo instance he can join as much as he want , the Goal is to reach the Highest Stage impossible in 20 min or until he die! in Tree Of Savior The Other Dimension is one stage monsters and the 2nd stage boss endless (i didn't finish it before but the idea is to not finish it!) The rewards are sent to the mail at the end of the week see the config to edit it (search for OnInit) in Tree Of Savior the rewards are coins that you get each week you can do that and activate the shop option there is 1 array for the items id and 2 array for the counts the first count array is for any Participant the other count array is if the player was the first in his class and the Participants from his class is more than .MiniParticipants you can block classes , or even make the monsters per class (Check Add for more info) there is a rank option to check the players's max stage per classes there is no drop nor exp in the system! i Added 40 stage for testing and as example for you , just remove it all and build your own! the stages i added has no balance! add it to what best for your server. i suggest making +100 stage , make sure that no player can reach the final stage but make it really hard not impossible!! if you have problem with the script , you can use the forum post to report it to me, and me or someone else will help you fix it.
    Free
    1 point
  3. Comment this line and recompile your server
    1 point
  4. From a4fffed650a9719e1bbe1fbee4cf23fa6ecfb76a Mon Sep 17 00:00:00 2001 From: Jittapan Pluemsumran <[email protected]> Date: Thu, 2 Apr 2020 13:26:35 +0700 Subject: [PATCH] :D --- db/soul_link.yml | 74 ++++++++++++++++++++++++++++++++++++ src/map/script.cpp | 1 + src/map/script_constants.hpp | 17 +++++++++ src/map/status.cpp | 50 ++++++++++++++++++++++++ 4 files changed, 142 insertions(+) create mode 100644 db/soul_link.yml diff --git a/db/soul_link.yml b/db/soul_link.yml new file mode 100644 index 000000000..bdcf72cb0 --- /dev/null +++ b/db/soul_link.yml @@ -0,0 +1,74 @@ +# Custom soul link buffs. +# Author: Secret <[email protected]> +# +# Format +# <SL_ constant>: <YAML string literal with a pair of enclosing bracket for the script> +# +# You can code the script just like an item script. +# +# Use ONLY spaces to indent. +# DONT USE TABS + +Header: # Metadata for future use + Version: 1 + Type: MOD_SECRET_SOUL_LINK +SL_ALCHEMIST: | + { + bonus bStr,1; + } +SL_MONK: | + { + bonus bStr,1; + } +SL_STAR: | + { + bonus bStr,1; + } +SL_SAGE: | + { + bonus bStr,1; + } +SL_CRUSADER: | + { + bonus bStr,1; + } +SL_SUPERNOVICE: | + { + bonus bStr,1; + } +SL_KNIGHT: | + { + bonus bStr,1; + } +SL_WIZARD: | + { + bonus bStr,1; + } +SL_PRIEST: | + { + bonus bStr,1; + } +SL_BARDDANCER: | + { + bonus bStr,1; + } +SL_ROGUE: | + { + bonus bStr,1; + } +SL_ASSASIN: | + { + bonus bStr,1; + } +SL_BLACKSMITH: | + { + bonus bStr,1; + } +SL_HUNTER: | + { + bonus bStr,1; + } +SL_SOULLINKER: | + { + bonus bStr,1; + } + SL_GUNNER: | + { + bonus bMaxHPrate,50; bonus2 bSkillAtk,"GS_DESPERADO",30; + } +SL_NINJA: | + { + bonus bMaxHPrate,50; bonus2 bSkillAtk,"NJ_ISSEN",30; + } diff --git a/src/map/script.cpp b/src/map/script.cpp index e9e10a643..69c9a0ab6 100644 --- a/src/map/script.cpp +++ b/src/map/script.cpp @@ -60,6 +60,7 @@ #include "pc_groups.hpp" #include "pet.hpp" #include "quest.hpp" +#include "status.hpp" #include "storage.hpp" using namespace rathena; diff --git a/src/map/script_constants.hpp b/src/map/script_constants.hpp index 16e405d0e..8e7bf166d 100644 --- a/src/map/script_constants.hpp +++ b/src/map/script_constants.hpp @@ -16,6 +16,23 @@ export_constant(INT_MIN); export_constant(INT_MAX); + /* soul links */ + export_constant(SL_ALCHEMIST); + export_constant(SL_MONK); + export_constant(SL_STAR); + export_constant(SL_SAGE); + export_constant(SL_CRUSADER); + export_constant(SL_SUPERNOVICE); + export_constant(SL_KNIGHT); + export_constant(SL_WIZARD); + export_constant(SL_PRIEST); + export_constant(SL_BARDDANCER); + export_constant(SL_ROGUE); + export_constant(SL_ASSASIN); + export_constant(SL_BLACKSMITH); + export_constant(SL_HUNTER); + export_constant(SL_SOULLINKER); + export_constant(SL_GUNNER); + export_constant(SL_NINJA); + /* server defines */ export_constant(PACKETVER); export_constant(MAX_LEVEL); diff --git a/src/map/status.cpp b/src/map/status.cpp index 84b832e12..2c51d139d 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -7,6 +7,7 @@ #include <math.h> #include <stdlib.h> #include <string> +#include <unordered_map> #include <yaml-cpp/yaml.h> #include "../common/cbasetypes.hpp" @@ -66,6 +67,8 @@ bool running_npc_stat_calc_event; /// Indicate if OnPCStatCalcEvent is running. // We need it for new cards 15 Feb 2005, to check if the combo cards are insrerted into the CURRENT weapon only to avoid cards exploits short current_equip_opt_index; /// Contains random option index of an equipped item. [Secret] +std::unordered_map<int, script_code*> soul_link; + unsigned int SCDisabled[SC_MAX]; ///< List of disabled SC on map zones. [Cydh] sc_type SkillStatusChangeTable[MAX_SKILL]; @@ -4086,6 +4089,13 @@ int status_calc_pc_sub(struct map_session_data* sd, enum e_status_calc_opt opt) current_equip_opt_index = -1; } + if (sd && sc->count && sc->data[SC_SPIRIT]) { + auto spirit = sc->data[SC_SPIRIT]; + if (spirit != nullptr && soul_link.find(spirit->val2) != soul_link.end() && soul_link[spirit->val2] != nullptr) { + run_script(soul_link[spirit->val2], 0, sd->bl.id, 0); + } + } + if (sc->count && sc->data[SC_ITEMSCRIPT]) { struct item_data *data = itemdb_exists(sc->data[SC_ITEMSCRIPT]->val1); if (data && data->script) @@ -15491,6 +15501,45 @@ static bool status_readdb_attrfix(const char *basedir,bool silent) return true; } +void status_read_soullink_db(const char* file_name) { + YAML::Node root; + int count = 0; + try { + root = YAML::LoadFile(file_name); + if (root.IsMap()) { + for (auto node : root) { + struct script_code *code; + std::string key = node.first.as<std::string>(); + int64 constant = 0; + if (key.compare(0, 3, "SL_")) { + ShowWarning("status_read_soullink_db: Expected a constant with SL_ prefix, got %s.\n", key.c_str()); + continue; + } + if (!script_get_constant(key.c_str(), &constant)) { + ShowWarning("status_read_soullink_db: Tried to assign custom buff to nonexistent constant %s.\n", key.c_str()); + continue; + } + if ((code = parse_script(node.second.as<std::string>().c_str(), file_name, node.second.Mark().line, 0)) == NULL) { + ShowWarning("status_read_soullink_db: Invalid or empty script on custom soul link %s.\n", key.c_str()); + continue; + } + if (soul_link[constant] != nullptr) + script_free_code(soul_link[constant]); + soul_link[constant] = code; + count++; + } + } + else { + ShowError("status_read_soullink_db: The file's structure is broken. Root node is not a map.\n"); + } + } + catch (...) { + ShowError("status_read_soullink_db: Cannot load custom soul link buffs from %s.\n", file_name); + } + + ShowInfo("status_read_soullink_db: Done reading %d custom soul links.\n", count); +} + /** * Sets defaults in tables and starts read db functions * sv_readdb reads the file, outputting the information line-by-line to @@ -15557,6 +15606,7 @@ int status_readdb(void) size_fix_db.load(); + status_read_soullink_db("db/soul_link.yml"); return 0; } -- 2.26.0.windows.1 here you go ? Even Ninja And Gunslinger is there i just add it just follow what is inside and its will run smoothly no memory Leak ? a have Good they Thanks Sir @Secrets
    1 point
  5. You are welcome to submit patches for fixing the mod ?
    1 point
  6. yes this is possible; It requires a source edit though; Give me a few moments to find something for it . https://github.com/rathena/rathena/pull/2849
    1 point
  7. - shop TCG123 -1,501:10000 prontera,255,55,5 script TCG SHOP#TCG123 123,{ mes "I Sell Items For TCG!"; next; switch(select("Open Shop:Nothing")){ case 1: callshop "TCG123",1; npcshopattach "TCG123"; end; case 2: mes "Okay have a nice day"; close; } OnBuyItem: set .@TotalCost,0; for(set .@i,0; .@i < getarraysize( @bought_nameid ); set .@i,.@i+1) for(set .@j,0; .@j < getarraysize( .item ); set .@j,.@j+1) if( .item[.@j] == @bought_nameid[.@i] ) set .@TotalCost,.@TotalCost + ( .price[.@j] * @bought_quantity[.@i] ); if(countitem(.currency) >= .@TotalCost ){ delitem .currency,.@TotalCost; for(set .@i,0; .@i < getarraysize( @bought_nameid ); set .@i,.@i+1) getitem @bought_nameid[.@i],(@bought_quantity[.@i] * .amount[.@i]); end; } else { mes "Your "+getitemname(.currency)+" is not enough"; close; } OnInit: set .currency,7227; //set tax here setarray .item[0],607,608; setarray .price[0],2,1; setarray .amount[0],10,10; npcshopitem "TCG123",607,2; for(set .@i,0; .@i < getarraysize( .item ); set .@i,.@i+1) npcshopadditem "TCG123",.item[.@i],.price[.@i]; end; }
    1 point
×
×
  • Create New...