AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   set_task help (https://forums.alliedmods.net/showthread.php?t=27958)

Snipa-of-Death 05-03-2006 17:15

set_task help
 
I need help with the set_task function. I working on a plugin that regenerates armor for certain people until it gets to 100. The function works fine the first round but on the second round it doesnt regenerate at a steady rate.
Code:

new parm[2];
parm[0] = id;
parm[1] = 0;

set_task(2.0, "droid_repair", 50+id, parm, 2, "b");

Please help!

Zenith77 05-03-2006 17:16

show us all of your code, and use the "small" tags

Snipa-of-Death 05-03-2006 17:18

Code:
#include <amxmodx> #include <amxmisc> #include <fun> #include <cstrike> #define MAX_NAME_LENGTH 32 #define MAX_ID_LENGTH 32 #define MAX_VAR_LENGTH 64 #define SHORT_TERM 0 #define HEADSHOT_BONUS 15 new bool:bFreezeTime = false; new bool:changingrace[33] = false; new gmsgStatusText; new xplevel[11] = {0,100,300,600,1000,1500,2100,2800,3600,4500,5500}; new xpgiven[11] = {60,80,100,120,140,160,180,200,220,240,260}; #if SHORT_TERM new Float:xpmultiplier = 0.8; #else new Float:xpmultiplier = 0.4; #endif new p_skills[33][5]; new playerxp[33]; new p_level[33]; new racename[6][] = {"No Race", "Bounty Hunter", "Clone Trooper", "Droid", "Jedi", "Wookie"}; new race1skills[4][] = {"Armor Upgrade", "Flamethrower", "Jetpack", "Radar Scan"}; new race2skills[4] []= {"Stacked Weapons", "Ammo Restock", "", "Respawn"}; new race3skills[4][] = {"Armor Repair", "Shield", "", ""}; new race4skills[4][] = {"Speed","Heal","Mind Trick","Lightsaber"}; new race5skills[4][] = {"Strength", "Stamina", "", "Berserker"}; // Bounty Hunter Skills new p_armor_upgrade[4] = {0, 100, 150, 200}; // Droid Skills new p_armor_repair[4] = {0,1,2,4}; public plugin_init() {     gmsgStatusText = get_user_msgid("StatusText");         register_plugin("StarwarsMod", "1.0", "Snipa-of-Death");     register_menucmd(register_menuid("\ySelect Race:"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<9),"set_race");     register_menucmd(register_menuid("\ySelect Skill:"), (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<9), "set_skill");         register_clcmd("changerace","change_race",-1,"changerace")     register_clcmd("say /changerace","say_changerace")     register_clcmd("say_team /changerace", "say_changerace")     register_srvcmd("display_race_select","display_race_select")         register_event("DeathMsg", "death", "a");     register_event("ResetHUD", "new_round", "b");     register_logevent("start_round", 2, "1=Round_Start");     register_logevent("end_round", 2, "1=Round_End")     register_logevent("end_round", 2, "1&Restart_Round_") } public plugin_precache() {     precache_sound("starwarsmod/impresive.wav"); } public droid_repair(parm[2]) {     if (p_skills[parm[0]][0] == 3 && p_skills[parm[0]][1] != 0 && is_user_alive(parm[0]) && is_user_connected(parm[0])) {         new player_armor = get_user_armor(parm[0]);                 if (player_armor < 100) {             player_armor += p_armor_repair[p_skills[parm[0]][1]];                         if (player_armor > 100) {                 player_armor = 100;             }                             set_user_armor(parm[0], player_armor);         }     } } public client_connect(id) {     if (is_user_bot(id)) {         #if !SHORT_TERM             playerxp[id] = 300;         #else         #endif     } } public say_changerace(id) {     change_race(id,1)     return PLUGIN_CONTINUE } public end_round() {     #if !SHORT_TERM         write_all();     #endif } public write_all() {     new players[32], numofplayers, id;     get_players(players, numofplayers);         for (new i=0; i<numofplayers; i++){         id = players[i];         if (p_skills[id][0]>0 && playerxp[id])             write_xp_to_file(id,"");     } } public write_xp_to_file(id,givenline[128]){     if (is_user_bot(id))         return PLUGIN_CONTINUE     new playerid[MAX_ID_LENGTH], playername[MAX_NAME_LENGTH], currentrace[2];         if (id){         get_user_name(id,playername,MAX_NAME_LENGTH-1)         format(currentrace,1,"%d",p_skills[id][0])         get_user_authid(id,playerid,MAX_ID_LENGTH-1);     }     if (id && playerxp[id] && p_skills[id][0]) {         new vaultkey[64], vaultdata[128], index[32]         format(vaultkey, 63, "StarWars_%s_%s", playerid, currentrace)         format(vaultdata, 127, "%d %d %d %d %d %d",playerxp[id],p_skills[id][0], p_skills[id][1],p_skills[id][2],p_skills[id][3],p_skills[id][4])         set_vaultdata(vaultkey,vaultdata);                                 // Prune Information Setup         format(vaultkey, 63,"StarWars_%s",playerid);         if(!vaultdata_exists(vaultkey)) {             get_vaultdata("StarWars_starwarsindex", index, 31);             format(vaultdata,127,"%d ^"%s^" %d",str_to_num(index),playername,get_systime())             set_vaultdata(vaultkey,vaultdata)             format(vaultkey,63,"StarWars_pruneindex_%d",str_to_num(index))             set_vaultdata(vaultkey,playerid)             format(index,31,"%d",(str_to_num(index)+1))             set_vaultdata("StarWars_starwarsindex",index)         } else {             get_vaultdata(vaultkey,vaultdata,127)             parse(vaultdata,index,31)             format(vaultdata,127,"%d ^"%s^" %d",str_to_num(index),playername,get_systime())             set_vaultdata(vaultkey,vaultdata)         }     }         return PLUGIN_CONTINUE } public get_xp_from_file(id,returnrace){     if (!id)         return PLUGIN_CONTINUE     new playerid[MAX_ID_LENGTH], playername[MAX_NAME_LENGTH]     new xp[8], race[2], skill1[2], skill2[2], skill3[2], skill4[2]     new racexp[5]={0,0,0,0,0}     get_user_name(id,playername,MAX_NAME_LENGTH-1)     get_user_authid(id,playerid,MAX_ID_LENGTH-1)     new vaultkey[64], vaultdata[128], currentrace[2]     format(currentrace,1,"%d",p_skills[id][0])     if(returnrace) {         for(new i=1;i < 6; i++) {             format(vaultkey, 63, "StarWars_%s_%d", playerid, i)             if (vaultdata_exists(vaultkey)) {                 get_vaultdata(vaultkey, vaultdata,127)                 parse(vaultdata,xp,7,race,1,skill1,1,skill2,1,skill3,1,skill4,1)                                 racexp[i-1] = str_to_num(xp)             } else {                 racexp[i-1] = 0             }             if (p_skills[id][0])                 racexp[p_skills[id][0]-1]=playerxp[id]                             server_cmd("display_race_select %d %d %d %d %d %d",id, racexp[0], racexp[1], racexp[2], racexp[3], racexp[4])         }     } else {         format(vaultkey, 63, "StarWars_%s_%s", playerid, currentrace)         if(vaultdata_exists(vaultkey)) {             get_vaultdata(vaultkey, vaultdata, 127)             parse(vaultdata,xp,7,race,1,skill1,1,skill2,1,skill3,1,skill4,1)             playerxp[id]=str_to_num(xp)             p_skills[id][1]=str_to_num(skill1)             p_skills[id][2]=str_to_num(skill2)             p_skills[id][3]=str_to_num(skill3)             p_skills[id][4]=str_to_num(skill4)             display_level(id)         } else {             playerxp[id]=0             p_skills[id][1]=0             p_skills[id][2]=0             p_skills[id][3]=0             p_skills[id][4]=0             display_level(id)         }     }         return PLUGIN_CONTINUE } public death() {     new killer = read_data(1);     new victim = read_data(2);     new headshot = read_data(3);         new xp;         if (!(killer == victim) && !(p_skills[killer][0] == 0)) {         xp = floatround(xpgiven[p_level[victim]]*xpmultiplier);         if (headshot) {             xp += HEADSHOT_BONUS;         }                 playerxp[killer] += xp;                 new msg[128];         format(msg, 128, "[StarwarsMod] You have killed an enemy and gained %d XP.", xp);         client_print(killer, print_chat, msg);                 display_level(killer);     } }     public display_level(id) {     if (playerxp[id]<0)         playerxp[id]=0             new oldlevel = p_level[id];     for (new i=0; i<=10; i++){         if (playerxp[id]>=xplevel[i])             p_level[id]=i;         else             break;     }         new xpstring[128];         if (p_skills[id][0] == 0) {         format (xpstring, 128, "%s XP: %d/%d", racename[p_skills[id][0]], playerxp[id], xplevel[p_level[id]+1]);     } else if (p_level[id] < 10) {         format (xpstring, 128, "%s Level: %d XP: %d/%d", racename[p_skills[id][0]], p_level[id],  playerxp[id], xplevel[p_level[id]+1]);     } else {         format (xpstring, 128, "%s XP: %d", racename[p_skills[id][0]], playerxp[id]);     }         message_begin( MSG_ONE, gmsgStatusText, {0,0,0}, id);     write_byte(0);     write_string(xpstring);     message_end();         if (p_level[id] > oldlevel && is_user_alive(id)){           // Level Gained         set_hudmessage(200, 100, 0, -1.0, 0.25, 0, 1.0, 2.0, 0.1, 0.2, 2);         show_hudmessage(id,"You gained a Level");         if (file_exists("sound/starwarsmod/impresive.wav")==1)             emit_sound(id,CHAN_STATIC, "starwarsmod/impresive.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)     }         return PLUGIN_CONTINUE; } public change_race(id,saychat){     #if SHORT_TERM     select_race(id)     return PLUGIN_CONTINUE     #endif     if (is_user_alive(id) && !bFreezeTime) {         if (saychat==1){             set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)             show_hudmessage(id,"You can only change your race when you are dead or at the beginning of the round!")         } else {             client_cmd(id,"echo You can only change your race when you are dead or at the beginning of the round!")         }         return PLUGIN_CONTINUE     }     if ( p_skills[id][0]>=0){         #if !SHORT_TERM             if (!changingrace[id]){                 write_xp_to_file(id, "")                 changingrace[id]=true                 get_xp_from_file(id,1)             } else if (saychat==1) {                 set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)                 show_hudmessage(id,"You can't change race more than once per round!")             } else {                 client_cmd(id,"echo You can't change race more than once per round!")             }         #else             if (!changingrace[id]){                 select_race(id)             } else if (saychat==1) {                 set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)                 show_hudmessage(id,"You can't change race more than once per round!")             } else {                 client_cmd(id,"echo You can't change race more than once per round!")             }         #endif     }     if (saychat==1)         return PLUGIN_CONTINUE     return PLUGIN_HANDLED } public select_skill(id) {     new menu_msg[256];     new temp[128];         new skillsused = p_skills[id][1] + p_skills[id][2] + p_skills[id][3] + p_skills[id][4];     if (skillsused >= p_level[id]) {         client_print(id, print_chat, "[StarwarsMod] You have already used all of your skill points.");     }         format(menu_msg, 256, "\ySelect Skill:\w^n^n");         new skillcounter = 0     new skillcurrentrace[4][64]     while (skillcounter < 4){         if (p_skills[id][0] == 1){             copy(skillcurrentrace[skillcounter],63,race1skills[skillcounter])         }         else if (p_skills[id][0] == 2){             copy(skillcurrentrace[skillcounter],63,race2skills[skillcounter])         }         else if (p_skills[id][0] == 3){             copy(skillcurrentrace[skillcounter],63,race3skills[skillcounter])         }         else if (p_skills[id][0] == 4){             copy(skillcurrentrace[skillcounter],63,race4skills[skillcounter])         }         else if (p_skills[id][0] == 5){             copy(skillcurrentrace[skillcounter],63,race5skills[skillcounter])         }         skillcounter++;     }         skillcounter = 1     while (skillcounter< 4){         if (p_skills[id][skillcounter]!=3){             if (p_level[id]<=2*p_skills[id][skillcounter]){                 format(temp,127,"\d")                 add(menu_msg,255,temp)             }             format(temp,127,"^n%d. %s Level %d\w",skillcounter,skillcurrentrace[skillcounter-1],p_skills[id][skillcounter]+1)             add(menu_msg,255,temp);         }         skillcounter++;     }         if (p_skills[id][4]==0){         if (p_level[id] < 7) {             format(temp, 127, "\d");             add(menu_msg, 255, temp);         }         format(temp,127,"^n4. Ultimate: %s\w",skillcurrentrace[3]);         add(menu_msg, 255, temp);     }         new keys = (1<<9)     if (p_skills[id][1]!=3 && p_level[id]>2*p_skills[id][1] && skillsused<p_level[id])         keys |= (1<<0)     if (p_skills[id][2]!=3 && p_level[id]>2*p_skills[id][2] && skillsused<p_level[id])         keys |= (1<<1)     if (p_skills[id][3]!=3 && p_level[id]>2*p_skills[id][3] && skillsused<p_level[id])         keys |= (1<<2)     if (p_skills[id][4]==0 && p_level[id]>=6 && skillsused<p_level[id])         keys |= (1<<3)         format(temp, 127, "\w^n0. Cancel");     add(menu_msg, 255, temp);         show_menu(id, keys, menu_msg, -1); } public set_skill(id,key){     new skillsused = p_skills[id][1]+p_skills[id][2]+p_skills[id][3]+p_skills[id][4]     if (key == 0 && p_skills[id][1]!=3 && p_level[id]>2*p_skills[id][1] && skillsused<p_level[id])         ++p_skills[id][1]     else if (key == 1 && p_skills[id][2]!=3 && p_level[id]>2*p_skills[id][2] && skillsused<p_level[id])         ++p_skills[id][2]     else if (key == 2 && p_skills[id][3]!=3 && p_level[id]>2*p_skills[id][3] && skillsused<p_level[id])         ++p_skills[id][3]     else if (key == 3 && p_skills[id][4]==0 && p_level[id]>=6 && skillsused<p_level[id])         p_skills[id][4]=1     else if (key == 9)         return PLUGIN_HANDLED     skillsused = p_skills[id][1]+p_skills[id][2]+p_skills[id][3]+p_skills[id][4]         if (skillsused < p_level[id])         select_skill(id)     else         display_level(id)     return PLUGIN_HANDLED } public display_race_select(){     new id, idtext[3], menu_msg[384]         new racexp1[8], racexp2[8], racexp3[8], racexp4[8], racexp5[8]     read_argv(1,idtext,2)     read_argv(2,racexp1,7)     read_argv(3,racexp2,7)     read_argv(4,racexp3,7)     read_argv(5,racexp4,7)     read_argv(6,racexp5,7)     id = str_to_num(idtext)     format(menu_msg,255,"\ySelect Race:\RExperience^n^n\w1. %s\y\R%s^n\w2. %s\y\R%s^n\w3. %s\y\R%s^n\w4. %s\y\R%s^n\w5. %s\y\R%s^n^n\w6. Auto-select", racename[1], racexp1, racename[2], racexp2, racename[3], racexp3, racename[4], racexp4, racename[5], racexp5)        show_menu(id,(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5),menu_msg,-1)         return PLUGIN_HANDLED } public select_race(id) {     if (is_user_bot(id)) {         p_skills[id][0] = random_num(1,5);     }         new menu_msg[256];     format(menu_msg,256,"\ySelect Race:\w^n^n1. %s^n2. %s^n3. %s^n4. %s^n5. %s^n^n6. Auto-select^n0. Cancel", racename[1], racename[2], racename[3], racename[4], racename[5]);     show_menu(id, (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<9), menu_msg, -1);         return PLUGIN_CONTINUE; } public set_race(id, key) {     if (is_user_alive(id) && !bFreezeTime) {         changingrace[id] = false;         client_print(id, print_chat, "[StarwarsMod] You cannot change race unless you are dead or during freeztime.");         return PLUGIN_CONTINUE;     }         if (key == 0) {         p_skills[id][0] = 1;     } else if (key == 1) {         p_skills[id][0] = 2;     } else if (key == 2) {         p_skills[id][0] = 3;     } else if (key == 3) {         p_skills[id][0] = 4;     } else if (key == 4) {         p_skills[id][0] = 5;     } else if (key == 5) {         p_skills[id][0] = random_num(1, 5);     }         p_skills[id][1] = 0;     p_skills[id][2] = 0;     p_skills[id][3] = 0;     p_skills[id][4] = 0;         #if !SHORT_TERM     playerxp[id] = 0     p_level[id] = 0     get_xp_from_file(id,0)     #endif         new msg[256];     format(msg, 256, "[StarwarsMod] You have selected the %s race.", racename[p_skills[id][0]]);     client_print(id, print_chat, msg);         display_level(id);         return PLUGIN_CONTINUE; } public new_round(id) {     bFreezeTime = true;     changingrace[id] = false;         if (p_skills[id][0] == 0) {         #if SHORT_TERM         select_race(id);         #else         get_xp_from_file(id, 1)         #endif     }         if (is_user_alive(id)) {         display_level(id);         new skillsused = p_skills[id][1]+p_skills[id][2]+p_skills[id][3]+p_skills[id][4] ;                 if (skillsused < p_level[id]) {             select_skill(id);         }                 // Bounty Hunter         if (p_skills[id][0] == 1) {             if (p_skills[id][1] > 0) {                 cs_set_user_armor(id, p_armor_upgrade[p_skills[id][1]], CS_ARMOR_VESTHELM);             }         }                 //Droid         if (p_skills[id][0] == 3) {             if (p_skills[id][1] > 0) {                 new parm[2];                 parm[0] = id;                 parm[1] = 0;                                 set_task(2.0, "droid_repair", 50 + id,parm, 2, "b");             }         }     } } public start_round() {     bFreezeTime = false; }

Xanimos 05-03-2006 17:21

in public death(id) add the line remove_task(50+id)

Snipa-of-Death 05-03-2006 17:22

thanks


All times are GMT -4. The time now is 05:07.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.