-
Posts
554 -
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 malufett
-
-
oh nice..its now working properly..now the only problem is your internet connectivity..its seems that it is slow or it is too far from gravity's patch server..
-
@cart
in Implemented
indeed testing stuff with carts is now a pain since they no longer work with @option (since the new carts ain't a option)hahaha..I know what it feels like....
-
you need a newer patch.inf files..
I want to give mine however mine is already updated to current so can't help sorry...
anyway give this a try extract then paste this to your 'PatchClient/Lua Files'
Download: http://www.4shared.com/archive/CdSMavf1/ServerInfoz.html?refurl=d1url
-
@cart
in Implemented
+1
unless @option is enhance to support the new carts implementation...
-
what do you mean? keylogger?
something like that..
but he mean is something like inside job manipulator, item giver to non GM, and other corrupt things or added feature which hackers can benefit...
-
//----------------------------------- // Function to create a new character //----------------------------------- #if PACKETVER >= 20120307 int make_new_char_sql(struct char_session_data* sd, char* name_, int slot, int hair_color, int hair_style) { int str = 1, agi = 1, vit = 1, int_ = 1, dex = 1, luk = 1; #else int make_new_char_sql(struct char_session_data* sd, char* name_, int str, int agi, int vit, int int_, int dex, int luk, int slot, int hair_color, int hair_style) { #endif char name[NAME_LENGTH]; char esc_name[NAME_LENGTH*2+1]; int char_id, flag; safestrncpy(name, name_, NAME_LENGTH); normalize_name(name,TRIM_CHARS); Sql_EscapeStringLen(sql_handle, esc_name, name, strnlen(name, NAME_LENGTH)); flag = check_char_name(name,esc_name); if( flag < 0 ) return flag; //check other inputs #if PACKETVER >= 20120307 if(slot >= MAX_CHARS) #else if((slot >= MAX_CHARS) // slots || (str + agi + vit + int_ + dex + luk != 6*5 ) // stats || (str < 1 || str > 9 || agi < 1 || agi > 9 || vit < 1 || vit > 9 || int_ < 1 || int_ > 9 || dex < 1 || dex > 9 || luk < 1 || luk > 9) // individual stat values || (str + int_ != 10 || agi + luk != 10 || vit + dex != 10) ) // pairs #endif return -2; // invalid input // check the number of already existing chars in this account if( char_per_account != 0 ) { if( SQL_ERROR == Sql_Query(sql_handle, "SELECT 1 FROM `%s` WHERE `account_id` = '%d'", char_db, sd->account_id) ) Sql_ShowDebug(sql_handle); if( Sql_NumRows(sql_handle) >= char_per_account ) return -2; // character account limit exceeded } // check char slot if( SQL_ERROR == Sql_Query(sql_handle, "SELECT 1 FROM `%s` WHERE `account_id` = '%d' AND `char_num` = '%d' LIMIT 1", char_db, sd->account_id, slot) ) Sql_ShowDebug(sql_handle); if( Sql_NumRows(sql_handle) > 0 ) return -2; // slot already in use // validation success, log result if (log_char) { if( SQL_ERROR == Sql_Query(sql_handle, "INSERT INTO `%s` (`time`, `char_msg`,`account_id`,`char_num`,`name`,`str`,`agi`,`vit`,`int`,`dex`,`luk`,`hair`,`hair_color`)" "VALUES (NOW(), '%s', '%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d')", charlog_db, "make new char", sd->account_id, slot, esc_name, str, agi, vit, int_, dex, luk, hair_style, hair_color) ) Sql_ShowDebug(sql_handle); } #if PACKETVER >= 20120307 //Insert the new char entry to the database if( SQL_ERROR == Sql_Query(sql_handle, "INSERT INTO `%s` (`account_id`, `char_num`, `name`, `zeny`, `status_point`,`str`, `agi`, `vit`, `int`, `dex`, `luk`, `max_hp`, `hp`," "`max_sp`, `sp`, `hair`, `hair_color`, `last_map`, `last_x`, `last_y`, `save_map`, `save_x`, `save_y`) VALUES (" "'%d', '%d', '%s', '%d', '%d','%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d','%d', '%d','%d', '%d', '%s', '%d', '%d', '%s', '%d', '%d')", char_db, sd->account_id , slot, esc_name, start_zeny, 48, str, agi, vit, int_, dex, luk, (40 * (100 + vit)/100) , (40 * (100 + vit)/100 ), (11 * (100 + int_)/100), (11 * (100 + int_)/100), hair_style, hair_color, mapindex_id2name(start_point.map), start_point.x, start_point.y, mapindex_id2name(start_point.map), start_point.x, start_point.y) ) { Sql_ShowDebug(sql_handle); return -2; //No, stop the procedure! } #else //Insert the new char entry to the database if( SQL_ERROR == Sql_Query(sql_handle, "INSERT INTO `%s` (`account_id`, `char_num`, `name`, `zeny`, `str`, `agi`, `vit`, `int`, `dex`, `luk`, `max_hp`, `hp`," "`max_sp`, `sp`, `hair`, `hair_color`, `last_map`, `last_x`, `last_y`, `save_map`, `save_x`, `save_y`) VALUES (" "'%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d','%d', '%d','%d', '%d', '%s', '%d', '%d', '%s', '%d', '%d')", char_db, sd->account_id , slot, esc_name, start_zeny, str, agi, vit, int_, dex, luk, (40 * (100 + vit)/100) , (40 * (100 + vit)/100 ), (11 * (100 + int_)/100), (11 * (100 + int_)/100), hair_style, hair_color, mapindex_id2name(start_point.map), start_point.x, start_point.y, mapindex_id2name(start_point.map), start_point.x, start_point.y) ) { Sql_ShowDebug(sql_handle); return -2; //No, stop the procedure! } #endif //Retrieve the newly auto-generated char id char_id = (int)Sql_LastInsertId(sql_handle); //Give the char the default items if (start_weapon > 0) { //add Start Weapon (Knife?) if( SQL_ERROR == Sql_Query(sql_handle, "INSERT INTO `%s` (`char_id`,`nameid`, `amount`, `identify`) VALUES ('%d', '%d', '%d', '%d')", inventory_db, char_id, start_weapon, 1, 1) ) Sql_ShowDebug(sql_handle); } if (start_armor > 0) { //Add default armor (cotton shirt?) if( SQL_ERROR == Sql_Query(sql_handle, "INSERT INTO `%s` (`char_id`,`nameid`, `amount`, `identify`) VALUES ('%d', '%d', '%d', '%d')", inventory_db, char_id, start_armor, 1, 1) ) Sql_ShowDebug(sql_handle); } ShowInfo("Created char: account: %d, char: %d, slot: %d, name: %s\n", sd->account_id, char_id, slot, name); return char_id; }
-
1
-
-
do you have any custom modifications?
-
cooldown in Pre-RE??
sounds weird since there only few skills in pre-RE have their cooldown..
did you check your files or configurations?
-
Well.. the multiple countitem would be sorta good. It will lessen lines of scripts from creating multiple countitem lines in a script D: or one massive long line of multiple if(countitem asfasf < fasf) || (countitem fnaskfm < fkasfk)) etc. xD
but the suggested script command is still not suitable with this kind of situation...
for example:
I need to count 5 apples and 10 oranges..
so I will use countitem( apples, oranges ) but what if I have 14 oranges and 1 apple?? see kinda useless...
but in reality countitem(apples) >= 5 && countitem(oranges) >= 15
however if we will do counteitem(apples,5,oranges,15) but same it not worth it in purpose..
maybe you could suggest like checkitem(apples, oranges) that it will return the overall number of items regardless the individual quantity..just like saying I need apples and oranges that when add it will give me a result of 15..
-
Serves no purpose, I vote no.
+1
unless official servers created npc/quest where it requires counting items regardless of type to suffice required amount of items.....
-
I will go for Euphy's suggestion..the only problem is how you will implement it...
here is a pseudo
onLogin
{
if(has remaining time)
time = original time - remaining time
start timer based time calculated
else
start timer
}
onLogout{
record time elapse/remaining time
}
-
aw...what did I eat yesterday...I think I need to rephrase it..
but amazingly Rytech understood me...since this idea is based on his previous implementation IT_THROWWEAPON
I support your suggestion
-
Hello,
this is just my speculations/observation in aegis and official server...
Characteristics:
1. not equitable
2. an etc type indeed its type #17
Usage/Function of type#17:
1. used to differentiate other etc type items
2. for easy indexing when searching this item as ammunition in some other skills..
so what do you think/opinion?
-
1
-
-
yup you can delete it or comment it out..the warning was cause by a variable that hasn't been used..
-
-
-
@battle.c
if( ( sc->data[sC_PNEUMA] && (flag&(BF_MAGIC|BF_LONG)) == BF_LONG ) || sc->data[sC__MANHOLE] && skill_num != RK_IGNITIONBREAK) { d->dmg_lv = ATK_BLOCK; return 0; }
-
try this
@clif.c
case BL_PC: { struct map_session_data *ssd = (struct map_session_data *)bl; struct party_data *p = NULL; struct guild *g = NULL; +char name[NAME_LENGTH]; //Requesting your own "shadow" name. [skotlex] if (ssd->fd == fd && ssd->disguise) WBUFL(buf,2) = -bl->id; if( ssd->fakename[0] ) { WBUFW(buf, 0) = cmd = 0x195; memcpy(WBUFP(buf,6), ssd->fakename, NAME_LENGTH); WBUFB(buf,30) = WBUFB(buf,54) = WBUFB(buf,78) = 0; break; } +sprintf(name, "[%d/%d] %s", ssd->status.base_level, pc_maxbaselv(ssd),ssd->status.name); +memcpy(WBUFP(buf,6), name, NAME_LENGTH); -memcpy(WBUFP(buf,6), ssd->status.name, NAME_LENGTH);
NOTE:I didn't test it yet
-
BTW there is no 'char_data'....
-
if you want a balanced mechanics then switch to renewal..but if your using it in a high rate then renewal mechanics will be useless then..IMO
Are servers expected to meet the demands knowing most players have renewal now that sakray is rendered useless?well there will be cons and pros..but what is good in renewal is the new features and interfaces....
-
guide for a such is like a retarded thing...
no one is like a machine except if he is really dedicated and start working in creating in detailed guide for a big thing like athena core structure..
I suggest
learn C Programming...or even other languages as long as you learn the basics
and start reading rAthena core structure..start from atcommand.c to unit.c
-
-
I think that is natural because of TF_DOUBLE....better suggest your player to unlearn it if they want to retain the crit attacks...
-
renewal(3rd jobs, Kagerou/Oboro, new mechanics, new episode) + athena = rathena
Kro Updater
in Client Requests
Posted
once you receive the patch list it means your patcher is ok..however it seems that the patch server is out of reach even though you have a fast connection..or try to use proxy..
can you test to ping it or access ro.game.gnjoy.com