-
Content Count
556 -
Joined
-
Last visited
Content Type
Profiles
Forums
Downloads
Staff Applications
Calendar
Everything posted by ThyroDree
-
Blast Mine will bypass 1 damage for plant monster
ThyroDree replied to ThyroDree's question in Database Requests
This works, thanks! -
Adding Limit or Cap Resistance, Reflect Chance, and Skill Delay
ThyroDree replied to ThyroDree's question in Source Support
No, didn't saw that min max too -- Well your not, you helped me alot! Will try this~ -
Adding Limit or Cap Resistance, Reflect Chance, and Skill Delay
ThyroDree replied to ThyroDree's question in Source Support
#ifndef RENEWAL sd->subrace[RC_FORMLESS] = max(sd->subrace[RC_FORMLESS], 150); sd->subrace[RC_UNDEAD] = max(sd->subrace[RC_UNDEAD], 150); sd->subrace[RC_BRUTE] = max(sd->subrace[RC_BRUTE], 150); sd->subrace[RC_PLANT] = max(sd->subrace[RC_PLANT], 150); sd->subrace[RC_INSECT] = max(sd->subrace[RC_INSECT], 150); sd->subrace[RC_FISH] = max(sd->subrace[RC_FISH], 150); sd->subrace[RC_DEMON] = max(sd->subrace[RC_DEMON], 150); sd->subrace[RC_DEMIHUMAN] = max(sd->subrace[RC_DEMIHUMAN], 150); sd->subrace[RC_ANGEL] = max(sd->subrace[RC_ANGEL], 150); sd->subrace[RC_DRAGON] = max(sd->subrace[RC_DRAGON], 150); sd->subrace[RC_PLAYER] = max(sd->subrace[RC_PLAYER], 150); sd->subrace[RC_BOSS] = max(sd->subrace[RC_BOSS], 150); sd->subrace[RC_NONBOSS] = max(sd->subrace[RC_NONBOSS], 150); #endif Is this correct sir, tried to apply this lines damage still reduced without any resist equip,buff or stat. The Storm Gust normal damage without this line is almost 15K, then with this line damage is only 7K. yes, like all subrace resist from Skill, Status Changes, and Equipment Resist will be capped 50% -
Modification for bonus bDefRatioAtkRace
ThyroDree replied to ThyroDree's question in Source Requests
By changing that line into this damage = damage * pdef * (vit_def) / 100; because DEF1 is equipment defense (hard defense). Im still confused with mdef1,mdef2, & def1,def2😃 makes it only consider vit base defense? (if player uses ice pick or thanatos that has Def ratio attack will only consider vit base defense) -
Adding Limit or Cap Resistance, Reflect Chance, and Skill Delay
ThyroDree replied to ThyroDree's question in Source Support
Hi sir @Kenpachi, about my previous request and just tested this. I used this line on my status.c #ifndef RENEWAL sd->subrace[RC_FORMLESS] = max(sd->subrace[RC_FORMLESS], 50); sd->subrace[RC_UNDEAD] = max(sd->subrace[RC_UNDEAD], 50); sd->subrace[RC_BRUTE] = max(sd->subrace[RC_BRUTE], 50); sd->subrace[RC_PLANT] = max(sd->subrace[RC_PLANT], 50); sd->subrace[RC_INSECT] = max(sd->subrace[RC_INSECT], 50); sd->subrace[RC_FISH] = max(sd->subrace[RC_FISH], 50); sd->subrace[RC_DEMON] = max(sd->subrace[RC_DEMON], 50); sd->subrace[RC_DEMIHUMAN] = max(sd->subrace[RC_DEMIHUMAN], 50); sd->subrace[RC_ANGEL] = max(sd->subrace[RC_ANGEL], 50); sd->subrace[RC_DRAGON] = max(sd->subrace[RC_DRAGON], 50); sd->subrace[RC_PLAYER] = max(sd->subrace[RC_PLAYER], 50); sd->subrace[RC_BOSS] = max(sd->subrace[RC_BOSS], 50); sd->subrace[RC_NONBOSS] = max(sd->subrace[RC_NONBOSS], 50); #endif This works but it resist all races already without equipping resist items / equipment. (When this is uncommented in my status.c, my damage is someething line 5k~ish below with full equip, then tried disabling, it changed my damage to 10k-15k~) Sorry it look like you misunderstood, sorry again for my bad explanation. To make more simple, this is like one of my previous request. Like Capping or Limiting the healpower (limit to 100%, even equipping too much bacsojin card that may exceed 100%, it will only read up to 100% heal power) or after cast delay(limit to 50%, same even if exceeds the limit, it will only read 50%) . That is also the same with here for Resist Capping or Limiting. -
Hmmm, the Enchant Deadly Poison skill will automatically cancelled when character is on berserk. Example is, when assassin cross will going to break emperium during WoE. and use his skill Enchant Deadly Poison (EDP) to boost his attack, and then if he use Berserk skill from Lord Knight Card. He will lost the boost damage of EDP or EDP skill will be cancelled, gone on right side screen status area. Sorry for my bad explanation 😕 Thank for all your help
-
Just found the problem, its in my status.c. This is Solved. srry 😅
-
Hello, today I test all the job class in server using modded hercules files, As I test the skill damage its very low? for me. My server also have Punching Bag also called damage test dummy with Demihuman setting on it. I attach some screenshot of the damage difference from real character to dummy. Note that the Wizard has full equip, High Wizard Card, Necro Rod and Cards with 3pcs of +20 equipments... If anyone can tell me, if this is normal?
-
Anyone can help me? It is possible to make Blast Mine (Sniper Trap Skill) will bypass the 1 hp damage for plant monsters?
-
How to Make Cart Termination Skill affected by Card?
ThyroDree replied to KTBRDGTT's question in Source Requests
Hi! been looking for this too, thanks -
Modification for bonus bDefRatioAtkRace
ThyroDree replied to ThyroDree's question in Source Requests
anyone? The normal thanatos card ignores both soft and hard defense am I right? On this is like Thanatos Card making it only ignore the (soft) VIT base defense. -
[PVP Announcer] buildin_getcharid: invalid parameter (8)
ThyroDree replied to ThyroDree's question in Script Support
Thanks its fixed now! How can I change the color, i tried changing it to red announce instead of blue set .AnnounceColor$,"0xcc5d85"; but its not changed -
[PVP Announcer] buildin_getcharid: invalid parameter (8)
ThyroDree posted a question in Script Support
I have DotA annoouncer by @AnnieRuru and made it compatible to hercules, before there's alot of error and skips by the server. Now it is working, the announce kill is showing also the audio is working properly. But when i checked the command line, is shows this error everytime I killed a player. Here's the error [Error]: buildin_getcharid: invalid parameter (8). [Error]: script_rid2sd: fatal error ! player not attached! [Debug]: Function: getcharid (1 parameter): [Debug]: Data: number value=8 [Debug]: Source (NPC): DOTAPVP (invisible/not on a map) [Error]: buildin_getcharid: invalid parameter (8). [Error]: script_rid2sd: fatal error ! player not attached! [Debug]: Function: getcharid (1 parameter): [Debug]: Data: number value=8 [Debug]: Source (NPC): DOTAPVP (invisible/not on a map) [Error]: buildin_getcharid: invalid parameter (8). [Error]: buildin_getcharid: invalid parameter (8). [Error]: buildin_getcharid: invalid parameter (8). Here's the script, hope someone can test this out and help fix the problem. //===== eAthena Script ======================================================= //= PVP ladder script with dota announcement ( SQL only ) //===== By: ================================================================== //= ~AnnieRuru~ //===== Current Version: ===================================================== //= 2.9 //= 3.0 modified by Gerome //===== Compatible With: ===================================================== //= eAthena SQL 14279, with MySQL 5.1 //= rAthena //===== Description: ========================================================= //= PVP ladder store in SQL table //= plus anti-sit-killer feature //===== Topic ================================================================ //= http://www.eathena.ws/board/index.php?showtopic=177918 //===== Additional Comments: ================================================= //= still don't have modify value option, will be done ... in next year ... //============================================================================ //ISA ISA LANG YUNG PVPLADDER AT OWNLADDER /* create table pvpladder ( char_id int(11) not null default '0' primary key, name varchar(30) not null default '', streaks smallint(6) unsigned not null default '0', kills smallint(6) unsigned not null default '0', deaths smallint(6) unsigned not null default '0', streaktime datetime ) engine = myisam; create table ownladder ( guild_id int(11) not null default '0' primary key, name varchar(24) not null default '', currentown smallint(6) unsigned not null default '0', highestown smallint(6) unsigned not null default '0', owntime datetime ) engine = myisam; */ // add all the maps that you want this script to trigger ... all pvp and event maps perhaps ? // but if you already enable "all" maps, then can comment all these guild_vs1 mapflag loadevent guild_vs2 mapflag loadevent guild_vs3 mapflag loadevent guild_vs4 mapflag loadevent guild_vs5 mapflag loadevent pvp_y_8-2 mapflag loadevent pvp_y_8-4 mapflag loadevent pvp_y_8-5 mapflag loadevent force_2-2 mapflag loadevent - script DOTAPVP FAKE_NPC,{ OnInit: /* ***************************************************************************************** ** CONFIGURATION ** ****************************************************************************************/ /* ================== Sound Effects ===================================================/ *- soundeffect : 0 - disable, 1 - play soundeffect to all players on map, *- 2 - play soundeffect to an area around the killer, 3 - play soundeffect to killer only *- ======================================================================================*/ set .sound, 1; /* ================== Announce Target flags ===========================================/ *- bc_all: Broadcast message is sent server-wide (default). *- bc_map: Message is sent to everyone in the same map as the source of the broadcast. *- bc_area: Message is sent to players in the vicinity of the source. *- bc_self: Message is sent only to current player. *- You cannot use more than one target flag. *- =======================================================================================*/ set .AnnounceFlag$, "bc_all"; /* ================== Announce Color ====================================================/ *- The color parameter is a single number which can be in hexadecimal notation. *- The color format is in RGB (0xRRGGBB). *- default "0xFFFF00" = Yellow *- =======================================================================================*/ set .AnnounceColor$,"0x497692"; set .announcemap, 1; // announce the map name in the announcement ? : 0 - off, 1 - on set .announcekill, 1; // announce who pawn who's head : 0 - off, 1 - on set .msg_die, 1; // show message who kill you when die : 0 - off, 1 - on set .msg_kill, 1; // show message you kill who when killed someone : 0 - off, 1 - on /* GMs are not suppose to kill players. A GM with <this number> level or higher will do nothing. ** IF set to 60, GM60 and above kill any player will not get anything : 0 - off */ set .gmnokill, 0; set .killingspree, 3; set .dominating, 4; set .megakill, 5; set .unstoppable, 6; set .wickedsick, 7; set .monsterkill, 8; set .godlike, 9; set .holyshit, 10; set .continue, 1; // after beyond-godlike, every <this number> kills will make announcement again set .owned, 5; // how many times the party/guild has to kill to announce ownage set .owncontinue, 1; // after ownage, every <this number> party/guild cumulative kills will make ownage announce again set .min_gm_menu, 90; // minimum level of GM can use the GM menu on ladder npc set .showtotal, 20; // show the length of ladder. Note : Maximum value = 128 set .showpage, 10; // set the views per page. Note : Maximum value = 128 set .loweststreak, 3; // mininum streak count allow to show in highest streak ladder. Default 3 means must at least have killing spree streak to display in ladder set .lowestownage, 5; // mininum ownage count allow to show in longest ownage ladder. Default 5 means must at least have 5 ownage counts to display in ladder setarray .maptrigger$, // only these maps will trigger this script "all"; // uncomment this to allow load all maps // "guild_vs1", // "guild_vs2", // "guild_vs3", // "guild_vs4", // "guild_vs5", // "force_2-2"; /* ================== Anti-sit-killer System ======================================================/ * A player must kill another player with this minimum <this number> base level to get the announcement and in the ladder. * Otherwise only have streak ended announcement and killed player's streak reset. * Its possible for a level 1 novice to kill a level 99 player and he/she will still get in the ladder * but a level 99 kill a level 1 player will get nothing * 0 - off this system ( default is 55, pk setting ) * =================================================================================================*/ set .lvltokill, 250; // when a player kill another same player <this number> times in a row, the player is warp back to save point. // and the player's streak, kills, and ownage count will deduct accordingly // 0 - off this system set .counttopunish, 6; // minimum level range to kill another player // eg. when set to 20, player level 99 needs to kill another player with minimum level of 79 to get announcement and increase the kill rank. // but a player with base level 50 kills a level 99 will also get the announcement // higher base level cannot kill lower level, but lower level can kill higher level // 0 - off this system set .minlvlrange, 0; // Config ends ------------------------------------------------------------------------------------------ // to prevent bug happen if ( .announce < 0 || .announce > 1 ) set .announce, 0; if ( .continue < 1 ) set .continue, 1; if ( .owncontinue < 1 ) set .owncontinue, 1; if ( .gmnokill <= 0 ) set .gmnokill, 100; if ( .lvltokill <= 1 ) set .lvltokill, 0; if ( .counttopunish <= 1 ) set .counttopunish, 0; set .maptriggersize, getarraysize(.maptrigger$); end; // script start. OnPCKillEvent: if ( getgmlevel() >= .gmnokill ) end; getmapxy .@map$, .@x, .@y, 0; if ( .maptrigger$ != "all" ) { for ( set .@i, 0; .@i < .maptriggersize; set .@i, .@i +1 ) { if ( .@map$ == .maptrigger$[.@i] ) break; } if ( .@i == .maptriggersize ) end; } attachrid killedrid; if ( killerrid != getcharid(3) && ( .msg_die || .msg_kill ) ) { if ( .msg_die ) message strcharinfo(0),"You have been killed by "+ rid2name(killerrid); if ( .msg_kill ) message rid2name(killerrid),"You just killed "+ strcharinfo(0); } if ( @PlayersKilledStreak >= .holyshit ) set .@streakname$,"Beyond Godlike"; else if ( @PlayersKilledStreak >= .godlike ) set .@streakname$,"Godlike"; else if ( @PlayersKilledStreak >= .monsterkill ) set .@streakname$,"Monster Kill"; else if ( @PlayersKilledStreak >= .wickedsick ) set .@streakname$,"Wicked Sick"; else if ( @PlayersKilledStreak >= .unstoppable ) set .@streakname$,"Unstoppable"; else if ( @PlayersKilledStreak >= .megakill ) set .@streakname$,"Mega-kill"; else if ( @PlayersKilledStreak >= .dominating ) set .@streakname$,"Dominating"; else if ( @PlayersKilledStreak >= .killingspree ) set .@streakname$,"Killing Spree"; if ( @PlayersKilledStreak >= .killingspree && killerrid == getcharid(3) ) announce strcharinfo(0) +" has ended "+( (Sex)?"him":"her" )+" own "+ .@streakname$ +"["+ @PlayersKilledStreak +"] streak "+( (.announcemap)?("at "+ .@map$):""),16|.announce; else if ( @PlayersKilledStreak >= .killingspree ) announce rid2name(killerrid) +" has ended "+ strcharinfo(0) +"'s "+ .@streakname$ +"["+ @PlayersKilledStreak +"] streak "+( (.announcemap)?("at "+ .@map$):""),16|.announce; else if ( .announcekill && killerrid != getcharid(3) ) announce rid2name(killerrid) +" has pawned "+ strcharinfo(0) +"'s head "+( (.announcemap)?("at "+ .@map$):""),16|.announce; set @PlayersKilledStreak,0; set @dota_sql_deaths, @dota_sql_deaths +1; set @dota_multikills,0; query_sql "replace into pvpladder values ( "+ getcharid(0) +", '"+ escape_sql(strcharinfo(0)) +"', "+ @dota_sql_streaks +", "+ @dota_sql_kills +", "+ @dota_sql_deaths +", from_unixtime("+ @dota_sql_streaktime +") )"; set .@killed_gid, getcharid(2); if ( .@killed_gid ) { setd ".dota_sql_"+ .@killed_gid +"_c", 0; if ( getd(".dota_sql_"+ .@killed_gid +"_h") ) query_sql "replace into ownladder values ( "+ .@killed_gid +", '"+ escape_sql(getguildinfo(GUILDINFO_NAME, (.@killer_gid))) +"', "+ getd(".dota_sql_"+ .@killed_gid +"_c") +", "+ getd(".dota_sql_"+ .@killed_gid +"_h") +", from_unixtime("+ getd(".dota_sql_"+ .@killed_gid +"_t") +") )"; } if ( killerrid == getcharid(3) || BaseLevel < .lvltokill ) end; if ( .minlvlrange ) set .@killedlvl, BaseLevel; attachrid killerrid; if ( .minlvlrange && .@killedlvl + .minlvlrange < BaseLevel ) end; if ( .counttopunish ) { if ( @sitkillminute != gettime(2) ) { deletearray @sitkillid, 128; deletearray @sitkilltimes, 128; set @sitkillminute, gettime(2); } set .@sitkillsize, getarraysize(@sitkillid); for ( set .@i,0; .@i < .@sitkillsize; set .@i, .@i +1 ) { if ( @sitkillid[.@i] != killedrid ) continue; else { set @sitkilltimes[.@i], @sitkilltimes[.@i] +1 ; if ( @sitkilltimes[.@i] >= .counttopunish ) { warp "SavePoint",0,0; announce strcharinfo(0) +" , Stop killing "+ rid2name(killedrid) + " !!!",0; logmes "is sit-killing "+ rid2name(killedrid) +" for "+ @sitkilltimes[.@i] +" times"; if ( @PlayersKilledStreak == @dota_sql_streaks ) { set @dota_sql_streaks, @dota_sql_streaks +1 - .counttopunish; set @dota_sql_streaktime, gettimetick(2); } set @PlayersKilledStreak, @PlayersKilledStreak +1 - .counttopunish; set @dota_sql_kills, @dota_sql_kills +1 - .counttopunish; query_sql "replace into pvpladder values ( "+ getcharid(0) +", '"+ escape_sql(strcharinfo(0)) +"', "+ @dota_sql_streaks +", "+ @dota_sql_kills +", "+ @dota_sql_deaths +", from_unixtime("+ @dota_sql_streaktime +") )"; set .@killer_gid, getcharid(2); if ( .@killer_gid ) { if ( getd(".dota_sql_"+ .@killer_gid +"_c") == getd(".dota_sql_"+ .@killer_gid +"_h") ) { setd ".dota_sql_"+ .@killer_gid +"_h", getd(".dota_sql_"+ .@killer_gid +"_h") +1 - .counttopunish; setd ".dota_sql_"+ .@killer_gid +"_t", gettimetick(2); } setd (".dota_sql_"+ .@killer_gid +"_c"), getd(".dota_sql_"+ .@killer_gid +"_c") +1 - .counttopunish; query_sql "replace into ownladder values ( "+ .@killer_gid +", '"+ escape_sql(getguildinfo(GUILDINFO_NAME, (.@killer_gid))) +"', "+ getd(".dota_sql_"+ .@killer_gid +"_c") +", "+ getd(".dota_sql_"+ .@killer_gid +"_h") +", from_unixtime("+ getd(".dota_sql_"+ .@killer_gid +"_t") +") )"; } end; } break; } } if ( .@i == .@sitkillsize ) { set @sitkillid[.@i], killedrid; set @sitkilltimes[.@i], 1; } } set @PlayersKilledStreak, @PlayersKilledStreak +1 ; set @dota_sql_kills, @dota_sql_kills +1 ; if ( @PlayersKilledStreak > @dota_sql_streaks ) { set @dota_sql_streaks, @PlayersKilledStreak; set @dota_sql_streaktime, gettimetick(2); } query_sql "replace into pvpladder values ( "+ getcharid(0) +", '"+ escape_sql(strcharinfo(0)) +"', "+ @dota_sql_streaks +", "+ @dota_sql_kills +", "+ @dota_sql_deaths +", from_unixtime("+ @dota_sql_streaktime +") )"; if ( @PlayersKilledStreak == .killingspree ) setarray .@streakname$,"killingspree.wav","is on a KILLING SPREE","!"; else if ( @PlayersKilledStreak == .dominating ) setarray .@streakname$,"dominating.wav","is DOMINATING","!"; else if ( @PlayersKilledStreak == .megakill ) setarray .@streakname$,"megakill.wav","has a MEGA KILL","!"; else if ( @PlayersKilledStreak == .unstoppable ) setarray .@streakname$,"unstoppable.wav","is UNSTOPPABLE","!!"; else if ( @PlayersKilledStreak == .wickedsick ) setarray .@streakname$,"wickedsick.wav","is WICKED SICK","!!"; else if ( @PlayersKilledStreak == .monsterkill ) setarray .@streakname$,"monsterkill.wav","has a MONSTER KILL","!!"; else if ( @PlayersKilledStreak == .godlike ) setarray .@streakname$,"godlike.wav","is GODLIKE","!!!"; else if ( @PlayersKilledStreak >= .holyshit && ( (@PlayersKilledStreak - .holyshit) % .continue == 0 ) ) setarray .@streakname$,"holyshit.wav","is BEYOND GODLIKE",". Someone KILL "+( (Sex)?"HIM":"HER" ) +"!!!!!!"; if ( .@streakname$[1] != "" ) { announce strcharinfo(0) +" "+ .@streakname$[1] +"["+ @PlayersKilledStreak +"] "+( (.announcemap)?("at "+ .@map$):"") + .@streakname$[2],16|.announce; if ( .sound == 1 ) soundeffectall .@streakname$[0],0,.@map$; else if ( .sound == 2 ) soundeffectall .@streakname$[0],0; else if ( .sound == 3 ) soundeffect .@streakname$[0],0; } set @dota_multikills, @dota_multikills + 1; deltimer "DOTAPVP::OnStreakReset"; addtimer 18000,"DOTAPVP::OnStreakReset"; set .@killer_gid, getcharid(2); if ( .@killer_gid && .@killer_gid != .@killed_gid ) { setd ".dota_sql_"+ .@killer_gid +"_c", getd(".dota_sql_"+ .@killer_gid +"_c") +1 ; if ( getd(".dota_sql_"+ .@killer_gid +"_c") > getd(".dota_sql_"+ .@killer_gid +"_h") ) { setd ".dota_sql_"+ .@killer_gid +"_h", getd(".dota_sql_"+ .@killer_gid +"_c"); setd ".dota_sql_"+ .@killer_gid +"_t", gettimetick(2); } query_sql "replace into ownladder values ( "+ .@killer_gid +", '"+ escape_sql(getguildinfo(GUILDINFO_NAME, getcharid(.@killer_gid))) +"', "+ getd(".dota_sql_"+ .@killer_gid +"_c") +", "+ getd(".dota_sql_"+ .@killer_gid +"_h") +", from_unixtime("+ getd(".dota_sql_"+ .@killer_gid +"_t") +") )"; } set .@dota_multikills, @dota_multikills; set .@origin, getcharid(3); sleep 1500; if ( .@killer_gid && .@killer_gid != .@killed_gid && getd(".dota_sql_"+ .@killer_gid +"_c") >= .owned && ( ( getd(".dota_sql_"+ .@killer_gid +"_c") - .owned ) % .owncontinue == 0 ) ) { if ( .announce ) mapannounce .@map$, "The guild ["+ getguildinfo(GUILDINFO_NAME, (.@killer_gid)) +"] is OWNING["+ getd(".dota_sql_"+ .@killer_gid +"_c") +"] !!!",16; else announce "The guild ["+ getguildinfo(GUILDINFO_NAME, getcharid(.@killer_gid)) +"] is OWNING["+ getd(".dota_sql_"+ .@killer_gid +"_c") +"] !!!",16; if ( .sound == 1 ) soundeffectall "ownage.wav",0,.@map$; else if ( .sound == 2 ) soundeffectall "ownage.wav",0; else if ( .sound == 3 && attachrid(.@origin) ) soundeffect "ownage.wav",0; } sleep 1250; if ( !attachrid(.@origin) ) end; if ( .@dota_multikills == 2 ) { if ( .announce ) mapannounce .@map$, strcharinfo(0) +" just got a Double Kill !",16; else announce strcharinfo(0) +" just got a Double Kill !",16; if ( .sound == 1 ) soundeffectall "doublekill.wav",0,.@map$; else if ( .sound == 2 ) soundeffectall "doublekill.wav",0; else if ( .sound == 3 ) soundeffect "doublekill.wav",0; } else if ( .@dota_multikills == 3 ) { if ( .announce ) mapannounce .@map$, strcharinfo(0) +" just got a Triple Kill !!!",16; else announce strcharinfo(0) +" just got a Triple Kill !!!",16; if ( .sound == 1 ) soundeffectall "triplekill.wav",0,.@map$; else if ( .sound == 2 ) soundeffectall "triplekill.wav",0; else if ( .sound == 3 ) soundeffect "triplekill.wav",0; } else if ( .@dota_multikills == 4 ) { if ( .announce ) mapannounce .@map$, strcharinfo(0) +" just got a Ultra Kill !!!",16; else announce strcharinfo(0) +" just got a Ultra Kill !!!",16; if ( .sound == 1 ) soundeffectall "ultrakill.wav",0,.@map$; else if ( .sound == 2 ) soundeffectall "ultrakill.wav",0; else if ( .sound == 3 ) soundeffect "ultrakill.wav",0; } else if ( .@dota_multikills >= 5 ) { if ( .announce ) mapannounce .@map$, strcharinfo(0) +" is on a Rampage !!!",16; else announce strcharinfo(0) +" is on a Rampage !!!",16; if ( .sound == 1 ) soundeffectall "rampage.wav",0,.@map$; else if ( .sound == 2 ) soundeffectall "rampage.wav",0; else if ( .sound == 3 ) soundeffect "rampage.wav",0; } end; OnStreakReset: set @dota_multikills, 0; end; OnWhisperGlobal: if ( @spam_dotapvp + 3 >= gettimetick(2) ) // 3 seconds interval so player don spam this command end; set @spam_dotapvp, gettimetick(2); if ( @dota_sql_kills == 0 && @dota_sql_deaths == 0 ) query_sql "select kills, deaths, streaks, unix_timestamp(streaktime) from pvpladder where char_id = "+ getcharid(0), @dota_sql_kills, @dota_sql_deaths, @dota_sql_streaks, @dota_sql_streaktime; if ( @dota_sql_kills || @dota_sql_deaths ) { dispbottom "Your current Streak : "+ @PlayersKilledStreak; dispbottom "Your total Kills : "+ @dota_sql_kills; dispbottom "Your total Deaths : "+ @dota_sql_deaths; dispbottom "Your highest Streak : "+ @dota_sql_streaks; query_sql "select date_format( from_unixtime("+ @dota_sql_streaktime +"),'%a %e/%c/%y %r')", .@time1$; dispbottom "Your highest Streak on : "+ .@time1$; } else dispbottom "You are not in the pvp ladder yet."; if ( getcharid(2) ) { if ( getd(".dota_sql_"+ getcharid(2) +"_h") == 0 ) { query_sql "select currentown, highestown, unix_timestamp(owntime) from ownladder where guild_id = "+ getcharid(2), .@c, .@h, .@t; setd ".dota_sql_"+ getcharid(2) +"_c", .@c; setd ".dota_sql_"+ getcharid(2) +"_h", .@h; setd ".dota_sql_"+ getcharid(2) +"_t", .@t; } if ( getd(".dota_sql_"+ getcharid(2) +"_h") ) { dispbottom "Your guild current Own : "+ getd(".dota_sql_"+ getcharid(2) +"_c"); dispbottom "Your guild highest Own : "+ getd(".dota_sql_"+ getcharid(2) +"_h"); query_sql "select date_format( from_unixtime("+ getvariableofnpc( getd(".dota_sql_"+ getcharid(2) +"_t"), "DOTAPVP" ) +"),'%a %e/%c/%y %r')", .@time2$; dispbottom "Your guild highest Own on : "+ .@time2$; } else dispbottom "Your guild is not in the ladder yet."; } end; OnPCLoginEvent: if ( .maptrigger$ != "all" ) end; OnPCLoadMapEvent: if ( @dota_sql_kills == 0 && @dota_sql_deaths == 0 ) { if ( .maptrigger$ != "all" ) { getmapxy .@map$, .@x, .@y, 0; for ( set .@i, 0; .@i < .maptriggersize; set .@i, .@i +1 ) { if ( .@map$ == .maptrigger$[.@i] ) break; } if ( .@i == .maptriggersize ) end; } query_sql "select kills, deaths, streaks, unix_timestamp(streaktime) from pvpladder where char_id = "+ getcharid(0), @dota_sql_kills, @dota_sql_deaths, @dota_sql_streaks, @dota_sql_streaktime; } if ( getcharid(2) && getd(".dota_sql_"+ getcharid(2) +"_h") == 0 ) { query_sql "select currentown, highestown, unix_timestamp(owntime) from ownladder where guild_id = "+ getcharid(2), .@c, .@h, .@t; setd ".dota_sql_"+ getcharid(2) +"_c", .@c; setd ".dota_sql_"+ getcharid(2) +"_h", .@h; setd ".dota_sql_"+ getcharid(2) +"_t", .@t; } end; } prontera,165,172,3 script PVP Ladder 4_F_NFDEADKAFRA,{ set .@npcname$, strnpcinfo(0); while (1) { mes "["+ .@npcname$ +"]"; mes "Hello "+ strcharinfo(0) +"..."; mes "If you want to I can show you your PVP stats."; next; switch ( select ( "Most Kills","Highest Streak","Own Information","Explanation" ) ) { case 1: set .@nb, query_sql("select name, kills, deaths from pvpladder order by kills desc limit "+ getvariableofnpc(.showtotal,"DOTAPVP"), .@name$, .@kills, .@deaths); if ( .@nb == 0 ) { mes "["+ .@npcname$ +"]"; mes "The ladder currently is empty."; next; } for ( set .@j,0; .@j < .@nb; set .@j, .@j + getvariableofnpc(.showpage,"DOTAPVP") ) { mes "["+ .@npcname$ +"]"; for ( set .@i, .@j; .@i < (getvariableofnpc(.showpage,"DOTAPVP") + .@j) && .@i < .@nb; set .@i, .@i + 1 ) { mes "^996600"+ (.@i+1) +": ^006699"+ .@name$[.@i] +" ^00AA00["+ .@kills[.@i] +"] ^FF0000<"+ .@deaths[.@i] +">^000000"; } next; } break; case 2: set .@nb, query_sql("select name, streaks, date_format(streaktime,'%a %e/%c/%y %r') from pvpladder where streaks >= "+ getvariableofnpc(.loweststreak,"DOTAPVP") +" order by streaks desc limit "+ getvariableofnpc(.showtotal,"DOTAPVP"), .@name$, .@streak, .@time$); if ( .@nb == 0 ) { mes "["+ .@npcname$ +"]"; mes "The ladder currently is empty."; next; } for ( set .@j,0; .@j < .@nb; set .@j, .@j + getvariableofnpc(.showpage,"DOTAPVP") ) { mes "["+ .@npcname$ +"]"; for ( set .@i, .@j; .@i < (getvariableofnpc(.showpage,"DOTAPVP") + .@j) && .@i < .@nb; set .@i, .@i + 1 ) { mes "^996600"+ (.@i+1) +": ^006699"+ .@name$[.@i] +" ^70AC11{"+ .@streak[.@i] +"} ^000000on :"; mes " ^EE8800"+ .@time$[.@i] +"^000000"; } next; } break; case 3: if ( @dota_sql_kills == 0 && @dota_sql_deaths == 0 ) query_sql "select kills, deaths, streaks, unix_timestamp(streaktime), date_format(streaktime,'%a %e/%c/%y %r') from pvpladder where char_id = "+ getcharid(0), @dota_sql_kills, @dota_sql_deaths, @dota_sql_streaks, @dota_sql_streaktime, .@time1$; mes "["+ .@npcname$ +"]"; if ( @dota_sql_kills == 0 && @dota_sql_deaths == 0 ) mes "You not yet kill any player."; else { mes "Your Current Streak : ^70AC11{"+ @PlayersKilledStreak +"}^000000"; mes "Your Total Kills : ^00AA00["+ @dota_sql_kills +"]^000000"; mes "Your Death Counts : ^FF0000<"+ @dota_sql_deaths +">^000000"; if ( @dota_sql_kills || @dota_sql_streaks ) { mes "Highest Streak was ^70AC11{"+ @dota_sql_streaks +"}^000000 on :"; query_sql "select date_format( from_unixtime("+ @dota_sql_streaktime +"),'%a %e/%c/%y %r')", .@time1$; mes " ^EE8800"+ .@time1$ +"^000000"; } } next; if ( getcharid(2) ) { if ( getvariableofnpc( getd(".dota_sql_"+ getcharid(2) +"_h"), "DOTAPVP" ) == 0 ) { query_sql "select currentown, highestown, unix_timestamp(owntime) from ownladder where guild_id = "+ getcharid(2), .@c, .@h, .@t; set getvariableofnpc( getd(".dota_sql_"+ getcharid(2) +"_c"), "DOTAPVP" ), .@c; set getvariableofnpc( getd(".dota_sql_"+ getcharid(2) +"_h"), "DOTAPVP" ), .@h; set getvariableofnpc( getd(".dota_sql_"+ getcharid(2) +"_t"), "DOTAPVP" ), .@t; } mes "["+ .@npcname$ +"]"; if ( getvariableofnpc( getd(".dota_sql_"+ getcharid(2) +"_h"), "DOTAPVP" ) == 0 ) { mes "Your guild not yet kill any player."; } else { mes "Your guild name : ^006699"+ strcharinfo(2) +"^000000"; mes "Current Owning : ^00AAAA("+ getvariableofnpc( getd(".dota_sql_"+ getcharid(2) +"_c"), "DOTAPVP" ) +")^000000"; mes "Longest Ownage was ^00AAAA("+ getvariableofnpc( getd(".dota_sql_"+ getcharid(2) +"_h"), "DOTAPVP" ) + ")^000000 on :"; query_sql "select date_format( from_unixtime("+ getvariableofnpc( getd(".dota_sql_"+ getcharid(2) +"_t"), "DOTAPVP" ) +"),'%a %e/%c/%y %r')", .@time2$; mes " ^EE8800"+ .@time2$ +"^000000"; } next; } break; case 4: mes "["+ .@npcname$ +"]"; mes "Explanation for Most Kills:"; mes " "; mes "^996600Rank. ^006699NAME ^00AA00[Total Kills] ^FF0000<Deaths>^000000"; mes " "; mes "--------------------------------"; mes " "; mes "The ^00AA00Kills^000000 added when a player kills another player."; mes " "; mes "^FF0000Deaths^000000 count increase when a player killed by another player, or suicide (eg: Grand Cross)."; mes " "; mes "A player killed by monsters, homunculus or pets will not add the kills or deaths count."; next; mes "["+ .@npcname$ +"]"; mes "Explanation for Highest Streak:"; mes " "; mes "^996600Rank. ^006699NAME ^70AC11{Highest Streak} ^000000on :"; mes " ^EE8800TIME^000000"; mes " "; mes "--------------------------------"; mes " "; mes "The ^70AC11Streak^000000 are added every time a player kills another player. It will reset upon log out, killed by another player, or suicide (eg: Sacrifice)."; mes " "; mes "Then it record in the server the ^EE8800TIME^000000 when that player got that highest streak."; mes " "; mes "A player killed by monsters, homunculus or pets will not reset the streak."; mes " "; mes "--------------------------------"; mes " "; mes "The numbers of straight kills to get these announcements are :"; mes "^70AC11"+ getvariableofnpc(.killingspree,"DOTAPVP") +"^000000 : Killing Spree"; mes "^70AC11"+ getvariableofnpc(.dominating,"DOTAPVP") +"^000000 : Dominating"; mes "^70AC11"+ getvariableofnpc(.megakill,"DOTAPVP") +"^000000 : Mega Kill"; mes "^70AC11"+ getvariableofnpc(.unstoppable,"DOTAPVP") +"^000000 : Unstoppable"; mes "^70AC11"+ getvariableofnpc(.wickedsick,"DOTAPVP") +"^000000 : Wicked Sick"; mes "^70AC11"+ getvariableofnpc(.monsterkill,"DOTAPVP") +"^000000 : Monster Kill"; mes "^70AC11"+ getvariableofnpc(.godlike,"DOTAPVP") +"^000000 : Godlike"; mes "^70AC11"+ getvariableofnpc(.holyshit,"DOTAPVP") +"^000000 : Beyond Godlike"; next; mes "["+ .@npcname$ +"]"; mes "Explanation for Longest Ownage:"; mes " "; mes "^996600Rank. ^006699NAME ^00AAAA(Longest Ownage) ^000000on :"; mes " ^EE8800TIME^000000"; mes " "; mes "--------------------------------"; mes " "; mes "The ^00AAAAOwnage^000000 added every time any guild members killed another player that doesn't belong to his/her guild. It will reset when any of the guild member was killed by ANY player, including his/her guild member."; mes " "; mes "Then it record in the server the ^EE8800TIME^000000 when the guild got that longest ownage."; mes " "; mes "If the server went under maintainance, the current ownage will survive after the server restart."; mes " "; mes "Any guild member killed by monster, homunculus or pets will not reset the ownage count."; next; if ( getvariableofnpc(.lvltokill,"DOTAPVP") ) { mes "["+ .@npcname$ +"]"; mes "You must kill another player with minimum base level of "+ getvariableofnpc(.lvltokill,"DOTAPVP") +", in order to get an announcement or get in the ladder."; mes " "; mes "It's possible for a base level 1 novice kills a base level 99 player and still can get in the ladder."; mes "However when a player level 99 kills a level 1 novice will get nothing."; next; } if ( getvariableofnpc(.counttopunish,"DOTAPVP") ) { mes "["+ .@npcname$ +"]"; mes "Some noob players try to kill the same person over and over again in hope of getting his/her name appear in the ladder."; mes "However if you trying to do the same thing on this ladder, your name will announce to the public, and your action will be recorded into the server to notify the GMs."; next; } if ( getvariableofnpc(.minlvlrange,"DOTAPVP") ) { mes "["+ .@npcname$ +"]"; mes "When you kill another player thats lower base level than you, the base level gap between you and that player must not more than "+ getvariableofnpc(.minlvlrange,"DOTAPVP") +"."; mes " "; if ( getvariableofnpc(.minlvlrange,"DOTAPVP") >= 200) mes "In other words, if your base level is 500, the player you killed must be at least level "+( 500 - getvariableofnpc(.minlvlrange,"DOTAPVP") )+" then only you will get the announcement and in the ladder."; else if ( getvariableofnpc(.minlvlrange,"DOTAPVP") >= 70) mes "In other words, if your base level is 255, the player you killed must be at least level "+( 255 - getvariableofnpc(.minlvlrange,"DOTAPVP") )+" then only you will get the announcement and in the ladder."; else mes "In other words, if your base level is 99, the player you killed must be at least level "+( 99 - getvariableofnpc(.minlvlrange,"DOTAPVP") )+" then only you will get the announcement and in the ladder."; mes "Higher base level kills lower level gets nothing, however lower level player kills higher level will get the announcement."; next; } break; } } } -
How can I make the button unclickable and will show the time left to vote again. After i got the points, i can still click the buttons and time left are still Ready to Vote. Anyone can help me? Here some attachment for more understanding 😁 Here's the VoteAddon, I used NOTE: I'm already done voting thats why i have 40 points.
-
Thank you @Kenpachi , do you mind checking on this too LINK It seems to be part or similar with commit fix about aggressive mob 6 days ago.
-
Hi again sir @Kenpachi, I looked for getiteminfo(.@var1$,11) to change it to getiteminfo(.@var1$, ITEMINFO_VIEWSPRITE) - after making this changes, and did some test. when i run command upper#5232 or 5138 or any upper headgears, the script will dispbottom Selected headgear ID: -1, the sprite of 5232 or 5138 didn't show up. I tried to making changes to make sprite show. I remove the $ from getiteminfo(.@var1$, ITEMINFO_VIEWSPRITE), so it will look like getiteminfo(.@var1, ITEMINFO_VIEWSPRITE) which works. trying upper#5232 or 5138 and the sprite shows but It seems the sprite doesn't save to specific headgear. when I unequip and equip the headgear again. I also found 1 more problem, when i equipped the 3 headgears (Upper,Middle, and Lower) and changed their sprites. when I unequip one of the headgears the sprite stays on. Check out the problems here too. SCREENSHOTS
-
I hope it will be fixed soon, its funny how looter mobs look shocked once saw an item on the floor. 🤣
-
Hello, Anyone would like to share functional FluxCP Add on? I use this V4P Add on by https://github.com/darrensapalo/FluxCP_Addons-VoteForPoints The problem is when I tried to vote, it doesn't give Points, and give me errors like. ---------------------------------------------- Unable to vote for the server. Err no. 3 Unable to vote for the server. Err no. 4 ---------------------------------------------- Any fix? Thank you.
-
I still have this problem, did you fix yours?
-
Hello, tried this and still same. Did I do right? //Morphogenic Hat Script //Allows a player to change their look to absolutely any hat available or to a defined upper limit. Check the "OnInit" label for information on this. // //By Slam - script Morpho FAKE_NPC,{ OnWhisperGlobal: goto Validation_whisp; end; Validation_whisp: set .@var0$, atoi(@whispervar0$); set .@var1, atoi(@whispervar1$); set .@i,0; while(.@i < getarraysize(.morpho_disallowed)){ if(.@var1 == .morphodisallowed$[.@i]){ goto denied_unauthorized; } else { set .@i,.@i+1; } } set .@ii,0; while(.@ii < 9){ if(@whispervar0$ == .keywords$[.@ii]){ goto keyword; } set .@ii,.@ii+1; } dispbottom "---------------[Morpho Helper]---------------"; dispbottom " "; dispbottom "Sorry, I didn't understand the option you have"; dispbottom "have given me. Please type 'help' for more info"; dispbottom " "; end; keyword: switch(.@ii){ case 0: goto help; case 1: goto tophead; case 2: goto midhead; case 3: goto lowhead; case 4: goto clear; case 5: goto info; case 6: goto topheadlow; case 7: goto midheadlow; case 8: goto lowheadlow; } help: dispbottom "---------------[Morpho Helper]---------------"; dispbottom "Welcome to the Morpho Settings NPC!"; dispbottom "I can help you set what your Morphohat looks like"; dispbottom " "; dispbottom "To use this NPC, whisper NPC:Morpho (you should"; dispbottom "know this already) with upper/middle/lower or "; dispbottom "wing. The wing section is not yet implemented"; dispbottom "however. Now, to set your Morphohat use the "; dispbottom "following layout:"; dispbottom " "; dispbottom "upper#5232 - This will make it a Pink Kitty"; dispbottom " "; dispbottom "Protip: Use RateMyServer.net for item IDs."; end; tophead: if(!isequipped(.top_morpho)){ goto wrong_headgear; } if((.@var1 >= 5001 && .@var1 <= 5859) || (.@var1 >= 60000 && .@var1 <= 61196)){ set .@viewid,getiteminfo(.@var1, ITEMINFO_VIEWID); set .@equipslot,getiteminfo(.@var1,5); if(.@equipslot != 256 && .@equipslot != 768){ //Upper and Upper+Mid Only. Comment out this line and the two below it to remove this functionality. goto denied_wrongslot; } set #viewid_top,.@viewid; dispbottom "Selected headgear ID: "+.@viewid; setlook 4,.@viewid; end; } dispbottom "Unavailable ID"; end; midhead: if(!isequipped(.mid_morpho)){ goto wrong_headgear; } if((.@var1 >= 5001 && .@var1 <= 5859) || (.@var1 >= 60000 && .@var1 <= 61196)){ set .@viewid,getiteminfo(.@var1, ITEMINFO_VIEWID); set .@equipslot,getiteminfo(.@var1,5); if(.@equipslot != 512 && .@equipslot != 513){ //Mid and Mid+Lower only. Comment out this line and the two below it to remove this functionality. goto denied_wrongslot; } set #viewid_mid,.@viewid; dispbottom "Selected headgear ID: "+.@viewid; setlook 5,.@viewid; end; } dispbottom "Unavailable ID"; end; lowhead: if(!isequipped(.low_morpho)){ goto wrong_headgear; } if((.@var1 >= 5001 && .@var1 <= 5859) || (.@var1 >= 60000 && .@var1 <= 61196)){ set .@viewid,getiteminfo(.@var1, ITEMINFO_VIEWID); set .@equipslot,getiteminfo(.@var1,5); if(.@equipslot != 1){ // Lower Only. Comment out this line and the two below it to remove this functionality. goto denied_wrongslot; } set #viewid_low,.@viewid; dispbottom "Selected headgear ID: "+.@viewid; setlook 3,.@viewid; end; } dispbottom "Unavailable ID"; end; topheadlow: if(!isequipped(.top_morphos)){ goto wrong_headgear; } if((.@var1 >= 5001 && .@var1 <= 5859) || (.@var1 >= 60000 && .@var1 <= 61196)){ set .@viewid,getiteminfo(.@var1$, ITEMINFO_VIEWID); set .@equipslot,getiteminfo(.@var1,5); if(.@equipslot != 256 && .@equipslot != 768){ //Upper and Upper+Mid Only. Comment out this line and the two below it to remove this functionality. goto denied_wrongslot; } set #viewid_tops,.@viewid; dispbottom "Selected headgear ID: "+.@viewid; setlook 4,.@viewid; end; } dispbottom "Unavailable ID"; end; midheadlow: if((.@var1 >= 5001 && .@var1 <= 5859) || (.@var1 >= 60000 && .@var1 <= 61196)){ if(!isequipped(.mid_morphos)){ goto wrong_headgear; } set .@viewid,getiteminfo(.@var1$, ITEMINFO_VIEWID); set .@equipslot,getiteminfo(.@var1,5); if(.@equipslot != 512){ // Lower Only. Comment out this line and the two below it to remove this functionality. goto denied_wrongslot; } set #viewid_mids,.@viewid; dispbottom "Selected headgear ID: "+.@viewid; setlook 5,.@viewid; end; } dispbottom "Unavailable ID"; end; lowheadlow: if((.@var1 >= 5001 && .@var1 <= 5859) || (.@var1 >= 60000 && .@var1 <= 61196)){ if(!isequipped(.low_morphos)){ goto wrong_headgear; } set .@viewid,getiteminfo(.@var1$, ITEMINFO_VIEWID); set .@equipslot,getiteminfo(.@var1,5); if(.@equipslot != 1){ // Lower Only. Comment out this line and the two below it to remove this functionality. goto denied_wrongslot; } set #viewid_lows,.@viewid; dispbottom "Selected headgear ID: "+.@viewid; setlook 3,.@viewid; end; } dispbottom "Unavailable ID"; end; clear: set #viewid_low, 1; set #viewid_mid, 2; set #viewid_top, 3; if (getequipid(1) == .top_morpho) setlook 5,0; if (getequipid(9) == .mid_morpho) setlook 4,0; if (getequipid(10) == .low_morpho) setlook 3,0; dispbottom "Your Morphing Hats list has been cleared."; end; info: dispbottom "---------------[Morpho Helper]---------------"; dispbottom " "; dispbottom "You currently have the following items set for your Morpho hat:"; dispbottom "Upper - "+getitemname(#viewid_top); dispbottom "Middle - "+getitemname(#viewid_mid); dispbottom "Lower - "+getitemname(#viewid_low); end; denied_wrongslot: dispbottom "Sorry, this headgear was not designed for this headgear slot."; end; denied_unauthorized: dispbottom "Sorry, you cannot change your Morpho into this headgear. Please try another."; end; wrong_headgear: dispbottom "Sorry, you do not currently have your Morpho equipped. Please equip it and try again!"; end; OnInit: //Array of keywords for the script setarray .keywords$[0],"help","upper","middle","lower","clear","info","upperdawn","middledawn","lowerdawn"; //Change this to the upper limit of the headgears that you wish to make available setarray .morpho_disallowed$[0], "9001"; //inb4OVERNINETHOUSAND //Equip IDs - Change these to the ID numbers of the hat you wish to designate as the Morphing hat set .top_morpho,33300; set .mid_morpho,33302; set .low_morpho,33301; end; } //Use 'callfunc "MorphoEquip",<1,2,3,4,5,6>;' for the "OnEquip" script to let people know that they need to set the view ID or to set the viewid if the person has already set one. //If you wish to make the "Morph" an Account bound variable, simply change all instances of "viewid_" with "#viewid_" function script MorphoEquip { set .@equipslot,getarg(0); switch(.@equipslot) { case 1: //Upper if (!viewid_top) { dispbottom "No headgear set for upper. PM \"NPC:Morpho\" with the word \"help\" for more information."; end; } changelook LOOK_HEAD_TOP,#viewid_top; end; case 2: //Mid if (!viewid_mid) { dispbottom "No headgear set for middle. PM \"NPC:Morpho\" with the word \"help\" for more information."; end; } changelook LOOK_HEAD_MID,#viewid_mid; end; case 3: //Lower if (!viewid_low) { dispbottom "No headgear set for lower. PM \"NPC:Morpho\" with the word \"help\" for more information."; end; } changelook LOOK_HEAD_BOTTOM,#viewid_low; end; } }
-
ParDesign - YourROv1 - Free FluxCP Theme
ThyroDree replied to ParIsMakulit's topic in Website Releases
Anyone can help? The vote for point page works on default page of fluxcp, then i installed free design (Using this design ParDesign). Then when i tried to open voteforpoints it says not found -
Hello, I just wanna report i encounter when i am trying to level up my character on my test server. Normally i warp to pay_fild04 to kill poring,drops,poporing (Looter) When i killed 1 monster and theres poring drops poporing or any looter monster (since i tried dropping items). They stutter moving. Any idea? Can you try yours too? Or I just touch something in my src during edits. I am using the latest revision which is the Fix for AI behaving weird, i just thought this is also part of it since that case the monster also stop.
-
Hello again 🤣 Anyone can help me make DefRatioAtkRace only ignores (Soft)VIT Base Defense? I think i found its source code yet i dont know which is the hard defense and soft defense. pc.c case SP_DEF_RATIO_ATK_RACE: { uint32 race_mask = map->race_id2mask(val); if (race_mask == RCMASK_NONE) { ShowWarning("pc_bonus: SP_DEF_RATIO_ATK_RACE: Invalid Race (%d)\n", val); break; } if (!sd->state.lr_flag) sd->right_weapon.def_ratio_atk_race |= race_mask; else if (sd->state.lr_flag == 1) sd->left_weapon.def_ratio_atk_race |= race_mask; } battle.c if (skill_id != PA_SACRIFICE && skill_id != MO_INVESTIGATE && skill_id != CR_GRANDCROSS && skill_id != NPC_GRANDDARKNESS && skill_id != PA_SHIELDCHAIN && !flag.cri) { //Elemental/Racial adjustments if (sd->right_weapon.def_ratio_atk_ele & (1<<tstatus->def_ele) || sd->right_weapon.def_ratio_atk_race & map->race_id2mask(tstatus->race) || sd->right_weapon.def_ratio_atk_race & map->race_id2mask(is_boss(target) ? RC_BOSS : RC_NONBOSS) ) flag.pdef = 1; if (sd->left_weapon.def_ratio_atk_ele & (1<<tstatus->def_ele) || sd->left_weapon.def_ratio_atk_race & map->race_id2mask(tstatus->race) || sd->left_weapon.def_ratio_atk_race & map->race_id2mask(is_boss(target) ? RC_BOSS : RC_NONBOSS) ) { //Pass effect onto right hand if configured so. [Skotlex] if (battle_config.left_cardfix_to_right && flag.rh) flag.pdef = 1; else flag.pdef2 = 1; } }
-
Got this thing working, I just disabled something on map_zone_db.conf which makes it bypass the ygg, Disable the PvP zone mapflag Problem Solved.
-
This works, but on a certain map like guild_vs2 it can be bypassed. I see it on guild_vs2 and tried to use YGG, still able to consume ygg I tried on pay_fild04 and used YGG, and unable the character to consume ygg.