|
Member
|

12-28-2010
, 16:31
Respawn chance help
|
#1
|
i'm making a new mod for my server but when i try to add respawn i get an error
PHP Code:
/* Plugin generated by AMXX-Studio */
/* EDIT HERE */
/* Dont forget the: "" On names and shorts! */
#define HEALTH_NAME "Extra Health" #define HEALTH_COST 1000 #define HEALTH_SHORT "HP" #define HEALTH_VALUE 150 #define HEALTH_LEVELS 6
#define ARMOR_NAME "Armor" #define ARMOR_COST 750 #define ARMOR_SHORT "AP" #define ARMOR_VALUE 100 #define ARMOR_LEVELS 4
#define RESPAWN_NAME "Respawn Chance" #define RESPAWN_COST 3000 #define RESPAWN_SHORT "RC" #define RESPAWN_VALUE 80 #define RESPAWN_LEVELS 8
/*--------------------------------------------*/ /* PLUGIN STARTS HERE */ /* DO NOT MODIFY BELOW! */ /*--------------------------------------------*/
#include <amxmodx> #include <amxmisc> #include <hamsandwich> #include <fun> #include <cstrike> #include <nvault> #include <nvault_util> #include <hnsxp>
new const PLUGIN_NAME[] = "HNS YenMod" new const PLUGIN_VERSION[] = "1.0.0" new const PLUGIN_CREATOR[] = "MaNiax" new const PLUGIN_PREFIX[] = "YenMod"
enum _:gItems { HEALTH, ARMOR, RESPAWN }
new const g_iItems[gItems][] = { HEALTH_NAME, ARMOR_NAME, RESPAWN_NAME }
new const gItemsCost[gItems] = { HEALTH_COST, ARMOR_COST, RESPAWN_COST }
new const gItemsShort[gItems][] = { HEALTH_SHORT, ARMOR_SHORT, RESPAWN_SHORT }
new const gItemsValue[gItems] = { HEALTH_VALUE, ARMOR_VALUE, RESPAWN_VALUE }
new const gItemsLevels[gItems] = { HEALTH_LEVELS, ARMOR_LEVELS, RESPAWN_LEVELS }
new gLevel[33][gItems]; new gXP[33], gXPTotal[33]; /* pCvars */ new gKillXP, gHsXP;
/* Others */ new g_players;
/* Vault */ new g_vault, gTopVault, gNameVault;
new bool:g_iRevivedOnce[32];
public plugin_init() { register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_CREATOR); RegisterHam(Ham_Spawn, "player", "FwdPlayerSpawn", 1); register_event("DeathMsg", "eDeath", "a") register_clcmd("say /ym", "MainMenu"); register_clcmd("say /ymrank", "CmdRank"); register_clcmd("say /ymtop", "CmdTop"); register_clcmd("say /ymtop10", "CmdTop"); register_clcmd("say /ymtop15", "CmdTop"); //Register Commands register_concmd("ym_give_yen", "CmdGiveCash", ADMIN_RCON, "<nick, #userid, authid> <cash>"); register_concmd("ym_remove_yen", "CmdRemoveCash", ADMIN_RCON, "<nick, #userid, authid> <cash>"); gKillXP = register_cvar("hnsyen_killxp", "40"); gHsXP = register_cvar("hnsyen_hsxp", "50"); g_vault = nvault_open("HNSYenMod"); gTopVault = nvault_open("HNSYenModTop") gNameVault = nvault_open("HNSYenModName") }
public client_connect(id) { Load(id); }
public client_disconnect(id) { Save(id); }
//The following functions are used to give and remove, dont touch! public CmdGiveCash(id, level, cid) { if( !cmd_access(id, level, cid, 3) ) return PLUGIN_HANDLED; static arg[35]; read_argv(1, arg, sizeof(arg) - 1); new target = cmd_target(id, arg, CMDTARGET_NO_BOTS); if( !target ) return PLUGIN_HANDLED; read_argv(2, arg, sizeof(arg) - 1); new CASH = str_to_num(arg); if( CASH <= 0 ) { console_print(id, "Not enough yen!"); if( CASH < 0 ) { console_print(id, "Use ym_remove_yen instead!"); } return PLUGIN_HANDLED; } if( CASH >= 99999 ) { console_print(id, "To much yen!"); return PLUGIN_HANDLED; } gXP[target] += CASH; gXPTotal[target] += CASH; static name[2][32]; get_user_name(id, name[0], sizeof(name[]) - 1); get_user_name(target, name[1], sizeof(name[]) - 1); client_print(id, print_console, "%s You gave %s %i yen!", PLUGIN_PREFIX, name[1], CASH); static steamid[2][35]; get_user_authid(id, steamid[0], sizeof(steamid[]) - 1); get_user_authid(target, steamid[1], sizeof(steamid[]) - 1); log_amx("%s (%s) gave %i yen to %s (%s)", name[0], steamid[0], CASH, name[1], steamid[1]); return PLUGIN_HANDLED; }
public CmdRemoveCash(id, level, cid) { if ( !cmd_access(id, level, cid, 3) ) return PLUGIN_HANDLED; static arg[35]; read_argv(1, arg, sizeof(arg) - 1); new target = cmd_target(id, arg, CMDTARGET_OBEY_IMMUNITY|CMDTARGET_NO_BOTS|CMDTARGET_ALLOW_SELF); if( !target ) return PLUGIN_HANDLED; read_argv(2, arg, sizeof(arg) - 1); new Cash = str_to_num(arg); if ( Cash <= 0 ) return PLUGIN_HANDLED; gXP[target] -= Cash; gXPTotal[target] -= Cash; new t_name[60]; get_user_name(target, t_name, 59);
client_print(id, print_console, "%s You removed %i yen from %s!", PLUGIN_PREFIX, Cash, t_name); return PLUGIN_CONTINUE; }
public MainMenu(id) { new title[100]; formatex(title, charsmax(title), "\r[YM] \yHNS YenMod^n\wCurrent Yen: \r%i \y| \wTotal Yen: \r%i", gXP[id], gXPTotal[id]); new menu = menu_create(title, "MainMenu_Handle"); new iNumber[5], gPrice, szItemNumber[100], Amount; for( new iItem = 0; iItem < gItems; iItem++ ) { num_to_str(iItem, iNumber, 4); gPrice = gItemsCost[iItem] * (gLevel[id][iItem] + 1); Amount = gItemsValue[iItem] * (gLevel[id][iItem] + 1) / gItemsLevels[iItem]; if( gLevel[id][iItem] >= gItemsLevels[iItem] ) { formatex(szItemNumber, charsmax(szItemNumber), "\d%s: \wMax Level! \r(\w%i %s\r)", g_iItems[iItem], gItemsValue, gItemsShort[iItem]); } else if( gXP[id] < gPrice ) { formatex(szItemNumber, charsmax(szItemNumber), "\d%s: \wLevel %i \r(\w%i %s\r) \y$%i", g_iItems[iItem], (gLevel[id][iItem] + 1), Amount, gItemsShort[iItem], gPrice); } else if( gLevel[id][iItem] < gItemsLevels[iItem] ) { formatex(szItemNumber, charsmax(szItemNumber), "\w%s: Level %i \r(\w%i %s\r) \y$%i", g_iItems[iItem], (gLevel[id][iItem] + 1), Amount, gItemsShort[iItem], gPrice); } menu_additem(menu, szItemNumber, iNumber); } menu_display(id, menu, 0); return PLUGIN_HANDLED; }
public MainMenu_Handle(id, menu, item) { if( item == MENU_EXIT ) { menu_destroy(menu); return PLUGIN_HANDLED; } new data[6], iName[64], access, callback; menu_item_getinfo(menu, item, access, data, charsmax(data), iName, charsmax(data), callback); new gPrice, Level; new key = str_to_num(data); Level = gLevel[id][key] + 1; gPrice = gItemsCost[key] * Level;
if( gLevel[id][key] == gItemsLevels[key] ) { MainMenu(id); return PLUGIN_HANDLED; } else if( gXP[id] < gPrice ) { MainMenu(id); return PLUGIN_HANDLED; } else { gXP[id] -= gPrice; gLevel[id][key] += 1; Print(id, "You bought^x01 %s Level: %i^x03!", g_iItems[key], Level); } MainMenu(id); return PLUGIN_HANDLED; }
public CmdRank(id) { new Array:aNames, Array:aSteamIDs, Array:aXPs; new iTotal = SortTopPlayers(aNames, aSteamIDs, aXPs); new szSteamID[35]; get_user_authid(id, szSteamID, charsmax(szSteamID)); new szSteamID2[35], i; for( i = 0; i < iTotal; i++ ) { ArrayGetString(aSteamIDs, i, szSteamID2, charsmax(szSteamID2)); if( equal(szSteamID, szSteamID2) ) { Print(id, "You are ranked^x01 %i^x03 of^x01 %i^x03!", (i + 1), iTotal); break; } } if( i == iTotal ) { Print(id, "You are not ranked!"); } ArrayDestroy(aNames); ArrayDestroy(aSteamIDs); ArrayDestroy(aXPs); return PLUGIN_HANDLED; }
public CmdTop(id) { new Array:aNames, Array:aSteamIDs, Array:aXPs; new iTotal = SortTopPlayers(aNames, aSteamIDs, aXPs); new szHTML[2500], iLen; iLen = copy(szHTML, charsmax(szHTML), "<html><body><h2>YenMod Top 15</h2><br><table><tr><th>#.</th><th>Name</th><th>XP</th></tr>"); new szName[156]; for( new i = 0; i < 15; i++ ) { if( i < iTotal ) { ArrayGetString(aNames, i, szName, charsmax(szName)); replace_all(szName, charsmax(szName), "&", "&"); replace_all(szName, charsmax(szName), "<", "<"); replace_all(szName, charsmax(szName), ">", ">"); iLen += formatex(szHTML[iLen], charsmax(szHTML)-iLen, "<tr><td>%i.</td><td>%s</td><td>%i</td></tr>", (i + 1), szName, ArrayGetCell(aXPs, i)); } else { iLen += copy(szHTML[iLen], charsmax(szHTML)-iLen, "<tr><td></td><td></td><td></td></tr>"); } } iLen += copy(szHTML[iLen], charsmax(szHTML)-iLen, "</table></body></html>"); ArrayDestroy(aNames); ArrayDestroy(aSteamIDs); ArrayDestroy(aXPs); show_motd(id, szHTML, "Top 15"); return PLUGIN_HANDLED; }
public eDeath() { new killer = read_data(1); new victim = read_data(2); new gPrintMSG[100]; new gXPKill = get_pcvar_num(gKillXP); new gXPHs = get_pcvar_num(gHsXP); if( XPReady(victim, killer) ) { if( !read_data(3) ) { gXP[killer] += gXPKill; gXPTotal[killer] += gXPKill; formatex(gPrintMSG, charsmax(gPrintMSG), "You gained %d XP!", gXPKill); } else if( read_data(3) ) { gXP[killer] += (gXPKill + gXPHs); gXPTotal[killer] += (gXPKill + gXPHs); formatex(gPrintMSG, charsmax(gPrintMSG), "You gained %d XP!^x01 (Headshot)", (gXPHs + gXPKill)); } Print(killer, gPrintMSG); Save(killer); } return PLUGIN_HANDLED; }
public FwdPlayerDeath(id, Killer, Shouldgib) { //If the player hasnt already been respawned if( !g_iRevivedOnce[id] ) { new percent = gItemsLevels[id][RESPAWN_LEVELS], gItemsLevels[RESPAWN_LEVELS], gItemsValue[RESPAWN_VALUE]; if( percent > 0 && (percent >= 100 || random_num(1, 100) <= percent) ) { //Set respwan in 1 second set_task(1.0, "Task_Respawn", id); } } }
public Task_Respawn(iPlayer) { //Respawn Player ExecuteHamB(Ham_CS_RoundRespawn, iPlayer); //Print to the player that he/she got respawned Print(iPlayer, "^x03You got respawned!"); //Disable respawn until next round g_iRevivedOnce[iPlayer] = true; }
public FwdPlayerSpawn(id) { if( is_user_alive(id) ) { if( gLevel[id][HEALTH] > 0 ) { new gHP = HEALTH_VALUE / HEALTH_LEVELS * gLevel[id][HEALTH]; set_user_health(id, get_user_health(id) + gHP); } if( gLevel[id][ARMOR] > 0 ) { new gAP = ARMOR_VALUE / ARMOR_LEVELS * gLevel[id][ARMOR]; if( gAP > 0 ) { cs_set_user_armor(id, gAP, CS_ARMOR_KEVLAR); } else if( gAP >= 100 ) { cs_set_user_armor(id, gAP, CS_ARMOR_VESTHELM); } } } }
public eRound_start() { //Bunc of variables new iPlayers[32], iNum, iPid; //Get all players get_players( iPlayers, iNum, "a" ); //Browse through all players for( new i; i < iNum; i++ ) { iPid = iPlayers[i]; //Enable respawn g_iRevivedOnce[iPid] = false; } }
public Save(id) { static data[256]; new len = formatex(data, sizeof(data) - 1, "%i", gXP[id]); new gAuthID[32]; get_user_authid(id, gAuthID, charsmax(gAuthID)); for( new iItem = 0; iItem < gItems; iItem++ ) { len += formatex(data[len], sizeof(data) - len - 1, " %i", gLevel[id][iItem]); } nvault_set(g_vault, gAuthID, data); /* For TotalXP Top */ new vaultdata[11]; formatex(vaultdata, 10, "%i", gXPTotal[id]); nvault_set(gTopVault, gAuthID, vaultdata); new szName[32]; get_user_name(id, szName, 31); nvault_set(gNameVault, gAuthID, szName); }
public Load(id) { static data[256], timestamp; new gAuthID[32]; get_user_authid(id, gAuthID, charsmax(gAuthID)); if( nvault_lookup(g_vault, gAuthID, data, sizeof(data) - 1, timestamp) ) { ParseLoadData(id, data); } else { Print(id, "First time here..."); } /* For TotalXP Top */ gXPTotal[id] = nvault_get(gTopVault, gAuthID); }
ParseLoadData(id, data[256]) { static num[6]; strbreak(data, num, sizeof(num) - 1, data, sizeof(data) - 1); gXP[id] = str_to_num(num); for( new iItem = 0; iItem < gItems; iItem++ ) { strbreak(data, num, sizeof(num) - 1, data, sizeof(data) - 1); gLevel[id][iItem] = clamp(str_to_num(num), 0, gItemsLevels[iItem]); } }
SortTopPlayers( &Array:aNames, &Array:aSteamIDs, &Array:aXPs ) { aNames = ArrayCreate( 32 ); aSteamIDs = ArrayCreate( 35 ); aXPs = ArrayCreate( 1 ); new hVault = nvault_util_open( "HNSYenModTop" ); new iCount = nvault_util_count( hVault ); new iPos; new szSteamID[ 35 ], szXP[ 11 ], iTimeStamp, szName[ 32 ]; for( new i = 0; i < iCount; i++ ) { iPos = nvault_util_read( hVault, iPos, szSteamID, charsmax( szSteamID ), szXP, charsmax( szXP ), iTimeStamp ); nvault_get( gNameVault, szSteamID, szName, charsmax( szName ) ); ArrayPushString( aNames, szName ); ArrayPushString( aSteamIDs, szSteamID ); ArrayPushCell( aXPs, str_to_num( szXP ) ); } nvault_util_close( hVault ); new iXP; for( new i = 0, j; i < ( iCount - 1 ); i++ ) { iXP = ArrayGetCell( aXPs, i ); for( j = i + 1; j < iCount; j++ ) { if( iXP < ArrayGetCell( aXPs, j ) ) { ArraySwap( aNames, i, j ); ArraySwap( aSteamIDs, i, j ); ArraySwap( aXPs, i, j ); i--; break; } } } return iCount; }
bool:IsPlayer(id) { if( 1 <= id <= g_players ) { return true; }
return false; } bool:XPReady(victim, killer) { if( IsPlayer(killer) && is_user_alive(killer) && is_user_connected(killer) && victim != killer && cs_get_user_team(killer) != cs_get_user_team(victim) ) { return true; }
return false; }
stock Print(id, const sMsg[], any:...) { static i; i = id ? id : get_Player(); if( !i ) return; new sMessage[256]; new len = formatex(sMessage, sizeof(sMessage) - 1, "^x04[%s]^x03 ", PLUGIN_PREFIX); vformat(sMessage[len], sizeof(sMessage) - 1 - len, sMsg, 3); sMessage[192] = '^0'; static msgid_SayText; if( !msgid_SayText ) msgid_SayText = get_user_msgid("SayText"); new const team_Names[][] = { "", "TERRORIST", "CT", "SPECTATOR" }; new sTeam = get_user_team(i); team_Info(i, id, team_Names[0]); message_begin(id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, msgid_SayText, _, id); write_byte(i); write_string(sMessage); message_end(); team_Info(i, id, team_Names[sTeam]); }
stock get_Player() { for( new id = 1; id <= get_maxplayers(); id++ ) { return id; } return 0; }
stock team_Info(receiver, sender, sTeam[]) { static msgid_TeamInfo; if( !msgid_TeamInfo ) msgid_TeamInfo = get_user_msgid("TeamInfo"); message_begin(sender ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, msgid_TeamInfo, _, sender); write_byte(receiver); write_string(sTeam); message_end(); }
Code:
Welcome to the AMX Mod X 1.8.1-300 Compiler.
Copyright (c) 1997-2006 ITB CompuPhase, AMX Mod X Team
Error: Expected token: ";", but found "[" on line 384
Error: Invalid expression, assumed zero on line 384
Warning: Expression has no effect on line 384
Error: Expected token: ";", but found "]" on line 384
Error: Too many error messages on one line on line 384
Compilation aborted.
4 Errors.
Could not locate output file C:\HLServer\cstrike\addons\amxmodx\scripting\YenMod.amx (compile failed).
Last edited by mammapappa; 12-28-2010 at 17:35.
|
|