Jump to content

PsyOps

Members
  • Posts

    150
  • Joined

  • Last visited

Posts posted by PsyOps

  1. int32 pc_attendance_counter( map_session_data* sd ){
    	std::shared_ptr<s_attendance_period> period = pc_attendance_period();
    
    	// No running attendance period
    	if( period == nullptr ){
    		return 0;
    	}
    
    	// Get the counter for the current period
    	int counter = static_cast<int>(pc_readreg2( sd, ATTENDANCE_COUNT_VAR ));
    
    +    // Check if we have a remaining counter from a previous period
    +    if( counter >= 20 && !pc_attendance_rewarded_today(sd) ){
    +        pc_setreg2( sd, ATTENDANCE_COUNT_VAR, 0 );
    +        return 0;
    +    }
    	
    	// Check if we have a remaining counter from a previous period
    	if( counter > 0 && pc_readreg2( sd, ATTENDANCE_DATE_VAR ) < period->start ){
    		// Reset the counter to zero
    		pc_setreg2( sd, ATTENDANCE_COUNT_VAR, 0 );
    
    		return 0;
    	}
    
    	return 10 * counter + ( ( pc_attendance_rewarded_today(sd) ) ? 1 : 0 );
    }

    I think this is what @Sapito Sucio is trying to tell you to do.

    Though you have to really understand that attendance forces players to login/attend. On the days you want them active.

    It would be best if you just use a daily reward script for the purpose of resetting your daily rewards.

    • Love 1
  2. Quote

    if player was waiting the item to complete and server reboot or restart during that period, player will get stuck as the count time kinda stuck and it keep saying player to wait until the progress is done

    1. Create a $variable that uses gettimetick so that the server can fetch the data if the server reboots
    2. Use a timer that checks if the $variable gettimetick is already done

  3. Probably my question needs to be rephrased.

    Lets say that the value of the .RewardList = 3;

    Is there an existing script_command that will allow me to produce the value '2' as it includes reward 1 and 2.

    its kind of like getting the array size of the bitmask value.

    I hope i am asking it right but thanks @Emistry for the reply.

  4.  

    	//   1: Reward 1 | 2: Reward 2 | 4: Reward 3
    	// Sets Basic List of Rewards
    	.RewardList = 1|2|4;

    In this example, the variable .RewardList = 7;

    Is there a way to detect how many rewards are there on this variable using bitmask?
     

  5. On 5/21/2022 at 2:38 AM, Playtester said:

    Hmm this also works for me. I tried vs. Medusa and with Evil Druid Card or Medusa Card, I never get petrified.

    The code is also in place in status.cpp:

    		case SC_STONE:
    		case SC_STONEWAIT:
    		case SC_FREEZE:
    			// Undead are immune to Freeze/Stone
    			if (undead_flag && !(flag&SCSTART_NOAVOID))
    				return 0;
    			break;

    You could debug there and check why it doesn't reach the "return 0" part in your test case.

    For Medusa Card the could would be in status_get_sc_def:

    
    		// Item resistance (only applies to rate%)
    		if (sd) {
    			for (const auto &it : sd->reseff) {
    				if (it.id == type)
    					rate -= rate * it.val / 10000;
    			}
    			if (sd->sc.data[SC_COMMONSC_RESIST] && SC_COMMON_MIN <= type && type <= SC_COMMON_MAX)
    				rate -= rate*sd->sc.data[SC_COMMONSC_RESIST]->val1/100;
    		}

    Note: That if you set undead_detect_type to "race", then of course Evil Druid Card doesn't protect you from Stone (has nothing to do with mobs, though). Medusa card would work either way.

     

    Playtester is actually right about it but i think you need to check the git history about the updates for this. Or just download an updated trunk. They have solved this there.

  6. On 11/26/2022 at 10:13 PM, shefer said:

    Hello, everybody.

    I tried

    setmapflag "prontera", mf_nightenabled;

    It was tested, but it didn't work.

    Also, I plan to use it on my own custom maps, including instance.

    Only the specified map turns into night, and I don't know how to do that.

    it didn't work

    you can just do a 
    prontera mapflag nightenabled

    or use this

     

    -	script	DayNight	-1,{
    OnClock0600:
    	day;
    	end;
    OnInit:
    	// setting correct mode upon server start-up
    	if (gettime(DT_HOUR)>=6 && gettime(DT_HOUR)<23) end;
    OnClock0000:
    	night;
    	end;
    }

    + rep if helps 

  7. On 11/27/2022 at 1:53 AM, mateus92br said:

    Item 1:
    19803,rGT_04,[DROP]Item rG,4,40,,200,,,,1,0xFFFFFFFF,7,2,1024,,0,0,929,{ bonus2 bDropAddRace,RC_All,50; if((isequipped(19803) && isequipped(19804) && isequipped(19805))) { bonus bRestartFullRecover; } },{},{}

     

    Item 2:
    19804,rGT_05,[DROP]Item rG,5,20,,200,,,,0,0xFFFFFFFF,7,2,2048,,0,0,158,{ bonus2 bDropAddRace,RC_All,25; },{},{}

     

    Item 3:
    19805,rGT_06,[DROP]Itemr rG,5,20,,200,,,,0,0xFFFFFFFF,7,2,4096,,0,0,818,{ bonus2 bDropAddRace,RC_All,25; },{},{}

     

    This script is not giving drop bonus rate, does anyone know whats wrong?

     

    What do you mean it does not work? like it does not show on @rates?

  8. I don't think script will do this for you. You need to create changed at the source code level for this.

    As how i see this being done.

    You need to do the following:

    1. Create a new skill that is similar to Steal but as a passive.
    2. If you want to disable heal you need to add a status on the monster to disable it's heal or refer to skills already on the game that prohibits heal on monsters and such.

    Hope this helps!

  9. On 11/3/2022 at 2:20 PM, kalabasa said:

    i also added this onto my refine_db from renewal refine_db

        - Type: REFINE_COST_OVER10
          Price: 100000
          Material: 6223
        - Type: REFINE_COST_HD
          Price: 20000

        - Type: REFINE_COST_OVER10_HD
          Price: 100000
          Material: 6225

     

     

    How did you add these to your refine_db?

    Probably that is where the problem is.

    Or just try to check if the script will work if you change the materials required with more basic ones

    I'd prefer to check the refine_db 1st 

  10. I think scripts can't do the trick on this. A source modification is needed for this purpose. And you have to also create a database for this purpose.

    Depending on what you want to record for using items, it can be tedious to do. Also, i cannot imagine the amount of data you need to store for that purpose. XD

  11. Quote

    prontera,150,150,4    script    Job Changer    720,{
        
        if(BaseLevel < 230 || JobLevel < 70){mes "Im sorry but your level does not meet the requirements."; end;}
        if(inarray(.allowedjob,Class) <= 0 ){mes "Im sorry but your job does not meet the requirements."; end;}
        
        mes .npcname$;
        mes "Hi! "+strcharinfo(0)+", Im the Job Changer";
        mes "Each Player have free Instant Job each Account.";
        next;

    // -- Configuration Option
    set .npcname$,"[^4000C0Job Changer^000000]";
    set .InfoMenu,1;                    // Classes Informations Option [ 0 - Disable / 1 - Enable ]
    set .Trans2ndClassMenu,1;            // Transcendent Class Option [ 0 - Disable / 1 - Enable ]
    set .Allskills,0;                    // Complete Skills Option [ 0 - Disable / 1 - Enable ]
    setarray .allowedjob[0],4008,4009,4010,4011,4012,4013,4015,4016,4017,4018,4019,4021,4020;
    Main_Menu:
        mes .npcname$;
        mes "I am the Job Changer...";
        next;
        switch(select(( .InfoMenu == 0 )?"":"^4EEE94Classes Information^000000",
                    ( .Trans2ndClassMenu == 0 )?"":"^0000FFTranscendent Job Classes^000000")) {
                            Case 2:    goto Classes_info;
                            Case 3:    goto TransSecondJob_Classes;
                            Case 4:
                            if ( .Based == 0 ){
                                set #ClassHelper,1;
                            }
                            if ( .Based == 1 ){
                                set ClassHelper,1;
                            }
                            close;
                    }

    TransSecondJob_Classes:
        mes .npcname$;
        mes "So, i give you a chance now. Which Classes will you choose to join ? Tell me your desired Classes.";
        next;
        switch(select("^0000FFLord Knight^000000",
                    "^0000FFHigh Priest^000000",
                    "^0000FFHigh Wizard^000000",
                    "^0000FFWhitesmith^000000",
                    "^0000FFSniper^000000",
                    "^0000FFAssassin Cross^000000",
                    "^0000FFPaladin^000000",
                    "^0000FFChampion^000000",
                    "^0000FFProfessor^000000",
                    "^0000FFStalker^000000",
                    "^0000FFCreator^000000",
                    ( Sex == 0 )?"":"^0000FFGypsy/Clown^000000",
                    ( Sex == 1 )?"":"^0000FFClowm/Gypsy^000000",
                    "^FF0000Back^000000")) {

                // --- callsub Job_Changing,<JOB>,<BaseLv>,<JobLv>,<Skill>,<Announce>;

                      Case 1:
                        callsub Job_Changing,4008,230,120,127,"Self";
                Case 2:
                        callsub Job_Changing,4009,230,120,127,"Self";
                Case 3:
                        callsub Job_Changing,4010,230,120,127,"Self";
                Case 4:
                        callsub Job_Changing,4011,230,120,127,"Self";
                Case 5:
                        callsub Job_Changing,4012,230,120,127,"Self";
                Case 6:
                        callsub Job_Changing,4013,230,120,127,"Self";
                Case 7:
                        callsub Job_Changing,4015,230,120,127,"Self";
                Case 8:
                        callsub Job_Changing,4016,230,120,127,"Self";
                Case 9:
                        callsub Job_Changing,4017,230,120,127,"Self";
                Case 10:
                        callsub Job_Changing,4018,230,120,127,"Self";
                Case 11:
                        callsub Job_Changing,4019,230,120,127,"Self";
                Case 12:
                        callsub Job_Changing,4021,230,120,127,"Self";
                Case 13:
                        callsub Job_Changing,4020,230,120,127,"Self";
                Case 14:    goto Main_Menu;
            }

    Job_Changing:
            if(countitem(.cata) < 1){
                mes "You dont have the required item for this service.";
                end;
            }
            delitem .cata,1;
            mes .npcname$;
            mes "You are now a part of ^FF0000"+jobname(getarg(0))+"^000000.";
            jobchange getarg(0);
            set BaseLevel,getarg(1);
       set JobLevel,getarg(2);
            ResetSkill;
            ResetStatus;
       set SkillPoint,getarg(3);
            if ( .Allskills == 1 ){
            atcommand "@allskills";
       set SkillPoint,0;
            }
       percentheal 100,100;
            if ( .Based == 0 ){
                set #ClassHelper,1;
            }
            if ( .Based == 1 ){
                set ClassHelper,1;
            }
            specialeffect2 445;
            callfunc "F_GetPlatinumSkills";
            sleep2 1000;
            warp "prontera",116,72;
    close;

    OnInit:
        waitingroom "Job Changer",0;
    end;
    }
     

    PS. I don't own this script but it is an instant job changer script.

    You can modify it as needed. YOu might need to also check the amount of skills it sets.

    • Upvote 1
×
×
  • Create New...