summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgepard1984 <gepard1984@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-01-17 18:06:34 +0000
committergepard1984 <gepard1984@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-01-17 18:06:34 +0000
commit95548cb1caad95933e2b36df9a13af070b733b04 (patch)
treeb9ce67cc8b45c6956528e5bb2935900b6d8ad441 /src
parenta09cc2371ac0a2534f514a35a5637614c11f6a37 (diff)
downloadhercules-95548cb1caad95933e2b36df9a13af070b733b04.tar.gz
hercules-95548cb1caad95933e2b36df9a13af070b733b04.tar.bz2
hercules-95548cb1caad95933e2b36df9a13af070b733b04.tar.xz
hercules-95548cb1caad95933e2b36df9a13af070b733b04.zip
Enabled Mersenne Twister MT19937 as random number generator instead of standard `rand()` function (follow-up to r14865, r14870).
- It fixes issues caused by RAND_MAX being only 32k in Windows system (bugreport:1927, bugreport:86). git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@15483 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src')
-rw-r--r--src/common/md5calc.c3
-rw-r--r--src/common/random.c2
-rw-r--r--src/login/login.c9
-rw-r--r--src/map/atcommand.c17
-rw-r--r--src/map/battle.c97
-rw-r--r--src/map/clif.c17
-rw-r--r--src/map/homunculus.c55
-rw-r--r--src/map/itemdb.c3
-rw-r--r--src/map/map.c15
-rw-r--r--src/map/mercenary.c5
-rw-r--r--src/map/mob.c61
-rw-r--r--src/map/party.c3
-rw-r--r--src/map/path.c3
-rw-r--r--src/map/pc.c21
-rw-r--r--src/map/pet.c15
-rw-r--r--src/map/script.c7
-rw-r--r--src/map/skill.c191
-rw-r--r--src/map/status.c21
-rw-r--r--src/map/unit.c3
19 files changed, 280 insertions, 268 deletions
diff --git a/src/common/md5calc.c b/src/common/md5calc.c
index 2178739d6..05fde42cc 100644
--- a/src/common/md5calc.c
+++ b/src/common/md5calc.c
@@ -6,6 +6,7 @@
*
***********************************************************/
+#include "../common/random.h"
#include "md5calc.h"
#include <string.h>
#include <stdio.h>
@@ -234,6 +235,6 @@ void MD5_Salt(unsigned int len, char * output)
{
unsigned int i;
for( i = 0; i < len; ++i )
- output[i] = (char)(1 + rand() % 255);
+ output[i] = (char)(1 + rnd() % 255);
}
diff --git a/src/common/random.c b/src/common/random.c
index b7f2c080c..6bdcaca2f 100644
--- a/src/common/random.c
+++ b/src/common/random.c
@@ -1,6 +1,7 @@
// Copyright (c) Athena Dev Teams - Licensed under GNU GPL
// For more information, see LICENCE in the main folder
+#include "../common/showmsg.h"
#include "../common/timer.h" // gettick
#include "random.h"
#if defined(WIN32)
@@ -30,6 +31,7 @@ void rnd_init(void)
seed += (uint32)gettid();
#endif // HAVE_GETTID
#endif
+ ShowInfo("Initializing random number generator.\n")
init_genrand(seed);
}
diff --git a/src/login/login.c b/src/login/login.c
index a8abef1c7..53f36c270 100644
--- a/src/login/login.c
+++ b/src/login/login.c
@@ -5,6 +5,7 @@
#include "../common/db.h"
#include "../common/malloc.h"
#include "../common/md5calc.h"
+#include "../common/random.h"
#include "../common/showmsg.h"
#include "../common/socket.h"
#include "../common/strlib.h"
@@ -1068,8 +1069,8 @@ int mmo_auth(struct login_session_data* sd)
// update session data
sd->account_id = acc.account_id;
- sd->login_id1 = rand();
- sd->login_id2 = rand();
+ sd->login_id1 = rnd();
+ sd->login_id2 = rnd();
safestrncpy(sd->lastlogin, acc.lastlogin, sizeof(sd->lastlogin));
sd->sex = acc.sex;
sd->level = acc.level;
@@ -1413,7 +1414,7 @@ int parse_login(int fd)
RFIFOSKIP(fd,2);
{
memset(sd->md5key, '\0', sizeof(sd->md5key));
- sd->md5keylen = (uint16)(12 + rand() % 4);
+ sd->md5keylen = (uint16)(12 + rnd() % 4);
MD5_Salt(sd->md5keylen, sd->md5key);
WFIFOHEAD(fd,4 + sd->md5keylen);
@@ -1730,7 +1731,7 @@ int do_init(int argc, char** argv)
login_config_read((argc > 1) ? argv[1] : LOGIN_CONF_NAME);
login_lan_config_read((argc > 2) ? argv[2] : LAN_CONF_NAME);
- srand((unsigned int)time(NULL));
+ rnd_init();
for( i = 0; i < ARRAYLENGTH(server); ++i )
chrif_server_init(i);
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 78cd7a6a9..d4353a5ab 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -8,6 +8,7 @@
#include "../common/core.h"
#include "../common/showmsg.h"
#include "../common/malloc.h"
+#include "../common/random.h"
#include "../common/socket.h"
#include "../common/strlib.h"
#include "../common/utils.h"
@@ -2600,11 +2601,11 @@ ACMD_FUNC(monstersmall)
for (i = 0; i < number; i++) {
int mx, my;
if (x <= 0)
- mx = sd->bl.x + (rand() % 11 - 5);
+ mx = sd->bl.x + (rnd() % 11 - 5);
else
mx = x;
if (y <= 0)
- my = sd->bl.y + (rand() % 11 - 5);
+ my = sd->bl.y + (rnd() % 11 - 5);
else
my = y;
count += (mob_once_spawn(sd, sd->bl.m, mx, my, name, mob_id, 1, "2") != 0) ? 1 : 0;
@@ -2676,11 +2677,11 @@ ACMD_FUNC(monsterbig)
for (i = 0; i < number; i++) {
int mx, my;
if (x <= 0)
- mx = sd->bl.x + (rand() % 11 - 5);
+ mx = sd->bl.x + (rnd() % 11 - 5);
else
mx = x;
if (y <= 0)
- my = sd->bl.y + (rand() % 11 - 5);
+ my = sd->bl.y + (rnd() % 11 - 5);
else
my = y;
count += (mob_once_spawn(sd, sd->bl.m, mx, my, name, mob_id, 1, "4") != 0) ? 1 : 0;
@@ -5137,7 +5138,7 @@ ACMD_FUNC(jail)
return -1;
}
- switch(rand() % 2) { //Jail Locations
+ switch(rnd() % 2) { //Jail Locations
case 0:
m_index = mapindex_name2id(MAP_JAIL);
x = 24;
@@ -5291,7 +5292,7 @@ ACMD_FUNC(jailfor)
}
//Jail locations, add more as you wish.
- switch(rand()%2)
+ switch(rnd()%2)
{
case 1: //Jail #1
m_index = mapindex_name2id(MAP_JAIL);
@@ -8257,8 +8258,8 @@ ACMD_FUNC(clone)
}
do {
- x = sd->bl.x + (rand() % 10 - 5);
- y = sd->bl.y + (rand() % 10 - 5);
+ x = sd->bl.x + (rnd() % 10 - 5);
+ y = sd->bl.y + (rnd() % 10 - 5);
} while (map_getcell(sd->bl.m,x,y,CELL_CHKNOPASS) && i++ < 10);
if (i >= 10) {
diff --git a/src/map/battle.c b/src/map/battle.c
index 6a1943e42..ed51c63fe 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -7,6 +7,7 @@
#include "../common/malloc.h"
#include "../common/showmsg.h"
#include "../common/ers.h"
+#include "../common/random.h"
#include "../common/strlib.h"
#include "../common/utils.h"
@@ -88,7 +89,7 @@ struct block_list* battle_gettargeted(struct block_list *target)
map_foreachinrange(battle_gettargeted_sub, target, AREA_SIZE, BL_CHAR, bl_list, &c, target->id);
if (c == 0 || c > 24)
return NULL;
- return bl_list[rand()%c];
+ return bl_list[rnd()%c];
}
@@ -140,7 +141,7 @@ struct block_list* battle_getenemy(struct block_list *target, int type, int rang
return NULL;
if( c >= 24 )
c = 23;
- return bl_list[rand()%c];
+ return bl_list[rnd()%c];
}
static int battle_getenemyarea_sub(struct block_list *bl, va_list ap)
{
@@ -177,7 +178,7 @@ struct block_list* battle_getenemyarea(struct block_list *src, int x, int y, int
return NULL;
if( c >= 24 )
c = 23;
- return bl_list[rand()%c];
+ return bl_list[rnd()%c];
}
// ƒ_??[ƒW‚Ì’x‰„
@@ -289,7 +290,7 @@ int battle_attr_fix(struct block_list *src, struct block_list *target, int damag
if (target) tsc = status_get_sc(target);
if (atk_elem < 0 || atk_elem >= ELE_MAX)
- atk_elem = rand()%ELE_MAX;
+ atk_elem = rnd()%ELE_MAX;
if (def_type < 0 || def_type > ELE_MAX ||
def_lv < 1 || def_lv > 4) {
@@ -398,14 +399,14 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
d->dmg_lv = ATK_BLOCK;
return 0;
}
- if( sc->data[SC_WEAPONBLOCKING] && flag&(BF_SHORT|BF_WEAPON) && rand()%100 < sc->data[SC_WEAPONBLOCKING]->val2 )
+ if( sc->data[SC_WEAPONBLOCKING] && flag&(BF_SHORT|BF_WEAPON) && rnd()%100 < sc->data[SC_WEAPONBLOCKING]->val2 )
{
clif_skill_nodamage(bl,src,GC_WEAPONBLOCKING,1,1);
d->dmg_lv = ATK_BLOCK;
sc_start2(bl,SC_COMBO,100,GC_WEAPONBLOCKING,src->id,2000);
return 0;
}
- if( (sce=sc->data[SC_AUTOGUARD]) && flag&BF_WEAPON && !(skill_get_nk(skill_num)&NK_NO_CARDFIX_ATK) && rand()%100 < sce->val2 )
+ if( (sce=sc->data[SC_AUTOGUARD]) && flag&BF_WEAPON && !(skill_get_nk(skill_num)&NK_NO_CARDFIX_ATK) && rnd()%100 < sce->val2 )
{
int delay;
clif_skill_nodamage(bl,bl,CR_AUTOGUARD,sce->val1,1);
@@ -418,12 +419,12 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
delay = 100;
unit_set_walkdelay(bl, gettick(), delay, 1);
- if(sc->data[SC_SHRINK] && rand()%100<5*sce->val1)
+ if(sc->data[SC_SHRINK] && rnd()%100<5*sce->val1)
skill_blown(bl,src,skill_get_blewcount(CR_SHRINK,1),-1,0);
return 0;
}
- if( (sce=sc->data[SC_PARRYING]) && flag&BF_WEAPON && skill_num != WS_CARTTERMINATION && rand()%100 < sce->val2 )
+ if( (sce=sc->data[SC_PARRYING]) && flag&BF_WEAPON && skill_num != WS_CARTTERMINATION && rnd()%100 < sce->val2 )
{ // attack blocked by Parrying
clif_skill_nodamage(bl, bl, LK_PARRYING, sce->val1,1);
return 0;
@@ -431,7 +432,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
if(sc->data[SC_DODGE] && ( !sc->opt1 || sc->opt1 == OPT1_BURNING ) &&
(flag&BF_LONG || sc->data[SC_SPURT])
- && rand()%100 < 20) {
+ && rnd()%100 < 20) {
if (sd && pc_issit(sd)) pc_setstand(sd); //Stand it to dodge.
clif_skill_nodamage(bl,bl,TK_DODGE,1,1);
if (!sc->data[SC_COMBO])
@@ -445,7 +446,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
if(sc->data[SC_TATAMIGAESHI] && (flag&(BF_MAGIC|BF_LONG)) == BF_LONG)
return 0;
- if((sce=sc->data[SC_KAUPE]) && rand()%100 < sce->val2)
+ if((sce=sc->data[SC_KAUPE]) && rnd()%100 < sce->val2)
{ //Kaupe blocks damage (skill or otherwise) from players, mobs, homuns, mercenaries.
clif_specialeffect(bl, 462, AREA);
//Shouldn't end until Breaker's non-weapon part connects.
@@ -455,7 +456,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
return 0;
}
- if( flag&BF_MAGIC && (sce=sc->data[SC_PRESTIGE]) && rand()%100 < sce->val2) {
+ if( flag&BF_MAGIC && (sce=sc->data[SC_PRESTIGE]) && rnd()%100 < sce->val2) {
clif_specialeffect(bl, 462, AREA); // Still need confirm it.
return 0;
}
@@ -553,7 +554,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
((TBL_PC *)src)->status.weapon == W_1HSWORD ||
((TBL_PC *)src)->status.weapon == W_2HSWORD
)) &&
- rand()%100 < sce->val2
+ rnd()%100 < sce->val2
){
damage = damage*50/100;
status_fix_damage(bl,src,damage,clif_damage(bl,src,gettick(),0,0,damage,0,0,0));
@@ -588,10 +589,10 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
//Probably not the most correct place, but it'll do here
//(since battle_drain is strictly for players currently)
if ((sce=sc->data[SC_BLOODLUST]) && flag&BF_WEAPON && damage > 0 &&
- rand()%100 < sce->val3)
+ rnd()%100 < sce->val3)
status_heal(src, damage*sce->val4/100, 0, 3);
- if( sd && (sce = sc->data[SC_FORCEOFVANGUARD]) && flag&BF_WEAPON && rand()%100 < sce->val2 )
+ if( sd && (sce = sc->data[SC_FORCEOFVANGUARD]) && flag&BF_WEAPON && rnd()%100 < sce->val2 )
pc_addspiritball(sd,skill_get_time(LG_FORCEOFVANGUARD,sce->val1),sce->val3);
}
@@ -625,7 +626,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
break;
}
}
- if( sc->data[SC_POISONINGWEAPON] && skill_num != GC_VENOMPRESSURE && (flag&BF_WEAPON) && damage > 0 && rand()%100 < sc->data[SC_POISONINGWEAPON]->val3 )
+ if( sc->data[SC_POISONINGWEAPON] && skill_num != GC_VENOMPRESSURE && (flag&BF_WEAPON) && damage > 0 && rnd()%100 < sc->data[SC_POISONINGWEAPON]->val3 )
sc_start(bl,sc->data[SC_POISONINGWEAPON]->val2,100,sc->data[SC_POISONINGWEAPON]->val1,skill_get_time2(GC_POISONINGWEAPON,sc->data[SC_POISONINGWEAPON]->val1));
}
@@ -783,7 +784,7 @@ static int battle_calc_drain(int damage, int rate, int per)
{
int diff = 0;
- if (per && rand()%1000 < rate) {
+ if (per && rnd()%1000 < rate) {
diff = (damage * per) / 100;
if (diff == 0) {
if (per > 0)
@@ -949,7 +950,7 @@ static int battle_calc_base_damage(struct status_data *status, struct weapon_atk
//Weapon Damage calculation
if (!(flag&1))
- damage = (atkmax>atkmin? rand()%(atkmax-atkmin):0)+atkmin;
+ damage = (atkmax>atkmin? rnd()%(atkmax-atkmin):0)+atkmin;
else
damage = atkmax;
@@ -957,7 +958,7 @@ static int battle_calc_base_damage(struct status_data *status, struct weapon_atk
{
//rodatazone says the range is 0~arrow_atk-1 for non crit
if (flag&2 && sd->arrow_atk)
- damage += ((flag&1)?sd->arrow_atk:rand()%sd->arrow_atk);
+ damage += ((flag&1)?sd->arrow_atk:rnd()%sd->arrow_atk);
//SizeFix only for players
if (!(sd->special_state.no_sizefix || (flag&8)))
@@ -977,12 +978,12 @@ static int battle_calc_base_damage(struct status_data *status, struct weapon_atk
if(sd) {
if (type == EQI_HAND_L) {
if(sd->left_weapon.overrefine)
- damage += rand()%sd->left_weapon.overrefine+1;
+ damage += rnd()%sd->left_weapon.overrefine+1;
if (sd->weapon_atk_rate[sd->weapontype2])
damage += damage*sd->weapon_atk_rate[sd->weapontype2]/100;;
} else { //Right hand
if(sd->right_weapon.overrefine)
- damage += rand()%sd->right_weapon.overrefine+1;
+ damage += rnd()%sd->right_weapon.overrefine+1;
if (sd->weapon_atk_rate[sd->weapontype1])
damage += damage*sd->weapon_atk_rate[sd->weapontype1]/100;;
}
@@ -1184,7 +1185,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
} else //Range for normal attacks.
wd.flag |= flag.arrow?BF_LONG:BF_SHORT;
- if ( (!skill_num || skill_num == PA_SACRIFICE) && tstatus->flee2 && rand()%1000 < tstatus->flee2 )
+ if ( (!skill_num || skill_num == PA_SACRIFICE) && tstatus->flee2 && rnd()%1000 < tstatus->flee2 )
{ //Check for Lucky Dodge
wd.type=0x0b;
wd.dmg_lv=ATK_LUCKY;
@@ -1206,7 +1207,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
else if( s_ele == -2 ) //Use enchantment's element
s_ele = s_ele_ = status_get_attack_sc_element(src,sc);
else if( s_ele == -3 ) //Use random element
- s_ele = s_ele_ = rand()%ELE_MAX;
+ s_ele = s_ele_ = rnd()%ELE_MAX;
switch( skill_num )
{
case GS_GROUNDDRIFT:
@@ -1233,13 +1234,13 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
if( ( ( skill_lv = pc_checkskill(sd,TF_DOUBLE) ) > 0 && sd->weapontype1 == W_DAGGER )
|| ( sd->double_rate > 0 && sd->weapontype1 != W_FIST ) ) //Will fail bare-handed
{ //Success chance is not added, the higher one is used [Skotlex]
- if( rand()%100 < ( 5*skill_lv > sd->double_rate ? 5*skill_lv : sd->double_rate ) )
+ if( rnd()%100 < ( 5*skill_lv > sd->double_rate ? 5*skill_lv : sd->double_rate ) )
{
wd.div_ = skill_get_num(TF_DOUBLE,skill_lv?skill_lv:1);
wd.type = 0x08;
}
}
- else if( sd->weapontype1 == W_REVOLVER && (skill_lv = pc_checkskill(sd,GS_CHAINACTION)) > 0 && rand()%100 < 5*skill_lv )
+ else if( sd->weapontype1 == W_REVOLVER && (skill_lv = pc_checkskill(sd,GS_CHAINACTION)) > 0 && rnd()%100 < 5*skill_lv )
{
wd.div_ = skill_get_num(GS_CHAINACTION,skill_lv);
wd.type = 0x08;
@@ -1288,7 +1289,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
}
if(tsd && tsd->critical_def)
cri = cri*(100-tsd->critical_def)/100;
- if (rand()%1000 < cri)
+ if (rnd()%1000 < cri)
flag.cri= 1;
}
if (flag.cri)
@@ -1296,7 +1297,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
wd.type = 0x0a;
flag.idef = flag.idef2 = flag.hit = 1;
} else { //Check for Perfect Hit
- if(sd && sd->perfect_hit > 0 && rand()%100 < sd->perfect_hit)
+ if(sd && sd->perfect_hit > 0 && rnd()%100 < sd->perfect_hit)
flag.hit = 1;
if (sc && sc->data[SC_FUSION]) {
flag.hit = 1; //SG_FUSION always hit [Komurka]
@@ -1392,7 +1393,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
hitrate = cap_value(hitrate, battle_config.min_hitrate, battle_config.max_hitrate);
- if(rand()%100 >= hitrate)
+ if(rnd()%100 >= hitrate)
wd.dmg_lv = ATK_FLEE;
else
flag.hit = 1;
@@ -1921,7 +1922,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
skillratio += 400 + 50 * skill_lv;
if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
if( tsc && (tsc->data[SC_BITE] || tsc->data[SC_ANKLE] || tsc->data[SC_ELECTRICSHOCKER]) )
- wd.div_ = tstatus->size + 2 + rand()%2;
+ wd.div_ = tstatus->size + 2 + rnd()%2;
break;
case RA_CLUSTERBOMB:
skillratio += 100 + 100 * skill_lv;
@@ -2069,7 +2070,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
break;
case GS_MAGICALBULLET:
if(sstatus->matk_max>sstatus->matk_min) {
- ATK_ADD(sstatus->matk_min+rand()%(sstatus->matk_max-sstatus->matk_min));
+ ATK_ADD(sstatus->matk_min+rnd()%(sstatus->matk_max-sstatus->matk_min));
} else {
ATK_ADD(sstatus->matk_min);
}
@@ -2228,7 +2229,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
if (tsd) //Sd vit-eq
{ //[VIT*0.5] + rnd([VIT*0.3], max([VIT*0.3],[VIT^2/150]-1))
vit_def = def2*(def2-15)/150;
- vit_def = def2/2 + (vit_def>0?rand()%vit_def:0);
+ vit_def = def2/2 + (vit_def>0?rnd()%vit_def:0);
if((battle_check_undead(sstatus->race,sstatus->def_ele) || sstatus->race==RC_DEMON) && //This bonus already doesnt work vs players
src->type == BL_MOB && (skill=pc_checkskill(tsd,AL_DP)) > 0)
@@ -2239,7 +2240,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
} else { //Mob-Pet vit-eq
//VIT + rnd(0,[VIT/20]^2-1)
vit_def = (def2/20)*(def2/20);
- vit_def = def2 + (vit_def>0?rand()%vit_def:0);
+ vit_def = def2 + (vit_def>0?rnd()%vit_def:0);
}
if (battle_config.weapon_defense_type) {
@@ -2743,7 +2744,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
else if (s_ele == -2) //Use status element
s_ele = status_get_attack_sc_element(src,status_get_sc(src));
else if( s_ele == -3 ) //Use random element
- s_ele = rand()%ELE_MAX;
+ s_ele = rnd()%ELE_MAX;
//Set miscellaneous data that needs be filled
if(sd) {
@@ -2798,7 +2799,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
i = 20*skill_lv + sstatus->luk + sstatus->int_ + status_get_lv(src)
+ 200 - 200*tstatus->hp/tstatus->max_hp;
if(i > 700) i = 700;
- if(rand()%1000 < i && !(tstatus->mode&MD_BOSS))
+ if(rnd()%1000 < i && !(tstatus->mode&MD_BOSS))
ad.damage = tstatus->hp;
else
ad.damage = status_get_lv(src) + sstatus->int_ + skill_lv * 10;
@@ -2823,10 +2824,10 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
* -> statusMATK holds the %Matk modifier stuff from earlier and lastly:
* -> the mdef part is not applied at this point, but later.
**/ //1:bugreport:5101 //1:bugreport:5101
- MATK_ADD((1+sstatus->matk_max) * 2 + 15/10 * sstatus->matk_min + rand()% ( sstatus->matk_max + (1 + (sstatus->matk_max*sstatus->wlv) / 10 * 2 + 10/15 * sstatus->matk_min ) ));
+ MATK_ADD((1+sstatus->matk_max) * 2 + 15/10 * sstatus->matk_min + rnd()% ( sstatus->matk_max + (1 + (sstatus->matk_max*sstatus->wlv) / 10 * 2 + 10/15 * sstatus->matk_min ) ));
#else //Ancient MATK Appliance
if (sstatus->matk_max > sstatus->matk_min) {
- MATK_ADD(sstatus->matk_min+rand()%(1+sstatus->matk_max-sstatus->matk_min));
+ MATK_ADD(sstatus->matk_min+rnd()%(1+sstatus->matk_max-sstatus->matk_min));
} else {
MATK_ADD(sstatus->matk_min);
}
@@ -3314,7 +3315,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
if (s_ele < 0 && s_ele != -3) //Attack that takes weapon's element for misc attacks? Make it neutral [Skotlex]
s_ele = ELE_NEUTRAL;
else if (s_ele == -3) //Use random element
- s_ele = rand()%ELE_MAX;
+ s_ele = rnd()%ELE_MAX;
//Skill Range Criteria
md.flag |= battle_range_type(src, target, skill_num, skill_lv);
@@ -3365,14 +3366,14 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
md.damage=3;
break;
case NPC_DARKBREATH:
- md.damage = 500 + (skill_lv-1)*1000 + rand()%1000;
+ md.damage = 500 + (skill_lv-1)*1000 + rnd()%1000;
if(md.damage > 9999) md.damage = 9999;
break;
case PA_PRESSURE:
md.damage=500+300*skill_lv;
break;
case PA_GOSPEL:
- md.damage = 1+rand()%9999;
+ md.damage = 1+rnd()%9999;
break;
case CR_ACIDDEMONSTRATION: // updated the formula based on a Japanese formula found to be exact [Reddozen]
if(tstatus->vit+sstatus->int_) //crash fix
@@ -3388,7 +3389,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
case NJ_ZENYNAGE:
md.damage = skill_get_zeny(skill_num ,skill_lv);
if (!md.damage) md.damage = 2;
- md.damage = md.damage + rand()%md.damage;
+ md.damage = md.damage + rnd()%md.damage;
if (is_boss(target))
md.damage=md.damage/3;
else if (tsd)
@@ -3401,7 +3402,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
md.damage = sstatus->max_hp * (50 + 50 * skill_lv) / 100 ;
break ;
case ASC_BREAKER:
- md.damage = 500+rand()%500 + 5*skill_lv * sstatus->int_;
+ md.damage = 500+rnd()%500 + 5*skill_lv * sstatus->int_;
nk|=NK_IGNORE_FLEE|NK_NO_ELEFIX; //These two are not properties of the weapon based part.
break;
case HW_GRAVITATION:
@@ -3477,7 +3478,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
hitrate+= sstatus->hit - flee;
hitrate = cap_value(hitrate, battle_config.min_hitrate, battle_config.max_hitrate);
- if(rand()%100 < hitrate)
+ if(rnd()%100 < hitrate)
i = 1;
}
if (!i) {
@@ -3670,7 +3671,7 @@ void battle_drain(TBL_PC *sd, struct block_list *tbl, int rdamage, int ldamage,
}
}
- if (sd->sp_vanish_rate && rand()%1000 < sd->sp_vanish_rate)
+ if (sd->sp_vanish_rate && rnd()%1000 < sd->sp_vanish_rate)
status_percent_damage(&sd->bl, tbl, 0, (unsigned char)sd->sp_vanish_per, false);
if (!thp && !tsp) return;
@@ -3821,7 +3822,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
triple_rate+= triple_rate*(sc->data[SC_SKILLRATE_UP]->val2)/100;
status_change_end(src, SC_SKILLRATE_UP, INVALID_TIMER);
}
- if (rand()%100 < triple_rate)
+ if (rnd()%100 < triple_rate)
//FIXME: invalid return type!
return (damage_lv)skill_attack(BF_WEAPON,src,src,target,MO_TRIPLEATTACK,skillv,tick,0);
}
@@ -3867,10 +3868,10 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
damage = wd.damage + wd.damage2;
if( damage > 0 && src != target )
{
- if( sc && sc->data[SC_DUPLELIGHT] && (wd.flag&BF_SHORT) && rand()%100 <= 10+2*sc->data[SC_DUPLELIGHT]->val1 )
+ if( sc && sc->data[SC_DUPLELIGHT] && (wd.flag&BF_SHORT) && rnd()%100 <= 10+2*sc->data[SC_DUPLELIGHT]->val1 )
{ // Activates it only from melee damage
int skillid;
- if( rand()%2 == 1 )
+ if( rnd()%2 == 1 )
skillid = AB_DUPLELIGHT_MELEE;
else
skillid = AB_DUPLELIGHT_MAGIC;
@@ -3916,11 +3917,11 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
status_change_end(target, SC_DEVOTION, INVALID_TIMER);
}
- if (sc && sc->data[SC_AUTOSPELL] && rand()%100 < sc->data[SC_AUTOSPELL]->val4) {
+ if (sc && sc->data[SC_AUTOSPELL] && rnd()%100 < sc->data[SC_AUTOSPELL]->val4) {
int sp = 0;
int skillid = sc->data[SC_AUTOSPELL]->val2;
int skilllv = sc->data[SC_AUTOSPELL]->val3;
- int i = rand()%100;
+ int i = rnd()%100;
if (sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_SAGE)
i = 0; //Max chance, no skilllv reduction. [Skotlex]
if (i >= 50) skilllv -= 2;
@@ -3958,7 +3959,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
if (tsc) {
if (tsc->data[SC_POISONREACT] &&
- (rand()%100 < tsc->data[SC_POISONREACT]->val3
+ (rnd()%100 < tsc->data[SC_POISONREACT]->val3
|| sstatus->def_ele == ELE_POISON) &&
// check_distance_bl(src, target, tstatus->rhw.range+1) && Doesn't checks range! o.O;
status_check_skilluse(target, src, TF_POISON, 0)
diff --git a/src/map/clif.c b/src/map/clif.c
index 52bd467ec..48aca796d 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -8,6 +8,7 @@
#include "../common/malloc.h"
#include "../common/version.h"
#include "../common/nullpo.h"
+#include "../common/random.h"
#include "../common/showmsg.h"
#include "../common/strlib.h"
#include "../common/utils.h"
@@ -2082,7 +2083,7 @@ static void clif_addcards(unsigned char* buf, struct item* item)
}
//Client only receives four cards.. so randomly send them a set of cards. [Skotlex]
if( MAX_SLOTS > 4 && (j = itemdb_slot(item->nameid)) > 4 )
- i = rand()%(j-3); //eg: 6 slots, possible i values: 0->3, 1->4, 2->5 => i = rand()%3;
+ i = rnd()%(j-3); //eg: 6 slots, possible i values: 0->3, 1->4, 2->5 => i = rnd()%3;
//Normal items.
if( item->card[i] > 0 && (j=itemdb_viewid(item->card[i])) > 0 )
@@ -4088,8 +4089,8 @@ int clif_damage(struct block_list* src, struct block_list* dst, unsigned int tic
sc = status_get_sc(dst);
if(sc && sc->count) {
if(sc->data[SC_HALLUCINATION]) {
- if(damage) damage = damage*(sc->data[SC_HALLUCINATION]->val2) + rand()%100;
- if(damage2) damage2 = damage2*(sc->data[SC_HALLUCINATION]->val2) + rand()%100;
+ if(damage) damage = damage*(sc->data[SC_HALLUCINATION]->val2) + rnd()%100;
+ if(damage2) damage2 = damage2*(sc->data[SC_HALLUCINATION]->val2) + rnd()%100;
}
}
@@ -4744,7 +4745,7 @@ int clif_skill_damage(struct block_list *src,struct block_list *dst,unsigned int
sc = status_get_sc(dst);
if(sc && sc->count) {
if(sc->data[SC_HALLUCINATION] && damage)
- damage = damage*(sc->data[SC_HALLUCINATION]->val2) + rand()%100;
+ damage = damage*(sc->data[SC_HALLUCINATION]->val2) + rnd()%100;
}
#if PACKETVER < 3
@@ -4833,7 +4834,7 @@ int clif_skill_damage2(struct block_list *src,struct block_list *dst,unsigned in
if(sc && sc->count) {
if(sc->data[SC_HALLUCINATION] && damage)
- damage = damage*(sc->data[SC_HALLUCINATION]->val2) + rand()%100;
+ damage = damage*(sc->data[SC_HALLUCINATION]->val2) + rnd()%100;
}
WBUFW(buf,0)=0x115;
@@ -9600,7 +9601,7 @@ void clif_parse_Emotion(int fd, struct map_session_data *sd)
if(battle_config.client_reshuffle_dice && emoticon>=E_DICE1 && emoticon<=E_DICE6)
{// re-roll dice
- emoticon = rand()%6+E_DICE1;
+ emoticon = rnd()%6+E_DICE1;
}
clif_emotion(&sd->bl, emoticon);
@@ -14671,7 +14672,7 @@ void clif_mercenary_updatestatus(struct map_session_data *sd, int type)
{
case SP_ATK1:
{
- int atk = rand()%(status->rhw.atk2 - status->rhw.atk + 1) + status->rhw.atk;
+ int atk = rnd()%(status->rhw.atk2 - status->rhw.atk + 1) + status->rhw.atk;
WFIFOL(fd,4) = cap_value(atk, 0, INT16_MAX);
}
break;
@@ -14741,7 +14742,7 @@ void clif_mercenary_info(struct map_session_data *sd)
WFIFOL(fd,2) = md->bl.id;
// Mercenary shows ATK as a random value between ATK ~ ATK2
- atk = rand()%(status->rhw.atk2 - status->rhw.atk + 1) + status->rhw.atk;
+ atk = rnd()%(status->rhw.atk2 - status->rhw.atk + 1) + status->rhw.atk;
WFIFOW(fd,6) = cap_value(atk, 0, INT16_MAX);
WFIFOW(fd,8) = cap_value(status->matk_max, 0, INT16_MAX);
WFIFOW(fd,10) = status->hit;
diff --git a/src/map/homunculus.c b/src/map/homunculus.c
index 31cb5b012..d7f1c5f0c 100644
--- a/src/map/homunculus.c
+++ b/src/map/homunculus.c
@@ -7,6 +7,7 @@
#include "../common/timer.h"
#include "../common/nullpo.h"
#include "../common/mmo.h"
+#include "../common/random.h"
#include "../common/showmsg.h"
#include "../common/strlib.h"
#include "../common/utils.h"
@@ -38,10 +39,6 @@
#include <string.h>
#include <math.h>
-
-//Better equiprobability than rand()% [orn]
-#define rand(a, b) (a+(int) ((float)(b-a+1)*rand()/(RAND_MAX+1.0)))
-
struct s_homunculus_db homunculus_db[MAX_HOMUNCULUS_CLASS]; //[orn]
struct skill_tree_entry hskill_tree[MAX_HOMUNCULUS_CLASS][MAX_SKILL_TREE];
@@ -233,14 +230,14 @@ int merc_hom_levelup(struct homun_data *hd)
max = &hd->homunculusDB->gmax;
min = &hd->homunculusDB->gmin;
- growth_max_hp = rand(min->HP, max->HP);
- growth_max_sp = rand(min->SP, max->SP);
- growth_str = rand(min->str, max->str);
- growth_agi = rand(min->agi, max->agi);
- growth_vit = rand(min->vit, max->vit);
- growth_dex = rand(min->dex, max->dex);
- growth_int = rand(min->int_,max->int_);
- growth_luk = rand(min->luk, max->luk);
+ growth_max_hp = rnd_value(min->HP, max->HP);
+ growth_max_sp = rnd_value(min->SP, max->SP);
+ growth_str = rnd_value(min->str, max->str);
+ growth_agi = rnd_value(min->agi, max->agi);
+ growth_vit = rnd_value(min->vit, max->vit);
+ growth_dex = rnd_value(min->dex, max->dex);
+ growth_int = rnd_value(min->int_,max->int_);
+ growth_luk = rnd_value(min->luk, max->luk);
//Aegis discards the decimals in the stat growth values!
growth_str-=growth_str%10;
@@ -308,14 +305,14 @@ int merc_hom_evolution(struct homun_data *hd)
hom = &hd->homunculus;
max = &hd->homunculusDB->emax;
min = &hd->homunculusDB->emin;
- hom->max_hp += rand(min->HP, max->HP);
- hom->max_sp += rand(min->SP, max->SP);
- hom->str += 10*rand(min->str, max->str);
- hom->agi += 10*rand(min->agi, max->agi);
- hom->vit += 10*rand(min->vit, max->vit);
- hom->int_+= 10*rand(min->int_,max->int_);
- hom->dex += 10*rand(min->dex, max->dex);
- hom->luk += 10*rand(min->luk, max->luk);
+ hom->max_hp += rnd_value(min->HP, max->HP);
+ hom->max_sp += rnd_value(min->SP, max->SP);
+ hom->str += 10*rnd_value(min->str, max->str);
+ hom->agi += 10*rnd_value(min->agi, max->agi);
+ hom->vit += 10*rnd_value(min->vit, max->vit);
+ hom->int_+= 10*rnd_value(min->int_,max->int_);
+ hom->dex += 10*rnd_value(min->dex, max->dex);
+ hom->luk += 10*rnd_value(min->luk, max->luk);
hom->intimacy = 500;
unit_remove_map(&hd->bl, CLR_OUTSIGHT);
@@ -651,7 +648,7 @@ int merc_call_homunculus(struct map_session_data *sd)
struct homun_data *hd;
if (!sd->status.hom_id) //Create a new homun.
- return merc_create_homunculus_request(sd, HM_CLASS_BASE + rand(0, 7)) ;
+ return merc_create_homunculus_request(sd, HM_CLASS_BASE + rnd_value(0, 7)) ;
// If homunc not yet loaded, load it
if (!sd->hd)
@@ -859,14 +856,14 @@ int merc_hom_shuffle(struct homun_data *hd)
//Evolved bonuses
struct s_homunculus *hom = &hd->homunculus;
struct h_stats *max = &hd->homunculusDB->emax, *min = &hd->homunculusDB->emin;
- hom->max_hp += rand(min->HP, max->HP);
- hom->max_sp += rand(min->SP, max->SP);
- hom->str += 10*rand(min->str, max->str);
- hom->agi += 10*rand(min->agi, max->agi);
- hom->vit += 10*rand(min->vit, max->vit);
- hom->int_+= 10*rand(min->int_,max->int_);
- hom->dex += 10*rand(min->dex, max->dex);
- hom->luk += 10*rand(min->luk, max->luk);
+ hom->max_hp += rnd_value(min->HP, max->HP);
+ hom->max_sp += rnd_value(min->SP, max->SP);
+ hom->str += 10*rnd_value(min->str, max->str);
+ hom->agi += 10*rnd_value(min->agi, max->agi);
+ hom->vit += 10*rnd_value(min->vit, max->vit);
+ hom->int_+= 10*rnd_value(min->int_,max->int_);
+ hom->dex += 10*rnd_value(min->dex, max->dex);
+ hom->luk += 10*rnd_value(min->luk, max->luk);
}
hd->homunculus.exp = exp;
diff --git a/src/map/itemdb.c b/src/map/itemdb.c
index 972d351a5..3c2e75810 100644
--- a/src/map/itemdb.c
+++ b/src/map/itemdb.c
@@ -3,6 +3,7 @@
#include "../common/nullpo.h"
#include "../common/malloc.h"
+#include "../common/random.h"
#include "../common/showmsg.h"
#include "../common/strlib.h"
#include "itemdb.h"
@@ -144,7 +145,7 @@ int itemdb_searchrandomid(int group)
return UNKNOWN_ITEM_ID;
}
if (itemgroup_db[group].qty)
- return itemgroup_db[group].nameid[rand()%itemgroup_db[group].qty];
+ return itemgroup_db[group].nameid[rnd()%itemgroup_db[group].qty];
ShowError("itemdb_searchrandomid: No item entries for group id %d\n", group);
return UNKNOWN_ITEM_ID;
diff --git a/src/map/map.c b/src/map/map.c
index c433857ec..fee813241 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -10,6 +10,7 @@
#include "../common/showmsg.h"
#include "../common/version.h"
#include "../common/nullpo.h"
+#include "../common/random.h"
#include "../common/strlib.h"
#include "../common/utils.h"
@@ -1270,7 +1271,7 @@ int map_searchrandfreecell(int m,int *x,int *y,int stack)
}
if(free_cell==0)
return 0;
- free_cell = rand()%free_cell;
+ free_cell = rnd()%free_cell;
*x = free_cells[free_cell][0];
*y = free_cells[free_cell][1];
return 1;
@@ -1331,8 +1332,8 @@ int map_search_freecell(struct block_list *src, int m, short *x,short *y, int rx
}
while(tries--) {
- *x = (rx >= 0)?(rand()%rx2-rx+bx):(rand()%(map[m].xs-2)+1);
- *y = (ry >= 0)?(rand()%ry2-ry+by):(rand()%(map[m].ys-2)+1);
+ *x = (rx >= 0)?(rnd()%rx2-rx+bx):(rnd()%(map[m].xs-2)+1);
+ *y = (ry >= 0)?(rnd()%ry2-ry+by):(rnd()%(map[m].ys-2)+1);
if (*x == bx && *y == by)
continue; //Avoid picking the same target tile.
@@ -1373,7 +1374,7 @@ int map_addflooritem(struct item *item_data,int amount,int m,int x,int y,int fir
if(!map_searchrandfreecell(m,&x,&y,flags&2?1:0))
return 0;
- r=rand();
+ r=rnd();
CREATE(fitem, struct flooritem_data, 1);
fitem->bl.type=BL_ITEM;
@@ -2310,8 +2311,8 @@ int map_random_dir(struct block_list *bl, short *x, short *y)
if (dist < 1) dist =1;
do {
- j = 1 + 2*(rand()%4); //Pick a random diagonal direction
- segment = 1+(rand()%dist); //Pick a random interval from the whole vector in that direction
+ j = 1 + 2*(rnd()%4); //Pick a random diagonal direction
+ segment = 1+(rnd()%dist); //Pick a random interval from the whole vector in that direction
xi = bl->x + segment*dirx[j];
segment = (short)sqrt((float)(dist2 - segment*segment)); //The complement of the previously picked segment
yi = bl->y + segment*diry[j];
@@ -3628,7 +3629,7 @@ int do_init(int argc, char *argv[])
MSG_CONF_NAME = "conf/msg_athena.conf";
GRF_PATH_FILENAME = "conf/grf-files.txt";
- srand(gettick());
+ rnd_init();
for( i = 1; i < argc ; i++ )
{
diff --git a/src/map/mercenary.c b/src/map/mercenary.c
index 6e4ff24a5..be1660046 100644
--- a/src/map/mercenary.c
+++ b/src/map/mercenary.c
@@ -7,6 +7,7 @@
#include "../common/timer.h"
#include "../common/nullpo.h"
#include "../common/mmo.h"
+#include "../common/random.h"
#include "../common/showmsg.h"
#include "../common/strlib.h"
#include "../common/utils.h"
@@ -368,9 +369,9 @@ int mercenary_dead(struct mercenary_data *md, struct block_list *src)
int mercenary_killbonus(struct mercenary_data *md)
{
const enum sc_type scs[] = { SC_MERC_FLEEUP, SC_MERC_ATKUP, SC_MERC_HPUP, SC_MERC_SPUP, SC_MERC_HITUP };
- int index = rand() % ARRAYLENGTH(scs);
+ int index = rnd() % ARRAYLENGTH(scs);
- status_change_start(&md->bl, scs[index], 10000, rand()%5, 0, 0, 0, 600000, 0);
+ status_change_start(&md->bl, scs[index], 10000, rnd()%5, 0, 0, 0, 600000, 0);
return 0;
}
diff --git a/src/map/mob.c b/src/map/mob.c
index 1ddc9a662..3d48ba9ba 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -8,6 +8,7 @@
#include "../common/malloc.h"
#include "../common/showmsg.h"
#include "../common/ers.h"
+#include "../common/random.h"
#include "../common/strlib.h"
#include "../common/utils.h"
#include "../common/socket.h"
@@ -261,13 +262,13 @@ int mob_get_random_id(int type, int flag, int lv)
}
do {
if (type)
- class_ = summon[type].class_[rand()%summon[type].qty];
+ class_ = summon[type].class_[rnd()%summon[type].qty];
else //Dead branch
- class_ = rand() % MAX_MOB_DB;
+ class_ = rnd() % MAX_MOB_DB;
mob = mob_db(class_);
} while ((mob == mob_dummy ||
mob_is_clone(class_) ||
- (flag&1 && mob->summonper[type] <= rand() % 1000000) ||
+ (flag&1 && mob->summonper[type] <= rnd() % 1000000) ||
(flag&2 && lv < mob->lv) ||
(flag&4 && mob->status.mode&MD_BOSS) ||
(flag&8 && mob->spawn[0].qty < 1)
@@ -480,8 +481,8 @@ int mob_once_spawn_area(struct map_session_data* sd,int m,int x0,int y0,int x1,i
// find a suitable map cell
do {
- x = rand()%(x1-x0+1)+x0;
- y = rand()%(y1-y0+1)+y0;
+ x = rnd()%(x1-x0+1)+x0;
+ y = rnd()%(y1-y0+1)+y0;
j++;
} while( map_getcell(m,x,y,CELL_CHKNOPASS) && j < max );
@@ -797,7 +798,7 @@ int mob_setdelayspawn(struct mob_data *md)
spawntime = md->spawn->delay1; //Base respawn time
if (md->spawn->delay2) //random variance
- spawntime+= rand()%md->spawn->delay2;
+ spawntime+= rnd()%md->spawn->delay2;
//Apply the spawn delay fix [Skotlex]
db = mob_db(md->spawn->class_);
@@ -891,7 +892,7 @@ int mob_spawn (struct mob_data *md)
md->state.aggressive = md->status.mode&MD_ANGRY?1:0;
md->state.skillstate = MSS_IDLE;
- md->next_walktime = tick+rand()%5000+1000;
+ md->next_walktime = tick+rnd()%5000+1000;
md->last_linktime = tick;
md->last_pcneartime = 0;
@@ -1213,14 +1214,14 @@ int mob_unlocktarget(struct mob_data *md, unsigned int tick)
DIFF_TICK(md->next_walktime, tick) <= 0 &&
!mob_randomwalk(md,tick))
//Delay next random walk when this one failed.
- md->next_walktime=tick+rand()%3000;
+ md->next_walktime=tick+rnd()%3000;
break;
default:
mob_stop_attack(md);
if (battle_config.mob_ai&0x8)
mob_stop_walking(md,1); //Immediately stop chasing.
md->state.skillstate = MSS_IDLE;
- md->next_walktime=tick+rand()%3000+3000;
+ md->next_walktime=tick+rnd()%3000+3000;
break;
}
if (md->target_id) {
@@ -1248,7 +1249,7 @@ int mob_randomwalk(struct mob_data *md,unsigned int tick)
d =12-md->move_fail_count;
if(d<5) d=5;
for(i=0;i<retrycount;i++){ // Search of a movable place
- int r=rand();
+ int r=rnd();
x=r%(d*2+1)-d;
y=r/(d*2+1)%(d*2+1)-d;
x+=md->bl.x;
@@ -1276,7 +1277,7 @@ int mob_randomwalk(struct mob_data *md,unsigned int tick)
}
md->state.skillstate=MSS_WALK;
md->move_fail_count=0;
- md->next_walktime = tick+rand()%3000+3000+c;
+ md->next_walktime = tick+rnd()%3000+3000+c;
return 1;
}
@@ -1373,7 +1374,7 @@ static bool mob_ai_sub_hard(struct mob_data *md, unsigned int tick)
)
&& md->state.attacked_count++ >= RUDE_ATTACKED_COUNT
&& !mobskill_use(md, tick, MSC_RUDEATTACKED) // If can't rude Attack
- && can_move && unit_escape(&md->bl, tbl, rand()%10 +1)) // Attempt escape
+ && can_move && unit_escape(&md->bl, tbl, rnd()%10 +1)) // Attempt escape
{ //Escaped
md->attacked_id = 0;
return true;
@@ -1395,7 +1396,7 @@ static bool mob_ai_sub_hard(struct mob_data *md, unsigned int tick)
{ // Rude attacked
if (md->state.attacked_count++ >= RUDE_ATTACKED_COUNT
&& !mobskill_use(md, tick, MSC_RUDEATTACKED) && can_move
- && !tbl && unit_escape(&md->bl, abl, rand()%10 +1))
+ && !tbl && unit_escape(&md->bl, abl, rnd()%10 +1))
{ //Escaped.
//TODO: Maybe it shouldn't attempt to run if it has another, valid target?
md->attacked_id = 0;
@@ -1635,15 +1636,15 @@ static int mob_ai_sub_lazy(struct mob_data *md, va_list args)
{
if( map[md->bl.m].users > 0 )
{
- if( rand()%1000 < MOB_LAZYMOVEPERC(md) )
+ if( rnd()%1000 < MOB_LAZYMOVEPERC(md) )
mob_randomwalk(md, tick);
else
- if( rand()%1000 < MOB_LAZYSKILLPERC ) //Chance to do a mob's idle skill.
+ if( rnd()%1000 < MOB_LAZYSKILLPERC ) //Chance to do a mob's idle skill.
mobskill_use(md, tick, -1);
}
else
{
- if( rand()%1000 < MOB_LAZYMOVEPERC(md) )
+ if( rnd()%1000 < MOB_LAZYMOVEPERC(md) )
mob_randomwalk(md, tick);
}
}
@@ -2127,9 +2128,9 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
if(battle_config.zeny_from_mobs && md->level) {
// zeny calculation moblv + random moblv [Valaris]
- zeny=(int) ((md->level+rand()%md->level)*per*bonus/100.);
+ zeny=(int) ((md->level+rnd()%md->level)*per*bonus/100.);
if(md->db->mexp > 0)
- zeny*=rand()%250;
+ zeny*=rnd()%250;
}
if (map[m].flag.nobaseexp || !md->db->base_exp)
@@ -2256,7 +2257,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
drop_rate = drop_rate * drop_modifier / 100;
#endif
// attempt to drop the item
- if (rand() % 10000 >= drop_rate)
+ if (rnd() % 10000 >= drop_rate)
continue;
if( mvp_sd && it->type == IT_PETEGG ) {
@@ -2279,7 +2280,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
}
// Ore Discovery [Celest]
- if (sd == mvp_sd && pc_checkskill(sd,BS_FINDINGORE)>0 && battle_config.finding_ore_rate/10 >= rand()%10000) {
+ if (sd == mvp_sd && pc_checkskill(sd,BS_FINDINGORE)>0 && battle_config.finding_ore_rate/10 >= rnd()%10000) {
ditem = mob_setdropitem(itemdb_searchrandomid(IG_FINDINGORE), 1);
mob_item_drop(md, dlist, ditem, 0, battle_config.finding_ore_rate/10, homkillonly);
}
@@ -2307,7 +2308,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
//it's positive, then it goes as it is
drop_rate = sd->add_drop[i].rate;
- if (rand()%10000 >= drop_rate)
+ if (rnd()%10000 >= drop_rate)
continue;
itemid = (sd->add_drop[i].id > 0) ? sd->add_drop[i].id : itemdb_searchrandomid(sd->add_drop[i].group);
mob_item_drop(md, dlist, mob_setdropitem(itemid,1), 0, drop_rate, homkillonly);
@@ -2315,11 +2316,11 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
}
// process script-granted zeny bonus (get_zeny_num) [Skotlex]
- if(sd->get_zeny_num && rand()%100 < sd->get_zeny_rate)
+ if(sd->get_zeny_num && rnd()%100 < sd->get_zeny_rate)
{
i = sd->get_zeny_num > 0?sd->get_zeny_num:-md->level*sd->get_zeny_num;
if (!i) i = 1;
- pc_getzeny(sd, 1+rand()%i);
+ pc_getzeny(sd, 1+rnd()%i);
}
}
@@ -2374,7 +2375,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
else
for(j=0;j<3;j++)
{
- i = rand() % 3;
+ i = rnd() % 3;
if(md->db->mvpitem[i].nameid <= 0)
continue;
@@ -2384,7 +2385,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
temp = md->db->mvpitem[i].p;
if(temp <= 0 && !battle_config.drop_rate0item)
temp = 1;
- if(temp <= rand()%10000+1) //if ==0, then it doesn't drop
+ if(temp <= rnd()%10000+1) //if ==0, then it doesn't drop
continue;
memset(&item,0,sizeof(item));
@@ -2494,7 +2495,7 @@ void mob_revive(struct mob_data *md, unsigned int hp)
unsigned int tick = gettick();
md->state.skillstate = MSS_IDLE;
md->last_thinktime = tick;
- md->next_walktime = tick+rand()%50+5000;
+ md->next_walktime = tick+rnd()%50+5000;
md->last_linktime = tick;
md->last_pcneartime = 0;
memset(md->dmglog, 0, sizeof(md->dmglog)); // Reset the damage done on the rebirthed monster, otherwise will grant full exp + damage done. [Valaris]
@@ -2577,7 +2578,7 @@ int mob_random_class (int *value, size_t count)
return 0;
}
//Pick a random value, hoping it exists. [Skotlex]
- return mobdb_checkid(value[rand()%count]);
+ return mobdb_checkid(value[rnd()%count]);
}
/*==========================================
@@ -2742,7 +2743,7 @@ int mob_summonslave(struct mob_data *md2,int *value,int amount,int skill_id)
while(count < 5 && mobdb_checkid(value[count])) count++;
if(count < 1) return 0;
if (amount > 0 && amount < count) { //Do not start on 0, pick some random sub subset [Skotlex]
- k = rand()%count;
+ k = rnd()%count;
amount+=k; //Increase final value by same amount to preserve total number to summon.
}
@@ -2946,7 +2947,7 @@ int mobskill_use(struct mob_data *md, unsigned int tick, int event)
return 0; //Skill act delay only affects non-event skills.
//Pick a starting position and loop from that.
- i = battle_config.mob_ai&0x100?rand()%md->db->maxskill:0;
+ i = battle_config.mob_ai&0x100?rnd()%md->db->maxskill:0;
for (n = 0; n < md->db->maxskill; i++, n++) {
int c2, flag = 0;
@@ -2966,7 +2967,7 @@ int mobskill_use(struct mob_data *md, unsigned int tick, int event)
else
continue;
}
- if (rand() % 10000 > ms[i].permillage) //Lupus (max value = 10000)
+ if (rnd() % 10000 > ms[i].permillage) //Lupus (max value = 10000)
continue;
if (ms[i].cond1 == event)
diff --git a/src/map/party.c b/src/map/party.c
index 377d467cb..f850efb7c 100644
--- a/src/map/party.c
+++ b/src/map/party.c
@@ -6,6 +6,7 @@
#include "../common/socket.h" // last_tick
#include "../common/nullpo.h"
#include "../common/malloc.h"
+#include "../common/random.h"
#include "../common/showmsg.h"
#include "../common/utils.h"
#include "../common/strlib.h"
@@ -1054,7 +1055,7 @@ int party_share_loot(struct party_data* p, struct map_session_data* sd, struct i
count++;
}
while (count > 0) { //Pick a random member.
- i = rand()%count;
+ i = rnd()%count;
if (pc_additem(psd[i],item_data,item_data->amount,LOG_TYPE_PICKDROP_PLAYER))
{ //Discard this receiver.
psd[i] = psd[count-1];
diff --git a/src/map/path.c b/src/map/path.c
index bbbb99a08..b2d34a26b 100644
--- a/src/map/path.c
+++ b/src/map/path.c
@@ -3,6 +3,7 @@
#include "../common/cbasetypes.h"
#include "../common/nullpo.h"
+#include "../common/random.h"
#include "../common/showmsg.h"
#include "../common/malloc.h"
#include "map.h"
@@ -175,7 +176,7 @@ int path_blownpos(int m,int x0,int y0,int dx,int dy,int count)
int fy = ( dy != 0 && map_getcellp(md,x0,y0+dy,CELL_CHKPASS) );
if( fx && fy )
{
- if(rand()&1)
+ if(rnd()&1)
dx=0;
else
dy=0;
diff --git a/src/map/pc.c b/src/map/pc.c
index 52141c913..398a77b65 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -5,6 +5,7 @@
#include "../common/core.h" // get_svn_revision()
#include "../common/malloc.h"
#include "../common/nullpo.h"
+#include "../common/random.h"
#include "../common/showmsg.h"
#include "../common/socket.h" // session[]
#include "../common/strlib.h" // safestrncpy()
@@ -4201,7 +4202,7 @@ int pc_steal_item(struct map_session_data *sd,struct block_list *bl, int lv)
// Try dropping one item, in the order from first to last possible slot.
// Droprate is affected by the skill success rate.
for( i = 0; i < MAX_STEAL_DROP; i++ )
- if( md->db->dropitem[i].nameid > 0 && itemdb_exists(md->db->dropitem[i].nameid) && rand() % 10000 < md->db->dropitem[i].p * rate/100. )
+ if( md->db->dropitem[i].nameid > 0 && itemdb_exists(md->db->dropitem[i].nameid) && rnd() % 10000 < md->db->dropitem[i].p * rate/100. )
break;
if( i == MAX_STEAL_DROP )
return 0;
@@ -4258,8 +4259,8 @@ int pc_steal_coin(struct map_session_data *sd,struct block_list *target)
skill = pc_checkskill(sd,RG_STEALCOIN)*10;
rate = skill + (sd->status.base_level - md->level)*3 + sd->battle_status.dex*2 + sd->battle_status.luk*2;
- if(rand()%1000 < rate) {
- pc_getzeny(sd,md->level*10 + rand()%100);
+ if(rnd()%1000 < rate) {
+ pc_getzeny(sd,md->level*10 + rnd()%100);
md->state.steal_coin_flag = 1;
return 1;
}
@@ -4371,8 +4372,8 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y
if( x == 0 && y == 0 )
{// pick a random walkable cell
do {
- x=rand()%(map[m].xs-2)+1;
- y=rand()%(map[m].ys-2)+1;
+ x=rnd()%(map[m].xs-2)+1;
+ y=rnd()%(map[m].ys-2)+1;
} while(map_getcell(m,x,y,CELL_CHKNOPASS));
}
@@ -4438,8 +4439,8 @@ int pc_randomwarp(struct map_session_data *sd, clr_type type)
return 0;
do{
- x=rand()%(map[m].xs-2)+1;
- y=rand()%(map[m].ys-2)+1;
+ x=rnd()%(map[m].xs-2)+1;
+ y=rnd()%(map[m].ys-2)+1;
}while(map_getcell(m,x,y,CELL_CHKNOPASS) && (i++)<1000 );
if (i < 1000)
@@ -6177,8 +6178,8 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
}
}
if(eq_num > 0){
- int n = eq_n[rand()%eq_num];
- if(rand()%10000 < per){
+ int n = eq_n[rnd()%eq_num];
+ if(rnd()%10000 < per){
if(sd->status.inventory[n].equip)
pc_unequipitem(sd,n,3);
pc_dropitem(sd,n,1);
@@ -6188,7 +6189,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
else if(id > 0){
for(i=0;i<MAX_INVENTORY;i++){
if(sd->status.inventory[i].nameid == id
- && rand()%10000 < per
+ && rnd()%10000 < per
&& ((type == 1 && !sd->status.inventory[i].equip)
|| (type == 2 && sd->status.inventory[i].equip)
|| type == 3) ){
diff --git a/src/map/pet.c b/src/map/pet.c
index d067b133f..43c3bcb5c 100644
--- a/src/map/pet.c
+++ b/src/map/pet.c
@@ -5,6 +5,7 @@
#include "../common/timer.h"
#include "../common/nullpo.h"
#include "../common/malloc.h"
+#include "../common/random.h"
#include "../common/showmsg.h"
#include "../common/strlib.h"
#include "../common/utils.h"
@@ -109,7 +110,7 @@ int pet_attackskill(struct pet_data *pd, int target_id)
if (DIFF_TICK(pd->ud.canact_tick, gettick()) > 0)
return 0;
- if (rand()%100 < (pd->a_skill->rate +pd->pet.intimate*pd->a_skill->bonusrate/1000))
+ if (rnd()%100 < (pd->a_skill->rate +pd->pet.intimate*pd->a_skill->bonusrate/1000))
{ //Skotlex: Use pet's skill
bl=map_id2bl(target_id);
if(bl == NULL || pd->bl.m != bl->m || bl->prev == NULL || status_isdead(bl) ||
@@ -159,9 +160,9 @@ int pet_target_check(struct map_session_data *sd,struct block_list *bl,int type)
if(pd->petDB->defence_attack_rate > 0 && rate <= 0)
rate = 1;
}
- if(rand()%10000 < rate)
+ if(rnd()%10000 < rate)
{
- if(pd->target_id == 0 || rand()%10000 < pd->petDB->change_target_rate)
+ if(pd->target_id == 0 || rnd()%10000 < pd->petDB->change_target_rate)
pd->target_id = bl->id;
}
@@ -283,7 +284,7 @@ static int pet_performance(struct map_session_data *sd, struct pet_data *pd)
val = 1;
pet_stop_walking(pd,2000<<8);
- clif_pet_performance(pd, rand()%val + 1);
+ clif_pet_performance(pd, rnd()%val + 1);
pet_lootitem_drop(pd,NULL);
return 1;
}
@@ -521,7 +522,7 @@ int pet_catch_process2(struct map_session_data* sd, int target_id)
if(battle_config.pet_catch_rate != 100)
pet_catch_rate = (pet_catch_rate*battle_config.pet_catch_rate)/100;
- if(rand()%10000 < pet_catch_rate)
+ if(rnd()%10000 < pet_catch_rate)
{
unit_remove_map(&md->bl,CLR_OUTSIGHT);
status_kill(&md->bl);
@@ -787,7 +788,7 @@ static int pet_randomwalk(struct pet_data *pd,unsigned int tick)
int i,x,y,c,d=12-pd->move_fail_count;
if(d<5) d=5;
for(i=0;i<retrycount;i++){
- int r=rand();
+ int r=rnd();
x=pd->bl.x+r%(d*2+1)-d;
y=pd->bl.y+r/(d*2+1)%(d*2+1)-d;
if(map_getcell(pd->bl.m,x,y,CELL_CHKPASS) && unit_walktoxy(&pd->bl,x,y,0)){
@@ -810,7 +811,7 @@ static int pet_randomwalk(struct pet_data *pd,unsigned int tick)
else
c+=pd->status.speed;
}
- pd->next_walktime = tick+rand()%3000+3000+c;
+ pd->next_walktime = tick+rnd()%3000+3000+c;
return 1;
}
diff --git a/src/map/script.c b/src/map/script.c
index 274903a7a..ca29ebb71 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -12,6 +12,7 @@
#include "../common/md5calc.h"
#include "../common/lock.h"
#include "../common/nullpo.h"
+#include "../common/random.h"
#include "../common/showmsg.h"
#include "../common/strlib.h"
#include "../common/timer.h"
@@ -4448,12 +4449,8 @@ BUILDIN_FUNC(rand)
}
if( range <= 1 )
script_pushint(st, min);
- else if( range > SHRT_MAX ) {
- int step1 = rand()%(range&0xffff), step2 = rand()%(range>>16);
- script_pushint(st, step1 + (step2<<16) + min);
- }
else
- script_pushint(st, rand()%range + min);
+ script_pushint(st, rnd()%range + min);
return 0;
}
diff --git a/src/map/skill.c b/src/map/skill.c
index 7657bc092..ad9580f5a 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -5,6 +5,7 @@
#include "../common/timer.h"
#include "../common/nullpo.h"
#include "../common/malloc.h"
+#include "../common/random.h"
#include "../common/showmsg.h"
#include "../common/strlib.h"
#include "../common/utils.h"
@@ -362,7 +363,7 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, int skill
* - Min = ( [ ( BaseLvl + INT ) / 5 ] * 30 ) * (1+( %Modifier / 100)) * (HealLvl * 0.1) + StatusMATK + EquipMATK - [(WeaponMATK * WeaponLvl) / 10]
* - Max = ( [ ( BaseLvl + INT ) / 5 ] * 30 ) * (1+( %Modifier / 100)) * (HealLvl * 0.1) + StatusMATK + EquipMATK + [(WeaponMATK * WeaponLvl) / 10]
**/
- hp = ( ( ( ( status_get_lv(src) + status_get_int(src) ) / 5 ) * 30 ) * ( skill_lv / 10 ) + status_get_matk_min(src) + status_get_matk_max(src) - ( ( status_get_matk_max(src) * status_get_wlv(src) ) / 10 ) ) + rand()%( ( ( ( status_get_lv(src) + status_get_int(src) ) / 5 ) * 30 ) * ( skill_lv / 10 ) + status_get_matk_min(src) + status_get_matk_max(src) + ( ( status_get_matk_max(src) * status_get_wlv(src) ) / 10 ) );
+ hp = ( ( ( ( status_get_lv(src) + status_get_int(src) ) / 5 ) * 30 ) * ( skill_lv / 10 ) + status_get_matk_min(src) + status_get_matk_max(src) - ( ( status_get_matk_max(src) * status_get_wlv(src) ) / 10 ) ) + rnd()%( ( ( ( status_get_lv(src) + status_get_int(src) ) / 5 ) * 30 ) * ( skill_lv / 10 ) + status_get_matk_min(src) + status_get_matk_max(src) + ( ( status_get_matk_max(src) * status_get_wlv(src) ) / 10 ) );
#else
hp = ( status_get_lv(src) + status_get_int(src) ) / 8 * (4 + ( skill_id == AB_HIGHNESSHEAL ? ( sd ? pc_checkskill(sd,AL_HEAL) : 10 ) : skill_lv ) * 8);
#endif
@@ -700,17 +701,17 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
if(sd) {
// Automatic trigger of Blitz Beat
if (pc_isfalcon(sd) && sd->status.weapon == W_BOW && (skill=pc_checkskill(sd,HT_BLITZBEAT))>0 &&
- rand()%1000 <= sstatus->luk*10/3+1 ) {
+ rnd()%1000 <= sstatus->luk*10/3+1 ) {
rate=(sd->status.job_level+9)/10;
skill_castend_damage_id(src,bl,HT_BLITZBEAT,(skill<rate)?skill:rate,tick,SD_LEVEL);
}
// Automatic trigger of Warg Strike [Jobbie]
- if( pc_iswug(sd) && (sd->status.weapon == W_BOW || sd->status.weapon == W_FIST) && (skill=pc_checkskill(sd,RA_WUGSTRIKE)) > 0 && rand()%1000 <= sstatus->luk*10/3+1 )
+ if( pc_iswug(sd) && (sd->status.weapon == W_BOW || sd->status.weapon == W_FIST) && (skill=pc_checkskill(sd,RA_WUGSTRIKE)) > 0 && rnd()%1000 <= sstatus->luk*10/3+1 )
skill_castend_damage_id(src,bl,RA_WUGSTRIKE,skill,tick,0);
// Gank
if(dstmd && sd->status.weapon != W_BOW &&
(skill=pc_checkskill(sd,RG_SNATCHER)) > 0 &&
- (skill*15 + 55) + pc_checkskill(sd,TF_STEAL)*10 > rand()%1000) {
+ (skill*15 + 55) + pc_checkskill(sd,TF_STEAL)*10 > rnd()%1000) {
if(pc_steal_item(sd,bl,pc_checkskill(sd,TF_STEAL)))
clif_skill_nodamage(src,bl,TF_STEAL,skill,1);
else
@@ -930,7 +931,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
//equal to Matk*skLevel.
rate = sstatus->matk_min;
if (rate < sstatus->matk_max)
- rate += rand()%(sstatus->matk_max - sstatus->matk_min);
+ rate += rnd()%(sstatus->matk_max - sstatus->matk_min);
rate*=skilllv;
status_zap(bl, 0, rate);
break;
@@ -981,7 +982,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
break;
case ASC_METEORASSAULT:
//Any enemies hit by this skill will receive Stun, Darkness, or external bleeding status ailment with a 5%+5*SkillLV% chance.
- switch(rand()%3) {
+ switch(rnd()%3) {
case 0:
sc_start(bl,SC_BLIND,(5+skilllv*5),skilllv,skill_get_time2(skillid,1));
break;
@@ -1061,7 +1062,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
if( !sd || pc_checkskill(sd,KN_SPEARBOOMERANG) == 0 )
break; // Spear Boomerang auto cast chance only works if you have mastered Spear Boomerang.
rate = 10 + 3 * skilllv;
- if( rand()%100 < rate )
+ if( rnd()%100 < rate )
skill_castend_damage_id(src,bl,KN_SPEARBOOMERANG,1,tick,0);
break;
case RK_WINDCUTTER:
@@ -1107,7 +1108,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
sc_start(bl, SC_BITE, 70, skilllv, skill_get_time(skillid, skilllv) + (sd ? pc_checkskill(sd,RA_TOOTHOFWUG) * 1000 : 0)); // Need official chance.
break;
case RA_SENSITIVEKEEN:
- if( rand()%100 < 8 * skilllv )
+ if( rnd()%100 < 8 * skilllv )
skill_castend_damage_id(src, bl, RA_WUGBITE, sd ? pc_checkskill(sd, RA_WUGBITE):skilllv, tick, SD_ANIMATION);
break;
case RA_MAGENTATRAP:
@@ -1125,7 +1126,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
* Mechanic
**/
case NC_PILEBUNKER:
- if( rand()%100 < 5 + 15*skilllv )
+ if( rnd()%100 < 5 + 15*skilllv )
{ //Deactivatable Statuses: Kyrie Eleison, Auto Guard, Steel Body, Assumptio, and Millennium Shield
status_change_end(bl, SC_KYRIE, -1);
status_change_end(bl, SC_AUTOGUARD, -1);
@@ -1143,7 +1144,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
break;
case NC_POWERSWING:
sc_start(bl, SC_STUN, 5*skilllv, skilllv, skill_get_time(skillid, skilllv));
- if( rand()%100 < 5*skilllv )
+ if( rnd()%100 < 5*skilllv )
skill_castend_damage_id(src, bl, NC_AXEBOOMERANG, pc_checkskill(sd, NC_AXEBOOMERANG), tick, 1);
break;
/**
@@ -1165,7 +1166,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
sc_start(bl,SC_BLEEDING,rate,skilllv,skill_get_time(skillid,skilllv));
break;
case 2:
- if( dstsd && dstsd->spiritball && rand()%100 < rate )
+ if( dstsd && dstsd->spiritball && rnd()%100 < rate )
pc_delspiritball(dstsd, dstsd->spiritball, 0);
break;
default:
@@ -1175,7 +1176,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
break;
case LG_MOONSLASHER:
rate = 32 + 8 * skilllv;
- if( rand()%100 < rate && dstsd ) // Uses skill_addtimerskill to avoid damage and setsit packet overlaping. Officially clif_setsit is received about 500 ms after damage packet.
+ if( rnd()%100 < rate && dstsd ) // Uses skill_addtimerskill to avoid damage and setsit packet overlaping. Officially clif_setsit is received about 500 ms after damage packet.
skill_addtimerskill(src,tick+500,bl->id,0,0,skillid,skilllv,BF_WEAPON,0);
else if( dstmd && !is_boss(bl) )
sc_start(bl,SC_STOP,100,skilllv,skill_get_time(skillid,skilllv));
@@ -1261,11 +1262,11 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
continue;
skilllv = sd->autospell[i].lv?sd->autospell[i].lv:1;
- if (skilllv < 0) skilllv = 1+rand()%(-skilllv);
+ if (skilllv < 0) skilllv = 1+rnd()%(-skilllv);
rate = (!sd->state.arrow_atk) ? sd->autospell[i].rate : sd->autospell[i].rate / 2;
- if (rand()%1000 >= rate)
+ if (rnd()%1000 >= rate)
continue;
tbl = (sd->autospell[i].id < 0) ? src : bl;
@@ -1337,7 +1338,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
int i;
for( i = 0; i < ARRAYLENGTH(sd->autobonus); i++ )
{
- if( rand()%1000 >= sd->autobonus[i].rate )
+ if( rnd()%1000 >= sd->autobonus[i].rate )
continue;
if( sd->autobonus[i].active != INVALID_TIMER )
continue;
@@ -1352,17 +1353,17 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
//Polymorph
if(sd && sd->classchange && attack_type&BF_WEAPON &&
dstmd && !(tstatus->mode&MD_BOSS) &&
- (rand()%10000 < sd->classchange))
+ (rnd()%10000 < sd->classchange))
{
struct mob_db *mob;
int class_;
skill = 0;
do {
do {
- class_ = rand() % MAX_MOB_DB;
+ class_ = rnd() % MAX_MOB_DB;
} while (!mobdb_checkid(class_));
- rate = rand() % 1000000;
+ rate = rnd() % 1000000;
mob = mob_db(class_);
} while (
(mob->status.mode&(MD_BOSS|MD_PLANT) || mob->summonper[0] <= rate) &&
@@ -1395,11 +1396,11 @@ int skill_onskillusage(struct map_session_data *sd, struct block_list *bl, int s
continue;
skilllv = sd->autospell3[i].lv ? sd->autospell3[i].lv : 1;
- if( skilllv < 0 ) skilllv = 1 + rand()%(-skilllv);
+ if( skilllv < 0 ) skilllv = 1 + rnd()%(-skilllv);
if( sd->autospell3[i].id >= 0 && bl == NULL )
continue; // No target
- if( rand()%1000 >= sd->autospell3[i].rate )
+ if( rnd()%1000 >= sd->autospell3[i].rate )
continue;
tbl = (sd->autospell3[i].id < 0) ? &sd->bl : bl;
@@ -1451,7 +1452,7 @@ int skill_onskillusage(struct map_session_data *sd, struct block_list *bl, int s
{
for( i = 0; i < ARRAYLENGTH(sd->autobonus3); i++ )
{
- if( rand()%1000 >= sd->autobonus3[i].rate )
+ if( rnd()%1000 >= sd->autobonus3[i].rate )
continue;
if( sd->autobonus3[i].active != INVALID_TIMER )
continue;
@@ -1543,7 +1544,7 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list *
}
if(sd && (sd->class_&MAPID_UPPERMASK) == MAPID_STAR_GLADIATOR &&
- rand()%10000 < battle_config.sg_miracle_skill_ratio) //SG_MIRACLE [Komurka]
+ rnd()%10000 < battle_config.sg_miracle_skill_ratio) //SG_MIRACLE [Komurka]
sc_start(src,SC_MIRACLE,100,1,battle_config.sg_miracle_skill_duration);
if(sd && skillid && attack_type&BF_MAGIC && status_isdead(bl) &&
@@ -1593,7 +1594,7 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list *
skillid = (dstsd->autospell2[i].id > 0) ? dstsd->autospell2[i].id : -dstsd->autospell2[i].id;
skilllv = dstsd->autospell2[i].lv?dstsd->autospell2[i].lv:1;
- if (skilllv < 0) skilllv = 1+rand()%(-skilllv);
+ if (skilllv < 0) skilllv = 1+rnd()%(-skilllv);
rate = dstsd->autospell2[i].rate;
if (attack_type&BF_LONG)
@@ -1601,7 +1602,7 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list *
if (skillnotok(skillid, dstsd))
continue;
- if (rand()%1000 >= rate)
+ if (rnd()%1000 >= rate)
continue;
tbl = (dstsd->autospell2[i].id < 0) ? bl : src;
@@ -1670,7 +1671,7 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list *
int i;
for( i = 0; i < ARRAYLENGTH(dstsd->autobonus2); i++ )
{
- if( rand()%1000 >= dstsd->autobonus2[i].rate )
+ if( rnd()%1000 >= dstsd->autobonus2[i].rate )
continue;
if( dstsd->autobonus2[i].active != INVALID_TIMER )
continue;
@@ -1734,7 +1735,7 @@ int skill_break_equip (struct block_list *bl, unsigned short where, int rate, in
if (where&where_list[i]) {
if (sc && sc->count && sc->data[scdef[i]])
where&=~where_list[i];
- else if (rand()%10000 >= rate)
+ else if (rnd()%10000 >= rate)
where&=~where_list[i];
else if (!sd && !(status_get_mode(bl)&MD_BOSS)) //Cause Strip effect.
sc_start(bl,scatk[i],100,0,skill_get_time(status_sc2skill(scatk[i]),1));
@@ -1789,7 +1790,7 @@ int skill_strip_equip(struct block_list *bl, unsigned short where, int rate, int
const enum sc_type sc_def[4] = {SC_CP_WEAPON, SC_CP_SHIELD, SC_CP_ARMOR, SC_CP_HELM};
int i;
- if (rand()%100 >= rate)
+ if (rnd()%100 >= rate)
return 0;
sc = status_get_sc(bl);
@@ -1876,7 +1877,7 @@ static int skill_magic_reflect(struct block_list* src, struct block_list* bl, in
struct map_session_data* sd = BL_CAST(BL_PC, bl);
// item-based reflection
- if( sd && sd->magic_damage_return && type && rand()%100 < sd->magic_damage_return )
+ if( sd && sd->magic_damage_return && type && rnd()%100 < sd->magic_damage_return )
return 1;
if( is_boss(src) )
@@ -1886,7 +1887,7 @@ static int skill_magic_reflect(struct block_list* src, struct block_list* bl, in
if( !sc || sc->count == 0 )
return 0;
- if( sc->data[SC_MAGICMIRROR] && rand()%100 < sc->data[SC_MAGICMIRROR]->val2 )
+ if( sc->data[SC_MAGICMIRROR] && rnd()%100 < sc->data[SC_MAGICMIRROR]->val2 )
return 1;
if( sc->data[SC_KAITE] && (src->type == BL_PC || status_get_lv(src) <= 80) )
@@ -2273,7 +2274,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
if( skillid == WL_HELLINFERNO && dmg.damage > 0 )
sc_start4(bl,SC_BURNING,55+5*skilllv,skilllv,1000,src->id,0,skill_get_time(skillid,skilllv));
// Apply knock back chance in SC_TRIANGLESHOT skill.
- else if( skillid == SC_TRIANGLESHOT && rand()%100 > (1 + skilllv) )
+ else if( skillid == SC_TRIANGLESHOT && rnd()%100 > (1 + skilllv) )
dmg.blewcount = 0;
//Only knockback if it's still alive, otherwise a "ghost" is left behind. [Skotlex]
@@ -2333,7 +2334,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
if(skillid == RG_INTIMIDATE && damage > 0 && !(tstatus->mode&MD_BOSS)) {
int rate = 50 + skilllv * 5;
rate = rate + (status_get_lv(src) - status_get_lv(bl));
- if(rand()%100 < rate)
+ if(rnd()%100 < rate)
skill_addtimerskill(src,tick + 800,bl->id,0,0,skillid,skilllv,0,flag);
}
@@ -2370,7 +2371,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
if( skillid == GC_VENOMPRESSURE ) {
struct status_change *ssc = status_get_sc(src);
- if( ssc && ssc->data[SC_POISONINGWEAPON] && rand()%100 < 70 + 5*skilllv ) {
+ if( ssc && ssc->data[SC_POISONINGWEAPON] && rnd()%100 < 70 + 5*skilllv ) {
sc_start(bl,ssc->data[SC_POISONINGWEAPON]->val2,100,ssc->data[SC_POISONINGWEAPON]->val1,skill_get_time2(GC_POISONINGWEAPON,ssc->data[SC_POISONINGWEAPON]->val1));
status_change_end(src,SC_POISONINGWEAPON,-1);
clif_skill_nodamage(src,bl,skillid,skilllv,1);
@@ -2384,7 +2385,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
) &&
(sc = status_get_sc(src)) &&
sc->data[SC_DOUBLECAST] &&
- rand() % 100 < sc->data[SC_DOUBLECAST]->val2)
+ rnd() % 100 < sc->data[SC_DOUBLECAST]->val2)
{
// skill_addtimerskill(src, tick + dmg.div_*dmg.amotion, bl->id, 0, 0, skillid, skilllv, BF_MAGIC, flag|2);
skill_addtimerskill(src, tick + dmg.amotion, bl->id, 0, 0, skillid, skilllv, BF_MAGIC, flag|2);
@@ -2829,7 +2830,7 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data)
}
if( j )
{
- i = applyeffects[rand()%j];
+ i = applyeffects[rnd()%j];
status_change_start(target, i, 10000, skl->skill_lv,
(i == SC_BURNING ? 1000 : 0),
(i == SC_BURNING ? src->id : 0),
@@ -3129,7 +3130,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
break;
case LK_JOINTBEAT: // decide the ailment first (affects attack damage and effect)
- switch( rand()%6 ){
+ switch( rnd()%6 ){
case 0: flag |= BREAK_ANKLE; break;
case 1: flag |= BREAK_WRIST; break;
case 2: flag |= BREAK_KNEE; break;
@@ -3521,7 +3522,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
case HVAN_CAPRICE: //[blackhole89]
{
- int ran=rand()%4;
+ int ran=rnd()%4;
int sid = 0;
switch(ran)
{
@@ -3624,7 +3625,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
// Celest
case PF_SOULBURN:
- if (rand()%100 < (skilllv < 5 ? 30 + skilllv * 10 : 70)) {
+ if (rnd()%100 < (skilllv < 5 ? 30 + skilllv * 10 : 70)) {
clif_skill_nodamage(src,bl,skillid,skilllv,1);
if (skilllv == 5)
skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
@@ -3710,7 +3711,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
clif_slide(src,bl->x+x,bl->y+y);
clif_fixpos(src); // the official server send these two packts.
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
- if( rand()%100 < 4 * skilllv )
+ if( rnd()%100 < 4 * skilllv )
skill_castend_damage_id(src,bl,GC_CROSSIMPACT,skilllv,tick,flag);
}
@@ -3760,7 +3761,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
if( bl->type == BL_SKILL )
heal = 0; // Don't absorb heal from Ice Walls or other skill units.
- if( heal && rand()%100 < rate )
+ if( heal && rnd()%100 < rate )
{
status_heal(src, heal, 0, 0);
clif_skill_nodamage(NULL, src, AL_HEAL, heal, 1);
@@ -3975,7 +3976,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
case NC_INFRAREDSCAN:
if( flag&1 )
{ //TODO: Need a confirmation if the other type of hidden status is included to be scanned. [Jobbie]
- if( rand()%100 < 50 )
+ if( rnd()%100 < 50 )
sc_start(bl, SC_INFRAREDSCAN, 10000, skilllv, skill_get_time(skillid, skilllv));
status_change_end(bl, SC_HIDING, -1);
status_change_end(bl, SC_CLOAKING, -1);
@@ -4302,11 +4303,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
{
int abra_skillid = 0, abra_skilllv;
do {
- i = rand() % MAX_SKILL_ABRA_DB;
+ i = rnd() % MAX_SKILL_ABRA_DB;
abra_skillid = skill_abra_db[i].skillid;
} while (abra_skillid == 0 ||
skill_abra_db[i].req_lv > skilllv || //Required lv for it to appear
- rand()%10000 >= skill_abra_db[i].per
+ rnd()%10000 >= skill_abra_db[i].per
);
abra_skilllv = min(skilllv, skill_get_max(abra_skillid));
clif_skill_nodamage (src, bl, skillid, skilllv, 1);
@@ -4762,7 +4763,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case TK_MISSION:
if (sd) {
int id;
- if (sd->mission_mobid && (sd->mission_count || rand()%100)) { //Cannot change target when already have one
+ if (sd->mission_mobid && (sd->mission_count || rnd()%100)) { //Cannot change target when already have one
clif_mission_info(sd, sd->mission_mobid, sd->mission_count);
clif_skill_fail(sd,skillid,USESKILL_FAIL_LEVEL,0);
break;
@@ -4913,7 +4914,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
{ // split the if for readability, and included gunslingers in the check so that their coins cannot be removed [Reddozen]
i = dstsd->spiritball * 7;
pc_delspiritball(dstsd,dstsd->spiritball,0);
- } else if (dstmd && !(tstatus->mode&MD_BOSS) && rand() % 100 < 20)
+ } else if (dstmd && !(tstatus->mode&MD_BOSS) && rnd() % 100 < 20)
{ // check if target is a monster and not a Boss, for the 20% chance to absorb 2 SP per monster's level [Reddozen]
i = 2 * dstmd->level;
mob_target(dstmd,src,0);
@@ -5615,7 +5616,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
else
{
- hp = (1 + rand()%400) * (100 + skilllv*10) / 100;
+ hp = (1 + rnd()%400) * (100 + skilllv*10) / 100;
hp = hp * (100 + (tstatus->vit<<1)) / 100;
if( dstsd )
hp = hp * (100 + pc_checkskill(dstsd,SM_RECOVERY)*10) / 100;
@@ -5687,7 +5688,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
clif_skill_nodamage(src,bl,skillid,skilllv,1);
if((dstsd && (dstsd->class_&MAPID_UPPERMASK) == MAPID_SOUL_LINKER)
|| (tsc && tsc->data[SC_SPIRIT] && tsc->data[SC_SPIRIT]->val2 == SL_ROGUE) //Rogue's spirit defends againt dispel.
- || rand()%100 >= 50+10*skilllv
+ || rnd()%100 >= 50+10*skilllv
|| ( tsc && tsc->option&OPTION_MADOGEAR ) )//Mado Gear is immune to dispell according to bug report 49 [Ind]
{
if (sd)
@@ -5816,7 +5817,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
bl_skilllv = ud->skilllv;
if (tstatus->mode & MD_BOSS)
{ //Only 10% success chance against bosses. [Skotlex]
- if (rand()%100 < 90)
+ if (rnd()%100 < 90)
{
if (sd) clif_skill_fail(sd,skillid,USESKILL_FAIL_LEVEL,0);
break;
@@ -5869,7 +5870,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
maxlv = skilllv - 4;
}
else if(skilllv >=2) {
- int i = rand()%3;
+ int i = rnd()%3;
spellid = spellarray[i];
maxlv = skilllv - 1;
}
@@ -6335,7 +6336,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case CG_TAROTCARD:
{
int eff, count = -1;
- if( rand() % 100 > skilllv * 8 || (dstmd && ((dstmd->guardian_data && dstmd->class_ == MOBID_EMPERIUM) || mob_is_battleground(dstmd))) )
+ if( rnd() % 100 > skilllv * 8 || (dstmd && ((dstmd->guardian_data && dstmd->class_ == MOBID_EMPERIUM) || mob_is_battleground(dstmd))) )
{
if( sd )
clif_skill_fail(sd,skillid,USESKILL_FAIL_LEVEL,0);
@@ -6345,7 +6346,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
status_zap(src,0,skill_db[skill_get_index(skillid)].sp[skilllv]); // consume sp only if succeeded [Inkfish]
do {
- eff = rand() % 14;
+ eff = rnd() % 14;
clif_specialeffect(bl, 523 + eff, AREA);
switch (eff)
{
@@ -6364,7 +6365,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
status_fix_damage(src, bl, 1000, 0);
clif_damage(src,bl,tick,0,0,1000,0,0,0);
if( !status_isdead(bl) )
- skill_break_equip(bl, where[rand()%5], 10000, BCT_ENEMY);
+ skill_break_equip(bl, where[rnd()%5], 10000, BCT_ENEMY);
}
break;
case 4: // atk halved
@@ -6384,7 +6385,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case 7: // stop freeze or stoned
{
enum sc_type sc[] = { SC_STOP, SC_FREEZE, SC_STONE };
- sc_start(bl,sc[rand()%3],100,skilllv,skill_get_time2(skillid,skilllv));
+ sc_start(bl,sc[rnd()%3],100,skilllv,skill_get_time2(skillid,skilllv));
}
break;
case 8: // curse coma and poison
@@ -6444,7 +6445,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
clif_skill_fail(sd,skillid,USESKILL_FAIL_LEVEL,0);
break;
}
- if (skillid == SL_SUPERNOVICE && dstsd && dstsd->die_counter && !(rand()%100))
+ if (skillid == SL_SUPERNOVICE && dstsd && dstsd->die_counter && !(rnd()%100))
{ //Erase death count 1% of the casts
dstsd->die_counter = 0;
pc_setglobalreg(dstsd,"PC_DIE_COUNTER", 0);
@@ -6572,7 +6573,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case GS_GLITTERING:
if(sd) {
clif_skill_nodamage(src,bl,skillid,skilllv,1);
- if(rand()%100 < (20+10*skilllv))
+ if(rnd()%100 < (20+10*skilllv))
pc_addspiritball(sd,skill_get_time(skillid,skilllv),10);
else if(sd->spiritball > 0)
pc_delspiritball(sd,1,0);
@@ -6607,7 +6608,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
break;
case HAMI_CASTLE: //[orn]
- if(rand()%100 < 20*skilllv && src != bl)
+ if(rnd()%100 < 20*skilllv && src != bl)
{
int x,y;
x = src->x;
@@ -6638,17 +6639,17 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case HVAN_CHAOTIC: //[orn]
{
static const int per[5][2]={{20,50},{50,60},{25,75},{60,64},{34,67}};
- int rnd = rand()%100;
+ int r = rnd()%100;
i = (skilllv-1)%5;
- if(rnd<per[i][0]) //Self
+ if(r<per[i][0]) //Self
bl = src;
- else if(rnd<per[i][1]) //Master
+ else if(r<per[i][1]) //Master
bl = battle_get_master(src);
else //Enemy
bl = map_id2bl(battle_gettarget(src));
if (!bl) bl = src;
- i = skill_calc_heal(src, bl, skillid, 1+rand()%skilllv, true);
+ i = skill_calc_heal(src, bl, skillid, 1+rnd()%skilllv, true);
//Eh? why double skill packet?
clif_skill_nodamage(src,bl,AL_HEAL,i,1);
clif_skill_nodamage(src,bl,skillid,i,1);
@@ -6670,7 +6671,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
if (flag&1) {
const enum sc_type sc[] = { SC_STUN, SC_SILENCE, SC_CONFUSION, SC_BLEEDING };
int j;
- j = i = rand()%ARRAYLENGTH(sc);
+ j = i = rnd()%ARRAYLENGTH(sc);
while ( !sc_start(bl,sc[i],100,skilllv,skill_get_time2(skillid,i+1)) ) {
i++;
if ( i == ARRAYLENGTH(sc) )
@@ -6775,7 +6776,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case RK_MILLENNIUMSHIELD:
if( sd && pc_checkskill(sd,RK_RUNEMASTERY) >= 9 )
{
- short shields = (rand()%100<50) ? 4 : ((rand()%100<80) ? 3 : 2);
+ short shields = (rnd()%100<50) ? 4 : ((rnd()%100<80) ? 3 : 2);
sc_start4(bl,type,100,skilllv,shields,1000,0,skill_get_time(skillid,skilllv));
clif_millenniumshield(sd,shields);
clif_skill_nodamage(src,bl,skillid,1,1);
@@ -6952,7 +6953,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
if( flag&1 || sd == NULL )
{
if( (tsc && (tsc->data[SC_FREEZE] || tsc->data[SC_STONE] ||
- tsc->data[SC_BLIND]))&& (rand()%100 < 30+5*skilllv) )
+ tsc->data[SC_BLIND]))&& (rnd()%100 < 30+5*skilllv) )
{
status_change_end(bl, SC_FREEZE, -1);
status_change_end(bl, SC_STONE, -1);
@@ -6971,7 +6972,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
if( flag&1 || sd == NULL )
{
if( (tsc && (tsc->data[SC_SLEEP] || tsc->data[SC_STUN] ||
- tsc->data[SC_SILENCE]))&& (rand()%100 < 30+5*skilllv) )
+ tsc->data[SC_SILENCE]))&& (rnd()%100 < 30+5*skilllv) )
{
status_change_end(bl, SC_SLEEP, -1);
status_change_end(bl, SC_STUN, -1);
@@ -6990,7 +6991,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
if( flag&1 || (i = skill_get_splash(skillid, skilllv)) < 1 )
{ //As of the behavior in official server Clearance is just a super version of Dispell skill. [Jobbie]
clif_skill_nodamage(src,bl,skillid,skilllv,1);
- if((dstsd && (dstsd->class_&MAPID_UPPERMASK) == MAPID_SOUL_LINKER) || rand()%100 >= 30 + 10 * skilllv)
+ if((dstsd && (dstsd->class_&MAPID_UPPERMASK) == MAPID_SOUL_LINKER) || rnd()%100 >= 30 + 10 * skilllv)
{
if (sd)
clif_skill_fail(sd,skillid,USESKILL_FAIL_LEVEL,0);
@@ -7120,7 +7121,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
{
int rate = 40 + 8 * skilllv + ( sd? sd->status.job_level : 50 ) / 4;
// IroWiki says Rate should be reduced by target stats, but currently unknown
- if( rand()%100 < rate )
+ if( rnd()%100 < rate )
{ // Success on First Target
rate = 0;
if( !tsc->data[SC_STONE] )
@@ -7347,7 +7348,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
sc_start(bl,SC_SILENCE,100,skilllv,duration);
} else if( sd ) {
int opt = skilllv;
- int rate = rand()%100;
+ int rate = rnd()%100;
int val, brate;
switch( skilllv ) {
case 1:
@@ -7670,7 +7671,7 @@ int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data)
if(inf&BCT_ENEMY && (sc = status_get_sc(target)) &&
sc->data[SC_FOGWALL] &&
- rand()%100 < 75)
+ rnd()%100 < 75)
{ //Fogwall makes all offensive-type targetted skills fail at 75%
if (sd) clif_skill_fail(sd,ud->skillid,USESKILL_FAIL_LEVEL,0);
break;
@@ -8187,8 +8188,8 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
for( i = 0; i < 2 + (skilllv>>1); i++ )
{
// Creates a random Cell in the Splash Area
- tmpx = x - area + rand()%(area * 2 + 1);
- tmpy = y - area + rand()%(area * 2 + 1);
+ tmpx = x - area + rnd()%(area * 2 + 1);
+ tmpy = y - area + rnd()%(area * 2 + 1);
if( i == 0 && path_search_long(NULL, src->m, src->x, src->y, tmpx, tmpy, CELL_CHKWALL) )
clif_skill_poseffect(src,skillid,skilllv,tmpx,tmpy,tick);
@@ -8308,7 +8309,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
break;
case HW_GANBANTEIN:
- if (rand()%100 < 80) {
+ if (rnd()%100 < 80) {
int dummy = 1;
clif_skill_poseffect(src,skillid,skilllv,x,y,tick);
i = skill_get_splash(skillid, skilllv);
@@ -8335,10 +8336,10 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
return 1;
}
clif_skill_poseffect(src,skillid,skilllv,x,y,tick);
- if (rand()%100 < 50) {
+ if (rnd()%100 < 50) {
clif_skill_fail(sd,skillid,USESKILL_FAIL_LEVEL,0);
} else {
- TBL_MOB* md = mob_once_spawn_sub(src, src->m, x, y, "--ja--",(skilllv < 2 ? 1084+rand()%2 : 1078+rand()%6),"");
+ TBL_MOB* md = mob_once_spawn_sub(src, src->m, x, y, "--ja--",(skilllv < 2 ? 1084+rnd()%2 : 1078+rnd()%6),"");
if (!md) break;
if ((i = skill_get_time(skillid, skilllv)) > 0)
{
@@ -9022,7 +9023,7 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, short skilli
val1 = status->rhw.ele;
if (!val1)
- val1=element[rand()%5];
+ val1=element[rnd()%5];
switch (val1)
{
@@ -9037,7 +9038,7 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, short skilli
case ELE_WIND:
break;
default:
- subunt=rand()%5;
+ subunt=rnd()%5;
break;
}
@@ -9549,7 +9550,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
break;
case GS_DESPERADO:
- if (rand()%100 < src->val1)
+ if (rnd()%100 < src->val1)
skill_attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
break;
@@ -9676,17 +9677,17 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
break;
case UNT_GOSPEL:
- if (rand()%100 > sg->skill_lv*10 || ss == bl)
+ if (rnd()%100 > sg->skill_lv*10 || ss == bl)
break;
if (battle_check_target(ss,bl,BCT_PARTY)>0)
{ // Support Effect only on party, not guild
int heal;
- int i = rand()%13; // Positive buff count
+ int i = rnd()%13; // Positive buff count
int time = skill_get_time2(sg->skill_id, sg->skill_lv); //Duration
switch (i)
{
case 0: // Heal 1~9999 HP
- heal = rand() %9999+1;
+ heal = rnd() %9999+1;
clif_skill_nodamage(ss,bl,AL_HEAL,heal,1);
status_heal(bl,heal,0,0);
break;
@@ -9741,7 +9742,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
}
else if (battle_check_target(&src->bl,bl,BCT_ENEMY)>0)
{ // Offensive Effect
- int i = rand()%9; // Negative buff count
+ int i = rnd()%9; // Negative buff count
int time = skill_get_time2(sg->skill_id, sg->skill_lv);
switch (i)
{
@@ -9814,7 +9815,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
* 3rd stuff
**/
case UNT_POISONSMOKE:
- if( battle_check_target(ss,bl,BCT_ENEMY) > 0 && !(tsc && tsc->data[sg->val2]) && rand()%100 < 20 )
+ if( battle_check_target(ss,bl,BCT_ENEMY) > 0 && !(tsc && tsc->data[sg->val2]) && rnd()%100 < 20 )
sc_start(bl,sg->val2,100,sg->val1,skill_get_time2(GC_POISONINGWEAPON,sg->val1));
break;
@@ -10343,7 +10344,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, short skill, sh
}
//Consume
sd->itemid = sd->itemindex = -1;
- if( skill == WZ_EARTHSPIKE && sc && sc->data[SC_EARTHSCROLL] && rand()%100 > sc->data[SC_EARTHSCROLL]->val2 ) // [marquis007]
+ if( skill == WZ_EARTHSPIKE && sc && sc->data[SC_EARTHSCROLL] && rnd()%100 > sc->data[SC_EARTHSCROLL]->val2 ) // [marquis007]
; //Do not consume item.
else if( sd->status.inventory[i].expire_time == 0 )
pc_delitem(sd,i,1,0,0,LOG_TYPE_CONSUME); // Rental usable items are not consumed until expiration
@@ -11777,7 +11778,7 @@ void skill_weaponrefine (struct map_session_data *sd, int idx)
per += (((signed int)sd->status.job_level)-50)/2; //Updated per the new kro descriptions. [Skotlex]
pc_delitem(sd, i, 1, 0, 0, LOG_TYPE_OTHER);
- if (per > rand() % 100) {
+ if (per > rnd() % 100) {
log_pick_pc(sd, LOG_TYPE_OTHER, item->nameid, -1, item);
item->refine++;
log_pick_pc(sd, LOG_TYPE_OTHER, item->nameid, 1, item);
@@ -11981,7 +11982,7 @@ int skill_frostjoke_scream (struct block_list *bl, va_list ap)
//It has been reported that Scream/Joke works the same regardless of woe-setting. [Skotlex]
if(battle_check_target(src,bl,BCT_ENEMY) > 0)
skill_additional_effect(src,bl,skillnum,skilllv,BF_MISC,ATK_DEF,tick);
- else if(battle_check_target(src,bl,BCT_PARTY) > 0 && rand()%100 < 10)
+ else if(battle_check_target(src,bl,BCT_PARTY) > 0 && rnd()%100 < 10)
skill_additional_effect(src,bl,skillnum,skilllv,BF_MISC,ATK_DEF,tick);
return 0;
@@ -13383,8 +13384,8 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
}
if( skill_id == RK_RUNEMASTERY ) {
int temp_qty, skill_lv = pc_checkskill(sd,skill_id);
- if( skill_lv == 10 ) temp_qty = 1 + rand()%3;
- else if( skill_lv > 5 ) temp_qty = 1 + rand()%2;
+ if( skill_lv == 10 ) temp_qty = 1 + rnd()%3;
+ else if( skill_lv > 5 ) temp_qty = 1 + rnd()%2;
else temp_qty = 1;
for( i = 0; i < MAX_INVENTORY; i++ ) {
if( sd->status.inventory[i].nameid == nameid ) {
@@ -13476,23 +13477,23 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
case 501: // Red Potion
case 503: // Yellow Potion
case 504: // White Potion
- make_per += (1+rand()%100)*10 + 2000;
+ make_per += (1+rnd()%100)*10 + 2000;
break;
case 970: // Alcohol
- make_per += (1+rand()%100)*10 + 1000;
+ make_per += (1+rnd()%100)*10 + 1000;
break;
case 7135: // Bottle Grenade
case 7136: // Acid Bottle
case 7137: // Plant Bottle
case 7138: // Marine Sphere Bottle
- make_per += (1+rand()%100)*10;
+ make_per += (1+rnd()%100)*10;
break;
case 546: // Condensed Yellow Potion
- make_per -= (1+rand()%50)*10;
+ make_per -= (1+rnd()%50)*10;
break;
case 547: // Condensed White Potion
case 7139: // Glistening Coat
- make_per -= (1+rand()%100)*10;
+ make_per -= (1+rnd()%100)*10;
break;
//Common items, recieve no bonus or penalty, listed just because they are commonly produced
case 505: // Blue Potion
@@ -13519,7 +13520,7 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
**/
case GC_CREATENEWPOISON:
make_per = 3000 + 500 * pc_checkskill(sd,GC_RESEARCHNEWPOISON);
- qty = 1+rand()%pc_checkskill(sd,GC_RESEARCHNEWPOISON);
+ qty = 1+rnd()%pc_checkskill(sd,GC_RESEARCHNEWPOISON);
break;
default:
if (sd->menuskill_id == AM_PHARMACY &&
@@ -13531,11 +13532,11 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
make_per = 1200 * (sd->menuskill_val - 10)
+ 20 * (sd->status.base_level + 1)
+ 20 * (status->dex + 1)
- + 100 * (rand()%(30+5*(sd->cook_mastery/400) - (6+sd->cook_mastery/80)) + (6+sd->cook_mastery/80))
+ + 100 * (rnd()%(30+5*(sd->cook_mastery/400) - (6+sd->cook_mastery/80)) + (6+sd->cook_mastery/80))
- 400 * (skill_produce_db[idx].itemlv - 11 + 1)
- 10 * (100 - status->luk + 1)
- 500 * (num - 1)
- - 100 * (rand()%4 + 1);
+ - 100 * (rnd()%4 + 1);
break;
}
make_per = 5000;
@@ -13560,7 +13561,7 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
if(make_per < 1) make_per = 1;
- if(rand()%10000 < make_per || qty > 1){ //Success, or crafting multiple items.
+ if(rnd()%10000 < make_per || qty > 1){ //Success, or crafting multiple items.
struct item tmp_item;
memset(&tmp_item,0,sizeof(tmp_item));
tmp_item.nameid=nameid;
@@ -13625,7 +13626,7 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
tmp_item.amount = 0;
for (i=0; i< qty; i++)
{ //Apply quantity modifiers.
- if (rand()%10000 < make_per || qty == 1)
+ if (rnd()%10000 < make_per || qty == 1)
{ //Success
tmp_item.amount++;
if(nameid < 545 || nameid > 547)
diff --git a/src/map/status.c b/src/map/status.c
index 5b10f1deb..b4025a09a 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -4,6 +4,7 @@
#include "../common/cbasetypes.h"
#include "../common/timer.h"
#include "../common/nullpo.h"
+#include "../common/random.h"
#include "../common/showmsg.h"
#include "../common/malloc.h"
#include "../common/utils.h"
@@ -5304,7 +5305,7 @@ int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int ti
break;
default:
//Effect that cannot be reduced? Likely a buff.
- if (!(rand()%10000 < rate))
+ if (!(rnd()%10000 < rate))
return 0;
return tick?tick:1;
}
@@ -5368,7 +5369,7 @@ int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int ti
rate -= rate*sd->sc.data[SC_COMMONSC_RESIST]->val1/100;
}
}
- if (!(rand()%10000 < rate))
+ if (!(rnd()%10000 < rate))
return 0;
//Why would a status start with no duration? Presume it has
@@ -6087,10 +6088,10 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
// val1 : Element Lvl (if called by skill lvl 1, takes random value between 1 and 4)
// val2 : Element (When no element, random one is picked)
// val3 : 0 = called by skill 1 = called by script (fixed level)
- if( !val2 ) val2 = rand()%ELE_MAX;
+ if( !val2 ) val2 = rnd()%ELE_MAX;
if( val1 == 1 && val3 == 0 )
- val1 = 1 + rand()%4;
+ val1 = 1 + rnd()%4;
else if( val1 > 4 )
val1 = 4; // Max Level
val3 = 0; // Not need to keep this info.
@@ -6696,7 +6697,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
break;
case SC_SKA:
val2 = tick/1000;
- val3 = rand()%100; //Def changes randomly every second...
+ val3 = rnd()%100; //Def changes randomly every second...
tick_time = 1000; // [GodLesZ] tick time
break;
case SC_JAILED:
@@ -6753,7 +6754,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
if (val2 >= ELE_MAX)
val2 = val2%ELE_MAX;
else if (val2 < 0)
- val2 = rand()%ELE_MAX;
+ val2 = rnd()%ELE_MAX;
break;
case SC_CRITICALWOUND:
val2 = 20*val1; //Heal effectiveness decrease
@@ -8451,7 +8452,7 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
case SC_SKA:
if(--(sce->val2)>0){
- sce->val3 = rand()%100; //Random defense.
+ sce->val3 = rnd()%100; //Random defense.
sc_timer_next(1000+tick, status_change_timer,bl->id, data);
return 0;
}
@@ -8541,7 +8542,7 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
case SC_BLEEDING:
if (--(sce->val4) >= 0) {
- int hp = rand()%600 + 200;
+ int hp = rnd()%600 + 200;
map_freeblock_lock();
status_fix_damage(NULL, bl, sd||hp<status->hp?hp:status->hp-1, 0);
if( sc->data[type] ) {
@@ -8792,7 +8793,7 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
unit_skillcastcancel(bl,1);
do
{
- i = rand() % MAX_SKILL_MAGICMUSHROOM_DB;
+ i = rnd() % MAX_SKILL_MAGICMUSHROOM_DB;
mushroom_skillid = skill_magicmushroom_db[i].skillid;
}
while( mushroom_skillid == 0 );
@@ -9500,7 +9501,7 @@ static int status_natural_heal(struct block_list* bl, va_list args)
100,rate,skill_get_time(TK_SPTIME, rate));
if (
(sd->class_&MAPID_UPPERMASK) == MAPID_STAR_GLADIATOR &&
- rand()%10000 < battle_config.sg_angel_skill_ratio
+ rnd()%10000 < battle_config.sg_angel_skill_ratio
) { //Angel of the Sun/Moon/Star
clif_feel_hate_reset(sd);
pc_resethate(sd);
diff --git a/src/map/unit.c b/src/map/unit.c
index 7a2580c22..631fc049a 100644
--- a/src/map/unit.c
+++ b/src/map/unit.c
@@ -6,6 +6,7 @@
#include "../common/nullpo.h"
#include "../common/db.h"
#include "../common/malloc.h"
+#include "../common/random.h"
#include "unit.h"
#include "map.h"
#include "path.h"
@@ -1616,7 +1617,7 @@ int unit_calc_pos(struct block_list *bl, int tx, int ty, int dir)
{
for( i = 0; i < 12; i++ )
{
- k = rand()%8; // Pick a Random Dir
+ k = rnd()%8; // Pick a Random Dir
dx = -dirx[k] * 2;
dy = -diry[k] * 2;
x = tx + dx;