Jump to content

Skorm

Forum Moderator
  • Posts

    1268
  • Joined

  • Last visited

  • Days Won

    33

Community Answers

  1. Skorm's post in MVP points was marked as the answer   
    Search for "MVP ladder" you will find plenty of scripts that do just this.
     
     
  2. Skorm's post in help How to made Healer only for guild member was marked as the answer   
    @yodaGG
    prontera,158,192,3 script Healer 621,{ specialeffect2 EF_HEAL2; percentheal 100,100; specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,600000,10; specialeffect2 EF_ASSUMPTIO; sc_start SC_ASSUMPTIO,600000,5; specialeffect2 EF_BLESSING; sc_start SC_BLESSING,600000,10; specialeffect2 EF_ANGELUS; sc_start SC_ANGELUS,600000,10; specialeffect2 EF_GLORIA; sc_start SC_GLORIA,600000,5; if (countitem(.VIP_item) || countitem(.Premium_Ticket)) { specialeffect2 EF_BLESSING; sc_start SC_BLESSING,600000,10; specialeffect2 HP_ASSUMPTIO; sc_start HP_ASSUMPTIO,600000,10; specialeffect2 EF_ANGELUS; sc_start SC_ANGELUS,600000,10; specialeffect2 EF_SUFFRAGIUM; sc_start SC_SUFFRAGIUM,600000,3; specialeffect2 EF_IMPOSITIO; sc_start SC_IMPOSITIO,600000,5; specialeffect2 EF_GLORIA; sc_start SC_GLORIA,600000,5; specialeffect2 EF_MAGNIFICAT; sc_start SC_MAGNIFICAT,600000,5; specialeffect2 EF_CHEMICALPROTECTIOn; sc_start SC_CP_WEAPON,600000,5; sc_start SC_CP_ARMOR,600000,5; sc_start SC_CP_SHIELD,600000,5; sc_start SC_CP_HELM,600000,5; specialeffect2 EF_ASSUMPTIO; sc_start SC_ASSUMPTIO,600000,5; sc_start SC_ADRENALINE2,600000,1; specialeffect2 EF_MAXPOWER; sc_start SC_MAXIMIZEPOWER,600000,5; specialeffect2 EF_PERFECTION; sc_start SC_WEAPONPERFECTION,600000,5; specialeffect2 EF_ENDURE; sc_start SC_ENDURE,600000,10; sc_start SC_KAUPE,600000,3; sc_start SC_KAITE,600000,7; sc_start SC_STRFOOD,600000,5; sc_start SC_AGIFOOD,600000,5; sc_start SC_VITFOOD,600000,5; sc_start SC_INTFOOD,600000,5; sc_start SC_DEXFOOD,600000,5; sc_start SC_LUKFOOD,600000,5; switch ( CLASS ) { case 18: case 4019: case 4071: case 4078: skilleffect "SL_ALCHEMIST",0; sc_start4 SC_SPIRIT,9999999,5,455,0,0; break; case 15: case 4016: case 4070: case 4077: skilleffect "SL_MONK",0; sc_start4 SC_SPIRIT,9999999,5,447,0,0; break; case 4047: skilleffect "SL_STAR",0; sc_start4 SC_SPIRIT,9999999,5,448,0,0; break; case 16: case 4017: case 4067: case 4074: skilleffect "SL_SAGE",0; sc_start4 SC_SPIRIT,9999999,5,449,0,0; break; case 14: case 4015: case 4066: case 4073: skilleffect "SL_CRUSADER",0; sc_start4 SC_SPIRIT,9999999,5,450,0,0; break; case 23: case 4190: skilleffect "SL_SUPERNOVICE",0; sc_start4 SC_SPIRIT,9999999,5,451,0,0; break; case 7: case 4008: case 4054: case 4060: skilleffect "SL_KNIGHT",0; sc_start4 SC_SPIRIT,9999999,5,452,0,0; break; case 9: case 4010: case 4055: case 4061: skilleffect "SL_WIZARD",0; sc_start4 SC_SPIRIT,9999999,5,453,0,0; break; case 8: case 4009: case 4057: case 4063: skilleffect "SL_PRIEST",0; sc_start4 SC_SPIRIT,9999999,5,454,0,0; break; case 19: case 20: case 4020: case 4021: case 4068: case 4069: case 4075: case 4076: skilleffect "SL_BARDDANCER",0; sc_start4 SC_SPIRIT,9999999,5,455,0,0; break; case 17: case 4018: case 4072: case 4079: skilleffect "SL_ROGUE",0; sc_start4 SC_SPIRIT,9999999,5,456,0,0; break; case 12: case 4013: case 4059: case 4065: skilleffect "SL_ASSASIN",0; sc_start4 SC_SPIRIT,9999999,5,457,0,0; break; case 10: case 4011: skilleffect "SL_BLACKSMITH",0; sc_start4 SC_SPIRIT,9999999,5,458,0,0; break; case 11: case 4012: case 4056: case 4062: skilleffect "SL_HUNTER",0; sc_start4 SC_SPIRIT,9999999,5,460,0,0; break; case 4049: skilleffect "SL_SOULLINKER",0; sc_start4 SC_SPIRIT,9999999,5,461,0,0; break; default: break; } } end; OnInit: .VIP_item = 7854; //itemId .Premium_Ticket = 7608; end; }  
    This part:
    if (countitem(.VIP_item) || countitem(.Premium_Ticket)) { Means if the player has at least 1 of .VIP_item or .Premium_Ticket allow.
    If it helps I made a small truth table for you.
    P
    q
    &&(and)
    ||(or)
    T
    T
    T
    T
    T
    F
    F
    T
    F
    T
    F
    T
    F
    F
    F
    F
    It's good to keep in mind that these are logical operators and as such aren't entirely identical to bitwise operators. Although both can be used in a similar way.
    Here's a table for the bitwise operators that you can use in rAthena. (Excluding bitwise NOT(~))
    P
    q
    &(AND)
    |(OR)
    ^(XOR)
    T
    T
    T
    T
    F
    T
    F
    F
    T
    T
    F
    T
    F
    T
    T
    F
    F
    F
    F
    F
     

     

     
  3. Skorm's post in Sign item for GM was marked as the answer   
    You can use getitem2 to do this... Here's a small example I came up with.
    - script at_signed_item -1,{ function sf { function s; .@a = getarg(2); .@len = getarg(3); return ( sprintf( getarg(0), s(.@a, .@len, getarg(1)), s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1)) ) +(( .@a+1 < .@len )?":Next":":") +(( .@a-11 > 0 )?":Back":":") +":Cancel" ); function s { if( getarg(0) >= getarg(1) ) return ""; else { .@name$ = getelementofarray( getarg(2), getarg(0) ); return .@name$=="null"?"":"Character [^0054ff"+.@name$+"^000000]"; } }; }; function nex { return((getarg(0)+10)<getarg(1)?getarg(0)+10:getarg(1)-(getarg(1)%10)); }; function bac { return((getarg(0)-10)>=0?getarg(0)-10:0); }; OnCreate: //@signeditem <item_id>{ "<Signed Name>"{ <amount>{ <refine>{ <VVV Strong>{ <element>{ "Receiving Player"}}}}}; switch( .@atcmd_numparameters ) { default: dispbottom "Error: Too many parameters sent! ( @signeditem <item_id>{ <Signed Name>{ <amount>{ <refine>{ <VVV Strong>{ <element>{ Receiving Player}}}}}} ) "; end; case 7: .@player = getcharid( 3, .@atcmd_parameters$[6] ); if( !.@player ) { dispbottom "Error: Player not found! ( Maybe they aren't online! )"; end; } case 6: .@element = atoi( .@atcmd_parameters$[5] ); if( .@element > 4 ) { dispbottom "Error: Element not found! ( 1 - Ice, 2 - Earth, 3 - Fire, 4 - Wind )"; end; } case 5: .@strong = atoi( .@atcmd_parameters$[4] ); case 4: .@refine = atoi( .@atcmd_parameters$[3] ); case 3: .@amount = atoi( .@atcmd_parameters$[2] ); case 2: .@signature$ = .@atcmd_parameters$[1]; case 1: .@item = atoi( .@atcmd_parameters$ ); } .@len = query_sql( "SELECT `char_id`,`name` FROM `char` WHERE `name` LIKE '%"+.@signature$+"%' LIMIT 127;", .@cid, .@c_name$ ); if( .@len > 1 ) { mes "[ Signed @item ]"; mes "There was more than one result. Please select the correct name."; .@format$ = "%s:%s:%s:%s:%s:%s:%s:%s:%s:%s"; next; while( 1 ) { select( sf( .@format$, .@c_name$, .@a, .@len ) ); switch( @menu ) { case 11: .@a = nex( .@a, .@len ); break; case 12: .@a = bac( .@a ); break; case 13: end; default: .@select = .@a+@menu-1; mes "[ Signed @item ]"; mes "You've selected ^0000FF["+.@c_name$[.@select]+"]^000000, is this correct?"; next; if( select("Yes:No") == 1 ) callsub Sub_NamedItem, .@item, .@cid[.@select], .@amount, .@refine, .@strong, .@element, .@player; close; } } } else if( .@len ) callsub Sub_NamedItem, .@item, .@cid, .@amount, .@refine, .@strong, .@element, .@player; dispbottom "Error: Signature could not be identified! ( Maybe that player doesn't exist! )"; end; Sub_NamedItem: .@cid = getarg(1); .@card3 = .@cid & 65535; .@card4 = .@cid >> 16; .@item = !getarg(0,501)?501:getarg(0); .@amount = !getarg(2,1)?1:getarg(2); .@refine = getarg(3,0); .@equip = getiteminfo( .@item, 5 ); if( .@equip == 0 || .@equip == 32768 ) .@card1 = 254; else { .@sc = getarg(4,0); .@ele = getarg(5,0); .@card1 = 255; .@card2 = .@ele+((.@sc*5)<<8); } if( .@player ) getitem2 .@item, .@amount, 1, .@refine, 0, .@card1, .@card2, .@card3, .@card4, .@player; else getitem2 .@item, .@amount, 1, .@refine, 0, .@card1, .@card2, .@card3, .@card4; dispbottom "Item"+((.@amount>1)?"s":"")+" Created!"; end; OnInit: bindatcmd "signeditem", "at_signed_item::OnCreate", 99, 99; } Usage: @signeditem <item_id>{ "<Signed Name>"{ <amount>{ <refine>{ <VVV Strong>{ <element>{ "Receiving Player"}}}}};
     
    Example: @signeditem 1599 Lovely 1 10 3 >> +10 Very Very Very Strong Lovely's Fire Angra Manyu x1
     
    Alternately the command can be used to search for players by letter or displaying the first 127 results directly from the database if nothing is provided.
  4. Skorm's post in Can anyone help me script this item? was marked as the answer   
    bonus4 bAutoSpell,"AC_CONCENTRATION",max(getskilllv("AC_CONCENTRATION"),3),n,0; Where n is the percent of cast. It does not say in the description so I guess that's up to you.
  5. Skorm's post in help me with npc get point invite player was marked as the answer   
    @superblackcat
    So two ways I might do it...
    One where both players need to be online and the referrer needs to claim the referral.
    prontera,100,100,5 script refer a friend 100,{ switch(select("Add Referral:Claim Referral")) { case 1: if(referrer$ != "") { mes "You've already set a referrer."; close; } mes "Input the character name of the person who referred you. (This cannot be changed so make sure it's correct!)"; next; input .@player_name$; mes "Is this correct?"; mes .@player_name$; next; if(select("Yes:No") == 1) { referrer$ = .@player_name$; mes "Congratulations the referrer has been set!"; } break; case 2: mes "Enter the name of the person you referred."; next; input .@player_name$; .@cid = convertpcinfo(.@player_name$, CPC_CHAR); if(.@cid <= 0) { mes "Make sure you've entered that persons name correctly and that they are online."; close; } .@referrer$ = getvar(referrer$, .@cid); .@ref_claimed = getvar(ref_claimed$, .@cid); if(.@referrer$ == strcharinfo(0) && !.@ref_claimed) { getvar(ref_claimed$, .@cid) = True; getitem 501, 1; mes "That's great!"; } else { mes "Hmm... It doesn't seem like you referred that person."; } break; } close; }  
    Another where only the referral needs to submit the referrer and the referrer gets a mailed reward.
    prontera,100,100,5 script refer a friend 100,{ if(referrer$ != "") { mes "You've already set a referrer."; close; } mes "Input the character name of the person who referred you. (This cannot be changed so make sure it's correct!)"; next; input .@player_name$; mes "Is this correct?"; mes .@player_name$; next; if(select("Yes:No") == 1) { .@len = query_sql("SELECT `char_id` FROM `char` WHERE `name` = '"+escape_sql(.@player_name$)+"';", .@cid); if(.@len > 0) { referrer$ = .@player_name$; .@charid = .@cid; .@sender$ = strcharinfo(0); .@title$ = "Referral Reward!"; .@body$ = "Thanks for being awesome!"; .@zeny = 10000; mail .@charid, .@sender$, .@title$, .@body$, .@zeny; mes "Congratulations the referrer has been set!"; } else { mes "They don't seem to exist."; } } close; }  
  6. Skorm's post in Request anti bot for player use was marked as the answer   
    I've used OpenKore and it identifies mobs by an ID not name. So it wouldn't fail a test like this and instead would just be annoying for normal players.
  7. Skorm's post in Removing monsters in a map was marked as the answer   
    @ays297
    prontera,100,100,5 script gold_room_timer -1,500,500,{ end; OnTouch: // On touch reset the timer... initnpctimer; end; OnTimer1800000: // On 30 minutes remove monsters if the map is empty & restart timer. if(getmapusers(.map_name$) <= 0) { killmonsterall .map_name$; cleanmap .map_name$; } initnpctimer; end; OnInit: // On server start the timer... .map_name$ = strnpcinfo(4); initnpctimer; end; }  
  8. Skorm's post in How to make an npc speak automatically? was marked as the answer   
    prontera,100,100,1 script WalkNearMe 100,10,10,{ end; OnTouch: npctalk "Hello world"; end; } It is activated by the presence of the character. The "10,10" after "100," in the NPC header refers to the x and y distance from the NPC with which a character can "bump" into the NPC and trigger the OnTouch: event.
  9. Skorm's post in gold room 1 a week was marked as the answer   
    I was looking at this topic and I think the script would work better like this so the player can enter multiple times throughout the week if he didn't use his 30 minutes up.prontera,150,150,5 script gold room 456,{ function t { function s; set .@left, getarg(0); if ( .@left <= 0 ) return getarg(0); set .@day, .@left / 86400; set .@hour, .@left % 86400 / 3600; set .@min, .@left % 3600 / 60; set .@sec, .@left % 60; return ( ( .@day ? .@day +" day"+ s( .@day ) : "" ) + ( .@hour ? .@hour +" hour"+ s( .@hour ) : "" ) + ( .@min ? .@min +" min"+ s( .@min ) : "" ) + ( .@sec ? .@sec +" sec"+ s( .@sec,1 ) : "" ) ); function s { return ( ( getarg(0) > 1 ? "s" : "" ) + ( getarg(1,0) ? "" : " " ) ); } } if ( gltimer <= 0 && enter_gold_room < gettimetick(2) ) { set gltimer, .glt; enter_gold_room = gettimetick(2) + 86400 * .dly; } else if ( enter_gold_room > gettimetick(2) && gltimer <= 0 ) { mes "I'm sorry you can't enter in the gold room. You must wait "+ t( enter_gold_room - gettimetick(2) )+"."; close; } mes "You have "+t( gltimer )+" remaining."; select( "enter in the gold room" ); warp .map$,0,0; end; OnPCLoadMapEvent: if(strcharinfo(3)==.map$) { attachnpctimer; initnpctimer; } end; OnTimer1000: if( playerattached() ){ if(strcharinfo(3)!=.map$) { stopnpctimer; end; } set gltimer, gltimer-1; attachnpctimer; initnpctimer; if( gltimer <= 0 ) { stopnpctimer; warp "prontera",0,0; message strcharinfo(0), "end of time for the gold room"; end; } } end; OnInit: set .dly , 7 ; //Delay in days. set .glt , 1800 ; //Gold Room Timer in seconds. set .map$, "geffen" ; //Gold Room map. setmapflag .map$, mf_loadevent; end; }I was also thinking about doing this with a rental item like a pass but I'm not sure if the time is consumed while the player is offline.
  10. Skorm's post in Modify hourly point snpc was marked as the answer   
    Currently untested you'll have to let me know if somethings up.
     
    At this point I'm just compiling all of my edits into this script because many people are asking for it.
    //===== Hourly Points Script ========================================= //===== By: ========================================================== //= GorthexTiger modified by Nibi //===== Current Version: ============================================= //= 1.4.1 //===== Compatible With: ============================================= //= Any eAthena Version //===== Description: ================================================= //= Get Points every successful hours of gameplay, you cannot get //= the points even if you miss a second or a minute. A player will //= get a very big bonus if they played 3 hours consecutively //= or without logging out of the game. If the player is vending //= the script will then stop. //===== Additional Comments: ========================================= //= You can modify the script to your liking. //= The default points is Kafrapoints change it anyway if you like. //= 1.1 = Check Chatting too //= 1.2 = 5 Minute Idle Check & @at/@autotrade check. //= 1.3 = Corrected the current balance line on 12 Hours Consecutive //= 1.4 = Added command to check remaining time and updated idle check. (Skorm) //= 1.4.1 = Modified the msgs to display according to .timer. (Skorm) //==================================================================== - script hourlypoints -1,{ OnPointGet: //Check for idle. while(checkvending() >= 1 || checkchatting() == 1 || checkidle() >= .idle) { if( .@mes$ == "" ) { dispbottom set( .@mes$, "The hourly points event stopped because you were vending, chatting, or idle!" ); set @hourly_points_timer, 0; } sleep2 .delay; } @consecutive_timer++; .@time_string$ = Time2Str( @consecutive_timer * ( .timer / 1000 ) ); dispbottom "You received "+.points+" Kafrapoint(s) by staying ingame for "+.@time_string$+"."; #CASHPOINTS = #CASHPOINTS + .points; dispbottom "Current Balance = "+#CASHPOINTS+" Kafrapoints"; @consecutive_bonus++; //Check for consecutive timer. if(@consecutive_bonus == .cdelay) { @consecutive_bonus = 0; #CASHPOINTS = #CASHPOINTS + .cpoints; dispbottom "You receive a bonus "+.cpoints+" Kafrapoint(s) by playing for "+.@time_string$+" consecutively!!!"; dispbottom "Current Balance = "+#CASHPOINTS+" Kafrapoint(s)"; } OnPCLoginEvent: addtimer .timer,"hourlypoints::OnPointGet"; @hourly_points_timer = gettimetick(2) + ( .timer / 1000 ); end; OnCmdHour: message strcharinfo(0),@hourly_points_timer ? Time2Str( @hourly_points_timer )+" remaining before you get your Hourly Reward(s).":"Something went wrong or you're considered idle at the moment, try relogging!"; end; OnInit: bindatcmd "ctr","hourlypoints::OnCmdHour"; //@ctr to view time till next point. .timer = 1000*60*60; //Timer in milliseconds. ( Default: 1000*60*60 [ = 1 Hour ] ) .cdelay = 3; //Delay before receiving the consecutive bonus. ( Default: 3 [ { ~ 3 Hours } *Using default timer ] ) .cpoints = 10; //Points gained for consecutive time online. ( Default: 10 ) .points = 1; //Normal points gained. ( Default: 1 ) .delay = 1000; //Delay for idle re-check check. ( Default: 1000 [ = 1 Second ] ) .idle = 60*5; //Player is idle after not moving for this many seconds. ( Default: 60*5 [ = 5 Minutes ] ) } - script check -1,{ OnInit: bindatcmd "check",strnpcinfo(3)+"::OnCheck"; end; OnCheck: dispbottom "You have " +#CASHPOINTS+ " cash points."; end; }
  11. Skorm's post in Bloody Branch MVP kill announcer & MVP Announcer script was marked as the answer   
    I think this is a better approach because the latter will still trigger on normal spawning MVPS.
    Change the Bloody Branch item script to...
    monster "this",-1,-1,"--ja--",-3,1,"BB_MVP_Announce::OnBBMVPDeath"; And then add this npc...
    - script BB_MVP_Announce -1,{ OnBBMVPDeath: announce "'"+ strcharinfo(0) +"' has killed ("+ getmonsterinfo(killedrid,MOB_NAME) +").",bc_yellow|bc_all; end; }  
  12. Skorm's post in 1 Cash every 1 minute was marked as the answer   
    - script Sample -1,{ OnPointGet: #CASHPOINTS++; end; OnPCLoginEvent: addtimer 60000,"Sample::OnPointGet"; }  
  13. Skorm's post in Guild Package. was marked as the answer   
    I cannot be bothered to test this but I'm pretty sure...
    At line 983 would do the trick.
    if(sd != NULL && sd->status.guild_id == guild_id) { // do stuff that needs the guild_id first, BEFORE we wipe it npc_event_doall_id("OnLeaveGuild", account_id); if (sd->state.storage_flag == 2) //Close the guild storage. storage_guild_storageclose(sd); guild_send_dot_remove(sd); channel_pcquit(sd,3); //leave guild and ally chan sd->status.guild_id = 0; sd->guild = NULL; sd->guild_emblem_id = 0; if (g->instance_id) { struct map_data *mapdata = map_getmapdata(sd->bl.m); if (mapdata->instance_id) { // User was on the instance map if (mapdata->save.map) pc_setpos(sd, mapdata->save.map, mapdata->save.x, mapdata->save.y, CLR_TELEPORT); else pc_setpos(sd, sd->status.save_point.map, sd->status.save_point.x, sd->status.save_point.y, CLR_TELEPORT); } } clif_name_area(&sd->bl); //Update display name [Skotlex] status_change_end(&sd->bl,SC_LEADERSHIP,INVALID_TIMER); status_change_end(&sd->bl,SC_GLORYWOUNDS,INVALID_TIMER); status_change_end(&sd->bl,SC_SOULCOLD,INVALID_TIMER); status_change_end(&sd->bl,SC_HAWKEYES,INVALID_TIMER); status_change_end(&sd->bl,SC_EMERGENCY_MOVE,INVALID_TIMER); //@TODO: Send emblem update to self and people around } else { npc_event_doall_id("OnKickGuild"); } If they are not online when being kicked it would trigger OnKickGuild without an RID attached.
    Edit: Also moved topic to source requests since it's becoming a source thing.
  14. Skorm's post in Zeny on mobs was marked as the answer   
    Another way that's a little more involved but probably better for the server. Would be to just add an item that the mob could drop which when consumed increases the players zeny by a specific amount. You could make an item for each amount like 1k 10k 100k etc.
    - script sampledrop -1,{ OnInit: addmonsterdrop 1002,90000,100; // 1% Poring Zeny Bag } Example item_db_usable
    - Id: 90000 AegisName: Zeny Bag Name: Zeny Bag Type: Cash Buy: 10 Weight: 10 EquipLevelMin: 1 Script: | Zeny += 10000; -----------------------------------------------------------
    Again another way that you might accomplish this would be to enable:
    // Zeny from mobs zeny_from_mobs: yes In monster.conf
    And then edit the formula in mob.cpp to follow some kind of curve based on mob level.
    if(battle_config.zeny_from_mobs && md->level) { // zeny calculation moblv + random moblv [Valaris] zeny=(int) ((md->level+rnd()%md->level)*per*bonus/100.); if(md->db->mexp > 0) zeny*=rnd()%250; }  
  15. Skorm's post in Please help me on this script that'll connect arrays in 1 block of script. was marked as the answer   
    Maybe something like this.
    prontera,157,176,5 script guide 650,1,1,{ end; OnTouch: .@index = atoi(strnpcinfo(2)); if(.@index+1 == getarraysize(.npc_pos_x)) { dispbottom "End"; } else { switch(.@index) { case 0: npctalk "Hello I'm the first NPC!"; break; case 1: npctalk "Hello I'm the second NPC!"; break; default: npctalk "Hello I'm NPC #"+.@index+"."; break; } unitwalk getcharid(3),.npc_pos_x[.@index+1],.npc_pos_y[.@index+1]; } end; OnInit: getmapxy(.@map$,.@x,.@y,BL_NPC,strnpcinfo(0)); .@index = atoi(strnpcinfo(2)); .npc_pos_x[.@index] = .@x; .npc_pos_y[.@index] = .@y; } prontera,157,170,6 duplicate(guide) guide#1 650,1,1 prontera,157,162,6 duplicate(guide) guide#2 650,1,1 prontera,157,153,6 duplicate(guide) guide#3 650,1,1 prontera,152,150,6 duplicate(guide) guide#4 650,1,1  
  16. Skorm's post in PVP Party Warp was marked as the answer   
    setarray .@town_maps$, "prontera", "izlude", "geffen", "morroc"; if(getpartyleader(getcharid(1),2) == getcharid(0)) { getpartymember getcharid(1), 1; getpartymember getcharid(1), 2; for ( .@i = 0; .@i < $@partymembercount; .@i++ ) if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) if(inarray(.@town_maps$, strcharinfo(3,$@partymembercid[.@i])) > -1) warp "pvp_y_1-2",0,0,$@partymembercid[.@i]; warpparty "Leader",0,0,getcharid(1),"pvp_y_1-2",1,1; }  
  17. Skorm's post in Restricting commands for GM staff was marked as the answer   
    Sorry about that yeah you're right they were doing the same thing here is an updated version.
     
    - script warp_block -1,{ OnInit: bindatcmd "warp",strnpcinfo(3)+"::OnAtcommand",20,99; setarray .maps_from$[0], "guild_01", "guild_02"; // Maps they cannot warp from. setarray .maps_to$[0], "guild_01", "guild_02"; // Maps they cannot warp to. end; OnAtcommand: if(inarray(.maps_from$[0], strcharinfo(3))>-1) { message strcharinfo(0), "You can't open use warp here!"; end; } if(.@atcmd_numparameters) { if (inarray(.maps_to$[0], strtolower(.@atcmd_parameters$[0]))>-1) { message strcharinfo(0), "You can't warp to that map!"; end; } atcommand "@warp "+ implode(.@atcmd_parameters$, " "); } else atcommand "@warp"; end; }  
  18. Skorm's post in Not working OnClaimReward: was marked as the answer   
    @Get Backers Seems like you've got the right idea... It's strnpcinfo(0) not NPC_NAME though.
     
    - script LoginRewards#1 -1,{ OnPCLoginEvent: addtimer 3600000, strnpcinfo(0)+"::OnClaimReward"; end; OnClaimReward: dispbottom "You have been online 1 hour. Talk to Hourly Reward NPC to get your rewards!"; }  
  19. Skorm's post in need to cutin to received gold points was marked as the answer   
    switch(input(.@gpoint, 1, 30000)) { case -1: //Values less than 1 case 1: //Values greater than 30000 mes "Something went wrong!"; close2; cutin "",255; end; default: break; } if (.@gpoint > goldPoint) { mes "Sorry, you don't have any Gold"; close2; cutin "",255; end; } https://github.com/rathena/rathena/blob/master/doc/script_commands.txt#L1556
  20. Skorm's post in anyone have weemapcache? was marked as the answer   
    @Tokei made a mapcache editor that superseded weemapcache.
    If you really need weemapcache I have it.
    WeeMapCache.exe
  21. Skorm's post in erro script was marked as the answer   
    Change additem to getitem.
  22. Skorm's post in Create an NPC inside an instance was marked as the answer   
    prontera,173,200,4 script Blah -1,5,5,{ end; OnTouch: if(!instance_id()) end; npctalk "This is a message!"; monster "place",60,100,"Poring",1002,1,"NPCNAME::OnLabel"; disablenpc instance_npcname(strnpcinfo(0)); } This is the best way to figure out commands.
    https://github.com/rathena/rathena/blob/master/doc/script_commands.txt#L6194
  23. Skorm's post in R> Ricky92's Granny Converter was marked as the answer   
  24. Skorm's post in R> Script Unequip equipment condition. was marked as the answer   
    In your item database the last two script sections are for equip and unequip...
    In both items add something like this two the equip script.
    if(isequipped(1599)) unequip(EQI_SHOES); Anyways that's all I'm saying.
  25. Skorm's post in A getunitdata question. was marked as the answer   
    Here there might be a better way of doing this but this is the method I've come up with tested and it's working quite well.
    prontera,260,69,1 script monsterspawner 100,{ OnMinionSummon: .@minion_id = 1002; .@minion_count = 10; monster "prontera",255,55,"Pink Evil Minions",.@minion_id,.@minion_count,strnpcinfo(0)+"::OnMinionKill"; copyarray .gid[getarraysize(.gid)], $@mobid[0], .@minion_count; end; OnMinionKill: .@len = getarraysize(.gid); for(.@a = 0; .@a < .@len; .@a++) { if(unitexists(.gid[.@a])) { getunitdata(.gid[.@a],.@mobdata); if(!.@mobdata[UMOB_HP]) { dispbottom .@mobdata[UMOB_X]+" "+.@mobdata[UMOB_Y]+" HP:"+.@mobdata[UMOB_HP]; deletearray .gid[.@a], 1; break; } } else { deletearray .gid[.@a], 1; .@len--; } } }  
×
×
  • Create New...