Jump to content

Alayne

Members
  • Content Count

    345
  • Joined

  • Last visited

  • Days Won

    22

Everything posted by Alayne

  1. Alayne

    Reward System

    Not quite sure about it, but I think like Kashiro that you're missing something in the "charcommand" script command. Actually, the syntax is the following: charcommand "#command name_of_player params_list". So basically, you should at least change your line charcommand ""+$@charsymbol$+"item "+$@mem_name1$[.@i]+" "+$@drw_itemid[.@j]+" "+$@drw_itemnum[.@j]+""; for charcommand ""+$@charsymbol$+"item " + strcharinfo(0) + " " +$@mem_name1$[.@i]+" "+$@drw_itemid[.@j]+" "+$@drw_itemnum[.@j]+""; Second point, you're missing some attachrid somewhere. Right now, no one will obtain a reward as no player is attached to the npc when you're running the item giving part. You should stock the id of at least the leaders to be able to attach the script to each one, to then loop other their team players.
  2. Wow that's pretty...unclear... Can you add some script or explain a bit more? If I understand the question well, yes, it is possible. You're probably just missing something.
  3. If you want to completely remove the loss option, change the "MaxWait" variable to 0, and change the check over this variable to prevent the reset.
  4. Alayne

    In-Game Clock

    Give this a try. //===== Hercules Script ====================================== //= Euphy's WOE Controller //===== By: ================================================== //= Euphy //===== Current Version: ===================================== //= 1.5 //===== Description: ========================================= //= A controller for War of Emperium designed for //= simplicity and ease of use. //= Many concepts taken from ToastOfDoom's script, //= and "rewards" function originally by Goddameit. //===== Additional Comments: ================================= //= Be sure to disable the default agit controllers! //== npc\woe-fe\agit_controller.txt //== npc\woe-se\agit_start_se.txt //============================================================ // Information NPC //============================================================ warcraft,207,196,5 script WOE Information 2_BULLETIN_BOARD,{ doevent "WOE_CONTROL::OnMenu"; end; OnAgitStart: while(agitcheck()) { misceffect EF_BEGINSPELL6; sleep 425; } end; } // Script Core //============================================================ - script WOE_CONTROL FAKE_NPC,{ function Disp_Owner; function Add_Zero; OnInit: // ----------------------------------------------------------- // Configuration settings. // ----------------------------------------------------------- set .CastleWarp,0; // 1: Always enable all castle warps. | 0: Warp only to active castles. set .AutoKick,1; // Automatically kick players from inactive castles during WOE? (1:yes / 0:no) set .NoOwner,0; // Automatically kick players from unconquered castles outside of WOE? (1:yes / 0:no) set .ExitWarp,0; // Warp all players from castles when WOE ends? (1:yes / 0:no) set .GMAccess,99; // GM level required to access Session Manager. // ----------------------------------------------------------- // Reward options. // ----------------------------------------------------------- // [1] Enable rewards. // [2] Mail all rewards. // - If not set, players receive items in their inventory. // - Only ONE item can be sent via mail, plus Zeny. // - Note that offline players do NOT receive rewards. // [4] Only reward Guild Masters. // - If not set, all guild members are rewarded. // - If mailing is enabled (option 2), offline Guild Masters WILL receive rewards. // [8] Duplicate IP check. // - Members in a guild with the same IP address are not rewarded. // - If Guild Masters is enabled (option 4), this feature is not used. // ----------------------------------------------------------- // Combine values as needed (e.g. 1|8 = 1+8 = 9). set .Options, 1|8; // Rewards per castle. // -- when given directly: <itemID>,<amount>{,<itemID>,<amount>,...} // -- via mail (option 2): <itemID>,<amount>,<Zeny> setarray .Reward[0],14001,1; // ----------------------------------------------------------- // Constants (leave this section alone). // ----------------------------------------------------------- setarray .Castles$[0], "prtg_cas01","prtg_cas02","prtg_cas03","prtg_cas04","prtg_cas05", "payg_cas01","payg_cas02","payg_cas03","payg_cas04","payg_cas05", "gefg_cas01","gefg_cas02","gefg_cas03","gefg_cas04","gefg_cas05", "aldeg_cas01","aldeg_cas02","aldeg_cas03","aldeg_cas04","aldeg_cas05", "arug_cas01","arug_cas02","arug_cas03","arug_cas04","arug_cas05", "schg_cas01","schg_cas02","schg_cas03","schg_cas04","schg_cas05"; setarray .EndLabel$[0],"ar01","ar02","ar03","ar04","ar05","sc01","sc02","sc03","sc04","sc05"; setarray .Days$[0],"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"; setarray .Regions$[0],"Prontera","Payon","Geffen","Aldebaran","Arunafeltz","Schwaltzvalt"; setarray .Map$[0],"prt_gld","pay_gld","gef_fild13","alde_gld","aru_gld","sch_gld"; setarray .MapX[0],134,240,153,111,208,121,295,317,140,204,214,308,143,193,305,48, 95,142,239,264,158,83, 68,299,292,293,288, 97,137, 71; setarray .MapY[0], 65,128,137,240,240,233,116,293,160,266, 75,240,240,278, 87,83,249, 85,242, 90,272,47,155,345,107,100,252,196, 90,315; // ----------------------------------------------------------- set .Size, getarraysize($WOE_CONTROL); if (.AutoKick || .NoOwner) for(set .@i,0; .@i<30; set .@i,.@i+1) { setmapflag .Castles$[.@i], mf_loadevent; setd "."+.Castles$[.@i], .@i; } if (!agitcheck() && !agitcheck2()) sleep 4000; set .Init,1; while(1) { delwaitingroom; waitingroom "Clock "+ gettimestr( "%I:%M:%S %p",21 ),0; sleep 1000; } end; OnMinute00: freeloop(1); if (agitcheck() || agitcheck2()) { for(set .@i,0; .@i<.Size; set .@i,.@i+4) if (gettime(GETTIME_WEEKDAY) == $WOE_CONTROL[.@i] && gettime(GETTIME_HOUR) == $WOE_CONTROL[.@i+2]) { OnWOEEnd: announce "The War Of Emperium is over!",bc_all|bc_woe; agitend; agitend2; sleep 1000; for(set .@j,0; .@j<30; set .@j,.@j+1) { if (.Active[0]&(1<<.@j)) Disp_Owner(.Castles$[.@j],1); if (.ExitWarp) maprespawnguildid .Castles$[.@j],0,3; } if (.Options&1 && .Active[0] && .ForceEnd != 2) callsub OnReward, .Active[0]; deletearray .Active[0],2; if (.ForceEnd) { set .ForceEnd,0; end; } break; } } if ((!agitcheck() && !agitcheck2()) || .Init) { if (!agitcheck() && !agitcheck2()) set .Init,0; for(set .@i,0; .@i<.Size; set .@i,.@i+4) if (gettime(GETTIME_WEEKDAY) == $WOE_CONTROL[.@i] && gettime(GETTIME_HOUR) >= $WOE_CONTROL[.@i+1] && gettime(GETTIME_HOUR) < $WOE_CONTROL[.@i+2]) { deletearray .Active[0],2; set .Active[0], $WOE_CONTROL[.@i+3]; if (.Init) { agitend; agitend2; } else announce "The War Of Emperium has begun!",bc_all|bc_woe; sleep 1000; agitstart; agitstart2; for(set .@j,0; .@j<30; set .@j,.@j+1) { if (.Active[0]&(1<<.@j)) { if (!.Init) Disp_Owner(.Castles$[.@j],0); set .Active[1], .Active[1] | (1<<((.@j/5)+1)); } else { if (.@j<20) { donpcevent "Agit#"+.Castles$[.@j]+"::OnAgitEnd"; killmonster .Castles$[.@j], "Agit#"+.Castles$[.@j]+"::OnAgitBreak"; } else { donpcevent "Manager#"+.Castles$[.@j]+"::OnAgitEnd2"; killmonster .Castles$[.@j], "Steward#"+.EndLabel$[.@j-20]+"::OnStartArena"; } } } break; } } set .Init,0; end; function Disp_Owner { set .@o, getcastledata(getarg(0),1); if (.@o) announce "The ["+getcastlename(getarg(0))+"] castle "+((getarg(1))?"has been conquered":"is currently held")+" by the ["+getguildname(.@o)+"] guild.",bc_all|bc_woe; else announce "The ["+getcastlename(getarg(0))+"] castle is currently unoccupied.",bc_all|bc_woe; return; } function Add_Zero { return ((getarg(0)<10)?"0":"")+getarg(0)+(getarg(1,0)?".":":")+"00"; } OnReward: set .@sql$, ((.Options&4)?"position = 0":"online = 1"); if (.Options&2) set .@str$,gettimestr("%B %d, %Y",21); freeloop(1); for(set .@i,0; .@i<30; set .@i,.@i+1) if (getarg(0)&(1<<.@i)) { set .@GID, getcastledata(.Castles$[.@i],1); if (!.@GID) continue; set .@size, query_sql("SELECT account_id,char_id FROM `guild_member` WHERE guild_id = '"+.@GID+"' AND "+.@sql$,.@aid,.@cid); for(set .@j,0; .@j<.@size; set .@j,.@j+1) { if (.Options&8 && !(.Options&4)) { set .@ip$, replacestr(getcharip(.@aid[.@j]),".","a"); if (getd(".@ip_"+.@i+"_"+.@ip$)) continue; setd ".@ip_"+.@i+"_"+.@ip$,1; } if (.Options&2) { query_sql("INSERT INTO `mail` (send_name,dest_id,title,message,nameid,amount,identify,zeny,time) VALUES ("+ "'no-reply',"+.@cid[.@j]+",'** Siege Reward: "+getcastlename(.Castles$[.@i])+" **',"+ "'Brave one,% % Congratulations!% Your guild has successfully occupied% territory in the War of Emperium on% "+.@str$+".% % % % % [ Your reward is attached. ]',"+ .Reward[0]+","+.Reward[1]+",0,"+.Reward[2]+",UNIX_TIMESTAMP(NOW()))"); if (!getd(".@str_"+.@cid[.@j]) && isloggedin(.@aid[.@j],.@cid[.@j])) { setd ".@str_"+.@cid[.@j],1; message rid2name(.@aid[.@j]),"You've got mail! Please re-login to update your mailing list."; } } else if (isloggedin(.@aid[.@j])) { for(set .@k,0; .@k<getarraysize(.Reward); set .@k,.@k+2) getitem .Reward[.@k], .Reward[.@k+1], .@aid[.@j]; message rid2name(.@aid[.@j]),"You have been rewarded for conquering "+getcastlename(.Castles$[.@i])+"."; } } } if (.Options&2) query_sql("UPDATE `mail` SET message = REPLACE(message,'%',CHAR(13)) WHERE send_name = 'no-reply'"); return; OnPCLoadMapEvent: if (!compare(strcharinfo(PC_MAP),"g_cas")) end; if (((.AutoKick && .Active[0]) || (.NoOwner && !getcastledata(strcharinfo(PC_MAP),1))) && !(.Active[0]&(1<<getd("."+strcharinfo(PC_MAP))))) { if (getcharid(CHAR_ID_GUILD) && getcastledata(strcharinfo(PC_MAP),1) == getcharid(CHAR_ID_GUILD)) end; sleep2 1000; message strcharinfo(PC_NAME), getcastlename(strcharinfo(PC_MAP))+" is currently inactive."; sleep2 5000; if (compare(strcharinfo(PC_MAP),"g_cas")) warp "SavePoint",0,0; } end; OnMenu: while(1) { mes "[WOE Information]"; if (agitcheck() || agitcheck2()) { if (.Active[0]) { for(set .@i,0; .@i<.Size; set .@i,.@i+4) if (gettime(GETTIME_WEEKDAY) == $WOE_CONTROL[.@i] && gettime(GETTIME_HOUR) >= $WOE_CONTROL[.@i+1] && gettime(GETTIME_HOUR) < $WOE_CONTROL[.@i+2]) { set .@i, $WOE_CONTROL[.@i+2]; break; } mes "The War of Emperium is ^0055FFactive^000000 until ^FF0000"+Add_Zero(.@i)+"^000000 in the following regions:"; mes " "; for(set .@i,0; .@i<6; set .@i,.@i+1) if (.Active[1]&(1<<(.@i+1))) mes " > ^777777"+.Regions$[.@i]+"^000000"; } else mes "The War of Emperium is ^0055FFactive^000000."; } else { for(set .@i,0; .@i<.Size; set .@i,.@i+4) if ((gettime(GETTIME_WEEKDAY) == $WOE_CONTROL[.@i] && gettime(GETTIME_HOUR) <= $WOE_CONTROL[.@i+1]) || gettime(GETTIME_WEEKDAY) < $WOE_CONTROL[.@i]) { setarray .@time[0],$WOE_CONTROL[.@i],$WOE_CONTROL[.@i+1]; break; } if (!getarraysize(.@time)) setarray .@time[0],$WOE_CONTROL[0],$WOE_CONTROL[1]; mes "The War of Emperium is ^777777inactive^000000."; if (.Size) { mes " "; mes "The next session will begin"; mes "on ^0055FF"+.Days$[.@time[0]]+"^000000 at "+Add_Zero(.@time[1])+"^000000."; } } next; switch(select(((.CastleWarp || .Active[1])?" ~ Warp to castles...":""), "~ Check schedule...", " ~ View castle owners...", ((getgmlevel()<.GMAccess || !getgmlevel())?"":" ~ Manage sessions..."), " ~ ^777777Cancel^000000")) { case 1: if (.CastleWarp) set .@clr$,"^0055FF"; set .@menu$,""; for(set .@i,0; .@i<6; set .@i,.@i+1) { if (.CastleWarp || .Active[1]&(1<<(.@i+1))) set .@menu$, .@menu$+" ~ "+((.Active[1]&(1<<(.@i+1)))?.@clr$:"^777777")+.Regions$[.@i]+" Castles^000000"; set .@menu$, .@menu$+":"; } set .@i, select(.@menu$)-1; set .@menu$,""; for(set .@j,.@i*5; .@j<(.@i*5)+5; set .@j,.@j+1) { if (.CastleWarp || .Active[0]&(1<<.@j)) set .@menu$, .@menu$+" ~ "+((.Active[0]&(1<<.@j))?.@clr$:"^777777")+getcastlename(.Castles$[.@j])+"^000000"; set .@menu$, .@menu$+":"; } set .@j, select(.@menu$)-1; warp .Map$[.@i],.MapX[(.@i*5)+.@j],.MapY[(.@i*5)+.@j]; close; case 2: mes "[Schedule]"; if (.Size) { freeloop(1); for(set .@i,0; .@i<.Size; set .@i,.@i+4) { mes "> ^FF0000"+.Days$[$WOE_CONTROL[.@i]]+" ("+Add_Zero($WOE_CONTROL[.@i+1])+"-"+Add_Zero($WOE_CONTROL[.@i+2])+")^000000"; for(set .@j,0; .@j<30; set .@j,.@j+1) if ($WOE_CONTROL[.@i+3]&(1<<.@j)) mes " ~ "+getcastlename(.Castles$[.@j])+" ^777777("+.Castles$[.@j]+")^000000"; if (.@i+4 < .Size) mes " "; } freeloop(0); } else mes "No times are configured."; next; break; case 3: mes "[Castle Ownership]"; for(set .@i,0; .@i<6; set .@i,.@i+1) { set .@k, .@i*5; mes "> ^FF0000"+.Regions$[.@i]+"^000000"; for(set .@j,.@k; .@j<(.@k+5); set .@j,.@j+1) { set .@t, getcastledata(.Castles$[.@j],1); mes " ~ "+getcastlename(.Castles$[.@j])+": "+((.@t)?"^0055FF"+getguildname(.@t):"^777777unoccupied")+"^000000"; } if (.@i < 5) mes " "; } next; break; case 4: while(1) { mes "[Session Manager]"; mes "There are ^0055FF"+(.Size/4)+" session(s)^000000 configured."; mes "What would you like to do?"; next; switch(select(" ~ Add a session...", " ~ Delete a session...", " ~ Reload settings...", ((agitcheck() || agitcheck2())?" ~ End WOE session...": ""), " ~ ^777777Go back^000000")) { case 1: mes "[New Session]"; if (.Size > 127) { mes "You have already reached the maximum of 32 sessions."; next; break; } mes "Select a day."; next; set .@day, select(" ~ "+implode(.Days$,": ~ "))-1; mes "[New Session]"; mes "Select a start time for ^0055FF"+.Days$[.@day]+"^000000."; next; set .@menu$,""; for(set .@i,0; .@i<23; set .@i,.@i+1) set .@menu$, .@menu$+" ~ "+Add_Zero(.@i,1)+":"; set .@start, select(.@menu$)-1; mes "[New Session]"; mes "Select an end time for ^0055FF"+.Days$[.@day]+"^000000."; next; set .@menu$,""; for(set .@i,.@start+1; .@i<24; set.@i,.@i+1) set .@menu$, .@menu$+" ~ "+Add_Zero(.@i,1)+":"; set .@end, select(.@menu$)+.@start; for(set .@i,0; .@i<.Size; set .@i,.@i+4) if (.@day == $WOE_CONTROL[.@i] && ((.@start >= $WOE_CONTROL[.@i+1] && .@start < $WOE_CONTROL[.@i+2]) || (.@end > $WOE_CONTROL[.@i+1] && .@end <= $WOE_CONTROL[.@i+2]) || (.@start <= $WOE_CONTROL[.@i+1] && .@end >= $WOE_CONTROL[.@i+2]))) { mes "[New Session]"; mes "The chosen times overlap with an existing session."; next; set .@d,1; break; } if (.@d) { set .@d,0; break; } set .@castle,0; while(1) { mes "[New Session]"; mes "^0055FF"+.Days$[.@day]+" ("+Add_Zero(.@start)+"-"+Add_Zero(.@end)+")^000000"; mes " > Castles:"; if (!.@castle) mes " ~ ^777777(none selected)^000000"; else for(set .@i,0; .@i<30; set .@i,.@i+1) if (.@castle&(1<<.@i)) mes " ~ "+getcastlename(.Castles$[.@i])+" ("+.Castles$[.@i]+")"; next; set .@menu$,((.@castle)?" ~ ^FF0000Finished...^000000":"")+":"; for(set .@i,0; .@i<30; set .@i,.@i+1) set .@menu$, .@menu$+" ~ "+((.@castle&(1<<.@i))?"^0055FF":"")+getcastlename(.Castles$[.@i])+" ("+.Castles$[.@i]+")^000000:"; set .@i, select(.@menu$)-1; if (.@i) set .@castle, .@castle^(1<<(.@i-1)); else { mes "[New Session]"; mes "Are you sure?"; next; switch(select(" ~ ^0055FFAdd session...^000000", " ~ Continue selecting castles...", " ~ ^777777Cancel^000000")) { case 1: for(set .@i,0; .@i<.Size; set .@i,.@i+4) if ((.@day == $WOE_CONTROL[.@i] && .@end <= $WOE_CONTROL[.@i+1]) || .@day < $WOE_CONTROL[.@i]) { set .@d,1; break; } if (!.@d) { set .@d,1; set .@i,.Size; } copyarray $WOE_CONTROL[.@i+4], $WOE_CONTROL[.@i], .Size-.@i; setarray $WOE_CONTROL[.@i], .@day, .@start, .@end, .@castle; set .Size, getarraysize($WOE_CONTROL); case 3: mes "[New Session]"; mes ((.@d)?"Session added.":"Cancelled."); next; set .@d,1; case 2: break; } if (.@d) { set .@d,0; break; } } } break; case 2: mes "[Remove Session]"; if (!.Size) { mes "There are no sessions configured."; next; break; } mes "Select a session to remove."; next; set .@menu$,""; for(set .@i,0; .@i<.Size; set .@i,.@i+4) set .@menu$, .@menu$+" ~ "+.Days$[$WOE_CONTROL[.@i]]+" ("+Add_Zero($WOE_CONTROL[.@i+1],1)+"-"+Add_Zero($WOE_CONTROL[.@i+2],1)+"):"; set .@menu$, .@menu$+" ~ ^777777Cancel^000000"; set .@i, select(.@menu$)-1; if (.@i == (.Size/4)) break; mes "[Remove Session]"; mes "Delete ^0055FF"+.Days$[$WOE_CONTROL[.@i*4]]+"'s^000000 session?"; mes "This action cannot be undone."; next; set .@j, select(" ~ ^FF0000Delete session...^000000", " ~ ^777777Cancel^000000"); mes "[Remove Session]"; if (.@j == 2) mes "Cancelled."; else { deletearray $WOE_CONTROL[.@i*4],4; set .Size, getarraysize($WOE_CONTROL); mes "Session deleted."; } next; break; case 3: mes "[Reload Settings]"; mes "This will trigger all events related to new session configurations, if any."; if (agitcheck() || agitcheck2()) { mes " "; mes "Be aware that this will disrupt the current WOE session."; } next; set .@i, select(" ~ ^0055FFReload settings...^000000", " ~ ^777777Cancel^000000"); mes "[Reload Settings]"; if (.@i == 2) mes "Cancelled."; else { set .Init,1; donpcevent "WOE_CONTROL::OnMinute00"; mes "Variables have been re-initialized."; } next; break; case 4: mes "[Force Agit End]"; if (!agitcheck() && !agitcheck2()) { mes "WOE has already ended."; next; break; } mes "This command will safely execute all AgitEnd events."; mes " "; mes "Kill the current WOE session?"; next; set .@i, select(" ~ ^FF0000End session...^000000", ((.Options&1)?" ~ ^FF0000End session without rewards...^000000": ""), " ~ ^777777Cancel^000000"); mes "[Force Agit End]"; if (.@i == 3) mes "Cancelled."; else { set .ForceEnd, .@i; donpcevent "WOE_CONTROL::OnWOEEnd"; mes "WOE session terminated."; } next; break; case 5: set .@d,1; break; } if (.@d) { set .@d,0; break; } } break; case 5: close; } } } //DUPLICATES payon,168,230,4 duplicate(WOE Information) WOE Information#pay 2_BOARD1 morocc,149,103,6 duplicate(WOE Information) WOE Information#moc 2_BOARD1 alberta,198,149,4 duplicate(WOE Information) WOE Information#alb 2_BOARD1 izlude,123,120,6 duplicate(WOE Information) WOE Information#iz 2_BOARD1 aldebaran,145,112,4 duplicate(WOE Information) WOE Information#ald 2_BOARD1 xmas,151,135,4 duplicate(WOE Information) WOE Information#xmas 2_BOARD1 comodo,191,160,4 duplicate(WOE Information) WOE Information#com 2_BOARD1 amatsu,191,85,6 duplicate(WOE Information) WOE Information#ama 2_BOARD1 gonryun,162,122,4 duplicate(WOE Information) WOE Information#gon 2_BOARD1 umbala,90,157,6 duplicate(WOE Information) WOE Information#um 2_BOARD1 louyang,211,41,6 duplicate(WOE Information) WOE Information#lou 2_BOARD1 lighthalzen,162,100,4 duplicate(WOE Information) WOE Information#lhz 2_BOARD1 hugel,93,153,6 duplicate(WOE Information) WOE Information#hug 2_BOARD1 rachel,136,119,4 duplicate(WOE Information) WOE Information#rac 2_BOARD1 I've not been able to test it as I'm not home today, but there's no error at least
  5. Finally I've figured what failed: I simply forgot to add the npc.h include...Which bring the error when calling npc->event...My bad for all this lost time, everything's good now ^^
  6. Hi peoples, I'd like to programatically trigger a specific event of a specific npc. I'm really newb to code sourcing, so if anybody can tell me how to do that, I'd be greatly thankfull ^^ Here's the name of the npc and event to call: alapcusk for the npc unique name, and OnEventTriggered for the event! I guess it should be something like "npc->event(sd, "alapcusk::OnEventTriggered", 0)", but it didn't worked... Thanks!
  7. Well done you were right ^^ Thank you!
  8. Allright thanks. I'll give a try tonight, when coming home, and I'll tell you the results.
  9. Hi peoples, I'm currently trying to add custom skills, but encounter an issue I don't quite understand. I've added 6 skills, from id 1301 to 1306. I did have an error, saying that the id were doubled (while I can't find a clue of where to find them, as they were not used in skill_db.conf). I've try to take the last entered in this file (10014, skill GD_DEVELOPMENT), and started at 11000 (to let enough space for future adding), the id isn't recognized at all (id 0 when starting map server). Finally, while reading the guide again, I used the id 8443, which worked for first skill, but 8444 to 8448 for following ones failed with the same error, id allready in use. Can anybody enlight me? Which id am I supposed to use? Can't give a try to each id between 1300 and 11000...
  10. Well yeah, I know, but as there was already one one the src and bl params, didn't know you can double it. Are you sure about that? The example I took (AnnieRuru OnPCUseEvent) doesn't do that, but I'll give it a try. Thanks for answering anyway.
  11. Hi everybody. I'm currently trying to write a hooking plugin enabling to hook skill use from players. I've hooked (pre) the castend_pos2 and castend_nodamage method, which I've confirmed to be the two I need for my use. If I use those initial methods to display the infos I need (id, x and y pos), the infos displayed are okay. But on the other hand, if use my hooked ones, the castend_nodamage doesn't display the good coordinates. On top of that, I'd like to add a check for players only, to prevent raise from mob skills. But this doesn't work either, I don't get any output of the infos anymore, meaning my check isn't good, but I don't know why. Can anybody help me? Here's my code: int skill_castend_nodamage_id_pre(struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag) { //ShowInfo( "hook castend nodamage %i/%i", src->type, BL_PC ); // TBL_PC *sd = BL_CAST(BL_PC, src); //if ( src->type == BL_PC || sd ) { ShowInfo(" hook castend nodamage id %i: %i / %i", *skill_id, bl->x, bl->y); ShowInfo(" hook castend nodamage id %i: %i / %i", *skill_id, src->x, src->y); //} return 0; } /* run when server starts */ HPExport void plugin_init (void) { //init hook ShowInfo("[%s] I'm being run from the '%s' filename\n", SERVER_NAME); addHookPre( skill, castend_pos2, skill_castend_pos2_pre); addHookPre( skill, castend_nodamage_id, skill_castend_nodamage_id_pre); } Just to explain, the "sd" was used just in case, as the type must be okay. But as it doesn't, I've used to double check. Doesn't work either...I always get a "hook castend nodamage id 2006: 0 / -10368" (notice that the y may change, but I've never seen anything over than 0 for the x). Thanks for any help you'd be able to give me!
  12. Hi guys, I'd like to have some opinion before starting to work on something. It's been a long time I didn't work on a server RO, cause I think the game itself start to be a bit...oldish. Therefor, I'd like to offer RO universe, without the RO drawbacks we all know for years. And I'd like to have your opinion: is it possible for this idea to be followed by some? So here's the main ideas: -No class (only one, Gangsi or Dark collector as they don't have skills) -Skills bound to weapon (skill list depending on the weapon type and level, skills levels depending on weapon refine rate) -No Mvp, except in main line -Increased crafting possibilities, to fill the lack of mvp lootings -Limited lifes (10, with a specific system to regain one). It'll probably be paired with a progressive system, allowing players to access to area after defeating a Mvp in the main line. Any opinion? I'd like not to work for nothing ^^'
  13. Actually, there's no such thing as "go back to lvl 1". There's only a jobchange to novice or novice_high, which makes you automatically go back to lvl 1/1. You can therefor add a base lvl and job lvl up command after the jobchange to make player return to the desired lvl. On the other hand, they'll have to reuse all their points (stats and skills) manually.
  14. Reuping an old thread. I don't want to use the original skill from those classes, just to recreate them a new tree. But whatever I do (adding them in skill_tree.conf and in lub files), the tree never updates. Am I missing something?
  15. Alayne

    AFK Homunculus

    Change getidle() by checkidle("playername").
  16. Alayne

    AFK Homunculus

    Generally, this error is due to space used instead of tabs. Type "-<tab>script<tab>vaporize<tab>-1,{"
  17. That's the Onclock part. The gettime(5) means you'll apply the reward every 1st day of month. The gettime(4) means you'll do it every monday.
  18. Well as you've seen it, just change the OnClock0000: if ( gettime(5) != 1 ) end; L_give: for OnClock0000: if ( gettime(4) != 1 ) end; L_give: To make it week based over month based. For the reset, yes, it's automatically done when your players will receive the rewards query_sql "update `char` set mvp_rank = 0"; // reset the ladder
  19. Yep use these command. Just keep in mind to check that attchrid(char_rid) returns 1 to prevent errors if the player is offline.
  20. Do you got any error on your map server? I use this script too, and it works well last time I tried it.
  21. Alayne

    AFK Homunculus

    Can't test it right now, but this should do the job - script vaporize -1,{ OnPCLoginEvent: addtimer 60000,strnpcinfo(0)+"::On1min"; end; On1min: if(gethominfo(2) != "null"){ if(getidle() >= $antiafk) { atcommand "@useskill 244 1 "+strcharinfo(0); dispbottom "You are not allowed to farm with Homun while AFK."; addtimer 60000,strnpcinfo(0)+"::On1min"; } } addtimer 60000,strnpcinfo(0)+"::On1min"; end; OnInit: set $antiafk, 120;// how many seconds to use vaporize end; }
  22. Well while I have to recognize that I don't really understand the "state" notion, the castles to be activated must be edited in this array, in the oninit section: setarray .woe_state_0[0],1,0,0,0,0,0,0; To add more castle into prontera region, change the 1 to the value you want (0, 2, 4, 5...) as it's depicted in the comments
  23. That's a bit blurry...Can you describe a bit more your problem?
  24. Hi guys, I'd like to use the Gangsi & Death Knight class, but can't succeed in adding skills to those classes' windows...I've edited the skilltree.conf and the skilltreeview.lub, but nothing works... Does somebody have a guide on how to do that please?
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.