Jump to content

chowking

Members
  • Posts

    178
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by chowking

  1. I checked your code its the same as the original,

     

    What to do:

    -Check if there are errors in map console when using acid demo

    -Double check item db if item are set to indestructible

    -Recompile

    -check skill db might be something there

     

    Compare your skill.c to github working skill.c find all cr_acid demo compare of theyre the same

    If you still dont solve i recommend getting a new clean rathena implement mods 1 by 1, test it before implemwnting a new one to detect errors l/bugs

  2. so i did this waay back, this code modifies spiderweb to be placed on the ground and trap anyone who walks overit.

    ===========================================================================
    Index: src/map/skill.cpp
    ===========================================================================
    @@ -13642,6 +13642,7 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, uns
    			case UNT_FIREPILLAR_ACTIVE:
    			case UNT_ELECTRICSHOCKER:
    			case UNT_MANHOLE:
    +			case UNT_SPIDERWEB:
    				return 0;
    			default:
    				ShowError("skill_unit_onplace_timer: interval error (unit id %x)\n", sg->unit_id);
    @ -13817,7 +13818,23 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, uns
    				sc_start(ss,bl,SC_STOP,100,0,skill_get_time2(sg->skill_id,sg->skill_lv));
    			}
    			break;
    -
    +		case UNT_SPIDERWEB:
    +			if (sg->val2 == 0 && tsc) {
    +				int sec = skill_get_time2(sg->skill_id, sg->skill_lv);
    +				if (status_change_start(ss, bl, type, 10000, sg->skill_lv, sg->group_id, 0, 0, sec, tick)) {
    +					const struct TimerData* td = tsc->data[type] ? get_timer(tsc->data[type]->timer) : NULL;
    +					if (td)
    +						sec = DIFF_TICK(td->tick, tick);
    +					unit_movepos(bl, unit->bl.x, unit->bl.y, 0, 0);
    +					clif_fixpos(bl);
    +					sg->val2 = bl->id;
    +				}
    +				else
    +					sg->limit = DIFF_TICK(tick, sg->tick) + sec;
    +				sg->interval = -1;
    +				unit->range = 0;
    +			}
    +			break;
    		case UNT_ANKLESNARE:
    		case UNT_MANHOLE:
    			if( sg->val2 == 0 && tsc && ((sg->unit_id == UNT_ANKLESNARE && skill_id != SC_ESCAPE) || bl->id != sg->src_id) ) {
    @ -17932,6 +17949,7 @@ int skill_delunit(struct skill_unit* unit)
    	switch (group->skill_id) {
    		case HT_ANKLESNARE:
    		case SC_ESCAPE:
    +		case PF_SPIDERWEB:
    			{
    				struct block_list* target = map_id2bl(group->val2);
    				enum sc_type type = status_skill2sc(group->skill_id);
    @ -18540,6 +18558,12 @@ static int skill_unit_timer_sub(DBKey key, DBData *data, va_list ap)
    					}
    				}
    				break;
    +			case UNT_SPIDERWEB:
    +				if (unit->val1 <= 0) {
    +					if (group->unit_id == UNT_SPIDERWEB && group->val2 > 0)
    +						skill_delunit(unit);
    +				}
    +				break;
    			case UNT_REVERBERATION:
    			case UNT_NETHERWORLD:
    				if (unit->val1 <= 0) {
    ===========================================================================
    Index: db/pre-re/skill_db.txt
    ===========================================================================
     @@ -603,7 +603,7 @@
    402,9,6,1,0,0x1,0,5,1,no,0,0,0,none,0,0x0,		PF_MINDBREAKER,Mind Breaker
    403,0,0,4,0,0x1,0,1,1,yes,0,0,0,magic,0,0x0,		PF_MEMORIZE,Foresight
    404,9,6,2,2,0x1,0,5,1,yes,0,0x100,2,magic,0,0x10000,	PF_FOGWALL,Blinding Mist
    -405,7,6,1,0,0x1,0,1,1,no,0,0,3,magic,0,0x0,		PF_SPIDERWEB,Fiber Lock
    +405,7,6,2,0,0x1,0,1,1,no,0,0,4,magic,0,0x0,		PF_SPIDERWEB,Fiber Lock
    
    //****
    // Assassin Cross
    ===========================================================================
    Index: db/pre-re/skill_unit_db.txt
    ===========================================================================
    @@ -89,7 +89,7 @@
    369,0xb3,    , -1, 0,10000,all,  0x008	//PA_GOSPEL
    395,0xb5,    ,  4, 0,  -1,all,   0x200	//CG_MOONLIT
    404,0xb6,    , -1, 0,  -1,all,   0x8000	//PF_FOGWALL
    -405,0xb7,    ,  0, 0,  -1,enemy, 0x8000	//PF_SPIDERWEB
    +405,0xb7,    ,  0, 1,  0,enemy, 0x8000	//PF_SPIDERWEB
    409,0xb2,    ,  0,-1,  -1,noone, 0x000	//WE_CALLBABY
    410,0xb2,    ,  0,-1,  -1,noone, 0x000	//WE_CALLPARENT
    428,0x86,    ,  0, 1, 100,enemy, 0x000	//SG_SUN_WARM
    ===========================================================================

    it does the job yeah but the main problem is the finer points where

    intended behavior:

    • when a player is webbed/trapped and prof/sage places another web beside, the web will forcefully move character/mob. (this works already)
    • when there is no one trapped and prof casts spiderweb beyond 4, 1st web cast should be deleted
    • the previous web now gets deleted as the character was removed by another web, allowing to infinitely move the character/mob out of his/her will.

    what is happening:

    • when a player is webbed/trapped and prof/sage places another web beside, the web will forcefully move character/mob.
    • the previous web persists but doesn't trap anyone anymore, and after reaching the limit of 4 webs(defined in skill_db.txt) the skill will fail until the 1st web vanishes releasing the trapped character/mob

    if you'll notice the code is closely similar to ankle snare,
    i built this trying to get reference from already existing skills.

  3. 7 hours ago, Lighta said:

    A little note, if I may.
    With truncation your remaining time could be a little misleading.
    Suppose for instance we have 1.8s left. with current code it will show 1s, where I think 2s would be better to show.
    To fix this you could simply change your line  :
     

    
    int w_tick = 10 - (DIFF_TICK(gettick(), sd->canlog_tick) / 1000);
    to
    int w_tick = 10 - (DIFF_TICK(gettick()+500, sd->canlog_tick) / 1000); //+500 (0.5s) will make it roundup if needed be

    Copy that thanks for pointing it out

  4. i applied malufetts mod for go warp delay

    im trying to get it to show the actual remaining time before the command can be used again

     

    in '@go'

    if (!pc_get_group_level(sd) && DIFF_TICK(gettick(), sd->canlog_tick) < 10000) {
    		sprintf(atcmd_output, msg_txt(sd, 1505), sd->canlog_tick); //Please wait %d seconds before warping.
    		return 0;
    	}

     

    no errors and warning on recompile
    but the no message shows in client when trying to warp while attacking player

    i already added in map msg conf import line 1505

    Edit:

    had to add int since code only shows canlog_tick
    here is the working code
     

    if (!pc_get_group_level(sd) && DIFF_TICK(gettick(), sd->canlog_tick) < 10000) {
    		int w_tick = 10 - (DIFF_TICK(gettick()+500, sd->canlog_tick) / 1000); //+500 (0.5s) will make it roundup if needed be
    		sprintf(atcmd_output, msg_txt(sd, 1505), w_tick); //Please wait %d seconds before warping.
    		clif_displaymessage(fd, atcmd_output);
    		return 0;
    	}

     

    • Love 1
  5. in status.cpp

    find:

    case SC_STRIPHELM:
            if (sd && !(flag&SCSTART_LOADED)) {
                short i;
                if(sd->bonus.unstripable_equip&EQP_HELM)
                    return 0;
                i = sd->equip_index[EQI_HEAD_TOP];
                if ( i < 0 || !sd->inventory_data[i] )
                    return 0;
                pc_unequipitem(sd,i,3);
            }
            if (tick == 1) return 1; // Minimal duration: Only strip without causing the SC
        break;

    add below break;

    case SC_CP_ARMOR:
    	status_change_end(bl, SC_STRIPARMOR, INVALID_TIMER);
    	break;
    case SC_CP_WEAPON:
    	status_change_end(bl, SC_STRIPWEAPON, INVALID_TIMER);
    	break;
    case SC_CP_SHIELD:
    	status_change_end(bl, SC_STRIPSHIELD, INVALID_TIMER);
    	break;
    case SC_CP_HELM:
    	status_change_end(bl, SC_STRIPHELM, INVALID_TIMER);
    	break;

    save and recompile

  6. hey guys, i've modded soul link of blacksmith and starglad to have parry skill, and now im editing it so the blacksmith and SG can use parry with 1h axes and books,

    so i did this code

     

    this works when i use return 0; but following the codes now using return false in checks, i cant seem to work around it

    bottom line is , is it safe to use return 0; there and wont affect other functions in rAthena if not, please help me get around the return false check;

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    EDIT: FIXED,so i removed the code

  7.             // By pass FCP when using single strip skills by 100%(requires Glistening Coat).
                if ( sd && tsc && sd->sc.data[SC_SPIRIT] && sd->sc.data[SC_SPIRIT]->val2 == SL_ROGUE &&
    				( skill_id == RG_STRIPWEAPON && tsc->data[SC_CP_WEAPON] ||
    				skill_id == RG_STRIPSHIELD && tsc->data[SC_CP_SHIELD] ||
    				skill_id == RG_STRIPARMOR && tsc->data[SC_CP_ARMOR] ||
    				skill_id == RG_STRIPHELM && tsc->data[SC_CP_HELM] ) ) {
    				int ii = pc_search_inventory(sd, ITEMID_COATING_BOTTLE);
    				if ( ii < MAX_INVENTORY ) {
                                           switch ( skill_id ) {
                                           case RG_STRIPWEAPON:
                                           		status_change_end( bl, SC_CP_WEAPON, INVALID_TIMER );
                                           		sc_start(src,bl,SC_STRIPWEAPON,"your success rate",skill_lv,skill_get_time(skill_id,skill_lv));
                                           		break;
                                           case RG_STRIPSHIELD:
                                           		status_change_end( bl, SC_CP_SHIELD, INVALID_TIMER );
                                           		sc_start(src,bl,SC_STRIPSHIELD,"your success rate",skill_lv,skill_get_time(skill_id,skill_lv));
                                           		break;
                                           case RG_STRIPARMOR:
                                           		status_change_end( bl, SC_CP_ARMOR, INVALID_TIMER );
                                           		sc_start(src,bl,SC_STRIPARMOR,"your success rate",skill_lv,skill_get_time(skill_id,skill_lv));
                                           		break;
                                           case RG_STRIPHELM:
                                           		status_change_end( bl, SC_CP_HELM, INVALID_TIMER );
                                           		sc_start(src,bl,SC_STRIPHELM,"your success rate",skill_lv,skill_get_time(skill_id,skill_lv));
                                           		break;
                                           }
                                           pc_delitem(sd, ii, 1, 0, 0, LOG_TYPE_CONSUME);
                                           clif_skill_nodamage( src, bl, skill_id, skill_lv, i );
                                           break;
                                      }
                                  }

     

  8. i recently made a new server with the latest rev,

     

    using client 2012-04-10a

    configure mmo.h def packet with the clientdate

    set packet_db_ver: 30

     

    configured the server to use pre-re

     

    the problem comes after character creation,

     

    here are the steps i did,

    1. Login
    2. Make new Character

    3. input name (didn't touch the hair)

    4. press enter ( this takes me back to the character selection)

    5. log the char to map

     

     

    when i select the newly created character (pressed enter to log in) the client will display failed to connect to server, trying to log in again and selecting the new char it will now load and log the char to the map, and have no problems,
     

    basically..

     

    the server will always fail to login a newly created char the 1st time it is selected

     

    i can play normally after that so i dont think i got problems with lua files/client files

  9. hey guys, where to find src responsible for the change color in item name when you insert a card to a equip that has no "card slot" by itemslotcount or by @item2, rather please point me there,

  10. hey guys from pc.c

    case SP_HP_LOSS_RATE: // bonus2 bHPLossRate,n,t;
    		if(sd->state.lr_flag != 2) {
    			sd->hp_loss.value = type2;
    			sd->hp_loss.rate = val;
    		}
    		break;
    

    please make it so that the hp loss rate is within a specific time, lose n HP every t miliseconds in x miliseconds

    eg

     

    lose 500 hp every 1000 miliseconds in span of 3 minutes/ 180000 miliseconds, will be used for usable items and such

  11. the item name will have a corresponding color by its grade, supposed its uncommon, the item name will be green,
    i am thinking about putting an additional table in SQL item_db as `grade`, and 0/Null=common 1=uncommon, so on..

     

    we might be willing to pay, since i am not the sole owner of the server :)

     

    also idk if it this info will matter, but my client date is 2012-04-10a

     

     

    Edit: how can i reproduce the changecolor of bounditems, with just a check in what value it has on a table in sql

  12. bump

     

    Edit: Fixed it, for future references

     

    in modules/character/view.php

    FROM:
    
    $sql .= "LEFT OUTER JOIN {$server->charMapDatabase}.`global_reg_value` AS reg ON reg.char_id = ch.char_id AND reg.str = 'PC_DIE_COUNTER' ";
    
    TO:
    
    $sql .= "LEFT OUTER JOIN {$server->charMapDatabase}.`char_reg_num` AS reg ON reg.char_id = ch.char_id AND reg.key = 'PC_DIE_COUNTER' ";
    
×
×
  • Create New...