Definitely. You can use the one below:
*readparam(<parameter number>{,"<character name>"})
*readparam(<parameter number>{,<char_id>})
This function will return the specified stat of the invoking character, or, if a
character name or character id is specified, of that player. The stat can either
be a number or parameter name, defined in 'src/map/script_constants.hpp'.
Some example parameters:
StatusPoint, BaseLevel, SkillPoint, Class, Upper, Zeny, Sex, Weight, MaxWeight,
JobLevel, BaseExp, JobExp, NextBaseExp, NextJobExp, Hp, MaxHp, Sp, MaxSp,
BaseJob, Karma, Manner, bVit, bDex, bAgi, bStr, bInt, bLuk, Ap, MaxAp
All of these also behave as variables, but don't expect to be able to just 'set'
them - some will not work for various internal reasons.
Example 1:
// Returns how many status points you haven't spent yet.
mes "Unused status points: " + readparam(9);
Using this particular information as a function call is not required. Typing this
will return the same result:
mes "Unused status points: " + StatusPoint;
Example 2:
You can also use this command to get stat values.
if (readparam(bVit) > 77)
mes "Only people with over 77 Vit are reading this!";
https://github.com/rathena/rathena/blob/b56f11207c3cb5337dca07bb910ba85316c84939/doc/script_commands.txt#L2445
to just announce on map, change
announce "[ Lotti Girl ]: Player "+ .@name$ +" obtained 1 x "+ getitemname(.item_ID[.@i]) +" with "+ .item_Rate[.@i] +"%.",0;
to
announce "[ Lotti Girl ]: Player "+ .@name$ +" obtained 1 x "+ getitemname(.item_ID[.@i]) +" with "+ .item_Rate[.@i] +"%.",bc_map;
then if you want it to only announce by specific chances do something like,
if(.item_Rate[.@i] == <chance you want>){
announce part of the script
}