Jump to content

Gerzzie

Members
  • Posts

    136
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by Gerzzie

  1. Go to src/common/mapindex.hpp add a line after  #define MAP_JAIL "sec_pri"

     #define MAP_JAIL "sec_pri"
    +#define MAP_PAY_ARCHE "pay_arche"

    Go to src/map/atcommand.cpp find and replace : -{ MAP_PRONTERA, X}, // 0=Prontera

    +{ MAP_PAY_ARCHE, X}, // 0=Maintown

    How to change your @go 0 from Prontera to Maintown word. Go to conf/atcommands.yml and find : Command: go

    -0: prontera
    +0: Maintown

     

    Don't forget to recompile your server.

    • Upvote 1
  2. Grant and put some Privilege on your Web Host IP Address on your Ragnarok SQL Database. And it's much better to make a separate SQL User on your Web Host.

      

    On 1/25/2020 at 6:00 AM, Zack- said:

    If you would like to use your root account you can go straight to fluxcp installation guide below

    HOW TO MAKE SECONDARY MYSQL/PHPMYADMIN ACCOUNT FOR YOUR FLUXCP

    1. I recommended to make a secondary account of mysql/phpmyadmin, for this step you need to login in your mysql/phpmyadmin as root and find the User Account in the upper

    1445806665_1-loginurphpmyadminasrootandclickUser.png.f198eb0ed5634ddbe057ea09c7eb3dc8.png

    2.  After you click the User accounts find the Add user account in the center left and press

    730579907_2-clickadduseraccount.png.d577574920b828a376274a600bee3dd3.png

    3. After you click the Add user account make your User name and Password and make sure that you put in the Host name is Any host so that your web hosting can connect and now press the GO in the lower right

    1123661586_3-makeaccountandmakesureurhostnameispercent.thumb.png.8e05fa252c729fd9fa68b3da749d0b3d.png

    4. Now that you've added secondary account, all you have to do is press Database in the upper left

    922456850_4-clickthedatabasetoaddurragnarokdb.thumb.png.ab1bcda9e54c45d936f4603cfa5741c7.png

    5. Once you get there look for your database and highlight it and press GO in the lower right

    1726327789_5-tapyourragnarokdatabaseandgo.thumb.png.e5af40ae290fc52b58a4e99a0f2db34f.png

    6. Check all selected database and press GO in the lower right

    1657456646_6-Checkallandgo.thumb.png.3e58c15b1c60b67192d96192dac99753.png

    7. Now you have a secondary account

    1996795669_7-andurdonemakingsecondaryaccountforyourfluxcp.thumb.png.80e856a84c5ef08f33254599754a69fb.png

     

     

    HOW TO INSTALL FLUXCP

    1. You need to download FluxCP and upload in your Web hosting File Maner /www/public_html/

     

    1238608809_8-getfluxcpfromgithubanduploadinyourwebh.png.157f911d29c7ec85e11245046889c197.png

    2. Goto your FluxCP config/ edit your applications.php

    • ServerAddress This is your domain name like .com .net and etc..
    • BaseURL This is the path where your fluxcp located, if you used FluxCP Folder in /www/public_html/FLUXCP make sure your 'BaseURL'  => '/FLUXCP',
    • InstallerPassword You need this when you need to update your fluxcp or install

    2127183845_9-edityourapplications.thumb.png.c13206889264285129e0d6c7f23dc9c9.png

    3. Goto your Fluxcp config/ edit your servers.php

    • Hostname Your ragnarok server IP
    • Username Your root/secondary username
    • Password Self explanation
    • Database Your ragnarok database

    741149321_10-editurservers.thumb.png.bf605056af29e07783f54bc2047c1447.png

    4. And now go to your domain.com to setup your FluxCP and put your InstallerPassword in your config/applications.php and press the Authenticate

    2104284981_11-Putyoursecretpassword.thumb.png.e2a4c1d683fdd94c1c5719a7f3dd1773.png

    5. After you authenticate your InstallerPassword you will need to login your root/secondary mysql/phpmyadmin account and press the Update FluxRO<- If you dont change the 'ServerName' in the config/servers.php

    1449591885_12-putyour2ndarymysqlaccount.thumb.png.cd9a5ea43617f2db24ef7e79d1ea40b0.png

    6. Congratulation your FluxCP is installed correctly

    1599950478_13-congratulationsyourdone.thumb.png.50fcc03ece2c11fc7bd258dde1e8aedb.png

     

     

  3. Just purchase a VPS / Server Host on DigitalOcean, Vultr, OVH which cost around 10$ - 20$ to put your server online. Ideal Server Specification is located on our Github rA to Test the waters if you'll have a lots of player then purchase a Dedicated Server. Domain is 15$ - 20$ per year. Web Host is 10$ Monthly for a Server Developer there is a Third Party Services here on our Forum which you could contact and transact with them with ease because they're certified for Game Guard which is Gepard Shield you can contact @Functor for information regarding his prices.

    As for Advertisement. Facebook is one the most useful for advertising a server which you can do it on your own or you could hire some here on Server Jobs Available also.

    • Love 1
  4. This event script is from Mabuhay. I just modified it for additional
    - Event Cash Variable  1
    - Event Cash Variable  2
    - Event Cash Variable  3

    I added also @checkpoints to check your remaining Event Cash Variable if you want to remove Event Cash Variable 3 just

    Remove or Put // :
    //setd $event_var3$, getd($event_var3$)+$event_var_gain3;

    Remove or Put // :
    //dispbottom "You gained "+$event_var_gain3+" "+$event_var_name3$+". You now have "+getd($event_var3$)+" "+$event_var_name3$+".";

    Remove or Put // :
    //dispbottom "You currently have " +$event_var_gain3+ " Event Cash Variable 3";

     

    Credits to @Mabuhay for his Event Script.

    Modified Mabuhay Event.txt

    • Upvote 1
  5.  

      

     Disable Doram on your Client :

    data\luafiles514\lua files\service_korea\ExternalSettings_kr.lub

    MakeableRace = { Doram = true }

    change to:

    MakeableRace = { Doram = false }

     

    Coming Soon - Doram Replace this BMP.

    FIND : data\texture\À¯ÀúÀÎÅÍÆäÀ̽º\make_character_ver2.bmp

    Replace make_character_ver2.bmp to this new make_character_ver2.bmp on your GRF. I modified it credit to the person who owns this.

    Download link : img_doram_comingsoon.bmp

    Example

    image.thumb.png.38949bf8e6b5dcbccf39156d13550fa4.png

    • Love 1
  6. Good day! Upon checking your problem. You need to go to your conf/motd.conf for you to reload it you can type @reloadmotd

    for the  "Speed has increased" and "Str, Int and Dex Increased". You need to go to your GRF and find the data/msgstringtable.txt

    Go to Line 210 for Speed has increased and Line 627 for Str, Int and Dex Increased to change it.

    On 8/19/2020 at 3:15 AM, Jpeeezy said:

    Gusto ko sana baguhing yung mga nakasulat. instead of welcome to rathena, it should be welcome to name of my server

    and yung "Speed has increased" to "Your Speed has increased".

    "Str, Int and Dex Increased" to "Blessing aligned"

    chatbox.png

     

    • Like 1
  7. Execute this one.

      

    Spoiler

            create table pvpladder (
                    char_id int(11) not null default '0' primary key,
                    name varchar(30) not null default '',
                    streaks smallint(6) unsigned not null default '0',
                    kills smallint(6) unsigned not null default '0',
                    deaths smallint(6) unsigned not null default '0',
                    streaktime datetime
            ) engine = myisam;
           
            create table ownladder (
                    guild_id int(11) not null default '0' primary key,
                    name varchar(24) not null default '',
                    currentown smallint(6) unsigned not null default '0',
                    highestown smallint(6) unsigned not null default '0',
                    owntime datetime
            ) engine = myisam;

     

    • Upvote 1
  8. 5 hours ago, kennykiro said:

     

    Hello friends I have a problem to add @go custom in a custom map is giving error while compiling the emulator already tried in several ways more unsuccessful someone could help me error image below, without anyone know I will be very thankful

    erro.bmp 718.87 kB · 2 downloads

    You need to add first your custom map here :

    src/common/mapindex.hpp :

    -#define MAP_PRONTERA "prontera"

    +#define MAP_PRONTERA "prontera"
    +#define MAP_TRINITRY "trinity"

     

  9. Eto yung sa item if ever need mo. Palitan mo lang yung 256 ng 1024 para maging Costume Upper Headgear
    -  5019,Corsair,Corsair,4,20,,500,,5,,0,0xFFFFFFFE,7,2,256,,0,1,105,{ bonus bVit,1; },{},{}
    + 5019,Corsair,Corsair,4,20,,500,,5,,0,0xFFFFFFFE,7,2,256,,0,1,105,{ bonus bVit,1; },{},{}

    https://github.com/rathena/rathena/blob/master/doc/item_db.txt
    2^10 1024 = Costume Top Headgear
    2^11 2048 = Costume Mid Headgear
    2^12 4096 = Costume Low Headgear
    2^13 8192 = Costume Garment/Robe
     

     

    If command need mo eto.

    On 8/9/2019 at 6:43 AM, 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;

     

    @costumeitem.diff

×
×
  • Create New...