Jump to content

Leaderboard

Popular Content

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

  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. Comment this line and recompile your server
    1 point
  3. 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
  4. You are welcome to submit patches for fixing the mod ?
    1 point
  5. 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
  6. - 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...