-
Content Count
1677 -
Joined
-
Last visited
-
Days Won
246
Content Type
Profiles
Forums
Downloads
Staff Applications
Calendar
Everything posted by AnnieRuru
-
Good Job ! I purposely want to leave this topic answer only after 24 hours, as this is a very simple script and this is how it turns out anyway, while I have started write a few lines, then I noticed http://herc.ws/board/topic/11156-poring-summoner-problem/?p=65797 what is the difference anyway ? why not just set the special poring amount as 1, and normal poring amount as 99 ?
-
https://rathena.org/board/topic/78517-guild-pack-information-giver/ didn't test yet, but I believe BrianL don't write bug script
-
the server has to offline in order to change guild info
-
YES ! after so many years of writing custom battleground script since rathena period, (to feed members for not using eAmod/rAmod) this is the 1st time I see someone leak a eAmod's battleground script 1. I saw some part of the script are not english, do you have a translation for it ? 2. I saw Blue team means join General Guillaume side, and Red team means join Prince Croix side but what does Green team do then ? however that explanation of "Capture the Flag:Team DeathMatch:Stone Control:Eye of Storm:Bossnia:Domination:Triple Inferno:Conquest:Rush"already enough for me to start writing
-
that script needs a lot of optimization, and while I test that script, sometimes I got infinite loop error https://rathena.org/board/topic/77031-armor-enchanter-npc/ its better to try mine, and request what issit you want
-
prontera,155,185,5 script kdjshfksdjfh 1_F_MARIA,{// get party info getpartymember getcharid(1), 1; getpartymember getcharid(1), 2;// check party amount if ( $@partymembercount < 4 ) { mes "you have to form at least 4 party members"; close; }// check online count for ( .@i = 0; .@i < $@partymembercount; ++.@i ) if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) .@online++; if ( .@online < 4 ) { // less than 4 people online mes "your party need at least 4 party member online"; close; }// save the attachrd RID. going to use attachrid this time .@origin = getcharid(3);// loop through these members and check for duplicate class for ( .@i = 0; .@i < $@partymembercount; ++.@i ) { if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) { attachrid $@partymemberaid[.@i]; for ( .@j = 0; .@j < .@checkjobarraysize; ++.@j ) { // loop with saved job ID if ( .@checkjobarray[.@j] == BaseJob ) { // if found .@duplicatejob[.@duplicatejobsize++] = BaseJob; break; // break if found duplicates } } .@checkjobarray[.@checkjobarraysize++] = BaseJob; } }// attachrid back ... surely you don't want the message display on other party members attachrid .@origin; if ( .@duplicatejobsize ) { // if there are duplicate jobs, the array size is more than 0 mes "found duplicate job in your party"; for ( .@i = 0; .@i < .@duplicatejobsize; ++.@i ) mes "BaseJob = "+ jobname( .@duplicatejob[.@i] ); close; }// OK ! warpparty "prontera", 155,185, getcharid(1); end;}
-
I remember I did this before on rathena forum, however I'm unable to retrieve it due to their forum can't do advance forum search prontera,155,185,5 script kdjshfksdjfh 1_F_MARIA,{// get party info getpartymember getcharid(1), 1; getpartymember getcharid(1), 2;// check party amount if ( $@partymembercount < 4 ) { mes "you have to form at least 4 party members"; close; }// check online count for ( .@i = 0; .@i < $@partymembercount; ++.@i ) if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) .@online++; if ( .@online < 4 ) { // less than 4 people online mes "your party need at least 4 party member online"; close; }// save the attachrd RID. going to use attachrid this time .@origin = getcharid(3);// loop through these members and check for duplicate class for ( .@i = 0; .@i < $@partymembercount; ++.@i ) { if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) { attachrid $@partymemberaid[.@i]; for ( .@j = 0; .@j < .@checkjobarraysize; ++.@j ) { // loop with saved job ID if ( .@checkjobarray[.@j] == BaseJob ) { // if found .@duplicatejob = BaseJob; break; // break } } if ( .@j < .@checkjobarraysize ) // still loop within all party member, break; break; .@checkjobarray[.@checkjobarraysize++] = BaseJob; } }// attachrid back ... surely you don't want the message display on other party members attachrid .@origin; if ( .@checkjobarraysize != .@online ) { // if the number of different jobs is not equal to online party members count mes "found duplicate job in your party"; mes "BaseJob = "+ jobname( .@duplicatejob ); close; }// OK ! warpparty "prontera", 155,185, getcharid(1); end;}
-
yeah confirm, I use priest to cast lex aeterna on poring, no effect shown the problem is inside 'status_change_start_postAura' function https://github.com/HerculesWS/Hercules/blob/master/src/map/status.c#L6888 return 0 means no effect applied return 1 means successfully applied but this auraset has a code here if (bl->type != BL_PC){ return 0; }which even if the pet/homun/monster/elementals should have shown an effect, but this function forcefully return 0 I believe this function should replaced with 'status_change_start_preAura' and if (bl->type == BL_PC), and detected hidden status, hookStop() EDIT for below, yeah that's easier
-
https://github.com/HerculesWS/Hercules/blob/master/doc/sample/npc_trader_sample.txt prontera,153,182,1 trader TestCustom2 4_F_EDEN_OFFICER,{ end; OnPayFunds: dispbottom "Hi: price = "+ @price +" and points = "+ @points ; if ( #KILLPOINTS < @price ) end; #KILLPOINTS -= @price; purchaseok(); end; OnCountFunds: setcurrency #KILLPOINTS, 0; end; OnInit: tradertype NST_CUSTOM; sellitem TCG_Card, 5; end; } /* prontera,156,182,1 trader give credit 1_F_MARIA,{ input #KILLPOINTS; end; } */
-
good point @@mrlongshen yes, in order for the status point to persist after a status reset your server must be pre-renewal setting (as renewal has to use statpoint table) and set the use_statpoint_table MUST set to no to prevent bugs
-
this is npc script, tested // kill 10 poring gets 1 status point- script kdjshfkshf FAKE_NPC,{OnNPCKillEvent: if ( killedrid == PORING ) { poringkill++; if ( poringkill == 10 ) { StatusPoint++; poringkill = 0; } } end;}or ...function script F_ShuffleNumbers { deletearray getarg(2); .@static = getarg(0); .@range = getarg(1) +1 - .@static; .@count = getarg(3, .@range); if (.@range <= 0 || .@count <= 0) return 0; if (.@count > .@range) .@count = .@range; for (.@i = 0; .@i < .@range; ++.@i) .@temparray[.@i] = .@i; for (.@i = 0; .@i < .@count; ++.@i) { .@[member=Rand] = rand(.@range); set getelementofarray( getarg(2), .@i ), .@temparray[.@[member=Rand]] + .@static; .@temparray[.@[member=Rand]] = .@temparray[--.@range]; } return .@count;}// kill 10 poring gets 1 random stats, if the randomly selected stat has reached maximum, then will select another one- script kdjshfkshf FAKE_NPC,{OnNPCKillEvent: if ( killedrid == PORING ) { poringkill++; if ( poringkill >= 10 ) { .@range = callfunc( "F_ShuffleNumbers", 0, 5, .@output ); if ( Class == Job_Kagerou || Class == Job_Oboro || Class == Job_Rebellion || Class == Job_Super_Novice_E ) .@maxstat = getbattleflag("max_extended_parameter"); else if ( eaclass() & EAJL_THIRD && eaclass() & EAJL_BABY ) .@maxstat = getbattleflag("max_baby_third_parameter"); else if ( eaclass() & EAJL_THIRD ) .@maxstat = getbattleflag("max_third_parameter"); else if ( eaclass() & EAJL_BABY ) .@maxstat = getbattleflag("max_baby_parameter"); else .@maxstat = getbattleflag("max_parameter"); while ( readparam( .@output[.@i] + bStr ) >= .@maxstat && .@i < 6 ) .@i++; if ( .@i < 6 ) statusup2 .@output[.@i] + bStr, 1; poringkill = 0; } } end;}erm ... I think I have complicated the topic abit ...
-
Run Or Die event ( aka. Poring Bomb )
AnnieRuru replied to AnnieRuru's topic in Event & Game Releases
1. change your bomb poring hp to maximum maxhp avaiablethe npc_selfdestruction will kill itself with its hp available, so increasing its hp should deal more damage 2. disallow players to use healing items in this map -
OnNPCKillEvent: if ( killedrid == PORING ) { poringkill++; if ( poringkill == 100 ) { StatusPoint++; poringkill = 0; } } didn't test
-
why not working ?I tested this ... { Id: 19610 AegisName: "C_Whisper_Mask" Name: "Costume Whisper Mask" Type: 5 Loc: 7168 View: 321 Script: <" autobonus "{ bonus bAllStats,10; }",1000,10000,BF_WEAPON|BF_MISC,"{ specialeffect2 EF_FIRESPLASHHIT; }"; ">},which the item equipped at shadow headgear, the autobonus does trigger every time
-
eathena forum up https://www.eathena.ws/board/index.php?s=&showtopic=272409&view=findpost&p=1492115 check the link again, that was a script request, which the one who request it wants the announcement to be done without login the game so just login to your Sql query browser and edit the announcement in that `hourly_announcer` table its fine for not arrange the announcement in order, the script already order by ID
-
setitemscript existed in eathena but eathena setitemscript can only set in { Script } field the { OnEquip Field }, and { OnUnequip Field } was added later as parameter 1 and 2 though this changes is very very long time ago I can't tell it was added in rathena or eathena, but definitely before hercules exist
-
the problem is over here --- clif.c (revision 15066)+++ clif.c (working copy)@@ -9150,6 +9150,12 @@#ifndef TXT_ONLYmail_clear(sd);#endif+ status_calc_pc(sd, true);+ if(!map[sd->bl.m].flag.resident && sd->state.resident)+ {+ sd->state.resident = 0;+ pc_disguise(sd,0);+ }if(map[sd->bl.m].flag.loadevent) // Lancenpc_script_event(sd, NPCE_LOADMAP);even if I dunno what the event resident evil is,but I understand that if the player went out from a map with mapflag 'resident' and having state resident >= 1 it has to reset the sd->state.resident as 0, and undisguise the character however I have no idea why the status_calc_pc command is there and the status_calc_pc runs with enum 'e_status_calc_opt', it accepts the value 0, 1, 2 or 3 https://github.com/HerculesWS/Hercules/blob/master/src/map/status.h#L1824 when I dubug the value of 'true', which is equal 1 which is the same value for SCO_FIRST running status_calc_pc with SCO_FIRST should only be done when the player is respawning that line should be remove since some item bonus already recalculate when changing map https://github.com/HerculesWS/Hercules/blob/master/src/map/clif.c#L9310
-
I read this line ... https://github.com/HerculesWS/Hercules/blob/master/src/map/guild.c#L727 i wonder what would happen if 2 lines below are commented ? maybe the delay will still resume I guess... what happen about changing it into 0, or 1 ? guild->block_skill(sd, 1);
-
- script asdaskdha FAKE_NPC,{OnInit: setitemscript 12111 , "{ if ( !hascashmount() ) setcashmount; }", 1; setitemscript 12111 , "{ if ( hascashmount() ) setcashmount; }", 2; end;}
-
www.eathena.ws/board/index.php?s=&showtopic=272409&view=findpost&p=1492359 yeah ... stupid eathena forum down luckily I always reupload everything stuffs on since rathena times https://rathena.org/board/pastebin/21hkxkuvt6dl
-
I haven't test this script yet (my sister still in da house) but by reading this script, some parts doesn't feel right like the end; command is inside the closing bracket it can read to the next label if it doesn't fulfill its condition the npc can keep announce the same winner, if 1. the player gain a lot of points in the previous round, and never claim the prize - variable is only reset when player claim the prize (PPE_claim) or server reset (OnInit) 2. all next few rounds nobody gain as many points as that player did and I wonder why there is a OnMinute17: doing there, to check the event is ending ? since the way to start this event is player pay to host the event ... this script should be scrap, and write a whole new one
-
https://github.com/HerculesWS/Hercules/blob/master/src/map/atcommand.c#L8396 https://github.com/HerculesWS/Hercules/blob/master/doc/script_commands.txt#L3926
-
while ( compare the value && loop until last index ) .@i++;if ( .@i < last index ) <is in the array>;actually that's my trickthere's a flaw in this method because if the value is not in the array, it will compare 1 extra time, and possibly throw error on certain script commands like *getmonsterinfo its better to do the actual way for ( .@i = 0; .@i < .max_value; ++.@i ) if ( .mob_id[.@i] == .@id ) break;if ( .@i < .max_value ) <is in the array>;never have problem with this one well .. what you are asking ... better ask google XD https://www.codecademy.com/forum_questions/510e3c1a3011b8fa25005255 ... try google more ================================= btw that query has more than 400 results, so player might summon .... event mobs for example
-
if you consider using SQL, then it is pretty neat prontera,155,189,5 script kshdfksjdf 1_F_MARIA,{ mes "input a mob ID"; mes "if your inputed mob ID is a non-aggresive mob, I'll say 'OK'"; next; input .@id, 1000, 5000; if ( query_sql( "select 1 from mob_db where mode & 0x4 = 0 and id = "+ .@id, .@dummy ) ) mes "OK"; else mes "bleh"; close;}otherwise if your list is custom made, then have to loop the arrayprontera,155,189,5 script kshdfksjdf 1_F_MARIA,{ mes "input a mob ID"; mes "if your inputed mob ID is a non-aggresive mob, I'll say 'OK'"; next; input .@id, 1000, 5000; while ( .mob_id[.@i] != .@id && .@i < .mob_size ) .@i++; if ( .@i < .mob_size ) mes "OK"; else mes "bleh"; close;OnInit: .mob_size = query_sql( "select ID from mob_db where mode & 0x4 = 0", .mob_id ); // change this to your setarray end;}but it seems you got your own ID, then have to loop it
-
I'm quite sure SQL also can do it OnPCLoginEvent: query_sql "select charid from ladder order by kill limit "+ .ranksize, .@charid; for ( .@i = 0; .@i < .ranksize; .@i++ ) if ( getcharid(0) == .@charid[.@i] ) @pvprank = .@i +1; end; OnPCKillEvent: .... query_sql "select charid from ladder order by kill limit "+ .ranksize, .@charid; for ( .@i = 0; .@i < .ranksize; .@i++ ) if ( getcharid(0) == .@charid[.@i] ) .@tmprank = .@i +1; if ( .@tmprank > .@pvprank ) announce strcharinfo(0) +" has gain to rank no."+ .@tmprank, bc_all; edit : paleface ... members are very good in digging out my old scripts ...