-
Posts
137 -
Joined
-
Last visited
-
Days Won
1
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Posts posted by Gerzzie
-
-
I'm currently looking for a War Oganizer like from RebornRO which allows the players to choose the Arena that they can enter. Spectator Mode is also available and a Barricade Countdown and Automated Announcement also Automated Prize.
You can contact me here on rA -
1 hour ago, noobzter003 said:
how do you fix this?
Go to your NEMO patcher and apply this : Change new char name field height to 17
-
1
-
-
Spoiler
OnInit:
set .map$, "pvpwait","ra_koe","prontera"; -
Here. They're using
client\data\luafiles514\lua files\signboardlist.lub
-
2 minutes ago, ZAGALiC said:
Oh hahahaha thanks.
One more thing, what do you think most players prefer to play or base on your opinion, Renewal or Pre-Renewal?Most of the players plays Pre - Renewal but it depends on your taste or what you can do. Better plan it first before executing.
-
20151104
Here's the Client List : http://nemo.herc.ws/clients/
-
1
-
1
-
1
-
-
Directory : npc/eamod-battleground/bg_common.txt
Find : ( Line 157 ) Original is 2 minutes
Spoiler- OnRotate :
- OnTimer120000: // Rotation if BG don't start... Comment if you don't want to use this method. 120000 = 2 MinutesReplace : to make it 5 minutes
Spoiler+ OnRotate :
+ OnTimer300000: // Rotation if BG don't start... Comment if you don't want to use this method. 300000 = 5 MinutesYou can use this converter : https://www.timecalculator.net/milliseconds-to-minutes
-
Maybe the client doesn't read your own GRF. It only reads the data.grf. Kindly check it on DATA.ini
-
3 hours ago, Hnomkeng said:
No have other ?
Why still search? Gepard Shield 3.0 is the Most Reliable Game Guard upto date on a Ragnarok Server
-
1
-
-
Spoiler
- script hold -1,{
OnInit:
bindatcmd("hold", strnpcinfo(3)+"::OnHold");
end;OnHold:
if ( !@Hold ) {
set @Hold, 1;
message strcharinfo(0), "[ Console ] : Hold mode is ON.";
pcblockmove getcharid(3), 1;
} else {
set @Hold, 0;
message strcharinfo(0), "[ Console ] : Hold mode is OFF.";
pcblockmove getcharid(3), 0;
}}
Here.
-
1
-
-
Have you tried doing this CTRL + ALT + DEL? If you have a dedicated Graphics Card 2013 Client won't be able to use it.
-
You are currently using Vykimo's Paid Battleground i think. Based on your screenshot. The best way to solve that is you message @Vykimo
-
1
-
-
Replace the old one with this :
12114,Elemental_Fire,Elemental Converter,2,2,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_FIREWEAPON,600000,1; },{},{} 12115,Elemental_Water,Elemental Converter,2,2,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_WATERWEAPON,600000,1; },{},{} 12116,Elemental_Earth,Elemental Converter,2,2,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_EARTHWEAPON,600000,1; },{},{} 12117,Elemental_Wind,Elemental Converter,2,2,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_WINDWEAPON,600000,1; },{},{}
-
1
-
-
2 hours ago, Emistry said:
hmm ... the second picture look like something like this.
prontera,155,181,5 script Sample 4_F_KAFRA1,{ end; OnInit: .@map$ = strnpcinfo(4); .@npc$ = strnpcinfo(0); while (1) { showscript .@npc$ +": user(s) "+getmapusers(.@map$)+" at "+.@map$; sleep 3000; } end; }
not something recommended tho since it drain unnecessary resources.
Ohh. Okay so i'll just stick to the classic interface instead
Thank you!
-
On 8/9/2019 at 9:43 PM, Mael said:
diff --git a/conf/battle/battle.conf b/conf/battle/battle.conf index 593d4e92f4..30251a4834 100644 --- a/conf/battle/battle.conf +++ b/conf/battle/battle.conf @@ -158,3 +158,9 @@ warg_can_falcon: no // Should the target be able of dodging damage by snapping away to the edge of the screen? // Official behavior is "no" snap_dodge: no + +// **************************************** +// Reserved Costume ID's +// **************************************** +// Reserved Char ID for costume converted items. +reserved_costume_id: 999998 \ No newline at end of file diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 70113c4145..d769b4364d 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -9633,6 +9633,25 @@ solution rather than sending the map and the monster_id. --------------------------------------- +*costume <equipment position>; + +Converts equipment in <equipment position> to costume version that has no stats. + +Applicable positions are: + EQI_HEAD_TOP - Top Headgear + EQI_HEAD_MID - Middle Headgear + EQI_HEAD_LOW - Lower Headgear + EQI_GARMENT - Garment + +--------------------------------------- + +*getcostumeitem <item id>; +*getcostumeitem <"item name">; + +Spawn a costume version of an <item id> or <"item name"> in attached player's inventory. + +--------------------------------------- + *hateffect(<Hat Effect ID>,<State>); This will set a Hat Effect onto the player. The state field allows you to diff --git a/src/map/atcommand.cpp b/src/map/atcommand.cpp index 43d6ad4d7d..e2897a48b5 100644 --- a/src/map/atcommand.cpp +++ b/src/map/atcommand.cpp @@ -1218,7 +1218,7 @@ ACMD_FUNC(heal) ACMD_FUNC(item) { char item_name[100]; - int number = 0, bound = BOUND_NONE; + int number = 0, bound = BOUND_NONE, costume = 0; char flag = 0; struct item item_tmp; struct item_data *item_data[10]; @@ -1267,6 +1267,27 @@ ACMD_FUNC(item) for(j--; j>=0; j--){ //produce items in list unsigned short item_id = item_data[j]->nameid; + if (!strcmpi(command + 1, "costumeitem")) + { + if (!battle_config.reserved_costume_id) + { + clif_displaymessage(fd, "Costume convertion is disable. Set a value for reserved_cosutme_id on your battle.conf file."); + return -1; + } + if (!(item_data[j]->equip&EQP_HEAD_LOW) && + !(item_data[j]->equip&EQP_HEAD_MID) && + !(item_data[j]->equip&EQP_HEAD_TOP) && + !(item_data[j]->equip&EQP_COSTUME_HEAD_LOW) && + !(item_data[j]->equip&EQP_COSTUME_HEAD_MID) && + !(item_data[j]->equip&EQP_COSTUME_HEAD_TOP) && + !(item_data[j]->equip&EQP_GARMENT) && + !(item_data[j]->equip&EQP_COSTUME_GARMENT)) + { + clif_displaymessage(fd, "You cannot costume this item. Costume only work for headgears."); + return -1; + } + costume = 1; + } //Check if it's stackable. if (!itemdb_isstackable2(item_data[j])) get_count = 1; @@ -1277,6 +1298,11 @@ ACMD_FUNC(item) memset(&item_tmp, 0, sizeof(item_tmp)); item_tmp.nameid = item_id; item_tmp.identify = 1; + if (costume == 1) { // Costume item + item_tmp.card[0] = CARD0_CREATE; + item_tmp.card[2] = GetWord(battle_config.reserved_costume_id, 0); + item_tmp.card[3] = GetWord(battle_config.reserved_costume_id, 1); + } item_tmp.bound = bound; if ((flag = pc_additem(sd, &item_tmp, get_count, LOG_TYPE_COMMAND))) clif_additem(sd, 0, 0, flag); @@ -10282,6 +10308,7 @@ void atcommand_basecommands(void) { ACMD_DEF(clonestat), ACMD_DEF(bodystyle), ACMD_DEF(adopt), + ACMD_DEF2("costumeitem", item), ACMD_DEF(agitstart3), ACMD_DEF(agitend3), }; diff --git a/src/map/battle.cpp b/src/map/battle.cpp index 839cfb5620..d28c5f0182 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -8482,6 +8482,7 @@ static const struct _battle_data { { "exp_cost_inspiration", &battle_config.exp_cost_inspiration, 1, 0, 100, }, { "mvp_exp_reward_message", &battle_config.mvp_exp_reward_message, 0, 0, 1, }, { "can_damage_skill", &battle_config.can_damage_skill, 1, 0, BL_ALL, }, + { "reserved_costume_id", &battle_config.reserved_costume_id, 999998, 0, INT_MAX, }, { "atcommand_levelup_events", &battle_config.atcommand_levelup_events, 0, 0, 1, }, { "block_account_in_same_party", &battle_config.block_account_in_same_party, 1, 0, 1, }, { "tarotcard_equal_chance", &battle_config.tarotcard_equal_chance, 0, 0, 1, }, diff --git a/src/map/battle.hpp b/src/map/battle.hpp index ad13f69d53..b8f36aaf00 100644 --- a/src/map/battle.hpp +++ b/src/map/battle.hpp @@ -618,6 +618,7 @@ struct Battle_Config int exp_cost_inspiration; int mvp_exp_reward_message; int can_damage_skill; //Which BL types can damage traps + int reserved_costume_id; int atcommand_levelup_events; int block_account_in_same_party; int tarotcard_equal_chance; //Official or equal chance for each card diff --git a/src/map/map.cpp b/src/map/map.cpp index 8b70459939..3b06cd032c 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -1865,6 +1865,12 @@ void map_reqnickdb(struct map_session_data * sd, int charid) nullpo_retv(sd); + if (battle_config.reserved_costume_id && battle_config.reserved_costume_id == charid) + { + clif_solved_charname(sd->fd, charid, "Costume"); + return; + } + tsd = map_charid2sd(charid); if( tsd ) { diff --git a/src/map/pc.cpp b/src/map/pc.cpp index c0126b1597..015381e857 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -746,6 +746,7 @@ int pc_equippoint_sub(struct map_session_data *sd,struct item_data* id){ return EQP_SHADOW_ARMS; } } + return ep; } @@ -757,7 +758,18 @@ int pc_equippoint_sub(struct map_session_data *sd,struct item_data* id){ int pc_equippoint(struct map_session_data *sd,int n){ nullpo_ret(sd); - return pc_equippoint_sub(sd,sd->inventory_data[n]); + int ep = pc_equippoint_sub(sd, sd->inventory_data[n]); + + if (battle_config.reserved_costume_id && + sd->inventory.u.items_inventory[n].card[0] == CARD0_CREATE && + MakeDWord(sd->inventory.u.items_inventory[n].card[2], sd->inventory.u.items_inventory[n].card[3]) == battle_config.reserved_costume_id) + { // Costume Item - Converted + if (ep&EQP_HEAD_TOP) { ep &= ~EQP_HEAD_TOP; ep |= EQP_COSTUME_HEAD_TOP; } + if (ep&EQP_HEAD_LOW) { ep &= ~EQP_HEAD_LOW; ep |= EQP_COSTUME_HEAD_LOW; } + if (ep&EQP_HEAD_MID) { ep &= ~EQP_HEAD_MID; ep |= EQP_COSTUME_HEAD_MID; } + if (ep&EQP_GARMENT) { ep &= ~EQP_GARMENT; ep |= EQP_COSTUME_GARMENT; } + } + return ep; } /** diff --git a/src/map/script.cpp b/src/map/script.cpp index 0b2386c32d..70127734b0 100644 --- a/src/map/script.cpp +++ b/src/map/script.cpp @@ -22601,6 +22601,114 @@ BUILDIN_FUNC(getexp2) { return SCRIPT_CMD_SUCCESS; } +/*========================================== +* Costume Items +*------------------------------------------*/ +BUILDIN_FUNC(costume) +{ + int i = -1, num, ep; + TBL_PC *sd; + + num = script_getnum(st, 2); // Equip Slot + + if (!script_rid2sd(sd)) + return SCRIPT_CMD_FAILURE; + + if (equip_index_check(num)) + i = pc_checkequip(sd, equip_bitmask[num]); + if (i < 0) + return SCRIPT_CMD_FAILURE; + + ep = sd->inventory.u.items_inventory[i].equip; + if (!(ep&EQP_HEAD_LOW) && !(ep&EQP_HEAD_MID) && !(ep&EQP_HEAD_TOP) && !(ep&EQP_GARMENT)) { + ShowError("buildin_costume: Attempted to convert non-cosmetic item to costume."); + return SCRIPT_CMD_FAILURE; + } + log_pick_pc(sd, LOG_TYPE_SCRIPT, -1, &sd->inventory.u.items_inventory[i]); + pc_unequipitem(sd, i, 2); + clif_delitem(sd, i, 1, 3); + // -------------------------------------------------------------------- + sd->inventory.u.items_inventory[i].refine = 0; + sd->inventory.u.items_inventory[i].attribute = 0; + sd->inventory.u.items_inventory[i].card[0] = CARD0_CREATE; + sd->inventory.u.items_inventory[i].card[1] = 0; + sd->inventory.u.items_inventory[i].card[2] = GetWord(battle_config.reserved_costume_id, 0); + sd->inventory.u.items_inventory[i].card[3] = GetWord(battle_config.reserved_costume_id, 1); + + if (ep&EQP_HEAD_TOP) { ep &= ~EQP_HEAD_TOP; ep |= EQP_COSTUME_HEAD_TOP; } + if (ep&EQP_HEAD_LOW) { ep &= ~EQP_HEAD_LOW; ep |= EQP_COSTUME_HEAD_LOW; } + if (ep&EQP_HEAD_MID) { ep &= ~EQP_HEAD_MID; ep |= EQP_COSTUME_HEAD_MID; } + if (ep&EQP_GARMENT) { ep &= EQP_GARMENT; ep |= EQP_COSTUME_GARMENT; } + // -------------------------------------------------------------------- + log_pick_pc(sd, LOG_TYPE_SCRIPT, 1, &sd->inventory.u.items_inventory[i]); + + clif_additem(sd, i, 1, 0); + pc_equipitem(sd, i, ep); + clif_misceffect(&sd->bl, 3); + + return SCRIPT_CMD_SUCCESS; +} + +/*=============================== + * getcostumeitem <item id>; + * getcostumeitem <"item name">; + *===============================*/ +BUILDIN_FUNC(getcostumeitem) +{ + unsigned short nameid; + struct item item_tmp; + TBL_PC *sd; + struct script_data *data; + + if (!script_rid2sd(sd)) + { // No player attached. + script_pushint(st, 0); + return SCRIPT_CMD_SUCCESS; + } + + data = script_getdata(st, 2); + get_val(st, data); + if (data_isstring(data)) { + int ep; + const char *name = conv_str(st, data); + struct item_data *item_data = itemdb_searchname(name); + if (item_data == NULL) + { //Failed + script_pushint(st, 0); + return SCRIPT_CMD_SUCCESS; + } + ep = item_data->equip; + if (!(ep&EQP_HEAD_LOW) && !(ep&EQP_HEAD_MID) && !(ep&EQP_HEAD_TOP) && !(ep&EQP_GARMENT)){ + ShowError("buildin_getcostumeitem: Attempted to convert non-cosmetic item to costume."); + return SCRIPT_CMD_FAILURE; + } + nameid = item_data->nameid; + } + else + nameid = conv_num(st, data); + + if (!itemdb_exists(nameid)) + { // Item does not exist. + script_pushint(st, 0); + return SCRIPT_CMD_SUCCESS; + } + + memset(&item_tmp, 0, sizeof(item_tmp)); + item_tmp.nameid = nameid; + item_tmp.amount = 1; + item_tmp.identify = 1; + item_tmp.card[0] = CARD0_CREATE; + item_tmp.card[2] = GetWord(battle_config.reserved_costume_id, 0); + item_tmp.card[3] = GetWord(battle_config.reserved_costume_id, 1); + if (pc_additem(sd, &item_tmp, 1, LOG_TYPE_SCRIPT)) { + script_pushint(st, 0); + return SCRIPT_CMD_SUCCESS; //Failed to add item, we will not drop if they don't fit + } + + script_pushint(st, 1); + return SCRIPT_CMD_SUCCESS; +} + /** * Force stat recalculation of sd * recalculatestat; @@ -24343,6 +24451,8 @@ struct script_function buildin_func[] = { BUILDIN_DEF(getguildalliance,"ii"), BUILDIN_DEF(adopt,"vv"), BUILDIN_DEF(getexp2,"ii?"), + BUILDIN_DEF(costume, "i"), + BUILDIN_DEF(getcostumeitem, "v"), BUILDIN_DEF(recalculatestat,""), BUILDIN_DEF(hateffect,"ii"), BUILDIN_DEF(getrandomoptinfo, "i"), diff --git a/src/map/status.cpp b/src/map/status.cpp index af4c3afb00..a296f7b89e 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -3492,6 +3492,8 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) continue; if (!sd->inventory_data[index]) continue; + if (sd->inventory.u.items_inventory[current_equip_item_index].card[0] == CARD0_CREATE && MakeDWord(sd->inventory.u.items_inventory[current_equip_item_index].card[2], sd->inventory.u.items_inventory[current_equip_item_index].card[3]) == battle_config.reserved_costume_id) + continue; base_status->def += sd->inventory_data[index]->def;
-
1
-
-
23 minutes ago, KeyMaster said:
Easy...
data/texture/À¯ÀúÀÎÅÍÆäÀ̽º/signboard/bg_signboard.bmp and data/luafiles514/lua files/SignBoardList.lub
They've created a custom semi transparent signboard? Btw thanks for this!
-
Does anybody know how to make this work like this? Thank you in advance! I've seen this waitingroom on
Ragnarok is LifeSpoilerImmortalsRO
Spoiler -
ExternalSettings_kr.lub
SpoilerTwitterDataUrl = {
Auth = "0.0.0.0:3000",
Upload = "0.0.0.0:3000"
} -
Undiffed Client : 2018-06-21aRagexeRE.exe.
4144's NEMO : https://gitlab.com/4144/Nemo/ -
@Functor Offers this mod as well. You'll just need to ask him.
-
There are some files that are missing here : data.rar SP_SOUL.tga
-
1
-
-
1 hour ago, jommain said:
i check everywhere there is no rathena.clan.. maybe i just don't find it. if anyone know how to fix this.. please help
i don't want to start from scratch again. it has been 3 days of searching and tweaking..
thanks rAthena^^ *be patients im newbie
[Info]: Git Hash: 'fce885e81e9ef0d0b152309e8a0046f80fabe92c' [Info]: Server uses 'select' as event dispatcher [Info]: Server supports up to '4096' concurrent connections. [Status]: Character server IP address : jomainro.zapto.org -> 115.132.62.91 [Info]: Done reading conf/import/char_conf.txt. [Info]: Done reading conf/char_athena.conf. [Info]: Done reading conf/import/inter_conf.txt. [Info]: Done reading conf/inter_athena.conf. [Info]: Done reading '149' messages in 'conf/msg_conf/char_msg.conf'. [Info]: Done reading conf/import/inter_conf.txt. [Info]: Done reading conf/inter_athena.conf. [Info]: Connect Character DB server.... (Character Server) [Status]: Done reading '1' entries in 'conf/inter_server.yml' [Status]: Done reading '50' entries in 'db/re/exp_guild.txt'. [Status]: Done reading '0' entries in 'db/import/exp_guild.txt'. [SQL]: DB error - Table 'rathena.clan' doesn't exist [Debug]: at C:\Users\Admin\Documents\GitHub\rathena\src\char\int_clan.cpp:213 - SELECT `clan_id` FROM `clan` [Status]: Finished Reading GeoIP Database. [Status]: Characters per Account: '0'. [Status]: Defaulting to 192.168.0.135 as our IP address [Info]: Start checking DB integrity [SQL]: DB error - Table 'rathena.charlog' doesn't exist [Debug]: at C:\Users\Admin\Documents\GitHub\rathena\src\char\char.cpp:2308 - SELECT 1 FROM `charlog` LIMIT 1; [Fatal Error]: char : A tables is missing in sql-server, please fix it, see (sql-files main.sql for structure) Char-Server has terminated abnormally. Restarting in 15 seconds, press Ctrl+C to cancel.
You can find it here.
https://github.com/rathena/rathena/blob/master/sql-files/main.sqlSpoilerCREATE TABLE IF NOT EXISTS `clan` ( `clan_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT NULL DEFAULT '', `master` varchar(24) NOT NULL DEFAULT '', `mapname` varchar(24) NOT NULL DEFAULT '', `max_member` smallint(6) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`clan_id`) ) ENGINE=MyISAM AUTO_INCREMENT=5; -
You can download it here. Put the FluxCP Theme on your theme folder. or rename the existing Default to Default1 and put this folder named Default
-
First locate gepard_shield.conf on your rAthena folder. conf/gepard_shield.conf
Replace :
- gepard_shield_enabled: yes
+ gepard_shield_enabled: no
replace "Mss32.dll" by original file located on your Ragnarok Folder-
1
-
Player ID become NPC Sprite
in General Support
Posted
https://github.com/rathena/rathena/blob/master/db/mob_avail.txt