Jump to content

Hadeszeus

Members
  • Content Count

    651
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by Hadeszeus


  1. Can someone help me on how to lower the chance of summoning MVP's using ABRACADABRA skill? This can be spam on any server. Thanks in advance!

     

    		case SA_ABRACADABRA:			{				int abra_skill_id = 0, abra_skill_lv, abra_idx;				do {					abra_idx = rnd() % MAX_SKILL_ABRA_DB;					abra_skill_id = skill->abra_db[abra_idx].skill_id;				} while (abra_skill_id == 0 ||					skill->abra_db[abra_idx].req_lv > skill_lv || //Required lv for it to appear					rnd()%10000 >= skill->abra_db[abra_idx].per				);				abra_skill_lv = min(skill_lv, skill->get_max(abra_skill_id));				clif->skill_nodamage (src, bl, skill_id, skill_lv, 1);				if( sd )				{// player-casted					sd->state.abra_flag = 1;					sd->skillitem = abra_skill_id;					sd->skillitemlv = abra_skill_lv;					clif->item_skill(sd, abra_skill_id, abra_skill_lv);				}				else				{// mob-casted					struct unit_data *ud = unit->bl2ud(src);					int inf = skill->get_inf(abra_skill_id);					if (!ud) break;					if (inf&INF_SELF_SKILL || inf&INF_SUPPORT_SKILL) {						if (src->type == BL_PET)							bl = (struct block_list*)((TBL_PET*)src)->msd;						if (!bl) bl = src;						unit->skilluse_id(src, bl->id, abra_skill_id, abra_skill_lv);					} else {	//Assume offensive skills						int target_id = 0;						if (ud->target)							target_id = ud->target;						else switch (src->type) {							case BL_MOB: target_id = ((TBL_MOB*)src)->target_id; break;							case BL_PET: target_id = ((TBL_PET*)src)->target_id; break;						}						if (!target_id)							break;						if (skill->get_casttype(abra_skill_id) == CAST_GROUND) {							bl = map->id2bl(target_id);							if (!bl) bl = src;							unit->skilluse_pos(src, bl->x, bl->y, abra_skill_id, abra_skill_lv);						} else							unit->skilluse_id(src, target_id, abra_skill_id, abra_skill_lv);					}				}			}			break;

     


  2. Can someone help me fix this job changer script? Whenever a a novice change to baby job basic skill is not reset causing a player to have extra 9 SKILL POINTS.

     

    //===== Hercules Script ======================================//= Job Master//===== By: ==================================================//= Euphy//===== Current Version: =====================================//= 1.4//===== Description: =========================================//= A fully functional job changer.//===== Additional Comments: =================================//= 1.1 Fixed reset on Baby job change. [Euphy]//= 1.2 Added Expanded Super Novice support and initial Kagerou/Oboro support. [Euphy]//= 1.3 Kagerou/Oboro added. [Euphy]//= 1.4 Improved legibility (renamed variables, replaced//      numbers with constants; Changed syntax to match//      Hercules standards; Fixed status point exploit upon//      Baby Novice job change. [Haru]//============================================================prontera,178,89,6	script	Job Master	1_M_JOBGUIDER,{	function Job_Menu; function A_An;	mes "[Job Master]";	if (Class > Job_Soul_Linker) {		mes "No more jobs are available.";		close;	}	if (checkfalcon() || checkcart() || checkriding() || ismounting()) {		mes "Please remove your "+((checkfalcon())?"falcon":"")+((checkcart())?"cart":"")+((checkriding())?"Peco":"")+((ismounting())?"mount":"")		    +" before proceeding.";		close;	}	if (.skill_point_check && SkillPoint > 0) {		mes "Please use all your skill points before proceeding.";		close;	}	.@eac = eaclass();	.@base = .third_classes ? roclass(.@eac&EAJ_UPPERMASK) : Class;	if (.@base >= Job_Knight && .@base <= Job_Crusader2) {		if (BaseLevel < .rebirth_blevel || JobLevel < .rebirth_jlevel) {			.@blvl = .rebirth_blevel - BaseLevel;			.@jlvl = .rebirth_jlevel - JobLevel;			mes "You need "			    + (BaseLevel < .rebirth_blevel ? ((.rebirth_blevel - BaseLevel) +" more base levels "+ (JobLevel < .rebirth_jlevel ? "and " : "")) : "")			    + (JobLevel < .rebirth_jlevel ? (.rebirth_jlevel - JobLevel) +" more job levels " : "")			    + "to continue.";			close;		}		if (Class > Job_Crusader2) {			mes "Switch to third class?";			next;			Job_Menu(roclass(.@eac|EAJL_THIRD));			close;		}		while (true) {			mes "Select an option.";			next;			//.@choice = select(" ~ ^0055FFRebirth^000000:"+(.third_classes ? " ~ ^FF0000Third Class^000000" : "")+": ~ ^777777Cancel^000000");			.@choice = select(" ~ ^0055FFRebirth^000000:~ ^777777Cancel^000000");						if (.@choice == 3)				close;			mes "[Job Master]";			mes "Are you sure?";			next;			if (.@choice == 1)				Job_Menu(Job_Novice_High);			else			//	Job_Menu(roclass(.@eac|EAJL_THIRD));			//mes "[Job Master]";			close;		}	}	.@job1 = roclass(.@eac|EAJL_2_1);	.@job2 = roclass(.@eac|EAJL_2_2);	if ((.@eac&EAJ_UPPERMASK) == EAJ_SUPER_NOVICE) {		.@newclass = roclass(.@eac|EAJL_THIRD);		.@required_jlevel = 99;	} else if (Class == Job_Ninja) {		.@newclass = .@job1;		.@required_jlevel = 70;	}	if (.@newclass && .third_classes) {		if (BaseLevel < .rebirth_blevel || JobLevel < .@required_jlevel) {			mes "You need "			    + (BaseLevel < .rebirth_blevel ? ((.rebirth_blevel - BaseLevel) +" more base levels "+ (JobLevel < .@required_jlevel ? "and " : "")) : "")			    + (JobLevel < .@required_jlevel ? (.@required_jlevel - JobLevel) +" more job levels " : "")			    + "to continue.";			close;		}		mes "Switch to "+jobname(.@newclass)+"?";		next;		Job_Menu(.@newclass);		close;	}	if (.@eac&EAJL_2)		if (.@eac&(EAJL_UPPER|EAJL_BABY) || roclass(.@eac|EAJL_UPPER) == -1) {			mes "No more jobs are available.";			close;		}	if ((.@eac&EAJ_BASEMASK) == EAJ_NOVICE) {		if (JobLevel < .jobchange_first) {			mes "A job level of "+.jobchange_first+" is required to change into the 1st Class.";		} else if (Class == Job_Novice_High && .linear_jobchange && lastJob) {			mes "Switch classes now?";			next;			Job_Menu(roclass((eaclass(lastJob)&EAJ_BASEMASK)|EAJL_UPPER));		} else if (Class == Job_Novice) {			Job_Menu(Job_Swordman, Job_Mage, Job_Archer, Job_Acolyte, Job_Merchant, Job_Thief,			         Job_SuperNovice, Job_Taekwon, Job_Gunslinger, Job_Ninja, Job_Baby);		} else if (Class == Job_Novice_High) {			Job_Menu(Job_Swordman_High, Job_Mage_High, Job_Archer_High, Job_Acolyte_High, Job_Merchant_High, Job_Thief_High);		} else if (Class == Job_Baby) {			Job_Menu(Job_Baby_Swordman, Job_Baby_Mage, Job_Baby_Archer, Job_Baby_Acolyte, Job_Baby_Merchant, Job_Baby_Thief,			         Job_Super_Baby);		} else {			mes "An error has occurred.";		}		close;	}	if (roclass(.@eac|EAJL_2_1) == -1 || roclass(.@eac|EAJL_2_2) == -1) {		mes "No more jobs are available.";	} else if (!(.@eac&EAJL_2) && JobLevel < .jobchange_second) {		mes "A job level of "+.jobchange_second+" is required to change into the 2nd Class.";	} else if (.linear_jobchange && lastJob && (.@eac&EAJL_UPPER)) {		mes "Switch classes now?";		next;		Job_Menu(lastJob+Job_Novice_High);	} else {		Job_Menu(.@job1, .@job2);	}	close;function Job_Menu {	while (true) {		if (getargcount() > 1) {			mes "Select a job.";			.@menu$ = "";			for (.@i = 0; .@i < getargcount(); ++.@i)				.@menu$ += " ~ "+jobname(getarg(.@i))+":";			.@menu$ += " ~ ^777777Cancel^000000";			next;			.@newjob = getarg(select(.@menu$)-1, 0);			if (!.@newjob) close;			if ((.@newjob == Job_SuperNovice || .@newjob == Job_Super_Baby) && BaseLevel < .supernovice_level) {				mes "[Job Master]";				mes "A base level of "+.supernovice_level+" is required to turn into a "+jobname(.@newjob)+".";				close;			}			mes "[Job Master]";			mes "Are you sure?";			next;		} else {			.@newjob = getarg(0);		}		if (select(" ~ Change into ^0055FF"+jobname(.@newjob)+"^000000 class: ~ ^777777"+(getargcount() > 1 ? "Go back" : "Cancel")+"^000000") == 1) {			mes "[Job Master]";			mes "You are now "+A_An(jobname(.@newjob))+"!";			if (.@newjob == Job_Novice_High && .linear_jobchange)				lastJob = Class; // Note: This is incompatible with the Valkyrie rebirth script.			jobchange .@newjob;			if (.@newjob == Job_Novice_High)				resetlvl(1);			specialeffect2 EF_ANGEL2;			specialeffect2 EF_ELECTRIC;			if (.platinum)				callsub Get_Platinum;			close;		}		if (getargcount() == 1)			return;		mes "[Job Master]";	}	end;}function A_An {	setarray .@vowels$, "a", "e", "i", "o", "u";	.@firstletter$ = strtolower(charat(getarg(0), 0));	for (.@i = 0; .@i < getarraysize(.@vowels); ++.@i) {		if (.@vowels$[.@i] == .@firstletter$)			return "an "+getarg(0);	}	return "a "+getarg(0);}Get_Platinum:	skill NV_FIRSTAID, 1, 0;	if (BaseClass == Job_Novice) {		if (Class != Job_SuperNovice)			skill NV_TRICKDEAD, 1, 0;	} else if (BaseClass == Job_Swordman) {		skill SM_MOVINGRECOVERY, 1, 0;		skill SM_FATALBLOW, 1, 0;		skill SM_AUTOBERSERK, 1, 0;	} else if (BaseClass == Job_Mage) {		skill MG_ENERGYCOAT, 1, 0;	} else if (BaseClass == Job_Archer) {		skill AC_MAKINGARROW, 1, 0;		skill AC_CHARGEARROW, 1, 0;	} else if (BaseClass == Job_Acolyte) {		skill AL_HOLYLIGHT, 1, 0;	} else if (BaseClass == Job_Merchant) {		skill MC_CARTREVOLUTION, 1, 0;		skill MC_CHANGECART, 1, 0;		skill MC_LOUD, 1, 0;	} else if (BaseClass == Job_Thief) {		skill TF_SPRINKLESAND, 1, 0;		skill TF_BACKSLIDING, 1, 0;		skill TF_PICKSTONE, 1, 0;		skill TF_THROWSTONE, 1, 0;	}	if (BaseJob == Job_Knight) {		skill KN_CHARGEATK, 1, 0;	} else if (BaseJob == Job_Priest) {		skill PR_REDEMPTIO, 1, 0;	} else if (BaseJob == Job_Wizard) {		skill WZ_SIGHTBLASTER, 1, 0;	} else if (BaseJob == Job_Blacksmith) {		skill BS_UNFAIRLYTRICK, 1, 0;		skill BS_GREED, 1, 0;	} else if (BaseJob == Job_Hunter) {		skill HT_PHANTASMIC, 1, 0;	} else if (BaseJob == Job_Assassin) {		skill AS_SONICACCEL, 1, 0;		skill AS_VENOMKNIFE, 1, 0;	} else if (BaseJob == Job_Crusader) {		skill CR_SHRINK, 1, 0;	} else if (BaseJob == Job_Monk) {		skill MO_KITRANSLATION, 1, 0;		skill MO_BALKYOUNG, 1, 0;	} else if (BaseJob == Job_Sage) {		skill SA_CREATECON, 1, 0;		skill SA_ELEMENTWATER, 1, 0;		skill SA_ELEMENTGROUND, 1, 0;		skill SA_ELEMENTFIRE, 1, 0;		skill SA_ELEMENTWIND, 1, 0;	} else if (BaseJob == Job_Rogue) {		skill RG_CLOSECONFINE, 1, 0;	} else if (BaseJob == Job_Alchemist) {		skill AM_BIOETHICS, 1, 0;	} else if (BaseJob == Job_Bard) {		skill BA_PANGVOICE, 1, 0;	} else if (BaseJob == Job_Dancer) {		skill DC_WINKCHARM, 1, 0;	}	return;OnInit:	.rebirth_blevel = 99;    // Minimum base level to reborn OR change to third class	.rebirth_jlevel = 50;    // Minimum base job level to reborn OR change to third class	.jobchange_first = 10;   // Minimum job level to turn into 1st class	.jobchange_second = 40;  // Minimum job level to turn into 2nd class	.third_classes = 1;      // Enable third classes? (1: yes / 0: no)	.supernovice_level = 45; // Minimum base level to turn into Super Novice	.linear_jobchange = 1;   // Enforce linear class changes? (1: yes / 0: no)	.skill_point_check = 1;  // Force player to use up all skill points? (1: yes / 0: no)	.platinum = 1;           // Get platinum skills automatically? (1: yes / 0: no)	waitingroom "  ~ Change Job ~",0;	end;}

     


  3.  

    My players totally notice the difference in damage after I update to latest one.

    For example before update Hundred Spear damage is around 19k Per HIT while on latest rev 5k per hit. Same player using same build and items.

    is this the correct reduction of demi human or a bug maybe of all range damage? coz in mobs damage is same from previous.

    Using full renewal setting btw.

    There were certain amount of commits fixing skill damage in accordance to official behaviour in past few weeks, so maybe thats the reason..

    Thanks Dast. 


  4. My players totally notice the difference in damage after I update to latest one.
    For example before update Hundred Spear damage is around 19k Per HIT while on latest rev 5k per hit. Same player using same build and items.
    is this the correct reduction of demi human or a bug maybe of all range damage? coz in mobs damage is same from previous.

    Using full renewal setting btw.


  5. Got this error
    [SQL]: DB error - Incorrect table name ''[Debug]: at npc.c:1432 - SELECT `name`, `itemid`, `amount` FROM ``

     

     

    When I check that line I saw this
     
    void npc_market_fromsql(void) {	SqlStmt* stmt = SQL->StmtMalloc(map->mysql_handle);	char name[NAME_LENGTH+1];	int itemid;	int amount;		if ( SQL_ERROR == SQL->StmtPrepare(stmt, "SELECT `name`, `itemid`, `amount` FROM `%s`", map->npc_market_data_db)		|| SQL_ERROR == SQL->StmtExecute(stmt)		) {		SqlStmt_ShowDebug(stmt);		SQL->StmtFree(stmt);		return;	}

    I check my database and I have npc_market_data <-- table

    I also created npc_market_data_db 

     

    but stil getting npc.c error on this line.

     

     

     

  6.  

    Hmm.. i patch without error. I can create a clone but I can't kill it. 

     

    @marketkill nothing happens (Only message that my clone was killed, but its not)

     

    I logged out my clone still alive.

     

    I can create multiple clone.

     

    Cant reproduce, i really suggest you guys use plugins >.> less stress.

     

    I'll try to repatch later. :(


  7. Hmm.. i patch without error. I can create a clone but I can't kill it. 


    @marketkill nothing happens (Only message that my clone was killed, but its not)

     

    I logged out my clone still alive.

    I can create multiple clone.


  8. [Error]: sv_readdb: Insufficient columns in line 1 of "db/re/homunculus_db.txt" (found 1, need at least 50).[Error]: sv_readdb: Insufficient columns in line 2 of "db/re/homunculus_db.txt" (found 1, need at least 50).[Error]: sv_readdb: Insufficient columns in line 3 of "db/re/homunculus_db.txt" (found 1, need at least 50).[Error]: sv_readdb: Insufficient columns in line 4 of "db/re/homunculus_db.txt" (found 1, need at least 50).[Error]: sv_readdb: Insufficient columns in line 5 of "db/re/homunculus_db.txt" (found 1, need at least 50).[Error]: sv_readdb: Insufficient columns in line 6 of "db/re/homunculus_db.txt" (found 1, need at least 50).[Error]: sv_readdb: Insufficient columns in line 8 of "db/re/homunculus_db.txt" (found 1, need at least 50).[Error]: sv_readdb: Insufficient columns in line 27 of "db/re/homunculus_db.txt" (found 1, need at least 50).[Error]: sv_readdb: Insufficient columns in line 41 of "db/re/homunculus_db.txt" (found 1, need at least 50).

    I know it is related to this update https://github.com/HerculesWS/Hercules/commit/acc4d2eb875ddf67898ae0ac443e76de2d640daa

     

    But my source is updated, I have homunculus_db.txt inside re folder.

     
    void homunculus_read_db(void) {    int i;    const char *filename[]={DBPATH"homunculus_db.txt","homunculus_db2.txt"};

     

     


  9. Hi~Annie,I'd like to report an  issue:

     

    if you kill clone via @killmonster command(still working) ,and then log out your Character , map server will get crashed

     

    edit : I m using plugin v1.1

    Confirming this.

     

    Thanks Annie!


  10.  

    Annie, same.

    atcommand.c: In function 'atcommand_maintenance':atcommand.c:9403: warning: format '[^' expects type 'char *', but argument 6 has type 'const char **'

     

    dirty method

    http://upaste.me/9e3531

     

    can you tell how you compile your server ?

    attachicon.giftest_server.png

    [info]: Compiled with Microsoft Visual C++ 2010 (v1600)

     

    I compile using 'Debian GNU/Linux 6.0.5

     

    i'll try your dirty method :) Thanks Annie!


  11. Hi I have a weird problem on my server. the character size and NPC size are so small I'm using latest herc files and client diff is okay since I used my client to my previous server before using it to new hercules rev.i have a feeling that this is a server side issue. Do you think any possible setting that may cause this.


    ZOOM IN ALREADY 

    i6yzqr.jpg

×
×
  • Create New...

Important Information

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