Jump to content

AllHailCarl

Members
  • Posts

    5
  • Joined

  • Last visited

Posts posted by AllHailCarl

  1. //===== Athena Script =====================================
    //= Achievement System
    //===== By ================================================
    //= Loki1991
    //===== Version ===========================================
    //= 1.0 - First release
    //===== Description =======================================
    //= A full working Achivement System without any source edit!
    //= A well guide about this script can be found in rathena!
    //=========================================================
    -	script	achievementSystem	-1,{
        OnInit:
            //config start
            set $a_cache_expire,120;
            set $a_effect_id,908;
            set $a_cutin_delay,8000;
            //config end. Don't change anything below if you don't know what ya doing
            set $a_cached,0;
        end;
        
        //Cache achivements for .@cache_expire secounds
        OnPCLoginEvent:
            if(gettimetick(2)-$a_cached <= $a_cache_expire && $a_cached != 0) goto InventoryChecker;
            query_sql("SELECT * FROM achievement",.@id,.@name$,.@desc$,.@mode,.@deleted$,.@cutin$,.@points,.@single_val,.@val1,.@val1amount,.@val2,.@val2amount,.@val3,.@val3amount,.@val4,.@val4amount,.@val5,.@val5amount,.@val6,.@val6amount,.@val7,.@val7amount,.@val8,.@val8amount,.@val9,.@val9amount); 
            set .@i,0;
            set $a_mode_other,0;
            set $a_mode_item,0;
            set $a_mode_mob,0;
            set $a_mode_mvp,0;
            set $a_mode_pvp,0;
            set $a_mode_lvl,0;
            set $a_mode_jlvl,0;  
            while(.@i < getarraysize(.@id)) {
                setd("$a_name_"+.@id[.@i]+"$",.@name$[.@i]);
    	        setd("$a_desc_"+.@id[.@i]+"$",.@desc$[.@i]);
                setd("$a_mode_"+.@id[.@i],.@mode[.@i]); 
                setd("$a_del_"+.@id[.@i]+"$",.@deleted$[.@i]); 
                setd("$a_cutin_"+.@id[.@i]+"$",.@cutin$[.@i]); 
                setd("$a_points_"+.@id[.@i],.@points[.@i]);
                setd("$a_val1_"+.@id[.@i],.@val1[.@i]); 
                setd("$a_val1a_"+.@id[.@i],.@val1amount[.@i]); 
                setd("$a_val2_"+.@id[.@i],.@val2[.@i]); 
                setd("$a_val2a_"+.@id[.@i],.@val2amount[.@i]);
                setd("$a_val3_"+.@id[.@i],.@val3[.@i]); 
                setd("$a_val3a_"+.@id[.@i],.@val3amount[.@i]);
                setd("$a_val4_"+.@id[.@i],.@val4[.@i]); 
                setd("$a_val4a_"+.@id[.@i],.@val4amount[.@i]);
                setd("$a_val5_"+.@id[.@i],.@val5[.@i]); 
                setd("$a_val5a_"+.@id[.@i],.@val5amount[.@i]);
                setd("$a_val6_"+.@id[.@i],.@val6[.@i]); 
                setd("$a_val6a_"+.@id[.@i],.@val6amount[.@i]);
                setd("$a_val7_"+.@id[.@i],.@val7[.@i]); 
                setd("$a_val7a_"+.@id[.@i],.@val7amount[.@i]);
                setd("$a_val8_"+.@id[.@i],.@val8[.@i]); 
                setd("$a_val8a_"+.@id[.@i],.@val8amount[.@i]);
                setd("$a_val9_"+.@id[.@i],.@val9[.@i]); 
                setd("$a_val9a_"+.@id[.@i],.@val9amount[.@i]);
                setd("$a_sval_"+.@id[.@i]+"$",.@single_val[.@i]);
    
    	    
                switch(.@mode[.@i]) {
    		        default: set $a_mode_other,$a_mode_other+1; break;
                    case 1: set $a_mode_item,$a_mode_item+1; break;
                    case 2: set $a_mode_mob,$a_mode_mob+1; break; 
                    case 3: set $a_mode_mvp,$a_mode_mvp+1; break; 
                    case 4: set $a_mode_pvp,$a_mode_pvp+1; break; 
                    case 5: set $a_mode_lvl,$a_mode_lvl+1; break; 
                    case 6: set $a_mode_jlvl,$a_mode_jlvl+1; break;  
                }
                set .@i,.@i+1;
            }
            set $achive_amount, .@i;
            set $a_cached,gettimetick(2); 
        end;
        
        //Monsterkills (mode mob,mvp) 
        OnNPCKillEvent: //killedrid
            if($a_mode_mob>0 || $a_mode_mvp>0) {  
                set .@i,0;
                while(.@i < $achive_amount) {
                    set .@i,.@i+1;
                    if((getd("$a_mode_"+.@i)!=2 && getd("$a_mode_"+.@i)!=3) || getd("a_done_"+.@i)==1 || getd("$a_del_"+.@i+"$")=="y") continue;
                    if(getd("$a_mode_"+.@i)==2 && $a_mode_mob > 0 && achieve_mob < $a_mode_mob) {
                        set .@valCount,0;
                        set .@ok,0;
                        while(.@valCount < 9) {
                            set .@valCount,.@valCount+1; 
                            if(getd("$a_val"+.@valCount+"_"+.@i)==0 || getd("$a_val"+.@valCount+"a_"+.@i)==0) { set .@ok,.@ok+1; continue; } //Skip trash or empty
                            if(killedrid == getd("$a_val"+.@valCount+"_"+.@i)) setd("a_state_"+.@i+"_"+.@valCount,getd("a_state_"+.@i+"_"+.@valCount) + 1);
                            if(getd("a_state_"+.@i+"_"+.@valCount) == getd("$a_val"+.@valCount+"a_"+.@i)) set .@ok,.@ok+1;
                        }
                        if(.@ok == 9) callfunc "achieve",.@i;
                    } else if(getd("$a_mode_"+.@i)==3 && $a_mode_mvp > 0 && achieve_mvp < $a_mode_mvp) {
                        switch(killedrid) {
                            default:
                            break;
                            case 1511: case 1647: case 1785: case 1630: case 1929: case 1039: case 1874: case 1272: case 1719: case 1046:
                            case 1389: case 1112: case 1115: case 1957: case 1418: case 1871: case 1252: case 1768: case 1086: case 1649: case 1651:
                            case 1832: case 1492: case 1734: case 1251: case 1779: case 1688: case 1646: case 1373: case 1147: case 1059: case 1150:
                            case 1956: case 1087: case 1190: case 1038: case 1157: case 1159: case 1502: case 1623: case 1650: case 1583: case 1708:
                            case 1312: case 1751: case 1685: case 1648: case 1917: case 1658: case 1885: case 2068: case 2238: case 2240: case 2236: 
                            case 2241: case 1980: case 2156: case 2022: case 2235: case 2237: case 2087: case 2165: case 2239: 
                            setd("a_state_"+.@i,getd("a_state_"+.@i) + 1);
                            if(getd("a_state_"+.@i) >= getd("$a_sval_"+.@i)) callfunc "achieve",.@i; 
                            break;
                        }
                    }
                }
            }
            goto InventoryChecker;  
        end;
           
        //PvP (mode pvp)        
        OnPCKillEvent:
            if($a_mode_pvp==0 || achieve_pvp==$a_mode_pvp) end;
            set pvp_counter,pvp_counter+1;
            set .@i,0;
            while(.@i < $achive_amount) {
                set .@i,.@i+1;
                if(getd("$a_mode_"+.@i)!=4 || getd("a_done_"+.@i)==1 || getd("$a_del_"+.@i+"$")=="y") continue;
                if(pvp_counter >= getd("$a_sval_"+.@i)) callfunc "achieve",.@i;
            }
        end;
        
        //LevelUP (mode lvl)
        OnPcBaseLvUpEvent:
            if($a_mode_lvl==0 || achieve_lvl==$a_mode_lvl) end; 
            set .@i,0;
            while(.@i < $achive_amount) {
    		setd("a_done_"+.@i,0);
                set .@i,.@i+1;
                if(getd("$a_mode_"+.@i) !=5 || getd("a_done_"+.@i)==1 || getd("$a_del_"+.@i+"$")=="y") continue;
    	    dispbottom getd("$a_sval_"+.@i);
                if(BaseLevel >= getd("$a_sval_"+.@i)) callfunc "achieve",.@i;
            }
        end;
        
        //JobLevelUP (mode jlvl)
        OnPcJobLvUpEvent:
            if($a_mode_jlvl==0 || achieve_jlvl==$a_mode_jlvl) end; 
            set .@i,0;
            while(.@i < $achive_amount) {
                set .@i,.@i+1;
                if(getd("$a_mode_"+.@i)!=6 || getd("a_done_"+.@i)==1 || getd("$a_del_"+.@i+"$")=="y") continue;
                if(JobLevel >= getd("$a_sval_"+.@i)) callfunc "achieve",.@i;
            }
        end;
        
        
        //Get X Amount of Items in your inventar (mode item)
        //will be called after mob kill or map change
        InventoryChecker:
            if($a_mode_item==0 || achieve_item==$a_mode_item) end;
            set .@i,0;
            while(.@i < $achive_amount) {
                set .@i,.@i+1;
                if(getd("$a_mode_"+.@i) !=1 || getd("a_done_"+.@i)==1 || getd("$a_del_"+.@i+"$")=="y") continue;
                set .@valCount,0;
                set .@ok,0;
                while(.@valCount < 9) {
                    set .@valCount,.@valCount+1; 
                    if(getd("$a_val"+.@valCount+"_"+.@i)==0 || getd("$a_val"+.@valCount+"a_"+.@i)==0) { set .@ok,.@ok+1; continue; } //Skip trash or empty
                    if(countitem(getd("$a_val"+.@valCount+"_"+.@i)) >= getd("$a_val"+.@valCount+"a_"+.@i)) set .@ok,.@ok+1;
                }
                if(.@ok == 9) callfunc "achieve",.@i;
            }
        end;
    
        //special (mode special)
        //No script.  Just place 'callfunc "achieve",<<yourAchievementId>>;' anywhere in your script (below).
    }
    
    
    function	script	achieve	{
        set .@achieveId,getarg(0);
        if(.@achieveId <= 0) end; //Param missing. WTF
        
        query_sql("SELECT id FROM achievement_log WHERE ach_id='"+.@achieveId+"' AND char_id='"+.@achieveId+"'",.@id);
        if(.@id>0) { setd("a_done_"+.@achieveId,1); end; } //User already got this achievement... Strange
        
        //Everything looks fine, lets do it
        query_sql("INSERT INTO achievement_log(ach_id,char_id,crdate) VALUES('"+.@achieveId+"','"+getcharid(0)+"','"+gettimetick(2)+"')");
        
        switch(getd("$a_mode_"+.@achieveId)) {
            default: set achieve_other,achieve_other+1; break;
    	    case 1: set achieve_item,achieve_item+1; break;
    	    case 2: set achieve_mob,achieve_mob+1; break;
            case 3: set achieve_mvp,achieve_mvp+1; break;
    	    case 4: set achieve_pvp,achieve_pvp+1; break;
            case 5: set achieve_lvl,achieve_lvl+1; break;
            case 6: set achieve_jlvl,achieve_jlvl+1; break;    
        }
        
        if($a_effect_id>0) {
            specialeffect2 $a_effect_id; 
        }
        announce strcharinfo(0)+" got the achievement ["+getd("$a_name_"+.@achieveId+"$")+"]!",0;
        setd("a_done_"+.@achieveId,1);
        query_sql("UPDATE `char` SET achievement_points=achievement_points+"+getd("$a_points_"+.@achieveId)+" WHERE char_id="+getcharid(0)); 
        if(getd("$a_cutin_"+.@achieveId+"$") != "") {
            cutin getd("$a_cutin_"+.@achieveId+"$"),1;
            sleep2 $a_cutin_delay;
            cutin "",255;
        }
        end;
    }
    
    function	script	getMonsterNameById	{
        if(getarg(0)<=0) end;
        query_sql("SELECT iName FROM mob_db WHERE ID="+getarg(0)+" UNION SELECT iName FROM mob_db2 WHERE ID="+getarg(0),.@mobName$);   
        return .@mobName$;
    }
    
    
    
    
    
    prontera,164,172,4	script	Achievement Bob	899,{  
        //Bob Config Params 
        set .@name$,"[^FF0000Achiement Bob^000000]";
        set .@cutin$,"sc_vicente01";
        set .@GmMenuAtWhichLevel,40;
            set .@text_gmMenu$,"Hi there GM. Which kind of menu do you want to see?"; 
            set .@text_startInfo$,"I have all information about the achievements which are activated on this server.";
            set .@text_category$,"Please choose your category.";
            set .@text_whichAch$,"For which achievement do you want to get details?"; 
            set .@text_points$,"You have this achievement points:"; 
            set .@text_close$,"I'm not interested."; 
            set .@text_worth$,"Worth:";
            set .@text_getPoints$,"points"; 
            set .@text_bye$,"Have a nice day.";  
            set .@text_kill$,"Kill";
            set .@text_mvp$,"any kind of MvP";
            set .@text_pvp$,"any other player";  
            set .@text_lvl$,"Reach base level";
            set .@text_jlvl$,"Reach job level";
            set .@text_mode_item$,"Item achievements"; 
            set .@text_mode_mob$,"Monster achievements";
            set .@text_mode_mvp$,"MvP achievements";
            set .@text_mode_pvp$,"PvP achievements";
            set .@text_mode_lvl$,"Base Level achievements";
            set .@text_mode_jlvl$,"Job Level achievements";
            set .@text_mode_other$,"Other Achievements";
        query_sql("SELECT achievement_points FROM `char` WHERE char_id="+getcharid(0),.@points); 
        
       
        //Check if a gm has set the player to a force action
        query_sql("SELECT ach_id, mode FROM achievement_force WHERE done='n' AND char_id="+getcharid(0),.@ach_id,.@mode$);
        if(getarraysize(.@ach_id) > 0) {
            set .@i,0;
            while(.@i < getarraysize(.@ach_id)) {
                //Clear log before there is to much trash inside
                query_sql("SELECT id FROM achievement_log WHERE ach_id="+.@ach_id[.@i]+" AND char_id="+getcharid(0),.@log_id);
                query_sql("UPDATE achievement_force SET done='y' WHERE done='n' AND ach_id="+.@ach_id[.@i]+" AND char_id="+getcharid(0)); 
                if(.@log_id > 0) query_sql("DELETE FROM achievement_log WHERE id="+.@log_id); 
                if(.@mode$=="add") {
                     if(getd("a_done_"+.@ach_id[.@i]) == 1) {
                        query_sql("UPDATE `char` SET achievement_points=achievement_points-"+getd("$a_points_"+.@ach_id[.@i])+" WHERE char_id="+getcharid(0));
                     }
                     setd("a_done_"+.@ach_id[.@i],0);  
                     callfunc "achieve",.@ach_id[.@i];
                } else {
                     query_sql("SELECT mode FROM achievement WHERE id="+.@ach_id[.@i],.@mode);
                     if(.@mode == 2) {
                        set .@j,0;
                        while(.@j < 9) {
                            set .@j,.@j+1;
                            setd("a_state_"+.@ach_id[.@i]+"_"+.@j,0);
                        } 
                     } else if(.@mode == 3) {
                        setd("a_state_"+.@ach_id[.@i],0);
                     }
                     if(getd("a_done_"+.@ach_id[.@i]) == 1) { 
                        query_sql("UPDATE `char` SET achievement_points=achievement_points-"+getd("$a_points_"+.@ach_id[.@i])+" WHERE char_id="+getcharid(0));  
                     }
                     setd("a_done_"+.@ach_id[.@i],0);
                     dispbottom "Achievement "+getd("$a_name_"+.@ach_id[.@i]+"$")+" was removed!";
                }
                set .@i,.@i+1;
            } 
        }
        //Start the true script
        cutin .@cutin$,2;
        //If a gm talks to this npc, call the gm menu, else the normal script
        if(getgmlevel() >= .@GmMenuAtWhichLevel) {
            mes .@name$;
            mes .@text_gmMenu$;
            next;
            menu "GM Menu",L_GM,"Player Menu",-,.@text_close$,L_end;
        }
        
        mes .@name$; 
        mes .@text_startInfo$;
        next;
        mes .@name$;
        mes .@text_points$+" ^00AA00"+.@points+"^000000";
        mes .@text_category$;
        next;
        set .@i,0;
        if($a_mode_other > 0) { set .@menu$,.@menu$+.@text_mode_other$+":"; setarray .@tempAr1[.@i],0; set .@i,.@i+1; }
        if($a_mode_item > 0) { set .@menu$,.@menu$+.@text_mode_item$+":"; setarray .@tempAr1[.@i],1; set .@i,.@i+1; }  
        if($a_mode_mob > 0) { set .@menu$,.@menu$+.@text_mode_mob$+":"; setarray .@tempAr1[.@i],2; set .@i,.@i+1; }  
        if($a_mode_mvp > 0) { set .@menu$,.@menu$+.@text_mode_mvp$+":"; setarray .@tempAr1[.@i],3; set .@i,.@i+1; }  
        if($a_mode_pvp > 0) { set .@menu$,.@menu$+.@text_mode_pvp$+":"; setarray .@tempAr1[.@i],4; set .@i,.@i+1; }  
        if($a_mode_lvl > 0) { set .@menu$,.@menu$+.@text_mode_lvl$+":"; setarray .@tempAr1[.@i],5; set .@i,.@i+1; }  
        if($a_mode_jlvl > 0) { set .@menu$,.@menu$+.@text_mode_jlvl$+":"; setarray .@tempAr1[.@i],6; set .@i,.@i+1; }  
        if(.@i == 0) { mes .@name$;  mes "Woot. No Achivements found."; cutin "",255; close; }
        set .@menu$,.@menu$+.@text_close$;
        set .@choose,select(.@menu$);
        set .@choose,.@choose-1;
        if( .@choose == .@i) goto L_end;
        next;
        mes .@name$;
        mes .@text_whichAch$;
        set .@i,0;
        set .@j,0;
        set .@menu$,"";
        while(.@i < $achive_amount) {
            set .@i,.@i+1;
            if(getd("$a_mode_"+.@i) != .@tempAr1[.@choose] || getd("$a_del_"+.@i+"$")=="y") continue;  
            if(getd("a_done_"+.@i) == 1) {
                set .@menu$,.@menu$+"^00AA00"; 
            } else {
                set .@menu$,.@menu$+"^FF0000";
            }
            set .@menu$,.@menu$+getd("$a_name_"+.@i+"$")+" ["+getd("$a_points_"+.@i)+"]^000000"+":";
            setarray .@tempAr2[.@j],.@i;
            set .@j,.@j+1;
        }
        set .@menu$,.@menu$+.@text_close$;
        set .@choose2,select(.@menu$);
        set .@choose2,.@choose2-1;
        if( .@choose2 == .@j) { next; goto L_end; }
        next;
            mes .@name$; 
        if(getd("$a_desc_"+.@tempAr2[.@choose2]+"$") != "") {
            mes getd("$a_desc_"+.@tempAr2[.@choose2]+"$");
            next;
            mes .@name$; 
        }
        mes "^0000AA"+.@text_worth$+" "+getd("$a_points_"+.@tempAr2[.@choose2])+" "+.@text_getPoints$+"^000000"; 
        if(.@tempAr1[.@choose] > 0) {
            if(.@tempAr1[.@choose] == 1 || .@tempAr1[.@choose] == 2) {
                set .@i,0;
                while(.@i < 9) {
                    set .@i,.@i+1;
                    if(getd("$a_val"+.@i+"_"+.@tempAr2[.@choose2])>0 && getd("$a_val"+.@i+"a_"+.@tempAr2[.@choose2])>0) {
                        if(.@tempAr1[.@choose] == 1) {
                             mes "^0000AA"+getitemname(getd("$a_val"+.@i+"_"+.@tempAr2[.@choose2]))+" ["+countitem(getd("$a_val"+.@i+"_"+.@tempAr2[.@choose2]))+"/"+getd("$a_val"+.@i+"a_"+.@tempAr2[.@choose2])+"]^000000"; 
                        } else {              
                             mes "^0000AA"+.@text_kill$+" "+callfunc("getMonsterNameById",getd("$a_val"+.@i+"_"+.@tempAr2[.@choose2]))+" ["+getd("a_state_"+.@tempAr2[.@choose2]+"_"+.@i)+"/"+getd("$a_val"+.@i+"a_"+.@tempAr2[.@choose2])+"]^000000"; 
                        }
                    } 
                }
            } else {
                if(.@tempAr1[.@choose] == 3) mes "^0000AA"+.@text_kill$+" "+getd("$a_sval_"+.@tempAr2[.@choose2])+" "+.@text_mvp$+" ["+getd("a_state_"+.@tempAr2[.@choose2])+"/"+getd("$a_sval_"+.@tempAr2[.@choose2])+"]^000000";
                if(.@tempAr1[.@choose] == 4) mes "^0000AA"+.@text_kill$+" "+getd("$a_sval_"+.@tempAr2[.@choose2])+" "+.@text_pvp$+" ["+pvp_counter+"/"+getd("$a_sval_"+.@tempAr2[.@choose2])+"]^000000";
                if(.@tempAr1[.@choose] == 5) mes "^0000AA"+.@text_lvl$+" "+getd("$a_sval_"+.@tempAr2[.@choose2])+" ["+BaseLevel+"/"+getd("$a_sval_"+.@tempAr2[.@choose2])+"]^000000";
                if(.@tempAr1[.@choose] == 6) mes "^0000AA"+.@text_jlvl$+" "+getd("$a_sval_"+.@tempAr2[.@choose2])+" ["+JobLevel+"/"+getd("$a_sval_"+.@tempAr2[.@choose2])+"]^000000";
            }
        }
        next;
        goto L_end;
        
        
        
        L_GM:
        mes .@name$;
        mes .@text_category$;
        next;
        switch(select("Force Player Achievement","Enable/Disable Achievements","Clear cache","Compare log with achivement points",.@text_close$)) {
          case 1:
            mes .@name$;
            mes "If the player you write here talks to this npc, you can set some actions which will happen, for example get a achivement or revoke a achivement.";
            mes "What is the name of the player?";
            next;
            input .@char_name$;
            next;
            mes .@name$;
            query_sql("SELECT char_id FROM `char` WHERE name='"+.@char_name$+"'",.@char_id);
            if(.@char_id > 0) {
                mes "Which achivement?"; 
                next;     
                set .@i,0; 
                set .@j,0;
                set .@menu$,"";
                while(.@i < $achive_amount) {
                    set .@i,.@i+1;
                    if(getd("$a_del_"+.@i+"$") == "y") continue;
                    set .@menu$,.@menu$+getd("$a_name_"+.@i+"$")+":";
                    set .@j,.@j+1;
                    setarray .@tempAr1[.@j],.@i;
                }
                set .@menu$,.@menu$+.@text_close$;
                set .@choose,select(.@menu$);
                if( .@choose == .@j+1) goto L_GM;
                next;
                mes .@name$;
                mes "Adding or removing this achivement?";
                next;
                switch(select("Add","Remove",.@text_close$)) {
                    case 1: set .@mode$,"add"; break;
                    case 2: set .@mode$,"del"; break; 
                    case 3: goto L_GM; break; 
                }
                next;
                mes .@name$; 
                mes "Player: "+.@char_name$;
                mes "Achivement: "+getd("$a_name_"+.@tempAr1[.@choose]+"$")+" (id="+.@tempAr1[.@choose]+")";
                mes "Mode: "+.@mode$;
                mes "Are you sure?";
                next;
                menu "Yes!",-,"No",L_GM;
                mes .@name$;
                query_sql("INSERT INTO achievement_force(ach_id,char_id,mode) VALUES('"+.@tempAr1[.@choose]+"','"+.@char_id+"','"+.@mode$+"')");
                if(.@mode$=="del") {
                    switch(getd("$a_mode_"+.@tempAr1[.@choose])) {
                        default: set achieve_other,achieve_other-1; break;
                        case 1: set achieve_item,achieve_item-1; break;
                        case 2: set achieve_mob,achieve_mob-1; break;
                        case 3: set achieve_mvp,achieve_mvp-1; break;
                        case 4: set achieve_pvp,achieve_pvp-1; break;
                        case 5: set achieve_lvl,achieve_lvl-1; break;
                        case 6: set achieve_jlvl,achieve_jlvl-1; break;    
                    }
                }
                mes "Action added! "+.@char_name$+" should talk to me now!";
                next;
            } else {
                mes "Player not found!";
                next;
            }
            goto L_GM;
          break;
          
          case 2:
            mes .@name$;
            mes "Red=disabled, green=enabled";
            mes "Be carefull on your achivements you added without triggers (mode 0). If you don't check there if the achivement is deleted, it may cause problems";
            set .@i,0; 
            set .@menu$,"";
            while(.@i < $achive_amount) {
                set .@i,.@i+1;
                if(getd("$a_del_"+.@i+"$") == "n") {
                    set .@menu$,.@menu$+"^00AA00"; 
                } else {
                    set .@menu$,.@menu$+"^FF0000"; 
                }
                set .@menu$,.@menu$+getd("$a_name_"+.@i+"$")+"^000000:";
            }
            set .@menu$,.@menu$+.@text_close$;  
            next;
            set .@choose,select(.@menu$);
            if(.@choose <= .@i) {
                if(getd("$a_del_"+.@choose+"$") == "n") {
                    set .@updateTo$,"y";
                } else {
                    set .@updateTo$,"n"; 
                }
                query_sql("UPDATE achievement SET deleted='"+.@updateTo$+"' WHERE id="+.@choose);
                dispbottom "Achivement "+getd("$a_name_"+.@choose+"$")+" updated to deleted='"+.@updateTo$+"'!";
                dispbottom "Clear Cache to see any effects!!!";
                goto L_GM;
            }
          break;
          
          case 3:
                set $a_cached,0;
                dispbottom "Cache remove Flag has been set. When the next player login, the cache will be cleared";
                goto L_GM;
          break;
          
          case 4:
            //if you build in something like "For 100 achivement points get 1 Cookie", this function would be buggy!
            query_sql("SELECT char_id,achievement_points,name FROM `char`",.@char_id,.@ach_points,.@char_name$);
            set .@i,0;
            dispbottom "Sync started!";
            while(.@i < getarraysize(.@char_id)) {
                cleararray .@ach_id[0],0,getarraysize(.@ach_id);
                query_sql("SELECT ach_id FROM achievement_log WHERE char_id="+.@char_id[.@i],.@ach_id); 
                set .@j,0;
                set .@points,0;
                while(.@j < getarraysize(.@ach_id)) {
                    set .@points,.@points+getd("$a_points_"+.@ach_id[.@j]);
                    set .@j,.@j+1; 
                }
                if(.@ach_points[.@i] != .@points) {
                    query_sql("UPDATE `char` SET achievement_points="+.@points+" WHERE char_id="+.@char_id[.@i]);
                    dispbottom .@char_name$[.@i]+" had "+.@ach_points[.@i]+" points, but should have "+.@points+" points. Fixed!";
                } 
                set .@i,.@i+1;
            }
            dispbottom "Sync done!"; 
            goto L_GM;
          break;
          
          case 5:
          break;
        }
        goto L_end;
        
        L_end:
        mes .@name$;
        mes .@text_bye$;
        close2;
        cutin "",255;
        end;
    }
    
    

    Is it possible to make a npc shop for the points earned in this achievement script? If yes I would like to request it.

×
×
  • Create New...