Litro Endemic

Members
  • Content Count

    185
  • Avg. Content Per Day

    0
  • Joined

  • Last visited

  • Days Won

    6

Litro Endemic last won the day on January 27

Litro Endemic had the most liked content!

Community Reputation

41 Excellent

5 Followers

About Litro Endemic

  • Rank
    LoneRanger
  • Birthday 10/27/1991

Profile Information

  • Gender
    Male
  • Location
    Indonesia

Contact Methods

Recent Profile Visitors

2,113 profile views
  1. yes there is, just inverse the atk calc on renewal part since you want only atk stats part but that would give you more headache... or you can try only turn off setting below, to use all pre-re stats calc while enabling renewal feature, /// Renewal stat calculations /// (disable by commenting the line) /// /// Leave this line to enable renewal calculation for increasing status/parameter points #define RENEWAL_STAT
  2. is renewal mode activated? if yes disable renewal mode, pre-re give more atk iirc
  3. for storage is fine, but for autopot with param it will cause problem, did thread starter using autopot command by script or src mod? and i think you got other misunderstanding your request, imo you want to make the autopot (process) will not active in some maps, not the usage of the autopot command, because even the autopot command is disabled in inside map, they can use it outside map, and the process of autopot is being activated and working as usual.. if you use https://github.com/rathena/rathena/blob/master/npc/custom/etc/autopot.txt < this script add the condition check under OnStart Label
  4. you can try this... src\custom\script.inc BUILDIN_FUNC(specialeffect3) { struct block_list *bl = NULL; int id = 0; int type = script_getnum(st,2); enum send_target target = script_hasdata(st,3) ? (send_target)script_getnum(st,3) : AREA; if (script_hasdata(st,4)) { id = script_getnum(st,4); bl = map_id2bl(id); } else { bl = st->rid ? map_id2bl(st->rid) : map_id2bl(st->oid); } if(bl == NULL) return SCRIPT_CMD_SUCCESS; if( type <= EF_NONE || type >= EF_MAX ){ ShowError( "buildin_specialeffect: unsupported effect id %d\n", type ); return SCRIPT_CMD_FAILURE; } if (target == SELF) { TBL_PC *sd; if (script_rid2sd(sd)) clif_specialeffect_single(bl,type,sd->fd); } else { clif_specialeffect(bl, type, target); } return SCRIPT_CMD_SUCCESS; } src\custom\script_def.inc BUILDIN_DEF(specialeffect3,"i??"), usage example // GID examples... [email protected] = getcharid(3); //[email protected] = [email protected][0]; //[email protected] = killerrid; //[email protected] = killergid; specialeffect3 EF_HIT1,AREA,[email protected];
  5. prontera,155,181,5 script Sample 4_F_KAFRA1,{ if (!quest_random) { // quest not taken or completed, check the date and time. if (quest_random_next <= gettime(DT_DAYOFYEAR) && gettime(DT_HOUR) < 6) { mes "you have completed today quest, come again tomorrow, thank you!"; close; } quest_random = rand(1, 2); mes "You have been assigned with a new quest."; next; } switch(quest_random) { case 1: setarray [email protected], 4001, 1; setarray [email protected], 512; setarray [email protected], 100; break; case 2: setarray [email protected], 4002, 1; setarray [email protected], 501, 502, 503; setarray [email protected], 3, 1, 2; break; default: mes "invalid quest."; close; } mes "Quest Requirement(s):"; [email protected] = getarraysize([email protected]); for ([email protected] = 0; [email protected] < [email protected]; [email protected]++) { mes " > "[email protected][[email protected]]+"x "+getitemname([email protected][[email protected]]); if (countitem([email protected][[email protected]]) < [email protected][[email protected]]) [email protected]++; } if ([email protected]) { next; if (select("Submit Quest", "Cancel") == 1) { for ([email protected] = 0; [email protected] < [email protected]; [email protected]++) delitem [email protected][[email protected]], [email protected][[email protected]]; getitem [email protected][0], [email protected][1]; quest_random = 0; // Set next day limitation to take the quest. quest_random_next = gettime(DT_DAYOFYEAR); } } close; } you can try this
  6. isn't this ghost script ? why you didn't use latest one, this is one of popular script beside pvp announcer of miss annie. i can't think the exact reason why it isn't firing the announcement... but looking at the code for(set [email protected], 0; [email protected] < (getarraysize(.PvPMap$) - 1); set [email protected], [email protected] + 1){ say you have 3 map listed, it will only check 2 of 3, so in your case of you only have one map to check so it didn't even do the job because size is 1 -1 = 0, imo it should fall through to the next line of code and the announcer will still come out, but well indeed it strange... try use the latest script or fix / change that line above into for(set [email protected], 0; [email protected] < getarraysize(.PvPMap$); set [email protected], [email protected] + 1){ or add dummy map name for the array of pvpmap, just for the sake of it setarray .PvPMap$, "dummy","guild_vs3"; //List all pvp maps here (Index 0:"All" to enable all maps) ghost script i found in the forum search
  7. this will need extra src, you can take src code of mobsearch or showmobs command, to make it compatible for your use with map name <> mob id match as query, you need to adjust the code for the map name.
  8. it's was showed there "its trying to read what isn't there", well untested code, you can try this one, untested too, but should be ok in : src/map/pc.cpp bool pc_authok(struct map_session_data *sd, uint32 login_id2, time_t expiration_time, int group_id, struct mmo_charstatus *st, bool changing_mapservers) find: // Request all registries (auth is considered completed whence they arrive) intif_request_registry(sd,7); return true; its where the registry loaded, so after this you can take the state of acc protect from registry change: // Request all registries (auth is considered completed whence they arrive) intif_request_registry(sd,7); if( pc_readaccountreg(sd, add_str("#BLOCKPASS")) > 0 ) sd->state.protection_acc = 1; return true;
  9. you need to save the value of protection_acc on somewhere (mysql?) so you didn't lost it when log off or changing character. on pc.cpp void pc_setnewpc(struct map_session_data *sd, uint32 account_id, uint32 char_id, int login_id1, t_tick client_tick, int sex, int fd) { add if( pc_readaccountreg(sd, add_str("#BLOCKPASS")) > 0 ) sd->state.protection_acc = 1; after //Required to prevent homunculus copuing a base speed of 0. sd->battle_status.speed = sd->base_status.speed = DEFAULT_WALK_SPEED; untested...
  10. how much damage output and damage diff you get from 2nd change mentioned by you above ? int ratio = (int64)(status_get_hp(src) / 10000) * tsc->data[SC_CRESCENTELBOW]->val1 * status_get_lv(target) / 125; if (ratio > 500) ratio = 500; // Maximum of 5000% ATK this is crazy, iirc usually i only cap the hp and lower max ratio of atk, let said player a have crescent elbow and player b hit him, player b has 300k hp, before nerf main damage = (300,000/100) * 5 * 255/ 125 = 30600 * 5000 / 10 = 15,300,000 after nerf, main damge = (300,000/10000) * 5 * 255/ 125 = 306 * 500 / 10 = 1,530,000 if you see the pattern multiply and division of factor damage variable that multiply it, you only need to make it sane enough
  11. from if (getmapxy(@mapa$,@mapx,@mapy,0,strcharinfo(0)) != 0) end; to if (getmapxy(@mapa$,@mapx,@mapy, BL_PC, strcharinfo(0)) != 0) end;
  12. the easier way is do what mabuhay told ya, but if you wanna do it on src, take a look at this part if( tsc && tsc->data[SC_CRESCENTELBOW] && wd->flag&BF_SHORT && rnd()%100 < tsc->data[SC_CRESCENTELBOW]->val2 ) { //ATK [{(Target HP / 100) x Skill Level} x Caster Base Level / 125] % + [Received damage x {1 + (Skill Level x 0.2)}] int64 rdamage = 0; int ratio = (int64)(status_get_hp(src) / 100) * tsc->data[SC_CRESCENTELBOW]->val1 * status_get_lv(target) / 125; if (ratio > 5000) ratio = 5000; // Maximum of 5000% ATK rdamage = battle_calc_base_damage(target,tstatus,&tstatus->rhw,tsc,sstatus->size,0); rdamage = (int64)rdamage * ratio / 100 + wd->damage * (10 + tsc->data[SC_CRESCENTELBOW]->val1 * 20 / 10) / 10; skill_blown(target, src, skill_get_blewcount(SR_CRESCENTELBOW_AUTOSPELL, tsc->data[SC_CRESCENTELBOW]->val1), unit_getdir(src), BLOWN_NONE); clif_skill_damage(target, src, gettick(), status_get_amotion(src), 0, rdamage, 1, SR_CRESCENTELBOW_AUTOSPELL, tsc->data[SC_CRESCENTELBOW]->val1, DMG_SKILL); // This is how official does clif_damage(src, target, gettick(), status_get_amotion(src)+1000, 0, rdamage/10, 1, DMG_NORMAL, 0, false); status_damage(target, src, rdamage, 0, 0, 0); status_damage(src, target, rdamage/10, 0, 0, 1); status_change_end(target, SC_CRESCENTELBOW, INVALID_TIMER); } and compare to this details https://irowiki.org/wiki/Crescent_Elbow, you can make head what you need to nerf from the formula used, there is a comment on how formula worked there... usually pitfall on high cap max level server is the stats go so high and make it dumb damage output.
  13. re configure number of time out param in your summon set @nTime, (300+rand(0,120))-getmonsterinfo(killedrid,1); summon "Ajudante "+getmonsterinfo(killedrid,0), killedrid, @nTime; *summon "monster name",<monster id>{,<Time Out>{,"event label"}}; Timeout is the time in milliseconds the summon lives, and is set default to 60000 (1 minute). Note that also the value 0 will set the timer to default, and it is not possible to create a spawn that lasts forever. If an event label is given, upon the monster being killed, the event label will run as if by 'donpcevent'. time out param is in milliseconds, of course your spawned monster almost disappear instantly, you set time out at range 300 ~ 420 - Monster Killed Level, that not even a second