

bearnope246
Members-
Posts
94 -
Joined
-
Last visited
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Everything posted by bearnope246
-
06guild_01 06guild_02 06guild_03? These map is in mvp room script. I dont event see the .rsw file in the .grf... and these map use the same map like guild_vs2?? How to make more map like this?
-
is there a way to disable EXP from player only? Homun still get exp?
-
Different mes for duplicate from same npc.
bearnope246 replied to bearnope246's question in Scripting Support
That solved a lot of things for me. Thanks. How to switch with NPC id? -
Different mes for duplicate from same npc.
bearnope246 replied to bearnope246's question in Scripting Support
Could i know how? example: Just the same NPC, duplicated it in different Town, it said different dialog.? Thanks -
The title said it. Is this possible?
-
Bump.. update: Only female Doram char got this crash. And only some of the item?
-
Im redo my script like this: OnPCLoginEvent: if(!#login){ #login = gettimetick(2);} end; OnPCLogoutEvent: #logout = gettimetick(2); end; set .@online, gettimetick(2)- #login -(gettimetick(2)-#logout); if( .@online > 3600){ mes"ok"; close;} else{ set .@left, .@online/60; mes ""+.@left+" minutes left." close; } is this ok?
-
Index: src/map/atcommand.c =================================================================== --- src/map/atcommand.c (revision 17146) +++ src/map/atcommand.c (working copy) @@ -8840,6 +8840,39 @@ #undef MC_CART_MDFY } +// Aura System +ACMD_FUNC(auraset) { + struct map_session_data *pl_sd = 0; + int type = 0; + + if (!message || !*message || sscanf(message, "%d %[^\n]", &type, atcmd_player_name) < 2) + { + if (!message || !*message || sscanf(message, "%d", &type) < 1) + { + clif_displaymessage(fd, "Please, enter at least an option (usage: @auraset <aura> <char>)."); + return -1; + } + atcmd_player_name[0] = 0; + pl_sd = sd; + } + + if (pl_sd != sd) + { + if ((pl_sd = map_nick2sd(atcmd_player_name)) != NULL || ((pl_sd = map_id2sd(atoi(atcmd_player_name))) != NULL && pl_sd->state.active)) + { + } + else + return -1; + } + + pl_sd->aura = type; + pc_setglobalreg(pl_sd,"USERAURA",type); + pc_setpos(pl_sd, pl_sd->mapindex, pl_sd->bl.x, pl_sd->bl.y, 3); + clif_displaymessage(fd, "Aura set."); + + return 0; +} + /** * Fills the reference of available commands in atcommand DBMap **/ @@ -9100,7 +9133,8 @@ ACMD_DEF2("rmvperm", addperm), ACMD_DEF(unloadnpcfile), ACMD_DEF(cart), - ACMD_DEF(mount2) + ACMD_DEF(mount2), + ACMD_DEF(auraset) // Aura System }; AtCommandInfo* atcommand; int i; Index: src/map/clif.c =================================================================== --- src/map/clif.c (revision 17146) +++ src/map/clif.c (working copy) @@ -1353,6 +1353,7 @@ { TBL_PC *sd = ((TBL_PC*)bl); int i; + clif_sendauras((TBL_PC*)bl, SELF); // Aura System if (sd->spiritball > 0) clif_spiritball(&sd->bl); if(sd->state.size==SZ_BIG) // tiny/big players [Valaris] @@ -4502,6 +4503,13 @@ if(&sd->bl == bl) break; clif_getareachar_unit(sd,bl); + //Aura System + if (bl->type == BL_PC) + { + struct map_session_data *tsd = (struct map_session_data *)bl; + clif_sendaurastoone(sd,tsd); + clif_sendaurastoone(tsd,sd); + } break; } return 0; @@ -4593,6 +4601,12 @@ if (sd && sd->fd) { //Tell sd that tbl walked into his view clif_getareachar_unit(sd,tbl); + //Aura System + if(tsd) + { + clif_sendaurastoone(sd,tsd); + clif_sendaurastoone(tsd,sd); + } } return 0; } @@ -16365,6 +16379,183 @@ } /*========================================== + * Aura System + *------------------------------------------*/ + static int auraTable[][3] = { + { -1, -1, -1 }, + // Reserved for PK Mode + { 586, -1, -1 }, // LH + { 586, 362, -1 }, // LH Mvp + { 586, 362, 240 }, // 1? PK Place + // Basic Auras + { 418, -1, -1 }, // Red Fury + { 486, -1, -1 }, // Blue Fury + { 485, -1, -1 }, // White Fury + { 239, -1, -1 }, // Aura Red + { 240, -1, -1 }, // Aura White + { 241, -1, -1 }, // Aura Yellow + { 620, -1, -1 }, // Aura Blue + { 202, -1, -1 }, // Lvl 99 Bubbles + { 362, -1, -1 }, // Advanced Lvl 99 Bubbles + { 678, -1, -1 }, // Brazil Aura Bubbles + { 679, -1, -1 }, // Brazil Aura + { 680, -1, -1 }, // Brazil Aura Floor + // 2 Sets + { 239, 418, -1 }, + { 239, 486, -1 }, + { 239, 485, -1 }, + { 240, 418, -1 }, + { 240, 486, -1 }, + { 240, 485, -1 }, + { 241, 418, -1 }, + { 241, 486, -1 }, + { 241, 485, -1 }, + { 620, 418, -1 }, + { 620, 486, -1 }, + { 620, 485, -1 }, + // Full Sets + { 239, 418, 202 }, + { 239, 486, 202 }, + { 239, 485, 202 }, + { 240, 418, 202 }, + { 240, 486, 202 }, + { 240, 485, 202 }, + { 241, 418, 202 }, + { 241, 486, 202 }, + { 241, 485, 202 }, + { 620, 418, 202 }, + { 620, 486, 202 }, + { 620, 485, 202 }, + { 239, 418, 362 }, + { 239, 486, 362 }, + { 239, 485, 362 }, + { 240, 418, 362 }, + { 240, 486, 362 }, + { 240, 485, 362 }, + { 241, 418, 362 }, + { 241, 486, 362 }, + { 241, 485, 362 }, + { 620, 418, 362 }, + { 620, 486, 362 }, + { 620, 485, 362 }, + { 239, 418, 678 }, + { 239, 486, 678 }, + { 239, 485, 678 }, + { 240, 418, 678 }, + { 240, 486, 678 }, + { 240, 485, 678 }, + { 241, 418, 678 }, + { 241, 486, 678 }, + { 241, 485, 678 }, + { 620, 418, 678 }, + { 620, 486, 678 }, + { 620, 485, 678 }, + // Oficial Set + { 680, 679, 678 }, + { -1, -1, -1 } +}; + +int aura_getSize() +{ + return sizeof(auraTable)/(sizeof(int) * 3) - 1; +} + +int aura_getAuraEffect(struct map_session_data *sd, short pos) +{ + int aura = sd->aura; + + if (pos < 0 || pos > 2) + return -1; + + if (aura > aura_getSize() || aura < 0) + return -1; + + return auraTable[aura][pos]; +} + +void clif_sendauras( struct map_session_data *sd, enum send_target target ) +{ + int effect1, effect2, effect3; + effect1 = aura_getAuraEffect(sd, 0); + effect2 = aura_getAuraEffect(sd, 1); + effect3 = aura_getAuraEffect(sd, 2); + if (sd->status.option & OPTION_HIDE) + return; + + if (effect1 > 0) + clif_specialeffect(&sd->bl, effect1, target); + if (effect2 > 0) + clif_specialeffect(&sd->bl, effect2, target); + if (effect3 > 0) + clif_specialeffect(&sd->bl, effect3, target); +} + +/*========================================== + * Aura System + *------------------------------------------*/ +void clif_sendaurastoone( struct map_session_data *sd, struct map_session_data *dsd ) +{ + int effect1, effect2, effect3; + effect1 = aura_getAuraEffect(sd, 0); + effect2 = aura_getAuraEffect(sd, 1); + effect3 = aura_getAuraEffect(sd, 2); + + if (sd->status.option & OPTION_HIDE) + return; + + if (effect1 > 0) + clif_specialeffecttoone(&sd->bl, &dsd->bl, effect1); + if (effect2 > 0) + clif_specialeffecttoone(&sd->bl, &dsd->bl, effect2); + if (effect3 > 0) + clif_specialeffecttoone(&sd->bl, &dsd->bl, effect3); +} + +/*========================================== + * Aura System + *------------------------------------------*/ +int clif_specialeffecttoone(struct block_list *bl, struct block_list *dst, int type) { + + struct map_session_data *sd = (struct map_session_data *)dst; + + WFIFOW(sd->fd,0) = 0x1f3; + WFIFOL(sd->fd,2) = bl->id; + WFIFOL(sd->fd,6) = type; + WFIFOSET(sd->fd, packet_len(0x1f3)); + + return 0; +} + +/*========================================== + * Aura System + *------------------------------------------*/ +void clif_getareachar_char2(struct map_session_data* sd,struct block_list *bl) +{ + map_foreachinarea(clif_insight2, bl->m, bl->x-AREA_SIZE, bl->y-AREA_SIZE, bl->x+AREA_SIZE, bl->y+AREA_SIZE, BL_PC, bl); +} + +/*========================================== + * Aura System + *------------------------------------------*/ +int clif_insight2(struct block_list *bl,va_list ap) +{ + struct block_list *tbl; + TBL_PC *sd, *tsd; + tbl=va_arg(ap,struct block_list*); + + if (bl == tbl) + return 0; + + sd = BL_CAST(BL_PC, bl); + tsd = BL_CAST(BL_PC, tbl); + + if (sd && sd->fd) //Tell sd that tbl walked into his view + clif_getareachar_unit(sd,tbl); + + return 0; +} + +/*========================================== * Main client packet processing function *------------------------------------------*/ static int clif_parse(int fd) Index: src/map/clif.h =================================================================== --- src/map/clif.h (revision 17146) +++ src/map/clif.h (working copy) @@ -756,6 +756,13 @@ void clif_snap( struct block_list *bl, short x, short y ); void clif_monster_hp_bar( struct mob_data* md, int fd ); +// Aura System +int clif_specialeffecttoone(struct block_list *bl, struct block_list *dst, enum send_target target); +void clif_sendauras( struct map_session_data *sd, int target ); +void clif_sendaurastoone(struct map_session_data *sd, struct map_session_data *dsd); +void clif_getareachar_char2(struct map_session_data* sd,struct block_list *bl); +int clif_insight2(struct block_list *bl,va_list ap); + /** * Color Table **/ Index: src/map/pc.c =================================================================== --- src/map/pc.c (revision 17146) +++ src/map/pc.c (working copy) @@ -1154,6 +1154,9 @@ // Cooking Exp sd->cook_mastery = pc_readglobalreg(sd,"COOK_MASTERY"); + //Aura System + sd->aura = pc_readglobalreg(sd,"USERAURA"); + if( (sd->class_&MAPID_BASEMASK) == MAPID_TAEKWON ) { // Better check for class rather than skill to prevent "skill resets" from unsetting this sd->mission_mobid = pc_readglobalreg(sd,"TK_MISSION_ID"); Index: src/map/pc.h =================================================================== --- src/map/pc.h (revision 17146) +++ src/map/pc.h (working copy) @@ -475,6 +475,9 @@ int shadowform_id; + //Aura System + int aura; + // temporary debugging of bug #3504 const char* delunit_prevfile; int delunit_prevline; Index: src/map/status.c =================================================================== --- src/map/status.c (revision 17146) +++ src/map/status.c (working copy) @@ -7490,12 +7490,24 @@ } break; case SC_HIDING: + // Aura System + if (sd && sd->aura > 0){ + sd->aura *= -1; + clif_clearunit_area(&sd->bl, (clr_type)4); + clif_getareachar_char2(sd, &sd->bl); + } val2 = tick/1000; tick_time = 1000; // [GodLesZ] tick time val3 = 0; // unused, previously speed adjustment val4 = val1+3; //Seconds before SP substraction happen. break; case SC_CHASEWALK: + // Aura System + if (sd && sd->aura > 0){ + sd->aura *= -1; + clif_clearunit_area(&sd->bl, (clr_type)4); + clif_getareachar_char2(sd, &sd->bl); + } val2 = tick>0?tick:10000; //Interval at which SP is drained. val3 = 35 - 5 * val1; //Speed adjustment. if (sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_ROGUE) @@ -7504,6 +7516,12 @@ if (map_flag_gvg(bl->m) || map[bl->m].flag.battleground) val4 *= 5; break; case SC_CLOAKING: + // Aura System + if (sd && sd->aura > 0){ + sd->aura *= -1; + clif_clearunit_area(&sd->bl, (clr_type)4); + clif_getareachar_char2(sd, &sd->bl); + } if (!sd) //Monsters should be able to walk with no penalties. [Skotlex] val1 = 10; tick_time = val2 = tick>0?tick:60000; //SP consumption rate. @@ -8112,6 +8130,12 @@ val_flag |= 1; break; case SC_CLOAKINGEXCEED: + // Aura System + if (sd && sd->aura > 0){ + sd->aura *= -1; + clif_clearunit_area(&sd->bl, (clr_type)4); + clif_getareachar_char2(sd, &sd->bl); + } val2 = ( val1 + 1 ) / 2; // Hits val3 = 90 + val1 * 10; // Walk speed val_flag |= 1|2|4; @@ -8170,6 +8194,12 @@ tick_time = 1000; // [GodLesZ] tick time break; case SC_CAMOUFLAGE: + // Aura System + if (sd && sd->aura > 0){ + sd->aura *= -1; + clif_clearunit_area(&sd->bl, (clr_type)4); + clif_getareachar_char2(sd, &sd->bl); + } val4 = tick/1000; tick_time = 1000; // [GodLesZ] tick time break; @@ -9615,6 +9645,11 @@ break; case SC_HIDING: + //Aura System + if (sd && sd->aura < 0){ + sd->aura *= -1; + clif_sendauras(sd, AREA_WOS); + } sc->option &= ~OPTION_HIDE; opt_flag|= 2|4; //Check for warp trigger + AoE trigger break; @@ -9623,9 +9658,19 @@ case SC__INVISIBILITY: sc->option &= ~OPTION_CLOAK; case SC_CAMOUFLAGE: + //Aura System + if (sd && sd->aura < 0){ + sd->aura *= -1; + clif_sendauras(sd, AREA_WOS); + } opt_flag|= 2; break; case SC_CHASEWALK: + //Aura System + if (sd && sd->aura < 0){ + sd->aura *= -1; + clif_sendauras(sd, AREA_WOS); + } sc->option &= ~(OPTION_CHASEWALK|OPTION_CLOAK); opt_flag|= 2; break; + >> add. - >> delete. change in atcommand.c pc_setglobalreg(pl_sd,"USERAURA",type); to pc_setglobalreg(pl_sd, addstr("USERAURA"),type); Change in pc.c pc_readglobalreg(sd,"USERAURA"); to pc_readglobalreg(sd,adstr("USERAURA")); Add effect in clif.c { <effect 1>, <effect 2>, <effect 3> } -1 if you want it to do nothing. Save>> Recompile Command in game: @auraset number (default max 64) That's is what i do. Worked fine for me.
-
gettimetick(2) from onlogin and onlogout event? Iknow i messed up, How to make a timer that only count when they are in game? thanks
-
if((gettimetick(2) - #login) - (gettimetick(2)- #logout) > 3600) So time doesn't count when logout?
-
No No sorry if i was unclear. I am asking about SQL db import to the server database editor program. This one: https://rathena.org/board/files/file/3269-server-database-editor/ It only use txt file from db folder. but i change to SQL long time ago
-
1.How to inport a SQL db into Server database editor. 1.IF not, how to convert SQL to txt? thanks.
-
Wow, the forum didn't notice me about your reply, i will try today, and report back ^^ thanks update: [solved] Thanks emistry and kurofly. I found out that the problems actually lies in the OnMvpDead: in the first place, i change the mob amount but forgot to changed this part, so every time i kill a mob, it count as 1 round. Now i can duplicate this script and use it as stage game aswell. Thanks
-
Thank you for replying, actualy i found a way to fix this temporaly. I make the gunslinger and other extended job reborn not to change back to novice, but only reset the level. The novice job is not necessary anyway. But it's still unsolved, not the way i wanted
-
The Doram class in my server have problem with costume item. I can wear it, the item display fine. But When i Open the equipment tab. (Alt + Q) and click on the cosutme tab, the client crash.. Need a solution Thanks
-
Oh, you misunderstood me. You know about the rebirth system right? when players get to rebirth more than once? So i'm using that system and when a gunslinger reborn , job npc let them change to other job. Example: like this .... Novice >>> Gunsinger >>>>Novice >>> Swordman. i want it to be Novice >>> Gunslinger >> Novice >>>Gunslinger...... PS: I want to save a Lastjob variable like High Novice.... You reborn and you have to stick to your job... you know.... but the script is too conplicate and i'm afraid i will messed it up.
-
So i'm been using Rebirth system. How to edit the jobmaster npc, that when a gunslinger rebirth, they can only change job to gunslinger only? //===== rAthena Script ======================================= //= Job Master //===== By: ================================================== //= Euphy //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== //= rAthena Project //===== Description: ========================================= //= A fully functional job changer. //===== Additional Comments: ================================= //= 1.0 Initial script. //= 1.1 Fixed reset on Baby job change. //= 1.2 Added Expanded Super Novice support and initial Kagerou/Oboro support. //= 1.3 Kagerou/Oboro added. //= 1.4 Rebellion added. //============================================================ prontera,165,190,4 script Job Master 412,{ function Job_Menu; mes "[Job Master]"; if (Class > Job_Soul_Linker) { mes "No more jobs are available."; close; } if (checkfalcon() || checkcart() || checkriding() || ismounting()) { mes "Please remove your " + ((checkfalcon()) ? "falcon" : "") + ((checkcart()) ? "cart" : "") + ((checkriding()) ? "Peco" : "") + ((ismounting()) ? "mount" : "") + " before proceeding."; close; } if (.SkillPointCheck && SkillPoint) { mes "Please use all your skill points before proceeding."; close; } .@eac = eaclass(); .@i = ((.ThirdClass) ? roclass(.@eac&EAJ_UPPERMASK) : Class); if (.@i >= Job_Knight && .@i <= Job_Crusader2) { if (BaseLevel < .Rebirth[0] || JobLevel < .Rebirth[1]) { .@blvl = .Rebirth[0] - BaseLevel; .@jlvl = .Rebirth[1] - JobLevel; mes "You need " + ((.@blvl > 0) ? .@blvl + " more base levels " + ((.@jlvl > 0) ? "/ " : "") : "") + ((.@jlvl > 0) ? .@jlvl + " more job levels " : "") + "to continue."; close; } if (Class > Job_Crusader2) { mes "Switch to third class?"; next; Job_Menu(roclass(.@eac|EAJL_THIRD)); close; } while(1) { mes "Select an option."; next; .@i = select(" ~ ^0055FFRebirth^000000:" + ((.ThirdClass) ? " ~ ^FF0000Third Class^000000" : "") + ": ~ ^777777Cancel^000000"); if (.@i == 3) close; mes "[Job Master]"; mes "Are you sure?"; next; Job_Menu(((.@i == 1) ? Job_Novice_High : roclass(.@eac|EAJL_THIRD))); mes "[Job Master]"; } } .@j1 = roclass(.@eac|EAJL_2_1); .@j2 = roclass(.@eac|EAJL_2_2); if ((.@eac&EAJ_UPPERMASK) == EAJ_SUPER_NOVICE) setarray .@exp[0], roclass(.@eac|EAJL_THIRD), 99; if (Class == Job_Ninja || Class == Job_Gunslinger) setarray .@exp[0], .@j1, 70; if (.@exp[0] && .SecondExpanded) { if (BaseLevel < .Rebirth[0] || JobLevel < .@exp[1]) { .@blvl = .Rebirth[0] - BaseLevel; .@jlvl = .@exp[1] - JobLevel; mes "You need " + ((.@blvl > 0) ? .@blvl + " more base levels " + ((.@jlvl > 0) ? "/ " : "") : "") + ((.@jlvl > 0) ? .@jlvl + " more job levels " : "") + "to continue."; close; } mes "Switch to " + jobname(.@exp[0]) + "?"; next; Job_Menu(.@exp[0]); close; } if (.@eac&EAJL_2) if (.@eac&(EAJL_UPPER|EAJL_BABY) || roclass(.@eac|EAJL_UPPER) == -1) { mes "No more jobs are available."; close; } if ((.@eac&EAJ_BASEMASK) == EAJ_NOVICE) { if (JobLevel < .JobReq[0]) mes "A job level of " + .JobReq[0] + " is required to change into the 1st Class."; else if (Class == Job_Novice_High && .LastJob && lastJob) { mes "Switch classes now?"; next; Job_Menu(roclass((eaclass(lastJob)&EAJ_BASEMASK)|EAJL_UPPER)); } else { switch(Class) { case Job_Novice: Job_Menu( Job_Swordman, Job_Mage, Job_Archer, Job_Acolyte, Job_Merchant, Job_Thief, Job_SuperNovice, Job_Taekwon, Job_Gunslinger, Job_Ninja, Job_Baby ); break; case Job_Novice_High: Job_Menu( Job_Swordman_High, Job_Mage_High, Job_Archer_High, Job_Acolyte_High, Job_Merchant_High, Job_Thief_High ); break; case Job_Baby: Job_Menu( Job_Baby_Swordman, Job_Baby_Mage, Job_Baby_Archer, Job_Baby_Acolyte, Job_Baby_Merchant, Job_Baby_Thief, Job_Super_Baby ); break; default: mes "An error has occurred."; break; } } close; } if (roclass(.@eac|EAJL_2_1) == -1 || roclass(.@eac|EAJL_2_2) == -1) mes "No more jobs are available."; else if (!(.@eac&EAJL_2) && JobLevel < .JobReq[1]) mes "A job level of " + .JobReq[1] + " is required to change into the 2nd Class."; else if (.LastJob && lastJob && (.@eac&EAJL_UPPER)) { mes "Switch classes now?"; next; Job_Menu(lastJob + Job_Novice_High); } else Job_Menu(.@j1, .@j2); close; function Job_Menu { while(1) { if (getargcount() > 1) { mes "Select a job."; .@menu$ = ""; for (.@i = 0; .@i < getargcount(); .@i++) .@menu$ = .@menu$ + " ~ " + jobname(getarg(.@i)) + ":"; .@menu$ = .@menu$+" ~ ^777777Cancel^000000"; next; .@i = getarg(select(.@menu$) - 1, 0); if (!.@i) close; if ((.@i == Job_SuperNovice || .@i == Job_Super_Baby) && BaseLevel < .SNovice) { mes "[Job Master]"; mes "A base level of " + .SNovice + " is required to turn into a " + jobname(.@i) + "."; close; } mes "[Job Master]"; mes "Are you sure?"; next; } else .@i = getarg(0); if (select(" ~ Change into ^0055FF" + jobname(.@i) + "^000000 class: ~ ^777777" + ((getargcount() > 1) ? "Go back" : "Cancel") + "^000000") == 1) { mes "[Job Master]"; mes "You are now " + callfunc("F_InsertArticle", jobname(.@i)) + "!"; if (.@i == Job_Novice_High && .LastJob) lastJob = Class; jobchange .@i; if (.@i == Job_Novice_High) resetlvl(1); else if (.@i == Job_Baby) { resetstatus; resetskill; set SkillPoint,0; } specialeffect2 EF_ANGEL2; specialeffect2 EF_ELECTRIC; if (.Platinum) callsub Get_Platinum; close; } if (getargcount() == 1) return; mes "[Job Master]"; } end; } Get_Platinum: skill "NV_FIRSTAID",1,SKILL_PERM; switch (BaseClass) { case Job_Novice: if (Class != Job_SuperNovice) skill "NV_TRICKDEAD",1,SKILL_PERM; break; case Job_Swordman: skill "SM_MOVINGRECOVERY",1,SKILL_PERM; skill "SM_FATALBLOW",1,SKILL_PERM; skill "SM_AUTOBERSERK",1,SKILL_PERM; break; case Job_Mage: skill "MG_ENERGYCOAT",1,SKILL_PERM; break; case Job_Archer: skill "AC_MAKINGARROW",1,SKILL_PERM; skill "AC_CHARGEARROW",1,SKILL_PERM; break; case Job_Acolyte: skill "AL_HOLYLIGHT",1,SKILL_PERM; break; case Job_Merchant: skill "MC_CARTREVOLUTION",1,SKILL_PERM; skill "MC_CHANGECART",1,SKILL_PERM; skill "MC_LOUD",1,SKILL_PERM; break; case Job_Thief: skill "TF_SPRINKLESAND",1,SKILL_PERM; skill "TF_BACKSLIDING",1,SKILL_PERM; skill "TF_PICKSTONE",1,SKILL_PERM; skill "TF_THROWSTONE",1,SKILL_PERM; break; default: break; } switch (BaseJob) { case Job_Knight: skill "KN_CHARGEATK",1,SKILL_PERM; break; case Job_Priest: skill "PR_REDEMPTIO",1,SKILL_PERM; break; case Job_Wizard: skill "WZ_SIGHTBLASTER",1,SKILL_PERM; break; case Job_Blacksmith: skill "BS_UNFAIRLYTRICK",1,SKILL_PERM; skill "BS_GREED",1,SKILL_PERM; break; case Job_Hunter: skill "HT_PHANTASMIC",1,SKILL_PERM; break; case Job_Assassin: skill "AS_SONICACCEL",1,SKILL_PERM; skill "AS_VENOMKNIFE",1,SKILL_PERM; break; case Job_Crusader: skill "CR_SHRINK",1,SKILL_PERM; break; case Job_Monk: skill "MO_KITRANSLATION",1,SKILL_PERM; skill "MO_BALKYOUNG",1,SKILL_PERM; break; case Job_Sage: skill "SA_CREATECON",1,SKILL_PERM; skill "SA_ELEMENTWATER",1,SKILL_PERM; skill "SA_ELEMENTGROUND",1,SKILL_PERM; skill "SA_ELEMENTFIRE",1,SKILL_PERM; skill "SA_ELEMENTWIND",1,SKILL_PERM; break; case Job_Rogue: skill "RG_CLOSECONFINE",1,SKILL_PERM; break; case Job_Alchemist: skill "AM_BIOETHICS",1,SKILL_PERM; break; case Job_Bard: skill "BA_PANGVOICE",1,SKILL_PERM; break; case Job_Dancer: skill "DC_WINKCHARM",1,SKILL_PERM; break; default: break; } return; OnInit: setarray .Rebirth[0],99,50; // Minimum base level, job level to rebirth OR change to third class setarray .JobReq[0],10,40; // Minimum job level to turn into 1st class, 2nd class .ThirdClass = 0; // Enable third classes? (1: yes / 0: no) .SecondExpanded = 0; // Enable new expanded second classes: Ex. Super Novice, Kagerou/Oboro, Rebellion? (1: yes / 0: no) .SNovice = 45; // Minimum base level to turn into Super Novice .LastJob = 1; // Enforce linear class changes? (1: yes / 0: no) .SkillPointCheck = 1; // Force player to use up all skill points? (1: yes / 0: no) .Platinum = 0; // Get platinum skills automatically? (1: yes / 0: no) end; } caspen,146,221,4 duplicate(Job Master) job#cas 412 Thanks
-
How to get char name when they hit the punching bag? thanks. OnMyMobDead: OnInit: getunitdata(getnpcid(0), .@d); monster strnpcinfo(4),.@d[UNPC_X],.@d[UNPC_Y],"Punching Bag",2411,1,strnpcinfo(0)+"::OnMyMobDead"; .@dupid = atoi(strnpcinfo(2)); .gid[.@dupid] = $@mobid[0]; .mhp[.@dupid] = strmobinfo(4,2411); setunitdata .gid[.@dupid],UMOB_MODE,.@d[UMOB_MODE]|0x4000000|0x0200000; // Set MD_STATUS_IMMUNE (0x4000000) because EDP/burn/%MHP based status can skew the DPS counter so much. initnpctimer; end; OnTimer5000: .@dupid = atoi(strnpcinfo(2)); if(unitexists(.gid[.@dupid])){ getunitdata(.gid[.@dupid],.@d); .@diff = (.mhp[.@dupid] - .@d[UMOB_HP]); if(.@diff > 0){ npctalk "" + (.@diff/5) + " in 5 seconds."; setunitdata .gid[.@dupid],UMOB_HP,.mhp[.@dupid]; specialeffect EF_HEAL;
-
Actually, i solved it, thanks guys.
-
So i wrote this script to change the map BGM. (i got some part from other script too) Please help me to add a delay request, and is it possible to make other player entered the map after request can hear it too? casp_in01,49,187,6 script Musician 479,{ mes "[Musician]"; mes "Relax for a sec, And you find T-ro the best place for u"; menu "Play a song for me",L_forme,"Play a song for everyone",L_foreveryone; L_foreveryone: mes "What Song Would you like to play?"; switch(select("I know a song:"+$@Songname$[0]+":"+$@Songname$[1]+":"+$@Songname$[2]+":None")) { case 1: mes "[Musician]"; mes "Whats the file number."; mes "Example : 01,02,03 (in BGM file)."; mes "Do not try to add your own music, other won't hear it."; mes "If you try to spam, you could be banned.!"; next; input .@bgm$; playBGMall ""+.@bgm$+"",""+strcharinfo(3)+""; announce "Song ("+.@bgm$+") is being played by "+strcharinfo(0)+"",bc_map,0x6bcea9; close; case 2: playBGMall ""+$@Song$[0]+"",""+strcharinfo(3)+""; announce "Song ("+$@Songname$[0]+") is being played by "+strcharinfo(0)+"",bc_map,0x6bcea9; close; case 3: playBGMall ""+$@Song$[1]+"",""+strcharinfo(3)+""; announce "Song ("+$@Songname$[1]+") is being played by "+strcharinfo(0)+"",bc_map,0x6bcea9; close; case 4: playBGMall ""+$@Song$[2]+"",""+strcharinfo(3)+""; announce "Song ("+$@Songname$[2]+") is being played by "+strcharinfo(0)+"",bc_map,0x6bcea9; close; case 5: mes "[Musician]"; mes "Keep Dancing!!!!"; close; } L_forme: mes "What Song Would you like to play?"; switch(select("I know a song:"+$@Songname$[0]+":"+$@Songname$[1]+":"+$@Songname$[2]+":None")) { case 1: mes "[Musician]"; mes "Whats the file number."; mes "Example : 01,02,03 (in BGM file)."; mes "Do not try to add your own music, other won't here it."; mes "If you try to spam, you could be banned.!"; next; input .@bgm$; playBGM ""+.@bgm$+""; announce "Song ("+.@bgm$+") is being played",bc_map,0x6bcea9; close; case 2: playBGM ""+$@Song$[0]+""; announce "Song ("+$@Songname$[0]+") is being played",bc_self,0x6bcea9; close; case 3: playBGM ""+$@Song$[1]+""; announce "Song ("+$@Songname$[1]+") is being played",bc_self,0x6bcea9; close; case 4: playBGM ""+$@Song$[2]+""; announce "Song ("+$@Songname$[2]+") is being played",bc_self,0x6bcea9; close; case 5: mes "[Musician]"; mes "Keep Dancing!!!!"; close; } oninit: //Change music file names. setarray $@Song$[0],"Eternity","03","04"; //music names. setarray $@Songname$[0],"Eternity","Move your Body","Make a Move"; end; } caspen,168,224,6 duplicate(Musician) Musiccian#caspen1 479
-
Can the amount be different every round ? And i try the change above. Every time i kill a mvp, it count as 1 round.
-
How to add more mvp to a round? like 10 ifrit a round? Thanks //===== rAthena Script ======================================= //= MVP Ladder Game //===== By: ================================================== //= aftermath, AnnieRuru (rewrite) //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== //= rAthena Project //===== Description: ========================================= //= Gather a party and kill every MVP in ascending order. //===== Additional Comments: ================================= //= 1.0 First version, edited. [Euphy] //============================================================ prontera,169,208,5 script MvP Ladder Warper 56,{ mes "[MvP Ladder Warper]"; mes "Say... do you want to play the MvP Ladder game?"; next; switch(select("Yes, let's get it on!:Information.:Show me the best record.:No.")) { case 1: break; case 2: mes "[MvP Ladder Warper]"; mes "In this game, your party has to kill every single MvP monster in ascending order, from the weakest to strongest."; if ( .finish_item_amount ) mes "If your party can finish the MVP ladder game, each member will earn "+ callfunc("F_InsertPlural", .finish_item_amount, getitemname( .finish_item_id )) +"."; if ( .register_cost ) mes "But the entrance fee is "+ callfunc( "F_InsertComma", .register_cost ) +" zeny."; next; mes "[MvP Ladder Warper]"; mes "You lose the game if you can't finish in "+ .timeout +" minutes, or if your entire party is killed."; mes "Good luck!"; close; case 3: mes "[MvP Ladder Warper]"; if ( !$mvpladdderparty_time ) { mes "Nobody has finished this game yet."; close; } mes "The best record is"; mes "[ "+( $mvpladdderparty_time / 60 )+" min "+( $mvpladdderparty_time % 60 )+" sec ]"; mes "By the party ^FF0000"+ $mvpladdderparty_name$ +"^000000."; .@size = getarraysize( $mvpladderparty_member$ ); for ( .@i = 0; .@i < .@size; .@i++ ) mes "^000000"+ ( .@i +1 ) +". ^0000FF"+ $mvpladderparty_member$[.@i]; if ( getgmlevel() < .gmlvlreset ) close; next; if ( select( "Close.", "Reset the record." ) == 1 ) close; if ( select( "Never mind.", "I really want to reset it." ) == 1 ) close; $mvpladdderparty_time = 0; $mvpladdderparty_name$ = ""; deletearray $mvpladderparty_member$[.@i]; mes "[MvP Ladder Warper]"; mes "Record reset successfully."; close; case 4: mes "[MvP Ladder Warper]"; mes "When you are strong enough to complete the game, please come back."; close; } if ( !getcharid(1) ) { mes "[MvP Ladder Warper]"; mes "You have to form a party to play."; close; } if ( getpartyleader( getcharid(1), 2 ) != getcharid(0) ) { mes "[MvP Ladder Warper]"; mes "Only the party leader can register."; close; } .@origin = getcharid(3); getpartymember getcharid(1), 1; getpartymember getcharid(1), 2; for ( .@i = 0; .@i < $@partymembercount; .@i++ ) { if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) { attachrid $@partymemberaid[.@i]; if ( strcharinfo(3) == strnpcinfo(4) ) .@online++; } } attachrid .@origin; if ( $@partymembercount != .register_min ) { mes "[MvP Ladder Warper]"; mes "You have to form a party with exactly "+ .register_min +" members to play."; close; } else if ( .@online != .register_min ) { mes "[MvP Ladder Warper]"; mes "Your party must have "+ .register_min +" members online on map '"+ strnpcinfo(4) +"'."; close; } else if ( .register_cost && Zeny < .register_cost ) { mes "[MvP Ladder Warper]"; mes "You don't have enough zeny. Please come back when you do."; close; } else if ( .party_id ) { mes "[MvP Ladder Warper]"; mes "I'm sorry, but a party is currently playing the game. Please standby until the party is finished."; mes "Thank you."; close; } Zeny -= .register_cost; announce "The party ["+ strcharinfo(1) +"] has started the MvP ladder game.", bc_all; set .party_id, getcharid(1); set .@time_enter, gettimetick(2); for ( .@i = 0; .@i < $@partymembercount; .@i++ ) { if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) { attachrid $@partymemberaid[.@i]; if ( strcharinfo(3) == strnpcinfo(4) ) { announce "You have "+ .timeout +" minutes to complete "+ .totalround +" rounds.", bc_self; .@name$[.@c] = strcharinfo(0); .@c++; } } } cleanmap .eventmap$; warpparty .eventmap$, 0,0, .party_id, strnpcinfo(4); donpcevent strnpcinfo(0)+"::OnMvpDead"; sleep .timeout * 60000; if ( .round == .totalround +1 ) { getpartymember .party_id, 1; getpartymember .party_id, 2; mapannounce .eventmap$, "Congratulations... You were able to defeat all the MVPs!", bc_map; for ( .@i = 0; .@i < $@partymembercount; .@i++ ) { if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) { attachrid $@partymemberaid[.@i]; if ( strcharinfo(3) == .eventmap$ ) getitem .finish_item_id, .finish_item_amount; } } set .@timeused, gettimetick(2) - .@time_enter; if ( .bonus_item_amount && .@timeused < .bonus_time * 60 ) { mapannounce .eventmap$, "You are rewarded a bonus item for completing the ladder within "+ .bonus_time +" minutes.", bc_map; for ( .@i = 0; .@i < $@partymembercount; .@i++ ) { if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) { attachrid $@partymemberaid[.@i]; if ( strcharinfo(3) == .eventmap$ ) getitem .bonus_item_id, .bonus_item_amount; } } } if ( !$mvpladdderparty_time || .@timeused < $mvpladdderparty_time ) { mapannounce .eventmap$, "And you broke the record! [ "+( .@timeused / 60 )+" min "+( .@timeused % 60 )+" sec ]", bc_map; set $mvpladdderparty_time, .@timeused; set $mvpladdderparty_name$, getpartyname( .party_id ); copyarray $mvpladderparty_member$, .@name$, .register_min; } else mapannounce .eventmap$, "Time used [ "+( .@timeused / 60 )+" min "+( .@timeused % 60 )+" sec ]", bc_map; sleep 10000; announce "The party ["+ getpartyname( .party_id ) +"] has finished the MvP ladder game!", bc_all; } else announce "The party ["+ getpartyname( .party_id ) +"] has failed to finish the MvP ladder game.", bc_all; mapwarp .eventmap$, .map$, .x, .y; killmonsterall .eventmap$; .party_id = .round = 0; end; OnMvpDead: .round++; if ( .round >= 2 && .round != .totalround +1 && .round_item_amount ) { for ( .@i = 0; .@i < $@partymembercount; .@i++ ) { if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) { attachrid $@partymemberaid[.@i]; if ( strcharinfo(3) == .eventmap$ ) getitem .round_item_id, .round_item_amount; } } } if ( .round == .totalround +1 ) { awake strnpcinfo(0); end; } else if ( .round == .totalround ) mapannounce .eventmap$, "The final Round will begin in "+ .delay +" seconds...", bc_map; else mapannounce .eventmap$, "Starting round "+ .round +" in "+ .delay +" seconds...", bc_map; sleep .delay * 1000; if ( .mvpid[.round] == 1646 ) // pick random Bio3 MVP .mvpid[.round] = rand(1646,1651); monster .eventmap$,0,0, "--ja--", .mvpid[.round], 1, strnpcinfo(0)+"::OnMvpDead"; mapannounce .eventmap$, getmonsterinfo( .mvpid[.round], MOB_NAME ) +" has spawned!", bc_map|bc_blue; end; OnPCLogoutEvent: if ( hp > 0 ) .@less_one = 1; else end; OnPCDieEvent: if ( strcharinfo(3) != .eventmap$ || !getcharid(1) ) end; if ( getcharid(1) != .party_id ) end; getpartymember .party_id, 1; getpartymember .party_id, 2; for ( .@i = 0; .@i < $@partymembercount; .@i++ ) { if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) { attachrid $@partymemberaid[.@i]; if ( strcharinfo(3) == .eventmap$ && hp > 0 ) .@alive++; } } if ( .@less_one ) .@alive--; if ( !.@alive ) { mapannounce .eventmap$, "Party wiped!", bc_map; sleep 10000; awake strnpcinfo(0); } end; OnInit: // Configurations ----------------------------------------------------- // Time limit (in minutes) // When time runs out, all players inside the room will be kicked out. // Do NOT set this to zero! set .timeout, 60; // entrance fee (in Zeny) set .register_cost, 100000; // exact amount of party members needed to start the game set .register_min, 1; // id of each mvp. you can add more setarray .mvpid[1], 1086,// Golden Thief Bug 64 1115,// Eddga 65 1150,// Moonlight Flower 67 1159,// Phreeoni 69 1112,// Drake 70 1583,// Tao Gunka 70 1492,// Incantation Samurai 71 1046,// Doppelgangger 72 1252,// Garm 73 1418,// Evil Snake Lord 73 1059,// Mistress 74 1190,// Orc Lord 74 1087,// Orc Hero 77 1251,// Knight of Windstorm 77 1038,// Osiris 78 1658,// Ygnizem 79 1272,// Dark Lord 80 1871,// Fallen Bishop 80 1039,// Baphomet 81 1147,// Maya 81 1785,// Atroce 82 1389,// Dracula 85 1630,// Bacsojin 85 1885,// Gorynych 85 1623,// RSX 0806 86 1511,// Amon Ra 88 1688,// Lady Tanee 89 1768,// Gloom Under Night 89 1719,// Datale 90 1734,// Kiel D-01 90 1157,// Pharaoh 93 1373,// Lord of Death 94 1312,// Turtle General 97 1779,// Ktullanux 98 1874,// Beelzebub 98 1646,// Bio3 placeholder 99 1708,// Thanatos 99 1751,// Valkyrie Randgris 99 1832;// Ifrit 99 // number of rounds (default: 39) set .totalround, getarraysize(.mvpid) -1; // item reward for completing each round set .round_item_id, 7859; set .round_item_amount, 1; // item reward for completing the entire ladder set .finish_item_id, 7859; set .finish_item_amount, 5; // bonus reward if ladder completed within a certain time (in minutes) set .bonus_time, 45; // if completed within 45 minutes, this reward is given set .bonus_item_id, 504; set .bonus_item_amount, 10; // time delay between rounds, in seconds (default: 3) set .delay, 5; // minimum GM level to reset the best record set .gmlvlreset, 99; // event map set .eventmap$, "guild_vs2-2"; // mapflag configuration setarray .@mapflag, mf_nowarp, mf_nowarpto, mf_nosave, mf_nomemo, mf_noteleport, // mf_nopenalty, // disable exp loss mf_noreturn, // mf_nobranch, // mf_nomobloot, // disable monster drop loots, // mf_nomvploot, // 2 of these mf_partylock; // Config Ends -------------------------------------------------------------- mapannounce .eventmap$, "An administrator has refreshed the server. Please re-register. We apologize for the inconvenience.", bc_map; getmapxy .map$, .x, .y, UNITTYPE_NPC; mapwarp .eventmap$, .map$, .x, .y; killmonsterall .eventmap$; .@size = getarraysize( .@mapflag ); for ( .@i = 0; .@i < .@size; .@i++ ) setmapflag .eventmap$, .@mapflag[.@i]; end; }
-
Thank you, next time please be clearer it took me another 15 minute around google and the search engine because people dont use "academy", they use "training ground". Solved: npc/re/scripts_jobs.conf //npc: npc/re/jobs/novice/academy.txt npc: npc/re/jobs/novice/novice.txt
-
Yes, i don't like the new izlude academy. Anyone can show me how to bring back the old academy? thanks
-
Custom item CLient-side problems
bearnope246 replied to bearnope246's question in Client-side Support
Solved, 1.Some item work with data folder, some not, so always use .grf 2.If view id is over 2000, check client diff. 3.some item have to be put in 3 txt file. idnum2itemresnametable ......