Jump to content

ThyroDree

Members
  • Content Count

    556
  • Joined

  • Last visited

6 Followers

About ThyroDree

  • Rank
    Advanced Member

Profile Information

  • Gender
    Not Telling
  • Location:
    Philippines
  • Github
    bosxkate23
  • Emulator
    Hercules

Recent Profile Visitors

2408 profile views
  1. Hi, do I need to disable the official summon quest script before using this script? I think using this with official thanatos quest is not connected,
  2. Is there a possible way of hiding certain monster from getting its information? For example I have a custom mob "God Poring" which is Angel Type Monster, Large Size Mob.. I wanted to make it not accessible for players to @mobinfo/@mi "God Poring".. Instead of God poring will sshow its info it will show @mi failed.
  3. Hello, I have used the @pk source patch since Dastgir pk plugin isn't working on me.. Can anyone help me make modify the command line when using @pk? I wanted to make it @pk <on/off> features not only @pk only itself no Toggle ON / OFF.. I will attach the file patch. pk.patch
  4. How can I enable the preview item of quest item? It's not showing the Preview Case //===== rAthena Script ======================================= //= Euphy's Quest Shop //===== By: ================================================== //= Euphy //===== Current Version: ===================================== //= 1.6b //===== Compatible With: ===================================== //= rAthena SVN r16862+ //===== Description: ========================================= //= A dynamic quest shop based on Lunar's, with easier config. //= Includes support for multiple shops & cashpoints. //= Item Preview script by ToastOfDoom. //===== Additional Comments: ================================= //= 1.0 Initial script. //= 1.2 Added category support. //= 1.3 More options and fixes. //= 1.4 Added debug settings. //= 1.5 Replaced categories with shop IDs. //= 1.6 Added support for purchasing stackables. //= 1.6a Added support for previewing costumes and robes. //= 1.6b Added 'disable_items' command. //============================================================ // Shop NPCs -- supplying no argument displays entire menu. // callfunc "qshop"{,<shop ID>{,<shop ID>{,...}}}; //============================================================ mall,100,120,4 script Headgear Quest Shop#4 4_MAL_SOLDIER,{ callfunc "oshop1"; OnInit: // waitingroom "Quest",0; end; } // Script Core //============================================================ - script offquest_shop FAKE_NPC,{ function Add; function Chk; function Slot; function A_An; OnInit: freeloop(1); // ----------------------------------------------------------- // Basic shop settings. // ----------------------------------------------------------- set .announce,0; // Announce quest completion? (1: yes / 0: no) set .ShowSlot,1; // Show item slots? (2: all equipment / 1: if slots > 0 / 0: never) set .ShowID,1; // Show item IDs? (1: yes / 0: no) set .ShowZeny,0; // Show Zeny cost, if any? (1: yes / 0: no) set .MaxStack,100; // Max number of quest items purchased at one time. // ----------------------------------------------------------- // Points variable -- optional quest requirement. // setarray .Points$[0],"<variable name>","<display name>"; // ----------------------------------------------------------- setarray .Points$[0],"#CASHPOINTS","Cash Points"; // ----------------------------------------------------------- // Shop IDs -- to add shops, copy dummy data at bottom of file. // setarray .Shops$[1],"<Shop 1>","<Shop 2>"{,...}; // ----------------------------------------------------------- setarray .Shops$[1],"Upper Gear","Middle Gear"; // ----------------------------------------------------------- // Quest items -- do NOT use a reward item more than once! // Add(<shop ID>,<reward ID>,<reward amount>, // <Zeny cost>,<point cost>, // <required item ID>,<required item amount>{,...}); // ----------------------------------------------------------- //---------- Upper Add(1,2284,1,0,0,923,20); Add(1,5076,1,0,0,2227,1,7038,500); Add(1,5199,1,0,0,2227,1,978,1,1057,100); Add(1,5057,1,10000,0,2213,1,983,1,914,200); Add(1,5065,1,0,0,624,1,959,500,1023,1); Add(1,5016,1,0,0,1030,10,0,0,0,0,0,0); Add(1,2214,1,0,0,949,100,706,1,722,1,2213,1); Add(1,5026,1,0,0,1036,450,949,330,539,120,982,1); Add(1,5108,1,5000,0,7301,500,611,10); Add(1,5038,1,0,0,1038,600,7048,40); Add(1,5258,1,0,0,914,100,975,1,976,1,978,1); Add(1,5058,1,0,0,2233,1,983,1,7206,300,7030,1); Add(1,5205,1,0,0,610,100,706,25,7194,300); // Add(1,5427,1,0,0,5288,1,12078,1,7521,1,12183,1); // Add(1,5188,1,0,0,5027,1,7166,50,7064,1); // Add(1,5426,1,0,0,5027,1,976,5); Add(1,5001,1,0,0,999,40,984,1,970,1,1003,1); Add(1,5070,1,0,0,7216,300,7097,300,2211,1,982,1); Add(1,5069,1,0,0,1022,99); Add(1,5027,1,0,0,2252,1,1036,400,7001,50,4052,1); Add(1,2280,1,10000,0,1019,120); Add(1,5062,1,0,0,2280,1,7197,300,7150,300); Add(1,5121,1,0,0,7263,1,660,1,7099,30,7315,369); //---------- Middle Add(2,5074,1,20000,0,2286,1,2254,1); Add(2,5068,1,20000,0,2255,1,2286,1); Add(2,2296,1,50000,0,999,100); Add(2,5040,1,0,0,7047,100); Add(2,5175,1,100000,0,7111,100,938,99,983,1); Add(2,2281,1,5000,0,998,20,707,1); Add(2,5043,1,0,0,2281,1,1048,50); Add(2,2202,1,0,0,7020,2,999,100); // ----------------------------------------------------------- freeloop(0); set .menu$,""; for(set [email protected],1; [email protected]<=getarraysize(.Shops$); set [email protected],[email protected]+1) { set .menu$, .menu$+.Shops$[[email protected]]+":"; npcshopdelitem "oshop"[email protected],909; } end; OnMenu: set [email protected], getarraysize(@i); if ([email protected]) set [email protected], select(.menu$); else if ([email protected] == 1) set [email protected], @i[0]; else { for(set [email protected],0; [email protected]<[email protected]; set [email protected],[email protected]+1) set [email protected]$, [email protected]$+.Shops$[@i[[email protected]]]+":"; set [email protected], @i[select([email protected]$)-1]; } deletearray @i[0],getarraysize(@i); if (.Shops$[[email protected]] == "") { message strcharinfo(0),"An error has occurred."; end; } dispbottom "Select one item at a time."; callshop "oshop"[email protected],1; npcshopattach "oshop"[email protected]; end; OnBuyItem: // [email protected][] : RewardID, BoughtAmt, RewardAmt, BaseAmt, ReqZeny, ReqPts, { ReqItem, ReqAmt, ... } setarray [email protected][0],@bought_nameid[0],((@bought_quantity[0] > .MaxStack)?.MaxStack:@bought_quantity[0]); copyarray [email protected][3],getd(".q_"[email protected][0]+"[0]"),getarraysize(getd(".q_"[email protected][0])); set [email protected][2],[email protected][1]*[email protected][3]; if ([email protected][2] || [email protected][2] > 30000) { message strcharinfo(0),"You can't purchase that many "+getitemname([email protected][0])+"."; end; } mes "[Quest Shop]"; mes "Reward: ^0055FF"+(([email protected][2] > 1)[email protected][2]+"x ":"")+Slot([email protected][0])+"^000000"; mes "Requirements:"; disable_items; if ([email protected][4]) mes " > "+Chk(Zeny,[email protected][4]*[email protected][1])+([email protected][4]*[email protected][1])+" Zeny^000000"; if ([email protected][5]) mes " > "+Chk(getd(.Points$[0]),[email protected][5]*[email protected][1])+([email protected][5]*[email protected][1])+" "+.Points$[1]+" ("+getd(.Points$[0])+"/"+([email protected][5]*[email protected][1])+")^000000"; if ([email protected][6]) for(set [email protected],6; [email protected]<getarraysize([email protected]); set [email protected],[email protected]+2) mes " > "+Chk(countitem([email protected][[email protected]]),[email protected][[email protected]+1]*[email protected][1])+((.ShowID)?"{"[email protected][[email protected]]+"} ":"")+Slot([email protected][[email protected]])+" ("+countitem([email protected][[email protected]])+"/"+([email protected][[email protected]+1]*[email protected][1])+")^000000"; next; setarray @qe[1], getiteminfo([email protected][0],5), getiteminfo([email protected][0],11); if (@qe[2] > 0 && ((@qe[1] & 1) || (@qe[1] & 256) || (@qe[1] & 512) || (@qe[1] & 1024) || (@qe[1] & 2048) || (@qe[1] & 4096) || (@qe[1] & 4) || (@qe[1] & 8192))) set [email protected],1; addtimer 1000, strnpcinfo(0)+"::OnEnd"; while(1) { switch(select(" ~ Purchase ^0055FF"+getitemname([email protected][0])+"^000000:"+(([email protected] && [email protected][7])?" ~ Preview...":"")+": ~ ^777777Cancel^000000")) { case 1: if (@qe[0]) { mes "[Quest Shop]"; mes "You're missing one or more quest requirements."; close; } if (!checkweight([email protected][0],[email protected][2])) { mes "[Quest Shop]"; mes "^FF0000You need "+((([email protected][2]*getiteminfo([email protected][0],6))+Weight-MaxWeight)/10)+" additional weight capacity to complete this trade.^000000"; close; } if ([email protected][4]) set Zeny, Zeny-([email protected][4]*[email protected][1]); if ([email protected][5]) setd .Points$[0], getd(.Points$[0])-([email protected][5]*[email protected][1]); if ([email protected][6]) for(set [email protected],6; [email protected]<getarraysize([email protected]); set [email protected],[email protected]+2) delitem [email protected][[email protected]],[email protected][[email protected]+1]*[email protected][1]; getitem [email protected][0],[email protected][2]; if (.announce) announce strcharinfo(0)+" has created "+(([email protected][2] > 1)[email protected][2]+"x "+getitemname([email protected][0]):A_An(getitemname([email protected][0])))+"!",0,0xFF6060; // f87e7b; specialeffect EF_FLOWERLEAF; close; case 2: setarray @qe[3], getlook(LOOK_HEAD_BOTTOM), getlook(LOOK_HEAD_TOP), getlook(LOOK_HEAD_MID), getlook(LOOK_ROBE), 1; if ((@qe[1] & 1) || (@qe[1] & 4096)) changelook LOOK_HEAD_BOTTOM, @qe[2]; else if ((@qe[1] & 256) || (@qe[1] & 1024)) changelook LOOK_HEAD_TOP, @qe[2]; else if ((@qe[1] & 512) || (@qe[1] & 2048)) changelook LOOK_HEAD_MID, @qe[2]; else if ((@qe[1] & 4) || (@qe[1] & 8192)) changelook LOOK_ROBE, @qe[2]; break; case 3: close; } } OnEnd: if (@qe[7]) { changelook LOOK_HEAD_BOTTOM, @qe[3]; changelook LOOK_HEAD_TOP, @qe[4]; changelook LOOK_HEAD_MID, @qe[5]; changelook LOOK_ROBE, @qe[6]; } deletearray @qe[0],8; end; function Add { if (getitemname(getarg(1)) == "null") { consolemes(CONSOLEMES_DEBUG, "Quest reward #"+getarg(1)+" invalid (skipped)."); return; } setarray [email protected][0],getarg(2),getarg(3),getarg(4); for(set [email protected],5; [email protected]<getargcount(); set [email protected],[email protected]+2) { if (getitemname(getarg([email protected])) == "null") { consolemes(CONSOLEMES_DEBUG, "Quest requirement #"+getarg([email protected])+" invalid (skipped)."); return; } else setarray [email protected][[email protected]],getarg([email protected]),getarg([email protected]+1); } copyarray getd(".q_"+getarg(1)+"[0]"),[email protected][0],getarraysize([email protected]); npcshopadditem "oshop"+getarg(0),getarg(1),((.ShowZeny)?getarg(3):0); return; } function Chk { if (getarg(0) < getarg(1)) { set @qe[0],1; return "^FF0000"; } else return "^00FF00"; } function Slot { set [email protected]$,getitemname(getarg(0)); switch(.ShowSlot) { case 1: if (!getitemslots(getarg(0))) return [email protected]$; case 2: if (getiteminfo(getarg(0),2) == 4 || getiteminfo(getarg(0),2) == 5) return [email protected]$+" ["+getitemslots(getarg(0))+"]"; default: return [email protected]$; } } function A_An { setarray [email protected]$[0],"a","e","i","o","u"; set [email protected]$, "_"+getarg(0); for(set [email protected],0; [email protected]<5; set [email protected],[email protected]+1) if (compare([email protected]$,"_"[email protected]$[[email protected]])) return "an "+getarg(0); return "a "+getarg(0); } } function script oshop1 { deletearray @i[0],getarraysize(@i); for(set [email protected],0; [email protected]<getargcount(); set [email protected],[email protected]+1) set @i[[email protected]],getarg([email protected]); doevent "offquest_shop::OnMenu"; end; } // Dummy shop data -- copy as needed. //============================================================ - shop oshop1 FAKE_NPC,909:-1 - shop oshop2 FAKE_NPC,909:-1
  5. Up, anyone can help making spider web works like sniper trap (Ankle Snares, etc.,)
  6. What do you mean sir? Can you provide sample, I tried it on body reloc, ankle snare works but spider web you can still use body relocation
  7. Anyone can help me fix this warning showing on my atcommand.c when compiling? atcommand.c: In function ‘atcommand_pk’: ../common/nullpo.h:69:23: warning: nonnull argument ‘sd’ compared to NULL [-Wnonnull-compare] #define nullpo_chk(t) ( (t) != NULL ? false : (nullpo->assert_report(__FILE__, __LINE__, __func__, #t, "nullpo info"), true) ) ^ ../common/nullpo.h:124:11: note: in expansion of macro ‘nullpo_chk’ do { if (nullpo_chk(t)) return(ret); } while(0) ^~~~~~~~~~ atcommand.c:9732:2: note: in expansion of macro ‘nullpo_retr’ nullpo_retr(-1, sd); ^~~~~~~~~~~ This warning shows after I added a source mod of PK which is this lines.. +ACMD(pk) { + + int64 tick = timer->gettick(); + + nullpo_retr(-1, sd); + + if( map->list[sd->bl.m].flag.pvp || map->list[sd->bl.m].flag.gvg || map->list[sd->bl.m].flag.gvg_castle || map->list[sd->bl.m].flag.gvg_castle || map->list[sd->bl.m].flag.battleground ) { + clif->message(sd->fd, "You can only change your PK state on non-PVP maps."); + return false; + } + + if(DIFF_TICK(sd->pk_mode_tick,tick) > 0){ //check the delay before use this command again + clif->message(sd->fd, "You can turn OFF your PK state after 3 minutes."); + return false; + } + else { + if (!sd->state.pk_mode) { + sd->state.pk_mode = 1; + clif->message(sd->fd, "Your PK state is now OFF"); + sd->pk_mode_tick = tick + 0; //set the delay here + } else { + sd->state.pk_mode = 0; + clif->message(sd->fd, "Your PK state is now ON"); + sd->pk_mode_tick = tick + 300000; //set the delay here + } + } + return true; +} +
  8. How can I make Charge Attack, Body Relocation,Back Sliding, Flying Side Kick, High Jump, Shadow Jump fail when they are trapped in Spider Web and Ankle Snare? I tried on body relocation by adding this lines, The anklesnare skill fail when body reloacating works but the spider web skill fail wont work. I can still body reloc. // Block skill usage while you have SC_SPIDERWEB AND ANKLESNARE status if(sc && (sc->data[SC_SPIDERWEB] || sc->data[SC_ANKLESNARE])) break; Also How can i make the Spider Web works like Ankle snare trap by placing on floors not casting on player.
  9. Hi, did you tried pk by dastgir using latest hercules? Same problem as mine, Compiling has no errors but when you toggle PK ON on both character they cant attack each other (Normal Attack or Skill) - This is when PK mode on misc.conf is disabled. But I also tried to Enable PK mode on misc.conf, and use dastgir PK plugin. Toggling ON makes both player attack each other but when both or one of character toggle PK OFF. They can still hit each other. Seems the PK plugin by dastgir wont work on my latest herc.
  10. Can we request for update of PK, Warp-Delay and FCP-Bypass plugins? It will be a great to have this plugins again sir @Dastgir
  11. Hi anyone can update on this? This is way back 2018,\ Anyone can update this plugin? I have working plugin with no errors but the problem is It doesnt change the status of player (PK ON / OFF) It will be a great help for us using Herc Plugin features, but this is outdated and needs to fix. //===== Hercules Plugin ====================================== //= @pk command //===== By: ================================================== //= AnnieRuru (v1.1) //===== Modified By: ========================================= //= Dastgir //===== Current Version: ===================================== //= v1.3 //===== Compatible With: ===================================== //= Hercules //===== Description: ========================================= //= PK Mode //===== Topic ================================================ //= http://herc.ws/board/topic/11004-/ //============================================================ #include "common/hercules.h" #include <stdio.h> #include <string.h> #include <stdlib.h> #include "map/atcommand.h" #include "map/battle.h" #include "map/clif.h" #include "map/map.h" #include "map/pc.h" #include "common/memmgr.h" #include "plugins/HPMHooking.h" #include "common/HPMDataCheck.h" HPExport struct hplugin_info pinfo = { "@pk", SERVER_TYPE_MAP, "1.3", HPM_VERSION, }; // bitwise checking enum { PK_ENABLE_TOWN = 1, PK_ENABLE_OTHER = 2, PK_ENABLE_ALL = 3, }; int config_delay = 5; // After turn pk on/off, how many seconds delay before the player allow to pk on/off ? // maps where @pk command can be used int enable_maps = PK_ENABLE_TOWN; // Which map player can actually pk int pk_maps = PK_ENABLE_ALL; struct player_data { unsigned int pkmode :1; int pkmode_delay; }; ACMD(pk) { struct player_data *ssd; char output[CHAT_SIZE_MAX]; if (!( ssd = getFromMSD(sd,0))) { CREATE(ssd, struct player_data, 1); ssd->pkmode = 0; addToMSD(sd, ssd, 0, true); } if ((enable_maps&PK_ENABLE_ALL) == 0 && (enable_maps&PK_ENABLE_TOWN) > 0 && !map->list[sd->bl.m].flag.town) { clif->message(sd->fd, "You can only change your PK state in towns."); return false; } if ((enable_maps&PK_ENABLE_ALL) == 0 && (enable_maps&PK_ENABLE_OTHER) > 0 && map->list[sd->bl.m].flag.town) { clif->message(sd->fd, "You cannot change your PK state in towns."); return false; } if (ssd->pkmode_delay + config_delay > (int)time(NULL)) { safesnprintf(output, CHAT_SIZE_MAX, "You must wait %d seconds before using this command again.", ssd->pkmode_delay + config_delay - (int)time(NULL)); clif->message(sd->fd, output); return false; } if (ssd->pkmode == 0) { ssd->pkmode = 1; clif->message(sd->fd, "Your PK state is now ON"); } else { ssd->pkmode = 0; clif->message(sd->fd, "Your PK state is now OFF"); } ssd->pkmode_delay = (int)time(NULL); return true; } int battle_check_target_post(int retVal, struct block_list *src, struct block_list *target, int flag) { if (retVal != 1 && src->type == BL_PC && target->type == BL_PC) { struct map_session_data *sd = BL_CAST(BL_PC, src); struct map_session_data *targetsd = BL_CAST(BL_PC, target); if ((pk_maps&PK_ENABLE_TOWN && map->list[sd->bl.m].flag.town) || (pk_maps&PK_ENABLE_OTHER && map->list[sd->bl.m].flag.town)) { if (sd->status.account_id != targetsd->status.account_id) { struct player_data *src_pc = getFromMSD(sd, 0); struct player_data *target_pc = getFromMSD(targetsd, 0); if (src_pc != NULL && target_pc != NULL && src_pc->pkmode && target_pc->pkmode) { hookStop(); return 1; } } } } return retVal; } HPExport void plugin_init(void) { addAtcommand("pk", pk); addHookPost(battle, check_target, battle_check_target_post); } HPExport void server_online(void) { ShowInfo("'%s' Plugin by Dastgir/Hercules. Version '%s'\n", pinfo.name, pinfo.version); }
  12. Heres the script //===== Hercules Plugin ====================================== //= Soul Link Boost: Single Strip bypass FCP //===== By: ================================================== //= Dastgir/Hercules //===== Current Version: ===================================== //= 1.0 //===== Description: ========================================= //= Related Topic: //= http://herc.ws/board/files/file/177-soul-link-boost-single-strip-bypass-fcp/ //===== Changelog: =========================================== //= v1.0 - Initial Release. //===== Repo Link: =========================================== //= https://github.com/dastgir/HPM-Plugins //============================================================ #include "common/hercules.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include "common/HPMi.h" #include "common/memmgr.h" #include "common/mmo.h" #include "common/nullpo.h" #include "common/strlib.h" #include "common/timer.h" #include "map/battle.h" #include "map/clif.h" #include "map/guild.h" #include "map/map.h" #include "map/mob.h" #include "map/party.h" #include "map/pc.h" #include "map/skill.h" #include "map/status.h" #include "plugins/HPMHooking.h" #include "common/HPMDataCheck.h" HPExport struct hplugin_info pinfo = { "SoulLink Boost(FCP Bypass)", SERVER_TYPE_MAP, "1.0", HPM_VERSION, }; int skill_castend_nodamage_id_pre(struct block_list **src_, struct block_list **bl_, uint16 *skill_id_, uint16 *skill_lv_, int64 *tick_, int *flag_) { struct map_session_data *sd, *dstsd; struct mob_data *dstmd; struct status_data *sstatus, *tstatus; struct status_change *tsc; bool hookS = false; struct block_list *src = *src_, *bl = *bl_; uint16 skill_id = *skill_id_, skill_lv = *skill_lv_; int64 tick = *tick_; int flag = *flag_; int element = 0; enum sc_type type; if(skill_id > 0 && !skill_lv) return 0; // [Celest] nullpo_retr(1, src); nullpo_retr(1, bl); if (src->m != bl->m) return 1; sd = BL_CAST(BL_PC, src); dstsd = BL_CAST(BL_PC, bl); dstmd = BL_CAST(BL_MOB, bl); if(bl->prev == NULL) return 1; if(status->isdead(src)) { return 1; } switch (skill_id) { case RG_STRIPWEAPON: case RG_STRIPSHIELD: case RG_STRIPARMOR: case RG_STRIPHELM: case ST_FULLSTRIP: case GC_WEAPONCRUSH: case SC_STRIPACCESSARY: hookS = true; break; default: return 0; } if (src != bl && status->isdead(bl)) if (skill->castend_nodamage_id_dead_unknown(src, bl, &skill_id, &skill_lv, &tick, &flag)) return 1; // Supportive skills that can't be cast in users with mado if (sd && dstsd && pc_ismadogear(dstsd)) { if (skill->castend_nodamage_id_mado_unknown(src, bl, &skill_id, &skill_lv, &tick, &flag)) return 0; } tstatus = status->get_status_data(bl); sstatus = status->get_status_data(src); type = status->skill2sc(skill_id); tsc = status->get_sc(bl); if (src != bl && type > SC_NONE && (element = skill->get_ele(skill_id, skill_lv)) > ELE_NEUTRAL && skill->get_inf(skill_id) != INF_SUPPORT_SKILL && battle->attr_fix(NULL, NULL, 100, element, tstatus->def_ele, tstatus->ele_lv) <= 0) return 1; //Skills that cause an status should be blocked if the target element blocks its element. map->freeblock_lock(); switch (skill_id) { case RG_STRIPWEAPON: case RG_STRIPSHIELD: case RG_STRIPARMOR: case RG_STRIPHELM: case ST_FULLSTRIP: case GC_WEAPONCRUSH: case SC_STRIPACCESSARY: { unsigned short location = 0; int d = 0, rate; //Rate in percent if (skill_id == ST_FULLSTRIP) rate = 5 + 2*skill_lv + (sstatus->dex - tstatus->dex)/5; else if (skill_id == SC_STRIPACCESSARY) rate = 12 + 2 * skill_lv + (sstatus->dex - tstatus->dex)/5; else rate = 5 + 5*skill_lv + (sstatus->dex - tstatus->dex)/5; if (rate < 5) rate = 5; //Minimum rate 5% //Duration in ms if (skill_id == GC_WEAPONCRUSH) { d = skill->get_time(skill_id,skill_lv); if (bl->type == BL_PC) d += 1000 * ( skill_lv * 15 + ( sstatus->dex - tstatus->dex ) ); else d += 1000 * ( skill_lv * 30 + ( sstatus->dex - tstatus->dex ) / 2 ); } else d = skill->get_time(skill_id,skill_lv) + (sstatus->dex - tstatus->dex)*500; if (d < 0) d = 0; // Minimum duration 0ms switch (skill_id) { case RG_STRIPWEAPON: case GC_WEAPONCRUSH: location = EQP_WEAPON; break; case RG_STRIPSHIELD: location = EQP_SHIELD; break; case RG_STRIPARMOR: location = EQP_ARMOR; break; case RG_STRIPHELM: location = EQP_HELM; break; case ST_FULLSTRIP: location = EQP_WEAPON|EQP_SHIELD|EQP_ARMOR|EQP_HELM; break; case SC_STRIPACCESSARY: location = EQP_ACC; break; } //Special message when trying to use strip on FCP [Jobbie] if (sd && skill_id == ST_FULLSTRIP && tsc && tsc->data[SC_PROTECTWEAPON] && tsc->data[SC_PROTECTHELM] && tsc->data[SC_PROTECTARMOR] && tsc->data[SC_PROTECTSHIELD]) { clif->gospel_info(sd, 0x28); break; } // FCP // By pass FCP when using single strip skills by 15%(requires Glistening Coat). if (sd && tsc && sd->sc.data[SC_SOULLINK] && sd->sc.data[SC_SOULLINK]->val2 == SL_ROGUE && rand()%100 < 15 && ((skill_id == RG_STRIPWEAPON && tsc->data[SC_PROTECTWEAPON]) || (skill_id == RG_STRIPSHIELD && tsc->data[SC_PROTECTSHIELD]) || (skill_id == RG_STRIPARMOR && tsc->data[SC_PROTECTARMOR]) || (skill_id == RG_STRIPHELM && tsc->data[SC_PROTECTHELM])) ) { int item_id = 7139; // Glistening Coat int ii; ARR_FIND(0, MAX_INVENTORY, ii, sd->status.inventory[ii].nameid == item_id); if (ii < MAX_INVENTORY) { pc->delitem(sd, ii, 1, 0, 0, LOG_TYPE_CONSUME); switch (skill_id) { case RG_STRIPWEAPON: status_change_end(bl, SC_PROTECTWEAPON, INVALID_TIMER); sc_start(NULL, bl, SC_NOEQUIPWEAPON, 100, skill_lv, d); break; case RG_STRIPSHIELD: status_change_end(bl, SC_PROTECTSHIELD, INVALID_TIMER); sc_start(NULL, bl, SC_NOEQUIPSHIELD, 100, skill_lv, d); break; case RG_STRIPARMOR: status_change_end(bl, SC_PROTECTARMOR, INVALID_TIMER ); sc_start(NULL, bl, SC_NOEQUIPARMOR, 100, skill_lv, d); break; case RG_STRIPHELM: status_change_end(bl, SC_PROTECTHELM, INVALID_TIMER ); sc_start(NULL, bl, SC_NOEQUIPHELM, 100, skill_lv, d); break; } clif->skill_nodamage(src,bl,skill_id,skill_lv,1); break; } } // Attempts to strip at rate i and duration d if ((rate = skill->strip_equip(bl, location, rate, skill_lv, d)) || (skill_id != ST_FULLSTRIP && skill_id != GC_WEAPONCRUSH)) clif->skill_nodamage(src,bl,skill_id,skill_lv,rate); // Nothing stripped. if (sd && !rate){ int item_id = 7139; // Glistening Coat int ii; ARR_FIND(0, MAX_INVENTORY, ii, sd->status.inventory[ii].nameid == item_id); if (ii < MAX_INVENTORY) { pc->delitem(sd, ii, 1, 0, 0, LOG_TYPE_CONSUME); } clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); } break; } } if (skill_id != SR_CURSEDCIRCLE) { struct status_change *sc = status->get_sc(src); if( sc && sc->data[SC_CURSEDCIRCLE_ATKER] )//Should only remove after the skill had been casted. status_change_end(src,SC_CURSEDCIRCLE_ATKER,INVALID_TIMER); } if (dstmd) { //Mob skill event for no damage skills (damage ones are handled in battle_calc_damage) [Skotlex] mob->log_damage(dstmd, src, 0); //Log interaction (counts as 'attacker' for the exp bonus) mob->skill_event(dstmd, src, tick, MSC_SKILLUSED|(skill_id<<16)); } if (sd && !(flag&1)) { // ensure that the skill last-cast tick is recorded sd->canskill_tick = timer->gettick(); if (sd->state.arrow_atk) { // consume arrow on last invocation to this skill. battle->consume_ammo(sd, skill_id, skill_lv); } skill->onskillusage(sd, bl, skill_id, tick); // perform skill requirement consumption if (skill_id != NC_SELFDESTRUCTION) skill->consume_requirement(sd,skill_id,skill_lv,2); } map->freeblock_unlock(); if (hookS) hookStop(); return 0; } HPExport void plugin_init(void) { addHookPre(skill, castend_nodamage_id, skill_castend_nodamage_id_pre); } HPExport void server_online(void) { ShowInfo("'%s' Plugin by Dastgir/Hercules. Version '%s'\n", pinfo.name, pinfo.version); } and im getting this error when i run the plugin In function ‘skill_castend_nodamage_id_pre’: fcpbypass.c:234:10: error: too few arguments to function ‘clif->skill_fail’ clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
×
×
  • Create New...

Important Information

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