- Small update to the effects list (new exe's effects by Au{R}oN)
- No sending of the pet_equip packet when pet has no equip (thx to Skotlex) - Added back exp gain limiting for old formula to stop exploits (see r8177) - Now a message is printed when the packet_ver filter rejects someone - Renamed two structs using same name as variables (MSVC debugger issue) git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@10886 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
2aa0f5545a
commit
02e009bd8d
@ -3,6 +3,12 @@ Date Added
|
|||||||
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
|
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
|
||||||
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||||
|
|
||||||
|
2007/07/18
|
||||||
|
* Small update to the effects list (new exe's effects by Au{R}oN)
|
||||||
|
* No sending of the pet_equip packet when pet has no equip (thx2Skotlex)
|
||||||
|
* Added back exp gain limiting for old formula to stop exploits (see r8177)
|
||||||
|
* Now a message is printed when the packet_ver filter rejects someone
|
||||||
|
* Renamed two structs using same name as variables (MSVC debugger issue)
|
||||||
2007/07/13
|
2007/07/13
|
||||||
* Fixed yet another script engine typo, this time in 'copyarray' [ultramage]
|
* Fixed yet another script engine typo, this time in 'copyarray' [ultramage]
|
||||||
2007/07/09
|
2007/07/09
|
||||||
|
@ -3,10 +3,11 @@
|
|||||||
//===== By ================================================
|
//===== By ================================================
|
||||||
//= Valaris, Spira, Au{R}oN, Tharis, HiddenDragon
|
//= Valaris, Spira, Au{R}oN, Tharis, HiddenDragon
|
||||||
//===== Version ===========================================
|
//===== Version ===========================================
|
||||||
//= 1.1
|
//= 1.2
|
||||||
//=========================================================
|
//=========================================================
|
||||||
//= 1.0 - Formatted to the standard
|
//= 1.0 - Formatted to the standard
|
||||||
//= 1.1 - New effects, from 2007/05/07 Sakexe [Au{R}oN]
|
//= 1.1 - New effects, up to 2007/05/07 Sakexe [Au{R}oN]
|
||||||
|
//= 1.2 - New effects, up to 2007/07/12 Sakexe [Au{R}oN]
|
||||||
//===== Description =======================================
|
//===== Description =======================================
|
||||||
//= A list of client-side effects sorted by their ID
|
//= A list of client-side effects sorted by their ID
|
||||||
//=========================================================
|
//=========================================================
|
||||||
@ -152,9 +153,9 @@ number description
|
|||||||
130. Two-Hand Quicken
|
130. Two-Hand Quicken
|
||||||
131. Auto-Counter Hit
|
131. Auto-Counter Hit
|
||||||
132. Grimtooth Hit
|
132. Grimtooth Hit
|
||||||
133. Probably the old Frost Diver Effect
|
133. Big Piece of Ice
|
||||||
134. Probably the old Frost Diver Effect Without the Blue Circle
|
134. Big Piece of Ice Without the Blue Circle
|
||||||
135. Probably the old Frost Diver Effect with Explosion
|
135. Big Piece of Ice Explosion
|
||||||
136. Slow Poison
|
136. Slow Poison
|
||||||
137. Small pulsating green square (unused)
|
137. Small pulsating green square (unused)
|
||||||
138. Fire pillar
|
138. Fire pillar
|
||||||
@ -687,14 +688,17 @@ number description
|
|||||||
665. Little Blue Ball Falling From the Sky
|
665. Little Blue Ball Falling From the Sky
|
||||||
666. Mobs Skill (Earthquake)
|
666. Mobs Skill (Earthquake)
|
||||||
667. (nothing)
|
667. (nothing)
|
||||||
668. Mobs Skill (Scream)
|
668. Mobs Skill (Dragonfear)
|
||||||
669. Mobs Skill (Critical Slash)
|
669. Mobs Skill (Critical Slash)
|
||||||
670. Mobs Skill (Scream Without Sound)
|
670. Mobs Skill (Dragonfear Without Sound)
|
||||||
671. The Japan Earth Symbol (Like 'Seven Wind LV 1' but is in the Ground)
|
671. The Japan Earth Symbol (Like 'Seven Wind LV 1' but is in the Ground)
|
||||||
672. The Japan Wind Symbol (Like 'Seven Wind LV 2' but is in the Ground)
|
672. The Japan Wind Symbol (Like 'Seven Wind LV 2' but is in the Ground)
|
||||||
673. (nothing)
|
673. (nothing)
|
||||||
674. Like Curse Effect
|
674. Like Curse Effect
|
||||||
675. Like Parrying/Kyrie Eleison barrier but is Yellow with small Cross in every barrier piece
|
675. Like Parrying/Kyrie Eleison barrier but Yellow with small Cross in every barrier piece
|
||||||
676. Slow Poison (Clock Only)
|
676. Slow Poison (Clock Only)
|
||||||
677. Mobs Skill (Unamed)
|
677. Mobs Skill (Unamed)
|
||||||
678+. No More Effects in 2007/05/07 Sakexe
|
678. Another Aura Bubbles but White
|
||||||
|
679. Green Aura
|
||||||
|
680. Green Aura Area Ground
|
||||||
|
681+. No More effects from 2007/7/12 Sakexe
|
||||||
|
@ -3746,10 +3746,10 @@ int parse_char(int fd)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x187: // Alive?
|
case 0x187: // R 0187 <account ID>.l - client keep-alive packet (every 12 seconds)
|
||||||
if (RFIFOREST(fd) < 6)
|
if (RFIFOREST(fd) < 6)
|
||||||
return 0;
|
return 0;
|
||||||
RFIFOSKIP(fd, 6);
|
RFIFOSKIP(fd,6);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x7530: // Athena info get
|
case 0x7530: // Athena info get
|
||||||
|
@ -12,9 +12,9 @@
|
|||||||
|
|
||||||
#define MAX_MAPINDEX 2000
|
#define MAX_MAPINDEX 2000
|
||||||
|
|
||||||
struct indexes {
|
struct _indexes {
|
||||||
char name[MAP_NAME_LENGTH]; //Stores map name
|
char name[MAP_NAME_LENGTH]; //Stores map name
|
||||||
char exists; //Set to 1 if index exists
|
bool exists; //Set to 1 if index exists
|
||||||
} indexes[MAX_MAPINDEX];
|
} indexes[MAX_MAPINDEX];
|
||||||
|
|
||||||
static unsigned short max_index = 0;
|
static unsigned short max_index = 0;
|
||||||
@ -58,7 +58,7 @@ int mapindex_addmap(int index, const char *name)
|
|||||||
ShowWarning("(mapindex_add) Overriding index %d: map \"%s\" -> \"%s\"\n", index, indexes[index].name, map_name);
|
ShowWarning("(mapindex_add) Overriding index %d: map \"%s\" -> \"%s\"\n", index, indexes[index].name, map_name);
|
||||||
|
|
||||||
snprintf(indexes[index].name, MAP_NAME_LENGTH, "%s", map_name);
|
snprintf(indexes[index].name, MAP_NAME_LENGTH, "%s", map_name);
|
||||||
indexes[index].exists = 1;
|
indexes[index].exists = true;
|
||||||
if (max_index <= index)
|
if (max_index <= index)
|
||||||
max_index = index+1;
|
max_index = index+1;
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -50,7 +50,7 @@ struct Clif_Config {
|
|||||||
int connect_cmd[MAX_PACKET_VER + 1]; //Store the connect command for all versions. [Skotlex]
|
int connect_cmd[MAX_PACKET_VER + 1]; //Store the connect command for all versions. [Skotlex]
|
||||||
} clif_config;
|
} clif_config;
|
||||||
|
|
||||||
struct packet_db packet_db[MAX_PACKET_VER + 1][MAX_PACKET_DB + 1];
|
struct packet_db_t packet_db[MAX_PACKET_VER + 1][MAX_PACKET_DB + 1];
|
||||||
|
|
||||||
//Converts item type in case of pet eggs.
|
//Converts item type in case of pet eggs.
|
||||||
#define itemtype(a) (a == IT_PETEGG)?IT_WEAPON:a
|
#define itemtype(a) (a == IT_PETEGG)?IT_WEAPON:a
|
||||||
@ -1372,7 +1372,7 @@ int clif_spawn(struct block_list *bl)
|
|||||||
case BL_PET:
|
case BL_PET:
|
||||||
{
|
{
|
||||||
TBL_PET* pd = (TBL_PET*)bl;
|
TBL_PET* pd = (TBL_PET*)bl;
|
||||||
clif_pet_equip(pd); // needed to display pet equip properly
|
if (pd->vd.head_bottom) clif_pet_equip(pd); // needed to display pet equip properly
|
||||||
clif_send_petdata_area(pd, 5, battle_config.pet_hair_style); // removes the attack cursor
|
clif_send_petdata_area(pd, 5, battle_config.pet_hair_style); // removes the attack cursor
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -3763,8 +3763,10 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl)
|
|||||||
case BL_PET:
|
case BL_PET:
|
||||||
{
|
{
|
||||||
// needed to display pet equip properly
|
// needed to display pet equip properly
|
||||||
//TODO: adjust clif_pet_equip() to support a 'target', then rewrite this mess into a function call
|
|
||||||
TBL_PET* pd = (TBL_PET*)bl;
|
TBL_PET* pd = (TBL_PET*)bl;
|
||||||
|
if (pd->vd.head_bottom)
|
||||||
|
{
|
||||||
|
//TODO: adjust clif_pet_equip() to support a 'target', then rewrite this mess into a function call
|
||||||
int fd = sd->fd;
|
int fd = sd->fd;
|
||||||
WFIFOHEAD(fd,packet_len(0x1a4));
|
WFIFOHEAD(fd,packet_len(0x1a4));
|
||||||
WFIFOW(fd,0) = 0x1a4;
|
WFIFOW(fd,0) = 0x1a4;
|
||||||
@ -3773,6 +3775,7 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl)
|
|||||||
WFIFOL(fd,7) = pd->vd.head_bottom;
|
WFIFOL(fd,7) = pd->vd.head_bottom;
|
||||||
WFIFOSET(fd,packet_len(0x1a4));
|
WFIFOSET(fd,packet_len(0x1a4));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -7924,6 +7927,7 @@ void clif_parse_WantToConnection(int fd, TBL_PC* sd)
|
|||||||
(packet_ver <= 9 && (battle_config.packet_ver_flag & 1) == 0) || // older than 6sept04
|
(packet_ver <= 9 && (battle_config.packet_ver_flag & 1) == 0) || // older than 6sept04
|
||||||
(packet_ver > 9 && (battle_config.packet_ver_flag & 1<<(packet_ver-9)) == 0)) // version not allowed
|
(packet_ver > 9 && (battle_config.packet_ver_flag & 1<<(packet_ver-9)) == 0)) // version not allowed
|
||||||
{// packet version rejected
|
{// packet version rejected
|
||||||
|
ShowInfo("Rejected connection attempt, wrong packet version (AID/CID: '"CL_WHITE"%d/%d"CL_RESET"', Packet Ver: '"CL_WHITE"%d"CL_RESET"', IP: '"CL_WHITE"%s"CL_RESET"').\n", account_id, char_id, packet_ver, ip2str(session[fd]->client_addr, NULL));
|
||||||
WFIFOHEAD(fd,packet_len(0x6a));
|
WFIFOHEAD(fd,packet_len(0x6a));
|
||||||
WFIFOW(fd,0) = 0x6a;
|
WFIFOW(fd,0) = 0x6a;
|
||||||
WFIFOB(fd,2) = 5; // Your Game's EXE file is not the latest version
|
WFIFOB(fd,2) = 5; // Your Game's EXE file is not the latest version
|
||||||
@ -11518,15 +11522,9 @@ int clif_parse(int fd)
|
|||||||
|
|
||||||
cmd = RFIFOW(fd,0);
|
cmd = RFIFOW(fd,0);
|
||||||
|
|
||||||
// get packet version before to parse
|
// identify client's packet version
|
||||||
packet_ver = 0;
|
|
||||||
if (sd) {
|
if (sd) {
|
||||||
packet_ver = sd->packet_ver;
|
packet_ver = sd->packet_ver;
|
||||||
if (packet_ver < 0 || packet_ver > MAX_PACKET_VER) { // This should never happen unless we have some corrupted memory issues :X [Skotlex]
|
|
||||||
ShowWarning("clif_parse: Disconnecting session #%d (AID:%d/CID:%d) for having invalid packet_ver=%d.", fd, sd->status.account_id, sd->status.char_id, packet_ver);
|
|
||||||
set_eof(fd);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// check authentification packet to know packet version
|
// check authentification packet to know packet version
|
||||||
packet_ver = clif_guess_PacketVer(fd, 0, &err);
|
packet_ver = clif_guess_PacketVer(fd, 0, &err);
|
||||||
@ -12005,7 +12003,7 @@ static int packetdb_readdb(void)
|
|||||||
for(i=0;i<=MAX_PACKET_DB;i++){
|
for(i=0;i<=MAX_PACKET_DB;i++){
|
||||||
if (packet_db[packet_ver][i].func == clif_parse_func[j].func)
|
if (packet_db[packet_ver][i].func == clif_parse_func[j].func)
|
||||||
{
|
{
|
||||||
memset(&packet_db[packet_ver][i], 0, sizeof(struct packet_db));
|
memset(&packet_db[packet_ver][i], 0, sizeof(struct packet_db_t));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,12 +10,17 @@
|
|||||||
#define MAX_PACKET_DB 0x300
|
#define MAX_PACKET_DB 0x300
|
||||||
#define MAX_PACKET_VER 21
|
#define MAX_PACKET_VER 21
|
||||||
|
|
||||||
struct packet_db {
|
struct packet_db_t {
|
||||||
short len;
|
short len;
|
||||||
void (*func)(int, struct map_session_data *);
|
void (*func)(int, struct map_session_data *);
|
||||||
short pos[20];
|
short pos[20];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// packet_db[SERVER] is reserved for server use
|
||||||
|
#define SERVER 0
|
||||||
|
#define packet_len(x) packet_db[SERVER][x].len
|
||||||
|
extern struct packet_db_t packet_db[MAX_PACKET_VER + 1][MAX_PACKET_DB + 1];
|
||||||
|
|
||||||
// local define
|
// local define
|
||||||
enum send_target {
|
enum send_target {
|
||||||
ALL_CLIENT,
|
ALL_CLIENT,
|
||||||
@ -45,11 +50,6 @@ enum send_target {
|
|||||||
SELF,
|
SELF,
|
||||||
};
|
};
|
||||||
|
|
||||||
// packet_db[SERVER] is reserved for server use
|
|
||||||
#define SERVER 0
|
|
||||||
#define packet_len(x) packet_db[SERVER][x].len
|
|
||||||
extern struct packet_db packet_db[MAX_PACKET_VER + 1][MAX_PACKET_DB + 1];
|
|
||||||
|
|
||||||
int clif_setip(const char* ip);
|
int clif_setip(const char* ip);
|
||||||
void clif_setbindip(const char* ip);
|
void clif_setbindip(const char* ip);
|
||||||
void clif_setport(uint16 port);
|
void clif_setport(uint16 port);
|
||||||
|
@ -1824,9 +1824,11 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
|
|||||||
if (!battle_config.exp_calc_type && md->tdmg)
|
if (!battle_config.exp_calc_type && md->tdmg)
|
||||||
//jAthena's exp formula based on total damage.
|
//jAthena's exp formula based on total damage.
|
||||||
per = (double)md->dmglog[i].dmg/(double)md->tdmg;
|
per = (double)md->dmglog[i].dmg/(double)md->tdmg;
|
||||||
else
|
else {
|
||||||
//eAthena's exp formula based on max hp.
|
//eAthena's exp formula based on max hp.
|
||||||
per = (double)md->dmglog[i].dmg/(double)status->max_hp;
|
per = (double)md->dmglog[i].dmg/(double)status->max_hp;
|
||||||
|
if (per > 2) per = 2; // prevents unlimited exp gain
|
||||||
|
}
|
||||||
|
|
||||||
if (count>1 && battle_config.exp_bonus_attacker) {
|
if (count>1 && battle_config.exp_bonus_attacker) {
|
||||||
//Exp bonus per additional attacker.
|
//Exp bonus per additional attacker.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user