DeathChaos25

fakezoey all 8 survivors

Nov 16th, 2015
302
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.86 KB | None | 0 0
  1. #pragma semicolon           1
  2. #include <sourcemod>
  3. #include <sdktools>
  4.  
  5. #define MODEL_FRANCIS       "models/survivors/survivor_biker.mdl"
  6. #define MODEL_LOUIS         "models/survivors/survivor_manager.mdl"
  7. #define MODEL_ZOEY          "models/survivors/survivor_teenangst.mdl"
  8. #define MODEL_BILL          "models/survivors/survivor_namvet.mdl"
  9. #define MODEL_NICK          "models/survivors/survivor_gambler.mdl"
  10. #define MODEL_COACH         "models/survivors/survivor_coach.mdl"
  11. #define MODEL_ROCHELLE      "models/survivors/survivor_producer.mdl"
  12. #define MODEL_ELLIS         "models/survivors/survivor_mechanic.mdl"
  13. #define MODEL_STRINGLENGTH  64
  14. #define SURVIVOR_COUNT      8
  15.  
  16. #define TEST_DEBUG          0
  17. #define TEST_DEBUG_LOG      0
  18.  
  19.  
  20. public OnPluginStart()
  21. {
  22.     decl String:s_Game[12];
  23.     GetGameFolderName(s_Game, sizeof(s_Game));
  24.     if (!StrEqual(s_Game, "left4dead2"))
  25.         SetFailState("supports Left 4 Dead 2 only!");
  26.    
  27.     HookEvent("item_pickup"/*"*/, EventItemPickup);
  28.    
  29.     InitArray();
  30. }
  31.  
  32. public OnMapStart()
  33. {
  34.     PrecacheModel(MODEL_FRANCIS, true);
  35.     PrecacheModel(MODEL_LOUIS, true);
  36.     PrecacheModel(MODEL_ZOEY, true);
  37.     PrecacheModel(MODEL_BILL, true);
  38.     PrecacheModel(MODEL_NICK, true);
  39.     PrecacheModel(MODEL_COACH, true);
  40.     PrecacheModel(MODEL_ROCHELLE, true);
  41.     PrecacheModel(MODEL_ELLIS, true);
  42. }
  43.  
  44. enum data
  45. {
  46.     bool:isPresent,
  47.         survivorChar,
  48.     String:characterModel[MODEL_STRINGLENGTH]
  49. }
  50.  
  51. static characterArray[SURVIVOR_COUNT][data];
  52.  
  53. InitArray()
  54. {
  55.     characterArray[0][survivorChar] = 0;
  56.     strcopy(characterArray[0][characterModel], MODEL_STRINGLENGTH, MODEL_NICK);
  57.     characterArray[1][survivorChar] = 1;
  58.     strcopy(characterArray[1][characterModel], MODEL_STRINGLENGTH, MODEL_ROCHELLE);
  59.     characterArray[2][survivorChar] = 2;
  60.     strcopy(characterArray[2][characterModel], MODEL_STRINGLENGTH, MODEL_COACH);
  61.     characterArray[3][survivorChar] = 3;
  62.     strcopy(characterArray[3][characterModel], MODEL_STRINGLENGTH, MODEL_ELLIS);
  63.     characterArray[4][survivorChar] = 4;
  64.     strcopy(characterArray[4][characterModel], MODEL_STRINGLENGTH, MODEL_BILL);
  65.     characterArray[5][survivorChar] = 0;
  66.     strcopy(characterArray[5][characterModel], MODEL_STRINGLENGTH, MODEL_ZOEY);
  67.     characterArray[6][survivorChar] = 6;
  68.     strcopy(characterArray[6][characterModel], MODEL_STRINGLENGTH, MODEL_FRANCIS);
  69.     characterArray[7][survivorChar] = 7;
  70.     strcopy(characterArray[7][characterModel], MODEL_STRINGLENGTH, MODEL_LOUIS);
  71. }
  72.  
  73. public Action:EventItemPickup(Handle:event, const String:eventname[], bool:b_DontBroadcast)
  74. {
  75.     new client = GetClientOfUserId(GetEventInt(event, "userid"));
  76.    
  77.     CreateTimer(6.0, delayedCheck, client);
  78. }
  79.  
  80. public Action:delayedCheck(Handle:timer, any:client)
  81. {
  82.     if (client > 0 && IsClientInGame(client) && GetClientTeam(client) == 2)
  83.     {
  84.         CheckPresentModels();
  85.     }
  86. }
  87.  
  88. CheckPresentModels()
  89. {
  90.     DebugPrintToAll("AllSurvivors: Player spawned 6 seconds ago, checking all models now");
  91.     for (new i = 0; i < SURVIVOR_COUNT; i++)
  92.     {
  93.         characterArray[i][isPresent] = false;
  94.     }
  95.  
  96.     decl String:curModel[MODEL_STRINGLENGTH];
  97.     for (new i = 1; i <= MaxClients; i++)
  98.     {
  99.         if (IsClientInGame(i)
  100.         && GetClientTeam(i) == 2)
  101.         {
  102.             GetClientModel(i, curModel, sizeof(curModel));
  103.             new curSurvivor = getIntFromModel(curModel);
  104.             DebugPrintToAll("AllSurvivors: Spots player %N wearing %i, model %s", i, curSurvivor, curModel);
  105.             if (curSurvivor >= 0 && !characterArray[curSurvivor][isPresent])
  106.             {
  107.                 characterArray[curSurvivor][isPresent] = true;
  108.                 DebugPrintToAll("AllSurvivors: player %N is an original!", i);
  109.             }
  110.             else if (curSurvivor >= 0 && characterArray[curSurvivor][isPresent] && areCharactersFree())
  111.             {
  112.                 new setSurvivor = getFreeSurvivor();
  113.                 if (setSurvivor >= 0)
  114.                 {
  115.                     DebugPrintToAll("AllSurvivors: Thinks %N should rather be %i, setting model %s", i, setSurvivor, characterArray[setSurvivor][characterModel]);
  116.                     SetEntityModel(i, characterArray[setSurvivor][characterModel]);
  117.                     SetEntProp(i, Prop_Send, "m_survivorCharacter", characterArray[setSurvivor][survivorChar]);
  118.                 }
  119.             }
  120.         }
  121.     }
  122. }
  123.  
  124. getIntFromModel(const String:model[])
  125. {
  126.     for (new i = 0; i < SURVIVOR_COUNT; i++)
  127.     {
  128.         if (StrEqual(model, characterArray[i][characterModel]))
  129.         {
  130.             return i;
  131.         }
  132.     }
  133.    
  134.     return -1;
  135. }
  136.  
  137. getFreeSurvivor()
  138. {
  139.     for (new i = 0; i < SURVIVOR_COUNT; i++)
  140.     {
  141.         if (!characterArray[i][isPresent])
  142.         {
  143.             return i;
  144.         }
  145.     }
  146.     return -1;
  147. }
  148.  
  149. bool:areCharactersFree()
  150. {
  151.     for (new i = 0; i < SURVIVOR_COUNT; i++)
  152.     {
  153.         if (!characterArray[i][isPresent])
  154.         {
  155.             return true;
  156.         }
  157.     }
  158.     return false;
  159. }
  160.  
  161. stock DebugPrintToAll(const String:format[], any:...)
  162. {
  163.     #if (TEST_DEBUG || TEST_DEBUG_LOG)
  164.     decl String:buffer[256];
  165.    
  166.     VFormat(buffer, sizeof(buffer), format, 2);
  167.    
  168.     #if TEST_DEBUG
  169.     PrintToChatAll("[8SURV] %s", buffer);
  170.     PrintToConsole(0, "[8SURV] %s", buffer);
  171.     #endif
  172.    
  173.     LogMessage("%s", buffer);
  174.     #else
  175.     //suppress "format" never used warning
  176.     if(format[0])
  177.         return;
  178.     else
  179.         return;
  180.     #endif
  181. }
Advertisement
Add Comment
Please, Sign In to add comment