Elmiria

Достижения, ошибки

15 сообщений в этой теме

Скрипт на достижения постоянно выводит ошибки. Скрипт читала, но не могу понять что ему не нравится, переменные вроде все соответсвуют.

Вывод сервера такой (всегда примерно это выдает в бешеном количестве)


[Warning]: Unexpected type for argument 1. Expected string.
[Debug]: Data: variable name='$a_sval_6' index=0
[Debug]: Function: dispbottom
[Debug]: Source (NPC): achievementSystem (invisible/not on a map)
[Info]: Saved guild (5 - Emperium): members
[Warning]: Unexpected type for argument 1. Expected string.
[Debug]: Data: variable name='$a_sval_4' index=0
[Debug]: Function: dispbottom
[Debug]: Source (NPC): achievementSystem (invisible/not on a map)
[Warning]: Unexpected type for argument 1. Expected string.
[Debug]: Data: variable name='$a_sval_5' index=0
[Debug]: Function: dispbottom
[Debug]: Source (NPC): achievementSystem (invisible/not on a map)
[Warning]: Unexpected type for argument 1. Expected string.
[Debug]: Data: variable name='$a_sval_6' index=0
[Debug]: Function: dispbottom
[Debug]: Source (NPC): achievementSystem (invisible/not on a map)

Вывод в глобальный чат


Fenix got the achievement [Желопи!]!
Fenix got the achievement [Желопи!]!
Fenix got the achievement [Желопи!]!
Fenix got the achievement [Желопи!]!

Сам скрипт:


