diff options
author | gepard1984 <gepard1984@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-01-17 18:06:34 +0000 |
---|---|---|
committer | gepard1984 <gepard1984@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2012-01-17 18:06:34 +0000 |
commit | 95548cb1caad95933e2b36df9a13af070b733b04 (patch) | |
tree | b9ce67cc8b45c6956528e5bb2935900b6d8ad441 | |
parent | a09cc2371ac0a2534f514a35a5637614c11f6a37 (diff) | |
download | hercules-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
-rw-r--r-- | src/common/md5calc.c | 3 | ||||
-rw-r--r-- | src/common/random.c | 2 | ||||
-rw-r--r-- | src/login/login.c | 9 | ||||
-rw-r--r-- | src/map/atcommand.c | 17 | ||||
-rw-r--r-- | src/map/battle.c | 97 | ||||
-rw-r--r-- | src/map/clif.c | 17 | ||||
-rw-r--r-- | src/map/homunculus.c | 55 | ||||
-rw-r--r-- | src/map/itemdb.c | 3 | ||||
-rw-r--r-- | src/map/map.c | 15 | ||||
-rw-r--r-- | src/map/mercenary.c | 5 | ||||
-rw-r--r-- | src/map/mob.c | 61 | ||||
-rw-r--r-- | src/map/party.c | 3 | ||||
-rw-r--r-- | src/map/path.c | 3 | ||||
-rw-r--r-- | src/map/pc.c | 21 | ||||
-rw-r--r-- | src/map/pet.c | 15 | ||||
-rw-r--r-- | src/map/script.c | 7 | ||||
-rw-r--r-- | src/map/skill.c | 191 | ||||
-rw-r--r-- | src/map/status.c | 21 | ||||
-rw-r--r-- | src/map/unit.c | 3 |
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; |