Jump to content

Haziel

Content Moderator
  • Posts

    639
  • Joined

  • Last visited

  • Days Won

    89

Posts posted by Haziel

  1. Hmm, try this:

    OnPCLoginEvent:
    	setarray .@mac_list$[0],"bc:ee:7b:57:b4:2","bc:ee:7b:58:b4:2";
    	query_sql("SELECT `last_mac` FROM `login` WHERE `account_id` = '" + getcharid(3) + "'", .@mac_ip$); 
     
    	for (set .@i, 0; .@i < getarraysize(.@mac_list$); set .@i, .@i + 1){
    		if (.@mac_ip$ == .@mac_list$[.@i]){
    			atcommand "@jail " + strcharinfo(0); 
    			break;
    		}
    	}
    	end;
    
  2. Voices are cool, I'm supposing you made a mode server-side for it, right?
    It would be nice if the player could be able to turn it on and off.
    Also, you could make your mod read the file names from an array variable stored on character to see what files to play, It could open possibilities of choosing the voice of your character.

    Also, about the jump, the 'punch sound' seems just not right placed.

  3. It jumps towards the direction it's facing?
    So, could be a Custom Skill and you could assign space as a hotkey.

    By the way, good job.
    I would replace the sparkle effect for some steam or smoke.

    It's a nice customization, could be useful for events or plataform-game-like custom events.

  4. Actually, It seems to be a bug of the OnSellItem.

    Find:

    	if (!.@card_id) {
    		mes "  ^777777(none)^000000";
    		emotion e_swt;
    		close;
    	}
    

    Change:

    	if (!.@card_id) {
    		mes "  ^777777(none)^000000";
    		emotion e_swt;
    		next;
    		close;
    	}
    

    With a next it'll works.

  5. This is the THIRD thread you open with the same subject.
    You were already being helped here, and also opened this after.

    And now, a third one, this is NOT the correct way to ask for help. -_-
    By the way... *sigh*

    To set it to 10 points, find:

    	setarray .Points[0],1,5;	// Points per <normal card>,<MVP card>
    

    And change to:
     

    	setarray .Points[0],1,10;	// Points per <normal card>,<MVP card>
    

    Done.

    As for it to only accept MVP Cards, find:

    	for(set .@i,0; .@i<getarraysize(@sold_nameid); set .@i,.@i+1)
    		if (@sold_nameid[.@i] > 4000 && @sold_nameid[.@i] < 4700) {
    			if (.Level) {
    				query_sql("SELECT `LV` FROM `mob_db` WHERE `DropCardid` = "+@sold_nameid[.@i],.@lv);
    				if (.@lv < .Level) {
    					dispbottom getitemname(@sold_nameid[.@i])+" is under the minimum level.";
    					continue;
    				}
    			}
    			set .@card_id[getarraysize(.@card_id)], @sold_nameid[.@i];
    			set .@card_amt[getarraysize(.@card_amt)], @sold_quantity[.@i];
    			set .@mvp, compare(.MVP$,""+@sold_nameid[.@i]);
    			mes ((.@mvp)?"  ^FF0000":"  ^777777")+@sold_quantity[.@i]+"x "+getitemname(@sold_nameid[.@i])+"^000000";
    			set .@card_total, .@card_total+(@sold_quantity[.@i]*((.@mvp)?.Points[1]:.Points[0]));
    		}
    

    And change to:
     

    	for(set .@i,0; .@i<getarraysize(@sold_nameid); set .@i,.@i+1)
    		if (@sold_nameid[.@i] > 4000 && @sold_nameid[.@i] < 4700) {
    			set .@mvp, compare(.MVP$,""+@sold_nameid[.@i]);
    			if (!.@mvp) {
    				continue;
    			}
    			set .@card_id[getarraysize(.@card_id)], @sold_nameid[.@i];
    			set .@card_amt[getarraysize(.@card_amt)], @sold_quantity[.@i];
    			mes ((.@mvp)?"  ^FF0000":"  ^777777")+@sold_quantity[.@i]+"x "+getitemname(@sold_nameid[.@i])+"^000000";
    			set .@card_total, .@card_total+(@sold_quantity[.@i]*((.@mvp)?.Points[1]:.Points[0]));
    		}
    

    It may works, I'm not entirely sure, it's untested.

    • Upvote 1
  6. Can you belive that the problem in your code is that:

    2941,MM_EVIL_SHADOW3 , Evil Shadow‚Evil Shadow,142,153400,1,8863,6736,1,2795,4062,89,44,120,87,66,33,106,27,10,12,2,6,47,0x37B5,150,432,432,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    2942,MM_EVIL_FANATICS , Evil Fanatic‚Evil Believer,151,8256000,1,1008650,988954,1,2949,4289,166,103,118,72,40,55,213,30,10,12,2,6,67,0x37B5,150,768,768,576,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

    Commas, weren't real commas? At least, were not being read as commas.

  7. For that matter, you'll need to do a query_sql, otherwise, it'll only works when the character is online.

    set .@accid, "SELECT `account_id` FROM `char` WHERE `name` =" + @playersearchname;
    set .@wp, "SELECT `value` FROM `acc_reg_num` WHERE `key` = "#warningpoints" AND account_id = " + .@accid;
    
    mes .@wp + " points.";
    
  8. First, you need some to do some investigation on the lines it said the error is on (4853 and 20748), but, my guess is that your old source is using a function (probably pc_readregistry) in a old way.
    You should compare with any other fragment which use the same functions to see how it works nowadays.

  9. As I could search about, Flee is only Base Level + AGI (on Pre-Renewal), while the Hit is Base Level + DEX.
    To calculate the hit, the formula seems to be:

     Dodge Rate(%) = 100% - (Attacker Hit + 80 - Defenders Flee)
    

    It means, for your monster, yes, It has Flee 80.

    Dodge Rate(%) = 100% - (Attacker Hit + (Base Level + AGI) - Defenders Flee)
    Dodge Rate(%) = 100% - (Attacker Hit + 80 - Defenders Flee)
    DR = 100 - (Attacker Hit + 80 - 80)
    DR = 100 - Attacker Hit
    

    With 80 of Flee, the Player needs 100 of Hit so the monster be unable to dodge.
    (Again, these are Pre-Renewal mechanics!)

  10. As said in doc/script_commands.txt:

    *set <variable>,<expression>{,<char_id>};
    *set(<variable>,<expression>{,<char id>})
    
    This command will set a variable to the value that the expression results in. 
    Variables may either be set through this command or directly, much like any
    other programming language (refer to the "Assigning variables" section).
    
    This is the most basic script command and is used a lot whenever you try to do 
    anything more advanced than just printing text into a message box.
    
        set @x,100;
        
    will make @x equal 100.
    
        set @x,1+5/8+9;
        
    will compute 1+5/8+9 (which is, surprisingly, 10 - remember, all numbers are 
    integer in this language) and make @x equal it.
    
    Returns the variable reference (since trunk r12870).
    

    You can add a target character at the end of set, but you need it's CharID:

    You're using the function set incorrectly, It's:

    set #warningpoints, #warningpoints + 1;
    
    // It means, set a new value to variable #warningpoints.
    // The new value is the current value of #warningpoints plus one.
    

    Now, let's target it to a player.
    Since you need to get the Char ID and you only have the Char Name, we need to convert it, using getcharid():

    *getcharid(<type>{,"<character name>"})
    
    This function will return a unique ID number of the invoking character, or, if a 
    character name is specified, of that player.
    
    Type is the kind of associated ID number required:
    
     0 - Character ID
     1 - Party ID
     2 - Guild ID
     3 - Account ID
     4 - Battle Ground ID
    
    For most purposes other than printing it, a number is better to have than a name 
    (people do horrifying things to their character names).
    
    If the character is not in a party or not in a guild, the function will return 0 
    if guild or party number is requested. If a name is specified and the character 
    is not found, 0 is returned.
    
    If getcharid(0) returns a zero, the script got called not by a character and 
    doesn't have an attached RID. Note that this will cause the map server to
    print "player not attached!" error messages, so it is preferred to use
    "playerattached" to check for the character attached to the script.
    
    if (getcharid(2) == 0)
    	mes "Only members of a guild are allowed here!";
    

    Since you got the name via input:

    getcharid(0, $@warnplayer$)
    

    Let's attach it to set:

    set #warningpoints, #warningpoints + 1, getcharid(0, $@warnplayer$);
    
    // It means, set a new value for #warningpoints.
    // The new value is the current value of #warningpoints plus one.
    // Set it to the Char ID of the given Char Name via the variable $@warnplayer$ set by input.
    

    A simple look in doc/script_commands.txt could lead you to the solution...

    • Upvote 1
×
×
  • Create New...