//===== Athena Script =====================================
//= Achievement System
//===== By ================================================
//= Loki1991
//===== Version ===========================================
//= 1.0 - First release
//= 1.0.1 - Small hotfix for older rathena/eathena systems
//===== 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 [email protected]_expire secounds
OnPCLoginEvent:
if(gettimetick(2)-$a_cached <= $a_cache_expire && $a_cached != 0) goto InventoryChecker;
query_sql("SELECT * FROM achievement",[email protected],[email protected]$,[email protected]$,[email protected],[email protected]$,[email protected]$,[email protected],[email protected]_val,[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected]);
set [email protected],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([email protected] < getarraysize([email protected])) {
setd("$a_name_"[email protected][[email protected]]+"$",[email protected]$[[email protected]]);
setd("$a_desc_"[email protected][[email protected]]+"$",[email protected]$[[email protected]]);
setd("$a_mode_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_del_"[email protected][[email protected]]+"$",[email protected]$[[email protected]]);
setd("$a_cutin_"[email protected][[email protected]]+"$",[email protected]$[[email protected]]);
setd("$a_points_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_val1_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_val1a_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_val2_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_val2a_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_val3_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_val3a_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_val4_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_val4a_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_val5_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_val5a_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_val6_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_val6a_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_val7_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_val7a_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_val8_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_val8a_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_val9_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_val9a_"[email protected][[email protected]],[email protected][[email protected]]);
setd("$a_sval_"[email protected][[email protected]],[email protected]_val[[email protected]]);

switch([email protected][[email protected]]) {
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 [email protected],[email protected]+1;
}
set $achive_amount, [email protected];
set $a_cached,gettimetick(2);
end;

//Monsterkills (mode mob,mvp)
OnNPCKillEvent: //killedrid
if($a_mode_mob>0 || $a_mode_mvp>0) {
set [email protected],0;
while([email protected] < $achive_amount) {
set [email protected],[email protected]+1;
if((getd("$a_mode_"[email protected])!=2 && getd("$a_mode_"[email protected])!=3) || getd("a_done_"[email protected])==1 || getd("$a_del_"[email protected]+"$")=="y") continue;
if(getd("$a_mode_"[email protected])==2 && $a_mode_mob > 0 && achieve_mob < $a_mode_mob) {
set [email protected],0;
set [email protected],0;
while([email protected] < 9) {
set [email protected],[email protected]+1;
if(getd("$a_val"[email protected]+"_"[email protected])==0 || getd("$a_val"[email protected]+"a_"[email protected])==0) { set [email protected],[email protected]+1; continue; } //Skip trash or empty
if(killedrid == getd("$a_val"[email protected]+"_"[email protected])) setd("a_state_"[email protected]+"_"[email protected],getd("a_state_"[email protected]+"_"[email protected]) + 1);
if(getd("a_state_"[email protected]+"_"[email protected]) == getd("$a_val"[email protected]+"a_"[email protected])) set [email protected],[email protected]+1;
}
if([email protected] == 9) callfunc "achieve",[email protected];
} else if(getd("$a_mode_"[email protected])==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_"[email protected],getd("a_state_"[email protected]) + 1);
if(getd("a_state_"[email protected]) >= getd("$a_sval_"[email protected])) callfunc "achieve",[email protected];
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 [email protected],0;
while([email protected] < $achive_amount) {
set [email protected],[email protected]+1;
if(getd("$a_mode_"[email protected])!=4 || getd("a_done_"[email protected])==1 || getd("$a_del_"[email protected]+"$")=="y") continue;
if(pvp_counter >= getd("$a_sval_"[email protected])) callfunc "achieve",[email protected];
}
end;

//LevelUP (mode lvl)
OnPcBaseLvUpEvent:
if($a_mode_lvl==0 || achieve_lvl==$a_mode_lvl) end;
set [email protected],0;
while([email protected] < $achive_amount) {
setd("a_done_"[email protected],0);
set [email protected],[email protected]+1;
if(getd("$a_mode_"[email protected]) !=5 || getd("a_done_"[email protected])==1 || getd("$a_del_"[email protected]+"$")=="y") continue;
dispbottom getd("$a_sval_"[email protected]);
if(BaseLevel >= getd("$a_sval_"[email protected])) callfunc "achieve",[email protected];
}
end;

//JobLevelUP (mode jlvl)
OnPcJobLvUpEvent:
if($a_mode_jlvl==0 || achieve_jlvl==$a_mode_jlvl) end;
set [email protected],0;
while([email protected] < $achive_amount) {
set [email protected],[email protected]+1;
if(getd("$a_mode_"[email protected])!=6 || getd("a_done_"[email protected])==1 || getd("$a_del_"[email protected]+"$")=="y") continue;
if(JobLevel >= getd("$a_sval_"[email protected])) callfunc "achieve",[email protected];
}
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 [email protected],0;
while([email protected] < $achive_amount) {
set [email protected],[email protected]+1;
if(getd("$a_mode_"[email protected]) !=1 || getd("a_done_"[email protected])==1 || getd("$a_del_"[email protected]+"$")=="y") continue;
set [email protected],0;
set [email protected],0;
while([email protected]unt < 9) {
set [email protected],[email protected]+1;
if(getd("$a_val"[email protected]+"_"[email protected])==0 || getd("$a_val"[email protected]+"a_"[email protected])==0) { set [email protected],[email protected]+1; continue; } //Skip trash or empty
if(countitem(getd("$a_val"[email protected]+"_"[email protected])) >= getd("$a_val"[email protected]+"a_"[email protected])) set [email protected],[email protected]+1;
}
if([email protected] == 9) callfunc "achieve",[email protected];
}
end;
//special (mode special)
//No script. Just place 'callfunc "achieve",<<yourAchievementId>>;' anywhere in your script (below).
}

function script achieve {
set [email protected],getarg(0);
if([email protected] <= 0) end; //Param missing. WTF

query_sql("SELECT id FROM achievement_log WHERE ach_id='"[email protected]+"' AND char_id='"[email protected]+"'",[email protected]);
if([email protected]>0) { setd("a_done_"[email protected],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('"[email protected]+"','"+getcharid(0)+"','"+gettimetick(2)+"')");

switch(getd("$a_mode_"[email protected])) {
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_"[email protected]+"$")+"]!",0;
setd("a_done_"[email protected],1);
query_sql("UPDATE `char` SET achievement_points=achievement_points+"+getd("$a_points_"[email protected])+" WHERE char_id="+getcharid(0));
getitem 7711,getd("$a_points_"[email protected]);
if(getd("$a_cutin_"[email protected]+"$") != "") {
cutin getd("$a_cutin_"[email protected]+"$"),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),[email protected]$);
return [email protected]$;
}

pron_mall,124,126,4 script AchievementBob 899,{
//Bob Config Params
set [email protected]$,"[^FF0000Achiement Bob^000000]";
set [email protected]$,"sc_vicente01";
set [email protected],40;
set [email protected]_gmMenu$,"Hi there GM. Which kind of menu do you want to see?";
set [email protected]_startInfo$,"I have all information about the achievements which are activated on this server.";
set [email protected]_category$,"Please choose your category.";
set [email protected]_whichAch$,"For which achievement do you want to get details?";
set [email protected]_points$,"You have this achievement points:";
set [email protected]_close$,"I'm not interested.";
set [email protected]_worth$,"Worth:";
set [email protected]_getPoints$,"points";
set [email protected]_bye$,"Have a nice day.";
set [email protected]_kill$,"Kill";
set [email protected]_mvp$,"any kind of MvP";
set [email protected]_pvp$,"any other player";
set [email protected]_lvl$,"Reach base level";
set [email protected]_jlvl$,"Reach job level";
set [email protected]_mode_item$,"Item achievements";
set [email protected]_mode_mob$,"Monster achievements";
set [email protected]_mode_mvp$,"MvP achievements";
set [email protected]_mode_pvp$,"PvP achievements";
set [email protected]_mode_lvl$,"Base Level achievements";
set [email protected]_mode_jlvl$,"Job Level achievements";
set [email protected]_mode_other$,"Other Achievements";
query_sql("SELECT achievement_points FROM `char` WHERE char_id="+getcharid(0),[email protected]);


//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),[email protected]_id,[email protected]$);
if(getarraysize([email protected]_id) > 0) {
set [email protected],0;
while([email protected] < getarraysize([email protected]_id)) {
//Clear log before there is to much trash inside
query_sql("SELECT id FROM achievement_log WHERE ach_id="[email protected]_id[[email protected]]+" AND char_id="+getcharid(0),[email protected]_id);
query_sql("UPDATE achievement_force SET done='y' WHERE done='n' AND ach_id="[email protected]_id[[email protected]]+" AND char_id="+getcharid(0));
if([email protected]_id > 0) query_sql("DELETE FROM achievement_log WHERE id="[email protected]_id);
if([email protected]$=="add") {
if(getd("a_done_"[email protected]_id[[email protected]]) == 1) {
query_sql("UPDATE `char` SET achievement_points=achievement_points-"+getd("$a_points_"[email protected]_id[[email protected]])+" WHERE char_id="+getcharid(0));
}
setd("a_done_"[email protected]_id[[email protected]],0);
callfunc "achieve",[email protected]_id[[email protected]];
} else {
query_sql("SELECT mode FROM achievement WHERE id="[email protected]_id[[email protected]],[email protected]);
if([email protected] == 2) {
set [email protected],0;
while([email protected] < 9) {
set [email protected],[email protected]+1;
setd("a_state_"[email protected]_id[[email protected]]+"_"[email protected],0);
}
} else if([email protected] == 3) {
setd("a_state_"[email protected]_id[[email protected]],0);
}
if(getd("a_done_"[email protected]_id[[email protected]]) == 1) {
query_sql("UPDATE `char` SET achievement_points=achievement_points-"+getd("$a_points_"[email protected]_id[[email protected]])+" WHERE char_id="+getcharid(0));
}
setd("a_done_"[email protected]_id[[email protected]],0);
dispbottom "Achievement "+getd("$a_name_"[email protected]_id[[email protected]]+"$")+" was removed!";
}
set [email protected],[email protected]+1;
}
}
//Start the true script
cutin [email protected]$,2;
//If a gm talks to this npc, call the gm menu, else the normal script
if(getgmlevel() >= [email protected]) {
mes [email protected]$;
mes [email protected]_gmMenu$;
next;
menu "GM Menu",L_GM,"Player Menu",-,[email protected]_close$,L_end;
}

mes [email protected]$;
mes [email protected]_startInfo$;
next;
mes [email protected]$;
mes [email protected]_points$+" ^00AA00"[email protected]+"^000000";
mes [email protected]_category$;
next;
set [email protected],0;
if($a_mode_other > 0) { set [email protected]$,[email protected][email protected]_mode_other$+":"; setarray [email protected][[email protected]],0; set [email protected],[email protected]+1; }
if($a_mode_item > 0) { set [email protected]$,[email protected][email protected]_mode_item$+":"; setarray [email protected][[email protected]],1; set [email protected],[email protected]+1; }
if($a_mode_mob > 0) { set [email protected]$,[email protected][email protected]_mode_mob$+":"; setarray [email protected][[email protected]],2; set [email protected],[email protected]+1; }
if($a_mode_mvp > 0) { set [email protected]$,[email protected][email protected]_mode_mvp$+":"; setarray [email protected][[email protected]],3; set [email protected],[email protected]+1; }
if($a_mode_pvp > 0) { set [email protected]$,[email protected][email protected]_mode_pvp$+":"; setarray [email protected][[email protected]],4; set [email protected],[email protected]+1; }
if($a_mode_lvl > 0) { set [email protected]$,[email protected][email protected]_mode_lvl$+":"; setarray [email protected][[email protected]],5; set [email protected],[email protected]+1; }
if($a_mode_jlvl > 0) { set [email protected]$,[email protected][email protected]_mode_jlvl$+":"; setarray [email protected][[email protected]],6; set [email protected],[email protected]+1; }
if([email protected] == 0) { mes [email protected]$; mes "Woot. No Achivements found."; cutin "",255; close; }
set [email protected]$,[email protected][email protected]_close$;
set [email protected],select([email protected]$);
set [email protected],[email protected];
if( [email protected] == [email protected]) goto L_end;
next;
mes [email protected]$;
mes [email protected]_whichAch$;
set [email protected],0;
set [email protected],0;
set [email protected]$,"";
while([email protected] < $achive_amount) {
set [email protected],[email protected]+1;
if(getd("$a_mode_"[email protected]) != [email protected][[email protected]] || getd("$a_del_"[email protected]+"$")=="y") continue;
if(getd("a_done_"[email protected]) == 1) {
set [email protected]$,[email protected]$+"^00AA00";
} else {
set [email protected]$,[email protected]$+"^FF0000";
}
set [email protected]$,[email protected]$+getd("$a_name_"[email protected]+"$")+" ["+getd("$a_points_"[email protected])+"]^000000"+":";
setarray [email protected][[email protected]],[email protected];
set [email protected],[email protected]+1;
}
set [email protected]$,[email protected][email protected]_close$;
set [email protected],select([email protected]$);
set [email protected],[email protected];
if( [email protected] == [email protected]) { next; goto L_end; }
next;
mes [email protected]$;
if(getd("$a_desc_"[email protected][[email protected]]+"$") != "") {
mes getd("$a_desc_"[email protected][[email protected]]+"$");
next;
mes [email protected]$;
}
mes "^0000AA"[email protected]_worth$+" "+getd("$a_points_"[email protected][[email protected]])+" "[email protected]_getPoints$+"^000000";
if([email protected][[email protected]] > 0) {
if([email protected][[email protected]] == 1 || [email protected][[email protected]] == 2) {
set [email protected],0;
while([email protected] < 9) {
set [email protected],[email protected]+1;
if(getd("$a_val"[email protected]+"_"[email protected][[email protected]])>0 && getd("$a_val"[email protected]+"a_"[email protected][[email protected]])>0) {
if([email protected][[email protected]] == 1) {
mes "^0000AA"+getitemname(getd("$a_val"[email protected]+"_"[email protected][[email protected]]))+" ["+countitem(getd("$a_val"[email protected]+"_"[email protected][[email protected]]))+"/"+getd("$a_val"[email protected]+"a_"[email protected][[email protected]])+"]^000000";
} else {
mes "^0000AA"[email protected]_kill$+" "+callfunc("getMonsterNameById",getd("$a_val"[email protected]+"_"[email protected][[email protected]]))+" ["+getd("a_state_"[email protected][[email protected]]+"_"[email protected])+"/"+getd("$a_val"[email protected]+"a_"[email protected][[email protected]])+"]^000000";
}
}
}
} else {
if([email protected][[email protected]] == 3) mes "^0000AA"[email protected]_kill$+" "+getd("$a_sval_"[email protected][[email protected]])+" "[email protected]_mvp$+" ["+getd("a_state_"[email protected][[email protected]])+"/"+getd("$a_sval_"[email protected][[email protected]])+"]^000000";
if([email protected][[email protected]] == 4) mes "^0000AA"[email protected]_kill$+" "+getd("$a_sval_"[email protected][[email protected]])+" "[email protected]_pvp$+" ["+pvp_counter+"/"+getd("$a_sval_"[email protected][[email protected]])+"]^000000";
if([email protected][[email protected]] == 5) mes "^0000AA"[email protected]_lvl$+" "+getd("$a_sval_"[email protected][[email protected]])+" ["+BaseLevel+"/"+getd("$a_sval_"[email protected][[email protected]])+"]^000000";
if([email protected][[email protected]] == 6) mes "^0000AA"[email protected]_jlvl$+" "+getd("$a_sval_"[email protected][[email protected]])+" ["+JobLevel+"/"+getd("$a_sval_"[email protected][[email protected]])+"]^000000";
}
}
next;
goto L_end;



L_GM:
mes [email protected]$;
mes [email protected]_category$;
next;
switch(select("Force Player Achievement","Enable/Disable Achievements","Clear cache","Compare log with achivement points",[email protected]_close$)) {
case 1:
mes [email protected]$;
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 [email protected]_name$;
next;
mes [email protected]$;
query_sql("SELECT char_id FROM `char` WHERE name='"[email protected]_name$+"'",[email protected]_id);
if([email protected]_id > 0) {
mes "Which achivement?";
next;
set [email protected],0;
set [email protected],0;
set [email protected]$,"";
while([email protected] < $achive_amount) {
set [email protected],[email protected]+1;
if(getd("$a_del_"[email protected]+"$") == "y") continue;
set [email protected]$,[email protected]$+getd("$a_name_"[email protected]+"$")+":";
set [email protected],[email protected]+1;
setarray [email protected][[email protected]],[email protected];
}
set [email protected]$,[email protected][email protected]_close$;
set [email protected],select([email protected]$);
if( [email protected] == [email protected]+1) goto L_GM;
next;
mes [email protected]$;
mes "Adding or removing this achivement?";
next;
switch(select("Add","Remove",[email protected]_close$)) {
case 1: set [email protected]$,"add"; break;
case 2: set [email protected]$,"del"; break;
case 3: goto L_GM; break;
}
next;
mes [email protected]$;
mes "Player: "[email protected]_name$;
mes "Achivement: "+getd("$a_name_"[email protected][[email protected]]+"$")+" (id="[email protected][[email protected]]+")";
mes "Mode: "[email protected]$;
mes "Are you sure?";
next;
menu "Yes!",-,"No",L_GM;
mes [email protected]$;
query_sql("INSERT INTO achievement_force(ach_id,char_id,mode) VALUES('"[email protected][[email protected]]+"','"[email protected]_id+"','"[email protected]$+"')");
if([email protected]$=="del") {
switch(getd("$a_mode_"[email protected][[email protected]])) {
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! "[email protected]_name$+" should talk to me now!";
next;
} else {
mes "Player not found!";
next;
}
goto L_GM;
break;

case 2:
mes [email protected]$;
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 [email protected],0;
set [email protected]$,"";
while([email protected] < $achive_amount) {
set [email protected],[email protected]+1;
if(getd("$a_del_"[email protected]+"$") == "n") {
set [email protected]$,[email protected]$+"^00AA00";
} else {
set [email protected]$,[email protected]$+"^FF0000";
}
set [email protected]$,[email protected]$+getd("$a_name_"[email protected]+"$")+"^000000:";
}
set [email protected]$,[email protected][email protected]_close$;
next;
set [email protected],select([email protected]$);
if([email protected] <= [email protected]) {
if(getd("$a_del_"[email protected]+"$") == "n") {
set [email protected]$,"y";
} else {
set [email protected]$,"n";
}
query_sql("UPDATE achievement SET deleted='"[email protected]$+"' WHERE id="[email protected]);
dispbottom "Achivement "+getd("$a_name_"[email protected]+"$")+" updated to deleted='"[email protected]$+"'!";
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`",[email protected]_id,[email protected]_points,[email protected]_name$);
set [email protected],0;
dispbottom "Sync started!";
while([email protected] < getarraysize([email protected]_id)) {
cleararray [email protected]_id[0],0,getarraysize([email protected]_id);
query_sql("SELECT ach_id FROM achievement_log WHERE char_id="[email protected]_id[[email protected]],[email protected]_id);
set [email protected],0;
set [email protected],0;
while([email protected] < getarraysize([email protected]_id)) {
set [email protected],[email protected]+getd("$a_points_"[email protected]_id[[email protected]]);
set [email protected],[email protected]+1;
}
if([email protected]_points[[email protected]] != [email protected]) {
query_sql("UPDATE `char` SET achievement_points="[email protected]+" WHERE char_id="[email protected]_id[[email protected]]);
dispbottom [email protected]_name$[[email protected]]+" had "[email protected]_points[[email protected]]+" points, but should have "[email protected]+" points. Fixed!";
}
set [email protected],[email protected]+1;
}
dispbottom "Sync done!";
goto L_GM;
break;

case 5:
break;
}
goto L_end;

L_end:
mes [email protected]$;
mes [email protected]_bye$;
close2;
cutin "",255;
end;
}

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

система не совсем доработана

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Скрипт читала, но не могу понять что ему не нравится, переменные вроде все соответсвуют.

Скриптовая функция dispbottom ожидает строковые данные, а Вы ей подаете целочисельные.

Попробуйте заменить:

dispbottom getd("$a_sval_"[email protected]);

на:

dispbottom "" + getd("$a_sval_"[email protected]);

Изменено пользователем Functor
1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Скриптовая функция dispbottom ожидает строковые данные, а Вы ей подаете целочисельные.

Попробуйте заменить:

dispbottom getd("$a_sval_"[email protected]);

на:

dispbottom "" + getd("$a_sval_"[email protected]);

Слушай гениально, вставил свой скрипт со старой афины в рафину, и он начал выдавать аналогичную ошибку, что вместо текста я ему даю числа, все думал как сделать так, чтоб он не выводил ошибки, а оказалось все просто ;)

Спасибо.

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

это не ошибки, а предупреждения, ничего страшного кроме загаживания консоли они не делают

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

это не ошибки, а предупреждения, ничего страшного кроме загаживания консоли они не делают

Кроме того, что одно и тоже достижения выполняется несколько раз
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Даже так ачивки дают не по одному разу. Засоряет чат, хоть приз второй раз и не начисляет. Ачивка желопи у меня работает только на порингах, получила ее за дропса х_х, Скрипт очень сложный для выявления ошибок логики, но либо их править либо выкидывать скрипт на помойку.

Спасибо за варнинги - их теперь нет, жаль, но основная проблема с ними не решилась. Либо спамит ачивами, либо вообще их не начисляет.

Поглядела в базу - 14 записей о ачивке желопи на последнего тестового персонажа. Скрипт просто не видит предыдущих записей? о_О


id ach_id char_id crdate
435 1 150106 1386444699
434 1 150106 1386444652
433 1 150106 1386444619
432 1 150106 1386444590
431 1 150106 1386444575
430 1 150106 1386444560
429 1 150106 1386444543
428 1 150106 1386444523
427 1 150106 1386444499
426 1 150106 1386444486
425 1 150106 1386444478
422 1 150106 1386444161
421 1 150106 1386444085
420 1 150106 1386444054
424 7 150106 1386444478
423 7 150106 1386444426
419 7 150106 1386443674

query_sql("SELECT id FROM achievement_log WHERE ach_id='"[email protected]+"' AND char_id='"[email protected]+"'",[email protected]);

if([email protected]>0) { setd("a_done_"[email protected],1); end; } //User already got this achievement... Strange

оно?

Изменено пользователем Elmiria
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

тут ошибка как можно не заметить)

ach_id='"[email protected]+"' AND char_id='"[email protected]+"'",

во втором случае вместо чарайди еще раз сравнивается по ачивка айди

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

так AND char_id='"+getcharid(0)+"'",[email protected]);

или AND char_id="+getcharid(0), [email protected]);

я еще путаюсь...

Непись перестал работать о_О

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

в скайп иди)

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

зачем использовать донные скрипты которые по каждой тычке в цикле фигачат тяжкие sql запросы, которые, напоминаю, блокирующие. Как вариант, вроде как в том же еамоде более менее норм. Особенно пиздец как порадовало getMonsterNameById, видимо автор не осилил script_commands.txt до конца))

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

К сожалению, сейчас нет возможности переписать сам скрипт на более понятный и правильный язык, берем что есть. Но до Нового года он должен хоть как-то заработать адекватно.

Изменено пользователем Elmiria
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

К сожалению, сейчас нет возможности переписать сам скрипт на более понятный и правильный язык, берем что есть. Но до Нового года он должен хоть как-то заработать адекватно.

У тебя еще дофига времени

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хотелось бы верить. с работой полмесяца сразу можно выкинуть, под Новый Год уже не до сервера будет, да и дому тоже надо время уделять. + предстоящий в этом месяце ремонт... так что времени остается полчаса в день, ну и что я успею?) да ничего)

Если есть люди, которые смогу довести этот (или другой) скрипт до работоспособности без двойного получения ачивы и чтоб они начислялись правильно и вовремя (за базовый уровень вообще не даются ачивы теперь) я в долгу не останусь.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас