Jump to content

banhelba2019

Members
  • Content Count

    200
  • Joined

  • Last visited

  • Days Won

    5

Everything posted by banhelba2019

  1. Youll notice with my jump shot, you can easily make it a ranged skill . . but you need to make sure you fill in the cell THAT YOUR CHARACTER IS STANDING ON OTHERWISE THE SKILL WONT EVEN SET OFF Seriously i made a seperate post because this is the most important part.
  2. Okay so ground skills all follow the UNT_UGLYDANCE format or whatever, you can use the same UNT_ a bunch of different ways but the actual effects will be pretty strict unless you get creative with your writing, so you can easily make a bunch of different sized sanctuary/venom dusts and things like that, but they will most likely all have the same effect... unless you get creative right? ok so this is one of my UNT_'s that ive been working on . skill.c case KN_DOMINATOR: case NC_NEUTRALBARRIER: struct status_change *tsc = status->get_sc(src); skill->clear_unitgroup(src); // To remove previous skills - cannot used combined if( tsc && tsc->data[SC_STAGETHREE] ) { if( (sg = skill->unitsetting(src,NC_NEUTRALBARRIER,3,src->x,src->y,0)) != NULL ) { sc_start2(src,src,SC_NEUTRALBARRIER_MASTER,100,skill_lv,sg->group_id,skill->get_time(skill_id,skill_lv)); status_change_end(src, SC_STAGETHREE, INVALID_TIMER); sc_start(src, src,SC_STAGETHREE,100,skill_lv,skill->get_time(skill_id, skill_lv)); if( sd ) pc->overheat(sd,1); } break; } if( tsc && tsc->data[SC_STAGETWO] ) { if( (sg = skill->unitsetting(src,NC_NEUTRALBARRIER,3,src->x,src->y,0)) != NULL ) { sc_start2(src,src,SC_NEUTRALBARRIER_MASTER,100,skill_lv,sg->group_id,skill->get_time(skill_id,skill_lv)); status_change_end(src, SC_STAGETWO, INVALID_TIMER); sc_start(src, src,SC_STAGETHREE,100,skill_lv,skill->get_time(skill_id, skill_lv)); if( sd ) pc->overheat(sd,1); } break; } if( tsc && tsc->data[SC_STAGEONE] ) { if( (sg = skill->unitsetting(src,NC_NEUTRALBARRIER,2,src->x,src->y,0)) != NULL ) { sc_start2(src,src,skill_id == NC_NEUTRALBARRIER ? SC_NEUTRALBARRIER_MASTER : SC_STEALTHFIELD_MASTER,100,skill_lv,sg->group_id,skill->get_time(skill_id,skill_lv)); status_change_end(src, SC_STAGEONE, INVALID_TIMER); sc_start(src, src,SC_STAGETWO,100,skill_lv,skill->get_time(skill_id, skill_lv)); if( sd ) pc->overheat(sd,1); } break; } if( (sg = skill->unitsetting(src,NC_NEUTRALBARRIER,1,src->x,src->y,0)) != NULL ) { sc_start2(src,src,SC_NEUTRALBARRIER_MASTER,100,skill_lv,sg->group_id,skill->get_time(skill_id,skill_lv)); sc_start(src, src,SC_STAGEONE,100,skill_lv,skill->get_time(skill_id, skill_lv)); if( sd ) pc->overheat(sd,1); } break; And in my skill.db { Id: 1634 Name: "KN_DOMINATOR" Description: "Dominators Presence" MaxLevel: 3 Hit: "BDT_SKILL" SkillType: { Self: true } DamageType: { NoDamage: true } InterruptCast: true SkillData1: 15000 CoolDown: 0 Requirements: { SPCost: 10 } Unit: { Id: 0xe2 Layout: { Lv1: 2 Lv2: 3 Lv3: 4 Lv4: 2 Lv5: 2 Lv6: 2 Lv7: 2 Lv8: 2 Lv9: 2 Lv10: 2 } Interval: 500 Target: "All" } }, So as you can see the bottom half has the UNT section right? not all skills have that only skills that actually have AOE like storm gust... arrow shower... things like that . . . so the skill i just posted gets bigger every stage, and the way i have it work is that when my Lord Knight gets kill he gets combo spirits, and then when he has 5 he can advance to the next stage , I cant tell you exactly how i made it into an aura that follows me around so your just gonna have to play around with skills that already have that feature. . . Not much left i can tell you about UNT_ things, its up to you to play with it, im not really in a rush so i havnt figured out a way to reuse a unt_ more then just the sizes/intervals but it is very possible. . . Ok now you know brandish spear actually is the most unique skill in pre re, no other skill functions like it and im gonna post one of my custom gunslinger skills that uses the same function as brandish spear, OK you will have to make 2 changes in order for this to actually work You need to identify it in your skill.h void (*brandishspear) (struct block_list* src, struct block_list* bl, uint16 skill_id, uint16 skill_lv, int64 tick, int flag); void (*jumpshot) (struct block_list* src, struct block_list* bl, uint16 skill_id, uint16 skill_lv, int64 tick, int flag); void (*brandishspear_first) (struct square *tc, uint8 dir, int16 x, int16 y); void (*brandishspear_dir) (struct square* tc, uint8 dir, int are); void (*jumpshot_first) (struct squareb *tc, uint8 dir, int16 x, int16 y); void (*jumpshot_dir) (struct squareb* tc, uint8 dir, int are); Once you identify/declare it, we can start working in our skill.c Your gonna wanna write this under the brandish spear function .. Just crtl+f for this void skill_brandishspear Its a alot shorter then mine because it uses fancy c++ functions that you really dont need to use. So just look at what i wrote. //JUMPSHOT struct squareb { int val1[50]; int val2[50]; }; void skill_jumpshot_first (struct squareb *tc, uint8 dir, int16 x, int16 y) { nullpo_retv(tc); if(dir == 0){ tc->val1[0]=x; tc->val1[1]=x+1; tc->val1[2]=x-1; tc->val1[3]=x; tc->val1[4]=x+1; tc->val1[5]=x+1; tc->val1[6]=x; tc->val1[7]=x+1; tc->val1[8]=x-1; tc->val1[9]=x; tc->val1[10]=x+1; tc->val1[11]=x-1; tc->val1[12]=x; tc->val1[13]=x+1; tc->val1[14]=x-1; tc->val1[15]=x; tc->val1[16]=x+1; tc->val1[17]=x-1; tc->val2[0]=y; tc->val2[1]=y; tc->val2[2]=y; tc->val2[3]=y-1; tc->val2[4]=y-1; tc->val2[5]=y-1; tc->val2[6]=y-2; tc->val2[7]=y-2; tc->val2[8]=y-2; tc->val2[9]=y-3; tc->val2[10]=y-3; tc->val2[11]=y-3; tc->val2[12]=y-4; tc->val2[13]=y-4; tc->val2[14]=y-4; tc->val2[15]=y+1; tc->val2[16]=y+1; tc->val2[17]=y+1; } else if(dir==2){ tc->val1[0]=x+3; tc->val1[1]=x+3; tc->val1[2]=x+3; tc->val1[3]=x+4; tc->val1[4]=x+4; tc->val1[5]=x+4; tc->val1[6]=x+2; tc->val1[7]=x+2; tc->val1[8]=x+2; tc->val1[9]=x+1; tc->val1[10]=x+1; tc->val1[11]=x+1; tc->val1[12]=x-1; tc->val1[13]=x-1; tc->val1[14]=x-1; tc->val1[15]=x; tc->val1[16]=x; tc->val1[17]=x; tc->val2[0]=y; tc->val2[1]=y+1; tc->val2[2]=y-1; tc->val2[3]=y; tc->val2[4]=y+1; tc->val2[5]=y+1; tc->val2[6]=y; tc->val2[7]=y+1; tc->val2[8]=y-1; tc->val2[9]=y; tc->val2[10]=y+1; tc->val2[11]=y-1; tc->val2[12]=y; tc->val2[13]=y+1; tc->val2[14]=y-1; tc->val2[15]=y; tc->val2[16]=y+1; tc->val2[17]=y-1; } else if(dir==4){ tc->val1[0]=x; tc->val1[1]=x+1; tc->val1[2]=x-1; tc->val1[3]=x; tc->val1[4]=x+1; tc->val1[5]=x+1; tc->val1[6]=x; tc->val1[7]=x+1; tc->val1[8]=x-1; tc->val1[9]=x; tc->val1[10]=x+1; tc->val1[11]=x-1; tc->val1[12]=x; tc->val1[13]=x+1; tc->val1[14]=x-1; tc->val1[15]=x; tc->val1[16]=x+1; tc->val1[17]=x-1; tc->val2[0]=y; tc->val2[1]=y; tc->val2[2]=y; tc->val2[3]=y+1; tc->val2[4]=y+1; tc->val2[5]=y+1; tc->val2[6]=y+2; tc->val2[7]=y+2; tc->val2[8]=y+2; tc->val2[9]=y+3; tc->val2[10]=y+3; tc->val2[11]=y+3; tc->val2[12]=y+4; tc->val2[13]=y+4; tc->val2[14]=y+4; tc->val2[15]=y-1; tc->val2[16]=y-1; tc->val2[17]=y-1; } else if(dir==6){ tc->val1[0]=x-3; tc->val1[1]=x-3; tc->val1[2]=x-3; tc->val1[3]=x-4; tc->val1[4]=x-4; tc->val1[5]=x-4; tc->val1[6]=x-2; tc->val1[7]=x-2; tc->val1[8]=x-2; tc->val1[9]=x-1; tc->val1[10]=x-1; tc->val1[11]=x-1; tc->val1[12]=x+1; tc->val1[13]=x+1; tc->val1[14]=x+1; tc->val1[15]=x; tc->val1[16]=x; tc->val1[17]=x; tc->val2[0]=y; tc->val2[1]=y+1; tc->val2[2]=y-1; tc->val2[3]=y; tc->val2[4]=y+1; tc->val2[5]=y+1; tc->val2[6]=y; tc->val2[7]=y+1; tc->val2[8]=y-1; tc->val2[9]=y; tc->val2[10]=y+1; tc->val2[11]=y-1; tc->val2[12]=y; tc->val2[13]=y+1; tc->val2[14]=y-1; tc->val2[15]=y; tc->val2[16]=y+1; tc->val2[17]=y-1; } else if(dir==1){ tc->val1[0]=x; tc->val1[1]=x+1; tc->val1[2]=x+2; tc->val1[3]=x; tc->val1[4]=x; tc->val1[5]=x+1; tc->val1[6]=x+2; tc->val1[7]=x+2; tc->val1[8]=x+1; tc->val1[9]=x+1; tc->val1[10]=x+2; tc->val1[11]=x+2; tc->val1[12]=x+3; tc->val1[13]=x+3; tc->val1[14]=x+3; tc->val1[15]=x+4; tc->val1[16]=x+3; tc->val1[17]=x+4; tc->val1[18]=x+4; tc->val2[0]=y; tc->val2[1]=y; tc->val2[2]=y; tc->val2[3]=y-1; tc->val2[4]=y-2; tc->val2[5]=y-1; tc->val2[6]=y-1; tc->val2[7]=y-2; tc->val2[8]=y-2; tc->val2[9]=y-3; tc->val2[10]=y-3; tc->val2[11]=y-4; tc->val2[12]=y-4; tc->val2[13]=y-1; tc->val2[14]=y-2; tc->val2[15]=y-2; tc->val2[16]=y-3; tc->val2[17]=y-3; tc->val2[18]=y-4; } else if(dir==3){ tc->val1[0]=x+4; tc->val1[1]=x+4; tc->val1[2]=x+4; tc->val1[3]=x+3; tc->val1[4]=x+3; tc->val1[5]=x+3; tc->val1[6]=x+3; tc->val1[7]=x+2; tc->val1[8]=x+2; tc->val1[9]=x+2; tc->val1[10]=x+2; tc->val1[11]=x+2; tc->val1[12]=x+1; tc->val1[13]=x+1; tc->val1[14]=x+1; tc->val1[15]=x+1; tc->val1[16]=x; tc->val1[17]=x; tc->val1[18]=x; tc->val2[0]=y+4; tc->val2[1]=y+3; tc->val2[2]=y+2; tc->val2[3]=y+4; tc->val2[4]=y+3; tc->val2[5]=y+2; tc->val2[6]=y+1; tc->val2[7]=y+4; tc->val2[8]=y+3; tc->val2[9]=y+2; tc->val2[10]=y+1; tc->val2[11]=y; tc->val2[12]=y+3; tc->val2[13]=y+2; tc->val2[14]=y+1; tc->val2[15]=y; tc->val2[16]=y+2; tc->val2[17]=y+1; tc->val2[18]=y; } else if(dir==5){ tc->val1[0]=x-4; tc->val1[1]=x-3; tc->val1[2]=x-2; tc->val1[3]=x-4; tc->val1[4]=x-3; tc->val1[5]=x-2; tc->val1[6]=x-1; tc->val1[7]=x-4; tc->val1[8]=x-3; tc->val1[9]=x-2; tc->val1[10]=x-1; tc->val1[11]=x; tc->val1[12]=x-3; tc->val1[13]=x-2; tc->val1[14]=x-1; tc->val1[15]=x; tc->val1[16]=x-2; tc->val1[17]=x-1; tc->val1[18]=x; tc->val2[0]=y+4; tc->val2[1]=y+4; tc->val2[2]=y+4; tc->val2[3]=y+3; tc->val2[4]=y+3; tc->val2[5]=y+3; tc->val2[6]=y+3; tc->val2[7]=y+2; tc->val2[8]=y+2; tc->val2[9]=y+2; tc->val2[10]=y+2; tc->val2[11]=y+2; tc->val2[12]=y+1; tc->val2[13]=y+1; tc->val2[14]=y+1; tc->val2[15]=y+1; tc->val2[16]=y; tc->val2[17]=y; tc->val2[18]=y; } else if(dir==7){ tc->val1[0]=x-4; tc->val1[1]=x-3; tc->val1[2]=x-2; tc->val1[3]=x-4; tc->val1[4]=x-3; tc->val1[5]=x-2; tc->val1[6]=x-1; tc->val1[7]=x-4; tc->val1[8]=x-3; tc->val1[9]=x-2; tc->val1[10]=x-1; tc->val1[11]=x; tc->val1[12]=x-3; tc->val1[13]=x-2; tc->val1[14]=x-1; tc->val1[15]=x; tc->val1[16]=x-2; tc->val1[17]=x-1; tc->val1[18]=x; tc->val2[0]=y-4; tc->val2[1]=y-4; tc->val2[2]=y-4; tc->val2[3]=y-3; tc->val2[4]=y-3; tc->val2[5]=y-3; tc->val2[6]=y-3; tc->val2[7]=y-2; tc->val2[8]=y-2; tc->val2[9]=y-2; tc->val2[10]=y-2; tc->val2[11]=y-2; tc->val2[12]=y-1; tc->val2[13]=y-1; tc->val2[14]=y-1; tc->val2[15]=y-1; tc->val2[16]=y; tc->val2[17]=y; tc->val2[18]=y; } } void skill_jumpshot_dir (struct squareb* tc, uint8 dir, int are) { int c; nullpo_retv(tc); for( c = 0; c < 50; c++ ) { switch( dir ) { case 0: tc->val2[c]+=are; break; case 1: tc->val1[c]-=are; tc->val2[c]+=are; break; case 2: tc->val1[c]-=are; break; case 3: tc->val1[c]-=are; tc->val2[c]-=are; break; case 4: tc->val2[c]-=are; break; case 5: tc->val1[c]+=are; tc->val2[c]-=are; break; case 6: tc->val1[c]+=are; break; case 7: tc->val1[c]+=are; tc->val2[c]+=are; break; } } } void skill_jumpshot(struct block_list* src, struct block_list* bl, uint16 skill_id, uint16 skill_lv, int64 tick, int flag) { int c,n=49; uint8 dir; struct squareb tc; int x, y; nullpo_retv(bl); x = bl->x; y = bl->y; dir = map->calc_dir(src, x, y); skill->jumpshot_first(&tc,dir,x,y); skill->jumpshot_dir(&tc,dir,4); skill->area_temp[1] = bl->id; for(c=0;c<50;c++){ if(c==0||c==50) skill->jumpshot_dir(&tc,dir,-1); map->foreachincell(skill->area_sub, bl->m,tc.val1[c%25],tc.val2[c%25],BL_CHAR, src,skill_id,skill_lv,tick, flag|BCT_ENEMY|1, skill->castend_damage_id); } } Youll notice i have 8 directions... its the same as when you place an npc and chose what way you want it to face. Its not gonna make much sense if you just look at it, so i recommend drawing it on grid paper and just TRY to see where these numbers X/Y actually fit... its really wonky but once you see it youll be like shit this is easy. Ok im gonna post my desperado as well but were using the same functions as firewall in this skill soo youve probably seen this and thought oh i can play with this and it turns out to be really fucked up... working with this function is alot easier because its just centered on you compared to brandish spear which has 8 directions, and they start from a corner that i cant explain, like i said, draw it on paper , once you see it youll catch on quick. first go to your skill.h find this #define MAX_SKILL_UNIT_LAYOUT 65 its not gonna be 65 in your SRC cause i already raised it. Now go to skill.c (Your probably gonna wanna test it out a bit and practise with a skill that already uses this style of grid Wall of thorn would be easy to follow cause thats where i placed my desperado case GS_DESPERADO: { static const int dx[] = {-4,-4,-4,-4,-4,-4,-4,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2,-2,-2,-2,-2,-2,-1,-1,-1,-1, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1}; static const int dy[] = { 3, 2, 1, 0,-1,-2,-3, 4, 3, 2, 1, 0,-1,-2,-3,-4, 4, 3, 2,-2,-3,-4, 4, 3,-4,-3,-4,-3, 4, 3, 3, 2, 1, 0,-1,-2,-3, 4, 3, 2, 1, 0,-1,-2,-3,-4, 4, 3, 2,-2,-3,-4, 4, 3,-4,-3}; skill->dbs->unit_layout[pos].count = 56; memcpy(skill->dbs->unit_layout[pos].dx,dx,sizeof(dx)); memcpy(skill->dbs->unit_layout[pos].dy,dy,sizeof(dy)); } break; Ok so the first cell would be -4,3 .. . . the next cell is -4,2 then -4,1 -4,0 -4,-1 -4-2 Look at the top one and the one under it, thats the cell that it will hit. Change the UNIT_LAYOUT[pos].count = - - - - number to match the amount of cells so i made desperado a 56 cell skill that circles around me, but it leaves a small gap so that monsters directly in front or around me dont get it. Draw it. and this is what my desperado looks like in my skill.db { Id: 516 Name: "GS_DESPERADO" Description: "Desperado" MaxLevel: 30 Hit: "BDT_MULTIHIT" SkillType: { Self: true } AttackType: "Weapon" Element: "Ele_Weapon" AfterCastActDelay: 0 AfterCastWalkDelay: 1500 SkillData1: 25 CoolDown: 500 Requirements: { SPCost: { Lv1: 32 Lv2: 34 Lv3: 36 Lv4: 38 Lv5: 40 Lv6: 42 Lv7: 44 Lv8: 46 Lv9: 48 Lv10: 50 } WeaponTypes: { Revolvers: true } AmmoTypes: { A_BULLET: true } AmmoAmount: 10 } Unit: { Id: 0x86 Layout: -1 Interval: 100 Target: "Enemy" } }, UNT ID:0x86 is used EVERYWHERE , arrowshower stormgust..comet meteor they all use the same thing but they have their effects linked client side... this is mostly used for damage skills and the other UNT_s are everything else, sanctuary has its own UNT, all the dances/songs have their own UNT's. . . youll have to look at their ID in the skill db if you wanna re use them somewhere else, but like i said, your gonna have to figure out how to use them in a bunch of different ways right? Your probably not gonna be able to make. . . UNT_UGLYDANCE , be reused... one 2 different custom skills where one of them stuns everyone around you . . . . and then you have another skill that uses UNT_UGLYDANCE but that one freezes everybody ... im still working on this. enjoy lol . . i didnt miss anything and i just told you everything i know about UNT_'s and how to use them and how to make custom sizes both ways, in place skills (i know desperado isnt look like a place but it actually kinda is) and the way brandish spear is use, where you click on something and then it has its SPECIFIC area, not just a splash, it has its own pattern,, you can get complicated if you want but i recommend learning from ME and not from what brandish spear function cause that thing is intermidate level C++ and uses a growth function (++) . . . i made it really simple.
  3. Hold on some disrespectful kid just really pissed me off ill re write it for you
  4. Ive been playing with the quest window to display my crafting recipes + tiers... really nice but Obviously havnt done any graphical work to it, dont even think you can rename these tab so
  5. doing the usual, started adding some new status icons for my stuff and bumped into an error where my run server would just stop and say restarting didnt point to anything until i screwed around with it even more ( seriously i didnt get the actually error until i purposely broke things to test) alright rewind a few days no biggie and retrace my steps Oh my custom skill area grid is making the error, but why was it effecting my sc and si list. . . they both have a number max i guess go look for some MAX_ defines Ahh here she is: #define MAX_SKILL_UNIT_LAYOUT 65 like everything else its set to super low numbers so its easy to break with no warnings given but the best part it that this skill was functioning properly for a couple days, it was only until i started adding more sc and si entries that my server run just STOPPED working at all. . . so then your sitting there like WHAT?!?!? LMAO Everything is fine now. one of these days herc is gonna kill me
  6. hows your mapflags.conf? there should be a txt for your flag ... if not u got some deep src issues lol never did that though so may be something else but u can post your stuff for me
  7. try adding this Zeny -= .price; im trying to modify your script myself but its just a headache, but it didnt look like you had this command in your script
  8. well all these problems are gone now since i changed my client to 2015-10-29a. . . LMAO
  9. I cant find where to change the names for the tabs on the side where you click "Act" "Pen" "Rec" "Epi" "Loc" "Evt" "New" I would like to change these if possible :/
  10. there is also star wars lol . . . and a really neat pokemon one THAT IS SO CUTE THOUGH COMING TO 2016 CLIENT
  11. trying to play around with blind but when i start up fresh client i get the usual black dots on custom maps but my blind is clear I just do ctrl alt delete, then cancel and the black dots go away but then my blind fucks up Probably my gfx card but is their a simple fix for the blind? gfx card = nividia geforce gtx 745 If we can fix both problems thatd be great though
  12. Well i think this was my rogue problem, its fixed now only cause i destroyed the inheritance and just added all the skills to stalker (Y) I dont think i did anything and i had soooooo many errors no one would reply to when i started up herc that it must have been bugs or something haha litterly not a problem now, i am a god of my world
  13. mob_skill_db 1388,Arc Angeling@NPC_SUMMONSLAVE,attack,196,7,10000,700,60000,no,self,slavele,3,1443,1246,1742,1743,1744,18, 1388,Arc Angeling@NPC_SUMMONSLAVE,idle,196,7,10000,700,60000,no,self,slavele,3,1443,1246,1742,1743,1744,18, Id: 1443 is a G-Cruiser... everything after slavele,3, are the mob ids that they summon, then recall slaves simply just teles them all ontop of the mvp sorry i dont understand your question
  14. Ive never seen an NPC in RO that had currency besides cash point / zeny but i may just not be understanding you So i dunno dude
  15. this happens to me when i get one of my characters stuck in a map i deleted or something
  16. i know alot of the ninja/rebellion skills are within our GRF but they arent in texture>effect folder, they are sub folders of the Effect folder and if you open the up and check the skills.....for example go to your data>texture>effect>RL_QUICK_DRAW folder and click on our associated STR and you check the extract resources tab, and look how no bmps are linked to it ( if you put them all in the EFFECT folder rather then their own, they get linked and check marked like everything else.... I tried making one of the rebellion skill effects appear but it didnt work just by throwing it in and reusing the skill... no i think we need specific skill.c settings for it... i dont know , dont care too much lol edit: Yeah they arent supported totally, a few things are there but if you know how to code you can just copy rathena rebellion/ninja and move it over lmao
  17. install xampp control panel and when you instal it click for apache and SQL (then run both ofc) go open admin for SQL go add new database for your game (been so long but) then add your Logs to it go to privileges > add your new one with all the same info you used in the conf files in herc emu should be fine after that, just like what daddy said but different program (sorry)
  18. thank you runserver.bat for telling me what i do wrong <3
  19. Using what you said you can probably do it Its a bit troublesome to write for you but if you cant just let me know.... but i have an AI where they only target a certain type of mob AI who doesnt aggro back, but then theres the regular monsters just roaming about too...I heard people were having trouble getting the monsters to keep walking AFTER they fought each other at the towers in MOBA style RO mod... Unless you gave all the minions their own ID (3 seperate soldiers 3 seperate archers) would have to get creative but i can see it xD Ive also made it so that i have the mining veins around the in game dungeons where once you get near it monsters start coming at you in waves, still working on it but its pretty neat.... //TEST pay_dun02,203,104,0 script mining 4_CRACK,3,3,{ npctalk "Nearby monsters look pissed"; donpcevent "Mining#paydun2::OnEnable"; end; } pay_dun02,1,1,0 script Mining#paydun2 FAKE_NPC,{ OnInit: disablenpc "Mining#paydun2"; end; OnEnable: mapannounce "pay_dun02","Monsters start howling",bc_map; enablenpc "Mining#paydun2"; initnpctimer; end; OnDisable: mapannounce "pay_dun02","The howling stops",bc_map; disablenpc "Mining#paydun2"; end; OnTimer1000: mapannounce "pay_dun02","you win!",bc_map; set .@gid1,monster ("pay_dun02",194,89,"Soldier Skeleton",1028,1); set .@gid2,monster ("pay_dun02",194,89,"Soldier Skeleton",1028,1); unitwalk .@gid1,193,103; unitwalk .@gid2,193,103; sleep2(2000); unitwalk .@gid1,204,109; unitwalk .@gid2,204,109; end; OnTimer5000: mapannounce "pay_dun02","you win!",bc_map; set .@gid1,monster ("pay_dun02",194,89,"Soldier Skeleton",1028,1); unitwalk .@gid1,193,103; sleep2(2000); unitwalk .@gid1,204,109; end; }
  20. what? are you asking for a true damage that always hits 999 or something what? because im not here everyday i will provide you with what i can make sense of what you say go to skil.c find TF_THROWSTONE it will be above this skill->attack(BF_MISC,src,src,bl,skill_id,skill_lv,tick,flag); add your skill over this make sure in skill DB in your pre/re folder your skill is set to MISC type damage not magic or physical or w/e then go to battle.c find case TF_THROWSTONE: md.damage=50; break; add your skill with its new damage, if you are editing old skill go back in battle.c and delete all other traces of it unless its something super specific and not damage related (probably wont)
×
×
  • Create New...

Important Information

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