From 7536331ae203d5576166cd50a3243b735cd30f75 Mon Sep 17 00:00:00 2001 From: celest Date: Mon, 10 Jan 2005 10:16:06 +0000 Subject: * Fixed some typos and exploits in the Blacksmith and Hunter job quest * Modified 'wedding' script command to work with "OnTimer" scripts * Added 'attachnpctimer' and 'detachnpctimer' script command git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/stable@944 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog.txt | 21 +++++++++++++++- npc/Changelog.txt | 3 +++ npc/jobs/2-1/blacksmith.txt | 9 ++++--- npc/jobs/2-1/hunter.txt | 7 +++--- npc/sample/npc_test_npctimer2.txt | 16 ++++++++++++ src/map/map.h | 2 +- src/map/npc.c | 3 ++- src/map/pc.c | 5 ++-- src/map/script.c | 53 ++++++++++++++++++++++++++++++++++++--- 9 files changed, 104 insertions(+), 15 deletions(-) create mode 100644 npc/sample/npc_test_npctimer2.txt diff --git a/Changelog.txt b/Changelog.txt index ac9cb0c5a..ae556d9d8 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,11 +1,30 @@ Date Added -01/0 +01/10 + * Added Shinomori and orn's fix for the skill tree to only check the first + required skill in the DB and skipping the rest [celest] + * Modified 'wedding' script command to work with "OnTimer" scripts even without + doing 'attachnpctimer' (The 'player not attached' error will still display, + but the effect will appear *over the NPC* instead of the player... + at least it won't fail ^^) [celest] + * Added 'attachnpctimer' script command for attaching the player to the current + npc's timer in "OnTimerxxxx" scripts, thanks to Wallex for the idea. [celest] + Syntax: + attachnpctimer; + attachnpctimer "; + + Check /npc/sample/npc_test_npctimer2.txt for example. + * Added 'detachnpctimer' script command for detaching players from the npc's + timer. [celest] Syntax: + detachnpctimer; + detachnpctimer "; + * Added 'OnInterIfInitOnce' for WoE scripts & modified the WoE scripts as well [Ajarn & Codemaster] [Thanks to FREYA] [SVN 943] * Added the @sound command and the NPC command of soundeffectall - works just like soundeffect, but plays for everyone in the area [Codemaster] [SVN 942] * Don't allow Pets to attack Guardians outside of WoE [Codemaster] [SVN 940] * Require 15% of HP or more for WE_MALE skill [Codemaster] [SVN 940] * Require 15% of SP or more for WE_FEMALE skill [Codemaster] [SVN 940] + 01/07 * Upon changing to high novice 100 stat points should be given, not 88 [celest] * Give high novices First Aid and Trick Dead upon job changing [celest] diff --git a/npc/Changelog.txt b/npc/Changelog.txt index a8f61beae..586cc52b8 100644 --- a/npc/Changelog.txt +++ b/npc/Changelog.txt @@ -34,6 +34,9 @@ Other Ppl Date Added ====== +01/10 + * Fixed some typos and exploits in the Blacksmith and Hunter job quest, + thanks to Riotblade and nonox 01/09/05 * Modified guild war scripts to fix a bug for duplicate guild storages. [Codemaster & Ajarn] 8/1 diff --git a/npc/jobs/2-1/blacksmith.txt b/npc/jobs/2-1/blacksmith.txt index 0f1b71eb4..100bbc4da 100644 --- a/npc/jobs/2-1/blacksmith.txt +++ b/npc/jobs/2-1/blacksmith.txt @@ -7,7 +7,7 @@ //= Optimized and further edited by kobra_k88. //= Further bugfixed and tested by Lupus //===== Current Version: ===================================== -//= 1.0 +//= 1.1 //===== Compatible With: ===================================== //= eAthena 0.5.2 + //===== Description: ========================================= @@ -17,6 +17,7 @@ //= names and labels. Edited some text.[kobra_k88] //= Removed "if(JobLevel > 48) goto higher". It was a left over line. //= Thx to "Decker".[kobra_k88] +//= Fixed some typos, thanks to Riotblade [celest] ============================================================== @@ -461,7 +462,7 @@ L_result: mes "Good!"; next; mes "[Geshupenschte]"; - mes "Lets see....your score is ^5533FF"+@score+"."^000000; + mes "Lets see....your score is ^5533FF"+@score+".^000000"; if (@score == 100) goto L_perfect; mes "............."; next; @@ -485,7 +486,7 @@ L_result2: mes "Great!"; next; mes "[Geshupenschte]"; - mes "Lets see....your score is ^5533FF"+@score+"."^000000; + mes "Lets see....your score is ^5533FF"+@score+".^000000"; if (@score > 80) goto L_pass; mes "............."; next; @@ -1160,7 +1161,7 @@ comodo.gat,158,342,4 script Bismarck 118,{ if (BSMITH_Q == 3) goto L_Start; mes "[Bismarck]"; - mes "......Ugh...."; + mes "......Ugh?..."; mes ".....When's that delivery coming......"; next; mes "[Bismarck]"; diff --git a/npc/jobs/2-1/hunter.txt b/npc/jobs/2-1/hunter.txt index b65b78720..bd8f830a5 100644 --- a/npc/jobs/2-1/hunter.txt +++ b/npc/jobs/2-1/hunter.txt @@ -6,7 +6,7 @@ //= Converted by kobra_k88 //= Further bugfixed and tested by Lupus //===== Current Version: ===================================== -//= 1.7 +//= 1.8 //===== Compatible With: ===================================== //= eAthena 1.0 //===== Description: ========================================= @@ -19,6 +19,7 @@ //= v1.5 Fixed items quest fork bug [Lupus] //= v1.6 Fixed items quest bug: added extra condition [Lupus] //= v1.7 Fixed skillpoints check bug [Lupus] +//= v1.8 Fixed an exploit, thanks to nonox [celest] //============================================================ @@ -721,8 +722,7 @@ OnMyMobDead1: stopnpctimer "TimerHnt"; killmonsterall "job_hunte.gat"; enablenpc "SwitchHnt"; - areaannounce "job_hunte.gat", 50, 64, 123, 143, "[Test Guide]: Great job! Go use the switch now!",8; - set HNTR_Q2, 2; + areaannounce "job_hunte.gat", 50, 64, 123, 143, "[Test Guide]: Great job! Go use the switch now!",8; end; } @@ -843,6 +843,7 @@ job_hunte.gat,93,101,1 script SwitchHnt 723,{ job_hunte.gat,89,139,1 script ExitHnt 45,2,2,{ deltimer "TimerHnt::OnTimer196000"; + set HNTR_Q2, 2; warp "payon_in02.gat", 16, 26; killmonsterall "job_hunte.gat"; donpcevent "HntTG::OnStart"; diff --git a/npc/sample/npc_test_npctimer2.txt b/npc/sample/npc_test_npctimer2.txt new file mode 100644 index 000000000..de9895f3c --- /dev/null +++ b/npc/sample/npc_test_npctimer2.txt @@ -0,0 +1,16 @@ +prontera.gat,156,183,0 script NPCtimereXg::npctimerX0000 116,{ +L_INIT: + mes "What would you like to know?"; + menu "Tell me my level",L_WAIT; + +L_WAIT: + mes "I need time to think..."; + initnpctimer; + attachnpctimer; + close; + +OnTimer5000: + mes "Ah, your level is " + readparam(11); + detachnpctimer; + close; +} \ No newline at end of file diff --git a/src/map/map.h b/src/map/map.h index 99e4b5285..15de79d01 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -376,7 +376,7 @@ struct npc_data { char *script; short xs,ys; int guild_id; - int timer,timerid,timeramount,nexttimer; + int timer,timerid,timeramount,nexttimer,timerrid; unsigned int timertick; struct npc_timerevent_list *timer_event; int label_list_num; diff --git a/src/map/npc.c b/src/map/npc.c index 4ef38ff52..d2379e5a8 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -589,7 +589,7 @@ int npc_timerevent(int tid,unsigned int tick,int id,int data) nd->u.scr.timerid = add_timer(tick+next,npc_timerevent,id,next); } - run_script(nd->u.scr.script,te->pos,0,nd->bl.id); + run_script(nd->u.scr.script,te->pos,nd->u.scr.timerrid,nd->bl.id); return 0; } /*========================================== @@ -612,6 +612,7 @@ int npc_timerevent_start(struct npc_data *nd) } nd->u.scr.nexttimer=j; nd->u.scr.timertick=gettick(); + nd->u.scr.timerrid=0; // no players attached by default [celest] if(j>=n) return 0; diff --git a/src/map/pc.c b/src/map/pc.c index 417ca0272..4aa2e7342 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1048,9 +1048,10 @@ int pc_calc_skilltree(struct map_session_data *sd) for(j=0;j<5;j++) { if( skill_tree[s][c][i].need[j].id && pc_checkskill(sd,skill_tree[s][c][i].need[j].id) < - skill_tree[s][c][i].need[j].lv) + skill_tree[s][c][i].need[j].lv) { f=0; - break; + break; + } } } if(f && sd->status.skill[id].id==0 ){ diff --git a/src/map/script.c b/src/map/script.c index 31c10d809..c2369d024 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -193,6 +193,8 @@ int buildin_stopnpctimer(struct script_state *st); int buildin_startnpctimer(struct script_state *st); int buildin_setnpctimer(struct script_state *st); int buildin_getnpctimer(struct script_state *st); +int buildin_attachnpctimer(struct script_state *st); // [celest] +int buildin_detachnpctimer(struct script_state *st); // [celest] int buildin_announce(struct script_state *st); int buildin_mapannounce(struct script_state *st); int buildin_areaannounce(struct script_state *st); @@ -414,6 +416,8 @@ struct { {buildin_startnpctimer,"startnpctimer","*"}, {buildin_setnpctimer,"setnpctimer","*"}, {buildin_getnpctimer,"getnpctimer","i*"}, + {buildin_attachnpctimer,"attachnpctimer","*"}, // attached the player id to the npc timer [Celest] + {buildin_detachnpctimer,"detachnpctimer","*"}, // detached the player id from the npc timer [Celest] {buildin_announce,"announce","si"}, {buildin_mapannounce,"mapannounce","ssi"}, {buildin_areaannounce,"areaannounce","siiiisi"}, @@ -3967,6 +3971,46 @@ int buildin_setnpctimer(struct script_state *st) return 0; } +/*========================================== + * attaches the player rid to the timer [Celest] + *------------------------------------------ + */ +int buildin_attachnpctimer(struct script_state *st) +{ + struct map_session_data *sd; + struct npc_data *nd; + + nd=(struct npc_data *)map_id2bl(st->oid); + if( st->end > st->start+2 ) { + char *name = conv_str(st,& (st->stack->stack_data[st->start+2])); + sd=map_nick2sd(name); + } else { + sd = script_rid2sd(st); + } + + if (sd==NULL) + return 0; + + nd->u.scr.timerrid = sd->bl.id; + return 0; +} + +/*========================================== + * detaches a player rid from the timer [Celest] + *------------------------------------------ + */ +int buildin_detachnpctimer(struct script_state *st) +{ + struct npc_data *nd; + if( st->end > st->start+2 ) + nd=npc_name2id(conv_str(st,& (st->stack->stack_data[st->start+2]))); + else + nd=(struct npc_data *)map_id2bl(st->oid); + + nd->u.scr.timerrid = 0; + return 0; +} + /*========================================== * V̐AiEX *------------------------------------------ @@ -5445,10 +5489,13 @@ int buildin_marriage(struct script_state *st) int buildin_wedding_effect(struct script_state *st) { struct map_session_data *sd=script_rid2sd(st); + struct block_list *bl; - if(sd==NULL) - return 0; - clif_wedding_effect(&sd->bl); + if(sd==NULL) { + bl=map_id2bl(st->oid); + } else + bl=&sd->bl; + clif_wedding_effect(bl); return 0; } int buildin_divorce(struct script_state *st) -- cgit v1.2.3-70-g09d2